summaryrefslogtreecommitdiff
path: root/plugins/MobileProfile
diff options
context:
space:
mode:
authorSarven Capadisli <csarven@status.net>2009-10-02 11:46:14 +0000
committerSarven Capadisli <csarven@status.net>2009-10-02 11:46:14 +0000
commitd09444309f80fe1f274ec2dda4975a96506fcca9 (patch)
tree4f0911682c494efc1cdf5f282231f77eed4fea89 /plugins/MobileProfile
parentf65baaaa4f48b84392200bb54161887669440cab (diff)
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.
Diffstat (limited to 'plugins/MobileProfile')
-rw-r--r--plugins/MobileProfile/MobileProfilePlugin.php129
1 files changed, 129 insertions, 0 deletions
diff --git a/plugins/MobileProfile/MobileProfilePlugin.php b/plugins/MobileProfile/MobileProfilePlugin.php
new file mode 100644
index 000000000..5ee2d9097
--- /dev/null
+++ b/plugins/MobileProfile/MobileProfilePlugin.php
@@ -0,0 +1,129 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * XHTML Mobile Profile plugin that uses WAP 2.0 Plugin
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Plugin
+ * @package StatusNet
+ * @author Sarven Capadisli <csarven@status.net>
+ * @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 <csarven@status.net>
+ * @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)
+ {
+
+ }
+
+}
+
+
+?>