示例#1
0
 /**
  * Hydrate a new object from an array of data extracted from a returned json
  *
  * @param array $data JSON interpreted data returned by the calendar's api
  *
  * @throws InvalidArgumentException The data is not valid
  * @return static Calendar instance
  */
 public static function hydrate(array $data, User $user = null)
 {
     if (!isset($data['id'], $data['summary'], $data['timeZone'])) {
         throw new InvalidArgumentException(sprintf('Missing at least one of the mandatory properties "id", "summary" or "timeZone" ; got ["%s"]', implode('", "', array_keys($data))));
     }
     $calendar = new static($data['id'], $data['summary'], new DateTimeZone($data['timeZone']));
     if (isset($data['description'])) {
         $calendar->description = $data['description'];
     }
     if (null !== $user && isset($data['accessRole'])) {
         $calendar->addPermission(UserPermission::hydrate($calendar, $user, $data['accessRole']));
     }
     $calendar->raw = $data;
     return $calendar;
 }
示例#2
0
 /** {@inheritDoc} */
 public function getPermissions(AbstractCalendar $calendar, AbstractCriterion $criterion = null)
 {
     $query = new Collection([new Collection([new Field('items', [new Field('id'), new Field('scope'), new Field('role')])], 'fields')]);
     if (null !== $criterion) {
         $query = $query->merge($criterion);
     }
     $response = $this->guzzle->get(sprintf('calendars/%s/acl', $calendar->getId()), ['query' => $query->build()]);
     if (200 > $response->getStatusCode() || 300 <= $response->getStatusCode()) {
         throw new ApiErrorException($response);
     }
     $result = $response->json();
     $list = new ArrayCollection();
     foreach ($result['items'] as $item) {
         // only user scope are supported
         if ('user' !== $item['scope']['type']) {
             continue;
         }
         $user = in_array($item['scope']['value'], $this->adapter->getUser()->getEmail(true)) ? $this->adapter->getUser() : User::hydrate(['email' => $item['scope']['value']]);
         $list[$item['id']] = UserPermission::hydrate($calendar, $user, $item['role']);
     }
     $calendar->setPermissions($list);
     return $list;
 }