%PDF- %PDF-
Direktori : /proc/self/root/home/bitrix/www/bitrix/modules/controller/classes/general/ |
Current File : //proc/self/root/home/bitrix/www/bitrix/modules/controller/classes/general/controllermember.php |
<? IncludeModuleLangFile(__FILE__); class CAllControllerMember { /******************************* Public methods ************************************/ public static function CheckMember($member_id, $member_url = false) { /** @global CMain $APPLICATION */ global $APPLICATION; $dbr_member = CControllerMember::GetById($member_id); $ar_member = $dbr_member->Fetch(); if (!$ar_member) { $e = new CApplicationException(GetMessage("CTRLR_MEM_ERR1")." ".htmlspecialcharsex($member_id)); $APPLICATION->ThrowException($e); return false; } $oRequest = new CControllerServerRequestTo($ar_member, "ping"); $oResponse = $oRequest->Send(); if ($oResponse !== false) { return $oResponse->OK(); } return false; } public static function RunCommandRedirect($member_id, $command, $arParameters = Array(), $log = true) { if(!($arMember = CControllerMember::GetMember($member_id))) return false; $command_id = CControllerMember::AddCommand($arMember["MEMBER_ID"], $command, $arParameters, false); $arVars = Array("command_id"=>$command_id); $oRequest = new CControllerServerRequestTo($arMember, "run", $arVars); if($log) { $arControllerLog = Array( 'NAME'=>'REMOTE_COMMAND', 'CONTROLLER_MEMBER_ID'=>$member_id, 'DESCRIPTION'=>GetMessage("CTRLR_MEM_LOG_DESC_COMMAND").$command, 'STATUS'=>'Y' ); CControllerLog::Add($arControllerLog); } $oRequest->RedirectRequest($arMember["URL"]."/bitrix/admin/main_controller.php"); return true; } public static function RunCommandWithLog($member_id, $command, $arParameters = Array(), $task_id=false, $operation = 'run') { /** @global CMain $APPLICATION */ global $APPLICATION; $arControllerLog = Array( 'NAME'=>'REMOTE_COMMAND', 'CONTROLLER_MEMBER_ID'=>$member_id, 'DESCRIPTION'=>"command: '$command'\n\noperation: '$operation'", 'STATUS'=>'Y' ); $res = CControllerMember::RunCommand($member_id, $command, $arParameters, $task_id, $operation); if($res === false) { $e = $APPLICATION->GetException(); $arControllerLog['DESCRIPTION'] = $e->GetString()."\r\n".$arControllerLog['DESCRIPTION']; $arControllerLog['STATUS'] = 'N'; } CControllerLog::Add($arControllerLog); return $res; } public static function RunCommand($member_id, $command, $arParameters = Array(), $task_id=false, $operation = 'run') { /** @global CMain $APPLICATION */ global $APPLICATION; global $DB; if(!($arMember = CControllerMember::GetMember($member_id))) return false; if($operation == "run_immediate") { $arVars = array("command"=>$command); } else { $command_id = CControllerMember::AddCommand($arMember["MEMBER_ID"], $command, $arParameters, $task_id); if($command_id !== false) $arVars = array("command_id" => $command_id); else $arVars = array(); } if(empty($arVars)) { if(strlen($DB->GetErrorMessage()) > 0) $e = new CApplicationException(GetMessage("CTRLR_MEM_ERR3")." ".$DB->GetErrorMessage()); else $e = new CApplicationException(GetMessage("CTRLR_MEM_ERR2")); $APPLICATION->ThrowException($e); return false; } $oRequest = new CControllerServerRequestTo($arMember, $operation, $arVars); /*@var $oResponse CControllerServerResponseFrom*/ if(($oResponse = $oRequest->Send())===false) return false; if(!$oResponse->Check()) { $e = new CApplicationException(GetMessage("CTRLR_MEM_ERR2")); $APPLICATION->ThrowException($e); return false; } if($oResponse->OK() || preg_match("/^(STP0|FIN)/", $oResponse->text)) return $oResponse->text; $str = strlen($oResponse->text)? $oResponse->text: $oResponse->status; $e = new CApplicationException(GetMessage("CTRLR_MEM_ERR3")." ".$str); $APPLICATION->ThrowException($e); return false; } public static function SendFileWithLog($member_id, $file) { /** @global CMain $APPLICATION */ global $APPLICATION; $arControllerLog = array( 'NAME' => 'SEND_FILE', 'CONTROLLER_MEMBER_ID' => $member_id, 'DESCRIPTION' => "sendfile", 'STATUS' => 'Y', ); $res = CControllerMember::SendFile(); if ($res === false) { $e = $APPLICATION->GetException(); $arControllerLog['DESCRIPTION'] = $e->GetString()."\n".$arControllerLog['DESCRIPTION']; $arControllerLog['STATUS'] = 'N'; } CControllerLog::Add($arControllerLog); return $res; } public static function SendFile() { return false; } public static function UpdateCounters($member_id, $task_id = false) { /** @global CMain $APPLICATION */ global $APPLICATION; global $DB; $member_id = intval($member_id); $arMember = CControllerMember::GetMember($member_id); if(!$arMember) { $e = new CApplicationException("Member #".$member_id." is not found."); $APPLICATION->ThrowException($e); return false; } $dbr_group = CControllerGroup::GetList(array(), array("=ID" => $arMember["CONTROLLER_GROUP_ID"]), array("UF_*")); if(!$ar_group = $dbr_group->Fetch()) { $e = new CApplicationException("Group #".$arMember["CONTROLLER_GROUP_ID"]." is not found."); $APPLICATION->ThrowException($e); return false; } $strCommand = '$arResult = array("DATE_FORMAT" => CSite::GetDateFormat());'; if($ar_group["CHECK_COUNTER_FREE_SPACE"] == "Y") $strCommand .= "\n".'$quota = new CDiskQuota(); $disk_quota = $quota->GetDiskQuota(); if(is_bool($disk_quota))$arResult["COUNTER_FREE_SPACE"] = -1; else $arResult["COUNTER_FREE_SPACE"] = round($disk_quota/1024, 2);'; if($ar_group["CHECK_COUNTER_SITES"] == "Y") $strCommand .= "\n".'$dbr = CSite::GetList(($by="sort"), ($order="asc"), array("ACTIVE"=>Y)); $arResult["COUNTER_SITES"] = $dbr->SelectedRowsCount();'; if($ar_group["CHECK_COUNTER_USERS"] == "Y") $strCommand .= "\n".'$dbr = $GLOBALS["DB"]->Query("SELECT COUNT(1) as USER_COUNT FROM b_user U WHERE (U.EXTERNAL_AUTH_ID IS NULL OR U.EXTERNAL_AUTH_ID=\'\')"); $ar = $dbr->Fetch(); $arResult["COUNTER_USERS"] = $ar["USER_COUNT"];'; if($ar_group["CHECK_COUNTER_LAST_AUTH"] == "Y") $strCommand .= "\n".'$dbr = $GLOBALS["DB"]->Query("SELECT MAX(U.LAST_LOGIN) as LAST_LOGIN FROM b_user U"); $ar = $dbr->Fetch(); $arResult["COUNTER_LAST_AUTH"] = $ar["LAST_LOGIN"];'; $rsCounters = CControllerCounter::GetMemberCounters($member_id); while($arCounter = $rsCounters->Fetch()) $strCommand .= "\n".'$arResult['.$arCounter['ID'].'] = eval("'.EscapePHPString($arCounter["COMMAND"]).'");'; $strCommand .= "\n".'foreach($arResult as $k=>$v) echo urlencode($k),"=",urlencode($v),"&";'; foreach(GetModuleEvents("controller", "OnBeforeUpdateCounters", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($arMember, $ar_group, &$strCommand)); } $command_result = CControllerMember::RunCommand($member_id, $strCommand, array(), $task_id, 'run_immediate'); if($command_result===false) { $e = $APPLICATION->GetException(); if(!is_object($e)) { $e = new CApplicationException("Command execution error."); $APPLICATION->ThrowException($e); } return false; } $ar_command_result = array(); parse_str($command_result, $ar_command_result); //Try to guess encoding and convert to controller site charset foreach($ar_command_result as $k => $v) $ar_command_result[$k] = CUtil::ConvertToLangCharset($v); $arFields = array( "TIMESTAMP" => $arMember["TIMESTAMP_X"], "~COUNTERS_UPDATED" => $DB->CurrentTimeFunction(), ); if(array_key_exists('COUNTER_FREE_SPACE', $ar_command_result)) $arFields['COUNTER_FREE_SPACE'] = intval($ar_command_result['COUNTER_FREE_SPACE']); if(array_key_exists('COUNTER_SITES', $ar_command_result)) $arFields['COUNTER_SITES'] = intval($ar_command_result['COUNTER_SITES']); if(array_key_exists('COUNTER_USERS', $ar_command_result)) $arFields['COUNTER_USERS'] = intval($ar_command_result['COUNTER_USERS']); if(array_key_exists('COUNTER_LAST_AUTH', $ar_command_result)) $arFields['COUNTER_LAST_AUTH'] = $DB->FormatDate($ar_command_result['COUNTER_LAST_AUTH'], 'YYYY-MM-DD HH:MI:SS', CSite::GetDateFormat()); if(!CControllerMember::Update($member_id, $arFields)) { $e = $APPLICATION->GetException(); $e = new CApplicationException(GetMessage("CTRLR_MEM_COUNTERS_ERR1").$e->GetString()); $APPLICATION->ThrowException($e); return false; } CControllerCounter::UpdateMemberValues($member_id, $ar_command_result); return $arFields; } public static function SetGroupSettings($member_id, $task_id = false) { /** @global CMain $APPLICATION */ global $APPLICATION; if(!($arMember = CControllerMember::GetMember($member_id))) return false; $arControllerLog = Array( 'NAME'=>'SET_SETTINGS', 'CONTROLLER_MEMBER_ID'=>$arMember['ID'], 'DESCRIPTION'=>GetMessage("CTRLR_MEM_LOG_DESC_GROUP").' '.$arMember["CONTROLLER_GROUP_ID"], 'STATUS'=>'Y' ); $result = false; if($strCommand = CControllerGroup::GetGroupSettings($arMember["CONTROLLER_GROUP_ID"])) { $dbr_group = CControllerGroup::GetList(array(), array("=ID" => $arMember["CONTROLLER_GROUP_ID"]), array("UF_*")); if($ar_group = $dbr_group->Fetch()) { if($ar_group["TRIAL_PERIOD"]>0 && $arMember["IN_GROUP_FROM"]) { $tFrom = MakeTimeStamp($arMember["IN_GROUP_FROM"], FORMAT_DATE); $tTo = $tFrom + $ar_group["TRIAL_PERIOD"]*24*60*60 - 1; $strCommand .= "\r\nCOption::SetOptionString('main', '~controller_trial', '".$tTo."');"; } else $strCommand .= "\r\nCOption::RemoveOption('main', '~controller_trial');"; } foreach(GetModuleEvents("controller", "OnBeforeSetGroupSettings", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($arMember, $ar_group, &$strCommand)); } $result = CControllerMember::RunCommand($member_id, $strCommand, array(), $task_id, 'run_immediate'); } else { $e = new CApplicationException(GetMessage("CTRLR_MEM_ERR4")." ".$arMember["CONTROLLER_GROUP_ID"]); $APPLICATION->ThrowException($e); } if($task_id === false) { if($result === false) { $e = $APPLICATION->GetException(); $arControllerLog['DESCRIPTION'] = $e->GetString(); $arControllerLog['STATUS'] = 'N'; } CControllerLog::Add($arControllerLog); } return $result; } public static function RemoveGroupSettings($member_id) { return true; } public static function addHistoryNote($CONTROLLER_MEMBER_ID, $strNote) { global $DB, $USER; if(is_object($USER)) $USER_ID = $USER->GetID(); else $USER_ID = 1; $DB->Add("b_controller_member_log", array( "CONTROLLER_MEMBER_ID" => $CONTROLLER_MEMBER_ID, "USER_ID" => $USER_ID, "~CREATED_DATE" => $DB->CurrentTimeFunction(), "FIELD" => "NOTE", "NOTES" => $strNote, ), array("NOTES")); } public static function logChanges($CONTROLLER_MEMBER_ID, $arFieldsOld, $arFieldsNew, $strNote) { global $DB, $USER; static $arFieldsToLog = array("CONTROLLER_GROUP_ID", "SITE_ACTIVE", "NAME"); if(is_object($USER)) $USER_ID = $USER->GetID(); else $USER_ID = 1; foreach($arFieldsToLog as $FIELD) { if( isset($arFieldsOld[$FIELD]) && isset($arFieldsNew[$FIELD]) && $arFieldsOld[$FIELD] != $arFieldsNew[$FIELD] ) $DB->Add("b_controller_member_log", array( "CONTROLLER_MEMBER_ID" => $CONTROLLER_MEMBER_ID, "USER_ID" => $USER_ID, "~CREATED_DATE" => $DB->CurrentTimeFunction(), "FIELD" => $FIELD, "FROM_VALUE" => $arFieldsOld[$FIELD], "TO_VALUE" => $arFieldsNew[$FIELD], "NOTES" => $strNote, ), array("FROM_VALUE", "TO_VALUE", "NOTES")); } } public static function GetLog($arFilter) { global $DB; $obQueryWhere = new CSQLWhere; $arFields = array( "CONTROLLER_MEMBER_ID" => array( "TABLE_ALIAS" => "l", "FIELD_NAME" => "l.CONTROLLER_MEMBER_ID", "FIELD_TYPE" => "int", "JOIN" => false, ), "FIELD" => array( "TABLE_ALIAS" => "l", "FIELD_NAME" => "l.FIELD", "FIELD_TYPE" => "string", "JOIN" => false, ), ); $obQueryWhere->SetFields($arFields); if(!is_array($arFilter)) $arFilter = array(); $strQueryWhere = $obQueryWhere->GetQuery($arFilter); $strSql = " SELECT l.* ,".$DB->DateToCharFunction("l.CREATED_DATE", "FULL")." CREATED_DATE ,".$DB->Concat("'('", "U.LOGIN", "') '", "U.NAME", "' '", "U.LAST_NAME")." USER_ID_USER FROM b_controller_member_log l LEFT JOIN b_user U ON U.ID = l.USER_ID "; if($strQueryWhere) { $strSql .= " WHERE ".$strQueryWhere." "; } $strSql .= " ORDER BY l.ID DESC "; return $DB->Query($strSql); } public static function Add($arFields) { /** @global CUserTypeManager $USER_FIELD_MANAGER */ global $USER_FIELD_MANAGER; /** @global CDatabase $DB */ global $DB; if(!CControllerMember::CheckFields($arFields)) return false; if(!$USER_FIELD_MANAGER->CheckFields("CONTROLLER_MEMBER", 0, $arFields)) return false; $arFields["SITE_ACTIVE"] = "X"; unset($arFields["TIMESTAMP_X"]); unset($arFields["~TIMESTAMP_X"]); $ID = $DB->Add("b_controller_member", $arFields, array("NOTES")); $USER_FIELD_MANAGER->Update("CONTROLLER_MEMBER", $ID, $arFields); CControllerMember::UnregisterExpiredAgent($ID); return $ID; } public static function Update($ID, $arFields, $strNote = "") { /** @global CUserTypeManager $USER_FIELD_MANAGER */ global $USER_FIELD_MANAGER; /** @global CDatabase $DB */ global $DB; $dbr_m = CControllerMember::GetByID($ID); $ar_m = $dbr_m->Fetch(); if(!CControllerMember::CheckFields($arFields, $ID)) return false; if(!$USER_FIELD_MANAGER->CheckFields("CONTROLLER_MEMBER", $ID, $arFields)) return false; if( isset($arFields["CONTROLLER_GROUP_ID"]) && $ar_m["CONTROLLER_GROUP_ID"] != $arFields["CONTROLLER_GROUP_ID"] && !isset($arFields["IN_GROUP_FROM"]) ) $arFields["~IN_GROUP_FROM"] = $DB->CurrentTimeFunction(); unset($arFields["TIMESTAMP_X"]); if(array_key_exists("TIMESTAMP", $arFields)) $arFields["~TIMESTAMP_X"] = $DB->CharToDateFunction($arFields["TIMESTAMP"]); else $arFields["~TIMESTAMP_X"] = $DB->CurrentTimeFunction(); $arUpdateBinds = array(); $strUpdate = $DB->PrepareUpdateBind("b_controller_member", $arFields, "", false, $arUpdateBinds); $strSql = "UPDATE b_controller_member SET ".$strUpdate." WHERE ID=".intval($ID); $arBinds = array(); foreach($arUpdateBinds as $field_id) $arBinds[$field_id] = $arFields[$field_id]; $DB->QueryBind($strSql, $arBinds); $dbr_m = CControllerMember::GetByID($ID); $ar_n = $dbr_m->Fetch(); CControllerMember::logChanges($ID, $ar_m, $ar_n, $strNote); $USER_FIELD_MANAGER->Update("CONTROLLER_MEMBER", $ID, $arFields); if( isset($arFields["CONTROLLER_GROUP_ID"]) && $ar_m["CONTROLLER_GROUP_ID"] != $arFields["CONTROLLER_GROUP_ID"] ) { CControllerMember::SetGroupSettings($ID); } if( isset($arFields["ACTIVE"]) && $ar_m["ACTIVE"] != $arFields["ACTIVE"] || isset($arFields["DATE_ACTIVE_FROM"]) && $ar_m["DATE_ACTIVE_FROM"] != $arFields["DATE_ACTIVE_FROM"] || isset($arFields["DATE_ACTIVE_TO"]) && $ar_m["DATE_ACTIVE_TO"] != $arFields["DATE_ACTIVE_TO"] ) { CControllerMember::UnregisterExpiredAgent($ID); } return true; } public static function Delete($ID) { global $DB, $USER_FIELD_MANAGER; $ID = intval($ID); $USER_FIELD_MANAGER->Delete("CONTROLLER_MEMBER", $ID); $DB->Query("DELETE FROM b_controller_log WHERE CONTROLLER_MEMBER_ID = ".$ID); $DB->Query("DELETE FROM b_controller_task WHERE CONTROLLER_MEMBER_ID = ".$ID); $DB->Query("DELETE FROM b_controller_counter_value WHERE CONTROLLER_MEMBER_ID = ".$ID); $DB->Query("DELETE FROM b_controller_member_log WHERE CONTROLLER_MEMBER_ID = ".$ID); $DB->Query("DELETE FROM b_controller_member WHERE ID = ".$ID); return true; } public static function GetList($arOrder = array(), $arFilter = array(), $arSelect = array(), $arOptions = array(), $arNavParams = false) { global $DB, $USER_FIELD_MANAGER; $bEmptySelect = !is_array($arSelect) || empty($arSelect); if(is_array($arOrder) && is_array($arSelect)) foreach($arOrder as $k => $v) $arSelect[] = $k; $obUserFieldsSql = new CUserTypeSQL; $obUserFieldsSql->SetEntity("CONTROLLER_MEMBER", "M.ID"); $obUserFieldsSql->SetSelect($arSelect); $obUserFieldsSql->SetFilter($arFilter); $obUserFieldsSql->SetOrder($arOrder); static $arFields = array( "ID" => array( "FIELD_NAME" => "M.ID", "FIELD_TYPE" => "int", ), "MEMBER_ID" => array( "FIELD_NAME" => "M.MEMBER_ID", "FIELD_TYPE" => "string", ), "SECRET_ID" => array( "FIELD_NAME" => "M.SECRET_ID", "FIELD_TYPE" => "string", ), "NAME" => array( "FIELD_NAME" => "M.NAME", "FIELD_TYPE" => "string", ), "EMAIL" => array( "FIELD_NAME" => "M.EMAIL", "FIELD_TYPE" => "string", ), "CONTACT_PERSON" => array( "FIELD_NAME" => "M.CONTACT_PERSON", "FIELD_TYPE" => "string", ), "URL" => array( "FIELD_NAME" => "M.URL", "FIELD_TYPE" => "string", ), "CONTROLLER_GROUP_ID" => array( "FIELD_NAME" => "M.CONTROLLER_GROUP_ID", "FIELD_TYPE" => "int", ), "CONTROLLER_GROUP_NAME" => array( "FIELD_NAME" => "G.NAME", "FIELD_TYPE" => "string", "TABLE_ALIAS" => "G", "JOIN" => "INNER JOIN b_controller_group G ON G.ID = M.CONTROLLER_GROUP_ID", "LEFT_JOIN" => "LEFT JOIN b_controller_group G ON G.ID = M.CONTROLLER_GROUP_ID", ), "IN_GROUP_FROM" => array( "FIELD_NAME" => "M.IN_GROUP_FROM", "FIELD_TYPE" => "datetime", "FORMAT" => "FULL", ), "SHARED_KERNEL" => array( "FIELD_NAME" => "M.SHARED_KERNEL", "FIELD_TYPE" => "string", ), "ACTIVE" => array( "FIELD_NAME" => "M.ACTIVE", "FIELD_TYPE" => "string", ), "SITE_ACTIVE" => array( "FIELD_NAME" => "M.SITE_ACTIVE", "FIELD_TYPE" => "string", ), "DISCONNECTED" => array( "FIELD_NAME" => "M.DISCONNECTED", "FIELD_TYPE" => "string", ), "DATE_ACTIVE_FROM" => array( "FIELD_NAME" => "M.DATE_ACTIVE_FROM", "FIELD_TYPE" => "datetime", "FORMAT" => "SHORT", ), "DATE_ACTIVE_TO" => array( "FIELD_NAME" => "M.DATE_ACTIVE_TO", "FIELD_TYPE" => "datetime", "FORMAT" => "SHORT", ), "TIMESTAMP_X" => array( "FIELD_NAME" => "M.TIMESTAMP_X", "FIELD_TYPE" => "datetime", "FORMAT" => "FULL", ), "MODIFIED_BY" => array( "FIELD_NAME" => "M.MODIFIED_BY", "FIELD_TYPE" => "int", ), "MODIFIED_BY_USER" => array( "FIELD_TYPE" => "string", ), "DATE_CREATE" => array( "FIELD_NAME" => "M.DATE_CREATE", "FIELD_TYPE" => "datetime", "FORMAT" => "FULL", ), "CREATED_BY" => array( "FIELD_NAME" => "M.CREATED_BY", "FIELD_TYPE" => "int", ), "CREATED_BY_USER" => array( "FIELD_TYPE" => "string", ), "COUNTER_FREE_SPACE" => array( "FIELD_NAME" => "M.COUNTER_FREE_SPACE", "FIELD_TYPE" => "int", ), "COUNTER_SITES" => array( "FIELD_NAME" => "M.COUNTER_SITES", "FIELD_TYPE" => "int", ), "COUNTER_USERS" => array( "FIELD_NAME" => "M.COUNTER_USERS", "FIELD_TYPE" => "int", ), "COUNTER_LAST_AUTH" => array( "FIELD_NAME" => "M.COUNTER_LAST_AUTH", "FIELD_TYPE" => "datetime", "FORMAT" => "FULL", ), "COUNTERS_UPDATED" => array( "FIELD_NAME" => "M.COUNTERS_UPDATED", "FIELD_TYPE" => "datetime", "FORMAT" => "FULL", ), "NOTES" => array( "FIELD_NAME" => "M.NOTES", ), "HOSTNAME" => array( "FIELD_NAME" => "M.HOSTNAME", "FIELD_TYPE" => "string", ), ); $arFields["MODIFIED_BY_USER"]["FIELD_NAME"] = $DB->Concat("'('", "UM.LOGIN", "') '", "UM.NAME", "' '", "UM.LAST_NAME"); $arFields["CREATED_BY_USER"]["FIELD_NAME"] = $DB->Concat("'('", "UC.LOGIN", "') '", "UC.NAME", "' '", "UC.LAST_NAME"); $rsCounters = CControllerCounter::GetList(); while($arCounter = $rsCounters->Fetch()) { $arFields["COUNTER_".$arCounter["ID"]] = array( "FIELD_NAME" => "CCV_".$arCounter["ID"].".".CControllerCounter::GetTypeColumn($arCounter["COUNTER_TYPE"]), "FIELD_TYPE" => CControllerCounter::GetTypeUserType($arCounter["COUNTER_TYPE"]), "TABLE_ALIAS" => "CCV_".$arCounter["ID"], "JOIN" => "INNER JOIN b_controller_counter_value CCV_".$arCounter["ID"]." ON CCV_".$arCounter["ID"].".CONTROLLER_COUNTER_ID = ".$arCounter["ID"]." AND CCV_".$arCounter["ID"].".CONTROLLER_MEMBER_ID = M.ID", "LEFT_JOIN" => "LEFT JOIN b_controller_counter_value CCV_".$arCounter["ID"]." ON CCV_".$arCounter["ID"].".CONTROLLER_COUNTER_ID = ".$arCounter["ID"]." AND CCV_".$arCounter["ID"].".CONTROLLER_MEMBER_ID = M.ID", ); } $obWhere = new CSQLWhere; $obWhere->SetFields($arFields); $obWhereCnt = new CSQLWhere; $obWhereCnt->SetFields($arFields); $arDateFields = array(); foreach($arFields as $code => $arField) if($arField["FIELD_TYPE"] == "datetime") $arDateFields[] = $code; $date_field = "/(".implode("|", $arDateFields).")\$/"; $arFilterNew = array(); if(is_array($arFilter)) { foreach($arFilter as $k => $value) { if(is_array($value)) { if(!empty($value)) $arFilterNew[$k] = $value; } elseif($value === false) { $arFilterNew[$k] = $value; } elseif(strlen($value) > 0) { if(array_key_exists("date_format", $arOptions) && preg_match($date_field, $k)) $arFilterNew[$k] = ConvertTimeStamp(MakeTimeStamp($value, $arOptions["date_format"]), "FULL"); else $arFilterNew[$k] = $value; } } } $strWhere = "1 = 1"; $r = $obWhereCnt->GetQuery($arFilterNew); $r = $obWhere->GetQuery($arFilterNew); if(strlen($r) > 0) $strWhere .= " AND (".$r.") "; $userFieldsWhere = $obUserFieldsSql->GetFilter(); if($userFieldsWhere) $strWhere .= " AND (".$userFieldsWhere.") "; if(is_array($arOrder)) { foreach($arOrder as $key => $value) { $key = strtoupper($key); if(array_key_exists($key, $arFields) && isset($arFields[$key]["LEFT_JOIN"])) $obWhere->c_joins[$key]++; } } if($bEmptySelect) { $arSelectAdd = array( "ID", "MEMBER_ID", "SECRET_ID", "NAME", "URL", "HOSTNAME", "EMAIL", "CONTACT_PERSON", "CONTROLLER_GROUP_ID", "DISCONNECTED", "SHARED_KERNEL", "ACTIVE", "DATE_ACTIVE_FROM", "DATE_ACTIVE_TO", "SITE_ACTIVE", "TIMESTAMP_X", "MODIFIED_BY", "DATE_CREATE", "CREATED_BY", "IN_GROUP_FROM", "NOTES", "COUNTER_FREE_SPACE", "COUNTER_SITES", "COUNTER_USERS", "COUNTER_LAST_AUTH", "COUNTERS_UPDATED", "MODIFIED_BY_USER", "CREATED_BY_USER", ); if(is_array($arSelect)) $arSelect = array_merge($arSelect, $arSelectAdd); else $arSelect = $arSelectAdd; } $duplicates = array("ID" => 1); $strSelect = "M.ID AS ID\n"; foreach($arSelect as $key) { $key = strtoupper($key); if(array_key_exists($key, $arFields) && !array_key_exists($key, $duplicates)) { $duplicates[$key]++; if(isset($arFields[$key]["LEFT_JOIN"])) $obWhere->c_joins[$key]++; if($arFields[$key]["FIELD_TYPE"] == "datetime") { if(array_key_exists("date_format", $arOptions)) $strSelect .= ",".$DB->DateFormatToDB($arOptions["date_format"], $arFields[$key]["FIELD_NAME"])." AS ".$key."\n"; else $strSelect .= ",".$arFields[$key]["FIELD_NAME"]." AS ".$key."_TMP,".$DB->DateToCharFunction($arFields[$key]["FIELD_NAME"], $arFields[$key]["FORMAT"])." AS ".$key."\n"; } else $strSelect .= ",".$arFields[$key]["FIELD_NAME"]." AS ".$key."\n"; } } $bUseSubQuery = false; if( $DB->type == "ORACLE" && $obUserFieldsSql->GetDistinct() ) { $bUseSubQuery = true; } if($bUseSubQuery) { $ob = new CUserTypeSQL; $ob->SetEntity("CONTROLLER_MEMBER", "M.ID"); $ob->SetSelect($arSelect); $ob->SetOrder($arOrder); $strSelect = "SELECT ".$strSelect.$ob->GetSelect(); $strSql = " FROM b_controller_member M LEFT JOIN b_user UC ON UC.ID = M.CREATED_BY LEFT JOIN b_user UM ON UM.ID = M.MODIFIED_BY ".$obWhere->GetJoins()." ".$ob->GetJoin("M.ID")." WHERE M.ID IN ( SELECT M.ID FROM b_controller_member M ".$obWhere->GetJoins()." ".$obUserFieldsSql->GetJoin("M.ID")." WHERE ".$strWhere." ) "; $strSqlCnt = " FROM b_controller_member M ".$obWhereCnt->GetJoins()." ".$ob->GetJoin("M.ID")." WHERE M.ID IN ( SELECT M.ID FROM b_controller_member M ".$obWhereCnt->GetJoins()." ".$obUserFieldsSql->GetJoin("M.ID")." WHERE ".$strWhere." ) "; $strOrder = CControllerAgent::_OrderBy($arOrder, $arFields, $ob); } else { $strSelect = "SELECT ".($obUserFieldsSql->GetDistinct()? "DISTINCT": "")." ".$strSelect.$obUserFieldsSql->GetSelect(); $strSql = " FROM b_controller_member M LEFT JOIN b_user UC ON UC.ID = M.CREATED_BY LEFT JOIN b_user UM ON UM.ID = M.MODIFIED_BY ".$obWhere->GetJoins()." ".$obUserFieldsSql->GetJoin("M.ID")." WHERE ".$strWhere." "; $strSqlCnt = " FROM b_controller_member M ".$obWhereCnt->GetJoins()." ".($userFieldsWhere? $obUserFieldsSql->GetJoin("M.ID"): "")." WHERE ".$strWhere." "; $strOrder = CControllerAgent::_OrderBy($arOrder, $arFields, $obUserFieldsSql); } if (is_array($arNavParams) && $arNavParams["nTopCount"] > 0) { $strSql = $DB->TopSQL($strSelect.$strSql.$strOrder, $arNavParams["nTopCount"]); $dbr = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__); } elseif (is_array($arNavParams)) { $res_cnt = $DB->Query("SELECT count('x') CNT ".$strSqlCnt); $ar_cnt = $res_cnt->Fetch(); $dbr = new CDBResult(); $dbr->NavQuery($strSelect.$strSql.$strOrder, $ar_cnt["CNT"], $arNavParams); } else { $dbr = $DB->Query($strSelect.$strSql.$strOrder, false, "File: ".__FILE__."<br>Line: ".__LINE__); } $dbr->is_filtered = $strWhere != "1 = 1"; $dbr->SetUserFields($USER_FIELD_MANAGER->GetUserFields("CONTROLLER_MEMBER")); return $dbr; } public static function GetByID($ID) { return CControllerMember::GetList(Array(), Array("ID"=>IntVal($ID))); } public static function GetByGuid($guid) { return CControllerMember::GetList(Array(), Array("=MEMBER_ID"=>$guid)); } public static function RegisterMemberByPassword($ar_member, $admin_login, $admin_password, $controller_url = false) { /** @global CMain $APPLICATION */ global $APPLICATION; if($controller_url===false) $controller_url = COption::GetOptionString("controller", "controller_url", ($APPLICATION->IsHTTPS()?"https://":"http://").$_SERVER['HTTP_HOST']); if(!isset($ar_member['MEMBER_ID'])) $ar_member['MEMBER_ID'] = "m".\Bitrix\Main\Security\Random::getString(31); if(!isset($ar_member['SECRET_ID'])) $ar_member['SECRET_ID'] = "m".\Bitrix\Main\Security\Random::getString(31); if(!CControllerMember::CheckFields($ar_member)) return false; $arParameters = Array( "member_id" => $ar_member['MEMBER_ID'], "member_secret_id" => $ar_member['SECRET_ID'], "controller_url" => $controller_url, "admin_login" => $admin_login, "admin_password" => $admin_password, "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"); UnRegisterModuleDependences("main", "OnExternalAuthList", "main", "CControllerClient", "OnExternalAuthList"); ' ); $oRequest = new CControllerServerRequestTo($ar_member, "simple_register", $arParameters); if(($oResponse = $oRequest->Send())===false) { return false; } $result = $oResponse->OK(); if($result === false) { $e = new CApplicationException($oResponse->text); $APPLICATION->ThrowException($e); } else { $APPLICATION->ResetException(); if($ID = CControllerMember::Add($ar_member)) { $arControllerLog = Array( 'NAME'=>'REGISTRATION', 'CONTROLLER_MEMBER_ID'=>$ID, 'DESCRIPTION'=>GetMessage("CTRLR_MEM_LOG_DESC_JOIN_BY_TICKET"), 'STATUS'=>'Y' ); CControllerLog::Add($arControllerLog); CControllerMember::SetGroupSettings($ID); return $ID; } } return false; } public static function ReconnectMemberByPassword($ID, $ar_member, $admin_login, $admin_password, $controller_url = false) { /** @global CMain $APPLICATION */ global $APPLICATION; if($controller_url===false) $controller_url = COption::GetOptionString("controller", "controller_url", ($APPLICATION->IsHTTPS()?"https://":"http://").$_SERVER['HTTP_HOST']); if(!CControllerMember::CheckFields($ar_member, $ID)) return false; $arParameters = Array( "member_id" => $ar_member['MEMBER_ID'], "member_secret_id" => $ar_member['SECRET_ID'], "controller_url" => $controller_url, "admin_login" => $admin_login, "admin_password" => $admin_password, "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"); UnRegisterModuleDependences("main", "OnExternalAuthList", "main", "CControllerClient", "OnExternalAuthList"); ' ); $oRequest = new CControllerServerRequestTo($ar_member, "simple_register", $arParameters); if(($oResponse = $oRequest->Send())===false) { return false; } $result = $oResponse->OK(); if($result === false) { $e = new CApplicationException($oResponse->text); $APPLICATION->ThrowException($e); } else { $APPLICATION->ResetException(); if(CControllerMember::Update($ID, $ar_member)) { $arControllerLog = Array( 'NAME'=>'REGISTRATION', 'CONTROLLER_MEMBER_ID'=>$ID, 'DESCRIPTION'=>GetMessage("CTRLR_MEM_LOG_DESC_JOIN_BY_TICKET"), 'STATUS'=>'Y' ); CControllerLog::Add($arControllerLog); CControllerMember::SetGroupSettings($ID); return $ID; } } return false; } public static function CheckUserAuth($member_id, $login, $password) { /** @global CMain $APPLICATION */ global $APPLICATION; $arMember = CControllerMember::GetMember($member_id); if(!$arMember) return false; // send query to the client in order to check authorization $arParameters = array("login"=>$login, "password"=>$password); $oRequest = new CControllerServerRequestTo($arMember, 'check_auth', $arParameters); $oResponse = $oRequest->Send(); if($oResponse === false) return false; if($oResponse->OK() === false) { $e = new CApplicationException($oResponse->text); $APPLICATION->ThrowException($e); return false; } elseif(COption::GetOptionString("controller", "auth_trans_enabled", "N") === "Y") { $current_groups = $oResponse->arParameters['USER_INFO']["GROUP_ID"]; $arRemGroups = \Bitrix\Controller\GroupMapTable::getMapping("LOCAL_GROUP_CODE", "REMOTE_GROUP_CODE"); } elseif(COption::GetOptionString("controller", "auth_controller_enabled", "N") === "Y") { $current_groups = $oResponse->arParameters['USER_INFO']["GROUP_ID"]; $arRemGroups = \Bitrix\Controller\GroupMapTable::getMapping("LOCAL_GROUP_CODE", "CONTROLLER_GROUP_ID"); } else { return false; } $GROUP_ID = array(); $GROUPS_TO_ADD = array(); $GROUPS_TO_DELETE = array(); foreach($arRemGroups as $arTGroup) { $bFound = false; foreach($current_groups as $group_id) { if($arTGroup["FROM"] == $group_id) { $GROUP_ID[] = $arTGroup["TO"]; $GROUPS_TO_ADD[] = $arTGroup["TO"]; $bFound = true; } } if(!$bFound) $GROUPS_TO_DELETE[] = $arTGroup["TO"]; } $oResponse->arParameters['USER_INFO']['GROUP_ID'] = $GROUP_ID; $oResponse->arParameters['USER_INFO']['GROUPS_TO_ADD'] = $GROUPS_TO_ADD; $oResponse->arParameters['USER_INFO']['GROUPS_TO_DELETE'] = $GROUPS_TO_DELETE; // return to the client return $oResponse->arParameters; } public static function RegisterMemberByPHP($ar_member) { /** @global CMain $APPLICATION */ global $APPLICATION; $controller_url = COption::GetOptionString("controller", "controller_url", ($APPLICATION->IsHTTPS()?"https://":"http://").$_SERVER['HTTP_HOST']); if(!isset($ar_member['MEMBER_ID'])) $ar_member['MEMBER_ID'] = "m".\Bitrix\Main\Security\Random::getString(31); if(!isset($ar_member['SECRET_ID'])) $ar_member['SECRET_ID'] = "m".\Bitrix\Main\Security\Random::getString(31); $arParameters = Array( "member_id" => $ar_member['MEMBER_ID'], "member_secret_id" => $ar_member['SECRET_ID'], "controller_url" => $controller_url, "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"); UnRegisterModuleDependences("main", "OnExternalAuthList", "main", "CControllerClient", "OnExternalAuthList"); ' ); if($ar_member["ID"] = CControllerMember::Add($ar_member)) { $ar_member["REG_PARAMS"] = $arParameters; return $ar_member; } return false; } public 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; } public static function CheckFields(&$arFields, $ID = false) { /** @global CMain $APPLICATION */ global $APPLICATION; /** @global CDatabase $DB */ global $DB; /** @global CUser $USER */ global $USER; $arMsg = array(); if ($ID > 0) { unset($arFields["ID"]); } if ($ID === false) { if (!array_key_exists("MEMBER_ID", $arFields)) { $arFields["MEMBER_ID"] = "m".\Bitrix\Main\Security\Random::getString(31); } elseif (array_key_exists("MEMBER_ID", $arFields)) { if (intval($arFields["MEMBER_ID"]) > 0) { $arMsg[] = array( "id" => "MEMBER_ID", "text" => GetMessage("CTRLR_MEM_ERR_MEMBER_ID"), ); } else { $strSqlCheck = " SELECT 'x' FROM b_controller_member WHERE MEMBER_ID = '".$DB->ForSQL($arFields['MEMBER_ID'], 32)."' AND ID <> ".intval($ID)." "; $dbrCheck = $DB->Query($strSqlCheck); if ($dbrCheck->Fetch()) { $arMsg[] = array( "id" => "MEMBER_ID", "text" => GetMessage("CTRLR_MEM_ERR_MEMBER_UID"), ); } } } } if (($ID === false || array_key_exists("NAME", $arFields)) && strlen($arFields["NAME"]) <= 0) { $arMsg[] = array( "id" => "NAME", "text" => GetMessage("CTRLR_MEM_ERR_MEMBER_NAME"), ); } if (($ID === false || array_key_exists("URL", $arFields)) && strlen($arFields["URL"]) <= 0) { $arMsg[] = array( "id" => "URL", "text" => GetMessage("CTRLR_MEM_ERR_MEMBER_URL"), ); } if ($ID === false && !array_key_exists("CONTROLLER_GROUP_ID", $arFields)) { $arFields["CONTROLLER_GROUP_ID"] = COption::GetOptionInt("controller", "default_group", 1); } if ($ID === false) { $dbEvents = GetModuleEvents("controller", "OnBeforeControllerMemberAdd", true); } else { $dbEvents = GetModuleEvents("controller", "OnBeforeControllerMemberUpdate", true); } $APPLICATION->ResetException(); foreach($dbEvents as $arEvent) { $bEventRes = ExecuteModuleEventEx($arEvent, array($ID, &$arFields)); if ($bEventRes === false) { $ex = $APPLICATION->GetException(); $arMsg[] = array( "text" => ($ex? $ex->GetString(): "Unknown error."), ); } } if (!empty($arMsg)) { $e = new CAdminException($arMsg); $APPLICATION->ThrowException($e); return false; } if (isset($arFields["URL"])) { $arFields["URL"] = CControllerMember::_GoodURL($arFields["URL"]); } if (array_key_exists("ACTIVE", $arFields) && $arFields["ACTIVE"] != "Y") { $arFields["ACTIVE"] = "N"; } if (array_key_exists("SHARED_KERNEL", $arFields) && $arFields["SHARED_KERNEL"] != "Y") { $arFields["SHARED_KERNEL"] = "N"; } if (array_key_exists("DISCONNECTED", $arFields) && $arFields["DISCONNECTED"] != "Y" && $arFields["DISCONNECTED"]!="I") { $arFields["DISCONNECTED"] = "N"; } if (!array_key_exists("MODIFIED_BY", $arFields) && is_object($USER)) { $arFields["MODIFIED_BY"] = $USER->GetID(); } if ($ID === false && !array_key_exists("CREATED_BY", $arFields) && is_object($USER)) { $arFields["CREATED_BY"] = $USER->GetID(); } if ($ID === false && !array_key_exists("DATE_CREATE", $arFields)) { $arFields["~DATE_CREATE"] = $DB->CurrentTimeFunction(); } return true; } public static function CloseMember($member_id, $bClose = true, $task_id = false) { /** @global CMain $APPLICATION */ global $APPLICATION; if(!($arMember = CControllerMember::GetMember($member_id))) return false; $arControllerLog = Array( 'NAME'=>'SITE_CLOSING', 'CONTROLLER_MEMBER_ID'=>$arMember['ID'], 'DESCRIPTION'=>($bClose ? GetMessage("CTRLR_MEM_LOG_SITE_CLO") : GetMessage("CTRLR_MEM_LOG_SITE_OPE")), 'STATUS'=>'Y', "TASK_ID"=>$task_id ); $strCommand = 'CControllerClient::SetOptionString("main", "site_stopped", "'.($bClose?'Y':'N').'");'; $result = CControllerMember::RunCommand($member_id, $strCommand, array(), $task_id, 'run_immediate'); if($result === false) { $e = $APPLICATION->GetException(); if ($e) $arControllerLog['DESCRIPTION'] = $e->GetString(); else $arControllerLog['DESCRIPTION'] = 'Unknown error [001]'; $arControllerLog['STATUS'] = 'N'; } else { CControllerMember::Update($arMember['ID'], Array('SITE_ACTIVE'=>(!$bClose?'Y':'N'))); } if ($task_id === false) { CControllerLog::Add($arControllerLog); } // close event CTimeZone::Disable(); $db_res = CControllerMember::GetByID($arMember["ID"]); CTimeZone::Enable(); if($arFields = $db_res->Fetch()) { foreach (GetModuleEvents("controller", "OnAfterCloseMember", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array(&$arFields)); } if($bClose) CEvent::Send("CONTROLLER_MEMBER_CLOSED", SITE_ID, $arFields); else CEvent::Send("CONTROLLER_MEMBER_OPENED", SITE_ID, $arFields); } return $result; } public static function UnRegister($member_id) { /** @global CMain $APPLICATION */ global $APPLICATION; if(($ar_member = CControllerMember::GetMember($member_id))===false) return false; $arParameters = Array(); $oRequest = new CControllerServerRequestTo($ar_member, "unregister", $arParameters); $oResponse = $oRequest->Send(); $arControllerLog = Array( 'NAME'=>'UNREGISTRATION', 'CONTROLLER_MEMBER_ID'=>$ar_member['ID'], 'STATUS'=>'Y', 'DESCRIPTION'=>GetMessage("CTRLR_MEM_LOG_DISCON"), ); if($oResponse==false) { $e = $APPLICATION->GetException(); $arControllerLog['DESCRIPTION'] = $e->GetString(); $result = false; } else { $result = $oResponse->OK(); $arControllerLog['DESCRIPTION'] = $oResponse->text; if($result === false) { $e = new CApplicationException(GetMessage("CTRLR_MEM_LOG_DISCON_ERR")." ".$oResponse->text); $APPLICATION->ThrowException($e); } else CControllerMember::Update($ar_member['ID'], Array('DISCONNECTED'=>'Y')); } if($result === false) { $arControllerLog['DESCRIPTION'] = $e->GetString()."\r\n".$arControllerLog['DESCRIPTION']; $arControllerLog['STATUS'] = 'N'; } CControllerLog::Add($arControllerLog); return $result; } public static function AddCommand($member_guid, $command, $arAddParams = Array(), $task_id = false) { global $DB; // unique command code $command_id = \Bitrix\Main\Security\Random::getString(32); $db_id = $DB->Add( "b_controller_command", array( "MEMBER_ID" => $member_guid, "COMMAND_ID" => $command_id, "TASK_ID" => $task_id, "COMMAND" => $command, "~DATE_INSERT" => $DB->CurrentTimeFunction(), "ADD_PARAMS" => (count($arAddParams)>0?serialize($arAddParams):false) ), array("COMMAND", "ADD_PARAMS"), "", true //bIgnoreErrors ); if($db_id > 0) return $command_id; else return false; } public static function GetMember($id) { /** @global CMain $APPLICATION */ global $APPLICATION; $dbr_member = CControllerMember::GetById($id); $ar_member = $dbr_member->Fetch(); if(!$ar_member) { $e = new CApplicationException(GetMessage("CTRLR_MEM_ERR6")." ".htmlspecialcharsex($id)); $APPLICATION->ThrowException($e); return false; } if($ar_member['DISCONNECTED'] == 'Y') { $e = new CApplicationException(GetMessage("CTRLR_MEM_ERR7")); $APPLICATION->ThrowException($e); return false; } return $ar_member; } public static function SiteUpdate($member_id) { return CControllerTask::Add(Array( "TASK_ID"=>"UPDATE", "CONTROLLER_MEMBER_ID"=>$member_id )); } public static function _GoodURL($url) { $url = strtolower(trim($url, " \t\r\n./")); if(substr($url, 0, 7) != "http://" && substr($url, 0, 8) != "https://") $url = "http://".$url; return $url; } } ?>