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);
}
}
|