MDL-19142 assignment/backup&restore: support backing up and restoring third party subtypes if they need it.
Merged from MOODLE_19_STABLE
This commit is contained in:
@@ -71,10 +71,16 @@
|
||||
fwrite ($bf,full_tag("TIMEAVAILABLE",4,false,$assignment->timeavailable));
|
||||
fwrite ($bf,full_tag("GRADE",4,false,$assignment->grade));
|
||||
fwrite ($bf,full_tag("TIMEMODIFIED",4,false,$assignment->timemodified));
|
||||
|
||||
$class = 'assignment_' . $assignment->assignmenttype;
|
||||
require_once($CFG->dirroot . '/mod/assignment/lib.php');
|
||||
require_once($CFG->dirroot . '/mod/assignment/type/' . $assignment->assignmenttype . '/assignment.class.php');
|
||||
call_user_func(array($class, 'backup_one_mod'), $bf, $preferences, $assignment);
|
||||
|
||||
//if we've selected to backup users info, then execute backup_assignment_submisions and
|
||||
//backup_assignment_files_instance
|
||||
if (backup_userdata_selected($preferences,'assignment',$assignment->id)) {
|
||||
$status = backup_assignment_submissions($bf,$preferences,$assignment->id);
|
||||
$status = backup_assignment_submissions($bf,$preferences,$assignment);
|
||||
if ($status) {
|
||||
$status = backup_assignment_files_instance($bf,$preferences,$assignment->id);
|
||||
}
|
||||
@@ -91,7 +97,7 @@
|
||||
|
||||
$status = true;
|
||||
|
||||
$assignment_submissions = $DB->get_records("assignment_submissions", array("assignment"=>$assignment),"id");
|
||||
$assignment_submissions = $DB->get_records("assignment_submissions", array("assignment"=>$assignment->id),"id");
|
||||
//If there is submissions
|
||||
if ($assignment_submissions) {
|
||||
//Write start tag
|
||||
@@ -114,6 +120,11 @@
|
||||
fwrite ($bf,full_tag("TEACHER",6,false,$ass_sub->teacher));
|
||||
fwrite ($bf,full_tag("TIMEMARKED",6,false,$ass_sub->timemarked));
|
||||
fwrite ($bf,full_tag("MAILED",6,false,$ass_sub->mailed));
|
||||
|
||||
$class = 'assignment_' . $assignment->assignmenttype;
|
||||
require_once($CFG->dirroot . '/mod/assignment/lib.php');
|
||||
require_once($CFG->dirroot . '/mod/assignment/type/' . $assignment->assignmenttype . '/assignment.class.php');
|
||||
call_user_func(array($class, 'backup_one_submission'), $bf, $preferences, $assignment, $ass_sub);
|
||||
//End submission
|
||||
$status =fwrite ($bf,end_tag("SUBMISSION",5,true));
|
||||
}
|
||||
|
||||
@@ -2012,6 +2012,69 @@ class assignment_base {
|
||||
function portfolio_exportable() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* base implementation for backing up subtype specific information
|
||||
* for one single module
|
||||
*
|
||||
* @param filehandle $bf file handle for xml file to write to
|
||||
* @param mixed $preferences the complete backup preference object
|
||||
*
|
||||
* @return boolean
|
||||
*
|
||||
* @static
|
||||
*/
|
||||
static function backup_one_mod($bf, $preferences, $assignment) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* base implementation for backing up subtype specific information
|
||||
* for one single submission
|
||||
*
|
||||
* @param filehandle $bf file handle for xml file to write to
|
||||
* @param mixed $preferences the complete backup preference object
|
||||
* @param object $submission the assignment submission db record
|
||||
*
|
||||
* @return boolean
|
||||
*
|
||||
* @static
|
||||
*/
|
||||
static function backup_one_submission($bf, $preferences, $assignment, $submission) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* base implementation for restoring subtype specific information
|
||||
* for one single module
|
||||
*
|
||||
* @param array $info the array representing the xml
|
||||
* @param object $restore the restore preferences
|
||||
*
|
||||
* @return boolean
|
||||
*
|
||||
* @static
|
||||
*/
|
||||
static function restore_one_mod($info, $restore, $assignment) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* base implementation for restoring subtype specific information
|
||||
* for one single submission
|
||||
*
|
||||
* @param object $submission the newly created submission
|
||||
* @param array $info the array representing the xml
|
||||
* @param object $restore the restore preferences
|
||||
*
|
||||
* @return boolean
|
||||
*
|
||||
* @static
|
||||
*/
|
||||
static function restore_one_submission($info, $restore, $assignment, $submission) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} ////// End of the assignment_base class
|
||||
|
||||
/**
|
||||
|
||||
@@ -105,10 +105,17 @@
|
||||
backup_putid($restore->backup_unique_code,$mod->modtype,
|
||||
$mod->id, $newid);
|
||||
|
||||
// load up the subtype and see if it wants anything further restored.
|
||||
$class = 'assignment_' . $assignment->assignmenttype;
|
||||
require_once($CFG->dirroot . '/mod/assignment/lib.php');
|
||||
require_once($CFG->dirroot . '/mod/assignment/type/' . $assignment->assignmenttype . '/assignment.class.php');
|
||||
call_user_func(array($class, 'restore_one_mod'), $info, $restore, $assignment);
|
||||
|
||||
//Now check if want to restore user data and do it.
|
||||
if (restore_userdata_selected($restore,'assignment',$mod->id)) {
|
||||
//Restore assignmet_submissions
|
||||
$status = assignment_submissions_restore_mods($mod->id, $newid,$info,$restore) && $status;
|
||||
$status = assignment_submissions_restore_mods($mod->id, $newid,$info,$restore, $assignment) && $status;
|
||||
}
|
||||
} else {
|
||||
$status = false;
|
||||
@@ -121,7 +128,7 @@
|
||||
}
|
||||
|
||||
//This function restores the assignment_submissions
|
||||
function assignment_submissions_restore_mods($old_assignment_id, $new_assignment_id,$info,$restore) {
|
||||
function assignment_submissions_restore_mods($old_assignment_id, $new_assignment_id,$info,$restore, $assignment) {
|
||||
global $CFG, $DB;
|
||||
|
||||
$status = true;
|
||||
@@ -198,6 +205,11 @@
|
||||
$status = assignment_restore_files ($old_assignment_id, $new_assignment_id,
|
||||
$olduserid, $submission->userid, $restore);
|
||||
|
||||
$submission->id = $newid;
|
||||
$class = 'assignment_' . $assignment->assignmenttype;
|
||||
require_once($CFG->dirroot . '/mod/assignment/lib.php');
|
||||
require_once($CFG->dirroot . '/mod/assignment/type/' . $assignment->assignmenttype . '/assignment.class.php');
|
||||
call_user_func(array($class, 'restore_one_submission'), $info, $restore, $assignment, $submission);
|
||||
} else {
|
||||
$status = false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user