51 private static function createBasketPropertiesCollectionObject()
54 $basketPropertiesCollectionClassName = $registry->getBasketPropertiesCollectionClassName();
56 return new $basketPropertiesCollectionClassName();
63 public static function load(BasketItemBase
$basketItem)
65 $basketPropertyCollection = static::createBasketPropertiesCollectionObject();
66 $basketPropertyCollection->setBasketItem(
$basketItem);
67 $basketItem->setPropertyCollection($basketPropertyCollection);
74 $basketPropertyItemClass = $registry->getBasketPropertyItemClassName();
76 $propertyList = $basketPropertyItemClass::loadForBasketItem(
$basketItem->getId());
78 foreach ($propertyList as $property)
80 $property->setCollection($basketPropertyCollection);
81 $basketPropertyCollection->bindItem($property);
93 protected static function getBasketIdList(BasketItemCollection $basket)
95 $resultList =
array();
117 public static function loadByCollection(BasketItemCollection $collection)
121 $basketIdList = static::getBasketIdList($collection);
123 if (!empty($basketIdList))
128 $basketPropertyItemClass = $registry->getBasketPropertyItemClassName();
130 $propertyList = $basketPropertyItemClass::loadForBasket($basketIdList);
141 $basketPropertyCollection = static::createBasketPropertiesCollectionObject();
142 $basketPropertyCollection->setBasketItem(
$basketItem);
147 foreach ($propertyList[
$basketItem->getId()] as $property)
149 $property->setCollection($basketPropertyCollection);
150 $basketPropertyCollection->addItem($property);
154 $basketItem->setPropertyCollection($basketPropertyCollection);
165 public function createItem()
170 $basketPropertyItemClassName = $registry->getBasketPropertyItemClassName();
172 $basketPropertyItem = $basketPropertyItemClassName::create($this);
173 $this->addItem($basketPropertyItem);
175 return $basketPropertyItem;
182 private function getPropertyCode(BasketPropertyItemBase $property)
184 return $property->getField(
'NAME').
"|".$property->getField(
"CODE");
197 public function redefine(
array $properties)
199 $indexList =
array();
202 foreach($this->collection as $propertyItem)
204 $code = $this->getPropertyCode($propertyItem);
205 $indexList[
$code] = $propertyItem->getId();
208 foreach ($properties as $value)
210 if (!is_array($value) || empty($value))
215 if (isset($value[
'ID']) && intval($value[
'ID']) > 0)
217 $propertyItem = $this->getItemById($value[
'ID']);
221 $propertyItem = $this->getPropertyItemByValue($value);
226 $propertyItem = $this->createItem();
230 $code = $this->getPropertyCode($propertyItem);
231 if (isset($indexList[
$code]))
233 unset($indexList[
$code]);
237 $availableFields = $propertyItem::getAvailableFields();
240 foreach ($value as
$k => $v)
242 if (isset($availableFields[
$k]))
248 $propertyItem->setFields(
$fields);
251 if (!empty($indexList))
253 foreach($indexList as
$code => $id)
258 if ($propertyItem = $this->getItemById($id))
260 if ($propertyItem->getField(
'CODE') ==
"CATALOG.XML_ID"
261 || $propertyItem->getField(
'CODE') ==
"PRODUCT.XML_ID"
267 $propertyItem->delete();
273 foreach ($this->collection as $propertyItem)
275 if ($propertyItem->getField(
'CODE') ==
"CATALOG.XML_ID"
276 || $propertyItem->getField(
'CODE') ==
"PRODUCT.XML_ID"
282 $propertyCode = $this->getPropertyCode($propertyItem);
283 if ($propertyCode ==
$code)
285 $propertyItem->delete();
299 public function save()
305 $isItemDeleted = $this->isAnyItemDeleted();
309 $itemsFromDbList = static::getList(
316 while ($itemsFromDbItem = $itemsFromDbList->fetch())
318 $itemsFromDb[$itemsFromDbItem[
"ID"]] =
true;
323 foreach ($this->collection as $basketProperty)
325 $r = $basketProperty->save();
326 if (!$r->isSuccess())
328 $result->addErrors($r->getErrors());
331 unset($itemsFromDb[$basketProperty->getId()]);
334 foreach ($itemsFromDb as $basketPropertyId => $value)
336 static::delete($basketPropertyId);
341 $this->setAnyItemDeleted(
false);
353 if (!($propertyValues = $this->getPropertyValues()))
358 $requestValues =
array();
359 foreach ($values as $value)
369 if (
count($requestValues) !==
count($propertyValues))
375 foreach($requestValues as
$key =>
$val)
377 if (!array_key_exists(
$key, $propertyValues) || (array_key_exists(
$key, $propertyValues) && $propertyValues[
$key][
'VALUE'] !=
$val))
391 public function getPropertyItemByValue(
array $value)
399 foreach ($this->collection as $propertyItem)
401 $propertyItemValues = $propertyItem->getFieldValues();
403 if (!($propertyItemValue = static::bringingPropertyValue($propertyItemValues)))
411 return $propertyItem;
421 public function getPropertyValues()
426 foreach($this->collection as $property)
428 $value = $property->getFieldValues();
446 private static function bringingPropertyValue(
array $value)
449 if (array_key_exists(
'VALUE', $value))
452 if (array_key_exists(
'CODE', $value) && (
string)$value[
"CODE"] !==
'')
456 elseif (array_key_exists(
'NAME', $value) && (
string)$value[
"NAME"] !==
'')
461 $propID = (string)$propID;
466 'VALUE' => $value[
'VALUE'],
467 'NAME' => $value[
'NAME'] ??
null,
468 'SORT' => $value[
'SORT'] ??
null,
469 'ID' => $value[
'ID'] ??
null,
490 public function createClone(\SplObjectStorage $cloneEntity)
493 $basketPropertiesCollectionClone = parent::createClone($cloneEntity);
505 $basketPropertiesCollectionClone->basketItem = $cloneEntity[
$basketItem];
509 return $basketPropertiesCollectionClone;
516 public function verify()
521 foreach ($this->collection as $basketPropertyItem)
523 $r = $basketPropertyItem->verify();
524 if (!$r->isSuccess())
526 $result->addErrors($r->getErrors());
549 protected static function delete($primary)
568 $this->redefine($values);
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)