diff --git a/amd/build/banneralerts.min.js b/amd/build/banneralerts.min.js
index f34b8c2b..6c6b93dd 100644
--- a/amd/build/banneralerts.min.js
+++ b/amd/build/banneralerts.min.js
@@ -4,7 +4,7 @@ define("theme_ucsf/banneralerts",["exports","jquery"],(function(_exports,_jquery
* that fires when the alert is dismissed by the user.
*
* @module theme_ucsf/banneralerts
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=(obj=_jquery)&&obj.__esModule?obj:{default:obj};_exports.init=()=>{(0,_jquery.default)(".ucsf-banneralerts-alert").on("closed.bs.alert",(function(event){const $elem=(0,_jquery.default)(event.target),url=$elem.data("ucsf-banneralert-dismiss-callback-url"),id=$elem.data("ucsf-banneralerts-alert-id");_jquery.default.get(url,{id:id})}))}}));
diff --git a/amd/build/banneralerts.min.js.map b/amd/build/banneralerts.min.js.map
index 1b588d9f..0f8dd634 100644
--- a/amd/build/banneralerts.min.js.map
+++ b/amd/build/banneralerts.min.js.map
@@ -1 +1 @@
-{"version":3,"file":"banneralerts.min.js","sources":["../src/banneralerts.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n//\n\n/**\n * Finds and attaches an event handler to our banner alerts\n * that fires when the alert is dismissed by the user.\n *\n * @module theme_ucsf/banneralerts\n * @copyright 2023 The Regents of the University of California\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport jQuery from 'jquery';\n\nexport const init = () => {\n // @link https://getbootstrap.com/docs/4.0/components/alerts/#events\n jQuery('.ucsf-banneralerts-alert').on('closed.bs.alert', function(event) {\n const $elem = jQuery(event.target);\n const url = $elem.data('ucsf-banneralert-dismiss-callback-url');\n const id = $elem.data('ucsf-banneralerts-alert-id');\n jQuery.get(url, {id});\n });\n};"],"names":["on","event","$elem","target","url","data","id","get"],"mappings":";;;;;;;;wJAyBoB,yBAET,4BAA4BA,GAAG,mBAAmB,SAASC,aACxDC,OAAQ,mBAAOD,MAAME,QACrBC,IAAMF,MAAMG,KAAK,yCACjBC,GAAKJ,MAAMG,KAAK,8CACfE,IAAIH,IAAK,CAACE,GAAAA"}
\ No newline at end of file
+{"version":3,"file":"banneralerts.min.js","sources":["../src/banneralerts.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n//\n\n/**\n * Finds and attaches an event handler to our banner alerts\n * that fires when the alert is dismissed by the user.\n *\n * @module theme_ucsf/banneralerts\n * @copyright The Regents of the University of California\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport jQuery from 'jquery';\n\nexport const init = () => {\n // @link https://getbootstrap.com/docs/4.0/components/alerts/#events\n jQuery('.ucsf-banneralerts-alert').on('closed.bs.alert', function(event) {\n const $elem = jQuery(event.target);\n const url = $elem.data('ucsf-banneralert-dismiss-callback-url');\n const id = $elem.data('ucsf-banneralerts-alert-id');\n jQuery.get(url, {id});\n });\n};"],"names":["on","event","$elem","target","url","data","id","get"],"mappings":";;;;;;;;wJAyBoB,yBAET,4BAA4BA,GAAG,mBAAmB,SAASC,aACxDC,OAAQ,mBAAOD,MAAME,QACrBC,IAAMF,MAAMG,KAAK,yCACjBC,GAAKJ,MAAMG,KAAK,8CACfE,IAAIH,IAAK,CAACE,GAAAA"}
\ No newline at end of file
diff --git a/amd/build/courseindexcontrols.min.js b/amd/build/courseindexcontrols.min.js
index 36345785..2ed6aa0a 100644
--- a/amd/build/courseindexcontrols.min.js
+++ b/amd/build/courseindexcontrols.min.js
@@ -3,7 +3,7 @@ define("theme_ucsf/courseindexcontrols",["exports","core/reactive","core_coursef
* Adds "expand-all/collapse-all sections" controls to the course index drawer.
*
* @module theme_ucsf/courseindexcontrols
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class Component extends _reactive.BaseComponent{create(){this.name="courseindexcontrols",this.selectors={SECTION:"[data-for='section']",EXPANDALL:"[data-action='expandallcourseindexsections']",COLLAPSEALL:"[data-action='collapseallcourseindexsections']"}}static init(target,selectors){return new Component({element:document.getElementById(target),reactive:(0,_courseeditor.getCurrentCourseEditor)(),selectors:selectors})}stateReady(){const expandAllBtn=this.getElement(this.selectors.EXPANDALL);expandAllBtn&&this.addEventListener(expandAllBtn,"click",this._expandAllSections);const collapseAllBtn=this.getElement(this.selectors.COLLAPSEALL);collapseAllBtn&&this.addEventListener(collapseAllBtn,"click",this._collapseAllSections)}_collapseAllSections(){this._toggleAllSections(!0)}_expandAllSections(){this._toggleAllSections(!1)}_toggleAllSections(expandOrCollapse){const sectionIds=[...this.getElements(this.selectors.SECTION)].map((section=>section.getAttribute("data-id")));sectionIds.length&&this.reactive.dispatch("sectionIndexCollapsed",sectionIds,expandOrCollapse)}}return _exports.default=Component,_exports.default}));
diff --git a/amd/build/courseindexcontrols.min.js.map b/amd/build/courseindexcontrols.min.js.map
index 657d2dcf..4eba091c 100644
--- a/amd/build/courseindexcontrols.min.js.map
+++ b/amd/build/courseindexcontrols.min.js.map
@@ -1 +1 @@
-{"version":3,"file":"courseindexcontrols.min.js","sources":["../src/courseindexcontrols.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Adds \"expand-all/collapse-all sections\" controls to the course index drawer.\n *\n * @module theme_ucsf/courseindexcontrols\n * @copyright 2023 The Regents of the University of California\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {BaseComponent} from 'core/reactive';\nimport {getCurrentCourseEditor} from 'core_courseformat/courseeditor';\n\nexport default class Component extends BaseComponent {\n /**\n * Constructor hook.\n */\n create() {\n // Optional component name for debugging.\n this.name = 'courseindexcontrols';\n // Default query selectors.\n this.selectors = {\n SECTION: `[data-for='section']`,\n EXPANDALL: `[data-action='expandallcourseindexsections']`,\n COLLAPSEALL: `[data-action='collapseallcourseindexsections']`,\n };\n }\n\n /**\n * Static method to create a component instance form the mustache template.\n *\n * @param {element|string} target the DOM main element or its ID\n * @param {object} selectors optional css selector overrides\n * @return {Component}\n */\n static init(target, selectors) {\n return new Component({\n element: document.getElementById(target),\n reactive: getCurrentCourseEditor(),\n selectors,\n });\n }\n\n /**\n * Initial state ready method.\n */\n stateReady() {\n // Attach the on-click event handlers to the expand-all and collapse-all buttons, if present.\n const expandAllBtn = this.getElement(this.selectors.EXPANDALL);\n if (expandAllBtn) {\n this.addEventListener(expandAllBtn, 'click', this._expandAllSections);\n\n }\n const collapseAllBtn = this.getElement(this.selectors.COLLAPSEALL);\n if (collapseAllBtn) {\n this.addEventListener(collapseAllBtn, 'click', this._collapseAllSections);\n }\n }\n\n /**\n * On-click event handler for the collapse-all button.\n * @private\n */\n _collapseAllSections() {\n this._toggleAllSections(true);\n }\n\n /**\n * On-click event handler for the expand-all button.\n * @private\n */\n _expandAllSections() {\n this._toggleAllSections(false);\n }\n\n /**\n * Collapses or expands all sections in the course index.\n * @param {bool} expandOrCollapse set to TRUE to collapse all, and FALSE to expand all.\n * @private\n */\n _toggleAllSections(expandOrCollapse) {\n const sections = this.getElements(this.selectors.SECTION);\n const sectionIds = [...sections].map((section) => section.getAttribute('data-id'));\n if (sectionIds.length) {\n this.reactive.dispatch(\n 'sectionIndexCollapsed',\n sectionIds,\n expandOrCollapse\n );\n }\n }\n}\n"],"names":["Component","BaseComponent","create","name","selectors","SECTION","EXPANDALL","COLLAPSEALL","target","element","document","getElementById","reactive","stateReady","expandAllBtn","this","getElement","addEventListener","_expandAllSections","collapseAllBtn","_collapseAllSections","_toggleAllSections","expandOrCollapse","sectionIds","getElements","map","section","getAttribute","length","dispatch"],"mappings":";;;;;;;;MA0BqBA,kBAAkBC,wBAIrCC,cAEOC,KAAO,2BAEPC,UAAY,CACfC,+BACAC,yDACAC,0EAWQC,OAAQJ,kBACX,IAAIJ,UAAU,CACnBS,QAASC,SAASC,eAAeH,QACjCI,UAAU,0CACVR,UAAAA,YAOJS,mBAEQC,aAAeC,KAAKC,WAAWD,KAAKX,UAAUE,WAChDQ,mBACGG,iBAAiBH,aAAc,QAASC,KAAKG,0BAG9CC,eAAiBJ,KAAKC,WAAWD,KAAKX,UAAUG,aAClDY,qBACGF,iBAAiBE,eAAgB,QAASJ,KAAKK,sBAQxDA,4BACOC,oBAAmB,GAO1BH,0BACOG,oBAAmB,GAQ1BA,mBAAmBC,wBAEXC,WAAa,IADFR,KAAKS,YAAYT,KAAKX,UAAUC,UAChBoB,KAAKC,SAAYA,QAAQC,aAAa,aACnEJ,WAAWK,aACRhB,SAASiB,SACZ,wBACAN,WACAD"}
\ No newline at end of file
+{"version":3,"file":"courseindexcontrols.min.js","sources":["../src/courseindexcontrols.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Adds \"expand-all/collapse-all sections\" controls to the course index drawer.\n *\n * @module theme_ucsf/courseindexcontrols\n * @copyright The Regents of the University of California\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {BaseComponent} from 'core/reactive';\nimport {getCurrentCourseEditor} from 'core_courseformat/courseeditor';\n\nexport default class Component extends BaseComponent {\n /**\n * Constructor hook.\n */\n create() {\n // Optional component name for debugging.\n this.name = 'courseindexcontrols';\n // Default query selectors.\n this.selectors = {\n SECTION: `[data-for='section']`,\n EXPANDALL: `[data-action='expandallcourseindexsections']`,\n COLLAPSEALL: `[data-action='collapseallcourseindexsections']`,\n };\n }\n\n /**\n * Static method to create a component instance form the mustache template.\n *\n * @param {element|string} target the DOM main element or its ID\n * @param {object} selectors optional css selector overrides\n * @return {Component}\n */\n static init(target, selectors) {\n return new Component({\n element: document.getElementById(target),\n reactive: getCurrentCourseEditor(),\n selectors,\n });\n }\n\n /**\n * Initial state ready method.\n */\n stateReady() {\n // Attach the on-click event handlers to the expand-all and collapse-all buttons, if present.\n const expandAllBtn = this.getElement(this.selectors.EXPANDALL);\n if (expandAllBtn) {\n this.addEventListener(expandAllBtn, 'click', this._expandAllSections);\n\n }\n const collapseAllBtn = this.getElement(this.selectors.COLLAPSEALL);\n if (collapseAllBtn) {\n this.addEventListener(collapseAllBtn, 'click', this._collapseAllSections);\n }\n }\n\n /**\n * On-click event handler for the collapse-all button.\n * @private\n */\n _collapseAllSections() {\n this._toggleAllSections(true);\n }\n\n /**\n * On-click event handler for the expand-all button.\n * @private\n */\n _expandAllSections() {\n this._toggleAllSections(false);\n }\n\n /**\n * Collapses or expands all sections in the course index.\n * @param {bool} expandOrCollapse set to TRUE to collapse all, and FALSE to expand all.\n * @private\n */\n _toggleAllSections(expandOrCollapse) {\n const sections = this.getElements(this.selectors.SECTION);\n const sectionIds = [...sections].map((section) => section.getAttribute('data-id'));\n if (sectionIds.length) {\n this.reactive.dispatch(\n 'sectionIndexCollapsed',\n sectionIds,\n expandOrCollapse\n );\n }\n }\n}\n"],"names":["Component","BaseComponent","create","name","selectors","SECTION","EXPANDALL","COLLAPSEALL","target","element","document","getElementById","reactive","stateReady","expandAllBtn","this","getElement","addEventListener","_expandAllSections","collapseAllBtn","_collapseAllSections","_toggleAllSections","expandOrCollapse","sectionIds","getElements","map","section","getAttribute","length","dispatch"],"mappings":";;;;;;;;MA0BqBA,kBAAkBC,wBAIrCC,cAEOC,KAAO,2BAEPC,UAAY,CACfC,+BACAC,yDACAC,0EAWQC,OAAQJ,kBACX,IAAIJ,UAAU,CACnBS,QAASC,SAASC,eAAeH,QACjCI,UAAU,0CACVR,UAAAA,YAOJS,mBAEQC,aAAeC,KAAKC,WAAWD,KAAKX,UAAUE,WAChDQ,mBACGG,iBAAiBH,aAAc,QAASC,KAAKG,0BAG9CC,eAAiBJ,KAAKC,WAAWD,KAAKX,UAAUG,aAClDY,qBACGF,iBAAiBE,eAAgB,QAASJ,KAAKK,sBAQxDA,4BACOC,oBAAmB,GAO1BH,0BACOG,oBAAmB,GAQ1BA,mBAAmBC,wBAEXC,WAAa,IADFR,KAAKS,YAAYT,KAAKX,UAAUC,UAChBoB,KAAKC,SAAYA,QAAQC,aAAa,aACnEJ,WAAWK,aACRhB,SAASiB,SACZ,wBACAN,WACAD"}
\ No newline at end of file
diff --git a/amd/build/datepicker.min.js b/amd/build/datepicker.min.js
index 1c73ef6f..f3d2902b 100644
--- a/amd/build/datepicker.min.js
+++ b/amd/build/datepicker.min.js
@@ -3,7 +3,7 @@ define("theme_ucsf/datepicker",["exports","jquery","theme_ucsf/pikaday"],(functi
* Attaches a date picker to form input fields.
*
* @module theme_ucsf/datepicker
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_pikaday=_interopRequireDefault(_pikaday);_exports.init=()=>{(0,_jquery.default)(".ucsf-datepicker").each((function(i,elem){new _pikaday.default({field:elem,toString:function(date){const year=date.getFullYear();let month=(1+date.getMonth()).toString();month=month.length>1?month:"0"+month;let day=date.getDate().toString();return day=day.length>1?day:"0"+day,month+"/"+day+"/"+year}})}))}}));
diff --git a/amd/build/datepicker.min.js.map b/amd/build/datepicker.min.js.map
index 23c281e9..09099a0f 100644
--- a/amd/build/datepicker.min.js.map
+++ b/amd/build/datepicker.min.js.map
@@ -1 +1 @@
-{"version":3,"file":"datepicker.min.js","sources":["../src/datepicker.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n//\n\n/**\n * Attaches a date picker to form input fields.\n *\n * @module theme_ucsf/datepicker\n * @copyright 2023 The Regents of the University of California\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport jQuery from 'jquery';\nimport Pikaday from 'theme_ucsf/pikaday';\n\nexport const init = () => {\n jQuery('.ucsf-datepicker').each(function(i, elem) {\n new Pikaday({\n field: elem,\n toString: function(date) {\n // @link https://stackoverflow.com/a/15764763\n const year = date.getFullYear();\n let month = (1 + date.getMonth()).toString();\n month = month.length > 1 ? month : '0' + month;\n let day = date.getDate().toString();\n day = day.length > 1 ? day : '0' + day;\n return month + '/' + day + '/' + year;\n }\n });\n });\n};\n"],"names":["each","i","elem","Pikaday","field","toString","date","year","getFullYear","month","getMonth","length","day","getDate"],"mappings":";;;;;;;kLAyBoB,yBACT,oBAAoBA,MAAK,SAASC,EAAGC,UACpCC,iBAAQ,CACRC,MAAOF,KACPG,SAAU,SAASC,YAETC,KAAOD,KAAKE,kBACdC,OAAS,EAAIH,KAAKI,YAAYL,WAClCI,MAAQA,MAAME,OAAS,EAAIF,MAAQ,IAAMA,UACrCG,IAAMN,KAAKO,UAAUR,kBACzBO,IAAMA,IAAID,OAAS,EAAIC,IAAM,IAAMA,IAC5BH,MAAQ,IAAMG,IAAM,IAAML"}
\ No newline at end of file
+{"version":3,"file":"datepicker.min.js","sources":["../src/datepicker.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n//\n\n/**\n * Attaches a date picker to form input fields.\n *\n * @module theme_ucsf/datepicker\n * @copyright The Regents of the University of California\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport jQuery from 'jquery';\nimport Pikaday from 'theme_ucsf/pikaday';\n\nexport const init = () => {\n jQuery('.ucsf-datepicker').each(function(i, elem) {\n new Pikaday({\n field: elem,\n toString: function(date) {\n // @link https://stackoverflow.com/a/15764763\n const year = date.getFullYear();\n let month = (1 + date.getMonth()).toString();\n month = month.length > 1 ? month : '0' + month;\n let day = date.getDate().toString();\n day = day.length > 1 ? day : '0' + day;\n return month + '/' + day + '/' + year;\n }\n });\n });\n};\n"],"names":["each","i","elem","Pikaday","field","toString","date","year","getFullYear","month","getMonth","length","day","getDate"],"mappings":";;;;;;;kLAyBoB,yBACT,oBAAoBA,MAAK,SAASC,EAAGC,UACpCC,iBAAQ,CACRC,MAAOF,KACPG,SAAU,SAASC,YAETC,KAAOD,KAAKE,kBACdC,OAAS,EAAIH,KAAKI,YAAYL,WAClCI,MAAQA,MAAME,OAAS,EAAIF,MAAQ,IAAMA,UACrCG,IAAMN,KAAKO,UAAUR,kBACzBO,IAAMA,IAAID,OAAS,EAAIC,IAAM,IAAMA,IAC5BH,MAAQ,IAAMG,IAAM,IAAML"}
\ No newline at end of file
diff --git a/amd/build/usereditform.min.js b/amd/build/usereditform.min.js
index bd2ee227..41c78c05 100644
--- a/amd/build/usereditform.min.js
+++ b/amd/build/usereditform.min.js
@@ -5,7 +5,7 @@ define("theme_ucsf/usereditform",["exports","jquery"],(function(_exports,_jquery
* they can properly update their name information.
*
* @module theme_ucsf/usereditform
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=(obj=_jquery)&&obj.__esModule?obj:{default:obj};_exports.init=()=>{let $elem=(0,_jquery.default)("#page-user-editadvanced #fitem_id_firstname");$elem.length||($elem=(0,_jquery.default)("#page-user-edit #fitem_id_firstname")),$elem.length&&$elem.prepend('
')}}));
diff --git a/amd/build/usereditform.min.js.map b/amd/build/usereditform.min.js.map
index a53806d3..44beaf7d 100644
--- a/amd/build/usereditform.min.js.map
+++ b/amd/build/usereditform.min.js.map
@@ -1 +1 @@
-{"version":3,"file":"usereditform.min.js","sources":["../src/usereditform.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n//\n\n/**\n * Kludges a link and some helpful text into the two user profile edit forms\n * that provide the user with some relevant information as to how/where\n * they can properly update their name information.\n *\n * @module theme_ucsf/usereditform\n * @copyright 2023 The Regents of the University of California\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport jQuery from 'jquery';\n\nexport const init = () => {\n let $elem = jQuery('#page-user-editadvanced #fitem_id_firstname'); // Admin user profile form\n\n if (!$elem.length) {\n $elem = jQuery('#page-user-edit #fitem_id_firstname'); // User profile form\n }\n if ($elem.length) {\n $elem.prepend('');\n }\n};"],"names":["$elem","length","prepend"],"mappings":";;;;;;;;;wJA0BoB,SACZA,OAAQ,mBAAO,+CAEdA,MAAMC,SACPD,OAAQ,mBAAO,wCAEfA,MAAMC,QACND,MAAME,QAAQ"}
\ No newline at end of file
+{"version":3,"file":"usereditform.min.js","sources":["../src/usereditform.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n//\n\n/**\n * Kludges a link and some helpful text into the two user profile edit forms\n * that provide the user with some relevant information as to how/where\n * they can properly update their name information.\n *\n * @module theme_ucsf/usereditform\n * @copyright The Regents of the University of California\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport jQuery from 'jquery';\n\nexport const init = () => {\n let $elem = jQuery('#page-user-editadvanced #fitem_id_firstname'); // Admin user profile form\n\n if (!$elem.length) {\n $elem = jQuery('#page-user-edit #fitem_id_firstname'); // User profile form\n }\n if ($elem.length) {\n $elem.prepend('');\n }\n};"],"names":["$elem","length","prepend"],"mappings":";;;;;;;;;wJA0BoB,SACZA,OAAQ,mBAAO,+CAEdA,MAAMC,SACPD,OAAQ,mBAAO,wCAEfA,MAAMC,QACND,MAAME,QAAQ"}
\ No newline at end of file
diff --git a/amd/src/banneralerts.js b/amd/src/banneralerts.js
index ab663731..351ea9ca 100644
--- a/amd/src/banneralerts.js
+++ b/amd/src/banneralerts.js
@@ -18,7 +18,7 @@
* that fires when the alert is dismissed by the user.
*
* @module theme_ucsf/banneralerts
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
import jQuery from 'jquery';
diff --git a/amd/src/courseindexcontrols.js b/amd/src/courseindexcontrols.js
index fb6465bb..d7431b74 100644
--- a/amd/src/courseindexcontrols.js
+++ b/amd/src/courseindexcontrols.js
@@ -17,7 +17,7 @@
* Adds "expand-all/collapse-all sections" controls to the course index drawer.
*
* @module theme_ucsf/courseindexcontrols
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
diff --git a/amd/src/datepicker.js b/amd/src/datepicker.js
index f48f5c81..67a7c5ef 100644
--- a/amd/src/datepicker.js
+++ b/amd/src/datepicker.js
@@ -17,7 +17,7 @@
* Attaches a date picker to form input fields.
*
* @module theme_ucsf/datepicker
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
import jQuery from 'jquery';
diff --git a/amd/src/usereditform.js b/amd/src/usereditform.js
index 258cb766..f5190aca 100644
--- a/amd/src/usereditform.js
+++ b/amd/src/usereditform.js
@@ -19,7 +19,7 @@
* they can properly update their name information.
*
* @module theme_ucsf/usereditform
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
import jQuery from 'jquery';
diff --git a/banneralerts.php b/banneralerts.php
index 585a368c..c883b5f0 100644
--- a/banneralerts.php
+++ b/banneralerts.php
@@ -18,7 +18,7 @@
* Callback script to flag banner alerts as "seen" in the user session.
*
* @package theme_ucsf
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
diff --git a/classes/admin_setting_daterange.php b/classes/admin_setting_daterange.php
index 0199c4b9..2ff48e12 100644
--- a/classes/admin_setting_daterange.php
+++ b/classes/admin_setting_daterange.php
@@ -23,22 +23,32 @@
/**
* Admin settings form component for selecting a date range. (year, month, and day).
*
+ * @package theme_ucsf
* @author Sasa Prsir
* @author Stefan Topfstedt
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class admin_setting_daterange extends admin_setting {
+
+ /** @var string Start date form field name. */
const START_DATE = 'start_date';
+
+ /** @var string End date form field name. */
const END_DATE = 'end_date';
+ /** @var string Start date config setting name. */
public string $startdatesettingname;
+
+ /** @var string End date config setting name. */
public string $enddatesettingname;
/**
+ * Class constructor.
+ *
* @param string $name
- * @param string $start_date_setting_name
- * @param string $end_date_setting_name
+ * @param string $startdatesettingname
+ * @param string $enddatesettingname
* @param string $visiblename
* @param string $description
*/
@@ -49,12 +59,14 @@ public function __construct(
string $visiblename,
string $description
) {
- $this->start_date_setting_name = $startdatesettingname;
- $this->end_date_setting_name = $enddatesettingname;
+ $this->startdatesettingname = $startdatesettingname;
+ $this->enddatesettingname = $enddatesettingname;
parent::__construct($name, $visiblename, $description, '');
}
/**
+ * {@inheritdoc}
+ *
* @return array|null $data
* $data = [
* 'start_date'=> (string) the start date
@@ -62,8 +74,8 @@ public function __construct(
* ]
*/
public function get_setting(): ?array {
- $startdate = $this->config_read($this->start_date_setting_name);
- $enddate = $this->config_read($this->end_date_setting_name);
+ $startdate = $this->config_read($this->startdatesettingname);
+ $enddate = $this->config_read($this->enddatesettingname);
if (is_null($startdate) || is_null($enddate)) {
return null;
}
@@ -74,6 +86,8 @@ public function get_setting(): ?array {
}
/**
+ * {@inheritdoc}
+ *
* @param array $data
* $data = [
* 'start_date'=> (string) the start date
@@ -87,8 +101,8 @@ public function write_setting($data): string {
$enddate = ('' !== trim($data[self::END_DATE])) ? trim($data[self::END_DATE]) : '';
$validate = $this->validate($startdate, $enddate);
if ('' === $validate) {
- $result = $this->config_write($this->start_date_setting_name, $startdate)
- && $this->config_write($this->end_date_setting_name, $enddate);
+ $result = $this->config_write($this->startdatesettingname, $startdate)
+ && $this->config_write($this->enddatesettingname, $enddate);
return $result ? '' : get_string('errorsetting', 'admin');
}
return $validate;
@@ -97,8 +111,8 @@ public function write_setting($data): string {
/**
* Validate data before storage.
*
- * @param string $start_date
- * @param string $end_date
+ * @param string $startdate
+ * @param string $enddate
* @return string empty string if ok, string error message otherwise
* @throws coding_exception
*/
diff --git a/classes/admin_setting_datetimerange.php b/classes/admin_setting_datetimerange.php
index 68b2638e..c9d9d7f6 100644
--- a/classes/admin_setting_datetimerange.php
+++ b/classes/admin_setting_datetimerange.php
@@ -23,34 +23,60 @@
/**
* Admin settings form component for selecting a date-time range (year, month, day, hours, and minutes).
*
+ * @package theme_ucsf
* @author Sasa Prsir
* @author Stefan Topfstedt
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class admin_setting_datetimerange extends admin_setting {
+
+ /** @var string (Partial) start date form field name. */
const START_DATE = 'start_date';
+
+ /** @var string (Partial) start hour form field name. */
const START_HOUR = 'start_hour';
+
+ /** @var string (Partial) start minute form field name. */
const START_MINUTE = 'start_minute';
+
+ /** @var string (Partial) end date form field name. */
const END_DATE = 'end_date';
+
+ /** @var string (Partial) end hour form field name. */
const END_HOUR = 'end_hour';
+
+ /** @var string (Partial) end minute form field name. */
const END_MINUTE = 'end_minute';
+ /** @var string Start date config setting name. */
public string $startdatesettingname;
+
+ /** @var string Start minute config setting name. */
public string $startminutesettingname;
+
+ /** @var string Start hour config setting name. */
public string $starthoursettingname;
+
+ /** @var string End hour config setting name. */
public string $enddatesettingname;
+
+ /** @var string End minute config setting name. */
public string $endminutesettingname;
+
+ /** @var string End hour config setting name. */
public string $endhoursettingname;
/**
+ * Class constructor.
+ *
* @param string $name
- * @param string $start_date_setting_name
- * @param string $start_hour_setting_name
- * @param string $start_minute_setting_name
- * @param string $end_date_setting_name
- * @param string $end_hour_setting_name
- * @param string $end_minute_setting_name
+ * @param string $startdatesettingname
+ * @param string $starthoursettingname
+ * @param string $startminutesettingname
+ * @param string $enddatesettingname
+ * @param string $endhoursettingname
+ * @param string $endminutesettingname
* @param string $visiblename
* @param string $description
*/
@@ -65,16 +91,18 @@ public function __construct(
string $visiblename,
string $description
) {
- $this->start_date_setting_name = $startdatesettingname;
- $this->start_hour_setting_name = $starthoursettingname;
- $this->start_minute_setting_name = $startminutesettingname;
- $this->end_date_setting_name = $enddatesettingname;
- $this->end_hour_setting_name = $endhoursettingname;
- $this->end_minute_setting_name = $endminutesettingname;
+ $this->startdatesettingname = $startdatesettingname;
+ $this->starthoursettingname = $starthoursettingname;
+ $this->startminutesettingname = $startminutesettingname;
+ $this->enddatesettingname = $enddatesettingname;
+ $this->endhoursettingname = $endhoursettingname;
+ $this->endminutesettingname = $endminutesettingname;
parent::__construct($name, $visiblename, $description, '');
}
/**
+ * {@inheritdoc}
+ *
* @return array|null $data
* $data = [
* 'start_date' => (string) the start date
@@ -86,12 +114,12 @@ public function __construct(
* ]
*/
public function get_setting(): ?array {
- $startdate = $this->config_read($this->start_date_setting_name);
- $starthour = $this->config_read($this->start_hour_setting_name);
- $startminute = $this->config_read($this->start_minute_setting_name);
- $enddate = $this->config_read($this->end_date_setting_name);
- $endhour = $this->config_read($this->end_hour_setting_name);
- $endminute = $this->config_read($this->end_minute_setting_name);
+ $startdate = $this->config_read($this->startdatesettingname);
+ $starthour = $this->config_read($this->starthoursettingname);
+ $startminute = $this->config_read($this->startminutesettingname);
+ $enddate = $this->config_read($this->enddatesettingname);
+ $endhour = $this->config_read($this->endhoursettingname);
+ $endminute = $this->config_read($this->endminutesettingname);
if (is_null($startdate)
|| is_null($starthour)
|| is_null($startminute)
@@ -112,6 +140,8 @@ public function get_setting(): ?array {
}
/**
+ * {@inheritdoc}
+ *
* @param array $data
* $data = [
* 'start_date' => (string) the start date
@@ -134,12 +164,12 @@ public function write_setting($data): string {
$endminute = ('' !== $data[self::END_MINUTE]) ? $data[self::END_MINUTE] : '';
$validate = $this->validate($startdate, $starthour, $startminute, $enddate, $endhour, $endminute);
if ('' === $validate) {
- $result = $this->config_write($this->start_date_setting_name, $startdate)
- && $this->config_write($this->start_hour_setting_name, $starthour)
- && $this->config_write($this->start_minute_setting_name, $startminute)
- && $this->config_write($this->end_date_setting_name, $enddate)
- && $this->config_write($this->end_hour_setting_name, $endhour)
- && $this->config_write($this->end_minute_setting_name, $endminute);
+ $result = $this->config_write($this->startdatesettingname, $startdate)
+ && $this->config_write($this->starthoursettingname, $starthour)
+ && $this->config_write($this->startminutesettingname, $startminute)
+ && $this->config_write($this->enddatesettingname, $enddate)
+ && $this->config_write($this->endhoursettingname, $endhour)
+ && $this->config_write($this->endminutesettingname, $endminute);
return ($result ? '' : get_string('errorsetting', 'admin'));
}
return $validate;
@@ -148,12 +178,12 @@ public function write_setting($data): string {
/**
* Validate data before storage.
*
- * @param string $start_date
- * @param string $start_hour
- * @param string $start_minute
- * @param string $end_date
- * @param string $end_hour
- * @param string $end_minute
+ * @param string $startdate
+ * @param string $starthour
+ * @param string $startminute
+ * @param string $enddate
+ * @param string $endhour
+ * @param string $endminute
* @return string empty string if ok, string error message otherwise
* @throws coding_exception
*/
diff --git a/classes/admin_setting_timerange.php b/classes/admin_setting_timerange.php
index 6bee55f4..095b0007 100644
--- a/classes/admin_setting_timerange.php
+++ b/classes/admin_setting_timerange.php
@@ -23,28 +23,46 @@
/**
* Admin settings form component for selecting a time range (hours and minutes).
*
+ * @package theme_ucsf
* @author Dusan Sparavalo
* @author Stefan Topfstedt
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class admin_setting_timerange extends admin_setting {
+
+ /** @var string (Partial) start hour form field name. */
const START_HOUR = 'start_hour';
+
+ /** @var string (Partial) start minute form field name. */
const START_MINUTE = 'start_minute';
+
+ /** @var string (Partial) end hour form field name. */
const END_HOUR = 'end_hour';
+
+ /** @var string (Partial) end minute form field name. */
const END_MINUTE = 'end_minute';
+ /** @var string Start minute config setting name. */
public string $startminutesettingname;
+
+ /** @var string Start hour config setting name. */
public string $starthoursettingname;
+
+ /** @var string End minute config setting name. */
public string $endminutesettingname;
+
+ /** @var string End hour config setting name. */
public string $endhoursettingname;
/**
+ * Class constructor.
+ *
* @param string $name
- * @param string $start_hour_setting_name
- * @param string $start_minute_setting_name
- * @param string $end_hour_setting_name
- * @param string $end_minute_setting_name
+ * @param string $starthoursettingname
+ * @param string $startminutesettingname
+ * @param string $endhoursettingname
+ * @param string $endminutesettingname
* @param string $visiblename
* @param string $description
*/
@@ -57,14 +75,16 @@ public function __construct(
string $visiblename,
string $description
) {
- $this->start_hour_setting_name = $starthoursettingname;
- $this->start_minute_setting_name = $startminutesettingname;
- $this->end_hour_setting_name = $endhoursettingname;
- $this->end_minute_setting_name = $endminutesettingname;
+ $this->starthoursettingname = $starthoursettingname;
+ $this->startminutesettingname = $startminutesettingname;
+ $this->endhoursettingname = $endhoursettingname;
+ $this->endminutesettingname = $endminutesettingname;
parent::__construct($name, $visiblename, $description, '');
}
/**
+ * {@inheritdoc}
+ *
* @return array|null $data
* $data = [
* 'start_hour'=> (string) the start hour
@@ -74,10 +94,10 @@ public function __construct(
* ]
*/
public function get_setting(): ?array {
- $starthour = $this->config_read($this->start_hour_setting_name);
- $startminute = $this->config_read($this->start_minute_setting_name);
- $endhour = $this->config_read($this->end_hour_setting_name);
- $endminute = $this->config_read($this->end_minute_setting_name);
+ $starthour = $this->config_read($this->starthoursettingname);
+ $startminute = $this->config_read($this->startminutesettingname);
+ $endhour = $this->config_read($this->endhoursettingname);
+ $endminute = $this->config_read($this->endminutesettingname);
if (is_null($starthour) || is_null($startminute) || is_null($endhour) || is_null($endminute)) {
return null;
}
@@ -90,6 +110,8 @@ public function get_setting(): ?array {
}
/**
+ * {@inheritdoc}
+ *
* @param array $data
* $data = [
* 'start_hour'=> (string) the start hour
@@ -108,10 +130,10 @@ public function write_setting($data): string {
$endminute = ('' !== trim($data[self::END_MINUTE])) ? trim($data[self::END_MINUTE]) : '';
$validate = $this->validate($starthour, $startminute, $endhour, $endminute);
if ('' === $validate) {
- $result = $this->config_write($this->start_hour_setting_name, $starthour)
- && $this->config_write($this->start_minute_setting_name, $startminute)
- && $this->config_write($this->end_hour_setting_name, $endhour)
- && $this->config_write($this->end_minute_setting_name, $endminute);
+ $result = $this->config_write($this->starthoursettingname, $starthour)
+ && $this->config_write($this->startminutesettingname, $startminute)
+ && $this->config_write($this->endhoursettingname, $endhour)
+ && $this->config_write($this->endminutesettingname, $endminute);
return ($result ? '' : get_string('errorsetting', 'admin'));
}
return $validate;
@@ -120,10 +142,10 @@ public function write_setting($data): string {
/**
* Validate data before storage.
*
- * @param string $start_hour
- * @param string $start_minute
- * @param string $end_hour
- * @param string $end_minute
+ * @param string $starthour
+ * @param string $startminute
+ * @param string $endhour
+ * @param string $endminute
* @return string empty string if ok, string error message otherwise
* @throws coding_exception
*/
diff --git a/classes/constants.php b/classes/constants.php
index 0dc39438..e81a192a 100644
--- a/classes/constants.php
+++ b/classes/constants.php
@@ -20,29 +20,62 @@
* Constants interface for this theme.
*
* @package theme_ucsf
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
interface constants {
+ /** @var int The maximum number of help menu items. */
const HELPMENU_ITEMS_COUNT = 10;
+ /** @var int The maximum number of banner alerts. */
const BANNERALERT_ITEMS_COUNT = 10;
+
+ /** @var string Banner alert type - the alert is not bound to any date range restrictions. */
const BANNERALERT_TYPE_UNBOUND = '1';
+ /** @var string Banner alert type - the alert is not restricted by a start- and end-date. */
const BANNERALERT_TYPE_DATEBOUND = '2';
+
+ /** @var string Banner alert type - the alert recurs daily within a given start- and end-time. */
const BANNERALERT_TYPE_RECURRENCE_DAILY = '3';
+
+ /** @var string Banner alert type - the alert recurs weekly on a given weekday, within given date and time range. */
const BANNERALERT_TYPE_RECURRENCE_WEEKLY = '4';
+
+ /** @var string Banner alert level - the alert is informational. */
const BANNERALERT_LEVEL_INFORMATION = 'info';
+
+ /** @var string Banner alert level - the alert is a warning. */
const BANNERALERT_LEVEL_WARNING = 'error';
+
+ /** @var string Banner alert level - the alert is an announcement. */
const BANNERALERT_LEVEL_ANNOUNCEMENT = 'success';
+
+ /** @var string Banner alert target - the alert appears on the Dashboard page only. */
const BANNERALERT_TARGET_DASHBOARD = 'dashboard';
+ /** @var string Banner alert target - the alert appears on every page of the site. */
const BANNERALERT_TARGET_SITEWIDE = '0';
+
+ /** @var string The key to look up banner alerts in the user session. */
const BANNERALERT_SESSION_KEY = 'alerts';
+ /** @var int Banner alert index key for events appearing on Sunday. */
const BANNERALERT_WEEKDAYS_SUNDAY = 0;
+
+ /** @var int Banner alert index key for events appearing on Monday. */
const BANNERALERT_WEEKDAYS_MONDAY = 1;
+
+ /** @var int Banner alert index key for events appearing on Tuesday. */
const BANNERALERT_WEEKDAYS_TUESDAY = 2;
+
+ /** @var int Banner alert index key for events appearing on Wednesday. */
const BANNERALERT_WEEKDAYS_WEDNESDAY = 3;
+
+ /** @var int Banner alert index key for events appearing on Thursday. */
const BANNERALERT_WEEKDAYS_THURSDAY = 4;
+
+ /** @var int Banner alert index key for events appearing on Friday. */
const BANNERALERT_WEEKDAYS_FRIDAY = 5;
+
+ /** @var int Banner alert index key for events appearing on Saturday. */
const BANNERALERT_WEEKDAYS_SATURDAY = 6;
}
diff --git a/classes/output/banneralerts.php b/classes/output/banneralerts.php
index a7bbcda2..16cf976a 100644
--- a/classes/output/banneralerts.php
+++ b/classes/output/banneralerts.php
@@ -31,13 +31,15 @@
* Banner alerts.
*
* @package theme_ucsf
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class banneralerts implements renderable, templatable {
+ /** @var moodle_page The current page. */
protected moodle_page $page;
+ /** @var string[] Maps alert levels to CSS classes. */
const ALERT_LEVEL_CSS_CLASSES_MAP = [
constants::BANNERALERT_LEVEL_INFORMATION => 'alert-info',
constants::BANNERALERT_LEVEL_ANNOUNCEMENT => 'alert-warning',
@@ -45,6 +47,8 @@ class banneralerts implements renderable, templatable {
];
/**
+ * Class constructor.
+ *
* @param moodle_page $page
*/
public function __construct(moodle_page $page) {
diff --git a/classes/output/core_renderer.php b/classes/output/core_renderer.php
index 83fd59fc..ca0bf6b2 100644
--- a/classes/output/core_renderer.php
+++ b/classes/output/core_renderer.php
@@ -29,7 +29,7 @@
* Theme renderer.
*
* @package theme_ucsf
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class core_renderer extends boost_core_renderer {
diff --git a/classes/output/helpmenu.php b/classes/output/helpmenu.php
index c30a5832..bd290f69 100644
--- a/classes/output/helpmenu.php
+++ b/classes/output/helpmenu.php
@@ -28,7 +28,7 @@
* Help menu output component.
*
* @package theme_ucsf
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class helpmenu implements renderable, templatable {
diff --git a/classes/output/primary.php b/classes/output/primary.php
index d4c53860..22a4011a 100644
--- a/classes/output/primary.php
+++ b/classes/output/primary.php
@@ -29,7 +29,7 @@
* Primary navigation renderable.
*
* @package theme_ucsf
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class primary extends core_primary {
@@ -40,7 +40,6 @@ class primary extends core_primary {
* @return array
* @throws coding_exception
* @throws dml_exception
- * @global stdClass $PAGE
*/
protected function get_custom_menu(renderer_base $output): array {
// Skip altogether if customizations are turned off.
diff --git a/classes/privacy/provider.php b/classes/privacy/provider.php
index b88b3099..608b4897 100644
--- a/classes/privacy/provider.php
+++ b/classes/privacy/provider.php
@@ -22,11 +22,14 @@
* The theme's privacy information provider.
*
* @package theme_ucsf
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class provider implements null_provider {
+ /**
+ * {@inheritdoc}
+ */
public static function get_reason(): string {
return 'privacy:metadata';
}
diff --git a/classes/utils/config.php b/classes/utils/config.php
index 580b4de2..0951e467 100644
--- a/classes/utils/config.php
+++ b/classes/utils/config.php
@@ -22,7 +22,7 @@
* Utility class for accessing theme configuration settings.
*
* @package theme_ucsf
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class config {
diff --git a/classes/utils/coursecategory.php b/classes/utils/coursecategory.php
index bac13947..71a0ec35 100644
--- a/classes/utils/coursecategory.php
+++ b/classes/utils/coursecategory.php
@@ -25,7 +25,7 @@
* Utility class for handling course-category specific configurations.
*
* @package theme_ucsf
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class coursecategory {
@@ -36,7 +36,6 @@ class coursecategory {
*
* @return string The course category id.
* @throws coding_exception
- * @global moodle_page $PAGE The current page object
*/
public static function get_current_category_id(): string {
global $PAGE;
@@ -56,7 +55,6 @@ public static function get_current_category_id(): string {
* The first element in that list is the given course category id itself, followed by its parent,
* the parent's parent, and so on.
*
- * @global moodle_database $DB
* @param string $id The category id.
* @return array A list of category ids, will be empty if the given category cannot be found.
* @throws dml_exception
@@ -92,8 +90,8 @@ public static function get_reverse_category_hierarchy(string $id): array {
* 3. The theme settings contains entries with the names "customlabel5" and "customlabel1".
* 4. This method will return "5", since "customlabel5" is the first matching setting from the bottom of the hierarchy.
*
- * @param string $category_id The course category id
- * @param string $setting_name_prefix Settings name prefix
+ * @param string $categoryid The course category id
+ * @param string $settingnameprefix Settings name prefix
* @return string The first matching category id, or an empty string if no matching setting could be found.
* @see coursecategory::get_reverse_category_hierarchy()
* @throws dml_exception
diff --git a/config.php b/config.php
index bc08e1d2..5e4162a6 100644
--- a/config.php
+++ b/config.php
@@ -15,8 +15,10 @@
// along with Moodle. If not, see .
/**
+ * Configuration file for the UCSF theme.
+ *
* @package theme_ucsf
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
diff --git a/lang/en/theme_ucsf.php b/lang/en/theme_ucsf.php
index 3914ce54..b421dc19 100644
--- a/lang/en/theme_ucsf.php
+++ b/lang/en/theme_ucsf.php
@@ -15,8 +15,10 @@
// along with Moodle. If not, see .
/**
+ * Language file for the UCSF theme.
+ *
* @package theme_ucsf
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
diff --git a/layout/drawers.php b/layout/drawers.php
index c1341c53..2e2f5cb8 100644
--- a/layout/drawers.php
+++ b/layout/drawers.php
@@ -20,7 +20,7 @@
* This layout file is based on theme/boost/layout/drawers.php
*
* @package theme_ucsf
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @copyright based on code from theme_boost by Bas Brands
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
diff --git a/layout/includes/banneralerts.php b/layout/includes/banneralerts.php
index d1e0a3a4..4cfc1156 100644
--- a/layout/includes/banneralerts.php
+++ b/layout/includes/banneralerts.php
@@ -18,7 +18,7 @@
* Renders and adds our banner alerts to the page template context.
*
* @package theme_ucsf
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
diff --git a/layout/includes/courserelatedhints.php b/layout/includes/courserelatedhints.php
index 09dae14b..c0977d60 100644
--- a/layout/includes/courserelatedhints.php
+++ b/layout/includes/courserelatedhints.php
@@ -18,7 +18,7 @@
* Adds course-related hints to the page template context.
*
* @package theme_ucsf
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
diff --git a/layout/includes/javascript.php b/layout/includes/javascript.php
index 36821221..981986a6 100644
--- a/layout/includes/javascript.php
+++ b/layout/includes/javascript.php
@@ -18,7 +18,7 @@
* Adds our custom JS dependencies to the page.
*
* @package theme_ucsf
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
diff --git a/lib.php b/lib.php
index ca594573..81dbd7f1 100644
--- a/lib.php
+++ b/lib.php
@@ -15,8 +15,10 @@
// along with Moodle. If not, see .
/**
+ * Theme functions.
+ *
* @package theme_ucsf
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
diff --git a/locallib.php b/locallib.php
index 4633546c..24746325 100644
--- a/locallib.php
+++ b/locallib.php
@@ -14,6 +14,14 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see .
+/**
+ * Global support functions for the UCSF theme.
+ *
+ * @package theme_ucsf
+ * @copyright The Regents of the University of California
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
/**
* Build the course related hints HTML code.
* This function evaluates and composes all course related hints which may appear on a course page below the course header.
diff --git a/settings.php b/settings.php
index 9e9b4d5a..98537959 100644
--- a/settings.php
+++ b/settings.php
@@ -15,8 +15,10 @@
// along with Moodle. If not, see .
/**
+ * Settings file for the UCSF theme.
+ *
* @package theme_ucsf
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
diff --git a/version.php b/version.php
index a817109d..86877495 100644
--- a/version.php
+++ b/version.php
@@ -15,11 +15,12 @@
// along with Moodle. If not, see .
/**
+ * Version file for the UCSF Moodle theme.
+ *
* @package theme_ucsf
- * @copyright 2023 The Regents of the University of California
+ * @copyright The Regents of the University of California
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
-
defined('MOODLE_INTERNAL') || die();
$plugin->component = 'theme_ucsf';