@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
fork

Configure Feed

Select the types of activity you want to include in your feed.

Ability to RSVP to event

Summary: Closes T7986, Ability to RSVP to event.

Test Plan: Create event, invite users, invited users should see buttons on event detail header to accept/decline. Accepting/declining reflects in the invitee status in the property list.

Reviewers: #blessed_reviewers, epriestley

Reviewed By: #blessed_reviewers, epriestley

Subscribers: Korvin, epriestley

Maniphest Tasks: T7986

Differential Revision: https://secure.phabricator.com/D12619

+46 -13
+1 -1
src/applications/calendar/application/PhabricatorCalendarApplication.php
··· 53 53 => 'PhabricatorCalendarEventEditController', 54 54 'cancel/(?P<id>[1-9]\d*)/' 55 55 => 'PhabricatorCalendarEventCancelController', 56 - 'join/(?P<id>[1-9]\d*)/' 56 + '(?P<action>join|decline|accept)/(?P<id>[1-9]\d*)/' 57 57 => 'PhabricatorCalendarEventJoinController', 58 58 ), 59 59 ),
+6 -8
src/applications/calendar/controller/PhabricatorCalendarEventEditController.php
··· 65 65 66 66 $subscribers = PhabricatorSubscribersQuery::loadSubscribersForPHID( 67 67 $event->getPHID()); 68 + 68 69 $invitees = array(); 69 70 foreach ($event->getInvitees() as $invitee) { 70 71 if ($invitee->isUninvited()) { ··· 84 85 $end_value = $end_time->readValueFromRequest($request); 85 86 $description = $request->getStr('description'); 86 87 $subscribers = $request->getArr('subscribers'); 88 + 87 89 $invitees = $request->getArr('invitees'); 88 90 $new_invitees = $this->getNewInviteeList($invitees, $event); 89 - 91 + $status_attending = PhabricatorCalendarEventInvitee::STATUS_ATTENDING; 90 92 if ($this->isCreate()) { 91 93 $status = idx($new_invitees, $user->getPHID()); 92 - $status_attending = PhabricatorCalendarEventInvitee::STATUS_ATTENDING; 93 94 if ($status) { 94 95 $new_invitees[$user->getPHID()] = $status_attending; 95 96 } ··· 256 257 257 258 $new = array(); 258 259 foreach ($phids as $phid) { 259 - $old_invitee = idx($invitees, $phid); 260 - if ($old_invitee) { 261 - $old_status = $old_invitee->getStatus(); 262 - if ($old_status != $uninvited_status) { 263 - continue; 264 - } 260 + $old_status = $event->getUserInviteStatus($phid); 261 + if ($old_status != $uninvited_status) { 262 + continue; 265 263 } 266 264 $new[$phid] = $invited_status; 267 265 }
+8 -1
src/applications/calendar/controller/PhabricatorCalendarEventJoinController.php
··· 5 5 6 6 private $id; 7 7 8 + const ACTION_ACCEPT = 'accept'; 9 + const ACTION_DECLINE = 'decline'; 10 + const ACTION_JOIN = 'join'; 11 + 8 12 public function handleRequest(AphrontRequest $request) { 9 13 $this->id = $request->getURIData('id'); 14 + $action = $request->getURIData('action'); 15 + 10 16 $request = $this->getRequest(); 11 17 $viewer = $request->getViewer(); 12 18 $declined_status = PhabricatorCalendarEventInvitee::STATUS_DECLINED; ··· 54 60 } 55 61 } 56 62 57 - if (!$is_attending) { 63 + if (($action == self::ACTION_JOIN && !$is_attending) 64 + || $action == self::ACTION_ACCEPT) { 58 65 $title = pht('Join Event'); 59 66 $paragraph = pht('Would you like to join this event?'); 60 67 $submit = pht('Join');
+31 -3
src/applications/calendar/controller/PhabricatorCalendarEventViewController.php
··· 56 56 57 57 private function buildHeaderView(PhabricatorCalendarEvent $event) { 58 58 $viewer = $this->getRequest()->getUser(); 59 + $id = $event->getID(); 60 + 59 61 $is_cancelled = $event->getIsCancelled(); 60 62 $icon = $is_cancelled ? ('fa-times') : ('fa-calendar'); 61 63 $color = $is_cancelled ? ('grey') : ('green'); 62 64 $status = $is_cancelled ? ('Cancelled') : ('Active'); 63 65 64 - return id(new PHUIHeaderView()) 66 + $invite_status = $event->getUserInviteStatus($viewer->getPHID()); 67 + $status_invited = PhabricatorCalendarEventInvitee::STATUS_INVITED; 68 + $is_invite_pending = ($invite_status == $status_invited); 69 + 70 + $header = id(new PHUIHeaderView()) 65 71 ->setUser($viewer) 66 72 ->setHeader($event->getName()) 67 73 ->setStatus($icon, $color, $status) 68 74 ->setPolicyObject($event); 75 + 76 + if ($is_invite_pending) { 77 + $decline_button = id(new PHUIButtonView()) 78 + ->setTag('a') 79 + ->setIcon(id(new PHUIIconView()) 80 + ->setIconFont('fa-times grey')) 81 + ->setHref($this->getApplicationURI("/event/decline/{$id}/")) 82 + ->setWorkflow(true) 83 + ->setText(pht('Decline')); 84 + 85 + $accept_button = id(new PHUIButtonView()) 86 + ->setTag('a') 87 + ->setIcon(id(new PHUIIconView()) 88 + ->setIconFont('fa-check green')) 89 + ->setHref($this->getApplicationURI("/event/accept/{$id}/")) 90 + ->setWorkflow(true) 91 + ->setText(pht('Accept')); 92 + 93 + $header->addActionLink($decline_button) 94 + ->addActionLink($accept_button); 95 + } 96 + return $header; 69 97 } 70 98 71 99 private function buildActionView(PhabricatorCalendarEvent $event) { ··· 153 181 $item = new PHUIStatusItemView(); 154 182 $invitee_phid = $invitee->getInviteePHID(); 155 183 $target = $viewer->renderHandle($invitee_phid); 156 - $item->setNote($invitee->getStatus()); 157 - $item->setTarget($target); 184 + $item->setNote($invitee->getStatus()) 185 + ->setTarget($target); 158 186 $invitee_list->addItem($item); 159 187 } 160 188