Completed
Push — master ( 769352...7db90d )
by
unknown
02:36
created

HelperController::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 5
ccs 0
cts 5
cp 0
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 3
nc 1
nop 2
crap 2
1
<?php
2
3
namespace MediaMonks\SonataMediaBundle\Controller;
4
5
use MediaMonks\SonataMediaBundle\Admin\MediaAdmin;
6
use MediaMonks\SonataMediaBundle\Model\MediaInterface;
7
use Symfony\Component\HttpFoundation\JsonResponse;
8
use Symfony\Component\HttpFoundation\Request;
9
use Symfony\Component\HttpFoundation\Response;
10
use Symfony\Component\Templating\EngineInterface;
11
12
class HelperController
13
{
14
    const QUERY_MINIMUM_LENGTH = 3;
15
16
    /**
17
     * @var MediaAdmin
18
     */
19
    private $mediaAdmin;
20
21
    /**
22
     * @var EngineInterface
23
     */
24
    private $templating;
25
26
    /**
27
     * @param MediaAdmin $mediaAdmin
28
     * @param EngineInterface $templating
29
     */
30
    public function __construct(MediaAdmin $mediaAdmin, EngineInterface $templating)
31
    {
32
        $this->mediaAdmin = $mediaAdmin;
33
        $this->templating = $templating;
34
    }
35
36
    /**
37
     * @param Request $request
38
     * @return JsonResponse
39
     */
40
    public function getAutocompleteItemsAction(Request $request)
41
    {
42
        $this->mediaAdmin->checkAccess('list');
43
44
        if (mb_strlen($request->get('q'), 'UTF-8') < self::QUERY_MINIMUM_LENGTH) {
45
            return new JsonResponse(['status' => 'KO', 'message' => 'Search string too short'], Response::HTTP_FORBIDDEN);
46
        }
47
48
        return new JsonResponse([
49
            'status' => 'OK',
50
            'more' => false,
51
            'items' => $this->transformResults($this->getPagerResults($request))
52
        ]);
53
    }
54
55
    /**
56
     * @param Request $request
57
     * @return mixed
58
     */
59
    protected function getPagerResults(Request $request)
60
    {
61
        $this->mediaAdmin->setPersistFilters(false);
62
63
        $datagrid = $this->mediaAdmin->getDatagrid();
64
        $datagrid->setValue('title', null, $request->get('q'));
65
        $datagrid->setValue('_per_page', null, $request->query->get('_per_page', 10));
66
        $datagrid->setValue('_page', null, $request->query->get('_page', 1));
67
        if ($request->query->has('type')) {
68
            $datagrid->setValue('type', null, $request->query->get('type'));
69
        }
70
        if ($request->query->has('provider')) {
71
            $datagrid->setValue('provider', null, $request->query->get('provider'));
72
        }
73
74
        $datagrid->buildPager();
75
76
        $pager = $datagrid->getPager();
77
        return $pager->getResults();
78
    }
79
80
    /**
81
     * @param MediaInterface[] $results
82
     * @return array
83
     */
84
    protected function transformResults(array $results)
85
    {
86
        $items = [];
87
        foreach($results as $media) {
88
            $items[] = [
89
                'id' => $media->getId(),
90
                'label' => $this->templating->render('@MediaMonksSonataMedia/CRUD/autocomplete.html.twig', [
91
                    'media' => $media
92
                ])
93
            ];
94
        }
95
96
        return $items;
97
    }
98
}
99