static function addBlogPost($params, $scope = Controller::SCOPE_AJAX, &$resultFields = [])
{
global $USER, $CACHE_MANAGER, $APPLICATION;
$siteId = (
is_set($params, 'SITE_ID')
&& !empty($params['SITE_ID'])
? $params['SITE_ID']
: SITE_ID
);
$authorId = (
isset($params['USER_ID'])
&& (int)$params['USER_ID'] > 0
&& Livefeed::isAdmin()
? $params['USER_ID']
: $USER->getId()
);
if (!Loader::includeModule('blog'))
{
$APPLICATION->throwException(Loc::getMessage('SOCIALNETWORK_ITEM_HELPER_BLOG_MODULE_NOT_INSTALLED'), 'SONET_CONTROLLER_LIVEFEED_BLOGPOST_MODULE_BLOG_NOT_INSTALLED');
return false;
}
$blogGroupId = Option::get('socialnetwork', 'userbloggroup_id', false, $siteId);
if (empty($blogGroupId))
{
$blogGroupIdList = ComponentHelper::getSonetBlogGroupIdList([
'SITE_ID' => $siteId
]);
if (!empty($blogGroupIdList))
{
$blogGroupId = array_shift($blogGroupIdList);
}
}
$blog = Blog::getByUser([
'GROUP_ID' => $blogGroupId,
'SITE_ID' => $siteId,
'USER_ID' => $authorId,
'CREATE' => 'Y'
]);
if (!$blog)
{
$APPLICATION->throwException('Blog not found', 'SONET_CONTROLLER_LIVEFEED_BLOG_NOT_FOUND');
return false;
}
$connection = BitrixMainApplication::getConnection();
$helper = $connection->getSqlHelper();
$postFields = [
'BLOG_ID' => $blog['ID'],
'AUTHOR_ID' => $authorId,
'=DATE_CREATE' => $helper->getCurrentDateTimeFunction(),
'=DATE_PUBLISH' => $helper->getCurrentDateTimeFunction(),
'MICRO' => 'N',
'TITLE' => (($params['POST_TITLE'] ?? '') <> '' ? $params['POST_TITLE'] : ''),
'DETAIL_TEXT' => $params['POST_MESSAGE'],
'DETAIL_TEXT_TYPE' => 'text',
'PUBLISH_STATUS' => BLOG_PUBLISH_STATUS_PUBLISH,
'HAS_IMAGES' => 'N',
'HAS_TAGS' => 'N',
'HAS_SOCNET_ALL' => 'N'
];
$emailUserAllowed = (
ModuleManager::isModuleInstalled('mail')
&& ModuleManager::isModuleInstalled('intranet')
&& (
!Loader::includeModule('bitrix24')
|| CBitrix24::isEmailConfirmed()
)
);
if (
!empty($params['DEST'])
&& is_array($params['DEST'])
)
{
$resultFields = [
'ERROR_MESSAGE' => false,
'PUBLISH_STATUS' => $postFields['PUBLISH_STATUS']
];
if ($emailUserAllowed)
{
$destinationList = $params['DEST'];
ComponentHelper::processBlogPostNewMailUserDestinations($destinationList);
$params['DEST'] = array_unique($destinationList);
}
$postFields['SOCNET_RIGHTS'] = ComponentHelper::checkBlogPostDestinationList([
'DEST' => $params['DEST'],
'SITE_ID' => $siteId,
'AUTHOR_ID' => $authorId,
'MOBILE' => ($params['MOBILE'] ?? 'N'),
], $resultFields);
if ($resultFields['ERROR_MESSAGE_PUBLIC'] ?? null)
{
return false;
}
if ($resultFields['ERROR_MESSAGE'])
{
$APPLICATION->throwException($resultFields['ERROR_MESSAGE']);
return false;
}
$postFields['PUBLISH_STATUS'] = $resultFields['PUBLISH_STATUS'];
}
elseif (
!empty($params['SPERM'])
&& $scope === Controller::SCOPE_REST
)
{
if ($emailUserAllowed)
{
$pseudoHttpPostFields = [
'SPERM' => $params['SPERM'],
'INVITED_USER_NAME' => (!empty($params['INVITED_USER_NAME']) && is_array($params['INVITED_USER_NAME']) ? $params['INVITED_USER_NAME'] : []),
'INVITED_USER_LAST_NAME' => (!empty($params['INVITED_USER_NAME']) && is_array($params['INVITED_USER_LAST_NAME']) ? $params['INVITED_USER_LAST_NAME'] : []),
'INVITED_USER_CRM_ENTITY' => (!empty($params['INVITED_USER_CRM_ENTITY']) && is_array($params['INVITED_USER_CRM_ENTITY']) ? $params['INVITED_USER_CRM_ENTITY'] : []),
'INVITED_USER_CREATE_CRM_CONTACT' => (!empty($params['INVITED_USER_CREATE_CRM_CONTACT']) && is_array($params['INVITED_USER_CREATE_CRM_CONTACT']) ? $params['INVITED_USER_CREATE_CRM_CONTACT'] : []),
];
$temporaryParams = [
'ALLOW_EMAIL_INVITATION' => true
];
ComponentHelper::processBlogPostNewMailUser($pseudoHttpPostFields, $temporaryParams);
if (!empty($temporaryParams['ERROR_MESSAGE']))
{
$APPLICATION->throwException($temporaryParams['ERROR_MESSAGE'], 'SONET_CONTROLLER_LIVEFEED_BLOGPOST_ADD_ERROR');
return false;
}
$params['SPERM'] = $pseudoHttpPostFields['SPERM'];
}
$resultFields = [
'ERROR_MESSAGE' => false,
'PUBLISH_STATUS' => $postFields['PUBLISH_STATUS'],
];
$postFields['SOCNET_RIGHTS'] = ComponentHelper::convertBlogPostPermToDestinationList([
'PERM' => $params['SPERM'],
'IS_REST' => true,
'AUTHOR_ID' => $authorId,
'SITE_ID' => $siteId
], $resultFields);
$postFields['PUBLISH_STATUS'] = $resultFields['PUBLISH_STATUS'];
if (!empty($resultFields['ERROR_MESSAGE']))
{
$APPLICATION->throwException($resultFields['ERROR_MESSAGE'], 'SONET_CONTROLLER_LIVEFEED_BLOGPOST_ADD_ERROR');
return false;
}
}
elseif (
!Loader::includeModule('extranet')
|| CExtranet::isIntranetUser()
)
{
$postFields['SOCNET_RIGHTS'] = [ 'UA' ];
}
if (empty($postFields['SOCNET_RIGHTS']))
{
$APPLICATION->throwException('No destination specified', 'SONET_CONTROLLER_LIVEFEED_BLOGPOST_ADD_ERROR');
return false;
}
if ((string)$postFields['TITLE'] === '')
{
$postFields['MICRO'] = 'Y';
$postFields['TITLE'] = preg_replace([ "/n+/is" . BX_UTF_PCRE_MODIFIER, "/s+/is" . BX_UTF_PCRE_MODIFIER ], ' ', blogTextParser::killAllTags($postFields['DETAIL_TEXT']));
$postFields['TITLE'] = trim($postFields['TITLE'], " tnr x0BxA0");
}
if (
isset($params['IMPORTANT'])
&& $params['IMPORTANT'] === 'Y'
)
{
$postFields['UF_BLOG_POST_IMPRTNT'] = true;
if (!empty($params['IMPORTANT_DATE_END']))
{
$endDate = CRestUtil::unConvertDate($params['IMPORTANT_DATE_END']);
if ($endDate)
{
$postFields['UF_IMPRTANT_DATE_END'] = BitrixMainTypeDateTime::createFromUserTime($endDate);
}
}
}
if (isset($params['GRATITUDE_MEDAL'], $params['GRATITUDE_EMPLOYEES']))
{
$gratitudeElementId = BitrixSocialnetworkHelperGratitude::create([
'medal' => $params['GRATITUDE_MEDAL'],
'employees' => $params['GRATITUDE_EMPLOYEES']
]);
if ($gratitudeElementId)
{
$postFields['UF_GRATITUDE'] = $gratitudeElementId;
}
}
if (
!empty($params['UF_BLOG_POST_VOTE'])
&& !empty($params['UF_BLOG_POST_VOTE_' . $params['UF_BLOG_POST_VOTE'] . '_DATA'])
)
{
$postFields['UF_BLOG_POST_VOTE'] = $params['UF_BLOG_POST_VOTE'];
$GLOBALS['UF_BLOG_POST_VOTE_' . $params['UF_BLOG_POST_VOTE'] . '_DATA'] = $params['UF_BLOG_POST_VOTE_' . $params['UF_BLOG_POST_VOTE'] . '_DATA'];
}
if (!empty($params['BACKGROUND_CODE']))
{
$postFields['BACKGROUND_CODE'] = $params['BACKGROUND_CODE'];
}
if (
isset($params['PARSE_PREVIEW'])
&& $params['PARSE_PREVIEW'] === 'Y'
&& !empty($postFields['DETAIL_TEXT'])
&& ($urlPreviewValue = ComponentHelper::getUrlPreviewValue($postFields['DETAIL_TEXT']))
)
{
$postFields['UF_BLOG_POST_URL_PRV'] = $urlPreviewValue;
}
$result = CBlogPost::add($postFields);
if (!$result)
{
$APPLICATION->throwException('Blog post hasn't been added', 'SONET_CONTROLLER_LIVEFEED_BLOGPOST_ADD_ERROR');
return false;
}
$socnetPerms = ComponentHelper::getBlogPostSocNetPerms([
'postId' => $result,
'authorId' => $postFields['AUTHOR_ID']
]);
BitrixMainFinderDestTable::merge([
'CONTEXT' => 'blog_post',
'CODE' => BitrixMainFinderDestTable::convertRights($socnetPerms, [ 'U' . $postFields['AUTHOR_ID'] ])
]);
if (
isset($params['IMPORTANT'])
&& $params['IMPORTANT'] === 'Y'
)
{
CBlogUserOptions::setOption($result, 'BLOG_POST_IMPRTNT', 'Y', $authorId);
if (defined('BX_COMP_MANAGED_CACHE'))
{
$CACHE_MANAGER->clearByTag('blogpost_important_all');
}
}
$categoryIdList = BitrixSocialnetworkComponentBlogPostEditTag::parseTagsFromFields([
'postFields' => $postFields,
'blogId' => $blog['ID'],
]);
if (!empty($categoryIdList))
{
foreach ($categoryIdList as $categoryId)
{
CBlogPostCategory::add([
'BLOG_ID' => $postFields['BLOG_ID'],
'POST_ID' => $result,
'CATEGORY_ID' => $categoryId
]);
}
CBlogPost::update(
$result,
[
'CATEGORY_ID' => implode(',', $categoryIdList),
'HAS_TAGS' => 'Y'
]
);
}
if (
Option::get('disk', 'successfully_converted', false)
&& Loader::includeModule('disk')
&& ($storage = BitrixDiskDriver::getInstance()->getStorageByUserId($authorId))
&& ($folder = $storage->getFolderForUploadedFiles())
)
{
$filesList = [];
if (
isset($params['FILES'])
&& is_array($params['FILES'])
&& $scope === Controller::SCOPE_REST
)
{
foreach ($params['FILES'] as $fileData)
{
$fileFields = CRestUtil::saveFile($fileData);
if (is_array($fileFields))
{
$file = $folder->uploadFile(
$fileFields, // file array
[
'NAME' => $fileFields['name'],
'CREATED_BY' => $authorId
],
[],
true
);
if ($file)
{
$filesList[] = FileUserType::NEW_FILE_PREFIX . $file->getId();
}
}
}
}
elseif (
isset($params['UF_BLOG_POST_FILE'])
&& is_array($params['UF_BLOG_POST_FILE'])
)
{
$filesList = $params['UF_BLOG_POST_FILE'];
}
if (!empty($filesList)) // update post
{
CBlogPost::update(
$result,
[
'HAS_PROPS' => 'Y',
'UF_BLOG_POST_FILE' => $filesList
]
);
}
}
$pathToPost = BitrixSocialnetworkHelperPath::get('userblogpost_page', $siteId);
$postFields['ID'] = $result;
$postUrl = CComponentEngine::makePathFromTemplate(htmlspecialcharsBack($pathToPost), [
'post_id' => $result,
'user_id' => $blog['OWNER_ID']
]);
if ($postFields['PUBLISH_STATUS'] === BLOG_PUBLISH_STATUS_PUBLISH)
{
$paramsNotify = [
'bSoNet' => true,
'allowVideo' => Option::get('blog', 'allow_video', 'Y'),
'PATH_TO_POST' => $pathToPost,
'user_id' => $authorId,
'NAME_TEMPLATE' => CSite::getNameFormat(null, $siteId),
];
$logId = CBlogPost::notify($postFields, $blog, $paramsNotify);
if (
$logId
&& ($post = Post::getById($result))
)
{
CSocNetLog::update($logId, [
'EVENT_ID' => self::getBlogPostEventId([
'postId' => $post->getId()
]),
'SOURCE_ID' => $result, // table column field
'TAG' => $post->getTags(),
]);
}
BXClearCache(true, ComponentHelper::getBlogPostCacheDir([
'TYPE' => 'posts_last',
'SITE_ID' => $siteId
]));
$mentionList = BitrixSocialnetworkHelperMention::getUserIds($postFields['DETAIL_TEXT']);
ComponentHelper::notifyBlogPostCreated([
'post' => [
'ID' => $result,
'TITLE' => $postFields['TITLE'],
'AUTHOR_ID' => $authorId
],
'siteId' => $siteId,
'postUrl' => $postUrl,
'socnetRights' => ($logId ? LogRight::get($logId) : $postFields['SOCNET_RIGHTS']),
'socnetRightsOld' => [],
'mentionListOld' => [],
'mentionList' => $mentionList
]);
}
elseif (
$postFields['PUBLISH_STATUS'] === BLOG_PUBLISH_STATUS_READY
&& !empty($postFields['SOCNET_RIGHTS'])
)
{
CBlogPost::notifyImReady([
'TYPE' => 'POST',
'POST_ID' => $result,
'TITLE' => $postFields['TITLE'],
'POST_URL' => $postUrl,
'FROM_USER_ID' => $authorId,
'TO_SOCNET_RIGHTS' => $postFields['SOCNET_RIGHTS']
]);
$resultFields['WARNING_MESSAGE_PUBLIC'] = Loc::getMessage('SOCIALNETWORK_ITEM_HELPER_MODERATION_WARNING');
}
foreach ($postFields['SOCNET_RIGHTS'] as $destination)
{
if (preg_match('/^SG(d+)/i', $destination, $matches))
{
CSocNetGroup::setLastActivity($matches[1]);
}
}
return $result;
}