mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 00:46:50 +02:00
MDL-29538 core_condition: initial commit to add support for making things conditional on user profile fields
This commit is contained in:
parent
6be7840ce6
commit
76af15bb4c
11 changed files with 399 additions and 10 deletions
|
@ -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');
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue