diff --git a/classes/local/manager/process_manager.php b/classes/local/manager/process_manager.php
index 1c3c74a1cf8bafb5df76241eda72bb8958a60c9c..4d4b5786dc11f0b155ff112fa7d3a626fa85fa74 100644
--- a/classes/local/manager/process_manager.php
+++ b/classes/local/manager/process_manager.php
@@ -260,7 +260,7 @@ class process_manager {
$procerror = (object) clone $process;
$procerror->errormessage = get_class($e) . ': ' . $e->getMessage();
$procerror->errortrace = $e->getTraceAsString();
- $procerror->errortime = time();
+ $procerror->errortimecreated = time();
$m = '';
foreach ($e->getTrace() as $v) {
$m .= $v['file'] . ':' . $v['line'] . '::';
@@ -284,7 +284,7 @@ class process_manager {
unset($process->errormessage);
unset($process->errortrace);
unset($process->errorhash);
- unset($process->errortime);
+ unset($process->errortimecreated);
$DB->insert_record_raw('tool_lifecycle_process', $process, false, false, true);
$DB->delete_records('tool_lifecycle_proc_error', ['id' => $process->id]);
@@ -303,7 +303,7 @@ class process_manager {
unset($process->errormessage);
unset($process->errortrace);
unset($process->errorhash);
- unset($process->errortime);
+ unset($process->errortimecreated);
$DB->insert_record_raw('tool_lifecycle_process', $process, false, false, true);
$DB->delete_records('tool_lifecycle_proc_error', ['id' => $process->id]);
diff --git a/classes/task/lifecycle_error_notify_task.php b/classes/task/lifecycle_error_notify_task.php
index ec631a4f059d20995e7a3ecb997cd9620f9c0cf3..3f643a41da8cb402243d7963f5172d7da78bd2fc 100644
--- a/classes/task/lifecycle_error_notify_task.php
+++ b/classes/task/lifecycle_error_notify_task.php
@@ -57,7 +57,8 @@ class lifecycle_error_notify_task extends \core\task\scheduled_task {
$currenttime = time();
- $errorcount = $DB->count_records_select('tool_lifecycle_proc_error', 'errortime > :lastrun', ['lastrun' => $lastrun]);
+ $errorcount = $DB->count_records_select('tool_lifecycle_proc_error', 'errortimecreated > :lastrun',
+ ['lastrun' => $lastrun]);
set_config('adminerrornotifylastrun', $currenttime, 'tool_lifecycle');
diff --git a/db/install.xml b/db/install.xml
index 22f2fa0f655b87debb931afafb36e5b76e639826..c8940a4b4c2c8bf445ea60f59337dcd699b2acdf 100644
--- a/db/install.xml
+++ b/db/install.xml
@@ -157,7 +157,7 @@
<FIELD NAME="errormessage" TYPE="text" NOTNULL="true" SEQUENCE="false" COMMENT="Message of the error"/>
<FIELD NAME="errortrace" TYPE="text" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="errorhash" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" COMMENT="Where the error occured in the form 'path/to/filename.php:line'"/>
- <FIELD NAME="errortime" TYPE="int" LENGTH="11" NOTNULL="true" SEQUENCE="false" COMMENT="unix timestamp - time the error occured"/>
+ <FIELD NAME="errortimecreated" TYPE="int" LENGTH="11" NOTNULL="true" SEQUENCE="false" COMMENT="unix timestamp - time the error occured"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
diff --git a/db/upgrade.php b/db/upgrade.php
index a0a11f6e3ef63a8bbcbacb9b294ef7940db7df4d..5e0c0cbd6c51672131050ec310bda3053a9cb79a 100644
--- a/db/upgrade.php
+++ b/db/upgrade.php
@@ -461,7 +461,7 @@ function xmldb_tool_lifecycle_upgrade($oldversion) {
$table->add_field('errormessage', XMLDB_TYPE_TEXT, null, null, XMLDB_NOTNULL, null, null);
$table->add_field('errortrace', XMLDB_TYPE_TEXT, null, null, XMLDB_NOTNULL, null, null);
$table->add_field('errorhash', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null);
- $table->add_field('errortime', XMLDB_TYPE_INTEGER, '11', null, XMLDB_NOTNULL, null, null);
+ $table->add_field('errortimecreated', XMLDB_TYPE_INTEGER, '11', null, XMLDB_NOTNULL, null, null);
// Adding keys to table tool_lifecycle_proc_error.
$table->add_key('primary', XMLDB_KEY_PRIMARY, ['id']);
diff --git a/tests/process_error_test.php b/tests/process_error_test.php
new file mode 100644
index 0000000000000000000000000000000000000000..5626b899dd68dfc3818dc5d6353a7b173207fd90
--- /dev/null
+++ b/tests/process_error_test.php
@@ -0,0 +1,116 @@
+<?php
+// 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/>.
+
+/**
+ * Checks whether process errors are properly inserted into the table.
+ *
+ * @package tool_lifecycle
+ * @category test
+ * @group tool_lifecycle
+ * @copyright 2022 Justus Dieckmann WWU
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+namespace tool_lifecycle;
+
+use tool_lifecycle\local\entity\trigger_subplugin;
+use tool_lifecycle\local\manager\settings_manager;
+use tool_lifecycle\local\manager\workflow_manager;
+use tool_lifecycle\local\manager\trigger_manager;
+use tool_lifecycle\local\manager\process_manager;
+
+/**
+ * Checks whether process errors are properly inserted into the table.
+ *
+ * @package tool_lifecycle
+ * @category test
+ * @group tool_lifecycle
+ * @copyright 2022 Justus Dieckmann WWU
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class process_error_test extends \advanced_testcase {
+ /** Icon of the manual trigger. */
+ const MANUAL_TRIGGER1_ICON = 't/up';
+ /** Display name of the manual trigger. */
+ const MANUAL_TRIGGER1_DISPLAYNAME = 'Up';
+ /** Capability of the manual trigger. */
+ const MANUAL_TRIGGER1_CAPABILITY = 'moodle/course:manageactivities';
+
+
+ /** @var trigger_subplugin $trigger Instances of the triggers under test. */
+ private $trigger;
+ /** @var array $course Instance of the course under test. */
+ private $course;
+
+ /**
+ * Setup the testcase.
+ * @throws \coding_exception
+ * @throws \moodle_exception
+ */
+ public function setUp() : void {
+ global $USER, $DB;
+
+ // We do not need a sesskey check in theses tests.
+ $USER->ignoresesskey = true;
+
+ $this->resetAfterTest(true);
+ $generator = $this->getDataGenerator()->get_plugin_generator('tool_lifecycle');
+ $triggersettings = new \stdClass();
+ $triggersettings->icon = self::MANUAL_TRIGGER1_ICON;
+ $triggersettings->displayname = self::MANUAL_TRIGGER1_DISPLAYNAME;
+ $triggersettings->capability = self::MANUAL_TRIGGER1_CAPABILITY;
+ $manualworkflow = $generator->create_manual_workflow($triggersettings);
+ $step = $generator->create_step("instance1", "deletecourse", $manualworkflow->id);
+ settings_manager::save_settings($step->id, settings_type::STEP, "deletecourse",
+ array("maximumdeletionspercron" => 10)
+ );
+
+ workflow_manager::handle_action(action::WORKFLOW_ACTIVATE, $manualworkflow->id);
+
+ $this->course = $this->getDataGenerator()->create_course();
+ $this->getDataGenerator()->create_module('page', ['course' => $this->course->id]);
+
+ // Corrupt course.
+ $DB->execute('UPDATE {course_modules} SET instance = 0');
+ $this->trigger = trigger_manager::get_triggers_for_workflow($manualworkflow->id)[0];
+ }
+
+ /**
+ * Test if the correct process error was put into the table.
+ */
+ public function test_process_error_in_table() {
+ global $DB;
+ $process = process_manager::manually_trigger_process($this->course->id, $this->trigger->id);
+
+ // The delete course step really wants to print output.
+ ob_start();
+ $processor = new processor();
+ $processor->process_courses();
+ ob_end_clean();
+
+ $records = $DB->get_records('tool_lifecycle_proc_error');
+
+ $this->assertEquals(1, count($records));
+ $this->assertEquals(0, $DB->count_records('tool_lifecycle_process'));
+
+ $record = reset($records);
+
+ $this->assertEquals($this->course->id, $record->courseid);
+ $this->assertStringContainsString("Trying to get property 'id' of non-object", $record->errormessage);
+ $this->assertEquals($process->id, $record->id);
+ }
+
+}