From: vyshane Date: Fri, 25 Aug 2006 02:41:16 +0000 (+0000) Subject: Changes to take care of forum upgrade to new roles system. Backed up forums X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=e1b5643ff77a02844c6082f386630d2783d67f9f;p=moodle.git Changes to take care of forum upgrade to new roles system. Backed up forums will also be converted to the new roles system if the backup was made pre-roles. --- diff --git a/mod/forum/backuplib.php b/mod/forum/backuplib.php index 7bf899599c..9819f5008f 100644 --- a/mod/forum/backuplib.php +++ b/mod/forum/backuplib.php @@ -65,6 +65,7 @@ //Start mod fwrite ($bf,start_tag("MOD",3,true)); + //Print forum data fwrite ($bf,full_tag("ID",4,false,$forum->id)); fwrite ($bf,full_tag("MODTYPE",4,false,"forum")); diff --git a/mod/forum/db/mysql.php b/mod/forum/db/mysql.php index e8b2bf6839..9b239d47d3 100644 --- a/mod/forum/db/mysql.php +++ b/mod/forum/db/mysql.php @@ -231,168 +231,29 @@ function forum_upgrade($oldversion) { if ($oldversion < 2006081800) { // Upgrades for new roles and capabilities support. + require_once($CFG->dirroot.'/mod/forum/lib.php'); + $forummod = get_record('modules', 'name', 'forum'); if ($forums = get_records('forum')) { if (!$studentroles = get_roles_with_capability('moodle/legacy:student', CAP_ALLOW)) { - error('No default student role found'); + notice('Default student role was not found. Roles and permissions '. + 'for all your forums will have to be manually set after '. + 'this upgrade.'); } if (!$guestroles = get_roles_with_capability('moodle/legacy:guest', CAP_ALLOW)) { - error('No default guest role found'); + notice('Default guest role was not found. Roles and permissions '. + 'for teacher forums will have to be manually set after '. + 'this upgrade.'); } foreach ($forums as $forum) { - - if ($forum->type == 'teacher') { - - // Teacher forums should be converted to normal forums that - // use the Roles System to implement the old behavior. - require_once($CFG->dirroot.'/course/lib.php'); - - if (count_records('forum_discussions', 'forum', $forum->id) == 0) { - // Delete empty teacher forums. - delete_records('forum', 'id', $forum->id); - } else { - // Create a course module for the forum and assign it to - // section 0 in the course. - $mod = new object; - $mod->course = $forum->course; - $mod->module = $forummod->id; - $mod->instance = $forum->id; - $mod->section = 0; - $mod->visible = 0; - $mod->visibleold = 0; - $mod->groupmode = 0; - - if (!$cmid = add_course_module($mod)) { - error('Could not create new course module instance for the teacher forum'); - } else { - $mod->coursemodule = $cmid; - if (!$sectionid = add_mod_to_section($mod)) { - error('Could not add converted teacher forum instance to section 0 in the course'); - } else { - if (!set_field('course_modules', 'section', $sectionid, 'id', $cmid)) { - error('Could not update course module with section id'); - } - } - } - - // Change the forum type to general. - $forum->type = 'general'; - if (!update_record('forum', $forum)) { - error('Could not change forum from type teacher to type general'); - } - - $context = get_context_instance(CONTEXT_MODULE, $cmid); - - // Create overrides for default student and guest roles (prevent). - foreach($studentroles as $studentrole) { - assign_capability('mod/forum:viewforum', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:viewdiscussion', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:viewhiddentimedposts', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:startdiscussion', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:replypost', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:viewrating', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:viewanyrating', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:rate', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:createattachment', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:deleteownpost', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:deleteanypost', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:splitdiscussions', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:movediscussions', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:editanypost', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:viewqandawithoutposting', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:viewsubscribers', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:managesubscriptions', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:throttlingapplies', CAP_PREVENT, $studentrole->id, $context->id); - } - foreach($guestroles as $guestrole) { - assign_capability('mod/forum:viewforum', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:viewdiscussion', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:viewhiddentimedposts', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:startdiscussion', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:replypost', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:viewrating', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:viewanyrating', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:rate', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:createattachment', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:deleteownpost', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:deleteanypost', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:splitdiscussions', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:movediscussions', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:editanypost', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:viewqandawithoutposting', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:viewsubscribers', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:managesubscriptions', CAP_PREVENT, $guestrole->id, $context->id); - assign_capability('mod/forum:throttlingapplies', CAP_PREVENT, $guestrole->id, $context->id); - } - } - } else { - // Non-teacher forum. - - if (!$cm = get_coursemodule_from_instance('forum', $forum->id)) { - error('Could not get the course module for the forum'); - } - $context = get_context_instance(CONTEXT_MODULE, $cm->id); - - - // $forum->open defines what students can do: - // 0 = No discussions, no replies - // 1 = No discussions, but replies are allowed - // 2 = Discussions and replies are allowed - switch ($forum->open) { - case 0: - foreach ($studentroles as $studentrole) { - assign_capability('mod/forum:startdiscussion', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:replypost', CAP_PREVENT, $studentrole->id, $context->id); - } - break; - case 1: - foreach ($studentroles as $studentrole) { - assign_capability('mod/forum:startdiscussion', CAP_PREVENT, $studentrole->id, $context->id); - assign_capability('mod/forum:replypost', CAP_ALLOW, $studentrole->id, $context->id); - } - break; - case 2: - foreach ($studentroles as $studentrole) { - assign_capability('mod/forum:startdiscussion', CAP_ALLOW, $studentrole->id, $context->id); - assign_capability('mod/forum:replypost', CAP_ALLOW, $studentrole->id, $context->id); - } - break; - } - - // $forum->assessed defines whether forum rating is turned - // on (1 or 2) and who can rate posts: - // 1 = Everyone can rate posts - // 2 = Only teachers can rate posts - switch ($forum->assessed) { - case 1: - foreach ($studentroles as $studentrole) { - assign_capability('mod/forum:rate', CAP_ALLOW, $studentrole->id, $context->id); - } - // The legacy teacher role can already rate forum posts by default. - break; - case 2: - // The legacy student role cannot rate forum posts by default. - // The legacy teacher role can already rate forum posts by default. - break; - } - - // $forum->assesspublic defines whether students can see - // everybody's ratings: - // 0 = Students can only see their own ratings - // 1 = Students can see everyone's ratings - switch ($forum->assesspublic) { - case 0: - // This is already the behavior of the default legacy roles. - break; - case 1: - assign_capability('mod/forum:viewanyrating', CAP_ALLOW, $studentrole->id, $context->id); - break; - } + if (!forum_convert_to_roles($forum, $forummod->id, + $studentroles, $guestroles)) { + notice('Forum with id '.$forum->id.' was not upgraded'); } - } // End foreach $forums. + } // Drop column forum.open. modify_database('', 'ALTER TABLE prefix_forum DROP COLUMN open;'); diff --git a/mod/forum/lib.php b/mod/forum/lib.php index dc791f6c18..410047e317 100644 --- a/mod/forum/lib.php +++ b/mod/forum/lib.php @@ -1542,11 +1542,7 @@ function forum_subscribed_users($course, $forum, $groupid=0) { } if (forum_is_forcesubscribed($forum->id)) { - if ($forum->type == "teacher") { - return get_course_teachers($course->id); // Only teachers can be subscribed to teacher forums - } else { - return get_course_users($course->id); // Otherwise get everyone in the course - } + return get_course_users($course->id); // Otherwise get everyone in the course } return get_records_sql("SELECT u.id, u.username, u.firstname, u.lastname, u.maildisplay, u.mailformat, u.maildigest, u.emailstop, u.email, u.city, u.country, u.lastaccess, u.lastlogin, u.picture, u.timezone, u.lang, u.trackforums @@ -1604,30 +1600,28 @@ function forum_get_course_forum($courseid, $type) { $forum->timemodified = time(); $forum->id = insert_record("forum", $forum); - if ($forum->type != "teacher") { - if (! $module = get_record("modules", "name", "forum")) { - notify("Could not find forum module!!"); - return false; - } - $mod->course = $courseid; - $mod->module = $module->id; - $mod->instance = $forum->id; - $mod->section = 0; - if (! $mod->coursemodule = add_course_module($mod) ) { // assumes course/lib.php is loaded - notify("Could not add a new course module to the course '$course->fullname'"); - return false; - } - if (! $sectionid = add_mod_to_section($mod) ) { // assumes course/lib.php is loaded - notify("Could not add the new course module to that section"); - return false; - } - if (! set_field("course_modules", "section", $sectionid, "id", $mod->coursemodule)) { - notify("Could not update the course module with the correct section"); - return false; - } - include_once("$CFG->dirroot/course/lib.php"); - rebuild_course_cache($courseid); + if (! $module = get_record("modules", "name", "forum")) { + notify("Could not find forum module!!"); + return false; } + $mod->course = $courseid; + $mod->module = $module->id; + $mod->instance = $forum->id; + $mod->section = 0; + if (! $mod->coursemodule = add_course_module($mod) ) { // assumes course/lib.php is loaded + notify("Could not add a new course module to the course '$course->fullname'"); + return false; + } + if (! $sectionid = add_mod_to_section($mod) ) { // assumes course/lib.php is loaded + notify("Could not add the new course module to that section"); + return false; + } + if (! set_field("course_modules", "section", $sectionid, "id", $mod->coursemodule)) { + notify("Could not update the course module with the correct section"); + return false; + } + include_once("$CFG->dirroot/course/lib.php"); + rebuild_course_cache($courseid); return get_record("forum", "id", "$forum->id"); } @@ -4109,8 +4103,8 @@ function forum_delete_userdata($data, $showfeedback=true) { } } -// Called by course/reset.php +// Called by course/reset.php function forum_reset_course_form($course) { echo get_string('resetforums', 'forum'); echo ':
'; print_checkbox('reset_forum_news', 1, true, get_string('namenews','forum'), '', ''); echo '
'; @@ -4120,4 +4114,186 @@ function forum_reset_course_form($course) { print_checkbox('reset_forum_general', 1, true, get_string('generalforum','forum'), '', ''); echo '
'; } -?> + +/** + * Converts a forum to use the Roles System + * @param $forum - a forum object with the same attributes as a record + * from the forum database table + * @param $forummodid - the id of the forum module, from the modules table + * @param $studentroles - array of roles that have the moodle/legacy:student + * capability + * @param $guestroles - array of roles that have the moodle/legacy:guest + * capability + * @param $cmid - the course_module id for this forum instance + * @return boolean - forum was converted or not + */ +function forum_convert_to_roles($forum, $forummodid, $studentroles=array(), $guestroles=array(), $cmid=NULL) { + + global $CFG; + + if (!isset($forum->open) && !isset($forum->assesspublic)) { + // We assume that this forum has already been converted to use the + // Roles System. Columns forum.open and forum.assesspublic get dropped + // once the forum module has been upgraded to use Roles. + return false; + } + + if ($forum->type == 'teacher') { + + // Teacher forums should be converted to normal forums that + // use the Roles System to implement the old behavior. + require_once($CFG->dirroot.'/course/lib.php'); + + if (count_records('forum_discussions', 'forum', $forum->id) == 0) { + // Delete empty teacher forums. + delete_records('forum', 'id', $forum->id); + } else { + // Create a course module for the forum and assign it to + // section 0 in the course. + $mod = new object; + $mod->course = $forum->course; + $mod->module = $forummodid; + $mod->instance = $forum->id; + $mod->section = 0; + $mod->visible = 0; + $mod->visibleold = 0; + $mod->groupmode = 0; + + if (!$cmid = add_course_module($mod)) { + error('Could not create new course module instance for the teacher forum'); + } else { + $mod->coursemodule = $cmid; + if (!$sectionid = add_mod_to_section($mod)) { + error('Could not add converted teacher forum instance to section 0 in the course'); + } else { + if (!set_field('course_modules', 'section', $sectionid, 'id', $cmid)) { + error('Could not update course module with section id'); + } + } + } + + // Change the forum type to general. + $forum->type = 'general'; + if (!update_record('forum', $forum)) { + error('Could not change forum from type teacher to type general'); + } + + $context = get_context_instance(CONTEXT_MODULE, $cmid); + + // Create overrides for default student and guest roles (prevent). + foreach ($studentroles as $studentrole) { + assign_capability('mod/forum:viewforum', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:viewdiscussion', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:viewhiddentimedposts', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:startdiscussion', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:replypost', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:viewrating', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:viewanyrating', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:rate', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:createattachment', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:deleteownpost', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:deleteanypost', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:splitdiscussions', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:movediscussions', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:editanypost', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:viewqandawithoutposting', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:viewsubscribers', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:managesubscriptions', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:throttlingapplies', CAP_PREVENT, $studentrole->id, $context->id); + } + foreach ($guestroles as $guestrole) { + assign_capability('mod/forum:viewforum', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:viewdiscussion', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:viewhiddentimedposts', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:startdiscussion', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:replypost', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:viewrating', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:viewanyrating', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:rate', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:createattachment', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:deleteownpost', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:deleteanypost', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:splitdiscussions', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:movediscussions', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:editanypost', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:viewqandawithoutposting', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:viewsubscribers', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:managesubscriptions', CAP_PREVENT, $guestrole->id, $context->id); + assign_capability('mod/forum:throttlingapplies', CAP_PREVENT, $guestrole->id, $context->id); + } + } + } else { + // Non-teacher forum. + + if (empty($cmid)) { + // We were not given the course_module id. Try to find it. + if (!$cm = get_coursemodule_from_instance('forum', $forum->id)) { + notice('Could not get the course module for the forum'); + continue; + } else { + $cmid = $cm->id; + } + } + $context = get_context_instance(CONTEXT_MODULE, $cmid); + + // $forum->open defines what students can do: + // 0 = No discussions, no replies + // 1 = No discussions, but replies are allowed + // 2 = Discussions and replies are allowed + switch ($forum->open) { + case 0: + foreach ($studentroles as $studentrole) { + assign_capability('mod/forum:startdiscussion', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:replypost', CAP_PREVENT, $studentrole->id, $context->id); + } + break; + case 1: + foreach ($studentroles as $studentrole) { + assign_capability('mod/forum:startdiscussion', CAP_PREVENT, $studentrole->id, $context->id); + assign_capability('mod/forum:replypost', CAP_ALLOW, $studentrole->id, $context->id); + } + break; + case 2: + foreach ($studentroles as $studentrole) { + assign_capability('mod/forum:startdiscussion', CAP_ALLOW, $studentrole->id, $context->id); + assign_capability('mod/forum:replypost', CAP_ALLOW, $studentrole->id, $context->id); + } + break; + } + + // $forum->assessed defines whether forum rating is turned + // on (1 or 2) and who can rate posts: + // 1 = Everyone can rate posts + // 2 = Only teachers can rate posts + switch ($forum->assessed) { + case 1: + foreach ($studentroles as $studentrole) { + assign_capability('mod/forum:rate', CAP_ALLOW, $studentrole->id, $context->id); + } + // The legacy teacher role can already rate forum posts by default. + break; + case 2: + // The legacy student role cannot rate forum posts by default. + // The legacy teacher role can already rate forum posts by default. + break; + } + + // $forum->assesspublic defines whether students can see + // everybody's ratings: + // 0 = Students can only see their own ratings + // 1 = Students can see everyone's ratings + switch ($forum->assesspublic) { + case 0: + // This is already the behavior of the default legacy roles. + break; + case 1: + assign_capability('mod/forum:viewanyrating', CAP_ALLOW, $studentrole->id, $context->id); + break; + } + } + return true; +} + + + +?> \ No newline at end of file diff --git a/mod/forum/restorelib.php b/mod/forum/restorelib.php index ff84e3d4ec..b1a4e6f865 100644 --- a/mod/forum/restorelib.php +++ b/mod/forum/restorelib.php @@ -33,7 +33,7 @@ //----------------------------------------------------------- function forum_restore_mods($mod,$restore) { - + global $CFG,$db; $status = true; @@ -53,6 +53,18 @@ $forum->type = backup_todb($info['MOD']['#']['TYPE']['0']['#']); $forum->name = backup_todb($info['MOD']['#']['NAME']['0']['#']); $forum->intro = backup_todb($info['MOD']['#']['INTRO']['0']['#']); + + + // These get dropped in Moodle 1.7 when the new Roles System gets + // set up. Therefore they might or not be there depending on whether + // we are restoring a 1.6+ forum or a 1.7 or later forum backup. + if (isset($info['MOD']['#']['OPEN']['0']['#'])) { + $forum->open = backup_todb($info['MOD']['#']['OPEN']['0']['#']); + } + if (isset($info['MOD']['#']['ASSESSPUBLIC']['0']['#'])) { + $forum->assesspublic = backup_todb($info['MOD']['#']['ASSESSPUBLIC']['0']['#']); + } + $forum->assessed = backup_todb($info['MOD']['#']['ASSESSED']['0']['#']); $forum->assesstimestart = backup_todb($info['MOD']['#']['ASSESSTIMESTART']['0']['#']); $forum->assesstimefinish = backup_todb($info['MOD']['#']['ASSESSTIMEFINISH']['0']['#']); @@ -67,6 +79,7 @@ $forum->blockafter = backup_todb($info['MOD']['#']['BLOCKAFTER']['0']['#']); $forum->blockperiod = backup_todb($info['MOD']['#']['BLOCKPERIOD']['0']['#']); + //We have to recode the scale field if it's <0 (positive is a grade, not a scale) if ($forum->scale < 0) { $scale = backup_getid($restore->backup_unique_code,"scale",abs($forum->scale)); @@ -74,9 +87,9 @@ $forum->scale = -($scale->new_id); } } - - $newid = insert_record ('forum', $forum); + $newid = insert_record("forum", $forum); + //Do some output if (!defined('RESTORE_SILENTLY')) { @@ -88,6 +101,9 @@ //We have the newid, update backup_ids backup_putid($restore->backup_unique_code,$mod->modtype, $mod->id, $newid); + + $forum->id = $newid; + //Now check if want to restore user data and do it. if (restore_userdata_selected($restore,'forum',$mod->id)) { //Restore forum_subscriptions @@ -130,10 +146,34 @@ set_field ('forum_posts','mailed', '1', 'discussion', $sdid); } } - + } else { $status = false; } + + // If the backup contained $forum->open and $forum->assesspublic, + // we need to convert the forum to use Roles. It means the backup + // was made pre Moodle 1.7. We check the backup_version to make + // sure. + if ($restore->backup_version < 2006082300 && + isset($forum->open) && isset($forum->assesspublic)) { + + $forummod = get_record('modules', 'name', 'forum'); + + if (!$studentroles = get_roles_with_capability('moodle/legacy:student', CAP_ALLOW)) { + notice('Default student role was not found. Roles and permissions '. + 'for all your forums will have to be manually set.'); + } + if (!$guestroles = get_roles_with_capability('moodle/legacy:guest', CAP_ALLOW)) { + notice('Default guest role was not found. Roles and permissions '. + 'for teacher forums will have to be manually set.'); + } + require_once($CFG->dirroot.'/mod/forum/lib.php'); + forum_convert_to_roles($forum, $forummod->id, + $studentroles, $guestroles, + $restore->mods['forum']->instances[$mod->id]->restored_as_course_module); + } + } else { $status = false; } @@ -149,7 +189,10 @@ $status = true; //Get the discussions array - $subscriptions = $info['MOD']['#']['SUBSCRIPTIONS']['0']['#']['SUBSCRIPTION']; + $subscriptions = array(); + if (isset($info['MOD']['#']['SUBSCRIPTIONS']['0']['#']['SUBSCRIPTION'])) { + $subscriptions = $info['MOD']['#']['SUBSCRIPTIONS']['0']['#']['SUBSCRIPTION']; + } //Iterate over subscriptions for($i = 0; $i < sizeof($subscriptions); $i++) { @@ -307,7 +350,10 @@ $status = true; //Get the read array - $readposts = $info['MOD']['#']['READPOSTS']['0']['#']['READ']; + $readposts = array(); + if (isset($info['MOD']['#']['READPOSTS']['0']['#']['READ'])) { + $readposts = $info['MOD']['#']['READPOSTS']['0']['#']['READ']; + } //Iterate over readposts for($i = 0; $i < sizeof($readposts); $i++) { @@ -548,7 +594,10 @@ $status = true; //Get the ratings array - $ratings = $info['#']['RATINGS']['0']['#']['RATING']; + $ratings = array(); + if (isset($info['#']['RATINGS']['0']['#']['RATING'])) { + $ratings = $info['#']['RATINGS']['0']['#']['RATING']; + } //Iterate over ratings for($i = 0; $i < sizeof($ratings); $i++) {