MDL-63058 block_myoverview: starring and storing preferences

This commit is contained in:
Bas Brands 2018-10-20 17:53:35 +02:00
parent b81722e22f
commit 3cfff88516
39 changed files with 1403 additions and 101 deletions

View file

@ -28,7 +28,7 @@ use renderable;
use renderer_base;
use templatable;
require_once($CFG->libdir . '/completionlib.php');
require_once($CFG->dirroot . '/blocks/myoverview/lib.php');
/**
* Class containing data for my overview block.
@ -37,18 +37,75 @@ require_once($CFG->libdir . '/completionlib.php');
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class main implements renderable, templatable {
/**
* Store the grouping preference
*
* @var string String matching the grouping constants defined in myoverview/lib.php
*/
private $grouping;
/**
* Store the sort preference
*
* @var string String matching the sort constants defined in myoverview/lib.php
*/
private $sort;
/**
* Store the view preference
*
* @var string String matching the view/display constants defined in myoverview/lib.php
*/
private $view;
/**
* main constructor.
* Initialize the user preferences
*
* @param string $grouping Grouping user preference
* @param string $sort Sort user preference
* @param string $view Display user preference
*/
public function __construct($grouping, $sort, $view) {
$this->grouping = $grouping ? $grouping : BLOCK_MYOVERVIEW_GROUPING_ALL;
$this->sort = $sort ? $sort : BLOCK_MYOVERVIEW_SORTING_TITLE;
$this->view = $view ? $view : BLOCK_MYOVERVIEW_VIEW_CARD;
}
/**
* Get the user preferences as an array to figure out what has been selected
*
* @return array $preferences Array with the pref as key and value set to true
*/
public function get_preferences_as_booleans() {
$preferences = [];
$preferences[$this->view] = true;
$preferences[$this->sort] = true;
$preferences[$this->grouping] = true;
return $preferences;
}
/**
* Export this data so it can be used as the context for a mustache template.
*
* @param \renderer_base $output
* @return stdClass
* @return array Context variables for the template
*/
public function export_for_template(renderer_base $output) {
$nocoursesurl = $output->image_url('courses', 'block_myoverview')->out();
return (object) [
'nocoursesimg' => $nocoursesurl
$defaultvariables = [
'nocoursesimg' => $nocoursesurl,
'grouping' => $this->grouping,
'sort' => $this->sort == BLOCK_MYOVERVIEW_SORTING_TITLE ? 'fullname' : 'ul.timeaccess desc',
'view' => $this->view
];
$preferences = $this->get_preferences_as_booleans();
return array_merge($defaultvariables, $preferences);
}
}
}

View file

@ -24,6 +24,9 @@
namespace block_myoverview\privacy;
use core_privacy\local\request\user_preference_provider;
use core_privacy\local\metadata\collection;
defined('MOODLE_INTERNAL') || die();
/**
@ -32,15 +35,48 @@ defined('MOODLE_INTERNAL') || die();
* @copyright 2018 Zig Tan <zig@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class provider implements \core_privacy\local\metadata\null_provider {
class provider implements \core_privacy\local\metadata\provider, user_preference_provider {
/**
* Get the language string identifier with the component's language
* file to explain why this plugin stores no data.
* Returns meta-data information about the myoverview block.
*
* @return string
* @param \core_privacy\local\metadata\collection $collection A collection of meta-data.
* @return \core_privacy\local\metadata\collection Return the collection of meta-data.
*/
public static function get_reason() : string {
return 'privacy:metadata';
public static function get_metadata(collection $collection) : collection {
$collection->add_user_preference('block_myoverview_user_sort_preference', 'privacy:metadata:overviewsortpreference');
$collection->add_user_preference('block_myoverview_user_view_preference', 'privacy:metadata:overviewviewpreference');
$collection->add_user_preference('block_myoverview_user_grouping_preference',
'privacy:metadata:overviewgroupingpreference');
return $collection;
}
}
/**
* Export all user preferences for the myoverview block
*
* @param int $userid The userid of the user whose data is to be exported.
*/
public static function export_user_preferences(int $userid) {
$preference = get_user_preferences('block_myoverview_user_sort_preference', null, $userid);
if (isset($preference)) {
\core_privacy\local\request\writer::export_user_preference('block_myoverview',
'block_myoverview_user_sort_preference', get_string($preference, 'block_myoverview'),
get_string('privacy:metadata:overviewsortpreference', 'block_myoverview'));
}
$preference = get_user_preferences('block_myoverview_user_view_preference', null, $userid);
if (isset($preference)) {
\core_privacy\local\request\writer::export_user_preference('block_myoverview',
'block_myoverview_user_view_preference',
get_string($preference, 'block_myoverview'),
get_string('privacy:metadata:overviewviewpreference', 'block_myoverview'));
}
$preference = get_user_preferences('block_myoverview_user_grouping_preference', null, $userid);
if (isset($preference)) {
\core_privacy\local\request\writer::export_user_preference('block_myoverview',
'block_myoverview_user_grouping_preference',
get_string($preference, 'block_myoverview'),
get_string('privacy:metadata:overviewgroupingpreference', 'block_myoverview'));
}
}
}