X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FMobileProfile%2FMobileProfilePlugin.php;h=f788639aed7383d7b7fe1ca2ec9042c2cc257f07;hb=84663dccff4d3ca4e321cef99e9d4d556ba29ec4;hp=f36d97ad95dbc54bd2ea26f819c4d02697f3c03b;hpb=44a5cd28050fa732c32943a8193664f44a4cfad1;p=quix0rs-gnu-social.git diff --git a/plugins/MobileProfile/MobileProfilePlugin.php b/plugins/MobileProfile/MobileProfilePlugin.php index f36d97ad95..f788639aed 100644 --- a/plugins/MobileProfile/MobileProfilePlugin.php +++ b/plugins/MobileProfile/MobileProfilePlugin.php @@ -31,7 +31,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } -define('PAGE_TYPE_PREFS', +define('PAGE_TYPE_PREFS_MOBILEPROFILE', 'application/vnd.wap.xhtml+xml, application/xhtml+xml, text/html;q=0.9'); require_once INSTALLDIR.'/plugins/Mobile/WAP20Plugin.php'; @@ -49,13 +49,13 @@ require_once INSTALLDIR.'/plugins/Mobile/WAP20Plugin.php'; class MobileProfilePlugin extends WAP20Plugin { - public $DTD = null; - public $serveMobile = false; - public $mobileFeatures = array(); + public $DTD = null; + public $serveMobile = false; + public $mobileFeatures = array(); function __construct($DTD='http://www.wapforum.org/DTD/xhtml-mobile10.dtd') { - $this->DTD = $DTD; + $this->DTD = $DTD; parent::__construct(); } @@ -63,21 +63,6 @@ class MobileProfilePlugin extends WAP20Plugin function onStartShowHTML($action) { - if (!$type) { - $httpaccept = isset($_SERVER['HTTP_ACCEPT']) ? - $_SERVER['HTTP_ACCEPT'] : null; - - $cp = common_accept_to_prefs($httpaccept); - $sp = common_accept_to_prefs(PAGE_TYPE_PREFS); - - $type = common_negotiate_type($cp, $sp); - - if (!$type) { - throw new ClientException(_('This page is not available in a '. - 'media type you accept'), 406); - } - } - // XXX: This should probably graduate to WAP20Plugin // If they are on the mobile site, serve them MP @@ -86,22 +71,20 @@ class MobileProfilePlugin extends WAP20Plugin $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'])) { $this->serveMobile = true; - } - else { + } else { // If they like the WAP 2.0 mimetype, serve them MP if (strstr('application/vnd.wap.xhtml+xml', $type) !== false) { $this->serveMobile = true; - } - else { + } 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, - // find a better way + // perhaps use $_SESSION or cookies - // May be better to categorize 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 @@ -158,9 +141,9 @@ class MobileProfilePlugin extends WAP20Plugin $httpuseragent = strtolower($_SERVER['HTTP_USER_AGENT']); - foreach($this->mobiledevices as $md) { + foreach ($this->mobiledevices as $md) { if (strstr($httpuseragent, $md) !== false) { - setMobileFeatures($httpuseragent); + $this->setMobileFeatures($httpuseragent); $this->serveMobile = true; break; @@ -176,8 +159,7 @@ class MobileProfilePlugin extends WAP20Plugin common_config('site', 'server'))) { // FIXME: Redirect to equivalent page on mobile site instead - header("Location: ".$this->_common_path('')); - exit(); + common_redirect($this->_common_path(''), 302); } } @@ -185,11 +167,29 @@ class MobileProfilePlugin extends WAP20Plugin return true; } + if (!$type) { + $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) { + throw new ClientException(_('This page is not available in a '. + 'media type you accept'), 406); + } + } + header('Content-Type: '.$type); $action->extraHeaders(); - - $action->startXML('html', + 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); @@ -204,14 +204,13 @@ class MobileProfilePlugin extends WAP20Plugin function setMobileFeatures($useragent) { - /* List of devices that support input type="file" */ $mobiledeviceInputFileType = array( 'nokia' ); $this->mobileFeatures['inputfiletype'] = false; - foreach($mobiledeviceInputFileType as $md) { + foreach ($mobiledeviceInputFileType as $md) { if (strstr($useragent, $md) !== false) { $this->mobileFeatures['inputfiletype'] = true; break; @@ -241,30 +240,32 @@ class MobileProfilePlugin extends WAP20Plugin return true; } - if (file_exists(theme_file('css/mp-screen.css'))) { + $action->cssLink('css/display.css'); + + if (file_exists(Theme::file('css/mp-screen.css'))) { $action->cssLink('css/mp-screen.css', null, 'screen'); - } - else { - $action->element('link', array('rel' => 'stylesheet', - 'type' => 'text/css', - 'href' => common_path('plugins/MobileProfile/mp-screen.css') . '?version=' . STATUSNET_VERSION, - 'media' => 'screen')); + } else { + $action->cssLink('plugins/MobileProfile/mp-screen.css',null,'screen'); } - if (file_exists(theme_file('css/mp-handheld.css'))) { + if (file_exists(Theme::file('css/mp-handheld.css'))) { $action->cssLink('css/mp-handheld.css', null, 'handheld'); - } - else { - $action->element('link', array('rel' => 'stylesheet', - 'type' => 'text/css', - 'href' => common_path('plugins/MobileProfile/mp-handheld.css') . '?version=' . STATUSNET_VERSION, - 'media' => 'handheld')); + } else { + $action->cssLink('plugins/MobileProfile/mp-handheld.css',null,'handheld'); } return false; } + function onStartShowUAStyles($action) { + if (!$this->serveMobile) { + return true; + } + + return false; + } + function onStartShowHeader($action) { if (!$this->serveMobile) { @@ -289,12 +290,12 @@ class MobileProfilePlugin extends WAP20Plugin $action->elementStart('a', array('class' => 'url home bookmark', 'href' => common_local_url('public'))); if (common_config('site', 'mobilelogo') || - file_exists(theme_file('logo.png')) || - file_exists(theme_file('mobilelogo.gif'))) { + 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') : - ((file_exists(theme_file('mobilelogo.png'))) ? (theme_path('mobilelogo.png')) : theme_path('logo.png')), + ((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')); @@ -303,15 +304,14 @@ class MobileProfilePlugin extends WAP20Plugin } - function _showPrimaryNav($action) { - $user = common_current_user(); + function _showPrimaryNav($action) + { + $user = common_current_user(); $connect = ''; if (common_config('xmpp', 'enabled')) { $connect = 'imsettings'; } else if (common_config('sms', 'enabled')) { $connect = 'smssettings'; - } else if (common_config('twitter', 'enabled')) { - $connect = 'twittersettings'; } $action->elementStart('ul', array('id' => 'site_nav_global_primary')); @@ -324,14 +324,17 @@ class MobileProfilePlugin extends WAP20Plugin $action->menuItem(common_local_url($connect), _('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 { + } else { if (!common_config('site', 'closed')) { $action->menuItem(common_local_url('register'), _('Register')); @@ -354,28 +357,27 @@ class MobileProfilePlugin extends WAP20Plugin } $form->out->element('textarea', array('id' => 'notice_data-text', - 'cols' => 35, + 'cols' => 15, 'rows' => 4, 'name' => 'status_textarea'), ($form->content) ? $form->content : ''); $contentLimit = Notice::maxContent(); - $form->out->element('script', array('type' => 'text/javascript'), - 'maxLength = ' . $contentLimit . ';'); - if ($contentLimit > 0) { $form->out->element('div', array('id' => 'notice_text-count'), $contentLimit); } if (common_config('attachments', 'uploads')) { - $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 ($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'); @@ -414,13 +416,21 @@ class MobileProfilePlugin extends WAP20Plugin $serverpart = common_config('site', 'mobileserver'); } } else { - $proto = 'http'; + $proto = 'http'; $serverpart = common_config('site', 'mobileserver'); } return $proto.'://'.$serverpart.'/'.$pathpart.$relative; } -} - -?> + function onPluginVersion(&$versions) + { + $versions[] = array('name' => 'MobileProfile', + 'version' => STATUSNET_VERSION, + 'author' => 'Sarven Capadisli', + 'homepage' => 'http://status.net/wiki/Plugin:MobileProfile', + 'rawdescription' => + _m('XHTML MobileProfile output for supporting user agents.')); + return true; + } +}