Beispiel #1
0
 function showHead()
 {
     echo '<title>' . $this->getPageTitle() . "</title>\n";
     $canonical = MobileJoomla::getCanonicalURI();
     if ($canonical) {
         echo '<meta name="robots" content="noindex, nofollow">';
         echo '<link rel="canonical" href="' . $canonical . '">';
     }
 }
 function onAfterRoute()
 {
     /** @var JSite $app */
     $app = JFactory::getApplication();
     if ($app->isAdmin()) {
         // don't use MobileJoomla in backend
         return;
     }
     $is_joomla15 = $this->isJoomla15();
     // don't filter RSS and non-html
     /** @var JDocument $document */
     $document = JFactory::getDocument();
     $format = $document->getType();
     $doctype = JRequest::getVar('type', false);
     if ($doctype == 'rss' || $doctype == 'atom' || $format !== 'html' && $format !== 'raw') {
         //reset mobile content-type header
         $headers = JResponse::getHeaders();
         JResponse::clearHeaders();
         foreach ($headers as $header) {
             if (strtolower($header['name']) != 'content-type') {
                 JResponse::setHeader($header['name'], $header['value']);
             }
         }
         return;
     }
     //be last registered onAfterRender event
     $app->registerEvent('onAfterRender', 'plgSystemMobileBot_onAfterRenderLast');
     // Load config
     $MobileJoomla_Settings =& MobileJoomla::getConfig();
     $MobileJoomla_Device =& MobileJoomla::getDevice();
     jimport('joomla.environment.browser');
     $browser = JBrowser::getInstance();
     if (version_compare(JVERSION, '3.0', '<')) {
         $browser->set('_mobile', $MobileJoomla_Device['markup'] !== false);
     } else {
         $refObj = new ReflectionObject($browser);
         $refProp = $refObj->getProperty('mobile');
         $refProp->setAccessible(true);
         $refProp->setValue($browser, $MobileJoomla_Device['markup'] !== false);
     }
     JPluginHelper::importPlugin('mobile');
     $app->triggerEvent('onMobileAfterRoute', array(&$MobileJoomla_Settings, &$MobileJoomla_Device));
     $this->filterExtensions($MobileJoomla_Settings, $MobileJoomla_Device);
     // "Vary" header for proxy
     JResponse::setHeader('Vary', 'User-Agent');
     if ($MobileJoomla_Device['markup'] === false) {
         $pcpage = $MobileJoomla_Settings['pcpage'];
         if ($pcpage && $pcpage !== 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']) {
             $app->redirect($pcpage);
         }
         return;
     }
     define('_MJ', 1);
     /** @var MobileJoomla $MobileJoomla */
     $MobileJoomla = MobileJoomla::getInstance();
     if (!$is_joomla15 && isset($app->registeredurlparams)) {
         $registeredurlparams = $app->registeredurlparams;
         $this->setRequestVar('mjurlkey', null);
         unset($registeredurlparams->mjurlkey);
         $app->registeredurlparams = $registeredurlparams;
     }
     $app->triggerEvent('onMobile', array(&$MobileJoomla, &$MobileJoomla_Settings, &$MobileJoomla_Device));
     $template = $MobileJoomla->getParam('template');
     $homepage = $MobileJoomla->getParam('homepage');
     $gzip = $MobileJoomla->getParam('gzip');
     //Set template
     if (!empty($template)) {
         if ($is_joomla15) {
             $app->setUserState('setTemplate', $template);
             $app->setTemplate($template);
         } else {
             $db = JFactory::getDBO();
             $query = "SELECT params FROM #__template_styles WHERE client_id = 0 AND template = " . $db->Quote($template) . " ORDER BY id LIMIT 1";
             $db->setQuery($query);
             $params_data = $db->loadResult();
             if (empty($params_data)) {
                 $params_data = '{}';
             }
             if (version_compare(JVERSION, '1.7', '>=')) {
                 $app->setTemplate($template, $params_data);
             } elseif (version_compare(JVERSION, '1.6', '>=')) {
                 $app->setTemplate($template);
                 $template_obj = $app->getTemplate(true);
                 $template_obj->params->loadJSON($params_data);
             }
         }
     }
     // JHtml overrides
     if (version_compare(JVERSION, '3.0', '<')) {
         jimport('joomla.html.html');
         JHtml::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_mobilejoomla/override/html');
         if (@is_dir($dir = JPATH_THEMES . '/' . $template . '/override/html')) {
             JHtml::addIncludePath($dir);
         }
     } else {
         // load email.php only (workaround for new J!3 class loader)
         if (@is_file($path = JPATH_THEMES . '/' . $template . '/override/html/email.php')) {
             JLoader::register('JHtmlEmail', $path, true);
         } else {
             JLoader::register('JHtmlEmail', JPATH_ADMINISTRATOR . '/components/com_mobilejoomla/override/html/email.php', true);
         }
     }
     $this->setConfig('gzip', $gzip);
     //Set headers
     JResponse::clearHeaders();
     $document = JFactory::getDocument();
     $document->setMimeEncoding($MobileJoomla->getContentType());
     $MobileJoomla->setHeader();
     // SEO
     $canonical = MobileJoomla::getCanonicalURI();
     if ($canonical) {
         if ($format == 'html') {
             $document->addHeadLink($canonical, 'canonical');
         }
         $document->setMetaData('robots', 'noindex, nofollow');
     }
     if (JRequest::getMethod() == 'POST') {
         return;
     }
     /** @var JMenu $menu */
     $menu = $app->getMenu();
     $router = $app->getRouter();
     $Itemid = version_compare(JVERSION, '3.0', '>=') ? $app->input->getInt('Itemid') : JRequest::getInt('Itemid');
     $item = $menu->getItem($Itemid);
     if (is_object($item)) {
         $current = array_merge($item->query, $_GET, $router->getVars());
     } else {
         $current = array_merge($_GET, $router->getVars());
     }
     if (!isset($current['Itemid'])) {
         $current['Itemid'] = (string) $Itemid;
     }
     unset($current['device']);
     unset($current['lang']);
     unset($current['format']);
     unset($current['no_html']);
     unset($current['language']);
     unset($current['tp']);
     unset($current['template']);
     unset($current['templateStyle']);
     unset($current['start']);
     unset($current['limitstart']);
     unset($current['limit']);
     // fix for sh404sef
     if (isset($current['limitstart']) && $current['limitstart'] == 0) {
         unset($current['limitstart']);
     }
     if (isset($current[session_name()])) {
         unset($current[session_name()]);
     }
     if ($is_joomla15) {
         $default = $menu->getDefault();
     } else {
         $lang = JFactory::getLanguage();
         $default = $menu->getDefault($lang->getTag());
     }
     $home = $default->query;
     $home['Itemid'] = $default->id;
     if (substr($homepage, 0, 10) == 'index.php?') {
         parse_str(substr($homepage, 10), $mj_home);
         if (isset($mj_home['Itemid'])) {
             $mj_home_Itemid = (int) $mj_home['Itemid'];
             if ($is_joomla15) {
                 $menu->setDefault($mj_home_Itemid);
             } else {
                 $menu->setDefault($mj_home_Itemid, '*');
             }
         }
         if ($current == $mj_home) {
             $MobileJoomla->setHome(true);
         }
     }
     if (count($current) == 0 || $current == $home) {
         $MobileJoomla->setHome(true);
         if ($homepage) {
             if (isset($mj_home_Itemid)) {
                 global $Itemid;
                 $Itemid = $mj_home_Itemid;
                 $menu->setActive($Itemid);
                 if (version_compare(JVERSION, '3.2', '>=')) {
                     $menu->authorise($Itemid);
                 } elseif (!$is_joomla15) {
                     $app->authorise($Itemid);
                 } else {
                     $app->authorize($Itemid);
                 }
             }
             $_SERVER['REQUEST_URI'] = JUri::base(true) . '/' . $homepage;
             if (isset($mj_home)) {
                 $_SERVER['QUERY_STRING'] = substr($homepage, 10);
                 foreach ($current as $key => $val) {
                     unset($_REQUEST[$key]);
                     unset($_GET[$key]);
                 }
                 JRequest::set($mj_home, 'get');
             } else {
                 $url = 'http';
                 $url .= isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) != 'off' ? 's' : '';
                 $url .= '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
                 $uri = new JUri($url);
                 $router = $app->getRouter();
                 $result = $router->parse($uri);
                 JRequest::set($result, 'get');
             }
         }
     }
 }