/** * Основной метод, выполняющий выполнение Ajax действия. * * @return AjaxSuccess */ public final function execute() { $id = get_called_class(); check_condition(!$this->processed, "Действие [{$id}] уже выполнено."); $this->processed = true; //Не будем портить глобальный массив $_REQUEST, создав копию адаптера $params = RequestArrayAdapter::inst()->copy(); check_condition($params->str(AJAX_ACTION_PARAM) == $id, "Действие [{$id}] не может быть выполнено."); $params->remove(AJAX_ACTION_PARAM); //Проверка доступа AuthManager::checkAccess($this->getAuthType()); //Если пользователь зарегистрирован, как администратор - подключим ресурсы админа ps_admin_on(); //Проверка обязательных параметров foreach (to_array($this->getRequiredParamKeys()) as $key) { if (!$params->has($key)) { return "Не передан обязательный параметр [{$key}]."; } } if ($this->isCheckActivity() && !ActivityWatcher::isCanMakeAction()) { return 'Таймаут не закончился.'; } //Вызываем обработку данных PsProfiler::inst('AjaxProfiler')->start($id); $result = $this->executeImpl($params); PsProfiler::inst('AjaxProfiler')->stop(); if (isEmpty($result)) { return "Действие [{$id}] выполнено некорректно - возвращён пустой результат."; } if (is_object($result) && $result instanceof AjaxSuccess) { //SUCCESS //Зарегистрируем активноcть пользователя (только в случае успеха, так как пользователь мог просто ошибиться в воде данных) if ($this->isCheckActivity()) { ActivityWatcher::registerActivity(); } } return $result; }
/** * Основной метод, выполняющий обработку формы. * * @return AbstractForm */ private final function process() { if ($this->processed) { return $this; //--- } $this->processed = true; if (!$this->isTryingSubmit()) { return $this; //--- } //Проверка доступа $this->checkAccess(); if ($this->isAddCapture() && !PsCapture::isValid()) { $this->error = 'Требуется валидный код с картинки'; return $this; //--- } //Если пользователь зарегистрирован, как администратор - подключим ресурсы админа ps_admin_on(); $button = $this->getSubmittedButton(); if (!$button) { $this->error = "Не передана нажатая кнопка для формы {$this->ident}."; return $this; //--- } if (!$this->hasButton($button)) { $this->error = "Форма {$this->ident} засабмичена незарегистрированной кнопкой {$button}."; return $this; //--- } if ($this->isCheckActivity() && !ActivityWatcher::isCanMakeAction()) { $this->error = 'Таймаут не закончился.'; return $this; //--- } //Вызываем обработку данных $result = null; try { $result = $this->processImpl(PostArrayAdapter::inst(), $button); } catch (Exception $ex) { $this->error = $ex->getMessage(); ExceptionHandler::dumpError($ex); return $this; //--- } if (isEmpty($result)) { $this->error = "Форма {$this->ident} обработана некорректно - возвращён пустой объект."; return $this; //--- } if (is_object($result) && $result instanceof FormSuccess) { //SUCCESS //Форсированно сбросим капчу (всё равно, работаем с ней или нет) PsCapture::reset(); //Зарегистрируем активноcть пользователя (только в случае успеха, так как пользователь мог просто ошибиться в воде данных) if ($this->isCheckActivity()) { ActivityWatcher::registerActivity(); } $this->result = $result; } else { //ERROR $this->error = $result; } return $this; }
} final function __construct($a) { } } class B extends A { } A::test(); A::test(); B::test(); ExceptionHandler::registerPretty(); //print_r(B::$a); PsLibs::inst(); PsConnectionPool::configure(PsConnectionParams::sdkTest()); ps_admin_on(true); $a = array('a' => array('x' => 1, 'y' => 2)); $key = 'M'; $group = 'default'; $group2 = 'default2'; PSCache::inst()->saveToCache($a, $key, $group, 'xxx'); PSCache::inst()->saveToCache(array('a' => 1), '$key', '$group', 'xxx1'); die; echo TestUtils::testProductivity(function () { PSCache::inst()->getFromCache('$key', '$group', null, 'xxx1'); }); print_r(PSCache::inst()->getFromCache($key, $group, array('a'), 'xxx1')); die; print_r(PSCache::inst()->saveToCache($a, $key, $group)); print_r(PSCache::inst()->getFromCache($key, $group)); PSCache::inst()->removeFromCache($key, $group);
*/ PsSecurity::set(new PsSecurityProviderCmd()); } else { /* * Автоматически подключаемся к БД */ PsConnectionPool::configure(PsConnectionParams::production()); } /* * Инициализируем окружение, если мы работаем под ним. * Подключаемое окружение может установить свой провайдер безопасности. * Важно! Вызов не перемещать в if, так как метод init должен быть вызван обязательно. */ PsEnvironment::init(); /* * Инициализируем подсистему безопасности */ PsSecurity::init(); //Зарегистрируем функцию, подключающую админские ресурсы function ps_admin_on($force = false) { if ($force || AuthManager::isAuthorizedAsAdmin()) { Autoload::inst()->registerAdminBaseDir(); } } //Ну и сразу попытаемся подключить админские ресурсы ps_admin_on(); //Подключаем файл глобальных настроек, если он существует и мы работаем в рамках проекта PsGlobals::init(); //Получим экземпляр профайлера, чтобы подписаться на PsShotdown, если профилирование включено PsProfiler::inst()->add('ScriptInit', Secundomer::inst()->add(1, microtime(true) - SCRIPT_EXECUTION_START));