1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace SpeckCatalog\Service; |
4
|
|
|
|
5
|
|
|
class Category extends AbstractService |
6
|
|
|
{ |
7
|
|
|
protected $entityMapper = 'speckcatalog_category_mapper'; |
8
|
|
|
protected $productService; |
9
|
|
|
protected $productUomService; |
10
|
|
|
protected $productImageService; |
11
|
|
|
protected $optionService; |
12
|
|
|
protected $siteId; |
13
|
|
|
|
14
|
|
|
public function findById($categoryId) |
15
|
|
|
{ |
16
|
|
|
return $this->find(array('category_id' => $categoryId)); |
17
|
|
|
} |
18
|
|
|
|
19
|
|
|
public function getCategoriesForNavigation() |
20
|
|
|
{ |
21
|
|
|
$categories = $this->getChildCategories(null, $this->getSiteId()); |
22
|
|
|
foreach ($categories as $cat) { |
23
|
|
|
$cats = $this->getChildCategories($cat->getCategoryId(), $this->getSiteId()); |
24
|
|
|
$cat->setCategories($cats); |
25
|
|
|
} |
26
|
|
|
return $categories; |
27
|
|
|
} |
28
|
|
|
|
29
|
|
|
public function getByProductId($productId) |
30
|
|
|
{ |
31
|
|
|
return $this->getEntityMapper()->getByProductId($productId, $this->getSiteId()); |
32
|
|
|
} |
33
|
|
|
|
34
|
|
|
public function getCrumbs($category, $crumbs = array()) |
35
|
|
|
{ |
36
|
|
|
array_unshift($crumbs, $category); |
37
|
|
|
$parent = $this->getParentCategory($category->getCategoryId()); |
38
|
|
|
if ($parent) { |
39
|
|
|
return $this->getCrumbs($parent, $crumbs); |
40
|
|
|
} |
41
|
|
|
return $crumbs; |
42
|
|
|
} |
43
|
|
|
|
44
|
|
|
public function getParentCategory($categoryId) |
45
|
|
|
{ |
46
|
|
|
return $this->getEntityMapper()->getParentCategory($categoryId); |
47
|
|
|
} |
48
|
|
|
|
49
|
|
|
public function getCategoriesForTreePreview($siteId, $parentCategoryId = null) |
50
|
|
|
{ |
51
|
|
|
$categories = $this->getEntityMapper()->getChildCategories($parentCategoryId, $siteId); |
52
|
|
|
foreach ($categories as $category) { |
53
|
|
|
$category->setCategories($this->getCategoriesForTreePreview($siteId, $category->getCategoryId())); |
54
|
|
|
//$products = $this->getProductService()->getByCategoryId($category->getCategoryId()); |
|
|
|
|
55
|
|
|
//$category->setProducts($products); |
|
|
|
|
56
|
|
|
} |
57
|
|
|
|
58
|
|
|
return $categories; |
59
|
|
|
} |
60
|
|
|
|
61
|
|
|
public function getCategoryforView($categoryId, $paginationOptions = null) |
62
|
|
|
{ |
63
|
|
|
$category = $this->findById($categoryId); |
64
|
|
|
if (!$category) { |
65
|
|
|
return; |
66
|
|
|
} |
67
|
|
|
|
68
|
|
|
$categories = $this->getChildCategories($categoryId, $this->getSiteId()); |
69
|
|
|
$products = $this->getProductService()->usePaginator($paginationOptions)->getByCategoryId($categoryId); |
70
|
|
|
if (count($products) > 0) { |
71
|
|
|
foreach ($products as $product) { |
72
|
|
|
$this->getProductService()->populate($product, array('images', 'uoms', 'options', 'builders'), true); |
73
|
|
|
} |
74
|
|
|
$category->setProducts($products); |
75
|
|
|
} |
76
|
|
|
$category->setCategories($categories); |
77
|
|
|
|
78
|
|
|
return $category; |
79
|
|
|
} |
80
|
|
|
|
81
|
|
|
public function getChildCategories($categoryId, $siteId) |
82
|
|
|
{ |
83
|
|
|
return $this->getEntityMapper()->getChildCategories($categoryId, $siteId); |
84
|
|
|
} |
85
|
|
|
|
86
|
|
|
public function addProduct($categoryOrId, $productOrId) |
87
|
|
|
{ |
88
|
|
|
$categoryId = ( is_numeric($categoryOrId) ? $categoryOrId : $categoryOrId->getCategoryId() ); |
89
|
|
|
$productId = ( is_numeric($productOrId) ? $productOrId : $productOrId->getProductId() ); |
90
|
|
|
|
91
|
|
|
return $this->getEntityMapper()->addProduct($categoryId, $productId); |
92
|
|
|
} |
93
|
|
|
|
94
|
|
|
public function addCategory($parentCategoryOrIdOrNull, $categoryOrId) |
95
|
|
|
{ |
96
|
|
|
if (null === $categoryOrId) { |
97
|
|
|
throw new \RuntimeException('categoryOrId cannot be null'); |
98
|
|
|
} |
99
|
|
|
$categoryId = ( is_numeric($categoryOrId) ? $categoryOrId : $categoryOrId->getCategoryId() ); |
100
|
|
|
|
101
|
|
|
$parentCategoryId = ( |
102
|
|
|
is_int($parentCategoryOrIdOrNull) |
103
|
|
|
? $parentCategoryOrIdOrNull |
104
|
|
|
: (is_null($parentCategoryOrIdOrNull) |
105
|
|
|
? null |
106
|
|
|
: $parentCategoryOrIdOrNull->getCategoryId() |
107
|
|
|
) |
108
|
|
|
); |
109
|
|
|
|
110
|
|
|
return $this->getEntityMapper()->addCategory($parentCategoryId, $categoryId); |
111
|
|
|
} |
112
|
|
|
|
113
|
|
|
public function setImage($categoryOrId, $imageOrId) |
114
|
|
|
{ |
115
|
|
|
$categoryId = ( is_int($categoryOrId) ? $categoryOrId : $categoryOrId->getCategoryId() ); |
116
|
|
|
$imageId = ( is_int($imageOrId) ? $imageOrId : $imageOrId->getMediaId() ); |
117
|
|
|
|
118
|
|
|
return $this->getImageService()->addLinker('category', $categoryId, $imageId); |
|
|
|
|
119
|
|
|
} |
120
|
|
|
|
121
|
|
|
|
122
|
|
|
/** |
123
|
|
|
* @return productService |
124
|
|
|
*/ |
125
|
|
|
public function getProductService() |
126
|
|
|
{ |
127
|
|
|
if (null === $this->productService) { |
128
|
|
|
$this->productService = $this->getServiceLocator()->get('speckcatalog_product_service'); |
129
|
|
|
} |
130
|
|
|
return $this->productService; |
131
|
|
|
} |
132
|
|
|
|
133
|
|
|
/** |
134
|
|
|
* @param $productService |
135
|
|
|
* @return self |
136
|
|
|
*/ |
137
|
|
|
public function setProductService($productService) |
138
|
|
|
{ |
139
|
|
|
$this->productService = $productService; |
140
|
|
|
return $this; |
141
|
|
|
} |
142
|
|
|
|
143
|
|
|
/** |
144
|
|
|
* @return productUomService |
145
|
|
|
*/ |
146
|
|
|
public function getProductUomService() |
147
|
|
|
{ |
148
|
|
|
if (null === $this->productUomService) { |
149
|
|
|
$this->productUomService = $this->getServiceLocator()->get('speckcatalog_product_uom_service'); |
150
|
|
|
} |
151
|
|
|
return $this->productUomService; |
152
|
|
|
} |
153
|
|
|
|
154
|
|
|
/** |
155
|
|
|
* @param $productUomService |
156
|
|
|
* @return self |
157
|
|
|
*/ |
158
|
|
|
public function setProductUomService($productUomService) |
159
|
|
|
{ |
160
|
|
|
$this->productUomService = $productUomService; |
161
|
|
|
return $this; |
162
|
|
|
} |
163
|
|
|
|
164
|
|
|
/** |
165
|
|
|
* @return optionService |
166
|
|
|
*/ |
167
|
|
|
public function getOptionService() |
168
|
|
|
{ |
169
|
|
|
if (null === $this->optionService) { |
170
|
|
|
$this->optionService = $this->getServiceLocator()->get('speckcatalog_option_service'); |
171
|
|
|
} |
172
|
|
|
return $this->optionService; |
173
|
|
|
} |
174
|
|
|
|
175
|
|
|
/** |
176
|
|
|
* @param $optionService |
177
|
|
|
* @return self |
178
|
|
|
*/ |
179
|
|
|
public function setOptionService($optionService) |
180
|
|
|
{ |
181
|
|
|
$this->optionService = $optionService; |
182
|
|
|
return $this; |
183
|
|
|
} |
184
|
|
|
|
185
|
|
|
/** |
186
|
|
|
* @return productImageService |
187
|
|
|
*/ |
188
|
|
|
public function getProductImageService() |
189
|
|
|
{ |
190
|
|
|
if (null === $this->productImageService) { |
191
|
|
|
$this->productImageService = $this->getServiceLocator()->get('speckcatalog_product_image_service'); |
192
|
|
|
} |
193
|
|
|
return $this->productImageService; |
194
|
|
|
} |
195
|
|
|
|
196
|
|
|
/** |
197
|
|
|
* @param $productImageService |
198
|
|
|
* @return self |
199
|
|
|
*/ |
200
|
|
|
public function setProductImageService($productImageService) |
201
|
|
|
{ |
202
|
|
|
$this->productImageService = $productImageService; |
203
|
|
|
return $this; |
204
|
|
|
} |
205
|
|
|
|
206
|
|
|
/** |
207
|
|
|
* @return siteId |
208
|
|
|
*/ |
209
|
|
|
public function getSiteId() |
210
|
|
|
{ |
211
|
|
|
return $this->siteId; |
212
|
|
|
} |
213
|
|
|
|
214
|
|
|
/** |
215
|
|
|
* @param $siteId |
216
|
|
|
* @return self |
217
|
|
|
*/ |
218
|
|
|
public function setSiteId($siteId) |
219
|
|
|
{ |
220
|
|
|
$this->siteId = $siteId; |
221
|
|
|
return $this; |
222
|
|
|
} |
223
|
|
|
} |
224
|
|
|
|
Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.
The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.
This check looks for comments that seem to be mostly valid code and reports them.