992c8ba745cb81f58c7e7cef84121bff131b1055
[moodle.git] / backup / restore_check.html
1 <?php //$Id$
2     //This page receive all the restore_form data. Then, if existing course
3     //has been selected, shows a list of courses to select one.
4     //It cheks that the parammeter from restore_form are coherent.
5     //It puts all the restore info in the session.
6     //Finally, it calls restore_execute to do the hard work
8     //Get objects from session
9     if ($SESSION) {
10         $info = $SESSION->info;
11         $course_header = $SESSION->course_header;
12         if (isset($SESSION->restore)) {
13             $restore = $SESSION->restore;
14         }
15     }
17     //Detect if we are coming from the restore form
18     $fromform = optional_param ('fromform', 0, PARAM_INT);
20     //If restore session info exists, but we are coming from the form
21     //it has prioriry
22     if (isset($restore) and !empty($fromform)) {
23         unset($restore);
24     }
26     // check for session objects
27     if (empty($info) or empty($course_header)) {
28       error( 'important information missing from SESSION' );
29     }
31     //If the restore object doesn't exist, we are going
32     //to check every variable individually and create it
34     if (!isset($restore)) {
35         //Check that we have all we need
36         //backup_unique_code
37         $backup_unique_code = required_param( 'backup_unique_code' );
38         //file
39         $file = required_param( 'file');
40         //Checks for the required restoremod parameters
41         if ($allmods = get_records("modules")) {
42             foreach ($allmods as $mod) {
43                 $modname = $mod->name;
44                 $var = "restore_".$modname;
45                 $$var = optional_param( $var,0); 
46                 $var = "restore_user_info_".$modname;
47                 $$var = optional_param( $var,0);
48                 $instances = !empty($info->mods[$mod->name]->instances) ? $info->mods[$mod->name]->instances : NULL;
49                 if ($instances === NULL) {
50                     continue;
51                 }
52                 foreach ($instances as $instance) {
53                     $var = 'restore_'.$modname.'_instance_'.$instance->id;
54                     $$var = optional_param($var,0);
55                     $var = 'restore_user_info_'.$modname.'_instance_'.$instance->id;
56                     $$var = optional_param($var,0);
57                 }
58             }
59         }
60         //restoreto
61         $restore_restoreto = required_param('restore_restoreto');
62         //restore_metacourse
63         $restore_metacourse = required_param('restore_metacourse');
64         //restore_users
65         $restore_users = required_param('restore_users');
66         //restore_logs
67         $restore_logs = required_param('restore_logs');
68         //restore_user_files
69         $restore_user_files = required_param('restore_user_files');
70         //restore_course_files
71         $restore_course_files = required_param('restore_course_files');
72         //restore_messages
73         $restore_messages = required_param('restore_messages');
75         //Check we've selected a course to restore to
76         $course_id = optional_param('course_id', 0, PARAM_INT);
77  
78         //We are here, having all we need !!
79         //Create the restore object and put it in the session
80         $restore->backup_unique_code = $backup_unique_code;
81         $restore->file = $file;
82         if ($allmods = get_records("modules")) {
83             foreach ($allmods as $mod) {
84                 $modname = $mod->name;
85                 $var = "restore_".$modname;
86                 $restore->mods[$modname]->restore=$$var;
87                 $var = "restore_user_info_".$modname;
88                 $restore->mods[$modname]->userinfo=$$var;
89                 $instances = !empty($info->mods[$mod->name]->instances) ? $info->mods[$mod->name]->instances : NULL;
90                 if ($instances === NULL) {
91                     continue;
92                 }
93                 foreach ($instances as $instance) {
94                     $var = 'restore_'.$modname.'_instance_'.$instance->id;
95                     $restore->mods[$modname]->instances[$instance->id]->restore = $$var;
96                     $var = 'restore_user_info_'.$modname.'_instance_'.$instance->id;
97                     $restore->mods[$modname]->instances[$instance->id]->userinfo = $$var;
98                 }
99             }
100         }
101         $restore->restoreto=$restore_restoreto;
102         $restore->metacourse=$restore_metacourse;
103         $restore->users=$restore_users;
104         $restore->logs=$restore_logs;
105         $restore->user_files=$restore_user_files;
106         $restore->course_files=$restore_course_files;
107         $restore->messages=$restore_messages;
108         $restore->course_id=$course_id;
109     } else {
110         //We have the object, so check if we have a new course_id
111         //passed as parammeter
112         $course_id = optional_param('course_id', 0, PARAM_INT);
113         if ($course_id) {
114             $restore->course_id=$course_id;
115         }
116     }
117     //We have the object with data, put it in the session
118     $SESSION->restore = $restore;
120     //From here to the end of the script, only use the $restore object
122     //Check login
123     require_login();
125     //Check admin
126     if (!empty($id)) {
127         if (!isteacheredit($id)) {
128             error("You need to be a teacher or admin user to use this page.", "$CFG->wwwroot/login/index.php");
129         }
130     } else {
131         if (!isadmin()) {
132             error("You need to be an admin user to use this page.", "$CFG->wwwroot/login/index.php");
133         }
134     }
136     //Check site
137     if (!$site = get_site()) {
138         error("Site not found!");
139     }
140  
141     //Depending the selected restoreto:
142     // If user is a teacher (and not creator):
143     //    0-Current course, deleting: Put $restore->course_id and $restore->deleting (true), create the restore object
144     //    1-Current course, adding: Put $restore->course_id and $restore->deleting (false), create the restore object
145     // If the uses is a creator:
146     //    0-Existing course, deleting: Select the destination course and launch the check again, then
147     //        put $restore->course_id and $restore->deleting (true), create the restore object.
148     //    1-Existing course, adding: Select the destination course and launch the check again, then
149     //        put $restore->course_id and $restore->deleting (false), create the restore object.
150     //    2-New course: Create the restore object and launch the execute.
152     //If the user is a teacher and not a creator
153     if (isteacheredit($id) and !iscreator()) {
154         $restore->course_id = $id;
155         if ($restore->restoreto == 0) {
156             $restore->deleting = true;
157         } else {
158             $restore->deleting = false;
159         }
160     }
162     //If the user is a creator (or admin)
163     if (iscreator()) {
164         //Set restore->deleting as needed
165         if ($restore->restoreto == 0) {
166             $restore->deleting = true;
167         } else {
168             $restore->deleting = false;
169         }
170     }
172     //Now, select the course if needed
173     if (($restore->restoreto == 0 or $restore->restoreto == 1) and ($restore->course_id == 0) and (iscreator())) {
174         if ($courses = get_courses("all","c.fullname","c.id,c.fullname,c.shortname,c.visible")) {
175             print_heading(get_string("choosecourse"));
176             print_simple_box_start("center");
177             foreach ($courses as $course) {
178                 if (!isteacheredit($course->id)) {
179                     continue;
180                 }
181                 if (empty($course->visible)) {
182                     $optdimmed = ' class="dimmed" ';
183                 } else {
184                     $optdimmed = '';
185                 }
186                 echo "<a $optdimmed href=\"restore.php?course_id=$course->id&launch=check&id=$id&file=$file\">$course->fullname ($course->shortname)</a><br />";
187             }
188             print_simple_box_end();
189         } else {
190             print_heading(get_string("nocoursesyet"));
191             print_continue("$CFG->wwwroot/$CFG->admin/index.php");
192         }
193     //Checks everything and execute restore
194     } else if ((($restore->restoreto == 0 or $restore->restoreto == 1) and ($restore->course_id != 0)) or ($restore->restoreto == 2)) {
195         //Final access control check
196         if ($restore->course_id == 0 and !iscreator()) {
197             error("You need to be a creator or admin to restore into new course!");
198         } else if ($restore->course_id != 0 and !isteacheredit($restore->course_id)) {
199             error("You need to be an edit teacher or admin to restore into selected course!");
200         }
201         $show_continue_button = true;
202         //Check if we've selected any mod's user info and restore->users 
203         //is set to none. Change it to course and inform.
204         if ($restore->users == 2) {
205             $changed = false;
206             $mods = $restore->mods;
207             foreach ($mods as $mod) {
208                 if ($mod->userinfo) {
209                     $changed = true;
210                 }
211             }
212             //If we have selected user files or messages, then users must be restored too
213             if ($restore->user_files || $restore->messages) {
214                 $changed = 1;
215             }
216             if ($changed) {
217                 echo get_string ("noteuserschangednonetocourse");
218                 echo "<hr noshade size=\"1\">";
219                 $restore->users = 1;
220             }
221         }
222         //Save the restore session object
223         $SESSION->restore = $restore;
224         if ($show_continue_button) {
225             //Print the continue button to execute the restore NOW !!!!
226             //All is prepared !!!
227             echo "<center>";
228             $hidden["launch"]             = "execute";
229             $hidden["file"]               =  $file;
230             $hidden["id"]                 =  $id;
231             print_single_button("restore.php", $hidden, get_string("restorecoursenow"),"post");
232             echo "</center>";
233         } else {
234             //Show error
235             error ("Something was wrong checking restore preferences");
236         } 
238     //If we are here. Something must be wrong. Debug !!!
239     } else {
240         print_object($restore);
241         print_object($info);
242         print_object($course_header);
243         error ("Something must be wrong");
244     }
246 ?>