%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/forum/lib/replica/ |
| Current File : /home/bitrix/www/bitrix/modules/forum/lib/replica/forummessageattachmenthandler.php |
<?php
namespace Bitrix\Forum\Replica;
use Bitrix\Main\Loader;
if (Loader::includeModule('replica'))
{
class ForumMessageAttachmentHandler extends \Bitrix\Replica\Client\AttachmentHandler
{
protected $moduleId = "forum";
protected $relation = "b_forum_message.ATTACH_ID";
protected $executeEventEntity = "ForumMessage";
protected $parentRelation = "b_forum_message.ID";
protected $diskConnectorString = "forum_message";
protected $dataFields = array("POST_MESSAGE", "POST_MESSAGE_HTML");
/**
* Adds attachment to user field value for given entity.
*
* @param integer $messageId Message identifier.
* @param integer $diskAttachId Disk attachment identifier.
*
* @return void
*/
public static function updateUserField($messageId, $diskAttachId)
{
global $USER_FIELD_MANAGER;
$ufValue = $USER_FIELD_MANAGER->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MESSAGE_DOC", $messageId);
if (!$ufValue)
{
$ufValue = array($diskAttachId);
}
elseif (is_array($ufValue))
{
$ufValue[] = $diskAttachId;
}
else
{
$ufValue = $diskAttachId;
}
$USER_FIELD_MANAGER->Update("FORUM_MESSAGE", $messageId, array("UF_FORUM_MESSAGE_DOC" => $ufValue));
}
/**
* Returns array of attachments for given entity.
*
* @param integer $messageId Message identifier.
*
* @return array[]\Bitrix\Disk\AttachedObject
*/
public static function getUserField($messageId)
{
$result = array();
$messageList = \CForumMessage::getList(
array(),
array(
"ID" => $messageId,
),
false, 0,
array("SELECT" => array("UF_FORUM_MESSAGE_DOC"))
);
$messageInfo = $messageList->fetch();
if (
$messageInfo
&& $messageInfo["UF_FORUM_MESSAGE_DOC"]
&& $messageInfo["UF_FORUM_MESSAGE_DOC"]["VALUE"]
&& \Bitrix\Main\Loader::includeModule('disk')
)
{
foreach ($messageInfo["UF_FORUM_MESSAGE_DOC"]["VALUE"] as $attachId)
{
$attachedObject = \Bitrix\Disk\AttachedObject::getById($attachId, array('OBJECT'));
if ($attachedObject && $attachedObject->getFile())
{
$result[$attachId] = $attachedObject;
}
}
}
return $result;
}
/**
* Remote event handler.
*
* @param \Bitrix\Main\Event $event Contains two parameters: 0 - id, 1 - data.
*
* @return void
* @see \Bitrix\Replica\Client\AttachmentHandler::onAfterAdd
* @see \Bitrix\Replica\Client\AttachmentHandler::onAfterUpdate
*/
public function onExecuteDescriptionFix(\Bitrix\Main\Event $event)
{
$parameters = $event->getParameters();
$messId = $parameters[0];
$fields = $parameters[1];
$connection = \Bitrix\Main\Application::getConnection();
$sqlHelper = $connection->getSqlHelper();
if ($this->replaceGuidsWithFiles($fields))
{
$update = $sqlHelper->prepareUpdate("b_forum_message", $fields);
if (strlen($update[0]) > 0)
{
$sql = "UPDATE ".$sqlHelper->quote("b_forum_message")." SET ".$update[0]." WHERE ID = ".$messId;
$connection->query($sql);
if (\Bitrix\Main\Loader::includeModule('socialnetwork'))
{
$dbLogComment = \CSocNetLogComments::GetList(
array("ID" => "DESC"),
array(
"EVENT_ID" => 'tasks_comment',
"SOURCE_ID" => $messId,
),
false,
false,
array("ID", "LOG_ID")
);
$arLogComment = $dbLogComment->fetch();
if ($arLogComment)
{
$parser = new \CTextParser();
$parser->allow = array(
"HTML" => 'Y',
"ANCHOR" => 'Y',
"BIU" => 'Y',
"IMG" => "Y",
"VIDEO" => "Y",
"LIST" => 'N',
"QUOTE" => 'Y',
"CODE" => 'Y',
"FONT" => 'Y',
"SMILES" => "N",
"UPLOAD" => 'N',
"NL2BR" => 'N',
"TABLE" => "Y",
);
$arFieldsForSocnet = array(
"LOG_ID" => intval($arLogComment["LOG_ID"]),
"MESSAGE" => $fields["POST_MESSAGE"],
"TEXT_MESSAGE" => $parser->convert4mail($fields["POST_MESSAGE"]),
);
$ufFileID = array();
$dbAddedMessageFiles = \CForumFiles::GetList(array("ID" => "ASC"), array("MESSAGE_ID" => $messId));
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", intval($messId), LANGUAGE_ID);
if ($ufDocID)
{
$arFieldsForSocnet["UF_SONET_COM_DOC"] = $ufDocID;
}
\CSocNetLogComments::Update($arLogComment["ID"], $arFieldsForSocnet);
}
}
}
}
}
}
}