public function buildContent() { $navigation = AdminPageNavigation::inst(); $PARAMS['mode'] = self::MODE_TABLES_LIST; /* * Просмотр содержимого таблицы */ $table = RequestArrayAdapter::inst()->str('table'); if ($table) { $PARAMS['mode'] = self::MODE_TABLE_VIEW; $table = PsTable::inst($table); $PARAMS['table'] = $table; $PARAMS['rows'] = $table->getRows(); $navigation->addPath(self::urlTables(), 'Настройки'); $navigation->setCurrent('Просмотр ' . $table->getName()); } /* * Просмотр и настройка всех таблиц */ if ($PARAMS['mode'] == self::MODE_TABLES_LIST) { $PARAMS['errors'] = PsDbIniHelper::validateAll(); foreach (ConfigIni::getAllowedScopes() as $scope) { $PARAMS['data'][$scope] = TableExporter::inst()->getTables($scope); $PARAMS['data']["{$scope}.ini"] = DbIni::getIniContent($scope); } $navigation->setCurrent('Настройки'); } echo $this->getFoldedEntity()->fetchTpl($PARAMS); }
public function buildContent() { $RQ = RequestArrayAdapter::inst(); $mode = $RQ->str('mode', self::MODE_SPRITES_LIST); $name = $RQ->str('name'); $navigation = AdminPageNavigation::inst(); $sprites = CssSpritesManager::getAllDirsSptites(); switch ($mode) { case self::MODE_SPRITE: if (!array_key_exists($name, $sprites)) { $mode = self::MODE_SPRITES_LIST; break; } $smartyParams['sprite'] = CssSprite::inst($name)->rebuild(); break; } switch ($mode) { case self::MODE_SPRITES_LIST: $navigation->setCurrent('Список спрайтов'); break; case self::MODE_SPRITE: $navigation->addPath(self::urlSpritesList(), 'Список спрайтов'); $navigation->setCurrent($name); break; } $smartyParams['mode'] = $mode; $smartyParams['name'] = $name; $smartyParams['sprites'] = $sprites; return $this->getFoldedEntity()->fetchTpl($smartyParams); }
public function buildContent() { $TLM = TimeLineManager::inst(); $insts = $TLM->getEntityClassInsts(); if (empty($insts)) { return; //Нет временных шкал для показа } $idents = array_keys($insts); $options = array(); /** @var TimeLineBuilderBase */ foreach ($insts as $ident => $inst) { $options[] = array('content' => $inst->getTitle(), 'value' => $this->getPageUrl(array('type' => $ident))); } usort($options, function ($e1, $e2) { return strcasecmp($e1['content'], $e2['content']); }); $current = RequestArrayAdapter::inst()->str('type'); $current = $current && in_array($current, $idents) ? $current : $idents[0]; $select = PsHtml::select(array('class' => 'switcher'), $options, $this->getPageUrl(array('type' => $current))); /* * В данный момент мы определили идентификатор временной шкалы и построили элемент $select, * можем строить страницу. */ $params['body'] = $TLM->fetchTplWithResources($current); $params['select'] = $select; return $this->getFoldedEntity()->fetchTpl($params); }
public function buildContent() { $code = RequestArrayAdapter::inst()->str(REMIND_CODE_PARAM); $error = $code ? PassRecoverManager::getCantUseReason($code) : null; $params['code'] = $code; $params['error'] = $error; $params['mode'] = $code ? 'use' : 'get'; echo $this->getFoldedEntity()->fetchTpl($params); }
/** @return Rubric */ public function getCurrentRubric() { $curPage = PageContext::inst()->getPage(); if ($curPage->isIt($this->getRubricPage())) { $rubric = null; if (ALLOW_DIRECT_BY_IDENT) { $rubric = $this->extractRubric(RequestArrayAdapter::inst()->str(GET_PARAM_RUBRIC_ID)); } else { $rubric = $this->getRubric(RequestArrayAdapter::inst()->int(GET_PARAM_RUBRIC_ID)); } return $rubric ? $this->getRubricContent($rubric->getId()) : null; } if ($curPage->isIt($this->getPostPage())) { return $this->getRubricContent($this->getCurrentPost()->getRubricId()); } return null; }
/** * Основной метод, выполняющий выполнение 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); $params->remove(AJAX_ACTION_GROUP_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; }
public function buildContent() { $navigation = AdminPageNavigation::inst(); $ftype = LibResources::LIB_FOLDING_TYPE; $fsubtype = RequestArrayAdapter::inst()->str('fsubtype'); $fident = RequestArrayAdapter::inst()->str('fident'); $mode = !$fsubtype ? self::MODE_FOLDINGS_LIST : self::MODE_FOLDING_CONTENT; $PARAMS['error'] = null; switch ($mode) { case self::MODE_FOLDINGS_LIST: $PARAMS['foldings'] = array(); /* @var $manager FoldedResources */ foreach (Handlers::getInstance()->getLibManagers() as $manager) { $PARAMS['foldings'][] = array('name' => $manager->getEntityName() . ' (' . $manager->getUnique() . ')', 'url' => $this->url(array('fsubtype' => $manager->getFoldingSubType()))); } $navigation->setCurrent('Список библиотек'); break; case self::MODE_FOLDING_CONTENT: $manager = Handlers::getInstance()->getTimeLineFolding($fsubtype); $PARAMS['tlbfe'] = $manager->getTLBuilderFoldedEntity(); $PARAMS['folding']['name'] = $manager->getEntityName(); $PARAMS['folding']['fsubtype'] = $manager->getFoldingSubType(); //TODO - вынести $items = AdminLibBean::inst()->getAllNoFetch($fsubtype); $PARAMS['folding']['data'] = array(); /* @var $item LibItemDb */ foreach ($items as $item) { $item['editurl'] = AP_APFoldingEdit::urlFoldingEdit(FoldedResources::unique($ftype, $fsubtype, $item['ident'])); $PARAMS['folding']['data'][] = $item; } $navigation->addPath($this->url(), 'Список библиотек'); $navigation->setCurrent($manager->getEntityName()); break; } $PARAMS['mode'] = $mode; echo $this->getFoldedEntity()->fetchTpl($PARAMS); }
/** * Метод строит html листочка на дереве дискуссии: * * <li> * .... * <ul> * <li> * .... * </li> * </ul> * </li> * * @param DiscussionMsg $msg */ public final function buildLeaf(DiscussionMsg $msg, $simple = false) { $msgId = $msg->getId(); $author = $msg->getUser(); $isDeleted = $msg->isDeleted(); $isUserComment = $author->isAuthorised(); $isCanConfirm = !$isUserComment && !$msg->isConfirmed() && !$isDeleted && AuthManager::isAuthorizedAsAdmin(); $notKnown = !$msg->isKnown() && $msg->getUserTo() && $msg->getUserTo()->isIt(PsUser::instOrNull()); $msgUnique = $msg->getUnique(); $threadUnique = $this->SETTINGS->getThreadUnique($msg->getThreadId()); //Мы открываем страницу для показа этого комментария $liId = RequestArrayAdapter::inst()->str(GET_PARAM_GOTO_MSG) === $msgUnique ? " id=\"{$msgUnique}\"" : ''; //Классы li $liClasses = array('msg'); if ($isDeleted) { $liClasses[] = 'deleted'; } //Классы Comment $divClasses = array('comment', $msgUnique); if ($isUserComment) { $divClasses[] = 'user_comment'; } if ($isCanConfirm) { $divClasses[] = 'not_confirmed'; } //Данные для Comment $divData['unique'] = $msgUnique; //Имя пользователя $userName = $author->getName() . ($isUserComment ? ' (вы)' : ''); //КНОПКИ УПРАВЛЕНИЯ СВЕРХУ $controlsTop = array(); if (!$simple) { //Кнопки управления сверху $controlsTop[] = PsHtml::a(array('href' => '#'), '#'); if (!$msg->isRoot()) { $controlsTop[] = PsHtml::a(array('href' => '#', 'class' => 'parent'), '↑'); } } //Кнопки голосования if ($this->SETTINGS->isVotable()) { $userCanVote = AuthManager::isAuthorized() && !$isUserComment; $votes = VotesManager::inst()->getVotesCount($threadUnique, $msgId); $likeCtrl = array(); if ($userCanVote) { $vote = VotesManager::inst()->getUserVotes($threadUnique, $msgId, AuthManager::getUserId()); $likeCtrl[] = PsHtml::a(array('class' => 'like ' . ($vote > 0 ? 'active' : 'clickable')), '+1'); $likeCtrl[] = PsHtml::a(array('class' => 'votes' . ($vote == 0 ? '' : ' clickable') . ($votes == 0 ? '' : ($votes > 0 ? ' green' : ' red'))), abs($votes)); $likeCtrl[] = PsHtml::a(array('class' => 'dislike ' . ($vote < 0 ? 'active' : 'clickable')), '−1'); } else { $likeCtrl[] = PsHtml::a(array('class' => 'votes' . ($votes == 0 ? '' : ($votes > 0 ? ' green' : ' red'))), abs($votes)); } $controlsTop[] = PsHtml::span(array('class' => 'vote'), implode('', $likeCtrl)); } $controlsTop = implode('', $controlsTop); //КНОПКИ УПРАВЛЕНИЯ СНИЗУ $controlsBottom = ''; if (!$simple && !$isDeleted) { $controlsBottom = array(); $controlsBottom['id'] = $msgId; if ($isCanConfirm) { $controlsBottom[SmartyFunctions::ACTION_CONFIRM] = 'Принять'; } if (!$msg->isMaxDeepLevel()) { $controlsBottom[SmartyFunctions::ACTION_REPLY] = 'Ответить'; } if ($isUserComment) { $controlsBottom[SmartyFunctions::ACTION_DELETE] = 'Удалить'; } elseif (AuthManager::isAuthorizedAsAdmin()) { $controlsBottom[SmartyFunctions::ACTION_DELETE] = 'Удалить (админ)'; } $controlsBottom = SmartyFunctions::psctrl($controlsBottom); } //Собираем параметры в кучу $params['msg'] = $msg; $params['new'] = $notKnown; $params['builder'] = $this; $params['liId'] = $liId; $params['liClasses'] = implode(' ', $liClasses); $params['divClasses'] = implode(' ', $divClasses); $params['divData'] = PsHtml::data2string($divData); $params['msgId'] = $msgId; $params['simple'] = $simple; $params['avatar'] = $author->getAvatarImg('42x', array('class' => 'small')); $params['userName'] = $userName; $params['controlsTop'] = $controlsTop; $params['controlsBottom'] = $controlsBottom; if ($msg->isTemplated()) { $params['msgCtt'] = TemplateMessages::inst()->decodeTemplateMsg($msg); } else { $params['msgCtt'] = $msg; } return PSSmarty::template('discussion/common/leaf.tpl', $params)->fetch(); }
<?php require_once 'AjaxTools.php'; $data = RequestArrayAdapter::inst()->arr('programm'); if ($data) { $programm = new GymProgramm($data); if ($programm->hasExercises()) { $programmId = GymManager::getInstance()->saveProgramm($programm); json_success($programmId); } else { json_error('Программа не содержит ни одного упражнения'); } } else { json_error('Не переданы данные'); }
/** * Предварительная обработка страницы - самое время выполнить сабмит формы, редирект и остальные подобные вещи */ private final function postProcess() { //Проверим и сменим состояние $this->changeState(self::STATE_STARTED, self::STATE_FINISHED); //Устанавливаем контекст $BUILDER_CTXT = PageBuilderContext::getInstance(); //Проверим, что наш контекст не был сброшен check_condition(__CLASS__ == $BUILDER_CTXT->getContextIdent(), 'Unexpected ' . get_class($BUILDER_CTXT) . ': ' . $BUILDER_CTXT->getContextIdent()); //Получим параметры страницы $pagePrams = new PageParams($BUILDER_CTXT->finalizeTplContent(null)); //Сброим контекст, он нам больше не нужен $BUILDER_CTXT->dropContext(); try { //Вызываем завершающую обработку страницы $result = $this->postProcessImpl($pagePrams, RequestArrayAdapter::inst()); //Останавливаем профайлер $sec = $this->PROFILER->stop(); //Отлогируем $this->LOGGER->info('Page build done in {} sec', $sec->getTime()); //Вернём return $result; //--- } catch (Exception $ex) { $this->PROFILER->stop(false); throw $ex; } }
<?php require_once 'AjaxTools.php'; $pass = RequestArrayAdapter::inst()->str(FORM_PARAM_REG_OLD_PASS); echo $pass && PsUser::inst()->checkPassword($pass) ? 'true' : 'false';
/** * Определим функцию, которая выполнит все действия - не будем лишними переменными засорять глобальное пространство */ function psExecuteAjaxAction() { /* * Название действия должно быть в переменной запроса. Оно же - название класса, который будет выполнен. * Группа действия должны быть не обязательна, при определении действия группа нужна обязательно. */ $actionName = RequestArrayAdapter::inst()->str(AJAX_ACTION_PARAM); $actionGroup = RequestArrayAdapter::inst()->str(AJAX_ACTION_GROUP_PARAM, 'client'); if (!PsCheck::notEmptyString($actionName) || !PsCheck::notEmptyString($actionGroup)) { return json_error('Не передан код действия или его группа'); //--- } /* * Экземпляр класса действия - должен быть наследником AbstractAjaxAction */ $action = null; /* * Поищем в проектных действиях, они для нас имеют больший приоритет */ foreach (ConfigIni::ajaxActionsAbs($actionGroup) as $dirAbsPath) { $classPath = file_path($dirAbsPath, $actionName, PsConst::EXT_PHP); if (is_file($classPath)) { /* * Нашли файл. Загрузим и проверим, является ли он наследником AbstractAjaxAction */ require_once $classPath; if (!PsUtil::isInstanceOf($actionName, AbstractAjaxAction::getClassName())) { continue; //--- } $action = new $actionName(); break; //--- } } /* * Проверим, существует ли действие. * Для безопасности не будем писать детали обработки. */ if (!$action || !$action instanceof AbstractAjaxAction) { return json_error('Действие не опеределено'); //--- } /* * Выполняем */ $result = null; try { $result = $action->execute(); } catch (Exception $e) { $result = $e->getMessage(); } /* * Проверим результат */ if ($result instanceof AjaxSuccess) { json_success($result->getJsParams()); } else { json_error($result ? $result : 'Ошибка выполнения действия'); } }
private function getPagingNum() { $pagingsCnt = $this->getPagingsCnt(); $pagingRq = RequestArrayAdapter::inst()->int(GET_PARAM_PAGE_NUM, 1); return is_numeric($pagingsCnt) ? min(array(max(array(1, $pagingRq)), $pagingsCnt)) : null; }
public function buildContent() { $navigation = AdminPageNavigation::inst(); $RQ = RequestArrayAdapter::inst(); /** @var FoldedEntity */ $entity = FoldedStorageInsts::getFoldedEntityByUnique($RQ->str('entity'), false); /** @var FoldedResources */ $folding = $entity ? $entity->getFolding() : FoldedStorageInsts::byUnique($RQ->str('folding'), false); $mode = $RQ->str('mode', self::MODE_FOLDINGS_LIST); $PARAMS['mode'] = $mode; $PARAMS['error'] = null; $PARAMS['entity'] = $entity; $PARAMS['folding'] = $folding; $PARAMS['foldings'] = FoldedStorageInsts::listFoldings(); $ftype = $folding ? $folding->getFoldingType() : ''; $fsubtype = $folding ? $folding->getFoldingSubType() : ''; $fident = $entity ? $entity->getIdent() : ''; $flist = $RQ->str('list'); $ftplpath = $RQ->str('tplpath'); //РЕДИРЕКТ if ($mode != self::MODE_FOLDINGS_LIST && !$folding) { PsUtil::redirectTo(self::urlFoldingsList()); } //ВЫПОЛНЕНИЕ switch ($mode) { //СПИСОК ВСЕХ ФОЛДИНГОВ case self::MODE_FOLDINGS_LIST: $navigation->setCurrent('Список фолдингов'); break; //СПИСОК СУЩНОСТЕЙ ДАННОГО ФОЛДИНГА //СПИСОК СУЩНОСТЕЙ ДАННОГО ФОЛДИНГА case self::MODE_FOLDING_CONTENT: $newIdent = $folding->getNextEntityIdent(); //Форма создания $FORM = FORM_AdminFoldingCreateForm::getInstance(); $FORM->setHidden('folding', $folding->getUnique()); $FORM->setParam(FORM_AdminFoldingCreateForm::PARAM_NEW_FOLDING_IDENT, $newIdent); $FORM->setSmartyParam('folding', $folding); /* @var $TABLE PsTable */ $FORM->setSmartyParam('rec', $folding->getDbRec4Entity($newIdent)); //Форма загрузки $FORM = FORM_AdminFoldingUploadForm::getInstance(); $FORM->setHidden('folding', $folding->getUnique()); $navigation->addPath(self::urlFoldingsList(), 'Список фолдингов'); $navigation->setCurrent($folding->getEntityName()); break; case self::MODE_FOLDING_LIST_EDIT: $PARAMS['list'] = $flist; //TODO - выкинуто //$PARAMS['listIdents'] = $folding->getPossibleListIdents($flist); $navigation->addPath(self::urlFoldingsList(), 'Список фолдингов'); $navigation->addPath(self::urlFoldingEntitys($folding), $folding->getEntityName()); $navigation->setCurrent('Редактирование списка ' . $flist); break; case self::MODE_FOLDING_TPLS_LIST: $PARAMS['tplsList'] = $folding->getAllInfoTpls($fident); $navigation->addPath(self::urlFoldingsList(), 'Список фолдингов'); $navigation->addPath(self::urlFoldingEntitys($folding), $folding->getEntityName()); $navigation->addPath(self::urlFoldingEdit($entity), $fident); $navigation->setCurrent('Информационные шаблоны'); break; case self::MODE_FOLDING_TPL_EDIT: $PARAMS['tplsList'] = $folding->getAllInfoTpls($fident); $tpl = $folding->getInfoTpl($entity->getIdent(), $ftplpath); $PARAMS['tpl'] = $tpl; //Отфетчим содержимое, извлеча из запроса те параметры, которые начинаются на sm_ $PARAMS['content'] = $tpl->fetchNoCache($RQ->getByKeyPrefix('sm_', true)); $FORM = FORM_AdminFoldingInfoTplEditForm::getInstance(); $FORM->setHidden('fentity', $entity->getUnique()); $FORM->setHidden('ftpl', $tpl->getInfoRelPath()); $FORM->setSmartyParam('tpl', $tpl->getDirItem()->getFileContents()); $navigation->addPath(self::urlFoldingsList(), 'Список фолдингов'); $navigation->addPath(self::urlFoldingEntitys($folding), $folding->getEntityName()); $navigation->addPath(self::urlFoldingEdit($entity), $fident); $navigation->addPath(self::urlFoldingInfoTplsList($entity), 'Информационные шаблоны'); $navigation->setCurrent($tpl->getInfoRelPath()); break; case self::MODE_FOLDING_EDIT: //Ссылка для скачивания спрайтов $download['class'] = 'download'; $download['data'] = array('ftype' => $ftype, 'fsubtype' => $fsubtype, 'fident' => $fident); $PARAMS['download'] = PsHtml::a($download, '[Скачать]'); $spriteImg = $folding->getSprite($fident); $spriteImg = $spriteImg && $spriteImg->getImgDi()->isImg() ? $spriteImg->getImgDi() : null; $PARAMS['sprite'] = $spriteImg ? PsHtml::a(array('href' => $spriteImg->getRelPath()), '[Спрайт]', true) : null; //Информационные шаблоны $PARAMS['patterns'] = ''; if (count($folding->getInfoDiList($fident))) { $patterns['href'] = self::urlFoldingInfoTplsList($entity); $PARAMS['patterns'] = PsHtml::a($patterns, '[Инфо шаблоны]'); } $PARAMS['info'] = ''; try { $prew = $folding->getFoldedEntityPreview($fident); if (is_array($prew)) { $PARAMS['info'] = array_get_value('info', $prew); $PARAMS['content'] = array_get_value('content', $prew); } else { $PARAMS['content'] = $prew; } } catch (Exception $e) { $PARAMS['content'] = ExceptionHandler::getHtml($e); } /* * Подготовим форму редактирования фолдинга */ $FORM = FORM_AdminFoldingEditForm::getInstance(); /* hiddens */ $FORM->setHidden('ftype', $ftype); $FORM->setHidden('fsubtype', $fsubtype); $FORM->setHidden('fident', $fident); $rtypes = $folding->getAllowedResourceTypes(); /* fields */ foreach ($rtypes as $rtype) { $FORM->setParam($rtype, $folding->getResourceDi($fident, $rtype)->getFileContents(false)); } /* smarty */ $FORM->setSmartyParam('types', $rtypes); $FORM->setSmartyParam('covers', $folding->isImagesFactoryEnabled()); /* table */ $TABLE = null; $DBROW = null; if ($folding->getTableName()) { $TABLE = TableExporter::inst()->getTable($folding->getTableName()); //TODO - выкинуто //$DBROW = $TABLE->getFoldingDbRec($folding, $fident); } $FORM->setSmartyParam('table', $TABLE); $FORM->setSmartyParam('row', $DBROW); if (!$DBROW) { $FORM->removeButton(FORM_AdminFoldingEditForm::BUTTON_DELETE_ALL); } /* * Навигация */ $navigation->addPath(self::urlFoldingsList(), 'Список фолдингов'); $navigation->addPath(self::urlFoldingEntitys($folding), $folding->getEntityName()); $navigation->setCurrent($fident); break; } PsDefines::setReplaceFormulesWithImages(false); echo $this->getFoldedEntity()->fetchTpl($PARAMS); }
<?php require_once 'AjaxTools.php'; $email = RequestArrayAdapter::inst()->str(FORM_PARAM_REG_MAIL); $mustPresent = RequestArrayAdapter::inst()->bool('mp'); $invalid = true; if ($email) { $email = strtolower($email); $invalid = UserInputValidator::validateEmail($email, $mustPresent); } echo $invalid ? 'false' : 'true';
<?php require_once 'AjaxTools.php'; $programmId = RequestArrayAdapter::inst()->int('id'); $errorMsg = null; if (is_numeric($programmId)) { GymManager::getInstance()->deleteProgramm($programmId); } else { $errorMsg = 'Не передан id программы'; } if ($errorMsg) { json_error($errorMsg); } else { json_success('success'); }
public final function buildPage(array $buildParams = array()) { header('Content-Type: text/html; charset=utf-8'); ExceptionHandler::registerPretty(); //Запросим адаптер, чтобы сбросить параметры в сессии UnloadArrayAdapter::inst(); // Подготовим необходимые классы $CTXT = PageContext::inst(); $PAGE = $CTXT->getPage(); $BUILDER = $this->getPageBuilder($CTXT->getPageType()); $PROFILER = $BUILDER->getProfiler(); $RESOURCES = null; $TITLE = null; $CONTENT = null; if ($PROFILER) { // Начинаем профилирование $PROFILER->start($CTXT->getRequestUrl()); } try { //Подготовим объекты, которые будем передавать построителю страницы $RQ_PARAMS = RequestArrayAdapter::inst(); $BUILD_PARAMS = ArrayAdapter::inst($buildParams); $BUILDER_CTXT = PageBuilderContext::getInstance(); //Стартуем контекст $BUILDER_CTXT->setContextWithFoldedEntity($BUILDER->getFoldedEntity()); //Вызываем предварительную обработку страницы $BUILDER->preProcessPage($CTXT, $RQ_PARAMS, $BUILD_PARAMS); // Оповещаем слушателей /* @var $listener PagePreloadListener */ foreach (Handlers::getInstance()->getPagePreloadListeners() as $listener) { $listener->onPagePreload($PAGE); } //Билдер строит страницу, наполняя контекст. Нам от него нужны будут только данные из контекста $PARAMS = $BUILDER->buildPage($CTXT, $BUILDER_CTXT, $RQ_PARAMS, $BUILD_PARAMS); //Остановим контекст $BUILDER_CTXT->dropContext(); //Загрузим параметры $TITLE = $PARAMS->getTitle(); $CONTENT = $PARAMS->getContent(); // Подключаем все необходимые ресурсы $RESOURCES = $this->buildResources($PARAMS, $CTXT); //Проведём финализацию страницы, чтобы различные менеджеры могли добавить к ней свои данные $CONTENT = PageFinaliserFoldings::finalize($this->LOGGER, $CONTENT); } catch (Exception $ex) { $TITLE = trim($TITLE) . ' (произошла ошибка)'; $CONTENT = ExceptionHandler::getHtml($ex); } //Непосредственное построение страницы. $PAGE_PARAMS['RESOURCES'] = $RESOURCES; $PAGE_PARAMS['TITLE'] = $TITLE; $PAGE_PARAMS['CONTENT'] = $CONTENT; //ПОДСТАВЛЯЕМ ВСЕ ПАРАМЕТРЫ СТРАНИЦЫ В БАЗОВЫЙ ШАБЛОН $PAGE_CONTENT = PSSmarty::template('page/page_pattern.tpl', $PAGE_PARAMS)->fetch(); $this->LOGGER->infoBox('HTML PAGE', $PAGE_CONTENT); //ФИНАЛИЗАЦИЯ СТРАНИЦЫ - ВЫЧИСЛИМ РЕСУРСЫ, КОТОРЫЕ НУЖНО ОТКЛЮЧИТЬ $PAGE_CONTENT = PageFinaliserRegExp::finalize($this->LOGGER, $PAGE_CONTENT); //НОРМАЛИЗАЦИЯ СТРАНИЦЫ - УДАЛИМ ДВОЙНЫЕ ПРОБЕЛЫ И ПЕРЕНОСЫ if (PsDefines::isNormalizePage()) { $PAGE_CONTENT = PageNormalizer::finalize($this->LOGGER, $PAGE_CONTENT); } //ВСТАВИМ ASIS ПАРАМЕТРЫ, ТАК КАК БОЛЕЕ SMARTY ФИЛЬТРЫ ВЫЗЫВАТЬСЯ НЕ БУДУТ $PAGE_CONTENT = $this->replaceAsIsValues($PAGE_CONTENT); $this->LOGGER->infoBox('PAGE WITH ASIS REPLACED', $PAGE_CONTENT); //BOOOM :) echo $PAGE_CONTENT; if ($PROFILER) { // Заканчиваем профилирование $PROFILER->stop(); PageOpenWatcher::updateUserPageWatch($CTXT->getRequestUrl()); } }
<?php header('Content-Type: text/html; charset=utf-8'); require_once 'ps-includes/MainImport.php'; header('Content-Type: text/html; charset=utf-8'); ExceptionHandler::registerPretty(); $suffix = RequestArrayAdapter::inst()->str('page', 'img'); $tplPath = "crop/crop-page-{$suffix}.tpl"; if (!PSSmarty::smarty()->templateExists($tplPath)) { $suffix = 'img'; $tplPath = "crop/crop-page-{$suffix}.tpl"; } $SMARTY_PARAMS['JS_DEFS'] = PageBuilder::inst()->buildJsDefs(); $SMARTY_PARAMS['CROP_SUFFIX'] = $suffix; $PARAMS['RESOURCES'] = PSSmarty::template('crop/page_resources.tpl', $SMARTY_PARAMS)->fetch(); $PARAMS['CONTENT'] = PSSmarty::template($tplPath)->fetch(); $PARAMS['TITLE'] = 'Мои мысли'; PSSmarty::template('crop/page_pattern.tpl', $PARAMS)->display();
/** @return BasePopupPage */ public function getCurPage() { $GA = RequestArrayAdapter::inst(); return $GA->has(POPUP_WINDOW_PARAM) ? $this->getPage($GA->str(POPUP_WINDOW_PARAM)) : $this->getPage(PP_404::getIdent()); }
/** * Основной метод, выполняющий загрузку содержимого тестовой страницы */ private function getContentImpl(RequestArrayAdapter $params, Smarty $smarty) { //Силовые упражнения $exId = $params->int('ex_id'); if ($exId) { //$ex = GymManager::getInstance()->getExercise($exId); $tplPath = "gym/exercises/{$exId}.tpl"; return $smarty->templateExists($tplPath) ? $smarty->fetch($tplPath) : null; } //Специальные страницы $pageType = $params->str('pagetype'); if ($pageType) { $smParams = array(); switch ($pageType) { case 'smarty': foreach (array('blocks', 'functions', 'modifiers') as $type) { $items = DirManager::smarty('plugins/' . $type)->getDirContentFull(null, PsConst::EXT_PHP); /* @var $item DirItem */ foreach ($items as $item) { //Название $name = explode('.', $item->getName()); $name = $name[1]; //Первый комментарий $tokens = token_get_all($item->getFileContents()); $comment = array(T_COMMENT, T_DOC_COMMENT); $fileComment = ''; foreach ($tokens as $token) { if (in_array($token[0], $comment)) { $fileComment = trim($token[1]); break; } } $smParams[$type][] = array('name' => $name, 'comment' => $fileComment); } } break; case 'doubleimg': $images = DirManager::images()->getDirContentFull(null, DirItemFilter::IMAGES); $sorted = array(); /* @var $img DirItem */ foreach ($images as $img) { $ident = $img->getSize() . 'x' . $img->getImageAdapter()->getWidth() . 'x' . $img->getImageAdapter()->getHeight(); $sorted[$ident][] = $img; } $result = array(); /* @var $img DirItem */ foreach ($sorted as $ident => $imgs) { if (count($imgs) > 1) { $result[$ident] = $imgs; } } $smParams = array('images' => $result); break; case 'testmethods': $smParams['methods'] = TestManagerCaller::getMethodsList(); break; case 'imgbysize': $images = DirManager::images()->getDirContentFull(null, DirItemFilter::IMAGES, array('GymExercises')); DirItemSorter::inst()->sort($images, DirItemSorter::BY_SIZE); $smParams = array('images' => $images); break; case 'formules': $formules = TexImager::inst()->getAllFormules(); $totalSize = 0; /* @var $formula DirItem */ foreach ($formules as $formula) { $totalSize += $formula->getSize(); $formula->setData('class', 'TeX'); } DirItemSorter::inst()->sort($formules, DirItemSorter::BY_SIZE); $smParams = array('formules' => $formules, 'formules_size' => $totalSize); break; } $content = $smarty->fetch("test/page_{$pageType}.tpl", $smParams); if ($pageType) { switch ($pageType) { case 'patterns': $out = array(); preg_match_all("/===(.*?)===/", $content, $out, PREG_PATTERN_ORDER); $params = array(); for ($i = 0; $i < count($out[0]); $i++) { $full = $out[0][$i]; $ctt = $out[1][$i]; $params[$full] = "<div class=\"demo-head\">{$ctt}</div>"; } $content = PsStrings::replaceMap($content, $params); } } return $content; } //Тестовая страница $num = $params->int('num'); $num = $num ? $num : 1; return $smarty->fetch("test/page{$num}.tpl"); }
/** @return AbstractAdminAjaxAction */ public static function getAction() { return Classes::getClassInstance(__DIR__, 'action', RequestArrayAdapter::inst()->str(AJAX_ACTION_PARAM), 'AbstractAdminAjaxAction'); }
private function __construct() { $this->pages = APagesResources::inst()->getEntityClassInsts(); $this->curPage = $this->getPage(RequestArrayAdapter::inst()->str(GET_PARAM_PAGE)); $this->curPage = $this->curPage ? $this->curPage : $this->getPage(AP_APCommon::getPageIdent()); }
public function getCurPageContent() { return $this->getPageContent($this->getCurPageIdent(), RequestArrayAdapter::inst()); }