• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/classes/general/im_share.php
  • Класс: CIMShare
  • Вызов: CIMShare::Task
public function Task($messageId, $date = '')
{
	if (!CModule::IncludeModule("tasks"))
		return false;

	$CIMMessage = new CIMMessage($this->user_id);
	$message = $CIMMessage->GetMessage($messageId, true);

	if (!$message)
		return false;

	$task = new Task(0, $this->user_id);

	$taskTitle = mb_substr(trim(preg_replace(
		array("/n+/is".BX_UTF_PCRE_MODIFIER, '/s+/is'.BX_UTF_PCRE_MODIFIER),
		" ",
		CTextParser::clearAllTags($message['MESSAGE'])
	)), 0, 255);
	$task->title = $taskTitle? $taskTitle: CTextParser::clearAllTags(GetMessage('IM_SHARE_CHAT_TASK', Array('#LINK#' => '')));
	$task->description = self::PrepareText($message)."n";
	$task['RESPONSIBLE_ID'] = $this->user_id;
	if (
		$message['AUTHOR_ID'] > 0 && $message['AUTHOR_ID'] != $this->user_id
		&& !BitrixImUser::getInstance($message['AUTHOR_ID'])->isExtranet()
		&& !BitrixImUser::getInstance($message['AUTHOR_ID'])->isBot()
	)
	{
		$task['AUDITORS'] = Array($message['AUTHOR_ID']);
	}
	$task['CREATED_BY'] = $this->user_id;

	if (!empty($message['FILES']))
	{
		$diskUf = BitrixTasksIntegrationDiskUserField::getMainSysUFCode();
		$task[$diskUf] = array_map(function($value){ return 'n'.$value;}, array_keys($message['FILES']));
	}

	$messageParams = Array();
	if ($message['MESSAGE_TYPE'] == IM_MESSAGE_PRIVATE)
	{
		$messageParams = Array('LINK_ACTIVE' => Array((string)$this->user_id, (string)$message['AUTHOR_ID']));
	}
	else
	{
		$chat = BitrixImModelChatTable::getById($message['CHAT_ID'])->fetch();
		if ($chat['ENTITY_TYPE'] == 'LINES' && CModule::IncludeModule('crm'))
		{
			$fieldData = explode("|", $chat['ENTITY_DATA_1']);
			if (isset($fieldData[0]) && $fieldData[0] == 'Y' && isset($fieldData[1]) && isset($fieldData[2]))
			{
				$crmType = CCrmOwnerTypeAbbr::ResolveByTypeID(CCrmOwnerType::ResolveID($fieldData[1]));
				$task['UF_CRM_TASK'] = array($crmType.'_'.$fieldData[2]);

			}
		}
		if ($chat['ENTITY_TYPE'] == 'SONET_GROUP')
		{
			$task['GROUP_ID'] = $chat['ENTITY_ID'];
		}
		else if ($chat['ENTITY_TYPE'] != 'SONET_GROUP')
		{
			$messageParams = Array('LINK_ACTIVE' => Array((string)$this->user_id, (string)$message['AUTHOR_ID']));
		}
	}

	$date = intval($date);
	if ($date > 0)
	{
		$task['DEADLINE'] = BitrixMainTypeDateTime::createFromTimestamp($date);
	}
	else
	{
		$results = BitrixMainTextDateConverter::decode(BitrixImText::removeBbCodes($message['MESSAGE']), 1000);
		if (!empty($results))
		{
			$task['DEADLINE'] = $results[0]->getDate();
			$userOffset = CTimeZone::GetOffset();
			if ($userOffset != 0)
			{
				$task['DEADLINE']->add(($userOffset*-1).' SECONDS');
			}
		}
	}

	$task = $this->prepareTaskFlags($task);

	$result = $task->save();
	if (!$result->isSuccess())
	{
		return false;
	}

	$taskItem = new BitrixImV2LinkTaskTaskItem();
	$taskItem
		->setEntityId($task->getId())
		->setChatId($message['CHAT_ID'])
		->setMessageId($messageId)
		->setAuthorId($this->user_id)
		->save()
	;

	$link = CTaskNotifications::getNotificationPath(array('ID' => $this->user_id), $task->getId());

	$this->SendMessage('', GetMessage('IM_SHARE_CHAT_TASK', Array('#LINK#' => $link)), $message, $messageParams, true);

	return true;
}