SortHelper::getSortableLink()   A
last analyzed

Complexity

Conditions 5
Paths 5

Size

Total Lines 28
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 2
Metric Value
cc 5
eloc 14
c 2
b 0
f 2
nc 5
nop 2
dl 0
loc 28
rs 9.4888
1
<?php
2
3
namespace ChurakovMike\EasyGrid\Helpers;
4
5
use ChurakovMike\EasyGrid\Columns\ActionColumn;
6
use ChurakovMike\EasyGrid\Columns\BaseColumn;
7
use Illuminate\Http\Request;
8
9
/**
10
 * Class QueryHelper.
11
 */
12
class SortHelper
13
{
14
    const
15
        SORT_ASC = 'asc',
16
        SORT_DESC = 'desc';
17
18
    /**
19
     * Build sort link for model.
20
     *
21
     * @param Request $request
22
     * @param BaseColumn|ActionColumn $column
23
     * @return string
24
     */
25
    public static function getSortableLink(Request $request, $column): string
26
    {
27
        if ($column instanceof ActionColumn) {
28
            return '';
29
        }
30
31
        $sortQuery = $request->get('sort', null);
32
33
        if (is_null($sortQuery)) {
34
            return $request->fullUrlWithQuery([
35
                'sort' => $column->getAttribute(),
36
            ]);
37
        }
38
39
        if ($sortQuery == $column->getAttribute()) {
40
            return $request->fullUrlWithQuery([
41
                'sort' => '-' . $column->getAttribute(),
42
            ]);
43
        }
44
45
        if ($sortQuery == ('-' . $column->getAttribute())) {
46
            return $request->fullUrlWithQuery([
47
                'sort' => $column->getAttribute(),
48
            ]);
49
        }
50
51
        return $request->fullUrlWithQuery([
52
            'sort' => $column->getAttribute(),
53
        ]);
54
    }
55
56
    /**
57
     * Return column from request.
58
     *
59
     * @param Request $request
60
     * @return mixed
61
     */
62
    public static function getSortColumn(Request $request): string
63
    {
64
        $column = $request->get('sort');
65
66
        return str_replace('-', '', $column);
67
    }
68
69
    /**
70
     * Return column direction from request.
71
     *
72
     * @param Request $request
73
     * @return string
74
     */
75
    public static function getDirection(Request $request): string
76
    {
77
        $column = $request->get('sort');
78
        $position = mb_strpos($column, '-');
79
        if ($position === 0) {
80
            return self::SORT_DESC;
81
        }
82
83
        return self::SORT_ASC;
84
    }
85
}
86