]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - extlib/libomb/plain_xrds_writer.php
Merge remote branch 'statusnet/1.0.x' into irc-plugin
[quix0rs-gnu-social.git] / extlib / libomb / plain_xrds_writer.php
index b4a6e990bc594dbe7c1a0ba5d7015fa61b403f88..ba1027b611ce19c098bd20a01673d36fcbb94c61 100755 (executable)
@@ -1,13 +1,6 @@
 <?php
-
-require_once 'xrds_writer.php';
-
 /**
- * Write OMB-specific XRDS using XMLWriter.
- *
- * This class writes the XRDS file announcing the OMB server. It uses
- * OMB_XMLWriter, which is a subclass of XMLWriter. An instance of
- * OMB_Plain_XRDS_Writer should be passed to OMB_Service_Provider->writeXRDS.
+ * This file is part of libomb
  *
  * PHP version 5
  *
@@ -24,25 +17,45 @@ require_once 'xrds_writer.php';
  * 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/>.
  *
- * @package   OMB
- * @author    Adrian Lang <mail@adrianlang.de>
- * @copyright 2009 Adrian Lang
- * @license   http://www.gnu.org/licenses/agpl.html GNU AGPL 3.0
- **/
+ * @package OMB
+ * @author  Adrian Lang <mail@adrianlang.de>
+ * @license http://www.gnu.org/licenses/agpl.html GNU AGPL 3.0
+ * @version 0.1a-20090828
+ * @link    http://adrianlang.de/libomb
+ */
+
+require_once 'xrds_writer.php';
 
-class OMB_Plain_XRDS_Writer implements OMB_XRDS_Writer {
-  public function writeXRDS($user, $mapper) {
-    header('Content-Type: application/xrds+xml');
-    $xw = new XMLWriter();
-    $xw->openURI('php://output');
-    $xw->setIndent(true);
+/**
+ * Write OMB-specific XRDS using XMLWriter
+ *
+ * This class writes the XRDS file announcing the OMB server. It uses XMLWriter.
+ * An instance of OMB_Plain_XRDS_Writer should be passed to
+ * OMB_Service_Provider->writeXRDS.
+ */
+class OMB_Plain_XRDS_Writer implements OMB_XRDS_Writer
+{
+    /**
+     * Write XRDS using XMLWriter
+     *
+     * Outputs a XRDS document specifying an OMB service.
+     *
+     * @param OMB_profile     $user   The target user for the OMB service
+     * @param OMB_XRDS_Mapper $mapper An OMB_XRDS_Mapper providing endpoint URLs
+     */
+    public function writeXRDS($user, $mapper)
+    {
+        header('Content-Type: application/xrds+xml');
+        $xw = new XMLWriter();
+        $xw->openURI('php://output');
+        $xw->setIndent(true);
 
-    $xw->startDocument('1.0', 'UTF-8');
-    $this->writeFullElement($xw, 'XRDS',  array('xmlns' => 'xri://$xrds'), array(
-        array('XRD',  array('xmlns' => 'xri://$xrd*($v*2.0)',
-                                          'xml:id' => 'oauth',
-                                          'xmlns:simple' => 'http://xrds-simple.net/core/1.0',
-                                          'version' => '2.0'), array(
+        $xw->startDocument('1.0', 'UTF-8');
+        $this->_writeFullElement($xw, 'XRDS', array('xmlns' => 'xri://$xrds'), array(
+        array('XRD', array('xmlns' => 'xri://$xrd*($v*2.0)',
+                            'xml:id' => 'oauth',
+                            'xmlns:simple' => 'http://xrds-simple.net/core/1.0',
+                            'version' => '2.0'), array(
           array('Type', null, 'xri://$xrds*simple'),
           array('Service', null, array(
             array('Type', null, OAUTH_ENDPOINT_REQUEST),
@@ -73,10 +86,10 @@ class OMB_Plain_XRDS_Writer implements OMB_XRDS_Writer {
             array('Type', null, OAUTH_HMAC_SHA1)
           ))
         )),
-        array('XRD',  array('xmlns' => 'xri://$xrd*($v*2.0)',
-                                          'xml:id' => 'omb',
-                                          'xmlns:simple' => 'http://xrds-simple.net/core/1.0',
-                                          'version' => '2.0'), array(
+        array('XRD', array('xmlns' => 'xri://$xrd*($v*2.0)',
+                           'xml:id' => 'omb',
+                           'xmlns:simple' => 'http://xrds-simple.net/core/1.0',
+                           'version' => '2.0'), array(
           array('Type', null, 'xri://$xrds*simple'),
           array('Service', null, array(
             array('Type', null, OMB_ENDPOINT_POSTNOTICE),
@@ -87,8 +100,8 @@ class OMB_Plain_XRDS_Writer implements OMB_XRDS_Writer {
             array('URI', null, $mapper->getURL(OMB_ENDPOINT_UPDATEPROFILE))
           ))
         )),
-        array('XRD',  array('xmlns' => 'xri://$xrd*($v*2.0)',
-                                          'version' => '2.0'), array(
+        array('XRD', array('xmlns' => 'xri://$xrd*($v*2.0)',
+                           'version' => '2.0'), array(
           array('Type', null, 'xri://$xrds*simple'),
           array('Service', null, array(
             array('Type', null, OAUTH_DISCOVERY),
@@ -98,27 +111,40 @@ class OMB_Plain_XRDS_Writer implements OMB_XRDS_Writer {
             array('Type', null, OMB_VERSION),
             array('URI', null, '#omb')
           ))
-        ))
-      ));
-    $xw->endDocument();
-    $xw->flush();
-  }
-
-  public static function writeFullElement($xw, $tag, $attributes, $content) {
-    $xw->startElement($tag);
-    if (!is_null($attributes)) {
-      foreach ($attributes as $name => $value) {
-        $xw->writeAttribute($name, $value);
-      }
+        ))));
+        $xw->endDocument();
+        $xw->flush();
     }
-    if (is_array($content)) {
-      foreach ($content as $values) {
-        OMB_Plain_XRDS_Writer::writeFullElement($xw, $values[0], $values[1], $values[2]);
-      }
-    } else {
-      $xw->text($content);
+
+    /**
+     * Write a complex XML element
+     *
+     * Outputs a XML element with attributes and content.
+     *
+     * @param XMLWriter    $xw         The XMLWriter used to output the element
+     * @param string       $tag        The tag name
+     * @param array|null   $attributes A map of XML attributes
+     * @param array|string $content    The content of the element; either an
+     *                                 array of child nodes each specified by a
+     *                                 three entry-array ($tag, $attributes,
+     *                                 $content) or a string
+     */
+    private function _writeFullElement($xw, $tag, $attributes, $content)
+    {
+        $xw->startElement($tag);
+        if (!is_null($attributes)) {
+            foreach ($attributes as $name => $value) {
+                $xw->writeAttribute($name, $value);
+            }
+        }
+        if (is_array($content)) {
+            foreach ($content as $val) {
+                $this->_writeFullElement($xw, $val[0], $val[1], $val[2]);
+            }
+        } else {
+            $xw->text($content);
+        }
+        $xw->fullEndElement();
     }
-    $xw->fullEndElement();
-  }
 }
 ?>