Skip to content

Commit 9cc7313

Browse files
author
Laur0r
authored
Merge pull request #78 from learnweb/feature/automatic-eval-request-rerun-evaluation
feature/automatic-eval-request_rerun evaluations
2 parents c688509 + 0d1547e commit 9cc7313

File tree

6 files changed

+95
-4
lines changed

6 files changed

+95
-4
lines changed

classes/evaluation_manager.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,40 @@ public static function set_default_evaluation_for($courseids, evasys_category $c
125125
return $errors;
126126
}
127127

128+
/**
129+
* Set adhoc task for rerunning an evaluation
130+
*
131+
* @param $courseids
132+
* @param evasys_category $category
133+
* @return array
134+
* @throws \coding_exception
135+
* @throws \dml_exception
136+
* @throws \moodle_exception
137+
*/
138+
public static function set_re_evaluation_for($courseids, evasys_category $category)
139+
{
140+
global $DB, $USER;
141+
$childids = \core_course_category::get($category->get('course_category'))->get_all_children_ids();
142+
$errors = [];
143+
foreach ($courseids as $courseid) {
144+
$course = get_course($courseid, false);
145+
146+
if (!$eval = $DB->get_field(dbtables::EVAL_COURSES, 'evalid', ['courseid' => $course->id])) {
147+
$errors[$course->id] = 'Evaluation doesnt exist yet!';
148+
continue;
149+
}
150+
151+
$DB->delete_records(dbtables::EVAL_VERANSTS, ['evalid' => $eval]);
152+
$DB->delete_records(dbtables::EVAL_COURSES, ['evalid' => $eval]);
153+
$DB->delete_records(dbtables::EVAL, ['id' => $eval]);
154+
155+
}
156+
157+
$errors[] = self::set_default_evaluation_for($courseids, $category);
158+
159+
return $errors;
160+
}
161+
128162
public static function insert_participants_for_evaluation(evaluation $evaluation) {
129163
$personlist = [];
130164
$errors = [];

classes/local/table/manual_courses_table.php

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
namespace block_evasys_sync\local\table;
2525

2626
use block_evasys_sync\dbtables;
27+
use block_evasys_sync\evasys_category;
2728
use block_evasys_sync\local\entity\evaluation_state;
2829
use moodle_url;
2930

@@ -40,15 +41,22 @@
4041
*/
4142
class manual_courses_table extends \table_sql {
4243

44+
private evasys_category $evasyscategory;
45+
46+
private bool $showbuttons;
47+
4348
private $allcourseids;
4449

4550
/**
4651
* Constructor for course_manager_table.
4752
*/
48-
public function __construct($categoryids, $semester, $coursefullname = null) {
53+
public function __construct($categoryids, $semester, evasys_category $evasyscategory, $coursefullname = null, $showbuttons = true) {
4954
parent::__construct('block_evasys_sync-course_manager_table');
5055
global $DB;
5156

57+
$this->evasyscategory = $evasyscategory;
58+
$this->showbuttons = $showbuttons;
59+
5260
$fields = 'c.id as courseid, c.fullname as course, ' .
5361
'cfd.intvalue as semester,' .
5462
'eval.id as evalid, ' .
@@ -170,7 +178,25 @@ public function col_evalinfo($row) {
170178
* @return string
171179
*/
172180
public function col_tools($row) {
173-
return '';
181+
global $PAGE, $OUTPUT;
182+
if (!$this->evasyscategory->default_period_set() || !$this->showbuttons) {
183+
return '';
184+
}
185+
$url = new moodle_url($PAGE->url, [
186+
'action' => 'setreeval',
187+
'ids[]' => $row->courseid,
188+
'id' => $this->evasyscategory->get('course_category'),
189+
'sesskey' => sesskey(),
190+
]);
191+
192+
return $OUTPUT->render(new \single_button($url,
193+
get_string('set_re_eval', 'block_evasys_sync'), 'post', \single_button::BUTTON_SECONDARY, [
194+
'data-modal' => 'confirmation',
195+
'data-modal-title-str' => json_encode(['confirm', 'core']),
196+
'data-modal-content-str' => json_encode(['areyousure']),
197+
'data-modal-yes-button-str' => json_encode(['confirm', 'core']),
198+
'data-modal-destination' => $url->out(false),
199+
]));
174200
}
175201

176202
/**

classes/task/evasys_bulk_task.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,19 @@ class evasys_bulk_task extends adhoc_task{
88

99
public function execute()
1010
{
11+
global $DB;
1112
$data = $this->get_custom_data();
1213
$courses = $data->courses;
1314
$categoryid = $data->categoryid;
1415
if(empty($categoryid) || empty($courses)){
1516
mtrace("No category or courses specified, exiting.");
1617
}
1718
$evasyscategory = \block_evasys_sync\evasys_category::for_category($categoryid);
18-
$errors = \block_evasys_sync\evaluation_manager::set_default_evaluation_for($courses, $evasyscategory);
19+
if ($data->reeval) {
20+
$errors = \block_evasys_sync\evaluation_manager::set_re_evaluation_for($courses,$evasyscategory);
21+
} else {
22+
$errors = \block_evasys_sync\evaluation_manager::set_default_evaluation_for($courses, $evasyscategory);
23+
}
1924
if ($errors) {
2025
$erroroutput = '';
2126
foreach ($errors as $courseid => $error) {

lang/de/block_evasys_sync.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,8 @@
274274
$string['set_default_eval_for_all'] = 'Standardevaluation für alle Kurse planen';
275275
$string['set_default_period_for_default_eval'] = 'Legen Sie einen Standardevaluationszeitraum fest, um Standardevaluationen planen zu können.';
276276

277+
$string['set_re_eval'] = 'Evaluation erneut ausführen';
278+
277279
$string['clear_error'] = 'Fehler löschen';
278280
$string['clear_selected_errors'] = 'Ausgewählte Fehler löschen';
279281
$string['clear_all_errors'] = 'Alle Fehler löschen';

lang/en/block_evasys_sync.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,8 @@
285285
$string['set_default_eval_for_all'] = 'Set default evaluation for all';
286286
$string['set_default_period_for_default_eval'] = 'Set a default evaluation period to be able to plan default evaluations.';
287287

288+
$string['set_re_eval'] = 'Rerun evaluation';
289+
288290
$string['clear_error'] = 'Clear error';
289291
$string['clear_selected_errors'] = 'Clear selected errors';
290292
$string['clear_all_errors'] = 'Clear all errors';

managecategory_manual.php

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
2323
*/
2424

25+
use block_evasys_sync\task\evasys_bulk_task;
2526
use customfield_semester\data_controller;
2627

2728
require_once(__DIR__ . '/../../config.php');
@@ -45,6 +46,27 @@
4546

4647
$data = $cache->get($cachekey);
4748

49+
$action = optional_param('action', null, PARAM_ALPHAEXT);
50+
if ($action === 'setreeval') {
51+
require_sesskey();
52+
$courses = required_param_array('ids', PARAM_INT);
53+
$queuedtasks = \core\task\manager::get_adhoc_tasks(evasys_bulk_task::class);
54+
$tasksofcurrentmodule = array_filter($queuedtasks, fn($task) => $task->get_custom_data()->categoryid === $id);
55+
if(empty($tasksofcurrentmodule)){
56+
$task = new evasys_bulk_task();
57+
$data = new stdClass();
58+
$data->courses = $courses;
59+
$data->categoryid = $id;
60+
$data->reeval = true;
61+
$task->set_custom_data($data);
62+
$task->set_userid($USER->id);
63+
\core\task\manager::queue_adhoc_task($task, true);
64+
} else {
65+
\core\notification::warning(get_string("running_crontask", "block_evasys_sync"));
66+
}
67+
redirect($PAGE->url);
68+
}
69+
4870
$field = $DB->get_record('customfield_field', array('shortname' => 'semester', 'type' => 'semester'), '*', MUST_EXIST);
4971
$fieldcontroller = \core_customfield\field_controller::create($field->id);
5072
$datacontroller = \core_customfield\data_controller::create(0, null, $fieldcontroller);
@@ -57,7 +79,7 @@
5779
$catids = array_merge($category->get_all_children_ids(), [$category->id]);
5880

5981
$table = new \block_evasys_sync\local\table\manual_courses_table($catids, $data->semester ?? null,
60-
$data->coursename ?? null);
82+
$evasyscategory, $data->coursename ?? null);
6183
$table->define_baseurl($PAGE->url);
6284

6385
$mform = new \block_evasys_sync\managecategory_filter_table_form($PAGE->url, ['table' => $table]);

0 commit comments

Comments
 (0)