• Модуль: controller
  • Путь к файлу: ~/bitrix/modules/controller/classes/mysql/controllermember.php
  • Класс: CControllerMember
  • Вызов: CControllerMember::UnregisterExpiredAgent
static function UnregisterExpiredAgent($id = false)
{
	global $DB;
	$handledMembers = array();

	if ($id > 0)
		$strAddWhere = 'AND M.ID = '.intval($id);
	else
		$strAddWhere = '';

	$rsTrialGroups = $DB->Query("SELECT ID FROM b_controller_group WHERE TRIAL_PERIOD > 0");
	$arTrialGroups = array();
	while ($arGroup = $rsTrialGroups->Fetch())
	{
		$arTrialGroups[] = $arGroup["ID"];
	}

	if ($arTrialGroups)
	{
		$strSql = "
			SELECT M.ID
			FROM b_controller_member M
			INNER JOIN b_controller_group G ON M.CONTROLLER_GROUP_ID = G.ID
			WHERE
				G.ID in (".implode(",", $arTrialGroups).")
				AND G.TRIAL_PERIOD > 0
				AND M.IN_GROUP_FROM < DATE_SUB(now(), INTERVAL G.TRIAL_PERIOD DAY)
				AND SITE_ACTIVE = 'Y'
				AND DISCONNECTED = 'N'
				".$strAddWhere."
		";

		$dbr = $DB->Query($strSql);
		while ($ar = $dbr->Fetch())
		{
			if ($id > 0)
			{
				CControllerMember::CloseMember($id, true);
				return true;
			}
			elseif (!isset($handledMembers[$ar["ID"]]))
			{
				$handledMembers[$ar["ID"]] = $ar["ID"];
				CControllerTask::Add(array(
					"TASK_ID" => "CLOSE_MEMBER",
					"CONTROLLER_MEMBER_ID" => $ar["ID"],
					"INIT_EXECUTE_PARAMS" => true,
				));
			}
		}
	}

	$strSql = "
		SELECT M.ID
		FROM b_controller_member M
		WHERE
			(DATE_ACTIVE_FROM IS NULL OR DATE_ACTIVE_FROM <= ".$DB->CurrentTimeFunction().")
			AND (DATE_ACTIVE_TO IS NULL OR DATE_ACTIVE_TO >= ".$DB->CurrentTimeFunction().")
			AND ACTIVE = 'Y'
			AND SITE_ACTIVE <> 'Y'
			AND DISCONNECTED = 'N'
			".$strAddWhere."
	";

	$dbr = $DB->Query($strSql);
	while ($ar = $dbr->Fetch())
	{
		if ($id > 0)
		{
			CControllerMember::CloseMember($id, false);
			return true;
		}
		elseif (!isset($handledMembers[$ar["ID"]]))
		{
			$handledMembers[$ar["ID"]] = $ar["ID"];
			CControllerTask::Add(array(
				"TASK_ID" => "CLOSE_MEMBER",
				"CONTROLLER_MEMBER_ID" => $ar["ID"],
				"INIT_EXECUTE_PARAMS" => false,
			));
		}
	}

	$strSql = "
		SELECT M.ID
		FROM b_controller_member M
		WHERE
			(
				DATE_ACTIVE_FROM > ".$DB->CurrentTimeFunction()."
				OR DATE_ACTIVE_TO < ".$DB->CurrentTimeFunction()."
				OR ACTIVE = 'N'
			)
			AND SITE_ACTIVE <> 'N'
			AND DISCONNECTED = 'N'
			".$strAddWhere."
	";

	$dbr = $DB->Query($strSql);
	while ($ar = $dbr->Fetch())
	{
		if ($id > 0)
		{
			CControllerMember::CloseMember($id, true);
			return true;
		}
		elseif (!isset($handledMembers[$ar["ID"]]))
		{
			$handledMembers[$ar["ID"]] = $ar["ID"];
			CControllerTask::Add(array(
				"TASK_ID" => "CLOSE_MEMBER",
				"CONTROLLER_MEMBER_ID" => $ar["ID"],
				"INIT_EXECUTE_PARAMS" => true,
			));
		}
	}

	if ($id > 0)
		return true;

	return "CControllerMember::UnregisterExpiredAgent();";
}