Completed
Pull Request — 5.6 (#2830)
by Jeroen
14:14
created

MediaBundle/Controller/ChooserController.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace Kunstmaan\MediaBundle\Controller;
4
5
use Doctrine\ORM\EntityNotFoundException;
6
use Kunstmaan\MediaBundle\AdminList\MediaAdminListConfigurator;
7
use Kunstmaan\MediaBundle\Entity\Folder;
8
use Kunstmaan\MediaBundle\Entity\Media;
9
use Kunstmaan\MediaBundle\Form\FolderType;
10
use Kunstmaan\MediaBundle\Helper\Media\AbstractMediaHandler;
11
use Kunstmaan\MediaBundle\Helper\MediaManager;
12
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
13
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
14
use Symfony\Component\HttpFoundation\RedirectResponse;
15
use Symfony\Component\HttpFoundation\Request;
16
use Symfony\Component\Routing\Annotation\Route;
17
18
/**
19
 * ChooserController.
20
 */
21
class ChooserController extends Controller
0 ignored issues
show
Deprecated Code introduced by
The class Symfony\Bundle\Framework...e\Controller\Controller has been deprecated with message: since Symfony 4.2, use "Symfony\Bundle\FrameworkBundle\Controller\AbstractController" instead.

This class, trait or interface has been deprecated. The supplier of the file has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the type will be removed from the class and what other constant to use instead.

Loading history...
22
{
23
    private const TYPE_ALL = 'all';
24
25
    /**
26
     * @Route("/chooser", name="KunstmaanMediaBundle_chooser")
27
     *
28
     * @return RedirectResponse
29
     */
30
    public function chooserIndexAction(Request $request)
31
    {
32
        $em = $this->getDoctrine()->getManager();
33
        $session = $request->getSession();
34
        $folderId = false;
35
36
        $type = $request->get('type', self::TYPE_ALL);
37
        $cKEditorFuncNum = $request->get('CKEditorFuncNum');
38
        $linkChooser = $request->get('linkChooser');
39
40
        // Go to the last visited folder
41
        if ($session->get('last-media-folder')) {
42
            try {
43
                $em->getRepository(Folder::class)->getFolder($session->get('last-media-folder'));
44
                $folderId = $session->get('last-media-folder');
45
            } catch (EntityNotFoundException $e) {
46
                $folderId = false;
47
            }
48
        }
49
50
        if (!$folderId) {
51
            // Redirect to the first top folder
52
            /* @var Folder $firstFolder */
53
            $firstFolder = $em->getRepository(Folder::class)->getFirstTopFolder();
54
            $folderId = $firstFolder->getId();
55
        }
56
57
        $params = [
58
            'folderId' => $folderId,
59
            'type' => $type,
60
            'CKEditorFuncNum' => $cKEditorFuncNum,
61
            'linkChooser' => $linkChooser,
62
        ];
63
64
        return $this->redirect($this->generateUrl('KunstmaanMediaBundle_chooser_show_folder', $params));
65
    }
66
67
    /**
68
     * @param int $folderId The folder id
69
     *
70
     * @Route("/chooser/{folderId}", requirements={"folderId" = "\d+"}, name="KunstmaanMediaBundle_chooser_show_folder")
71
     * @Template("@KunstmaanMedia/Chooser/chooserShowFolder.html.twig")
72
     *
73
     * @return array
74
     */
75
    public function chooserShowFolderAction(Request $request, $folderId)
76
    {
77
        $em = $this->getDoctrine()->getManager();
78
        $session = $request->getSession();
79
80
        $type = $request->get('type');
81
        $cKEditorFuncNum = $request->get('CKEditorFuncNum');
82
        $linkChooser = $request->get('linkChooser');
83
84
        // Remember the last visited folder in the session
85
        $session->set('last-media-folder', $folderId);
86
87
        // Check when user switches between thumb -and list view
88
        $viewMode = $request->query->get('viewMode');
89
        if ($viewMode && $viewMode == 'list-view') {
90
            $session->set('media-list-view', true);
91
        } elseif ($viewMode && $viewMode == 'thumb-view') {
92
            $session->remove('media-list-view');
93
        }
94
95
        /* @var MediaManager $mediaHandler */
96
        $mediaHandler = $this->get('kunstmaan_media.media_manager');
97
98
        /* @var Folder $folder */
99
        $folder = $em->getRepository(Folder::class)->getFolder($folderId);
100
101
        /** @var AbstractMediaHandler $handler */
102
        $handler = null;
103
        if ($type && $type !== self::TYPE_ALL) {
104
            $handler = $mediaHandler->getHandlerForType($type);
105
        }
106
107
        /* @var MediaManager $mediaManager */
108
        $mediaManager = $this->get('kunstmaan_media.media_manager');
109
110
        $adminListConfigurator = new MediaAdminListConfigurator($em, $mediaManager, $folder, $request);
111
        $adminList = $this->get('kunstmaan_adminlist.factory')->createList($adminListConfigurator);
112
        $adminList->bindRequest($request);
113
114
        $sub = new Folder();
115
        $sub->setParent($folder);
116
        $subForm = $this->createForm(FolderType::class, $sub, ['folder' => $sub]);
117
118
        $linkChooserLink = null;
119
        if (!empty($linkChooser)) {
120
            $params = [];
121
            if (!empty($cKEditorFuncNum)) {
122
                $params['CKEditorFuncNum'] = $cKEditorFuncNum;
123
                $routeName = 'KunstmaanNodeBundle_ckselecturl';
124
            } else {
125
                $routeName = 'KunstmaanNodeBundle_selecturl';
126
            }
127
            $linkChooserLink = $this->generateUrl($routeName, $params);
128
        }
129
130
        $viewVariabels = [
131
            'cKEditorFuncNum' => $cKEditorFuncNum,
132
            'linkChooser' => $linkChooser,
133
            'linkChooserLink' => $linkChooserLink,
134
            'mediamanager' => $mediaManager,
135
            'foldermanager' => $this->get('kunstmaan_media.folder_manager'),
136
            'handler' => $handler,
137
            'type' => $type,
138
            'folder' => $folder,
139
            'adminlist' => $adminList,
140
            'subform' => $subForm->createView(),
141
        ];
142
143
        /* generate all forms */
144
        $forms = [];
145
146
        foreach ($mediaManager->getFolderAddActions()  as $addAction) {
147
            $forms[$addAction['type']] = $this->createTypeFormView($mediaHandler, $addAction['type']);
148
        }
149
150
        $viewVariabels['forms'] = $forms;
151
152
        return $viewVariabels;
153
    }
154
155
    /**
156
     * @param string $type
157
     *
158
     * @return \Symfony\Component\Form\FormView
159
     */
160
    private function createTypeFormView(MediaManager $mediaManager, $type)
161
    {
162
        $handler = $mediaManager->getHandlerForType($type);
163
        $media = new Media();
164
        $helper = $handler->getFormHelper($media);
165
166
        return $this->createForm($handler->getFormType(), $helper, $handler->getFormTypeOptions())->createView();
167
    }
168
}
169