- Модуль: socialnetwork
- Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/log_events.php
- Класс: CAllSocNetLogEvents
- Вызов: CAllSocNetLogEvents::GetSQL
static function GetSQL($user_id, $arMyEntities, $transport, $visible, $table_alias = "L")
{
global $DB;
if (intval($user_id) <= 0)
return false;
if ((!defined("DisableSonetLogVisibleSubscr") || DisableSonetLogVisibleSubscr !== true) && $visible && $visible <> '')
{
$key_res = CSocNetGroup::GetFilterOperation($visible);
$strField = $key_res["FIELD"];
$strNegative = $key_res["NEGATIVE"];
$strOperation = $key_res["OPERATION"];
$visibleFilter = "AND (".($strNegative == "Y" ? " SLE.VISIBLE IS NULL OR NOT " : "")."(SLE.VISIBLE ".$strOperation." '".$DB->ForSql($strField)."'))";
$transportFilter = "";
}
else
{
$visibleFilter = "";
if ($transport && $transport <> '')
{
$key_res = CSocNetGroup::GetFilterOperation($transport);
$strField = $key_res["FIELD"];
$strNegative = $key_res["NEGATIVE"];
$strOperation = $key_res["OPERATION"];
$transportFilter = "AND (".($strNegative == "Y" ? " SLE.TRANSPORT IS NULL OR NOT " : "")."(SLE.TRANSPORT ".$strOperation." '".$DB->ForSql($strField)."'))";
}
else
$transportFilter = "";
}
$strMyEntities = array();
foreach($arMyEntities as $entity_type_tmp => $arMyEntity)
{
if (is_array($arMyEntity) && count($arMyEntity) > 0)
{
$strMyEntities[$entity_type_tmp] = $table_alias.".ENTITY_ID IN (".implode(",", $arMyEntity).")";
$strNotMyEntities[$entity_type_tmp] = "(".$table_alias.".ENTITY_ID NOT IN (".implode(",", $arMyEntity).") AND ".$table_alias.".ENTITY_TYPE = '".$entity_type_tmp."')";
}
}
$arCBFilterEntityType = array();
$arSocNetAllowedSubscribeEntityTypesDesc = CSocNetAllowed::GetAllowedEntityTypesDesc();
foreach($arSocNetAllowedSubscribeEntityTypesDesc as $entity_type_tmp => $arEntityTypeTmp)
{
if (
array_key_exists("USE_CB_FILTER", $arEntityTypeTmp)
&& $arEntityTypeTmp["USE_CB_FILTER"] == "Y"
)
{
$arCBFilterEntityType[] = "'".$entity_type_tmp."'";
}
}
if (is_array($arCBFilterEntityType) && count($arCBFilterEntityType) > 0)
{
$strCBFilterEntityType = $table_alias.".ENTITY_TYPE IN (".implode(",", $arCBFilterEntityType).") AND ";
$strNotCBFilterEntityType = $table_alias.".ENTITY_TYPE NOT IN (".implode(",", $arCBFilterEntityType).") OR ";
}
else
{
$strCBFilterEntityType = "";
$strNotCBFilterEntityType = "";
}
$strSQL = "
EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_TYPE = ".$table_alias.".ENTITY_TYPE
AND SLE.ENTITY_CB = 'N'
AND SLE.ENTITY_ID = ".$table_alias.".ENTITY_ID
AND SLE.EVENT_ID = ".$table_alias.".EVENT_ID
".$transportFilter."
".$visibleFilter."
)
OR
(
".$strCBFilterEntityType."
EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_CB = 'Y'
AND SLE.ENTITY_ID = ".$table_alias.".USER_ID
AND SLE.EVENT_ID = ".$table_alias.".EVENT_ID
".$transportFilter."
".$visibleFilter."
)
)
OR
(
(
NOT EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_TYPE = ".$table_alias.".ENTITY_TYPE
AND SLE.ENTITY_CB = 'N'
AND SLE.ENTITY_ID = ".$table_alias.".ENTITY_ID
AND SLE.EVENT_ID = ".$table_alias.".EVENT_ID
)
OR
EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_TYPE = ".$table_alias.".ENTITY_TYPE
AND SLE.ENTITY_CB = 'N'
AND SLE.ENTITY_ID = ".$table_alias.".ENTITY_ID
AND SLE.EVENT_ID = ".$table_alias.".EVENT_ID
AND ".($visibleFilter ? "SLE.VISIBLE = 'I'" : "SLE.TRANSPORT = 'I'")."
)
)
AND
(
".$strNotCBFilterEntityType."
NOT EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_CB = 'Y'
AND SLE.ENTITY_ID = ".$table_alias.".USER_ID
AND SLE.EVENT_ID = ".$table_alias.".EVENT_ID
)
OR
EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_CB = 'Y'
AND SLE.ENTITY_ID = ".$table_alias.".USER_ID
AND SLE.EVENT_ID = ".$table_alias.".EVENT_ID
AND ".($visibleFilter ? "SLE.VISIBLE = 'I'" : "SLE.TRANSPORT = 'I'")."
)
)
AND
(
EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_TYPE = ".$table_alias.".ENTITY_TYPE
AND SLE.ENTITY_CB = 'N'
AND SLE.ENTITY_ID = ".$table_alias.".ENTITY_ID
AND SLE.EVENT_ID = 'all'
".$transportFilter."
".$visibleFilter."
)
OR
(
".$strCBFilterEntityType."
EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_CB = 'Y'
AND SLE.ENTITY_ID = ".$table_alias.".USER_ID
AND SLE.EVENT_ID = 'all'
".$transportFilter."
".$visibleFilter."
)
)
OR
(
(
NOT EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_TYPE = ".$table_alias.".ENTITY_TYPE
AND SLE.ENTITY_CB = 'N'
AND SLE.ENTITY_ID = ".$table_alias.".ENTITY_ID
AND SLE.EVENT_ID = 'all'
)
OR
EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_TYPE = ".$table_alias.".ENTITY_TYPE
AND SLE.ENTITY_CB = 'N'
AND SLE.ENTITY_ID = ".$table_alias.".ENTITY_ID
AND SLE.EVENT_ID = 'all'
AND ".($visibleFilter ? "SLE.VISIBLE = 'I'" : "SLE.TRANSPORT = 'I'")."
)
)
AND
(
".$strNotCBFilterEntityType."
NOT EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_CB = 'Y'
AND SLE.ENTITY_ID = ".$table_alias.".USER_ID
AND SLE.EVENT_ID = 'all'
)
OR
EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_CB = 'Y'
AND SLE.ENTITY_ID = ".$table_alias.".USER_ID
AND SLE.EVENT_ID = 'all'
AND ".($visibleFilter ? "SLE.VISIBLE = 'I'" : "SLE.TRANSPORT = 'I'")."
)
)
AND
(
";
if (count($strMyEntities) > 0)
{
foreach ($strMyEntities as $entity_type_tmp => $strMyEntity)
{
$strSQL .= ($strMyEntity <> '' ? "
(
".$strMyEntity."
AND
(
EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_TYPE = '".$entity_type_tmp."'
AND SLE.ENTITY_TYPE = ".$table_alias.".ENTITY_TYPE
AND SLE.ENTITY_ID = 0
AND SLE.ENTITY_MY = 'Y'
AND SLE.EVENT_ID = ".$table_alias.".EVENT_ID
".$transportFilter."
".$visibleFilter."
)
OR
(
(
EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_TYPE = '".$entity_type_tmp."'
AND SLE.ENTITY_TYPE = ".$table_alias.".ENTITY_TYPE
AND SLE.ENTITY_ID = 0
AND SLE.ENTITY_MY = 'Y'
AND SLE.EVENT_ID = ".$table_alias.".EVENT_ID
AND ".($visibleFilter ? "SLE.VISIBLE = 'I'" : "SLE.TRANSPORT = 'I'")."
)
OR
NOT EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_TYPE = '".$entity_type_tmp."'
AND SLE.ENTITY_TYPE = ".$table_alias.".ENTITY_TYPE
AND SLE.ENTITY_ID = 0
AND SLE.ENTITY_MY = 'Y'
AND SLE.EVENT_ID = ".$table_alias.".EVENT_ID
)
)
AND
(
EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_TYPE = '".$entity_type_tmp."'
AND SLE.ENTITY_TYPE = ".$table_alias.".ENTITY_TYPE
AND SLE.ENTITY_ID = 0
AND SLE.ENTITY_MY = 'Y'
AND SLE.EVENT_ID = 'all'
".$transportFilter."
".$visibleFilter."
)
)
)
)
)
OR
" : "");
}
}
$strSQL .= "
(
EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_TYPE = ".$table_alias.".ENTITY_TYPE
AND SLE.ENTITY_ID = 0
AND SLE.ENTITY_MY = 'N'
AND SLE.EVENT_ID = ".$table_alias.".EVENT_ID
".$transportFilter."
".$visibleFilter."
)
OR
(
(
EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_TYPE = ".$table_alias.".ENTITY_TYPE
AND SLE.ENTITY_ID = 0
AND SLE.ENTITY_MY = 'N'
AND SLE.EVENT_ID = ".$table_alias.".EVENT_ID
AND ".($visibleFilter ? "SLE.VISIBLE = 'I'" : "SLE.TRANSPORT = 'I'")."
)
OR
NOT EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_TYPE = ".$table_alias.".ENTITY_TYPE
AND SLE.ENTITY_ID = 0
AND SLE.ENTITY_MY = 'N'
AND SLE.EVENT_ID = ".$table_alias.".EVENT_ID
)
)
AND
(
EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_TYPE = ".$table_alias.".ENTITY_TYPE
AND SLE.ENTITY_ID = 0
AND SLE.ENTITY_MY = 'N'
AND SLE.EVENT_ID = 'all'
".$transportFilter."
".$visibleFilter."
)
OR
EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_TYPE = ".$table_alias.".ENTITY_TYPE
AND SLE.ENTITY_ID = 0
AND SLE.ENTITY_MY = 'N'
AND SLE.EVENT_ID = 'all'
AND ".($visibleFilter ? "SLE.VISIBLE = 'I'" : "SLE.TRANSPORT = 'I'")."
)
OR
NOT EXISTS(
SELECT ID
FROM b_sonet_log_events SLE
WHERE
SLE.USER_ID = ".$user_id."
AND SLE.ENTITY_TYPE = ".$table_alias.".ENTITY_TYPE
AND SLE.ENTITY_ID = 0
AND SLE.ENTITY_MY = 'N'
AND SLE.EVENT_ID = 'all'
)
)
)
)
)
)
)
)";
return $strSQL;
}