示例#1
0
 protected function doBuild(PageContext $ctxt, PageBuilderContext $builderCtxt, RequestArrayAdapter $requestParams, ArrayAdapter $buildParams)
 {
     //1. ЗАГОЛОВОК
     $builderCtxt->setTitle('Моя страница');
     //2. JAVASCRIPT
     $jsParams['param1'] = $ctxt->getPostId();
     $jsParams['param2'] = 'My value';
     $builderCtxt->setJsParams($jsParams);
     //3. SMARTY RESOURCES
     $builderCtxt->setSmartyParam4Resources('TIMELINE_ENABE', true);
     //4. GET SMARTY PARAMS FOR TPL
     $smartyParams['host'] = ServerArrayAdapter::HTTP_HOST();
     return $smartyParams;
 }
示例#2
0
 /**
  * Вызов от имени клиента (одни из n)
  */
 public function executeFromClient()
 {
     //Не будем выполнять процесс а ajax контексте, так как ajax должен быстро отрабатывать
     if (PageContext::inst()->isAjax()) {
         return $this->executed;
     }
     return $this->executeImpl(EXTERNAL_PROCESS_CALL_DELAY, __FUNCTION__);
 }
示例#3
0
 public function buildPanel($panelName)
 {
     $CTXT = PageContext::inst();
     if ($CTXT->isPostsListPage() || $CTXT->isRubricPage()) {
         return $this->getScPanel($CTXT->getPostType(), $CTXT->isRubricPage() ? $CTXT->getRubric() : null);
     }
     return null;
 }
示例#4
0
 protected function doBuild(PageContext $ctxt, PageBuilderContext $builderCtxt, RequestArrayAdapter $requestParams, ArrayAdapter $buildParams)
 {
     //1. ЗАГОЛОВОК
     $builderCtxt->setTitle($this->basicPage->getTitle());
     //2. JAVASCRIPT
     $jsParams['postId'] = $ctxt->getPostId();
     $jsParams['rubricId'] = $ctxt->getRubricId();
     $jsParams['postType'] = $ctxt->getPostType();
     $jsParams['isPostsListPage'] = $ctxt->isPostsListPage();
     $jsParams['isRubricPage'] = $ctxt->isRubricPage();
     $jsParams['isPostPage'] = $ctxt->isPostPage();
     //Разборы, пройденные пользователем
     $passed = TrainManager::inst()->getUserPassedLessons();
     $jsParams['passedLessons'] = empty($passed) ? null : $passed;
     //Структура проекта
     $jsParams['structure'] = NavigationManager::inst()->getStructure();
     $builderCtxt->setJsParams($jsParams);
     //Параметры, зависимые от страницы
     $builderCtxt->setJsParams($this->basicPage->getJsParams());
     //3. SMARTY RESOURCES
     $builderCtxt->setSmartyParams4Resources($this->basicPage->getSmartyParams4Resources());
     //4. GET SMARTY PARAMS FOR TPL
     $smartyParams['host'] = ServerArrayAdapter::HTTP_HOST();
     $smartyParams['content'] = BasicPagesManager::inst()->getResourcesLinks($this->basicPage->getIdent(), ContentHelper::getContent($this->basicPage));
     return $smartyParams;
 }
示例#5
0
 public function getTitle()
 {
     $ctxt = PageContext::inst();
     if ($ctxt->isPostPage()) {
         $pp = $ctxt->getPostProcessor();
         $post = $ctxt->getPost();
         return $pp->postTitle() . ' | ' . $post->getName();
     }
     if ($ctxt->isRubricPage()) {
         $rp = $ctxt->getRubricsProcessor();
         $rub = $ctxt->getRubric();
         return $rp->rubricTitle() . ' | ' . $rub->getName();
     }
     return $ctxt->getPage()->getName();
 }
function smarty_function_paging_controller($params, $smarty)
{
    $pp = PageContext::inst()->getPostProcessor();
    echo $pp ? $pp->getPagingController() : null;
}
示例#7
0
 protected function getCurrentPagePostsIds($pagingNum)
 {
     return PageContext::inst()->isIt($this->getRubricPage()) ? $this->dbBean()->getPagingPostsIds($pagingNum, $this->getCurrentRubric()->getId()) : parent::getCurrentPagePostsIds($pagingNum);
 }
 /**
  * ArticleContext constructor.
  */
 public function __construct()
 {
     parent::__construct();
     $this->article_page = new ArticlePage();
 }
示例#9
0
 protected function getCurrentPagePostsIds($pagingNum)
 {
     return PageContext::inst()->isIt($this->getPostsListPage()) ? $this->dbBean()->getPagingPostsIds($pagingNum) : null;
 }
示例#10
0
<?php

require_once dirname(__DIR__) . '/sdk/MainImport.php';
//Подключим его здесь, так как он ещё понадобится в админских приложениях
require_once 'actions/AbstractAjaxAction.php';
//Подключим путь для класслоадера
//Autoload::inst()->addBaseDir('ajax');
//Поставим признак ajax-запроса
PageContext::inst()->setAjaxContext();
function check_user_session_marker($marker)
{
    if (!AuthManager::checkUserSessionMarker($marker)) {
        json_error('Передан некорректный маркер сессии');
    }
}
function json_error($error)
{
    exit(json_encode(array('err' => $error)));
}
function json_success($data)
{
    exit(json_encode(array('res' => $data)));
}
/**
 * Выполнение ajax действия
 * 
 * @param AjaxClassProvider $provider
 */
function execute_ajax_action(AbstractAjaxAction $action = null)
{
    /* Для безопасности не будем писать детали обработки */
 /**
  * MyAccountContext constructor.
  */
 public function __construct()
 {
     parent::__construct();
     $this->my_account_page = new MyAccountPage();
 }
示例#12
0
 /**
  * Основной метод, выполняющий построение страницы
  */
 public final function buildPage()
 {
     //Может ли данная страница вообще быть построена
     check_condition($this->builderIdent, "{$this} не может быть построена");
     //Проверим, установлена ли эта страница, как текущая
     check_condition(WebPages::isCurPage($this), "{$this} не установлена, как текущая, и не может быть построена");
     //Если у пользователя нет доступа к данной странице - выполним редирект
     if (!$this->hasAccess()) {
         $this->redirectHere();
     }
     //Теперь провалидируем установленный контекст
     $ctxt = PageContext::inst();
     check_condition($this->isIt($ctxt->getPage()), PsUtil::getClassName($ctxt) . ' проинициализирован некорректно');
     //Строим страницу
     PageBuilder::inst()->buildPage();
 }
示例#13
0
文件: WebPage.php 项目: ilivanoff/www
 /**
  * Основной метод, выполняющий построение страницы
  */
 public final function buildPage()
 {
     //Проверим, установлена ли эта страница, как текущая
     check_condition(WebPages::isCurPage($this), "{$this} не установлена, как текущая, и не может быть построена");
     //Если у пользователя нет доступа к данной странице - выполним редирект
     if (!$this->hasAccess()) {
         $this->redirectHere();
     }
     //Теперь провалидируем установленный контекст
     $ctxt = PageContext::inst();
     check_condition($this->isIt($ctxt->getPage()), PsUtil::getClassName($ctxt) . ' проинициализирован некорректно');
     $redirectPage = self::inst(is_numeric($this->pageCodeBase) ? $this->pageCodeBase : BASE_PAGE_INDEX);
     if ($ctxt->isRubricPage() && !$ctxt->getRubric()) {
         $redirectPage->redirectHere();
     }
     if ($ctxt->isPostPage() && !$ctxt->getPost()) {
         $redirectPage->redirectHere();
     }
     if ($ctxt->isPopupPage() && !PopupPagesManager::inst()->isValidPageRequested()) {
         $redirectPage->redirectHere();
     }
     PageBuilder::inst()->buildPage();
 }
示例#14
0
 /**
  * В процессе закрытия данного класса мы напишем полный список изменённых сущностей
  */
 public function onDestruct()
 {
     foreach (array('ACTION_FOLDING_' => 'Фолдинги', 'ACTION_ENTITY_' => 'Сущности') as $CONST_PREFIX => $name) {
         $this->LOGGER->infoBox($name);
         foreach (PsUtil::getClassConsts($this, $CONST_PREFIX) as $action) {
             $idents = array_get_value($action, $this->ACTIONS, array());
             $count = count($idents);
             $this->LOGGER->info();
             $this->LOGGER->info($action . ':');
             if ($count > 0) {
                 for ($i = 0; $i < $count; $i++) {
                     $this->LOGGER->info("\t" . (1 + $i) . '. ' . $idents[$i][0] . ($idents[$i][1] ? ' [' . $idents[$i][1] . ']' : ''));
                 }
             } else {
                 $this->LOGGER->info("\t -- Нет --");
             }
         }
     }
     /**
      * Распечатаем карту зависимости сущностей фолдинга.
      * Операция настолько тяжёлая, что в режиме ajax также будем избегать её выполнение.
      */
     if (PsDefines::isDevmode() && !PageContext::inst()->isAjax()) {
         $this->LOGGER->infoBox('Карта зависимости сущностей фолдингов:');
         foreach ($this->getDependsOnMap() as $who => $fromWhoArr) {
             $this->LOGGER->info("\t{$who}:");
             foreach ($fromWhoArr as $fromWho) {
                 $this->LOGGER->info("\t\t{$fromWho}");
             }
         }
     }
 }
示例#15
0
 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());
     }
 }
 /**
  * LoginContext constructor.
  */
 public function __construct()
 {
     parent::__construct();
     $this->login_page = new LoginPage();
 }