public function definition_after_data() { global $CFG, $DB; $mform = $this->_form; $course = $this->_customdata['course']; $context = context_course::instance($course->id); if (!empty($CFG->enableavailability)) { $mform->addElement('header', 'availabilityconditions', get_string('availabilityconditions', 'condition')); $mform->setExpanded('availabilityconditions', false); // String used by conditions more than once $strcondnone = get_string('none', 'condition'); // Grouping conditions - only if grouping is enabled at site level if (!empty($CFG->enablegroupmembersonly)) { $options = array(); if ($groupings = $DB->get_records('groupings', array('courseid' => $course->id))) { foreach ($groupings as $grouping) { $options[$grouping->id] = format_string($grouping->name, true, array('context' => $context)); } } collatorlib::asort($options); $options = array(0 => get_string('none')) + $options; $mform->addElement('select', 'groupingid', get_string('groupingsection', 'group'), $options); $mform->addHelpButton('groupingid', 'groupingsection', 'group'); } // Available from/to defaults to midnight because then the display // will be nicer where it tells users when they can access it (it // shows only the date and not time). $date = usergetdate(time()); $midnight = make_timestamp($date['year'], $date['mon'], $date['mday']); // Date and time conditions. $mform->addElement('date_time_selector', 'availablefrom', get_string('availablefrom', 'condition'), array('optional' => true, 'defaulttime' => $midnight)); $mform->addElement('date_time_selector', 'availableuntil', get_string('availableuntil', 'condition'), array('optional' => true, 'defaulttime' => $midnight)); // Conditions based on grades $gradeoptions = array(); $items = grade_item::fetch_all(array('courseid' => $course->id)); $items = $items ? $items : array(); foreach ($items as $id => $item) { $gradeoptions[$id] = $item->get_name(); } asort($gradeoptions); $gradeoptions = array(0 => $strcondnone) + $gradeoptions; $grouparray = array(); $grouparray[] = $mform->createElement('select', 'conditiongradeitemid', '', $gradeoptions); $grouparray[] = $mform->createElement('static', '', '', ' ' . get_string('grade_atleast', 'condition') . ' '); $grouparray[] = $mform->createElement('text', 'conditiongrademin', '', array('size' => 3)); $grouparray[] = $mform->createElement('static', '', '', '% ' . get_string('grade_upto', 'condition') . ' '); $grouparray[] = $mform->createElement('text', 'conditiongrademax', '', array('size' => 3)); $grouparray[] = $mform->createElement('static', '', '', '%'); $group = $mform->createElement('group', 'conditiongradegroup', get_string('gradecondition', 'condition'), $grouparray); // Get full version (including condition info) of section object $ci = new condition_info_section($this->_customdata['cs']); $fullcs = $ci->get_full_section(); $count = count($fullcs->conditionsgrade) + 1; // Grade conditions $this->repeat_elements(array($group), $count, array('conditiongradegroup[conditiongrademin]' => array('type' => PARAM_RAW), 'conditiongradegroup[conditiongrademax]' => array('type' => PARAM_RAW)), '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(array('context' => $context)); asort($useroptions); $useroptions = array(0 => $strcondnone) + $useroptions; $grouparray = array(); $grouparray[] =& $mform->createElement('select', 'conditionfield', '', $useroptions); $grouparray[] =& $mform->createElement('select', 'conditionfieldoperator', '', $operators); $grouparray[] =& $mform->createElement('text', 'conditionfieldvalue'); $group = $mform->createElement('group', 'conditionfieldgroup', get_string('userfield', 'condition'), $grouparray); $fieldcount = count($fullcs->conditionsfield) + 1; $this->repeat_elements(array($group), $fieldcount, array('conditionfieldgroup[conditionfieldvalue]' => array('type' => PARAM_RAW)), '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()) { $completionoptions = array(); $modinfo = get_fast_modinfo($course); foreach ($modinfo->cms as $id => $cm) { // Add each course-module if it: // (a) has completion turned on // (b) does not belong to current course-section if ($cm->completion && $fullcs->id != $cm->section) { $completionoptions[$id] = $cm->name; } } asort($completionoptions); $completionoptions = array(0 => $strcondnone) + $completionoptions; $completionvalues = array(COMPLETION_COMPLETE => get_string('completion_complete', 'condition'), COMPLETION_INCOMPLETE => get_string('completion_incomplete', 'condition'), COMPLETION_COMPLETE_PASS => get_string('completion_pass', 'condition'), COMPLETION_COMPLETE_FAIL => get_string('completion_fail', 'condition')); $grouparray = array(); $grouparray[] = $mform->createElement('select', 'conditionsourcecmid', '', $completionoptions); $grouparray[] = $mform->createElement('select', 'conditionrequiredcompletion', '', $completionvalues); $group = $mform->createElement('group', 'conditioncompletiongroup', get_string('completioncondition', 'condition'), $grouparray); $count = count($fullcs->conditionscompletion) + 1; $this->repeat_elements(array($group), $count, array(), 'conditioncompletionrepeats', 'conditioncompletionadds', 2, get_string('addcompletions', 'condition'), true); $mform->addHelpButton('conditioncompletiongroup[0]', 'completionconditionsection', 'condition'); } // Availability conditions - set up form values if (!empty($CFG->enableavailability)) { $num = 0; foreach ($fullcs->conditionsgrade as $gradeitemid => $minmax) { $groupelements = $mform->getElement('conditiongradegroup[' . $num . ']')->getElements(); $groupelements[0]->setValue($gradeitemid); $groupelements[2]->setValue(is_null($minmax->min) ? '' : format_float($minmax->min, 5, true, true)); $groupelements[4]->setValue(is_null($minmax->max) ? '' : format_float($minmax->max, 5, true, true)); $num++; } $num = 0; foreach ($fullcs->conditionsfield as $fieldid => $data) { $groupelements = $mform->getElement('conditionfieldgroup[' . $num . ']')->getElements(); $groupelements[0]->setValue($fieldid); $groupelements[1]->setValue(is_null($data->operator) ? '' : $data->operator); $groupelements[2]->setValue(is_null($data->value) ? '' : $data->value); $num++; } if ($completion->is_enabled()) { $num = 0; foreach ($fullcs->conditionscompletion as $othercmid => $state) { $groupelements = $mform->getElement('conditioncompletiongroup[' . $num . ']')->getElements(); $groupelements[0]->setValue($othercmid); $groupelements[1]->setValue($state); $num++; } } } // Do we display availability info to students? $showhide = array(CONDITION_STUDENTVIEW_SHOW => get_string('showavailabilitysection_show', 'condition'), CONDITION_STUDENTVIEW_HIDE => get_string('showavailabilitysection_hide', 'condition')); $mform->addElement('select', 'showavailability', get_string('showavailabilitysection', 'condition'), $showhide); } $this->add_action_buttons(); }
public function test_section_add_and_remove() { global $DB; // Make course and module $courseid = $this->make_course(); $cmid = $this->make_course_module($courseid); $sectionid = $this->make_section($courseid, array($cmid)); // Check it has no conditions $test1 = new condition_info_section((object)array('id'=>$sectionid), CONDITION_MISSING_EVERYTHING); $section = $test1->get_full_section(); $this->assertEquals(array(), $section->conditionscompletion); $this->assertEquals(array(), $section->conditionsgrade); // Add conditions of each type $test1->add_completion_condition(13, 3); $this->assertEquals(array(13 => 3), $section->conditionscompletion); $test1->add_grade_condition(666, 0.4, null, true); $this->assertEquals(array(666 => (object)array('min' => 0.4, 'max' => null, 'name' => '!missing')), $section->conditionsgrade); // Check they were really added in db $test2 = new condition_info_section((object)array('id' => $sectionid), CONDITION_MISSING_EVERYTHING); $section = $test2->get_full_section(); $this->assertEquals(array(13 => 3), $section->conditionscompletion); $this->assertEquals(array(666 => (object)array('min' => 0.4, 'max' => null, 'name' => '!missing')), $section->conditionsgrade); // Wipe conditions $test2->wipe_conditions(); $this->assertEquals(array(), $section->conditionscompletion); $this->assertEquals(array(), $section->conditionsgrade); // Check they were really wiped $test3 = new condition_info_section((object)array('id' => $cmid), CONDITION_MISSING_EVERYTHING); $section = $test3->get_full_section(); $this->assertEquals(array(), $section->conditionscompletion); $this->assertEquals(array(), $section->conditionsgrade); }
/** * Same as above test but for course_sections instead of course_modules. */ public function test_section_constructor() { $generator = $this->getDataGenerator(); $course = $generator->create_course(array('numsections' => 1), array('createsections' => true)); $modinfo = get_fast_modinfo($course); // No ID. try { $test = new condition_info_section((object) array()); $this->fail(); } catch (coding_exception $e) { // Do nothing. $this->assertDebuggingCalled(); } // Get actual cm_info for comparison. $realsection = $modinfo->get_section_info(1); // No other data. $test = new condition_info_section((object) array('id' => $realsection->id)); $this->assertDebuggingCalled(); $this->assertEquals($realsection, $test->get_full_section()); $this->assertDebuggingCalled(); // Course id. $test = new condition_info_section((object) array('id' => $realsection->id, 'course' => $course->id)); $this->assertDebuggingCalled(); $this->assertEquals($realsection, $test->get_full_section()); $this->assertDebuggingCalled(); // Full object. $test = new condition_info_section($realsection); $this->assertDebuggingCalled(); $this->assertEquals($realsection, $test->get_full_section()); $this->assertDebuggingCalled(); }
public function definition_after_data() { global $CFG, $DB; $mform = $this->_form; $course = $this->_customdata['course']; if (!empty($CFG->enableavailability)) { // Grouping conditions - only if grouping is enabled at site level if (!empty($CFG->enablegroupmembersonly)) { $options = array(); $options[0] = get_string('none'); if ($groupings = $DB->get_records('groupings', array('courseid' => $course->id))) { foreach ($groupings as $grouping) { $context = context_course::instance($course->id); $options[$grouping->id] = format_string($grouping->name, true, array('context' => $context)); } } $mform->addElement('header', '', get_string('availabilityconditions', 'condition')); $mform->addElement('select', 'groupingid', get_string('groupingsection', 'group'), $options); $mform->addHelpButton('groupingid', 'groupingsection', 'group'); } // Date and time conditions $mform->addElement('date_time_selector', 'availablefrom', get_string('availablefrom', 'condition'), array('optional' => true)); $mform->addElement('date_time_selector', 'availableuntil', get_string('availableuntil', 'condition'), array('optional' => true)); // Conditions based on grades $gradeoptions = array(); $items = grade_item::fetch_all(array('courseid' => $course->id)); $items = $items ? $items : array(); foreach ($items as $id => $item) { $gradeoptions[$id] = $item->get_name(); } asort($gradeoptions); $gradeoptions = array(0 => get_string('none', 'condition')) + $gradeoptions; $grouparray = array(); $grouparray[] = $mform->createElement('select', 'conditiongradeitemid', '', $gradeoptions); $grouparray[] = $mform->createElement('static', '', '', ' ' . get_string('grade_atleast', 'condition') . ' '); $grouparray[] = $mform->createElement('text', 'conditiongrademin', '', array('size' => 3)); $grouparray[] = $mform->createElement('static', '', '', '% ' . get_string('grade_upto', 'condition') . ' '); $grouparray[] = $mform->createElement('text', 'conditiongrademax', '', array('size' => 3)); $grouparray[] = $mform->createElement('static', '', '', '%'); $group = $mform->createElement('group', 'conditiongradegroup', get_string('gradecondition', 'condition'), $grouparray); // Get full version (including condition info) of section object $ci = new condition_info_section($this->_customdata['cs']); $fullcs = $ci->get_full_section(); $count = count($fullcs->conditionsgrade) + 1; // Grade conditions $this->repeat_elements(array($group), $count, array(), 'conditiongraderepeats', 'conditiongradeadds', 2, get_string('addgrades', 'condition'), true); $mform->addHelpButton('conditiongradegroup[0]', 'gradecondition', 'condition'); // Conditions based on completion $completion = new completion_info($course); if ($completion->is_enabled()) { $completionoptions = array(); $modinfo = get_fast_modinfo($course); foreach ($modinfo->cms as $id => $cm) { // Add each course-module if it: // (a) has completion turned on // (b) does not belong to current course-section if ($cm->completion && $fullcs->id != $cm->section) { $completionoptions[$id] = $cm->name; } } asort($completionoptions); $completionoptions = array(0 => get_string('none', 'condition')) + $completionoptions; $completionvalues = array(COMPLETION_COMPLETE => get_string('completion_complete', 'condition'), COMPLETION_INCOMPLETE => get_string('completion_incomplete', 'condition'), COMPLETION_COMPLETE_PASS => get_string('completion_pass', 'condition'), COMPLETION_COMPLETE_FAIL => get_string('completion_fail', 'condition')); $grouparray = array(); $grouparray[] = $mform->createElement('select', 'conditionsourcecmid', '', $completionoptions); $grouparray[] = $mform->createElement('select', 'conditionrequiredcompletion', '', $completionvalues); $group = $mform->createElement('group', 'conditioncompletiongroup', get_string('completioncondition', 'condition'), $grouparray); $count = count($fullcs->conditionscompletion) + 1; $this->repeat_elements(array($group), $count, array(), 'conditioncompletionrepeats', 'conditioncompletionadds', 2, get_string('addcompletions', 'condition'), true); $mform->addHelpButton('conditioncompletiongroup[0]', 'completionconditionsection', 'condition'); } // Availability conditions - set up form values if (!empty($CFG->enableavailability)) { $num = 0; foreach ($fullcs->conditionsgrade as $gradeitemid => $minmax) { $groupelements = $mform->getElement('conditiongradegroup[' . $num . ']')->getElements(); $groupelements[0]->setValue($gradeitemid); $groupelements[2]->setValue(is_null($minmax->min) ? '' : format_float($minmax->min, 5, true, true)); $groupelements[4]->setValue(is_null($minmax->max) ? '' : format_float($minmax->max, 5, true, true)); $num++; } if ($completion->is_enabled()) { $num = 0; foreach ($fullcs->conditionscompletion as $othercmid => $state) { $groupelements = $mform->getElement('conditioncompletiongroup[' . $num . ']')->getElements(); $groupelements[0]->setValue($othercmid); $groupelements[1]->setValue($state); $num++; } } } // Do we display availability info to students? $showhide = array(CONDITION_STUDENTVIEW_SHOW => get_string('showavailabilitysection_show', 'condition'), CONDITION_STUDENTVIEW_HIDE => get_string('showavailabilitysection_hide', 'condition')); $mform->addElement('select', 'showavailability', get_string('showavailabilitysection', 'condition'), $showhide); $mform->setDefault('showavailability', $this->_customdata['showavailability']); } $this->add_action_buttons(); }