MDL-65033 mod_forum: Accessibility updates
authorPeter <peter@moodle.com>
Thu, 28 Mar 2019 04:09:10 +0000 (12:09 +0800)
committerPeter <peterrolanddias@gmail.com>
Mon, 29 Apr 2019 08:27:04 +0000 (16:27 +0800)
mod/forum/amd/build/favourite_toggle.min.js
mod/forum/amd/build/pin_toggle.min.js
mod/forum/amd/src/favourite_toggle.js
mod/forum/amd/src/pin_toggle.js
mod/forum/classes/local/vaults/discussion_list.php
mod/forum/lang/en/forum.php
mod/forum/templates/discussion_favourite_toggle.mustache
mod/forum/templates/discussion_pin_toggle.mustache
mod/forum/templates/discussion_subscription_toggle.mustache
mod/forum/templates/forum_action_menu.mustache
mod/forum/tests/vaults_discussion_list_test.php

index f9729cb..4d6584e 100644 (file)
Binary files a/mod/forum/amd/build/favourite_toggle.min.js and b/mod/forum/amd/build/favourite_toggle.min.js differ
index d230fde..f625c53 100644 (file)
Binary files a/mod/forum/amd/build/pin_toggle.min.js and b/mod/forum/amd/build/pin_toggle.min.js differ
index e613e07..346921b 100644 (file)
@@ -28,12 +28,14 @@ define([
         'core/notification',
         'mod_forum/repository',
         'mod_forum/selectors',
+        'core/str',
     ], function(
         $,
         Templates,
         Notification,
         Repository,
-        Selectors
+        Selectors,
+        String
     ) {
 
     /**
@@ -55,6 +57,15 @@ define([
                 .then(function(html, js) {
                     return Templates.replaceNode(toggleElement, html, js);
                 })
+                .then(function() {
+                    return String.get_string("favouriteupdated", "forum")
+                        .done(function(s) {
+                            return Notification.addNotification({
+                                message: s,
+                                type: "info"
+                            });
+                        });
+                })
                 .catch(Notification.exception);
 
             e.preventDefault();
index 7fffde2..7884128 100644 (file)
@@ -33,6 +33,7 @@ define([
     'core/notification',
     'mod_forum/repository',
     'mod_forum/selectors',
+    'core/str',
 ], function(
     $,
     Ajax,
@@ -40,7 +41,8 @@ define([
     Templates,
     Notification,
     Repository,
-    Selectors
+    Selectors,
+    String
 ) {
 
     /**
@@ -61,6 +63,15 @@ define([
                 .then(function(html, js) {
                     return Templates.replaceNode(toggleElement, html, js);
                 })
+                .then(function() {
+                    return String.get_string("pinupdated", "forum")
+                        .done(function(s) {
+                            return Notification.addNotification({
+                                message: s,
+                                type: "info"
+                            });
+                        });
+                })
                 .fail(Notification.exception);
 
             e.preventDefault();
index ee7342a..528d34b 100644 (file)
@@ -125,7 +125,7 @@ class discussion_list extends db_table_vault {
         $tables .= ' JOIN {user} fa ON fa.id = ' . $alias . '.userid';
         $tables .= ' JOIN {user} la ON la.id = ' . $alias . '.usermodified';
         $tables .= ' JOIN ' . $posttable->get_from_sql() . ' ON fp.id = ' . $alias . '.firstpost';
-        $tables .= $favsql ? $favsql : '';
+        $tables .= isset($favsql) ? $favsql : '';
 
         $selectsql = 'SELECT ' . $fields . ' FROM ' . $tables;
         $selectsql .= $wheresql ? ' WHERE ' . $wheresql : '';
index 81cbeff..8c73bfe 100644 (file)
@@ -75,13 +75,13 @@ $string['cannotmovenotvisible'] = 'Forum not visible';
 $string['cannotmovetonotexist'] = 'You can\'t move to that forum - it doesn\'t exist!';
 $string['cannotmovetonotfound'] = 'Target forum not found in this course.';
 $string['cannotmovetosingleforum'] = 'Cannot move discussion to a simple single discussion forum';
-$string['cannotpindiscussions'] = 'Sorry, you do not have the permission to pin discussions.';
+$string['cannotpindiscussions'] = 'Sorry, you do not have permission to pin discussions.';
 $string['cannotpurgecachedrss'] = 'Could not purge the cached RSS feeds for the source and/or destination forum(s) - check your file permissionsforums';
 $string['cannotremovesubscriber'] = 'Could not remove subscriber with id {$a} from this forum!';
 $string['cannotreply'] = 'You cannot reply to this post';
 $string['cannotsplit'] = 'Discussions from this forum cannot be split';
 $string['cannotsubscribe'] = 'Sorry, but you must be a group member to subscribe.';
-$string['cannotfavourite'] = 'Sorry, but you do not have the permission to favourite.';
+$string['cannotfavourite'] = 'Sorry, but you do not have the permission to star discussions.';
 $string['cannottrack'] = 'Could not stop tracking that forum';
 $string['cannotunsubscribe'] = 'Could not unsubscribe you from that forum';
 $string['cannotupdatepost'] = 'You can not update this post';
@@ -239,6 +239,7 @@ $string['exportdiscussion'] = 'Export whole discussion to portfolio';
 $string['exportattachmentname'] = 'Export attachment {$a} to portfolio';
 $string['firstpost'] = 'First post';
 $string['favourites'] = 'Starred';
+$string['favouriteupdated'] = 'Your star option has been updated.';
 $string['forcedreadtracking'] = 'Allow forced read tracking';
 $string['forcedreadtracking_desc'] = 'Allows forums to be set to forced read tracking. Will result in decreased performance for some users, particularly on courses with many forums and posts. When off, any forums previously set to Forced are treated as optional.';
 $string['forcesubscribed_help'] = 'This forum has been configured so that you cannot unsubscribe from discussions.';
@@ -440,6 +441,7 @@ $string['permanentlinktopost'] = 'Permanent link to this post';
 $string['permanentlinktoparentpost'] = 'Permanent link to the parent of this post';
 $string['postisprivatereply'] = 'This post was made privately and is not visible to all users.';
 $string['pindiscussion'] = 'Pin this discussion';
+$string['pinupdated'] = 'The pin option has been updated.';
 $string['posttomygroups'] = 'Post a copy to all groups';
 $string['posttomygroups_help'] = 'Posts a copy of this message to all groups you have access to. Participants in groups you do not have access to will not see this post';
 $string['prevdiscussiona'] = 'Previous discussion: {$a}';
index 43d21dd..675d4c0 100644 (file)
 }}
 {{#capabilities.favourite}}
     <a
-        class="p-t-0 btn btn-link"
+        class="btn btn-link"
         data-type="favorite-toggle"
         data-action="toggle"
         data-discussionid="{{id}}"
         data-forumid="{{forumid}}"
+        role="menuitem",
         tabindex="-1"
         {{#userstate.favourited}}
             data-targetstate="0"
index f4e9182..deacd1e 100644 (file)
@@ -40,6 +40,8 @@
         data-discussionid="{{id}}"
         data-forumid="{{forumid}}"
         href="{{urls.pin}}"
+        tabindex="-1"
+        role="menuitem"
         {{#pinned}}
             data-targetstate="0"
             title="{{#str}}unpindiscussion, mod_forum{{/str}}"
index 79bf253..9817f95 100644 (file)
@@ -35,7 +35,7 @@
 {{#capabilities.subscribe}}
     <a
         href="{{{urls.subscribe}}}"
-        class="p-3 btn btn-link"
+        class="py-3 btn btn-link"
         data-type="subscription-toggle"
         data-action="toggle"
         data-discussionid="{{id}}"
index a019ffc..ae0fee3 100644 (file)
     }
 }}
 <div class="ml-auto dropdown">
-    <button class="m-t-0 p-t-0 btn btn-link btn-icon"
+    <button class="{{^settings.excludetext}}dropdown-toggle{{/settings.excludetext}} m-t-0 p-t-0 btn btn-link btn-icon"
         type="button"
         role="button"
         data-toggle="dropdown"
         aria-haspopup="true"
+        tabindex="0"
+        aria-controls="forum-action-menu-{{id}}-menu"
         aria-expanded="false">
         {{#settings.togglemoreicon}}
             {{#pix}} i/moremenu, core{{/pix}}
         {{/settings.excludetext}}
 
     </button>
-    <div class="dropdown-menu dropdown-menu-right">
+    <div class="dropdown-menu dropdown-menu-right"
+         aria-labelledby="forum-action-menu-{{id}}-menu"
+         data-rel="menu-content"
+         role="menu"
+         id="forum-action-menu-{{id}}-menu">
         <div class="dropdown-item">
             {{> mod_forum/discussion_favourite_toggle}}
         </div>
index ccc39a1..510ff19 100644 (file)
@@ -82,39 +82,39 @@ class mod_forum_vaults_discussion_list_testcase extends advanced_testcase {
         $course = $datagenerator->create_course();
         $forum = $datagenerator->create_module('forum', ['course' => $course->id]);
 
-        $this->assertEquals([], $vault->get_from_forum_id($forum->id, true, $user->id, null, 0, 0));
+        $this->assertEquals([], $vault->get_from_forum_id($forum->id, true, $user->id, null, 0, 0, $user));
 
         $now = time();
         [$discussion1, $post1] = $this->helper_post_to_forum($forum, $user, ['timestart' => $now - 10, 'timemodified' => 1]);
         [$discussion2, $post2] = $this->helper_post_to_forum($forum, $user, ['timestart' => $now - 9, 'timemodified' => 2]);
         [$hiddendiscussion, $post3] = $this->helper_post_to_forum($forum, $user, ['timestart' => $now + 10, 'timemodified' => 3]);
 
-        $summaries = array_values($vault->get_from_forum_id($forum->id, false, null, null, 0, 0));
+        $summaries = array_values($vault->get_from_forum_id($forum->id, false, null, null, 0, 0, $user));
         $this->assertCount(2, $summaries);
         $this->assertEquals($discussion2->id, $summaries[0]->get_discussion()->get_id());
         $this->assertEquals($discussion1->id, $summaries[1]->get_discussion()->get_id());
 
-        $summaries = array_values($vault->get_from_forum_id($forum->id, true, null, null, 0, 0));
+        $summaries = array_values($vault->get_from_forum_id($forum->id, true, null, null, 0, 0, $user));
         $this->assertCount(3, $summaries);
         $this->assertEquals($hiddendiscussion->id, $summaries[0]->get_discussion()->get_id());
         $this->assertEquals($discussion2->id, $summaries[1]->get_discussion()->get_id());
         $this->assertEquals($discussion1->id, $summaries[2]->get_discussion()->get_id());
 
-        $summaries = array_values($vault->get_from_forum_id($forum->id, false, $user->id, null, 0, 0));
+        $summaries = array_values($vault->get_from_forum_id($forum->id, false, $user->id, null, 0, 0, $user));
         $this->assertCount(3, $summaries);
         $this->assertEquals($hiddendiscussion->id, $summaries[0]->get_discussion()->get_id());
         $this->assertEquals($discussion2->id, $summaries[1]->get_discussion()->get_id());
         $this->assertEquals($discussion1->id, $summaries[2]->get_discussion()->get_id());
 
-        $summaries = array_values($vault->get_from_forum_id($forum->id, true, null, null, 1, 0));
+        $summaries = array_values($vault->get_from_forum_id($forum->id, true, null, null, 1, 0, $user));
         $this->assertCount(1, $summaries);
         $this->assertEquals($hiddendiscussion->id, $summaries[0]->get_discussion()->get_id());
 
-        $summaries = array_values($vault->get_from_forum_id($forum->id, true, null, null, 1, 1));
+        $summaries = array_values($vault->get_from_forum_id($forum->id, true, null, null, 1, 1, $user));
         $this->assertCount(1, $summaries);
         $this->assertEquals($discussion2->id, $summaries[0]->get_discussion()->get_id());
 
-        $summaries = array_values($vault->get_from_forum_id($forum->id, true, null, null, 1, 2));
+        $summaries = array_values($vault->get_from_forum_id($forum->id, true, null, null, 1, 2, $user));
         $this->assertCount(1, $summaries);
         $this->assertEquals($discussion1->id, $summaries[0]->get_discussion()->get_id());
     }
@@ -132,7 +132,7 @@ class mod_forum_vaults_discussion_list_testcase extends advanced_testcase {
         $course = $datagenerator->create_course();
         $forum = $datagenerator->create_module('forum', ['course' => $course->id]);
 
-        $this->assertEquals([], $vault->get_from_forum_id($forum->id, true, true, null, 0, 0));
+        $this->assertEquals([], $vault->get_from_forum_id($forum->id, true, true, null, 0, 0, $user));
 
         $now = time();
         [$discussion1, $post1] = $this->helper_post_to_forum($forum, $user, ['timestart' => $now - 10, 'timemodified' => 1]);
@@ -154,7 +154,7 @@ class mod_forum_vaults_discussion_list_testcase extends advanced_testcase {
             ['timestart' => $now + 11, 'timemodified' => 6, 'groupid' => 3]
         );
 
-        $summaries = array_values($vault->get_from_forum_id_and_group_id($forum->id, [1, 2, 3], true, null, null, 0, 0));
+        $summaries = array_values($vault->get_from_forum_id_and_group_id($forum->id, [1, 2, 3], true, null, null, 0, 0, $user));
         $this->assertCount(6, $summaries);
         $this->assertEquals($hiddengroupdiscussion->id, $summaries[0]->get_discussion()->get_id());
         $this->assertEquals($hiddendiscussion->id, $summaries[1]->get_discussion()->get_id());
@@ -163,7 +163,7 @@ class mod_forum_vaults_discussion_list_testcase extends advanced_testcase {
         $this->assertEquals($discussion2->id, $summaries[4]->get_discussion()->get_id());
         $this->assertEquals($discussion1->id, $summaries[5]->get_discussion()->get_id());
 
-        $summaries = array_values($vault->get_from_forum_id_and_group_id($forum->id, [1, 2, 3], false, $user->id, null, 0, 0));
+        $summaries = array_values($vault->get_from_forum_id_and_group_id($forum->id, [1, 2, 3], false, $user->id, null, 0, 0, $user));
         $this->assertCount(6, $summaries);
         $this->assertEquals($hiddengroupdiscussion->id, $summaries[0]->get_discussion()->get_id());
         $this->assertEquals($hiddendiscussion->id, $summaries[1]->get_discussion()->get_id());
@@ -172,26 +172,26 @@ class mod_forum_vaults_discussion_list_testcase extends advanced_testcase {
         $this->assertEquals($discussion2->id, $summaries[4]->get_discussion()->get_id());
         $this->assertEquals($discussion1->id, $summaries[5]->get_discussion()->get_id());
 
-        $summaries = array_values($vault->get_from_forum_id_and_group_id($forum->id, [1, 2, 3], true, null, null, 1, 0));
+        $summaries = array_values($vault->get_from_forum_id_and_group_id($forum->id, [1, 2, 3], true, null, null, 1, 0, $user));
         $this->assertCount(1, $summaries);
         $this->assertEquals($hiddengroupdiscussion->id, $summaries[0]->get_discussion()->get_id());
 
-        $summaries = array_values($vault->get_from_forum_id_and_group_id($forum->id, [1, 2, 3], true, null, null, 1, 1));
+        $summaries = array_values($vault->get_from_forum_id_and_group_id($forum->id, [1, 2, 3], true, null, null, 1, 1, $user));
         $this->assertCount(1, $summaries);
         $this->assertEquals($hiddendiscussion->id, $summaries[0]->get_discussion()->get_id());
 
-        $summaries = array_values($vault->get_from_forum_id_and_group_id($forum->id, [1, 2, 3], true, null, null, 1, 2));
+        $summaries = array_values($vault->get_from_forum_id_and_group_id($forum->id, [1, 2, 3], true, null, null, 1, 2, $user));
         $this->assertCount(1, $summaries);
         $this->assertEquals($groupdiscussion2->id, $summaries[0]->get_discussion()->get_id());
 
-        $summaries = array_values($vault->get_from_forum_id_and_group_id($forum->id, [1, 2, 3], false, null, null, 0, 0));
+        $summaries = array_values($vault->get_from_forum_id_and_group_id($forum->id, [1, 2, 3], false, null, null, 0, 0, $user));
         $this->assertCount(4, $summaries);
         $this->assertEquals($groupdiscussion2->id, $summaries[0]->get_discussion()->get_id());
         $this->assertEquals($groupdiscussion1->id, $summaries[1]->get_discussion()->get_id());
         $this->assertEquals($discussion2->id, $summaries[2]->get_discussion()->get_id());
         $this->assertEquals($discussion1->id, $summaries[3]->get_discussion()->get_id());
 
-        $summaries = array_values($vault->get_from_forum_id_and_group_id($forum->id, [], true, null, null, 0, 0));
+        $summaries = array_values($vault->get_from_forum_id_and_group_id($forum->id, [], true, null, null, 0, 0, $user));
         $this->assertCount(3, $summaries);
         $this->assertEquals($hiddendiscussion->id, $summaries[0]->get_discussion()->get_id());
         $this->assertEquals($discussion2->id, $summaries[1]->get_discussion()->get_id());
@@ -237,7 +237,7 @@ class mod_forum_vaults_discussion_list_testcase extends advanced_testcase {
         $course = $datagenerator->create_course();
         $forum = $datagenerator->create_module('forum', ['course' => $course->id]);
 
-        $this->assertEquals([], $vault->get_from_forum_id($forum->id, true, true, null, 0, 0));
+        $this->assertEquals([], $vault->get_from_forum_id($forum->id, true, true, null, 0, 0, $user));
 
         $now = time();
         [$discussion1, $post1] = $this->helper_post_to_forum($forum, $user, ['timestart' => $now - 10, 'timemodified' => 1]);