- Модуль: socialnetwork
- Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/log_tools.php
- Класс: CSocNetLogTools
- Вызов: CSocNetLogTools::AddComment_Tasks
static function AddComment_Tasks($arFields)
{
global $USER, $USER_FIELD_MANAGER;
if (!CModule::IncludeModule("forum"))
return false;
if (!CModule::IncludeModule("tasks"))
return false;
$sError = '';
$sNote = '';
$messageID = $ufUrlPreview = false;
$arFieldsMessage = array();
$ufFileID = array();
$ufDocID = array();
$dbResult = CSocNetLog::GetList(
array(),
array("ID" => $arFields["LOG_ID"]),
false,
false,
array("ID", "SOURCE_ID", "SITE_ID")
);
if ($arLog = $dbResult->Fetch())
{
$rsTask = CTasks::getById($arLog["SOURCE_ID"]);
if ($arTask = $rsTask->Fetch())
{
$forumID = BitrixTasksIntegrationSocialNetworkTask::getCommentForumId();
if ($forumID)
{
$userID = $USER->GetID();
/////////////////////////////////////////
// file prop & UF_* forwarding
$arLogSites = array();
$rsLogSite = CSocNetLog::GetSite($arLog["ID"]);
while ($arLogSite = $rsLogSite->Fetch())
$arLogSites[] = $arLogSite["LID"];
$bCurrentUserIsAdmin = CSocNetUser::isCurrentUserModuleAdmin($arLogSites);
$strPermission = false;
if ($arFields["ENTITY_TYPE"] == SONET_ENTITY_GROUP)
{
if (CSocNetFeaturesPerms::CanPerformOperation($userID, SONET_ENTITY_GROUP, $arFields["ENTITY_ID"], "tasks", "view", $bCurrentUserIsAdmin))
$strPermission = "I";
}
else
{
if (
CModule::IncludeModule('tasks')
&& BitrixTasksAccessTaskAccessController::can($userID, BitrixTasksAccessActionDictionary::ACTION_TASK_READ, (int) $arTask['ID'])
)
{
$strPermission = "I";
}
}
$arFieldsMessage = array(
"POST_MESSAGE" => $arFields["TEXT_MESSAGE"],
"USE_SMILES" => "Y",
"PERMISSION_EXTERNAL" => "Q",
"PERMISSION" => $strPermission,
"APPROVED" => "Y"
);
$USER_FIELD_MANAGER->EditFormAddFields("SONET_COMMENT", $arTmp);
if (is_array($arTmp))
{
if (array_key_exists("UF_SONET_COM_DOC", $arTmp))
{
$GLOBALS["UF_FORUM_MESSAGE_DOC"] = $arTmp["UF_SONET_COM_DOC"];
}
elseif (array_key_exists("UF_SONET_COM_FILE", $arTmp))
{
$arFieldsMessage["FILES"] = array();
foreach($arTmp["UF_SONET_COM_FILE"] as $file_id)
{
$arFieldsMessage["FILES"][] = array("FILE_ID" => $file_id);
}
}
if (array_key_exists("UF_SONET_COM_URL_PRV", $arTmp))
{
$GLOBALS["UF_FORUM_MES_URL_PRV"] = $arTmp["UF_SONET_COM_URL_PRV"];
}
}
// file prop & UF_* forwarding END
/////////////////////////////////////////
$feed = new BitrixForumCommentsFeed(
$forumID,
array(
"type" => "TK",
"id" => $arTask['ID'],
"xml_id" => "TASK_".$arTask['ID']
),
(
is_object($USER)
&& $USER instanceof CUser
? $USER->getId()
: (isset($arFields['CURRENT_USER_ID']) ? $arFields['CURRENT_USER_ID'] : 0)
)
);
BitrixTasksIntegrationSocialNetwork::disable(); // disable socnet on comment add to avoid recursion
$message = $feed->add($arFieldsMessage);
BitrixTasksIntegrationSocialNetwork::enable(); // enable it back
if(is_array($message))
{
$messageID = $message['ID'];
}
else
{
foreach($feed->getErrors() as $error)
{
$sError .= $error->getMessage();
}
}
// get UF DOC value and FILE_ID there
if ($messageID > 0)
{
// legacy files? will it work?
$dbAddedMessageFiles = CForumFiles::GetList(array("ID" => "ASC"), array("MESSAGE_ID" => $messageID));
while ($arAddedMessageFiles = $dbAddedMessageFiles->Fetch())
$ufFileID[] = $arAddedMessageFiles["FILE_ID"];
// files in UF_*
$ufDocID = $USER_FIELD_MANAGER->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MESSAGE_DOC", $messageID, LANGUAGE_ID);
$ufUrlPreview = $USER_FIELD_MANAGER->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MES_URL_PRV", $messageID, LANGUAGE_ID);
}
if ($messageID && ($arMessage = CForumMessage::GetByID($messageID)))
{
CSocNetLog::Update(
$arFields["LOG_ID"],
array(
'PARAMS' => serialize(array('TYPE' => 'comment'))
)
);
}
}
}
}
return array(
"SOURCE_ID" => $messageID,
"MESSAGE" => (!empty($arFieldsMessage) ? $arFieldsMessage["POST_MESSAGE"] : false),
"RATING_TYPE_ID" => "FORUM_POST",
"RATING_ENTITY_ID" => $messageID,
"ERROR" => $sError,
"NOTES" => $sNote,
"UF" => array(
"FILE" => $ufFileID,
"DOC" => $ufDocID,
"URL_PREVIEW" => $ufUrlPreview
),
"URL" => false
);
}