Page MenuHomePhabricator

D16955.id.diff
No OneTemporary

D16955.id.diff

diff --git a/src/applications/calendar/xaction/PhabricatorCalendarEventDateTransaction.php b/src/applications/calendar/xaction/PhabricatorCalendarEventDateTransaction.php
--- a/src/applications/calendar/xaction/PhabricatorCalendarEventDateTransaction.php
+++ b/src/applications/calendar/xaction/PhabricatorCalendarEventDateTransaction.php
@@ -22,6 +22,35 @@
->toDictionary();
}
+ public function getTransactionHasEffect($object, $old, $new) {
+ $editor = $this->getEditor();
+
+ $actor = $this->getActor();
+ $actor_timezone = $actor->getTimezoneIdentifier();
+
+ // When an edit only changes the timezone of an event without materially
+ // changing the absolute time, discard it. This can happen if two users in
+ // different timezones edit an event without rescheduling it.
+
+ // Eventually, after T11073, there may be a UI control to adjust timezones.
+ // If a user explicitly changed the timezone, we should respect that.
+ // However, there is no way for users to intentionally apply this kind of
+ // edit today.
+
+ $old_datetime = PhutilCalendarAbsoluteDateTime::newFromDictionary($old)
+ ->setIsAllDay($editor->getNewIsAllDay())
+ ->setViewerTimezone($actor_timezone);
+
+ $new_datetime = PhutilCalendarAbsoluteDateTime::newFromDictionary($new)
+ ->setIsAllDay($editor->getNewIsAllDay())
+ ->setViewerTimezone($actor_timezone);
+
+ $old_epoch = $old_datetime->getEpoch();
+ $new_epoch = $new_datetime->getEpoch();
+
+ return ($old_epoch !== $new_epoch);
+ }
+
public function validateTransactions($object, array $xactions) {
$errors = array();
diff --git a/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php b/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php
--- a/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php
+++ b/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php
@@ -502,6 +502,15 @@
return false;
}
+ $type = $xaction->getTransactionType();
+ $xtype = $this->getModularTransactionType($type);
+ if ($xtype) {
+ return $xtype->getTransactionHasEffect(
+ $object,
+ $xaction->getOldValue(),
+ $xaction->getNewValue());
+ }
+
return ($xaction->getOldValue() !== $xaction->getNewValue());
}
diff --git a/src/applications/transactions/storage/PhabricatorModularTransactionType.php b/src/applications/transactions/storage/PhabricatorModularTransactionType.php
--- a/src/applications/transactions/storage/PhabricatorModularTransactionType.php
+++ b/src/applications/transactions/storage/PhabricatorModularTransactionType.php
@@ -35,6 +35,10 @@
return;
}
+ public function getTransactionHasEffect($object, $old, $new) {
+ return ($old !== $new);
+ }
+
public function extractFilePHIDs($object, $value) {
return array();
}

File Metadata

Mime Type
text/plain
Expires
Sun, May 12, 9:10 PM (1 w, 3 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6284677
Default Alt Text
D16955.id.diff (2 KB)

Event Timeline