• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/taskcomments.php
  • Класс: CTaskComments
  • Вызов: CTaskComments::__deprecated_Add
static function __deprecated_Add(
	$commentText,
	$forumTopicId,
	$forumId,
	$nameTemplate,
	$arTask,
	$permissions,
	$commentId,
	$givenUserId,
	$imageWidth,
	$imageHeight,
	$arSmiles,
	$arForum,
	$messagesPerPage,
	$arUserGroupArray,
	$backPage,
	$strMsgAddComment,
	$strMsgEditComment,
	$strMsgNewTask,
	$componentName,
	&$outForumTopicId,
	&$arErrorCodes,
	&$outStrUrl,
	$arFieldsAdditional = array()
)
{
	global $DB;

	if (is_array($arTask))
	{
		if ( ! array_key_exists('~TITLE', $arTask) )
		{
			$arTmpTask = $arTask;

			foreach ($arTmpTask as $key => $value)
			{
				if (mb_substr($key, 0, 1) !== '~')
					$arTask['~' . $key] = $arTmpTask[$key];
			}
		}
	}

	$MID = 0;
	$TID = 0;

	if (($forumTopicId > 0) && (CForumTopic::GetByID($forumTopicId) === false))
		$forumTopicId = false;

	if ($forumTopicId <= 0)
	{
		$arUserStart = array(
			"ID" => intval($arTask["CREATED_BY"]),
			"NAME" => $GLOBALS["FORUM_STATUS_NAME"]["guest"]
		);

		if ($arUserStart["ID"] > 0)
		{
			$res = array();
			$db_res = CForumUser::GetListEx(
				array(),
				array("USER_ID" => $arTask["CREATED_BY"])
			);

			if ($db_res && $res = $db_res->Fetch())
			{
				$res["FORUM_USER_ID"] = intval($res["ID"]);
				$res["ID"] = $res["USER_ID"];
			}
			else
			{
				$db_res = CUser::GetByID($arTask["CREATED_BY"]);
				if ($db_res && $res = $db_res->Fetch())
				{
					$res["SHOW_NAME"] = COption::GetOptionString("forum", "USER_SHOW_NAME", "Y");
					$res["USER_PROFILE"] = "N";
				}
			}

			if (!empty($res))
			{
				$arUserStart = $res;
				$sName = ($res["SHOW_NAME"] == "Y" ? trim(CUser::FormatName($nameTemplate, $res)) : "");
				$arUserStart["NAME"] = (empty($sName) ? trim($res["LOGIN"]) : $sName);
			}
		}

		$arUserStart["NAME"] = (empty($arUserStart["NAME"]) ? $GLOBALS["FORUM_STATUS_NAME"]["guest"] : $arUserStart["NAME"]);
		$DB->StartTransaction();

		$arFields = Array(
			"TITLE" => $arTask["~TITLE"],
			"FORUM_ID" => $forumId,
			"USER_START_ID" => $arUserStart["ID"],
			"USER_START_NAME" => $arUserStart["NAME"],
			"LAST_POSTER_NAME" => $arUserStart["NAME"],
			"APPROVED" => "Y",
			"PERMISSION_EXTERNAL" => $permissions,
			"PERMISSION" => $permissions,
			"NAME_TEMPLATE" => $nameTemplate,
			'XML_ID' => 'TASK_' . $arTask['ID']
		);

		$TID = CForumTopic::Add($arFields);

		if (intval($TID) <= 0)
			$arErrorCodes[] = array('code' => 'topic is not created');
		else
		{
			$arFields = array(
				"FORUM_TOPIC_ID" => $TID
			);

			$task = new CTasks();
			$task->Update($arTask["ID"], $arFields);
		}

		if (!empty($arErrorCodes))
		{
			$DB->Rollback();
			return false;
		}
		else
		{
			$DB->Commit();
		}
	}

	$arFieldsG = array(
		"POST_MESSAGE" => $commentText,
		"AUTHOR_NAME"  => '',
		"AUTHOR_EMAIL" => $GLOBALS['USER']->GetEmail(),
		"USE_SMILES" => NULL,
		"PARAM2" => $arTask['ID'],
		"TITLE"               => $arTask["~TITLE"],
		"PERMISSION_EXTERNAL" => $permissions,
		"PERMISSION"          => $permissions,
	);

	// UF_* forwarding
	if(is_array($arFieldsAdditional))
	{
		foreach($arFieldsAdditional as $field => $value)
		{
			if(mb_strlen($field) && mb_substr($field, 0, 3) == 'UF_')
			{
				$arFieldsG[$field] = $value;
				$GLOBALS[$field] = $value; // strange behaviour required for ForumMessageAdd() to handle UF_* properly
			}
		}
	}

	if (!empty($_FILES["REVIEW_ATTACH_IMG"]))
	{
		$arFieldsG["ATTACH_IMG"] = $_FILES["REVIEW_ATTACH_IMG"];
	}
	else
	{
		$arFiles = array();
		if (!empty($_REQUEST["FILES"]))
		{
			foreach ($_REQUEST["FILES"] as $key)
			{
				$arFiles[$key] = array("FILE_ID" => $key);
				if (!in_array($key, $_REQUEST["FILES_TO_UPLOAD"]))
				{
					$arFiles[$key]["del"] = "Y";
				}
			}
		}
		if (!empty($_FILES))
		{
			$res = array();
			foreach ($_FILES as $key => $val)
			{
				if (mb_substr($key, 0, mb_strlen("FILE_NEW")) == "FILE_NEW" && !empty($val["name"]))
				{
					$arFiles[] = $_FILES[$key];
				}
			}
		}
		if (!empty($arFiles))
		{
			$arFieldsG["FILES"] = $arFiles;
		}
	}
	$TOPIC_ID = ($forumTopicId > 0 ? $forumTopicId : $TID);

	$MESSAGE_ID = 0;
	$MESSAGE_TYPE = $TOPIC_ID > 0 ? "REPLY" : "NEW";
	if (COption::GetOptionString("tasks", "task_comment_allow_edit") && $MESSAGE_ID = intval($commentId))
	{
		$MESSAGE_TYPE = "EDIT";
	}

	$strErrorMessage = '';
	$strOKMessage = '';
	$MID = ForumAddMessage($MESSAGE_TYPE, $forumId, $TOPIC_ID, $MESSAGE_ID,
		$arFieldsG, $strErrorMessage, $strOKMessage, false,
		$_POST["captcha_word"], 0, $_POST["captcha_code"], $nameTemplate);

	if ($MID <= 0 || !empty($strErrorMessage))
	{
		$arErrorCodes[] = array(
			'code'  => 'message is not added 2',
			'title' => (empty($strErrorMessage) ? NULL : $strErrorMessage)
		);
	}
	else
	{
		$arMessage = CForumMessage::GetByID($MID);

		if ($forumTopicId <= 0)
		{
			$forumTopicId = $TID = intval($arMessage["TOPIC_ID"]);
		}

		$outForumTopicId = intval($forumTopicId);

		if ($componentName !== null)
			ForumClearComponentCache($componentName);

		$strURL = (!empty($backPage) ? $backPage : $GLOBALS['APPLICATION']->GetCurPageParam("", array("IFRAME", "MID", "SEF_APPLICATION_CUR_PAGE_URL", BX_AJAX_PARAM_ID, "result")));
		$strURL = ForumAddPageParams(
			$strURL,
			array(
				"MID" => $MID,
				"result" => ($arForum["MODERATION"] != "Y"
					|| CForumNew::CanUserModerateForum($forumId, $arUserGroupArray) ? "reply" : "not_approved"
				)
			),
			false,
			false
		);
		$outStrUrl = $strURL;

		/*
		// sonet log
		if (CModule::IncludeModule("socialnetwork"))
		{
			$dbRes = CSocNetLog::GetList(
				array("ID" => "DESC"),
				array(
					"EVENT_ID" => "tasks",
					"SOURCE_ID" => $arTask["ID"]
				),
				false,
				false,
				array("ID", "ENTITY_TYPE", "ENTITY_ID", "TMP_ID")
			);
			if ($arRes = $dbRes->Fetch())
			{
				$log_id = $arRes["TMP_ID"];
				$entity_type = $arRes["ENTITY_TYPE"];
				$entity_id = $arRes["ENTITY_ID"];
			}
			else
			{
				$entity_type = ($arTask["GROUP_ID"] ? SONET_ENTITY_GROUP : SONET_ENTITY_USER);
				$entity_id = ($arTask["GROUP_ID"] ? $arTask["GROUP_ID"] : $arTask["CREATED_BY"]);

				$rsUser = CUser::GetByID($arTask["CREATED_BY"]);
				if ($arUser = $rsUser->Fetch())
				{
					$arSoFields = Array(
						"ENTITY_TYPE" => $entity_type,
						"ENTITY_ID" => $entity_id,
						"EVENT_ID" => "tasks",
						"LOG_DATE" => $arTask["CREATED_DATE"],
						"TITLE_TEMPLATE" => "#TITLE#",
						"TITLE" => htmlspecialcharsBack($arTask["~TITLE"]),
						"MESSAGE" => "",
						"TEXT_MESSAGE" => $strMsgNewTask,
						"MODULE_ID" => "tasks",
						"CALLBACK_FUNC" => false,
						"SOURCE_ID" => $arTask["ID"],
						"ENABLE_COMMENTS" => "Y",
						"USER_ID" => $arTask["CREATED_BY"],
						"URL" => CTaskNotifications::GetNotificationPath($arUser, $arTask["ID"]),
						"PARAMS" => serialize(array("TYPE" => "create"))
					);
					$log_id = CSocNetLog::Add($arSoFields, false);
					if (intval($log_id) > 0)
					{
						CSocNetLog::Update($log_id, array("TMP_ID" => $log_id));
						$arRights = CTaskNotifications::__UserIDs2Rights(CTaskNotifications::GetRecipientsIDs($arTask, false));
						if($arTask["GROUP_ID"])
							$arRights[] = "S".SONET_ENTITY_GROUP.$arTask["GROUP_ID"];
						CSocNetLogRights::Add($log_id, $arRights);
					}
				}
			}

			if (intval($log_id) > 0)
			{
				$sText = (COption::GetOptionString("forum", "FILTER", "Y") == "Y" ? $arMessage["POST_MESSAGE_FILTER"] : $arMessage["POST_MESSAGE"]);

				CSocNetLog::Update(
					$log_id,
					array(
						'PARAMS' => serialize(array('TYPE' => 'comment'))
					)
				);

				$arFieldsForSocnet = array(
					"ENTITY_TYPE" => $entity_type,
					"ENTITY_ID" => $entity_id,
					"EVENT_ID" => "tasks_comment",
					"MESSAGE" => $sText,
					"TEXT_MESSAGE" => $parser->convert4mail($sText),
					"URL" => str_replace("?IFRAME=Y", "", str_replace("&IFRAME=Y", "", str_replace("IFRAME=Y&", "", $strURL))),
					"MODULE_ID" => "tasks",
					"SOURCE_ID" => $MID,
					"LOG_ID" => $log_id,
					"RATING_TYPE_ID" => "FORUM_POST",
					"RATING_ENTITY_ID" => $MID
				);

				if ($MESSAGE_TYPE == "EDIT")
				{
					$dbRes = CSocNetLogComments::GetList(
						array("ID" => "DESC"),
						array(
							"EVENT_ID"	=> array("tasks_comment"),
							"SOURCE_ID" => $MID
						),
						false,
						false,
						array("ID")
					);
					while ($arRes = $dbRes->Fetch())
					{
						CSocNetLogComments::Update($arRes["ID"], $arFieldsForSocnet);
					}
				}
				else
				{
					$arFieldsForSocnet['USER_ID']   = $givenUserId;
					$arFieldsForSocnet['=LOG_DATE'] = $GLOBALS['DB']->CurrentTimeFunction();

					$ufFileID = array();
					$dbAddedMessageFiles = CForumFiles::GetList(array("ID" => "ASC"), array("MESSAGE_ID" => $MID));
					while ($arAddedMessageFiles = $dbAddedMessageFiles->Fetch())
						$ufFileID[] = $arAddedMessageFiles["FILE_ID"];

					if (count($ufFileID) > 0)
						$arFieldsForSocnet["UF_SONET_COM_FILE"] = $ufFileID;

					$ufDocID = $GLOBALS["USER_FIELD_MANAGER"]->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MESSAGE_DOC", $MID, LANGUAGE_ID);
					if ($ufDocID)
						$arFieldsForSocnet["UF_SONET_COM_DOC"] = $ufDocID;

					$ufDocVer = $GLOBALS["USER_FIELD_MANAGER"]->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MESSAGE_VER", $MID, LANGUAGE_ID);
					if ($ufDocVer)
						$arFieldsForSocnet["UF_SONET_COM_VER"] = $ufDocVer;

					if (
						isset($arFieldsAdditional["ANCILLARY"])
						&& $arFieldsAdditional["ANCILLARY"]
					)
					{
						CSocNetLogComments::Add($arFieldsForSocnet, false, false, false);
					}
					else
					{
						$comment_id = CSocNetLogComments::Add($arFieldsForSocnet, false, false);
						CSocNetLog::CounterIncrement($comment_id, false, false, "LC");
					}
				}
			}
		}
		*/

		$occurAsUserId = CTasksTools::getOccurAsUserId();
		if ( ! $occurAsUserId )
			$occurAsUserId = ($arMessage["AUTHOR_ID"] ? $arMessage["AUTHOR_ID"] : 1);

		// Tasks log
		$arLogFields = array(
			"TASK_ID" => $arTask["ID"],
			"USER_ID" => $occurAsUserId,
			"CREATED_DATE" => ($arMessage["EDIT_DATE"] ? ConvertTimeStamp(MakeTimeStamp($arMessage["EDIT_DATE"], CSite::GetDateFormat()), "FULL") : $arMessage["POST_DATE"]),
			"FIELD" => "COMMENT",
			"TO_VALUE" => $MID
		);

		$log = new CTaskLog();
		$log->Add($arLogFields);
	}

	return ($MID);	// Message id
}