aboutsummaryrefslogtreecommitdiff
path: root/lib/classes/JsonApi/Routes/Files/FoldersCopy.php
blob: cee761d4b2c9ae2b70f60ad93bad70cfa0233884 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php

namespace JsonApi\Routes\Files;

use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use JsonApi\Errors\AuthorizationFailedException;
use JsonApi\Errors\BadRequestException;
use JsonApi\Errors\RecordNotFoundException;
use JsonApi\NonJsonApiController;

class FoldersCopy extends NonJsonApiController
{
    /**
     * @SuppressWarnings(PHPMD.UnusedFormalParameters)
     */
    public function __invoke(Request $request, Response $response, array $args)
    {
        if (!$sourceFolder = \FileManager::getTypedFolder($args['id'])) {
            throw new RecordNotFoundException('Could not find source folder.');
        }

        $body = $request->getParsedBody();
        if (!$destinationFolder = \FileManager::getTypedFolder($body['destination'])) {
            throw new RecordNotFoundException('Could not find destination folder.');
        }

        if (!Authority::canCopyFolder($user = $this->getUser($request), $sourceFolder, $destinationFolder)) {
            throw new AuthorizationFailedException();
        }

        $folder = \FileManager::copyFolder($sourceFolder, $destinationFolder, $user);
        if (!$folder instanceof \FolderType) {
            throw new BadRequestException('Fehler beim Kopieren des Ordners.');
        }

        return $this->redirectToFolder($response, $folder);
    }

    /**
     * @SuppressWarnings(PHPMD.Superglobals)
     */
    private function redirectToFolder(Response $response, \FolderType $folder)
    {
        $pathinfo = $this->getSchema($folder)->getSelfSubLink($folder)->getSubHref();
        $old = \URLHelper::setBaseURL($GLOBALS['ABSOLUTE_URI_STUDIP']);
        $url = \URLHelper::getURL($this->container->get('json-api-integration-urlPrefix').$pathinfo, [], true);
        \URLHelper::setBaseURL($old);

        return $response->withRedirect($url, 201);
    }
}