Example #1
0
 /**
  * Returns the global JFRoute object, only creating it if it
  * doesn't already exist.
  *
  * @return  JFRoute A JFRoute object.
  */
 public static function getInstance()
 {
     if (empty(self::$_instance)) {
         self::$_instance = new JFRoute();
     }
     return self::$_instance;
 }
Example #2
0
 /**
  * Loads the entire menu table into memory.
  *
  * @return array
  */
 public function load()
 {
     // @Todo cache this
     $jlanguage = JFactory::getConfig()->getValue('language');
     if (isset(self::$_menuitems[$jlanguage])) {
         $this->_items = self::$_menuitems[$jlanguage];
         return;
     }
     // Initialise variables.
     $db = JFactory::getDbo();
     $app = JApplication::getInstance('site');
     $query = $db->getQuery(true);
     $query->select('m.id, m.menutype, m.title, m.alias, m.note, m.path AS route, m.link, m.type, m.level, m.language');
     $query->select('m.browserNav, m.access, m.params, m.home, m.img, m.template_style_id, m.component_id, m.parent_id');
     $query->select('e.element as component');
     $query->from('#__menu AS m');
     $query->leftJoin('#__extensions AS e ON m.component_id = e.extension_id');
     $query->where('m.published = 1');
     $query->where('m.parent_id > 0');
     $query->where('m.client_id = 0');
     $query->order('m.lft');
     // Set the query
     $db->setQuery($query);
     if (!($this->_items = $db->loadObjectList('id'))) {
         JError::raiseWarning(500, JText::sprintf('JERROR_LOADING_MENUS', $db->getErrorMsg()));
         return false;
     }
     foreach ($this->_items as &$item) {
         // Get parent information.
         $parent_tree = array();
         if (isset($this->_items[$item->parent_id])) {
             $parent_tree = $this->_items[$item->parent_id]->tree;
         }
         // Create tree.
         $parent_tree[] = $item->id;
         $item->tree = $parent_tree;
         // Create the query array.
         $url = str_replace('index.php?', '', $item->link);
         $url = str_replace('&', '&', $url);
         parse_str($url, $item->query);
     }
     // @Todo move this to plugin
     JFRoute::getInstance()->fixMenuItemRoutes($this->_items, null);
     // throw away everything that is not * or default as the rest is there only for translations
     $deflang = JoomFishManager::getInstance()->getDefaultLanguage();
     foreach ($this->_items as &$item) {
         if ($item->language != '*' && $item->language != $deflang) {
             unset($this->_items[(string) $item->id]);
         } else {
             if ($item->language == $deflang) {
                 $item->language = '*';
                 // either this or override JRouterSite line 222 that has * hardcoded
             }
         }
     }
     self::$_menuitems[$jlanguage] = $this->_items;
 }
Example #3
0
function jfGetOtherLanguages()
{
    // inspired by modules/mod_jflanguageselection
    $jfManager = JoomFishManager::getInstance();
    $jfrouter = JFRoute::getInstance();
    $curLang = jfGetCurrentLanguage();
    $languages = array();
    foreach ($jfManager->getActiveLanguages(true) as $lang) {
        if ($lang->lang_code != $curLang->lang_code) {
            $code = $lang->getLanguageCode();
            $languages[$code] = $jfrouter->rerouteCurrentUrl($code);
        }
    }
    return $languages;
}
Example #4
0
 function parseJFRule($router, &$uri)
 {
     //echo "got here too lang = ".$uri->getVar("lang","")."<br/>";
     $route = $uri->getPath();
     $conf = JFactory::getConfig();
     $params = $conf->getValue("jfrouter.params");
     $sefordomain = $params->get("sefordomain", "sefprefix");
     $jfm = JoomFishManager::getInstance();
     $langs = $jfm->getLanguagesIndexedById();
     if ($sefordomain == "domain") {
         $host = $uri->getHost();
         // TODO cache the indexed array
         $rawsubdomains = $params->getValue("sefsubdomain", array());
         $subdomains = array();
         foreach ($rawsubdomains as $domain) {
             list($langid, $domain) = explode("::", $domain, 2);
             // if you have inactive languages and are not logged in then skip inactive language
             if (!array_key_exists($langid, $langs)) {
                 continue;
             }
             $domain = strtolower(str_replace("http://", "", $domain));
             $domain = str_replace("https://", "", $domain);
             $domain = preg_replace("#/\$#", "", $domain);
             //$domain = str_replace("/","",$domain);
             $subdomains[$domain] = $langs[$langid]->shortcode;
         }
         if (array_key_exists($host, $subdomains)) {
             $lang = $subdomains[$host];
             // This get over written later - really stupid !!!
             $uri->setVar("lang", $lang);
             JRequest::setVar('lang', $lang);
             // I need to discover language here since menu is loaded in router
             JFRoute::getInstance()->discoverJFLanguage();
             // TODO fix this for HTTPS
             $conf->setValue('config.live_site', "http://" . $host);
             $conf->setValue("joomfish.current_host", $host);
             return array("lang" => $lang);
         }
     } else {
         // Consider stripping base path from URI
         /*
          $live_site = JURI::base();
         $livesite_uri = new JURI($live_site);
         $livesite_path = $livesite_uri->getPath();
         $route = str_replace($livesite_path,"",$route);
         */
         $sefprefixes = $params->getValue("sefprefixes", array());
         // Workaround if some language prefixes are missing
         if (!is_array($sefprefixes)) {
             $sefprefixes = array();
         }
         if (count($sefprefixes) < count($langs)) {
             foreach ($sefprefixes as $prefix) {
                 list($langid, $prefix) = explode("::", $prefix, 2);
                 if (array_key_exists($langid, $langs)) {
                     $langs[$langid]->hasprefix = true;
                 }
             }
             foreach ($langs as $lang) {
                 if (!isset($lang->hasprefix)) {
                     $sefprefixes[] = $lang->lang_id . "::" . $lang->sef;
                 }
             }
         }
         $segments = explode('/', $route);
         $seg = 0;
         while ($seg < count($segments)) {
             if (strlen($segments[$seg]) == 0) {
                 $seg++;
                 continue;
             }
             foreach ($sefprefixes as $prefix) {
                 list($langid, $prefix) = explode("::", $prefix, 2);
                 // explode off any suffix
                 if (strpos($segments[$seg], ".") > 0 && $segments[$seg] != 'index.php') {
                     $segcompare = substr($segments[$seg], 0, strpos($segments[$seg], "."));
                     // Trap for pdf, feed of html info in the extension
                     if (strpos($segments[$seg], $prefix . ".") === 0) {
                         $format = str_replace($prefix . ".", "", $segments[$seg]);
                         //$uri->setVar("format",$format);
                         //JRequest::setVar('format', $format);
                     }
                 } else {
                     $segcompare = $segments[$seg];
                 }
                 // including fix for suffix based url's and feeds
                 if ($conf->getValue('sef_suffix') == 1 && $conf->getValue('sef_rewrite') == 1 && $conf->getValue('sef')) {
                     for ($l = 0; $l < count($segments); $l++) {
                         if (!empty($segments[$l])) {
                             $format = explode(".", $segments[$l]);
                             if (!empty($format[1]) && trim($format[1]) !== "" && trim($format[1]) !== "php") {
                                 $uri->setVar("format", $format[1]);
                                 JRequest::setVar('format', $format[1]);
                                 break;
                             }
                         }
                     }
                 }
                 // does the segment match the prefix
                 if ($segcompare == $prefix) {
                     // This section forces the current url static to include the language string which means the base tag is correct - but ONLY on the home page
                     // restricting this to the homepage means no risk for image paths etc.
                     $homepage = true;
                     for ($seg2 = $seg + 1; $seg2 < count($segments); $seg2++) {
                         $segment = $segments[$seg2];
                         if (strlen($segment) > 0) {
                             $homepage = false;
                         }
                     }
                     if ($homepage) {
                         $current = JURI::current();
                         $uri = JURI::getInstance();
                         $current = $uri->toString(array('scheme', 'host', 'port', 'path'));
                     }
                     unset($segments[$seg]);
                     //array_shift($segments);
                     $uri->setPath(implode("/", $segments));
                     $lang = $langs[$langid]->shortcode;
                     // This get over written later - really stupid !!!
                     $uri->setVar("lang", $lang);
                     JRequest::setVar('lang', $lang);
                     // I need to discover language here since menu is loaded in router
                     JFRoute::getInstance()->discoverJFLanguage();
                     return array("lang" => $lang);
                 }
             }
             $seg++;
         }
     }
     JFRoute::getInstance()->discoverJFLanguage();
     return array();
 }
Example #5
0
 /**
  * function to generate a new href link
  * @param	JFLanguage	the language
  * @param 	Module parameters
  * @return	string	new href string
  */
 public static function createHRef($language, $modparams)
 {
     $code = $language->getLanguageCode();
     $jfrouter = JFRoute::getInstance();
     if ($modparams->get("cache_href", 1)) {
         $url = $jfrouter->rerouteCurrentUrlCached($code, false);
     } else {
         $url = $jfrouter->rerouteCurrentUrl($code);
     }
     return $url;
 }