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

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

+58 -3
+1 -1
src/applications/calendar/controller/PhabricatorCalendarEventExportController.php
··· 22 22 if ($request->isFormPost()) { 23 23 $file_name = $event->getMonogram().'.ics'; 24 24 25 - $event_node = $event->newIntermediateEventNode(); 25 + $event_node = $event->newIntermediateEventNode($viewer); 26 26 27 27 $document_node = id(new PhutilCalendarDocumentNode()) 28 28 ->appendChild($event_node);
+57 -2
src/applications/calendar/storage/PhabricatorCalendarEvent.php
··· 626 626 } 627 627 628 628 629 - public function newIntermediateEventNode() { 629 + public function newIntermediateEventNode(PhabricatorUser $viewer) { 630 630 $base_uri = new PhutilURI(PhabricatorEnv::getProductionURI('/')); 631 631 $domain = $base_uri->getDomain(); 632 632 ··· 649 649 $date_end->setIsAllDay(true); 650 650 } 651 651 652 + $host_phid = $this->getHostPHID(); 653 + 654 + $invitees = $this->getInvitees(); 655 + foreach ($invitees as $key => $invitee) { 656 + if ($invitee->isUninvited()) { 657 + unset($invitees[$key]); 658 + } 659 + } 660 + 661 + $phids = array(); 662 + $phids[] = $host_phid; 663 + foreach ($invitees as $invitee) { 664 + $phids[] = $invitee->getInviteePHID(); 665 + } 666 + 667 + $handles = $viewer->loadHandles($phids); 668 + 669 + $host_handle = $handles[$host_phid]; 670 + $host_name = $host_handle->getFullName(); 671 + $host_uri = $host_handle->getURI(); 672 + $host_uri = PhabricatorEnv::getURI($host_uri); 673 + 674 + $organizer = id(new PhutilCalendarUserNode()) 675 + ->setName($host_name) 676 + ->setURI($host_uri); 677 + 678 + $attendees = array(); 679 + foreach ($invitees as $invitee) { 680 + $invitee_phid = $invitee->getInviteePHID(); 681 + $invitee_handle = $handles[$invitee_phid]; 682 + $invitee_name = $invitee_handle->getFullName(); 683 + $invitee_uri = $invitee_handle->getURI(); 684 + $invitee_uri = PhabricatorEnv::getURI($invitee_uri); 685 + 686 + switch ($invitee->getStatus()) { 687 + case PhabricatorCalendarEventInvitee::STATUS_ATTENDING: 688 + $status = PhutilCalendarUserNode::STATUS_ACCEPTED; 689 + break; 690 + case PhabricatorCalendarEventInvitee::STATUS_DECLINED: 691 + $status = PhutilCalendarUserNode::STATUS_DECLINED; 692 + break; 693 + case PhabricatorCalendarEventInvitee::STATUS_INVITED: 694 + default: 695 + $status = PhutilCalendarUserNode::STATUS_INVITED; 696 + break; 697 + } 698 + 699 + $attendees[] = id(new PhutilCalendarUserNode()) 700 + ->setName($invitee_name) 701 + ->setURI($invitee_uri) 702 + ->setStatus($status); 703 + } 704 + 652 705 $node = id(new PhutilCalendarEventNode()) 653 706 ->setUID($uid) 654 707 ->setName($this->getName()) ··· 656 709 ->setCreatedDateTime($created) 657 710 ->setModifiedDateTime($modified) 658 711 ->setStartDateTime($date_start) 659 - ->setEndDateTime($date_end); 712 + ->setEndDateTime($date_end) 713 + ->setOrganizer($organizer) 714 + ->setAttendees($attendees); 660 715 661 716 return $node; 662 717 }