/** * Create and return the pagination data object. * * @return object Pagination data object. * * @since 1.5 */ protected function _buildDataObject() { $data = new stdClass(); if (!$this->uri) { $this->uri = KunenaRoute::$current; } // Build the additional URL parameters string. foreach ($this->additionalUrlParams as $key => $value) { $this->uri->setVar($key, $value); } $limitstartKey = $this->prefix . 'limitstart'; $data->all = new JPaginationObject(JText::_('JLIB_HTML_VIEW_ALL'), $this->prefix); if (!$this->viewall) { $this->uri->delVar($limitstartKey, ''); $data->all->base = '0'; $data->all->link = JRoute::_((string) $this->uri); } // Set the start and previous data objects. $data->start = new JPaginationObject(JText::_('JLIB_HTML_START'), $this->prefix); $data->previous = new JPaginationObject(JText::_('JPREV'), $this->prefix); if ($this->pagesCurrent > 1) { $page = ($this->pagesCurrent - 2) * $this->limit; $this->uri->setVar($limitstartKey, '0'); $data->start->base = '0'; $data->start->link = JRoute::_((string) $this->uri); $this->uri->setVar($limitstartKey, $page); $data->previous->base = $page; $data->previous->link = JRoute::_((string) $this->uri); } // Set the next and end data objects. $data->next = new JPaginationObject(JText::_('JNEXT'), $this->prefix); $data->end = new JPaginationObject(JText::_('JLIB_HTML_END'), $this->prefix); if ($this->pagesCurrent < $this->pagesTotal) { $next = $this->pagesCurrent * $this->limit; $end = ($this->pagesTotal - 1) * $this->limit; $this->uri->setVar($limitstartKey, $next); $data->next->base = $next; $data->next->link = JRoute::_((string) $this->uri); $this->uri->setVar($limitstartKey, $end); $data->end->base = $end; $data->end->link = JRoute::_((string) $this->uri); } $data->pages = array(); $range = range($this->pagesStart, $this->pagesStop); $range[] = 1; $range[] = $this->pagesTotal; sort($range); foreach ($range as $i) { $offset = ($i - 1) * $this->limit; $data->pages[$i] = new JPaginationObject($i, $this->prefix); if ($i != $this->pagesCurrent || $this->viewall) { $this->uri->setVar($limitstartKey, $offset); $data->pages[$i]->base = $offset; $data->pages[$i]->link = JRoute::_((string) $this->uri); } elseif ($i == $this->pagesCurrent) { $data->pages[$i]->active = true; } } return $data; }
/** * Test the delVar method. * * @return void * * @since 11.1 * @covers JUri::delVar */ public function testDelVar() { $this->object->parse('http://*****:*****@www.example.com:80/path/file.html?var=value#fragment'); $this->assertThat($this->object->getVar('var'), $this->equalTo('value')); $this->object->delVar('var'); $this->assertThat($this->object->getVar('var'), $this->equalTo('')); }
/** * @param JUri $uri * * @throws RuntimeException * * @return mixed */ protected function getRemote($uri, $persistent = false) { $uri->setScheme('https'); $uri->setHost('www.warcraftlogs.com'); $this->url = $uri->toString(); $result = parent::getRemote($this->url, $persistent); $result->body = json_decode($result->body); if ($result->code != 200) { // hide api key from normal users if (!JFactory::getUser()->get('isRoot')) { $uri->delVar('api_key'); $this->url = $uri->toString(); } $msg = JText::sprintf('Server Error: %s url: %s', $result->body->error, JHtml::_('link', $this->url, $result->code, array('target' => '_blank'))); // TODO JText::_() throw new RuntimeException($msg); } return $result; }
/** * Redirect back to the referrer page. * * If there's no referrer or it's external, Kunena will return to forum home page. * Also redirects back to tasks are prevented. * * @param string $anchor */ protected function redirectBack($anchor = '') { $default = JUri::base() . ($this->app->isSite() ? ltrim(KunenaRoute::_('index.php?option=com_kunena'), '/') : ''); $referrer = $this->app->input->server->getString('HTTP_REFERER'); $uri = JUri::getInstance($referrer ? $referrer : $default); if (JUri::isInternal($uri->toString())) { // Parse route. $vars = $this->app->getRouter()->parse($uri); $uri = new JUri('index.php'); $uri->setQuery($vars); // Make sure we do not return into a task. $uri->delVar('task'); $uri->delVar(JSession::getFormToken()); } else { $uri = JUri::getInstance($default); } if ($anchor) { $uri->setFragment($anchor); } $this->app->redirect(JRoute::_($uri->toString())); }
/** * Get the referrer page. * * If there's no referrer or it's external, Kunena will return default page. * Also referrers back to tasks are removed. * * @param string $default Default page to return into. * @param string $anchor Anchor (location in the page). * * @return string */ public static function getReferrer($default = null, $anchor = null) { $app = JFactory::getApplication(); $referrer = $app->input->server->getString('HTTP_REFERER'); if ($referrer) { $uri = new JUri($referrer); // Make sure we do not return into a task -- or if task is SEF encoded, make sure it fails. $uri->delVar('task'); $uri->delVar(JSession::getFormToken()); // Check that referrer was from the same domain and came from the Joomla frontend or backend. $base = $uri->toString(array('scheme', 'host', 'port', 'path')); $host = $uri->toString(array('scheme', 'host', 'port')); // Referrer should always have host set and it should come from the same base address. if (empty($host) || stripos($base, JUri::base()) !== 0) { $uri = null; } } if (!isset($uri)) { if ($default == null) { $default = $app->isSite() ? 'index.php?option=com_kunena' : 'administrator/index.php?option=com_kunena'; } $default = self::_($default); $uri = new JUri($default); } if ($anchor) { $uri->setFragment($anchor); } return $uri->toString(array('path', 'query', 'fragment')); }
/** * Returns a JUri instance with a prototype URI used as the base for the * other URIs created by the JSON renderer * * @return JUri The prototype JUri instance */ protected function _getPrototypeURIForPagination() { $protoUri = new JUri('index.php'); $protoUri->setQuery($this->input->getData()); $protoUri->delVar('savestate'); $protoUri->delVar('base_path'); return $protoUri; }
/** * Tests the buildRawRoute() method * * @return void * @testdox JRouterSite::buildRawRoute() executes a legacy component router's preprocess method * @since 3.4 */ public function testALegacyComponentRoutersPreprocessMethodIsExecuted() { $uri = new JUri('index.php'); $object = new JRouterSite(array(), $this->getMockCmsApp(), TestMockMenu::create($this)); $buildRawRouteMethod = new ReflectionMethod('JRouterSite', 'buildRawRoute'); $buildRawRouteMethod->setAccessible(true); $uri->setVar('option', 'com_test3'); $uri->delVar('testvar'); $buildRawRouteMethod->invokeArgs($object, array(&$uri)); $this->assertEquals('index.php?option=com_test3', (string) $uri); }
/** * @param plgSystemCommunityBuilder $router * @param JUri $uri */ public function buildRule(&$router, &$uri) { $app = JFactory::getApplication(); if ($app->isSite() && $this->isRerouteSafe()) { if ($uri->getVar('option') == 'com_users') { $uri->setVar('option', 'com_comprofiler'); $view = $uri->getVar('task'); if (!$view) { $view = $uri->getVar('view'); } switch ($view) { case 'profile': if ($uri->getVar('layout') == 'edit') { $userId = (int) $uri->getVar('user_id'); $task = 'userdetails'; if ($userId) { $task .= '&user='******'userprofile'; } break; case 'registration': $task = 'registers'; break; case 'reset': case 'remind': $task = 'lostpassword'; break; case 'logout': $task = 'logout'; break; case 'login': default: $task = 'login'; break; } $uri->delVar('task'); $uri->delVar('view'); $uri->delVar('layout'); if ($task) { $uri->setVar('view', $task); } $Itemid = $uri->getVar('Itemid'); if (!$Itemid) { $Itemid = $this->params->get('itemids', 1) ? $this->getItemid($task) : null; } $uri->delVar('Itemid'); if ($Itemid) { $uri->setVar('Itemid', $Itemid); } } } }
/** * smartUrlConvertor * * @param JUri $uri * @param array $button * * @return mixed */ public function smartUrlConvertor($uri, $button) { // fix task redirect if ($uri->getVar('layout') == 'edit') { $uri->setVar('task', "{$uri->getVar('view')}.{$uri->getVar('layout')}"); $uri->delVar('view'); $uri->delVar('layout'); } return $uri; }