mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 00:46:50 +02:00
MDL-44070 Conditional availability enhancements (6): core changes
Changes core code to use new API instead of the old one when checking user access to activities and sections. Includes changes to other libraries that are necessary after adding the availability system and removing old conditional tables etc.
This commit is contained in:
parent
6a601097a0
commit
8d1f33e122
14 changed files with 393 additions and 402 deletions
|
@ -165,10 +165,9 @@ class core_course_external extends external_api {
|
|||
//user that can view hidden module should know about the visibility
|
||||
$module['visible'] = $cm->visible;
|
||||
|
||||
//availability date (also send to user who can see hidden module when the showavailabilyt is ON)
|
||||
if ($canupdatecourse or ($CFG->enableavailability && $canviewhidden && $cm->showavailability)) {
|
||||
$module['availablefrom'] = $cm->availablefrom;
|
||||
$module['availableuntil'] = $cm->availableuntil;
|
||||
// Availability date (also send to user who can see hidden module).
|
||||
if ($CFG->enableavailability && ($canviewhidden || $canupdatecourse)) {
|
||||
$module['availability'] = $cm->availability;
|
||||
}
|
||||
|
||||
$baseurl = 'webservice/pluginfile.php';
|
||||
|
@ -223,8 +222,7 @@ class core_course_external extends external_api {
|
|||
'modicon' => new external_value(PARAM_URL, 'activity icon url'),
|
||||
'modname' => new external_value(PARAM_PLUGIN, 'activity module type'),
|
||||
'modplural' => new external_value(PARAM_TEXT, 'activity module plural name'),
|
||||
'availablefrom' => new external_value(PARAM_INT, 'module availability start date', VALUE_OPTIONAL),
|
||||
'availableuntil' => new external_value(PARAM_INT, 'module availability en date', VALUE_OPTIONAL),
|
||||
'availability' => new external_value(PARAM_RAW, 'module availability settings', VALUE_OPTIONAL),
|
||||
'indent' => new external_value(PARAM_INT, 'number of identation in the site'),
|
||||
'contents' => new external_multiple_structure(
|
||||
new external_single_structure(
|
||||
|
|
|
@ -1056,16 +1056,8 @@ function get_array_of_activities($courseid) {
|
|||
$rawmods[$seq]->completiongradeitemnumber;
|
||||
$mod[$seq]->completionview = $rawmods[$seq]->completionview;
|
||||
$mod[$seq]->completionexpected = $rawmods[$seq]->completionexpected;
|
||||
$mod[$seq]->availablefrom = $rawmods[$seq]->availablefrom;
|
||||
$mod[$seq]->availableuntil = $rawmods[$seq]->availableuntil;
|
||||
$mod[$seq]->showavailability = $rawmods[$seq]->showavailability;
|
||||
$mod[$seq]->showdescription = $rawmods[$seq]->showdescription;
|
||||
if (!empty($CFG->enableavailability)) {
|
||||
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;
|
||||
}
|
||||
$mod[$seq]->availability = $rawmods[$seq]->availability;
|
||||
|
||||
$modname = $mod[$seq]->mod;
|
||||
$functionname = $modname."_get_coursemodule_info";
|
||||
|
@ -1139,8 +1131,7 @@ function get_array_of_activities($courseid) {
|
|||
// 'empty'. This list corresponds to code in the cm_info constructor.
|
||||
foreach (array('idnumber', 'groupmode', 'groupingid', 'groupmembersonly',
|
||||
'indent', 'completion', 'extra', 'extraclasses', 'iconurl', 'onclick', 'content',
|
||||
'icon', 'iconcomponent', 'customdata', 'showavailability', 'availablefrom',
|
||||
'availableuntil', 'conditionscompletion', 'conditionsgrade',
|
||||
'icon', 'iconcomponent', 'customdata', 'availability',
|
||||
'completionview', 'completionexpected', 'score', 'showdescription')
|
||||
as $property) {
|
||||
if (property_exists($mod[$seq], $property) &&
|
||||
|
@ -1698,8 +1689,6 @@ function course_delete_module($cmid) {
|
|||
// features are not turned on, in case they were turned on previously (these will be
|
||||
// very quick on an empty table).
|
||||
$DB->delete_records('course_modules_completion', array('coursemoduleid' => $cm->id));
|
||||
$DB->delete_records('course_modules_availability', array('coursemoduleid'=> $cm->id));
|
||||
$DB->delete_records('course_modules_avail_fields', array('coursemoduleid' => $cm->id));
|
||||
$DB->delete_records('course_completion_criteria', array('moduleinstance' => $cm->id,
|
||||
'criteriatype' => COMPLETION_CRITERIA_TYPE_ACTIVITY));
|
||||
|
||||
|
|
|
@ -220,9 +220,10 @@ class core_course_courselib_testcase extends advanced_testcase {
|
|||
$moduleinfo->completionexpected = time() + (7 * 24 * 3600);
|
||||
|
||||
// Conditional activity.
|
||||
$moduleinfo->availablefrom = time();
|
||||
$moduleinfo->availableuntil = time() + (7 * 24 * 3600);
|
||||
$moduleinfo->showavailability = CONDITION_STUDENTVIEW_SHOW;
|
||||
$moduleinfo->availability = '{"op":"&","showc":[true,true],"c":[' .
|
||||
'{"type":"date","d":">=","t":' . time() . '},' .
|
||||
'{"type":"date","d":"<","t":' . (time() + (7 * 24 * 3600)) . '}' .
|
||||
']}';
|
||||
$coursegradeitem = grade_item::fetch_course_item($moduleinfo->course); //the activity will become available only when the user reach some grade into the course itself.
|
||||
$moduleinfo->conditiongradegroup = array(array('conditiongradeitemid' => $coursegradeitem->id, 'conditiongrademin' => 10, 'conditiongrademax' => 80));
|
||||
$moduleinfo->conditionfieldgroup = array(array('conditionfield' => 'email', 'conditionfieldoperator' => OP_CONTAINS, 'conditionfieldvalue' => '@'));
|
||||
|
@ -280,9 +281,7 @@ class core_course_courselib_testcase extends advanced_testcase {
|
|||
$this->assertEquals($moduleinfo->completionview, $dbcm->completionview);
|
||||
$this->assertEquals($moduleinfo->completiongradeitemnumber, $dbcm->completiongradeitemnumber);
|
||||
$this->assertEquals($moduleinfo->completionexpected, $dbcm->completionexpected);
|
||||
$this->assertEquals($moduleinfo->availablefrom, $dbcm->availablefrom);
|
||||
$this->assertEquals($moduleinfo->availableuntil, $dbcm->availableuntil);
|
||||
$this->assertEquals($moduleinfo->showavailability, $dbcm->showavailability);
|
||||
$this->assertEquals($moduleinfo->availability, $dbcm->availability);
|
||||
$this->assertEquals($moduleinfo->showdescription, $dbcm->showdescription);
|
||||
$this->assertEquals($moduleinfo->groupmode, $dbcm->groupmode);
|
||||
$this->assertEquals($moduleinfo->cmidnumber, $dbcm->idnumber);
|
||||
|
@ -298,25 +297,6 @@ class core_course_courselib_testcase extends advanced_testcase {
|
|||
$this->assertEquals($moduleinfo->intro, $dbmodinstance->intro);
|
||||
$this->assertEquals($moduleinfo->introformat, $dbmodinstance->introformat);
|
||||
|
||||
// Common values when conditional activity is enabled.
|
||||
foreach ($moduleinfo->conditionfieldgroup as $fieldgroup) {
|
||||
$isfieldgroupsaved = $DB->count_records('course_modules_avail_fields', array('coursemoduleid' => $dbcm->id,
|
||||
'userfield' => $fieldgroup['conditionfield'], 'operator' => $fieldgroup['conditionfieldoperator'],
|
||||
'value' => $fieldgroup['conditionfieldvalue']));
|
||||
$this->assertEquals(1, $isfieldgroupsaved);
|
||||
}
|
||||
foreach ($moduleinfo->conditiongradegroup as $gradegroup) {
|
||||
$isgradegroupsaved = $DB->count_records('course_modules_availability', array('coursemoduleid' => $dbcm->id,
|
||||
'grademin' => $gradegroup['conditiongrademin'], 'grademax' => $gradegroup['conditiongrademax'],
|
||||
'gradeitemid' => $gradegroup['conditiongradeitemid']));
|
||||
$this->assertEquals(1, $isgradegroupsaved);
|
||||
}
|
||||
foreach ($moduleinfo->conditioncompletiongroup as $completiongroup) {
|
||||
$iscompletiongroupsaved = $DB->count_records('course_modules_availability', array('coursemoduleid' => $dbcm->id,
|
||||
'sourcecmid' => $completiongroup['conditionsourcecmid'], 'requiredcompletion' => $completiongroup['conditionrequiredcompletion']));
|
||||
$this->assertEquals(1, $iscompletiongroupsaved);
|
||||
}
|
||||
|
||||
// Test specific to the module.
|
||||
$modulerunasserts = $modulename.'_create_run_asserts';
|
||||
$this->$modulerunasserts($moduleinfo, $dbmodinstance);
|
||||
|
@ -478,13 +458,14 @@ class core_course_courselib_testcase extends advanced_testcase {
|
|||
$moduleinfo->completionunlocked = 1;
|
||||
|
||||
// Conditional activity.
|
||||
$moduleinfo->availablefrom = time();
|
||||
$moduleinfo->availableuntil = time() + (7 * 24 * 3600);
|
||||
$moduleinfo->showavailability = CONDITION_STUDENTVIEW_SHOW;
|
||||
$coursegradeitem = grade_item::fetch_course_item($moduleinfo->course); //the activity will become available only when the user reach some grade into the course itself.
|
||||
$moduleinfo->conditiongradegroup = array(array('conditiongradeitemid' => $coursegradeitem->id, 'conditiongrademin' => 10, 'conditiongrademax' => 80));
|
||||
$moduleinfo->conditionfieldgroup = array(array('conditionfield' => 'email', 'conditionfieldoperator' => OP_CONTAINS, 'conditionfieldvalue' => '@'));
|
||||
$moduleinfo->conditioncompletiongroup = array(array('conditionsourcecmid' => $assigncm->id, 'conditionrequiredcompletion' => COMPLETION_COMPLETE)); // "conditionsourcecmid == 0" => none
|
||||
$moduleinfo->availability = '{"op":"&","showc":[true,true],"c":[' .
|
||||
'{"type":"date","d":">=","t":' . time() . '},' .
|
||||
'{"type":"date","d":"<","t":' . (time() + (7 * 24 * 3600)) . '}' .
|
||||
'{"type":"grade","id":' . $coursegradeitem->id . ',"min":10,"max":80},' .
|
||||
'{"type":"profile","sf":"email","op":"contains","v":"@"},'.
|
||||
'{"type":"completion","id":'. $assigncm->id . ',"e":' . COMPLETION_COMPLETE . '}' .
|
||||
']}';
|
||||
|
||||
// Grading and Advanced grading.
|
||||
require_once($CFG->dirroot . '/rating/lib.php');
|
||||
|
@ -533,9 +514,7 @@ class core_course_courselib_testcase extends advanced_testcase {
|
|||
$this->assertEquals($moduleinfo->completionview, $dbcm->completionview);
|
||||
$this->assertEquals($moduleinfo->completiongradeitemnumber, $dbcm->completiongradeitemnumber);
|
||||
$this->assertEquals($moduleinfo->completionexpected, $dbcm->completionexpected);
|
||||
$this->assertEquals($moduleinfo->availablefrom, $dbcm->availablefrom);
|
||||
$this->assertEquals($moduleinfo->availableuntil, $dbcm->availableuntil);
|
||||
$this->assertEquals($moduleinfo->showavailability, $dbcm->showavailability);
|
||||
$this->assertEquals($moduleinfo->availability, $dbcm->availability);
|
||||
$this->assertEquals($moduleinfo->showdescription, $dbcm->showdescription);
|
||||
$this->assertEquals($moduleinfo->groupmode, $dbcm->groupmode);
|
||||
$this->assertEquals($moduleinfo->cmidnumber, $dbcm->idnumber);
|
||||
|
@ -551,25 +530,6 @@ class core_course_courselib_testcase extends advanced_testcase {
|
|||
$this->assertEquals($moduleinfo->intro, $dbmodinstance->intro);
|
||||
$this->assertEquals($moduleinfo->introformat, $dbmodinstance->introformat);
|
||||
|
||||
// Common values when conditional activity is enabled.
|
||||
foreach ($moduleinfo->conditionfieldgroup as $fieldgroup) {
|
||||
$isfieldgroupsaved = $DB->count_records('course_modules_avail_fields', array('coursemoduleid' => $dbcm->id,
|
||||
'userfield' => $fieldgroup['conditionfield'], 'operator' => $fieldgroup['conditionfieldoperator'],
|
||||
'value' => $fieldgroup['conditionfieldvalue']));
|
||||
$this->assertEquals(1, $isfieldgroupsaved);
|
||||
}
|
||||
foreach ($moduleinfo->conditiongradegroup as $gradegroup) {
|
||||
$isgradegroupsaved = $DB->count_records('course_modules_availability', array('coursemoduleid' => $dbcm->id,
|
||||
'grademin' => $gradegroup['conditiongrademin'], 'grademax' => $gradegroup['conditiongrademax'],
|
||||
'gradeitemid' => $gradegroup['conditiongradeitemid']));
|
||||
$this->assertEquals(1, $isgradegroupsaved);
|
||||
}
|
||||
foreach ($moduleinfo->conditioncompletiongroup as $completiongroup) {
|
||||
$iscompletiongroupsaved = $DB->count_records('course_modules_availability', array('coursemoduleid' => $dbcm->id,
|
||||
'sourcecmid' => $completiongroup['conditionsourcecmid'], 'requiredcompletion' => $completiongroup['conditionrequiredcompletion']));
|
||||
$this->assertEquals(1, $iscompletiongroupsaved);
|
||||
}
|
||||
|
||||
// Test specific to the module.
|
||||
$modulerunasserts = $modulename.'_update_run_asserts';
|
||||
$this->$modulerunasserts($moduleinfo, $dbmodinstance);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue