diff --git a/backup/backuplib.php b/backup/backuplib.php index 2571e1cf469..1dffdb42dfe 100644 --- a/backup/backuplib.php +++ b/backup/backuplib.php @@ -85,7 +85,6 @@ //Returns every needed user (participant) in a course //It uses the xxxx_get_participants() function - //plus users needed to backup scales. //Also it search for users having messages and //users having blogs //WARNING: It returns only NEEDED users, not every @@ -124,21 +123,6 @@ } } - //Now, add scale users (from site and course scales) - //Get users - $scaleusers = get_records_sql("SELECT DISTINCT userid,userid - FROM {$CFG->prefix}scale - WHERE courseid = '0' or courseid = '$courseid'"); - //Add scale users to results - if ($scaleusers) { - foreach ($scaleusers as $scaleuser) { - //If userid != 0 - if ($scaleuser->userid != 0) { - $result[$scaleuser->userid]->id = $scaleuser->userid; - } - } - } - //Now, add message users if necessary if ($includemessages) { include_once("$CFG->dirroot/message/lib.php"); @@ -184,7 +168,7 @@ // get all users with moodle/course:view capability, this will include people // assigned at cat level, or site level // but it should be ok if they have no direct assignment at course, mod, block level - return get_users_by_capability(get_context_instance(CONTEXT_COURSE, $courseid), 'moodle/course:view'); + return get_users_by_capability(get_context_instance(CONTEXT_COURSE, $courseid), 'moodle/course:view', '', '', '', '', '', '', false); } //Returns all users ids (every record in users table) diff --git a/backup/restorelib.php b/backup/restorelib.php index a0e9fa0dca3..a526e8f1936 100644 --- a/backup/restorelib.php +++ b/backup/restorelib.php @@ -3273,7 +3273,7 @@ define('RESTORE_GROUPS_GROUPINGS', 3); //This function creates all the scales function restore_create_scales($restore,$xml_file) { - global $CFG, $db; + global $CFG, $USER, $db; $status = true; //Check it exists @@ -3289,16 +3289,11 @@ define('RESTORE_GROUPS_GROUPINGS', 3); //Now, if we have anything in scales, we have to restore that //scales if ($scales) { - //Get admin->id for later use - $admin = get_admin(); - $adminid = $admin->id; if ($scales !== true) { //Iterate over each scale foreach ($scales as $scale) { //Get record from backup_ids $data = backup_getid($restore->backup_unique_code,"scale",$scale->id); - //Init variables - $create_scale = false; if ($data) { //Now get completed xmlized object @@ -3316,49 +3311,41 @@ define('RESTORE_GROUPS_GROUPINGS', 3); $sca->description = backup_todb($info['SCALE']['#']['DESCRIPTION']['0']['#']); $sca->timemodified = backup_todb($info['SCALE']['#']['TIMEMODIFIED']['0']['#']); - //Now search if that scale exists (by scale field) in course 0 (Standar scale) - //or in restore->course_id course (Personal scale) - if ($sca->courseid == 0) { - $course_to_search = 0; - } else { - $course_to_search = $restore->course_id; - } - + // Look for scale (by 'scale' both in standard (course=0) and current course + // with priority to standard scales (ORDER clause) // scale is not course unique, use get_record_sql to suppress warning - //Going to compare LOB columns so, use the cross-db sql_compare_text() in both sides. + // Going to compare LOB columns so, use the cross-db sql_compare_text() in both sides. $compare_scale_clause = sql_compare_text('scale') . "=" . sql_compare_text("'" . $sca->scale . "'"); - $sca_db = get_record_sql("SELECT * FROM {$CFG->prefix}scale - WHERE $compare_scale_clause - AND courseid = $course_to_search", true); + // Scale doesn't exist, create it + if (!$sca_db = get_record_sql("SELECT * + FROM {$CFG->prefix}scale + WHERE $compare_scale_clause + AND courseid IN (0, $restore->course_id) + ORDER BY courseid", true)) { - //If it doesn't exist, create - if (!$sca_db) { - $create_scale = true; - } - //If we must create the scale - if ($create_scale) { - //Me must recode the courseid if it's <> 0 (common scale) - if ($sca->courseid != 0) { - $sca->courseid = $restore->course_id; - } - //We must recode the userid + // Try to recode the user field, defaulting to current user if not found $user = backup_getid($restore->backup_unique_code,"user",$sca->userid); if ($user) { $sca->userid = $user->new_id; } else { - //Assign it to admin - $sca->userid = $adminid; + $sca->userid = $USER->id; + } + // If scale is standard, if user lacks perms to manage standar scales + // 'downgrade' them to course scales + if ($sca->courseid == 0 and !has_capability('moodle/course:managescales', get_context_instance(CONTEXT_SYSTEM), $sca->userid)) { + $sca->courseid = $restore->course_id; } //The structure is equal to the db, so insert the scale $newid = insert_record ("scale",$sca); + + // Scale exists, reuse it } else { - //get current scale id $newid = $sca_db->id; } + if ($newid) { //We have the newid, update backup_ids - backup_putid($restore->backup_unique_code,"scale", - $scale->id, $newid); + backup_putid($restore->backup_unique_code,"scale", $scale->id, $newid); } } }