GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( eeec88...a15255 )
by Bob Olde
10s
created

ShippingCategories   A

Complexity

Total Complexity 15

Size/Duplication

Total Lines 123
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 0
Metric Value
wmc 15
lcom 1
cbo 1
dl 0
loc 123
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A export() 0 16 3
A getShippingCategoryDefinition() 0 8 1
B import() 0 31 6
A populateShippingCategory() 0 9 1
A resetCraftShippingCategoriesServiceCache() 0 20 4
1
<?php
2
3
namespace NerdsAndCompany\Schematic\Commerce\Services;
4
5
use Craft\Craft;
6
use Craft\Commerce_ShippingCategoryModel;
7
use NerdsAndCompany\Schematic\Services\Base;
8
9
/**
10
 * Schematic Commerce Shipping Categories Service.
11
 *
12
 * Sync Craft Setups.
13
 *
14
 * @author    Nerds & Company
15
 * @copyright Copyright (c) 2015-2017, Nerds & Company
16
 * @license   MIT
17
 *
18
 * @see      http://www.nerds.company
19
 */
20
class ShippingCategories extends Base
21
{
22
    /**
23
     * Export shippingCategories.
24
     *
25
     * @param ShippingCategoryModel[] $shippingCategories
26
     *
27
     * @return array
28
     */
29
    public function export(array $shippingCategories = [])
30
    {
31
        if (!count($shippingCategories)) {
32
            $shippingCategories = Craft::app()->commerce_shippingCategories->getAllShippingCategories();
33
        }
34
35
        Craft::log(Craft::t('Exporting Commerce Shipping Categories'));
36
37
        $shippingCategoryDefinitions = [];
38
39
        foreach ($shippingCategories as $shippingCategory) {
40
            $shippingCategoryDefinitions[$shippingCategory->handle] = $this->getShippingCategoryDefinition($shippingCategory);
41
        }
42
43
        return $shippingCategoryDefinitions;
44
    }
45
46
    /**
47
     * Get shipping categories definition.
48
     *
49
     * @param Commerce_ShippingCategoryModel $shippingCategory
50
     *
51
     * @return array
52
     */
53
    private function getShippingCategoryDefinition(Commerce_ShippingCategoryModel $shippingCategory)
54
    {
55
        return [
56
            'name' => $shippingCategory->name,
57
            'description' => $shippingCategory->description,
58
            'default' => $shippingCategory->default,
59
        ];
60
    }
61
62
    /**
63
     * Attempt to import shipping categories.
64
     *
65
     * @param array $shippingCategoryDefinitions
66
     * @param bool  $force                       If set to true shipping categories not included in the import will be deleted
67
     *
68
     * @return Result
69
     */
70
    public function import(array $shippingCategoryDefinitions, $force = false)
71
    {
72
        Craft::log(Craft::t('Importing Commerce Shipping Categories'));
73
74
        $this->resetCraftShippingCategoriesServiceCache();
75
        $shippingCategories = Craft::app()->commerce_shippingCategories->getAllShippingCategories('handle');
76
77
        foreach ($shippingCategoryDefinitions as $shippingCategoryHandle => $shippingCategoryDefinition) {
78
            $shippingCategory = array_key_exists($shippingCategoryHandle, $shippingCategories)
79
                ? $shippingCategories[$shippingCategoryHandle]
80
                : new Commerce_ShippingCategoryModel();
81
82
            unset($shippingCategories[$shippingCategoryHandle]);
83
84
            $this->populateShippingCategory($shippingCategory, $shippingCategoryDefinition, $shippingCategoryHandle);
85
86
            if (!Craft::app()->commerce_shippingCategories->saveShippingCategory($shippingCategory)) { // Save shippingcategory via craft
87
                $this->addErrors($shippingCategory->getAllErrors());
88
89
                continue;
90
            }
91
        }
92
93
        if ($force) {
94
            foreach ($shippingCategories as $shippingCategory) {
95
                Craft::app()->commerce_shippingCategories->deleteShippingCategoryById($shippingCategory->id);
96
            }
97
        }
98
99
        return $this->getResultModel();
100
    }
101
102
    /**
103
     * Populate shippingcategory.
104
     *
105
     * @param Commerce_ShippingCategoryModel $shippingCategory
106
     * @param array                          $shippingCategoryDefinition
107
     * @param string                         $shippingCategoryHandle
108
     */
109
    private function populateShippingCategory(Commerce_ShippingCategoryModel $shippingCategory, array $shippingCategoryDefinition, $shippingCategoryHandle)
110
    {
111
        $shippingCategory->setAttributes([
112
            'handle' => $shippingCategoryHandle,
113
            'name' => $shippingCategoryDefinition['name'],
114
            'description' => $shippingCategoryDefinition['description'],
115
            'default' => $shippingCategoryDefinition['default'],
116
        ]);
117
    }
118
119
    /**
120
     * Reset service cache using reflection.
121
     */
122
    private function resetCraftShippingCategoriesServiceCache()
123
    {
124
        $obj = Craft::app()->commerce_shippingCategories;
125
        $refObject = new \ReflectionObject($obj);
126
        if ($refObject->hasProperty('_fetchedAllShippingCategories')) {
127
            $refProperty = $refObject->getProperty('_fetchedAllShippingCategories');
128
            $refProperty->setAccessible(true);
129
            $refProperty->setValue($obj, false);
130
        }
131
        if ($refObject->hasProperty('_shippingCategoriesById')) {
132
            $refProperty = $refObject->getProperty('_shippingCategoriesById');
133
            $refProperty->setAccessible(true);
134
            $refProperty->setValue($obj, array());
135
        }
136
        if ($refObject->hasProperty('_shippingCategoriesByHandle')) {
137
            $refProperty = $refObject->getProperty('_shippingCategoriesByHandle');
138
            $refProperty->setAccessible(true);
139
            $refProperty->setValue($obj, array());
140
        }
141
    }
142
}
143