403Webshell
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/cvetdv.ru/bitrix/components/bitrix/socialnetwork.blog.post/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/components/bitrix/socialnetwork.blog.post/component.php
<?php

if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true)
{
	die();
}

/** @var CBitrixComponent $this */
/** @var array $arParams */
/** @var array $arResult */
/** @var string $componentPath */
/** @var string $componentName */
/** @var string $componentTemplate */
/** @global CDatabase $DB */
/** @global CUser $USER */
/** @global CMain $APPLICATION */
/** @global CCacheManager $CACHE_MANAGER */
/** @global CUserTypeManager $USER_FIELD_MANAGER */

global $CACHE_MANAGER, $USER_FIELD_MANAGER;

use Bitrix\Blog\Item\Permissions;
use Bitrix\Main\Page\Asset;
use Bitrix\Socialnetwork\Collab\Provider\CollabProvider;
use Bitrix\Socialnetwork\Collab\Url\UrlManager;
use Bitrix\Socialnetwork\Item\Helper;
use Bitrix\Socialnetwork\Livefeed;
use Bitrix\Main\ModuleManager;
use Bitrix\Socialnetwork\ComponentHelper;
use Bitrix\Main\Engine\ActionFilter\Service\Token;
use Bitrix\Socialnetwork\Integration\Extranet\User;

if (!CModule::IncludeModule("blog"))
{
	ShowError(GetMessage("BLOG_MODULE_NOT_INSTALL"));
	return;
}
if (!CModule::IncludeModule("socialnetwork"))
{
	return;
}

if (
	!isset($arParams["CHECK_PERMISSIONS_DEST"])
	|| $arParams["CHECK_PERMISSIONS_DEST"] == ''
)
{
	$arParams["CHECK_PERMISSIONS_DEST"] = "N";
}

$user_id = (int)$USER->getId();
$arResult['USER_ID'] = $user_id;
$arResult["TZ_OFFSET"] = CTimeZone::GetOffset();

$arParams["TYPE"] ??= null;
$arResult["bFromList"] = (($arParams["FROM_LOG"] ?? null) === "Y" || $arParams["TYPE"] === "DRAFT" || $arParams["TYPE"] === "MODERATION");
$arResult["contentViewIsSet"] = false;
$arResult["bIntranetInstalled"] = ModuleManager::isModuleInstalled("intranet");
$arResult["bExtranetInstalled"] = ($arResult["bIntranetInstalled"] && CModule::IncludeModule("extranet"));
$arResult["bExtranetSite"] = ($arResult["bExtranetInstalled"] && CExtranet::IsExtranetSite());
$arResult["bExtranetUser"] = ($arResult["bExtranetInstalled"] && !CExtranet::IsIntranetUser());
$arResult["ReadOnly"] = (
	(isset($arParams["GROUP_READ_ONLY"]) && $arParams["GROUP_READ_ONLY"] === "Y")
	|| (isset($arParams["MODE"]) && $arParams["MODE"] === "LANDING")
);

$folderUsers = COption::GetOptionString("socialnetwork", "user_page", false, SITE_ID);
$arParams["PATH_TO_LOG_TAG"] = $folderUsers."log/?TAG=#tag#";
if (
	defined('SITE_TEMPLATE_ID')
	&& (SITE_TEMPLATE_ID === 'bitrix24' || SITE_TEMPLATE_ID === 'air')
)
{
	$arParams["PATH_TO_LOG_TAG"] .= "&apply_filter=Y";
}

$arParams["GROUP_ID"] = $arParams["GROUP_ID"] ?? [];
if (!is_array($arParams["GROUP_ID"]))
{
	$arParams["GROUP_ID"] = array($arParams["GROUP_ID"]);
}

foreach($arParams["GROUP_ID"] as $k=>$v)
{
	if((int)$v <= 0)
	{
		unset($arParams["GROUP_ID"][$k]);
	}
}

if (empty($arParams["GROUP_ID"]))
{
	$tmpVal = COption::GetOptionString("socialnetwork", "sonet_blog_group", false, SITE_ID);
	if ($tmpVal)
	{
		$arTmpVal = unserialize($tmpVal, [ 'allowed_classes' => false ]);
		if (is_array($arTmpVal))
		{
			$arParams["GROUP_ID"] = $arTmpVal;
		}
		elseif((int)$tmpVal > 0)
		{
			$arParams["GROUP_ID"] = array($arTmpVal);
		}
	}
}

$arResult["bPublicPage"] = (isset($arParams["PUB"]) && $arParams["PUB"] === "Y");

if ($arResult["bExtranetUser"] && !$arResult["bPublicPage"])
{
	$arUserIdVisible = CExtranet::getMyGroupsUsersSimple(CExtranet::getExtranetSiteId());
}

$arParams['FORM_ID'] = ($arParams['FORM_ID'] ?? '');

$arResult["bTasksInstalled"] = CModule::IncludeModule("tasks");
$arResult["bTasksAvailable"] = (
	!$arResult["bPublicPage"]
	&& $arResult["bTasksInstalled"]
	&& (
		!CModule::IncludeModule('bitrix24')
		|| CBitrix24BusinessTools::isToolAvailable($arResult['USER_ID'], "tasks")
	)
	&& \Bitrix\Tasks\Access\TaskAccessController::can($arResult['USER_ID'], \Bitrix\Tasks\Access\ActionDictionary::ACTION_TASK_CREATE)
);

if (!$arResult["bPublicPage"])
{
	$arParams["BLOG_VAR"] = $arParams["BLOG_VAR"] ?? '';
	$arParams["PAGE_VAR"] = $arParams["PAGE_VAR"] ?? '';
	$arParams["USER_VAR"] = $arParams["USER_VAR"] ?? '';
	$arParams["POST_VAR"] = $arParams["POST_VAR"] ?? '';

	if ($arParams["BLOG_VAR"] == '')
	{
		$arParams["BLOG_VAR"] = "blog";
	}
	if ($arParams["PAGE_VAR"] == '')
	{
		$arParams["PAGE_VAR"] = "page";
	}
	if ($arParams["USER_VAR"] == '')
	{
		$arParams["USER_VAR"] = "id";
	}
	if ($arParams["POST_VAR"] == '')
	{
		$arParams["POST_VAR"] = "id";
	}

	$applicationCurPage = $APPLICATION->GetCurPage();

	$arParams["PATH_TO_BLOG"] = trim($arParams["PATH_TO_BLOG"] ?? '');
	if ($arParams["PATH_TO_BLOG"] == '')
	{
		$arParams["PATH_TO_BLOG"] = htmlspecialcharsbx($applicationCurPage."?".$arParams["PAGE_VAR"]."=blog&".$arParams["BLOG_VAR"]."=#blog#");
	}

	$arParams["PATH_TO_POST_IMPORTANT"] = trim($arParams["PATH_TO_POST_IMPORTANT"] ?? '');
	if ($arParams["PATH_TO_POST_IMPORTANT"] == '')
	{
		$arParams["PATH_TO_POST_IMPORTANT"] = "/company/personal/user/#user_id#/blog/important/";
	}

	$arParams["PATH_TO_BLOG_CATEGORY"] = trim($arParams["PATH_TO_BLOG_CATEGORY"] ?? '');
	if ($arParams["PATH_TO_BLOG_CATEGORY"] == '')
	{
		$arParams["PATH_TO_BLOG_CATEGORY"] = htmlspecialcharsbx($applicationCurPage."?".$arParams["PAGE_VAR"]."=blog&".$arParams["BLOG_VAR"]."=#blog#"."&category=#category_id#");
	}

	$arParams["PATH_TO_POST_EDIT"] = trim($arParams["PATH_TO_POST_EDIT"] ?? '');
	if ($arParams["PATH_TO_POST_EDIT"] == '')
	{
		$arParams["PATH_TO_POST_EDIT"] = "/company/personal/user/#user_id#/blog/edit/#post_id#/";
	}

	$arParams["PATH_TO_USER"] = trim($arParams["PATH_TO_USER"] ?? '');
	if ($arParams["PATH_TO_USER"] == '')
	{
		$arParams["PATH_TO_USER"] = htmlspecialcharsbx($applicationCurPage."?".$arParams["PAGE_VAR"]."=user&".$arParams["USER_VAR"]."=#user_id#");
	}

	if (($arParams["PATH_TO_SEARCH_TAG"] ?? null) == '')
	{
		$arParams["PATH_TO_SEARCH_TAG"] = SITE_DIR."search/?tags=#tag#";
	}

	if (!isset($arParams["PATH_TO_CONPANY_DEPARTMENT"]) || $arParams["PATH_TO_CONPANY_DEPARTMENT"] == '')
	{
		$arParams["PATH_TO_CONPANY_DEPARTMENT"] = "/company/structure.php?set_filter_structure=Y&structure_UF_DEPARTMENT=#ID#";
	}
}

$arParams["PATH_TO_POST"] = trim($arParams["PATH_TO_POST"] ?? '');
if ($arParams["PATH_TO_POST"] == '')
{
	$arParams["PATH_TO_POST"] = "/company/personal/user/#user_id#/blog/#post_id#/";
}

$arParams["PATH_TO_SMILE"] = trim($arParams["PATH_TO_SMILE"] ?? '') == '' ? false : trim($arParams["PATH_TO_SMILE"]);

if (!isset($arParams["PATH_TO_MESSAGES_CHAT"]) || $arParams["PATH_TO_MESSAGES_CHAT"] == '')
	$arParams["PATH_TO_MESSAGES_CHAT"] = "/company/personal/messages/chat/#user_id#/";
if (!isset($arParams["PATH_TO_VIDEO_CALL"]) || $arParams["PATH_TO_VIDEO_CALL"] == '')
	$arParams["PATH_TO_VIDEO_CALL"] = "/company/personal/video/#user_id#/";

$arParams["CACHE_TIME"] = 3600*24*365;

if (trim($arParams["NAME_TEMPLATE"] ?? '') == '')
{
	$arParams["NAME_TEMPLATE"] = CSite::GetNameFormat();
}

$arParams['SHOW_LOGIN'] = $arParams['SHOW_LOGIN'] !== "N" ? "Y" : "N";
$arParams['DATE_TIME_FORMAT_S'] = $arParams['DATE_TIME_FORMAT'];

CSocNetLogComponent::processDateTimeFormatParams($arParams);

// activation rating
CRatingsComponentsMain::GetShowRating($arParams);
$arParams["USE_CUT"] = ($arParams["USE_CUT"] ?? null) === "Y" ? "Y" : "N";
$arParams["SEF"] = (isset($arParams["SEF"]) && $arParams["SEF"] === "N" ? "N" : "Y");

$arParams["IMAGE_MAX_WIDTH"] = (int)$arParams["IMAGE_MAX_WIDTH"];
$arParams["IMAGE_MAX_HEIGHT"] = (int)$arParams["IMAGE_MAX_HEIGHT"];
if ($arParams["IMAGE_MAX_WIDTH"] <= 0)
{
	$arParams["IMAGE_MAX_WIDTH"] = \Bitrix\Blog\Util::getImageMaxWidth();
}
if ($arParams["IMAGE_MAX_HEIGHT"] <= 0)
{
	$arParams["IMAGE_MAX_HEIGHT"] = \Bitrix\Blog\Util::getImageMaxHeight();
}

$arParams["ATTACHED_IMAGE_MAX_WIDTH_SMALL"] = $arParams["ATTACHED_IMAGE_MAX_WIDTH_SMALL"] ?? 0;
$arParams["ATTACHED_IMAGE_MAX_HEIGHT_SMALL"] = $arParams["ATTACHED_IMAGE_MAX_HEIGHT_SMALL"] ?? 0;
$arParams["ATTACHED_IMAGE_MAX_WIDTH_FULL"] = $arParams["ATTACHED_IMAGE_MAX_WIDTH_FULL"] ?? 0;
$arParams["ATTACHED_IMAGE_MAX_HEIGHT_FULL"] = $arParams["ATTACHED_IMAGE_MAX_HEIGHT_FULL"] ?? 0;

$arParams["ATTACHED_IMAGE_MAX_WIDTH_SMALL"] = ((int)$arParams["ATTACHED_IMAGE_MAX_WIDTH_SMALL"] > 0 ? (int)$arParams["ATTACHED_IMAGE_MAX_WIDTH_SMALL"] : 70);
$arParams["ATTACHED_IMAGE_MAX_HEIGHT_SMALL"] = ((int)$arParams["ATTACHED_IMAGE_MAX_HEIGHT_SMALL"] > 0 ? (int)$arParams["ATTACHED_IMAGE_MAX_HEIGHT_SMALL"] : 70);
$arParams["ATTACHED_IMAGE_MAX_WIDTH_FULL"] = ((int)$arParams["ATTACHED_IMAGE_MAX_WIDTH_FULL"] > 0 ? (int)$arParams["ATTACHED_IMAGE_MAX_WIDTH_FULL"] : 1000);
$arParams["ATTACHED_IMAGE_MAX_HEIGHT_FULL"] = ((int)$arParams["ATTACHED_IMAGE_MAX_HEIGHT_FULL"] > 0 ? (int)$arParams["ATTACHED_IMAGE_MAX_HEIGHT_FULL"] : 1000);

$arParams["AVATAR_SIZE_COMMON"] = (isset($arParams["AVATAR_SIZE_COMMON"]) && (int)$arParams["AVATAR_SIZE_COMMON"] > 0) ? (int)$arParams["AVATAR_SIZE_COMMON"] : 100;
$arParams["AVATAR_SIZE"] = (isset($arParams["AVATAR_SIZE"]) && (int)$arParams["AVATAR_SIZE"] > 0) ? (int)$arParams["AVATAR_SIZE"] : 100;
$arParams["AVATAR_SIZE_COMMENT"] = (isset($arParams["AVATAR_SIZE_COMMENT"]) && (int)$arParams["AVATAR_SIZE_COMMENT"] > 0) ? (int)$arParams["AVATAR_SIZE_COMMENT"] : 100;

$arParams["ALLOW_POST_CODE"] = $arParams["ALLOW_POST_CODE"] !== "N";
$arParams["CHECK_COMMENTS_PERMS"] = (isset($arParams["CHECK_COMMENTS_PERMS"]) && $arParams["CHECK_COMMENTS_PERMS"] === "Y" ? "Y" : "N");

if(empty($arParams["POST_PROPERTY"]))
{
	$arParams["POST_PROPERTY"] = array();
}

$arParams["POST_PROPERTY_SOURCE"] = $arParams["POST_PROPERTY"];

$arParams["POST_PROPERTY"][] = "UF_BLOG_POST_DOC";
$arParams["POST_PROPERTY"][] = "UF_BLOG_POST_IMPRTNT";
if (
	CModule::IncludeModule("webdav")
	|| CModule::IncludeModule("disk")
)
{
	$arParams["POST_PROPERTY"][] = "UF_BLOG_POST_FILE";
	$arParams["POST_PROPERTY"][] = "UF_BLOG_POST_D_FILE";
}
if(IsModuleInstalled("vote"))
{
	$arParams["POST_PROPERTY"][] = "UF_BLOG_POST_VOTE";
}
if($arResult["bIntranetInstalled"])
{
	$arParams["POST_PROPERTY"][] = "UF_GRATITUDE";
}
$arParams["POST_PROPERTY"][] = "UF_BLOG_POST_URL_PRV";

if (
	!array_key_exists("GET_FOLLOW", $arParams)
	|| $arParams["GET_FOLLOW"] == ''
	|| (defined("DisableSonetLogFollow") && DisableSonetLogFollow === true)
)
{
	$arParams["GET_FOLLOW"] = "N";
}

if (\Bitrix\Main\Loader::includeModule('mail'))
{
	$arParams['POST_PROPERTY'][] = 'UF_MAIL_MESSAGE';
}

$arResult["ALLOW_EMAIL_INVITATION"] = (
	IsModuleInstalled('mail')
	&& $arResult["bIntranetInstalled"]
	&& (
		!\Bitrix\Main\Loader::includeModule('bitrix24')
		|| CBitrix24::isEmailConfirmed()
	)
);

$arBlog = [];

if (
	!$arResult["bFromList"]
	&& !$arResult["bPublicPage"]
)
{
	$arParams["USE_CUT"] = "N";

	$arBlog = \Bitrix\Blog\Item\Blog::getByUser(array(
		"GROUP_ID" => $arParams["GROUP_ID"],
		"SITE_ID" => SITE_ID,
		"USER_ID" => $arParams["USER_ID"],
		"USE_SOCNET" => "Y"
	));

	if (empty($arBlog))
	{
		if (empty($arParams["GROUP_ID"]))
		{
			$blogGroupId = \Bitrix\Main\Config\Option::get(
				'socialnetwork',
				'userbloggroup_id',
				false,
				SITE_ID
			);
			if (empty($blogGroupId))
			{
				$blogGroupIdList = ComponentHelper::getSonetBlogGroupIdList([
					'SITE_ID' => SITE_ID
				]);
				if (!empty($blogGroupIdList))
				{
					$blogGroupId = array_shift($blogGroupIdList);
				}
			}
		}
		else
		{
			$blogGroupId = (
			(is_array($arParams['GROUP_ID']))
				? (int) $arParams['GROUP_ID'][0]
				: (int) $arParams['GROUP_ID']
			);
		}

		$arBlog = ComponentHelper::createUserBlog(array(
			'BLOG_GROUP_ID' => $blogGroupId,
			"USER_ID" => $arParams["USER_ID"],
			"SITE_ID" => SITE_ID,
			"PATH_TO_BLOG" => $arParams["PATH_TO_BLOG"]
		));
	}

	$arResult["Blog"] = $arBlog;

	if($USER->IsAuthorized())
	{
		CSocNetTools::InitGlobalExtranetArrays();
		if (isset($GLOBALS["arExtranetGroupID"]))
		{
			$arResult["arExtranetGroupID"] = $GLOBALS["arExtranetGroupID"];
		}
	}
}

$arParams["ID"] = trim($arParams["ID"]);
if(preg_match("/^[1-9][0-9]*\$/", $arParams["ID"]))
{
	$arParams["ID"] = (int)$arParams["ID"];
}
else
{
	$arParams["ID"] = preg_replace("/[^a-zA-Z0-9_-]/is", "", Trim($arParams["~ID"]));
	$arParams["ID"] = CBlogPost::GetID($arParams["ID"], $arBlog["ID"]);
}

if (
	$arParams["ID"] == ""
	&& !$arResult["bFromList"]
)
{
	ShowError(GetMessage("B_B_MES_NO_POST"));
	@define("ERROR_404", "Y");
	CHTTP::SetStatus("404 Not Found");
	return;
}

$arPost = array();
$cacheTtl = 2592000;
$cacheId = 'blog_post_socnet_general_'.$arParams["ID"].'_'.LANGUAGE_ID.($arResult["TZ_OFFSET"] <> 0 ? "_".$arResult["TZ_OFFSET"] : "")."_".Bitrix\Main\Context::getCurrent()->getCulture()->getDateTimeFormat();
$cacheDir = ComponentHelper::getBlogPostCacheDir(array(
	'TYPE' => 'post_general',
	'POST_ID' => $arParams["ID"]
));

$obCache = new CPHPCache;
if($obCache->InitCache($cacheTtl, $cacheId, $cacheDir))
{
	$arPost = $obCache->GetVars();
	$postItem = new \Bitrix\Blog\Item\Post;
	$postItem->setFields($arPost);
}

if (empty($arPost["ID"]))
{
	$obCache->StartDataCache();
	$postItem = \Bitrix\Blog\Item\Post::getById($arParams["ID"]);
	$arPost = $postItem->getFields();
	$obCache->EndDataCache($arPost);
}

if (
	!empty($arPost)
	&& $arPost["PUBLISH_STATUS"] != BLOG_PUBLISH_STATUS_PUBLISH
	&& !in_array($arParams["TYPE"], array("DRAFT", "MODERATION"))
)
{
	unset($arPost);
}

$a = new CAccess;
$a->UpdateCodes();

if(
	(
		!empty($arBlog)
		&& $arBlog["ACTIVE"] === "Y"
	)
	|| $arResult["bFromList"]
	|| $arResult["bPublicPage"]
)
{
	if(!empty($arPost))
	{
		$bNoLogEntry = false;

		$fetchLogEntryNeeded = false;
		if (
			$arParams['GET_FOLLOW'] === 'Y'
			&& (
				!array_key_exists('FOLLOW', $arParams)
				|| $arParams['FOLLOW'] == ''
			)
		)
		{
			$fetchLogEntryNeeded = true;
		}

		if (
			$USER->isAuthorized()
			&& (
				!array_key_exists('PINNED', $arParams)
				|| $arParams['PINNED'] == ''
			)
		)
		{
			$fetchLogEntryNeeded = true;
		}

		if (
			!$fetchLogEntryNeeded
			&& (int)$arParams['LOG_ID'] <= 0
		)
		{
			$fetchLogEntryNeeded = true;
		}

		if (
			!$fetchLogEntryNeeded
			&& $arResult['bPublicPage']
		)
		{
			$fetchLogEntryNeeded = true;
		}

		if (
			$fetchLogEntryNeeded
			&& CModule::IncludeModule("socialnetwork")
		)
		{
			$blogPostLivefeedProvider = new \Bitrix\Socialnetwork\Livefeed\BlogPost;

			$arFilter = array(
				"EVENT_ID" => $blogPostLivefeedProvider->getEventId(),
				"SOURCE_ID" => $arParams["ID"],
			);

			if (CModule::IncludeModule('extranet') && CExtranet::IsExtranetSite())
			{
				$arFilter["SITE_ID"] = SITE_ID;
			}
			elseif (!$arResult["bPublicPage"])
			{
				$arFilter["SITE_ID"] = array(SITE_ID, false);
			}

			$listParams = [];
			$listSelect = [ 'ID', 'FAVORITES_USER_ID' ];
			if ($arParams['GET_FOLLOW'] === 'Y')
			{
				$listParams['USE_FOLLOW'] = 'Y';
				$listSelect[] = 'FOLLOW';
			}
			if ($USER->isAuthorized())
			{
				$listParams['USE_PINNED'] = 'Y';
				$listSelect[] = 'PINNED_USER_ID';
			}

			$rsLogSrc = CSocNetLog::GetList(
				array(),
				$arFilter,
				false,
				false,
				$listSelect,
				$listParams
			);

			if ($arLogSrc = $rsLogSrc->Fetch())
			{
				$arParams["LOG_ID"] = $arLogSrc["ID"];
				$arParams["FAVORITES_USER_ID"] = $arLogSrc["FAVORITES_USER_ID"];
				if ($arParams["GET_FOLLOW"] === "Y")
				{
					$arParams["FOLLOW"] = $arLogSrc["FOLLOW"];
				}
				if ($USER->isAuthorized())
				{
					$arParams['PINNED'] = ($arLogSrc['PINNED_USER_ID'] ? 'Y' : 'N');
				}
			}
			elseif (!$arResult["bFromList"])
			{
				$bNoLogEntry = true;
			}
		}

		$arPost = CBlogTools::htmlspecialcharsExArray($arPost);

		if($arPost["AUTHOR_ID"] == $user_id)
		{
			$arResult["PostPerm"] = Permissions::FULL;
		}
		elseif ($arResult["bFromList"])
		{
			$arResult["PostPerm"] = Permissions::READ;
			if (
				CSocNetUser::IsCurrentUserModuleAdmin(SITE_ID, (!isset($arParams["MOBILE"]) || $arParams["MOBILE"] !== "Y"))
				|| CMain::GetGroupRight("blog") >= "W"
			)
			{
				$arResult["PostPerm"] = Permissions::FULL;
			}
		}
		else
		{
			if ($bNoLogEntry)
			{
				$arResult["PostPerm"] = Permissions::DENY;
			}
			elseif (
				CSocNetUser::IsCurrentUserModuleAdmin(SITE_ID, (!isset($arParams["MOBILE"]) || $arParams["MOBILE"] !== "Y"))
				|| CMain::GetGroupRight("blog") >= "W"
			)
			{
				$arResult["PostPerm"] = Permissions::FULL;
			}
			else
			{
				$permsResult = $postItem->getSonetPerms([
					"PUBLIC" => $arResult["bPublicPage"],
					"CHECK_FULL_PERMS" => true,
					"LOG_ID" => (isset($arParams["LOG_ID"]) ? $arParams["LOG_ID"] : false),
				]);
				$arResult["PostPerm"] = $permsResult['PERM'];
			}
		}

		$arPost["perms"] = $arResult["PostPerm"];

		$arResult["Post"] = $arPost;
		$arResult["Post"]["SPERM"] = [];
		$arResult["PostSrc"] = $arPost;
		$arResult["Blog"] = $arBlog;
		$arResult["PostSrc"]["PATH_TO_CONPANY_DEPARTMENT"] = $arParams["PATH_TO_CONPANY_DEPARTMENT"];
		$arResult["PostSrc"]["PATH_TO_GROUP"] = $arParams["PATH_TO_GROUP"];
		$arResult["PostSrc"]["bExtranetSite"] = $arResult["bExtranetSite"];

		$arResult["urlToPost"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_POST"], array("post_id"=>CBlogPost::GetPostID($arResult["Post"]["ID"], $arResult["Post"]["CODE"], $arParams["ALLOW_POST_CODE"]), "user_id" => $arPost["AUTHOR_ID"]));
		$arResult["urlToPostPub"] = (isset($arParams["POST_DATA"]["urlToPub"]) && is_array($arParams["POST_DATA"]) ? $arParams["POST_DATA"]["urlToPub"] : '');

		if (
			!$arResult["bPublicPage"]
			&& is_set($arParams["PATH_TO_GROUP"])
		)
		{
			$strSiteWorkgroupsPage = COption::GetOptionString("socialnetwork", "workgroups_page", SITE_DIR."workgroups/", SITE_ID);
			if (
				($strSiteWorkgroupsPage <> '')
				&& mb_strpos($arParams["PATH_TO_GROUP"], $strSiteWorkgroupsPage) === 0
			)
			{
				$arParams["PATH_TO_GROUP"] = "#GROUPS_PATH#".mb_substr($arParams["PATH_TO_GROUP"], mb_strlen($strSiteWorkgroupsPage), mb_strlen($arParams["PATH_TO_GROUP"]) - mb_strlen($strSiteWorkgroupsPage));
			}
		}

		if (
			isset($_GET["delete"])
			&& $_GET["delete"] === "Y"
			&& !$arResult["bFromList"]
			&& !$arResult["bPublicPage"]
		)
		{
			if (check_bitrix_sessid())
			{
				try
				{
					Helper::deleteBlogPost([
						'POST_ID' => $arParams['ID'],
					]);
					$url = CComponentEngine::makePathFromTemplate($arParams['PATH_TO_BLOG'], [
						'blog' => $arBlog['URL'],
						'user_id' => $arBlog['OWNER_ID'],
						'group_id' => $arBlog['SOCNET_GROUP_ID']
					]);
					$url .= (mb_strpos($url, '?') === false ? '?' : '&') . 'del_id=' . $arParams['ID'] . '&success=Y';
					LocalRedirect($url);
				}
				catch (Exception $e)
				{
					$arResult["ERROR_MESSAGE"] .= $e->getMessage().'<br />';
				}
			}
			else
			{
				$arResult["ERROR_MESSAGE"] .= GetMessage("BLOG_BLOG_SESSID_WRONG").'<br />';
			}
		}

		if (
			isset($_GET["hide"])
			&& $_GET["hide"] === "Y"
			&& !$arResult["bFromList"]
			&& !$arResult["bPublicPage"]
		)
		{
			if (check_bitrix_sessid())
			{
				if ($arResult["PostPerm"] >= Permissions::MODERATE)
				{
					if(CBlogPost::Update($arParams["ID"], Array("PUBLISH_STATUS" => BLOG_PUBLISH_STATUS_READY)))
					{
						BXClearCache(True, ComponentHelper::getBlogPostCacheDir(array(
							'TYPE' => 'posts_popular',
							'SITE_ID' => SITE_ID
						)));
						BXClearCache(true, ComponentHelper::getBlogPostCacheDir(array(
							'TYPE' => 'post',
							'POST_ID' => $arParams["ID"]
						)));
						BXClearCache(true, ComponentHelper::getBlogPostCacheDir(array(
							'TYPE' => 'post_general',
							'POST_ID' => $arParams["ID"]
						)));
						if ($postItem = \Bitrix\Blog\Item\Post::getById($arParams["ID"]))
						{
							$postItem->deactivateLogEntry();
						}

						$url = (
							isset($_REQUEST["SONET_GROUP_ID"])
							&& (int)$_REQUEST["SONET_GROUP_ID"] > 0
							&& !empty($arParams["PATH_TO_GROUP_BLOG"])
								? CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_GROUP_BLOG"], array("group_id" => (int)$_REQUEST["SONET_GROUP_ID"]))
								: CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_BLOG"], array("user_id" => $arBlog["OWNER_ID"]))
						);

						if(mb_strpos($url, "?") === false)
						{
							$url .= "?";
						}
						else
						{
							$url .= "&";
						}
						$url .= "hide_id=".$arParams["ID"]."&success=Y";

						LocalRedirect($url);
					}
					else
					{
						$arResult["ERROR_MESSAGE"] .= GetMessage("BLOG_BLOG_BLOG_MES_HIDE_ERROR").'<br />';
					}
				}
				else
				{
					$arResult["ERROR_MESSAGE"] .= GetMessage("BLOG_BLOG_BLOG_MES_HIDE_NO_RIGHTS").'<br />';
				}
			}
			else
			{
				$arResult["ERROR_MESSAGE"] .= GetMessage("BLOG_BLOG_SESSID_WRONG").'<br />';
			}
		}

		if ($arResult["PostPerm"] > Permissions::DENY)
		{
			if (
				!$arResult["bFromList"]
				&& $_SERVER["REQUEST_METHOD"] !== "POST"
			)
			{
				if ($liveFeedEntity = Livefeed\BlogPost::init(array(
					'ENTITY_TYPE' => Livefeed\Provider::DATA_ENTITY_TYPE_BLOG_POST,
					'ENTITY_ID' => $arPost["ID"],
					'LOG_ID' => (isset($arParams["LOG_ID"]) ? (int)$arParams["LOG_ID"] : false)
				)))
				{
					$arResult['contentViewIsSet'] = true;
					$liveFeedEntity->setContentView();
				}
			}

			/* share */
			if(
				$_SERVER["REQUEST_METHOD"] === "POST"
				&& ($_POST["act"] ?? '') === "share"
				&& check_bitrix_sessid()
				&& $USER->IsAuthorized()
			)
			{
				$APPLICATION->RestartBuffer();

				$perms2update = array();
				$spermOld = CBlogPost::getSocNetPerms($arParams["ID"]);
				foreach($spermOld as $type => $val)
				{
					foreach($val as $id => $values)
					{
						if($type !== "U")
						{
							$perms2update[] = $type.$id;
						}
						else
						{
							$perms2update[] = (
								in_array("US".$id, $values)
									? "UA"
									: $type.$id
							);
						}
					}
				}

				$arNewRights = array();

				$this->convertRequestData();

				$spermNew = $_POST["SPERM"];
				$tmp = $_POST;
				$tmp['SPERM'] = $spermNew;
				ComponentHelper::processBlogPostNewMailUser($tmp, $arResult);
				$spermNew = $tmp['SPERM'];

				$bCurrentUserAdmin = CSocNetUser::IsCurrentUserModuleAdmin();
				$canPublish = true;

				foreach($spermNew as $type => $val)
				{
					foreach($val as $id => $code)
					{
						if(in_array($type, array("U", "SG", "DR", "CRMCONTACT")))
						{
							if(!in_array($code, $perms2update))
							{
								if ($type === 'SG')
								{
									$oGrId = (int)str_replace("SG", "", $code);

									$canPublish = (
										$bCurrentUserAdmin
										|| CSocNetFeaturesPerms::CanPerformOperation($user_id, SONET_ENTITY_GROUP, $oGrId, "blog", "write_post")
										|| CSocNetFeaturesPerms::CanPerformOperation($user_id, SONET_ENTITY_GROUP, $oGrId, "blog", "moderate_post")
										|| CSocNetFeaturesPerms::CanPerformOperation($user_id, SONET_ENTITY_GROUP, $oGrId, "blog", "full_post")
									);

									if (!$canPublish)
									{
										break;
									}
								}

								$perms2update[] = $code;
								$arNewRights[] = $code;
							}
						}
						elseif($type === "UA")
						{
							if(!in_array("UA", $perms2update))
							{
								$perms2update[] = "UA";
								$arNewRights[] = "UA";
							}
						}
					}

					if (!$canPublish)
					{
						break;
					}
				}

				if (
					!empty($arNewRights)
					&& $canPublish
				)
				{
					ComponentHelper::processBlogPostShare(
						array(
							"POST_ID" => $arParams["ID"],
							"BLOG_ID" => $arPost["BLOG_ID"],
							"SITE_ID" => SITE_ID,
							"SONET_RIGHTS" => $perms2update,
							"NEW_RIGHTS" => $arNewRights,
							"USER_ID" => $user_id
						),
						array_merge($arParams, array(
							"CAN_USER_COMMENT" => (!$arResult["ReadOnly"] ? 'Y' : 'N')
						))
					);
				}
				elseif (!$canPublish)
				{
					$response = array(
						'errorMessage' => GetMessage('SBP_SHARE_PREMODERATION'),
						'status' => "error",
					);
					$APPLICATION->restartBuffer();
					while (ob_end_clean()) {}
					header('Content-Type:application/json; charset=UTF-8');
					?><?= \Bitrix\Main\Web\Json::encode($response) ?><?php
					CMain::finalActions();
					die;
				}

				die();
			}
			/* end share */
			if (!$arResult["bFromList"])
			{
				if ($arPost["MICRO"] !== "Y")
				{
					$strTitle = $arPost["TITLE"];
				}
				else
				{
					$strTitle = $arPost["DETAIL_TEXT"];
					$strTitle = preg_replace("/\\[(\\/?)(url)(.*?)\\]/isu", "", $strTitle);
					$parser = new CTextParser();
					$parser->allow = array('CLEAR_SMILES' => 'Y', 'IMG' => 'Y');
					$strTitle = preg_replace("/&nbsp;/isu", "", $parser->convertText($strTitle));
					$strTitle = str_replace("<br />", " ", $strTitle);
					$strTitle = blogTextParser::killAllTags($strTitle);
					$strTitle = htmlspecialcharsback(TruncateText($strTitle, 100));
				}
				$APPLICATION->SetTitle($strTitle);
			}

			if ($arParams["SET_NAV_CHAIN"] === "Y")
			{
				$APPLICATION->AddChainItem($arBlog["NAME"], CComponentEngine::MakePathFromTemplate(htmlspecialcharsback($arParams["PATH_TO_BLOG"]), array("blog" => $arBlog["URL"], "user_id" => $arPost["AUTHOR_ID"], "group_id" => $arParams["SOCNET_GROUP_ID"])));
			}

			$cache = new CPHPCache;

			$arCacheID = array();
			$arKeys = array(
				"MOBILE",
				"USE_CUT",
				"PATH_TO_SMILE",
				"ATTACHED_IMAGE_MAX_WIDTH_SMALL",
				"ATTACHED_IMAGE_MAX_HEIGHT_SMALL",
				"ATTACHED_IMAGE_MAX_WIDTH_FULL",
				"ATTACHED_IMAGE_MAX_HEIGHT_FULL",
				"POST_PROPERTY",
				"PATH_TO_USER",
				"PATH_TO_POST",
				"PATH_TO_GROUP",
				"PATH_TO_SEARCH_TAG",
				"PATH_TO_LOG_TAG",
				"IMAGE_MAX_WIDTH",
				"IMAGE_MAX_HEIGHT",
				"DATE_TIME_FORMAT",
				"DATE_TIME_FORMAT_S",
				"ALLOW_POST_CODE",
				"AVATAR_SIZE_COMMENT",
				"NAME_TEMPLATE",
				"SHOW_LOGIN",
				"LAZYLOAD",
				"PUB"
			);
			foreach($arKeys as $param_key)
			{
				$arCacheID[$param_key] = (array_key_exists($param_key, $arParams) ? $arParams[$param_key] : false);
			}

			$cache_id = "blog_socnet_post_".md5(serialize($arCacheID))."_".LANGUAGE_ID."_".$arParams["DATE_TIME_FORMAT"];
			if ($arResult["TZ_OFFSET"] <> 0)
			{
				$cache_id .= "_".$arResult["TZ_OFFSET"];
			}

			if (
				!empty($arParams["MOBILE"])
				&& $arParams["MOBILE"] === "Y"
				&& CModule::IncludeModule('mobile')
			)
			{
				$imageResizeWidth = CMobileHelper::getDeviceResizeWidth();
				if ($imageResizeWidth)
				{
					$cache_id .= "_".$imageResizeWidth;
				}
			}

			$cache_path = ComponentHelper::getBlogPostCacheDir(array(
				'TYPE' => 'post',
				'POST_ID' => $arPost["ID"]
			));

			$isInitCache = (
				$arParams["CACHE_TIME"] > 0
				&& $cache->InitCache($arParams["CACHE_TIME"], $cache_id, $cache_path)
			);
			$Vars = [];
			if ($isInitCache)
			{
				$Vars = $cache->GetVars();
			}

			if ($Vars && !empty($Vars["Post"]["ID"]))
			{
				$arResult["POST_PROPERTY"] = $Vars["POST_PROPERTY"] ?? [];
				$arResult["Post"] = $Vars["Post"];
				$arResult["images"] = $Vars["images"];
				$arResult["Category"] = $Vars["Category"];
				$arResult["GRATITUDE"] = $Vars["GRATITUDE"];
				$arResult["URL_PREVIEW"] = ($Vars["URL_PREVIEW"] ?? '');
				$arResult["POST_PROPERTIES"] = $Vars["POST_PROPERTIES"];
				$arResult["arUser"] = $Vars["arUser"];
				$arResult["Assets"] = ($Vars["Assets"] ?? []);

				if (!empty($arResult["Assets"]))
				{
					if (!empty($arResult["Assets"]["CSS"]))
					{
						foreach($arResult["Assets"]["CSS"] as $cssFile)
						{
							Asset::getInstance()->addCss($cssFile);
						}
					}

					if (!empty($arResult["Assets"]["JS"]))
					{
						foreach($arResult["Assets"]["JS"] as $jsFile)
						{
							Asset::getInstance()->addJs($jsFile);
						}
					}
				}
				$cache->Output();
			}
			else
			{
				$arResult["Post"]["hasVideoInline"] = false;
				$arResult["Assets"] = array(
					"CSS" => array(),
					"JS" => array()
				);

				if ($arParams["CACHE_TIME"] > 0)
				{
					$cache->StartDataCache($arParams["CACHE_TIME"], $cache_id, $cache_path);
					if (defined("BX_COMP_MANAGED_CACHE"))
					{
						$CACHE_MANAGER->StartTagCache($cache_path);
						$CACHE_MANAGER->RegisterTag("USER_NAME_".(int)$arPost["AUTHOR_ID"]);
					}
				}

				$p = new blogTextParser(false, $arParams["PATH_TO_SMILE"], array("bPublic" => $arResult["bPublicPage"]));
				$p->bMobile = (isset($arParams["MOBILE"]) && $arParams["MOBILE"] === "Y");

				$arResult["POST_PROPERTIES"] = array("SHOW" => "N");

				$bHasImg = false;
				$bHasTag = false;
				$bHasProps = false;
				$bHasOnlyAll = false;

				if (!empty($arParams["POST_PROPERTY"]))
				{
					if($arPost["HAS_PROPS"] !== "N")
					{
						$arPostFields = $USER_FIELD_MANAGER->GetUserFields("BLOG_POST", $arPost["ID"], LANGUAGE_ID);

						if (count($arParams["POST_PROPERTY"]) > 0)
						{
							foreach ($arPostFields as $FIELD_NAME => $arPostField)
							{
								if (!in_array($FIELD_NAME, $arParams["POST_PROPERTY"]))
								{
									continue;
								}

								if(
									$FIELD_NAME === "UF_GRATITUDE"
									&& array_key_exists("VALUE", $arPostField)
									&& (int)$arPostField["VALUE"] > 0
								)
								{
									$bHasProps = true;
									$gratValue = $arPostField["VALUE"];

									if (CModule::IncludeModule("iblock"))
									{
										if (
											!is_array($GLOBALS["CACHE_HONOUR"])
											|| !array_key_exists("honour_iblock_id", $GLOBALS["CACHE_HONOUR"])
											|| (int)$GLOBALS["CACHE_HONOUR"]["honour_iblock_id"] <= 0
										)
										{
											$rsIBlock = CIBlock::GetList(array(), array("=CODE" => "honour", "=TYPE" => "structure"));
											if ($arIBlock = $rsIBlock->Fetch())
											{
												$GLOBALS["CACHE_HONOUR"]["honour_iblock_id"] = $arIBlock["ID"];
											}
										}

										if ((int)$GLOBALS["CACHE_HONOUR"]["honour_iblock_id"] > 0)
										{
											$arGrat = array(
												"USERS" => array(),
												"USERS_FULL" => array(),
												"TYPE" => false
											);
											$rsElementProperty = CIBlockElement::GetProperty(
												$GLOBALS["CACHE_HONOUR"]["honour_iblock_id"],
												$gratValue
											);
											while ($arElementProperty = $rsElementProperty->GetNext())
											{
												if (
													$arElementProperty["CODE"] === "USERS"
													&& (int)$arElementProperty["VALUE"] > 0
												)
												{
													$arGrat["USERS"][] = $arElementProperty["VALUE"];
												}
												elseif ($arElementProperty["CODE"] === "GRATITUDE")
												{
													$arGrat["TYPE"] = array(
														"VALUE_ENUM" => $arElementProperty["VALUE_ENUM"],
														"XML_ID" => $arElementProperty["VALUE_XML_ID"]
													);
												}
											}

											if (count($arGrat["USERS"]) > 0)
											{
												if (
													$arParams["CACHE_TIME"] > 0
													&& defined("BX_COMP_MANAGED_CACHE")
												)
												{
													foreach($arGrat["USERS"] as $i => $grat_user_id)
													{
														$CACHE_MANAGER->RegisterTag("USER_NAME_".(int)$grat_user_id);
													}
												}

												$arGratUsers = array();

												$rsUser = CUser::GetList(
													'',
													'',
													array(
														"ID" => implode("|", $arGrat["USERS"])
													),
													array(
														"FIELDS" => array(
															"ID",
															"PERSONAL_GENDER", "PERSONAL_PHOTO",
															"LOGIN", "NAME", "LAST_NAME", "SECOND_NAME", "EMAIL",
															"WORK_POSITION"
														)
													)
												);

												while ($arGratUser = $rsUser->Fetch())
												{
													$arGratUser["AVATAR_SRC"] = CSocNetLogTools::FormatEvent_CreateAvatar($arGratUser, array("AVATAR_SIZE" => (isset($arParams["AVATAR_SIZE_COMMON"]) ? $arParams["AVATAR_SIZE_COMMON"] : 58)), "");
													$arGratUser["AVATAR_SIZE"] = (($arParams["MOBILE"] ?? '') === "Y" ? 58 : (count($arGrat["USERS"]) <= 4 ? 50 : 26));
													$arGratUser["URL"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER"], array("user_id" => $arGratUser["ID"]));
													$arGratUsers[] = $arGratUser;
												}

												$arGrat["USERS_FULL"] = $arGratUsers;
											}
											if (count($arGrat["USERS_FULL"]) > 0)
											{
												$arResult["GRATITUDE"] = $arGrat;
											}
										}
									}
								}
								else
								{
									$arPostField["EDIT_FORM_LABEL"] = $arPostField["EDIT_FORM_LABEL"] <> '' ? $arPostField["EDIT_FORM_LABEL"] : $arPostField["FIELD_NAME"];
									$arPostField["EDIT_FORM_LABEL"] = htmlspecialcharsEx($arPostField["EDIT_FORM_LABEL"]);
									$arPostField["~EDIT_FORM_LABEL"] = $arPostField["EDIT_FORM_LABEL"];
									$arResult["POST_PROPERTIES"]["DATA"][$FIELD_NAME] = $arPostField;

									if (!empty($arPostField["VALUE"]))
									{
										$bHasProps = true;
									}
								}
							}
						}
						if (!empty($arResult["POST_PROPERTIES"]["DATA"]))
						{
							$arResult["POST_PROPERTIES"]["SHOW"] = "Y";
						}
					}
				}

				$arImages = [];
				if($arPost["HAS_IMAGES"] !== "N")
				{
					$res = CBlogImage::GetList(array("ID"=>"ASC"),array("POST_ID"=>$arPost['ID'], "IS_COMMENT" => "N"));
					while ($arImage = $res->Fetch())
					{
						$bHasImg = true;
						$arImages[$arImage['ID']] = $arImage['FILE_ID'];

						$resizedImageData = CFile::ResizeImageGet(
							$arImage['FILE_ID'],
							[
								'width' => $arParams['ATTACHED_IMAGE_MAX_WIDTH_SMALL'],
								'height' => $arParams['ATTACHED_IMAGE_MAX_HEIGHT_SMALL'],
							],
							BX_RESIZE_IMAGE_EXACT,
							true
						);

						$resizedWidth = (int)$resizedImageData['width'];
						$resizedHeight = (int)$resizedImageData['height'];

						if (
							(int)$resizedImageData['width'] > $arParams['ATTACHED_IMAGE_MAX_WIDTH_SMALL']
							|| (int)$resizedImageData['height'] > $arParams['ATTACHED_IMAGE_MAX_HEIGHT_SMALL']
						)
						{
							if ((int)$resizedImageData['width'] > (int)$resizedImageData['height'])
							{
								$coeff = $resizedImageData['width'] / $arParams['ATTACHED_IMAGE_MAX_WIDTH_SMALL'];
								$resizedWidth = $arParams['ATTACHED_IMAGE_MAX_WIDTH_SMALL'];
								$resizedHeight = ($resizedImageData['height'] / $coeff);
							}
							else
							{
								$coeff = $resizedImageData['height'] / $arParams['ATTACHED_IMAGE_MAX_HEIGHT_SMALL'];
								$resizedHeight = $arParams['ATTACHED_IMAGE_MAX_HEIGHT_SMALL'];
								$resizedWidth = (int)($resizedImageData['width'] / $coeff);
							}
						}

						$arResult['images'][$arImage['ID']] = [
							'small' => '/bitrix/components/bitrix/blog/show_file.php?fid=' . $arImage['ID'] . '&width=' . $arParams['ATTACHED_IMAGE_MAX_WIDTH_SMALL'] . '&height=' . $arParams['ATTACHED_IMAGE_MAX_HEIGHT_SMALL'] . '&type=square',
							'full' => '/bitrix/components/bitrix/blog/show_file.php?fid=' . $arImage['ID'] . '&width=' . $arParams['ATTACHED_IMAGE_MAX_WIDTH_FULL'] . '&height=' . $arParams['ATTACHED_IMAGE_MAX_HEIGHT_FULL'],
							'resizedWidth' => $resizedWidth,
							'resizedHeight' => $resizedHeight,
						];
					}
				}

				$arParserParams = Array(
					"imageWidth" => $arParams["IMAGE_MAX_WIDTH"],
					"imageHeight" => $arParams["IMAGE_MAX_HEIGHT"],
					"pathToUser" => $arParams["PATH_TO_USER"],
					"ATTRIBUTES" => $arParams["ATTRIBUTES"] ?? null,
				);

				if ($p->bMobile)
				{
					$arParserParams["imageWidth"] = 275;
					$arParserParams["imageHeight"] = 416;
				}

				if (!empty($arParams["LOG_ID"]))
				{
					$arParserParams["pathToUserEntityType"] = 'LOG_ENTRY';
					$arParserParams["pathToUserEntityId"] = (int)$arParams["LOG_ID"];
				}

				$arAllow = array(
					"HTML" => "N",
					"ANCHOR" => "Y",
					"BIU" => "Y",
					"IMG" => "Y",
					"QUOTE" => "Y",
					"CODE" => "Y",
					"FONT" => "Y",
					"LIST" => "Y",
					"SMILES" => "Y",
					"NL2BR" => "N",
					"VIDEO" => "Y",
					"USER" => "Y",
					"TAG" => "Y",
					"SHORT_ANCHOR" => "Y"
				);
				if(COption::GetOptionString("blog","allow_video", "Y") !== "Y")
				{
					$arAllow["VIDEO"] = "N";
				}

				$arResult["Post"]["hasInlineDiskFile"] = false;

				if (
					isset($arResult["POST_PROPERTIES"]["DATA"])
					&& is_array($arResult["POST_PROPERTIES"]["DATA"]["UF_BLOG_POST_FILE"])
				)
				{
					$p->arUserfields = array("UF_BLOG_POST_FILE" => array_merge($arResult["POST_PROPERTIES"]["DATA"]["UF_BLOG_POST_FILE"], array("TAG" => "DOCUMENT ID")));

					if (!empty($arResult['POST_PROPERTIES']['DATA']['UF_BLOG_POST_FILE']['VALUE']))
					{
						$arResult["Post"]["hasInlineDiskFile"] = ComponentHelper::hasTextInlineImage((string)$arPost["~DETAIL_TEXT"], $arResult['POST_PROPERTIES']['DATA']['UF_BLOG_POST_FILE']);
					}
				}

				$p->LAZYLOAD = (isset($arParams["LAZYLOAD"]) && $arParams["LAZYLOAD"] === "Y" ? "Y" : "N");

				$detailText = (!empty($arPost['BACKGROUND_CODE']) ? $this->clearTextForColoredPost($arPost['~DETAIL_TEXT']) : $arPost['~DETAIL_TEXT']);
				$arResult['Post']['textFormated'] = $p->convert(
					$detailText,
					($arParams['USE_CUT'] === 'Y'),
					$arImages,
					$arAllow,
					$arParserParams
				);

				if ($arAllow["VIDEO"] === "Y")
				{
					$arResult["Post"]["hasVideoInline"] = preg_match(
						"/<video([^>]*)>(.+?)<\\/video[\\s]*>/isu",
						$arResult["Post"]["textFormated"]
					);
				}

				if (
					isset($arResult["POST_PROPERTIES"]["DATA"])
					&& is_array($arResult["POST_PROPERTIES"]["DATA"]["UF_BLOG_POST_FILE"])
					&& is_array($arResult["POST_PROPERTIES"]["DATA"]["UF_BLOG_POST_FILE"]["VALUE"])
				)
				{
					$arResult["POST_PROPERTIES"]["DATA"]["UF_BLOG_POST_FILE"]["SOURCE_VALUE"] = $arResult["POST_PROPERTIES"]["DATA"]["UF_BLOG_POST_FILE"]["VALUE"];
				}

				if (
					$arParams["USE_CUT"] === "Y"
					&& preg_match("/(\[CUT\])/i", $arPost['~DETAIL_TEXT'])
				)
				{
					$arResult["Post"]["CUT"] = "Y";
				}

				if(!empty($p->showedImages) && !empty($arResult["images"]))
				{
					foreach($p->showedImages as $val)
					{
						if(!empty($arResult["images"][$val]))
						{
							unset($arResult["images"][$val]);
						}
					}
				}
				$arResult["Post"]["DATE_PUBLISH_FORMATED"] = FormatDateFromDB($arResult["Post"]["DATE_PUBLISH"], $arParams["DATE_TIME_FORMAT"], true);
				$arResult["Post"]["DATE_PUBLISH_DATE"] = FormatDateFromDB($arResult["Post"]["DATE_PUBLISH"], FORMAT_DATE);
				if (strcasecmp(LANGUAGE_ID, 'EN') !== 0 && strcasecmp(LANGUAGE_ID, 'DE') !== 0)
				{
					$arResult["Post"]["DATE_PUBLISH_FORMATED"] = mb_strtolower($arResult["Post"]["DATE_PUBLISH_FORMATED"]);
					$arResult["Post"]["DATE_PUBLISH_DATE"] = mb_strtolower($arResult["Post"]["DATE_PUBLISH_DATE"]);
				}
				// strip current year
				if (!empty($arParams['DATE_TIME_FORMAT_S']) && ($arParams['DATE_TIME_FORMAT_S'] === 'j F Y G:i' || $arParams['DATE_TIME_FORMAT_S'] === 'j F Y g:i a'))
				{
					$arResult["Post"]["DATE_PUBLISH_FORMATED"] = ltrim($arResult["Post"]["DATE_PUBLISH_FORMATED"], '0');
					$arResult["Post"]["DATE_PUBLISH_DATE"] = ltrim($arResult["Post"]["DATE_PUBLISH_DATE"], '0');
					$curYear = date('Y');
					$arResult["Post"]["DATE_PUBLISH_FORMATED"] = str_replace(array('-'.$curYear, '/'.$curYear, ' '.$curYear, '.'.$curYear), '', $arResult["Post"]["DATE_PUBLISH_FORMATED"]);
					$arResult["Post"]["DATE_PUBLISH_DATE"] = str_replace(array('-'.$curYear, '/'.$curYear, ' '.$curYear, '.'.$curYear), '', $arResult["Post"]["DATE_PUBLISH_DATE"]);
				}
				$arResult["Post"]["DATE_PUBLISH_TIME"] = FormatDateFromDB(
					$arResult["Post"]["DATE_PUBLISH"],
					(
						mb_strpos($arParams["DATE_TIME_FORMAT_S"] ?? '', 'a') !== false
						|| (
							$arParams["DATE_TIME_FORMAT_S"] === 'FULL'
							&& IsAmPmMode()
						) !== false
							? (mb_strpos(FORMAT_DATETIME, 'TT') !== false ? 'G:MI TT': 'G:MI T')
							: 'GG:MI'
					)
				);
				if (strcasecmp(LANGUAGE_ID, 'EN') !== 0 && strcasecmp(LANGUAGE_ID, 'DE') !== 0)
				{
					$arResult["Post"]["DATE_PUBLISH_TIME"] = mb_strtolower($arResult["Post"]["DATE_PUBLISH_TIME"]);
				}
				$arResult["arUser"] = CBlogUser::GetUserInfo($arPost["AUTHOR_ID"], $arParams["PATH_TO_USER"], array("AVATAR_SIZE" => (isset($arParams["AVATAR_SIZE_COMMON"]) ? $arParams["AVATAR_SIZE_COMMON"] : $arParams["AVATAR_SIZE"]), "AVATAR_SIZE_COMMENT" => $arParams["AVATAR_SIZE_COMMENT"]));
				$arResult["arUser"]["isExtranet"] = (
					(int) $arPost["AUTHOR_ID"] > 0
					&& is_array($GLOBALS["arExtranetUserID"] ?? null)
					&& in_array($arPost["AUTHOR_ID"], $GLOBALS["arExtranetUserID"])
				);

				$arResult["arUser"]["isCollaber"] = false;
				if ($arResult["arUser"]["isExtranet"])
				{
					$arResult["arUser"]["isCollaber"] = User::isCollaber((int)$arPost["AUTHOR_ID"]);
				}

				if (!$arResult["bPublicPage"])
				{
					$arResult["arUser"]["url"] .= (
						mb_strpos($arResult["arUser"]["url"], '?') === false ? '?' : '&')
						."entityType=LOG_ENTRY&entityId=" . ($arParams["LOG_ID"] ?? null);
				}

				$arResult["Post"]["urlToPost"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_POST"], array("post_id"=> CBlogPost::GetPostID($arPost["ID"], $arPost["CODE"], $arParams["ALLOW_POST_CODE"]), "user_id" => $arPost["AUTHOR_ID"]));

				if ($arPost["CATEGORY_ID"] <> '')
				{
					$bHasTag = true;
					$arCategory = explode(",", $arPost["CATEGORY_ID"]);

					$blogCategoryList = [];
					$res = CBlogCategory::GetList([], [ '@ID' => $arCategory ]);
					while ($blogCategoryFields = $res->fetch())
					{
						$blogCategoryFields["~NAME"] = $blogCategoryFields["NAME"];
						$blogCategoryFields["NAME"] = htmlspecialcharsEx($blogCategoryFields["NAME"]);
						$blogCategoryFields["urlToCategory"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_LOG_TAG"], array("tag" => urlencode($blogCategoryFields["NAME"])));
						$blogCategoryList[(int)$blogCategoryFields['ID']] = $blogCategoryFields;
					}

					$res = CBlogPostCategory::getList(
						[ 'ID' => 'ASC' ],
						[
							'@CATEGORY_ID' => $arCategory,
							'POST_ID' => $arPost['ID'],
						],
						false,
						false,
						[ 'CATEGORY_ID' ]);
					while ($blogPostCategoryFields = $res->fetch())
					{
						if (!isset($blogCategoryList[(int)$blogPostCategoryFields['CATEGORY_ID']]))
						{
							continue;
						}

						$arResult['Category'][] = $blogCategoryList[(int)$blogPostCategoryFields['CATEGORY_ID']];
					}
				}

				$SGClosedList = array();
				$bAll = false;
				$bCrmModuleIncluded = CModule::IncludeModule('crm');

				$arResult["Post"]["SPERM"] = [];
				if($arPost["HAS_SOCNET_ALL"] !== "Y")
				{
					$arSPERM = CBlogPost::GetSocnetPermsName($arResult["Post"]["ID"]);
					$arModuleEvents = array();
					$db_events = GetModuleEvents("socialnetwork", "OnSocNetLogFormatDestination");
					while ($arEvent = $db_events->Fetch())
					{
						$arModuleEvents[] = $arEvent;
					}

					$arUserId = array();

					foreach($arSPERM as $type => $v)
					{
						foreach($v as $vv)
						{
							$name = $link = $id = $CRMPrefix = "";
							$isExtranet = $isEmail = $isCollabEntity = false;

							if ($type === "SG")
							{
								if ($arSocNetGroup = CSocNetGroup::GetByID($vv["ENTITY_ID"]))
								{
									$SGClosedList[] = $arSocNetGroup["CLOSED"];

									$name = $arSocNetGroup["NAME"];
									$link = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_GROUP"], array("group_id" => $vv["ENTITY_ID"]));

									$groupSiteID = false;
									$rsGroupSite = CSocNetGroup::GetSite($vv["ENTITY_ID"]);

									while($arGroupSite = $rsGroupSite->Fetch())
									{
										if (
											!$arResult["bExtranetInstalled"]
											|| $arGroupSite["LID"] != CExtranet::GetExtranetSiteID()
										)
										{
											$groupSiteID = $arGroupSite["LID"];
											break;
										}
									}

									$isExtranet = (
										is_array($GLOBALS["arExtranetGroupID"] ?? null)
										&& in_array($vv["ENTITY_ID"], $GLOBALS["arExtranetGroupID"])
									);
									$isCollabEntity =
										$isExtranet
										&& CollabProvider::getInstance()->isCollab((int)$vv["ENTITY_ID"])
									;

									if ($groupSiteID && !$isCollabEntity)
									{
										$arTmp = CSocNetLogTools::ProcessPath(array("GROUP_URL" => $link), $user_id, $groupSiteID); // user_id is not important parameter
										$link = ($arTmp["URLS"]["GROUP_URL"] <> '' ? $arTmp["SERVER_NAME"].$arTmp["URLS"]["GROUP_URL"] : $link);
									}
									elseif ($isCollabEntity)
									{
										$link = UrlManager::getCollabUrlById((int)$vv["ENTITY_ID"]);
									}

									if (defined("BX_COMP_MANAGED_CACHE"))
									{
										$CACHE_MANAGER->RegisterTag("sonet_group_".(int)$vv["ENTITY_ID"]);
									}

									$entityType = 'project';
									$entityId = $vv['ENTITY_ID'];
								}
							}
							elseif ($type === "U")
							{
								if(in_array("US".$vv["ENTITY_ID"], $vv["ENTITY"]))
								{
									$name = "All";

									if (
										!$arResult["bExtranetSite"]
										&& defined("BITRIX24_PATH_COMPANY_STRUCTURE_VISUAL")
									)
									{
										$link = BITRIX24_PATH_COMPANY_STRUCTURE_VISUAL;
									}

									$bAll = true;

									$entityType = 'meta-user';
									$entityId = 'all-users';
								}
								else
								{
									$arTmpUser = array(
										"NAME" => $vv["~U_NAME"],
										"LAST_NAME" => $vv["~U_LAST_NAME"],
										"SECOND_NAME" => $vv["~U_SECOND_NAME"],
										"LOGIN" => $vv["~U_LOGIN"],
										"NAME_LIST_FORMATTED" => "",
									);
									$name = CUser::FormatName($arParams["NAME_TEMPLATE"], $arTmpUser, ($arParams["SHOW_LOGIN"] !== "N" ? true : false));
									$id = $vv["ENTITY_ID"];
									$link = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER"], array("user_id" => $vv["ENTITY_ID"]));
									$isExtranet = (
										is_array($GLOBALS["arExtranetUserID"] ?? null)
										&& in_array($vv["ENTITY_ID"], $GLOBALS["arExtranetUserID"])
									);
									$isCollabEntity = User::isCollaber((int)$id);
									$isEmail = (isset($vv["U_EXTERNAL_AUTH_ID"]) && $vv["U_EXTERNAL_AUTH_ID"] === 'email');
									if ($isEmail)
									{
										$link .= (mb_strpos($link, '?') === false ? '?' : '&')."entityType=LOG_ENTRY&entityId=".$arParams["LOG_ID"];
									}

									if (defined("BX_COMP_MANAGED_CACHE"))
									{
										$CACHE_MANAGER->RegisterTag("USER_NAME_".(int)$vv["ENTITY_ID"]);
									}
									$arUserId[] = $id;

									$entityType = 'user';
									$entityId = $vv['ENTITY_ID'];
								}
							}
							elseif($type === "DR")
							{
								$name = $vv["EL_NAME"];
								$id = $vv["ENTITY_ID"];
								$link = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_CONPANY_DEPARTMENT"], array("ID" => $vv["ENTITY_ID"]));
								$entityType = 'department';
								$entityId = $vv['ENTITY_ID'];
							}

							$arDestination = $arRights = array();
							$arDestinationParams = array(
								'MOBILE' => $arParams['MOBILE'] ?? '',
								'PATH_TO_CRMCONTACT' => (!empty($arParams['PATH_TO_CRMCONTACT']) ? $arParams['PATH_TO_CRMCONTACT'] : ''),
							);
							foreach ($arModuleEvents as $arEvent)
							{
								ExecuteModuleEventEx($arEvent, array(&$arDestination, $vv['~ENTITY'], $arRights, $arDestinationParams, true));
							}

							if (
								!empty($arDestination)
								&& !empty($arDestination[0])
							)
							{
								$name = $arDestination[0]['TITLE'];
								$link = $arDestination[0]['URL'];
								$id = $arDestination[0]['ID'];
								$isExtranet = false;
								$isEmail = false;
								$isCollabEntity = false;
								$CRMPrefix = $arDestination[0]['CRM_PREFIX'];
							}

							if($name <> '')
							{
								$arResult["Post"]["SPERM"][$type][$vv["ENTITY_ID"]] = array(
									"NAME" => $name,
									"URL" => $link,
									"ID" => $id,
									"IS_EXTRANET" => ($isExtranet ? "Y" : "N"),
									"IS_EMAIL" => ($isEmail ? "Y" : "N"),
									"IS_COLLAB" => ($isCollabEntity ? "Y" : "N"),
									"CRM_PREFIX" => $CRMPrefix,
									'entityType' => $entityType,
									'entityId' => $entityId,
								);
							}
						}
					}

					if (
						!empty($arUserId)
						&& IsModuleInstalled('crm')
					)
					{
						$res = \Bitrix\Main\UserTable::getList([
							'filter' => [
								'@ID' => $arUserId,
							],
							'order' => [
								'ID'=> 'ASC',
							],
							'select' => [ 'ID', 'UF_USER_CRM_ENTITY' ],
						]);

						while ($arUser = $res->fetch())
						{
							if (
								!empty($arUser["UF_USER_CRM_ENTITY"])
								&& isset($arResult["Post"]["SPERM"]["U"][$arUser["ID"]])
							)
							{
								$arResult["Post"]["SPERM"]["U"][$arUser["ID"]]["CRM_ENTITY"] = $arUser["UF_USER_CRM_ENTITY"];
							}
						}
					}

					if (
						count($arResult["Post"]["SPERM"]) == 1
						&& isset($arResult["Post"]["SPERM"]["U"])
						&& is_array($arResult["Post"]["SPERM"]["U"])
						&& count($arResult["Post"]["SPERM"]["U"]) == 1
						&& $bAll
					)
					{
						$bHasOnlyAll = true;
					}
				}
				else
				{
					$arResult["Post"]["SPERM"]["U"][1] = Array(
						"NAME" => "All",
						"URL" => (
							!$arResult["bExtranetSite"]
							&& defined("BITRIX24_PATH_COMPANY_STRUCTURE_VISUAL")
								? BITRIX24_PATH_COMPANY_STRUCTURE_VISUAL
								: ""
						),
						"ID" => "",
						'entityType' => 'meta-user',
						'entityId' => 'all-users',
					);
				}

				$arResult["Post"]["LIMITED_VIEW"] = ComponentHelper::getBlogPostLimitedViewStatus(array(
					'logId' => (int) ($arParams["LOG_ID"] ?? null),
					'postId' => (int) $arResult["Post"]["ID"],
					'authorId' => $arResult["Post"]["AUTHOR_ID"],
					'blogPostPerms' => $arResult["Post"]["SPERM"]
				));

				$arResult["Post"]["ONLY_CLOSED_GROUPS"] = (!empty($SGClosedList) && !in_array('N', $SGClosedList));

				$arFieldsHave = array();
				if($arPost["HAS_IMAGES"] == "")
					$arFieldsHave["HAS_IMAGES"] = ($bHasImg ? "Y" : "N");
				if($arPost["HAS_TAGS"] == "")
					$arFieldsHave["HAS_TAGS"] = ($bHasTag ? "Y" : "N");
				if($arPost["HAS_PROPS"] == "")
					$arFieldsHave["HAS_PROPS"] = ($bHasProps ? "Y" : "N");
				if($arPost["HAS_SOCNET_ALL"] == "")
					$arFieldsHave["HAS_SOCNET_ALL"] = ($bHasOnlyAll ? "Y" : "N");

				if (!empty($arFieldsHave))
				{
					CBlogPost::Update($arPost["ID"], $arFieldsHave);
				}

				if (
					$bAll
					|| $arPost["HAS_SOCNET_ALL"] === "Y"
				)
				{
					$arResult["Post"]["HAVE_ALL_IN_ADR"] = "Y";
				}

				if ($arParams["CACHE_TIME"] > 0)
				{
					$arCacheData = Array(
						"Post" => $arResult["Post"],
						"images" => $arResult["images"] ?? [],
						"Category" => $arResult["Category"] ?? [],
						"GRATITUDE" => $arResult["GRATITUDE"] ?? [],
						"POST_PROPERTIES" => $arResult["POST_PROPERTIES"],
						"arUser" => $arResult["arUser"],
						"Assets" => (isset($arResult["Assets"]) ? $arResult["Assets"] : array()),
					);
					if(defined("BX_COMP_MANAGED_CACHE"))
					{
						$CACHE_MANAGER->EndTagCache();
					}
					$cache->EndDataCache($arCacheData);
				}
			}

			if (
				!isset($arResult['URL_PREVIEW'])
				&& isset($arResult['POST_PROPERTIES']['DATA']['UF_BLOG_POST_URL_PRV'])
			)
			{
				$this->processUrlPreview([
					'fieldData' => $arResult['POST_PROPERTIES']['DATA']['UF_BLOG_POST_URL_PRV'],
					'postId' => $arPost['ID'],
				]);

				unset($arResult['POST_PROPERTIES']['DATA']['UF_BLOG_POST_URL_PRV']);
			}

			$arResult["arUser"]["urlToPostImportant"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_POST_IMPORTANT"], array("user_id"=> $arPost["AUTHOR_ID"]));

			$arResult["dest_users"] = array();
			foreach ($arResult["Post"]["SPERM"] as $key => $value)
			{
				foreach($value as $kk => $vv)
				{
					$arResult["PostSrc"]["SPERM"][$key][] = $kk;
					if($key === "U")
					{
						$arResult["dest_users"][] = $kk;
					}
				}
			}
			$arResult["PostSrc"]["HAVE_ALL_IN_ADR"] = ($arResult["Post"]["HAVE_ALL_IN_ADR"] ?? '');

			if (
				$arParams["CHECK_PERMISSIONS_DEST"] === "N"
				&& !CSocNetUser::IsCurrentUserModuleAdmin()
				&& is_object($USER)
			)
			{
				$arResult["Post"]["SPERM_HIDDEN"] = 0;
				$arGroupID = CSocNetLogTools::GetAvailableGroups(
					($arResult["bExtranetUser"] && !$arResult["bPublicPage"] ? "Y" : "N"),
					($arResult["bExtranetSite"] ? "Y" : "N")
				);

				if (
					!$arResult["bExtranetUser"]
					&& CModule::IncludeModule("extranet")
				)
				{
					$arAvailableExtranetUserID = CExtranet::GetMyGroupsUsersSimple(CExtranet::GetExtranetSiteID());
				}

				foreach($arResult["Post"]["SPERM"] as $group_code => $arBlogSPerm)
				{
					foreach($arBlogSPerm as $entity_id => $arBlogSPermDesc)
					{
						if (
							(
								$group_code === "SG"
								&& !in_array($entity_id, $arGroupID)
							)
							|| (
								$group_code === "DR"
								&& $arResult["bExtranetUser"]
								&& !$arResult["bPublicPage"]
							)
							|| (
								$group_code === "U"
								&& isset($arUserIdVisible) // current extranet user
								&& is_array($arUserIdVisible)
								&& !in_array($entity_id, $arUserIdVisible)
							)
							|| (
								$group_code === "U"
								&& isset($arBlogSPermDesc["IS_EXTRANET"])
								&& $arBlogSPermDesc["IS_EXTRANET"] === "Y"
								&& (
									$arResult["bPublicPage"]
									|| (
										isset($arAvailableExtranetUserID)
										&& is_array($arAvailableExtranetUserID)
										&& !in_array($entity_id, $arAvailableExtranetUserID)
									)
								)
							)
						)
						{
							unset($arResult["Post"]["SPERM"][$group_code][$entity_id]);
							$arResult["Post"]["SPERM_HIDDEN"]++;
							$arResult["PostSrc"]["SPERM_HIDDEN"][] = $group_code.$entity_id;
						}
					}
				}
			}

			$arResult["CommentPerm"] = Permissions::WRITE;

			if (
				(
					$arParams["CHECK_COMMENTS_PERMS"] === "Y"
					|| !$arResult["bFromList"]
				)
				&& !CSocNetUser::IsCurrentUserModuleAdmin()
				&& is_object($USER)
				&& $arResult['USER_ID'] !== (int)$arResult["Post"]["AUTHOR_ID"]
				&& !empty($arResult["Post"]["SPERM"]['SG']) // if has sonet groups
				&& count($arResult["Post"]["SPERM"]) === 1 // and only sonet groups
			)
			{
				$arResult["CommentPerm"] = CBlogComment::GetSocNetUserPerms($arResult["Post"]["ID"], $arResult["Post"]["AUTHOR_ID"]);
				$arResult["ReadOnly"] = (
					$arResult["ReadOnly"]
					&& $arResult["CommentPerm"] < Permissions::PREMODERATE
				);
			}

			$arResult["CanComment"] = (
				!isset($arResult["Post"]["ONLY_CLOSED_GROUPS"])
				|| !$arResult["Post"]["ONLY_CLOSED_GROUPS"]
				|| COption::GetOptionString("socialnetwork", "work_with_closed_groups", "N") === "Y"
			);

			if (!empty($arParams['SONET_GROUP_ID']))
			{
				if (
					$arResult["CanComment"]
					&& $arResult["ReadOnly"]
				)
				{
					$arResult["CanComment"] = \Bitrix\Socialnetwork\ComponentHelper::checkCanCommentInWorkgroup([
						'userId' => $arResult["USER_ID"],
						'workgroupId' => $arParams['SONET_GROUP_ID']
					]);
				}
			}
			else
			{
				$arResult["CanComment"] = (
					$arResult["CanComment"]
					&& !$arResult["ReadOnly"]
				);
			}

			$arResult["PostSrc"]["SPERM_NAME"] = $arResult["Post"]["SPERM"];

			if(
				$arResult["PostPerm"] > Permissions::MODERATE
				|| (
					$arResult["PostPerm"] >= Permissions::WRITE
					&& $arPost["AUTHOR_ID"] == $arResult["USER_ID"]
				)
			)
			{
				$arResult["urlToEdit"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_POST_EDIT"], array("post_id"=>$arPost["ID"], "user_id" => $arPost["AUTHOR_ID"]));
				if (
					isset($arParams["TYPE"])
					&& in_array($arParams["TYPE"], ["DRAFT", "MODERATION"])
				)
				{
					$arResult["Post"]["urlToPost"] = $arResult["urlToEdit"];
				}
			}

			$arResult["urlToDelete"] = $arResult["urlToEdit"] ?? '';
			$arResult["urlToDelete"] .= (mb_strpos($arResult["urlToDelete"], "?") === false ? "?" : "&");
			$arResult["urlToDelete"] .= "delete_blog_post_id=#del_post_id#&ajax_blog_post_delete=Y"."&".bitrix_sessid_get();

			if(($arParams["FROM_LOG"] ?? null) !== "Y")
			{
				if($arResult["PostPerm"] >= Permissions::MODERATE)
				{
					$arResult["urlToHide"] = htmlspecialcharsex($APPLICATION->GetCurPageParam("hide=Y"."&".bitrix_sessid_get(), Array("sessid", "success", "hide", "delete")));
				}

				if($arResult["PostPerm"] >= Permissions::FULL)
				{
					if(!in_array($arParams["TYPE"], array("DRAFT", "MODERATION")))
					{
						$arResult["urlToDelete"] = htmlspecialcharsex($APPLICATION->GetCurPageParam("delete=Y"."&".bitrix_sessid_get(), Array("sessid", "delete", "hide", "success")));
					}
					$arResult["canDelete"] = "Y";
				}
			}
			elseif($arResult["PostPerm"] >= Permissions::FULL)
			{
				$arResult["canDelete"] = "Y";
			}

			if(
				$arParams["SHOW_RATING"] === "Y"
				&& !empty($arResult["Post"])
			)
			{
				$arResult['RATING'][$arResult["Post"]["ID"]] = (
						array_key_exists("RATING_ENTITY_ID", $arParams)
						&& (int)$arParams["RATING_ENTITY_ID"] > 0
						&& array_key_exists("RATING_TOTAL_VALUE", $arParams)
						&& is_numeric($arParams["RATING_TOTAL_VALUE"])
						&& array_key_exists("RATING_TOTAL_VOTES", $arParams)
						&& (int)$arParams["RATING_TOTAL_VOTES"] >= 0
						&& array_key_exists("RATING_TOTAL_POSITIVE_VOTES", $arParams)
						&& (int)$arParams["RATING_TOTAL_POSITIVE_VOTES"] >= 0
						&& array_key_exists("RATING_TOTAL_NEGATIVE_VOTES", $arParams)
						&& (int)$arParams["RATING_TOTAL_NEGATIVE_VOTES"] >= 0
						&& array_key_exists("RATING_USER_VOTE_VALUE", $arParams)
						&& is_numeric($arParams["RATING_USER_VOTE_VALUE"])
							? array(
								"USER_VOTE" => $arParams["RATING_USER_VOTE_VALUE"],
								"USER_HAS_VOTED" => ($arParams["RATING_USER_VOTE_VALUE"] == 0 ? "N" : "Y"),
								"TOTAL_VOTES" => $arParams["RATING_TOTAL_VOTES"],
								"TOTAL_POSITIVE_VOTES" => $arParams["RATING_TOTAL_POSITIVE_VOTES"],
								"TOTAL_NEGATIVE_VOTES" => $arParams["RATING_TOTAL_NEGATIVE_VOTES"],
								"TOTAL_VALUE" => $arParams["RATING_TOTAL_VALUE"]
							)
							: CRatings::GetRatingVoteResult('BLOG_POST', $arResult["Post"]["ID"])
					);
			}

			if ($arParams["IS_UNREAD"] ?? false)
				$arResult["Post"]["new"] = "Y";

			if ($arParams["IS_HIDDEN"] ?? false)
				$arResult["Post"]["hidden"] = "Y";

			$arResult["Post"]["IS_IMPORTANT"] = false;
			if (
				isset($arResult["POST_PROPERTIES"]["DATA"]["UF_BLOG_POST_IMPRTNT"])
				&& is_array($arResult["POST_PROPERTIES"]["DATA"]["UF_BLOG_POST_IMPRTNT"])
				&& (int)$arResult["POST_PROPERTIES"]["DATA"]["UF_BLOG_POST_IMPRTNT"]["VALUE"] > 0
			)
			{
				$arResult["Post"]["IS_IMPORTANT"] = true;
				unset($arResult["POST_PROPERTIES"]["DATA"]["UF_BLOG_POST_IMPRTNT"]);
				$arResult["Post"]["IMPORTANT"] = array();
				if ($USER->IsAuthorized())
				{
					$arResult["Post"]["IMPORTANT"] = array(
						"COUNT" => 0,
						"IS_READ" => false,
						"USER" => array()
					);

					$cache = new CPHPCache;
					$cache_path = ComponentHelper::getBlogPostCacheDir(array(
						'TYPE' => 'post',
						'POST_ID' => $arPost["ID"]
					));
					$cache_id = "blog_socnet_post_read_" . $arResult['USER_ID'];

					if ($cache->InitCache($arParams["CACHE_TIME"], $cache_id, $cache_path))
						$arResult["Post"]["IMPORTANT"] = $cache->GetVars();
					else
					{
						$cache->StartDataCache($arParams["CACHE_TIME"], $cache_id, $cache_path);
						if (defined("BX_COMP_MANAGED_CACHE"))
						{
							$CACHE_MANAGER->StartTagCache($cache_path);
							$CACHE_MANAGER->RegisterTag("BLOG_POST_IMPRTNT".$arPost["ID"]);
						}
						$db_user = CUser::GetById($arResult['USER_ID']);
						$arResult["Post"]["IMPORTANT"]["USER"] = $db_user->Fetch();

						$db_res = CBlogUserOptions::GetList(
							array(
								"ID" => "ASC"
							),
							array(
								"POST_ID" => $arResult["Post"]["ID"],
								"NAME" => "BLOG_POST_IMPRTNT",
								"VALUE" => "Y",
								"USER_ACTIVE" => "Y"
							),
							array(
								"bCount" => true
							)
						);
						if ($db_res && ($res = $db_res->Fetch()) && $res["CNT"] > 0)
						{
							$arResult["Post"]["IMPORTANT"]["COUNT"] = $res["CNT"];
							$arResult["Post"]["IMPORTANT"]["IS_READ"] = CBlogUserOptions::GetOption(
								$arPost["ID"],
								"BLOG_POST_IMPRTNT",
								"N",
								$arResult['USER_ID']
							);
						}

						if(defined("BX_COMP_MANAGED_CACHE"))
							$CACHE_MANAGER->EndTagCache();
						$cache->EndDataCache($arResult["Post"]["IMPORTANT"]);
					}
				}
			}

			if (
				isset($arResult["GRATITUDE"])
				&& isset($arResult["GRATITUDE"]["USERS_FULL"])
				&& is_array($arResult["GRATITUDE"]["USERS_FULL"])
				&& !empty($arResult["GRATITUDE"]["USERS_FULL"])
				&& isset($arUserIdVisible)
				&& is_array($arUserIdVisible)
			)
			{
				foreach($arResult["GRATITUDE"]["USERS_FULL"] as $key => $arUserTmp)
				{
					if (!in_array($arUserTmp["ID"], $arUserIdVisible))
					{
						$arResult["GRATITUDE"]["USERS_FULL"][$key]["URL"] = false;
					}
				}
			}

			$arResult["CONTENT_ID"] = (!empty($arParams["CONTENT_ID"]) ? $arParams["CONTENT_ID"] : 'BLOG_POST-'.(int)$arResult["Post"]["ID"]);
			if (isset($arParams["CONTENT_VIEW_CNT"]))
			{
				$arResult["CONTENT_VIEW_CNT"] = (int)$arParams["CONTENT_VIEW_CNT"];
			}
			else
			{
				if (
					($contentViewData = \Bitrix\Socialnetwork\Item\UserContentView::getViewData(array(
						'contentId' => array($arResult["CONTENT_ID"])
					)))
					&& !empty($contentViewData[$arResult["CONTENT_ID"]])
				)
				{
					$arResult["CONTENT_VIEW_CNT"] = (int)$contentViewData[$arResult["CONTENT_ID"]]["CNT"];
				}
				else
				{
					$arResult["CONTENT_VIEW_CNT"] = 0;
				}
			}

			$arResult['LOG_ID_TOKEN'] = (
				($arParams['LOG_ID'] ?? 0) > 0
				&& $arResult['USER_ID'] > 0
					? (new \Bitrix\Main\Engine\ActionFilter\Service\Token($arResult['USER_ID']))->generate($arParams['LOG_ID'])
					: ''
			);
		}
		else
		{
			$arResult["FATAL_MESSAGE"] = GetMessage("B_B_MES_NO_RIGHTS")."<br />";
			$arResult["FATAL_CODE"] = "NO_RIGHTS";
		}
	}
	elseif (!$arResult["bFromList"])
	{
		$arResult["FATAL_MESSAGE"] = GetMessage("B_B_MES_NO_POST");
		$arResult["FATAL_CODE"] = "NO_POST";
		CHTTP::SetStatus("404 Not Found");
	}
}
else
{
	$arResult["FATAL_MESSAGE"] = GetMessage("B_B_MES_NO_BLOG");
	$arResult["FATAL_CODE"] = "NO_BLOG";
	CHTTP::SetStatus("404 Not Found");
}

include_once('destination.php');

if (
	!isset($arParams["RETURN_ERROR"])
	|| $arParams["RETURN_ERROR"] !== "Y"
	|| empty($arResult["FATAL_MESSAGE"])
)
{
	if (
		isset($arParams["SITE_TEMPLATE_ID"])
		&& $arParams["SITE_TEMPLATE_ID"] <> ''
	)
	{
		$this->setSiteTemplateId($arParams["SITE_TEMPLATE_ID"]);
	}

	$arResult['CONTENT_VIEW_KEY_SIGNED'] = (string)($arParams['CONTENT_VIEW_KEY_SIGNED'] ?? (
		(is_object($USER) && $USER->isAuthorized())
		&& (string) ($arResult['CONTENT_ID'] ?? null) !== ''
			? (new Token((int)$USER->getId()))->generate($arResult['CONTENT_ID'])
			: ''
	));

	$this->IncludeComponentTemplate();
}

if (($arParams["RETURN_DATA"] ?? '') === "Y")
{
	return array(
		"BLOG_DATA" => $arResult["Blog"],
		"POST_DATA" => $arResult["PostSrc"],
		"ERROR" => (
			!empty($arResult["FATAL_MESSAGE"])
				? $arResult["FATAL_MESSAGE"]
				: false
		),
		"ERROR_CODE" => (
			!empty($arResult["FATAL_CODE"])
				? $arResult["FATAL_CODE"]
				: false
		)
	);
}

Youez - 2016 - github.com/yon3zu
LinuXploit