Page MenuHomePhabricator

D16311.id39245.diff
No OneTemporary

D16311.id39245.diff

diff --git a/resources/sql/autopatches/20160720.calendar.invitetxn.php b/resources/sql/autopatches/20160720.calendar.invitetxn.php
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20160720.calendar.invitetxn.php
@@ -0,0 +1,37 @@
+<?php
+
+$table = new PhabricatorCalendarEventTransaction();
+$conn_w = $table->establishConnection('w');
+
+echo pht(
+ "Restructuring calendar invite transactions...\n");
+
+foreach (new LiskMigrationIterator($table) as $txn) {
+ $type = PhabricatorCalendarEventInviteTransaction::TRANSACTIONTYPE;
+ if ($txn->getTransactionType() != $type) {
+ continue;
+ }
+
+ $old_value = array_keys($txn->getOldValue());
+
+ $orig_new = $txn->getNewValue();
+ $status_uninvited = 'uninvited';
+ foreach ($orig_new as $key => $status) {
+ if ($status == $status_uninvited) {
+ unset($orig_new[$key]);
+ }
+ }
+ $new_value = array_keys($orig_new);
+
+ queryfx(
+ $conn_w,
+ 'UPDATE %T SET '.
+ 'oldValue = %s, newValue = %s'.
+ 'WHERE id = %d',
+ $table->getTableName(),
+ phutil_json_encode($old_value),
+ phutil_json_encode($new_value),
+ $txn->getID());
+}
+
+echo pht('Done.')."\n";
diff --git a/src/applications/calendar/xaction/PhabricatorCalendarEventInviteTransaction.php b/src/applications/calendar/xaction/PhabricatorCalendarEventInviteTransaction.php
--- a/src/applications/calendar/xaction/PhabricatorCalendarEventInviteTransaction.php
+++ b/src/applications/calendar/xaction/PhabricatorCalendarEventInviteTransaction.php
@@ -15,31 +15,25 @@
}
}
- return mpull($invitees, 'getStatus', 'getInviteePHID');
+ return array_values(mpull($invitees, 'getInviteePHID'));
}
- public function generateNewValue($object, $value) {
+ private function generateChangeMap($object, $new_value) {
$status_invited = PhabricatorCalendarEventInvitee::STATUS_INVITED;
$status_uninvited = PhabricatorCalendarEventInvitee::STATUS_UNINVITED;
$status_attending = PhabricatorCalendarEventInvitee::STATUS_ATTENDING;
- $invitees = $this->generateOldValue($object);
+ $old = $this->generateOldValue($object);
- $new = array_fuse($value);
+ $add = array_diff($new_value, $old);
+ $rem = array_diff($old, $new_value);
- $all = array_keys($invitees + $new);
$map = array();
- foreach ($all as $phid) {
- $is_old = isset($invitees[$phid]);
- $is_new = isset($new[$phid]);
-
- if ($is_old && !$is_new) {
- $map[$phid] = $status_uninvited;
- } else if (!$is_old && $is_new) {
+ foreach ($add as $phid) {
$map[$phid] = $status_invited;
- } else {
- $map[$phid] = $invitees[$phid];
- }
+ }
+ foreach ($rem as $phid) {
+ $map[$phid] = $status_uninvited;
}
// If we're creating this event and the actor is inviting themselves,
@@ -55,11 +49,12 @@
}
public function applyExternalEffects($object, $value) {
- $phids = array_keys($value);
+ $map = $this->generateChangeMap($object, $value);
+
$invitees = $object->getInvitees();
$invitees = mpull($invitees, null, 'getInviteePHID');
- foreach ($phids as $phid) {
+ foreach ($map as $phid => $status) {
$invitee = idx($invitees, $phid);
if (!$invitee) {
$invitee = id(new PhabricatorCalendarEventInvitee())
@@ -68,7 +63,7 @@
->setInviterPHID($this->getActingAsPHID());
$invitees[] = $invitee;
}
- $invitee->setStatus($value[$phid])
+ $invitee->setStatus($status)
->save();
}
@@ -179,11 +174,8 @@
$old = $this->getOldValue();
$new = $this->getNewValue();
- $add = array_diff_key($new, $old);
- $rem = array_diff_key($old, $new);
-
- $add = array_keys($add);
- $rem = array_keys($rem);
+ $add = array_diff($new, $old);
+ $rem = array_diff($old, $new);
return array(array_fuse($add), array_fuse($rem));
}

File Metadata

Mime Type
text/plain
Expires
Tue, Nov 12, 10:28 PM (4 d, 23 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6723423
Default Alt Text
D16311.id39245.diff (3 KB)

Event Timeline