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();
29 echo $OUTPUT->box_start();
31 /// Turn off time limits, sometimes upgrades can be slow.
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');
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);
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);
70 $a->blogcount +
= bloglevelupgrade_entries($blogentries, $forum, $cm);
74 $a->userscount
= $i . '/' . count($bloggers);
75 $pbar->update($i, count($bloggers), get_string('bloglevelupgradeprogress', 'admin', $a));
80 function bloglevelupgrade_entries($blogentries, $forum, $cm, $groupid=-1) {
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
= $blogentry->summaryformat
;
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;
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());
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());
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();