1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-18 21:02:41 +01:00

Export ORGANIZER and ATTENDEE sections in ".ics" files from Calendar

Summary: Ref T10747. This exports these sections when generating an ".ics" file.

Test Plan: {F1832214}

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T10747

Differential Revision: https://secure.phabricator.com/D16558
This commit is contained in:
epriestley 2016-09-15 06:12:31 -07:00
parent 2e1c7da1bf
commit 96f800249b
2 changed files with 58 additions and 3 deletions

View file

@ -22,7 +22,7 @@ final class PhabricatorCalendarEventExportController
if ($request->isFormPost()) { if ($request->isFormPost()) {
$file_name = $event->getMonogram().'.ics'; $file_name = $event->getMonogram().'.ics';
$event_node = $event->newIntermediateEventNode(); $event_node = $event->newIntermediateEventNode($viewer);
$document_node = id(new PhutilCalendarDocumentNode()) $document_node = id(new PhutilCalendarDocumentNode())
->appendChild($event_node); ->appendChild($event_node);

View file

@ -626,7 +626,7 @@ final class PhabricatorCalendarEvent extends PhabricatorCalendarDAO
} }
public function newIntermediateEventNode() { public function newIntermediateEventNode(PhabricatorUser $viewer) {
$base_uri = new PhutilURI(PhabricatorEnv::getProductionURI('/')); $base_uri = new PhutilURI(PhabricatorEnv::getProductionURI('/'));
$domain = $base_uri->getDomain(); $domain = $base_uri->getDomain();
@ -649,6 +649,59 @@ final class PhabricatorCalendarEvent extends PhabricatorCalendarDAO
$date_end->setIsAllDay(true); $date_end->setIsAllDay(true);
} }
$host_phid = $this->getHostPHID();
$invitees = $this->getInvitees();
foreach ($invitees as $key => $invitee) {
if ($invitee->isUninvited()) {
unset($invitees[$key]);
}
}
$phids = array();
$phids[] = $host_phid;
foreach ($invitees as $invitee) {
$phids[] = $invitee->getInviteePHID();
}
$handles = $viewer->loadHandles($phids);
$host_handle = $handles[$host_phid];
$host_name = $host_handle->getFullName();
$host_uri = $host_handle->getURI();
$host_uri = PhabricatorEnv::getURI($host_uri);
$organizer = id(new PhutilCalendarUserNode())
->setName($host_name)
->setURI($host_uri);
$attendees = array();
foreach ($invitees as $invitee) {
$invitee_phid = $invitee->getInviteePHID();
$invitee_handle = $handles[$invitee_phid];
$invitee_name = $invitee_handle->getFullName();
$invitee_uri = $invitee_handle->getURI();
$invitee_uri = PhabricatorEnv::getURI($invitee_uri);
switch ($invitee->getStatus()) {
case PhabricatorCalendarEventInvitee::STATUS_ATTENDING:
$status = PhutilCalendarUserNode::STATUS_ACCEPTED;
break;
case PhabricatorCalendarEventInvitee::STATUS_DECLINED:
$status = PhutilCalendarUserNode::STATUS_DECLINED;
break;
case PhabricatorCalendarEventInvitee::STATUS_INVITED:
default:
$status = PhutilCalendarUserNode::STATUS_INVITED;
break;
}
$attendees[] = id(new PhutilCalendarUserNode())
->setName($invitee_name)
->setURI($invitee_uri)
->setStatus($status);
}
$node = id(new PhutilCalendarEventNode()) $node = id(new PhutilCalendarEventNode())
->setUID($uid) ->setUID($uid)
->setName($this->getName()) ->setName($this->getName())
@ -656,7 +709,9 @@ final class PhabricatorCalendarEvent extends PhabricatorCalendarDAO
->setCreatedDateTime($created) ->setCreatedDateTime($created)
->setModifiedDateTime($modified) ->setModifiedDateTime($modified)
->setStartDateTime($date_start) ->setStartDateTime($date_start)
->setEndDateTime($date_end); ->setEndDateTime($date_end)
->setOrganizer($organizer)
->setAttendees($attendees);
return $node; return $node;
} }