Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/socialnetwork/lib/item/ |
Upload File : |
<?php /** * Bitrix Framework * @package bitrix * @subpackage socialnetwork * @copyright 2001-2017 Bitrix */ namespace Bitrix\Socialnetwork\Item; use Bitrix\Blog\Item\Blog; use Bitrix\Blog\Item\Permissions; use Bitrix\Blog\Item\Post; use Bitrix\Main\AccessDeniedException; use Bitrix\Main\ArgumentException; use Bitrix\Main\Config\Option; use Bitrix\Main\Engine\Controller; use Bitrix\Main\Loader; use Bitrix\Main\LoaderException; use Bitrix\Main\Localization\Loc; use Bitrix\Main\ModuleManager; use Bitrix\Main\SystemException; use Bitrix\Socialnetwork\Component\BlogPostEdit; use Bitrix\Socialnetwork\ComponentHelper; use Bitrix\Socialnetwork\Controller\Livefeed; use Bitrix\Disk\Uf\FileUserType; class Helper { public 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 = \Bitrix\Main\Application::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+/isu", "/\s+/isu" ], ' ', \blogTextParser::killAllTags($postFields['DETAIL_TEXT'])); $postFields['TITLE'] = trim($postFields['TITLE'], " \t\n\r\0\x0B\xA0"); } 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'] = \Bitrix\Main\Type\DateTime::createFromUserTime($endDate); } } } if (isset($params['GRATITUDE_MEDAL'], $params['GRATITUDE_EMPLOYEES'])) { $gratitudeElementId = \Bitrix\Socialnetwork\Helper\Gratitude::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'] ]); \Bitrix\Main\FinderDestTable::merge([ 'CONTEXT' => 'blog_post', 'CODE' => \Bitrix\Main\FinderDestTable::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'); } } $categoryIdListFromPostData = BlogPostEdit\Tag::getTagsFromPostData([ 'blogId' => $blog['ID'], 'tags' => $params['TAGS'] ?? '', ]); $newCategoryIdList = BlogPostEdit\Tag::parseTagsFromFields([ 'blogCategoryIdList' => $categoryIdListFromPostData, 'postFields' => $postFields, 'blogId' => $blog['ID'], ]); $categoryIdList = array_merge($categoryIdListFromPostData, $newCategoryIdList); if (!empty($categoryIdList)) { \CBlogPostCategory::deleteByPostID($result); 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 = \Bitrix\Disk\Driver::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 = \Bitrix\Socialnetwork\Helper\Path::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 = \Bitrix\Socialnetwork\Helper\Mention::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; } public 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+/isu", "/\s+/isu" ], ' ', \blogTextParser::killAllTags($params['POST_MESSAGE'])); $updateFields['TITLE'] = trim($updateFields['TITLE'], " \t\n\r\0\x0B\xA0"); } 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'] = \Bitrix\Main\Type\DateTime::createFromUserTime($endDate); } } } else { $updateFields['UF_BLOG_POST_IMPRTNT'] = false; $updateFields['UF_IMPRTANT_DATE_END'] = false; } } $categoryIdListFromPostData = BlogPostEdit\Tag::getTagsFromPostData([ 'blogId' => $blog['ID'], 'tags' => $params['TAGS'] ?? '', ]); $newCategoryIdList = BlogPostEdit\Tag::parseTagsFromFields([ 'blogCategoryIdList' => $categoryIdListFromPostData, 'postFields' => $postFields, 'blogId' => $blog['ID'], ]); $categoryIdList = array_merge($categoryIdListFromPostData, $newCategoryIdList); if (!empty($categoryIdList)) { \CBlogPostCategory::deleteByPostID($postId); foreach ($categoryIdList as $categoryId) { \CBlogPostCategory::add([ 'BLOG_ID' => $postFields['BLOG_ID'], 'POST_ID' => $postId, 'CATEGORY_ID' => $categoryId ]); } $updateFields['CATEGORY_ID'] = implode(',', $categoryIdList); $updateFields['HAS_TAGS'] = 'Y'; } if (isset($params['GRATITUDE_MEDAL'])) { if ( !empty($params['GRATITUDE_MEDAL']) && isset($params['GRATITUDE_EMPLOYEES']) ) { $gratitudeElementId = \Bitrix\Socialnetwork\Helper\Gratitude::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 = \Bitrix\Disk\Driver::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; } /** * @param array $params * @return bool * @throws \Exception * @throws \Bitrix\Main\SystemException * @throws \Bitrix\Main\ArgumentException * @throws \Bitrix\Main\LoaderException * @throws \Bitrix\Main\AccessDeniedException */ public static function deleteBlogPost(array $params = []): bool { global $USER; $postId = (int)$params['POST_ID']; if ($postId <= 0) { throw new ArgumentException('Wrong post ID'); } if (!Loader::includeModule('blog')) { throw new LoaderException(Loc::getMessage('SOCIALNETWORK_ITEM_HELPER_BLOG_MODULE_NOT_INSTALLED')); } $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::FULL) { throw new AccessDeniedException(Loc::getMessage('SOCIALNETWORK_ITEM_HELPER_DELETE_NO_RIGHTS')); } \CBlogPost::DeleteLog($postId); BXClearCache(true, ComponentHelper::getBlogPostCacheDir([ 'TYPE' => 'posts_popular', 'SITE_ID' => $siteId, ])); 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_last_blog', 'SITE_ID' => $siteId, ])); BXClearCache(true, \CComponentEngine::makeComponentPath('bitrix:socialnetwork.blog.blog')); if (!\CBlogPost::delete($postId)) { throw new SystemException(Loc::getMessage('SOCIALNETWORK_ITEM_HELPER_DELETE_ERROR')); } $sonetGroupId = (int)($params['ACTIVITY_SONET_GROUP_ID'] ?? 0); if ($sonetGroupId > 0) { \CSocNetGroup::setLastActivity($sonetGroupId); } return true; } public static function getBlogPostPerm(array $params = []) { global $USER, $APPLICATION; if (!Loader::includeModule('blog')) { $APPLICATION->throwException(Loc::getMessage('SOCIALNETWORK_ITEM_HELPER_BLOG_MODULE_NOT_INSTALLED'), 'SONET_CONTROLLER_LIVEFEED_BLOGPOST_ERROR'); return false; } $currentUserId = ( isset($params['USER_ID']) && (int)$params['USER_ID'] > 0 && Livefeed::isAdmin() ? (int)$params['USER_ID'] : (int)$USER->getId() ); $postId = (int)($params['POST_ID'] ?? 0); if ($postId <= 0) { $APPLICATION->throwException('Wrong post ID', 'SONET_CONTROLLER_LIVEFEED_BLOGPOST_ERROR'); return false; } if ( \CSocNetUser::isUserModuleAdmin($currentUserId, SITE_ID) || \CMain::getGroupRight('blog') >= 'W' ) { return Permissions::FULL; } $postItem = Post::getById($postId); $postFields = $postItem->getFields(); if ((int)$postFields['AUTHOR_ID'] === $currentUserId) { $result = Permissions::FULL; } else { $permsResult = $postItem->getSonetPerms([ 'CHECK_FULL_PERMS' => true ]); $result = $permsResult['PERM']; if ( $result <= Permissions::READ && $permsResult['READ_BY_OSG'] ) { $result = Permissions::READ; } } return $result; } public static function getBlogPostFields($postId) { global $APPLICATION; $tzOffset = \CTimeZone::getOffset(); $cacheTtl = 2592000; $cacheId = 'blog_post_socnet_general_' . $postId . '_' . LANGUAGE_ID.($tzOffset <> 0 ? '_' . $tzOffset : '') . '_' . \Bitrix\Main\Context::getCurrent()->getCulture()->getDateTimeFormat() . '_rest'; $cacheDir = ComponentHelper::getBlogPostCacheDir([ 'TYPE' => 'post_general', 'POST_ID' => $postId ]); if (!Loader::includeModule('blog')) { $APPLICATION->throwException(Loc::getMessage('SOCIALNETWORK_ITEM_HELPER_BLOG_MODULE_NOT_INSTALLED'), 'SONET_CONTROLLER_LIVEFEED_BLOGPOST_MODULE_ERROR'); return false; } $cache = new \CPHPCache; if ($cache->initCache($cacheTtl, $cacheId, $cacheDir)) { $postFields = $cache->getVars(); $postItem = new Post; $postItem->setFields($postFields); } else { $cache->startDataCache(); $postItem = Post::getById($postId); $postFields = $postItem->getFields(); $cache->endDataCache($postFields); } return $postFields; } public static function getBlogPostEventId(array $params = []): string { global $USER_FIELD_MANAGER; if (!Loader::includeModule('blog')) { throw new SystemException(Loc::getMessage('SOCIALNETWORK_ITEM_HELPER_BLOG_MODULE_NOT_INSTALLED'), 'SONET_CONTROLLER_LIVEFEED_BLOGPOST_MODULE_BLOG_NOT_INSTALLED'); } $postId = (isset($params['postId']) && (int)$params['postId'] > 0 ? (int)$params['postId'] : 0); if ($postId <= 0) { throw new SystemException('Empty post ID', 'SONET_CONTROLLER_LIVEFEED_BLOGPOST_EMPTY_POST_ID'); } $eventId = \Bitrix\Blog\Integration\Socialnetwork\Log::EVENT_ID_POST; $postUserFields = $USER_FIELD_MANAGER->getUserFields('BLOG_POST', $postId, LANGUAGE_ID); if ( isset($postUserFields['UF_BLOG_POST_IMPRTNT']['VALUE']) && (int)$postUserFields['UF_BLOG_POST_IMPRTNT']['VALUE'] > 0 ) { $eventId = \Bitrix\Blog\Integration\Socialnetwork\Log::EVENT_ID_POST_IMPORTANT; } elseif ( isset($postUserFields['UF_BLOG_POST_VOTE']['VALUE']) && (int)$postUserFields['UF_BLOG_POST_VOTE']['VALUE'] > 0 ) { $eventId = \Bitrix\Blog\Integration\Socialnetwork\Log::EVENT_ID_POST_VOTE; } elseif ( isset($postUserFields['UF_GRATITUDE']['VALUE']) && (int)$postUserFields['UF_GRATITUDE']['VALUE'] > 0 ) { $eventId = \Bitrix\Blog\Integration\Socialnetwork\Log::EVENT_ID_POST_GRAT; } return $eventId; } }