Пример #1
0
 public function __construct()
 {
     $this->app = \JApplicationCms::getInstance('site');
     $lang = \JFactory::getLanguage();
     $tag = \JLanguageMultilang::isEnabled() ? $lang->getTag() : '*';
     $this->menu = $this->app->getMenu();
     $this->default = $this->menu->getDefault($tag);
     $this->active = $this->menu->getActive();
 }
Пример #2
0
 /**
  * Parse method for URLs
  * This method is meant to transform the human readable URL back into
  * query parameters. It is only executed when SEF mode is switched on.
  *
  * @param   array  &$segments  The segments of the URL to parse.
  *
  * @return  array  The URL attributes to be used by the application.
  *
  * @since   3.3
  */
 public function parse(&$segments)
 {
     /*
      * Available urls:
      *
      * projects
      * {project}
      * {project}/issues
      * {project}/{issue}
      * {project}/{issue}/edit
      * comment/edit/{comment}
      * comments
      */
     $query = array('option' => 'com_monitor');
     if (empty($query['Itemid'])) {
         $menuItem = $this->menu->getActive();
     } else {
         $menuItem = $this->menu->getItem($query['Itemid']);
     }
     if (empty(array_filter($segments))) {
         return $menuItem->query;
     }
     $menuQuery = $menuItem !== null && $menuItem->query['option'] === self::COMPONENT ? $menuItem->query : null;
     self::convertTaskToView($menuQuery);
     $menuView = isset($menuQuery['view']) ? $menuQuery['view'] : null;
     if ($segments[0] == 'projects') {
         $query['view'] = 'projects';
     } elseif ($segments[0] == 'issues') {
         $query['view'] = 'issues';
         if ($menuView == 'project' && isset($menuQuery['id'])) {
             $query['project_id'] = $menuQuery['id'];
         }
     } elseif ($segments[0] == 'comment') {
         $query['view'] = 'comment';
         $query['layout'] = $segments[1] === 'delete' ? 'delete' : 'edit';
         if (isset($segments[1]) && $segments[1] == 'new' && is_numeric($segments[2])) {
             $query['issue_id'] = $segments[2];
         } elseif (is_numeric($segments[2])) {
             $query['id'] = $segments[2];
         }
     } elseif ($segments[0] == 'comments') {
         $query['view'] = 'comments';
     } elseif (is_numeric($segments[0])) {
         $query['view'] = 'issue';
         $query['id'] = $segments[0];
         if (isset($segments[1]) && $segments[1] === 'edit') {
             $query['layout'] = 'edit';
         }
     } elseif ($segments[0] === 'edit' || $segments[0] === 'new') {
         $query['layout'] = 'edit';
         if ($menuView === 'comment') {
             $query['view'] = 'comment';
             if (is_numeric($segments[1])) {
                 if ($segments[0] === 'new') {
                     $query['issue_id'] = $segments[1];
                 } else {
                     $query['id'] = $segments[1];
                 }
             }
         } else {
             $query['view'] = 'issue';
             if ($segments[0] === 'new') {
                 if (isset($menuQuery['id'])) {
                     $query['project_id'] = $menuQuery['id'];
                 } elseif (isset($menuQuery['project_id'])) {
                     $query['project_id'] = $menuQuery['project_id'];
                 }
             } else {
                 if (isset($menuQuery['id'])) {
                     $query['id'] = $menuQuery['id'];
                 }
             }
         }
     } else {
         // {project}
         if (!isset($segments[1])) {
             $id = $this->modelProject->resolveAlias($segments[0]);
             $query['view'] = 'project';
             $query['id'] = $id;
         } else {
             // {project}/issues
             if ($segments[1] === 'issues') {
                 $id = $this->modelProject->resolveAlias($segments[0]);
                 $query['view'] = 'issues';
                 $query['project_id'] = $id;
             } else {
                 $query['view'] = 'issue';
                 // {project}/new
                 if ($segments[1] === 'new') {
                     $id = $this->modelProject->resolveAlias($segments[0]);
                     $query['layout'] = 'edit';
                     $query['project_id'] = $id;
                 } elseif (is_numeric($segments[1])) {
                     $query['id'] = $segments[1];
                     // {project}/{issue}/edit
                     if (isset($segments[2]) && $segments[2] == 'edit') {
                         $query['layout'] = 'edit';
                     }
                 }
             }
         }
     }
     return $query;
 }
Пример #3
0
 /**
  * Function to convert a sef route to an internal URI
  *
  * @param   JUri  &$uri  The sef URI
  *
  * @return  string  Internal URI
  *
  * @since   3.2
  * @deprecated  4.0  Attach your logic as rule to the main parse stage
  */
 protected function parseSefRoute(&$uri)
 {
     $route = $uri->getPath();
     // Remove the suffix
     if ($this->app->get('sef_suffix')) {
         if ($suffix = pathinfo($route, PATHINFO_EXTENSION)) {
             $route = str_replace('.' . $suffix, '', $route);
         }
     }
     // Get the variables from the uri
     $vars = $uri->getQuery(true);
     // Handle an empty URL (special case)
     if (empty($route)) {
         // If route is empty AND option is set in the query, assume it's non-sef url, and parse apropriately
         if (isset($vars['option']) || isset($vars['Itemid'])) {
             return $this->parseRawRoute($uri);
         }
         $item = $this->menu->getDefault($this->app->getLanguage()->getTag());
         // If user not allowed to see default menu item then avoid notices
         if (is_object($item)) {
             // Set the information in the request
             $vars = $item->query;
             // Get the itemid
             $vars['Itemid'] = $item->id;
             // Set the active menu item
             $this->menu->setActive($vars['Itemid']);
             $this->setVars($vars);
         }
         return $vars;
     }
     // Parse the application route
     $segments = explode('/', $route);
     if (count($segments) > 1 && $segments[0] == 'component') {
         $vars['option'] = 'com_' . $segments[1];
         $vars['Itemid'] = null;
         $route = implode('/', array_slice($segments, 2));
     } else {
         // Get menu items.
         $items = $this->menu->getMenu();
         $found = false;
         $route_lowercase = JString::strtolower($route);
         $lang_tag = $this->app->getLanguage()->getTag();
         // Iterate through all items and check route matches.
         foreach ($items as $item) {
             if ($item->route && JString::strpos($route_lowercase . '/', $item->route . '/') === 0 && $item->type != 'menulink') {
                 // Usual method for non-multilingual site.
                 if (!$this->app->getLanguageFilter()) {
                     // Exact route match. We can break iteration because exact item was found.
                     if ($item->route == $route_lowercase) {
                         $found = $item;
                         break;
                     }
                     // Partial route match. Item with highest level takes priority.
                     if (!$found || $found->level < $item->level) {
                         $found = $item;
                     }
                 } elseif ($item->language == '*' || $item->language == $lang_tag) {
                     // Exact route match.
                     if ($item->route == $route_lowercase) {
                         $found = $item;
                         // Break iteration only if language is matched.
                         if ($item->language == $lang_tag) {
                             break;
                         }
                     }
                     // Partial route match. Item with highest level or same language takes priority.
                     if (!$found || $found->level < $item->level || $item->language == $lang_tag) {
                         $found = $item;
                     }
                 }
             }
         }
         if (!$found) {
             $found = $this->menu->getDefault($lang_tag);
         } else {
             $route = substr($route, strlen($found->route));
             if ($route) {
                 $route = substr($route, 1);
             }
         }
         if ($found) {
             $vars['Itemid'] = $found->id;
             $vars['option'] = $found->component;
         }
     }
     // Set the active menu item
     if (isset($vars['Itemid'])) {
         $this->menu->setActive($vars['Itemid']);
     }
     // Set the variables
     $this->setVars($vars);
     // Parse the component route
     if (!empty($route) && isset($this->_vars['option'])) {
         $segments = explode('/', $route);
         if (empty($segments[0])) {
             array_shift($segments);
         }
         // Handle component route
         $component = preg_replace('/[^A-Z0-9_\\.-]/i', '', $this->_vars['option']);
         if (count($segments)) {
             $crouter = $this->getComponentRouter($component);
             $vars = $crouter->parse($segments);
             $this->setVars($vars);
         }
     } else {
         // Set active menu item
         if ($item = $this->menu->getActive()) {
             $vars = $item->query;
         }
     }
     return $vars;
 }
Пример #4
0
	function twocolumnRedirect()
	{
		$mainframe= JFactory :: getApplication();
		$option= JRequest :: getVar('option');
		$view= JRequest :: getVar('view');
		$layout= JRequest :: getVar('layout');
		$task= JRequest :: getVar('task');
		if (empty($layout) && $option=="com_osemsc" && $view=="register" && ($task!="login" && $task!="logout"))
		{
			/*
			$redirecturl= "index.php?option=com_osemsc&view=register&layout=twocolumns";
			$db= & JFactory :: getDBO();
			$query= "SELECT id FROM `#__menu` WHERE `link` LIKE '$redirecturl%'";
			$db->setQuery($query);
			$result= $db->loadResult();
			$Itemid=(!empty($result)) ? "&Itemid=".$result : "";
			*/
			jimport( 'joomla.application.menu' );
			$redirecturl = JMenu::getActive();
			$redirect= JRoute :: _($redirecturl."&layout=twocolumns");
			$redirect= str_replace("&amp;", "&", $redirect);
			$mainframe->redirect($redirect);
		}
	}