mirror of
https://github.com/moodle/moodle.git
synced 2025-04-21 08:22:07 +02:00
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)
This commit is contained in:
parent
623d403c66
commit
0611af101d
@ -161,7 +161,6 @@
|
||||
echo "<td colspan=\"2\"><P><B>";
|
||||
$user_options[0] = get_string("includeallusers");
|
||||
$user_options[1] = get_string("includecourseusers");
|
||||
///$user_options[2] = get_string("includeneededusers");--->NOT IMPLEMENTED
|
||||
echo "<li>".$user_options[$backup_users]."<P>";
|
||||
//Add as hidden name
|
||||
echo "<input type=\"hidden\" name=\"backup_users\" value=\"".$backup_users."\">";
|
||||
|
@ -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));
|
||||
|
@ -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 "<ul>";
|
||||
echo "<li>".get_string("students").": ".$student_count;
|
||||
echo "<li>".get_string("teachers").": ".$teacher_count;
|
||||
echo "<li>".get_string("coursecreators").": ".$coursecreator_count;
|
||||
echo "<li>".get_string("administrators").": ".$admin_count;
|
||||
echo "<li>".get_string("other").": ".$other_count;
|
||||
echo "</ul>";
|
||||
} else {
|
||||
notify("Something is wrong - no users were found!");
|
||||
|
@ -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)) {
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user