forked from GNUsocial/gnu-social
		
	
		
			
	
	
		
			137 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			137 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Part of XML_XRD
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * PHP version 5
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @category XML
							 | 
						||
| 
								 | 
							
								 * @package  XML_XRD
							 | 
						||
| 
								 | 
							
								 * @author   Christian Weiske <cweiske@php.net>
							 | 
						||
| 
								 | 
							
								 * @license  http://www.gnu.org/copyleft/lesser.html LGPL
							 | 
						||
| 
								 | 
							
								 * @link     http://pear.php.net/package/XML_XRD
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Generate XML from a XML_XRD object.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @category XML
							 | 
						||
| 
								 | 
							
								 * @package  XML_XRD
							 | 
						||
| 
								 | 
							
								 * @author   Christian Weiske <cweiske@php.net>
							 | 
						||
| 
								 | 
							
								 * @license  http://www.gnu.org/copyleft/lesser.html LGPL
							 | 
						||
| 
								 | 
							
								 * @version  Release: @package_version@
							 | 
						||
| 
								 | 
							
								 * @link     http://pear.php.net/package/XML_XRD
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class XML_XRD_Serializer_XML
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    protected $xrd;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Create new instance
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param XML_XRD $xrd XRD instance to convert to XML
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function __construct(XML_XRD $xrd)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->xrd = $xrd;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Generate XML.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return string Full XML code
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function __toString()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $hasXsi = false;
							 | 
						||
| 
								 | 
							
								        $x = new XMLWriter();
							 | 
						||
| 
								 | 
							
								        $x->openMemory();
							 | 
						||
| 
								 | 
							
								        //no encoding means UTF-8
							 | 
						||
| 
								 | 
							
								        //http://www.w3.org/TR/2008/REC-xml-20081126/#sec-guessing-no-ext-info
							 | 
						||
| 
								 | 
							
								        $x->startDocument('1.0', 'UTF-8');
							 | 
						||
| 
								 | 
							
								        $x->setIndent(true);
							 | 
						||
| 
								 | 
							
								        $x->startElement('XRD');
							 | 
						||
| 
								 | 
							
								        $x->writeAttribute('xmlns', 'http://docs.oasis-open.org/ns/xri/xrd-1.0');
							 | 
						||
| 
								 | 
							
								        $x->writeAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
							 | 
						||
| 
								 | 
							
								        if ($this->xrd->id) {
							 | 
						||
| 
								 | 
							
								            $x->writeAttribute('xml:id', $this->xrd->id);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($this->xrd->expires !== null) {
							 | 
						||
| 
								 | 
							
								            $x->writeElement(
							 | 
						||
| 
								 | 
							
								                'Expires', gmdate('Y-m-d\TH:i:s\Z', $this->xrd->expires)
							 | 
						||
| 
								 | 
							
								            );
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if ($this->xrd->subject !== null) {
							 | 
						||
| 
								 | 
							
								            $x->writeElement('Subject', $this->xrd->subject);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        foreach ($this->xrd->aliases as $alias) {
							 | 
						||
| 
								 | 
							
								            $x->writeElement('Alias', $alias);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        foreach ($this->xrd->properties as $property) {
							 | 
						||
| 
								 | 
							
								            $this->writeProperty($x, $property, $hasXsi);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        foreach ($this->xrd->links as $link) {
							 | 
						||
| 
								 | 
							
								            $x->startElement('Link');
							 | 
						||
| 
								 | 
							
								            $x->writeAttribute('rel', $link->rel);
							 | 
						||
| 
								 | 
							
								            if ($link->type !== null) {
							 | 
						||
| 
								 | 
							
								                $x->writeAttribute('type', $link->type);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if ($link->href !== null) {
							 | 
						||
| 
								 | 
							
								                $x->writeAttribute('href', $link->href);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            //template only when no href
							 | 
						||
| 
								 | 
							
								            if ($link->template !== null && $link->href === null) {
							 | 
						||
| 
								 | 
							
								                $x->writeAttribute('template', $link->template);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            foreach ($link->titles as $lang => $value) {
							 | 
						||
| 
								 | 
							
								                $x->startElement('Title');
							 | 
						||
| 
								 | 
							
								                if ($lang) {
							 | 
						||
| 
								 | 
							
								                    $x->writeAttribute('xml:lang', $lang);
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                $x->text($value);
							 | 
						||
| 
								 | 
							
								                $x->endElement();
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            foreach ($link->properties as $property) {
							 | 
						||
| 
								 | 
							
								                $this->writeProperty($x, $property, $hasXsi);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            $x->endElement();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $x->endElement();
							 | 
						||
| 
								 | 
							
								        $x->endDocument();
							 | 
						||
| 
								 | 
							
								        $s = $x->flush();
							 | 
						||
| 
								 | 
							
								        if (!$hasXsi) {
							 | 
						||
| 
								 | 
							
								            $s = str_replace(
							 | 
						||
| 
								 | 
							
								                ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"', '', $s
							 | 
						||
| 
								 | 
							
								            );
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return $s;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Write a property in the XMLWriter stream output
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param XMLWriter                $x        Writer object to write to
							 | 
						||
| 
								 | 
							
								     * @param XML_XRD_Element_Property $property Property to write
							 | 
						||
| 
								 | 
							
								     * @param boolean                  &$hasXsi  If an xsi: attribute is used
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    protected function writeProperty(
							 | 
						||
| 
								 | 
							
								        XMLWriter $x, XML_XRD_Element_Property $property, &$hasXsi
							 | 
						||
| 
								 | 
							
								    ) {
							 | 
						||
| 
								 | 
							
								        $x->startElement('Property');
							 | 
						||
| 
								 | 
							
								        $x->writeAttribute('type', $property->type);
							 | 
						||
| 
								 | 
							
								        if ($property->value === null) {
							 | 
						||
| 
								 | 
							
								            $x->writeAttribute('xsi:nil', 'true');
							 | 
						||
| 
								 | 
							
								            $hasXsi = true;
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            $x->text($property->value);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $x->endElement();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								?>
							 |