- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/activity/provider/task.php
- Класс: Bitrix\Crm\Activity\Provider\Task
- Вызов: Task::setFromTask
static function setFromTask($taskId, &$taskFields, &$activity)
{
$isNew = !(isset($activity['ID']) && intval($activity['ID']) > 0);
if($isNew)
{
$activity['TYPE_ID'] = \CCrmActivityType::Task;
$activity['ASSOCIATED_ENTITY_ID'] = $taskId;
$activity['NOTIFY_TYPE'] = \CCrmActivityNotifyType::None;
$activity['RESPONSIBLE_ID'] = 0;
$activity['SUBJECT'] = '';
if(isset($taskFields['CREATED_BY']))
{
$activity['AUTHOR_ID'] = intval($taskFields['CREATED_BY']);
}
}
if(isset($taskFields['CHANGED_BY']))
{
$activity['EDITOR_ID'] = intval($taskFields['CHANGED_BY']);
}
if(isset($taskFields['RESPONSIBLE_ID']))
{
$activity['RESPONSIBLE_ID'] = intval($taskFields['RESPONSIBLE_ID']);
}
if(isset($taskFields['TITLE']))
{
$activity['SUBJECT'] = $taskFields['TITLE'];
}
if($isNew || isset($taskFields['PRIORITY']))
{
// Try to convert 'task priority' to 'crm activity priority'
$priorityText = isset($taskFields['PRIORITY']) ? strval($taskFields['PRIORITY']) : '0';
$priority = \CCrmActivityPriority::Low;
if($priorityText === '1')
{
$priority = \CCrmActivityPriority::Medium;
}
elseif($priorityText === '2')
{
$priority = \CCrmActivityPriority::High;
}
$activity['PRIORITY'] = $priority;
}
if($isNew || isset($taskFields['STATUS']))
{
// Try to find status
$completed = 'N';
if(isset($taskFields['STATUS']))
{
$status = intval($taskFields['STATUS']);
// COMPLETED: 5, DECLINED: 7
if($status === 5 || $status === 7)
{
$completed = 'Y';
}
}
$activity['COMPLETED'] = $completed;
$activity['STATUS'] = $completed === 'Y' ? \CCrmActivityStatus::Completed : \CCrmActivityStatus::Waiting;
}
$start = null;
$end = null;
if(isset($taskFields['DATE_START']))
{
// Try to find start date
if(!empty($taskFields['DATE_START']))
{
$start = $taskFields['DATE_START'];
}
}
$isCompleted = isset($activity['COMPLETED']) && $activity['COMPLETED'] === 'Y';
if(isset($taskFields['DEADLINE']) || isset($taskFields['CLOSED_DATE']))
{
if(Crm\Settings\ActivitySettings::getCurrent()->isDeadlineSyncEnabled())
{
if(!$isCompleted && !empty($taskFields['DEADLINE']))
{
$end = $taskFields['DEADLINE'];
}
elseif($isCompleted && !empty($taskFields['CLOSED_DATE']))
{
$end = $taskFields['CLOSED_DATE'];
}
}
elseif(!empty($taskFields['DEADLINE']))
{
$end = $taskFields['DEADLINE'];
}
}
$activity['START_TIME'] = $start !== null ? $start : '';
$activity['END_TIME'] = $end !== null ? $end : '';
if($activity['START_TIME'] === '' && $activity['END_TIME'] !== '')
{
$activity['START_TIME'] = $activity['END_TIME'];
}
elseif($isCompleted && $activity['END_TIME'] === '' && $activity['START_TIME'] !== '')
{
$activity['END_TIME'] = $activity['START_TIME'];
}
/*
elseif(!$isCompleted && $activity['END_TIME'] === '')
{
$fields['~DEADLINE'] = \CCrmDateTimeHelper::GetMaxDatabaseDate();
}
*/
if($isNew || isset($taskFields['DESCRIPTION']))
{
$description = isset($taskFields['DESCRIPTION']) ? $taskFields['DESCRIPTION'] : '';
$descriptionType =
isset($taskFields['DESCRIPTION_IN_BBCODE']) && $taskFields['DESCRIPTION_IN_BBCODE'] === 'Y'
? \CCrmContentType::BBCode
: \CCrmContentType::Html;
if($description !== '' && $descriptionType === \CCrmContentType::Html)
{
$sanitizer = new \CBXSanitizer();
$sanitizer->applyDoubleEncode(false);
$sanitizer->setLevel(\CBXSanitizer::SECURE_LEVEL_MIDDLE);
$description = $sanitizer->sanitizeHtml($description);
}
if($description === '')
{
//Ignore content type if description is empty
$descriptionType = \CCrmContentType::PlainText;
}
$activity['DESCRIPTION'] = $description;
$activity['DESCRIPTION_TYPE'] = $descriptionType;
}
$taskOwners = isset($taskFields['UF_CRM_TASK']) ? $taskFields['UF_CRM_TASK'] : array();
$ownerData = array();
if(!is_array($taskOwners))
{
$taskOwners = array($taskOwners);
}
$activity['BINDINGS'] = array();
if(\CCrmActivity::tryResolveUserFieldOwners($taskOwners, $ownerData, \CCrmUserType::getTaskBindingField()))
{
$bindingMap = array();
foreach($ownerData as $ownerInfo)
{
$ownerTypeId = \CCrmOwnerType::resolveID($ownerInfo['OWNER_TYPE_NAME']);
$ownerId = (int)$ownerInfo['OWNER_ID'];
$bindingMap["{$ownerTypeId}_{$ownerId}"] = array(
'OWNER_TYPE_ID' => $ownerTypeId,
'OWNER_ID' => $ownerId
);
$bindingMap = array_merge(
$bindingMap,
\CCrmActivity::getSubsidiaryEntityBindingMap($ownerTypeId, $ownerId)
);
}
$bindings = array_values($bindingMap);
if(count($bindings) > 1)
{
//Lead and Deals will be at beginning of list for take activity ownership
usort(
$bindings,
function($a, $b)
{
if($a['OWNER_TYPE_ID'] == $b['OWNER_TYPE_ID'])
{
return 0;
}
return $a['OWNER_TYPE_ID'] > $b['OWNER_TYPE_ID'] ? 1 : -1;
}
);
}
$activity['BINDINGS'] = $bindings;
}
if(!empty($activity['BINDINGS']))
{
//Check for owner change
$ownerTypeId = isset($activity['OWNER_TYPE_ID']) ? (int)$activity['OWNER_TYPE_ID'] : \CCrmOwnerType::Undefined;
$ownerId = isset($activity['OWNER_ID']) ? (int)$activity['OWNER_ID'] : 0;
$ownerIsFound = false;
foreach($activity['BINDINGS'] as $binding)
{
if($binding['OWNER_TYPE_ID'] === $ownerTypeId && $binding['OWNER_ID'] === $ownerId)
{
$ownerIsFound = true;
break;
}
}
if(!$ownerIsFound)
{
$binding = $activity['BINDINGS'][0];
$activity['OWNER_TYPE_ID'] = $binding['OWNER_TYPE_ID'];
$activity['OWNER_ID'] = $binding['OWNER_ID'];
}
}
}