X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FMobileProfile%2FMobileProfilePlugin.php;h=e149573e88dc65fbde74770761d4ce02377d41ae;hb=0cca861ea7b029cfa8e247e225981158fef831c0;hp=1c61b4fe5291c88dbec0d1d87d749930d2b800dc;hpb=39392e03a71d94d6b984033b994b417edfc2d8d6;p=quix0rs-gnu-social.git diff --git a/plugins/MobileProfile/MobileProfilePlugin.php b/plugins/MobileProfile/MobileProfilePlugin.php index 1c61b4fe52..e149573e88 100644 --- a/plugins/MobileProfile/MobileProfilePlugin.php +++ b/plugins/MobileProfile/MobileProfilePlugin.php @@ -36,7 +36,6 @@ define('PAGE_TYPE_PREFS_MOBILEPROFILE', require_once INSTALLDIR.'/plugins/Mobile/WAP20Plugin.php'; - /** * Superclass for plugin to output XHTML Mobile Profile * @@ -46,11 +45,11 @@ require_once INSTALLDIR.'/plugins/Mobile/WAP20Plugin.php'; * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ - 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') @@ -60,17 +59,19 @@ class MobileProfilePlugin extends WAP20Plugin parent::__construct(); } - function onStartShowHTML($action) { // XXX: 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').'/' == + common_config('site', 'path').'/' == $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'])) { $this->serveMobile = true; + } else if (isset($_COOKIE['MobileOverride'])) { + // Cookie override is controlled by link at bottom. + $this->serveMobile = (bool)$_COOKIE['MobileOverride']; } else { // If they like the WAP 2.0 mimetype, serve them MP // @fixme $type is undefined, making this if case useless and spewing errors. @@ -78,18 +79,18 @@ class MobileProfilePlugin extends WAP20Plugin //if (strstr('application/vnd.wap.xhtml+xml', $type) !== false) { // $this->serveMobile = true; //} else { - // If they are a mobile device that supports WAP 2.0, + // 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, + // 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 + // May be better to group the devices in terms of // low,mid,high-end - // Or, detect the mobile devices based on their support for + // 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( @@ -138,6 +139,7 @@ class MobileProfilePlugin extends WAP20Plugin 'vodafone', 'wap1', 'wap2', + 'webos', 'windows ce' ); @@ -159,16 +161,17 @@ class MobileProfilePlugin extends WAP20Plugin $this->setMobileFeatures($httpuseragent); $this->serveMobile = true; + $this->reallyMobile = true; break; } } //} - // If they are okay with MP, and the site has a mobile server, + // If they are okay with MP, and the site has a mobile server, // redirect there - if ($this->serveMobile && + if ($this->serveMobile && common_config('site', 'mobileserver') !== false && - (common_config('site', 'mobileserver') != + (common_config('site', 'mobileserver') != common_config('site', 'server'))) { // FIXME: Redirect to equivalent page on mobile site instead @@ -192,30 +195,37 @@ class MobileProfilePlugin extends WAP20Plugin $type = common_negotiate_type($cp, $sp); if (!$type) { - throw new ClientException(_('This page is not available in a '. - 'media type you accept'), 406); + // 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); } //} header('Content-Type: '.$type); - $action->extraHeaders(); - if (preg_match("/.*\/.*xml/", $type)) { - // Required for XML documents - $action->xw->startDocument('1.0', 'UTF-8'); - } - $action->xw->writeDTD('html', - '-//WAPFORUM//DTD XHTML Mobile 1.0//EN', - $this->DTD); + if ($this->reallyMobile) { - $language = $action->getLanguage(); + $action->extraHeaders(); + if (preg_match("/.*\/.*xml/", $type)) { + // Required for XML documents + $action->xw->startDocument('1.0', 'UTF-8'); + } + $action->xw->writeDTD('html', + '-//WAPFORUM//DTD XHTML Mobile 1.0//EN', + $this->DTD); - $action->elementStart('html', array('xmlns' => 'http://www.w3.org/1999/xhtml', + $language = $action->getLanguage(); + + $action->elementStart('html', array('xmlns' => 'http://www.w3.org/1999/xhtml', 'xml:lang' => $language)); - return false; - } + return false; + } else { + return true; + } + + } function setMobileFeatures($useragent) { @@ -233,31 +243,33 @@ class MobileProfilePlugin extends WAP20Plugin } } - function onStartShowStatusNetStyles($action) { if (!$this->serveMobile) { return true; } - $action->cssLink('css/display.css'); + $action->primaryCssLink(); if (file_exists(Theme::file('css/mp-screen.css'))) { $action->cssLink('css/mp-screen.css', null, 'screen'); } else { - $action->cssLink('plugins/MobileProfile/mp-screen.css',null,'screen'); + $action->cssLink($this->path('mp-screen.css'),null,'screen'); } if (file_exists(Theme::file('css/mp-handheld.css'))) { $action->cssLink('css/mp-handheld.css', null, 'handheld'); } else { - $action->cssLink('plugins/MobileProfile/mp-handheld.css',null,'handheld'); + $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)); + return false; } - function onStartShowUAStyles($action) { if (!$this->serveMobile) { return true; @@ -274,27 +286,23 @@ class MobileProfilePlugin extends WAP20Plugin $action->elementStart('div', array('id' => 'header')); $this->_showLogo($action); - $this->_showPrimaryNav($action); - if (common_logged_in()) { - $action->showNoticeForm(); - } + $action->showPrimaryNav(); $action->elementEnd('div'); return false; } - function _showLogo($action) { $action->elementStart('address', 'vcard'); $action->elementStart('a', array('class' => 'url home bookmark', 'href' => common_local_url('public'))); - if (common_config('site', 'mobilelogo') || - file_exists(Theme::file('logo.png')) || + if (common_config('site', 'mobilelogo') || + file_exists(Theme::file('logo.png')) || file_exists(Theme::file('mobilelogo.png'))) { $action->element('img', array('class' => 'photo', - 'src' => (common_config('site', 'mobilelogo')) ? common_config('site', 'mobilelogo') : + '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'))); } @@ -303,96 +311,66 @@ class MobileProfilePlugin extends WAP20Plugin $action->elementEnd('address'); } - - function _showPrimaryNav($action) + function onStartShowAside($action) { - $user = common_current_user(); - $action->elementStart('ul', array('id' => 'site_nav_global_primary')); - if ($user) { - $action->menuItem(common_local_url('all', array('nickname' => $user->nickname)), - _('Home')); - $action->menuItem(common_local_url('profilesettings'), - _('Account')); - $action->menuItem(common_local_url('oauthconnectionssettings'), - _('Connect')); - if ($user->hasRight(Right::CONFIGURESITE)) { - $action->menuItem(common_local_url('siteadminpanel'), - _('Admin'), _('Change site configuration'), false, 'nav_admin'); - } - if (common_config('invite', 'enabled')) { - $action->menuItem(common_local_url('invite'), - _('Invite')); - } - $action->menuItem(common_local_url('logout'), - _('Logout')); - } else { - if (!common_config('site', 'closed')) { - $action->menuItem(common_local_url('register'), - _('Register')); - } - $action->menuItem(common_local_url('login'), - _('Login')); - } - if ($user || !common_config('site', 'private')) { - $action->menuItem(common_local_url('peoplesearch'), - _('Search')); + if ($this->serveMobile) { + return false; } - $action->elementEnd('ul'); } - - function onStartShowNoticeFormData($form) + function onStartShowLocalNavBlock($action) { - if (!$this->serveMobile) { - return true; - } - - $form->out->element('textarea', array('id' => 'notice_data-text', - 'cols' => 15, - 'rows' => 4, - 'name' => 'status_textarea'), - ($form->content) ? $form->content : ''); - - $contentLimit = Notice::maxContent(); - - if ($contentLimit > 0) { - $form->out->element('div', array('id' => 'notice_text-count'), - $contentLimit); - } - - if (common_config('attachments', 'uploads')) { - if ($this->mobileFeatures['inputfiletype']) { - $form->out->element('label', array('for' => 'notice_data-attach'), _('Attach')); - $form->out->element('input', array('id' => 'notice_data-attach', - 'type' => 'file', - 'name' => 'attach', - 'title' => _('Attach a file'))); - $form->out->hidden('MAX_FILE_SIZE', common_config('attachments', 'file_quota')); - } - } - if ($form->action) { - $form->out->hidden('notice_return-to', $form->action, 'returnto'); + if ($this->serveMobile) { + // @todo FIXME: "Show Navigation" / "Hide Navigation" needs i18n + $action->element('a', array('href' => '#', 'id' => 'navtoggle'), 'Show Navigation'); + return true; } - $form->out->hidden('notice_in-reply-to', $form->inreplyto, 'inreplyto'); - - return false; } - - function onStartShowAside($action) + function onEndShowScripts($action) { - if ($this->serveMobile) { - return false; - } + // @todo FIXME: "Show Navigation" / "Hide Navigation" needs i18n + $action->inlineScript(' + $(function() { + $("#mobile-toggle-disable").click(function() { + $.cookie("MobileOverride", "0", {path: "/"}); + window.location.reload(); + return false; + }); + $("#mobile-toggle-enable").click(function() { + $.cookie("MobileOverride", "1", {path: "/"}); + window.location.reload(); + return false; + }); + $("#navtoggle").click(function () { + $("#site_nav_local_views").fadeToggle(); + var text = $("#navtoggle").text(); + $("#navtoggle").text( + text == "Show Navigation" ? "Hide Navigation" : "Show Navigation"); + }); + $(".checkbox-wrapper").unbind("click"); + });' + ); } - function onStartShowScripts($action) + function onEndShowInsideFooter($action) { - + if ($this->serveMobile) { + // TRANS: Link to switch site layout from mobile to desktop mode. Appears at very bottom of page. + $linkText = _m('Switch to desktop site layout.'); + $key = 'mobile-toggle-disable'; + } else { + // TRANS: Link to switch site layout from desktop to mobile mode. Appears at very bottom of page. + $linkText = _m('Switch to mobile site layout.'); + $key = 'mobile-toggle-enable'; + } + $action->elementStart('p'); + $action->element('a', array('href' => '#', 'id' => $key), $linkText); + $action->elementEnd('p'); + return true; } - function _common_path($relative, $ssl=false) { $pathpart = (common_config('site', 'path')) ? common_config('site', 'path')."/" : ''; @@ -421,6 +399,7 @@ class MobileProfilePlugin extends WAP20Plugin 'author' => 'Sarven Capadisli', 'homepage' => 'http://status.net/wiki/Plugin:MobileProfile', 'rawdescription' => + // TRANS: Plugin description. _m('XHTML MobileProfile output for supporting user agents.')); return true; }