diff --git a/course_credit.module b/course_credit.module
index a3ee22b..ba7d78a 100644
--- a/course_credit.module
+++ b/course_credit.module
@@ -50,6 +50,10 @@ function course_credit_menu() {
'page arguments' => array('course_credit_type_map_form', 4),
);
+ if (module_exists('rules')) {
+ $items += rules_ui()->config_menu('admin/course/credit/types');
+ }
+
$items['admin/course/credit/types/%/delete'] = array(
'title' => 'Delete credit type',
'access arguments' => array('administer course credit'),
@@ -652,6 +656,7 @@ function theme_course_credit($variables) {
$eligible_credit = $variables['course_credit'];
$account = $variables['account'];
$node = $variables['node'];
+ $items = array();
foreach ($eligible_credit as $key => $credit_instance) {
if ($credit_instance->active) {
$item = t('@credits !title', array(
@@ -1205,7 +1210,11 @@ function course_credit_types_form() {
),
'edit' => array(
'#type' => 'markup',
- '#markup' => l('Edit', "admin/course/credit/types/$type->type/map") . ' | ' . l('Delete', "admin/course/credit/types/$type->type/delete"),
+ '#markup' => implode(' | ', array(
+ l('Edit', "admin/course/credit/types/$type->type/map"),
+ l('Conditions', "admin/course/credit/types/manage/course_credit_eligibility_{$type->type}"),
+ l('Delete', "admin/course/credit/types/$type->type/delete"),
+ )),
),
'weight' => array(
'#type' => 'weight',
@@ -1235,7 +1244,7 @@ function theme_course_credit_types_form($variables) {
// Help text.
$out .= '
' . t('These are the default settings that will be used when creating a creditable activity.') . '
';
- $headers = array('', 'Title', 'Type', 'Description', 'Min', 'Max', 'Increments', 'Variable', 'Map', 'Weight');
+ $headers = array('', 'Title', 'Type', 'Description', 'Min', 'Max', 'Increments', 'Variable', '', 'Weight');
$rows = array();
foreach (element_children($form) as $key) {
foreach (element_children($form[$key]) as $credit_type) {
@@ -1279,33 +1288,29 @@ function course_credit_types_form_submit($form, $form_state) {
*
* @param stdClass $node
* A course node object.
- * @param stdClass $user
+ * @param stdClass $account
* A user object.
*
* @return array
* An array of valid credit instances as objects, keyed by type.
*/
-function course_credit_user_credit_types($node, $user) {
+function course_credit_user_credit_types($node, $account) {
$valid_credit_instances = array();
$fallback_instance = NULL;
$fallback_credit_type = variable_get('course_credit_fallback_type', null);
- $user = user_load($user->uid, TRUE);
- $profile['user'] = $user;
+ $profile['user'] = $account;
if (module_exists('profile2')) {
$types = field_info_instances('profile2');
foreach ($types as $bundle_name => $fields) {
- $profile[$bundle_name] = profile2_load_by_user($user, $bundle_name);
+ $profile[$bundle_name] = profile2_load_by_user($account, $bundle_name);
}
}
- if (module_exists('course')) {
- $enrollment = course_enrollment_load($node, $user);
- }
$open_claim = variable_get('course_credit_open_claim', 0);
- $sql = "SELECT cct.title, cct.description, cct.type, cc.* FROM {course_credit} cc
+ $sql = "SELECT cc.* FROM {course_credit} cc
INNER JOIN {course_credit_type} cct USING (type)
WHERE nid = :nid
ORDER BY cct.weight";
@@ -1335,8 +1340,19 @@ function course_credit_user_credit_types($node, $user) {
}
}
+ if (module_exists('rules')) {
+ // Try rules.
+ $set = rules_config_load("course_credit_eligibility_{$ct_instance->type}");
+ if ($set->property('children') && $set->execute($ct_instance, $account)) {
+ // There is actually a condition. For now, to mimic previous behavior we
+ // require at least one condition before granting eligibility.
+ $valid_credit_instances[$ct_instance->type] = $ct_instance;
+ }
+ }
+
+
// Have fun!
- if (array_filter(module_invoke_all('course_credit_map', $node, $user, $mappings))) {
+ if (array_filter(module_invoke_all('course_credit_map', $node, $account, $mappings))) {
// We're just looking for true, if the user is eligible.
$valid_credit_instances[$ct_instance->type] = $ct_instance;
}
@@ -1354,7 +1370,7 @@ function course_credit_user_credit_types($node, $user) {
}
// Alter the eligible types.
- drupal_alter('course_credit_user_credit_types', $valid_credit_instances, $node, $user);
+ drupal_alter('course_credit_user_credit_types', $valid_credit_instances, $node, $account);
return $valid_credit_instances;
}
diff --git a/course_credit.rules_defaults.inc b/course_credit.rules_defaults.inc
new file mode 100644
index 0000000..be06c30
--- /dev/null
+++ b/course_credit.rules_defaults.inc
@@ -0,0 +1,20 @@
+ $credit_type) {
+ $set = rules_and(array(
+ 'course_credit' => array('type' => 'course_credit', 'label' => t('Credit instance')),
+ 'user' => array('type' => 'user', 'label' => t('User')),
+ ));
+ $set->label = t('@type eligibility', array('@type' => $credit_type->title));
+ $set->tags[] = 'course_credit';
+
+ $configs["course_credit_eligibility_$type"] = $set;
+ }
+
+ return $configs;
+}