/** * Either delete or archive old discussions based on the forum setting */ static function archive_old_discussions() { global $CFG; $now = time(); $housekeepingquery = " \nFROM \n {$CFG->prefix}forumng_discussions fd\n INNER JOIN {$CFG->prefix}forumng_posts fp ON fd.lastpostid = fp.id\n INNER JOIN {$CFG->prefix}forumng f ON fd.forumid = f.id\nWHERE\n f.removeafter<>0 AND fd.sticky<>1 AND fp.modified<{$now} - f.removeafter \n"; $count = forum_utils::count_records_sql("SELECT COUNT(1) {$housekeepingquery}"); if ($count) { mtrace("\nBeginning processing {$count} discussion archiving/deleting requests"); $housekeepingrs = forum_utils::get_recordset_sql("\nSELECT \n fd.id AS discussionid, f.id AS forumid, f.removeafter, f.removeto {$housekeepingquery} ORDER BY f.removeto\n "); $targetforum = null; $targetcourseid = null; $cron_log = ''; $discussionmovecount = 0; $discussiondeletecount = 0; while ($rec = rs_fetch_next_record($housekeepingrs)) { $discussion = forum_discussion::get_from_id($rec->discussionid, forum::CLONE_DIRECT); if ($rec->removeto) { //moving to a different forum $forum = $discussion->get_forum(); $course = $forum->get_course(); $modinfo = get_fast_modinfo($course); if ($forum->can_archive_forum($modinfo, $cron_log)) { //Do not get the target forum and course id again if the target forum is the same if (!$targetforum || $targetforum->get_id() != $rec->removeto) { $targetforum = forum::get_from_id($rec->removeto, forum::CLONE_DIRECT); $targetforum = $targetforum->get_real_forum(); } //target discussion groupid must be the same as the original groupid $targetgroupmode = $targetforum->get_group_mode(); $targetgroupid = $targetgroupmode ? $discussion->get_group_id() : null; $discussion->move($targetforum, $targetgroupid); $discussionmovecount++; } } else { //Delete all discussions and relevant data permanently $discussion->permanently_delete(); $discussiondeletecount++; } } rs_close($housekeepingrs); mtrace("\n {$discussionmovecount} discussions have been archived and {$discussiondeletecount} discussions have been deleted permanently."); } }