VerificationFiles::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 19
c 0
b 0
f 0
rs 9.6333
cc 1
nc 1
nop 11

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
/**
3
 * File: VerificationFiles.php
4
 *
5
 * @author Maciej Sławik <[email protected]>
6
 * @copyright Copyright (C) 2018 Lizard Media (http://lizardmedia.pl)
7
 */
8
declare(strict_types=1);
9
10
namespace LizardMedia\GoogleAnalyticsVerifier\Model\Config\Backend;
11
12
use LizardMedia\GoogleAnalyticsVerifier\Api\Data\RewriteInterface;
13
use LizardMedia\GoogleAnalyticsVerifier\Api\Rewrite\GeneratorInterface;
14
use LizardMedia\GoogleAnalyticsVerifier\Api\Rewrite\PurgerInterface;
15
use LizardMedia\GoogleAnalyticsVerifier\Model\Data\RewriteArray;
16
use LizardMedia\GoogleAnalyticsVerifier\Model\Data\RewriteArrayFactory;
17
use LizardMedia\GoogleAnalyticsVerifier\Model\Data\RewriteFactory;
18
use Magento\Framework\App\Cache\TypeListInterface;
19
use Magento\Framework\App\Config\ScopeConfigInterface;
20
use Magento\Framework\App\Config\Value;
21
use Magento\Framework\Data\Collection\AbstractDb;
22
use Magento\Framework\Model\Context;
23
use Magento\Framework\Model\ResourceModel\AbstractResource;
24
use Magento\Framework\Registry;
25
use Zend\Json\Json;
26
27
/**
28
 * Class VerificationFiles
29
 * @package LizardMedia\GoogleAnalyticsVerifier\Model\Config\Backend
30
 */
31
class VerificationFiles extends Value
32
{
33
    /**
34
     * @var GeneratorInterface
35
     */
36
    private $rewriteGenerator;
37
38
    /**
39
     * @var PurgerInterface
40
     */
41
    private $rewritePurger;
42
43
    /**
44
     * @var RewriteFactory
45
     */
46
    private $rewriteFactory;
47
48
    /**
49
     * @var RewriteArrayFactory
50
     */
51
    private $rewriteArrayFactory;
52
53
    /**
54
     * VerificationFiles constructor.
55
     * @param GeneratorInterface $rewriteGenerator
56
     * @param PurgerInterface $rewritePurger
57
     * @param RewriteFactory $rewriteFactory
58
     * @param RewriteArrayFactory $rewriteArrayFactory
59
     * @param Context $context
60
     * @param Registry $registry
61
     * @param ScopeConfigInterface $config
62
     * @param TypeListInterface $cacheTypeList
63
     * @param AbstractResource|null $resource
64
     * @param AbstractDb|null $resourceCollection
65
     * @param array $data
66
     */
67
    public function __construct(
68
        GeneratorInterface $rewriteGenerator,
69
        PurgerInterface $rewritePurger,
70
        RewriteFactory $rewriteFactory,
71
        RewriteArrayFactory $rewriteArrayFactory,
72
        Context $context,
73
        Registry $registry,
74
        ScopeConfigInterface $config,
75
        TypeListInterface $cacheTypeList,
76
        AbstractResource $resource = null,
77
        AbstractDb $resourceCollection = null,
78
        array $data = []
79
    ) {
80
        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
81
        $this->rewriteGenerator = $rewriteGenerator;
82
        $this->rewritePurger = $rewritePurger;
83
        $this->rewriteFactory = $rewriteFactory;
84
        $this->rewriteArrayFactory = $rewriteArrayFactory;
85
    }
86
87
    /**
88
     * @return \Magento\Framework\App\Config\Value
89
     */
90
    public function beforeSave()
91
    {
92
        $this->prepareFieldValueForSave();
93
        return parent::beforeSave();
94
    }
95
96
    /**
97
     * @return \Magento\Framework\App\Config\Value
98
     */
99
    public function afterSave()
100
    {
101
        if ($this->isValueChanged()) {
102
            $this->refreshUrlRewrites();
103
        }
104
        return parent::afterSave();
105
    }
106
107
    /**
108
     * @return void
109
     */
110
    public function afterLoad()
111
    {
112
        if ($this->getValue()) {
113
            $this->prepareFieldValueForRender();
114
        }
115
        parent::afterLoad();
116
    }
117
118
    /**
119
     * @return void
120
     */
121
    private function prepareFieldValueForRender()
122
    {
123
        $this->setValue(Json::decode($this->getValue(), Json::TYPE_ARRAY));
124
    }
125
126
    /**
127
     * @return void
128
     */
129
    private function prepareFieldValueForSave()
130
    {
131
        $newValue = $this->getValue();
132
        if (isset($newValue['__empty'])) {
133
            unset($newValue['__empty']);
134
        }
135
        $this->setValue(Json::encode($newValue));
136
    }
137
138
    /**
139
     * @return void
140
     */
141
    private function refreshUrlRewrites()
142
    {
143
        $this->rewritePurger->purgeVerificationFileRewrites();
144
        $this->rewriteGenerator->generateVerificationFileRewrite(...$this->getRewritesArray());
145
    }
146
147
    /**
148
     * @return RewriteArray
149
     */
150
    private function getRewritesArray(): RewriteArray
151
    {
152
        /** @var RewriteArray $rewrites */
153
        $rewrites = $this->rewriteArrayFactory->create();
154
        $valueArray = Json::decode($this->getValue(), Json::TYPE_ARRAY);
155
        foreach ($valueArray as $rowId => $data) {
156
            if (!($data[RewriteInterface::FILENAME]) || !$data[RewriteInterface::FILECONTENT]) {
157
                continue;
158
            }
159
160
            /** @var RewriteInterface $rewrite */
161
            $rewrite = $this->rewriteFactory->create();
162
            $rewrite->setFileName($data[RewriteInterface::FILENAME]);
163
            $rewrite->setFileContent($data[RewriteInterface::FILECONTENT]);
164
            $rewrites->add($rewrite);
165
        }
166
        return $rewrites;
167
    }
168
}
169