X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FMobileProfile%2FMobileProfilePlugin.php;h=4129035ebb284a4fe742ae7da7b772c7b94362c0;hb=871912a00a3e627569ac65111d55b47f5d8ccedf;hp=196a262095baa7034ed096da6b7441d52f313909;hpb=412adfb587e6796cf9db060ed5f749063a5c9fd0;p=quix0rs-gnu-social.git diff --git a/plugins/MobileProfile/MobileProfilePlugin.php b/plugins/MobileProfile/MobileProfilePlugin.php index 196a262095..4129035ebb 100644 --- a/plugins/MobileProfile/MobileProfilePlugin.php +++ b/plugins/MobileProfile/MobileProfilePlugin.php @@ -27,9 +27,7 @@ * @link http://status.net/ */ -if (!defined('STATUSNET') && !defined('LACONICA')) { - exit(1); -} +if (!defined('GNUSOCIAL')) { exit(1); } define('PAGE_TYPE_PREFS_MOBILEPROFILE', 'application/vnd.wap.xhtml+xml, application/xhtml+xml, text/html;q=0.9'); @@ -49,6 +47,7 @@ class MobileProfilePlugin extends WAP20Plugin { public $DTD = null; public $serveMobile = false; + public $reallyMobile = false; public $mobileFeatures = array(); function __construct($DTD='http://www.wapforum.org/DTD/xhtml-mobile10.dtd') @@ -58,122 +57,120 @@ class MobileProfilePlugin extends WAP20Plugin parent::__construct(); } - function onStartShowHTML($action) + public function onStartShowHTML(Action $action) { - // XXX: This should probably graduate to WAP20Plugin + // TODO: A lot of this should probably graduate to WAP20Plugin - // If they are on the mobile site, serve them MP - if ((common_config('site', 'mobileserver').'/'. - common_config('site', 'path').'/' == - $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'])) { + $httpaccept = isset($_SERVER['HTTP_ACCEPT']) ? $_SERVER['HTTP_ACCEPT'] : null; + + $cp = common_accept_to_prefs($httpaccept); + $sp = common_accept_to_prefs(PAGE_TYPE_PREFS_MOBILEPROFILE); + + $type = common_negotiate_type($cp, $sp); + if (!$type) { + // TRANS: Client exception thrown when requesting a not supported media type. + throw new ClientException(_m('This page is not available in a '. + 'media type you accept.'), 406); + } + + // If they are on the mobile site, serve them MP + if ((common_config('site', 'mobileserver').'/'.common_config('site', 'path').'/' + == $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'])) { $this->serveMobile = true; - } else if (isset($_COOKIE['MobileOverride'])) { + } elseif (isset($_COOKIE['MobileOverride'])) { // Cookie override is controlled by link at bottom. $this->serveMobile = (bool)$_COOKIE['MobileOverride']; - } else { + } elseif (strstr('application/vnd.wap.xhtml+xml', $type) !== false) { // If they like the WAP 2.0 mimetype, serve them MP - // @fixme $type is undefined, making this if case useless and spewing errors. - // What's the intent? - //if (strstr('application/vnd.wap.xhtml+xml', $type) !== false) { - // $this->serveMobile = true; - //} else { - // If they are a mobile device that supports WAP 2.0, - // serve them MP - - // XXX: Browser sniffing sucks - - // I really don't like going through this every page, - // perhaps use $_SESSION or cookies - - // May be better to group the devices in terms of - // low,mid,high-end - - // Or, detect the mobile devices based on their support for - // MP 1.0, 1.1, or 1.2 may be ideal. Possible? - - $this->mobiledevices = array( - 'alcatel', - 'android', - 'audiovox', - 'au-mic,', - 'avantgo', - 'blackberry', - 'blazer', - 'cldc-', - 'danger', - 'epoc', - 'ericsson', - 'ericy', - 'iphone', - 'ipaq', - 'ipod', - 'j2me', - 'lg', - 'midp-', - 'mobile', - 'mot', - 'netfront', - 'nitro', - 'nokia', - 'opera mini', - 'palm', - 'palmsource', - 'panasonic', - 'philips', - 'pocketpc', - 'portalmmm', - 'rover', - 'samsung', - 'sanyo', - 'series60', - 'sharp', - 'sie-', - 'smartphone', - 'sony', - 'symbian', - 'up.browser', - 'up.link', - 'up.link', - 'vodafone', - 'wap1', - 'wap2', - 'webos', - 'windows ce' - ); - - $blacklist = array( - 'ipad', // Larger screen handles the full theme fairly well. - ); - - $httpuseragent = strtolower($_SERVER['HTTP_USER_AGENT']); - - foreach ($blacklist as $md) { - if (strstr($httpuseragent, $md) !== false) { - $this->serveMobile = false; - return true; - } + $this->serveMobile = true; + } elseif (array_key_exists('HTTP_USER_AGENT', $_SERVER)) { + // If they are a mobile device that supports WAP 2.0, + // serve them MP + + // XXX: Browser sniffing sucks + + // I really don't like going through this every page, + // perhaps use $_SESSION or cookies + + // May be better to group the devices in terms of + // low,mid,high-end + + // Or, detect the mobile devices based on their support for + // MP 1.0, 1.1, or 1.2 may be ideal. Possible? + + $this->mobiledevices = array( + 'alcatel', + 'android', + 'audiovox', + 'au-mic,', + 'avantgo', + 'blackberry', + 'blazer', + 'cldc-', + 'danger', + 'epoc', + 'ericsson', + 'ericy', + 'iphone', + 'ipaq', + 'ipod', + 'j2me', + 'lg', + 'maemo', + 'midp-', + 'mobile', + 'mot', + 'netfront', + 'nitro', + 'nokia', + 'opera mini', + 'palm', + 'palmsource', + 'panasonic', + 'philips', + 'pocketpc', + 'portalmmm', + 'rover', + 'samsung', + 'sanyo', + 'series60', + 'sharp', + 'sie-', + 'smartphone', + 'sony', + 'symbian', + 'up.browser', + 'up.link', + 'up.link', + 'vodafone', + 'wap1', + 'wap2', + 'webos', + 'windows ce' + ); + + $blacklist = array( + 'ipad', // Larger screen handles the full theme fairly well. + ); + + $httpuseragent = strtolower($_SERVER['HTTP_USER_AGENT']); + + foreach ($blacklist as $md) { + if (strstr($httpuseragent, $md) !== false) { + $this->serveMobile = false; + return true; } + } - foreach ($this->mobiledevices as $md) { - if (strstr($httpuseragent, $md) !== false) { - $this->setMobileFeatures($httpuseragent); + foreach ($this->mobiledevices as $md) { + if (strstr($httpuseragent, $md) !== false) { + $this->setMobileFeatures($httpuseragent); - $this->serveMobile = true; - break; - } + $this->serveMobile = true; + $this->reallyMobile = true; + break; } - //} - - // If they are okay with MP, and the site has a mobile server, - // redirect there - if ($this->serveMobile && - common_config('site', 'mobileserver') !== false && - (common_config('site', 'mobileserver') != - common_config('site', 'server'))) { - - // FIXME: Redirect to equivalent page on mobile site instead - common_redirect($this->_common_path(''), 302); } } @@ -181,41 +178,23 @@ class MobileProfilePlugin extends WAP20Plugin return true; } - // @fixme $type is undefined, making this if case useless and spewing errors. - // What's the intent? - //if (!$type) { - $httpaccept = isset($_SERVER['HTTP_ACCEPT']) ? - $_SERVER['HTTP_ACCEPT'] : null; + // If they are okay with MP, and the site has a mobile server, + // redirect there + if (common_config('site', 'mobileserver') !== false && + common_config('site', 'mobileserver') != common_config('site', 'server')) { - $cp = common_accept_to_prefs($httpaccept); - $sp = common_accept_to_prefs(PAGE_TYPE_PREFS_MOBILEPROFILE); - - $type = common_negotiate_type($cp, $sp); - - if (!$type) { - // TRANS: Client exception thrown when requesting a not supported media type. - throw new ClientException(_m('This page is not available in a '. - 'media type you accept.'), 406); - } - //} + // FIXME: Redirect to equivalent page on mobile site instead + common_redirect($this->_common_path(''), 302); + } header('Content-Type: '.$type); - $action->extraHeaders(); - if (preg_match("/.*\/.*xml/", $type)) { - // Required for XML documents - $action->xw->startDocument('1.0', 'UTF-8'); + if ($this->reallyMobile) { + $action->setDTD('html', '-//WAPFORUM//DTD XHTML Mobile 1.0//EN', $this->DTD); } - $action->xw->writeDTD('html', - '-//WAPFORUM//DTD XHTML Mobile 1.0//EN', - $this->DTD); - - $language = $action->getLanguage(); - $action->elementStart('html', array('xmlns' => 'http://www.w3.org/1999/xhtml', - 'xml:lang' => $language)); - - return false; + // continue + return true; } function setMobileFeatures($useragent) @@ -234,7 +213,7 @@ class MobileProfilePlugin extends WAP20Plugin } } - function onStartShowStatusNetStyles($action) + public function onStartShowStylesheets(Action $action) { if (!$this->serveMobile) { return true; @@ -242,26 +221,23 @@ class MobileProfilePlugin extends WAP20Plugin $action->primaryCssLink(); + $action->cssLink($this->path('mp-screen.css'),null,'screen'); if (file_exists(Theme::file('css/mp-screen.css'))) { $action->cssLink('css/mp-screen.css', null, 'screen'); - } else { - $action->cssLink($this->path('mp-screen.css'),null,'screen'); } + $action->cssLink($this->path('mp-handheld.css'),null,'handheld'); if (file_exists(Theme::file('css/mp-handheld.css'))) { $action->cssLink('css/mp-handheld.css', null, 'handheld'); - } else { - $action->cssLink($this->path('mp-handheld.css'),null,'handheld'); } // Allow other plugins to load their styles. - Event::handle('EndShowStatusNetStyles', array($action)); - Event::handle('EndShowLaconicaStyles', array($action)); + Event::handle('EndShowStylesheets', array($action)); return false; } - function onStartShowUAStyles($action) { + public function onStartShowUAStyles(Action $action) { if (!$this->serveMobile) { return true; } @@ -269,7 +245,7 @@ class MobileProfilePlugin extends WAP20Plugin return false; } - function onStartShowHeader($action) + public function onStartShowHeader(Action $action) { if (!$this->serveMobile) { return true; @@ -283,42 +259,48 @@ class MobileProfilePlugin extends WAP20Plugin return false; } - function _showLogo($action) + protected function _showLogo(Action $action) { - $action->elementStart('address', 'vcard'); - $action->elementStart('a', array('class' => 'url home bookmark', - 'href' => common_local_url('public'))); + $action->elementStart('address'); + if (common_config('singleuser', 'enabled')) { + $user = User::singleUser(); + $url = common_local_url('showstream', array('nickname' => $user->getNickname())); + } else { + $url = common_local_url('public'); + } + + $action->elementStart('a', array('class' => 'h-card home bookmark', + 'href' => $url)); + if (common_config('site', 'mobilelogo') || file_exists(Theme::file('logo.png')) || file_exists(Theme::file('mobilelogo.png'))) { - $action->element('img', array('class' => 'photo', + $action->element('img', array('class' => 'u-photo', 'src' => (common_config('site', 'mobilelogo')) ? common_config('site', 'mobilelogo') : ((file_exists(Theme::file('mobilelogo.png'))) ? (Theme::path('mobilelogo.png')) : Theme::path('logo.png')), 'alt' => common_config('site', 'name'))); } - $action->element('span', array('class' => 'fn org'), common_config('site', 'name')); $action->elementEnd('a'); $action->elementEnd('address'); } - function onStartShowAside($action) + public function onStartShowAside(Action $action) { if ($this->serveMobile) { return false; } } - function onStartShowLocalNavBlock($action) + public function onStartShowLocalNavBlock(Action $action) { if ($this->serveMobile) { // @todo FIXME: "Show Navigation" / "Hide Navigation" needs i18n $action->element('a', array('href' => '#', 'id' => 'navtoggle'), 'Show Navigation'); - return true; } } - function onEndShowScripts($action) + public function onEndShowScripts(Action $action) { // @todo FIXME: "Show Navigation" / "Hide Navigation" needs i18n $action->inlineScript(' @@ -339,13 +321,16 @@ class MobileProfilePlugin extends WAP20Plugin $("#navtoggle").text( text == "Show Navigation" ? "Hide Navigation" : "Show Navigation"); }); - $(".checkbox-wrapper").unbind("click"); });' ); + + if ($this->serveMobile) { + $action->inlineScript('$(function() { $(".checkbox-wrapper").unbind("click"); });'); + } } - function onEndShowInsideFooter($action) + public function onEndShowInsideFooter(Action $action) { if ($this->serveMobile) { // TRANS: Link to switch site layout from mobile to desktop mode. Appears at very bottom of page. @@ -383,10 +368,10 @@ class MobileProfilePlugin extends WAP20Plugin return $proto.'://'.$serverpart.'/'.$pathpart.$relative; } - function onPluginVersion(&$versions) + function onPluginVersion(array &$versions) { $versions[] = array('name' => 'MobileProfile', - 'version' => STATUSNET_VERSION, + 'version' => GNUSOCIAL_VERSION, 'author' => 'Sarven Capadisli', 'homepage' => 'http://status.net/wiki/Plugin:MobileProfile', 'rawdescription' =>