• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/integration/socialnetwork/ui/task.php
  • Класс: BitrixTasksIntegrationSocialnetworkUITask
  • Вызов: Task::formatFeedEntry
static function formatFeedEntry($arFields, $arParams)
{
	/** @global CMain $APPLICATION */
	global $APPLICATION;

	$task_datetime = null;

	if(!static::includeModule())
	{
		return false;
	}

	BitrixMainUIExtension::load(['ui.design-tokens', 'ui.fonts.opensans']);
	$APPLICATION->SetAdditionalCSS('/bitrix/js/tasks/css/tasks.css');

	if (isset($arFields['~PARAMS']) && $arFields['~PARAMS'])
		$arFields['PARAMS'] = unserialize($arFields['~PARAMS'], ['allowed_classes' => false]);
	elseif (isset($arFields['PARAMS']) && $arFields['PARAMS'])
		$arFields['PARAMS'] = unserialize($arFields['PARAMS'], ['allowed_classes' => false]);
	else
		$arFields['PARAMS'] = array();

	$arResult = array(
		'EVENT'           => $arFields,
		'CREATED_BY'      => CSocNetLogTools::FormatEvent_GetCreatedBy($arFields, $arParams, false),
		'ENTITY'          => CSocNetLogTools::FormatEvent_GetEntity($arFields, $arParams, false),
		'EVENT_FORMATTED' => array(),
		'CACHED_CSS_PATH' => '/bitrix/js/tasks/css/tasks.css'
	);

	$arResult["AVATAR_SRC"] = CSocNetLogTools::FormatEvent_CreateAvatar($arFields, $arParams);

	// here we must have user-related personalized link. Because of cache usage, the #USER_PERSONAL_TASK_URL#
	// is replaced by socialnetwork just before feed display
	$taskHtmlTitle = ''.BitrixMainTextEmoji::decode($arFields["TITLE"]).'';

	// Prepare event title (depends on action and gender of actor)
	{
		$actorUserId = null;
		$actorUserName = '';
		$actorMaleSuffix = '';
		$eventTitlePhraseSuffix = '_DEFAULT';

		if (isset($arParams['NAME_TEMPLATE']))
			$nameTemplate = $arParams['NAME_TEMPLATE'];
		else
			$nameTemplate = CSite::GetNameFormat();

		if (isset($arFields["PARAMS"], $arFields['PARAMS']['TYPE']))
		{
			if ($arFields["PARAMS"]["TYPE"] === "create")
			{
				$eventTitlePhraseSuffix = '_CREATE_24';
				if (isset($arFields["PARAMS"]["CREATED_BY"]))
					$actorUserId = $arFields["PARAMS"]["CREATED_BY"];
			}
			elseif ($arFields["PARAMS"]["TYPE"] === 'modify')
			{
				$eventTitlePhraseSuffix = '_MODIFY_24';
				if (isset($arFields["PARAMS"]["CHANGED_BY"]))
					$actorUserId = $arFields["PARAMS"]["CHANGED_BY"];
			}
			elseif ($arFields["PARAMS"]["TYPE"] === 'status')
			{
				$eventTitlePhraseSuffix = '_STATUS_24';
				if (isset($arFields["PARAMS"]["CHANGED_BY"]))
					$actorUserId = $arFields["PARAMS"]["CHANGED_BY"];
			}
			elseif ($arFields["PARAMS"]["TYPE"] === 'comment')
			{
				$eventTitlePhraseSuffix = '';
			}
		}

		if ($actorUserId)
		{
			$rsUser = CUser::GetList(
				'id',
				'asc',
				array('ID_EQUAL_EXACT' => (int) $actorUserId),
				array(
					'FIELDS' => array(
						'ID',
						'NAME',
						'LAST_NAME',
						'SECOND_NAME',
						'LOGIN',
						'PERSONAL_GENDER'
					)
				)
			);

			if ($arUser = $rsUser->fetch())
			{
				if (isset($arUser['PERSONAL_GENDER']))
				{
					switch ($arUser['PERSONAL_GENDER'])
					{
						case "F":
						case "M":
							$actorMaleSuffix = '_' . $arUser['PERSONAL_GENDER'];
							break;
					}
				}

				$actorUserName = CUser::FormatName($nameTemplate, $arUser, true);
			}
		}

		$eventTitleTemplate = Loc::getMessage('TASKS_SONET_GL_EVENT_TITLE_TASK'
			. $eventTitlePhraseSuffix . $actorMaleSuffix);

		$eventTitle = str_replace(
			array('#USER_NAME#', '#TITLE#'),
			array($actorUserName, $taskHtmlTitle),
			$eventTitleTemplate
		);
		$eventTitleWoTaskName = str_replace(
			array('#USER_NAME#', '#TITLE#'),
			array($actorUserName, ''),
			$eventTitleTemplate
		);
	}

	$title_tmp = str_replace(
		"#TITLE#",
		$taskHtmlTitle,
		Loc::getMessage("TASKS_SONET_GL_EVENT_TITLE_TASK")
	);

	if(isset($arFields["PARAMS"]["CREATED_BY"]))
	{
		$suffix = (
			isset($GLOBALS['arExtranetUserID']) && is_array($GLOBALS['arExtranetUserID']) && in_array($arFields['PARAMS']['CREATED_BY'], $GLOBALS['arExtranetUserID'])
				? Loc::getMessage('TASKS_SONET_LOG_EXTRANET_SUFFIX')
				: ''
		);

		$rsUser = CUser::GetList(
			'id',
			'asc',
			array('ID_EQUAL_EXACT' => (int) $arFields['PARAMS']['CREATED_BY']),
			array(
				'FIELDS' => array(
					'PERSONAL_GENDER',
					'ID',
					'NAME',
					'LAST_NAME',
					'SECOND_NAME',
					'LOGIN'
				)
			)
		);

		if ($arUser = $rsUser->Fetch())
		{
			$title_tmp .= " ("
				. str_replace(
					"#USER_NAME#",
					CUser::FormatName(CSite::GetNameFormat(false), $arUser) . $suffix,
					Loc::getMessage("TASKS_SONET_GL_EVENT_TITLE_TASK_CREATED")
				)
				. ")";
		}
	}

	$title = $title_tmp;

	if (in_array(
		$arFields["PARAMS"]["TYPE"],
		array("create", "status", 'modify', 'comment'),
		true
	))
	{
		if ( ! (
			isset($arFields['PARAMS']['CHANGED_FIELDS'])
			&& is_array($arFields['PARAMS']['CHANGED_FIELDS'])
		))
		{
			$arFields['PARAMS']['CHANGED_FIELDS'] = array();
		}

		$rsTask = CTasks::GetByID($arFields["SOURCE_ID"], false);
		if ($arTask = $rsTask->Fetch())
		{
			$task_datetime = $arTask["CHANGED_DATE"];
			if ($arFields["PARAMS"]["TYPE"] == "create")
			{
				if (isset($arParams["MOBILE"]) && $arParams["MOBILE"] == "Y")
				{
					$message_24_1 = $taskHtmlTitle;
				}
				else
				{
					$message      = $message_24_1 = $eventTitle;
					$message_24_2 = $changes_24 = "";
				}
			}
			elseif ($arFields["PARAMS"]["TYPE"] == "modify")
			{
				$arChangesFields = $arFields["PARAMS"]["CHANGED_FIELDS"];
				$changes_24 = implode(", ", CTaskNotifications::__Fields2Names($arChangesFields));

				if (
					isset($arParams["MOBILE"])
					&& $arParams["MOBILE"] == "Y"
				)
				{
					$message_24_1 = $taskHtmlTitle;
				}
				else
				{
					$message = str_replace(
						"#CHANGES#",
						implode(", ", CTaskNotifications::__Fields2Names($arChangesFields)),
						Loc::getMessage("TASKS_SONET_GL_TASKS2_TASK_CHANGED_MESSAGE")
					);
					$message_24_1 = $eventTitle;
					$message_24_2 = Loc::getMessage("TASKS_SONET_GL_TASKS2_TASK_CHANGED_MESSAGE_24_2");
				}
			}
			elseif ($arFields["PARAMS"]["TYPE"] == "status")
			{
				$message = Loc::getMessage("TASKS_SONET_GL_TASKS2_TASK_STATUS_MESSAGE_".$arTask["STATUS"]);

				$message_24_1 = $eventTitle;

				if ((int)$arTask["STATUS"] === Status::DECLINED)
				{
					$message      = str_replace("#TASK_DECLINE_REASON#", $arTask["DECLINE_REASON"], $message);
					$message_24_2 = Loc::getMessage("TASKS_SONET_GL_TASKS2_TASK_STATUS_MESSAGE_".$arTask["STATUS"]."_24_2");
					$changes_24   = $arTask["DECLINE_REASON"];
				}
				else
					$message_24_2 = $changes_24 = $message;
			}
			elseif ($arFields['PARAMS']['TYPE'] === 'comment')
			{
				$message_24_1 = $eventTitle;
				$message_24_2 = $changes_24 = $message = '';
			}

			$prevRealStatus = false;

			if (isset($arFields['PARAMS']['PREV_REAL_STATUS']))
				$prevRealStatus = $arFields['PARAMS']['PREV_REAL_STATUS'];

			ob_start();
			$template = '';
			$isMobile = 'N';
			if (isset($arParams["MOBILE"]) && $arParams["MOBILE"] === 'Y')
			{
				$template = 'mobile';
				$isMobile = 'Y';
			}
			$GLOBALS['APPLICATION']->IncludeComponent(
				"bitrix:tasks.task.livefeed",
				$template,
				array(
					"MOBILE"        => $isMobile,
					"TASK"          => $arTask,
					"MESSAGE"       => ($message ?? null),
					"MESSAGE_24_1"  => ($message_24_1 ?? null),
					"MESSAGE_24_2"  => ($message_24_2 ?? null),
					"CHANGES_24"    => $changes_24,
					"NAME_TEMPLATE"	=> ($arParams["NAME_TEMPLATE"] ?? null),
					"PATH_TO_USER"	=> ($arParams["PATH_TO_USER"] ?? null),
					'TYPE'          => $arFields["PARAMS"]["TYPE"],
					'task_tmp'      => $taskHtmlTitle,
					'taskHtmlTitle' => $taskHtmlTitle,
					'PREV_REAL_STATUS' => $prevRealStatus
				),
				null,
				array("HIDE_ICONS" => "Y")
			);
			$arFields["MESSAGE"] = ob_get_contents();
			ob_end_clean();
		}
	}

	if (isset($arParams['MOBILE']) && $arParams["MOBILE"] === "Y")
	{
		$arResult["EVENT_FORMATTED"] = array(
			"TITLE"             => '',
			"TITLE_24"          => $eventTitleWoTaskName,
			"MESSAGE"           => htmlspecialcharsbx($arFields['MESSAGE']),
			"DESCRIPTION"       => $arFields['TITLE'],
			"DESCRIPTION_STYLE" => 'task'
		);
	}
	else
	{
		$strMessage      = $arFields['MESSAGE'];
		$strShortMessage = ($arFields['~MESSAGE'] ?? null);
		$url = ($arFields['~URL'] ?? '');

		$arResult["EVENT_FORMATTED"] = array(
			"TITLE"            => $title,
			"MESSAGE"          => $strMessage,
			"SHORT_MESSAGE"    => $strShortMessage,
			"IS_MESSAGE_SHORT" => true,
			"STYLE"            => 'tasks-info',
			"COMMENT_URL"      => $url . (mb_strpos($url, '?') > 0 ? '&' : '?') . 'MID=#ID##com#ID#'
		);
	}

	if ($arFields["ENTITY_TYPE"] == SONET_SUBSCRIBE_ENTITY_GROUP)
	{
		$arResult['EVENT_FORMATTED']['DESTINATION'] = [
			[
				'STYLE' => 'sonetgroups',
				'TITLE' => $arResult['ENTITY']['FORMATTED']['NAME'],
				'URL' => $arResult['ENTITY']['FORMATTED']['URL'],
				'IS_EXTRANET' =>
					is_array($GLOBALS["arExtranetGroupID"] ?? null)
					&& in_array($arFields['ENTITY_ID'], $GLOBALS['arExtranetGroupID'])
				,
			],
		];
	}

	if ($task_datetime !== '')
	{
		$arResult["EVENT_FORMATTED"]["LOG_DATE_FORMAT"] = $task_datetime;
	}

	return $arResult;
}