Unverified Commit 89d9f113 authored by Alex Pott's avatar Alex Pott
Browse files

Issue #3110972 by sanduhrs, jungle, raman.b, samiullah, alexpott, andypost,...

Issue #3110972 by sanduhrs, jungle, raman.b, samiullah, alexpott, andypost, catch, xjm: Update easyrdf library to 1.0.0
parent f0462354
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@
        "symfony/lock": "^4.4",
        "symfony/browser-kit": "^4.4",
        "symfony/dom-crawler": "^4.4 !=4.4.5",
        "easyrdf/easyrdf": "^0.9"
        "easyrdf/easyrdf": "^0.9 || ^1.0"
    },
    "replace": {
        "paragonie/random_compat": "9.99.99",
+23 −13
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@
        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
        "This file is @generated automatically"
    ],
    "content-hash": "8877ebb73b0fca58e145989738ba04b4",
    "content-hash": "059e8aee61edb73b1526b840eb6c624c",
    "packages": [
        {
            "name": "asm89/stack-cors",
@@ -4805,35 +4805,39 @@
        },
        {
            "name": "easyrdf/easyrdf",
            "version": "0.9.1",
            "version": "1.0.0",
            "source": {
                "type": "git",
                "url": "https://github.com/easyrdf/easyrdf.git",
                "reference": "acd09dfe0555fbcfa254291e433c45fdd4652566"
                "reference": "8735708426066b791c2a6d40329050d5cf31385c"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/easyrdf/easyrdf/zipball/acd09dfe0555fbcfa254291e433c45fdd4652566",
                "reference": "acd09dfe0555fbcfa254291e433c45fdd4652566",
                "url": "https://api.github.com/repos/easyrdf/easyrdf/zipball/8735708426066b791c2a6d40329050d5cf31385c",
                "reference": "8735708426066b791c2a6d40329050d5cf31385c",
                "shasum": ""
            },
            "require": {
                "ext-mbstring": "*",
                "ext-pcre": "*",
                "php": ">=5.2.8"
                "php": ">=7.1.0"
            },
            "require-dev": {
                "phpunit/phpunit": "~3.5",
                "sami/sami": "~1.4",
                "squizlabs/php_codesniffer": "~1.4.3"
                "ml/json-ld": "~1.0",
                "phpunit/phpunit": "^7",
                "sami/sami": "^4",
                "semsol/arc2": "~2.2",
                "squizlabs/php_codesniffer": "3.*",
                "zendframework/zend-http": "~2.3"
            },
            "suggest": {
                "ml/json-ld": "~1.0"
                "ml/json-ld": "~1.0",
                "semsol/arc2": "~2.2"
            },
            "type": "library",
            "autoload": {
                "psr-0": {
                    "EasyRdf_": "lib/"
                "psr-4": {
                    "EasyRdf\\": "lib"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
@@ -4850,6 +4854,7 @@
                {
                    "name": "Alexey Zakhlestin",
                    "email": "indeyets@gmail.com",
                    "homepage": "http://indeyets.ru/",
                    "role": "Developer"
                }
            ],
@@ -4863,7 +4868,12 @@
                "rdfa",
                "sparql"
            ],
            "time": "2015-02-27T09:45:49+00:00"
            "support": {
                "forum": "http://groups.google.com/group/easyrdf/",
                "issues": "http://github.com/easyrdf/easyrdf/issues",
                "source": "https://github.com/easyrdf/easyrdf/tree/master"
            },
            "time": "2020-07-14T23:45:20+00:00"
        },
        {
            "name": "fabpot/goutte",
+1 −1
Original line number Diff line number Diff line
@@ -12,7 +12,7 @@
        "behat/mink-selenium2-driver": "^1.4",
        "composer/composer": "^1.9.1",
        "drupal/coder": "^8.3.7",
        "easyrdf/easyrdf": "^0.9",
        "easyrdf/easyrdf": "^0.9 || ^1.0",
        "justinrainbow/json-schema": "^5.2",
        "mikey179/vfsstream": "^1.6.8",
        "phpspec/prophecy": "^1.7",
+1 −1
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@
        "composer/xdebug-handler": "1.4.3",
        "doctrine/instantiator": "1.3.1",
        "drupal/coder": "8.3.9",
        "easyrdf/easyrdf": "0.9.1",
        "easyrdf/easyrdf": "1.0.0",
        "fabpot/goutte": "v3.3.0",
        "instaclick/php-webdriver": "1.4.7",
        "justinrainbow/json-schema": "5.2.10",
+0 −352
Original line number Diff line number Diff line
<?php
// @codingStandardsIgnoreFile

namespace Drupal\Tests\rdf\Traits;

/**
 * This is copy of \EasyRdf_ParsedUri from the easyrdf/easyrdf library.
 *
 * It fixes a PHP 7.4 deprecation in \EasyRdf_ParsedUri::normalize().
 *
 * @todo https://www.drupal.org/project/drupal/issues/3110972 Remove this work
 *   around.
 */

/**
 * EasyRdf
 *
 * LICENSE
 *
 * Copyright (c) 2009-2013 Nicholas J Humfrey.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 * 3. The name of the author 'Nicholas J Humfrey" may be used to endorse or
 *    promote products derived from this software without specific prior
 *    written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package    EasyRdf
 * @copyright  Copyright (c) 2009-2013 Nicholas J Humfrey
 * @license    http://www.opensource.org/licenses/bsd-license.php
 */


/**
 * A RFC3986 compliant URI parser
 *
 * @package    EasyRdf
 * @copyright  Copyright (c) 2009-2013 Nicholas J Humfrey
 * @license    http://www.opensource.org/licenses/bsd-license.php
 * @link       http://www.ietf.org/rfc/rfc3986.txt
 */
class EasyRdf_ParsedUri
{
    // For all URIs:
    private $scheme = null;
    private $fragment = null;

    // For hierarchical URIs:
    private $authority = null;
    private $path = null;
    private $query = null;

    const URI_REGEX = "|^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?|";

    /** Constructor for creating a new parsed URI
     *
     * The $uri parameter can either be a string or an
     * associative array with the following keys:
     * scheme, authority, path, query, fragment
     *
     * @param  mixed $uri  The URI as a string or an array
     * @return object EasyRdf_ParsedUri
     */
    public function __construct($uri = null)
    {
        if (is_string($uri)) {
            if (preg_match(self::URI_REGEX, $uri, $matches)) {
                if (!empty($matches[1])) {
                    $this->scheme = isset($matches[2]) ? $matches[2] : '';
                }
                if (!empty($matches[3])) {
                    $this->authority = isset($matches[4]) ? $matches[4] : '';
                }
                $this->path = isset($matches[5]) ? $matches[5] : '';
                if (!empty($matches[6])) {
                    $this->query = isset($matches[7]) ? $matches[7] : '';
                }
                if (!empty($matches[8])) {
                    $this->fragment = isset($matches[9]) ? $matches[9] : '';
                }
            }
        } elseif (is_array($uri)) {
            $this->scheme = isset($uri['scheme']) ? $uri['scheme'] : null;
            $this->authority = isset($uri['authority']) ? $uri['authority'] : null;
            $this->path = isset($uri['path']) ? $uri['path'] : null;
            $this->query = isset($uri['query']) ? $uri['query'] : null;
            $this->fragment = isset($uri['fragment']) ? $uri['fragment'] : null;
        }
    }


    /** Returns true if this is an absolute (complete) URI
     * @return boolean
     */
    public function isAbsolute()
    {
        return $this->scheme !== null;
    }

    /** Returns true if this is an relative (partial) URI
     * @return boolean
     */
    public function isRelative()
    {
        return $this->scheme === null;
    }

    /** Returns the scheme of the URI (e.g. http)
     * @return string
     */
    public function getScheme()
    {
        return $this->scheme;
    }

    /** Sets the scheme of the URI (e.g. http)
     * @param string $scheme The new value for the scheme of the URI
     */
    public function setScheme($scheme)
    {
        $this->scheme = $scheme;
    }

    /** Returns the authority of the URI (e.g. www.example.com:8080)
     * @return string
     */
    public function getAuthority()
    {
        return $this->authority;
    }

    /** Sets the authority of the URI (e.g. www.example.com:8080)
     * @param string $authority The new value for the authority component of the URI
     */
    public function setAuthority($authority)
    {
        $this->authority = $authority;
    }

    /** Returns the path of the URI (e.g. /foo/bar)
     * @return string
     */
    public function getPath()
    {
        return $this->path;
    }

    /** Set the path of the URI (e.g. /foo/bar)
     * @param string $path The new value for the path component of the URI
     */
    public function setPath($path)
    {
        $this->path = $path;
    }

    /** Returns the query string part of the URI (e.g. foo=bar)
     * @return string
     */
    public function getQuery()
    {
        return $this->query;
    }

    /** Set the query string of the URI (e.g. foo=bar)
     * @param string $query The new value for the query string component of the URI
     */
    public function setQuery($query)
    {
        $this->query = $query;
    }

    /** Returns the fragment part of the URI (i.e. after the #)
     * @return string
     */
    public function getFragment()
    {
        return $this->fragment;
    }

    /** Set the fragment of the URI (i.e. after the #)
     * @param string $fragment The new value for the fragment component of the URI
     */
    public function setFragment($fragment)
    {
        $this->fragment = $fragment;
    }


    /**
     * Normalizes the path of this URI if it has one. Normalizing a path means
     * that any unnecessary '.' and '..' segments are removed. For example, the
     * URI http://example.com/a/b/../c/./d would be normalized to
     * http://example.com/a/c/d
     *
     * @return object EasyRdf_ParsedUri
     */
    public function normalize()
    {
        if (empty($this->path)) {
            return $this;
        }

        // Remove ./ from the start
        if (substr($this->path, 0, 2) == './') {
            // Remove both characters
            $this->path = substr($this->path, 2);
        }

        // Remove /. from the end
        if (substr($this->path, -2) == '/.') {
            // Remove only the last dot, not the slash!
            $this->path = substr($this->path, 0, -1);
        }

        if (substr($this->path, -3) == '/..') {
            $this->path .= '/';
        }

        // Split the path into its segments
        $segments = explode('/', $this->path);
        $newSegments = array();

        // Remove all unnecessary '.' and '..' segments
        foreach ($segments as $segment) {
            if ($segment == '..') {
                // Remove the previous part of the path
                $count = count($newSegments);
                if ($count > 0 && $newSegments[$count-1]) {
                    array_pop($newSegments);
                }
            } elseif ($segment == '.') {
                // Ignore
                continue;
            } else {
                array_push($newSegments, $segment);
            }
        }

        // Construct the new normalized path
        $this->path = implode('/', $newSegments);

        // Allow easy chaining of methods
        return $this;
    }

    /**
     * Resolves a relative URI using this URI as the base URI.
     */
    public function resolve($relUri)
    {
        // If it is a string, then convert it to a parsed object
        if (is_string($relUri)) {
            $relUri = new EasyRdf_ParsedUri($relUri);
        }

        // This code is based on the pseudocode in section 5.2.2 of RFC3986
        $target = new EasyRdf_ParsedUri();
        if ($relUri->scheme) {
            $target->scheme = $relUri->scheme;
            $target->authority = $relUri->authority;
            $target->path = $relUri->path;
            $target->query = $relUri->query;
        } else {
            if ($relUri->authority) {
                $target->authority = $relUri->authority;
                $target->path = $relUri->path;
                $target->query = $relUri->query;
            } else {
                if (empty($relUri->path)) {
                    $target->path = $this->path;
                    if ($relUri->query) {
                        $target->query = $relUri->query;
                    } else {
                        $target->query = $this->query;
                    }
                } else {
                    if (substr($relUri->path, 0, 1) == '/') {
                        $target->path = $relUri->path;
                    } else {
                        $path = $this->path;
                        $lastSlash = strrpos($path, '/');
                        if ($lastSlash !== false) {
                            $path = substr($path, 0, $lastSlash + 1);
                        } else {
                            $path = '/';
                        }

                        $target->path .= $path . $relUri->path;
                    }
                    $target->query = $relUri->query;
                }
                $target->authority = $this->authority;
            }
            $target->scheme = $this->scheme;
        }

        $target->fragment = $relUri->fragment;

        $target->normalize();

        return $target;
    }

    /** Convert the parsed URI back into a string
     *
     * @return string The URI as a string
     */
    public function toString()
    {
        $str = '';
        if ($this->scheme !== null) {
            $str .= $this->scheme . ':';
        }
        if ($this->authority !== null) {
            $str .= '//' . $this->authority;
        }
        $str .= $this->path;
        if ($this->query !== null) {
            $str .= '?' . $this->query;
        }
        if ($this->fragment !== null) {
            $str .= '#' . $this->fragment;
        }
        return $str;
    }

    /** Magic method to convert the URI, when casted, back to a string
     *
     * @return string The URI as a string
     */
    public function __toString()
    {
        return $this->toString();
    }
}
Loading