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