From 5fe80645576485ddd47ab1652e92baf4d10b3117 Mon Sep 17 00:00:00 2001 From: Shamim Rezaie Date: Mon, 12 Aug 2024 03:48:09 +1000 Subject: [PATCH] MDL-82684 mod_assign: Move the downloadasfolders checkbox to action bar --- mod/assign/classes/downloader.php | 2 +- .../form/grading_options_temp_form.php | 7 ------ .../classes/output/grading_actionmenu.php | 22 ++++++++++++++++++- mod/assign/lang/en/assign.php | 2 +- mod/assign/lang/en/deprecated.txt | 1 + mod/assign/locallib.php | 17 +++++--------- .../templates/grading_actionmenu.mustache | 21 ++++++++++++++++++ 7 files changed, 51 insertions(+), 21 deletions(-) diff --git a/mod/assign/classes/downloader.php b/mod/assign/classes/downloader.php index 7d29461f8f7..420f5fbd7ae 100644 --- a/mod/assign/classes/downloader.php +++ b/mod/assign/classes/downloader.php @@ -64,7 +64,7 @@ class downloader { * Class constructor. * * @param assign $manager the instance manager - * @param array|null $userids the user ids to download. + * @param int[]|null $userids the user ids to download. */ public function __construct(assign $manager, ?array $userids = null) { $this->manager = $manager; diff --git a/mod/assign/classes/form/grading_options_temp_form.php b/mod/assign/classes/form/grading_options_temp_form.php index a94d4b977fd..688f0056ba8 100644 --- a/mod/assign/classes/form/grading_options_temp_form.php +++ b/mod/assign/classes/form/grading_options_temp_form.php @@ -75,13 +75,6 @@ class grading_options_temp_form extends \moodleform { $mform->setDefault('showonlyactiveenrol', $instance['showonlyactiveenrol']); } - // Place student downloads in seperate folders. - if ($instance['submissionsenabled']) { - $mform->addElement('checkbox', 'downloadasfolders', get_string('downloadasfolders', 'assign')); - $mform->addHelpButton('downloadasfolders', 'downloadasfolders', 'assign'); - $mform->setDefault('downloadasfolders', $instance['downloadasfolders']); - } - // Hidden params. $mform->addElement('hidden', 'contextid', $instance['contextid']); $mform->setType('contextid', PARAM_INT); diff --git a/mod/assign/classes/output/grading_actionmenu.php b/mod/assign/classes/output/grading_actionmenu.php index 4c5aa1e8f74..542a02843b1 100644 --- a/mod/assign/classes/output/grading_actionmenu.php +++ b/mod/assign/classes/output/grading_actionmenu.php @@ -48,6 +48,8 @@ class grading_actionmenu implements templatable, renderable { protected int $submissioncount; /** @var assign The assign instance. */ protected assign $assign; + /** @var bool If there are submissions to download. */ + protected bool $showdownload; /** * Constructor for this object. @@ -69,6 +71,7 @@ class grading_actionmenu implements templatable, renderable { $assign = new assign($context, null, null); } $this->assign = $assign; + $this->showdownload = $this->assign->is_any_submission_plugin_enabled() && $this->assign->count_submissions(); } /** @@ -162,6 +165,23 @@ class grading_actionmenu implements templatable, renderable { ]; } + if ($this->showdownload) { + $downloadasfoldersbaseurl = new moodle_url('/mod/assign/view.php', [ + 'id' => $this->assign->get_course_module()->id, + 'action' => 'grading', + ]); + if ($userid) { + $downloadasfoldersbaseurl->param('userid', $userid); + } else if ($usersearch) { + $downloadasfoldersbaseurl->param('search', $usersearch); + } + $downloadasfolders = get_user_preferences('assign_downloadasfolders', 1); + $data['downloadasfolders'] = [ + 'baseurl' => $downloadasfoldersbaseurl->out(false), + 'enabled' => $downloadasfolders, + ]; + } + $actions = $this->get_actions(); if ($actions) { $menu = new \action_menu(); @@ -219,7 +239,7 @@ class grading_actionmenu implements templatable, renderable { } } } - if ($this->assign->is_any_submission_plugin_enabled() && $this->assign->count_submissions()) { + if ($this->showdownload) { $url = new moodle_url('/mod/assign/view.php', [ 'id' => $this->assign->get_course_module()->id, 'action' => 'downloadall', diff --git a/mod/assign/lang/en/assign.php b/mod/assign/lang/en/assign.php index 3a9b312cb1d..98dda31a419 100644 --- a/mod/assign/lang/en/assign.php +++ b/mod/assign/lang/en/assign.php @@ -190,7 +190,6 @@ $string['disabled'] = 'Disabled'; $string['downloadall'] = 'Download all submissions'; $string['download all submissions'] = 'Download all submissions in a zip file.'; $string['downloadasfolders'] = 'Download submissions in folders'; -$string['downloadasfolders_help'] = 'Assignment submissions may be downloaded in folders. Each submission is then put in a separate folder, with the folder structure kept for any subfolders, and files are not renamed.'; $string['downloadselectedsubmissions'] = 'Download selected submissions'; $string['duedate'] = 'Due date'; $string['duedatecolon'] = 'Due date: {$a}'; @@ -703,6 +702,7 @@ $string['xofy'] = '{$a->x} of {$a->y}'; // Deprecated since Moodle 4.5. $string['attemptreopenmethod_none'] = 'Never'; $string['choosegradingaction'] = 'Grading action'; +$string['downloadasfolders_help'] = 'Assignment submissions may be downloaded in folders. Each submission is then put in a separate folder, with the folder structure kept for any subfolders, and files are not renamed.'; $string['groupoverridesdeleted'] = 'Group overrides deleted'; $string['updategrade'] = 'Update grade'; $string['useroverridesdeleted'] = 'User overrides deleted'; diff --git a/mod/assign/lang/en/deprecated.txt b/mod/assign/lang/en/deprecated.txt index bf86c650b52..bf27bffa6d6 100644 --- a/mod/assign/lang/en/deprecated.txt +++ b/mod/assign/lang/en/deprecated.txt @@ -3,3 +3,4 @@ groupoverridesdeleted,mod_assign useroverridesdeleted,mod_assign choosegradingaction,mod_assign updategrade,mod_assign +downloadasfolders_help,mod_assign diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 95125ae84a8..3d601d03561 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -3740,7 +3740,7 @@ class assign { /** * Download a zip file of all assignment submissions. * - * @param array|null $userids Array of user ids to download assignment submissions in a zip file + * @param int[]|null $userids Array of user ids to download assignment submissions in a zip file * @return string - If an error occurs, this will contain the error page. */ protected function download_submissions($userids = null) { @@ -4499,6 +4499,11 @@ class assign { set_user_preference('assign_quickgrading', $submittedquickgrading); } + $submitteddownloadasfolders = optional_param('downloadasfolders', null, PARAM_BOOL); + if (isset($submitteddownloadasfolders)) { + set_user_preference('assign_downloadasfolders', $submitteddownloadasfolders); + } + $o = ''; $cmid = $this->get_course_module()->id; @@ -4520,7 +4525,6 @@ class assign { $showquickgrading = empty($controller) && $this->can_grade(); $quickgrading = get_user_preferences('assign_quickgrading', false); $showonlyactiveenrolopt = has_capability('moodle/course:viewsuspendedusers', $this->context); - $downloadasfolders = get_user_preferences('assign_downloadasfolders', 1); $markingallocation = $this->get_instance()->markingworkflow && $this->get_instance()->markingallocation && @@ -4548,12 +4552,10 @@ class assign { 'cm' => $cmid, 'contextid' => $this->context->id, 'userid' => $USER->id, - 'submissionsenabled' => $this->is_any_submission_plugin_enabled(), 'markingworkflowopt' => $markingworkflowoptions, 'markingallocationopt' => $markingallocationoptions, 'showonlyactiveenrolopt' => $showonlyactiveenrolopt, 'showonlyactiveenrol' => $this->show_only_active_users(), - 'downloadasfolders' => $downloadasfolders, ]; $classoptions = array('class'=>'gradingoptionsform'); @@ -7416,12 +7418,10 @@ class assign { 'cm' => $this->get_course_module()->id, 'contextid' => $this->context->id, 'userid' => $USER->id, - 'submissionsenabled' => $this->is_any_submission_plugin_enabled(), 'markingworkflowopt' => $markingworkflowoptions, 'markingallocationopt' => $markingallocationoptions, 'showonlyactiveenrolopt' => $showonlyactiveenrolopt, 'showonlyactiveenrol' => $this->show_only_active_users(), - 'downloadasfolders' => get_user_preferences('assign_downloadasfolders', 1), ]; $mform = new mod_assign\form\grading_options_temp_form(null, $gradingoptionsparams); if ($formdata = $mform->get_data()) { @@ -7429,11 +7429,6 @@ class assign { if (isset($formdata->markerfilter)) { set_user_preference('assign_markerfilter', $formdata->markerfilter); } - if (isset($formdata->downloadasfolders)) { - set_user_preference('assign_downloadasfolders', 1); // Enabled. - } else { - set_user_preference('assign_downloadasfolders', 0); // Disabled. - } if (!empty($showonlyactiveenrolopt)) { $showonlyactiveenrol = isset($formdata->showonlyactiveenrol); set_user_preference('grade_report_showonlyactiveenrol', $showonlyactiveenrol); diff --git a/mod/assign/templates/grading_actionmenu.mustache b/mod/assign/templates/grading_actionmenu.mustache index 53124402b00..c983154892b 100644 --- a/mod/assign/templates/grading_actionmenu.mustache +++ b/mod/assign/templates/grading_actionmenu.mustache @@ -30,6 +30,7 @@ * pagereset - (optional) URL to reset the page * graderurl - (optional) URL to the grader page * quickgrading - (optional) Includes the baseurl and enabled properties for the quick grading checkbox + * downloadasfolders - (optional) Includes the baseurl and enabled properties for the download as folders checkbox * actions - (optional) HTML that outputs the bulk action menu Example context (json): @@ -57,6 +58,10 @@ "baseurl": "http://moodle.local/mod/assign/view.php?id=2&action=grading", "enabled": true }, + "downloadasfolders": { + "baseurl": "http://moodle.local/mod/assign/view.php?id=2&action=grading", + "enabled": true + }, "actions": "
" } @@ -127,6 +132,22 @@ }); {{/js}} {{/quickgrading}} + {{#downloadasfolders}} + + + {{#js}} + document.querySelector('#downloadasfolders-{{uniqid}}').addEventListener('change', function(e) { + var url = new URL('{{{baseurl}}}'); + url.searchParams.set('downloadasfolders', e.target.checked ? 1 : 0); + window.location.href = url; + }); + {{/js}} + {{/downloadasfolders}} {{#actions}} {{/actions}}