VerificationFiles::afterLoad()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
c 0
b 0
f 0
rs 10
cc 2
nc 2
nop 0
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