Merge branch 'MDL-68999-master-homemoodlenet' of git://github.com/mudrd8mz/moodle
authorJake Dallimore <jake@moodle.com>
Wed, 10 Jun 2020 00:37:46 +0000 (08:37 +0800)
committerJake Dallimore <jake@moodle.com>
Wed, 10 Jun 2020 00:37:46 +0000 (08:37 +0800)
course/tests/caching_content_item_readonly_repository_test.php
lib/classes/userfeedback.php
lib/outputrenderers.php
lib/templates/campaign_content.mustache
lib/tests/behat/userfeedback.feature [new file with mode: 0644]
user/classes/table/participants_search.php
user/tests/behat/filter_participants.feature

index 6ad37f1..aacdf54 100644 (file)
@@ -51,15 +51,15 @@ class caching_content_item_readonly_repository_testcase extends \advanced_testca
         // Get the content items using both the live and the caching repos.
         $items = $cir->find_all_for_course($course, $user);
         $cacheditems = $ccir->find_all_for_course($course, $user);
-        $itemsfiltered = array_filter($items, function($item) {
-            return $item->get_component_name() == 'mod_assign';
-        });
-        $cacheditemsfiltered = array_filter($cacheditems, function($item) {
-            return $item->get_component_name() == 'mod_assign';
-        });
+        $itemsfiltered = array_values(array_filter($items, function($item) {
+            return $item->get_component_name() == 'mod_book';
+        }));
+        $cacheditemsfiltered = array_values(array_filter($cacheditems, function($item) {
+            return $item->get_component_name() == 'mod_book';
+        }));
 
-        // Verify the assign module is in both result sets.
-        $module = $DB->get_record('modules', ['name' => 'assign']);
+        // Verify the book module is in both result sets.
+        $module = $DB->get_record('modules', ['name' => 'book']);
         $this->assertEquals($module->name, $itemsfiltered[0]->get_name());
         $this->assertEquals($module->name, $cacheditemsfiltered[0]->get_name());
 
@@ -67,12 +67,12 @@ class caching_content_item_readonly_repository_testcase extends \advanced_testca
         $DB->set_field("modules", "visible", "0", ["id" => $module->id]);
         $items = $cir->find_all_for_course($course, $user);
         $cacheditems = $ccir->find_all_for_course($course, $user);
-        $itemsfiltered = array_filter($items, function($item) {
-            return $item->get_component_name() == 'mod_assign';
-        });
-        $cacheditemsfiltered = array_filter($cacheditems, function($item) {
-            return $item->get_component_name() == 'mod_assign';
-        });
+        $itemsfiltered = array_values(array_filter($items, function($item) {
+            return $item->get_component_name() == 'mod_book';
+        }));
+        $cacheditemsfiltered = array_values(array_filter($cacheditems, function($item) {
+            return $item->get_component_name() == 'mod_book';
+        }));
 
         // The caching repo should return the same list, while the live repo will return the updated list.
         $this->assertEquals($module->name, $cacheditemsfiltered[0]->get_name());
index d74f621..8128336 100644 (file)
@@ -96,7 +96,7 @@ class core_userfeedback {
     public static function should_display_reminder(): bool {
         global $CFG;
 
-        if ($CFG->enableuserfeedback && isloggedin() && !isguestuser()) {
+        if (static::can_give_feedback()) {
             $give = get_user_preferences('core_userfeedback_give');
             $remind = get_user_preferences('core_userfeedback_remind');
 
@@ -145,6 +145,17 @@ class core_userfeedback {
         return $url;
     }
 
+    /**
+     * Whether the current can give feedback.
+     *
+     * @return bool
+     */
+    public static function can_give_feedback(): bool {
+        global $CFG;
+
+        return $CFG->enableuserfeedback && isloggedin() && !isguestuser();
+    }
+
     /**
      * Returns the last major upgrade time
      *
index 240d449..8802a9e 100644 (file)
@@ -835,7 +835,7 @@ class core_renderer extends renderer_base {
             }
         }
 
-        if (isloggedin() && !isguestuser()) {
+        if (core_userfeedback::can_give_feedback()) {
             $output .= html_writer::div(
                 $this->render_from_template('core/userfeedback_footer_link', ['url' => core_userfeedback::make_link()->out(false)])
             );
index dbba382..1e7848e 100644 (file)
@@ -33,8 +33,7 @@
     Example context (json):
     { "lang": "en"}
 }}
-<div class="alert alert-secondary alert-block fade in alert-dismissible">
-    <button type="button" class="close" data-dismiss="alert">&times;</button>
+<div class="alert alert-secondary alert-block fade in">
     <iframe id="campaign-content" class="w-100 border-0"></iframe>
 </div>
 {{#js}}
diff --git a/lib/tests/behat/userfeedback.feature b/lib/tests/behat/userfeedback.feature
new file mode 100644 (file)
index 0000000..b090f80
--- /dev/null
@@ -0,0 +1,36 @@
+@core
+Feature: Gathering user feedback
+  In order to facilitate data collection from as broad a sample of Moodle users as possible
+  As Moodle HQ
+  We should add a link within Moodle to a permanent URL on which surveys will be placed
+
+  Scenario: Users should see a feedback link on footer when the feature is enabled
+    Given the following config values are set as admin:
+      | enableuserfeedback  | 1  |
+    When I log in as "admin"
+    Then I should see "Give feedback" in the "page-footer" "region"
+
+  Scenario: Users should not see a feedback link on footer when the feature is disabled
+    Given the following config values are set as admin:
+      | enableuserfeedback  | 0  |
+    When I log in as "admin"
+    Then I should not see "Give feedback" in the "page-footer" "region"
+
+  Scenario: Visitors should not see a feedback link on footer when they are not logged in
+    Given the following config values are set as admin:
+      | enableuserfeedback  | 1  |
+    When I am on site homepage
+    Then I should not see "Give feedback" in the "page-footer" "region"
+
+  @javascript
+  Scenario: Users should not see the notification after they click on the remind me later link
+    Given the following config values are set as admin:
+      | enableuserfeedback        | 1   |
+      | userfeedback_nextreminder | 2   |
+      | userfeedback_remindafter  | 90  |
+    When I log in as "admin"
+    And I follow "Dashboard" in the user menu
+    And I click on "Remind me later" "link"
+    And I reload the page
+    Then I should not see "Give feedback" in the "region-main" "region"
+    And I should not see "Remind me later" in the "region-main" "region"
index 0d94483..1970c21 100644 (file)
@@ -265,9 +265,9 @@ class participants_search {
             }
         }
 
-        // Add any supplied additional WHERE clauses.
+        // Add any supplied additional forced WHERE clauses.
         if (!empty($additionalwhere)) {
-            $wheres[] = $additionalwhere;
+            $innerwhere .= " AND ({$additionalwhere})";
             $params = array_merge($params, $additionalparams);
         }
 
index 5e243dd..60475cd 100644 (file)
@@ -664,3 +664,25 @@ Feature: Course participants can be filtered
     And I should not see "Student 2" in the "participants" "table"
     And I should not see "Student 3" in the "participants" "table"
     And I should not see "Teacher 1" in the "participants" "table"
+
+  @javascript
+  Scenario: Initials filtering is always applied in addition to any other filtering
+    Given I log in as "teacher1"
+    And I am on "Course 2" course homepage
+    And I navigate to course participants
+    And I should see "Student 1" in the "participants" "table"
+    And I should see "Student 2" in the "participants" "table"
+    And I should see "Student 3" in the "participants" "table"
+    And I should see "Trendy Learnson" in the "participants" "table"
+    And I should see "Teacher 1" in the "participants" "table"
+    When I set the field "Match" in the "Filter 1" "fieldset" to "Any"
+    And I set the field "type" in the "Filter 1" "fieldset" to "Role"
+    And I click on ".form-autocomplete-downarrow" "css_element" in the "Filter 1" "fieldset"
+    And I click on "Student" "list_item"
+    And I click on "Apply filters" "button"
+    When I click on "T" "link" in the ".firstinitial" "css_element"
+    Then I should see "Trendy Learnson" in the "participants" "table"
+    And I should not see "Student 1" in the "participants" "table"
+    And I should not see "Student 2" in the "participants" "table"
+    And I should not see "Student 3" in the "participants" "table"
+    And I should not see "Teacher 1" in the "participants" "table"