static function updateBlogPost($params = [], $scope = Controller::SCOPE_AJAX, &$resultFields = [])
{
global $USER, $USER_FIELD_MANAGER, $APPLICATION, $CACHE_MANAGER;
$postId = (int) ($params['POST_ID'] ?? null);
if ($postId <= 0)
{
$APPLICATION->throwException('Wrong post ID', 'SONET_CONTROLLER_LIVEFEED_BLOGPOST_UPDATE_ERROR');
return false;
}
if (!Loader::includeModule('blog'))
{
$APPLICATION->throwException(Loc::getMessage('SOCIALNETWORK_ITEM_HELPER_BLOG_MODULE_NOT_INSTALLED'), 'SONET_CONTROLLER_LIVEFEED_BLOGPOST_UPDATE_ERROR');
return false;
}
$currentUserId = (
isset($params['USER_ID'])
&& (int)$params['USER_ID'] > 0
&& Livefeed::isAdmin()
? $params['USER_ID']
: $USER->getId()
);
$siteId = (
is_set($params, 'SITE_ID')
&& !empty($params['SITE_ID'])
? $params['SITE_ID']
: SITE_ID
);
$currentUserPerm = self::getBlogPostPerm([
'USER_ID' => $currentUserId,
'POST_ID' => $postId
]);
if ($currentUserPerm <= Permissions::WRITE)
{
$APPLICATION->throwException('No write perms', 'SONET_CONTROLLER_LIVEFEED_BLOGPOST_UPDATE_ERROR');
return false;
}
$postFields = Post::getById($postId)->getFields();
if (empty($postFields))
{
$APPLICATION->throwException('No post found', 'SONET_CONTROLLER_LIVEFEED_BLOGPOST_UPDATE_ERROR');
return false;
}
$blog = Blog::getByUser([
'GROUP_ID' => Option::get('socialnetwork', 'userbloggroup_id', false, $siteId),
'SITE_ID' => $siteId,
'USER_ID' => $postFields['AUTHOR_ID']
]);
if (!$blog)
{
$APPLICATION->throwException('No blog found', 'SONET_CONTROLLER_LIVEFEED_BLOGPOST_UPDATE_ERROR');
return false;
}
$updateFields = [
'PUBLISH_STATUS' => $postFields['PUBLISH_STATUS']
];
$updateFields['TITLE'] = '';
$updateFields['MICRO'] = 'N';
if (isset($params['POST_TITLE']))
{
$updateFields['TITLE'] = $params['POST_TITLE'];
}
if (
(string)$updateFields['TITLE'] === ''
&& isset($params['POST_MESSAGE'])
)
{
$updateFields['MICRO'] = 'Y';
$updateFields['TITLE'] = preg_replace([ "/n+/is" . BX_UTF_PCRE_MODIFIER, "/s+/is" . BX_UTF_PCRE_MODIFIER ], ' ', blogTextParser::killAllTags($params['POST_MESSAGE']));
$updateFields['TITLE'] = trim($updateFields['TITLE'], " tnr x0BxA0");
}
if (($params['POST_MESSAGE'] ?? '') <> '')
{
$updateFields['DETAIL_TEXT'] = $params['POST_MESSAGE'];
}
if (!empty($params['DEST']))
{
if (
ModuleManager::isModuleInstalled('mail')
&& ModuleManager::isModuleInstalled('intranet')
&& (
!Loader::includeModule('bitrix24')
|| CBitrix24::isEmailConfirmed()
)
)
{
$destinationList = $params['DEST'];
ComponentHelper::processBlogPostNewMailUserDestinations($destinationList);
$params['DEST'] = array_unique($destinationList);
}
$resultFields = [
'ERROR_MESSAGE' => false,
'PUBLISH_STATUS' => $updateFields['PUBLISH_STATUS']
];
$updateFields['SOCNET_RIGHTS'] = ComponentHelper::checkBlogPostDestinationList([
'DEST' => $params['DEST'],
'SITE_ID' => $siteId,
'AUTHOR_ID' => $postFields['AUTHOR_ID'],
'MOBILE' => ($params['MOBILE'] ?? 'N'),
], $resultFields);
if ($resultFields['ERROR_MESSAGE_PUBLIC'] ?? null)
{
return false;
}
if ($resultFields['ERROR_MESSAGE'])
{
$APPLICATION->throwException($resultFields['ERROR_MESSAGE'], 'SONET_CONTROLLER_LIVEFEED_BLOGPOST_UPDATE_ERROR');
return false;
}
$updateFields['PUBLISH_STATUS'] = $resultFields['PUBLISH_STATUS'];
}
if (isset($params['IMPORTANT']))
{
if ($params['IMPORTANT'] === 'Y')
{
$updateFields['UF_BLOG_POST_IMPRTNT'] = true;
if (!empty($params['IMPORTANT_DATE_END']))
{
$endDate = CRestUtil::unConvertDate($params['IMPORTANT_DATE_END']);
if ($endDate)
{
$updateFields['UF_IMPRTANT_DATE_END'] = BitrixMainTypeDateTime::createFromUserTime($endDate);
}
}
}
else
{
$updateFields['UF_BLOG_POST_IMPRTNT'] = false;
$updateFields['UF_IMPRTANT_DATE_END'] = false;
}
}
if (isset($params['GRATITUDE_MEDAL']))
{
if (
!empty($params['GRATITUDE_MEDAL'])
&& isset($params['GRATITUDE_EMPLOYEES'])
)
{
$gratitudeElementId = BitrixSocialnetworkHelperGratitude::create([
'medal' => $params['GRATITUDE_MEDAL'],
'employees' => $params['GRATITUDE_EMPLOYEES']
]);
if ($gratitudeElementId)
{
$updateFields['UF_GRATITUDE'] = $gratitudeElementId;
$updateFields['HAS_PROPS'] = 'Y';
}
}
else
{
$updateFields['UF_GRATITUDE'] = false;
}
}
if (isset($params['UF_BLOG_POST_VOTE']))
{
if (
!empty($params['UF_BLOG_POST_VOTE'])
&& !empty($params['UF_BLOG_POST_VOTE_' . $params['UF_BLOG_POST_VOTE'] . '_DATA'])
)
{
$updateFields['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'];
$updateFields['HAS_PROPS'] = 'Y';
}
else
{
$updateFields['UF_BLOG_POST_VOTE'] = false;
}
}
if (isset($params['BACKGROUND_CODE']))
{
$updateFields['BACKGROUND_CODE'] = (!empty($params['BACKGROUND_CODE']) ? $params['BACKGROUND_CODE'] : false);
}
if (
isset($params['PARSE_PREVIEW'])
&& $params['PARSE_PREVIEW'] === 'Y'
&& !empty($updateFields['DETAIL_TEXT'])
&& ($urlPreviewValue = ComponentHelper::getUrlPreviewValue($updateFields['DETAIL_TEXT']))
)
{
$updateFields['UF_BLOG_POST_URL_PRV'] = $urlPreviewValue;
$updateFields['HAS_PROPS'] = 'Y';
}
if ($result = CBlogPost::update($postId, $updateFields))
{
if (
Option::get('disk', 'successfully_converted', false)
&& Loader::includeModule('disk')
&& ($storage = BitrixDiskDriver::getInstance()->getStorageByUserId($postFields['AUTHOR_ID']))
&& ($folder = $storage->getFolderForUploadedFiles())
)
{
$filesList = [];
$needToDelete = false;
if (
(
!empty($params['FILES'])
|| !empty($params['UF_BLOG_POST_FILE'])
)
&& $scope === Controller::SCOPE_REST
)
{
$postUF = $USER_FIELD_MANAGER->getUserFields('BLOG_POST', $postId, LANGUAGE_ID);
if (
!empty($postUF['UF_BLOG_POST_FILE'])
&& !empty($postUF['UF_BLOG_POST_FILE']['VALUE'])
)
{
$filesList = array_merge($filesList, $postUF['UF_BLOG_POST_FILE']['VALUE']);
}
if (!empty($params['FILES']))
{
foreach ($params['FILES'] as $key => $fileData)
{
if (
$fileData === 'del'
&& in_array($key, $filesList)
)
{
foreach ($filesList as $i => $v)
{
if ($v == $key)
{
unset($filesList[$i]);
$needToDelete = true;
}
}
}
else
{
$fileFields = CRestUtil::saveFile($fileData);
if (is_array($fileFields))
{
$file = $folder->uploadFile(
$fileFields,
[
'NAME' => $fileFields['name'],
'CREATED_BY' => $postFields['AUTHOR_ID']
],
[],
true
);
if ($file)
{
$filesList[] = FileUserType::NEW_FILE_PREFIX . $file->getId();
}
}
}
}
}
elseif (
isset($params['UF_BLOG_POST_FILE'])
&& is_array($params['UF_BLOG_POST_FILE'])
)
{
if (
count($params['UF_BLOG_POST_FILE']) === 1
&& $params['UF_BLOG_POST_FILE'][0] === 'empty'
)
{
$filesList = [];
$needToDelete = true;
}
else
{
$filesList = array_unique(array_merge($filesList, array_map(static function($value) {
return (
preg_match('/^' . FileUserType::NEW_FILE_PREFIX . '(d+)$/i', $value)
? $value
: (int)$value
);
}, $params['UF_BLOG_POST_FILE'])));
}
}
}
elseif (
!empty($params['UF_BLOG_POST_FILE'])
&& $scope === Controller::SCOPE_AJAX
)
{
$filesList = array_unique(array_merge($filesList, array_map(static function($value) {
return (
preg_match('/^' . FileUserType::NEW_FILE_PREFIX . '(d+)$/i', $value)
? $value
: (int)$value
);
}, $params['UF_BLOG_POST_FILE'])));
}
if (
!empty($filesList)
|| $needToDelete
)
{
CBlogPost::update($postId, [
'HAS_PROPS' => 'Y',
'UF_BLOG_POST_FILE' => $filesList
]);
}
}
BXClearCache(true, ComponentHelper::getBlogPostCacheDir([
'TYPE' => 'post',
'POST_ID' => $postId
]));
BXClearCache(true, ComponentHelper::getBlogPostCacheDir([
'TYPE' => 'post_general',
'POST_ID' => $postId
]));
BXClearCache(true, ComponentHelper::getBlogPostCacheDir([
'TYPE' => 'posts_popular',
'SITE_ID' => $siteId
]));
$updateFields['AUTHOR_ID'] = $postFields['AUTHOR_ID'];
if ($postFields['PUBLISH_STATUS'] === BLOG_PUBLISH_STATUS_PUBLISH)
{
if ($updateFields['PUBLISH_STATUS'] === BLOG_PUBLISH_STATUS_DRAFT)
{
CBlogPost::deleteLog($postId);
}
elseif ($updateFields['PUBLISH_STATUS'] === BLOG_PUBLISH_STATUS_PUBLISH)
{
CBlogPost::updateLog($postId, $updateFields, $blog, [
'allowVideo' => Option::get('blog', 'allow_video', 'Y'),
'PATH_TO_SMILE' => false
]);
}
}
if (
isset($params['IMPORTANT'])
&& $params['IMPORTANT'] === 'Y'
)
{
CBlogUserOptions::setOption($result, 'BLOG_POST_IMPRTNT', 'Y', $currentUserId);
if (defined('BX_COMP_MANAGED_CACHE'))
{
$CACHE_MANAGER->clearByTag('blogpost_important_all');
}
}
}
return $result;
}