1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-18 19:40:55 +01:00

Make event invitees behave a little better for stub/ghost events

Summary:
Ref T11326. Currently:

  - The month view and day view (ghosts) don't show that you're invited to a child event.
  - The detail view copies the invite list, including attending status, but only //after// it shows the page for the first time.

Instead, for now, just do this:

  - Ghosts/stubs use the parent invite list, but treat everyone as "invited".
  - Materializing a stub just saves the list as-is (i.e., invited, not a copy of attending/declined/etc).

This behavior may need some refining eventually but is at least reasonable (not obviously bad/buggy).

Test Plan:
  - Viewed month/day views, now shown as "invited".
  - Viewed detail view, now invitee list shows up properly.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T11326

Differential Revision: https://secure.phabricator.com/D16758
This commit is contained in:
epriestley 2016-10-27 10:18:04 -07:00
parent 12d29d8206
commit 8e9c20c9ae
2 changed files with 41 additions and 16 deletions

View file

@ -34,25 +34,22 @@ final class PhabricatorCalendarEventEditor
} }
$actor = $this->getActor(); $actor = $this->getActor();
$invitees = $event->getInvitees();
$event->copyFromParent($actor); $event->copyFromParent($actor);
$event->setIsStub(0); $event->setIsStub(0);
$invitees = $event->getParentEvent()->getInvitees(); $event->openTransaction();
$event->save();
foreach ($invitees as $invitee) {
$invitee
->setEventPHID($event->getPHID())
->save();
}
$event->saveTransaction();
$new_invitees = array(); $event->attachInvitees($invitees);
foreach ($invitees as $invitee) {
$invitee = id(new PhabricatorCalendarEventInvitee())
->setEventPHID($event->getPHID())
->setInviteePHID($invitee->getInviteePHID())
->setInviterPHID($invitee->getInviterPHID())
->setStatus($invitee->getStatus())
->save();
$new_invitees[] = $invitee;
}
$event->save();
$event->attachInvitees($new_invitees);
} }
public function getTransactionTypes() { public function getTransactionTypes() {

View file

@ -27,7 +27,6 @@ final class PhabricatorCalendarEvent extends PhabricatorCalendarDAO
protected $isRecurring = 0; protected $isRecurring = 0;
private $isGhostEvent = false;
protected $instanceOfEventPHID; protected $instanceOfEventPHID;
protected $sequenceIndex; protected $sequenceIndex;
@ -60,6 +59,9 @@ final class PhabricatorCalendarEvent extends PhabricatorCalendarDAO
protected $recurrenceEndDate; protected $recurrenceEndDate;
protected $recurrenceFrequency = array(); protected $recurrenceFrequency = array();
private $isGhostEvent = false;
private $stubInvitees;
public static function initializeNewCalendarEvent(PhabricatorUser $actor) { public static function initializeNewCalendarEvent(PhabricatorUser $actor) {
$app = id(new PhabricatorApplicationQuery()) $app = id(new PhabricatorApplicationQuery())
->setViewer($actor) ->setViewer($actor)
@ -449,9 +451,34 @@ final class PhabricatorCalendarEvent extends PhabricatorCalendarDAO
} }
public function getInvitees() { public function getInvitees() {
if ($this->getIsGhostEvent() || $this->getIsStub()) {
if ($this->stubInvitees === null) {
$this->stubInvitees = $this->newStubInvitees();
}
return $this->stubInvitees;
}
return $this->assertAttached($this->invitees); return $this->assertAttached($this->invitees);
} }
private function newStubInvitees() {
$parent = $this->getParentEvent();
$parent_invitees = $parent->getInvitees();
$stub_invitees = array();
foreach ($parent_invitees as $invitee) {
$stub_invitee = id(new PhabricatorCalendarEventInvitee())
->setInviteePHID($invitee->getInviteePHID())
->setInviterPHID($invitee->getInviterPHID())
->setStatus(PhabricatorCalendarEventInvitee::STATUS_INVITED);
$stub_invitees[] = $stub_invitee;
}
return $stub_invitees;
}
public function attachInvitees(array $invitees) { public function attachInvitees(array $invitees) {
$this->invitees = $invitees; $this->invitees = $invitees;
return $this; return $this;
@ -478,6 +505,7 @@ final class PhabricatorCalendarEvent extends PhabricatorCalendarDAO
if (!$invited) { if (!$invited) {
return PhabricatorCalendarEventInvitee::STATUS_UNINVITED; return PhabricatorCalendarEventInvitee::STATUS_UNINVITED;
} }
$invited = $invited->getStatus(); $invited = $invited->getStatus();
return $invited; return $invited;
} }