/** * Restores a trashItem. * * @param $trashItemId * * @throws \eZ\Publish\Core\REST\Server\Exceptions\ForbiddenException * * @return \eZ\Publish\Core\REST\Server\Values\ResourceCreated */ public function restoreTrashItem($trashItemId, Request $request) { $requestDestination = null; try { $requestDestination = $request->headers->get('Destination'); } catch (InvalidArgumentException $e) { // No Destination header } $parentLocation = null; if ($request->headers->has('Destination')) { $locationPathParts = explode('/', $this->requestParser->parseHref($request->headers->get('Destination'), 'locationPath')); try { $parentLocation = $this->locationService->loadLocation(array_pop($locationPathParts)); } catch (NotFoundException $e) { throw new ForbiddenException($e->getMessage()); } } $trashItem = $this->trashService->loadTrashItem($trashItemId); if ($requestDestination === null) { // If we're recovering under the original location // check if it exists, to return "403 Forbidden" in case it does not try { $this->locationService->loadLocation($trashItem->parentLocationId); } catch (NotFoundException $e) { throw new ForbiddenException($e->getMessage()); } } $location = $this->trashService->recover($trashItem, $parentLocation); return new Values\ResourceCreated($this->router->generate('ezpublish_rest_loadLocation', array('locationPath' => trim($location->pathString, '/')))); }
/** * Moves a subtree to a new location * * @param string $locationPath * * @throws \eZ\Publish\Core\REST\Server\Exceptions\BadRequestException if the Destination header cannot be parsed as location or trash * @return \eZ\Publish\Core\REST\Server\Values\ResourceCreated */ public function moveSubtree($locationPath) { $locationToMove = $this->locationService->loadLocation($this->extractLocationIdFromPath($locationPath)); $destinationLocationId = null; $destinationHref = $this->request->headers->get('Destination'); try { // First check to see if the destination is for moving within another subtree $destinationLocationId = $this->extractLocationIdFromPath($this->requestParser->parseHref($destinationHref, 'locationPath')); // We're moving the subtree $destinationLocation = $this->locationService->loadLocation($destinationLocationId); $this->locationService->moveSubtree($locationToMove, $destinationLocation); // Reload the location to get the new position is subtree $locationToMove = $this->locationService->loadLocation($locationToMove->id); return new Values\ResourceCreated($this->router->generate('ezpublish_rest_loadLocation', array('locationPath' => rtrim($locationToMove->pathString, '/')))); } catch (Exceptions\InvalidArgumentException $e) { try { $route = $this->requestParser->parse($destinationHref); if (!isset($route['_route']) || $route['_route'] !== 'ezpublish_rest_loadTrashItems') { throw new Exceptions\InvalidArgumentException(''); } // Trash the subtree $trashItem = $this->trashService->trash($locationToMove); return new Values\ResourceCreated($this->router->generate('ezpublish_rest_loadTrashItem', array('trashItemId' => $trashItem->id))); } catch (Exceptions\InvalidArgumentException $e) { // If that fails, the Destination header is not formatted right // so just throw the BadRequestException throw new BadRequestException("{$destinationHref} is not an acceptable destination"); } } }
/** * 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) { return $this->service->findTrashItems($query); }