/**
  * 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.");
     }
 }