]> git.mjollnir.org Git - moodle.git/commitdiff
Now, "needed" users are included in backup/restore when
authorstronk7 <stronk7>
Sun, 14 Sep 2003 21:43:34 +0000 (21:43 +0000)
committerstronk7 <stronk7>
Sun, 14 Sep 2003 21:43:34 +0000 (21:43 +0000)
"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)

backup/backup_check.html
backup/backuplib.php
backup/restore_execute.html
backup/restorelib.php
backup/version.php

index 1faaafc589cdebc53a2c02d01ef5a32c844df366..fdcce87c27a0f3542ac08d2b494c3796d15e98e4 100644 (file)
         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."\">";
index aa80ff6f483edbcfa368eabd9fe3699c9cc35288..e9cd24e433f49796e22c65dd5a1f7c91f89fe2a1 100644 (file)
     //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);
         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) {
                 $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
                         //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));
index 78efbd33999370b6b3529e36dbfe3c0a6632a9e8..d6ab7dee2cff588d11b0539b8a23bb75829f31da 100644 (file)
                 $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) {
                     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++;
                 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!");
index bcd6c973ac8a4d9b85f328b3fa224e686d3f6bff..6c19bfcfadd738498a80b6331e81dea3d6532b0b 100644 (file)
                 $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;
 
                 //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.",";
                             $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)) {
index 532a0824339c99d624ddb2d4bffb95e7f4e43f83..756df199f87eed4b743618ac1a1a560c36a5db18 100644 (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