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

@ -322,6 +322,8 @@ class backup_module_structure_step extends backup_structure_step {
$availinfo = new backup_nested_element('availability_info');
$availability = new backup_nested_element('availability', array('id'), array(
'sourcecmid', 'requiredcompletion', 'gradeitemid', 'grademin', 'grademax'));
$availability_field = new backup_nested_element('availability_field', array('id'), array(
'field', 'operator', 'value'));
// attach format plugin structure to $module element, only one allowed
$this->add_plugin_structure('format', $module, false);
@ -333,9 +335,9 @@ class backup_module_structure_step extends backup_structure_step {
// Define the tree
$module->add_child($availinfo);
$availinfo->add_child($availability);
$availinfo->add_child($availability_field);
// Set the sources
$module->set_source_sql('
SELECT cm.*, m.version, m.name AS modulename, s.id AS sectionid, s.section AS sectionnumber
FROM {course_modules} cm
@ -344,6 +346,7 @@ class backup_module_structure_step extends backup_structure_step {
WHERE cm.id = ?', array(backup::VAR_MODID));
$availability->set_source_table('course_modules_availability', array('coursemoduleid' => backup::VAR_MODID));
$availability_field->set_source_table('course_modules_availability_field', array('coursemoduleid' => backup::VAR_MODID));
// Define annotations
$module->annotate_ids('grouping', 'groupingid');

View file

@ -546,6 +546,14 @@ class restore_process_course_modules_availability extends restore_execution_step
$DB->insert_record('course_modules_availability', $availability);
}
}
// Now we need to do it for conditional field availability
$params = array('backupid' => $this->get_restoreid(), 'itemname' => 'module_availability_field');
$rs = $DB->get_recordset('backup_ids_temp', $params, '', 'itemid');
foreach($rs as $availrec) {
$availability = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'module_availability_field', $availrec->itemid)->info;
$DB->insert_record('course_modules_availability_field', $availability);
}
$rs->close();
}
}
@ -2539,6 +2547,7 @@ class restore_module_structure_step extends restore_structure_step {
$paths[] = $module;
if ($CFG->enableavailability) {
$paths[] = new restore_path_element('availability', '/module/availability_info/availability');
$paths[] = new restore_path_element('availability_fields', '/module/availability_info/availability_field');
}
// Apply for 'format' plugins optional paths at module level
@ -2632,15 +2641,23 @@ class restore_module_structure_step extends restore_structure_step {
$DB->set_field('course_sections', 'sequence', $sequence, array('id' => $data->section));
}
protected function process_availability($data) {
$data = (object)$data;
// Simply going to store the whole availability record now, we'll process
// all them later in the final task (once all actvivities have been restored)
// all them later in the final task (once all activities have been restored)
// Let's call the low level one to be able to store the whole object
$data->coursemoduleid = $this->task->get_moduleid(); // Let add the availability cmid
restore_dbops::set_backup_ids_record($this->get_restoreid(), 'module_availability', $data->id, 0, null, $data);
}
protected function process_availability_fields($data) {
$data = (object)$data;
// Simply going to store the whole availability record now, we'll process
// all them later in the final task (once all activities have been restored)
// Let's call the low level one to be able to store the whole object
$data->coursemoduleid = $this->task->get_moduleid(); // Let add the availability cmid
restore_dbops::set_backup_ids_record($this->get_restoreid(), 'module_availability_field', $data->id, 0, null, $data);
}
}
/**