Skip to content

Commit 7fc77b1

Browse files
Make seriesmanagement work properly with or without capabilities to create or import series.
Remove defineseriesforcourse capability. Require manageseriesforcourse for manageseries.php and show import series / create new series buttons depending on capabilities. Give teachers manageseriesforcourse and createnewseries capabilities by default.
1 parent 02acb6c commit 7fc77b1

11 files changed

+36
-46
lines changed

amd/build/block_manage_series.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

amd/build/block_manage_series.min.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

amd/src/block_manage_series.js

+10-10
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ function submitFormAjax(e) {
9797
seriestable.addRow({'seriesname': s.seriestitle, 'series': s.series, 'isdefault': s.isdefault});
9898

9999
if (seriestable.getRows().length >= numseriesallowed) {
100-
$("#createseries").hide();
101-
$("#importseries").hide();
100+
$("#createseries")?.hide();
101+
$("#importseries")?.hide();
102102
}
103103
}
104104
},
@@ -325,10 +325,10 @@ export const init = (contextid, ocinstanceid, createseries, series, numseriesall
325325
cell.getRow().delete();
326326
const createseries = $("#createseries");
327327
const importseries = $("#importseries");
328-
createseries.show();
329-
createseries.removeClass('d-none');
330-
importseries.show();
331-
importseries.removeClass('d-none');
328+
createseries?.show();
329+
createseries?.removeClass('d-none');
330+
importseries?.show();
331+
importseries?.removeClass('d-none');
332332
}
333333
},
334334
fail: function(e) {
@@ -349,7 +349,7 @@ export const init = (contextid, ocinstanceid, createseries, series, numseriesall
349349

350350
// Create new series in modal
351351
// Button for connection a new series
352-
$('#createseries').click(function() {
352+
$('#createseries')?.click(function() {
353353
ModalFactory.create({
354354
type: ModalFactory.types.SAVE_CANCEL,
355355
title: jsstrings[4],
@@ -388,7 +388,7 @@ export const init = (contextid, ocinstanceid, createseries, series, numseriesall
388388
});
389389

390390
// Import new series in modal
391-
$('#importseries').click(function() {
391+
$('#importseries')?.click(function() {
392392
let context = {
393393
label: jsstrings[12],
394394
required: false,
@@ -431,8 +431,8 @@ export const init = (contextid, ocinstanceid, createseries, series, numseriesall
431431
seriestable.addRow({'seriesname': s.title, 'series': s.id, 'isdefault': s.isdefault});
432432

433433
if (seriestable.getRows().length >= numseriesallowed) {
434-
$("#createseries").hide();
435-
$("#importseries").hide();
434+
$("#createseries")?.hide();
435+
$("#importseries")?.hide();
436436
}
437437
}
438438
},

classes/external.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ public static function get_series_titles(int $contextid, int $ocinstanceid, stri
217217

218218
$context = context::instance_by_id($params['contextid']);
219219
self::validate_context($context);
220-
require_capability('block/opencast:defineseriesforcourse', $context);
220+
require_capability('block/opencast:manageseriesforcourse', $context);
221221

222222
$serialiseddata = json_decode($params['series']);
223223
$seriestitles = [];

db/access.php

+2-8
Original file line numberDiff line numberDiff line change
@@ -112,14 +112,6 @@
112112
'manager' => CAP_ALLOW,
113113
],
114114
],
115-
'block/opencast:defineseriesforcourse' => [
116-
'riskbitmask' => RISK_SPAM,
117-
'captype' => 'write',
118-
'contextlevel' => CONTEXT_COURSE,
119-
'archetypes' => [
120-
'manager' => CAP_ALLOW,
121-
],
122-
],
123115
'block/opencast:importseriesintocourse' => [
124116
'riskbitmask' => RISK_SPAM,
125117
'captype' => 'write',
@@ -160,6 +152,7 @@
160152
'contextlevel' => CONTEXT_COURSE,
161153
'archetypes' => [
162154
'manager' => CAP_ALLOW,
155+
'editingteacher' => CAP_ALLOW
163156
],
164157
],
165158
'block/opencast:manageseriesforcourse' => [
@@ -168,6 +161,7 @@
168161
'contextlevel' => CONTEXT_COURSE,
169162
'archetypes' => [
170163
'manager' => CAP_ALLOW,
164+
'editingteacher' => CAP_ALLOW
171165
],
172166
],
173167
'block/opencast:deleteevent' => [

db/services.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
'description' => 'Retrieves series titles',
4242
'type' => 'read',
4343
'ajax' => true,
44-
'capabilities' => 'block/opencast:defineseriesforcourse',
44+
'capabilities' => 'block/opencast:manageseriesforcourse',
4545
],
4646
'block_opencast_import_series' => [
4747
'classname' => 'block_opencast_external',

index.php

+2-3
Original file line numberDiff line numberDiff line change
@@ -198,15 +198,14 @@
198198
$ocseriesid = $apibridge->get_default_course_series($courseid);
199199

200200
if ($seriesid && !$ocseriesid) {
201-
if (has_capability('block/opencast:defineseriesforcourse', $coursecontext)) {
201+
if (has_capability('block/opencast:importseriesintocourse', $coursecontext)) {
202202
echo $OUTPUT->notification(get_string('series_does_not_exist_admin', 'block_opencast', $seriesid));
203203
} else {
204204
echo $OUTPUT->notification(get_string('series_does_not_exist', 'block_opencast'));
205205
}
206206
}
207207

208-
if (!$opencasterror && (has_capability('block/opencast:createseriesforcourse', $coursecontext)
209-
|| has_capability('block/opencast:defineseriesforcourse', $coursecontext))) {
208+
if (!$opencasterror && has_capability('block/opencast:manageseriesforcourse', $coursecontext)) {
210209
echo $renderer->render_series_settings_actions($ocinstanceid, $courseid);
211210
}
212211

lang/en/block_opencast.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -528,9 +528,8 @@
528528
$string['opencast:addvideo'] = 'Add a new video to opencast upload block';
529529
$string['opencast:createseriesforcourse'] = 'Create a new series in opencast for a moodle course';
530530
$string['opencast:deleteevent'] = 'Finally delete a video (event) in opencast';
531-
$string['opencast:defineseriesforcourse'] = 'Link an existing opencast series to a moodle course';
532531
$string['opencast:importseriesintocourse'] = 'Import an existing opencast series to a moodle course';
533-
$string['opencast:manageseriesforcourse'] = 'Manage the opencast series of a moodle course';
532+
$string['opencast:manageseriesforcourse'] = 'Manage the opencast series of a moodle course: Access manageseries.php, unlink series from course and select default series.';
534533
$string['opencast:downloadvideo'] = 'Download processed videos';
535534
$string['opencast:startworkflow'] = 'Manually start workflows for videos';
536535
$string['opencast:manualimportsource'] = 'Manually import videos from this course';

manageseries.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
$PAGE->navbar->add(get_string('manageseriesforcourse', 'block_opencast'), $baseurl);
7070

7171
// Capability check.
72-
require_capability('block/opencast:defineseriesforcourse', $coursecontext);
72+
require_capability('block/opencast:manageseriesforcourse', $coursecontext);
7373

7474
$apibridge = apibridge::get_instance($ocinstanceid);
7575

renderer.php

+5-2
Original file line numberDiff line numberDiff line change
@@ -1328,10 +1328,13 @@ public function render_report_problem_icon($identifier) {
13281328
*/
13291329
public function render_manage_series_table($ocinstanceid, $courseid) {
13301330
global $DB;
1331-
$series = $DB->get_records('tool_opencast_series', ['ocinstanceid' => $ocinstanceid, 'courseid' => $courseid]);
1331+
$coursecontext = context_course::instance($courseid);
1332+
$countseries = $DB->count_records('tool_opencast_series', ['ocinstanceid' => $ocinstanceid, 'courseid' => $courseid]);
13321333

13331334
$context = new stdClass();
1334-
$context->addseriesallowed = count($series) < get_config('block_opencast', 'maxseries_' . $ocinstanceid);
1335+
$context->maxseriesreached = $countseries >= get_config('block_opencast', 'maxseries_' . $ocinstanceid);
1336+
$context->cancreateseries = has_capability('block/opencast:createseriesforcourse', $coursecontext);
1337+
$context->canimportseries = has_capability('block/opencast:importseriesintocourse', $coursecontext);
13351338

13361339
return $this->render_from_template('block_opencast/series_table', $context);
13371340
}

templates/series_table.mustache

+11-16
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,20 @@
2121
2222
Example context (json):
2323
{
24-
"series": "",
25-
"numseriesallowed": 3,
26-
"addseriesallowed": true
24+
"cancreateseries": true,
25+
"canimportseries": false,
26+
"maxseriesreached": false
2727
}
2828
}}
2929
<div class="mt-3" id="seriestable">
3030
</div>
31-
{{#addseriesallowed}}
32-
<button type="button" class="btn btn-primary mt-3" id="createseries">
31+
{{#cancreateseries}}
32+
<button type="button" class="btn btn-primary mt-3 {{#maxseriesreached}}d-none{{/maxseriesreached}}" id="createseries">
3333
{{# str}}createseriesforcourse, block_opencast {{/ str}}
3434
</button>
35-
<button type="button" class="btn btn-primary mt-3" id="importseries">
36-
{{# str}}importseries, block_opencast {{/ str}}
37-
{{/addseriesallowed}}
38-
{{^addseriesallowed}}
39-
<button type="button" class="btn btn-primary mt-3 d-none" id="createseries">
40-
{{# str}}createseriesforcourse, block_opencast {{/ str}}
41-
</button>
42-
<button type="button" class="btn btn-primary mt-3 d-none" id="importseries">
43-
{{# str}}importseries, block_opencast {{/ str}}
44-
{{/addseriesallowed}}
45-
</button>
35+
{{/cancreateseries}}
36+
{{#canimportseries}}
37+
<button type="button" class="btn btn-primary mt-3 {{#maxseriesreached}}d-none{{/maxseriesreached}}" id="importseries">
38+
{{# str}}importseries, block_opencast {{/ str}}
39+
</button>
40+
{{/canimportseries}}

0 commit comments

Comments
 (0)