MDL-69336 lib: Reinstating tablelib column show/hide functionality
authorMichael Hawkins <michaelh@moodle.com>
Tue, 21 Jul 2020 10:42:25 +0000 (18:42 +0800)
committerMichael Hawkins <michaelh@moodle.com>
Tue, 4 Aug 2020 07:20:29 +0000 (15:20 +0800)
Also added behat testing for hide/show columns in participants table.

lib/tablelib.php
user/tests/behat/table_column_visibility.feature [new file with mode: 0644]

index 78bade9..63510a6 100644 (file)
@@ -1444,23 +1444,19 @@ class flexible_table {
             }
         }
 
-        // Now, update the column attributes for collapsed columns
-        foreach (array_keys($this->columns) as $column) {
-            if (!empty($this->prefs['collapse'][$column])) {
-                $this->column_style[$column]['width'] = '10px';
-            }
-        }
+        $this->set_hide_show_preferences();
+        $this->set_sorting_preferences();
+        $this->set_initials_preferences();
 
-        // Now, update the column attributes for collapsed columns
+        // Now, reduce the width of collapsed columns and remove the width from columns that should be expanded.
         foreach (array_keys($this->columns) as $column) {
             if (!empty($this->prefs['collapse'][$column])) {
                 $this->column_style[$column]['width'] = '10px';
+            } else {
+                unset($this->column_style[$column]['width']);
             }
         }
 
-        $this->set_sorting_preferences();
-        $this->set_initials_preferences();
-
         if (empty($this->baseurl)) {
             debugging('You should set baseurl when using flexible_table.');
             global $PAGE;
diff --git a/user/tests/behat/table_column_visibility.feature b/user/tests/behat/table_column_visibility.feature
new file mode 100644 (file)
index 0000000..f7dd23b
--- /dev/null
@@ -0,0 +1,49 @@
+@core @core_user
+Feature: The visibility of table columns can be toggled
+  In order to customise my view of participants data
+  As a user
+  I need to be able to hide and show columns in the participants table
+
+  Background:
+    Given the following "courses" exist:
+      | fullname | shortname | category | groupmode |
+      | Course 1 | C1        | 0        | 1         |
+    And the following "users" exist:
+      | username | firstname | lastname | email               |
+      | t1       | Agatha    | T        | agatha@example.com  |
+      | s1       | Matilda   | W        | matilda@example.com |
+      | s2       | Mick      | H        | mick@example.com    |
+    And the following "course enrolments" exist:
+      | user | course | role           |
+      | t1   | C1     | editingteacher |
+      | s1   | C1     | student        |
+      | s2   | C1     | student        |
+
+  @javascript
+  Scenario: The visibility of columns can be individually toggled within the participants table
+    Given I log in as "t1"
+    And I am on "Course 1" course homepage
+    And I navigate to course participants
+    And I should see "Email address" in the "participants" "table"
+    And I should see "matilda@example.com" in the "participants" "table"
+    And I should see "Roles" in the "participants" "table"
+    And I should see "Student" in the "participants" "table"
+    When I follow "Hide Email address"
+    Then I should not see "Email address" in the "participants" "table"
+    And I should not see "matilda@example.com" in the "participants" "table"
+    And I should see "Roles" in the "participants" "table"
+    And I should see "Student" in the "participants" "table"
+    And I follow "Hide Roles"
+    And I should not see "Roles" in the "participants" "table"
+    And I should not see "Student" in the "participants" "table"
+    And I should not see "matilda@example.com" in the "participants" "table"
+    And I follow "Show Email address"
+    And I should see "Email address" in the "participants" "table"
+    And I should see "matilda@example.com" in the "participants" "table"
+    And I should not see "Roles" in the "participants" "table"
+    And I should not see "Student" in the "participants" "table"
+    And I follow "Show Roles"
+    And I should see "Roles" in the "participants" "table"
+    And I should see "Student" in the "participants" "table"
+    And I should see "Email address" in the "participants" "table"
+    And I should see "matilda@example.com" in the "participants" "table"