MDL-58810 calendar: Fix rrule_manager issues
* Set the correct repeat ID for the recurring event * Unset UUID for 'child' events of recurring events
This commit is contained in:
@@ -244,13 +244,16 @@ class rrule_manager {
|
||||
// Generate timestamps that obey the rrule.
|
||||
$eventtimes = $this->generate_recurring_event_times($eventrec);
|
||||
|
||||
// Adjust the parent event's timestart, if necessary.
|
||||
// Update the parent event. Make sure that its repeat ID is the same as its ID.
|
||||
$calevent = new calendar_event($eventrec);
|
||||
$updatedata = new stdClass();
|
||||
$updatedata->repeatid = $event->id;
|
||||
// Also, adjust the parent event's timestart, if necessary.
|
||||
if (count($eventtimes) > 0 && !in_array($eventrec->timestart, $eventtimes)) {
|
||||
$calevent = new calendar_event($eventrec);
|
||||
$updatedata = (object)['timestart' => $eventtimes[0], 'repeatid' => $eventrec->id];
|
||||
$calevent->update($updatedata, false);
|
||||
$eventrec->timestart = $calevent->timestart;
|
||||
$updatedata->timestart = reset($eventtimes);
|
||||
}
|
||||
$calevent->update($updatedata, false);
|
||||
$eventrec->timestart = $calevent->timestart;
|
||||
|
||||
// Create the recurring calendar events.
|
||||
$this->create_recurring_events($eventrec, $eventtimes);
|
||||
@@ -720,6 +723,8 @@ class rrule_manager {
|
||||
$cloneevent->repeatid = $event->id;
|
||||
$cloneevent->timestart = $time;
|
||||
unset($cloneevent->id);
|
||||
// UUID should only be set on the first instance of the recurring events.
|
||||
unset($cloneevent->uuid);
|
||||
calendar_event::create($cloneevent, false);
|
||||
}
|
||||
|
||||
|
||||
@@ -2525,5 +2525,27 @@ function xmldb_main_upgrade($oldversion) {
|
||||
upgrade_main_savepoint(true, 2016120501.06);
|
||||
}
|
||||
|
||||
if ($oldversion < 2016120503.01) {
|
||||
// Get the list of parent event IDs.
|
||||
$sql = "SELECT DISTINCT repeatid
|
||||
FROM {event}
|
||||
WHERE repeatid <> 0";
|
||||
$parentids = array_keys($DB->get_records_sql($sql));
|
||||
// Check if there are repeating events we need to process.
|
||||
if (!empty($parentids)) {
|
||||
// The repeat IDs of parent events should match their own ID.
|
||||
// So we need to update parent events that have non-matching IDs and repeat IDs.
|
||||
list($insql, $params) = $DB->get_in_or_equal($parentids);
|
||||
$updatesql = "UPDATE {event}
|
||||
SET repeatid = id
|
||||
WHERE id <> repeatid
|
||||
AND id $insql";
|
||||
$DB->execute($updatesql, $params);
|
||||
}
|
||||
|
||||
// Main savepoint reached.
|
||||
upgrade_main_savepoint(true, 2016120503.01);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$version = 2016120503.00; // YYYYMMDD = weekly release date of this DEV branch.
|
||||
$version = 2016120503.01; // YYYYMMDD = weekly release date of this DEV branch.
|
||||
// RR = release increments - 00 in DEV branches.
|
||||
// .XX = incremental changes.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user