...Человеческий поиск в разработке...
- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/mysql/crm_activity.php
- Класс: \CCrmActivity
- Вызов: CCrmActivity::DoSaveBindings
static function DoSaveBindings($ID, &$arBindings, $registerBindingsChanges = true) { global $DB; $ID = intval($ID); if($ID <= 0 || !is_array($arBindings)) { self::RegisterError(array('text' => 'Invalid arguments are supplied.')); return false; } if(!is_array($existedBindings = self::GetBindings($ID))) { self::RegisterError(array('text' => self::GetLastErrorMessage())); return false; } $added = array(); $removed = array(); self::PrepareBindingChanges($existedBindings, $arBindings, $added, $removed); if($ID > 0) { self::DeleteBindings($ID, false); } if(count($arBindings) == 0) { if (!empty($existedBindings)) { if ($registerBindingsChanges) { \Bitrix\Crm\Activity\UncompletedActivity::synchronizeForActivity($ID, $existedBindings); } \Bitrix\Crm\Activity\Provider\ProviderManager::syncBadgesOnBindingsChange($ID, [], $existedBindings); } $monitor = \Bitrix\Crm\Service\Timeline\Monitor::getInstance(); foreach ($existedBindings as $binding) { if (\CCrmOwnerType::IsDefined($binding['OWNER_TYPE_ID']) && (int)$binding['OWNER_ID'] > 0) { $monitor->onActivityRemoveIfSuitable( new \Bitrix\Crm\ItemIdentifier((int)$binding['OWNER_TYPE_ID'], (int)$binding['OWNER_ID']), $ID ); } } return true; } $existedBindingsMap = []; foreach ($existedBindings as $binding) { $existedBindingsMap[$binding['OWNER_TYPE_ID']][$binding['OWNER_ID']] = true; } $newBindings = []; $bulkColumns = ''; $bulkValues = array(); foreach($arBindings as &$arBinding) { if(isset($arBinding['ID'])) { unset($arBinding['ID']); } if (!($existedBindingsMap[$arBinding['OWNER_TYPE_ID']][$arBinding['OWNER_ID']] ?? null)) { $newBindings[] = $arBinding; } $data = $DB->PrepareInsert(self::BINDING_TABLE_NAME, $arBinding); if($bulkColumns == '') { $bulkColumns = $data[0]; } $bulkValues[] = $data[1]; } unset($arComm); if(count($bulkValues) == 0) { self::RegisterError(array('text' => 'There are no values for insert.')); return false; } $query = ''; foreach($bulkValues as &$value) { if($query !== '') { $query .= ','; } $query .= "($value)"; } if($query == '') { self::RegisterError(array('text' => 'Could not build query.')); return false; } $DB->Query( 'INSERT INTO '.self::BINDING_TABLE_NAME.'('.$bulkColumns.') VALUES'.$query, false, 'File: '.__FILE__.'
Line: '.__LINE__ ); if (!empty($newBindings) && $registerBindingsChanges) { \Bitrix\Crm\Activity\UncompletedActivity::synchronizeForActivity($ID, $newBindings); } \Bitrix\Crm\Activity\Provider\ProviderManager::syncBadgesOnBindingsChange($ID, $added, $removed); if ($registerBindingsChanges) { \Bitrix\Crm\Counter\Monitor::getInstance()->onChangeActivityBindings($ID, $existedBindings, $arBindings); } $monitor = \Bitrix\Crm\Service\Timeline\Monitor::getInstance(); foreach ($added as $binding) { if (\CCrmOwnerType::IsDefined($binding['OWNER_TYPE_ID']) && (int)$binding['OWNER_ID'] > 0) { $monitor->onActivityAddIfSuitable(new \Bitrix\Crm\ItemIdentifier((int)$binding['OWNER_TYPE_ID'], (int)$binding['OWNER_ID']), $ID); } } foreach ($removed as $binding) { if (\CCrmOwnerType::IsDefined($binding['OWNER_TYPE_ID']) && (int)$binding['OWNER_ID'] > 0) { $monitor->onActivityRemoveIfSuitable(new \Bitrix\Crm\ItemIdentifier((int)$binding['OWNER_TYPE_ID'], (int)$binding['OWNER_ID']), $ID); } } return true; }