static function GetList($arOrder = Array("ID" => "DESC"), $arFilter = Array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array(), $arParams = array())
{
global $DB, $arSocNetAllowedEntityTypes, $USER, $USER_FIELD_MANAGER;
$arSocNetAllowedSubscribeEntityTypesDesc = CSocNetAllowed::GetAllowedEntityTypesDesc();
$obUserFieldsSql = new CUserTypeSQL;
$obUserFieldsSql->SetEntity("SONET_COMMENT", "LC.ID");
$obUserFieldsSql->SetSelect($arSelectFields);
$obUserFieldsSql->SetFilter($arFilter);
$obUserFieldsSql->SetOrder($arOrder);
if (count($arSelectFields) <= 0)
$arSelectFields = array(
"ID", "LOG_ID", "SOURCE_ID", "ENTITY_TYPE", "ENTITY_ID", "USER_ID", "EVENT_ID", "LOG_DATE", "MESSAGE", "TEXT_MESSAGE", "URL", "MODULE_ID",
"GROUP_NAME", "GROUP_OWNER_ID", "GROUP_VISIBLE", "GROUP_OPENED", "GROUP_IMAGE_ID",
"USER_NAME", "USER_LAST_NAME", "USER_SECOND_NAME", "USER_LOGIN", "USER_PERSONAL_PHOTO", "USER_PERSONAL_GENDER",
"CREATED_BY_NAME", "CREATED_BY_LAST_NAME", "CREATED_BY_SECOND_NAME", "CREATED_BY_LOGIN", "CREATED_BY_PERSONAL_PHOTO", "CREATED_BY_PERSONAL_GENDER",
"LOG_SITE_ID", "LOG_SOURCE_ID", "LOG_USER_ID",
"RATING_TYPE_ID", "RATING_ENTITY_ID", "RATING_TOTAL_VALUE", "RATING_TOTAL_VOTES", "RATING_TOTAL_POSITIVE_VOTES", "RATING_TOTAL_NEGATIVE_VOTES", "RATING_USER_VOTE_VALUE"
);
static $arFields1 = array(
"ID" => Array("FIELD" => "LC.ID", "TYPE" => "int"),
"LOG_ID" => Array("FIELD" => "LC.LOG_ID", "TYPE" => "int"),
"SOURCE_ID" => Array("FIELD" => "LC.SOURCE_ID", "TYPE" => "int"),
"ENTITY_TYPE" => Array("FIELD" => "LC.ENTITY_TYPE", "TYPE" => "string"),
"ENTITY_ID" => Array("FIELD" => "LC.ENTITY_ID", "TYPE" => "int"),
"USER_ID" => Array("FIELD" => "LC.USER_ID", "TYPE" => "int"),
"EVENT_ID" => Array("FIELD" => "LC.EVENT_ID", "TYPE" => "string"),
"LOG_DATE" => Array("FIELD" => "LC.LOG_DATE", "TYPE" => "datetime"),
"LOG_DATE_TS" => Array("FIELD" => "UNIX_TIMESTAMP(LC.LOG_DATE)", "TYPE" => "int"),
"TITLE" => Array("FIELD" => "LC.TITLE", "TYPE" => "string"),
"MESSAGE" => Array("FIELD" => "LC.MESSAGE", "TYPE" => "string"),
"TEXT_MESSAGE" => Array("FIELD" => "LC.TEXT_MESSAGE", "TYPE" => "string"),
"URL" => Array("FIELD" => "LC.URL", "TYPE" => "string"),
"MODULE_ID" => Array("FIELD" => "LC.MODULE_ID", "TYPE" => "string"),
"LOG_SOURCE_ID" => Array("FIELD" => "L.SOURCE_ID", "TYPE" => "int", "FROM" => "LEFT JOIN b_sonet_log L ON (LC.LOG_ID = L.ID)"),
"LOG_USER_ID" => Array("FIELD" => "L.USER_ID", "TYPE" => "int", "FROM" => "LEFT JOIN b_sonet_log L ON (LC.LOG_ID = L.ID)"),
"LOG_TITLE" => Array("FIELD" => "L1.TITLE", "TYPE" => "string", "FROM" => "INNER JOIN b_sonet_log L1 ON (LC.LOG_ID = L1.ID)"),
"LOG_URL" => Array("FIELD" => "L1.URL", "TYPE" => "string", "FROM" => "INNER JOIN b_sonet_log L1 ON (LC.LOG_ID = L1.ID)"),
"LOG_PARAMS" => Array("FIELD" => "L1.PARAMS", "TYPE" => "string", "FROM" => "INNER JOIN b_sonet_log L1 ON (LC.LOG_ID = L1.ID)"),
"GROUP_NAME" => Array("FIELD" => "G.NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_sonet_group G ON (LC.ENTITY_TYPE = 'G' AND LC.ENTITY_ID = G.ID)"),
"GROUP_OWNER_ID" => Array("FIELD" => "G.OWNER_ID", "TYPE" => "int", "FROM" => "LEFT JOIN b_sonet_group G ON (LC.ENTITY_TYPE = 'G' AND LC.ENTITY_ID = G.ID)"),
"GROUP_VISIBLE" => Array("FIELD" => "G.VISIBLE", "TYPE" => "string", "FROM" => "LEFT JOIN b_sonet_group G ON (LC.ENTITY_TYPE = 'G' AND LC.ENTITY_ID = G.ID)"),
"GROUP_OPENED" => Array("FIELD" => "G.OPENED", "TYPE" => "string", "FROM" => "LEFT JOIN b_sonet_group G ON (LC.ENTITY_TYPE = 'G' AND LC.ENTITY_ID = G.ID)"),
"GROUP_IMAGE_ID" => Array("FIELD" => "G.IMAGE_ID", "TYPE" => "int", "FROM" => "LEFT JOIN b_sonet_group G ON (LC.ENTITY_TYPE = 'G' AND LC.ENTITY_ID = G.ID)"),
"USER_NAME" => Array("FIELD" => "U.NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (LC.ENTITY_TYPE = 'U' AND LC.ENTITY_ID = U.ID)"),
"USER_LAST_NAME" => Array("FIELD" => "U.LAST_NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (LC.ENTITY_TYPE = 'U' AND LC.ENTITY_ID = U.ID)"),
"USER_SECOND_NAME" => Array("FIELD" => "U.SECOND_NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (LC.ENTITY_TYPE = 'U' AND LC.ENTITY_ID = U.ID)"),
"USER_LOGIN" => Array("FIELD" => "U.LOGIN", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (LC.ENTITY_TYPE = 'U' AND LC.ENTITY_ID = U.ID)"),
"USER_PERSONAL_PHOTO" => Array("FIELD" => "U.PERSONAL_PHOTO", "TYPE" => "int", "FROM" => "LEFT JOIN b_user U ON (LC.ENTITY_TYPE = 'U' AND LC.ENTITY_ID = U.ID)"),
"USER_PERSONAL_GENDER" => Array("FIELD" => "U.PERSONAL_GENDER", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (LC.ENTITY_TYPE = 'U' AND LC.ENTITY_ID = U.ID)"),
"CREATED_BY_NAME" => Array("FIELD" => "U1.NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U1 ON LC.USER_ID = U1.ID"),
"CREATED_BY_LAST_NAME" => Array("FIELD" => "U1.LAST_NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U1 ON LC.USER_ID = U1.ID"),
"CREATED_BY_SECOND_NAME" => Array("FIELD" => "U1.SECOND_NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U1 ON LC.USER_ID = U1.ID"),
"CREATED_BY_LOGIN" => Array("FIELD" => "U1.LOGIN", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U1 ON LC.USER_ID = U1.ID"),
"CREATED_BY_PERSONAL_PHOTO" => Array("FIELD" => "U1.PERSONAL_PHOTO", "TYPE" => "int", "FROM" => "LEFT JOIN b_user U1 ON LC.USER_ID = U1.ID"),
"CREATED_BY_PERSONAL_GENDER" => Array("FIELD" => "U1.PERSONAL_GENDER", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U1 ON LC.USER_ID = U1.ID"),
"CREATED_BY_EXTERNAL_AUTH_ID" => Array("FIELD" => "U1.EXTERNAL_AUTH_ID", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U1 ON LC.USER_ID = U1.ID"),
"SHARE_DEST" => Array("FIELD" => "LC.SHARE_DEST", "TYPE" => "string"),
);
if (array_key_exists("LOG_SITE_ID", $arFilter))
{
$arFields["LOG_SITE_ID"] = Array("FIELD" => "SLS.SITE_ID", "TYPE" => "string", "FROM" => "LEFT JOIN b_sonet_log_site SLS ON LC.LOG_ID = SLS.LOG_ID");
$strDistinct = " DISTINCT ";
foreach ($arSelectFields as $i => $strFieldTmp)
if ($strFieldTmp == "LOG_SITE_ID")
unset($arSelectFields[$i]);
foreach ($arOrder as $by => $order)
if (!in_array($by, $arSelectFields))
$arSelectFields[] = $by;
}
else
{
$arFields["LOG_SITE_ID"] = Array("FIELD" => "L.SITE_ID", "TYPE" => "string", "FROM" => "LEFT JOIN b_sonet_log L ON (LC.LOG_ID = L.ID)");
$strDistinct = " ";
}
$arFields["RATING_TYPE_ID"] = Array("FIELD" => "LC.RATING_TYPE_ID", "TYPE" => "string");
$arFields["RATING_ENTITY_ID"] = Array("FIELD" => "LC.RATING_ENTITY_ID", "TYPE" => "int");
$arFields["RATING_TOTAL_VALUE"] = Array("FIELD" => $DB->IsNull('RG.TOTAL_VALUE', '0'), "TYPE" => "double", "FROM" => "LEFT JOIN b_rating_voting RG ON LC.RATING_TYPE_ID = RG.ENTITY_TYPE_ID AND LC.RATING_ENTITY_ID = RG.ENTITY_ID");
$arFields["RATING_TOTAL_VOTES"] = Array("FIELD" => $DB->IsNull('RG.TOTAL_VOTES', '0'), "TYPE" => "double", "FROM" => "LEFT JOIN b_rating_voting RG ON LC.RATING_TYPE_ID = RG.ENTITY_TYPE_ID AND LC.RATING_ENTITY_ID = RG.ENTITY_ID");
$arFields["RATING_TOTAL_POSITIVE_VOTES"] = Array("FIELD" => $DB->IsNull('RG.TOTAL_POSITIVE_VOTES', '0'), "TYPE" => "int", "FROM" => "LEFT JOIN b_rating_voting RG ON LC.RATING_TYPE_ID = RG.ENTITY_TYPE_ID AND LC.RATING_ENTITY_ID = RG.ENTITY_ID");
$arFields["RATING_TOTAL_NEGATIVE_VOTES"] = Array("FIELD" => $DB->IsNull('RG.TOTAL_NEGATIVE_VOTES', '0'), "TYPE" => "int", "FROM" => "LEFT JOIN b_rating_voting RG ON LC.RATING_TYPE_ID = RG.ENTITY_TYPE_ID AND LC.RATING_ENTITY_ID = RG.ENTITY_ID");
if (isset($USER) && is_object($USER))
$arFields["RATING_USER_VOTE_VALUE"] = Array("FIELD" => $DB->IsNull('RV.VALUE', '0'), "TYPE" => "double", "FROM" => "LEFT JOIN b_rating_vote RV ON LC.RATING_TYPE_ID = RV.ENTITY_TYPE_ID AND LC.RATING_ENTITY_ID = RV.ENTITY_ID AND RV.USER_ID = ".intval($USER->GetId()));
if (array_key_exists("LOG_RIGHTS", $arFilter))
{
$Rights = array();
if(is_array($arFilter["LOG_RIGHTS"]))
{
foreach($arFilter["LOG_RIGHTS"] as $str)
if(trim($str))
$Rights[] = trim($str);
}
elseif(trim($arFilter["LOG_RIGHTS"]))
$Rights = trim($arFilter["LOG_RIGHTS"]);
unset($arFilter["LOG_RIGHTS"]);
if((is_array($Rights) && !empty($Rights)) || !is_array($Rights))
{
$arFilter["LOG_RIGHTS"] = $Rights;
$arFields["LOG_RIGHTS"] = Array("FIELD" => "SLR0.GROUP_CODE", "TYPE" => "string", "FROM" => "INNER JOIN b_sonet_log_right SLR0 ON LC.LOG_ID = SLR0.LOG_ID");
}
if(is_array($Rights) && count($Rights) > 1)
$strDistinct = " DISTINCT ";
}
$arFields = array_merge($arFields1, $arFields);
$arSqls = CSocNetGroup::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields, $obUserFieldsSql);
$strSqlUFFilter = '';
$r = $obUserFieldsSql->GetFilter();
if($r <> '')
$strSqlUFFilter = " (".$r.") ";
$arSqls["RIGHTS"] = "";
$arSqls["CRM_RIGHTS"] = "";
$arSqls["SUBSCRIBE"] = "";
if (
!empty($arParams)
&& array_key_exists("CHECK_RIGHTS", $arParams)
&& $arParams["CHECK_RIGHTS"] == "Y"
&& !array_key_exists("USER_ID", $arParams)
&& is_object($USER)
)
$arParams["USER_ID"] = $USER->GetID();
if (
!empty($arParams)
&& array_key_exists("USER_ID", $arParams)
)
$arParams["CHECK_RIGHTS"] = "Y";
if (
!empty($arParams)
&& array_key_exists("USE_SUBSCRIBE", $arParams)
&& $arParams["USE_SUBSCRIBE"] == "Y"
)
{
if (!array_key_exists("SUBSCRIBE_USER_ID", $arParams))
{
if (
array_key_exists("USER_ID", $arParams)
&& intval($arParams["USER_ID"]) > 0
)
$arParams["SUBSCRIBE_USER_ID"] = $arParams["USER_ID"];
else
$arParams["SUBSCRIBE_USER_ID"] = $USER->GetID();
}
if (!array_key_exists("MY_ENTITIES", $arParams))
{
foreach($arSocNetAllowedSubscribeEntityTypesDesc as $entity_type_tmp => $arEntityTypeTmp)
if (
array_key_exists("HAS_MY", $arEntityTypeTmp)
&& $arEntityTypeTmp["HAS_MY"] == "Y"
&& array_key_exists("CLASS_MY", $arEntityTypeTmp)
&& array_key_exists("METHOD_MY", $arEntityTypeTmp)
&& $arEntityTypeTmp["CLASS_MY"] <> ''
&& $arEntityTypeTmp["METHOD_MY"] <> ''
&& method_exists($arEntityTypeTmp["CLASS_MY"], $arEntityTypeTmp["METHOD_MY"])
)
$arMyEntities[$entity_type_tmp] = call_user_func(array($arEntityTypeTmp["CLASS_MY"], $arEntityTypeTmp["METHOD_MY"]));
$arParams["MY_ENTITIES"] = $arMyEntities;
}
}
if (
!empty($arParams)
&& array_key_exists("CHECK_RIGHTS", $arParams)
&& $arParams["CHECK_RIGHTS"] == "Y"
&& array_key_exists("USER_ID", $arParams)
)
{
$acc = new CAccess;
$acc->UpdateCodes();
$arSqls["RIGHTS"] = "EXISTS ( SELECT SLR.ID FROM b_sonet_log_right SLR
LEFT JOIN b_user_access UA ON (UA.ACCESS_CODE = SLR.GROUP_CODE AND UA.USER_ID = ".(is_object($USER)? intval($USER->GetID()): 0).")
WHERE LC.LOG_ID = SLR.LOG_ID AND (0=1 ".
(is_object($USER) && CSocNetUser::IsCurrentUserModuleAdmin() ? " OR SLR.GROUP_CODE = 'SA'" : "").
(is_object($USER) && $USER->IsAuthorized() ? " OR (SLR.GROUP_CODE = 'AU')" : "").
" OR (SLR.GROUP_CODE = 'G2')".
(is_object($USER) && $USER->IsAuthorized() ? " OR (UA.ACCESS_CODE = SLR.GROUP_CODE AND UA.USER_ID = ".$USER->GetID().")" : "")."))";
}
if (
!empty($arParams)
&& array_key_exists("CHECK_CRM_RIGHTS", $arParams)
&& $arParams["CHECK_CRM_RIGHTS"] == "Y"
&& array_key_exists("USER_ID", $arParams)
)
{
$arSqls["CRM_RIGHTS"] = "";
}
if (
($arParams["USE_SUBSCRIBE"] ?? '') == "Y"
&& intval($arParams["SUBSCRIBE_USER_ID"]) > 0
)
{
$arSqls["SUBSCRIBE"] = CSocNetLogEvents::GetSQL(
$arParams["SUBSCRIBE_USER_ID"],
(is_array($arParams["MY_ENTITIES"]) ? $arParams["MY_ENTITIES"] : array()),
$arParams["TRANSPORT"],
$arParams["VISIBLE"],
"LC"
);
}
$arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", $strDistinct, $arSqls["SELECT"]);
if (is_array($arGroupBy) && count($arGroupBy)==0)
{
$strSql =
"SELECT ".$arSqls["SELECT"]." ".
$obUserFieldsSql->GetSelect()." ".
"FROM b_sonet_log_comment LC ".
" ".$arSqls["FROM"]." ".
$obUserFieldsSql->GetJoin("LC.ID")." ";
$bWhereStarted = false;
if ($arSqls["WHERE"] <> '')
{
$strSql .= "WHERE ".$arSqls["WHERE"]." ".($arSqls["SUBSCRIBE"] <> '' ? "AND (".$arSqls["SUBSCRIBE"].") " : "");
$bWhereStarted = true;
}
elseif ($arSqls["SUBSCRIBE"] <> '')
{
$strSql .= "WHERE (".$arSqls["SUBSCRIBE"].") ";
$bWhereStarted = true;
}
if ($strSqlUFFilter <> '')
{
$strSql .= ($bWhereStarted ? " AND " : " WHERE ").$strSqlUFFilter." ";
$bWhereStarted = true;
}
if ($arSqls["RIGHTS"] <> '')
{
$strSql .= ($bWhereStarted ? " AND " : " WHERE ").$arSqls["RIGHTS"]." ";
$bWhereStarted = true;
}
if ($arSqls["CRM_RIGHTS"] <> '')
{
$strSql .= ($bWhereStarted ? " AND " : " WHERE ").$arSqls["CRM_RIGHTS"]." ";
$bWhereStarted = true;
}
if ($arSqls["GROUPBY"] <> '')
$strSql .= "GROUP BY ".$arSqls["GROUPBY"]." ";
//echo "!1!=".htmlspecialcharsbx($strSql)."
";
$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
if ($arRes = $dbRes->Fetch())
return $arRes["CNT"];
else
return false;
}
$strSql =
"SELECT ".$arSqls["SELECT"]." ".
$obUserFieldsSql->GetSelect()." ".
"FROM b_sonet_log_comment LC ".
" ".$arSqls["FROM"]." ".
$obUserFieldsSql->GetJoin("LC.ID")." ";
$bWhereStarted = false;
if ($arSqls["WHERE"] <> '')
{
$strSql .= "WHERE ".$arSqls["WHERE"]." ".($arSqls["SUBSCRIBE"] <> '' ? "AND (".$arSqls["SUBSCRIBE"].") " : "");
$bWhereStarted = true;
}
elseif ($arSqls["SUBSCRIBE"] <> '')
{
$strSql .= "WHERE (".$arSqls["SUBSCRIBE"].") ";
$bWhereStarted = true;
}
if ($strSqlUFFilter <> '')
{
$strSql .= ($bWhereStarted ? " AND " : " WHERE ").$strSqlUFFilter." ";
$bWhereStarted = true;
}
if ($arSqls["RIGHTS"] <> '')
{
$strSql .= ($bWhereStarted ? " AND " : " WHERE ").$arSqls["RIGHTS"]." ";
$bWhereStarted = true;
}
if ($arSqls["CRM_RIGHTS"] <> '')
{
$strSql .= ($bWhereStarted ? " AND " : " WHERE ").$arSqls["CRM_RIGHTS"]." ";
$bWhereStarted = true;
}
if ($arSqls["GROUPBY"] <> '')
$strSql .= "GROUP BY ".$arSqls["GROUPBY"]." ";
if ($arSqls["ORDERBY"] <> '')
$strSql .= "ORDER BY ".$arSqls["ORDERBY"]." ";
if (
is_array($arNavStartParams)
&& (int) ($arNavStartParams["nTopCount"] ?? 0) <= 0
)
{
$strSql_tmp =
"SELECT COUNT('x') as CNT ".
$obUserFieldsSql->GetSelect()." ".
"FROM b_sonet_log_comment LC ".
" ".$arSqls["FROM"]." ".
$obUserFieldsSql->GetJoin("LC.ID")." ";
$bWhereStarted = false;
if ($arSqls["WHERE"] <> '')
{
$strSql_tmp .= "WHERE ".$arSqls["WHERE"]." ".($arSqls["SUBSCRIBE"] <> '' ? "AND (".$arSqls["SUBSCRIBE"].") " : "");
$bWhereStarted = true;
}
elseif ($arSqls["SUBSCRIBE"] <> '')
{
$strSql_tmp .= "WHERE (".$arSqls["SUBSCRIBE"].") ";
$bWhereStarted = true;
}
if ($strSqlUFFilter <> '')
{
$strSql_tmp .= ($bWhereStarted ? " AND " : " WHERE ").$strSqlUFFilter." ";
$bWhereStarted = true;
}
if ($arSqls["RIGHTS"] <> '')
{
$strSql_tmp .= ($bWhereStarted ? " AND " : " WHERE ").$arSqls["RIGHTS"]." ";
$bWhereStarted = true;
}
if ($arSqls["CRM_RIGHTS"] <> '')
{
$strSql_tmp .= ($bWhereStarted ? " AND " : " WHERE ").$arSqls["CRM_RIGHTS"]." ";
$bWhereStarted = true;
}
if ($arSqls["GROUPBY"] <> '')
$strSql_tmp .= "GROUP BY ".$arSqls["GROUPBY"]." ";
//echo "!2.1!=".htmlspecialcharsbx($strSql_tmp)."
";
$dbRes = $DB->Query($strSql_tmp, false, "File: ".__FILE__."
Line: ".__LINE__);
$cnt = 0;
if ($arSqls["GROUPBY"] == '')
{
if ($arRes = $dbRes->Fetch())
$cnt = $arRes["CNT"];
}
else
{
// MYSQL only, ORACLE has another code
$cnt = $dbRes->SelectedRowsCount();
}
$dbRes = new CDBResult();
//echo "!2.2!=".htmlspecialcharsbx($strSql)."
";
$dbRes->SetUserFields($USER_FIELD_MANAGER->GetUserFields("SONET_COMMENT"));
$dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
}
else
{
if (is_array($arNavStartParams) && intval($arNavStartParams["nTopCount"]) > 0)
$strSql .= "LIMIT ".intval($arNavStartParams["nTopCount"]);
//echo "!3!=".htmlspecialcharsbx($strSql)."
";
$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
$dbRes->SetUserFields($USER_FIELD_MANAGER->GetUserFields("SONET_COMMENT"));
}
return $dbRes;
}