TaskCreated::execute

  1. Bitrix24 API (v. 23.675.0)
  2. tasks
  3. TaskCreated
  4. execute
  • Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/integration/socialnetwork/usecase/taskcreated.php
  • Класс: Bitrix\Tasks\Integration\SocialNetwork\UseCase\TaskCreated
  • Вызов: TaskCreated::execute
public function execute(Message $message): void
{
	// TODO: this code was moved from classes/tasksnotifications and needs reraftoring
	global $DB;

	$task = $message->getMetaData()->getTask();
	$arLogFilter = $this->getSonetLogFilter($task->getId(), $task->isCrm());

	if (empty($arLogFilter))
	{
		return;
	}

	// Check that user exists
	$rsUser = \CUser::GetList(
		'ID',
		'ASC',
		['ID' => $task->getCreatedBy()],
		['FIELDS' => ['ID']]
	);

	if (!($arUser = $rsUser->Fetch()))
	{
		return;
	}

	$taskId = $task->getId();
	$logDate = $DB->CurrentTimeFunction();
	$curTimeTimestamp = time() + \CTimeZone::GetOffset();

	$arSoFields = !$task->isCrm()
		? ['EVENT_ID' => 'tasks', 'TITLE' => $task->getTitle(), 'MESSAGE' => '', 'MODULE_ID' => 'tasks']
		: [];

	if ($task->getCreatedDate())
	{
		$createdDateTimestamp = MakeTimeStamp($task->getCreatedDate(), $this->getDateFormat());

		if ($createdDateTimestamp > $curTimeTimestamp)
		{
			$logDate = \Bitrix\Tasks\Util\Db::charToDateFunction(
				$task->getCreatedDate(),
				'FULL',
				SITE_ID
			);
		}
	}

	$arSoFields['TEXT_MESSAGE'] = GetMessage('TASKS_SONET_NEW_TASK_MESSAGE');

	if ($task->getGroupId())
	{
		$arSoFields['ENTITY_TYPE'] = SONET_ENTITY_GROUP;
		$arSoFields['ENTITY_ID'] = $task->getGroupId();
	}
	else
	{
		$arSoFields['ENTITY_TYPE'] = SONET_ENTITY_USER;
		$arSoFields['ENTITY_ID'] = $task->getCreatedBy();
	}

	$arParamsLog = [
		'TYPE' => 'create',
		'CREATED_BY' => $message->getSender()->getId(),
		'PREV_REAL_STATUS' => $task->getRealStatus()
	];

	$arSoFields['PARAMS'] = serialize($arParamsLog);

	// rating entity id (ilike)
	$arSoFields['RATING_ENTITY_ID'] =  $taskId;
	$arSoFields['RATING_TYPE_ID'] = 'TASK';

	if (IsModuleInstalled('webdav') || IsModuleInstalled('disk'))
	{
		$ufDocID = $GLOBALS['USER_FIELD_MANAGER']->GetUserFieldValue('TASKS_TASK', 'UF_TASK_WEBDAV_FILES', $taskId, LANGUAGE_ID);
		if ($ufDocID)
		{
			$arSoFields['UF_SONET_LOG_DOC'] = $ufDocID;
		}
	}

	$rsSocNetLogItems = \CSocNetLog::GetList(
		['ID' => 'DESC'],
		$arLogFilter,
		false,
		false,
		['ID', 'ENTITY_TYPE', 'ENTITY_ID']
	);

	if ($rsSocNetLogItems->Fetch())
	{
		return;
	}

	$arSoFields['=LOG_DATE']       = $logDate;
	$arSoFields['CALLBACK_FUNC']   = false;
	$arSoFields['SOURCE_ID']       = $taskId;
	$arSoFields['ENABLE_COMMENTS'] = 'Y';
	$arSoFields['URL']             = ''; // url is user-specific, cant keep in database
	$arSoFields['USER_ID']         = $task->getCreatedBy();
	$arSoFields['TITLE_TEMPLATE']  = '#TITLE#';

	// Set all sites because any user from any site may be
	// added to task in future. For example, new auditor, etc.
	$arSoFields['SITE_ID'] = $this->getSiteIds();

	$logId = (int)\CSocNetLog::Add($arSoFields, false);
	if ($logId > 0)
	{
		$logFields = [
			'TMP_ID' => $logId,
			'TAG' => [],
		];

		$tagsResult = \CTaskTags::getList([], ['TASK_ID' => $taskId]);
		while ($row = $tagsResult->fetch())
		{
			$logFields['TAG'][] = $row['NAME'];
		}

		\CSocNetLog::Update($logId, $logFields);

		$taskMembers = $message->getMetaData()->getUserRepository()->getRecepients(
			$task,
			$message->getSender()
		);
		$rights = $this->recepients2Rights($taskMembers);

		if ($task->getGroupId())
		{
			$rights = array_merge(
				$rights,
				['SG' . $task->getGroupId()]
			);
		}

		\CSocNetLogRights::Add($logId, $rights);
		\CSocNetLog::SendEvent($logId, 'SONET_NEW_EVENT', $logId);
	}
}

Добавить комментарий