MDL-42300 course: improved category re-sort controls.
authorSam Hemelryk <sam@moodle.com>
Tue, 15 Oct 2013 04:59:30 +0000 (17:59 +1300)
committerSam Hemelryk <sam@moodle.com>
Fri, 1 Nov 2013 00:57:39 +0000 (08:57 +0800)
* The top action now works on top level categories and has
  a better title.
* Each category has its own resort actions now.

course/classes/management/helper.php
course/classes/management_renderer.php
course/management.php
course/tests/behat/behat_course.php
course/tests/behat/category_resort.feature
course/tests/behat/course_category_management_listing.feature
lang/en/moodle.php

index 8979c8c..ce02da9 100644 (file)
@@ -208,6 +208,20 @@ class helper {
             );
         }
 
+        // Resort.
+        if ($category->can_resort_subcategories() && $category->has_children()) {
+            $actions['resortbyname'] = array(
+                'url' => new \moodle_url($baseurl, array('action' => 'resortcategories', 'resort' => 'name')),
+                'icon' => new \pix_icon('t/sort', new \lang_string('sort')),
+                'string' => new \lang_string('resortsubcategoriesbyname', 'moodle')
+            );
+            $actions['resortbyidnumber'] = array(
+                'url' => new \moodle_url($baseurl, array('action' => 'resortcategories', 'resort' => 'idnumber')),
+                'icon' => new \pix_icon('t/sort', new \lang_string('sort')),
+                'string' => new \lang_string('resortsubcategoriesbyidnumber', 'moodle')
+            );
+        }
+
         // Delete.
         if ($category->can_delete_full()) {
             $actions['delete'] = array(
index 943727a..815d4ed 100644 (file)
@@ -264,7 +264,7 @@ class core_course_management_renderer extends plugin_renderer_base {
         }
 
         $hasitems = false;
-        if ($createtoplevel || $createsubcategory) {
+        if ($createtoplevel) {
             $hasitems = true;
             $menu = new action_menu;
             if ($createtoplevel) {
@@ -294,29 +294,28 @@ class core_course_management_renderer extends plugin_renderer_base {
         if (coursecat::can_approve_course_requests()) {
             $actions[] = html_writer::link(new moodle_url('/course/pending.php'), get_string('coursespending'));
         }
-        if ($category->can_resort_subcategories()) {
+        if (coursecat::get(0)->can_resort_subcategories()) {
             $hasitems = true;
-            $params = $this->page->url->params();
+            $params = array();
             $params['action'] = 'resortcategories';
             $params['sesskey'] = sesskey();
+            if ($this->page->url->get_param('categoryid') !== null) {
+                $params['selectedcategoryid'] = $this->page->url->get_param('categoryid');
+            }
             $baseurl = new moodle_url('/course/management.php', $params);
             $menu = new action_menu(array(
                 new action_menu_link_secondary(
                     new moodle_url($baseurl, array('resort' => 'name')),
                     null,
-                    get_string('resortbyname')
+                    get_string('resortcategoriesbyname')
                 ),
                 new action_menu_link_secondary(
                     new moodle_url($baseurl, array('resort' => 'idnumber')),
                     null,
-                    get_string('resortbyidnumber')
+                    get_string('resortcategoriesbyidnumber')
                 )
             ));
-            if ($category->id === 0) {
-                $menu->actiontext = get_string('resortcategories');
-            } else {
-                $menu->actiontext = get_string('resortsubcategories');
-            }
+            $menu->actiontext = get_string('resortcategories');
             $menu->actionicon = new pix_icon('t/contextmenu', ' ', 'moodle', array('class' => 'iconsmall', 'title' => ''));
             $actions[] = $this->render($menu);
         }
index b787853..3eed802 100644 (file)
@@ -27,6 +27,7 @@ require_once($CFG->dirroot.'/lib/coursecatlib.php');
 require_once($CFG->dirroot.'/course/lib.php');
 
 $categoryid = optional_param('categoryid', null, PARAM_INT);
+$selectedcategoryid = optional_param('selectedcategoryid', null, PARAM_INT);
 $courseid = optional_param('courseid', null, PARAM_INT);
 $action = optional_param('action', false, PARAM_ALPHA);
 $page = optional_param('page', 0, PARAM_INT);
@@ -79,6 +80,11 @@ if ($courseid) {
     navigation_node::override_active_url($url);
 }
 
+// Check if there is a selected category param, and if there is apply it.
+if ($course === null && $selectedcategoryid !== null && $selectedcategoryid !== $categoryid) {
+    $url->param('categoryid', $selectedcategoryid);
+}
+
 if ($page !== 0) {
     $url->param('page', $page);
 }
index 2a80d75..1aed5c6 100644 (file)
@@ -1261,15 +1261,13 @@ class behat_course extends behat_base {
             throw new ExpectationException("Could not find the actions for $listingtype", $this->getSession());
         }
         $actionnode = $actionsnode->find('css', '.action-'.$action);
-        if ($this->running_javascript() && !$actionnode->isVisible()) {
-            $actionsnode->find('css', 'a.toggle-display')->click();
-            if ($actionnode) {
-                $actionnode = $listingnode->find('css', '.action-'.$action);
-            }
-        }
         if (!$actionnode) {
             throw new ExpectationException("Expected action was not available or not found ($action)", $this->getSession());
         }
+        if ($this->running_javascript() && !$actionnode->isVisible()) {
+            $actionsnode->find('css', 'a.toggle-display')->click();
+            $actionnode = $actionsnode->find('css', '.action-'.$action);
+        }
         $actionnode->click();
     }
 }
index 147617f..ef6b7f8 100644 (file)
@@ -16,8 +16,8 @@ Feature: Test we can resort categories in the management interface.
     And I go to the courses management page
     And I should see the "Course categories" management page
     And I should see "Re-sort categories" in the ".category-listing-actions" "css_element"
-    And I should see "By name" in the ".category-listing-actions" "css_element"
-    And I should see "By idnumber" in the ".category-listing-actions" "css_element"
+    And I should see "Re-sort the top level categories by name" in the ".category-listing-actions" "css_element"
+    And I should see "Re-sort the top level categories by idnumber" in the ".category-listing-actions" "css_element"
     And I click on <sortby> "link" in the ".category-listing-actions" "css_element"
     # Redirect.
     And I should see the "Course categories" management page
@@ -27,8 +27,8 @@ Feature: Test we can resort categories in the management interface.
   Examples:
     | sortby | cat1 | cat2 | cat3 |
     | "Re-sort categories" | "Social studies"          | "Applied sciences"        | "Extended social studies" |
-    | "By name"            | "Applied sciences"        | "Extended social studies" | "Social studies" |
-    | "By idnumber"        | "Extended social studies" | "Social studies" | "Applied sciences" |
+    | "Re-sort the top level categories by name"       | "Applied sciences"        | "Extended social studies" | "Social studies" |
+    | "Re-sort the top level categories by idnumber"   | "Extended social studies" | "Social studies" | "Applied sciences" |
 
   @javascript
   Scenario Outline: Test resorting categories with JS enabled.
@@ -45,8 +45,8 @@ Feature: Test we can resort categories in the management interface.
     And I should not see "By name" in the ".category-listing-actions" "css_element"
     And I should not see "By idnumber" in the ".category-listing-actions" "css_element"
     And I click on "Re-sort categories" "link"
-    And I should see "By name" in the ".category-listing-actions" "css_element"
-    And I should see "By idnumber" in the ".category-listing-actions" "css_element"
+    And I should see "Re-sort the top level categories by name" in the ".category-listing-actions" "css_element"
+    And I should see "Re-sort the top level categories by idnumber" in the ".category-listing-actions" "css_element"
     And I click on <sortby> "link" in the ".category-listing-actions" "css_element"
     # Redirect.
     And I should see the "Course categories" management page
@@ -56,8 +56,8 @@ Feature: Test we can resort categories in the management interface.
   Examples:
     | sortby | cat1 | cat2 | cat3 |
     | "Re-sort categories" | "Social studies"          | "Applied sciences"        | "Extended social studies" |
-    | "By name"            | "Applied sciences"        | "Extended social studies" | "Social studies" |
-    | "By idnumber"        | "Extended social studies" | "Social studies" | "Applied sciences" |
+    | "Re-sort the top level categories by name"       | "Applied sciences"        | "Extended social studies" | "Social studies" |
+    | "Re-sort the top level categories by idnumber"   | "Extended social studies" | "Social studies" | "Applied sciences" |
 
   Scenario Outline: Test resorting subcategories.
     Given the following "categories" exists:
@@ -73,10 +73,7 @@ Feature: Test we can resort categories in the management interface.
     And I click on "Master cat" "link"
     # Redirect.
     And I should see the "Course categories and courses" management page
-    And I should see "Re-sort subcategories" in the ".category-listing-actions" "css_element"
-    And I should see "By name" in the ".category-listing-actions" "css_element"
-    And I should see "By idnumber" in the ".category-listing-actions" "css_element"
-    And I click on <sortby> "link" in the ".category-listing-actions" "css_element"
+    And I click on <sortby> action for "Master cat" in management category listing
     # Redirect.
     And I should see the "Course categories and courses" management page
     And I should see category listing <cat1> before <cat2>
@@ -84,9 +81,8 @@ Feature: Test we can resort categories in the management interface.
 
   Examples:
     | sortby | cat1 | cat2 | cat3 |
-    | "Re-sort subcategories" | "Social studies"          | "Applied sciences"        | "Extended social studies" |
-    | "By name"            | "Applied sciences"        | "Extended social studies" | "Social studies" |
-    | "By idnumber"        | "Extended social studies" | "Social studies" | "Applied sciences" |
+    | "resortbyname"            | "Applied sciences"        | "Extended social studies" | "Social studies" |
+    | "resortbyidnumber"        | "Extended social studies" | "Social studies" | "Applied sciences" |
 
   @javascript
   Scenario Outline: Test resorting subcategories with JS enabled.
@@ -103,13 +99,7 @@ Feature: Test we can resort categories in the management interface.
     And I click on "Master cat" "link"
   # Redirect.
     And I should see the "Course categories and courses" management page
-    And I should see "Re-sort subcategories" in the ".category-listing-actions" "css_element"
-    And I should not see "By name" in the ".category-listing-actions" "css_element"
-    And I should not see "By idnumber" in the ".category-listing-actions" "css_element"
-    And I click on "Re-sort subcategories" "link"
-    And I should see "By name" in the ".category-listing-actions" "css_element"
-    And I should see "By idnumber" in the ".category-listing-actions" "css_element"
-    And I click on <sortby> "link" in the ".category-listing-actions" "css_element"
+    And I click on <sortby> action for "Master cat" in management category listing
   # Redirect.
     And I should see the "Course categories and courses" management page
     And I should see category listing <cat1> before <cat2>
@@ -117,9 +107,8 @@ Feature: Test we can resort categories in the management interface.
 
   Examples:
     | sortby | cat1 | cat2 | cat3 |
-    | "Re-sort subcategories" | "Social studies"          | "Applied sciences"        | "Extended social studies" |
-    | "By name"            | "Applied sciences"        | "Extended social studies" | "Social studies" |
-    | "By idnumber"        | "Extended social studies" | "Social studies" | "Applied sciences" |
+    | "resortbyname"            | "Applied sciences"        | "Extended social studies" | "Social studies" |
+    | "resortbyidnumber"        | "Extended social studies" | "Social studies" | "Applied sciences" |
 
   # The scenario below this is the same but with JS enabled.
   Scenario: Test moving categories up and down by one.
index e9edfda..6dc9774 100644 (file)
@@ -246,8 +246,8 @@ Feature: Course category management interface performs as expected
     And I go to the courses management page
     And I should see the "Course categories" management page
     And I click on "Re-sort categories" "link"
-    And I should see "By name" in the ".category-listing-actions" "css_element"
-    And I should see "By idnumber" in the ".category-listing-actions" "css_element"
+    And I should see "Re-sort the top level categories by name" in the ".category-listing-actions" "css_element"
+    And I should see "Re-sort the top level categories by idnumber" in the ".category-listing-actions" "css_element"
     And I click on <sortby> "link" in the ".category-listing-actions" "css_element"
     # Redirect.
     And I should see the "Course categories" management page
@@ -257,8 +257,8 @@ Feature: Course category management interface performs as expected
   Examples:
     | sortby | cat1 | cat2 | cat3 |
     | "Re-sort categories" | "Social studies"          | "Applied sciences"        | "Extended social studies" |
-    | "By name"            | "Applied sciences"        | "Extended social studies" | "Social studies" |
-    | "By idnumber"        | "Extended social studies" | "Social studies" | "Applied sciences" |
+    | "Re-sort the top level categories by name"       | "Applied sciences"        | "Extended social studies" | "Social studies" |
+    | "Re-sort the top level categories by idnumber"   | "Extended social studies" | "Social studies" | "Applied sciences" |
 
   @javascript
   Scenario Outline: Sub categories are displayed correctly when resorted
@@ -275,10 +275,7 @@ Feature: Course category management interface performs as expected
     And I click on "Master cat" "link"
     # Redirect.
     And I should see the "Course categories and courses" management page
-    And I click on "Re-sort subcategories" "link"
-    And I should see "By name" in the ".category-listing-actions" "css_element"
-    And I should see "By idnumber" in the ".category-listing-actions" "css_element"
-    And I click on <sortby> "link" in the ".category-listing-actions" "css_element"
+    And I click on <sortby> action for "Master cat" in management category listing
     # Redirect.
     And I should see the "Course categories and courses" management page
     And I should see category listing <cat1> before <cat2>
@@ -286,9 +283,8 @@ Feature: Course category management interface performs as expected
 
   Examples:
     | sortby | cat1 | cat2 | cat3 |
-    | "Re-sort subcategories" | "Social studies"          | "Applied sciences"        | "Extended social studies" |
-    | "By name"            | "Applied sciences"        | "Extended social studies" | "Social studies" |
-    | "By idnumber"        | "Extended social studies" | "Social studies" | "Applied sciences" |
+    | "resortbyname"            | "Applied sciences"        | "Extended social studies" | "Social studies" |
+    | "resortbyidnumber"        | "Extended social studies" | "Social studies" | "Applied sciences" |
 
   @javascript
   Scenario Outline: Test courses are displayed correctly after being resorted.
@@ -745,8 +741,7 @@ Feature: Course category management interface performs as expected
     And I should see "Cat 2-1-2" in the "#course-category-listings ul.ml" "css_element"
     And I should not see "Cat 2-1-1-1" in the "#course-category-listings ul.ml" "css_element"
     And I should see "Cat 2-1-2-1" in the "#course-category-listings ul.ml" "css_element"
-    And I click on "Re-sort subcategories" "link" in the ".category-listing-actions" "css_element"
-    And I click on "By idnumber" "link" in the ".category-listing-actions" "css_element"
+    And I click on "resortbyidnumber" action for "Cat 1" in management category listing
     # Redirect.
     And I should see the "Course categories and courses" management page
     And I should see "Cat 1" in the "#course-category-listings ul.ml" "css_element"
@@ -798,4 +793,4 @@ Feature: Course category management interface performs as expected
     # Redirect.
     And I should see the "Course categories and courses" management page
     And I should see "Cat A (1)" in the "#course-category-listings ul.ml" "css_element"
-    And I should not see "Cat B (2)" in the "#course-category-listings ul.ml" "css_element"
\ No newline at end of file
+    And I should not see "Cat B (2)" in the "#course-category-listings ul.ml" "css_element"
index 684ffbd..522bad1 100644 (file)
@@ -1470,7 +1470,10 @@ $string['resetstatus'] = 'Status';
 $string['resettask'] = 'Task';
 $string['resettodefaults'] = 'Reset to defaults';
 $string['resortcategories'] = 'Re-sort categories';
-$string['resortsubcategories'] = 'Re-sort subcategories';
+$string['resortcategoriesbyname'] = 'Re-sort the top level categories by name';
+$string['resortcategoriesbyidnumber'] = 'Re-sort the top level categories by idnumber';
+$string['resortsubcategoriesbyname'] = 'Re-sort subcategories by name';
+$string['resortsubcategoriesbyidnumber'] = 'Re-sort subcategories by idnumber';
 $string['resortcourses'] = 'Re-sort courses';
 $string['resortcoursesbyname'] = 'Re-sort courses by name';
 $string['resortbyname'] = 'By name';
@@ -1664,6 +1667,7 @@ $string['skypeid'] = 'Skype ID';
 $string['socialheadline'] = 'Social forum - latest topics';
 $string['someallowguest'] = 'Some courses may allow guest access';
 $string['someerrorswerefound'] = 'Some information was missing or incorrect. Look below for details.';
+$string['sort'] = 'Sort';
 $string['sortby'] = 'Sort by';
 $string['sortbyx'] = 'Sort by {$a} ascending';
 $string['sortbyxreverse'] = 'Sort by {$a} descending';