/**
  * Execute a HTTP request to the remote server
  *
  * Returns the result from the remote server. The client sets the correct
  * headers for Basic Auth into the $message transmitted to the inner
  * client.
  *
  * @param string $method
  * @param string $path
  * @param \eZ\Publish\Core\REST\Common\Message $message
  *
  * @return \eZ\Publish\Core\REST\Common\Message
  */
 public function request($method, $path, Message $message = null)
 {
     if ($message === null) {
         $message = new Message();
     }
     $message->headers['Authorization'] = sprintf('Basic %s', base64_encode(sprintf('%s:%s', $this->username, $this->password)));
     return $this->innerClient->request($method, $path, $message);
 }
 /**
  * Execute a HTTP request to the remote server
  *
  * Returns the result from the remote server. The client sets the correct
  * headers for Basic Auth into the $message transmitted to the inner
  * client.
  *
  * @param string $method
  * @param string $path
  * @param \eZ\Publish\Core\REST\Common\Message $message
  *
  * @return \eZ\Publish\Core\REST\Common\Message
  */
 public function request($method, $path, Message $message = null)
 {
     $message = $message ?: new Message();
     $message->headers['X-Test-User'] = $this->userId;
     if ($this->sessionId !== null && !isset($message->headers['X-Test-Session'])) {
         $message->headers['X-Test-Session'] = $this->sessionId;
     }
     return $this->innerClient->request($method, $path, $message);
 }
 /**
  * Deletes $section from content repository.
  *
  * @throws \eZ\Publish\API\Repository\Exceptions\NotFoundException If the specified section is not found
  * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException If the current user user is not allowed to delete a section
  * @throws \eZ\Publish\API\Repository\Exceptions\BadStateException  if section can not be deleted
  *         because it is still assigned to some contents.
  *
  * @param \eZ\Publish\API\Repository\Values\Content\Section $section
  */
 public function deleteSection(Section $section)
 {
     $response = $this->client->request('DELETE', $section->id, new Message(array('Accept' => $this->outputVisitor->getMediaType('Section'))));
     if (!empty($response->body)) {
         $this->inputDispatcher->parse($response);
     }
 }
 /**
  * Returns a collection of Trashed locations contained in the trash.
  *
  * $query allows to filter/sort the elements to be contained in the collection.
  *
  * @param \eZ\Publish\API\Repository\Values\Content\Query $query
  *
  * @return \eZ\Publish\API\Repository\Values\Content\SearchResult
  */
 public function findTrashItems(Query $query)
 {
     $response = $this->client->request('GET', $this->requestParser->generate('trashItems'), new Message(array('Accept' => $this->outputVisitor->getMediaType('LocationList'))));
     $locations = $this->inputDispatcher->parse($response);
     $trashItems = array();
     foreach ($locations as $location) {
         $trashItems[] = $this->buildTrashItem($location);
     }
     return $trashItems;
 }
 /**
  * Returns the roles assigned to the given user group.
  *
  * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException if the authenticated user is not allowed to read a user group
  *
  * @param \eZ\Publish\API\Repository\Values\User\UserGroup $userGroup
  *
  * @return \eZ\Publish\API\Repository\Values\User\UserGroupRoleAssignment[]
  */
 public function getRoleAssignmentsForUserGroup(UserGroup $userGroup)
 {
     $response = $this->client->request('GET', $this->requestParser->generate('groupRoleAssignments'), new Message(array('Accept' => $this->outputVisitor->getMediaType('RoleAssignmentList'))));
     $roleAssignments = $this->inputDispatcher->parse($response);
     $userGroupRoleAssignments = array();
     foreach ($roleAssignments as $roleAssignment) {
         $userGroupRoleAssignments[] = new UserGroupRoleAssignment(array('limitation' => $roleAssignment->getRoleLimitation(), 'role' => $roleAssignment->getRole(), 'userGroup' => $userGroup));
     }
     return $userGroupRoleAssignments;
 }
 /**
  * Gets the object-state of object identified by $contentId.
  *
  * The $state is the id of the state within one group.
  *
  * @param \eZ\Publish\API\Repository\Values\Content\ContentInfo $contentInfo
  * @param \eZ\Publish\API\Repository\Values\ObjectState\ObjectStateGroup $objectStateGroup
  *
  * @return \eZ\Publish\API\Repository\Values\ObjectState\ObjectState
  */
 public function getContentState(ContentInfo $contentInfo, ObjectStateGroup $objectStateGroup)
 {
     $values = $this->requestParser->parse('object', $contentInfo->id);
     $groupValues = $this->requestParser->parse('objectstategroup', $objectStateGroup->id);
     $response = $this->client->request('GET', $this->requestParser->generate('objectObjectStates', array('object' => $values['object'])), new Message(array('Accept' => $this->outputVisitor->getMediaType('ContentObjectStates'))));
     $objectStates = $this->inputDispatcher->parse($response);
     foreach ($objectStates as $state) {
         $stateValues = $this->requestParser->parse('objectstate', $state->id);
         if ($stateValues['objectstategroup'] == $groupValues['objectstategroup']) {
             return $state;
         }
     }
 }
 /**
  * Loads content in a version of the given content object.
  *
  * If no version number is given, the method returns the current version
  *
  * @throws \eZ\Publish\API\Repository\Exceptions\NotFoundException - if the content or version with the given id does not exist
  * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException if the user is not allowed to load this version
  *
  * @param int $contentId
  * @param array $languages A language filter for fields. If not given all languages are returned
  * @param int $versionNo the version number. If not given the current version is returned
  * @param bool $useAlwaysAvailable Add Main language to \$languages if true (default) and if alwaysAvailable is true
  *
  * @return \eZ\Publish\API\Repository\Values\Content\Content
  * @todo Handle $versionNo = null
  * @todo Handle language filters
  */
 public function loadContent($contentId, array $languages = null, $versionNo = null, $useAlwaysAvailable = true)
 {
     // $contentId should already be a URL!
     $contentIdValues = $this->requestParser->parse('object', $contentId);
     $url = '';
     if ($versionNo === null) {
         $url = $this->fetchCurrentVersionUrl($this->requestParser->generate('objectCurrentVersion', array('object' => $contentIdValues['object'])));
     } else {
         $url = $this->requestParser->generate('objectVersion', array('object' => $contentIdValues['object'], 'version' => $versionNo));
     }
     $response = $this->client->request('GET', $url, new Message(array('Accept' => $this->outputVisitor->getMediaType('Version'))));
     return $this->inputDispatcher->parse($response);
 }
 /**
  * Unassign a content type from a group.
  *
  * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException if the user is not allowed to link a content type
  * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException If the content type is not assigned this the given group.
  * @throws \eZ\Publish\API\Repository\Exceptions\BadStateException If $contentTypeGroup is the last group assigned to the content type
  *
  * @param \eZ\Publish\API\Repository\Values\ContentType\ContentType $contentType
  * @param \eZ\Publish\API\Repository\Values\ContentType\ContentTypeGroup $contentTypeGroup
  */
 public function unassignContentTypeGroup(ContentType $contentType, ContentTypeGroup $contentTypeGroup)
 {
     if ($contentType instanceof ContentTypeDraft) {
         $urlValues = $this->requestParser->parse("typeDraft", $contentType->id);
     } else {
         $urlValues = $this->requestParser->parse("type", $contentType->id);
     }
     $groupUrlValues = $this->requestParser->parse("typegroup", $contentTypeGroup->id);
     $urlValues["group"] = $groupUrlValues["typegroup"];
     $response = $this->client->request('DELETE', $this->requestParser->generate('groupOfType', $urlValues), new Message(array('Accept' => $this->outputVisitor->getMediaType('ContentTypeGroupRefList'))));
     if ($this->isErrorResponse($response)) {
         try {
             $this->inputDispatcher->parse($response);
         } catch (ForbiddenException $e) {
             throw new InvalidArgumentException($e->getMessage(), $e->getCode());
         } catch (NotFoundException $e) {
             throw new BadStateException($e->getMessage(), $e->getCode());
         }
     }
 }
 /**
  * Set session ID.
  *
  * Only for testing
  *
  * @param mixed tringid
  *
  * @private
  */
 public function setSession($id)
 {
     if ($this->client instanceof Sessionable) {
         $this->client->setSession($id);
     }
 }
 /**
  * Loads children which are readable by the current user of a location object sorted by sortField and sortOrder
  *
  * @param \eZ\Publish\API\Repository\Values\Content\Location $location
  *
  * @param int $offset the start offset for paging
  * @param int $limit the number of locations returned. If $limit = -1 all children starting at $offset are returned
  *
  * @return \eZ\Publish\API\Repository\Values\Content\LocationList
  */
 public function loadLocationChildren(Location $location, $offset = 0, $limit = -1)
 {
     $values = $this->requestParser->parse('location', $location->id);
     $response = $this->client->request('GET', $this->requestParser->generate('locationChildren', array('location' => $values['location'])), new Message(array('Accept' => $this->outputVisitor->getMediaType('LocationList'))));
     return $this->inputDispatcher->parse($response);
 }