/**
  * Run forumng cron send forum emails digest.
  */
 public function execute()
 {
     global $CFG;
     // Duplicate of check in email_to_user.
     if (!empty($CFG->noemailever)) {
         mtrace("Not sending forum email digest because all mail is disabled.");
         return;
     }
     require_once $CFG->dirroot . '/mod/forumng/mod_forumng_cron.php';
     \mod_forumng_cron::email_digest();
 }
 /**
  * Run forumng cron daily housekeeping.
  */
 public function execute()
 {
     global $CFG;
     require_once $CFG->dirroot . '/mod/forumng/mod_forumng_cron.php';
     \mod_forumng_cron::daily_housekeeping();
 }
 /**
  * Tests deleting discussion and permanent delete
  * Checks completion
  */
 public function test_delete()
 {
     global $DB, $USER, $SITE, $CFG;
     require_once $CFG->dirroot . '/mod/forumng/mod_forumng_cron.php';
     $CFG->enablecompletion = true;
     $this->resetAfterTest(true);
     $this->setAdminUser();
     $course = $this->get_new_course();
     $course->enablecompletion = 1;
     update_course($course);
     $forum = $this->get_new_forumng($course->id, array('removeafter' => 1, 'removeto' => 0, 'completion' => 2, 'completiondiscussions' => 1));
     $completion = new completion_info($forum->get_course());
     $discussion = $this->get_new_discussion($forum, array('userid' => $USER->id));
     $root1 = $discussion->get_root_post();
     // Get completion status.
     $complete = $completion->get_data($forum->get_course_module());
     $this->assertEquals(COMPLETION_COMPLETE, $complete->completionstate);
     $discussion2 = $this->get_new_discussion($forum, array('userid' => $USER->id));
     // Make post old.
     $root2 = $discussion2->get_root_post();
     $dataobject = new stdClass();
     $dataobject->id = $root2->get_id();
     $dataobject->modified = $root2->get_modified() - 100;
     $DB->update_record('forumng_posts', $dataobject);
     // Check perm delete by manual call.
     $discussion->permanently_delete(false);
     $this->assertFalse($DB->get_record('forumng_discussions', array('id' => $discussion->get_id())));
     $this->assertFalse($DB->get_record('forumng_posts', array('id' => $root1->get_id())));
     // Check cron cleanup (Does permanently_delete() on discussion2).
     mod_forumng_cron::archive_old_discussions();
     $this->assertFalse($DB->get_record('forumng_discussions', array('id' => $discussion2->get_id())));
     $this->assertFalse($DB->get_record('forumng_posts', array('id' => $root2->get_id())));
     $complete = $completion->get_data($forum->get_course_module());
     $this->assertEquals(COMPLETION_INCOMPLETE, $complete->completionstate);
     if (mod_forumng::search_installed()) {
         $searchdoc = $root2->search_get_document();
         $this->assertFalse($searchdoc->find());
         $query = new local_ousearch_search('Message for discussion');
         $query->set_coursemodule($forum->get_course_module(true));
         $results = $query->query();
         $this->assertEmpty($results->results);
     }
 }
示例#4
0
function forumng_cron()
{
    require_once dirname(__FILE__) . '/mod_forumng_cron.php';
    try {
        mod_forumng_cron::cron();
    } catch (moodle_exception $e) {
        mtrace("A forum exception occurred and forum cron was aborted: " . $e->getMessage() . "\n\n" . $e->debuginfo . "\n\n" . $e->getTraceAsString() . "\n\n");
    }
}
 /**
  * Tests discussion locking
  */
 public function test_lock()
 {
     global $USER, $DB;
     $this->resetAfterTest();
     $this->setAdminUser();
     $course1 = $this->get_new_course();
     $orig = $this->get_new_forumng($course1->id, array('removeto' => -1, 'removeafter' => 1));
     $dis = $this->get_new_discussion($orig, array('userid' => $USER->id));
     $dis2 = $this->get_new_discussion($orig, array('userid' => $USER->id));
     $dis3 = $this->get_new_discussion($orig, array('userid' => $USER->id));
     // Alter post modified times to in past.
     foreach ($DB->get_records('forumng_posts') as $post) {
         $new = new stdClass();
         $new->id = $post->id;
         $new->modified = 1420070400;
         $DB->update_record('forumng_posts', $new);
     }
     // Delete dis2 so not auto-locked.
     $dis2->delete(false);
     $this->assertFalse($dis->is_locked());
     $this->assertFalse($dis->is_auto_locked());
     $lockpostid = $dis->lock('sub', 'mess', FORMAT_HTML);
     $this->assertTrue($dis->is_locked());
     $this->assertFalse($dis->is_auto_locked());
     $dis = mod_forumng_discussion::get_from_id($dis->get_id(), mod_forumng::CLONE_DIRECT);
     $this->assertTrue($dis->is_locked());
     $this->assertFalse($dis->is_auto_locked());
     $dis->unlock();
     $this->assertFalse($dis->is_locked());
     $this->assertFalse($dis->is_auto_locked());
     $lockpost = mod_forumng_post::get_from_id($lockpostid, mod_forumng::CLONE_DIRECT);
     $this->assertNotEmpty($lockpost->get_deleted());
     // Check auto-locking ($dis3 should be auto-locked only).
     $dis->lock('', '', FORMAT_HTML);
     mod_forumng_cron::archive_old_discussions();
     $dis = mod_forumng_discussion::get_from_id($dis->get_id(), mod_forumng::CLONE_DIRECT);
     $dis2 = mod_forumng_discussion::get_from_id($dis2->get_id(), mod_forumng::CLONE_DIRECT);
     $dis3 = mod_forumng_discussion::get_from_id($dis3->get_id(), mod_forumng::CLONE_DIRECT);
     $this->assertTrue($dis->is_locked());
     $this->assertFalse($dis->is_auto_locked());
     $this->assertFalse($dis2->is_locked());
     $this->assertFalse($dis2->is_auto_locked());
     $this->assertTrue($dis3->is_locked());
     $this->assertTrue($dis3->is_auto_locked());
 }