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:
stronk7 2003-09-14 21:43:34 +00:00
parent 623d403c66
commit 0611af101d
5 changed files with 170 additions and 56 deletions

View File

@ -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."\">";

View File

@ -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));

View File

@ -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!");

View File

@ -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)) {

View File

@ -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