MDL-67042 customfield: Display only fields visible to everybody
authorSara Arjona <sara@moodle.com>
Mon, 11 Nov 2019 12:42:12 +0000 (13:42 +0100)
committerSara Arjona <sara@moodle.com>
Fri, 22 Nov 2019 08:10:52 +0000 (09:10 +0100)
When defining the available filters for the Dashboard, only the
fields visible to everyone should be displayed in the Custom field
filter.

blocks/myoverview/classes/output/main.php
blocks/myoverview/lang/en/block_myoverview.php
customfield/classes/api.php
lang/en/course.php

index 5f44bb3..d9687de 100644 (file)
@@ -366,7 +366,9 @@ class main implements renderable, templatable {
             return [];
         }
         $field = \core_customfield\field_controller::create($fieldid);
-        if (!$field->supports_course_grouping()) {
+        $isvisible = $field->get_configdata_property('visibility') == \core_course\customfield\course_handler::VISIBLETOALL;
+        // Only visible fields to everybody supporting course grouping will be displayed.
+        if (!$field->supports_course_grouping() || !$isvisible) {
             return []; // The field shouldn't have been selectable in the global settings, but just skip it now.
         }
         $values = $field->course_grouping_format_values($values);
index 09b5aed..76f83fb 100644 (file)
@@ -54,7 +54,7 @@ $string['courseprogress'] = 'Course progress:';
 $string['completepercent'] = '{$a}% complete';
 $string['customfield'] = 'Custom field';
 $string['customfiltergrouping'] = 'Field to use';
-$string['customfiltergrouping_nofields'] = 'This option requires a course custom field to be set up.';
+$string['customfiltergrouping_nofields'] = 'This option requires a course custom field to be set up and visible to everyone.';
 $string['displaycategories'] = 'Display categories';
 $string['displaycategories_help'] = 'Display the course category on dashboard course items including cards, list items and summary items.';
 $string['favourites'] = 'Starred';
index 087a0d3..6ebce70 100644 (file)
@@ -431,7 +431,9 @@ class api {
         $fields = $DB->get_records_sql($sql);
         foreach ($fields as $field) {
             $inst = field_controller::create(0, $field);
-            if ($inst->supports_course_grouping()) {
+            $isvisible = $inst->get_configdata_property('visibility') == \core_course\customfield\course_handler::VISIBLETOALL;
+            // Only visible fields to everybody supporting course grouping will be displayed.
+            if ($inst->supports_course_grouping() && $isvisible) {
                 $ret[$inst->get('shortname')] = $inst->get('name');
             }
         }
index 7895d12..38c5118 100644 (file)
@@ -35,7 +35,7 @@ $string['customfield_islocked'] = 'Locked';
 $string['customfield_islocked_help'] = 'If the field is locked, only users with the capability to change locked custom fields (by default users with the default role of manager only) will be able to change it in the course settings.';
 $string['customfield_notvisible'] = 'Nobody';
 $string['customfield_visibility'] = 'Visible to';
-$string['customfield_visibility_help'] = 'This setting determines who can view the custom field name and value in the list of courses.';
+$string['customfield_visibility_help'] = 'This setting determines who can view the custom field name and value in the list of courses or in the available custom field filter of the Dashboard.';
 $string['customfield_visibletoall'] = 'Everyone';
 $string['customfield_visibletoteachers'] = 'Teachers';
 $string['customfieldsettings'] = 'Common course custom fields settings';