Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15284912
D16272.id39144.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
8 KB
Referenced Files
None
Subscribers
None
D16272.id39144.diff
View Options
diff --git a/src/applications/calendar/controller/PhabricatorCalendarEventJoinController.php b/src/applications/calendar/controller/PhabricatorCalendarEventJoinController.php
--- a/src/applications/calendar/controller/PhabricatorCalendarEventJoinController.php
+++ b/src/applications/calendar/controller/PhabricatorCalendarEventJoinController.php
@@ -3,18 +3,9 @@
final class PhabricatorCalendarEventJoinController
extends PhabricatorCalendarController {
- const ACTION_ACCEPT = 'accept';
- const ACTION_DECLINE = 'decline';
- const ACTION_JOIN = 'join';
-
public function handleRequest(AphrontRequest $request) {
+ $viewer = $this->getViewer();
$id = $request->getURIData('id');
- $action = $request->getURIData('action');
-
- $request = $this->getRequest();
- $viewer = $request->getViewer();
- $declined_status = PhabricatorCalendarEventInvitee::STATUS_DECLINED;
- $attending_status = PhabricatorCalendarEventInvitee::STATUS_ATTENDING;
$event = id(new PhabricatorCalendarEventQuery())
->setViewer($viewer)
@@ -25,34 +16,31 @@
}
$cancel_uri = $event->getURI();
- $validation_exception = null;
- $is_attending = $event->getIsUserAttending($viewer->getPHID());
+ $action = $request->getURIData('action');
+ switch ($action) {
+ case 'accept':
+ $is_join = true;
+ break;
+ case 'decline':
+ $is_join = false;
+ break;
+ default:
+ $is_join = !$event->getIsUserAttending($viewer->getPHID());
+ break;
+ }
+ $validation_exception = null;
if ($request->isFormPost()) {
- $new_status = null;
-
- switch ($action) {
- case self::ACTION_ACCEPT:
- $new_status = $attending_status;
- break;
- case self::ACTION_JOIN:
- if ($is_attending) {
- $new_status = $declined_status;
- } else {
- $new_status = $attending_status;
- }
- break;
- case self::ACTION_DECLINE:
- $new_status = $declined_status;
- break;
+ if ($is_join) {
+ $xaction_type = PhabricatorCalendarEventTransaction::TYPE_ACCEPT;
+ } else {
+ $xaction_type = PhabricatorCalendarEventTransaction::TYPE_DECLINE;
}
- $new_status = array($viewer->getPHID() => $new_status);
-
$xaction = id(new PhabricatorCalendarEventTransaction())
- ->setTransactionType(PhabricatorCalendarEventTransaction::TYPE_INVITE)
- ->setNewValue($new_status);
+ ->setTransactionType($xaction_type)
+ ->setNewValue(true);
$editor = id(new PhabricatorCalendarEventEditor())
->setActor($viewer)
@@ -68,8 +56,7 @@
}
}
- if (($action == self::ACTION_JOIN && !$is_attending)
- || $action == self::ACTION_ACCEPT) {
+ if ($is_join) {
$title = pht('Join Event');
$paragraph = pht('Would you like to join this event?');
$submit = pht('Join');
diff --git a/src/applications/calendar/editor/PhabricatorCalendarEventEditor.php b/src/applications/calendar/editor/PhabricatorCalendarEventEditor.php
--- a/src/applications/calendar/editor/PhabricatorCalendarEventEditor.php
+++ b/src/applications/calendar/editor/PhabricatorCalendarEventEditor.php
@@ -68,6 +68,8 @@
$types[] = PhabricatorCalendarEventTransaction::TYPE_INVITE;
$types[] = PhabricatorCalendarEventTransaction::TYPE_ALL_DAY;
$types[] = PhabricatorCalendarEventTransaction::TYPE_ICON;
+ $types[] = PhabricatorCalendarEventTransaction::TYPE_ACCEPT;
+ $types[] = PhabricatorCalendarEventTransaction::TYPE_DECLINE;
$types[] = PhabricatorCalendarEventTransaction::TYPE_RECURRING;
$types[] = PhabricatorCalendarEventTransaction::TYPE_FREQUENCY;
@@ -104,6 +106,10 @@
return (int)$object->getIsAllDay();
case PhabricatorCalendarEventTransaction::TYPE_ICON:
return $object->getIcon();
+ case PhabricatorCalendarEventTransaction::TYPE_ACCEPT:
+ case PhabricatorCalendarEventTransaction::TYPE_DECLINE:
+ $actor_phid = $this->getActingAsPHID();
+ return $object->getUserInviteStatus($actor_phid);
case PhabricatorCalendarEventTransaction::TYPE_INVITE:
$map = $xaction->getNewValue();
$phids = array_keys($map);
@@ -136,6 +142,10 @@
case PhabricatorCalendarEventTransaction::TYPE_INVITE:
case PhabricatorCalendarEventTransaction::TYPE_ICON:
return $xaction->getNewValue();
+ case PhabricatorCalendarEventTransaction::TYPE_ACCEPT:
+ return PhabricatorCalendarEventInvitee::STATUS_ATTENDING;
+ case PhabricatorCalendarEventTransaction::TYPE_DECLINE:
+ return PhabricatorCalendarEventInvitee::STATUS_DECLINED;
case PhabricatorCalendarEventTransaction::TYPE_ALL_DAY:
return (int)$xaction->getNewValue();
case PhabricatorCalendarEventTransaction::TYPE_RECURRENCE_END_DATE:
@@ -181,6 +191,8 @@
$object->setIcon($xaction->getNewValue());
return;
case PhabricatorCalendarEventTransaction::TYPE_INVITE:
+ case PhabricatorCalendarEventTransaction::TYPE_ACCEPT:
+ case PhabricatorCalendarEventTransaction::TYPE_DECLINE:
return;
}
@@ -223,6 +235,28 @@
}
$object->attachInvitees($invitees);
return;
+ case PhabricatorCalendarEventTransaction::TYPE_ACCEPT:
+ case PhabricatorCalendarEventTransaction::TYPE_DECLINE:
+ $acting_phid = $this->getActingAsPHID();
+
+ $invitees = $object->getInvitees();
+ $invitees = mpull($invitees, null, 'getInviteePHID');
+
+ $invitee = idx($invitees, $acting_phid);
+ if (!$invitee) {
+ $invitee = id(new PhabricatorCalendarEventInvitee())
+ ->setEventPHID($object->getPHID())
+ ->setInviteePHID($acting_phid)
+ ->setInviterPHID($acting_phid);
+ $invitees[$acting_phid] = $invitee;
+ }
+
+ $invitee
+ ->setStatus($xaction->getNewValue())
+ ->save();
+
+ $object->attachInvitees($invitees);
+ return;
}
return parent::applyCustomExternalTransaction($object, $xaction);
@@ -252,6 +286,12 @@
// caches for all attendees.
$invalidate_all = true;
break;
+
+ case PhabricatorCalendarEventTransaction::TYPE_ACCEPT:
+ case PhabricatorCalendarEventTransaction::TYPE_DECLINE:
+ $acting_phid = $this->getActingAsPHID();
+ $invalidate_phids[$acting_phid] = $acting_phid;
+ break;
case PhabricatorCalendarEventTransaction::TYPE_INVITE:
foreach ($xaction->getNewValue() as $phid => $ignored) {
$invalidate_phids[$phid] = $phid;
diff --git a/src/applications/calendar/storage/PhabricatorCalendarEventTransaction.php b/src/applications/calendar/storage/PhabricatorCalendarEventTransaction.php
--- a/src/applications/calendar/storage/PhabricatorCalendarEventTransaction.php
+++ b/src/applications/calendar/storage/PhabricatorCalendarEventTransaction.php
@@ -11,11 +11,14 @@
const TYPE_ALL_DAY = 'calendar.allday';
const TYPE_ICON = 'calendar.icon';
const TYPE_INVITE = 'calendar.invite';
+ const TYPE_ACCEPT = 'calendar.accept';
+ const TYPE_DECLINE = 'calendar.decline';
const TYPE_RECURRING = 'calendar.recurring';
const TYPE_FREQUENCY = 'calendar.frequency';
const TYPE_RECURRENCE_END_DATE = 'calendar.recurrenceenddate';
+
const MAILTAG_RESCHEDULE = 'calendar-reschedule';
const MAILTAG_CONTENT = 'calendar-content';
const MAILTAG_OTHER = 'calendar-other';
@@ -163,6 +166,14 @@
'%s reinstated this event.',
$this->renderHandleLink($author_phid));
}
+ case self::TYPE_ACCEPT:
+ return pht(
+ '%s is attending this event.',
+ $this->renderHandleLink($author_phid));
+ case self::TYPE_DECLINE:
+ return pht(
+ '%s declined this event.',
+ $this->renderHandleLink($author_phid));
case self::TYPE_INVITE:
$text = null;
@@ -363,6 +374,16 @@
$this->renderHandleLink($author_phid),
$this->renderHandleLink($object_phid));
}
+ case self::TYPE_ACCEPT:
+ return pht(
+ '%s is attending %s.',
+ $this->renderHandleLink($author_phid),
+ $this->renderHandleLink($object_phid));
+ case self::TYPE_DECLINE:
+ return pht(
+ '%s declined %s.',
+ $this->renderHandleLink($author_phid),
+ $this->renderHandleLink($object_phid));
case self::TYPE_INVITE:
$text = null;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Mar 5, 10:55 AM (2 w, 1 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7225226
Default Alt Text
D16272.id39144.diff (8 KB)
Attached To
Mode
D16272: Create separate "Accept" and "Decline" transactions for Calendar
Attached
Detach File
Event Timeline
Log In to Comment