Skip to content

Commit

Permalink
MDL-66016 block_myoverview: Make course filter options configurable
Browse files Browse the repository at this point in the history
  • Loading branch information
abias committed Aug 23, 2019
1 parent cd4abbc commit 2276614
Show file tree
Hide file tree
Showing 9 changed files with 459 additions and 9 deletions.
127 changes: 125 additions & 2 deletions blocks/myoverview/classes/output/main.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,55 @@ class main implements renderable, templatable {
*/
private $layouts;

/**
* Store a course grouping option setting
*
* @var boolean
*/
private $displaygroupingallincludinghidden;

/**
* Store a course grouping option setting.
*
* @var boolean
*/
private $displaygroupingall;

/**
* Store a course grouping option setting.
*
* @var boolean
*/
private $displaygroupinginprogress;

/**
* Store a course grouping option setting.
*
* @var boolean
*/
private $displaygroupingfuture;

/**
* Store a course grouping option setting.
*
* @var boolean
*/
private $displaygroupingpast;

/**
* Store a course grouping option setting.
*
* @var boolean
*/
private $displaygroupingstarred;

/**
* Store a course grouping option setting.
*
* @var boolean
*/
private $displaygroupinghidden;

/**
* main constructor.
* Initialize the user preferences
Expand All @@ -92,23 +141,89 @@ class main implements renderable, templatable {
* @throws \dml_exception
*/
public function __construct($grouping, $sort, $view, $paging) {
$this->grouping = $grouping ? $grouping : BLOCK_MYOVERVIEW_GROUPING_ALL;
// Get plugin config.
$config = get_config('block_myoverview');

// Build the course grouping option name to check if the given grouping is enabled afterwards.
$groupingconfigname = 'displaygrouping'.$grouping;
// Check the given grouping and remember it if it is enabled.
if ($grouping && $config->$groupingconfigname == true) {
$this->grouping = $grouping;

// Otherwise fall back to another grouping in a reasonable order.
// This is done to prevent one-time UI glitches in the case when a user has chosen a grouping option previously which
// was then disabled by the admin in the meantime.
} else if ($config->displaygroupingall == true) {
$this->grouping = BLOCK_MYOVERVIEW_GROUPING_ALL;
} else if ($config->displaygroupingallincludinghidden == true) {
$this->grouping = BLOCK_MYOVERVIEW_GROUPING_ALLINCLUDINGHIDDEN;
} else if ($config->displaygroupinginprogress == true) {
$this->grouping = BLOCK_MYOVERVIEW_GROUPING_INPROGRESS;
} else if ($config->displaygroupingfuture == true) {
$this->grouping = BLOCK_MYOVERVIEW_GROUPING_FUTURE;
} else if ($config->displaygroupingpast == true) {
$this->grouping = BLOCK_MYOVERVIEW_GROUPING_PAST;
} else if ($config->displaygroupingstarred == true) {
$this->grouping = BLOCK_MYOVERVIEW_GROUPING_FAVOURITES;
} else if ($config->displaygroupinghidden == true) {
$this->grouping = BLOCK_MYOVERVIEW_GROUPING_HIDDEN;

// In this case, no grouping option is enabled and the grouping is not needed at all.
// But it's better not to leave $this->grouping unset for any unexpected case.
} else {
$this->grouping = BLOCK_MYOVERVIEW_GROUPING_ALLINCLUDINGHIDDEN;
}
unset ($groupingconfigname);

// Check and remember the given sorting.
$this->sort = $sort ? $sort : BLOCK_MYOVERVIEW_SORTING_TITLE;

// Check and remember the given view.
$this->view = $view ? $view : BLOCK_MYOVERVIEW_VIEW_CARD;

// Check and remember the given page size.
if ($paging == BLOCK_MYOVERVIEW_PAGING_ALL) {
$this->paging = BLOCK_MYOVERVIEW_PAGING_ALL;
} else {
$this->paging = $paging ? $paging : BLOCK_MYOVERVIEW_PAGING_12;
}

$config = get_config('block_myoverview');
// Check and remember if the course categories should be shown or not.
if (!$config->displaycategories) {
$this->displaycategories = BLOCK_MYOVERVIEW_DISPLAY_CATEGORIES_OFF;
} else {
$this->displaycategories = BLOCK_MYOVERVIEW_DISPLAY_CATEGORIES_ON;
}

// Get and remember the available layouts.
$this->set_available_layouts();
$this->view = $view ? $view : reset($this->layouts);

// Check and remember if the particular grouping options should be shown or not.
$this->displaygroupingallincludinghidden = $config->displaygroupingallincludinghidden;
$this->displaygroupingall = $config->displaygroupingall;
$this->displaygroupinginprogress = $config->displaygroupinginprogress;
$this->displaygroupingfuture = $config->displaygroupingfuture;
$this->displaygroupingpast = $config->displaygroupingpast;
$this->displaygroupingstarred = $config->displaygroupingstarred;
$this->displaygroupinghidden = $config->displaygroupinghidden;

// Check and remember if the grouping selector should be shown at all or not.
// It will be shown if more than 1 grouping option is enabled.
$displaygroupingselectors = array($this->displaygroupingallincludinghidden,
$this->displaygroupingall,
$this->displaygroupinginprogress,
$this->displaygroupingfuture,
$this->displaygroupingpast,
$this->displaygroupingstarred,
$this->displaygroupinghidden);
$displaygroupingselectorscount = count(array_filter($displaygroupingselectors));
if ($displaygroupingselectorscount > 1) {
$this->displaygroupingselector = true;
} else {
$this->displaygroupingselector = false;
}
unset ($displaygroupingselectors, $displaygroupingselectorscount);
}


Expand Down Expand Up @@ -204,6 +319,14 @@ public function export_for_template(renderer_base $output) {
'layouts' => $availablelayouts,
'displaycategories' => $this->displaycategories,
'displaydropdown' => (count($availablelayouts) > 1) ? true : false,
'displaygroupingallincludinghidden' => $this->displaygroupingallincludinghidden,
'displaygroupingall' => $this->displaygroupingall,
'displaygroupinginprogress' => $this->displaygroupinginprogress,
'displaygroupingfuture' => $this->displaygroupingfuture,
'displaygroupingpast' => $this->displaygroupingpast,
'displaygroupingstarred' => $this->displaygroupingstarred,
'displaygroupinghidden' => $this->displaygroupinghidden,
'displaygroupingselector' => $this->displaygroupingselector,
];
return array_merge($defaultvariables, $preferences);

Expand Down
2 changes: 2 additions & 0 deletions blocks/myoverview/lang/en/block_myoverview.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@
$string['aria:removefromfavourites'] = 'Remove star for';
$string['aria:summary'] = 'Switch to summary view';
$string['aria:sortingdropdown'] = 'Sorting drop-down menu';
$string['availablegroupings'] = 'Available filters';
$string['availablegroupings_desc'] = 'Course filters which are available for selection by users. If none are selected, all courses will be displayed.';
$string['card'] = 'Card';
$string['cards'] = 'Cards';
$string['courseprogress'] = 'Course progress:';
Expand Down
46 changes: 46 additions & 0 deletions blocks/myoverview/settings.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,50 @@
$choices,
$choices));

// Enable / Disable course filter items.
$settings->add(new admin_setting_heading('block_myoverview/availablegroupings',
get_string('availablegroupings', 'block_myoverview'),
get_string('availablegroupings_desc', 'block_myoverview')));

$settings->add(new admin_setting_configcheckbox(
'block_myoverview/displaygroupingallincludinghidden',
get_string('allincludinghidden', 'block_myoverview'),
'',
0));

$settings->add(new admin_setting_configcheckbox(
'block_myoverview/displaygroupingall',
get_string('all', 'block_myoverview'),
'',
1));

$settings->add(new admin_setting_configcheckbox(
'block_myoverview/displaygroupinginprogress',
get_string('inprogress', 'block_myoverview'),
'',
1));

$settings->add(new admin_setting_configcheckbox(
'block_myoverview/displaygroupingpast',
get_string('past', 'block_myoverview'),
'',
1));

$settings->add(new admin_setting_configcheckbox(
'block_myoverview/displaygroupingfuture',
get_string('future', 'block_myoverview'),
'',
1));

$settings->add(new admin_setting_configcheckbox(
'block_myoverview/displaygroupingstarred',
get_string('favourites', 'block_myoverview'),
'',
1));

$settings->add(new admin_setting_configcheckbox(
'block_myoverview/displaygroupinghidden',
get_string('hiddencourses', 'block_myoverview'),
'',
1));
}
5 changes: 5 additions & 0 deletions blocks/myoverview/styles.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
/* Hide the first dropdown-divider if no filter option element is listed before it.
This can happen for some subset configurations of the block_myoverview course filter. */
.block_myoverview button#groupingdropdown + .dropdown-menu li:first-of-type.dropdown-divider:first-of-type {
display: none;
}
45 changes: 42 additions & 3 deletions blocks/myoverview/templates/nav-grouping-selector.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,18 @@
"future": false,
"past": false,
"favourites": false,
"hidden": false
"hidden": false,
"displaygroupingallincludinghidden": false,
"displaygroupingall": true,
"displaygroupinginprogress": true,
"displaygroupingfuture": true,
"displaygroupingpast": true,
"displaygroupingstarred": true,
"displaygroupinghidden": true,
"displaygroupingselector": true
}
}}
{{#displaygroupingselector}}
<div class="dropdown mb-1 mr-auto">
<button id="groupingdropdown" type="button" class="btn btn-outline-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="{{#str}} aria:groupingdropdown, block_myoverview {{/str}}">
{{#pix}} i/filter {{/pix}}
Expand All @@ -45,11 +53,14 @@
</span>
</button>
<ul class="dropdown-menu" data-show-active-item data-active-item-text aria-labelledby="groupingdropdown">
{{#displaygroupingallincludinghidden}}
<li>
<a class="dropdown-item {{#allincludinghidden}}active{{/allincludinghidden}}" href="#" data-filter="grouping" data-value="allincludinghidden" data-pref="allincludinghidden" aria-label="{{#str}} aria:allcoursesincludinghidden, block_myoverview {{/str}}" aria-controls="courses-view-{{uniqid}}">
{{#str}} allincludinghidden, block_myoverview {{/str}}
</a>
</li>
{{/displaygroupingallincludinghidden}}
{{#displaygroupingall}}
<li class="dropdown-divider" role="presentation">
<span class="filler">&nbsp;</span>
</li>
Expand All @@ -58,6 +69,8 @@
{{#str}} all, block_myoverview {{/str}}
</a>
</li>
{{/displaygroupingall}}
{{#displaygroupinginprogress}}
<li class="dropdown-divider" role="presentation">
<span class="filler">&nbsp;</span>
</li>
Expand All @@ -66,24 +79,43 @@
{{#str}} inprogress, block_myoverview {{/str}}
</a>
</li>
{{/displaygroupinginprogress}}
{{#displaygroupingfuture}}
{{^displaygroupinginprogress}}
<li class="dropdown-divider" role="presentation">
<span class="filler">&nbsp;</span>
</li>
{{/displaygroupinginprogress}}
<li>
<a class="dropdown-item {{#future}}active{{/future}}" href="#" data-filter="grouping" data-value="future" data-pref="future" aria-label="{{#str}} aria:future, block_myoverview {{/str}}" aria-controls="courses-view-{{uniqid}}">
{{#str}} future, block_myoverview {{/str}}
</a>
</li>
{{/displaygroupingfuture}}
{{#displaygroupingpast}}
{{^displaygroupinginprogress}}
{{^displaygroupingfuture}}
<li class="dropdown-divider" role="presentation">
<span class="filler">&nbsp;</span>
</li>
{{/displaygroupingfuture}}
{{/displaygroupinginprogress}}
<li>
<a class="dropdown-item {{#past}}active{{/past}}" href="#" data-filter="grouping" data-value="past" data-pref="past" aria-label="{{#str}} aria:past, block_myoverview {{/str}}" aria-controls="courses-view-{{uniqid}}">
{{#str}} past, block_myoverview {{/str}}
</a>
</li>
{{/displaygroupingpast}}
{{#displaygroupingstarred}}
<li class="dropdown-divider" role="presentation">
<span class="filler">&nbsp;</span>
</li>
<li>
<a class="dropdown-item {{#favourites}}active{{/favourites}}" href="#" data-filter="grouping" data-value="favourites" data-pref="favourites" aria-label="{{#str}} aria:favourites, block_myoverview {{/str}}" aria-controls="courses-view-{{uniqid}}">
{{#str}} favourites, block_myoverview {{/str}}
</a>
</li>
{{/displaygroupingstarred}}
{{#displaygroupinghidden}}
<li class="dropdown-divider" role="presentation">
<span class="filler">&nbsp;</span>
</li>
Expand All @@ -92,5 +124,12 @@
{{#str}} hiddencourses, block_myoverview {{/str}}
</a>
</li>
{{/displaygroupinghidden}}
</ul>
</div>
{{/displaygroupingselector}}
{{^displaygroupingselector}}
<div class="mb-1 mr-auto">
<span class="filler">&nbsp;</span>
</div>
{{/displaygroupingselector}}
Loading

0 comments on commit 2276614

Please sign in to comment.