public function initialize($context) { $conf = Symphony::Configuration(); $result = MobileDetector::detect(); $cookie = $conf->get(self::CONF_COOKIE, self::CONF); $url = $conf->get(self::CONF_URL, self::CONF); $devices = $conf->get(self::CONF_DEVICES, self::CONF); if ($devices) { $devices = explode(', ', $devices); } else { $devices = array(); } /** * Allows other extensions to override when and where a mobile device is redirected. * * @delegate MobileRedirection * @param string $context /frontend/ * @param string $url * @param array $devices * @param MobileDetectorResults $result */ Symphony::ExtensionManager()->notifyMembers('MobileRedirection', '/frontend/', array('url' => &$url, 'devices' => &$devices, 'result' => $result)); // User is requesting mobile redirection be enabled: if (isset($_GET['is-mobile']) && isset($_SESSION[$cookie])) { unset($_SESSION[$cookie]); } // User is requesting mobile redirection be disabled: if (isset($_GET['not-mobile']) || isset($_SESSION[$cookie])) { // Not a mobile, this request only: if ($_GET['not-mobile'] == 'once') { return; } // Not a mobile permenantly: $_SESSION[$cookie] = 'yes'; return; } $can_redirect = $url && $result->passed(); // Device was not detected, stop. if ($devices) { $can_redirect = false; foreach ($devices as $name) { if (!isset($result->devices()->{$name})) { continue; } if (!$result->devices()->{$name}->detected) { continue; } $can_redirect = true; break; } } if ($can_redirect) { $current = $this->sanitizeUrl(getCurrentPage()); $redirect = $this->sanitizeUrl($url); if ($redirect !== $current && strpos($current, $redirect) !== 0) { redirect($redirect); } } }
public function execute($param_pool) { $data = MobileDetector::detect(); $result = new XMLElement('device'); $result->setAttribute('is-mobile', 'no'); if ($data->passed()) { $result->setAttribute('is-mobile', 'yes'); } foreach ($data->devices() as $type => $values) { if (!$values->detected) { continue; } $item = new XMLElement($type); foreach ($values->captures as $name => $value) { $item->setAttribute($name, $value); } $result->appendChild($item); } return $result; }