MDL-29538 core_condition: initial commit to add support for making things conditional on user profile fields

This commit is contained in:
Mark Nelson 2011-09-26 21:20:17 +08:00
parent 6be7840ce6
commit 76af15bb4c
11 changed files with 399 additions and 10 deletions

View file

@ -1111,6 +1111,7 @@ function get_array_of_activities($courseid) {
condition_info::fill_availability_conditions($rawmods[$seq]);
$mod[$seq]->conditionscompletion = $rawmods[$seq]->conditionscompletion;
$mod[$seq]->conditionsgrade = $rawmods[$seq]->conditionsgrade;
$mod[$seq]->conditionsfield = $rawmods[$seq]->conditionsfield;
}
$modname = $mod[$seq]->mod;

View file

@ -259,6 +259,15 @@ abstract class moodleform_mod extends moodleform {
$num++;
}
$num=0;
foreach($fullcm->conditionsfield as $field=>$details) {
$groupelements=$mform->getElement('conditionfieldgroup['.$num.']')->getElements();
$groupelements[0]->setValue($field);
$groupelements[1]->setValue(is_null($details->operator)?'':$details->operator);
$groupelements[2]->setValue(is_null($details->value)?'':($details->value));
$num++;
}
if ($completion->is_enabled()) {
$num=0;
foreach($fullcm->conditionscompletion as $othercmid=>$state) {
@ -471,6 +480,8 @@ abstract class moodleform_mod extends moodleform {
}
if (!empty($CFG->enableavailability)) {
// String used by conditions
$strnone = get_string('none','condition');
// Conditional availability
// Available from/to defaults to midnight because then the display
@ -504,7 +515,7 @@ abstract class moodleform_mod extends moodleform {
$gradeoptions[$id] = $item->get_name();
}
asort($gradeoptions);
$gradeoptions = array(0=>get_string('none','condition'))+$gradeoptions;
$gradeoptions = array(0=>$strnone)+$gradeoptions;
$grouparray = array();
$grouparray[] =& $mform->createElement('select','conditiongradeitemid','',$gradeoptions);
@ -522,14 +533,34 @@ abstract class moodleform_mod extends moodleform {
$ci = new condition_info($this->_cm, CONDITION_MISSING_EXTRATABLE);
$this->_cm = $ci->get_full_course_module();
$count = count($this->_cm->conditionsgrade)+1;
$fieldcount = count($this->_cm->conditionsfield)+1;
} else {
$count = 1;
$fieldcount = 1;
}
$this->repeat_elements(array($group), $count, array(), 'conditiongraderepeats', 'conditiongradeadds', 2,
get_string('addgrades', 'condition'), true);
$mform->addHelpButton('conditiongradegroup[0]', 'gradecondition', 'condition');
// Conditions based on user fields
$operators = condition_info::get_condition_user_field_operators();
$useroptions = condition_info::get_condition_user_fields();
asort($useroptions);
$useroptions = array(0=>$strnone)+$useroptions;
$grouparray = array();
$grouparray[] =& $mform->createElement('select','conditionfield','',$useroptions);
$grouparray[] =& $mform->createElement('select', 'conditionfieldoperator','',$operators);
$grouparray[] =& $mform->createElement('text', 'conditionfieldvalue');
$mform->setType('conditionfieldvalue',PARAM_RAW);
$group = $mform->createElement('group','conditionfieldgroup',
get_string('userfield', 'condition'),$grouparray);
$this->repeat_elements(array($group), $fieldcount, array(), 'conditionfieldrepeats', 'conditionfieldadds', 2,
get_string('adduserfields', 'condition'), true);
$mform->addHelpButton('conditionfieldgroup[0]', 'userfield', 'condition');
// Conditions based on completion
$completion = new completion_info($COURSE);
if ($completion->is_enabled()) {
@ -544,7 +575,7 @@ abstract class moodleform_mod extends moodleform {
}
}
asort($completionoptions);
$completionoptions = array(0=>get_string('none','condition'))+$completionoptions;
$completionoptions = array(0=>$strnone)+$completionoptions;
$completionvalues=array(
COMPLETION_COMPLETE=>get_string('completion_complete','condition'),