Completed
Push — master ( 1b679c...e05b34 )
by
unknown
19s queued 10s
created

Simulator::setPromoted()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Pagantis\Pagantis\Block\Product;
4
5
use Magento\Backend\Block\Template\Context;
6
use Magento\Catalog\Model\Category;
7
use Magento\Catalog\Model\Product;
8
use Magento\Framework\Registry;
9
use Magento\Framework\View\Element\Template;
10
use Pagantis\Pagantis\Helper\ExtraConfig;
11
use Magento\Framework\Locale\Resolver;
12
use Zend\Db\Sql\Ddl\Column\Boolean;
13
14
/**
15
 * Class Simulator
16
 * @package Pagantis\Pagantis\Block\Product
17
 */
18
class Simulator extends Template
19
{
20
    const PROMOTIONS_CATEGORY = 'pagantis-promotion-product';
21
22
    /**
23
     * @var bool
24
     */
25
    protected $enabled;
26
27
    /**
28
     * @var string
29
     */
30
    protected $publicKey;
31
32
    /**
33
     * @var string
34
     */
35
    protected $productSimulator;
36
37
    /**
38
     * @var string
39
     */
40
    protected $promotionProductExtra;
41
42
    /**
43
     * @var Product
44
     */
45
    protected $product;
46
47
    /**
48
     * @var float
49
     */
50
    protected $minAmount;
51
52
    /**
53
     * @var int
54
     */
55
    protected $minInstallments;
56
57
    /**
58
     * @var string
59
     */
60
    protected $priceSelector;
61
62
    /**
63
     * @var string
64
     */
65
    protected $quantitySelector;
66
67
    /**
68
     * @var String
69
     */
70
    protected $positionSelector;
71
72
    /**
73
     * @var Registry
74
     */
75
    protected $registry;
76
77
    /**
78
     * @var Config
0 ignored issues
show
Bug introduced by
The type Pagantis\Pagantis\Block\Product\Config 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...
79
     */
80
    protected $extraConfig;
81
82
    /**
83
     * @var String
84
     */
85
    protected $simulatorType;
86
87
    /**
88
     * @var String
89
     */
90
    protected $store;
91
92
    /**
93
     * @var Boolean
94
     */
95
    protected $promoted;
96
97
    /**
98
     * Simulator constructor.
99
     *
100
     * @param Context        $context
101
     * @param Registry       $registry
102
     * @param ExtraConfig    $extraConfig
103
     * @param Resolver $store
104
     * @param array          $data
105
     */
106
    public function __construct(
107
        Context $context,
108
        Registry $registry,
109
        ExtraConfig $extraConfig,
110
        Resolver $store,
111
        array $data = []
112
    ) {
113
        parent::__construct($context, $data);
114
        $this->registry = $registry;
115
        $this->store = $store;
0 ignored issues
show
Documentation Bug introduced by
It seems like $store of type Magento\Framework\Locale\Resolver is incompatible with the declared type string of property $store.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
116
        /** @var \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig */
117
        $scopeConfig = $this->_scopeConfig;
118
        $config = $scopeConfig->getValue('payment/pagantis');
119
120
        $this->enabled = $config['active'];
121
        $this->publicKey = isset($config['pagantis_public_key']) ? $config['pagantis_public_key'] : '';
122
        $this->productSimulator = $config['product_simulator'];
123
        $this->extraConfig = $extraConfig->getExtraConfig();
0 ignored issues
show
Documentation Bug introduced by
It seems like $extraConfig->getExtraConfig() of type array or array is incompatible with the declared type Pagantis\Pagantis\Block\Product\Config of property $extraConfig.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
124
125
        $this->minAmount = $this->extraConfig['PAGANTIS_DISPLAY_MIN_AMOUNT'];
126
        $this->minInstallments = $this->extraConfig['PAGANTIS_SIMULATOR_START_INSTALLMENTS'];
127
        $this->priceSelector = $this->extraConfig['PAGANTIS_SIMULATOR_CSS_PRICE_SELECTOR'];
128
        $this->quantitySelector = $this->extraConfig['PAGANTIS_SIMULATOR_CSS_QUANTITY_SELECTOR'];
129
        $this->positionSelector = $this->extraConfig['PAGANTIS_SIMULATOR_CSS_POSITION_SELECTOR'];
130
        $this->simulatorType = $this->extraConfig['PAGANTIS_SIMULATOR_DISPLAY_TYPE'];
131
        $this->promotedMessage = $this->extraConfig['PAGANTIS_PROMOTION_EXTRA'];
0 ignored issues
show
Bug Best Practice introduced by
The property promotedMessage does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
132
133
        $this->promoted = $this->isProductInPromotion();
0 ignored issues
show
Documentation Bug introduced by
It seems like $this->isProductInPromotion() of type boolean is incompatible with the declared type Zend\Db\Sql\Ddl\Column\Boolean of property $promoted.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
134
    }
135
136
    /**
137
     * @return string
138
     */
139
    public function getLocale()
140
    {
141
        return strstr($this->store->getLocale(), '_', true);
142
    }
143
144
    /**
145
     * @param $locale
146
     *
147
     * @return bool
148
     */
149
    public function getAllowedCountry($locale)
150
    {
151
        $locale = strtolower($locale);
152
        $allowedCountries = unserialize($this->extraConfig['PAGANTIS_ALLOWED_COUNTRIES']);
153
        return (in_array(strtolower($locale), $allowedCountries));
154
    }
155
156
    /**
157
     * @return Product
158
     */
159
    protected function getProduct()
160
    {
161
        if (is_null($this->product)) {
162
            $this->product = $this->registry->registry('product');
0 ignored issues
show
Deprecated Code introduced by
The function Magento\Framework\Registry::registry() has been deprecated: 102.0.0 ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

162
            $this->product = /** @scrutinizer ignore-deprecated */ $this->registry->registry('product');

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
163
        }
164
165
        return $this->product;
166
    }
167
168
    /**
169
     * @return bool
170
     */
171
    public function isEnabled()
172
    {
173
        return $this->enabled;
174
    }
175
176
    /**
177
     * @return string
178
     */
179
    public function getPublicKey()
180
    {
181
        return $this->publicKey;
182
    }
183
184
    /**
185
     * @return string
186
     */
187
    public function getPromotionProductExtra()
188
    {
189
        return $this->promotionProductExtra;
190
    }
191
192
    /**
193
     * @return bool
194
     */
195
    public function isProductInPromotion()
196
    {
197
        try {
198
            return ($this->getProduct()->getData('pagantis_promoted') === '1') ? 'true' : 'false';
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->getProduct... '1' ? 'true' : 'false' returns the type string which is incompatible with the documented return type boolean.
Loading history...
199
        } catch (\Exception $exception) {
200
            return 'false';
0 ignored issues
show
Bug Best Practice introduced by
The expression return 'false' returns the type string which is incompatible with the documented return type boolean.
Loading history...
201
        }
202
    }
203
204
    /**
205
     * @return float
206
     */
207
    public function getFinalPrice()
208
    {
209
        return $this->getProduct()->getFinalPrice();
210
    }
211
212
    /**
213
     * @return array|false|string
214
     */
215
    public function getProductSimulator()
216
    {
217
        return $this->productSimulator;
218
    }
219
220
    /**
221
     * @param int $productSimulator
222
     */
223
    public function setProductSimulator($productSimulator)
224
    {
225
        $this->productSimulator = $productSimulator;
226
    }
227
228
    /**
229
     * @return float
230
     */
231
    public function getMinAmount()
232
    {
233
        return $this->minAmount;
234
    }
235
236
    /**
237
     * @param float $minAmount
238
     */
239
    public function setMinAmount($minAmount)
240
    {
241
        $this->minAmount = $minAmount;
242
    }
243
244
    /**
245
     * @return int
246
     */
247
    public function getMinInstallments()
248
    {
249
        return $this->minInstallments;
250
    }
251
252
    /**
253
     * @param int $minInstallments
254
     */
255
    public function setMinInstallments($minInstallments)
256
    {
257
        $this->minInstallments = $minInstallments;
258
    }
259
260
    /**
261
     * @return string
262
     */
263
    public function getPriceSelector()
264
    {
265
        return $this->priceSelector;
266
    }
267
268
    /**
269
     * @param string $priceSelector
270
     */
271
    public function setPriceSelector($priceSelector)
272
    {
273
        $this->priceSelector = $priceSelector;
274
    }
275
276
    /**
277
     * @return string
278
     */
279
    public function getQuantitySelector()
280
    {
281
        return $this->quantitySelector;
282
    }
283
284
    /**
285
     * @param string $quantitySelector
286
     */
287
    public function setQuantitySelector($quantitySelector)
288
    {
289
        $this->quantitySelector = $quantitySelector;
290
    }
291
292
    /**
293
     * @return String
294
     */
295
    public function getPositionSelector()
296
    {
297
        return $this->positionSelector;
298
    }
299
300
    /**
301
     * @param String $positionSelector
302
     */
303
    public function setPositionSelector($positionSelector)
304
    {
305
        $this->positionSelector = $positionSelector;
306
    }
307
308
309
    /**
310
     * @return String
311
     */
312
    public function getSimulatorType()
313
    {
314
        return $this->simulatorType;
315
    }
316
317
    /**
318
     * @param String $simulatorType
319
     */
320
    public function setSimulatorType($simulatorType)
321
    {
322
        $this->simulatorType = $simulatorType;
323
    }
324
325
    /**
326
     * @return Boolean
327
     */
328
    public function getPromoted()
329
    {
330
        return $this->promoted;
331
    }
332
333
    /**
334
     * @param Boolean $promoted
335
     */
336
    public function setPromoted($promoted)
337
    {
338
        $this->promoted = $promoted;
339
    }
340
}
341