/** * 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); }