Chamilo is a learning management system focused on ease of use and accessibility
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
chamilo-lms/src/CoreBundle/Controller/ResourceUploadController.php

115 lines
4.0 KiB

<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\CoreBundle\Controller;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\ResourceNode;
use Chamilo\CoreBundle\Entity\Session;
use Chamilo\CoreBundle\Repository\ResourceFactory;
use Chamilo\CoreBundle\Repository\ResourceRepository;
use Oneup\UploaderBundle\Controller\BlueimpController;
use Oneup\UploaderBundle\Uploader\File\FileInterface;
use Oneup\UploaderBundle\Uploader\File\FilesystemFile;
use Oneup\UploaderBundle\Uploader\Response\EmptyResponse;
use Symfony\Component\HttpFoundation\File\Exception\UploadException;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\JsonResponse;
/**
* Class ResourceUploaderController.
*/
class ResourceUploadController extends BlueimpController
{
/**
* This will upload an image to the selected node id.
* This action is listen by the ResourceUploadListener.
*/
public function upload(): JsonResponse
{
error_log('upload');
$container = $this->container;
$doctrine = $container->get('doctrine');
$em = $doctrine->getManager();
$request = $this->getRequest();
$type = $request->get('type');
$tool = $request->get('tool');
$id = $request->get('id');
$courseId = $request->get('cid');
$sessionId = $request->get('sid');
$course = null;
if (!empty($courseId)) {
$course = $doctrine->getRepository(Course::class)->find($courseId);
}
$session = null;
if (!empty($sessionId)) {
$session = $doctrine->getRepository(Session::class)->find($sessionId);
}
$token = $container->get('security.token_storage')->getToken();
$user = $token->getUser();
// Create repository from tool and type.
$factory = $container->get(ResourceFactory::class);
$repoService = $factory->getRepositoryService($tool, $type);
/** @var ResourceRepository $repo */
$repo = $container->get($repoService);
/** @var ResourceNode $parent */
$parent = $repo->getResourceNodeRepository()->find($id);
/*$checker = $container->get('security.authorization_checker');
if (!$checker->isGranted($parent, ResourceNodeVoter::CREATE)) {
return new AccessDeniedException('No permissions');
}*/
//$chunked = null !== $request->headers->get('content-range');
$response = new EmptyResponse();
$files = $this->getFiles($request->files);
try {
/** @var UploadedFile $file */
foreach ($files as $file) {
try {
if (!($file instanceof FileInterface)) {
$file = new FilesystemFile($file);
}
$this->validate($file, $request, $response);
$this->dispatchPreUploadEvent($file, $response, $request);
$resource = $repo->saveUpload($file, $course, $session);
// @todo fix correct $parent
$resource->setParent($parent);
$resource->addCourseLink(
$course,
$session
);
$em->persist($resource);
$em->flush();
$repo->addFile($resource, $file);
$em->flush();
// Finish uploading.
$this->dispatchPostEvents($resource, $response, $request);
/*$chunked ?
$this->handleChunkedUpload($file, $response, $request) :
$this->handleUpload($file, $response, $request);*/
} catch (UploadException $e) {
$this->errorHandler->addException($response, $e);
}
}
} catch (UploadException $e) {
return new JsonResponse([]);
}
return $this->createSupportedJsonResponse($response->assemble());
}
}