From dfbf50e18be8d0ac6d94d06ac6cefeff0e87c363 Mon Sep 17 00:00:00 2001 From: Shamim Rezaie Date: Fri, 19 Feb 2021 02:43:30 +1100 Subject: [PATCH] MDL-70816 core: Activity date details base class * Base class for fetching an activity module's important date for a user --- lib/classes/activity_dates.php | 101 +++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 lib/classes/activity_dates.php diff --git a/lib/classes/activity_dates.php b/lib/classes/activity_dates.php new file mode 100644 index 00000000000..74564e0f68d --- /dev/null +++ b/lib/classes/activity_dates.php @@ -0,0 +1,101 @@ +. + +/** + * Contains the base class for fetching the important dates in an activity module for a given module instance and a user. + * + * @package core + * @copyright Shamim Rezaie + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +declare(strict_types=1); + +namespace core; + +use cm_info; + +/** + * Class for fetching the important dates of an activity module for a given module instance and a user. + * + * @copyright Shamim Rezaie + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +abstract class activity_dates { + + /** + * @var cm_info The course module information object. + */ + protected $cm; + + /** + * @var int The user id. + */ + protected $userid; + + /** + * activity_dates constructor. + * + * @param cm_info $cm course module + * @param int $userid user id + */ + public function __construct(cm_info $cm, int $userid) { + $this->cm = $cm; + $this->userid = $userid; + } + + /** + * Returns a list of important dates in the given module for the user. + * + * @param cm_info $cm The course module information. + * @param int $userid The user ID. + * @return array|array[] + */ + public static function get_dates_for_module(cm_info $cm, int $userid): array { + $cmdatesclassname = static::get_dates_classname($cm->modname); + if (!$cmdatesclassname) { + return []; + } + + /** @var activity_dates $dates */ + $dates = new $cmdatesclassname($cm, $userid); + return $dates->get_dates(); + } + + /** + * Fetches the module's dates class implementation if it's available. + * + * @param string $modname The activity module name. Usually from cm_info::modname. + * @return string|null + */ + private static function get_dates_classname(string $modname): ?string { + $cmdatesclass = "mod_{$modname}\\dates"; + if (class_exists($cmdatesclass) && is_subclass_of($cmdatesclass, self::class)) { + return $cmdatesclass; + } + + return null; + } + + /** + * Returns a list of important dates for this module. + * + * @return array[] Each element of the array is an array with keys: + * label - The label for the date + * timestamp - The date + */ + protected abstract function get_dates(): array; +}