PageRenderTime 24ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/mod/wiki/backuplib.php

https://github.com/nicolasconnault/moodle2.0
PHP | 243 lines | 149 code | 40 blank | 54 comment | 21 complexity | 0f61b76b18399be97151e19d9859ad3e MD5 | raw file
Possible License(s): LGPL-2.1, GPL-2.0, BSD-3-Clause
  1. <?PHP //$Id: backuplib.php,v 1.11 2009/04/20 20:14:15 skodak Exp $
  2. //This php script contains all the stuff to backup/restore
  3. //wiki mods
  4. //This is the "graphical" structure of the wiki mod:
  5. //
  6. // wiki
  7. // (CL,pk->id)
  8. //
  9. // wiki_entries
  10. // (pk->id, fk->wikiid)
  11. //
  12. // wiki_pages
  13. // (pk->pagename,version,wiki, fk->wiki)
  14. //
  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)
  21. //
  22. //-----------------------------------------------------------
  23. //This function executes all the backup procedure about this mod
  24. function wiki_backup_mods($bf,$preferences) {
  25. global $CFG, $DB;
  26. $status = true;
  27. ////Iterate over wiki table
  28. if ($wikis = $DB->get_records ("wiki","course", array($preferences->backup_course=>"id"))) {
  29. foreach ($wikis as $wiki) {
  30. if (backup_mod_selected($preferences,'wiki',$wiki->id)) {
  31. wiki_backup_one_mod($bf,$preferences,$wiki);
  32. }
  33. }
  34. }
  35. return $status;
  36. }
  37. function wiki_backup_one_mod($bf,$preferences,$wiki) {
  38. global $DB;
  39. $status = true;
  40. if (is_numeric($wiki)) {
  41. $wiki = $DB->get_record('wiki', array('id'=>$wiki));
  42. }
  43. //Start mod
  44. fwrite ($bf,start_tag("MOD",3,true));
  45. //Print assignment data
  46. fwrite ($bf,full_tag("ID",4,false,$wiki->id));
  47. fwrite ($bf,full_tag("MODTYPE",4,false,"wiki"));
  48. fwrite ($bf,full_tag("NAME",4,false,$wiki->name));
  49. fwrite ($bf,full_tag("SUMMARY",4,false,$wiki->intro));
  50. fwrite ($bf,full_tag("PAGENAME",4,false,$wiki->pagename));
  51. fwrite ($bf,full_tag("WTYPE",4,false,$wiki->wtype));
  52. fwrite ($bf,full_tag("EWIKIPRINTTITLE",4,false,$wiki->ewikiprinttitle));
  53. fwrite ($bf,full_tag("HTMLMODE",4,false,$wiki->htmlmode));
  54. fwrite ($bf,full_tag("EWIKIACCEPTBINARY",4,false,$wiki->ewikiacceptbinary));
  55. fwrite ($bf,full_tag("DISABLECAMELCASE",4,false,$wiki->disablecamelcase));
  56. fwrite ($bf,full_tag("SETPAGEFLAGS",4,false,$wiki->setpageflags));
  57. fwrite ($bf,full_tag("STRIPPAGES",4,false,$wiki->strippages));
  58. fwrite ($bf,full_tag("REMOVEPAGES",4,false,$wiki->removepages));
  59. fwrite ($bf,full_tag("REVERTCHANGES",4,false,$wiki->revertchanges));
  60. fwrite ($bf,full_tag("INITIALCONTENT",4,false,$wiki->initialcontent));
  61. fwrite ($bf,full_tag("TIMEMODIFIED",4,false,$wiki->timemodified));
  62. //backup entries and pages
  63. if (backup_userdata_selected($preferences,'wiki',$wiki->id)) {
  64. $status = backup_wiki_entries($bf,$preferences,$wiki->id, $preferences->mods["wiki"]->userinfo);
  65. $status = backup_wiki_files_instance($bf,$preferences,$wiki->id);
  66. }
  67. //End mod
  68. fwrite ($bf,end_tag("MOD",3,true));
  69. return $status;
  70. }
  71. function wiki_check_backup_mods_instances($instance,$backup_unique_code) {
  72. $info[$instance->id.'0'][0] = $instance->name;
  73. $info[$instance->id.'0'][1] = '';
  74. // wiki_check_backup_mods ignores userdata, so we do too.
  75. return $info;
  76. }
  77. ////Return an array of info (name,value)
  78. function wiki_check_backup_mods($course,$user_data=false,$backup_unique_code,$instances=null) {
  79. global $DB;
  80. if (!empty($instances) && is_array($instances) && count($instances)) {
  81. $info = array();
  82. foreach ($instances as $id => $instance) {
  83. $info += wiki_check_backup_mods_instances($instance,$backup_unique_code);
  84. }
  85. return $info;
  86. }
  87. //First the course data
  88. $info[0][0] = get_string("modulenameplural","wiki");
  89. $info[0][1] = $DB->count_records("wiki", array("course"=>$course));
  90. return $info;
  91. }
  92. //Backup wiki_entries contents (executed from wiki_backup_mods)
  93. function backup_wiki_entries ($bf,$preferences,$wiki, $userinfo) {
  94. global $CFG, $DB;
  95. $status = true;
  96. $wiki_entries = $DB->get_records("wiki_entries", array("wikiid"=>$wiki), "id");
  97. //If there are entries
  98. if ($wiki_entries) {
  99. //Write start tag
  100. $status =fwrite ($bf,start_tag("ENTRIES",4,true));
  101. //Iterate over each entry
  102. foreach ($wiki_entries as $wik_ent) {
  103. //Entry start
  104. $status =fwrite ($bf,start_tag("ENTRY",5,true));
  105. fwrite ($bf,full_tag("ID",6,false,$wik_ent->id));
  106. fwrite ($bf,full_tag("GROUPID",6,false,$wik_ent->groupid));
  107. fwrite ($bf,full_tag("USERID",6,false,$wik_ent->userid));
  108. fwrite ($bf,full_tag("PAGENAME",6,false,$wik_ent->pagename));
  109. fwrite ($bf,full_tag("TIMEMODIFIED",6,false,$wik_ent->timemodified));
  110. //Now save entry pages
  111. $status = backup_wiki_pages($bf,$preferences,$wik_ent->id);
  112. //Entry end
  113. $status =fwrite ($bf,end_tag("ENTRY",5,true));
  114. }
  115. //Write end tag
  116. $status =fwrite ($bf,end_tag("ENTRIES",4,true));
  117. }
  118. return $status;
  119. }
  120. //Write wiki_pages contents
  121. function backup_wiki_pages ($bf,$preferences,$entryid) {
  122. global $CFG, $DB;
  123. $status = true;
  124. $pages = $DB->get_records("wiki_pages", array("wiki"=>$entryid));
  125. if ($pages) {
  126. //Start tag
  127. $status =fwrite ($bf,start_tag("PAGES",6,true));
  128. //Iterate over each page
  129. foreach ($pages as $page) {
  130. $status =fwrite ($bf,start_tag("PAGE",7,true));
  131. fwrite ($bf,full_tag("ID",8,false,$page->id));
  132. fwrite ($bf,full_tag("PAGENAME",8,false,$page->pagename));
  133. fwrite ($bf,full_tag("VERSION",8,false,$page->version));
  134. fwrite ($bf,full_tag("FLAGS",8,false,$page->flags));
  135. fwrite ($bf,full_tag("CONTENT",8,false,$page->content));
  136. fwrite ($bf,full_tag("AUTHOR",8,false,$page->author));
  137. fwrite ($bf,full_tag("USERID",8,false,$page->userid));
  138. fwrite ($bf,full_tag("CREATED",8,false,$page->created));
  139. fwrite ($bf,full_tag("LASTMODIFIED",8,false,$page->lastmodified));
  140. fwrite ($bf,full_tag("REFS",8,false,str_replace("\n","$@LINEFEED@$",$page->refs)));
  141. fwrite ($bf,full_tag("META",8,false,$page->meta));
  142. fwrite ($bf,full_tag("HITS",8,false,$page->hits));
  143. $status =fwrite ($bf,end_tag("PAGE",7,true));
  144. }
  145. $status =fwrite ($bf,end_tag("PAGES",6,true));
  146. }
  147. return $status;
  148. }
  149. function backup_wiki_files_instance($bf,$preferences,$instanceid) {
  150. global $CFG, $DB;
  151. $status = true;
  152. //First we check to moddata exists and create it as necessary
  153. //in temp/backup/$backup_code dir
  154. $status = check_and_create_moddata_dir($preferences->backup_unique_code);
  155. $status = check_dir_exists($CFG->dataroot."/temp/backup/".$preferences->backup_unique_code."/moddata/wiki/",true);
  156. //Now copy the forum dir
  157. if ($status) {
  158. //Only if it exists !! Thanks to Daniel Miksik.
  159. if (is_dir($CFG->dataroot."/".$preferences->backup_course."/".$CFG->moddata."/wiki/".$instanceid)) {
  160. $status = backup_copy_file($CFG->dataroot."/".$preferences->backup_course."/".$CFG->moddata."/wiki/".$instanceid,
  161. $CFG->dataroot."/temp/backup/".$preferences->backup_unique_code."/moddata/wiki/".$instanceid);
  162. }
  163. }
  164. return $status;
  165. }
  166. //Backup wiki binary files
  167. function backup_wiki_files($bf,$preferences) {
  168. global $CFG;
  169. $status = true;
  170. //First we check to moddata exists and create it as necessary
  171. //in temp/backup/$backup_code dir
  172. $status = check_and_create_moddata_dir($preferences->backup_unique_code);
  173. //Now copy the forum dir
  174. if ($status) {
  175. //Only if it exists !! Thanks to Daniel Miksik.
  176. if (is_dir($CFG->dataroot."/".$preferences->backup_course."/".$CFG->moddata."/wiki")) {
  177. $handle = opendir($CFG->dataroot."/".$preferences->backup_course."/".$CFG->moddata."/wiki");
  178. while (false!==($item = readdir($handle))) {
  179. if ($item != '.' && $item != '..' && is_dir($CFG->dataroot."/".$preferences->backup_course."/".$CFG->moddata."/wiki/".$item)
  180. && array_key_exists($item,$preferences->mods['wiki']->instances)
  181. && !empty($preferences->mods['wiki']->instances[$item]->backup)) {
  182. $status = backup_copy_file($CFG->dataroot."/".$preferences->backup_course."/".$CFG->moddata."/wiki/".$item,
  183. $CFG->dataroot."/temp/backup/".$preferences->backup_unique_code."/moddata/wiki/",$item);
  184. }
  185. }
  186. }
  187. }
  188. return $status;
  189. }
  190. //Return a content encoded to support interactivities linking. Every module
  191. //should have its own. They are called automatically from the backup procedure.
  192. function wiki_encode_content_links ($content,$preferences) {
  193. global $CFG;
  194. $base = preg_quote($CFG->wwwroot,"/");
  195. //Link to the list of wikis
  196. $buscar="/(".$base."\/mod\/wiki\/index.php\?id\=)([0-9]+)/";
  197. $result= preg_replace($buscar,'$@WIKIINDEX*$2@$',$content);
  198. //Link to wiki view by moduleid
  199. $buscar="/(".$base."\/mod\/wiki\/view.php\?id\=)([0-9]+)/";
  200. $result= preg_replace($buscar,'$@WIKIVIEWBYID*$2@$',$result);
  201. return $result;
  202. }
  203. ?>