- Модуль: support
- Путь к файлу: ~/bitrix/modules/support/classes/general/support.php
- Класс: CAllTicket
- Вызов: CAllTicket::GetFileList
static function GetFileList($by = 's_id', $order = 'asc', $arFilter = [], $checkRights = 'N')
{
$err_mess = (CAllTicket::err_mess())."
Function: GetFileList
Line: ";
global $DB, $USER;
$arSqlSearch = Array();
$strSqlSearch = "";
if (is_array($arFilter))
{
$filter_keys = array_keys($arFilter);
$filterKeysCount = count($filter_keys);
for ($i=0; $i<$filterKeysCount; $i++)
{
$key = $filter_keys[$i];
$val = $arFilter[$filter_keys[$i]];
if ((is_array($val) && count($val)<=0) || (!is_array($val) && ((string) $val == '' || $val==='NOT_REF')))
continue;
$match_value_set = (in_array($key."_EXACT_MATCH", $filter_keys)) ? true : false;
$key = strtoupper($key);
switch($key)
{
case "LINK_ID":
$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
$arSqlSearch[] = GetFilterQuery("MF.ID",$val,$match);
break;
case "MESSAGE":
case "TICKET_ID":
case "FILE_ID":
case "HASH":
case "MESSAGE_ID":
$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
$arSqlSearch[] = GetFilterQuery("MF.".$key,$val,$match);
break;
}
}
}
if ($by == "s_id") $strSqlOrder = "ORDER BY MF.ID";
elseif ($by == "s_file_id") $strSqlOrder = "ORDER BY F.ID";
elseif ($by == "s_message_id") $strSqlOrder = "ORDER BY MF.MESSAGE_ID";
else
{
$strSqlOrder = "ORDER BY MF.ID";
}
if ($order=="desc")
{
$strSqlOrder .= " desc ";
}
else
{
$strSqlOrder .= " asc ";
}
$messageJoin = '';
$ticketJoin = '';
if ($checkRights == 'Y')
{
$bAdmin = (CTicket::IsAdmin()) ? 'Y' : 'N';
$bSupportTeam = (CTicket::IsSupportTeam()) ? 'Y' : 'N';
$bSupportClient = (CTicket::IsSupportClient()) ? 'Y' : 'N';
$bDemo = (CTicket::IsDemo()) ? 'Y' : 'N';
$uid = intval($USER->GetID());
if ($bAdmin!='Y' && $bSupportTeam!='Y' && $bSupportClient!='Y' && $bDemo!='Y') return false;
if (!($bAdmin == 'Y' || $bDemo == 'Y'))
{
// a list of users who own or are responsible for tickets, which we can show to our current user
$ticketUsers = array($uid);
// check if user has groups
$result = $DB->Query('SELECT GROUP_ID FROM b_ticket_user_ugroup WHERE USER_ID = '.$uid.' AND CAN_VIEW_GROUP_MESSAGES = 'Y'');
if ($result)
{
// collect members of these groups
$uGroups = array();
while ($row = $result->Fetch())
{
$uGroups[] = $row['GROUP_ID'];
}
if (!empty($uGroups))
{
$result = $DB->Query('SELECT USER_ID FROM b_ticket_user_ugroup WHERE GROUP_ID IN ('.join(',', $uGroups).')');
if ($result)
{
while ($row = $result->Fetch())
{
$ticketUsers[] = $row['USER_ID'];
}
}
}
}
// build sql
$strSqlSearchUser = "";
if($bSupportTeam == 'Y')
{
$strSqlSearchUser = 'T.RESPONSIBLE_USER_ID IN ('.join(',', $ticketUsers).')';
}
elseif ($bSupportClient == 'Y')
{
$strSqlSearchUser = 'T.OWNER_USER_ID IN ('.join(',', $ticketUsers).')';
}
if ($strSqlSearchUser)
{
$ticketJoin = 'INNER JOIN b_ticket T ON (T.ID = MF.TICKET_ID)';
$arSqlSearch[] = $strSqlSearchUser;
}
}
if ($bSupportTeam!="Y" && $bAdmin!="Y" && $bDemo!='Y')
{
$messageJoin = 'INNER JOIN b_ticket_message M ON (M.ID = MF.MESSAGE_ID)';
$arSqlSearch[] = "M.IS_HIDDEN='N'";
$arSqlSearch[] = "M.IS_LOG='N'";
}
}
$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
$strSql = "
SELECT
F.*, ".$DB->DateToCharFunction("F.TIMESTAMP_X")." as TIMESTAMP_X,
MF.ID as LINK_ID,
MF.HASH,
MF.MESSAGE_ID,
MF.TICKET_ID,
MF.EXTENSION_SUFFIX
FROM
b_ticket_message_2_file MF
INNER JOIN b_file F ON (MF.FILE_ID = F.ID)
$ticketJoin
$messageJoin
WHERE
$strSqlSearch
$strSqlOrder
";
$res = $DB->Query($strSql, false, $err_mess.__LINE__);
return $res;
}