From d09444309f80fe1f274ec2dda4975a96506fcca9 Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Fri, 2 Oct 2009 11:46:14 +0000 Subject: [PATCH] Init for WAP 2.0 and XHTML Mobile Profile support. WAP20Plugin is a superclass for various WAP 2.0 document types. MobileProfilePlugin extends WAP20Plugin and it is intended for serving XHTML Mobile Profile 1.0. Feature support for document types like WML 2.0 or WAP Push should be created as seperate plugins and quite possibly extend WAP20Plugin. --- plugins/Mobile/WAP20Plugin.php | 56 ++++++++ plugins/MobileProfile/MobileProfilePlugin.php | 129 ++++++++++++++++++ 2 files changed, 185 insertions(+) create mode 100644 plugins/Mobile/WAP20Plugin.php create mode 100644 plugins/MobileProfile/MobileProfilePlugin.php diff --git a/plugins/Mobile/WAP20Plugin.php b/plugins/Mobile/WAP20Plugin.php new file mode 100644 index 0000000000..aae48a5200 --- /dev/null +++ b/plugins/Mobile/WAP20Plugin.php @@ -0,0 +1,56 @@ +. + * + * @category Plugin + * @package StatusNet + * @author Sarven Capadisli + * @copyright 2009 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { + exit(1); +} + + +/** + * Superclass for plugin to output XHTML Mobile Profile + * + * @category Plugin + * @package StatusNet + * @author Sarven Capadisli + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +class WAP20Plugin extends Plugin +{ + + function onStartShowHTML($action) + { + + } + +} + + +?> diff --git a/plugins/MobileProfile/MobileProfilePlugin.php b/plugins/MobileProfile/MobileProfilePlugin.php new file mode 100644 index 0000000000..5ee2d90978 --- /dev/null +++ b/plugins/MobileProfile/MobileProfilePlugin.php @@ -0,0 +1,129 @@ +. + * + * @category Plugin + * @package StatusNet + * @author Sarven Capadisli + * @copyright 2009 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { + exit(1); +} + +define('PAGE_TYPE_PREFS', + 'application/vnd.wap.xhtml+xml, application/xhtml+xml, text/xml;q=0.9'. + ', text/html;q=0.3' + ); + +require_once INSTALLDIR.'/plugins/Mobile/WAP20Plugin.php'; + + +/** + * Superclass for plugin to output XHTML Mobile Profile + * + * @category Plugin + * @package StatusNet + * @author Sarven Capadisli + * @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 $DTDversion = null; + public $serveMobile = false; + + function __construct($DTD='http://www.wapforum.org/DTD/xhtml-mobile10.dtd') + { + $this->DTD = $DTD; + + parent::__construct(); + } + + + 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: If user is on the mobile site e.g., m.siteserver.com + // or they really want it, serve the mobile version + + // FIXME: This is dirty and probably not accurate of doing it + if ((common_config('site', 'mobileserver').'/'.common_config('site', 'path').'/' == + $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']) || + preg_match("/.*\/.*wap.*xml/", $type)) { + + $this->serveMobile = true; + } + else { + $this->serveMobile = false; + return true; + } + + header('Content-Type: '.$type); + + $action->extraHeaders(); + + $action->startXML('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; + } + + + + function onStartShowAside($action) + { + + } + + + function onStartShowScripts($action) + { + + } + +} + + +?>