diff --git a/src/applications/calendar/application/PhabricatorCalendarApplication.php b/src/applications/calendar/application/PhabricatorCalendarApplication.php --- a/src/applications/calendar/application/PhabricatorCalendarApplication.php +++ b/src/applications/calendar/application/PhabricatorCalendarApplication.php @@ -61,7 +61,7 @@ => 'PhabricatorCalendarEventCancelController', '(?Pjoin|decline|accept)/(?P[1-9]\d*)/' => 'PhabricatorCalendarEventJoinController', - 'comment/(?P[1-9]\d*)/' + 'comment/(?P[1-9]\d*)/(?:(?P\d+)/)?' => 'PhabricatorCalendarEventCommentController', ), ), diff --git a/src/applications/calendar/controller/PhabricatorCalendarEventCommentController.php b/src/applications/calendar/controller/PhabricatorCalendarEventCommentController.php --- a/src/applications/calendar/controller/PhabricatorCalendarEventCommentController.php +++ b/src/applications/calendar/controller/PhabricatorCalendarEventCommentController.php @@ -11,12 +11,14 @@ } public function handleRequest(AphrontRequest $request) { - $user = $request->getUser(); - if (!$request->isFormPost()) { return new Aphront400Response(); } + $user = $request->getUser(); + $is_preview = $request->isPreviewRequest(); + $draft = PhabricatorDraft::buildFromRequest($request); + $event = id(new PhabricatorCalendarEventQuery()) ->setViewer($user) ->withIDs(array($this->id)) @@ -25,8 +27,23 @@ return new Aphront404Response(); } - $is_preview = $request->isPreviewRequest(); - $draft = PhabricatorDraft::buildFromRequest($request); + $index = $request->getURIData('sequence'); + if ($index && !$is_preview) { + $result = $this->getEventAtIndexForGhostPHID( + $user, + $event->getPHID(), + $index); + + if ($result) { + $event = $result; + } else { + $event = $this->createEventFromGhost( + $user, + $event, + $index); + $event->applyViewerTimezone($user); + } + } $view_uri = '/'.$event->getMonogram(); diff --git a/src/applications/calendar/controller/PhabricatorCalendarEventViewController.php b/src/applications/calendar/controller/PhabricatorCalendarEventViewController.php --- a/src/applications/calendar/controller/PhabricatorCalendarEventViewController.php +++ b/src/applications/calendar/controller/PhabricatorCalendarEventViewController.php @@ -16,9 +16,10 @@ public function processRequest() { $request = $this->getRequest(); $viewer = $request->getUser(); - $sequence = $request->getURIData('sequence'); + $timeline = null; + $event = id(new PhabricatorCalendarEventQuery()) ->setViewer($viewer) ->withIDs(array($this->id)) @@ -60,9 +61,11 @@ $crumbs->addTextCrumb($title, '/E'.$event->getID()); } - $timeline = $this->buildTransactionTimeline( - $event, - new PhabricatorCalendarEventTransactionQuery()); + if (!$event->getIsGhostEvent()) { + $timeline = $this->buildTransactionTimeline( + $event, + new PhabricatorCalendarEventTransactionQuery()); + } $header = $this->buildHeaderView($event); $actions = $this->buildActionView($event); @@ -78,13 +81,19 @@ ? pht('Add Comment') : pht('Add To Plate'); $draft = PhabricatorDraft::newFromUserAndKey($viewer, $event->getPHID()); + if ($sequence) { + $comment_uri = $this->getApplicationURI( + '/event/comment/'.$event->getID().'/'.$sequence.'/'); + } else { + $comment_uri = $this->getApplicationURI( + '/event/comment/'.$event->getID().'/'); + } $add_comment_form = id(new PhabricatorApplicationTransactionCommentView()) ->setUser($viewer) ->setObjectPHID($event->getPHID()) ->setDraft($draft) ->setHeaderText($add_comment_header) - ->setAction( - $this->getApplicationURI('/event/comment/'.$event->getID().'/')) + ->setAction($comment_uri) ->setSubmitButtonName(pht('Add Comment')); return $this->buildApplicationPage(