mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-10 00:42:41 +01:00
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
This commit is contained in:
parent
39e252caf5
commit
64c8777026
4 changed files with 46 additions and 13 deletions
|
@ -53,7 +53,7 @@ final class PhabricatorCalendarApplication extends PhabricatorApplication {
|
|||
=> 'PhabricatorCalendarEventEditController',
|
||||
'cancel/(?P<id>[1-9]\d*)/'
|
||||
=> 'PhabricatorCalendarEventCancelController',
|
||||
'join/(?P<id>[1-9]\d*)/'
|
||||
'(?P<action>join|decline|accept)/(?P<id>[1-9]\d*)/'
|
||||
=> 'PhabricatorCalendarEventJoinController',
|
||||
),
|
||||
),
|
||||
|
|
|
@ -65,6 +65,7 @@ final class PhabricatorCalendarEventEditController
|
|||
|
||||
$subscribers = PhabricatorSubscribersQuery::loadSubscribersForPHID(
|
||||
$event->getPHID());
|
||||
|
||||
$invitees = array();
|
||||
foreach ($event->getInvitees() as $invitee) {
|
||||
if ($invitee->isUninvited()) {
|
||||
|
@ -84,12 +85,12 @@ final class PhabricatorCalendarEventEditController
|
|||
$end_value = $end_time->readValueFromRequest($request);
|
||||
$description = $request->getStr('description');
|
||||
$subscribers = $request->getArr('subscribers');
|
||||
|
||||
$invitees = $request->getArr('invitees');
|
||||
$new_invitees = $this->getNewInviteeList($invitees, $event);
|
||||
|
||||
$status_attending = PhabricatorCalendarEventInvitee::STATUS_ATTENDING;
|
||||
if ($this->isCreate()) {
|
||||
$status = idx($new_invitees, $user->getPHID());
|
||||
$status_attending = PhabricatorCalendarEventInvitee::STATUS_ATTENDING;
|
||||
if ($status) {
|
||||
$new_invitees[$user->getPHID()] = $status_attending;
|
||||
}
|
||||
|
@ -256,12 +257,9 @@ final class PhabricatorCalendarEventEditController
|
|||
|
||||
$new = array();
|
||||
foreach ($phids as $phid) {
|
||||
$old_invitee = idx($invitees, $phid);
|
||||
if ($old_invitee) {
|
||||
$old_status = $old_invitee->getStatus();
|
||||
if ($old_status != $uninvited_status) {
|
||||
continue;
|
||||
}
|
||||
$old_status = $event->getUserInviteStatus($phid);
|
||||
if ($old_status != $uninvited_status) {
|
||||
continue;
|
||||
}
|
||||
$new[$phid] = $invited_status;
|
||||
}
|
||||
|
|
|
@ -5,8 +5,14 @@ final class PhabricatorCalendarEventJoinController
|
|||
|
||||
private $id;
|
||||
|
||||
const ACTION_ACCEPT = 'accept';
|
||||
const ACTION_DECLINE = 'decline';
|
||||
const ACTION_JOIN = 'join';
|
||||
|
||||
public function handleRequest(AphrontRequest $request) {
|
||||
$this->id = $request->getURIData('id');
|
||||
$action = $request->getURIData('action');
|
||||
|
||||
$request = $this->getRequest();
|
||||
$viewer = $request->getViewer();
|
||||
$declined_status = PhabricatorCalendarEventInvitee::STATUS_DECLINED;
|
||||
|
@ -54,7 +60,8 @@ final class PhabricatorCalendarEventJoinController
|
|||
}
|
||||
}
|
||||
|
||||
if (!$is_attending) {
|
||||
if (($action == self::ACTION_JOIN && !$is_attending)
|
||||
|| $action == self::ACTION_ACCEPT) {
|
||||
$title = pht('Join Event');
|
||||
$paragraph = pht('Would you like to join this event?');
|
||||
$submit = pht('Join');
|
||||
|
|
|
@ -56,16 +56,44 @@ final class PhabricatorCalendarEventViewController
|
|||
|
||||
private function buildHeaderView(PhabricatorCalendarEvent $event) {
|
||||
$viewer = $this->getRequest()->getUser();
|
||||
$id = $event->getID();
|
||||
|
||||
$is_cancelled = $event->getIsCancelled();
|
||||
$icon = $is_cancelled ? ('fa-times') : ('fa-calendar');
|
||||
$color = $is_cancelled ? ('grey') : ('green');
|
||||
$status = $is_cancelled ? ('Cancelled') : ('Active');
|
||||
|
||||
return id(new PHUIHeaderView())
|
||||
$invite_status = $event->getUserInviteStatus($viewer->getPHID());
|
||||
$status_invited = PhabricatorCalendarEventInvitee::STATUS_INVITED;
|
||||
$is_invite_pending = ($invite_status == $status_invited);
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setUser($viewer)
|
||||
->setHeader($event->getName())
|
||||
->setStatus($icon, $color, $status)
|
||||
->setPolicyObject($event);
|
||||
|
||||
if ($is_invite_pending) {
|
||||
$decline_button = id(new PHUIButtonView())
|
||||
->setTag('a')
|
||||
->setIcon(id(new PHUIIconView())
|
||||
->setIconFont('fa-times grey'))
|
||||
->setHref($this->getApplicationURI("/event/decline/{$id}/"))
|
||||
->setWorkflow(true)
|
||||
->setText(pht('Decline'));
|
||||
|
||||
$accept_button = id(new PHUIButtonView())
|
||||
->setTag('a')
|
||||
->setIcon(id(new PHUIIconView())
|
||||
->setIconFont('fa-check green'))
|
||||
->setHref($this->getApplicationURI("/event/accept/{$id}/"))
|
||||
->setWorkflow(true)
|
||||
->setText(pht('Accept'));
|
||||
|
||||
$header->addActionLink($decline_button)
|
||||
->addActionLink($accept_button);
|
||||
}
|
||||
return $header;
|
||||
}
|
||||
|
||||
private function buildActionView(PhabricatorCalendarEvent $event) {
|
||||
|
@ -153,8 +181,8 @@ final class PhabricatorCalendarEventViewController
|
|||
$item = new PHUIStatusItemView();
|
||||
$invitee_phid = $invitee->getInviteePHID();
|
||||
$target = $viewer->renderHandle($invitee_phid);
|
||||
$item->setNote($invitee->getStatus());
|
||||
$item->setTarget($target);
|
||||
$item->setNote($invitee->getStatus())
|
||||
->setTarget($target);
|
||||
$invitee_list->addItem($item);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue