MDL-26643 added missing message property to discussion object used to upgrade blog
[moodle.git] / admin / bloglevelupgrade.php
1 <?php
2       /// Create "blog" forums in each course and copy blog entries from these courses' participants in these forums
4 define('NO_OUTPUT_BUFFERING', true);
6 require_once('../config.php');
7 require_once($CFG->dirroot.'/course/lib.php');
8 require_once($CFG->dirroot.'/blog/lib.php');
9 require_once($CFG->dirroot.'/mod/forum/lib.php');
10 require_once($CFG->libdir.'/adminlib.php');
12 admin_externalpage_setup('bloglevelupgrade');
13 $PAGE->set_pagelayout('maintenance');
15 $go = optional_param('go', 0, PARAM_BOOL);
17 echo $OUTPUT->header();
18 echo $OUTPUT->heading(get_string('bloglevelupgrade', 'admin'));
20 $strbloglevelupgrade = get_string('bloglevelupgradeinfo', 'admin');
22 if (!$go or !data_submitted() or !confirm_sesskey()) {   /// Print a form
23     $optionsyes = array('go'=>1, 'sesskey'=>sesskey());
24     echo $OUTPUT->confirm($strbloglevelupgrade, new moodle_url('bloglevelupgrade.php', $optionsyes), 'index.php');
25     echo $OUTPUT->footer();
26     die;
27 }
29 echo $OUTPUT->box_start();
31 /// Turn off time limits, sometimes upgrades can be slow.
33 set_time_limit(0);
35 $i = 0;
37 // If $CFG->bloglevel is set to BLOG_GROUP_LEVEL or BLOG_COURSE_LEVEL, create a new "blog" forum in each course
38 // whose enrolled students have written blog entries, copy these entries in that forum and switch off blogs at site level
40 if ($CFG->bloglevel == BLOG_COURSE_LEVEL || $CFG->bloglevel == BLOG_GROUP_LEVEL) {
41     $pbar = new progress_bar('bloglevelupgrade', 500, true);
43     $bloggers = $DB->get_records_sql("SELECT userid FROM {post} WHERE module = 'blog' GROUP BY userid");
44     require_once($CFG->dirroot.'/mod/forum/lib.php');
46     $a = new stdClass();
47     $a->userscount = 0;
48     $a->blogcount = 0;
50     foreach ($bloggers as $blogger) {
51         $courses = enrol_get_users_courses($blogger->userid, true, 'groupmode,groupmodeforce');
52         $blogentries = $DB->get_records('post', array('module' => 'blog', 'userid' => $blogger->userid));
54         foreach ($courses as $course) {
55             $forum = forum_get_course_forum($course->id, 'blog');
56             $cm = get_coursemodule_from_instance('forum', $forum->id);
58             if ($CFG->bloglevel == BLOG_GROUP_LEVEL && $course->groupmode != NOGROUPS) {
59                 // Unless the course is set to separate groups forced, force the forum to Separate groups
60                 if (!($course->groupmode == SEPARATEGROUPS && $course->groupmodeforce)) {
61                     $cm->groupmode = SEPARATEGROUPS;
62                     $DB->update_record('course_modules', $cm);
63                 }
65                 $groups = groups_get_user_groups($course->id, $blogger->userid);
66                 foreach ($groups[0] as $groupid) { // [0] is for all groupings combined
67                     $a->blogcount += bloglevelupgrade_entries($blogentries, $forum, $cm, $groupid);
68                 }
69             } else {
70                 $a->blogcount += bloglevelupgrade_entries($blogentries, $forum, $cm);
71             }
72         }
74         $a->userscount = $i . '/' .  count($bloggers);
75         $pbar->update($i, count($bloggers), get_string('bloglevelupgradeprogress', 'admin', $a));
76         $i++;
77     }
78 }
80 function bloglevelupgrade_entries($blogentries, $forum, $cm, $groupid=-1) {
81     $count = 0;
83     $forumcontext = get_context_instance(CONTEXT_MODULE, $cm->id);
84     $sitecontext = get_context_instance(CONTEXT_SYSTEM);
86     foreach ($blogentries as $blogentry) {
87         $discussion = new stdClass();
88         $discussion->course = $forum->course;
89         $discussion->forum = $forum->id;
90         $discussion->name = $blogentry->subject;
91         $discussion->assessed = $forum->assessed;
92         $discussion->message = $blogentry->summary;
93         $discussion->messageformat = $forum->introformat;
94         $discussion->messagetrust = 0;
95         $discussion->attachments = 0;
96         $discussion->mailnow = false;
97         $discussion->timemodified = $blogentry->created;
98         $discussion->itemid = null;
99         $discussion->groupid = $groupid;
100         $message = '';
102         $discussionid = forum_add_discussion($discussion, null, $message);
104         // Copy file attachment records
105         $fs = get_file_storage();
106         $files = $fs->get_area_files($sitecontext->id, 'blog', 'attachment', $blogentry->id);
108         if (!empty($files)) {
109             foreach ($files as $storedfile) {
110                 $newfile = new stdClass();
111                 $newfile->component = 'mod_forum';
112                 $newfile->filearea = 'attachment';
113                 $newfile->itemid = $discussion->firstpost;
114                 $newfile->contextid = $forumcontext->id;
115                 $fs->create_file_from_storedfile($newfile, $storedfile->get_id());
116             }
117         }
119         $files = $fs->get_area_files($sitecontext->id, 'blog', 'post', $blogentry->id);
121         if (!empty($files)) {
122             foreach ($files as $storedfile) {
123                 $newfile = new stdClass();
124                 $newfile->component = 'mod_forum';
125                 $newfile->filearea = 'post';
126                 $newfile->itemid = $discussion->firstpost;
127                 $newfile->contextid = $forumcontext->id;
128                 $fs->create_file_from_storedfile($newfile, $storedfile->get_id());
129             }
130         }
131         $count++;
132     }
133     return $count;
135 // END OF LOOP
137 // set conversion flag - switches to new plugin automatically
138 set_config('bloglevel_upgrade_complete', 1);
139 // Finally switch bloglevel to 0 (disabled)
140 set_config('bloglevel', 0);
142 echo $OUTPUT->box_end();
144 /// Rebuild course cache which might be incorrect now
145 echo $OUTPUT->notification('Rebuilding course cache...', 'notifysuccess');
146 rebuild_course_cache();
147 echo $OUTPUT->notification('...finished', 'notifysuccess');
149 echo $OUTPUT->continue_button('index.php');
151 echo $OUTPUT->footer();
152 die;