Exemple #1
0
 /**
  * Возвращает ссылку на страницу:
  * <a href="helpus.php">Поддержать проект</a>
  * По умолчанию берёт название страницы, но можно передать кастомное.
  */
 public function getHref($content = null, $blank = false, $classes = null, $http = false, $urlParams = null, $sub = null, $title = null)
 {
     $PARAMS['href'] = $this->getUrl($http, $urlParams, $sub);
     $PARAMS['title'] = $title ? $title : $this->name;
     $PARAMS['class'] = $classes;
     return PsHtml::a($PARAMS, $content ? $content : $this->name, $blank);
 }
Exemple #2
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());
 }
/**
 * Управление постом
 */
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 #4
0
 public function rubricHref($rubric, $content = null, $classes = null)
 {
     $rubric = $this->extractRubric($rubric);
     $content = $content ? $content : $rubric->getName();
     $PARAMS['href'] = $this->rubricUrl($rubric);
     $PARAMS['class'] = $classes;
     $PARAMS['title'] = $this->rubricTitle($rubric);
     return PsHtml::a($PARAMS, $content);
 }
Exemple #5
0
 /**
  * Href-ссылка для отображения содержимого элемента с id=$boxId.
  * 
  * @param type $extractor - название javascript-класса, занимающегося извлеченеим данных из элемента с id=$boxId
  * 
  * <a class="ps-bubblehref-move" data-extractor="theorem" href="#post-tr-vectors-thkoll">№1</a>
  */
 public static function aById($boxId, $content, $extractor = null, array $attrs = array(), $blank = false)
 {
     self::attrsExtractor($attrs, $boxId, $extractor);
     if (!array_key_exists('href', $attrs)) {
         //Не передана ссылка, подставим в качестве якоря код элемента.
         $blank = false;
         $attrs['href'] = ensure_starts_with($boxId, '#');
     }
     return PsHtml::a($attrs, $content, $blank);
 }
Exemple #6
0
 /**
  * Метод возвращает ссылку, открывающую загружаемую страницу.
  * Для работы загружаемой страницы нужны ресурсы фолдинга этой страницы - они также будут добавлены к ссылке.
  * 
  * <a title="Новости" class="ip-opener" href="#news"><img alt="news.png" src="/autogen/images/16x16/folding/idents/news.png"></a>
  * 
  * @param BaseIdentPage or String $item
  * @param array $params - параметры ссылки
  * @param type $content - содержимое ссылки. Если нет, то будет подставлена картинка.
  */
 public final function getIdentPageHref(array $params = array(), $content = null)
 {
     $this->checkAccess();
     $params['class'][] = 'ip-opener';
     $params['class'][] = $this->foldedEntity->getUnique();
     $params['title'] = $this->getTitle();
     $params['href'] = "#" . $this->foldedEntity->getIdent();
     //Если не передано содержимое, то добавим картинку
     $content = $content ? $content : PsHtml::img(array('src' => $this->foldedEntity->getCover()));
     //Добавим все необходимые ресурсы
     $content = $this->foldedEntity->getResourcesLinks($content);
     return PsHtml::a($params, $content);
 }
Exemple #7
0
 public function postHref($post, $content = null, $sub = null, $attrs = null, $blank = false)
 {
     $post = $this->extractPost($post, false);
     if (!$post) {
         /* Если поста нет, то ругаться не будем - нужно для предпросмотра поста */
         return PsHtml::spanErr($this->postTitle() . ' не определён');
     }
     $attrs = to_array($attrs);
     $attrs['href'] = $this->postUrl($post, $sub);
     if (!$sub) {
         $attrs['title'] = $this->postTitle($post);
     }
     $content = $content ? $content : $post->getName();
     return PsHtml::a($attrs, $content, $blank);
 }
 public function getHrefToPage($page, $customTitle = null, array $getParams = null)
 {
     $page = $this->getPage($page);
     $url = $this->pageUrl($page, $getParams);
     $title = $customTitle ? $customTitle : $page->title();
     $htmlParams = array();
     if ($this->isCurrentPage($page)) {
         $htmlParams['class'] = to_array(array_get_value('class', $htmlParams));
         $htmlParams['class'][] = 'current';
     }
     $htmlParams['href'] = $url;
     return PsHtml::a($htmlParams, $title);
 }
 /**
  * Метод строит 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();
 }
Exemple #10
0
 public function addPath($href, $text)
 {
     $this->path[] = PsHtml::a(array('href' => $href), $text);
 }
 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);
 }