- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/timeline/activitycontroller.php
- Класс: Bitrix\Crm\Timeline\ActivityController
- Вызов: ActivityController::onCreate
public function onCreate($ownerID, array $params)
{
if(!is_int($ownerID))
{
$ownerID = (int)$ownerID;
}
if($ownerID <= 0)
{
throw new Main\ArgumentException('Owner ID must be greater than zero.', 'ownerID');
}
$fields = isset($params['FIELDS']) && is_array($params['FIELDS']) ? $params['FIELDS'] : null;
if(!is_array($fields))
{
$fields = self::getEntity($ownerID);
}
if(!is_array($fields))
{
return;
}
$bindings = \CCrmActivity::GetBindings($ownerID);
if(!(is_array($bindings) && !empty($bindings)))
{
return;
}
$status = isset($fields['STATUS']) ? (int)$fields['STATUS'] : \CCrmActivityStatus::Undefined;
$typeID = isset($fields['TYPE_ID']) ? (int)$fields['TYPE_ID'] : \CCrmActivityType::Undefined;
$direction = isset($fields['DIRECTION']) ? (int)$fields['DIRECTION'] : \CCrmActivityDirection::Undefined;
$providerID = isset($fields['PROVIDER_ID']) ? $fields['PROVIDER_ID'] : '';
$authorID = self::resolveAuthorID($fields);
$created = null;
if(isset($params['PRESERVE_CREATION_TIME'])
&& $params['PRESERVE_CREATION_TIME'] === true
&& isset($fields['CREATED'])
)
{
if($fields['CREATED'] instanceof DateTime)
{
$created = $fields['CREATED'];
}
else
{
$created = new DateTime($fields['CREATED'], Date::convertFormatToPhp(FORMAT_DATETIME));
}
}
$historyEntryID = 0;
if($typeID === \CCrmActivityType::Email)
{
if($status === \CCrmActivityStatus::Completed)
{
$historyEntryID = ActivityEntry::create(
array(
'ACTIVITY_TYPE_ID' => $typeID,
'ACTIVITY_PROVIDER_ID' => $providerID,
'ENTITY_ID' => $ownerID,
'AUTHOR_ID' => $authorID,
'CREATED' => new DateTime(),
'BINDINGS' => self::mapBindings($bindings)
)
);
}
}
elseif($typeID === \CCrmActivityType::Call || $typeID === \CCrmActivityType::Meeting)
{
if($status === \CCrmActivityStatus::Completed)
{
$historyEntryID = ActivityEntry::create(
array(
'ACTIVITY_TYPE_ID' => $typeID,
'ACTIVITY_PROVIDER_ID' => $providerID,
'ENTITY_ID' => $ownerID,
'AUTHOR_ID' => $authorID,
'CREATED' => $created,
'BINDINGS' => self::mapBindings($bindings)
)
);
}
}
elseif($typeID === \CCrmActivityType::Task)
{
$historyEntryID = CreationEntry::create(
array(
'ENTITY_TYPE_ID' => \CCrmOwnerType::Activity,
'ENTITY_CLASS_NAME' => $providerID,
'ENTITY_ID' => $ownerID,
'AUTHOR_ID' => $authorID,
'CREATED' => $created,
'BINDINGS' => self::mapBindings($bindings)
)
);
}
elseif($typeID === \CCrmActivityType::Provider
&& $status === \CCrmActivityStatus::Completed
&& isset($fields['PROVIDER_ID'])
&& self::isActivityProviderSupported($fields['PROVIDER_ID'])
)
{
$timelineParams = [
'ACTIVITY_TYPE_ID' => $typeID,
'ACTIVITY_PROVIDER_ID' => $providerID,
'ENTITY_ID' => $ownerID,
'AUTHOR_ID' => $authorID,
'CREATED' => $created,
'BINDINGS' => self::mapBindings($bindings),
];
$provider = \CCrmActivity::GetProviderById($providerID);
if (!is_null($provider) && $provider::isTask())
{
$taskId = $fields['ASSOCIATED_ENTITY_ID'];
$timelineParams['SOURCE_ID'] = $taskId;
}
$historyEntryID = ActivityEntry::create($timelineParams);
}
elseif($typeID === \CCrmActivityType::Provider
&& isset($fields['PROVIDER_ID'])
&& $fields['PROVIDER_ID'] === Activity\Provider\ToDo::getId()
)
{
$logMessageController = LogMessageController::getInstance();
foreach ($bindings as $binding)
{
$logMessageController->onCreate(
[
'ENTITY_TYPE_ID' => $binding['OWNER_TYPE_ID'],
'ENTITY_ID' => $binding['OWNER_ID'],
'ASSOCIATED_ENTITY_TYPE_ID' => \CCrmOwnerType::Activity,
'ASSOCIATED_ENTITY_ID' => $ownerID,
'SETTINGS' => [
'ACTIVITY_DATA' => [
'DESCRIPTION' => $fields['DESCRIPTION'],
'ASSOCIATED_ENTITY_ID' => $fields['ASSOCIATED_ENTITY_ID'],
'DEADLINE_TIMESTAMP' => $fields['DEADLINE'] ? (DateTime::createFromUserTime($fields['DEADLINE'])->getTimestamp()) : null,
]
]
],
LogMessageType::TODO_CREATED,
$params['CURRENT_USER'] ?? null
);
}
}
if(isset($params['ENABLE_PUSH']) && $params['ENABLE_PUSH'] === false)
{
return;
}
$enableHistoryPush = $historyEntryID > 0;
$enableSchedulePush = self::isActivitySupported($fields) && $status === \CCrmActivityStatus::Waiting;
if (!isset($fields['CREATED']))
{
$fields['CREATED'] = (new DateTime())->toString();
}
$pullEventData = [$ownerID => $fields];
if ($enableSchedulePush)
{
\Bitrix\Crm\Timeline\EntityController::loadCommunicationsAndMultifields(
$pullEventData,
Crm\Service\Container::getInstance()
->getUserPermissions($params['CURRENT_USER'] ?? null)
->getCrmPermissions(),
[
'ENABLE_PERMISSION_CHECK' => false,
]
);
}
foreach($bindings as $binding)
{
$entityItemIdentifier = Crm\ItemIdentifier::createFromArray($binding);
if (!$entityItemIdentifier)
{
continue;
}
if ($enableSchedulePush)
{
$this->sendPullEventOnAddScheduled(
$entityItemIdentifier,
$pullEventData[$ownerID],
$params['CURRENT_USER'] ?? null
);
}
if ($enableHistoryPush)
{
$this->sendPullEventOnAdd(
$entityItemIdentifier,
$historyEntryID,
$params['CURRENT_USER'] ?? null
);
}
}
}