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; +}