示例#1
0
 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;
 }