Commit | Line | Data |
---|---|---|
20207b82 | 1 | <?php |
ec22ccd5 NC |
2 | /// Create "blog" forums in each course and copy blog entries from these courses' participants in these forums |
3 | ||
4 | require_once('../config.php'); | |
5 | require_once($CFG->dirroot.'/course/lib.php'); | |
6 | require_once($CFG->dirroot.'/blog/lib.php'); | |
7 | require_once($CFG->dirroot.'/mod/forum/lib.php'); | |
8 | require_once($CFG->libdir.'/adminlib.php'); | |
9 | ||
10 | admin_externalpage_setup('bloglevelupgrade'); | |
78946b9b | 11 | $PAGE->set_pagelayout('maintenance'); |
ec22ccd5 NC |
12 | |
13 | $go = optional_param('go', 0, PARAM_BOOL); | |
14 | ||
61ef8f9f | 15 | echo $OUTPUT->header(); |
ec22ccd5 NC |
16 | echo $OUTPUT->heading(get_string('bloglevelupgrade', 'admin')); |
17 | ||
18 | $strbloglevelupgrade = get_string('bloglevelupgradeinfo', 'admin'); | |
19 | ||
20 | if (!$go or !data_submitted() or !confirm_sesskey()) { /// Print a form | |
21 | $optionsyes = array('go'=>1, 'sesskey'=>sesskey()); | |
22 | echo $OUTPUT->confirm($strbloglevelupgrade, new moodle_url('bloglevelupgrade.php', $optionsyes), 'index.php'); | |
23 | echo $OUTPUT->footer(); | |
24 | die; | |
25 | } | |
26 | ||
27 | echo $OUTPUT->box_start(); | |
28 | ||
29 | /// Turn off time limits, sometimes upgrades can be slow. | |
30 | ||
31 | @set_time_limit(0); | |
32 | @ob_implicit_flush(true); | |
33 | while(@ob_end_flush()); | |
34 | ||
35 | $i = 0; | |
36 | ||
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 | |
39 | ||
40 | if ($CFG->bloglevel == BLOG_COURSE_LEVEL || $CFG->bloglevel == BLOG_GROUP_LEVEL) { | |
41 | $pbar = new progress_bar('bloglevelupgrade', 500, true); | |
42 | ||
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'); | |
45 | ||
46 | $a = new object(); | |
47 | $a->userscount = 0; | |
48 | $a->blogcount = 0; | |
49 | ||
50 | foreach ($bloggers as $blogger) { | |
df997f84 | 51 | $courses = enrol_get_users_courses($blogger->userid, true, 'groupmode,groupmodeforce'); |
ec22ccd5 NC |
52 | $blogentries = $DB->get_records('post', array('module' => 'blog', 'userid' => $blogger->userid)); |
53 | ||
54 | foreach ($courses as $course) { | |
55 | $forum = forum_get_course_forum($course->id, 'blog'); | |
56 | $cm = get_coursemodule_from_instance('forum', $forum->id); | |
57 | ||
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 | } | |
64 | ||
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 | } | |
73 | ||
74 | $a->userscount = $i . '/' . count($bloggers); | |
75 | $pbar->update($i, count($bloggers), get_string('bloglevelupgradeprogress', 'admin', $a)); | |
76 | $i++; | |
77 | } | |
78 | } | |
79 | ||
80 | function bloglevelupgrade_entries($blogentries, $forum, $cm, $groupid=-1) { | |
81 | $count = 0; | |
82 | ||
83 | $forumcontext = get_context_instance(CONTEXT_MODULE, $cm->id); | |
84 | $sitecontext = get_context_instance(CONTEXT_SYSTEM); | |
85 | ||
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->intro = $blogentry->summary; | |
92 | $discussion->assessed = $forum->assessed; | |
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 = ''; | |
101 | ||
102 | $discussionid = forum_add_discussion($discussion, null, $message); | |
103 | ||
104 | // Copy file attachment records | |
105 | $fs = get_file_storage(); | |
106 | $files = $fs->get_area_files($sitecontext->id, 'blog_attachment', $blogentry->id); | |
107 | ||
108 | if (!empty($files)) { | |
109 | foreach ($files as $storedfile) { | |
110 | $newfile = new object(); | |
111 | $newfile->filearea = 'forum_attachment'; | |
112 | $newfile->itemid = $discussion->firstpost; | |
113 | $newfile->contextid = $forumcontext->id; | |
114 | $fs->create_file_from_storedfile($newfile, $storedfile->get_id()); | |
115 | } | |
116 | } | |
117 | ||
118 | $files = $fs->get_area_files($sitecontext->id, 'blog_post', $blogentry->id); | |
119 | ||
120 | if (!empty($files)) { | |
121 | foreach ($files as $storedfile) { | |
122 | $newfile = new object(); | |
123 | $newfile->filearea = 'forum_post'; | |
124 | $newfile->itemid = $discussion->firstpost; | |
125 | $newfile->contextid = $forumcontext->id; | |
126 | $fs->create_file_from_storedfile($newfile, $storedfile->get_id()); | |
127 | } | |
128 | } | |
129 | $count++; | |
130 | } | |
131 | return $count; | |
132 | } | |
133 | // END OF LOOP | |
134 | ||
135 | // set conversion flag - switches to new plugin automatically | |
136 | set_config('bloglevel_upgrade_complete', 1); | |
137 | // Finally switch bloglevel to 0 (disabled) | |
138 | set_config('bloglevel', 0); | |
139 | ||
140 | echo $OUTPUT->box_end(); | |
141 | ||
142 | /// Rebuild course cache which might be incorrect now | |
143 | echo $OUTPUT->notification('Rebuilding course cache...', 'notifysuccess'); | |
144 | rebuild_course_cache(); | |
145 | echo $OUTPUT->notification('...finished', 'notifysuccess'); | |
146 | ||
147 | echo $OUTPUT->continue_button('index.php'); | |
148 | ||
149 | echo $OUTPUT->footer(); | |
150 | die; |