From: stronk7 Date: Sun, 14 Sep 2003 21:43:34 +0000 (+0000) Subject: Now, "needed" users are included in backup/restore when X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=0611af101dafd7fc1f773e44e970b579dddfc103;p=moodle.git Now, "needed" users are included in backup/restore when "course users" are selected. This uses the xxxx_get_participants() function in every module. This solves an issue about info in modules belonging to unenrolled users (Bug #692 closed). Mantain compatibility with old backups (1.1 and 1.1.1). Updated version to "1.2 development". Included support to "label" module (by Martin) --- diff --git a/backup/backup_check.html b/backup/backup_check.html index 1faaafc589..fdcce87c27 100644 --- a/backup/backup_check.html +++ b/backup/backup_check.html @@ -161,7 +161,6 @@ echo "

"; $user_options[0] = get_string("includeallusers"); $user_options[1] = get_string("includecourseusers"); - ///$user_options[2] = get_string("includeneededusers");--->NOT IMPLEMENTED echo "

  • ".$user_options[$backup_users]."

    "; //Add as hidden name echo ""; diff --git a/backup/backuplib.php b/backup/backuplib.php index aa80ff6f48..e9cd24e433 100644 --- a/backup/backuplib.php +++ b/backup/backuplib.php @@ -32,61 +32,75 @@ //Return an array of info (name,value) function user_check_backup($course,$backup_unique_code,$backup_users) { //$backup_users=0-->all - // 1-->course - // 2-->needed-->NOT IMPLEMEMTED + // 1-->course (needed + enrolled) global $CFG; global $db; $count_users = 0; - //Select all users from user (only id) - //If there are a lot of users and we retrieve all the info->memory shortage !! - $users = get_records ("user","","","","id,id"); - //If we have users - if ($users) { + //Calculate needed users (calling every xxxx_get_participants function) + $needed_users = backup_get_needed_users($course); + + //Calculate enrolled users (students + teachers) + $enrolled_users = backup_get_enrolled_users($course); + + //Calculate all users (every record in users table) + $all_users = backup_get_all_users(); + + //Calculate course users (needed + enrolled) + //First, needed + $course_users = $needed_users; + + //Now, enrolled + if ($enrolled_users) { + foreach ($enrolled_users as $enrolled_user) { + $course_users[$enrolled_user->id]->id = $enrolled_user->id; + } + } + + //Now, depending of parameters, create $backupable_users + if ($backup_users == 0) { + $backupable_users = $all_users; + } else { + $backupable_users = $course_users; + } + + //If we have backupable users + if ($backupable_users) { //Iterate over users putting their roles - foreach ($users as $user) { - $user->info = ""; + foreach ($backupable_users as $backupable_user) { + $backupable_user->info = ""; //Is Admin in tables (not is_admin()) !! - if (record_exists("user_admins","userid",$user->id)) { - $user->info .= "admin"; - $user->role_admin = true; + if (record_exists("user_admins","userid",$backupable_user->id)) { + $backupable_user->info .= "admin"; } //Is Course Creator in tables (not is_coursecreator()) !! - if (record_exists("user_coursecreators","userid",$user->id)) { - $user->info .= "coursecreator"; - $user->role_coursecreator = true; + if (record_exists("user_coursecreators","userid",$backupable_user->id)) { + $backupable_user->info .= "coursecreator"; } //Is Teacher in tables (not is_teacher()) !! - if (record_exists("user_teachers","course",$course,"userid",$user->id)) { - $user->info .= "teacher"; - $user->role_teacher = true; + if (record_exists("user_teachers","course",$course,"userid",$backupable_user->id)) { + $backupable_user->info .= "teacher"; } //Is Student in tables (not is_student()) !! - if (record_exists("user_students","course",$course,"userid",$user->id)) { - $user->info .= "student"; - $user->role_student = true; + if (record_exists("user_students","course",$course,"userid",$backupable_user->id)) { + $backupable_user->info .= "student"; + } + //Is needed user (exists in needed_users) + if ($needed_users[$backupable_user->id]) { + $backupable_user->info .= "needed"; } //Now create the backup_id record $backupids_rec->backup_code = $backup_unique_code; $backupids_rec->table_name = "user"; - $backupids_rec->old_id = $user->id; - $backupids_rec->info = $user->info; + $backupids_rec->old_id = $backupable_user->id; + $backupids_rec->info = $backupable_user->info; //Insert the record id. backup_users decide it. //When all users - if ($backup_users == 0) { - $status = insert_record("backup_ids",$backupids_rec,false); - $count_users++; - //When course users - } else if ($backup_users == 1) { - //Only if user has any role - if ($backupids_rec->info) { - $status = insert_record("backup_ids",$backupids_rec,false); - $count_users++; - } - } + $status = insert_record("backup_ids",$backupids_rec,false); + $count_users++; } //Do some output backup_flush(30); @@ -100,6 +114,101 @@ return $info; } + //Returns every needed user (participant) in a course + //It uses the xxxx_get_participants() function. + //WARNING: It returns only NEEDED users, not every + // every student and teacher in the course, so it + //must be merged with backup_get_enrrolled_users !! + + function backup_get_needed_users ($courseid) { + + global $CFG; + + $result = false; + + $course_modules = get_records_sql ("SELECT cm.id, m.name, cm.instance + FROM {$CFG->prefix}modules m, + {$CFG->prefix}course_modules cm + WHERE m.id = cm.module and + cm.course = '$courseid'"); + + if ($course_modules) { + //Iterate over each module + foreach ($course_modules as $course_module) { + $modlib = "$CFG->dirroot/mod/$course_module->name/lib.php"; + $modgetparticipants = $course_module->name."_get_participants"; + if (file_exists($modlib)) { + include_once($modlib); + if (function_exists($modgetparticipants)) { + $module_participants = $modgetparticipants($course_module->instance); + //Add them to result + if ($module_participants) { + foreach ($module_participants as $module_participant) { + $result[$module_participant->id]->id = $module_participant->id; + } + } + } + } + } + } + + return $result; + + } + + //Returns every enrolled user (student and teacher) in a course + + function backup_get_enrolled_users ($courseid) { + + global $CFG; + + $result = false; + + //Get teachers + $teachers = get_records_sql("SELECT DISTINCT userid,userid + FROM {$CFG->prefix}user_teachers + WHERE course = '$courseid'"); + //Get students + $students = get_records_sql("SELECT DISTINCT userid,userid + FROM {$CFG->prefix}user_students + WHERE course = '$courseid'"); + //Add teachers + if ($teachers) { + foreach ($teachers as $teacher) { + $result[$teacher->userid]->id = $teacher->userid; + } + } + //Add students + if ($students) { + foreach ($students as $student) { + $result[$student->userid]->id = $student->userid; + } + } + + return $result; + } + + //Returns all users (every record in users table) + + function backup_get_all_users() { + + global $CFG; + + $result = false; + + //Get users + $users = get_records_sql("SELECT DISTINCT id,id + FROM {$CFG->prefix}user"); + //Add users + if ($users) { + foreach ($users as $user) { + $result[$user->id]->id = $user->id; + } + } + + return $result; + } + //Calculate the number of log entries to backup //Return an array of info (name,value) function log_check_backup($course) { @@ -611,10 +720,12 @@ $user->iscoursecreator = strpos($user->info,"coursecreator"); $user->isteacher = strpos($user->info,"teacher"); $user->isstudent = strpos($user->info,"student"); + $user->isneeded = strpos($user->info,"needed"); if ($user->isadmin!==false or $user->iscoursecreator!==false or $user->isteacher!==false or - $user->isstudent!==false) { + $user->isstudent!==false or + $user->isneeded!==false) { //Begin ROLES tag fwrite ($bf,start_tag("ROLES",4,true)); //PRINT ROLE INFO @@ -665,7 +776,15 @@ //Print ROLE end fwrite ($bf,end_tag("ROLE",5,true)); } - + //Needed + if ($user->isneeded!==false) { + //Print ROLE start + fwrite ($bf,start_tag("ROLE",5,true)); + //Print Role info + fwrite ($bf,full_tag("TYPE",6,false,"needed")); + //Print ROLE end + fwrite ($bf,end_tag("ROLE",5,true)); + } //End ROLES tag fwrite ($bf,end_tag("ROLES",4,true)); diff --git a/backup/restore_execute.html b/backup/restore_execute.html index 78efbd3399..d6ab7dee2c 100644 --- a/backup/restore_execute.html +++ b/backup/restore_execute.html @@ -143,9 +143,6 @@ $exists_count = 0; $student_count = 0; $teacher_count = 0; - $coursecreator_count = 0; - $admin_count = 0; - $other_count = 0; $counter = 0; //Iterate, filling counters foreach ($recs as $rec) { @@ -157,16 +154,10 @@ if (strpos($record->info,"exists") !== false) { $exists_count++; } - if (strpos($record->info,"student")) { + if (strpos($record->info,"student") !== false) { $student_count++; - } else if (strpos($record->info,"teacher")) { + } else if (strpos($record->info,"teacher") !== false) { $teacher_count++; - } else if (strpos($record->info,"admin")) { - $admin_count++; - } else if (strpos($record->info,"coursecreator")) { - $coursecreator_count++; - } else if ($record->info == "new" or $record->info == "exists") { - $other_count++; } //Do some output $counter++; @@ -183,9 +174,6 @@ echo "

      "; echo "
    • ".get_string("students").": ".$student_count; echo "
    • ".get_string("teachers").": ".$teacher_count; - echo "
    • ".get_string("coursecreators").": ".$coursecreator_count; - echo "
    • ".get_string("administrators").": ".$admin_count; - echo "
    • ".get_string("other").": ".$other_count; echo "
    "; } else { notify("Something is wrong - no users were found!"); diff --git a/backup/restorelib.php b/backup/restorelib.php index bcd6c973ac..6c19bfcfad 100644 --- a/backup/restorelib.php +++ b/backup/restorelib.php @@ -481,9 +481,12 @@ $is_teacher = !empty($user->roles['teacher']); $is_student = !empty($user->roles['student']); + //Check if it's needed + $is_needed = !empty($user->roles['needed']); + //Calculate if it is a course user - //Has role teacher or student or admin or coursecreator - $is_course_user = ($is_teacher or $is_student); + //Has role teacher or student or needed + $is_course_user = ($is_teacher or $is_student or $is_needed); //To store new ids created $newid=null; @@ -535,7 +538,7 @@ //Here, if create_roles, do it as necessary if ($create_roles) { - //Get the newid and currecnt info from backup_ids + //Get the newid and current info from backup_ids $data = backup_getid($restore->backup_unique_code,"user",$userid); $newid = $data->new_id; $currinfo = $data->info.","; @@ -559,6 +562,11 @@ $status = backup_putid($restore->backup_unique_code,"user",$userid,$newid,$currinfo); } } + if ($is_needed) { + //Only put status in backup_ids + $currinfo = $currinfo."needed,"; + $status = backup_putid($restore->backup_unique_code,"user",$userid,$newid,$currinfo); + } if ($is_teacher) { //If the record (teacher) doesn't exists if (!record_exists("user_teachers","userid",$newid,"course", $restore->course_id)) { diff --git a/backup/version.php b/backup/version.php index 532a082433..756df199f8 100644 --- a/backup/version.php +++ b/backup/version.php @@ -5,6 +5,6 @@ // database (backup_version) to determine whether upgrades should // be performed (see db/backup_*.php) -$backup_version = 2003082800; // The current version is a date (YYYYMMDDXX) +$backup_version = 2003091400; // The current version is a date (YYYYMMDDXX) -$backup_release = "1.1"; // User-friendly version number +$backup_release = "1.2 development"; // User-friendly version number