public function moveSubtree($locationPath, Request $request)
    {
        $locationToMove = $this->locationService->loadLocation(
            $this->extractLocationIdFromPath($locationPath)
        );

        $destinationLocationId = null;
        $destinationHref = $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' => trim($locationToMove->pathString, '/'),
                    )
                )
            );
        } catch (Exceptions\InvalidArgumentException $e) {
            // If parsing of destination fails, let's try to see if destination is trash
            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);

                if (isset($trashItem)) {
                    return new Values\ResourceCreated(
                        $this->router->generate(
                            'ezpublish_rest_loadTrashItem',
                            array('trashItemId' => $trashItem->id)
                        )
                    );
                } else {
                    // Only a location has been trashed and not the object
                    return new Values\NoContent();
                }
            } 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");
            }
        }
    }
public function moveSubtree($locationPath, Request $request)
    {
        $locationToMove = $this->locationService->loadLocation(
            $this->extractLocationIdFromPath($locationPath)
        );

        $destinationLocationId = null;
        $destinationHref = $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' => trim($locationToMove->pathString, '/'),
                    )
                )
            );
        } catch (Exceptions\InvalidArgumentException $e) {
            // If parsing of destination fails, let's try to see if destination is trash
            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);

                if (isset($trashItem)) {
                    return new Values\ResourceCreated(
                        $this->router->generate(
                            'ezpublish_rest_loadTrashItem',
                            array('trashItemId' => $trashItem->id)
                        )
                    );
                } else {
                    // Only a location has been trashed and not the object
                    return new Values\NoContent();
                }
            } 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");
            }
        }
    }
public function moveSubtree ( $ locationPath , Request $ request ) { $ locationToMove = $ this -> locationService -> loadLocation ( $ this -> extractLocationIdFromPath ( $ locationPath ) ) ; $ destinationLocationId = null ; $ destinationHref = $ 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' => trim ( $ locationToMove -> pathString , '/' ) , ) ) ) ; } catch ( Exceptions \ InvalidArgumentException $ e ) { // If parsing of destination fails, let's try to see if destination is trash 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 ) ; if ( isset ( $ trashItem ) ) { return new Values \ ResourceCreated ( $ this -> router -> generate ( 'ezpublish_rest_loadTrashItem' , array ( 'trashItemId' => $ trashItem -> id ) ) ) ; } else { // Only a location has been trashed and not the object return new Values \ NoContent ( ) ; } } 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" ) ; } } }
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 | \eZ\Publish\Core\REST\Server\Values\NoContent
Moves a subtree to a new location .