function CAdminException($messages, $id = false) { //array("id"=>"", "text"=>""), array(...), ... $this->messages = $messages; $s = ""; foreach ($this->messages as $msg) { $s .= $msg["text"] . "<br>"; } parent::CApplicationException($s, $id); }
function UpdateCounters($member_id, $task_id = false) { global $DB, $APPLICATION; $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::GetByID($arMember["CONTROLLER_GROUP_ID"]); 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; }