Passed
Push — master ( 6c2061...b6dc4c )
by Will
05:08
created

src/Extension/ShopConfigExtension.php (1 issue)

Labels
Severity
1
<?php
2
3
namespace SilverShop\Extension;
4
5
use SilverStripe\AssetAdmin\Forms\UploadField;
0 ignored issues
show
The type SilverStripe\AssetAdmin\Forms\UploadField was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
6
use SilverStripe\Assets\Image;
7
use SilverStripe\CMS\Model\SiteTree;
8
use SilverStripe\Core\Config\Configurable;
9
use SilverStripe\Forms\CheckboxSetField;
10
use SilverStripe\Forms\FieldList;
11
use SilverStripe\Forms\Tab;
12
use SilverStripe\Forms\TabSet;
13
use SilverStripe\Forms\TreeDropdownField;
14
use SilverStripe\ORM\DataExtension;
15
use SilverStripe\Security\Group;
16
use SilverStripe\SiteConfig\SiteConfig;
17
18
/**
19
 * @property string $AllowedCountries
20
 * @property int $TermsPageID
21
 * @property int $CustomerGroupID
22
 * @property int $DefaultProductImageID
23
 *
24
 * @method SiteTree TermsPage()
25
 * @method Group CustomerGroup()
26
 * @method Image DefaultProductImage()
27
 */
28
class ShopConfigExtension extends DataExtension
29
{
30
    use Configurable;
31
32
    private static $db = [
33
        'AllowedCountries' => 'Text',
34
    ];
35
36
    private static $has_one = [
37
        'TermsPage' => SiteTree::class,
38
        'CustomerGroup' => Group::class,
39
        'DefaultProductImage' => Image::class,
40
    ];
41
42
    /**
43
     * Email address where shop emails should be sent from
44
     *
45
     * @config
46
     * @var
47
     */
48
    private static $email_from;
49
50
    /**
51
     * The shop base currency
52
     *
53
     * @config
54
     * @var
55
     */
56
    private static $base_currency = 'NZD';
57
58
    private static $forms_use_button_tag = false;
59
60
    public static function current()
61
    {
62
        return SiteConfig::current_site_config();
63
    }
64
65
    public static function get_site_currency()
66
    {
67
        return self::config()->base_currency;
68
    }
69
70
    public function updateCMSFields(FieldList $fields)
71
    {
72
        $fields->insertBefore('Access', $shoptab = Tab::create('Shop', 'Shop'));
73
        $fields->addFieldToTab(
74
            'Root.Shop',
75
            TabSet::create(
76
                'ShopTabs',
77
                $maintab = Tab::create(
78
                    'Main',
79
                    TreeDropdownField::create(
80
                        'TermsPageID',
81
                        _t(__CLASS__ . '.TermsPage', 'Terms and Conditions Page'),
82
                        SiteTree::class
83
                    ),
84
                    TreeDropdownField::create(
85
                        'CustomerGroupID',
86
                        _t(__CLASS__ . '.CustomerGroup', 'Group to add new customers to'),
87
                        Group::class
88
                    ),
89
                    UploadField::create('DefaultProductImage', _t(__CLASS__ . '.DefaultImage', 'Default Product Image'))
90
                ),
91
                $countriesTab = Tab::create(
92
                    'Countries',
93
                    CheckboxSetField::create(
94
                        'AllowedCountries',
95
                        _t(__CLASS__ . '.AllowedCountries', 'Allowed Ordering and Shipping Countries'),
96
                        self::config()->iso_3166_country_codes
97
                    )
98
                )
99
            )
100
        );
101
        $fields->removeByName('CreateTopLevelGroups');
102
        $countriesTab->setTitle(_t(__CLASS__ . '.AllowedCountriesTabTitle', 'Allowed Countries'));
103
    }
104
105
    /**
106
     * Get list of allowed countries
107
     *
108
     * @param boolean $prefixisocode - prefix the country code
109
     *
110
     * @return array
111
     */
112
    public function getCountriesList($prefixisocode = false)
113
    {
114
        $countries = self::config()->iso_3166_country_codes;
115
        asort($countries);
116
        if ($allowed = $this->owner->AllowedCountries) {
117
            $allowed = json_decode($allowed);
118
            if (!empty($allowed)) {
119
                $countries = array_intersect_key($countries, array_flip($allowed));
120
            }
121
        }
122
        if ($prefixisocode) {
123
            foreach ($countries as $key => $value) {
124
                $countries[$key] = "$key - $value";
125
            }
126
        }
127
        return $countries;
128
    }
129
130
    /**
131
     * For shops that only sell to a single country,
132
     * this will return the country code, otherwise null.
133
     *
134
     * @param string fullname get long form name of country
135
     *
136
     * @return string country code
137
     */
138
    public function getSingleCountry($fullname = false)
139
    {
140
        $countries = $this->getCountriesList();
141
        if (count($countries) == 1) {
142
            if ($fullname) {
143
                return array_pop($countries);
144
            } else {
145
                reset($countries);
146
                return key($countries);
147
            }
148
        }
149
        return null;
150
    }
151
152
    /**
153
     * Convert iso country code to English country name
154
     *
155
     * @return string - name of country
156
     */
157
    public static function countryCode2name($code)
158
    {
159
        $codes = self::config()->iso_3166_country_codes;
160
        if (isset($codes[$code])) {
161
            return $codes[$code];
162
        }
163
        return $code;
164
    }
165
}
166