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
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);
0 ignored issues
show
$em of type object<Doctrine\Persistence\ObjectManager> is not a sub-type of object<Doctrine\ORM\EntityManager>. It seems like you assume a concrete implementation of the interface Doctrine\Persistence\ObjectManager to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
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