- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/item/field/collection/item.php
- Класс: BitrixTasksItemFieldCollectionItem
- Вызов: Item::saveValueToDataBase
public function saveValueToDataBase($value, $key, $item)
{
$value = $this->translateValueToDatabase($value, $key, $item);
$result = new Result();
$errors = $result->getErrors();
$itemId = $item->getId();
/** @var SubItem $itemClass */
$itemClass = static::getItemClass();
$itemState = $item->getTransitionState();
$isCreate = $itemState->isModeCreate();
$isUpdate = $itemState->isModeUpdate();
$isDelete = $itemState->isModeDelete();
$newCodePattern = $this->getName().'.#CODE#';
$this->onBeforeSaveToDataBase($value, $key, $item);
$itemClass::enterBatchState();
if($isUpdate || $isDelete)
{
if(method_exists($itemClass, 'findByParent')) // todo: use SubItem::isA() here, when moved to 5.4
{
$all = $itemClass::findByParent($itemId, array('select' => array('ID')), array(
'USER_ID' => $item->getUserId()
));
/** @var SubItem $exItem */
foreach($all as $exItem)
{
if($isUpdate && ($value && $value->containsId($exItem->getId())))
{
continue;
}
$exItem->setParent($item);
$delResult = $exItem->delete();
$errors->load($delResult->getErrors()->transform(array('CODE' => $newCodePattern)));
}
}
else
{
throw new ArgumentTypeException('There should be a sub-item class: '.$key);
}
}
if(($isCreate || $isUpdate) && $value)
{
foreach($value as $subItem)
{
// save each item of this collection separately
/** @var SubItem $subItem */
$subItem->setParentId($itemId);
$saveResult = $subItem->save(array(
'KEEP_DATA' => true,
));
$errors->load($saveResult->getErrors()->transform(array('CODE' => $newCodePattern)));
}
}
$itemClass::leaveBatchState();
return $result;
}