Completed
Push — master ( 876042...5306a5 )
by Tim
9s
created

UrlRewriteObserver::process()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 16
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 16
c 0
b 0
f 0
rs 9.4285
cc 3
eloc 6
nc 3
nop 0
1
<?php
2
3
/**
4
 * TechDivision\Import\Category\Observers\UrlRewriteObserver
5
 *
6
 * NOTICE OF LICENSE
7
 *
8
 * This source file is subject to the Open Software License (OSL 3.0)
9
 * that is available through the world-wide-web at this URL:
10
 * http://opensource.org/licenses/osl-3.0.php
11
 *
12
 * PHP version 5
13
 *
14
 * @author    Tim Wagner <[email protected]>
15
 * @copyright 2016 TechDivision GmbH <[email protected]>
16
 * @license   http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
17
 * @link      https://github.com/techdivision/import-category
18
 * @link      http://www.techdivision.com
19
 */
20
21
namespace TechDivision\Import\Category\Observers;
22
23
use TechDivision\Import\Category\Utils\ColumnKeys;
24
use TechDivision\Import\Category\Utils\MemberNames;
25
use TechDivision\Import\Utils\Filter\ConvertLiteralUrl;
26
27
/**
28
 * Observer that creates/updates the category's URL rewrites.
29
 *
30
 * @author    Tim Wagner <[email protected]>
31
 * @copyright 2016 TechDivision GmbH <[email protected]>
32
 * @license   http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
33
 * @link      https://github.com/techdivision/import-category
34
 * @link      http://www.techdivision.com
35
 */
36
class UrlRewriteObserver extends AbstractCategoryImportObserver
37
{
38
39
    /**
40
     * The entity type to load the URL rewrites for.
41
     *
42
     * @var string
43
     */
44
    const ENTITY_TYPE = 'category';
45
46
    /**
47
     * Process the observer's business logic.
48
     *
49
     * @return void
50
     */
51
    protected function process()
52
    {
53
54
        // query whether or not, we've found a new path => means we've found a new category
55
        if ($this->hasBeenProcessed($this->getValue(ColumnKeys::PATH))) {
56
            return;
57
        }
58
59
        // initialize the store view code
60
        $this->prepareStoreViewCode();
61
62
        // initialize and persist the URL rewrite
63
        if ($urlRewrite = $this->initializeUrlRewrite($this->prepareAttributes())) {
64
            $this->persistUrlRewrite($urlRewrite);
65
        }
66
    }
67
68
    /**
69
     * Initialize the category product with the passed attributes and returns an instance.
70
     *
71
     * @param array $attr The category product attributes
72
     *
73
     * @return array The initialized category product
74
     */
75
    protected function initializeUrlRewrite(array $attr)
76
    {
77
        return $attr;
78
    }
79
80
    /**
81
     * Prepare the attributes of the entity that has to be persisted.
82
     *
83
     * @return array The prepared attributes
84
     */
85
    protected function prepareAttributes()
86
    {
87
88
        // load the store ID to use
89
        $storeId = $this->getRowStoreId();
90
91
        // initialize the values
92
        $entityId = $this->getLastEntityId();
93
        $requestPath = $this->prepareRequestPath();
94
        $targetPath = $this->prepareTargetPath();
95
96
        // return the prepared URL rewrite
97
        return $this->initializeEntity(
98
            array(
99
                MemberNames::ENTITY_TYPE      => UrlRewriteObserver::ENTITY_TYPE,
100
                MemberNames::ENTITY_ID        => $entityId,
101
                MemberNames::REQUEST_PATH     => $requestPath,
102
                MemberNames::TARGET_PATH      => $targetPath,
103
                MemberNames::REDIRECT_TYPE    => 0,
104
                MemberNames::STORE_ID         => $storeId,
105
                MemberNames::DESCRIPTION      => null,
106
                MemberNames::IS_AUTOGENERATED => 1,
107
                MemberNames::METADATA         => null
108
            )
109
        );
110
    }
111
112
    /**
113
     * Prepare's the target path for a URL rewrite.
114
     *
115
     * @return string The target path
116
     */
117
    protected function prepareTargetPath()
118
    {
119
        return sprintf('catalog/category/view/id/%d', $this->getPrimaryKey());
120
    }
121
122
    /**
123
     * Prepare's the request path for a URL rewrite or the target path for a 301 redirect.
124
     *
125
     * @return string The request path
126
     */
127
    protected function prepareRequestPath()
128
    {
129
        return sprintf('%s.html', $this->getValue(ColumnKeys::URL_PATH));
130
    }
131
132
    /**
133
     * Return's the store ID of the actual row, or of the default store
134
     * if no store view code is set in the CSV file.
135
     *
136
     * @param string|null $default The default store view code to use, if no store view code is set in the CSV file
137
     *
138
     * @return integer The ID of the actual store
139
     * @throws \Exception Is thrown, if the store with the actual code is not available
140
     */
141
    protected function getRowStoreId($default = null)
142
    {
143
        return $this->getSubject()->getRowStoreId($default);
144
    }
145
146
    /**
147
     * Persist's the URL rewrite with the passed data.
148
     *
149
     * @param array $row The URL rewrite to persist
150
     *
151
     * @return string The ID of the persisted entity
152
     */
153
    protected function persistUrlRewrite($row)
154
    {
155
        return $this->getSubject()->persistUrlRewrite($row);
156
    }
157
158
    /**
159
     * Return's the PK to create the product => attribute relation.
160
     *
161
     * @return integer The PK to create the relation with
162
     */
163
    protected function getPrimaryKey()
164
    {
165
        return $this->getLastEntityId();
166
    }
167
}
168