HasPrevNextUtils::addPrevNextUtils()   B
last analyzed

Complexity

Conditions 8
Paths 32

Size

Total Lines 41
Code Lines 27

Duplication

Lines 0
Ratio 0 %

Importance

Changes 4
Bugs 2 Features 0
Metric Value
cc 8
eloc 27
c 4
b 2
f 0
nc 32
nop 1
dl 0
loc 41
rs 8.4444
1
<?php
2
3
namespace LeKoala\CmsActions;
4
5
use SilverStripe\Control\Controller;
6
use SilverStripe\Forms\FieldList;
7
8
/**
9
 * Add prev next in utils
10
 * Simply call `addPrevNextUtils` method in your getCMSUtils
11
 * This is not so useful anymore since silverstripe provides this by default now
12
 * but can help if you use custom prev/next logic
13
 */
14
trait HasPrevNextUtils
15
{
16
    /**
17
     * @param FieldList $utils
18
     * @return FieldList
19
     */
20
    public function addPrevNextUtils(FieldList $utils)
21
    {
22
        $controller = Controller::curr();
23
        $request = $controller->getRequest();
24
        $url = rtrim($request->getURL(), '/') . '/';
25
26
        $query = $_GET;
27
        if (!empty($query)) {
28
            $url .= '?' . http_build_query($query);
29
        }
30
31
        $routeParams = $request->routeParams();
32
        $recordClass = get_class($this);
33
        $getPreviousRecordID = $routeParams['cmsactions'][$recordClass]['PreviousRecordID'] ?? $request->param('PreviousRecordID');
34
        $getNextRecordID = $routeParams['cmsactions'][$recordClass]['NextRecordID'] ?? $request->param('NextRecordID');
35
36
        $search = sprintf('/%d/', $this->ID);
37
        $replaceStr = '/%d/';
38
        $PrevRecordLink = $routeParams['cmsactions'][$recordClass]['PrevRecordLink'] ?? null;
39
        $NextRecordLink = $routeParams['cmsactions'][$recordClass]['NextRecordLink'] ?? null;
40
        if (!$PrevRecordLink) {
41
            $PrevRecordLink = str_replace($search, sprintf($replaceStr, $getPreviousRecordID), $url);
42
        }
43
        if (!$NextRecordLink) {
44
            $NextRecordLink = str_replace($search, sprintf($replaceStr, $getNextRecordID), $url);
45
        }
46
47
        if ($this->ID && $getNextRecordID) {
48
            $utils->unshift(
49
                $NextBtnLink = CmsInlineFormAction::create('NextBtnLink', _t('HasPrevNextUtils.Next', 'Next') . ' >', 'btn-secondary')
50
            );
51
            $NextBtnLink->setLink($NextRecordLink);
52
        }
53
        if ($this->ID && $getPreviousRecordID) {
54
            $utils->unshift(
55
                $PrevBtnLink = CmsInlineFormAction::create('PrevBtnLink', '< ' . _t('HasPrevNextUtils.Previous', 'Previous'), 'btn-secondary')
56
            );
57
            $PrevBtnLink->setLink($PrevRecordLink);
58
        }
59
60
        return $utils;
61
    }
62
}
63