diff --git a/lang/en/moodle.php b/lang/en/moodle.php index 4ca3c691cc4..10e37273878 100644 --- a/lang/en/moodle.php +++ b/lang/en/moodle.php @@ -60,6 +60,7 @@ $string['addedtogroupnot'] = 'Not added to group "{$a}"'; $string['addedtogroupnotenrolled'] = 'Not added to group "{$a}", because not enrolled in course'; $string['addfilehere'] = 'Add file(s) here'; $string['addinganew'] = 'Adding a new {$a}'; +$string['additionalcustomnav'] = 'Additional custom navigation'; $string['addnew'] = 'Add a new {$a}'; $string['addinganewto'] = 'Adding a new {$a->what} to {$a->to}'; $string['addingdatatoexisting'] = 'Adding data to existing'; diff --git a/lib/classes/output/activity_header.php b/lib/classes/output/activity_header.php new file mode 100644 index 00000000000..af1bd2bf904 --- /dev/null +++ b/lib/classes/output/activity_header.php @@ -0,0 +1,184 @@ +. + +namespace core\output; + +use moodle_page; +use renderer_base; +use url_select; + +/** + * Data structure representing standard components displayed on the activity header. + * + * Consists of title, header, description. In addition, additional_items can be provided which is a url_select + * + * @copyright 2021 Peter + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @since Moodle 4.0 + * @package core + * @category output + */ +class activity_header implements \renderable, \templatable { + /** @var moodle_page $page The current page we are looking at */ + protected $page; + /** @var string $title The title to be displayed in the header. Defaults to activityrecord name. */ + protected $title; + /** @var string $description The description to be displayed. Defaults to activityrecord intro. */ + protected $description; + /** @var \stdClass $user The user we are dealing with */ + protected $user; + /** @var url_select $additionalnavitems Any additional custom navigation elements to be injected into template. */ + protected $additionalnavitems; + /** @var bool $hidecompletion Whether to show completion criteria, if available, or not */ + protected $hidecompletion; + /** @var bool $hideoverflow Whether to show the overflow data or not */ + protected $hideoverflow; + /** @var bool $hideheader Whether or not to show the header */ + protected $hideheader; + + /** + * Constructor for activity_header + * + * @param moodle_page $page + * @param \stdClass $user + */ + public function __construct(moodle_page $page, \stdClass $user) { + $this->page = $page; + $this->user = $user; + $pageoptions = $this->page->theme->activityheaderconfig ?? []; + $layoutoptions = $this->page->layout_options['activityheader'] ?? []; + // Do a basic setup for the header based on theme/page options. + if ($page->activityrecord) { + if (empty($pageoptions['notitle']) && empty($layoutoptions['notitle'])) { + $this->title = format_string($page->activityrecord->name); + } + + if (empty($layoutoptions['nodescription']) && $page->activityrecord->intro && trim($page->activityrecord->intro)) { + $this->description = format_module_intro($this->page->activityname, $page->activityrecord, $page->cm->id); + } + } + $this->hidecompletion = !empty($layoutoptions['nocompletion']); + $this->hideoverflow = false; + $this->hideheader = false; + } + + /** + * Checks if the theme has specified titles to be displayed. + * + * @return bool + */ + public function is_title_allowed(): bool { + return empty($this->page->theme->activityheaderconfig['notitle']); + } + + /** + * Bulk set class member variables. Only updates variables which have corresponding setters + * + * @param array $config + */ + public function set_attrs(array $config): void { + foreach ($config as $key => $value) { + if (method_exists($this, "set_$key")) { + $this->{"set_$key"}($value); + } + } + } + + /** + * Sets the hidecompletion class member variable + * + * @param bool $value + */ + public function set_hidecompletion(bool $value): void { + $this->hidecompletion = $value; + } + + /** + * Sets the additionalnavitems class member variable + * + * @param url_select $value + */ + public function set_additionalnavitems(url_select $value): void { + $this->additionalnavitems = $value; + } + + /** + * Sets the hideoverflow class member variable + * + * @param bool $value + */ + public function set_hideoverflow(bool $value): void { + $this->hideoverflow = $value; + } + + /** + * Sets the title class member variable. + * + * @param string $value + */ + public function set_title(string $value): void { + $this->title = preg_replace('/