First commit
This commit is contained in:
commit
c6e2478c40
13918 changed files with 2303184 additions and 0 deletions
2
vendor/webmozart/path-util/.gitignore
vendored
Normal file
2
vendor/webmozart/path-util/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
/vendor/
|
||||
composer.lock
|
8
vendor/webmozart/path-util/.styleci.yml
vendored
Normal file
8
vendor/webmozart/path-util/.styleci.yml
vendored
Normal file
|
@ -0,0 +1,8 @@
|
|||
preset: symfony
|
||||
|
||||
enabled:
|
||||
- ordered_use
|
||||
- strict
|
||||
|
||||
disabled:
|
||||
- empty_return
|
29
vendor/webmozart/path-util/.travis.yml
vendored
Normal file
29
vendor/webmozart/path-util/.travis.yml
vendored
Normal file
|
@ -0,0 +1,29 @@
|
|||
language: php
|
||||
|
||||
sudo: false
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/.composer/cache/files
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- php: 5.3
|
||||
- php: 5.4
|
||||
- php: 5.5
|
||||
- php: 5.6
|
||||
- php: 5.6
|
||||
env: COMPOSER_FLAGS='--prefer-lowest --prefer-stable'
|
||||
- php: hhvm
|
||||
- php: nightly
|
||||
allow_failures:
|
||||
- php: hhvm
|
||||
- php: nightly
|
||||
fast_finish: true
|
||||
|
||||
install: composer update $COMPOSER_FLAGS -n
|
||||
|
||||
script: vendor/bin/phpunit --verbose --coverage-clover=coverage.clover
|
||||
|
||||
after_script:
|
||||
- sh -c 'if [ "$TRAVIS_PHP_VERSION" != "hhvm" ]; then wget https://scrutinizer-ci.com/ocular.phar && php ocular.phar code-coverage:upload --format=php-clover coverage.clover; fi;'
|
68
vendor/webmozart/path-util/CHANGELOG.md
vendored
Normal file
68
vendor/webmozart/path-util/CHANGELOG.md
vendored
Normal file
|
@ -0,0 +1,68 @@
|
|||
Changelog
|
||||
=========
|
||||
|
||||
* 2.3.0 (2015-12-17)
|
||||
|
||||
* added `Url::makeRelative()` for calculating relative paths between URLs
|
||||
* fixed `Path::makeRelative()` to trim leading dots when moving outside of
|
||||
the base path
|
||||
|
||||
* 2.2.3 (2015-10-05)
|
||||
|
||||
* fixed `Path::makeRelative()` to produce `..` when called with the parent
|
||||
directory of a path
|
||||
|
||||
* 2.2.2 (2015-08-24)
|
||||
|
||||
* `Path::makeAbsolute()` does not fail anymore if an absolute path is passed
|
||||
with a different root (partition) than the base path
|
||||
|
||||
* 2.2.1 (2015-08-24)
|
||||
|
||||
* fixed minimum versions in composer.json
|
||||
|
||||
* 2.2.0 (2015-08-14)
|
||||
|
||||
* added `Path::normalize()`
|
||||
|
||||
* 2.1.0 (2015-07-14)
|
||||
|
||||
* `Path::canonicalize()` now turns `~` into the user's home directory on
|
||||
Unix and Windows 8 or later.
|
||||
|
||||
* 2.0.0 (2015-05-21)
|
||||
|
||||
* added support for streams, e.g. "phar://C:/path/to/file"
|
||||
* added `Path::join()`
|
||||
* all `Path` methods now throw exceptions if parameters with invalid types are
|
||||
passed
|
||||
* added an internal buffer to `Path::canonicalize()` in order to increase the
|
||||
performance of the `Path` class
|
||||
|
||||
* 1.1.0 (2015-03-19)
|
||||
|
||||
* added `Path::getFilename()`
|
||||
* added `Path::getFilenameWithoutExtension()`
|
||||
* added `Path::getExtension()`
|
||||
* added `Path::hasExtension()`
|
||||
* added `Path::changeExtension()`
|
||||
* `Path::makeRelative()` now works when the absolute path and the base path
|
||||
have equal directory names beneath different base directories
|
||||
(e.g. "/webmozart/css/style.css" relative to "/puli/css")
|
||||
|
||||
* 1.0.2 (2015-01-12)
|
||||
|
||||
* `Path::makeAbsolute()` fails now if the base path is not absolute
|
||||
* `Path::makeRelative()` now works when a relative path is passed and the base
|
||||
path is empty
|
||||
|
||||
* 1.0.1 (2014-12-03)
|
||||
|
||||
* Added PHP 5.6 to Travis.
|
||||
* Fixed bug in `Path::makeRelative()` when first argument is shorter than second
|
||||
* Made HHVM compatibility mandatory in .travis.yml
|
||||
* Added PHP 5.3.3 to travis.yml
|
||||
|
||||
* 1.0.0 (2014-11-26)
|
||||
|
||||
* first release
|
20
vendor/webmozart/path-util/LICENSE
vendored
Normal file
20
vendor/webmozart/path-util/LICENSE
vendored
Normal file
|
@ -0,0 +1,20 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 Bernhard Schussek
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
143
vendor/webmozart/path-util/README.md
vendored
Normal file
143
vendor/webmozart/path-util/README.md
vendored
Normal file
|
@ -0,0 +1,143 @@
|
|||
File Path Utility
|
||||
=================
|
||||
|
||||
[](https://travis-ci.org/webmozart/path-util)
|
||||
[](https://ci.appveyor.com/project/webmozart/path-util/branch/master)
|
||||
[](https://scrutinizer-ci.com/g/webmozart/path-util/?branch=2.3.0)
|
||||
[](https://packagist.org/packages/webmozart/path-util)
|
||||
[](https://packagist.org/packages/webmozart/path-util)
|
||||
[](https://www.versioneye.com/php/webmozart:path-util/2.3.0)
|
||||
|
||||
Latest release: [2.3.0](https://packagist.org/packages/webmozart/path-util#2.3.0)
|
||||
|
||||
PHP >= 5.3.3
|
||||
|
||||
This package provides robust, cross-platform utility functions for normalizing,
|
||||
comparing and modifying file paths and URLs.
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
The utility can be installed with [Composer]:
|
||||
|
||||
```
|
||||
$ composer require webmozart/path-util
|
||||
```
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
Use the `Path` class to handle file paths:
|
||||
|
||||
```php
|
||||
use Webmozart\PathUtil\Path;
|
||||
|
||||
echo Path::canonicalize('/var/www/vhost/webmozart/../config.ini');
|
||||
// => /var/www/vhost/config.ini
|
||||
|
||||
echo Path::canonicalize('C:\Programs\Webmozart\..\config.ini');
|
||||
// => C:/Programs/config.ini
|
||||
|
||||
echo Path::canonicalize('~/config.ini');
|
||||
// => /home/webmozart/config.ini
|
||||
|
||||
echo Path::makeAbsolute('config/config.yml', '/var/www/project');
|
||||
// => /var/www/project/config/config.yml
|
||||
|
||||
echo Path::makeRelative('/var/www/project/config/config.yml', '/var/www/project/uploads');
|
||||
// => ../config/config.yml
|
||||
|
||||
$paths = array(
|
||||
'/var/www/vhosts/project/httpdocs/config/config.yml',
|
||||
'/var/www/vhosts/project/httpdocs/images/banana.gif',
|
||||
'/var/www/vhosts/project/httpdocs/uploads/../images/nicer-banana.gif',
|
||||
);
|
||||
|
||||
Path::getLongestCommonBasePath($paths);
|
||||
// => /var/www/vhosts/project/httpdocs
|
||||
|
||||
Path::getFilename('/views/index.html.twig');
|
||||
// => index.html.twig
|
||||
|
||||
Path::getFilenameWithoutExtension('/views/index.html.twig');
|
||||
// => index.html
|
||||
|
||||
Path::getFilenameWithoutExtension('/views/index.html.twig', 'html.twig');
|
||||
Path::getFilenameWithoutExtension('/views/index.html.twig', '.html.twig');
|
||||
// => index
|
||||
|
||||
Path::getExtension('/views/index.html.twig');
|
||||
// => twig
|
||||
|
||||
Path::hasExtension('/views/index.html.twig');
|
||||
// => true
|
||||
|
||||
Path::hasExtension('/views/index.html.twig', 'twig');
|
||||
// => true
|
||||
|
||||
Path::hasExtension('/images/profile.jpg', array('jpg', 'png', 'gif'));
|
||||
// => true
|
||||
|
||||
Path::changeExtension('/images/profile.jpeg', 'jpg');
|
||||
// => /images/profile.jpg
|
||||
|
||||
Path::join('phar://C:/Documents', 'projects/my-project.phar', 'composer.json');
|
||||
// => phar://C:/Documents/projects/my-project.phar/composer.json
|
||||
|
||||
Path::getHomeDirectory();
|
||||
// => /home/webmozart
|
||||
```
|
||||
|
||||
Use the `Url` class to handle URLs:
|
||||
|
||||
```php
|
||||
use Webmozart\PathUtil\Url;
|
||||
|
||||
echo Url::makeRelative('http://example.com/css/style.css', 'http://example.com/puli');
|
||||
// => ../css/style.css
|
||||
|
||||
echo Url::makeRelative('http://cdn.example.com/css/style.css', 'http://example.com/puli');
|
||||
// => http://cdn.example.com/css/style.css
|
||||
```
|
||||
|
||||
Learn more in the [Documentation] and the [API Docs].
|
||||
|
||||
Authors
|
||||
-------
|
||||
|
||||
* [Bernhard Schussek] a.k.a. [@webmozart]
|
||||
* [The Community Contributors]
|
||||
|
||||
Documentation
|
||||
-------------
|
||||
|
||||
Read the [Documentation] if you want to learn more about the contained functions.
|
||||
|
||||
Contribute
|
||||
----------
|
||||
|
||||
Contributions are always welcome!
|
||||
|
||||
* Report any bugs or issues you find on the [issue tracker].
|
||||
* You can grab the source code at the [Git repository].
|
||||
|
||||
Support
|
||||
-------
|
||||
|
||||
If you are having problems, send a mail to bschussek@gmail.com or shout out to
|
||||
[@webmozart] on Twitter.
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
All contents of this package are licensed under the [MIT license].
|
||||
|
||||
[Bernhard Schussek]: http://webmozarts.com
|
||||
[The Community Contributors]: https://github.com/webmozart/path-util/graphs/contributors
|
||||
[Composer]: https://getcomposer.org
|
||||
[Documentation]: docs/usage.md
|
||||
[API Docs]: https://webmozart.github.io/path-util/api/latest/class-Webmozart.PathUtil.Path.html
|
||||
[issue tracker]: https://github.com/webmozart/path-util/issues
|
||||
[Git repository]: https://github.com/webmozart/path-util
|
||||
[@webmozart]: https://twitter.com/webmozart
|
||||
[MIT license]: LICENSE
|
34
vendor/webmozart/path-util/appveyor.yml
vendored
Normal file
34
vendor/webmozart/path-util/appveyor.yml
vendored
Normal file
|
@ -0,0 +1,34 @@
|
|||
build: false
|
||||
shallow_clone: true
|
||||
platform: x86
|
||||
clone_folder: c:\projects\webmozart\path-util
|
||||
|
||||
cache:
|
||||
- '%LOCALAPPDATA%\Composer\files'
|
||||
|
||||
init:
|
||||
- SET PATH=C:\Program Files\OpenSSL;c:\tools\php;%PATH%
|
||||
|
||||
environment:
|
||||
matrix:
|
||||
- COMPOSER_FLAGS: ""
|
||||
- COMPOSER_FLAGS: --prefer-lowest --prefer-stable
|
||||
|
||||
install:
|
||||
- cinst -y OpenSSL.Light
|
||||
- cinst -y php
|
||||
- cd c:\tools\php
|
||||
- copy php.ini-production php.ini /Y
|
||||
- echo date.timezone="UTC" >> php.ini
|
||||
- echo extension_dir=ext >> php.ini
|
||||
- echo extension=php_openssl.dll >> php.ini
|
||||
- echo extension=php_mbstring.dll >> php.ini
|
||||
- echo extension=php_fileinfo.dll >> php.ini
|
||||
- echo memory_limit=1G >> php.ini
|
||||
- cd c:\projects\webmozart\path-util
|
||||
- php -r "readfile('http://getcomposer.org/installer');" | php
|
||||
- php composer.phar update %COMPOSER_FLAGS% --no-interaction --no-progress
|
||||
|
||||
test_script:
|
||||
- cd c:\projects\webmozart\path-util
|
||||
- vendor\bin\phpunit.bat --verbose
|
34
vendor/webmozart/path-util/composer.json
vendored
Normal file
34
vendor/webmozart/path-util/composer.json
vendored
Normal file
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"name": "webmozart/path-util",
|
||||
"description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.",
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Bernhard Schussek",
|
||||
"email": "bschussek@gmail.com"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.3.3",
|
||||
"webmozart/assert": "~1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^4.6",
|
||||
"sebastian/version": "^1.0.1"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Webmozart\\PathUtil\\": "src/"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"Webmozart\\PathUtil\\Tests\\": "tests/"
|
||||
}
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.3-dev"
|
||||
}
|
||||
}
|
||||
}
|
203
vendor/webmozart/path-util/docs/usage.md
vendored
Normal file
203
vendor/webmozart/path-util/docs/usage.md
vendored
Normal file
|
@ -0,0 +1,203 @@
|
|||
Painfree Handling of File Paths
|
||||
===============================
|
||||
|
||||
Dealing with file paths usually involves some difficulties:
|
||||
|
||||
* **System Heterogeneity**: File paths look different on different platforms.
|
||||
UNIX file paths start with a slash ("/"), while Windows file paths start with
|
||||
a system drive ("C:"). UNIX uses forward slashes, while Windows uses
|
||||
backslashes by default ("\").
|
||||
|
||||
* **Absolute/Relative Paths**: Web applications frequently need to deal with
|
||||
absolute and relative paths. Converting one to the other properly is tricky
|
||||
and repetitive.
|
||||
|
||||
This package provides few, but robust utility methods to simplify your life
|
||||
when dealing with file paths.
|
||||
|
||||
Canonicalization
|
||||
----------------
|
||||
|
||||
*Canonicalization* is the transformation of a path into a normalized (the
|
||||
"canonical") format. You can canonicalize a path with `Path::canonicalize()`:
|
||||
|
||||
```php
|
||||
echo Path::canonicalize('/var/www/vhost/webmozart/../config.ini');
|
||||
// => /var/www/vhost/config.ini
|
||||
```
|
||||
|
||||
The following modifications happen during canonicalization:
|
||||
|
||||
* "." segments are removed;
|
||||
* ".." segments are resolved;
|
||||
* backslashes ("\") are converted into forward slashes ("/");
|
||||
* root paths ("/" and "C:/") always terminate with a slash;
|
||||
* non-root paths never terminate with a slash;
|
||||
* schemes (such as "phar://") are kept;
|
||||
* replace "~" with the user's home directory.
|
||||
|
||||
You can pass absolute paths and relative paths to `canonicalize()`. When a
|
||||
relative path is passed, ".." segments at the beginning of the path are kept:
|
||||
|
||||
```php
|
||||
echo Path::canonicalize('../uploads/../config/config.yml');
|
||||
// => ../config/config.yml
|
||||
```
|
||||
|
||||
Malformed paths are returned unchanged:
|
||||
|
||||
```php
|
||||
echo Path::canonicalize('C:Programs/PHP/php.ini');
|
||||
// => C:Programs/PHP/php.ini
|
||||
```
|
||||
|
||||
Converting Absolute/Relative Paths
|
||||
----------------------------------
|
||||
|
||||
Absolute/relative paths can be converted with the methods `Path::makeAbsolute()`
|
||||
and `Path::makeRelative()`.
|
||||
|
||||
`makeAbsolute()` expects a relative path and a base path to base that relative
|
||||
path upon:
|
||||
|
||||
```php
|
||||
echo Path::makeAbsolute('config/config.yml', '/var/www/project');
|
||||
// => /var/www/project/config/config.yml
|
||||
```
|
||||
|
||||
If an absolute path is passed in the first argument, the absolute path is
|
||||
returned unchanged:
|
||||
|
||||
```php
|
||||
echo Path::makeAbsolute('/usr/share/lib/config.ini', '/var/www/project');
|
||||
// => /usr/share/lib/config.ini
|
||||
```
|
||||
|
||||
The method resolves ".." segments, if there are any:
|
||||
|
||||
```php
|
||||
echo Path::makeAbsolute('../config/config.yml', '/var/www/project/uploads');
|
||||
// => /var/www/project/config/config.yml
|
||||
```
|
||||
|
||||
This method is very useful if you want to be able to accept relative paths (for
|
||||
example, relative to the root directory of your project) and absolute paths at
|
||||
the same time.
|
||||
|
||||
`makeRelative()` is the inverse operation to `makeAbsolute()`:
|
||||
|
||||
```php
|
||||
echo Path::makeRelative('/var/www/project/config/config.yml', '/var/www/project');
|
||||
// => config/config.yml
|
||||
```
|
||||
|
||||
If the path is not within the base path, the method will prepend ".." segments
|
||||
as necessary:
|
||||
|
||||
```php
|
||||
echo Path::makeRelative('/var/www/project/config/config.yml', '/var/www/project/uploads');
|
||||
// => ../config/config.yml
|
||||
```
|
||||
|
||||
Use `isAbsolute()` and `isRelative()` to check whether a path is absolute or
|
||||
relative:
|
||||
|
||||
```php
|
||||
Path::isAbsolute('C:\Programs\PHP\php.ini')
|
||||
// => true
|
||||
```
|
||||
|
||||
All four methods internally canonicalize the passed path.
|
||||
|
||||
Finding Longest Common Base Paths
|
||||
---------------------------------
|
||||
|
||||
When you store absolute file paths on the file system, this leads to a lot of
|
||||
duplicated information:
|
||||
|
||||
```php
|
||||
return array(
|
||||
'/var/www/vhosts/project/httpdocs/config/config.yml',
|
||||
'/var/www/vhosts/project/httpdocs/config/routing.yml',
|
||||
'/var/www/vhosts/project/httpdocs/config/services.yml',
|
||||
'/var/www/vhosts/project/httpdocs/images/banana.gif',
|
||||
'/var/www/vhosts/project/httpdocs/uploads/images/nicer-banana.gif',
|
||||
);
|
||||
```
|
||||
|
||||
Especially when storing many paths, the amount of duplicated information is
|
||||
noticeable. You can use `Path::getLongestCommonBasePath()` to check a list of
|
||||
paths for a common base path:
|
||||
|
||||
```php
|
||||
$paths = array(
|
||||
'/var/www/vhosts/project/httpdocs/config/config.yml',
|
||||
'/var/www/vhosts/project/httpdocs/config/routing.yml',
|
||||
'/var/www/vhosts/project/httpdocs/config/services.yml',
|
||||
'/var/www/vhosts/project/httpdocs/images/banana.gif',
|
||||
'/var/www/vhosts/project/httpdocs/uploads/images/nicer-banana.gif',
|
||||
);
|
||||
|
||||
Path::getLongestCommonBasePath($paths);
|
||||
// => /var/www/vhosts/project/httpdocs
|
||||
```
|
||||
|
||||
Use this path together with `Path::makeRelative()` to shorten the stored paths:
|
||||
|
||||
```php
|
||||
$bp = '/var/www/vhosts/project/httpdocs';
|
||||
|
||||
return array(
|
||||
$bp.'/config/config.yml',
|
||||
$bp.'/config/routing.yml',
|
||||
$bp.'/config/services.yml',
|
||||
$bp.'/images/banana.gif',
|
||||
$bp.'/uploads/images/nicer-banana.gif',
|
||||
);
|
||||
```
|
||||
|
||||
`getLongestCommonBasePath()` always returns canonical paths.
|
||||
|
||||
Use `Path::isBasePath()` to test whether a path is a base path of another path:
|
||||
|
||||
```php
|
||||
Path::isBasePath("/var/www", "/var/www/project");
|
||||
// => true
|
||||
|
||||
Path::isBasePath("/var/www", "/var/www/project/..");
|
||||
// => true
|
||||
|
||||
Path::isBasePath("/var/www", "/var/www/project/../..");
|
||||
// => false
|
||||
```
|
||||
|
||||
Finding Directories/Root Directories
|
||||
------------------------------------
|
||||
|
||||
PHP offers the function `dirname()` to obtain the directory path of a file path.
|
||||
This method has a few quirks:
|
||||
|
||||
* `dirname()` does not accept backslashes on UNIX
|
||||
* `dirname("C:/Programs")` returns "C:", not "C:/"
|
||||
* `dirname("C:/")` returns ".", not "C:/"
|
||||
* `dirname("C:")` returns ".", not "C:/"
|
||||
* `dirname("Programs")` returns ".", not ""
|
||||
* `dirname()` does not canonicalize the result
|
||||
|
||||
`Path::getDirectory()` fixes these shortcomings:
|
||||
|
||||
```php
|
||||
echo Path::getDirectory("C:\Programs");
|
||||
// => C:/
|
||||
```
|
||||
|
||||
Additionally, you can use `Path::getRoot()` to obtain the root of a path:
|
||||
|
||||
```php
|
||||
echo Path::getRoot("/etc/apache2/sites-available");
|
||||
// => /
|
||||
|
||||
echo Path::getRoot("C:\Programs\Apache\Config");
|
||||
// => C:/
|
||||
```
|
||||
|
16
vendor/webmozart/path-util/phpunit.xml.dist
vendored
Normal file
16
vendor/webmozart/path-util/phpunit.xml.dist
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<phpunit bootstrap="vendor/autoload.php" colors="true">
|
||||
<testsuites>
|
||||
<testsuite name="Path-Util Test Suite">
|
||||
<directory suffix="Test.php">./tests/</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
|
||||
<!-- Whitelist for code coverage -->
|
||||
<filter>
|
||||
<whitelist>
|
||||
<directory suffix=".php">./src/</directory>
|
||||
</whitelist>
|
||||
</filter>
|
||||
</phpunit>
|
1008
vendor/webmozart/path-util/src/Path.php
vendored
Normal file
1008
vendor/webmozart/path-util/src/Path.php
vendored
Normal file
File diff suppressed because it is too large
Load diff
111
vendor/webmozart/path-util/src/Url.php
vendored
Normal file
111
vendor/webmozart/path-util/src/Url.php
vendored
Normal file
|
@ -0,0 +1,111 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the webmozart/path-util package.
|
||||
*
|
||||
* (c) Bernhard Schussek <bschussek@gmail.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Webmozart\PathUtil;
|
||||
|
||||
use InvalidArgumentException;
|
||||
use Webmozart\Assert\Assert;
|
||||
|
||||
/**
|
||||
* Contains utility methods for handling URL strings.
|
||||
*
|
||||
* The methods in this class are able to deal with URLs.
|
||||
*
|
||||
* @since 2.3
|
||||
*
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
* @author Claudio Zizza <claudio@budgegeria.de>
|
||||
*/
|
||||
final class Url
|
||||
{
|
||||
/**
|
||||
* Turns a URL into a relative path.
|
||||
*
|
||||
* The result is a canonical path. This class is using functionality of Path class.
|
||||
*
|
||||
* @see Path
|
||||
*
|
||||
* @param string $url A URL to make relative.
|
||||
* @param string $baseUrl A base URL.
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @throws InvalidArgumentException If the URL and base URL does
|
||||
* not match.
|
||||
*/
|
||||
public static function makeRelative($url, $baseUrl)
|
||||
{
|
||||
Assert::string($url, 'The URL must be a string. Got: %s');
|
||||
Assert::string($baseUrl, 'The base URL must be a string. Got: %s');
|
||||
Assert::contains($baseUrl, '://', '%s is not an absolute Url.');
|
||||
|
||||
list($baseHost, $basePath) = self::split($baseUrl);
|
||||
|
||||
if (false === strpos($url, '://')) {
|
||||
if (0 === strpos($url, '/')) {
|
||||
$host = $baseHost;
|
||||
} else {
|
||||
$host = '';
|
||||
}
|
||||
$path = $url;
|
||||
} else {
|
||||
list($host, $path) = self::split($url);
|
||||
}
|
||||
|
||||
if ('' !== $host && $host !== $baseHost) {
|
||||
throw new InvalidArgumentException(sprintf(
|
||||
'The URL "%s" cannot be made relative to "%s" since their host names are different.',
|
||||
$host,
|
||||
$baseHost
|
||||
));
|
||||
}
|
||||
|
||||
return Path::makeRelative($path, $basePath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Splits a URL into its host and the path.
|
||||
*
|
||||
* ```php
|
||||
* list ($root, $path) = Path::split("http://example.com/webmozart")
|
||||
* // => array("http://example.com", "/webmozart")
|
||||
*
|
||||
* list ($root, $path) = Path::split("http://example.com")
|
||||
* // => array("http://example.com", "")
|
||||
* ```
|
||||
*
|
||||
* @param string $url The URL to split.
|
||||
*
|
||||
* @return string[] An array with the host and the path of the URL.
|
||||
*
|
||||
* @throws InvalidArgumentException If $url is not a URL.
|
||||
*/
|
||||
private static function split($url)
|
||||
{
|
||||
$pos = strpos($url, '://');
|
||||
$scheme = substr($url, 0, $pos + 3);
|
||||
$url = substr($url, $pos + 3);
|
||||
|
||||
if (false !== ($pos = strpos($url, '/'))) {
|
||||
$host = substr($url, 0, $pos);
|
||||
$url = substr($url, $pos);
|
||||
} else {
|
||||
// No path, only host
|
||||
$host = $url;
|
||||
$url = '/';
|
||||
}
|
||||
|
||||
// At this point, we have $scheme, $host and $path
|
||||
$root = $scheme.$host;
|
||||
|
||||
return array($root, $url);
|
||||
}
|
||||
}
|
1340
vendor/webmozart/path-util/tests/PathTest.php
vendored
Normal file
1340
vendor/webmozart/path-util/tests/PathTest.php
vendored
Normal file
File diff suppressed because it is too large
Load diff
179
vendor/webmozart/path-util/tests/UrlTest.php
vendored
Normal file
179
vendor/webmozart/path-util/tests/UrlTest.php
vendored
Normal file
|
@ -0,0 +1,179 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the webmozart/path-util package.
|
||||
*
|
||||
* (c) Bernhard Schussek <bschussek@gmail.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Webmozart\PathUtil\Tests;
|
||||
|
||||
use Webmozart\PathUtil\Url;
|
||||
|
||||
/**
|
||||
* @since 2.3
|
||||
*
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
* @author Claudio Zizza <claudio@budgegeria.de>
|
||||
*/
|
||||
class UrlTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider provideMakeRelativeTests
|
||||
* @covers Webmozart\PathUtil\Url
|
||||
*/
|
||||
public function testMakeRelative($absolutePath, $basePath, $relativePath)
|
||||
{
|
||||
$host = 'http://example.com';
|
||||
|
||||
$relative = Url::makeRelative($host.$absolutePath, $host.$basePath);
|
||||
$this->assertSame($relativePath, $relative);
|
||||
$relative = Url::makeRelative($absolutePath, $host.$basePath);
|
||||
$this->assertSame($relativePath, $relative);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideMakeRelativeIsAlreadyRelativeTests
|
||||
* @covers Webmozart\PathUtil\Url
|
||||
*/
|
||||
public function testMakeRelativeIsAlreadyRelative($absolutePath, $basePath, $relativePath)
|
||||
{
|
||||
$host = 'http://example.com';
|
||||
|
||||
$relative = Url::makeRelative($absolutePath, $host.$basePath);
|
||||
$this->assertSame($relativePath, $relative);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideMakeRelativeTests
|
||||
* @covers Webmozart\PathUtil\Url
|
||||
*/
|
||||
public function testMakeRelativeWithFullUrl($absolutePath, $basePath, $relativePath)
|
||||
{
|
||||
$host = 'ftp://user:password@example.com:8080';
|
||||
|
||||
$relative = Url::makeRelative($host.$absolutePath, $host.$basePath);
|
||||
$this->assertSame($relativePath, $relative);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage The URL must be a string. Got: array
|
||||
* @covers Webmozart\PathUtil\Url
|
||||
*/
|
||||
public function testMakeRelativeFailsIfInvalidUrl()
|
||||
{
|
||||
Url::makeRelative(array(), 'http://example.com/webmozart/puli');
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage The base URL must be a string. Got: array
|
||||
* @covers Webmozart\PathUtil\Url
|
||||
*/
|
||||
public function testMakeRelativeFailsIfInvalidBaseUrl()
|
||||
{
|
||||
Url::makeRelative('http://example.com/webmozart/puli/css/style.css', array());
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage "webmozart/puli" is not an absolute Url.
|
||||
* @covers Webmozart\PathUtil\Url
|
||||
*/
|
||||
public function testMakeRelativeFailsIfBaseUrlNoUrl()
|
||||
{
|
||||
Url::makeRelative('http://example.com/webmozart/puli/css/style.css', 'webmozart/puli');
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage "" is not an absolute Url.
|
||||
* @covers Webmozart\PathUtil\Url
|
||||
*/
|
||||
public function testMakeRelativeFailsIfBaseUrlEmpty()
|
||||
{
|
||||
Url::makeRelative('http://example.com/webmozart/puli/css/style.css', '');
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage The base URL must be a string. Got: NULL
|
||||
* @covers Webmozart\PathUtil\Url
|
||||
*/
|
||||
public function testMakeRelativeFailsIfBaseUrlNull()
|
||||
{
|
||||
Url::makeRelative('http://example.com/webmozart/puli/css/style.css', null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage The URL "http://example.com" cannot be made relative to "http://example2.com" since
|
||||
* their host names are different.
|
||||
* @covers Webmozart\PathUtil\Url
|
||||
*/
|
||||
public function testMakeRelativeFailsIfDifferentDomains()
|
||||
{
|
||||
Url::makeRelative('http://example.com/webmozart/puli/css/style.css', 'http://example2.com/webmozart/puli');
|
||||
}
|
||||
|
||||
public function provideMakeRelativeTests()
|
||||
{
|
||||
return array(
|
||||
|
||||
array('/webmozart/puli/css/style.css', '/webmozart/puli', 'css/style.css'),
|
||||
array('/webmozart/puli/css/style.css?key=value&key2=value', '/webmozart/puli', 'css/style.css?key=value&key2=value'),
|
||||
array('/webmozart/puli/css/style.css?key[]=value&key[]=value', '/webmozart/puli', 'css/style.css?key[]=value&key[]=value'),
|
||||
array('/webmozart/css/style.css', '/webmozart/puli', '../css/style.css'),
|
||||
array('/css/style.css', '/webmozart/puli', '../../css/style.css'),
|
||||
array('/', '/', ''),
|
||||
|
||||
// relative to root
|
||||
array('/css/style.css', '/', 'css/style.css'),
|
||||
|
||||
// same sub directories in different base directories
|
||||
array('/puli/css/style.css', '/webmozart/css', '../../puli/css/style.css'),
|
||||
|
||||
array('/webmozart/puli/./css/style.css', '/webmozart/puli', 'css/style.css'),
|
||||
array('/webmozart/puli/../css/style.css', '/webmozart/puli', '../css/style.css'),
|
||||
array('/webmozart/puli/.././css/style.css', '/webmozart/puli', '../css/style.css'),
|
||||
array('/webmozart/puli/./../css/style.css', '/webmozart/puli', '../css/style.css'),
|
||||
array('/webmozart/puli/../../css/style.css', '/webmozart/puli', '../../css/style.css'),
|
||||
array('/webmozart/puli/css/style.css', '/webmozart/./puli', 'css/style.css'),
|
||||
array('/webmozart/puli/css/style.css', '/webmozart/../puli', '../webmozart/puli/css/style.css'),
|
||||
array('/webmozart/puli/css/style.css', '/webmozart/./../puli', '../webmozart/puli/css/style.css'),
|
||||
array('/webmozart/puli/css/style.css', '/webmozart/.././puli', '../webmozart/puli/css/style.css'),
|
||||
array('/webmozart/puli/css/style.css', '/webmozart/../../puli', '../webmozart/puli/css/style.css'),
|
||||
|
||||
// first argument shorter than second
|
||||
array('/css', '/webmozart/puli', '../../css'),
|
||||
|
||||
// second argument shorter than first
|
||||
array('/webmozart/puli', '/css', '../webmozart/puli'),
|
||||
|
||||
array('', '', ''),
|
||||
);
|
||||
}
|
||||
|
||||
public function provideMakeRelativeIsAlreadyRelativeTests()
|
||||
{
|
||||
return array(
|
||||
array('css/style.css', '/webmozart/puli', 'css/style.css'),
|
||||
array('css/style.css', '', 'css/style.css'),
|
||||
array('css/../style.css', '', 'style.css'),
|
||||
array('css/./style.css', '', 'css/style.css'),
|
||||
array('../style.css', '/', 'style.css'),
|
||||
array('./style.css', '/', 'style.css'),
|
||||
array('../../style.css', '/', 'style.css'),
|
||||
array('../../style.css', '', 'style.css'),
|
||||
array('./style.css', '', 'style.css'),
|
||||
array('../style.css', '', 'style.css'),
|
||||
array('./../style.css', '', 'style.css'),
|
||||
array('css/./../style.css', '', 'style.css'),
|
||||
array('css//style.css', '', 'css/style.css'),
|
||||
);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue