@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.)
hq.recaptime.dev/wiki/Phorge
phorge
phabricator
1<?php
2
3$table = new PhabricatorCalendarEvent();
4$conn = $table->establishConnection('w');
5$table_name = 'calendar_event';
6
7foreach (new LiskRawMigrationIterator($conn, $table_name) as $row) {
8 $parameters = phutil_json_decode($row['parameters']);
9 if (isset($parameters['recurrenceRule'])) {
10 // This event has already been migrated.
11 continue;
12 }
13
14 if (!$row['isRecurring']) {
15 continue;
16 }
17
18 $old_rule = $row['recurrenceFrequency'];
19 if (!$old_rule) {
20 continue;
21 }
22
23 try {
24 $frequency = phutil_json_decode($old_rule);
25 if ($frequency) {
26 $frequency_rule = $frequency['rule'];
27 $frequency_rule = phutil_utf8_strtoupper($frequency_rule);
28
29 $rrule = id(new PhutilCalendarRecurrenceRule())
30 ->setFrequency($frequency_rule);
31 }
32 } catch (Exception $ex) {
33 continue;
34 }
35
36 $parameters['recurrenceRule'] = $rrule->toDictionary();
37
38 queryfx(
39 $conn,
40 'UPDATE %T SET parameters = %s WHERE id = %d',
41 $table_name,
42 phutil_json_encode($parameters),
43 $row['id']);
44}