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); }
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; }
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; }
public final function httpFilePath($dirs, $fileName, $ext = null) { return PsUrl::toHttp($this->relFilePath($dirs, $fileName, $ext)); }
public function getRequestUrl() { return PsUrl::current(); }
public function setLink($link) { $this->link = PsUrl::toHttp($link); }
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; }
public function getUrl($http = false, $params = null, $sub = null) { $url = PsUrl::addParams($this->path, $params, $sub); return $http ? PsUrl::toHttp($url) : $url; }
/** * Выполняет редирект на ткущий URL */ public static function redirectToSelf() { self::redirectTo(PsUrl::current()); }
/** * Урл для 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())); }
/** * @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'); }