diff --git a/backup/backup_check.html b/backup/backup_check.html index 1faaafc589c..fdcce87c27a 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 " ";
//Add as hidden name
echo "";
diff --git a/backup/backuplib.php b/backup/backuplib.php
index aa80ff6f483..e9cd24e433f 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 78efbd33999..d6ab7dee2cf 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 "
";
} else {
notify("Something is wrong - no users were found!");
diff --git a/backup/restorelib.php b/backup/restorelib.php
index bcd6c973ac8..6c19bfcfadd 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 532a0824339..756df199f87 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