Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 44 additions & 6 deletions lbplanner/classes/helpers/course_helper.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
namespace local_lbplanner\helpers;

use core\context\course as context_course;
use core_tag_collection;
use core_tag_tag;
use DateTimeImmutable;
use dml_exception;
use dml_write_exception;
use local_lbplanner\model\course;
Expand All @@ -36,6 +39,11 @@ class course_helper {
*/
const EDUPLANNER_COURSE_TABLE = 'local_lbplanner_courses';

/**
* The tag name to identify courses as "should show up in eduplanner"
*/
const EDUPLANNER_TAG = 'eduplanner';

/**
* A list of nice colors to choose from :)
*/
Expand Down Expand Up @@ -81,21 +89,51 @@ public static function get_all_eduplanner_courses(bool $onlyenrolled=true): arra
global $DB, $USER;
$userid = $USER->id;

$lbptag = core_tag_tag::get_by_name(core_tag_collection::get_default(), self::EDUPLANNER_TAG, strictness:MUST_EXIST);

/* NOTE: We could use enrol_get_my_courses() and get_courses() here.
But their perf is so abysmal that we have to roll our own function.
The code is largely leaned on how these functions work internally, optimized for our purposes. */
if ($onlyenrolled) {
$mdlcourses = enrol_get_my_courses();
$mdlcourses = $DB->get_records_sql("
SELECT c.* FROM {course} c
INNER JOIN {enrol} e ON e.courseid = c.id
INNER JOIN {user_enrolments} ue ON (ue.enrolid = e.id AND ue.userid = :userid)
INNER JOIN {tag_instance} ti ON (ti.itemid = c.id)
WHERE
ue.status = :active
AND e.status = :enabled
AND ue.timestart <= :now
AND c.enddate > :ayearago
AND ti.tagid = :lbptagid
AND ti.itemtype = \"course\"",
[
"userid" => $userid,
"active" => ENROL_USER_ACTIVE,
"enabled" => ENROL_INSTANCE_ENABLED,
"now" => time(),
"ayearago" => (new DateTimeImmutable('1 year ago'))->getTimestamp(),
"lbptagid" => $lbptag->id,
]
);
} else {
$mdlcourses = get_courses();
$mdlcourses = $DB->get_records_sql("
SELECT c.* FROM {course} c
INNER JOIN {tag_instance} ti ON (ti.itemid = c.id)
WHERE c.enddate > :ayearago AND ti.tagid = :lbptagid AND ti.itemtype = \"course\"",
[
"now" => time(),
"ayearago" => (new DateTimeImmutable('1 year ago'))->getTimestamp(),
"lbptagid" => $lbptag->id,
]
);
}
// Remove Duplicates.
$mdlcourses = array_unique($mdlcourses, SORT_REGULAR);
$results = [];

foreach ($mdlcourses as $mdlcourse) {
$courseid = $mdlcourse->id;
// Check if the course is outdated.
if (!course::check_year($mdlcourse)) {
continue;
}
// Check if the course is already in the Eduplanner database.
if ($DB->record_exists(self::EDUPLANNER_COURSE_TABLE, ['courseid' => $courseid, 'userid' => $userid])) {
$fetchedcourse = self::get_eduplanner_course($courseid, $userid);
Expand Down
18 changes: 17 additions & 1 deletion lbplanner/db/upgrade.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@
* @license https://creativecommons.org/licenses/by-nc-sa/4.0/ CC-BY-NC-SA 4.0 International or later
*/

use local_lbplanner\helpers\config_helper;
use core\context\course as context_course;

use local_lbplanner\helpers\{config_helper, course_helper};

/**
* Upgrades the DB version
Expand Down Expand Up @@ -70,5 +72,19 @@ function xmldb_local_lbplanner_upgrade($oldversion): bool {

upgrade_plugin_savepoint(true, 202509020001, 'local', 'lbplanner');
}
if ($oldversion < 202509060000) {
// Adds the eduplanner tag to the default collection.
core_tag_tag::create_if_missing(core_tag_collection::get_default(), [course_helper::EDUPLANNER_TAG], true);
}
if ($oldversion < 202509060001) {
// Adds eduplanner tag to all courses that are already in the eduplanner courses table, to make managers' lives easier.
$defaulttagcoll = core_tag_collection::get_default();
$tag = core_tag_tag::get_by_name($defaulttagcoll, course_helper::EDUPLANNER_TAG, strictness:MUST_EXIST);
$courseids = $DB->get_fieldset(course_helper::EDUPLANNER_COURSE_TABLE, 'courseid');
$courseids = array_unique($courseids, SORT_REGULAR); // Dedupe.
foreach ($courseids as $courseid) {
core_tag_tag::add_item_tag('core', 'course', $courseid, context_course::instance($courseid), $tag->rawname);
}
}
return true;
}
2 changes: 1 addition & 1 deletion lbplanner/version.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
$plugin->maturity = MATURITY_BETA;
$plugin->component = 'local_lbplanner';
$plugin->release = '1.0.2';
$plugin->version = 202509020004;
$plugin->version = 202509050001;
$plugin->dependencies = [
// Depend upon version 2023110600 of local_modcustomfields.
'local_modcustomfields' => 2023110600,
Expand Down
Loading