• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_sect.php
  • Класс: CCalendarSect
  • Вызов: CCalendarSect::getListOld
static function getListOld($params)
{
	global $DB;

	$filter = $params['arFilter'];
	$sort = $params['arOrder'] ?? ['SORT' => 'asc'];

	$arFields = self::GetFields();
	$arSqlSearch = [];
	if(is_array($filter))
	{
		$filterKeys = array_keys($filter);
		foreach ($filterKeys as $filterKey)
		{
			$n = mb_strtoupper($filterKey);
			$val = $filter[$filterKey] ?? '';
			if (($val === '') || $val === "NOT_REF")
			{
				continue;
			}

			if ($n === 'CAL_TYPE' && ($val === 'company_calendar' || $val === 'calendar_company'))
			{
				$arSqlSearch[] = 'CS.CAL_TYPE = '' . $val . '' AND CS.CAL_TYPE IS NOT NULL';
			}
			else if (
				$n === 'ID'
				|| $n === 'XML_ID'
				|| $n === 'OWNER_ID'
				|| $n === 'EXTERNAL_TYPE'
				// || $n === 'CAL_DAV_CON'
			)
			{
				if (is_array($val))
				{
					$val = array_map(array($DB, "ForSQL"), $val);
					$arSqlSearch[] = 'CS.'.$n.' IN (''.implode('','', $val).'')';
				}
				else
				{
					$arSqlSearch[] = GetFilterQuery("CS.".$n, $val, 'N');
				}
			}
			else if($n === '>ID' && (int)$val > 0)
			{
				$arSqlSearch[] = "CS.ID > ". (int)$val;
			}
			elseif($n === 'ACTIVE' && $val === "Y")
			{
				$arSqlSearch[] = "CS.ACTIVE = 'Y'";
			}
			elseif ($n === 'CAL_TYPE' && is_array($val))
			{
				$params['joinTypeInfo'] = true;
				$strType = "";
				foreach($val as $type)
				{
					$strType .= ",'" . $DB->ForSql($type) . "'";
				}
				$arSqlSearch[] = "CS.CAL_TYPE in (".trim($strType, ", ").")";
				$arSqlSearch[] = "CT.ACTIVE='Y'";
			}
			elseif(isset($arFields[$n]))
			{
				$arSqlSearch[] = GetFilterQuery(
					$arFields[$n]["FIELD_NAME"],
					$val,
					(isset($arFields[$n]["PROCENT"]) && $arFields[$n]["PROCENT"] === "N") ? "N" : "Y"
				);
			}
		}
	}

	$strOrderBy = '';
	foreach($sort as $by => $order)
	{
		if(isset($arFields[mb_strtoupper($by)]))
		{
			$byName = $arFields[mb_strtoupper($by)]["~FIELD_NAME"]
				?? $arFields[mb_strtoupper($by)]["FIELD_NAME"]
			;
			$strOrderBy .= $byName.' '.(mb_strtolower($order) === 'desc'?'desc':'asc').',';
		}
	}

	if($strOrderBy)
	{
		$strOrderBy = "ORDER BY ".rtrim($strOrderBy, ",");
	}

	$strSqlSearch = GetFilterSqlSearch($arSqlSearch);

	if (!empty($filter['ADDITIONAL_IDS'] && is_array($filter['ADDITIONAL_IDS'])))
	{
		$strTypes = "";
		foreach($filter['ADDITIONAL_IDS'] as $adid)
		{
			$strTypes .= ",". (int)$adid;
		}
		$strSqlSearch = '('.$strSqlSearch.') OR ID in('.trim($strTypes, ', ').')';
	}

	$strLimit = '';
	if (isset($params['limit']) && (int)$params['limit'] > 0)
	{
		$strLimit = 'LIMIT '. (int)$params['limit'];
	}

	$select = 'CS.*';
	$from = 'b_calendar_section CS';

	// Fetch types info into selection
	if ($params['joinTypeInfo'])
	{
		$select .= ", CT.NAME AS TYPE_NAME, CT.DESCRIPTION AS TYPE_DESC";
		$from .= "n INNER JOIN b_calendar_type CT ON (CS.CAL_TYPE=CT.XML_ID)";
	}

	if ($params['getPermissions'])
	{
		$select .= ", CAP.ACCESS_CODE, CAP.TASK_ID";
		$from .= "n LEFT JOIN b_calendar_access CAP ON (CS.ID=CAP.SECT_ID)";
	}

	$strSql = "
			SELECT
				$select
			FROM
				$from
			WHERE
				$strSqlSearch
			$strOrderBy
			$strLimit";

	$result = [];
	$res = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); while ($sect = $res->Fetch()) { $result[] = $sect; } return $result; }