/** * 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"); } } }
/** * Sends $location and all its children to trash and returns the corresponding trash item. * * Content is left untouched. * * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException if the user is not allowed to trash the given location * * @param \eZ\Publish\API\Repository\Values\Content\Location $location * * @return \eZ\Publish\API\Repository\Values\Content\TrashItem */ public function trash(Location $location) { $returnValue = $this->service->trash($location); $this->signalDispatcher->emit(new TrashSignal(array('locationId' => $location->id))); return $returnValue; }
/** * Sends $location and all its children to trash and returns the corresponding trash item. * * Content is left untouched. * * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException if the user is not allowed to trash the given location * * @param \eZ\Publish\API\Repository\Values\Content\Location $location * * @return null|\eZ\Publish\API\Repository\Values\Content\TrashItem null if location was deleted, otherwise TrashItem */ public function trash(Location $location) { $returnValue = $this->service->trash($location); $this->signalDispatcher->emit(new TrashSignal(array('locationId' => $location->id, 'parentLocationId' => $location->parentLocationId, 'contentId' => $location->contentId, 'contentTrashed' => $returnValue instanceof TrashItem))); return $returnValue; }