Пример #1
0
 public function postUrl($post, $sub = null, array $urlParams = array())
 {
     $post = $this->extractPost($post, true);
     $baseUrl = $this->getPostPage()->getPath();
     $urlParams[GET_PARAM_POST_ID] = $post->getId();
     return PsUrl::addParams($baseUrl, $urlParams, $sub);
 }
Пример #2
0
 private function jsCommon()
 {
     $params['url'] = PsUrl::current();
     $params['userId'] = AuthManager::getUserIdOrNull();
     $params['isAuthorized'] = AuthManager::isAuthorized();
     $params['isDOA'] = PsSettings::DEVMODE_OR_ADMIN();
     $params['isLogging'] = PsSettings::DEVMODE_OR_ADMIN();
     $params['currentSubmitTimeout'] = ActivityWatcher::getWaitTime();
     $params['tzOffset'] = PsTimeZone::inst()->getCurrentDateTimeZone()->getOffset(new DateTime());
     $params['marker'] = AuthManager::getUserSessoinMarker();
     $params['foldings'] = FoldedStorage::listEntitiesRel();
     return $params;
 }
Пример #3
0
 private function getImages(ArrayAdapter $params, $FNAME)
 {
     $dir = $params->str('dir');
     $name = $params->get('name');
     //НЕПОСРЕДСТВЕННО КАРТИНКА
     if ($name instanceof DirItem) {
         return $name;
     }
     /*
      * FOLDING
      */
     $FCW = FoldedContextWatcher::getInstance();
     $folding = null;
     $ident = $params->get('ident');
     //Тип фолдинга. Он может быть передан либо в параметре 'group', либо по префиксу смарти-функции, например: postimg (post-название типа фолдинга).
     $foldingType = $params->get('group');
     $foldingType = $foldingType ? $foldingType : (starts_with($FNAME, 'img') ? null : array_get_value(0, explode('img', $FNAME)));
     //Подтип фолдинга, например: is - подтип фолдингов для фолдингов с типом post (выпуск журнала среди всех постов).
     $foldingSubType = $params->get('type');
     if ($params->has('post')) {
         /* @var $post AbstractPost */
         $post = $params->get('post');
         $ident = $post->getIdent();
         $folding = Handlers::getInstance()->getPostsProcessorByPostType($post->getPostType())->getFolding();
     } else {
         if ($foldingType) {
             $hasSubtype = FoldedStorage::isFoldingHasSubtype($foldingType);
             if ($hasSubtype && !$foldingSubType) {
                 //У фолдинга есть подтип, но в параметрах он не передан - определим фолдинг по контексту
                 $folding = $FCW->getFoldedEntityEnsureType($foldingType)->getFolding();
             } else {
                 $folding = FoldedStorageInsts::byTypeStype($foldingType, $foldingSubType);
             }
         } else {
             if ($foldingSubType) {
                 //Если передан только тип, то считаем, что имеется ввиду фолдинг поста
                 $folding = Handlers::getInstance()->getPostsProcessorByPostType($foldingSubType)->getFolding();
             }
         }
     }
     if ($folding && !$ident) {
         //У нас есть фолдинг, но нет идентификатора сущности - определим её из контекста
         $ident = $FCW->getFoldedEntityEnsureType($folding->getFoldingType())->getIdent();
     }
     if (!$dir && !$name && $ident && $folding) {
         /*
          * Не передано название картинки, но передан идентификатор сущности - показываем cover.
          * TODO - подумать, возможно имеет смысл сделать возможность показывать любую картинку в заданном размере.
          */
         return $folding->getCover($ident, $params->str('dim'));
     }
     /*
      * Берём путь "как есть", если: 
      * 1. Передан специальный параметр asis
      * 2. Передана dir, и она начинается с '/'
      * 3. Не передана dir, но при этом name начинается с '/'
      * 4. dir или name указывают на адрес в интернете
      */
     $asis = $params->bool('asis') || starts_with($dir, DIR_SEPARATOR) || !$dir && starts_with($name, DIR_SEPARATOR) || PsUrl::isHttp($dir) || PsUrl::isHttp($name);
     if ($asis) {
         if (!$dir) {
             return $name;
         }
         if (starts_with($name, DIR_SEPARATOR)) {
             return cut_string_end($dir, DIR_SEPARATOR) . $name;
         }
         return ($name ? ensure_ends_with($dir, DIR_SEPARATOR) : $dir) . $name;
     }
     /** @var DirManager */
     $DM = null;
     /*
      * Теперь определим DirManager. Мы его можем взять:
      */
     if ($folding) {
         //1. Из ресурсов фолдинга
         $DM = $folding->getResourcesDm($ident, 'src');
     } else {
         //2. Обычный resources->images, если фолдинг не установлен
         $DM = DirManager::images();
     }
     /*
      * Определим список показываемых картинок по атрибуту $name. Пример тега:
      * {postimg type='tr' ident='matrix' name='mao.gif mu.png mu.png'}
      * Просто разделим значение атрибута $name по точкам и пробелам и склеим в названия картинок.
      */
     $NAMES = preg_split("/[. ]/", $name);
     $DI = $DM ? $DM->getDirItem($dir, $name) : DirItem::inst($dir, $name);
     if (count($NAMES) % 2 != 0 || $DI->isImg()) {
         //Указано что-то непонятное - не чётное кол-во составных элементов
         return $DI;
     }
     $IMAGES = array();
     for ($i = 0; $i < count($NAMES); $i += 2) {
         $imgName = $NAMES[$i] . '.' . $NAMES[$i + 1];
         $IMAGES[] = $DM ? $DM->getDirItem($dir, $imgName) : DirItem::inst($dir, $imgName);
     }
     return $IMAGES;
 }
Пример #4
0
 public final function httpFilePath($dirs, $fileName, $ext = null)
 {
     return PsUrl::toHttp($this->relFilePath($dirs, $fileName, $ext));
 }
Пример #5
0
 public function getRequestUrl()
 {
     return PsUrl::current();
 }
Пример #6
0
 public function setLink($link)
 {
     $this->link = PsUrl::toHttp($link);
 }
Пример #7
0
 public function getRequestUrl()
 {
     if (!isset($this->requestUrl)) {
         $this->requestUrl = $this->getPage()->getPath();
         $GET_PARAMS = array();
         if ($this->isRubricPage()) {
             $GET_PARAMS[GET_PARAM_RUBRIC_ID] = $this->getRubricId();
         }
         if ($this->isPostPage()) {
             $GET_PARAMS[GET_PARAM_POST_ID] = $this->getPostId();
         }
         if ($this->isPopupPage()) {
             $GET_PARAMS = array_merge($GET_PARAMS, PopupPagesManager::inst()->getRequestParams());
         }
         ksort($GET_PARAMS);
         $this->requestUrl = PsUrl::addParams($this->requestUrl, $GET_PARAMS);
     }
     return $this->requestUrl;
 }
Пример #8
0
 public function getUrl($http = false, $params = null, $sub = null)
 {
     $url = PsUrl::addParams($this->path, $params, $sub);
     return $http ? PsUrl::toHttp($url) : $url;
 }
Пример #9
0
 /**
  * Выполняет редирект на ткущий URL
  */
 public static function redirectToSelf()
 {
     self::redirectTo(PsUrl::current());
 }
Пример #10
0
 /**
  * Урл для pageIdent будем спрашивать менеджера всплывающих окон, так как он может знать о том,
  * что плагинам вообще запрещено открываться в отдельных окнах.
  */
 public function getPluginUrl(BasePlugin $plugin)
 {
     if (!PopupVis::isCanBeVisible($plugin->getPopupVisibility())) {
         return null;
     }
     //Во всех других случаях добавим ссылку на открытие плагина
     return PsUrl::addParams(PP_plugin::getIdent(), array(GET_PARAM_PLUGIN_IDENT => $plugin->getIdent()));
 }
Пример #11
0
 /**
  * @covers PsUrl::addParams
  */
 public function testAddParams()
 {
     $this->assertEquals(PsUrl::addParams('a.php', 'a=1&b=2'), 'a.php?a=1&b=2');
     $this->assertEquals(PsUrl::addParams('a.php?', 'a=1&b=2'), 'a.php?a=1&b=2');
     $this->assertEquals(PsUrl::addParams('a.php?', array('a' => 1, 'b' => 2)), 'a.php?a=1&b=2');
     $this->assertEquals(PsUrl::addParams(null, array('a' => 1, 'b' => 2)), 'a=1&b=2');
     $this->assertEquals(PsUrl::addParams('a.php', null), 'a.php');
     $this->assertEquals(PsUrl::addParams(null, null), '');
     $this->assertEquals(PsUrl::addParams('a.php', 'a=b', 'c'), 'a.php?a=b#c');
     $this->assertEquals(PsUrl::addParams(null, null, 'c'), '#c');
 }