You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

226 lines
9.4 KiB

{{!
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 <http://www.gnu.org/licenses/>.
}}
{{!
@template tool_analytics/restorable_models
Displays the list of missing prediction models that can be restored.
Classes required for JS:
* The list should be wrapped within a id="restorablemodelslist" element.
Data attributes required for JS:
* [data-widget="toggle"] indicates the clickable element for expanding/collapsing
the list of indicators used by the given model.
* [data-select] indicates a clickable element used for selecting multiple checkboxes.
* [data-component] should be set for checkboxes that select the particular model.
Context variables required for this template:
* hasdata: boolean - do we have data to display
* submiturl: string - URL where the form should be submitted
* backurl: string - URL where the user should be sent without making any changes
* sesskey: string
* components: array - list of components to display
- name: string - human readable name of the component
- component: string - frankenstyle name of the component
- models: array - list of restorable models provided by the component
+ defid: string - model definition identifier
+ targetname: string - human readable name of the target
+ targetclass: string - fully qualified classname of the target
+ indicatorsnum: int - number of indicators
+ indicators: array - list of indicators
~ name: string - human readable name of the indicator
~ classname: string - fully qualified classname of the indicator
Example context (json):
{
"hasdata": true,
"submiturl": "https://example.com/moodle/admin/tool/analytics/restoredefault.php",
"backurl": "https://example.com/moodle/admin/tool/analytics/index.php",
"sesskey": "abcdefg123456",
"components": [
{
"name": "Core",
"component": "core",
"models": [
{
"defid": "id24680aceg",
"targetname": "No teaching",
"targetclass": "\\core\\analytics\\target\\no_teaching",
"indicatorsnum": 2,
"indicators": [
{
"name": "There are no teachers",
"classname": "\\core\\analytics\\indicator\\no_teacher"
},
{
"name": "There are no students",
"classname": "\\core\\analytics\\indicator\\no_students"
}
]
},
{
"defid": "id13579bdfi",
"targetname": "Students at risk of dropping out",
"targetclass": "\\core\\analytics\\target\\course_dropout",
"indicatorsnum": 1,
"indicators": [
{
"name": "Read actions amount",
"classname": "\\core\\analytics\\indicator\\read_actions"
}
]
}
]
},
{
"name": "Custom analytics plugin",
"component": "tool_customanalytics",
"models": [
{
"defid": "id566dsgffg655",
"targetname": "Cheater",
"targetclass": "\\tool_customanalytics\\analytics\\target\\cheater",
"indicatorsnum": 1,
"indicators": [
{
"name": "Copy-pasted submissions",
"classname": "\\tool_customanalytics\\analytics\\indicator\\copy_paster_submissions"
}
]
}
]
}
]
}
}}
<div class="box">
{{^hasdata}}
<p>{{#str}} restoredefaultnone, tool_analytics {{/str}}</p>
<div><a href="{{backurl}}" class="btn btn-secondary">{{#str}} back {{/str}}</a></div>
{{/hasdata}}
{{#hasdata}}
<p>{{#str}} restoredefaultinfo, tool_analytics {{/str}}</p>
<form method="post" action="{{submiturl}}">
<table id="restorablemodelslist" class="generaltable fullwidth">
<colgroup>
<col width="10%">
<col width="45%">
<col width="45%">
</colgroup>
<thead>
<tr>
<th scope="col"><a href="" data-select="*">{{#str}} selectall {{/str}}</a></th>
<th scope="col">{{#str}} target, tool_analytics {{/str}}</th>
<th scope="col">{{#str}} indicators, tool_analytics {{/str}}</th>
</tr>
</thead>
<tbody>
{{#components}}
<tr>
<th scope="rowgroup" colspan="3">
<span class="component-name">
<a href=""
title="{{#str}} componentselect, tool_analytics, {{name}} {{/str}}"
data-select="{{component}}">
{{name}}
</a>
</span>
<div><small class="component-frankenstyle">{{component}}</small></div>
</th>
</tr>
{{#models}}
<tr>
<td>
<input data-component="{{component}}" type="checkbox" name="restoreid[]" value="{{defid}}">
</td>
<td>
<span class="target-name">{{targetname}}</span>
{{#targethelp}}
{{>core/help_icon}}
{{/targethelp}}
<div><small class="target-class">{{targetclass}}</small></div>
</td>
<td>
<a data-widget="toggle"
title="{{#str}} clicktohideshow {{/str}}"
aria-expanded="false"
aria-controls="indicators-{{defid}}"
role="button"
href="">
{{#str}} indicatorsnum, tool_analytics, {{indicatorsnum}} {{/str}}
</a>
<ul class="hidden listunstyled" id="indicators-{{defid}}">
{{#indicators}}
<li>
{{name}}
{{#indicatorhelp}}
{{>core/help_icon}}
{{/indicatorhelp}}
<div><small>{{classname}}</small></div>
</li>
{{/indicators}}
</ul>
</td>
</tr>
{{/models}}
{{/components}}
</tbody>
</table>
<div>
<input class="btn btn-primary" type="submit" value="{{#str}} restoredefaultsubmit, tool_analytics {{/str}}">
<input class="btn btn-secondary" type="reset" value="{{#str}} componentselectnone, tool_analytics {{/str}}">
<a href="{{backurl}}" class="btn btn-secondary">{{#str}} back {{/str}}</a>
<input type="hidden" name="sesskey" value="{{sesskey}}">
</div>
</form>
{{/hasdata}}
</div>
{{#js}}
require(['jquery'], function($) {
// Toggle the visibility of the indicators list.
$('#restorablemodelslist').on('click', '[data-widget="toggle"]', function(e) {
e.preventDefault();
var toggle = $(e.currentTarget);
var listid = toggle.attr('aria-controls');
$(document.getElementById(listid)).toggle();
if (toggle.attr('aria-expanded') == 'false') {
toggle.attr('aria-expanded', 'true');
} else {
toggle.attr('aria-expanded', 'false');
}
});
// Selecting all / all in component checkboxes.
$('#restorablemodelslist').on('click', '[data-select]', function(e) {
e.preventDefault();
var handler = $(e.currentTarget);
var component = handler.attr('data-select');
if (component == '*') {
$('input[data-component]').prop('checked', true);
} else {
$('input[data-component="' + component + '"]').prop('checked', true);
}
});
});
{{/js}}