/**
  * Patch a calendar from request
  * @param \OCA\Calendar\ICalendar $newCalendar
  * @param \OCA\Calendar\ICalendar $oldCalendar
  * @return \OCA\Calendar\ICalendar
  */
 public function patch(ICalendar $newCalendar, ICalendar $oldCalendar)
 {
     $newCalendar->setId($oldCalendar->getId());
     $newCalendar->setPrivateUri($oldCalendar->getPrivateUri());
     $this->resetReadOnlyProperties($newCalendar, $oldCalendar);
     if ($newCalendar->doesContainNullValues()) {
         $newCalendar = $oldCalendar->overwriteWith($newCalendar);
     }
     /** @var \OCA\Calendar\ICalendar $newCalendar */
     return parent::update($newCalendar);
 }
 /**
  * @param ICalendar &$calendar
  * @param callable $doesExist
  * @param boolean $isPublicUri
  */
 public static function generateURI(ICalendar &$calendar, \closure $doesExist, $isPublicUri = true)
 {
     if ($isPublicUri === true) {
         $uri = $calendar->getPublicUri();
     } else {
         $uri = $calendar->getPrivateUri();
     }
     if ($uri === null) {
         $uri = mb_strtolower($calendar->getDisplayname());
     }
     $uri = CalendarUtility::slugify($uri);
     while ($doesExist($uri)) {
         $newUri = self::suggestUri($uri);
         if ($newUri === $uri) {
             break;
         }
         $uri = $newUri;
     }
     if ($isPublicUri) {
         $calendar->setPublicUri($uri);
     } else {
         $calendar->setPrivateUri($uri);
     }
 }