X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=plugins%2FMobileProfile%2FMobileProfilePlugin.php;h=5c913836dccd7db6f6375e88bf24626ee596c8d2;hb=663e4e02a1b3b1c104c2c3db19e524a486c3d981;hp=21eaa124e71178ae8d8e3669bb6dfe695c123837;hpb=7b4d138946d76200ce1c7c20e85e67538be5bf10;p=quix0rs-gnu-social.git diff --git a/plugins/MobileProfile/MobileProfilePlugin.php b/plugins/MobileProfile/MobileProfilePlugin.php index 21eaa124e7..5c913836dc 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,12 +49,13 @@ require_once INSTALLDIR.'/plugins/Mobile/WAP20Plugin.php'; class MobileProfilePlugin extends WAP20Plugin { - public $DTD = null; - public $serveMobile = false; + 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(); } @@ -62,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 @@ -85,43 +71,80 @@ 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 // 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', 'ipone', 'ipaq', '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', 'windows ce'); + $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', + 'windows ce' + ); $httpuseragent = strtolower($_SERVER['HTTP_USER_AGENT']); - foreach($this->mobiledevices as $md) { + foreach ($this->mobiledevices as $md) { if (strstr($httpuseragent, $md) !== false) { + $this->setMobileFeatures($httpuseragent); + $this->serveMobile = true; break; } @@ -136,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); } } @@ -145,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); @@ -162,6 +202,23 @@ class MobileProfilePlugin extends WAP20Plugin } + function setMobileFeatures($useragent) + { + $mobiledeviceInputFileType = array( + 'nokia' + ); + + $this->mobileFeatures['inputfiletype'] = false; + + foreach ($mobiledeviceInputFileType as $md) { + if (strstr($useragent, $md) !== false) { + $this->mobileFeatures['inputfiletype'] = true; + break; + } + } + } + + function onStartShowHeadElements($action) { if (!$action->serveMobile) { @@ -183,24 +240,16 @@ class MobileProfilePlugin extends WAP20Plugin return true; } - if (file_exists(theme_file('css/mp-screen.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; @@ -231,12 +280,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.gif'))) ? (theme_path('mobilelogo.gif')): 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')); @@ -245,8 +294,9 @@ 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'; @@ -266,14 +316,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')); @@ -281,8 +334,6 @@ class MobileProfilePlugin extends WAP20Plugin $action->menuItem(common_local_url('login'), _('Login')); } - $action->menuItem(common_local_url('doc', array('title' => 'help')), - _('Help')); if ($user || !common_config('site', 'private')) { $action->menuItem(common_local_url('peoplesearch'), _('Search')); @@ -298,28 +349,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'); @@ -358,13 +408,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; + } +}