Completed
Push — master ( d07a45...da6ba5 )
by
unknown
02:06
created

src/Assembler/CategoryAssembler.php (4 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
/**
4
 * TechDivision\Import\Assembler\CategoryAssembler
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
18
 * @link      http://www.techdivision.com
19
 */
20
21
namespace TechDivision\Import\Assembler;
22
23
use TechDivision\Import\Utils\MemberNames;
24
use TechDivision\Import\Serializer\SerializerInterface;
25
use TechDivision\Import\Repositories\CategoryRepository;
26
use TechDivision\Import\Repositories\CategoryVarcharRepository;
27
28
/**
29
 * Repository implementation to assemble category data.
30
 *
31
 * @author    Tim Wagner <[email protected]>
32
 * @copyright 2016 TechDivision GmbH <[email protected]>
33
 * @license   http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
34
 * @link      https://github.com/techdivision/import
35
 * @link      http://www.techdivision.com
36
 */
37
class CategoryAssembler implements CategoryAssemblerInterface
38
{
39
40
    /**
41
     * The serialize instance.
42
     *
43
     * @var \TechDivision\Import\Serializer\SerializerInterface
44
     */
45
    protected $serializer;
46
47
    /**
48
     * The repository to access categories.
49
     *
50
     * @var \TechDivision\Import\Repositories\CategoryRepository
51
     */
52
    protected $categoryRepository;
53
54
    /**
55
     * The repository to access category varchar values.
56
     *
57
     * @var \TechDivision\Import\Repositories\CategoryVarcharRepository
58
     */
59
    protected $categoryVarcharRepository;
60
61
    /**
62
     * Initialize the assembler with the passed instances.
63
     *
64
     * @param \TechDivision\Import\Repositories\CategoryRepository        $categoryRepository        The repository to access categories
65
     * @param \TechDivision\Import\Repositories\CategoryVarcharRepository $categoryVarcharRepository The repository instance
66
     * @param \TechDivision\Import\Serializer\SerializerInterface         $serializer                The serializer instance
67
     */
68
    public function __construct(
69
        CategoryRepository $categoryRepository,
70
        CategoryVarcharRepository $categoryVarcharRepository,
71
        SerializerInterface $serializer
72
    ) {
73
        $this->categoryRepository = $categoryRepository;
74
        $this->categoryVarcharRepository = $categoryVarcharRepository;
75
        $this->serializer = $serializer;
76
    }
77
78
    /**
79
     * Returns an array with the available categories and their
80
     * resolved path as keys.
81
     *
82
     * @return array The array with the categories
83
     */
84 View Code Duplication
    public function getCategoriesWithResolvedPath()
0 ignored issues
show
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
85
    {
86
87
        // prepare the categories
88
        $categories = array();
89
90
        // load the categories from the database
91
        $availableCategories = $this->categoryRepository->findAll();
92
93
        // create the array with the resolved category path as keys
94
        foreach ($availableCategories as $category) {
95
            // expload the entity IDs from the category path
96
            $entityIds =  $this->serializer->explode($category[MemberNames::PATH]);
97
98
            // cut-off the root category
99
            array_shift($entityIds);
100
101
            // continue with the next category if no entity IDs are available
102
            if (sizeof($entityIds) === 0) {
103
                continue;
104
            }
105
106
            // initialize the array for the path elements
107
            $path = array();
108
            foreach ($entityIds as $entityId) {
109
                $cat = $this->categoryVarcharRepository->findByEntityId($entityId);
110
                if ($cat && $cat[MemberNames::VALUE]) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $cat of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
111
                    $path[] = $cat[MemberNames::VALUE];
112
                }
113
            }
114
115
            // append the catogory with the string path as key
116
            $categories[$this->serializer->implode($path)] = $category;
117
        }
118
119
        // return array with the categories
120
        return $categories;
121
    }
122
123
124
    /**
125
     * Return's an array with the available categories and their resolved path
126
     * as keys by store view ID.
127
     *
128
     * @param integer $storeViewId The store view ID to return the categories for
129
     *
130
     * @return array The available categories for the passed store view ID
131
     */
132 View Code Duplication
    public function getCategoriesWithResolvedPathByStoreView($storeViewId)
0 ignored issues
show
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
133
    {
134
        // prepare the categories
135
        $categories = array();
136
137
        // load the categories from the database
138
        $availableCategories = $this->categoryRepository->findAllByStoreView($storeViewId);
139
140
        // create the array with the resolved category path as keys
141
        foreach ($availableCategories as $category) {
142
            // expload the entity IDs from the category path
143
            $entityIds = $this->serializer->explode($category[MemberNames::PATH]);
144
145
            // cut-off the root category
146
            array_shift($entityIds);
147
148
            // continue with the next category if no entity IDs are available
149
            if (sizeof($entityIds) === 0) {
150
                continue;
151
            }
152
153
            // initialize the array for the path elements
154
            $path = array();
155
            foreach ($entityIds as $entityId) {
156
                $cat = $this->categoryVarcharRepository->findByEntityId($entityId);
157
                if ($cat && $cat[MemberNames::VALUE]) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $cat of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
158
                    $path[] = $cat[MemberNames::VALUE];
159
                }
160
            }
161
162
            // append the catogory with the string path as key
163
            $categories[$this->serializer->implode($path)] = $category;
164
        }
165
166
        // return array with the categories
167
        return $categories;
168
    }
169
}
170