diff --git a/classes/data_controller.php b/classes/data_controller.php index 0ae72ca8bade3af218d9cfbdc62f4913cff9cdd9..98fe54c1b67e2070f502651e4f6d1c3b64019013 100644 --- a/classes/data_controller.php +++ b/classes/data_controller.php @@ -66,6 +66,15 @@ class data_controller extends \core_customfield\data_controller { * @param \MoodleQuickForm $mform */ public function instance_form_definition(\MoodleQuickForm $mform) { + global $CFG; + + // Require local library. + require_once($CFG->dirroot.'/customfield/field/semester/locallib.php'); + + // Get config from DB. + $config = get_config('customfield_semester'); + + // Compose the field values. $field = $this->get_field(); $formattedoptions = array( 1 => get_string('semesterindependent', 'customfield_semester') @@ -88,10 +97,18 @@ class data_controller extends \core_customfield\data_controller { $year . '/' . substr($year + 1, 2, 2)); } + // The values were composed in CUSTOMFIELD_SEMESTER_PRESENTATION_ASC order here. + // If the admin wants to present them in CUSTOMFIELD_SEMESTER_PRESENTATION_DESC order, we need to reverse the array now. + if ($config->termpresentationorder == CUSTOMFIELD_SEMESTER_PRESENTATION_DESC) { + $formattedoptions = array_reverse($formattedoptions, true); + } + + // Build the field widget. $elementname = $this->get_form_element_name(); $mform->addElement('select', $elementname, $this->get_field()->get_formatted_name(), $formattedoptions); $mform->setDefault($elementname, $this->get_default_value()); + // Add the required flag if necessary. if ($field->get_configdata_property('required')) { $mform->addRule($elementname, null, 'required', null, 'client'); } diff --git a/classes/field_controller.php b/classes/field_controller.php index 113cc772dc26d95dad7fa205e9936d55388abc03..ea33617fd35c019133793c8bf3a7b60172150eba 100644 --- a/classes/field_controller.php +++ b/classes/field_controller.php @@ -92,13 +92,32 @@ class field_controller extends \core_customfield\field_controller { * @return array */ public function course_grouping_format_values($values): array { + global $CFG; + + // Require local library. + require_once($CFG->dirroot.'/customfield/field/semester/locallib.php'); + + // Get config from DB. + $config = get_config('customfield_semester'); + + // Prepare return array. $ret = []; + + // The values arrive in CUSTOMFIELD_SEMESTER_PRESENTATION_ASC order here. + // If the admin wants to present them in CUSTOMFIELD_SEMESTER_PRESENTATION_DESC order, we need to reverse the array now. + if ($config->termpresentationorder == CUSTOMFIELD_SEMESTER_PRESENTATION_DESC) { + $values = array_reverse($values, true); + } + + // Iterate over given values. foreach ($values as $value) { $name = data_controller::get_name_for_semester($value); if ($name) { $ret[$value] = $name; } } + + // Return values. return $ret; } } diff --git a/lang/de/customfield_semester.php b/lang/de/customfield_semester.php index ed5f3410ca2907ed5ed3d957c4f3047a731bae18..c96b3017f4cee4a443a9652d09dfb2489883e5bb 100644 --- a/lang/de/customfield_semester.php +++ b/lang/de/customfield_semester.php @@ -34,6 +34,10 @@ $string['defaultmonthsintofuture'] = 'Standard ist das Semester in X Monaten.'; $string['beginofsemesters'] = 'Das Jahr, in dem die Liste der Semester anfängt.'; $string['summertermstartmonth'] = 'Der Monat in dem das Sommersemester startet'; $string['summertermstartmonth_desc'] = 'Mit dieser Einstellung definieren Sie in welchem Monat das Sommersemester startet.'; +$string['termpresentationasc'] = 'Ältere Semester zuerst, semesterunabhängiger Eintrag am Beginn der Liste'; +$string['termpresentationdesc'] = 'Neuere Semester zuerst, semesterunabhängiger Eintrag am Ende der Liste'; +$string['termpresentationorder'] = 'Darstellungsreihenfolge der Semester'; +$string['termpresentationorder_desc'] = 'Mit dieser Einstellung definieren Sie wie die Liste der Semester innerhalb der Kurseinstellungen und (falls das Feld als Kursfilter verwendet wird) innerhalb des Kursübersichtsblocks auf dem Dashboard dargestellt wird.'; $string['wintertermstartmonth'] = 'Der Monat in dem das Wintersemester startet'; $string['wintertermstartmonth_desc'] = 'Mit dieser Einstellung definieren Sie in welchem Monat das Wintersemester startet.'; $string['startmonthnote'] = 'Bitte beachten: Gültige Einstellungen sind Werte zwischen 1 und 12. Diese Einstellung geht davon aus, dass das Sommersemester im Jahresverlauf vor dem Wintersemester kommt. Falls Sie die Semester andersrum konfigurieren, wird das Kursfeld Ihre Einstellung stillschweigend ignorieren und die Standardwerte nutzen.'; diff --git a/lang/en/customfield_semester.php b/lang/en/customfield_semester.php index 560b245c1ca892283379b7ee741d1f26669c12b1..4ee5539454134e9921394186690042a16f3ed844 100644 --- a/lang/en/customfield_semester.php +++ b/lang/en/customfield_semester.php @@ -34,6 +34,10 @@ $string['defaultmonthsintofuture'] = 'The default option is the semester in X mo $string['beginofsemesters'] = 'The year, the list of semesters begins in.'; $string['summertermstartmonth'] = 'The month when summer term starts'; $string['summertermstartmonth_desc'] = 'With this setting, you define in which month the summer term starts.'; +$string['termpresentationasc'] = 'Older terms first, term-independent entry at the beginning of the list'; +$string['termpresentationdesc'] = 'Newer terms first, term-independent entry at the end of the list'; +$string['termpresentationorder'] = 'Term presentation order'; +$string['termpresentationorder_desc'] = 'With this setting, you control how the list of terms is presented within the course settings and (if the field is used as a course filter) within the Dashboard course overview block.'; $string['wintertermstartmonth'] = 'The month when winter term starts'; $string['wintertermstartmonth_desc'] = 'With this setting, you define in which month the winter term starts.'; $string['startmonthnote'] = 'Please note: Acceptable values are numbers between 1 and 12. This setting assumes that the summer term comes before the winter term. If you configure the terms the other way round, the custom field will silently ignore your settings and use the defaults.'; diff --git a/locallib.php b/locallib.php index 8b083f972d417cd5eea893b7c0a3808234afe3a2..72eb69233d17b70cc852524d8bec1740ea176844 100644 --- a/locallib.php +++ b/locallib.php @@ -27,3 +27,7 @@ defined('MOODLE_INTERNAL') || die(); // Constants for term default start months. define('CUSTOMFIELD_SEMESTER_SUMMERTERMSTART', 4); define('CUSTOMFIELD_SEMESTER_WINTERTERMSTART', 10); + +// Constants for term presentation order. +define('CUSTOMFIELD_SEMESTER_PRESENTATION_ASC', 'asc'); +define('CUSTOMFIELD_SEMESTER_PRESENTATION_DESC', 'desc'); diff --git a/settings.php b/settings.php index 309cacea05fffa462aee4f76d44600ddaca48ab1..75bbcfee8ad5ec4e76b418abc12747a6c2921bb0 100644 --- a/settings.php +++ b/settings.php @@ -46,4 +46,13 @@ if ($ADMIN->fulltree) { get_string('startmonthnote', 'customfield_semester', null, true); $setting = new admin_setting_configtext($name, $title, $description, CUSTOMFIELD_SEMESTER_WINTERTERMSTART, $monthregex, 2); $settings->add($setting); + + // Setting for the term presentation order. + $options = array (CUSTOMFIELD_SEMESTER_PRESENTATION_ASC => get_string('termpresentationasc', 'customfield_semester'), + CUSTOMFIELD_SEMESTER_PRESENTATION_DESC => get_string('termpresentationdesc', 'customfield_semester')); + $name = 'customfield_semester/termpresentationorder'; + $title = get_string('termpresentationorder', 'customfield_semester', null, true); + $description = get_string('termpresentationorder_desc', 'customfield_semester', null, true); + $setting = new admin_setting_configselect($name, $title, $description, CUSTOMFIELD_SEMESTER_PRESENTATION_ASC, $options); + $settings->add($setting); } diff --git a/version.php b/version.php index 8c9fbf0a386a7dfa0a5698224de2954d37ac4bac..6f326aaa8e2646cf16add2770127bb88f81bc2f6 100644 --- a/version.php +++ b/version.php @@ -25,5 +25,5 @@ defined('MOODLE_INTERNAL') || die(); $plugin->component = 'customfield_semester'; -$plugin->version = 2020041302; +$plugin->version = 2020041303; $plugin->requires = 2019111800;