- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/mysql/crm_product_row.php
- Класс: \CCrmProductRow
- Вызов: CCrmProductRow::DoSaveRows
static function DoSaveRows($ownerType, $ownerID, array $arRows)
{
global $DB;
static::$originalRows = $arRows;
if(!is_int($ownerID))
{
$ownerID = (int)$ownerID;
}
$insertRows = array();
$updateRows = array();
$deleteRows = array();
foreach($arRows as $index => $row)
{
if(isset($row['ID']) && $row['ID'] > 0)
{
$updateRows[$row['ID']] = $row;
}
else
{
$row['ORIGINAL_INDEX'] = $index;
$insertRows[] = $row;
}
}
$dbResult = self::GetList(
array('ID'=>'ASC'),
array('=OWNER_TYPE' => $ownerType, '=OWNER_ID' => $ownerID)
);
if(is_object($dbResult))
{
while($row = $dbResult->Fetch())
{
$ID = $row['ID'];
if(!isset($updateRows[$ID]))
{
$deleteRows[] = $ID;
}
elseif(!self::NeedForUpdate($row, $updateRows[$ID]))
{
unset($updateRows[$ID]);
}
}
}
$tableName = self::TABLE_NAME;
if(!empty($deleteRows))
{
$scriptValues = implode(',', $deleteRows);
$DB->Query("DELETE FROM {$tableName} WHERE ID IN ({$scriptValues})", false, 'FILE: '.__FILE__.'
LINE: '.__LINE__);
$reservationTableName = \Bitrix\Crm\Reservation\Internals\ProductRowReservationTable::getTableName();
$DB->Query(
"DELETE FROM {$reservationTableName} WHERE ROW_ID IN ({$scriptValues})",
true
);
}
if(!empty($updateRows))
{
foreach($updateRows as $ID => $row)
{
unset($row['ID'], $row['OWNER_TYPE'], $row['OWNER_ID']);
if ($row['TAX_RATE'] === null)
{
$row['TAX_RATE'] = false;
}
$scriptValues = $DB->PrepareUpdate($tableName, $row);
$DB->Query("UPDATE {$tableName} SET {$scriptValues} WHERE ID = {$ID}", false, 'FILE: '.__FILE__.'
LINE: '.__LINE__);
}
}
if(!empty($insertRows))
{
if (self::$perRowInsert)
{
foreach($insertRows as $row)
{
unset($row['ID']);
$row['OWNER_TYPE'] = $ownerType;
$row['OWNER_ID'] = $ownerID;
if ($row['TAX_RATE'] === null)
{
$row['TAX_RATE'] = false;
}
if ($row['XML_ID'] === null)
{
$row['XML_ID'] = false;
}
$data = $DB->PrepareInsert($tableName, $row);
$DB->Query(
"INSERT INTO {$tableName}({$data[0]}) VALUES ({$data[1]})",
false,
'File: '.__FILE__.'
Line: '.__LINE__
);
static::$originalRows[$row['ORIGINAL_INDEX']]['ID'] = (int)$DB->LastID();
}
}
else
{
$scriptColumns = '';
$scriptValues = '';
foreach($insertRows as $row)
{
unset($row['ID']);
$row['OWNER_TYPE'] = $ownerType;
$row['OWNER_ID'] = $ownerID;
if ($row['TAX_RATE'] === null)
{
$row['TAX_RATE'] = false;
}
if ($row['XML_ID'] === null)
{
$row['XML_ID'] = false;
}
$data = $DB->PrepareInsert($tableName, $row);
if($scriptColumns === '')
{
$scriptColumns = $data[0];
}
if($scriptValues !== '')
{
$scriptValues .= ",({$data[1]})";
}
else
{
$scriptValues = "({$data[1]})";
}
}
$DB->Query(
"INSERT INTO {$tableName}({$scriptColumns}) VALUES {$scriptValues}",
false,
'File: '.__FILE__.'
Line: '.__LINE__
);
}
}
return true;
}