diff options
Diffstat (limited to 'extlib/libomb/plain_xrds_writer.php')
-rwxr-xr-x | extlib/libomb/plain_xrds_writer.php | 128 |
1 files changed, 77 insertions, 51 deletions
diff --git a/extlib/libomb/plain_xrds_writer.php b/extlib/libomb/plain_xrds_writer.php index b4a6e990b..ba1027b61 100755 --- a/extlib/libomb/plain_xrds_writer.php +++ b/extlib/libomb/plain_xrds_writer.php @@ -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(); - } } ?> |