Passed
Pull Request — master (#9)
by Matthew
02:57
created

LocatorControllerExtension   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 66
Duplicated Lines 0 %

Test Coverage

Coverage 33.33%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 66
ccs 12
cts 36
cp 0.3333
rs 10
wmc 7

2 Methods

Rating   Name   Duplication   Size   Complexity  
A categoriesString() 0 18 3
B onBeforeInit() 0 35 4
1
<?php
2
3
namespace Dynamic\Locator\React\Extensions;
4
5
use SilverStripe\Core\Extension;
6
use SilverStripe\View\Requirements;
7
8
/**
9
 * Class LocatorControllerExtension
10
 * @package Dynamic\Locator\React\Extensions
11
 */
12
class LocatorControllerExtension extends Extension
13
{
14
15
    /**
16
     *
17
     */
18
    public function onBeforeInit()
19
    {
20
        // stops script from loading
21
        Requirements::block('jquery-locator');
22
23
        $radii = $this->owner->getShowRadius() ? $this->owner->getRadii() : [];
24
        $radiiString = json_encode($radii);
25
26
        $categories = $this->owner->getCategories();
27
        $categoriesString = $this->owner->categoriesString($categories);
28
29
        $unit = $this->owner->Unit ?: 'm';
30
        $limit = $this->owner->getLimit();
31
        $defaultLat = $this->owner->DefaultLat;
32
        $defaultLng = $this->owner->DefaultLng;
33
        // otherwise this is 0 or 1
34
        $clusters = $this->owner->Clusters ? 'true' : 'false';
35
        $infoWindowTemplate = $this->owner->getInfoWindowTemplate();
36
        $listTemplate = $this->owner->getListTemplate();
37
38
        Requirements::customScript("
39
            window.dynamic_locator = {
40
                'radii': {$radiiString},
41
                'categories': {$categoriesString},
42
                'unit': '{$unit}',
43
                'limit': {$limit},
44
                'clusters': {$clusters},
45
                'infoWindowTemplatePath': '{$infoWindowTemplate}',
46
                'listTemplatePath': '{$listTemplate}',
47
                'defaultCenter': {
48
                    'lat': {$defaultLat},
49
                    'lng': {$defaultLng}
50
                }
51
            };
52
        ", 'react-locator');
53
    }
54
55
    /**
56
     * @param $categories
57
     *
58
     * @return string
59
     */
60 1
    public function categoriesString($categories)
61
    {
62 1
        $string = '[';
63 1
        for ($i = 0; $i < $categories->count(); $i++) {
64 1
            $cat = $categories[$i];
65 1
            $ID = $cat->ID;
66 1
            $Name = $cat->Name;
67
            $string .= "{
68 1
                'ID': {$ID},
69 1
                'Name': '{$Name}'
70
            }";
71
72 1
            if ($i !== $categories->count() - 1) {
73 1
                $string .= ',';
74
            }
75
        }
76 1
        $string .= ']';
77 1
        return $string;
78
    }
79
}
80