Skip to content
Snippets Groups Projects
Unverified Commit 08121386 authored by Tobias Reischmann's avatar Tobias Reischmann
Browse files

Switched trigger to extending where clause

parent 86cc2253
No related branches found
No related tags found
No related merge requests found
......@@ -39,11 +39,6 @@ require_once(__DIR__ . '/../../lib.php');
*/
class categories extends base_automatic {
/**
* Cache for all categories to calculate it only once.
*/
private $allcategoriescache;
/**
* Checks the course and returns a repsonse, which tells if the course should be further processed.
* @param $course object to be processed.
......@@ -51,45 +46,32 @@ class categories extends base_automatic {
* @return trigger_response
*/
public function check_course($course, $triggerid) {
$categories = settings_manager::get_settings($triggerid, SETTINGS_TYPE_TRIGGER)['categories'];
$exclude = settings_manager::get_settings($triggerid, SETTINGS_TYPE_TRIGGER)['exclude'] && true;
$courseincategory = $this->course_is_within_categories($course, explode(',', $categories));
/*
* I want to trigger the course if ...
* - the course is within the categories and I don't want to exclude those courses.
* $exclude = false
* $courseincategory = true
* - the course is not within the categories and I want to exclude all courses that do.
* $exclude = true
* $courseincategory = false
* that is why the unequal is valid here.
*/
if ($courseincategory !== $exclude) {
// Every decision is already in the where statement.
return trigger_response::trigger();
}
return trigger_response::next();
}
/**
* Tells if the course is within the listed categories.
* @param $course object course to be checked.
* @param $categories int[] of category ids.
* @return bool
*/
private function course_is_within_categories($course, $categories) {
if (!$this->allcategoriescache) {
public function get_course_recordset_where($triggerid) {
global $DB, $CFG;
$categories = settings_manager::get_settings($triggerid, SETTINGS_TYPE_TRIGGER)['categories'];
$exclude = settings_manager::get_settings($triggerid, SETTINGS_TYPE_TRIGGER)['exclude'] && true;
require_once($CFG->libdir . '/coursecatlib.php');
$categoryobjects = coursecat::get_many($categories);
$this->allcategoriescache = array();
$allcategories = array();
foreach ($categories as $category) {
array_push($this->allcategoriescache, $category);
array_push($allcategories , $category);
$children = $categoryobjects[$category]->get_all_children_ids();
$this->allcategoriescache = array_merge($this->allcategoriescache, $children);
$allcategories = array_merge($allcategories , $children);
}
list($insql, $inparams) = $DB->get_in_or_equal($allcategories, SQL_PARAMS_NAMED);
$where = "{course}.category {$insql}";
if ($exclude) {
$where = "NOT " . $where;
}
return array_search($course->category, $this->allcategoriescache) !== false;
return array($where, $inparams);
}
public function get_subpluginname() {
......
......@@ -40,8 +40,6 @@ require_once(__DIR__ . '/../../lib.php');
*/
class specificdate extends base_automatic {
private $alreadychecked = array();
/**
* Checks the course and returns a repsonse, which tells if the course should be further processed.
* @param $course object to be processed.
......@@ -49,7 +47,11 @@ class specificdate extends base_automatic {
* @return trigger_response
*/
public function check_course($course, $triggerid) {
if (!array_key_exists($triggerid, $this->alreadychecked)) {
// Everything is already in the sql statement.
return trigger_response::trigger();
}
public function get_course_recordset_where($triggerid) {
$settings = settings_manager::get_settings($triggerid, SETTINGS_TYPE_TRIGGER);
$lastrun = getdate($settings['timelastrun']);
$datesraw = $settings['dates'];
......@@ -57,18 +59,17 @@ class specificdate extends base_automatic {
$triggerat = array();
foreach ($dates as $date) {
if ($date['mon'] > $lastrun['mon']) {
$date = new DateTime($lastrun['year'].'-'.$date['mon'].'-'.$date['day']);
}
if ($date['mon'] === $lastrun['mon']) {
if ($date['day'] > $lastrun['day']) {
$date = new DateTime($lastrun['year'].'-'.$date['mon'].'-'.$date['day']);
foreach ($dates as $dateparts) {
if ($dateparts['mon'] > $lastrun['mon']) {
$date = new DateTime($lastrun['year'].'-'.$dateparts['mon'].'-'.$dateparts['day']);
} else if ($dateparts['mon'] === $lastrun['mon']) {
if ($dateparts['day'] > $lastrun['day']) {
$date = new DateTime($lastrun['year'].'-'.$dateparts['mon'].'-'.$dateparts['day']);
} else {
$date = new DateTime(($lastrun['year'] + 1) .'-'.$date['mon'].'-'.$date['day']);
$date = new DateTime(($lastrun['year'] + 1) .'-'.$dateparts['mon'].'-'.$dateparts['day']);
}
} else {
$date = new DateTime(($lastrun['year'] + 1) .'-'.$date['mon'].'-'.$date['day']);
$date = new DateTime(($lastrun['year'] + 1) .'-'.$dateparts['mon'].'-'.$dateparts['day']);
}
$triggerat [] = $date->getTimestamp();
......@@ -80,16 +81,13 @@ class specificdate extends base_automatic {
foreach ($triggerat as $timestamp) {
if ($timestamp < $current) {
$this->alreadychecked[$triggerid] = trigger_response::trigger();
$settings['timelastrun'] = $current;
$trigger = trigger_manager::get_instance($triggerid);
settings_manager::save_settings($triggerid, SETTINGS_TYPE_TRIGGER, $trigger->subpluginname, $settings);
return $this->alreadychecked[$triggerid];
}
return array('true', array());
}
$this->alreadychecked[$triggerid] = trigger_response::next();
}
return $this->alreadychecked[$triggerid];
return array('false', array());
}
/**
......
......@@ -46,12 +46,17 @@ class startdatedelay extends base_automatic {
* @return trigger_response
*/
public function check_course($course, $triggerid) {
$delay = settings_manager::get_settings($triggerid, SETTINGS_TYPE_TRIGGER)['delay'];
$now = time();
if ($course->startdate + $delay < $now) {
// Everything is already in the sql statement.
return trigger_response::trigger();
}
return trigger_response::next();
public function get_course_recordset_where($triggerid) {
$delay = settings_manager::get_settings($triggerid, SETTINGS_TYPE_TRIGGER)['delay'];
$where = "{course}.startdate < :startdatedelay";
$params = array(
"startdatedelay" => time() - $delay,
);
return array($where, $params);
}
public function get_subpluginname() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment