]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Init for WAP 2.0 and XHTML Mobile Profile support. WAP20Plugin is a
authorSarven Capadisli <csarven@status.net>
Fri, 2 Oct 2009 11:46:14 +0000 (11:46 +0000)
committerSarven Capadisli <csarven@status.net>
Fri, 2 Oct 2009 11:46:14 +0000 (11:46 +0000)
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 [new file with mode: 0644]
plugins/MobileProfile/MobileProfilePlugin.php [new file with mode: 0644]

diff --git a/plugins/Mobile/WAP20Plugin.php b/plugins/Mobile/WAP20Plugin.php
new file mode 100644 (file)
index 0000000..aae48a5
--- /dev/null
@@ -0,0 +1,56 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Superclass for WAP 2.0 support
+ *
+ * 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);
+}
+
+
+/**
+ * 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 WAP20Plugin extends Plugin
+{
+
+    function onStartShowHTML($action)
+    {
+
+    }
+
+}
+
+
+?>
diff --git a/plugins/MobileProfile/MobileProfilePlugin.php b/plugins/MobileProfile/MobileProfilePlugin.php
new file mode 100644 (file)
index 0000000..5ee2d90
--- /dev/null
@@ -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)
+    {
+
+    }
+
+}
+
+
+?>