Skip to content
Snippets Groups Projects
Select Git revision
  • 861a2621e6732a95aaf8e0a9f25ba77dc22c9024
  • main default protected
  • step-3263
  • feature/plugins-cli
  • feature/vite
  • step-2484-peerreview
  • biest/issue-5051
  • tests/simplify-jsonapi-tests
  • fix/typo-in-1a70031
  • feature/broadcasting
  • database-seeders-and-factories
  • feature/peer-review-2
  • feature-feedback-jsonapi
  • feature/peerreview
  • feature/balloon-plus
  • feature/stock-images-unsplash
  • tic-2588
  • 5.0
  • 5.2
  • biest/unlock-blocks
  • biest-1514
21 results

ContainersCopy.php

  • Forked from Stud.IP / Stud.IP
    3953 commits behind the upstream repository.
    Ron Lucke's avatar
    Ron Lucke authored and Elmar Ludwig committed
    861a2621
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    ContainersCopy.php 1.66 KiB
    <?php
    
    namespace JsonApi\Routes\Courseware;
    
    use JsonApi\NonJsonApiController;
    use Courseware\Block;
    use Courseware\Container;
    use Courseware\StructuralElement;
    use JsonApi\Errors\AuthorizationFailedException;
    use JsonApi\Errors\BadRequestException;
    use JsonApi\Errors\RecordNotFoundException;
    use JsonApi\Errors\UnprocessableEntityException;
    use Psr\Http\Message\ResponseInterface as Response;
    use Psr\Http\Message\ServerRequestInterface as Request;
    
    /**
     * Copy a courseware container in an courseware structural element
     *
     * @author  Ron Lucke <lucke@elan-ev.de>
     * @license GPL2 or any later version
     *
     * @since   Stud.IP 5.0
     */
    
    class ContainersCopy extends NonJsonApiController
    {
        public function __invoke(Request $request, Response $response, array $args)
        {
            $data = $request->getParsedBody()['data'];
    
            $container = \Courseware\Container::find($data['container']['id']);
            $element = \Courseware\StructuralElement::find($data['parent_id']);
            $user = $this->getUser($request);
            if (!Authority::canCreateContainer($user, $element) || !Authority::canUpdateContainer($user, $container)) {
                throw new AuthorizationFailedException();
            }
    
            $new_container = $this->copyContainer($user, $container, $element);
    
            $response = $response->withHeader('Content-Type', 'application/json');
            $response->getBody()->write((string) json_encode($new_container));
    
            return $response;
        }
    
        private function copyContainer(\User $user, \Courseware\Container $remote_container, \Courseware\StructuralElement $element)
        {
            $container = $remote_container->copy($user, $element);
    
            return $container;
        }
    }