|
Moodle
2.2.1
http://www.collinsharper.com
|
00001 <?php 00002 00003 // This file is part of Moodle - http://moodle.org/ 00004 // 00005 // Moodle is free software: you can redistribute it and/or modify 00006 // it under the terms of the GNU General Public License as published by 00007 // the Free Software Foundation, either version 3 of the License, or 00008 // (at your option) any later version. 00009 // 00010 // Moodle is distributed in the hope that it will be useful, 00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 // GNU General Public License for more details. 00014 // 00015 // You should have received a copy of the GNU General Public License 00016 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 00017 00032 class backup_forum_activity_structure_step extends backup_activity_structure_step { 00033 00034 protected function define_structure() { 00035 00036 // To know if we are including userinfo 00037 $userinfo = $this->get_setting_value('userinfo'); 00038 00039 // Define each element separated 00040 00041 $forum = new backup_nested_element('forum', array('id'), array( 00042 'type', 'name', 'intro', 'introformat', 00043 'assessed', 'assesstimestart', 'assesstimefinish', 'scale', 00044 'maxbytes', 'maxattachments', 'forcesubscribe', 'trackingtype', 00045 'rsstype', 'rssarticles', 'timemodified', 'warnafter', 00046 'blockafter', 'blockperiod', 'completiondiscussions', 'completionreplies', 00047 'completionposts')); 00048 00049 $discussions = new backup_nested_element('discussions'); 00050 00051 $discussion = new backup_nested_element('discussion', array('id'), array( 00052 'name', 'firstpost', 'userid', 'groupid', 00053 'assessed', 'timemodified', 'usermodified', 'timestart', 00054 'timeend')); 00055 00056 $posts = new backup_nested_element('posts'); 00057 00058 $post = new backup_nested_element('post', array('id'), array( 00059 'parent', 'userid', 'created', 'modified', 00060 'mailed', 'subject', 'message', 'messageformat', 00061 'messagetrust', 'attachment', 'totalscore', 'mailnow')); 00062 00063 $ratings = new backup_nested_element('ratings'); 00064 00065 $rating = new backup_nested_element('rating', array('id'), array( 00066 'component', 'ratingarea', 'scaleid', 'value', 'userid', 'timecreated', 'timemodified')); 00067 00068 $subscriptions = new backup_nested_element('subscriptions'); 00069 00070 $subscription = new backup_nested_element('subscription', array('id'), array( 00071 'userid')); 00072 00073 $readposts = new backup_nested_element('readposts'); 00074 00075 $read = new backup_nested_element('read', array('id'), array( 00076 'userid', 'discussionid', 'postid', 'firstread', 00077 'lastread')); 00078 00079 $trackedprefs = new backup_nested_element('trackedprefs'); 00080 00081 $track = new backup_nested_element('track', array('id'), array( 00082 'userid')); 00083 00084 // Build the tree 00085 00086 $forum->add_child($discussions); 00087 $discussions->add_child($discussion); 00088 00089 $forum->add_child($subscriptions); 00090 $subscriptions->add_child($subscription); 00091 00092 $forum->add_child($readposts); 00093 $readposts->add_child($read); 00094 00095 $forum->add_child($trackedprefs); 00096 $trackedprefs->add_child($track); 00097 00098 $discussion->add_child($posts); 00099 $posts->add_child($post); 00100 00101 $post->add_child($ratings); 00102 $ratings->add_child($rating); 00103 00104 // Define sources 00105 00106 $forum->set_source_table('forum', array('id' => backup::VAR_ACTIVITYID)); 00107 00108 // All these source definitions only happen if we are including user info 00109 if ($userinfo) { 00110 $discussion->set_source_sql(' 00111 SELECT * 00112 FROM {forum_discussions} 00113 WHERE forum = ?', 00114 array(backup::VAR_PARENTID)); 00115 00116 // Need posts ordered by id so parents are always before childs on restore 00117 $post->set_source_sql("SELECT * 00118 FROM {forum_posts} 00119 WHERE discussion = :discussion 00120 ORDER BY id", array('discussion' => backup::VAR_PARENTID)); 00121 00122 $subscription->set_source_table('forum_subscriptions', array('forum' => backup::VAR_PARENTID)); 00123 00124 $read->set_source_table('forum_read', array('forumid' => backup::VAR_PARENTID)); 00125 00126 $track->set_source_table('forum_track_prefs', array('forumid' => backup::VAR_PARENTID)); 00127 00128 $rating->set_source_table('rating', array('contextid' => backup::VAR_CONTEXTID, 00129 'component' => backup_helper::is_sqlparam('mod_forum'), 00130 'ratingarea' => backup_helper::is_sqlparam('post'), 00131 'itemid' => backup::VAR_PARENTID)); 00132 $rating->set_source_alias('rating', 'value'); 00133 } 00134 00135 // Define id annotations 00136 00137 $forum->annotate_ids('scale', 'scale'); 00138 00139 $discussion->annotate_ids('group', 'groupid'); 00140 00141 $post->annotate_ids('user', 'userid'); 00142 00143 $rating->annotate_ids('scale', 'scaleid'); 00144 00145 $rating->annotate_ids('user', 'userid'); 00146 00147 $subscription->annotate_ids('user', 'userid'); 00148 00149 $read->annotate_ids('user', 'userid'); 00150 00151 $track->annotate_ids('user', 'userid'); 00152 00153 // Define file annotations 00154 00155 $forum->annotate_files('mod_forum', 'intro', null); // This file area hasn't itemid 00156 00157 $post->annotate_files('mod_forum', 'post', 'id'); 00158 $post->annotate_files('mod_forum', 'attachment', 'id'); 00159 00160 // Return the root element (forum), wrapped into standard activity structure 00161 return $this->prepare_activity_structure($forum); 00162 } 00163 00164 }