static function addCommentLists($fields)
{
global $DB, $USER_FIELD_MANAGER;
if (!CModule::IncludeModule('forum') || !CModule::IncludeModule('bizproc'))
return false;
$ufFileId = array();
$ufDocId = array();
$fieldsMessage = array();
$messageId = array();
$error = array();
$note = array();
$sonetLogQuery = CSocNetLog::GetList(
array(),
array('ID' => $fields['LOG_ID']),
false,
false,
array('ID', 'SOURCE_ID', 'SITE_ID', 'MESSAGE', 'USER_ID')
);
if($sonetLog = $sonetLogQuery->fetch())
{
$users = CBPTaskService::getWorkflowParticipants($sonetLog['MESSAGE'], CBPTaskUserStatus::Waiting);
if(preg_match_all("/(?<=[USER=)(?P[0-9]+)(?=])/", $fields['TEXT_MESSAGE'], $matches))
$users = array_unique(array_merge($users, $matches['id']));
$users[] = $sonetLog['USER_ID'];
self::setSocnetFollow($users, $sonetLog['ID'], 'Y', false, true);
$forumId = CBPHelper::getForumId();
if($forumId)
{
$topicQuery = CForumTopic::GetList(array(), array('FORUM_ID' => $forumId, 'XML_ID' => 'WF_'.$sonetLog['MESSAGE']));
if ($topicQuery && ($topic = $topicQuery->fetch()))
{
$topicId = $topic['ID'];
}
else
{
$dataTopic = array(
'AUTHOR_ID' => 0,
'TITLE' => 'WF_'.$sonetLog['MESSAGE'],
'TAGS' => '',
'MESSAGE' => 'WF_'.$sonetLog['MESSAGE'],
'XML_ID' => 'WF_'.$sonetLog['MESSAGE']
);
$userStart = array(
"ID" => $dataTopic["AUTHOR_ID"],
"NAME" => $GLOBALS["FORUM_STATUS_NAME"]["guest"]
);
$DB->StartTransaction();
$topicFields = Array(
"TITLE" => $dataTopic["TITLE"],
"TAGS" => $dataTopic["TAGS"],
"FORUM_ID" => $forumId,
"USER_START_ID" => $userStart["ID"],
"USER_START_NAME" => $userStart["NAME"],
"LAST_POSTER_NAME" => $userStart["NAME"],
"XML_ID" => $dataTopic["XML_ID"],
"APPROVED" => "Y",
"PERMISSION_EXTERNAL" =>'Q',
"PERMISSION" => 'Y',
);
$topicId = CForumTopic::Add($topicFields);
if (intval($topicId) > 0)
{
$dataTopic['MESSAGE'] = strip_tags($dataTopic['MESSAGE']);
$dataFields = Array(
"POST_MESSAGE" => $dataTopic['MESSAGE'],
"AUTHOR_ID" => $userStart["ID"],
"AUTHOR_NAME" => $userStart["NAME"],
"FORUM_ID" => $forumId,
"TOPIC_ID" => $topicId,
"APPROVED" => "Y",
"NEW_TOPIC" => "Y",
"PARAM1" => "WF",
"PARAM2" => 0,
"PERMISSION_EXTERNAL" => 'Q',
"PERMISSION" => 'Y',
);
$startMessageId = CForumMessage::Add($dataFields, false, array("SKIP_INDEXING" => "Y", "SKIP_STATISTIC" => "N"));
if (intval($startMessageId) <= 0)
{
CForumTopic::Delete($topicId);
$topicId = 0;
}
}
if (intval($topicId) <= 0)
{
$DB->Rollback();
}
else
{
$DB->Commit();
}
}
if ($topicId)
{
$fieldsMessage = array(
'POST_MESSAGE' => $fields['TEXT_MESSAGE'],
'USE_SMILES' => 'Y',
'PERMISSION_EXTERNAL' => 'Q',
'PERMISSION' => 'Y',
'APPROVED' => 'Y'
);
$tmp = false;
$USER_FIELD_MANAGER->editFormAddFields('SONET_COMMENT', $tmp);
if (is_array($tmp))
{
if (array_key_exists('UF_SONET_COM_DOC', $tmp))
{
$GLOBALS['UF_FORUM_MESSAGE_DOC'] = $tmp['UF_SONET_COM_DOC'];
}
elseif (array_key_exists('UF_SONET_COM_FILE', $tmp))
{
$fieldsMessage['FILES'] = array();
foreach($tmp['UF_SONET_COM_FILE'] as $fileId)
{
$fieldsMessage['FILES'][] = array('FILE_ID' => $fileId);
}
}
if (array_key_exists("UF_SONET_COM_URL_PRV", $tmp))
{
$GLOBALS["UF_FORUM_MES_URL_PRV"] = $tmp["UF_SONET_COM_URL_PRV"];
}
}
$messageId = ForumAddMessage("REPLY", $forumId, $topicId, 0, $fieldsMessage, $error, $note);
if ($messageId > 0)
{
$addedMessageFilesQuery = CForumFiles::getList(array('ID' => 'ASC'), array('MESSAGE_ID' => $messageId));
while ($addedMessageFiles = $addedMessageFilesQuery->fetch())
{
$ufFileId[] = $addedMessageFiles['FILE_ID'];
}
$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)
{
$error = Loc::getMessage('LISTS_LF_ADD_COMMENT_SOURCE_ERROR');
}
return array(
'SOURCE_ID' => $messageId,
'MESSAGE' => ($fieldsMessage ? $fieldsMessage['POST_MESSAGE'] : false),
'RATING_TYPE_ID' => 'FORUM_POST',
'RATING_ENTITY_ID' => $messageId,
'ERROR' => $error,
'NOTES' => $note,
'UF' => array(
'FILE' => $ufFileId,
'DOC' => $ufDocId,
'URL_PREVIEW' => $ufUrlPreview
)
);
}