From 534d8f779f448a204adb5ffd316db1690511fce2 Mon Sep 17 00:00:00 2001
From: Julio Montoya <gugli100@gmail.com>
Date: Tue, 21 Aug 2018 13:28:45 +0200
Subject: [PATCH] WIP: Add oneup/uploader-bundle

---
 composer.json                                 |  3 +-
 config/bundles.php                            |  1 +
 config/packages/oneup_uploader.yaml           | 11 +++++
 config/packages/sonata_page.yaml              |  1 +
 config/packages/twig.yaml                     |  1 +
 config/routes/oneup_uploader.yaml             |  3 ++
 .../Controller/ResourceController.php         |  5 +-
 .../EventListener/CourseUploadListener.php    | 49 +++++++++++++++++++
 src/CoreBundle/Resources/config/services.yml  |  7 +++
 .../Resources/views/Resource/upload.html.twig | 11 +++++
 10 files changed, 88 insertions(+), 4 deletions(-)
 create mode 100644 config/packages/oneup_uploader.yaml
 create mode 100644 config/routes/oneup_uploader.yaml
 create mode 100644 src/CoreBundle/EventListener/CourseUploadListener.php
 create mode 100644 src/CoreBundle/Resources/views/Resource/upload.html.twig

diff --git a/composer.json b/composer.json
index a4541ff7b2..d694c8e5db 100755
--- a/composer.json
+++ b/composer.json
@@ -155,7 +155,8 @@
         "symfony/requirements-checker": "^1.1",
         "liip/theme-bundle": "^1.5",
         "a2lix/translation-form-bundle": "^3.0",
-        "lunetics/locale-bundle": "^2.6"
+        "lunetics/locale-bundle": "^2.6",
+        "oneup/uploader-bundle": "^2.0"
     },
     "require-dev": {
         "friendsofphp/php-cs-fixer": "^2.7",
diff --git a/config/bundles.php b/config/bundles.php
index 2e2d3c311f..f8165643ea 100644
--- a/config/bundles.php
+++ b/config/bundles.php
@@ -69,4 +69,5 @@ return [
     A2lix\TranslationFormBundle\A2lixTranslationFormBundle::class => ['all' => true],
     Lunetics\LocaleBundle\LuneticsLocaleBundle::class => ['all' => true],
     Ivory\CKEditorBundle\IvoryCKEditorBundle::class => ['all' => true],
+    Oneup\UploaderBundle\OneupUploaderBundle::class => ['all' => true],
 ];
diff --git a/config/packages/oneup_uploader.yaml b/config/packages/oneup_uploader.yaml
new file mode 100644
index 0000000000..fec8f7d9f0
--- /dev/null
+++ b/config/packages/oneup_uploader.yaml
@@ -0,0 +1,11 @@
+# Read the documentation: https://github.com/1up-lab/OneupUploaderBundle/blob/master/Resources/doc/index.md
+oneup_uploader:
+    mappings:
+        courses:
+            #frontend: dropzone # or any uploader you use in the frontend
+            frontend: blueimp
+            storage:
+                type: flysystem
+                filesystem: oneup_flysystem.courses_filesystem
+            root_folder: true
+#            namer: oneup_uploader.namer.urlsafe
diff --git a/config/packages/sonata_page.yaml b/config/packages/sonata_page.yaml
index 2a8a22f6f2..64022dc8ca 100644
--- a/config/packages/sonata_page.yaml
+++ b/config/packages/sonata_page.yaml
@@ -38,6 +38,7 @@ sonata_page:
         - ^/faq/(.*)
         - ^/faq
         - ^/courses/(.*)
+        - ^/resource/(.*)
         - ^/front/editor
         - ^/contact(.*) # sonata admin
         - ^/cms/pages/latest
diff --git a/config/packages/twig.yaml b/config/packages/twig.yaml
index 87a8f0183f..cc3bd416dc 100644
--- a/config/packages/twig.yaml
+++ b/config/packages/twig.yaml
@@ -2,6 +2,7 @@ twig:
     debug: '%kernel.debug%'
     paths: ['%kernel.project_dir%/templates', '%kernel.project_dir%/main/template/']
     form_themes:
+        - 'bootstrap_4_layout.html.twig'
         - '@SonataFormatter/Form/formatter.html.twig'
     exception_controller: 'Chamilo\ThemeBundle\Controller\ExceptionController::showAction'
     globals:
diff --git a/config/routes/oneup_uploader.yaml b/config/routes/oneup_uploader.yaml
new file mode 100644
index 0000000000..ad9f64f2d3
--- /dev/null
+++ b/config/routes/oneup_uploader.yaml
@@ -0,0 +1,3 @@
+oneup_uploader:
+    resource: .
+    type: uploader
diff --git a/src/CoreBundle/Controller/ResourceController.php b/src/CoreBundle/Controller/ResourceController.php
index a5558e3a62..274cdf8445 100644
--- a/src/CoreBundle/Controller/ResourceController.php
+++ b/src/CoreBundle/Controller/ResourceController.php
@@ -27,9 +27,8 @@ class ResourceController extends BaseController
      */
     public function uploadFile(): Response
     {
-        $helper = $this->container->get('oneup_uploader.templating.uploader_helper');
-        $endpoint = $helper->endpoint('courses');
-
+        //$helper = $this->container->get('oneup_uploader.templating.uploader_helper');
+        //$endpoint = $helper->endpoint('courses');
         return $this->render(
             '@ChamiloCore/Resource/upload.html.twig',
             [
diff --git a/src/CoreBundle/EventListener/CourseUploadListener.php b/src/CoreBundle/EventListener/CourseUploadListener.php
new file mode 100644
index 0000000000..6edcfd3ed6
--- /dev/null
+++ b/src/CoreBundle/EventListener/CourseUploadListener.php
@@ -0,0 +1,49 @@
+<?php
+/* For licensing terms, see /license.txt */
+
+namespace Chamilo\CoreBundle\EventListener;
+
+use Doctrine\Common\Persistence\ObjectManager;
+use Oneup\UploaderBundle\Event\PostPersistEvent;
+use Oneup\UploaderBundle\Uploader\File\FlysystemFile;
+
+/**
+ * Class UploadListener.
+ * @package Chamilo\CoreBundle\EventListener
+ */
+class CourseUploadListener
+{
+    /**
+     * @var ObjectManager
+     */
+    private $om;
+
+    /**
+     * CourseUploadListener constructor.
+     *
+     * @param ObjectManager $om
+     */
+    public function __construct(ObjectManager $om)
+    {
+        $this->om = $om;
+    }
+
+    /**
+     * @param PostPersistEvent $event
+     *
+     * @return \Oneup\UploaderBundle\Uploader\Response\ResponseInterface
+     */
+    public function onUpload(PostPersistEvent $event)
+    {
+        /** @var FlysystemFile $file */
+        $file = $event->getFile();
+        $file->
+        error_log($file->getPathname());
+
+        // If everything went fine
+        $response = $event->getResponse();
+        $response['success'] = true;
+
+        return $response;
+    }
+}
\ No newline at end of file
diff --git a/src/CoreBundle/Resources/config/services.yml b/src/CoreBundle/Resources/config/services.yml
index ffbe6e95da..97d54fc433 100644
--- a/src/CoreBundle/Resources/config/services.yml
+++ b/src/CoreBundle/Resources/config/services.yml
@@ -196,6 +196,13 @@ services:
         tags:
             - {name: kernel.event_listener, event: theme.messages, method: onListMessages}
 
+    # Course upload listener
+    chamilo_core.listener.course_upload_listener:
+        class: Chamilo\CoreBundle\EventListener\CourseUploadListener
+        arguments: ['@doctrine.orm.entity_manager']
+        tags:
+        - {name: kernel.event_listener, event: oneup_uploader.post_persist, method: onUpload }
+
 #    chamilo_core.menu.simple_menu:
 #        class: Chamilo\CoreBundle\Menu\SimpleMenuBuilder
 #        arguments: ['@service_container']
diff --git a/src/CoreBundle/Resources/views/Resource/upload.html.twig b/src/CoreBundle/Resources/views/Resource/upload.html.twig
new file mode 100644
index 0000000000..da686216b9
--- /dev/null
+++ b/src/CoreBundle/Resources/views/Resource/upload.html.twig
@@ -0,0 +1,11 @@
+{% extends "@ChamiloTheme/Layout/layout_one_col.html.twig" %}
+
+{% block content %}
+  <script>
+      $(document).ready(function() {
+          $('#fileupload').fileupload({});
+      });
+  </script>
+
+  <input id="fileupload" type="file" name="files[]" data-url="{{ oneup_uploader_endpoint('courses') }}" multiple />
+{% endblock %}