diff --git a/blocks/myoverview/amd/build/tab_preferences.min.js b/blocks/myoverview/amd/build/tab_preferences.min.js new file mode 100644 index 00000000000..7b3b97f4533 --- /dev/null +++ b/blocks/myoverview/amd/build/tab_preferences.min.js @@ -0,0 +1 @@ +define(["jquery","core/ajax","core/custom_interaction_events"],function(a,b,c){var d=function(d){c.define(d,[c.events.activate]),d.on(c.events.activate,"[data-toggle='tab']",function(c){var d={methodname:"core_user_update_user_preferences",args:{preferences:[{type:"block_myoverview_last_tab",value:a(c.currentTarget).data("tabname")}]}};b.call([d])[0].fail(Notification.exception)})};return{registerEventListeners:d}}); \ No newline at end of file diff --git a/blocks/myoverview/amd/src/tab_preferences.js b/blocks/myoverview/amd/src/tab_preferences.js new file mode 100644 index 00000000000..690e31ad39a --- /dev/null +++ b/blocks/myoverview/amd/src/tab_preferences.js @@ -0,0 +1,54 @@ +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * Javascript used to save the user's tab preference. + * + * @package block_myoverview + * @copyright 2017 Mark Nelson + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +define(['jquery', 'core/ajax', 'core/custom_interaction_events'], function($, Ajax, CustomEvents) { + + /** + * Registers an event that saves the user's tab preference when switching between them. + * + * @param {object} root The container element + */ + var registerEventListeners = function(root) { + CustomEvents.define(root, [CustomEvents.events.activate]); + root.on(CustomEvents.events.activate, "[data-toggle='tab']", function(e) { + var request = { + methodname: 'core_user_update_user_preferences', + args: { + preferences: [ + { + type: 'block_myoverview_last_tab', + value: $(e.currentTarget).data('tabname') + } + ] + } + }; + + Ajax.call([request])[0] + .fail(Notification.exception); + }); + }; + + return { + registerEventListeners: registerEventListeners + }; +}); diff --git a/blocks/myoverview/block_myoverview.php b/blocks/myoverview/block_myoverview.php index f3885a1a81b..c18ccf5a436 100644 --- a/blocks/myoverview/block_myoverview.php +++ b/blocks/myoverview/block_myoverview.php @@ -24,16 +24,6 @@ defined('MOODLE_INTERNAL') || die(); -/** - * The timeline view. - */ -define('BLOCK_MYOVERVIEW_TIMELINE_VIEW', 'timeline'); - -/** - * The courses view. - */ -define('BLOCK_MYOVERVIEW_COURSES_VIEW', 'courses'); - /** * My overview block class. * @@ -60,9 +50,13 @@ class block_myoverview extends block_base { return $this->content; } - $config = get_config('block_myoverview'); + // Wasn't set as a user preference so get the site setting. + if (!$tab = get_user_preferences('block_myoverview_last_tab')) { + $config = get_config('block_myoverview'); + $tab = $config->defaulttab; + } - $renderable = new \block_myoverview\output\main($config->defaulttab); + $renderable = new \block_myoverview\output\main($tab); $renderer = $this->page->get_renderer('block_myoverview'); $this->content = new stdClass(); diff --git a/blocks/myoverview/classes/output/main.php b/blocks/myoverview/classes/output/main.php index bf3268e814f..2435f54c4f7 100644 --- a/blocks/myoverview/classes/output/main.php +++ b/blocks/myoverview/classes/output/main.php @@ -29,6 +29,7 @@ use renderer_base; use templatable; use core_completion\progress; +require_once($CFG->dirroot . '/blocks/myoverview/lib.php'); require_once($CFG->libdir . '/completionlib.php'); /** diff --git a/blocks/myoverview/lib.php b/blocks/myoverview/lib.php new file mode 100644 index 00000000000..a73db2566ac --- /dev/null +++ b/blocks/myoverview/lib.php @@ -0,0 +1,52 @@ +. + +/** + * Contains functions called by core. + * + * @package block_myoverview + * @copyright 2017 Mark Nelson + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +/** + * The timeline view. + */ +define('BLOCK_MYOVERVIEW_TIMELINE_VIEW', 'timeline'); + +/** + * The courses view. + */ +define('BLOCK_MYOVERVIEW_COURSES_VIEW', 'courses'); + +/** + * Returns the name of the user preferences as well as the details this plugin uses. + * + * @return array + */ +function block_myoverview_user_preferences() { + $preferences = array(); + $preferences['block_myoverview_last_tab'] = array( + 'type' => PARAM_ALPHA, + 'null' => NULL_NOT_ALLOWED, + 'default' => BLOCK_MYOVERVIEW_TIMELINE_VIEW, + 'choices' => array(BLOCK_MYOVERVIEW_TIMELINE_VIEW, BLOCK_MYOVERVIEW_COURSES_VIEW) + ); + + return $preferences; +} diff --git a/blocks/myoverview/settings.php b/blocks/myoverview/settings.php index f545d17328c..10f084d6a1f 100644 --- a/blocks/myoverview/settings.php +++ b/blocks/myoverview/settings.php @@ -24,6 +24,8 @@ defined('MOODLE_INTERNAL') || die; +require_once($CFG->dirroot . '/blocks/myoverview/lib.php'); + if ($ADMIN->fulltree) { $options = [ diff --git a/blocks/myoverview/templates/main.mustache b/blocks/myoverview/templates/main.mustache index 74bae299fa4..e9b21bd69ae 100644 --- a/blocks/myoverview/templates/main.mustache +++ b/blocks/myoverview/templates/main.mustache @@ -24,14 +24,14 @@ }} +{{#js}} +require(['jquery', 'block_myoverview/tab_preferences'], function($, TabPreferences) { + var root = $('#block-myoverview-view-choices-{{uniqid}}'); + TabPreferences.registerEventListeners(root); +}); +{{/js}} diff --git a/blocks/myoverview/tests/behat/block_myoverview_progress.feature b/blocks/myoverview/tests/behat/block_myoverview_progress.feature index 8bd3afe7f3e..e8d86921d4a 100644 --- a/blocks/myoverview/tests/behat/block_myoverview_progress.feature +++ b/blocks/myoverview/tests/behat/block_myoverview_progress.feature @@ -53,6 +53,7 @@ Feature: Course overview block show users their progress on courses And I am on "Course 1" course homepage And I follow "Test choice 1" And I follow "Dashboard" in the user menu + And I click on "Timeline" "link" in the "Course overview" "block" And I click on "Sort by courses" "link" in the "Course overview" "block" And I should see "100%" in the "Course overview" "block" And I click on "Courses" "link" in the "Course overview" "block" diff --git a/blocks/myoverview/version.php b/blocks/myoverview/version.php index 0452a78c820..a637f485322 100644 --- a/blocks/myoverview/version.php +++ b/blocks/myoverview/version.php @@ -24,6 +24,6 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017051501; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2017051502; // The current plugin version (Date: YYYYMMDDXX). $plugin->requires = 2017050500; // Requires this Moodle version. $plugin->component = 'block_myoverview'; // Full name of the plugin (used for diagnostics).