Bitrix-D7  20.0.0
Класс BasketPropertiesCollectionBase
Граф наследования:BasketPropertiesCollectionBase:
EntityCollection CollectionBase BasketPropertiesCollection

Открытые члены

 setBasketItem (BasketItemBase $basketItem)
 
 getBasketItem ()
 
 createItem ()
 
 redefine (array $properties)
 
 save ()
 
 isPropertyAlreadyExists (array $values)
 
 getPropertyItemByValue (array $value)
 
 getPropertyValues ()
 
 createClone (\SplObjectStorage $cloneEntity)
 
 verify ()
 
 setProperty (array $values)
 
- Открытые члены унаследованные от EntityCollection
 onItemModify (CollectableEntity $item, $name=null, $oldValue=null, $value=null)
 
 deleteItem ($index)
 
 clearCollection ()
 
 getItemById ($id)
 
 getIndexById ($id)
 
 getItemByIndex ($index)
 
 isStartField ($isMeaningfulField=false)
 
 clearStartField ()
 
 hasMeaningfulField ()
 
 doFinalAction ($hasMeaningfulField=false)
 
 isMathActionOnly ()
 
 setMathActionOnly ($value=false)
 
 isChanged ()
 
 isClone ()
 
 isAnyItemDeleted ()
 
 clearChanged ()
 
- Открытые члены унаследованные от CollectionBase
 getIterator ()
 
 offsetExists ($offset)
 Whether a offset exists. Подробнее...
 
 offsetGet ($offset)
 Offset to retrieve. Подробнее...
 
 offsetSet ($offset, $value)
 Offset to set. Подробнее...
 
 offsetUnset ($offset)
 Offset to unset. Подробнее...
 
 count ()
 Count elements of an object. Подробнее...
 
 current ()
 Return the current element. Подробнее...
 
 next ()
 Move forward to next element. Подробнее...
 
 key ()
 Return the key of the current element. Подробнее...
 
 valid ()
 Checks if current position is valid. Подробнее...
 
 rewind ()
 Rewind the Iterator to the first element. Подробнее...
 
 isEmpty ()
 Checks if collection is empty. Подробнее...
 

Открытые статические члены

static load (BasketItemBase $basketItem)
 
static loadByCollection (BasketItemCollection $collection)
 
static getList (array $parameters=array())
 Load basket item properties. Подробнее...
 
- Открытые статические члены унаследованные от EntityCollection
static getRegistryType ()
 

Защищенные члены

 getEntityParent ()
 
- Защищенные члены унаследованные от EntityCollection
 __construct ()
 EntityCollection constructor. Подробнее...
 
 addItem (CollectableEntity $item)
 
 createIndex ()
 
 getDeletableItems ()
 
 callEventOnBeforeCollectionClear ()
 
 setAnyItemDeleted ($value)
 

Защищенные статические члены

static getBasketIdList (BasketItemCollection $basket)
 
static delete ($primary)
 Delete basket item properties. Подробнее...
 

Защищенные данные

 $basketItem
 
- Защищенные данные унаследованные от EntityCollection
 $isClone = false
 
 $anyItemDeleted = false
 
- Защищенные данные унаследованные от CollectionBase
 $collection = array()
 

Подробное описание

См. определение в файле basketpropertiesbase.php строка 17

Методы

◆ createClone()

createClone ( \SplObjectStorage  $cloneEntity)

Переопределяет метод предка EntityCollection.

См. определение в файле basketpropertiesbase.php строка 494

495  {
496  /** @var BasketPropertiesCollectionBase $basketPropertiesCollectionClone */
497  $basketPropertiesCollectionClone = parent::createClone($cloneEntity);
498 
499  /** @var BasketItem $basketItem */
500  if ($basketItem = $this->basketItem)
501  {
502  if (!$cloneEntity->contains($basketItem))
503  {
504  $cloneEntity[$basketItem] = $basketItem->createClone($cloneEntity);
505  }
506 
507  if ($cloneEntity->contains($basketItem))
508  {
509  $basketPropertiesCollectionClone->basketItem = $cloneEntity[$basketItem];
510  }
511  }
512 
513  return $basketPropertiesCollectionClone;
514  }

◆ createItem()

createItem ( )
Возвращает
BasketPropertyItem
Исключения
Main

См. определение в файле basketpropertiesbase.php строка 170

171  {
172  $registry = Registry::getInstance(static::getRegistryType());
173 
174  /** @var BasketPropertyItemBase $basketPropertyItemClassName */
175  $basketPropertyItemClassName = $registry->getBasketPropertyItemClassName();
176 
177  $basketPropertyItem = $basketPropertyItemClassName::create($this);
178  $this->addItem($basketPropertyItem);
179 
180  return $basketPropertyItem;
181  }

◆ delete()

static delete (   $primary)
staticprotected

Delete basket item properties.

Аргументы
$primary
Исключения
NotImplementedException

Переопределяется в BasketPropertiesCollection.

См. определение в файле basketpropertiesbase.php строка 553

554  {
555  throw new NotImplementedException();
556  }

◆ getBasketIdList()

static getBasketIdList ( BasketItemCollection  $basket)
staticprotected
Аргументы
BasketItemCollection$basket
Возвращает
array
Исключения
Main

См. определение в файле basketpropertiesbase.php строка 98

99  {
100  $resultList = array();
101 
102  /** @var BasketItemBase $basketItem */
103  foreach ($basket as $basketItem)
104  {
105  if ($basketItem->getId() > 0)
106  {
107  $resultList[] = $basketItem->getId();
108  }
109  }
110 
111  return $resultList;
112  }

◆ getBasketItem()

getBasketItem ( )
Возвращает
BasketItemBase

См. определение в файле basketpropertiesbase.php строка 41

42  {
43  return $this->basketItem;
44  }

◆ getEntityParent()

getEntityParent ( )
protected
Возвращает
BasketItemBase

Переопределяет метод предка EntityCollection.

См. определение в файле basketpropertiesbase.php строка 25

26  {
27  return $this->getBasketItem();
28  }

◆ getList()

static getList ( array  $parameters = array())
static

Load basket item properties.

Аргументы
array$parameters
Исключения
NotImplementedException

Переопределяется в BasketPropertiesCollection.

См. определение в файле basketpropertiesbase.php строка 542

543  {
544  throw new NotImplementedException();
545  }

◆ getPropertyItemByValue()

getPropertyItemByValue ( array  $value)
Аргументы
array$value
Возвращает
BasketPropertyItemBase|bool

См. определение в файле basketpropertiesbase.php строка 396

397  {
398  if (!($propertyValue = static::bringingPropertyValue($value)))
399  {
400  return false;
401  }
402 
403  /** @var BasketPropertyItemBase $propertyItem */
404  foreach ($this->collection as $propertyItem)
405  {
406  $propertyItemValues = $propertyItem->getFieldValues();
407 
408  if (!($propertyItemValue = static::bringingPropertyValue($propertyItemValues)))
409  {
410  continue;
411  }
412 
413 
414  if ($propertyItemValue['CODE'] == $propertyValue['CODE'])
415  {
416  return $propertyItem;
417  }
418  }
419 
420  return false;
421  }

◆ getPropertyValues()

getPropertyValues ( )
Возвращает
array

См. определение в файле basketpropertiesbase.php строка 426

427  {
428  $result = array();
429 
430  /** @var BasketPropertyItemBase $property */
431  foreach($this->collection as $property)
432  {
433  $value = $property->getFieldValues();
434  $propertyValue = static::bringingPropertyValue($value);
435  if (!$propertyValue)
436  {
437  continue;
438  }
439 
440  $result[$propertyValue['CODE']] = $propertyValue;
441  }
442 
443  return $result;
444  }

◆ isPropertyAlreadyExists()

isPropertyAlreadyExists ( array  $values)
Аргументы
array$values
Возвращает
bool

См. определение в файле basketpropertiesbase.php строка 356

357  {
358  if (!($propertyValues = $this->getPropertyValues()))
359  {
360  return false;
361  }
362 
363  $requestValues = array();
364  foreach ($values as $value)
365  {
366  if (!($propertyValue = static::bringingPropertyValue($value)))
367  {
368  continue;
369  }
370 
371  $requestValues[$propertyValue['CODE']] = $propertyValue["VALUE"];
372  }
373 
374  if (count($requestValues) !== count($propertyValues))
375  {
376  return false;
377  }
378  else
379  {
380  foreach($requestValues as $key => $val)
381  {
382  if (!array_key_exists($key, $propertyValues) || (array_key_exists($key, $propertyValues) && $propertyValues[$key]['VALUE'] != $val))
383  {
384  return false;
385  }
386  }
387  }
388 
389  return true;
390  }

◆ load()

static load ( BasketItemBase  $basketItem)
static
Аргументы
BasketItemBase$basketItem
Возвращает
BasketPropertiesCollectionBase|null
Исключения
Main

См. определение в файле basketpropertiesbase.php строка 68

69  {
70  $basketPropertyCollection = static::createBasketPropertiesCollectionObject();
71  $basketPropertyCollection->setBasketItem($basketItem);
72  $basketItem->setPropertyCollection($basketPropertyCollection);
73 
74  if ($basketItem->getId() > 0)
75  {
76  $registry = Registry::getInstance(static::getRegistryType());
77 
78  /** @var BasketPropertyItemBase $basketPropertyItemClass */
79  $basketPropertyItemClass = $registry->getBasketPropertyItemClassName();
80 
81  $propertyList = $basketPropertyItemClass::loadForBasketItem($basketItem->getId());
82  /** @var BasketPropertyItemBase $property */
83  foreach ($propertyList as $property)
84  {
85  $property->setCollection($basketPropertyCollection);
86  $basketPropertyCollection->addItem($property);
87  }
88  }
89 
90  return $basketItem->getPropertyCollection();
91  }

◆ loadByCollection()

static loadByCollection ( BasketItemCollection  $collection)
static
Аргументы
BasketItemCollection$collection
Исключения
Main

См. определение в файле basketpropertiesbase.php строка 122

123  {
124  $propertyList = [];
125 
126  $basketIdList = static::getBasketIdList($collection);
127 
128  if (!empty($basketIdList))
129  {
130  $registry = Registry::getInstance(static::getRegistryType());
131 
132  /** @var BasketPropertyItemBase $basketPropertyItemClass */
133  $basketPropertyItemClass = $registry->getBasketPropertyItemClassName();
134 
135  $propertyList = $basketPropertyItemClass::loadForBasket($basketIdList);
136  }
137 
138  /** @var BasketItemBase $basketItem */
139  foreach ($collection as $basketItem)
140  {
141  if ($basketItem->isExistPropertyCollection())
142  {
143  continue;
144  }
145 
146  $basketPropertyCollection = static::createBasketPropertiesCollectionObject();
147  $basketPropertyCollection->setBasketItem($basketItem);
148 
149  if (isset($propertyList[$basketItem->getId()]))
150  {
151  /** @var BasketPropertyItemBase $property */
152  foreach ($propertyList[$basketItem->getId()] as $property)
153  {
154  $property->setCollection($basketPropertyCollection);
155  $basketPropertyCollection->addItem($property);
156  }
157  }
158 
159  $basketItem->setPropertyCollection($basketPropertyCollection);
160  }
161  }

◆ redefine()

redefine ( array  $properties)
Аргументы
array$properties
Исключения
Main

См. определение в файле basketpropertiesbase.php строка 202

203  {
204  $indexList = array();
205 
206  /** @var BasketPropertyItemBase $propertyItem */
207  foreach($this->collection as $propertyItem)
208  {
209  $code = $this->getPropertyCode($propertyItem);
210  $indexList[$code] = $propertyItem->getId();
211  }
212 
213  foreach ($properties as $value)
214  {
215  if (!is_array($value) || empty($value))
216  {
217  continue;
218  }
219 
220  if (isset($value['ID']) && intval($value['ID']) > 0)
221  {
222  $propertyItem = $this->getItemById($value['ID']);
223  }
224  else
225  {
226  $propertyItem = $this->getPropertyItemByValue($value);
227  }
228 
229  if (!$propertyItem)
230  {
231  $propertyItem = $this->createItem();
232  }
233  else
234  {
235  $code = $this->getPropertyCode($propertyItem);
236  if (isset($indexList[$code]))
237  {
238  unset($indexList[$code]);
239  }
240  }
241 
242  $availableFields = $propertyItem::getAvailableFields();
243 
244  $fields = array();
245  foreach ($value as $k => $v)
246  {
247  if (isset($availableFields[$k]))
248  {
249  $fields[$k] = $v;
250  }
251  }
252 
253  $propertyItem->setFields($fields);
254  }
255 
256  if (!empty($indexList))
257  {
258  foreach($indexList as $code => $id)
259  {
260  if ($id > 0)
261  {
262  /** @var BasketPropertyItemBase $propertyItem */
263  if ($propertyItem = $this->getItemById($id))
264  {
265  if ($propertyItem->getField('CODE') == "CATALOG.XML_ID"
266  || $propertyItem->getField('CODE') == "PRODUCT.XML_ID"
267  )
268  {
269  continue;
270  }
271 
272  $propertyItem->delete();
273  }
274  }
275  else
276  {
277  /** @var BasketPropertyItemBase $propertyItem */
278  foreach ($this->collection as $propertyItem)
279  {
280  if ($propertyItem->getField('CODE') == "CATALOG.XML_ID"
281  || $propertyItem->getField('CODE') == "PRODUCT.XML_ID"
282  )
283  {
284  continue;
285  }
286 
287  $propertyCode = $this->getPropertyCode($propertyItem);
288  if ($propertyCode == $code)
289  {
290  $propertyItem->delete();
291  }
292  }
293  }
294  }
295  }
296  }

◆ save()

save ( )
Возвращает
Result
Исключения
Main

См. определение в файле basketpropertiesbase.php строка 304

305  {
306  $result = new Sale\Result();
307 
308  $itemsFromDb = [];
309 
310  $isItemDeleted = $this->isAnyItemDeleted();
311  if ($isItemDeleted)
312  {
313  $basketItem = $this->getBasketItem();
314  $itemsFromDbList = static::getList(
315  [
316  "select" => ["ID"],
317  "filter" => ["BASKET_ID" => ($basketItem) ? $basketItem->getId() : 0]
318  ]
319  );
320 
321  while ($itemsFromDbItem = $itemsFromDbList->fetch())
322  {
323  $itemsFromDb[$itemsFromDbItem["ID"]] = true;
324  }
325  }
326 
327  /** @var BasketPropertyItemBase $basketProperty */
328  foreach ($this->collection as $basketProperty)
329  {
330  $r = $basketProperty->save();
331  if (!$r->isSuccess())
332  {
333  $result->addErrors($r->getErrors());
334  }
335 
336  unset($itemsFromDb[$basketProperty->getId()]);
337  }
338 
339  foreach ($itemsFromDb as $basketPropertyId => $value)
340  {
341  static::delete($basketPropertyId);
342  }
343 
344  if ($isItemDeleted)
345  {
346  $this->setAnyItemDeleted(false);
347  }
348 
349  return $result;
350  }

◆ setBasketItem()

setBasketItem ( BasketItemBase  $basketItem)
Аргументы
BasketItemBase$basketItem

См. определение в файле basketpropertiesbase.php строка 33

34  {
35  $this->basketItem = $basketItem;
36  }

◆ setProperty()

setProperty ( array  $values)
Уст.:
Use \Bitrix\Sale\BasketPropertiesCollectionBase::redefine instead
Аргументы
array$values
Исключения
Main

См. определение в файле basketpropertiesbase.php строка 570

571  {
572  $this->redefine($values);
573  }

◆ verify()

verify ( )
Возвращает
Result
Исключения
NotImplementedException

Переопределяет метод предка EntityCollection.

См. определение в файле basketpropertiesbase.php строка 520

521  {
522  $result = new Result();
523 
524  /** @var BasketPropertyItemBase $basketPropertyItem */
525  foreach ($this->collection as $basketPropertyItem)
526  {
527  $r = $basketPropertyItem->verify();
528  if (!$r->isSuccess())
529  {
530  $result->addErrors($r->getErrors());
531  }
532  }
533  return $result;
534  }

Поля

◆ $basketItem

$basketItem
protected

См. определение в файле basketpropertiesbase.php строка 20


Объявления и описания членов класса находятся в файле:
Bitrix\Sale\BasketPropertiesCollectionBase\createItem
createItem()
Definition: basketpropertiesbase.php:170
Bitrix\Sale\BasketPropertiesCollectionBase\getPropertyItemByValue
getPropertyItemByValue(array $value)
Definition: basketpropertiesbase.php:396
Bitrix\Sale\Internals\CollectionBase\count
count()
Count elements of an object.
Definition: collectionbase.php:79
Bitrix\Sale\Internals\CollectionBase\$collection
$collection
Definition: collectionbase.php:21
Bitrix\Sale\Registry\getInstance
static getInstance($type)
Definition: sale/lib/registry.php:161
Bitrix\Sale\Internals\EntityCollection\isAnyItemDeleted
isAnyItemDeleted()
Definition: entitycollection.php:367
Bitrix\Sale\Internals\EntityCollection\addItem
addItem(CollectableEntity $item)
Definition: entitycollection.php:86
Bitrix\Sale\BasketPropertiesCollectionBase\getPropertyValues
getPropertyValues()
Definition: basketpropertiesbase.php:426
Bitrix\Sale\BasketPropertiesCollectionBase\redefine
redefine(array $properties)
Definition: basketpropertiesbase.php:202
Bitrix\Sale\Internals\EntityCollection\getItemById
getItemById($id)
Definition: entitycollection.php:165
Bitrix\Sale\Internals\EntityCollection\setAnyItemDeleted
setAnyItemDeleted($value)
Definition: entitycollection.php:377
Bitrix\Sale\BasketPropertiesCollectionBase\getBasketItem
getBasketItem()
Definition: basketpropertiesbase.php:41
Bitrix\Sale\BasketPropertiesCollectionBase\$basketItem
$basketItem
Definition: basketpropertiesbase.php:20