Skip to content

Commit 04e313e

Browse files
committed
Merge branch 'MOODLE_500_STABLE'
2 parents 929e718 + 6557cc0 commit 04e313e

File tree

6 files changed

+110
-30
lines changed

6 files changed

+110
-30
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
CHANGELOG
22
=========
33

4+
5+
5.0.1 (2025-09-29)
6+
-------------------
7+
* [BUG] #8534 - fix incorrect usage of deprecated.txt
8+
* [BUG] #8535 - add missing privacy provider table coverage for table publication_overrides
9+
* [BUG] #8551 - remove table borders in Moodle ≥ 5.0 - github pull request #102 - lucaboesch
10+
411
5.0.0 (2025-06-11)
512
-------------------
613
* Moodle 5.0.0 compatible version

classes/local/allfilestable/base.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -645,7 +645,7 @@ public function col_timemodified($values) {
645645
list(, $files, ) = $this->get_files($values->id);
646646

647647
$filetable = new \html_table();
648-
$filetable->attributes = ['class' => 'filetable'];
648+
$filetable->attributes = ['class' => 'filetable table-reboot'];
649649

650650
foreach ($files as $file) {
651651
if (has_capability('mod/publication:approve', $this->context)
@@ -682,7 +682,7 @@ public function col_files($values) {
682682
list(, $files, ) = $this->get_files($values->id);
683683
global $OUTPUT;
684684
$filetable = new \html_table();
685-
$filetable->attributes = ['class' => 'filetable'];
685+
$filetable->attributes = ['class' => 'filetable table-reboot'];
686686

687687
foreach ($files as $file) {
688688
if ((has_capability('mod/publication:approve', $this->context))
@@ -720,7 +720,7 @@ public function col_studentapproval($values) {
720720
list(, $files, ) = $this->get_files($values->id);
721721

722722
$table = new \html_table();
723-
$table->attributes = ['class' => 'statustable'];
723+
$table->attributes = ['class' => 'statustable table-reboot'];
724724

725725
foreach ($files as $file) {
726726
if (has_capability('mod/publication:approve', $this->context)
@@ -797,7 +797,7 @@ public function col_visibleforstudents($values) {
797797
list(, $files, ) = $this->get_files($values->id);
798798

799799
$table = new \html_table();
800-
$table->attributes = ['class' => 'statustable'];
800+
$table->attributes = ['class' => 'statustable table-reboot'];
801801

802802
foreach ($files as $file) {
803803
if ($this->publication->has_filepermission($file->get_id())) {
@@ -826,7 +826,7 @@ public function col_publicationstatus($values) {
826826
list(, $files, ) = $this->get_files($values->id);
827827

828828
$table = new \html_table();
829-
$table->attributes = ['class' => 'statustable'];
829+
$table->attributes = ['class' => 'statustable table-reboot'];
830830

831831
foreach ($files as $file) {
832832
$row = [];

classes/privacy/provider.php

Lines changed: 95 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,16 @@ public static function get_metadata(collection $collection): collection {
8383
$collection->add_database_table('publication_file', $publicationfile, 'privacy:metadata:files');
8484
$collection->add_database_table('publication_groupapproval', $publicationgroupapproval, 'privacy:metadata:groupapproval');
8585

86+
$publicationoverrides = [
87+
'userid' => 'privacy:metadata:userid',
88+
'groupid' => 'privacy:metadata:groupid',
89+
'allowsubmissionsfromdate' => 'privacy:metadata:allowsubmissionsfromdate',
90+
'duedate' => 'privacy:metadata:duedate',
91+
'approvalfromdate' => 'privacy:metadata:approvalfromdate',
92+
'approvaltodate' => 'privacy:metadata:approvaltodate',
93+
];
94+
$collection->add_database_table('publication_overrides', $publicationoverrides, 'privacy:metadata:overrides');
95+
8696
$collection->add_user_preference('publication_perpage', 'privacy:metadata:publicationperpage');
8797

8898
// Link to subplugins.
@@ -107,6 +117,7 @@ public static function get_contexts_for_userid(int $userid): contextlist {
107117
'guserid' => $userid,
108118
'extuserid' => $userid,
109119
'fuserid' => $userid,
120+
'ovruserid' => $userid,
110121
];
111122

112123
$enroled = enrol_get_all_users_courses($userid);
@@ -138,13 +149,15 @@ public static function get_contexts_for_userid(int $userid): contextlist {
138149
LEFT JOIN {publication_extduedates} ext ON p.id = ext.publication
139150
LEFT JOIN {publication_file} f ON p.id = f.publication
140151
LEFT JOIN {publication_groupapproval} ga ON f.id = ga.fileid
152+
LEFT JOIN {publication_overrides} po ON p.id = po.publication
141153
LEFT JOIN {assign} a ON p.importfrom = a.id
142154
LEFT JOIN {groups} g ON g.courseid = p.course
143155
LEFT JOIN {groups_members} gm ON g.id = gm.groupid AND gm.userid = :guserid
144156
WHERE ((p.importfrom > 0 AND a.teamsubmission > 0)
145157
AND ((gm.userid = :userid AND (ext.userid = gm.groupid OR f.userid = gm.groupid))
146158
OR (gm.userid IS NULL AND f.userid = 0 AND a.preventsubmissionnotingroup = 0 AND g.courseid $enrolsql)))
147-
OR ((p.importfrom <= 0 OR a.teamsubmission = 0) AND (ext.userid = :extuserid OR f.userid = :fuserid))";
159+
OR ((p.importfrom <= 0 OR a.teamsubmission = 0) AND (ext.userid = :extuserid OR f.userid = :fuserid))
160+
OR (po.userid = :ovruserid OR po.groupid = gm.groupid)";
148161
$contextlist = new contextlist();
149162
$contextlist->add_from_sql($sql, $params);
150163

@@ -227,6 +240,27 @@ public static function get_users_in_context(userlist $userlist) {
227240
JOIN {publication_groupapproval} ga ON p.id = ga.fileid
228241
WHERE ctx.id = :contextid AND ctx.contextlevel = :contextlevel";
229242
$userlist->add_from_sql('userid', $sql, $params);
243+
244+
// Get all users with user-specific overrides.
245+
$sql = "SELECT po.userid
246+
FROM {context} ctx
247+
JOIN {course_modules} cm ON cm.id = ctx.instanceid
248+
JOIN {modules} m ON m.id = cm.module AND m.name = :modulename
249+
JOIN {publication} p ON p.id = cm.instance
250+
JOIN {publication_overrides} po ON po.publication = p.id
251+
WHERE ctx.id = :contextid AND ctx.contextlevel = :contextlevel AND po.userid IS NOT NULL";
252+
$userlist->add_from_sql('userid', $sql, $params);
253+
254+
// Get all users who belong to a group with an override.
255+
$sql = "SELECT gm.userid
256+
FROM {context} ctx
257+
JOIN {course_modules} cm ON cm.id = ctx.instanceid
258+
JOIN {modules} m ON m.id = cm.module AND m.name = :modulename
259+
JOIN {publication} p ON p.id = cm.instance
260+
JOIN {publication_overrides} po ON po.publication = p.id
261+
JOIN {groups_members} gm ON gm.groupid = po.groupid
262+
WHERE ctx.id = :contextid AND ctx.contextlevel = :contextlevel AND po.groupid IS NOT NULL";
263+
$userlist->add_from_sql('userid', $sql, $params);
230264
}
231265

232266
/**
@@ -261,9 +295,11 @@ public static function delete_data_for_users(approved_userlist $userlist) {
261295

262296
list($usersql, $userparams) = $DB->get_in_or_equal($userids, SQL_PARAMS_NAMED, 'usr');
263297

264-
// Delete users' files, extended due dates and groupapprovals for this publication!
298+
// Delete users' files, extended due dates, overrides and groupapprovals for this publication!
265299
$DB->delete_records_select('publication_extduedates', "publication = :id AND userid ".$usersql,
266300
['id' => $id] + $userparams);
301+
$DB->delete_records_select('publication_overrides', "publication = :id AND userid ".$usersql,
302+
['id' => $id] + $userparams);
267303
$files = $DB->get_records_select('publication_file', "publication = :id AND userid ".$usersql,
268304
['id' => $id] + $userparams);
269305

@@ -344,6 +380,7 @@ public static function export_user_data(approved_contextlist $contextlist) {
344380
static::export_user_preferences($user->id);
345381
static::export_extensions($context, $publication, $user);
346382
static::export_files($context, $publication, $user, []);
383+
static::export_overrides($context, $publication, $user);
347384
}
348385
}
349386

@@ -395,6 +432,60 @@ public static function export_extensions(\context $context, \publication $pub, \
395432
}
396433
}
397434

435+
/**
436+
* Export publication overrides relevant to this user (user and group-based).
437+
*
438+
* @param \context $context Context
439+
* @param \publication $pub The publication object.
440+
* @param \stdClass $user The user object.
441+
* @throws \dml_exception
442+
*/
443+
protected static function export_overrides(\context $context, \publication $pub, \stdClass $user) {
444+
global $DB;
445+
446+
$publicationid = $pub->get_instance()->id;
447+
$courseid = $pub->get_instance()->course;
448+
449+
// User-specific overrides.
450+
$overrides = $DB->get_records('publication_overrides', [
451+
'publication' => $publicationid,
452+
'userid' => $user->id,
453+
]);
454+
455+
// Group-based overrides for any of user's groups in this course.
456+
$groups = groups_get_user_groups($courseid, $user->id);
457+
$groupids = [];
458+
if (!empty($groups) && isset($groups[0]) && is_array($groups[0])) {
459+
$groupids = $groups[0];
460+
}
461+
if (!empty($groupids)) {
462+
list($insql, $inparams) = $DB->get_in_or_equal($groupids, SQL_PARAMS_NAMED, 'grp');
463+
$sql = "SELECT * FROM {publication_overrides} WHERE publication = :publication AND groupid " . $insql;
464+
$recs = $DB->get_records_sql($sql, ['publication' => $publicationid] + $inparams);
465+
$overrides = $overrides + $recs;
466+
}
467+
468+
foreach ($overrides as $ovr) {
469+
$data = (object)[
470+
'userid' => $ovr->userid,
471+
'groupid' => $ovr->groupid,
472+
];
473+
if (!is_null($ovr->allowsubmissionsfromdate) && $ovr->allowsubmissionsfromdate != 0) {
474+
$data->allowsubmissionsfromdate = transform::datetime($ovr->allowsubmissionsfromdate);
475+
}
476+
if (!is_null($ovr->duedate) && $ovr->duedate != 0) {
477+
$data->duedate = transform::datetime($ovr->duedate);
478+
}
479+
if (!is_null($ovr->approvalfromdate) && $ovr->approvalfromdate != 0) {
480+
$data->approvalfromdate = transform::datetime($ovr->approvalfromdate);
481+
}
482+
if (!is_null($ovr->approvaltodate) && $ovr->approvaltodate != 0) {
483+
$data->approvaltodate = transform::datetime($ovr->approvaltodate);
484+
}
485+
writer::with_context($context)->export_data([], $data);
486+
}
487+
}
488+
398489
/**
399490
* Fetches all of the user's files and adds them to the export
400491
*
@@ -647,6 +738,7 @@ public static function delete_data_for_all_users_in_context(\context $context) {
647738
}
648739

649740
$DB->delete_records('publication_extduedates', ['publication' => $id]);
741+
$DB->delete_records('publication_overrides', ['publication' => $id]);
650742
}
651743
}
652744
}
@@ -736,6 +828,7 @@ public static function delete_data_for_user(approved_contextlist $contextlist) {
736828
}
737829

738830
$DB->delete_records('publication_extduedates', ['publication' => $pub->id, 'userid' => $user->id]);
831+
$DB->delete_records('publication_overrides', ['publication' => $pub->id, 'userid' => $user->id]);
739832
}
740833
}
741834
}

lang/en/deprecated.txt

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,5 @@
1-
requiremodintro,mod_publication
2-
configrequiremodintro,mod_publication
3-
configobtainteacherapproval,mod_publication
4-
configobtainstudentapproval,mod_publication
5-
notice_uploadrequireapproval,mod_publication
6-
notice_uploadnoapproval,mod_publication
7-
notice_groupimportrequireallapproval,mod_publication
8-
notice_groupimportrequireoneapproval,mod_publication
9-
notice_groupappovalnotrequired,mod_publication
10-
notice_studentappovalrequired,mod_publication
11-
notice_studentappovalnotrequired,mod_publication
12-
notice_importrequireapproval,mod_publication
13-
notice_importnoapproval,mod_publication
141
notice_obtainteacherapproval_studentsapproval,mod_publication
152
notice_obtainapproval_import_both,mod_publication
163
notice_obtainapproval_import_studentonly,mod_publication
174
notice_obtainapproval_upload_teacher,mod_publication
185
notice_obtainapproval_upload_automatic,mod_publication
19-
warning_changefromobtainteacherapproval,mod_publication
20-
warning_changetoobtainteacherapproval,mod_publication
21-
warning_changefromobtainstudentapproval,mod_publication
22-
warning_changetoobtainstudentapproval,mod_publication
23-
emailteachermail,mod_publication
24-
emailteachermailhtml,mod_publication
25-
emailstudentsmail,mod_publication
26-
emailstudentsmailhtml,mod_publication

lang/en/publication.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@
223223
$string['pending'] = 'Pending';
224224
$string['pluginadministration'] = 'Student folder administration';
225225
$string['pluginname'] = 'Student folder';
226+
$string['privacy:extensionduedate'] = 'Extension due date';
226227
$string['privacy:metadata:approval'] = 'Whether the group member has approved or rejected for publication.';
227228
$string['privacy:metadata:contenthash'] = 'SHA1 hash of the file\'s content, used to determine if the file changed.';
228229
$string['privacy:metadata:extduedates'] = 'Stores information about overridden/extended due dates for mod_publication.';

version.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828

2929
defined('MOODLE_INTERNAL') || die();
3030

31-
$plugin->version = 2025061100;
31+
$plugin->version = 2025061101;
3232
$plugin->requires = 2025041400;
3333
$plugin->component = 'mod_publication';
3434
$plugin->maturity = MATURITY_STABLE;
35-
$plugin->release = "v5.0.0";
35+
$plugin->release = "v5.0.1";

0 commit comments

Comments
 (0)