Skip to content

Commit 8288366

Browse files
authored
Fix scheduling and cronjob (#1311)
* correctly set coursedate_start and _end, check for them in the cronjob * only touch events in the future * add migration to fix already existing scheduled events * remove debug code
1 parent 822c3ee commit 8288366

File tree

3 files changed

+61
-9
lines changed

3 files changed

+61
-9
lines changed

cronjobs/opencast_refresh_scheduling.php

+33-9
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,13 @@ public function execute($last_result, $parameters = array())
8282

8383
// Validate SOP resource.
8484
// In case validation fails, we try to remove the record on both sides!
85-
if (!$cd || !$course || !$course_config_id || !$resource_obj // Any requirement fails
85+
echo '-----------------------------------------------------' . "\n";
86+
87+
if (empty($cd) || empty($course) || empty($course_config_id) || empty($resource_obj) // Any requirement fails
8688
|| !ScheduleHelper::validateCourseAndResource($scheduled_events['seminar_id'], $resource_obj['config_id']) // The server config id of the course and the oc_resource does not match
8789
|| $cd->room_booking->resource_id != $scheduled_events['resource_id'] // The resource of the record and course date does not match
88-
|| $cd->room_booking->begin != $scheduled_events['start'] // Start or Enddate are different
89-
|| $cd->room_booking->end != $scheduled_events['end']
90+
|| $cd->room_booking->begin != $scheduled_events['coursedate_start'] // Start or Enddate are different
91+
|| $cd->room_booking->end != $scheduled_events['coursedate_end']
9092
/* || intval($cd->end_time) < $time */ // TODO: decide whether to remove those records that are expired!
9193
) {
9294

@@ -98,6 +100,25 @@ public function execute($last_result, $parameters = array())
98100
$print_date, $print_course
99101
);
100102

103+
echo 'Grund der Abweichung:' . "\n";
104+
if (empty($cd)) {
105+
echo 'Konnte den zugehörigen Termin nicht finden. Termin-ID: '. $scheduled_events['date_id'] ."\n";
106+
} else if (empty($course)) {
107+
echo 'Konnte den zugehörigen Kurs nicht finden. Kurs-ID: '. $scheduled_events['seminar_id'] ."\n";
108+
} else if (empty($course_config_id)) {
109+
echo 'Konnte die zugehörige Kurskonfiguration nicht finden. Kurs-ID: '. $scheduled_events['seminar_id'] ."\n";
110+
} else if (empty($resource_obj)) {
111+
echo 'Konnte Raum nicht finden. Raum-ID: '. $scheduled_events['resource_id'] ."\n";
112+
} else if (!ScheduleHelper::validateCourseAndResource($scheduled_events['seminar_id'], $resource_obj['config_id'])) {
113+
echo 'Die Opencast-Konfiguration für den Raum und den Kurs unterscheiden sich!' . "\n";
114+
} else if ($cd->room_booking->resource_id != $scheduled_events['resource_id']) {
115+
echo 'Der Raum hat sich geändert. Event: '. $scheduled_events['resource_id'] .', Buchung: '. $cd->room_booking->resource_id ."\n";
116+
} else if ($cd->room_booking->begin != $scheduled_events['coursedate_start']) {
117+
echo 'Die Startzeit ist unterschiedlich! Event: '. date('c', $scheduled_events['coursedate_start']) .', Buchung: '. date('c', $cd->room_booking->begin) . "\n";
118+
} else if ($cd->room_booking->end != $scheduled_events['coursedate_end']) {
119+
echo 'Die Startzeit ist unterschiedlich! Event: '. date('c', $scheduled_events['coursedate_end']) .', Buchung: '. date('c', $cd->room_booking->end) . "\n";
120+
}
121+
101122
$oc_event_id = $scheduled_events['event_id'];
102123
$oc_config_id = $course_config_id;
103124

@@ -125,8 +146,7 @@ public function execute($last_result, $parameters = array())
125146
// Delete the recording in SOP.
126147
ScheduledRecordings::unscheduleRecording($oc_event_id, $scheduled_events['resource_id'], $scheduled_events['date_id']);
127148
} else {
128-
// If validation is passed, we try to update to the record on both sides.
129-
// Update the record.
149+
// If validation is passed, we try to update the record on both sides.
130150
echo sprintf(
131151
"Aktualisiere die Aufzeichnungsdaten am %s für den Kurs %s\n",
132152
$cd->getFullname(), $course->name
@@ -170,16 +190,20 @@ public function execute($last_result, $parameters = array())
170190
} else {
171191
echo _('Nicht über Stud.IP Termine geplante Events:') . "\n";
172192
}
193+
173194
// Loop through the opencast scheduled events that are not yet proccessed above!
174195
// Each set is based on each opencast server config.
175196
foreach ($oc_scheduled_events as $oc_set) {
176197
if (!empty($oc_set['scheduled_events'])) {
177198
echo _('Opencast Server Config:') . " #{$oc_set['config_id']} \n";
178199
foreach ($oc_set['scheduled_events'] as $scheduled_event) {
179-
echo $scheduled_event->identifier . ' ' . $scheduled_event->title . "\n";
180-
if (StudipConfig::get()->OPENCAST_MANAGE_ALL_OC_EVENTS) {
181-
$scheduler_client = SchedulerClient::getInstance($oc_set['config_id']);
182-
$scheduler_client->deleteEvent($scheduled_event->identifier);
200+
// only touch events in the future
201+
if (strtotime($scheduled_event->start) > time()) {
202+
echo $scheduled_event->identifier . ' ' . $scheduled_event->title . "\n";
203+
if (StudipConfig::get()->OPENCAST_MANAGE_ALL_OC_EVENTS) {
204+
$scheduler_client = SchedulerClient::getInstance($oc_set['config_id']);
205+
$scheduler_client->deleteEvent($scheduled_event->identifier);
206+
}
183207
}
184208
}
185209
}

lib/Models/ScheduledRecordings.php

+5
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ public static function setScheduleRecording(
5151
$scheduled_recording = new self();
5252
}
5353

54+
$coursedate_start = $start;
55+
$coursedate_end = $end;
56+
5457
$scheduled_recording->setData(
5558
compact(
5659
'seminar_id',
@@ -60,6 +63,8 @@ public static function setScheduleRecording(
6063
'resource_id',
6164
'start',
6265
'end',
66+
'coursedate_start',
67+
'coursedate_end',
6368
'capture_agent',
6469
'event_id',
6570
'status',
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
class FixCoursedatesScheduling extends Migration
4+
{
5+
public function description()
6+
{
7+
return 'Update missing coursedate_start and coursedate_end';
8+
}
9+
10+
public function up()
11+
{
12+
$db = DBManager::get();
13+
$db->exec('UPDATE oc_scheduled_recordings ocs
14+
JOIN termine ON (termine.termin_id = ocs.date_id)
15+
SET coursedate_start = termine.date, coursedate_end = termine.end_time
16+
WHERE coursedate_start IS NULL'
17+
);
18+
}
19+
20+
public function down()
21+
{
22+
}
23+
}

0 commit comments

Comments
 (0)