Completed
Push — master ( 4874d1...5ea477 )
by Julito
10:24
created

EditorController::editorTemplatesAction()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 7
nc 1
nop 2
dl 0
loc 11
rs 10
c 0
b 0
f 0
1
<?php
2
/* For licensing terms, see /license.txt */
3
4
namespace Chamilo\CoreBundle\Controller;
5
6
use APY\DataGridBundle\Grid\Action\MassAction;
7
use APY\DataGridBundle\Grid\Action\RowAction;
8
use APY\DataGridBundle\Grid\Grid;
9
use APY\DataGridBundle\Grid\Row;
10
use APY\DataGridBundle\Grid\Source\Entity;
11
use Chamilo\CoreBundle\Component\Editor\CkEditor\CkEditor;
12
use Chamilo\CoreBundle\Component\Editor\Connector;
13
use Chamilo\CoreBundle\Component\Editor\Finder;
14
use Chamilo\CoreBundle\Component\Utils\ChamiloApi;
15
use Chamilo\CoreBundle\Security\Authorization\Voter\ResourceNodeVoter;
16
use Chamilo\CourseBundle\Entity\CDocument;
17
use Chamilo\CourseBundle\Repository\CDocumentRepository;
18
use Chamilo\SettingsBundle\Manager\SettingsManager;
19
use DocumentManager;
20
use FM\ElfinderBundle\Connector\ElFinderConnector;
21
use Symfony\Component\HttpFoundation\Request;
22
use Symfony\Component\HttpFoundation\Response;
23
use Symfony\Component\Routing\Annotation\Route;
24
use Symfony\Component\Routing\RouterInterface;
25
use Symfony\Contracts\Translation\TranslatorInterface;
26
27
/**
28
 * Class EditorController.
29
 *
30
 * @Route("/editor")
31
 */
32
class EditorController extends BaseController
33
{
34
    /**
35
     * Get templates (left column when creating a document).
36
     *
37
     * @Route("/templates", methods={"GET"}, name="editor_templates")
38
     *
39
     * @return Response
40
     */
41
    public function editorTemplatesAction(TranslatorInterface $translator, RouterInterface $router)
42
    {
43
        $editor = new CkEditor(
44
            $translator,
45
            $router
46
        );
47
        $templates = $editor->simpleFormatTemplates();
48
49
        return $this->render(
50
            '@ChamiloTheme/Editor/templates.html.twig',
51
            ['templates' => $templates]
52
        );
53
    }
54
55
    /**
56
     * @Route("/myfilemanager", methods={"GET"}, name="editor_myfiles")
57
     */
58
    public function editorFileManager(): Response
59
    {
60
        \Chat::setDisableChat();
61
        $params = [
62
            'course_condition' => '?'.$this->getCourseUrlQuery(),
63
        ];
64
65
        return $this->render('@ChamiloTheme/Editor/elfinder.html.twig', $params);
66
    }
67
68
    /**
69
     * @todo use resource repository instead of hardcoded CDocumentRepository
70
     *
71
     * @Route("/filemanager/{parentId}", methods={"GET"}, name="editor_filemanager")
72
     *
73
     * @param int $parentId
74
     */
75
    public function customEditorFileManager(Request $request, Grid $grid, $parentId = 0, CDocumentRepository $repository): Response
76
    {
77
        $id = $request->get('id');
78
79
        $course = $this->getCourse();
80
        $session = $this->getCourseSession();
81
        $parent = $course->getResourceNode();
82
83
        if (!empty($parentId)) {
84
            $parent = $repository->getResourceNodeRepository()->find($parentId);
85
        }
86
87
        $source = new Entity(CDocument::class);
88
89
        $qb = $repository->getResourcesByCourse($course, $session, null, $parent);
90
91
        // 3. Set QueryBuilder to the source.
92
        $source->initQueryBuilder($qb);
93
        $grid->setSource($source);
94
95
        $title = $grid->getColumn('title');
96
        $title->setSafe(false);
97
98
        //$grid->hideFilters();
99
        $grid->setLimits(20);
100
        //$grid->isReadyForRedirect();
101
        //$grid->setMaxResults(1);
102
        //$grid->setLimits(2);
103
104
        $courseIdentifier = $course->getCode();
105
106
        $routeParams = ['cidReq' => $courseIdentifier, 'id'];
107
108
        $grid->getColumn('title')->manipulateRenderCell(
109
            function ($value, Row $row, $router) use ($course, $routeParams) {
110
                /** @var CDocument $entity */
111
                $entity = $row->getEntity();
112
                $resourceNode = $entity->getResourceNode();
113
                $id = $resourceNode->getId();
114
115
                $myParams = $routeParams;
116
                $myParams['id'] = $id;
117
                $myParams['parentId'] = $id;
118
119
                unset($myParams[0]);
120
121
                if ($resourceNode->hasResourceFile()) {
122
                    $documentParams = [
123
                        'course' => $course->getCode(),
124
                        'file' => $resourceNode->getPathForDisplay()
125
                    ];
126
                    $url = $router->generate(
127
                        'resources_document_get_file',
128
                        $documentParams
129
                    );
130
                    return '<a href="'.$url.'" class="select_to_ckeditor">'.$value.'</a>';
131
                }
132
133
                $url = $router->generate(
134
                    'editor_filemanager',
135
                    $myParams
136
                );
137
138
                return '<a href="'.$url.'">'.$value.'</a>';
139
            }
140
        );
141
142
        // Show resource data
143
        /*$myRowAction = new RowAction(
144
            'use',
145
            'chamilo_core_resource_show',
146
            false,
147
            '_self',
148
            ['class' => 'btn btn-secondary']
149
        );
150
        $myRowAction->setRouteParameters($routeParams);
151
152
        $setNodeParameters = function (RowAction $action, Row $row) use ($routeParams) {
153
            $id = $row->getEntity()->getResourceNode()->getId();
154
            $routeParams['id'] = $id;
155
            $action->setRouteParameters($routeParams);
156
            return $action;
157
        };
158
        $myRowAction->addManipulateRender($setNodeParameters);
159
160
        $grid->addRowAction($myRowAction);*/
161
162
        //return $this->render('@ChamiloTheme/Editor/custom.html.twig', $params);
163
164
        return $grid->getGridResponse(
165
            '@ChamiloTheme/Editor/custom.html.twig',
166
            ['id' => $id, 'grid' => $grid]
167
        );
168
169
    }
170
171
    /**
172
     * @Route("/connector", methods={"GET", "POST"}, name="editor_connector")
173
     *
174
     * @return Response
175
     */
176
    public function editorConnector(TranslatorInterface $translator, RouterInterface $router)
177
    {
178
        $course = $this->getCourse();
179
        $session = $this->getCourseSession();
180
181
        /** @var Connector $connector */
182
        $connector = new Connector(
183
            $this->getDoctrine()->getManager(),
184
            [],
185
            $router,
186
            $translator,
187
            $this->container->get('security.authorization_checker'),
188
            $this->getUser(),
189
            $course,
190
            $session
191
        );
192
193
        $driverList = [
194
            'PersonalDriver',
195
            //'CourseDriver',
196
            //'CourseUserDriver',
197
            //'HomeDriver'
198
        ];
199
        $connector->setDriverList($driverList);
200
201
        $operations = $connector->getOperations();
202
203
        // Run elFinder
204
        ob_start();
205
        $finder = new Finder($operations);
206
        $elFinderConnector = new ElFinderConnector($finder);
207
        $elFinderConnector->run();
208
        $content = ob_get_contents();
209
210
        return $this->render(
211
            '@ChamiloTheme/layout_empty.html.twig',
212
            ['content' => $content]
213
        );
214
    }
215
216
    /**
217
     * @Route("/config", methods={"GET"}, name="config_editor")
218
     *
219
     * @return Response
220
     */
221
    public function configEditorAction(SettingsManager $settingsManager)
222
    {
223
        $moreButtonsInMaximizedMode = false;
224
        //$settingsManager = $this->get('chamilo.settings.manager');
225
226
        if ($settingsManager->getSetting('editor.more_buttons_maximized_mode') === 'true') {
227
            $moreButtonsInMaximizedMode = true;
228
        }
229
230
        return $this->render(
231
            '@ChamiloTheme/Editor/config_js.html.twig',
232
            [
233
                // @todo replace api_get_bootstrap_and_font_awesome
234
                'bootstrap_css' => api_get_bootstrap_and_font_awesome(true),
235
                'css_editor' => ChamiloApi::getEditorBlockStylePath(),
236
                'more_buttons_in_max_mode' => $moreButtonsInMaximizedMode,
237
            ]
238
        );
239
    }
240
}
241