Completed
Push — master ( 3742bc...55196a )
by Julito
13:21
created

ResourceUploadController   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 91
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 56
dl 0
loc 91
rs 10
c 1
b 0
f 0
wmc 6

1 Method

Rating   Name   Duplication   Size   Complexity  
B upload() 0 86 6
1
<?php
2
/* For licensing terms, see /license.txt */
3
4
namespace Chamilo\CoreBundle\Controller;
5
6
use Chamilo\CoreBundle\Entity\Resource\ResourceFile;
7
use Chamilo\CoreBundle\Entity\Resource\ResourceLink;
8
use Chamilo\CourseBundle\Entity\CDocument;
9
use Oneup\UploaderBundle\Uploader\ErrorHandler\ErrorHandlerInterface;
10
use Oneup\UploaderBundle\Uploader\Storage\StorageInterface;
11
use Symfony\Component\DependencyInjection\ContainerInterface;
12
use Symfony\Component\HttpFoundation\File\Exception\UploadException;
13
use Symfony\Component\HttpFoundation\JsonResponse;
14
use Oneup\UploaderBundle\Controller\BlueimpController;
15
use Oneup\UploaderBundle\Uploader\Response\EmptyResponse;
16
use Symfony\Component\HttpFoundation\File\UploadedFile;
17
18
/**
19
 * Class ResourceUploaderController.
20
 */
21
class ResourceUploadController extends BlueimpController
22
{
23
    /**
24
     * @return JsonResponse
25
     */
26
    public function upload()
27
    {
28
        error_log('upload!!!');
29
        $container = $this->container;
30
        $doctrine = $container->get('doctrine');
31
        $em = $doctrine->getManager();
32
        $request = $this->getRequest();
33
34
        $type = $request->get('type');
35
        $tool = $request->get('tool');
36
        $id = $request->get('id');
37
        $courseCode = $request->get('cidReq');
38
        $sessionId = $request->get('id_session');
39
40
        $controller = $container->get('Chamilo\CoreBundle\Controller\ResourceController');
41
42
        $course = null;
43
        if (!empty($courseCode)) {
44
            $course = $doctrine->getRepository('ChamiloCoreBundle:Course')->findOneBy(['code' => $courseCode]);
45
        }
46
47
        $session = null;
48
        if (!empty($sessionId)) {
49
            $session = $doctrine->getRepository('ChamiloCoreBundle:Session')->find($sessionId);
50
        }
51
52
        $token = $container->get('security.token_storage')->getToken();
53
        $user = $token->getUser();
54
55
        $repo = $controller->getRepository($tool, $type);
56
57
        $parent = $repo->getResourceNodeRepository()->find($id);
58
59
        //$chunked = null !== $request->headers->get('content-range');
60
61
        $response = new EmptyResponse();
62
        $files = $this->getFiles($request->files);
63
        try {
64
            /** @var UploadedFile $file */
65
            foreach ($files as $file) {
66
                try {
67
                    $title = $file->getClientOriginalName();
68
69
                    $document = new CDocument();
70
                    $document
71
                        ->setFiletype('file')
72
                        ->setTitle($title)
73
                        ->setSize($file->getSize())
74
                        ->setCourse($course)
75
                    ;
76
77
                    $em->persist($document);
78
                    $em->flush();
79
                    $document->setId($document->getIid());
80
                    $resourceNode = $repo->addResourceNodeParent($document,$user, $parent);
81
82
                    $resourceFile = new ResourceFile();
83
                    $resourceFile->setFile($file);
84
                    $resourceFile->setName($title);
85
                    $em->persist($resourceFile);
86
87
                    $resourceNode->setResourceFile($resourceFile);
88
                    $em->persist($resourceNode);
89
                    $em->flush();
90
91
                    $repo->addResourceNodeToCourse(
92
                        $resourceNode,
93
                        ResourceLink::VISIBILITY_PUBLISHED,
94
                        $course,
95
                        $session,
96
                        null
97
                    );
98
99
                    /*$chunked ?
100
                        $this->handleChunkedUpload($file, $response, $request) :
101
                        $this->handleUpload($file, $response, $request);*/
102
                } catch (UploadException $e) {
103
                    $this->errorHandler->addException($response, $e);
104
                }
105
            }
106
        } catch (UploadException $e) {
107
            // return nothing
108
            return new JsonResponse(array());
109
        }
110
111
        return $this->createSupportedJsonResponse($response->assemble());
112
    }
113
}
114