• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_event.php
  • Класс: CCalendarEvent
  • Вызов: CCalendarEvent::getListOld
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]; }