/** * Visit struct returned by controllers. * * @param \eZ\Publish\Core\REST\Common\Output\Visitor $visitor * @param \eZ\Publish\Core\REST\Common\Output\Generator $generator * @param \eZ\Publish\API\Repository\Values\Content\Location $location */ public function visit(Visitor $visitor, Generator $generator, $location) { $generator->startObjectElement('Location'); $visitor->setHeader('Content-Type', $generator->getMediaType('Location')); $visitor->setHeader('Accept-Patch', $generator->getMediaType('LocationUpdate')); $generator->startAttribute('href', $this->router->generate('ezpublish_rest_loadLocation', array('locationPath' => trim($location->pathString, '/')))); $generator->endAttribute('href'); $generator->startValueElement('id', $location->id); $generator->endValueElement('id'); $generator->startValueElement('priority', $location->priority); $generator->endValueElement('priority'); $generator->startValueElement('hidden', $this->serializeBool($generator, $location->hidden)); $generator->endValueElement('hidden'); $generator->startValueElement('invisible', $this->serializeBool($generator, $location->invisible)); $generator->endValueElement('invisible'); $generator->startObjectElement('ParentLocation', 'Location'); if (trim($location->pathString, '/') !== '1') { $generator->startAttribute('href', $this->router->generate('ezpublish_rest_loadLocation', array('locationPath' => implode('/', array_slice($location->path, 0, count($location->path) - 1))))); $generator->endAttribute('href'); } $generator->endObjectElement('ParentLocation'); $generator->startValueElement('pathString', $location->pathString); $generator->endValueElement('pathString'); $generator->startValueElement('depth', $location->depth); $generator->endValueElement('depth'); $generator->startValueElement('childCount', $this->locationService->getLocationChildCount($location)); $generator->endValueElement('childCount'); $generator->startValueElement('remoteId', $location->remoteId); $generator->endValueElement('remoteId'); $generator->startObjectElement('Children', 'LocationList'); $generator->startAttribute('href', $this->router->generate('ezpublish_rest_loadLocationChildren', array('locationPath' => trim($location->pathString, '/')))); $generator->endAttribute('href'); $generator->endObjectElement('Children'); $generator->startObjectElement('Content'); $generator->startAttribute('href', $this->router->generate('ezpublish_rest_loadContent', array('contentId' => $location->contentId))); $generator->endAttribute('href'); $generator->endObjectElement('Content'); $generator->startValueElement('sortField', $this->serializeSortField($location->sortField)); $generator->endValueElement('sortField'); $generator->startValueElement('sortOrder', $this->serializeSortOrder($location->sortOrder)); $generator->endValueElement('sortOrder'); $generator->startObjectElement('UrlAliases', 'UrlAliasRefList'); $generator->startAttribute('href', $this->router->generate('ezpublish_rest_listLocationURLAliases', array('locationPath' => trim($location->pathString, '/')))); $generator->endAttribute('href'); $generator->endObjectElement('UrlAliases'); $generator->startObjectElement('ContentInfo', 'ContentInfo'); $generator->startAttribute('href', $this->router->generate('ezpublish_rest_loadContent', array('contentId' => $location->contentId))); $generator->endAttribute('href'); $visitor->visitValueObject(new RestContentValue($location->contentInfo)); $generator->endObjectElement('ContentInfo'); $generator->endObjectElement('Location'); }
/** * Updates a location. * * @param string $locationPath * * @return \eZ\Publish\Core\REST\Server\Values\RestLocation */ public function updateLocation($locationPath, Request $request) { $locationUpdate = $this->inputDispatcher->parse(new Message(array('Content-Type' => $request->headers->get('Content-Type')), $request->getContent())); $location = $this->locationService->loadLocation($this->extractLocationIdFromPath($locationPath)); // First handle hiding/unhiding so that updating location afterwards // will return updated location with hidden/visible status correctly updated // Exact check for true/false is needed as null signals that no hiding/unhiding // is to be performed if ($locationUpdate->hidden === true) { $this->locationService->hideLocation($location); } elseif ($locationUpdate->hidden === false) { $this->locationService->unhideLocation($location); } return new Values\RestLocation($location = $this->locationService->updateLocation($location, $locationUpdate->locationUpdateStruct), $this->locationService->getLocationChildCount($location)); }
/** * Returns the number of children which are readable by the current user of a location object * * @param \eZ\Publish\API\Repository\Values\Content\Location $location * * @return int */ public function getLocationChildCount(Location $location) { return $this->service->getLocationChildCount($location); }
/** * Returns the trash item given by id. * * @param $trashItemId * * @return \eZ\Publish\Core\REST\Server\Values\RestTrashItem */ public function loadTrashItem($trashItemId) { return new Values\RestTrashItem($trashItem = $this->trashService->loadTrashItem($trashItemId), $this->locationService->getLocationChildCount($trashItem)); }