• Модуль: blog
  • Путь к файлу: ~/bitrix/modules/blog/lib/postsocnetrights.php
  • Класс: BitrixBlogPostSocnetRightsTable
  • Вызов: PostSocnetRightsTable::recalcGroupPostRights
static function recalcGroupPostRights($params = array())
{
	if (!is_array($params))
	{
		return false;
	}

	$groupId = (isset($params['groupId']) ? intval($params['groupId']) : 0);
	$newRole = (isset($params['role']) ? $params['role'] : false);

	$application = BitrixMainApplication::getInstance();
	$connection = $application->getConnection();

	if (
		$groupId <= 0
		|| empty($newRole)
	)
	{
		return false;
	}

	if (!Loader::includeModule('socialnetwork'))
	{
		return false;
	}

	$queryRes = true;

	$prevValue = BitrixBlogItemPostSocnetRights::get($groupId);
	if ($prevValue != $newRole)
	{
		$sql = "DELETE FROM ".self::getTableName()." WHERE ENTITY_TYPE = 'SG' AND ENTITY_ID = ".$groupId;
		try
		{
			$connection->query($sql);
		}
		catch (SqlException $e)
		{
			$queryRes = false;
		}

		if ($queryRes)
		{
			$rightsList = CBlogPost::getFullGroupRoleSet($newRole, "SG".$groupId."_");
			$rightsList[] = 'SG'.$groupId;
			$rightsList = array_unique($rightsList);

			foreach($rightsList as $right)
			{
				if (!$queryRes)
				{
					break;
				}

				$sql = "INSERT INTO ".self::getTableName()." (POST_ID, ENTITY_TYPE, ENTITY_ID, ENTITY) ".
					"SELECT SL.SOURCE_ID, 'SG', ".$groupId.", '".$right."' ".
					"FROM ".LogTable::getTableName()." SL ".
					"INNER JOIN ".LogRightTable::getTableName()." SLR ON SLR.LOG_ID = SL.ID AND SLR.GROUP_CODE = 'SG".$groupId."' ".
					"WHERE SL.EVENT_ID IN ('".implode("', '", BitrixBlogIntegrationSocialnetworkLog::getEventIdList())."')";

				try
				{
					$connection->query($sql);
				}
				catch (SqlException $e)
				{
					$queryRes = false;
				}
			}

			if ($queryRes)
			{
				$sql = "DELETE ".LogRightTable::getTableName()." ".
					"FROM ".LogRightTable::getTableName()." ".
					"INNER JOIN ".LogTable::getTableName()." ON ".LogTable::getTableName().".ID = ".LogRightTable::getTableName().".LOG_ID AND ".LogTable::getTableName().".EVENT_ID IN ('".implode("', '", BitrixBlogIntegrationSocialnetworkLog::getEventIdList())."') ".
					"WHERE GROUP_CODE LIKE 'SG".$groupId."%'";

				try
				{
					$connection->query($sql);
				}
				catch (SqlException $e)
				{
					$queryRes = false;
				}
			}

			if ($queryRes)
			{
				$sql = "DELETE ".LogRightTable::getTableName()." ".
					"FROM ".LogRightTable::getTableName()." ".
					"INNER JOIN ".LogTable::getTableName()." ON ".LogTable::getTableName().".ID = ".LogRightTable::getTableName().".LOG_ID AND ".LogTable::getTableName().".EVENT_ID IN ('".implode("', '", BitrixBlogIntegrationSocialnetworkLog::getEventIdList())."') ".
					"WHERE GROUP_CODE LIKE 'OSG".$groupId."%'";

				try
				{
					$connection->query($sql);
				}
				catch (SqlException $e)
				{
					$queryRes = false;
				}
			}

			if ($queryRes)
			{
				$sql = "INSERT INTO ".LogRightTable::getTableName()." (LOG_ID, GROUP_CODE, LOG_UPDATE) ".
					"SELECT SL.ID, BSR.ENTITY, SL.LOG_UPDATE ".
					"FROM ".LogTable::getTableName()." SL ".
					"INNER JOIN ".self::getTableName()." BSR ON BSR.POST_ID = SL.SOURCE_ID AND (BSR.ENTITY LIKE 'SG".$groupId."%' OR BSR.ENTITY LIKE 'OSG".$groupId."%') ".
					"WHERE SL.EVENT_ID IN ('".implode("', '", BitrixBlogIntegrationSocialnetworkLog::getEventIdList())."')";

				try
				{
					$connection->query($sql);
				}
				catch (SqlException $e)
				{
					$queryRes = false;
				}
			}

			BXClearCache(true, "/blog/getsocnetperms");
		}
	}

	return $queryRes;
}