示例#1
0
 /**
  * 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, '/'))));
 }
示例#2
0
 /**
  * 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);
 }