• Модуль: controller
  • Путь к файлу: ~/bitrix/modules/controller/classes/general/controllermember.php
  • Класс: CAllControllerMember
  • Вызов: CAllControllerMember::RegisterMemberByTicket
static function RegisterMemberByTicket($ar_member, $ticket_id, $session_id)
{
	/** @global CMain $APPLICATION */
	global $APPLICATION;

	if($ar_member["ID"]>0)
		$ID = $ar_member["ID"];
	else
		$ID = false;

	$member_id = $ar_member["MEMBER_ID"];

	if(!CControllerMember::CheckFields($ar_member, $ID))
		return false;

	$ar_member["MEMBER_ID"] = $member_id;

	$arParameters = Array(
		"controller_ticket_id"=>$ticket_id,
		"join_command" => '
			COption::SetOptionString("main", "controller_member", "Y");
			COption::SetOptionString("main", "controller_ticket", "");
			RegisterModuleDependences("main", "OnUserLoginExternal", "main", "CControllerClient", "OnExternalLogin", 1);
			RegisterModuleDependences("main", "OnExternalAuthList", "main", "CControllerClient", "OnExternalAuthList");
		',
		"disconnect_command" => '
			CControllerClient::RestoreAll();
			COption::SetOptionString("main", "controller_member", "N");
			COption::SetOptionString("main", "controller_member_id", "");
			COption::SetOptionString("main", "controller_url", "");
			UnRegisterModuleDependences("main", "OnUserLoginExternal", "main", "CControllerClient", "OnExternalLogin", 1);
			UnRegisterModuleDependences("main", "OnExternalAuthList", "main", "CControllerClient", "OnExternalAuthList");
		'
	);

	$oRequest = new CControllerServerRequestTo($ar_member, "register", $arParameters);
	if($session_id)
		$oRequest->session_id = $session_id;

	if(($oResponse = $oRequest->Send())==false)
		return false;

	$result = $oResponse->OK();

	if($result === false)
	{
		$e = new CApplicationException($oResponse->text);
		$APPLICATION->ThrowException($e);
		return false;
	}


	if($ID>0)
	{
		$ar_member["DISCONNECTED"] = "N";
		$ID = CControllerMember::Update($ID, $ar_member) ? $ID : false;
	}
	else
		$ID = CControllerMember::Add($ar_member);

	if($ID>0)
	{
		$arControllerLog = Array(
				'NAME'=>'REGISTRATION',
				'CONTROLLER_MEMBER_ID'=>$ID,
				'DESCRIPTION'=>GetMessage("CTRLR_MEM_LOG_DESC_JOIN_BY_TICKET2"),
				'STATUS'=>'Y'
			);

		CControllerLog::Add($arControllerLog);
		CControllerMember::SetGroupSettings($ID);

		if(!isset($ar_member["DISCONNECTED"]) || $ar_member["DISCONNECTED"]=="N")
		{
			// add join event
			CTimeZone::Disable();
			$db_res = CControllerMember::GetByID($ID);
			CTimeZone::Enable();

			if($arFields = $db_res->Fetch())
			{
				foreach (GetModuleEvents("controller", "OnAfterRegisterMemberByTicket", true) as $arEvent)
				{
					ExecuteModuleEventEx($arEvent, array(&$arFields));
				}

				CEvent::Send("CONTROLLER_MEMBER_REGISTER", SITE_ID, $arFields);
			}
		}

		return $ID;
	}

	return false;
}