Page MenuHomePhabricator

D16272.id39144.diff
No OneTemporary

D16272.id39144.diff

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

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)

Event Timeline