]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - extlib/libomb/omb_yadis_xrds.php
Apply upstream fix to MSN library for darkip
[quix0rs-gnu-social.git] / extlib / libomb / omb_yadis_xrds.php
index 89921203b0a377c07d98ababa7ff4ad5b7befed6..a05477c103d34ad457056be5e3bfee29e36b00b0 100755 (executable)
@@ -1,14 +1,6 @@
 <?php
-
-require_once 'Auth/Yadis/Yadis.php';
-require_once 'unsupportedserviceexception.php';
-require_once 'invalidyadisexception.php';
-
 /**
- * OMB XRDS representation
- *
- * This class represents a Yadis XRDS file for OMB. It adds some useful methods to
- * Auth_Yadis_XRDS.
+ * This file is part of libomb
  *
  * PHP version 5
  *
@@ -25,172 +17,193 @@ require_once 'invalidyadisexception.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
- **/
-
-class OMB_Yadis_XRDS extends Auth_Yadis_XRDS {
-
-  protected $fetcher;
-
-  /**
-   * Create an instance from URL
-   *
-   * Constructs an OMB_Yadis_XRDS object from a given URL. A full Yadis
-   * discovery is performed on the URL and the XRDS is parsed.
-   * Throws an OMB_InvalidYadisException when no Yadis is discovered or the
-   * detected XRDS file is broken.
-   *
-   * @param string                 $url     The URL on which Yadis discovery
-   *                                        should be performed on
-   * @param Auth_Yadis_HTTPFetcher $fetcher A fetcher used to get HTTP
-   *                                        resources
-   *
-   * @access public
-   *
-   * @return OMB_Yadis_XRDS The initialized object representing the given
-   *                        resource
-   **/
-  public static function fromYadisURL($url, $fetcher) {
-    /* Perform a Yadis discovery. */
-    $yadis = Auth_Yadis_Yadis::discover($url, $fetcher);
-    if ($yadis->failed) {
-      throw new OMB_InvalidYadisException($url);
-    }
-
-    /* Parse the XRDS file. */
-    $xrds = OMB_Yadis_XRDS::parseXRDS($yadis->response_text);
-    if ($xrds === null) {
-      throw new OMB_InvalidYadisException($url);
-    }
-    $xrds->fetcher = $fetcher;
-    return $xrds;
-  }
-
-  /**
-   * Get a specific service
-   *
-   * Returns the Auth_Yadis_Service object corresponding to the given service
-   * URI.
-   * Throws an OMB_UnsupportedServiceException if the service is not available.
-   *
-   * @param string $service URI specifier of the requested service
-   *
-   * @access public
-   *
-   * @return Auth_Yadis_Service The object representing the requested service
-   **/
-  public function getService($service) {
-    $match = $this->services(array( create_function('$s',
-                           "return in_array('$service', \$s->getTypes());")));
-    if ($match === array()) {
-      throw new OMB_UnsupportedServiceException($service);
-    }
-    return $match[0];
-  }
-
-  /**
-   * Get a specific XRD
-   *
-   * Returns the OMB_Yadis_XRDS object corresponding to the given URI.
-   * Throws an OMB_UnsupportedServiceException if the XRD is not available.
-   * Note that getXRD tries to resolve external XRD parts as well.
-   *
-   * @param string $uri URI specifier of the requested XRD
-   *
-   * @access public
-   *
-   * @return OMB_Yadis_XRDS The object representing the requested XRD
-   **/
-  public function getXRD($uri) {
-    $nexthash = strpos($uri, '#');
-    if ($nexthash !== 0) {
-      if ($nexthash !== false) {
-        $cururi = substr($uri, 0, $nexthash);
-        $nexturi = substr($uri, $nexthash);
-      }
-      return
-        OMB_Yadis_XRDS::fromYadisURL($cururi, $this->fetcher)->getXRD($nexturi);
-    }
-
-    $id = substr($uri, 1);
-    foreach ($this->allXrdNodes as $node) {
-      $attrs = $this->parser->attributes($node);
-      if (array_key_exists('xml:id', $attrs) && $attrs['xml:id'] == $id) {
-        /* Trick the constructor into thinking this is the only node. */
-        $bogus_nodes = array($node);
-        return new OMB_Yadis_XRDS($this->parser, $bogus_nodes);
-      }
-    }
-    throw new OMB_UnsupportedServiceException($uri);
-  }
-
-  /**
-   * Parse an XML string containing a XRDS document
-   *
-   * Parse an XML string (XRDS document) and return either a
-   * Auth_Yadis_XRDS object or null, depending on whether the
-   * XRDS XML is valid.
-   * Copy and paste from parent to select correct constructor.
-   *
-   * @param string $xml_string An XRDS XML string.
-   *
-   * @access public
-   *
-   * @return mixed An instance of OMB_Yadis_XRDS or null,
-   *               depending on the validity of $xml_string
-   **/
-
-  public function &parseXRDS($xml_string, $extra_ns_map = null) {
-    $_null = null;
-
-    if (!$xml_string) {
-      return $_null;
-    }
+ * @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
+ */
 
-    $parser = Auth_Yadis_getXMLParser();
-
-    $ns_map = Auth_Yadis_getNSMap();
-
-    if ($extra_ns_map && is_array($extra_ns_map)) {
-      $ns_map = array_merge($ns_map, $extra_ns_map);
-    }
-
-    if (!($parser && $parser->init($xml_string, $ns_map))) {
-      return $_null;
-    }
+require_once 'Auth/Yadis/Yadis.php';
+require_once 'unsupportedserviceexception.php';
+require_once 'invalidyadisexception.php';
 
-    // Try to get root element.
-    $root = $parser->evalXPath('/xrds:XRDS[1]');
-    if (!$root) {
-      return $_null;
+/**
+ * OMB XRDS representation
+ *
+ * This class represents a Yadis XRDS file for OMB. It adds some useful methods to
+ * Auth_Yadis_XRDS.
+ */
+class OMB_Yadis_XRDS extends Auth_Yadis_XRDS
+{
+
+    protected $fetcher;
+
+    /**
+     * Create an instance from URL
+     *
+     * Constructs an OMB_Yadis_XRDS object from a given URL. A full Yadis
+     * discovery is performed on the URL and the XRDS is parsed.
+     * Throws an OMB_InvalidYadisException when no Yadis is discovered or the
+     * detected XRDS file is broken.
+     *
+     * @param string                 $url     The URL on which Yadis discovery
+     *                                        should be performed on
+     * @param Auth_Yadis_HTTPFetcher $fetcher A fetcher used to get HTTP
+     *                                        resources
+     *
+     * @access public
+     *
+     * @return OMB_Yadis_XRDS The initialized object representing the given
+     *                        resource
+     */
+    public static function fromYadisURL($url, $fetcher)
+    {
+        /* Perform a Yadis discovery. */
+        $yadis = Auth_Yadis_Yadis::discover($url, $fetcher);
+        if ($yadis->failed) {
+            throw new OMB_InvalidYadisException($url);
+        }
+
+        /* Parse the XRDS file. */
+        $xrds = OMB_Yadis_XRDS::parseXRDS($yadis->response_text);
+        if ($xrds === null) {
+            throw new OMB_InvalidYadisException($url);
+        }
+        $xrds->fetcher = $fetcher;
+        return $xrds;
     }
 
-    if (is_array($root)) {
-      $root = $root[0];
+    /**
+     * Get a specific service
+     *
+     * Returns the Auth_Yadis_Service object corresponding to the given service
+     * URI.
+     * Throws an OMB_UnsupportedServiceException if the service is not
+     * available.
+     *
+     * @param string $service URI specifier of the requested service
+     *
+     * @access public
+     *
+     * @return Auth_Yadis_Service The object representing the requested service
+     */
+    public function getService($service)
+    {
+        $match = $this->services(array(create_function('$s',
+                             "return in_array('$service', \$s->getTypes());")));
+        if ($match === array()) {
+            throw new OMB_UnsupportedServiceException($service);
+        }
+        return $match[0];
     }
 
-    $attrs = $parser->attributes($root);
-
-    if (array_key_exists('xmlns:xrd', $attrs) &&
-          $attrs['xmlns:xrd'] != Auth_Yadis_XMLNS_XRDS) {
-      return $_null;
-    } else if (array_key_exists('xmlns', $attrs) &&
-                   preg_match('/xri/', $attrs['xmlns']) &&
-                   $attrs['xmlns'] != Auth_Yadis_XMLNS_XRD_2_0) {
-      return $_null;
+    /**
+     * Get a specific XRD
+     *
+     * Returns the OMB_Yadis_XRDS object corresponding to the given URI.
+     * Throws an OMB_UnsupportedServiceException if the XRD is not available.
+     * Note that getXRD tries to resolve external XRD parts as well.
+     *
+     * @param string $uri URI specifier of the requested XRD
+     *
+     * @access public
+     *
+     * @return OMB_Yadis_XRDS The object representing the requested XRD
+     */
+    public function getXRD($uri)
+    {
+        $nexthash = strpos($uri, '#');
+        if ($nexthash === false) {
+            throw new OMB_InvalidYadisException("‘$uri’ does not specify a " .
+                                                'valid XML node.');
+        }
+
+        if ($nexthash > 0) {
+            $cururi  = substr($uri, 0, $nexthash);
+            $nexturi = substr($uri, $nexthash);
+            return OMB_Yadis_XRDS::fromYadisURL($cururi, $this->fetcher)
+                                               ->getXRD($nexturi);
+        }
+
+        $id = substr($uri, 1);
+        foreach ($this->allXrdNodes as $node) {
+            $attrs = $this->parser->attributes($node);
+            if (array_key_exists('xml:id', $attrs) && $attrs['xml:id'] == $id) {
+                /* Trick the constructor into thinking this is the only node. */
+                $bogus_nodes = array($node);
+                return new OMB_Yadis_XRDS($this->parser, $bogus_nodes);
+            }
+        }
+        throw new OMB_UnsupportedServiceException($uri);
     }
 
-    // Get the last XRD node.
-    $xrd_nodes = $parser->evalXPath('/xrds:XRDS[1]/xrd:XRD');
-
-    if (!$xrd_nodes) {
-      return $_null;
+    /**
+     * Parse an XML string containing a XRDS document
+     *
+     * Parses an XML string (XRDS document) and returns either an
+     * Auth_Yadis_XRDS object or null, depending on whether the XRDS XML is
+     * valid.
+     * This method is just copy and paste from the parent class to select the
+     * correct constructor.
+     *
+     * @param string $xml_string   An XRDS XML string
+     * @param array  $extra_ns_map Additional namespace declarations
+     *
+     * @access public
+     *
+     * @return mixed An instance of OMB_Yadis_XRDS or null,
+     *               depending on the validity of $xml_string
+     */
+    public static function parseXRDS($xml_string, $extra_ns_map = null)
+    {
+        $_null = null;
+
+        if (!$xml_string) {
+            return $_null;
+        }
+
+        $parser = Auth_Yadis_getXMLParser();
+
+        $ns_map = Auth_Yadis_getNSMap();
+
+        if ($extra_ns_map && is_array($extra_ns_map)) {
+            $ns_map = array_merge($ns_map, $extra_ns_map);
+        }
+
+        if (!($parser && $parser->init($xml_string, $ns_map))) {
+            return $_null;
+        }
+
+        // Try to get root element.
+        $root = $parser->evalXPath('/xrds:XRDS[1]');
+        if (!$root) {
+            return $_null;
+        }
+
+        if (is_array($root)) {
+            $root = $root[0];
+        }
+
+        $attrs = $parser->attributes($root);
+
+        if (array_key_exists('xmlns:xrd', $attrs) &&
+                    $attrs['xmlns:xrd'] != Auth_Yadis_XMLNS_XRDS) {
+            return $_null;
+        } else if (array_key_exists('xmlns', $attrs) &&
+                                     preg_match('/xri/', $attrs['xmlns']) &&
+                                     $attrs['xmlns'] != Auth_Yadis_XMLNS_XRD_2_0) {
+            return $_null;
+        }
+
+        // Get the last XRD node.
+        $xrd_nodes = $parser->evalXPath('/xrds:XRDS[1]/xrd:XRD');
+
+        if (!$xrd_nodes) {
+            return $_null;
+        }
+
+        $xrds = new OMB_Yadis_XRDS($parser, $xrd_nodes);
+        return $xrds;
     }
-
-    $xrds = new OMB_Yadis_XRDS($parser, $xrd_nodes);
-    return $xrds;
-  }
 }