static function getListOld($params = [])
{
global $DB, $USER_FIELD_MANAGER;
$getUF = ($params['getUserfields'] ?? null) !== false;
$userId = (isset($params['userId']) && $params['userId']) ? (int)$params['userId'] : CCalendar::GetCurUserId();
$fetchSection = $params['fetchSection'] ?? null;
$arFilter = $params['arFilter'];
if ($getUF)
{
$obUserFieldsSql = new CUserTypeSQL();
$obUserFieldsSql->SetEntity("CALENDAR_EVENT", "CE.ID");
$obUserFieldsSql->SetSelect(array("UF_*"));
$obUserFieldsSql->SetFilter($arFilter);
}
if (($params['setDefaultLimit'] ?? null) !== false) // Deprecated
{
if (!isset($arFilter["FROM_LIMIT"])) // default 3 month back
{
$arFilter["FROM_LIMIT"] = CCalendar::Date(time() - 31 * 3 * 24 * 3600, false);
}
if (!isset($arFilter["TO_LIMIT"])) // default one year into the future
{
$arFilter["TO_LIMIT"] = CCalendar::Date(time() + 365 * 24 * 3600, false);
}
}
// Array('ID' => 'asc')
$arOrder = $params['arOrder'] ?? [];
$arFields = self::GetFields();
if (isset($arFilter["DELETED"]) && ($arFilter["DELETED"] === false))
{
unset($arFilter["DELETED"]);
}
elseif (!isset($arFilter["DELETED"]))
{
$arFilter["DELETED"] = "N";
}
$join = '';
if (is_array($arFilter))
{
$arSqlSearch = [];
$filter_keys = array_keys($arFilter);
for ($i = 0, $l = count($filter_keys); $i<$l; $i++)
{
$n = mb_strtoupper($filter_keys[$i]);
$val = $arFilter[$filter_keys[$i]];
if ((is_string($val) && $val == '') || (!is_array($val) && (string)$val === "NOT_REF"))
{
continue;
}
if ($n === 'FROM_LIMIT')
{
$ts = CCalendar::Timestamp($val, false);
if ($ts > 0)
{
$arSqlSearch[] = "CE.DATE_TO_TS_UTC>=" . $ts;
}
}
else if ($n === 'TO_LIMIT')
{
$ts = CCalendar::Timestamp($val, false);
if ($ts > 0)
{
$arSqlSearch[] = "CE.DATE_FROM_TS_UTC<=" . ($ts + 86399);
}
}
else if ($n === 'ID' || $n === 'PARENT_ID' || $n === 'RECURRENCE_ID')
{
if (is_array($val))
{
$val = array_map('intval', $val);
$arSqlSearch[] = 'CE.'.$n.' IN (''.implode('','', $val).'')';
}
else if ((int)$val > 0)
{
$arSqlSearch[] = 'CE.'.$n.'='.(int)$val;
}
}
elseif ($n === '>ID' && (int)$val > 0)
{
$arSqlSearch[] = "CE.ID > ". (int)$val;
}
elseif ($n === 'G_EVENT_ID')
{
$arSqlSearch[] = "CE.G_EVENT_ID = '". $DB->ForSql($val)."'";
}
elseif ($n === 'OWNER_ID')
{
if (is_array($val))
{
$val = array_map('intval', $val);
$arSqlSearch[] = 'CE.OWNER_ID IN (''.implode('','', $val).'')';
}
else if ((int)$val > 0)
{
$arSqlSearch[] = "CE.OWNER_ID=". (int)$val;
}
}
elseif ($n === 'MEETING_HOST')
{
if (is_array($val))
{
$val = array_map('intval', $val);
$arSqlSearch[] = 'CE.MEETING_HOST IN (''.implode('','', $val).'')';
}
else if ((int)$val > 0)
{
$arSqlSearch[] = "CE.MEETING_HOST=". (int)$val;
}
}
elseif ($n === 'NAME')
{
$arSqlSearch[] = "CE.NAME='".$DB->ForSql($val)."'";
}
elseif ($n === 'CAL_TYPE')
{
$arSqlSearch[] = "CE.CAL_TYPE='".$DB->ForSql($val)."'";
}
elseif ($n === 'CREATED_BY')
{
if (is_array($val))
{
$val = array_map('intval', $val);
$arSqlSearch[] = 'CE.CREATED_BY IN (''.implode('','', $val).'')';
}
else if ((int)$val > 0)
{
$arSqlSearch[] = "CE.CREATED_BY=". (int)$val;
}
}
elseif ($n === 'SECTION')
{
if (!is_array($val))
{
$val = [$val];
}
$q = "";
if (is_array($val))
{
$sval = '';
foreach($val as $sectid)
{
if ((int)$sectid > 0)
{
$sval .= (int)$sectid .',';
}
}
$sval = trim($sval, ' ,');
if ($sval)
{
if (Util::isSectionStructureConverted())
{
$q = count($val) === 1 ? 'CE.SECTION_ID='.$sval : 'CE.SECTION_ID in ('.$sval.')';
}
else
{
$q = 'CES.SECT_ID in ('.$sval.')';
}
}
}
if ($q !== "")
{
$arSqlSearch[] = $q;
}
}
elseif ($n === 'ACTIVE_SECTION' && $val === "Y")
{
$arSqlSearch[] = "CS.ACTIVE='Y'";
if (Util::isSectionStructureConverted())
{
$join .= 'LEFT JOIN b_calendar_section CS ON (CE.SECTION_ID=CS.ID)';
}
else
{
$join .= 'LEFT JOIN b_calendar_section CS ON (CES.SECT_ID=CS.ID)';
}
}
elseif ($n === 'DAV_XML_ID' && is_array($val))
{
$val = array_map(array($DB, 'ForSQL'), $val);
$arSqlSearch[] = 'CE.DAV_XML_ID IN (''.implode('','', $val).'')';
}
elseif ($n === 'DAV_XML_ID' && is_string($val))
{
$arSqlSearch[] = "CE.DAV_XML_ID='".$DB->ForSql($val)."'";
}
elseif ($n === '*SEARCHABLE_CONTENT') // Full text index match
{
$sqlWhere = new CSQLWhere();
$arSqlSearch[] = $sqlWhere->match('SEARCHABLE_CONTENT', $val, true);
}
elseif ($n === '*%SEARCHABLE_CONTENT') // partial full text match based on LIKE
{
$sqlWhere = new CSQLWhere();
$arSqlSearch[] = $sqlWhere->matchLike('SEARCHABLE_CONTENT', $val);
}
elseif (isset($arFields[$n]) && $arFields[$n]["FIELD_TYPE"] === 'date')
{
$arSqlSearch[] = $DB->DateToCharFunction("CE.".$n)."='".$DB->ForSql($val)."'";
}
elseif ($n === 'DELETED')
{
$arSqlSearch[] = "CE.DELETED='".$DB->ForSql($val)."'";
}
elseif (isset($arFields[$n]))
{
$arSqlSearch[] = GetFilterQuery($arFields[$n]["FIELD_NAME"], $val, 'N');
}
}
}
if ($getUF)
{
$r = $obUserFieldsSql->GetFilter();
if ($r !== '')
{
$arSqlSearch[] = "(".$r.")";
}
}
$selectList = "";
foreach($arFields as $fieldKey => $field)
{
if (
(
!isset($params['arSelect'])
|| !is_array($params['arSelect'])
|| in_array($fieldKey, $params['arSelect'])
)
&& $fieldKey !== 'SEARCHABLE_CONTENT')
{
$selectList .= $field['FIELD_NAME'].", ";
}
}
if ($fetchSection && $arFilter['ACTIVE_SECTION'] === 'Y')
{
$selectList .= "CS.CAL_DAV_CAL as SECTION_DAV_XML_ID,";
}
$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
$strOrderBy = '';
foreach($arOrder as $by=>$order)
{
if (isset($arFields[mb_strtoupper($by)]))
{
$strOrderBy .= $arFields[mb_strtoupper($by)]["FIELD_NAME"].' '.(mb_strtolower($order) === 'desc'?'desc':'asc').',';
}
}
if ($strOrderBy)
{
$strOrderBy = "ORDER BY ".rtrim($strOrderBy, ",");
}
$strLimit = '';
if (isset($params['limit']) && (int)$params['limit'] > 0)
{
$strLimit = 'LIMIT '. (int)$params['limit'];
}
if (Util::isSectionStructureConverted())
{
$strSql = "
SELECT ".
trim($selectList, ', ').
($getUF ? $obUserFieldsSql->GetSelect() : '')."
FROM
b_calendar_event CE
".$join."
".($getUF ? $obUserFieldsSql->GetJoin("CE.ID") : '')."
WHERE
$strSqlSearch
$strOrderBy
$strLimit";
}
else
{
$strSql = "
SELECT ".
$selectList.
"CES.SECT_ID, CES.REL
".($getUF ? $obUserFieldsSql->GetSelect() : '')."
FROM
b_calendar_event CE
LEFT JOIN b_calendar_event_sect CES ON (CE.ID=CES.EVENT_ID)
".$join."
".($getUF ? $obUserFieldsSql->GetJoin("CE.ID") : '')."
WHERE
$strSqlSearch
$strOrderBy
$strLimit";
}
$res = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
if ($getUF)
{
$res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("CALENDAR_EVENT"));
}
$parentMeetingIdList = [];
$eventList = [];
$involvedUsersIdList = [];
$defaultMeetingSection = false;
while($event = $res->Fetch())
{
if (empty($event['SECT_ID']) && !empty($event['SECTION_ID']))
{
$event['SECT_ID'] = $event['SECTION_ID'];
}
$event['IS_MEETING'] = (int)($event['IS_MEETING'] ?? 0) > 0;
if (!empty($event['NAME']))
{
$event['NAME'] = Emoji::decode($event['NAME']);
}
if (!empty($event['DESCRIPTION']))
{
$event['DESCRIPTION'] = Emoji::decode($event['DESCRIPTION']);
}
if (!empty($event['LOCATION']))
{
$event['LOCATION'] = Emoji::decode($event['LOCATION']);
}
if (
$event['IS_MEETING']
&& $event['CAL_TYPE'] === 'user'
&& (int)$event['OWNER_ID'] === $userId
&& !$event['SECT_ID']
)
{
if (!$defaultMeetingSection)
{
$defaultMeetingSection = CCalendar::GetMeetingSection($userId);
if (!$defaultMeetingSection || !CCalendarSect::GetById($defaultMeetingSection, false))
{
$sectRes = CCalendarSect::GetSectionForOwner($event['CAL_TYPE'], $userId);
$defaultMeetingSection = $sectRes['sectionId'];
}
}
if (!Util::isSectionStructureConverted())
{
self::ConnectEventToSection($event['ID'], $defaultMeetingSection);
}
$event['SECT_ID'] = $defaultMeetingSection;
$event['SECTION_ID'] = $defaultMeetingSection;
}
$eventList[] = $event;
if (!empty($event['IS_MEETING']) && CCalendar::IsIntranetEnabled())
{
$parentMeetingIdList[] = $event['PARENT_ID'];
}
$involvedUsersIdList[] = $event['CREATED_BY'];
}
return [$eventList, $parentMeetingIdList, $involvedUsersIdList];
}