Exemple #1
0
 /**
  * Метод получает фактический контект для всплывающей страницы.
  * Сама страница может вернуть или IdentPageFilling, и тогда содержимое 
  * будет обработано за неё. Или непосредственно IdentPageContent,
  * если ей самой нужно обработать содержимое (например - акции).
  * 
  * @return ClientBoxContent
  */
 public final function getContent()
 {
     if ($this->cbContent) {
         return $this->cbContent;
     }
     $this->checkAccess();
     $this->profilerStart(__FUNCTION__);
     $filling = null;
     try {
         $filling = $this->getClientBoxFilling();
         check_condition($filling instanceof ClientBoxFilling, "Элемент [{$this->ident}] обработан некорректно");
     } catch (Exception $ex) {
         $this->profilerStop(false);
         return $this->cbContent = new ClientBoxContent(PsHtml::divErr(ExceptionHandler::getHtml($ex)));
     }
     //Построим заголовок
     $HEAD_PARAMS['class'][] = 'box-header';
     if ($filling->isCover()) {
         $HEAD_PARAMS['class'][] = 'covered';
         $HEAD_PARAMS['style']['background-image'] = 'url(' . $this->foldedEntity->getCover()->getRelPath() . ')';
     }
     $HEAD_CONTENT = $filling->getHref() ? PsHtml::a(array('href' => $filling->getHref()), $filling->getTitle()) : $filling->getTitle();
     $HEAD = PsHtml::html2('h3', $HEAD_PARAMS, $HEAD_CONTENT);
     $BOX_CONTENT = $this->foldedEntity->fetchTplWithResources($filling->getSmartyParams());
     $BOX = PsHtml::div(array(), $HEAD . $BOX_CONTENT);
     $this->profilerStop();
     return $this->cbContent = new ClientBoxContent($BOX, $filling->getJsParams());
 }
Exemple #2
0
 /**
  * Функция производит финализацию страницы, показываемой пользователю, добавляя к ней элемент с содержащимися в нём ссылками.
  */
 public function appendLibItemsToPageContent($CONTENT)
 {
     $matches = array();
     $data = PsConstJs::BUBBLE_LOADER_FOLDING_DATA;
     $pattern = "/data-{$data}=\"(.+?)\"/si";
     preg_match_all($pattern, $CONTENT, $matches);
     $matches = array_unique(array_get_value(1, $matches, array()));
     $items = array();
     foreach ($matches as $unique) {
         $entity = Handlers::getInstance()->getFoldedEntityByUnique($unique, false);
         if ($entity && $entity->getFolding()->isItByType(LibResources::LIB_FOLDING_TYPE)) {
             $items[$entity->getUnique()] = $entity->getFolding()->getBubble($entity->getIdent());
         }
     }
     $has = count($items) > 0;
     if ($this->LOGGER->isEnabled()) {
         $this->LOGGER->info();
         $this->LOGGER->info('Библиотечные элементы, добавленные на страницу:');
         if ($has) {
             foreach ($items as $unique => $lib) {
                 $this->LOGGER->info("\t{$unique}");
             }
         } else {
             $this->LOGGER->info("\t-- Нет --");
         }
     }
     return $CONTENT . ($has ? PsHtml::div(array('id' => PsConstJs::BUBBLE_LOADER_FOLDING_STORE_ID), implode('', $items)) : '');
 }
 public function html()
 {
     $path = $this->path;
     if ($this->current) {
         $path[] = PsHtml::span(array(), $this->current);
     }
     return empty($path) ? '' : PsHtml::div(array('class' => 'ps-page-nav'), implode('', $path));
 }
Exemple #4
0
function smarty_block_box($params, $content, Smarty_Internal_Template &$smarty)
{
    if ($content) {
        $params['class'] = to_array(array_get_value('class', $params));
        $params['class'][] = 'psbox';
        return PsHtml::div($params, PsHtml::div(array('class' => 'psboxctt'), $content));
    }
}
/**
 * Управление постом
 */
function smarty_modifier_post_header_controls($post)
{
    $post = $post instanceof PostContentProvider ? $post->getPost() : $post;
    $pp = Handlers::getInstance()->getPostsProcessorByPostType($post->getPostType());
    /*
     * Собираем кнопки управления
     */
    $buttons = array();
    $hintClasses = 'hint--top hint--info hint--rounded';
    //Печать поста
    $attrs = array();
    $title = 'Версия для печати';
    $attrs['href'] = '#print';
    $attrs['title'] = $title;
    $attrs['data'] = array('hint' => $title);
    $attrs['class'] = $hintClasses;
    $content = CssSpritesManager::getDirSprite(CssSpritesManager::DIR_ICO, 'print', true);
    $buttons[] = PsHtml::a($attrs, $content);
    //Оригинальный вид поста
    if (PsDefines::isReplaceFormulesWithImages()) {
        $attrs = array();
        $title = 'Просмотр ' . ps_strtolower($pp->postTitle(null, 2)) . ' без замены формул на картинки';
        $attrs['href'] = '#originalView';
        $attrs['title'] = $title;
        $attrs['data'] = array('hint' => $title);
        $attrs['class'] = $hintClasses;
        $content = CssSpritesManager::getDirSprite(CssSpritesManager::DIR_ICO, 'formula', true);
        $buttons[] = PsHtml::a($attrs, $content);
    }
    //Быстрый просмотр постов (перелистывание)
    $attrs = array();
    $title = 'Предыдущий/следующий ' . ps_strtolower($pp->postTitle(null, 1));
    $attrs['href'] = '#prevNextView';
    $attrs['title'] = $title;
    $attrs['data'] = array('hint' => $title);
    $attrs['class'] = $hintClasses;
    $content = CssSpritesManager::getDirSprite(CssSpritesManager::DIR_ICO, 'prev_next', true);
    $buttons[] = PsHtml::a($attrs, $content);
    //Предыдущий пост
    $prevPost = $pp->getPrevPost($post->getId(), false);
    if ($prevPost) {
        $attrs = array();
        $attrs['data']['hint'] = $pp->postTitle($prevPost);
        $attrs['class'] = $hintClasses;
        $content = CssSpritesManager::getDirSprite(CssSpritesManager::DIR_ICO, 'prev_s', true);
        $buttons[] = $pp->postHref($prevPost, $content, null, $attrs);
    }
    //Следующий пост
    $nextPost = $pp->getNextPost($post->getId(), false);
    if ($nextPost) {
        $attrs = array();
        $attrs['data']['hint'] = $pp->postTitle($nextPost);
        $attrs['class'] = $hintClasses;
        $content = CssSpritesManager::getDirSprite(CssSpritesManager::DIR_ICO, 'next_s', true);
        $buttons[] = $pp->postHref($nextPost, $content, null, $attrs);
    }
    return PsHtml::div(array('class' => PsConstJs::POST_HEAD_CONTROLS), implode(' ', $buttons));
}
Exemple #6
0
function smarty_block_text($params, $content, Smarty_Internal_Template &$smarty)
{
    if (!$content) {
        return;
    }
    $content = nl2br(trim($content));
    $params['class'] = array_get_value('class', $params, '') . ' text';
    return PsHtml::div($params, $content);
}
Exemple #7
0
 public static function post_anons_placeholder($post)
 {
     if ($post instanceof PostContentProvider) {
         $post = $post->getPost();
     }
     $params['class'] = $post->getPostType() . '-anons-placeholder';
     $params['data'] = array('id' => $post->getId());
     return PsHtml::div($params, 'Идёт построение списка...');
 }
 protected function postProcessImpl(PageParams $pageParams, \RequestArrayAdapter $requestParams)
 {
     $SMARTY_PARAMS['JS_DEFS'] = PageBuilder::inst()->buildJsDefs($pageParams);
     $SMARTY_PARAMS_PAGE = $pageParams->getSmartyParams4Resources();
     $SMARTY_PARAMS = array_merge($SMARTY_PARAMS, $SMARTY_PARAMS_PAGE);
     $resources = PSSmarty::template('page/environment/wordpress/wp_page_resources_footer.tpl', $SMARTY_PARAMS)->fetch();
     $resources = trim($resources);
     $this->LOGGER->infoBox('PAGE_RESOURCES_FOOTER', $resources);
     echo PsHtml::div(array(), $resources);
 }
 public function wrapBlockImgBox($imageId, array $attrs, $content)
 {
     $imageId = trim($imageId);
     $num = $this->getNextImgNum($imageId, true);
     if ($imageId) {
         $attrs['id'] = $this->getImgElId($imageId);
     }
     $content = str_replace(PsConst::NUM_REPLCASE_MACROS, PsConstJs::numeratorItemIndex(self::CSS_NUMERATOR_IMG, $num), trim($content));
     return PsHtml::div($attrs, $content);
 }
Exemple #10
0
 public static function field($label, $field, $hint = null)
 {
     //Добавим двоеточие здесь, чтобы оно вошло в hint (ели он передан)
     $label = $label ? "{$label}:" : '';
     if ($label && $hint) {
         $label = PsHtml::hint($label, $hint, PsHtml::HINT_POS_RIGHT, PsHtml::HINT_TYPE_INFO);
     }
     $label = $label ? "<label>{$label}</label>" : '';
     return PsHtml::div(array('class' => 'field'), $label . $field);
 }
 /**
  * Метод производит поиск ссылок на всплывающие баблы и извлекает массив:
  * идентификатор_бабла => <div>Содержимое бабла</div>
  */
 private function getBubbles($CONTENT)
 {
     $items = array();
     $this->extractUsedBubbleItems($CONTENT, $items);
     $has = count($items) > 0;
     if ($this->LOGGER->isEnabled()) {
         $this->LOGGER->info();
         $this->LOGGER->info('Элементы всплывающих подсказок, добавленные на страницу:');
         if ($has) {
             foreach ($items as $unique => $bubble) {
                 $this->LOGGER->info("\t{$unique}");
             }
         } else {
             $this->LOGGER->info("\t-- Нет --");
         }
     }
     return $has ? PsHtml::div(array('id' => PsConstJs::BUBBLE_LOADER_FOLDING_STORE_ID), implode('', $items)) : '';
 }
Exemple #12
0
 /**
  * Строит id-card с информацией о данном пользователе
  */
 public function getIdCard()
 {
     return PsHtml::div(array('class' => 'user_info'), $this->getIdCardContent());
 }
Exemple #13
0
 protected function getClientBoxFilling()
 {
     $comments = AdminManager::inst()->getPostsWithUncheckedCommentsHtml();
     $comments = $comments ? $comments : PsHtml::div(array('class' => 'no_items'), 'Нет новых комментариев');
     return new ClientBoxFilling('Новые комментарии:', false, null, array('comments' => $comments));
 }
Exemple #14
0
 /**
  * Функция, которая будет вызвана после фетчинга шаблона для оборачивания
  * содержимого в специальный элемент.
  */
 protected function wrapContent($content, array $params = array())
 {
     $params['id'] = $this->getFoldedEntity()->getUnique();
     $params['class'][] = PsUtil::getClassConsts(get_called_class(), 'CSS_');
     return PsHtml::div($params, $content);
 }
 /**
  * Метод обрабатывает блочные формулы, заключённые в {f}...{/f}, 
  * но не являющиеся формулами TeX (не \[...\]).
  */
 public static function processBlockFormula($content)
 {
     return PsHtml::div(array('class' => 'block_formula'), normalize_string($content));
 }
 /**
  * Метод форматирует скек, добовляя к нему предыдущий эксепшн, если есть.
  */
 public static function formatStackHtml(Exception $ex)
 {
     $prev = $ex->getPrevious() instanceof Exception ? $ex->getPrevious() : null;
     return PsHtml::div(array('class' => 'message'), get_class($ex) . ': ' . $ex->getMessage()) . PsHtml::div(array('class' => 'stack'), self::formatTraceMessagesHtml($ex)) . ($prev ? PsHtml::div(array('class' => 'prevoius'), self::formatStackHtml($prev)) : '');
 }
Exemple #17
0
 /**
  * Див-обёртка для хранения содержимого bubble.
  * <div class="lib-s-BP_FM2_einstein lib-bubble">...</div>
  * И баблы, показываемые на странице, и баблы, загружаемые через ajax - все отображаются в этой обёртке.
  */
 public static function extractFoldedEntityBubbleDiv($unique)
 {
     $entity = FoldedStorageInsts::getFoldedEntityByUnique($unique, false);
     if (!$entity || !$entity->getFolding() instanceof BubbledFolding) {
         return null;
     }
     //Добавим классы для контейнера bubble, чтобы мы могли его найти на странице
     $params['class'][] = $entity->getUnique();
     $params['class'][] = $entity->getFolding()->getFoldingType() . '-bubble';
     $bubble = $entity->getFolding()->getBubble($entity->getIdent());
     $clear = PsHtml::div(array('class' => 'clearall'));
     return PsHtml::div($params, $bubble . $clear);
 }
Exemple #18
0
 /**
  * Метод возвращает контроллер для постраничного переключения постов.
  * Сам он будет построен силами javascript, наша задача только добавить <div> со всем данными.
  */
 public function getPagingController()
 {
     $pagingsCnt = $this->getPagingsCnt();
     $pagingNum = $this->getPagingNum();
     $baseUrl = $this->getCurrentPageBaseUrl();
     if ($pagingsCnt && $pagingsCnt > 1 && $pagingNum && $baseUrl) {
         return PsHtml::div(array('class' => 'ps-switcher', 'data' => array('max' => $pagingsCnt, 'cur' => $pagingNum, 'url' => $baseUrl)));
     }
     return '';
 }
 private function insert($FNAME, ArrayAdapter $params, $content)
 {
     $IMG['data'] = $params->has('data') ? $params->get('data') : $params->getByKeyPrefix('data_', true);
     $IMG['class'] = $params->get(array('cl', 'class'));
     $IMG['style'] = $params->get(array('st', 'style'));
     $IMG['title'] = $params->get('title');
     /*
      * Если alt задан, но пуст - таким его и оставим. 
      * Скорее всего нам такое поведение и нужно. Например в галлереях alt используется для подсказки.
      * Нам не нужно в качестве подсказки показывать название картинки.
      */
     if ($params->has('alt')) {
         $IMG['alt'] = $params->get('alt');
     }
     if ($params->hasNoEmpty('map')) {
         $IMG['usemap'] = '#' . $params->get('map');
     }
     $isPopup = ends_with($FNAME, 'imgp');
     //Массив фактических картинок
     $IMAGES = array();
     if ($content && !$isPopup) {
         //Есть содержимое
     } else {
         $IMAGES = to_array($this->getImages($params, $FNAME));
         check_condition($IMAGES, "В блок [{$FNAME}] не переданы картинки для отображения.");
     }
     if ($isPopup) {
         //Всплывающая картинка
         $popupImgSrc = $IMAGES[0] instanceof DirItem ? $IMAGES[0]->getRelPath() : $IMAGES[0];
         if ($content == '.') {
             echo PsBubble::previewImgBubble($popupImgSrc);
         } else {
             echo PsBubble::spanImgBubble($content, $popupImgSrc);
         }
         return;
         //---
     }
     //Параметры
     $id = $params->str(array('id', 'num'));
     $text = $params->str('text');
     $isBlock = $content || count($IMAGES) > 1 || $id || $text || ends_with($FNAME, array('imgb', 'imgn'));
     if (!$isBlock) {
         $IMG['src'] = $IMAGES[0];
         echo PsHtml::img($IMG);
         return;
         //---
     }
     //Блочная картинка
     //Определим номер картинки. Если это imgn, то нумерация форсированно отключена.
     $inc = ends_with($FNAME, 'imgn') ? null : FoldedContextWatcher::getInstance()->getImageNumeratorContext(false);
     //Определим текст подписи под картинкой.
     $num = $inc ? ' ' . PsConst::NUM_REPLCASE_MACROS : '';
     $text = trim($num || $text ? "<b>Рис.{$num}</b> {$text}" : '');
     $text = $text ? "<p>{$text}</p>" : '';
     //Строим див с картинками
     $DIV['class'] = array('block_img');
     if (!$content) {
         foreach ($IMAGES as $src) {
             $IMG['src'] = $src;
             $content .= PsHtml::img($IMG);
         }
     }
     $content .= $text;
     echo $inc ? $inc->wrapBlockImgBox($id, $DIV, $content) : PsHtml::div($DIV, $content);
 }
Exemple #20
0
 public function tasksHtml()
 {
     $res = '';
     foreach ($this->TASKS as $task) {
         $taskIdent = $this->taskIdent($task);
         $task['ident'] = $taskIdent;
         $text = $this->taskToString($task);
         $PARAMS['data'] = $task;
         $PARAMS['class'] = $taskIdent;
         $res .= PsHtml::div($PARAMS, $text);
     }
     return $res;
 }