Completed
Push — master ( 770316...74fc07 )
by Jeroen
09:08 queued 02:44
created

AdminListBundle/Traits/ChangeableLimitTrait.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\AdminListBundle\Traits;
4
5
use Symfony\Component\HttpFoundation\Request;
6
7
/**
8
 * Trait ChangeableLimitTrait
9
 */
10
trait ChangeableLimitTrait
11
{
12
    private $limit;
13
14
    /**
15
     * Bind current request.
16
     *
17
     * @param Request $request
18
     */
19
    public function bindRequest(Request $request)
20
    {
21
        $query = $request->query;
22
        $session = $request->getSession();
23
24
        $adminListName = 'listconfig_' . $request->get('_route');
25
26
        $this->page = $request->query->getInt('page', 1);
27
        $this->limit = $request->query->getInt('limit', $this->getLimitOptions()[0]);
28
29
        $adminListSessionData = $request->getSession()->get($adminListName);
30
        if (!$query->has('limit') && null !== $adminListSessionData && isset($adminListSessionData['limit'])) {
31
            $this->limit = $adminListSessionData['limit'];
32
        }
33
34
        if ($request->query->has('limit') && !$request->query->has('page')) {
35
            $this->page = 1;
36
        }
37
38
        // Allow alphanumeric, _ & . in order by parameter!
39
        $this->orderBy = preg_replace('/[^[a-zA-Z0-9\_\.]]/', '', $request->query->get('orderBy', ''));
40
        $this->orderDirection = $request->query->getAlpha('orderDirection');
41
42
        // there is a session and the filter param is not set
43 View Code Duplication
        if ($session->has($adminListName) && !$query->has('filter')) {
44
            if (!$query->has('page') && !$query->has('limit')) {
45
                $this->page = $adminListSessionData['page'];
46
            }
47
48
            if (!$query->has('orderBy')) {
49
                $this->orderBy = $adminListSessionData['orderBy'];
50
            }
51
52
            if (!$query->has('orderDirection')) {
53
                $this->orderDirection = $adminListSessionData['orderDirection'];
54
            }
55
        }
56
57
        // save current parameters
58
        $session->set(
59
            $adminListName,
60
            [
61
                'page' => $this->page,
62
                'limit' => $this->limit,
63
                'orderBy' => $this->orderBy,
64
                'orderDirection' => $this->orderDirection,
65
            ]
66
        );
67
68
        // Remove limit from query param so it doesn't affect the session of the filter builder
69
        $request->query->remove('limit');
70
        $this->getFilterBuilder()->bindRequest($request);
71
    }
72
73
    /**
74
     * @return int
75
     */
76
    public function getLimit()
77
    {
78
        return $this->limit;
79
    }
80
81
    /** @return array */
0 ignored issues
show
Consider making the return type a bit more specific; maybe use integer[].

This check looks for the generic type array as a return type and suggests a more specific type. This type is inferred from the actual code.

Loading history...
82
    public function getLimitOptions()
83
    {
84
        return [
85
            10,
86
            20,
87
            50,
88
            100,
89
        ];
90
    }
91
}
92