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).