private function materializeStub(PhabricatorCalendarEvent $event)
 {
     if (!$event->getIsStub()) {
         throw new Exception(pht('Can not materialize an event stub: this event is not a stub.'));
     }
     $actor = $this->getActor();
     $event->copyFromParent($actor);
     $event->setIsStub(0);
     $invitees = $event->getParentEvent()->getInvitees();
     $new_invitees = array();
     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);
 }
 private function buildRecurringSection(PhabricatorCalendarEvent $event)
 {
     $viewer = $this->getViewer();
     if (!$event->getIsRecurring()) {
         return null;
     }
     $properties = id(new PHUIPropertyListView())->setUser($viewer);
     $is_parent = $event->isParentEvent();
     if ($is_parent) {
         $parent_link = null;
     } else {
         $parent = $event->getParentEvent();
         $parent_link = $viewer->renderHandle($parent->getPHID())->render();
     }
     $rule = $event->getFrequencyRule();
     switch ($rule) {
         case PhabricatorCalendarEvent::FREQUENCY_DAILY:
             if ($is_parent) {
                 $message = pht('This event repeats every day.');
             } else {
                 $message = pht('This event is an instance of %s, and repeats every day.', $parent_link);
             }
             break;
         case PhabricatorCalendarEvent::FREQUENCY_WEEKLY:
             if ($is_parent) {
                 $message = pht('This event repeats every week.');
             } else {
                 $message = pht('This event is an instance of %s, and repeats every week.', $parent_link);
             }
             break;
         case PhabricatorCalendarEvent::FREQUENCY_MONTHLY:
             if ($is_parent) {
                 $message = pht('This event repeats every month.');
             } else {
                 $message = pht('This event is an instance of %s, and repeats every month.', $parent_link);
             }
             break;
         case PhabricatorCalendarEvent::FREQUENCY_YEARLY:
             if ($is_parent) {
                 $message = pht('This event repeats every year.');
             } else {
                 $message = pht('This event is an instance of %s, and repeats every year.', $parent_link);
             }
             break;
     }
     $properties->addProperty(pht('Event Series'), $message);
     return $properties;
 }