2 //This php script contains all the stuff to backup/restore
5 //This is the "graphical" structure of the chat mod:
13 // (UL,pk->id, fk->chatid)
15 // Meaning: pk->primary key field of the table
16 // fk->foreign key to link with parent
17 // nt->nested field (recursive data)
18 // CL->course level info
19 // UL->user level info
20 // files->table may have files)
22 //-----------------------------------------------------------
24 //This function executes all the restore procedure about this mod
25 function chat_restore_mods($mod,$restore) {
30 //Get record from backup_ids
31 $data = backup_getid($restore->backup_unique_code,$mod->modtype,$mod->id);
34 //Now get completed xmlized object
37 //traverse_xmlize($info); //Debug
38 //print_object ($GLOBALS['traverse_array']); //Debug
39 //$GLOBALS['traverse_array']=""; //Debug
40 // if necessary, write to restorelog and adjust date/time fields
41 if ($restore->course_startdateoffset) {
42 restore_log_date_changes('Chat', $restore, $info['MOD']['#'], array('CHATTIME'));
44 //Now, build the CHAT record structure
45 $chat->course = $restore->course_id;
46 $chat->name = backup_todb($info['MOD']['#']['NAME']['0']['#']);
47 $chat->intro = backup_todb($info['MOD']['#']['INTRO']['0']['#']);
48 $chat->keepdays = backup_todb($info['MOD']['#']['KEEPDAYS']['0']['#']);
49 $chat->studentlogs = backup_todb($info['MOD']['#']['STUDENTLOGS']['0']['#']);
50 $chat->schedule = backup_todb($info['MOD']['#']['SCHEDULE']['0']['#']);
51 $chat->chattime = backup_todb($info['MOD']['#']['CHATTIME']['0']['#']);
52 $chat->timemodified = backup_todb($info['MOD']['#']['TIMEMODIFIED']['0']['#']);
54 //The structure is equal to the db, so insert the chat
55 $newid = $DB->insert_record ("chat",$chat);
58 if (!defined('RESTORE_SILENTLY')) {
59 echo "<li>".get_string("modulename","chat")." \"".format_string($chat->name,true)."\"</li>";
64 //We have the newid, update backup_ids
65 backup_putid($restore->backup_unique_code,$mod->modtype,
67 //Now check if want to restore user data and do it.
68 if (restore_userdata_selected($restore,'chat',$mod->id)) {
69 //Restore chat_messages
70 $status = chat_messages_restore_mods ($mod->id, $newid,$info,$restore);
82 //This function restores the chat_messages
83 function chat_messages_restore_mods($old_chat_id, $new_chat_id,$info,$restore) {
88 //Get the messages array
89 $messages = $info['MOD']['#']['MESSAGES']['0']['#']['MESSAGE'];
91 //Iterate over messages
92 for($i = 0; $i < sizeof($messages); $i++) {
93 $mes_info = $messages[$i];
94 //traverse_xmlize($mes_info); //Debug
95 //print_object ($GLOBALS['traverse_array']); //Debug
96 //$GLOBALS['traverse_array']=""; //Debug
98 //We'll need this later!!
99 $oldid = backup_todb($mes_info['#']['ID']['0']['#']);
100 $olduserid = backup_todb($mes_info['#']['USERID']['0']['#']);
102 //Now, build the CHAT_MESSAGES record structure
103 $message = new object();
104 $message->chatid = $new_chat_id;
105 $message->userid = backup_todb($mes_info['#']['USERID']['0']['#']);
106 $message->groupid = backup_todb($mes_info['#']['GROUPID']['0']['#']);
107 $message->system = backup_todb($mes_info['#']['SYSTEM']['0']['#']);
108 $message->message = backup_todb($mes_info['#']['MESSAGE_TEXT']['0']['#']);
109 $message->timestamp = backup_todb($mes_info['#']['TIMESTAMP']['0']['#']);
111 //We have to recode the userid field
112 $user = backup_getid($restore->backup_unique_code,"user",$message->userid);
114 $message->userid = $user->new_id;
117 //We have to recode the groupid field
118 $group = restore_group_getid($restore, $message->groupid);
120 $message->groupid = $group->new_id;
123 //The structure is equal to the db, so insert the chat_message
124 $newid = $DB->insert_record ("chat_messages",$message);
127 if (($i+1) % 50 == 0) {
128 if (!defined('RESTORE_SILENTLY')) {
130 if (($i+1) % 1000 == 0) {
140 //Return a content decoded to support interactivities linking. Every module
141 //should have its own. They are called automatically from
142 //chat_decode_content_links_caller() function in each module
143 //in the restore process
144 function chat_decode_content_links ($content,$restore) {
150 //Link to the list of chats
152 $searchstring='/\$@(CHATINDEX)\*([0-9]+)@\$/';
154 preg_match_all($searchstring,$content,$foundset);
155 //If found, then we are going to look for its new id (in backup tables)
157 //print_object($foundset); //Debug
158 //Iterate over foundset[2]. They are the old_ids
159 foreach($foundset[2] as $old_id) {
160 //We get the needed variables here (course id)
161 $rec = backup_getid($restore->backup_unique_code,"course",$old_id);
162 //Personalize the searchstring
163 $searchstring='/\$@(CHATINDEX)\*('.$old_id.')@\$/';
164 //If it is a link to this course, update the link to its new location
167 $result= preg_replace($searchstring,$CFG->wwwroot.'/mod/chat/index.php?id='.$rec->new_id,$result);
169 //It's a foreign link so leave it as original
170 $result= preg_replace($searchstring,$restore->original_wwwroot.'/mod/chat/index.php?id='.$old_id,$result);
175 //Link to chat view by moduleid
177 $searchstring='/\$@(CHATVIEWBYID)\*([0-9]+)@\$/';
179 preg_match_all($searchstring,$result,$foundset);
180 //If found, then we are going to look for its new id (in backup tables)
182 //print_object($foundset); //Debug
183 //Iterate over foundset[2]. They are the old_ids
184 foreach($foundset[2] as $old_id) {
185 //We get the needed variables here (course_modules id)
186 $rec = backup_getid($restore->backup_unique_code,"course_modules",$old_id);
187 //Personalize the searchstring
188 $searchstring='/\$@(CHATVIEWBYID)\*('.$old_id.')@\$/';
189 //If it is a link to this course, update the link to its new location
192 $result= preg_replace($searchstring,$CFG->wwwroot.'/mod/chat/view.php?id='.$rec->new_id,$result);
194 //It's a foreign link so leave it as original
195 $result= preg_replace($searchstring,$restore->original_wwwroot.'/mod/chat/view.php?id='.$old_id,$result);
203 //This function makes all the necessary calls to xxxx_decode_content_links()
204 //function in each module, passing them the desired contents to be decoded
205 //from backup format to destination site/course in order to mantain inter-activities
206 //working in the backup/restore process. It's called from restore_decode_content_links()
207 //function in restore process
208 function chat_decode_content_links_caller($restore) {
212 if ($chats = $DB->get_records('chat', array('course'=>$restore->course_id), '', "id,intro")) {
213 //Iterate over each chat->intro
214 $i = 0; //Counter to send some output to the browser to avoid timeouts
215 foreach ($chats as $chat) {
218 $content = $chat->intro;
219 $result = restore_decode_content_links_worker($content,$restore);
220 if ($result != $content) {
222 $chat->intro = $result;
223 $status = $DB->update_record("chat",$chat);
225 if (!defined('RESTORE_SILENTLY')) {
226 echo '<br /><hr />'.s($content).'<br />changed to<br />'.s($result).'<hr /><br />';
231 if (($i+1) % 5 == 0) {
232 if (!defined('RESTORE_SILENTLY')) {
234 if (($i+1) % 100 == 0) {
246 //This function returns a log record with all the necessay transformations
247 //done. It's used by restore_log_module() to restore modules log.
248 function chat_restore_logs($restore,$log) {
251 //Depending of the action, we recode different things
252 switch ($log->action) {
255 //Get the new_id of the module (to recode the info field)
256 $mod = backup_getid($restore->backup_unique_code,$log->module,$log->info);
258 $log->url = "view.php?id=".$log->cmid;
259 $log->info = $mod->new_id;
266 //Get the new_id of the module (to recode the info field)
267 $mod = backup_getid($restore->backup_unique_code,$log->module,$log->info);
269 $log->url = "view.php?id=".$log->cmid;
270 $log->info = $mod->new_id;
277 //Get the new_id of the module (to recode the info field)
278 $mod = backup_getid($restore->backup_unique_code,$log->module,$log->info);
280 $log->url = "view.php?id=".$log->cmid;
281 $log->info = $mod->new_id;
288 //Get the new_id of the module (to recode the info field)
289 $mod = backup_getid($restore->backup_unique_code,$log->module,$log->info);
291 $log->url = "view.php?id=".$log->cmid;
292 $log->info = $mod->new_id;
298 $log->url = "index.php?id=".$log->course;
303 //Get the new_id of the module (to recode the info field)
304 $mod = backup_getid($restore->backup_unique_code,$log->module,$log->info);
306 $log->url = "report.php?id=".$log->cmid;
307 $log->info = $mod->new_id;
313 if (!defined('RESTORE_SILENTLY')) {
314 echo "action (".$log->module."-".$log->action.") unknown. Not restored<br />"; //Debug