protected function execute(ConduitAPIRequest $request)
 {
     $user_phid = $request->getUser()->getPHID();
     $from = $request->getValue('fromEpoch');
     $to = $request->getValue('toEpoch');
     if ($to <= $from) {
         throw new ConduitException('ERR-BAD-EPOCH');
     }
     $table = new PhabricatorCalendarEvent();
     $table->openTransaction();
     $table->beginReadLocking();
     $overlap = $table->loadAllWhere('userPHID = %s AND dateFrom < %d AND dateTo > %d', $user_phid, $to, $from);
     foreach ($overlap as $status) {
         if ($status->getDateFrom() < $from) {
             if ($status->getDateTo() > $to) {
                 // Split the interval.
                 id(new PhabricatorCalendarEvent())->setUserPHID($user_phid)->setDateFrom($to)->setDateTo($status->getDateTo())->setStatus($status->getStatus())->setDescription($status->getDescription())->save();
             }
             $status->setDateTo($from);
             $status->save();
         } else {
             if ($status->getDateTo() > $to) {
                 $status->setDateFrom($to);
                 $status->save();
             } else {
                 $status->delete();
             }
         }
     }
     $table->endReadLocking();
     $table->saveTransaction();
     return count($overlap);
 }
 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();
     $invitees = $event->getInvitees();
     $event->copyFromParent($actor);
     $event->setIsStub(0);
     $event->openTransaction();
     $event->save();
     foreach ($invitees as $invitee) {
         $invitee->setEventPHID($event->getPHID())->save();
     }
     $event->saveTransaction();
     $event->attachInvitees($invitees);
 }