1 Commits

Author SHA1 Message Date
meritoo
b9dfa713ff Apply fixes from StyleCI 2017-09-20 08:29:52 +00:00
88 changed files with 5285 additions and 3000 deletions

View File

@@ -1,54 +0,0 @@
FROM php:5.6-cli
#
# Tools & libraries
#
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
git \
zip \
unzip \
zlib1g-dev \
libicu-dev \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
#
# PHP Extensions
#
RUN docker-php-ext-install \
zip \
intl \
mbstring
#
# PHP configuration:
# - timezone
#
ARG TIMEZONE
RUN echo "date.timezone = $TIMEZONE" >> /usr/local/etc/php/php.ini
#
# Xdebug
#
RUN pecl install xdebug \
&& docker-php-ext-enable xdebug
COPY xdebug.ini /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
#
# Phing
#
RUN pear channel-discover pear.phing.info \
&& pear install [--alldeps] phing/phing
#
# Composer + https://packagist.org/packages/hirak/prestissimo package
#
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
&& php -r "if (hash_file('SHA384', 'composer-setup.php') === \
'544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo \
'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer \
&& php -r "unlink('composer-setup.php');" \
&& composer global require --no-plugins --no-scripts hirak/prestissimo \
&& rm -rf /root/.composer/cache/*

View File

@@ -1,7 +0,0 @@
[xdebug]
zend_extension='xdebug.so'
xdebug.remote_enable=1
xdebug.remote_connect_back=1
xdebug.idekey='PHPSTORM'
xdebug.remote_port=9001

1
.env
View File

@@ -1 +0,0 @@
TIMEZONE=Europe/Warsaw

11
.gitignore vendored
View File

@@ -7,14 +7,13 @@
# ---------------------------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------------------------
### Composer ### Composer
# ---------------------------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------------------------
/composer.lock
/composer.phar /composer.phar
# ---------------------------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------------------------
### Phing ### Phing
# ---------------------------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------------------------
/.phing/properties /phing/properties
# ---------------------------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------------------------
@@ -29,16 +28,10 @@
/.php_cs.cache /.php_cs.cache
# ----------------------------------------------------------------------------------------------------------------------
### Build files
# ----------------------------------------------------------------------------------------------------------------------
/.build/
# ---------------------------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------------------------
### Generated databases ### Generated databases
# ---------------------------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------------------------
/.data/tmp /data/tmp
*.sql *.sql
*.sqlite *.sqlite

View File

@@ -1,8 +1 @@
preset: symfony preset: symfony
disabled:
- phpdoc_annotation_without_dot
- cast_spaces
- concat_without_spaces
- blank_line_before_return
- trim_array_spaces

View File

@@ -1,27 +1,16 @@
# Meritoo Common Library # Meritoo Common Library [![Travis](https://img.shields.io/travis/rust-lang/rust.svg?style=flat-square)](https://travis-ci.org/meritoo/common-library) [![Packagist](https://img.shields.io/packagist/v/meritoo/common-library.svg?style=flat-square)](https://packagist.org/packages/meritoo/common-library) [![StyleCI](https://styleci.io/repos/101790028/shield?branch=master)](https://styleci.io/repos/101790028) [![license](https://img.shields.io/github/license/meritoo/common-library.svg?style=flat-square)](https://github.com/meritoo/common-library) [![GitHub commits](https://img.shields.io/github/commits-since/meritoo/common-library/0.0.1.svg?style=flat-square)](https://github.com/meritoo/common-library) [![Coverage Status](https://coveralls.io/repos/github/meritoo/common-library/badge.svg?branch=master)](https://coveralls.io/github/meritoo/common-library?branch=master)
Common and useful classes, methods, exceptions etc. Useful classes, methods, extensions etc.
[![Travis](https://img.shields.io/travis/rust-lang/rust.svg?style=flat-square)](https://travis-ci.org/meritoo/common-library) [![Packagist](https://img.shields.io/packagist/v/meritoo/common-library.svg?style=flat-square)](https://packagist.org/packages/meritoo/common-library) [![StyleCI](https://styleci.io/repos/101790028/shield?branch=master)](https://styleci.io/repos/101790028) [![license](https://img.shields.io/github/license/meritoo/common-library.svg?style=flat-square)](https://github.com/meritoo/common-library) [![GitHub commits](https://img.shields.io/github/commits-since/meritoo/common-library/0.0.1.svg?style=flat-square)](https://github.com/meritoo/common-library) [![Coverage Status](https://coveralls.io/repos/github/meritoo/common-library/badge.svg?branch=master)](https://coveralls.io/github/meritoo/common-library?branch=master)
## Installation ## Installation
Run [Composer](https://getcomposer.org) to install this package in your project: Run [Composer](https://getcomposer.org) to install new package:
```bash ```bash
$ composer require meritoo/common-library $ composer require meritoo/common-library
``` ```
> How to install Composer: https://getcomposer.org/download > How to install Composer: https://getcomposer.org/download
## Rebuilding project and tests running
```bash
$ docker-compose up -d
$ docker-compose exec php-cli phing
```
> What is Docker? https://www.docker.com/what-docker
## Static methods ## Static methods
This package contains a lot of class with static methods, so usage is not so complicated. Just run the static method who would you like to use. Example: This package contains a lot of class with static methods, so usage is not so complicated. Just run the static method who would you like to use. Example:

View File

@@ -2,12 +2,12 @@
<project name="Meritoo Package" basedir="." default="build:main" phingVersion="2.14.0"> <project name="Meritoo Package" basedir="." default="build:main" phingVersion="2.14.0">
<!-- Properties --> <!-- Properties -->
<if> <if>
<available file=".phing/properties" property="custom.properties.available"/> <available file="phing/properties" property="custom.properties.available"/>
<then> <then>
<property file=".phing/properties" /> <property file="phing/properties" />
</then> </then>
<else> <else>
<property file=".phing/properties.dist" /> <property file="phing/properties.dist" />
</else> </else>
</if> </if>
@@ -18,12 +18,12 @@
<!-- Build app --> <!-- Build app -->
<target name="build:app" description="Prepares app to build and tests"> <target name="build:app" description="Prepares app to build and tests">
<phing phingfile=".phing/app.xml" haltonfailure="true" /> <phing phingfile="phing/app.xml" haltonfailure="true" />
</target> </target>
<!-- Build tests --> <!-- Build tests -->
<target name="build:tests" description="Runs all tests, checks and creates docs"> <target name="build:tests" description="Runs all tests, checks and creates docs">
<phing phingfile=".phing/tests.xml" haltonfailure="true" /> <phing phingfile="phing/tests.xml" haltonfailure="true" />
<!-- <!--
Conditional running of tests. Conditional running of tests.
@@ -35,7 +35,7 @@
<if> <if>
<equals arg1="${env}" arg2="test" /> <equals arg1="${env}" arg2="test" />
<then> <then>
<phing phingfile=".phing/tests.xml" haltonfailure="true" /> <phing phingfile="phing/tests.xml" haltonfailure="true" />
</then> </then>
<else> <else>
<echo message="[Skipped] Running tests, checks and creating docs, because it's a not 'test' environment..." /> <echo message="[Skipped] Running tests, checks and creating docs, because it's a not 'test' environment..." />

View File

@@ -2,7 +2,7 @@
"name": "meritoo/common-library", "name": "meritoo/common-library",
"description": "Useful classes, methods, extensions etc.", "description": "Useful classes, methods, extensions etc.",
"license": "MIT", "license": "MIT",
"version": "0.0.15", "version": "0.0.7",
"authors": [ "authors": [
{ {
"name": "Meritoo.pl", "name": "Meritoo.pl",
@@ -17,22 +17,18 @@
"symfony/http-foundation": "^3.3" "symfony/http-foundation": "^3.3"
}, },
"require-dev": { "require-dev": {
"friendsofphp/php-cs-fixer": "^2.6", "phpunit/phpunit": "^4.8 || ^5.0",
"pdepend/pdepend": "^2.5", "squizlabs/php_codesniffer": "^2.8",
"phploc/phploc": "^4.0",
"phpmd/phpmd": "^2.6", "phpmd/phpmd": "^2.6",
"phpunit/phpunit": "^5.7",
"sebastian/phpcpd": "^3.0", "sebastian/phpcpd": "^3.0",
"squizlabs/php_codesniffer": "^2.9" "pdepend/pdepend": "^2.5",
"phploc/phploc": "^3.0",
"friendsofphp/php-cs-fixer": "^2.1"
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Meritoo\\Common\\": "src/" "Meritoo\\Common\\": "src/Meritoo/Common/",
} "Meritoo\\Common\\Test\\": "tests/Meritoo/Common/Test/"
},
"autoload-dev": {
"psr-4": {
"Meritoo\\Common\\Test\\": "tests/"
} }
} }
} }

3518
composer.lock generated Normal file

File diff suppressed because it is too large Load Diff

View File

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

@@ -1,15 +0,0 @@
version: '3'
services:
php-cli:
image: meritoo/common-library
container_name: meritoo-common-library
working_dir: /project
entrypoint: php
command: -S 0.0.0.0:9999
build:
context: ./.docker/config
args:
- TIMEZONE=$TIMEZONE
volumes:
- .:/project

View File

@@ -2,12 +2,12 @@
<project name="Meritoo Package" basedir="." default="build:main" phingVersion="2.14.0"> <project name="Meritoo Package" basedir="." default="build:main" phingVersion="2.14.0">
<!-- Properties --> <!-- Properties -->
<if> <if>
<available file=".phing/properties" property="custom.properties.available"/> <available file="phing/properties" property="custom.properties.available"/>
<then> <then>
<property file=".phing/properties" /> <property file="phing/properties" />
</then> </then>
<else> <else>
<property file=".phing/properties.dist" /> <property file="phing/properties.dist" />
</else> </else>
</if> </if>

View File

@@ -59,7 +59,7 @@ composer.validate = false
# System directories # System directories
# #
dir.data = ${project.basedir}/.data dir.data = ${project.basedir}/data
dir.src = ${project.basedir}/src dir.src = ${project.basedir}/src
dir.tests = ${project.basedir}/tests dir.tests = ${project.basedir}/tests
@@ -67,7 +67,7 @@ dir.tests = ${project.basedir}/tests
# Build directories # Build directories
# -------------------------------------------------------------------------------- # --------------------------------------------------------------------------------
dir.build = ${project.basedir}/.build dir.build = ${project.basedir}/build
dir.reports = ${dir.build}/logs dir.reports = ${dir.build}/logs
dir.reports.pdepend = ${dir.reports}/pdepend dir.reports.pdepend = ${dir.reports}/pdepend
dir.reports.coverage = ${dir.reports}/phpunit_coverage dir.reports.coverage = ${dir.reports}/phpunit_coverage

View File

@@ -11,12 +11,12 @@
<!-- Properties --> <!-- Properties -->
<if> <if>
<available file=".phing/properties" property="custom.properties.available"/> <available file="phing/properties" property="custom.properties.available"/>
<then> <then>
<property file=".phing/properties" /> <property file="phing/properties" />
</then> </then>
<else> <else>
<property file=".phing/properties.dist" /> <property file="phing/properties.dist" />
</else> </else>
</if> </if>

View File

@@ -30,6 +30,6 @@
</groups> </groups>
<logging> <logging>
<log type="coverage-html" target="./.build/logs/phpunit_coverage/html" /> <log type="coverage-html" target="./build/logs/phpunit_coverage/html" />
</logging> </logging>
</phpunit> </phpunit>

View File

@@ -1,31 +0,0 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Exception\File;
/**
* An exception used while file with given path is empty (has no content)
*
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl
*/
class EmptyFileException extends \Exception
{
/**
* Class constructor
*
* @param string $emptyFilePath Path of the empty file
*/
public function __construct($emptyFilePath)
{
$template = 'File with path \'%s\' is empty (has no content). Did you provide path of proper file?';
$message = sprintf($template, $emptyFilePath);
parent::__construct($message);
}
}

View File

@@ -1,26 +0,0 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Exception\File;
/**
* An exception used while path of given file is empty
*
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl
*/
class EmptyFilePathException extends \Exception
{
/**
* Class constructor
*/
public function __construct()
{
parent::__construct('Path of the file is empty. Did you provide path of proper file?');
}
}

View File

@@ -1,31 +0,0 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Exception\File;
/**
* An exception used while file with given path does not exist
*
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl
*/
class NotExistingFileException extends \Exception
{
/**
* Class constructor
*
* @param string $notExistingFilePath Path of not existing (or not readable) file
*/
public function __construct($notExistingFilePath)
{
$template = 'File with path \'%s\' does not exist (or is not readable). Did you provide path of proper file?';
$message = sprintf($template, $notExistingFilePath);
parent::__construct($message);
}
}

View File

@@ -1,38 +0,0 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Exception\Method;
use Exception;
/**
* An exception used while method cannot be called, because is disabled
*
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl
*/
class DisabledMethodException extends Exception
{
/**
* Class constructor
*
* @param string $disabledMethod Name of the disabled method
* @param string $alternativeMethod (optional) Name of the alternative method
*/
public function __construct($disabledMethod, $alternativeMethod = '')
{
$template = 'Method %s() cannot be called, because is disabled.';
if (!empty($alternativeMethod)) {
$template .= ' Use %s() instead.';
}
$message = sprintf($template, $disabledMethod, $alternativeMethod);
parent::__construct($message);
}
}

View File

@@ -24,14 +24,14 @@ use Meritoo\Common\Utilities\Arrays;
class Collection implements Countable, ArrayAccess, IteratorAggregate class Collection implements Countable, ArrayAccess, IteratorAggregate
{ {
/** /**
* The elements of collection * The elements of collection.
* *
* @var array * @var array
*/ */
private $elements; private $elements;
/** /**
* Class constructor * Class constructor.
* *
* @param array $elements (optional) The elements of collection * @param array $elements (optional) The elements of collection
*/ */
@@ -42,7 +42,7 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
/** /**
* {@inheritdoc} * {@inheritdoc}
* Required by interface Countable * Required by interface Countable.
*/ */
public function count() public function count()
{ {
@@ -51,7 +51,7 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
/** /**
* {@inheritdoc} * {@inheritdoc}
* Required by interface ArrayAccess * Required by interface ArrayAccess.
*/ */
public function offsetExists($offset) public function offsetExists($offset)
{ {
@@ -60,7 +60,7 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
/** /**
* {@inheritdoc} * {@inheritdoc}
* Required by interface ArrayAccess * Required by interface ArrayAccess.
*/ */
public function offsetGet($offset) public function offsetGet($offset)
{ {
@@ -73,7 +73,7 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
/** /**
* {@inheritdoc} * {@inheritdoc}
* Required by interface ArrayAccess * Required by interface ArrayAccess.
*/ */
public function offsetSet($offset, $value) public function offsetSet($offset, $value)
{ {
@@ -82,7 +82,7 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
/** /**
* {@inheritdoc} * {@inheritdoc}
* Required by interface ArrayAccess * Required by interface ArrayAccess.
*/ */
public function offsetUnset($offset) public function offsetUnset($offset)
{ {
@@ -93,7 +93,7 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
/** /**
* {@inheritdoc} * {@inheritdoc}
* Required by interface IteratorAggregate * Required by interface IteratorAggregate.
*/ */
public function getIterator() public function getIterator()
{ {
@@ -101,15 +101,16 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
} }
/** /**
* Adds given element (at the end of collection) * Adds given element (at the end of collection).
* *
* @param mixed $element The element to add * @param mixed $element The element to add
* @param mixed $index (optional) Index / key of the element * @param mixed $index (optional) Index / key of the element
*
* @return $this * @return $this
*/ */
public function add($element, $index = null) public function add($element, $index = null)
{ {
if (null === $index) { if ($index === null) {
$this->elements[] = $element; $this->elements[] = $element;
} else { } else {
$this->elements[$index] = $element; $this->elements[$index] = $element;
@@ -119,11 +120,12 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
} }
/** /**
* Adds given elements (at the end of collection) * Adds given elements (at the end of collection).
* *
* @param array|Collection $elements The elements to add * @param array|Collection $elements The elements to add
* @param bool|false $useIndexes (optional) If is set to true, indexes of given elements will be used in * @param bool|false $useIndexes (optional) If is set to true, indexes of given elements will be used in
* this collection. Otherwise - not. * this collection. Otherwise - not.
*
* @return $this * @return $this
*/ */
public function addMultiple($elements, $useIndexes = false) public function addMultiple($elements, $useIndexes = false)
@@ -142,9 +144,10 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
} }
/** /**
* Prepends given element (adds given element at the beginning of collection) * Prepends given element (adds given element at the beginning of collection).
* *
* @param mixed $element The element to prepend * @param mixed $element The element to prepend
*
* @return $this * @return $this
*/ */
public function prepend($element) public function prepend($element)
@@ -155,9 +158,10 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
} }
/** /**
* Removes given element * Removes given element.
* *
* @param mixed $element The element to remove * @param mixed $element The element to remove
*
* @return $this * @return $this
*/ */
public function remove($element) public function remove($element)
@@ -166,6 +170,7 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
foreach ($this->elements as $index => $existing) { foreach ($this->elements as $index => $existing) {
if ($element === $existing) { if ($element === $existing) {
unset($this->elements[$index]); unset($this->elements[$index]);
break; break;
} }
} }
@@ -175,7 +180,7 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
} }
/** /**
* Returns information if collection is empty * Returns information if collection is empty.
* *
* @return bool * @return bool
*/ */
@@ -185,9 +190,10 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
} }
/** /**
* Returns information if given element is first in the collection * Returns information if given element is first in the collection.
* *
* @param mixed $element The element to verify * @param mixed $element The element to verify
*
* @return bool * @return bool
*/ */
public function isFirst($element) public function isFirst($element)
@@ -196,9 +202,10 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
} }
/** /**
* Returns information if given element is last in the collection * Returns information if given element is last in the collection.
* *
* @param mixed $element The element to verify * @param mixed $element The element to verify
*
* @return bool * @return bool
*/ */
public function isLast($element) public function isLast($element)
@@ -207,22 +214,24 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
} }
/** /**
* Returns information if the collection has given element, iow. if given element exists in the collection * Returns information if the collection has given element, iow. if given element exists in the collection.
* *
* @param mixed $element The element to verify * @param mixed $element The element to verify
*
* @return bool * @return bool
*/ */
public function has($element) public function has($element)
{ {
$index = Arrays::getIndexOf($this->elements, $element); $index = Arrays::getIndexOf($this->elements, $element);
return null !== $index && false !== $index; return $index !== null && $index !== false;
} }
/** /**
* Returns previous element for given element * Returns previous element for given element.
* *
* @param mixed $element The element to verify * @param mixed $element The element to verify
*
* @return mixed|null * @return mixed|null
*/ */
public function getPrevious($element) public function getPrevious($element)
@@ -231,9 +240,10 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
} }
/** /**
* Returns next element for given element * Returns next element for given element.
* *
* @param mixed $element The element to verify * @param mixed $element The element to verify
*
* @return mixed|null * @return mixed|null
*/ */
public function getNext($element) public function getNext($element)
@@ -242,7 +252,7 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
} }
/** /**
* Returns the first element in the collection * Returns the first element in the collection.
* *
* @return mixed * @return mixed
*/ */
@@ -252,7 +262,7 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
} }
/** /**
* Returns the last element in the collection * Returns the last element in the collection.
* *
* @return mixed * @return mixed
*/ */
@@ -262,7 +272,7 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
} }
/** /**
* Returns an array representation of the collection * Returns an array representation of the collection.
* *
* @return array * @return array
*/ */
@@ -272,9 +282,10 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
} }
/** /**
* Returns information if element with given index/key exists * Returns information if element with given index/key exists.
* *
* @param string|int $index The index/key of element * @param string|int $index The index/key of element
*
* @return bool * @return bool
*/ */
private function exists($index) private function exists($index)

View File

@@ -13,7 +13,7 @@ use Meritoo\Common\Type\Base\BaseType;
use Meritoo\Common\Utilities\Arrays; use Meritoo\Common\Utilities\Arrays;
/** /**
* An exception used while type of something is unknown * An exception used while type of something is unknown.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -21,7 +21,7 @@ use Meritoo\Common\Utilities\Arrays;
abstract class UnknownTypeException extends Exception abstract class UnknownTypeException extends Exception
{ {
/** /**
* Class constructor * Class constructor.
* *
* @param string|int $unknownType The unknown type of something (value of constant) * @param string|int $unknownType The unknown type of something (value of constant)
* @param BaseType $typeInstance An instance of class that contains type of the something * @param BaseType $typeInstance An instance of class that contains type of the something
@@ -33,7 +33,7 @@ abstract class UnknownTypeException extends Exception
$types = Arrays::values2string($allTypes, '', ', '); $types = Arrays::values2string($allTypes, '', ', ');
$template = 'The \'%s\' type of %s is unknown. Probably doesn\'t exist or there is a typo. You should use one' $template = 'The \'%s\' type of %s is unknown. Probably doesn\'t exist or there is a typo. You should use one'
. ' of these types: %s.'; .' of these types: %s.';
$message = sprintf(sprintf($template, $unknownType, $typeName, $types)); $message = sprintf(sprintf($template, $unknownType, $typeName, $types));
parent::__construct($message); parent::__construct($message);

View File

@@ -12,7 +12,7 @@ use Meritoo\Common\Exception\Base\UnknownTypeException;
use Meritoo\Common\Type\DatePartType; use Meritoo\Common\Type\DatePartType;
/** /**
* An exception used while type of date part, e.g. "year", is unknown * An exception used while type of date part, e.g. "year", is unknown.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -20,7 +20,7 @@ use Meritoo\Common\Type\DatePartType;
class UnknownDatePartTypeException extends UnknownTypeException class UnknownDatePartTypeException extends UnknownTypeException
{ {
/** /**
* Class constructor * Class constructor.
* *
* @param string $unknownDatePart Type of date part, e.g. "year". One of DatePartType class constants. * @param string $unknownDatePart Type of date part, e.g. "year". One of DatePartType class constants.
* @param string $value Incorrect value * @param string $value Incorrect value

View File

@@ -11,7 +11,7 @@ namespace Meritoo\Common\Exception\Reflection;
use Exception; use Exception;
/** /**
* An exception used while name of class or trait cannot be resolved * An exception used while name of class or trait cannot be resolved.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -19,9 +19,9 @@ use Exception;
class CannotResolveClassNameException extends Exception class CannotResolveClassNameException extends Exception
{ {
/** /**
* Class constructor * Class constructor.
* *
* @param array|object|string $source Source of the class's / trait's name. It can be an array of objects, * @param array|object|string $source Source of the class's / trait's name. It cane be an array of objects,
* namespaces, object or namespace. * namespaces, object or namespace.
* @param bool $forClass (optional) If is set to true, message of this exception for class is * @param bool $forClass (optional) If is set to true, message of this exception for class is
* prepared. Otherwise - for trait. * prepared. Otherwise - for trait.
@@ -36,7 +36,7 @@ class CannotResolveClassNameException extends Exception
} }
if (is_scalar($source)) { if (is_scalar($source)) {
$value = sprintf(' %s', (string)$source); $value = sprintf(' %s', (string) $source);
} }
$template = 'Name of %s from given \'%s\'%s cannot be resolved. Is there everything ok?'; $template = 'Name of %s from given \'%s\'%s cannot be resolved. Is there everything ok?';

View File

@@ -12,7 +12,7 @@ use Exception;
use Meritoo\Common\Utilities\Reflection; use Meritoo\Common\Utilities\Reflection;
/** /**
* An exception used while given class has no child classes * An exception used while given class has no child classes.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -20,7 +20,7 @@ use Meritoo\Common\Utilities\Reflection;
class MissingChildClassesException extends Exception class MissingChildClassesException extends Exception
{ {
/** /**
* Class constructor * Class constructor.
* *
* @param array|object|string $parentClass Class that hasn't child classes, but it should. An array of objects, * @param array|object|string $parentClass Class that hasn't child classes, but it should. An array of objects,
* strings, object or string. * strings, object or string.
@@ -28,7 +28,7 @@ class MissingChildClassesException extends Exception
public function __construct($parentClass) public function __construct($parentClass)
{ {
$template = 'The \'%s\' class requires one child class at least who will extend her (maybe is an abstract' $template = 'The \'%s\' class requires one child class at least who will extend her (maybe is an abstract'
. ' class), but the child classes are missing. Did you forget to extend this class?'; .' class), but the child classes are missing. Did you forget to extend this class?';
$parentClassName = Reflection::getClassName($parentClass); $parentClassName = Reflection::getClassName($parentClass);
$message = sprintf($template, $parentClassName); $message = sprintf($template, $parentClassName);

View File

@@ -12,7 +12,7 @@ use Exception;
use Meritoo\Common\Utilities\Reflection; use Meritoo\Common\Utilities\Reflection;
/** /**
* An exception used while given class has more than one child class * An exception used while given class has more than one child class.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -20,7 +20,7 @@ use Meritoo\Common\Utilities\Reflection;
class TooManyChildClassesException extends Exception class TooManyChildClassesException extends Exception
{ {
/** /**
* Class constructor * Class constructor.
* *
* @param array|object|string $parentClass Class that has more than one child class, but it shouldn't. An array * @param array|object|string $parentClass Class that has more than one child class, but it shouldn't. An array
* of objects, strings, object or string. * of objects, strings, object or string.
@@ -29,7 +29,7 @@ class TooManyChildClassesException extends Exception
public function __construct($parentClass, array $childClasses) public function __construct($parentClass, array $childClasses)
{ {
$template = "The '%s' class requires one child class at most who will extend her, but more than one child" $template = "The '%s' class requires one child class at most who will extend her, but more than one child"
. " class was found:\n- %s\n\nWhy did you create more than one classes that extend '%s' class?"; ." class was found:\n- %s\n\nWhy did you create more than one classes that extend '%s' class?";
$parentClassName = Reflection::getClassName($parentClass); $parentClassName = Reflection::getClassName($parentClass);
$message = sprintf($template, $parentClassName, implode("\n- ", $childClasses), $parentClassName); $message = sprintf($template, $parentClassName, implode("\n- ", $childClasses), $parentClassName);

View File

@@ -9,7 +9,7 @@
namespace Meritoo\Common\Exception\Regex; namespace Meritoo\Common\Exception\Regex;
/** /**
* An exception used while length of given hexadecimal value of color is incorrect * An exception used while length of given hexadecimal value of color is incorrect.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -17,14 +17,14 @@ namespace Meritoo\Common\Exception\Regex;
class IncorrectColorHexLengthException extends \Exception class IncorrectColorHexLengthException extends \Exception
{ {
/** /**
* Class constructor * Class constructor.
* *
* @param string $color Incorrect hexadecimal value of color * @param string $color Incorrect hexadecimal value of color
*/ */
public function __construct($color) public function __construct($color)
{ {
$template = 'Length of hexadecimal value of color \'%s\' is incorrect. It\'s %d, but it should be 3 or 6.' $template = 'Length of hexadecimal value of color \'%s\' is incorrect. It\'s %d, but it should be 3 or 6.'
. ' Is there everything ok?'; .' Is there everything ok?';
$message = sprintf($template, $color, strlen($color)); $message = sprintf($template, $color, strlen($color));
parent::__construct($message); parent::__construct($message);

View File

@@ -9,7 +9,7 @@
namespace Meritoo\Common\Exception\Regex; namespace Meritoo\Common\Exception\Regex;
/** /**
* An exception used while given hexadecimal value of color is invalid * An exception used while given hexadecimal value of color is invalid.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -17,7 +17,7 @@ namespace Meritoo\Common\Exception\Regex;
class InvalidColorHexValueException extends \Exception class InvalidColorHexValueException extends \Exception
{ {
/** /**
* Class constructor * Class constructor.
* *
* @param string $color Invalid hexadecimal value of color * @param string $color Invalid hexadecimal value of color
*/ */

View File

@@ -3,7 +3,7 @@
namespace Meritoo\Common\Exception\Regex; namespace Meritoo\Common\Exception\Regex;
/** /**
* An exception used while url is invalid * An exception used while url is invalid.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -11,7 +11,7 @@ namespace Meritoo\Common\Exception\Regex;
class InvalidUrlException extends \Exception class InvalidUrlException extends \Exception
{ {
/** /**
* Class constructor * Class constructor.
* *
* @param string $url Invalid url * @param string $url Invalid url
*/ */

View File

@@ -6,7 +6,7 @@ use Meritoo\Common\Exception\Base\UnknownTypeException;
use Meritoo\Common\Type\OopVisibilityType; use Meritoo\Common\Type\OopVisibilityType;
/** /**
* An exception used while the visibility of a property, a method or (as of PHP 7.1.0) a constant is unknown * An exception used while the visibility of a property, a method or (as of PHP 7.1.0) a constant is unknown.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl

View File

@@ -12,28 +12,20 @@ use DateTime;
use Generator; use Generator;
use Meritoo\Common\Exception\Type\UnknownOopVisibilityTypeException; use Meritoo\Common\Exception\Type\UnknownOopVisibilityTypeException;
use Meritoo\Common\Type\OopVisibilityType; use Meritoo\Common\Type\OopVisibilityType;
use Meritoo\Common\Utilities\Miscellaneous; use PHPUnit_Framework_TestCase;
use PHPUnit\Framework\TestCase;
use ReflectionClass; use ReflectionClass;
use ReflectionMethod; use ReflectionMethod;
/** /**
* Base test case with common methods and data providers * Base test case with common methods and data providers.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
abstract class BaseTestCase extends TestCase abstract class BaseTestCase extends PHPUnit_Framework_TestCase
{ {
/** /**
* Path of directory with data used by test cases * Provides an empty value.
*
* @var string
*/
private static $testsDataDirPath = '.data/tests';
/**
* Provides an empty value
* *
* @return Generator * @return Generator
*/ */
@@ -48,7 +40,7 @@ abstract class BaseTestCase extends TestCase
} }
/** /**
* Provides boolean value * Provides boolean value.
* *
* @return Generator * @return Generator
*/ */
@@ -59,7 +51,7 @@ abstract class BaseTestCase extends TestCase
} }
/** /**
* Provides instance of DateTime class * Provides instance of DateTime class.
* *
* @return Generator * @return Generator
*/ */
@@ -72,7 +64,7 @@ abstract class BaseTestCase extends TestCase
} }
/** /**
* Provides relative / compound format of DateTime * Provides relative / compound format of DateTime.
* *
* @return Generator * @return Generator
*/ */
@@ -92,7 +84,7 @@ abstract class BaseTestCase extends TestCase
} }
/** /**
* Provides path of not existing file, e.g. "lorem/ipsum.jpg" * Provides path of not existing file, e.g. "lorem/ipsum.jpg".
* *
* @return Generator * @return Generator
*/ */
@@ -105,28 +97,24 @@ abstract class BaseTestCase extends TestCase
/** /**
* Returns path of file used by tests. * Returns path of file used by tests.
* It should be placed in /.data/tests directory of this project. * It should be placed in /data/tests directory of this project.
* *
* @param string $fileName Name of file * @param string $fileName Name of file
* @param string $directoryPath (optional) Path of directory containing the file * @param string $directoryPath (optional) Path of directory containing the file
*
* @return string * @return string
*/ */
public function getFilePathToTests($fileName, $directoryPath = '') public function getFilePathToTests($fileName, $directoryPath = '')
{ {
$rootPath = Miscellaneous::getProjectRootPath(); if (!empty($directoryPath)) {
$directoryPath = '/'.$directoryPath;
}
$paths = [ return sprintf('%s/../../../../../data/tests/%s%s', __DIR__, $fileName, $directoryPath);
$rootPath,
self::$testsDataDirPath,
$directoryPath,
$fileName,
];
return Miscellaneous::concatenatePaths($paths);
} }
/** /**
* Verifies visibility and arguments of method * Verifies visibility and arguments of method.
* *
* @param string $classNamespace Namespace of class that contains method to verify * @param string $classNamespace Namespace of class that contains method to verify
* @param string|ReflectionMethod $method Name of method or just the method to verify * @param string|ReflectionMethod $method Name of method or just the method to verify
@@ -136,13 +124,14 @@ abstract class BaseTestCase extends TestCase
* verified method * verified method
* @param int $requiredArgumentsCount (optional) Expected count/amount of required arguments * @param int $requiredArgumentsCount (optional) Expected count/amount of required arguments
* of the verified method * of the verified method
*
* @throws UnknownOopVisibilityTypeException * @throws UnknownOopVisibilityTypeException
* *
* Attention. 2nd argument, the $method, may be: * Attention. 2nd argument, the $method, may be:
* - string - name of the method * - string - name of the method
* - instance of ReflectionMethod - just the method (provided by ReflectionClass::getMethod() method) * - instance of ReflectionMethod - just the method (provided by ReflectionClass::getMethod() method)
*/ */
protected static function assertMethodVisibilityAndArguments( protected function verifyMethodVisibilityAndArguments(
$classNamespace, $classNamespace,
$method, $method,
$visibilityType, $visibilityType,
@@ -169,14 +158,17 @@ abstract class BaseTestCase extends TestCase
switch ($visibilityType) { switch ($visibilityType) {
case OopVisibilityType::IS_PUBLIC: case OopVisibilityType::IS_PUBLIC:
static::assertTrue($method->isPublic()); static::assertTrue($method->isPublic());
break; break;
case OopVisibilityType::IS_PROTECTED: case OopVisibilityType::IS_PROTECTED:
static::assertTrue($method->isProtected()); static::assertTrue($method->isProtected());
break; break;
case OopVisibilityType::IS_PRIVATE: case OopVisibilityType::IS_PRIVATE:
static::assertTrue($method->isPrivate()); static::assertTrue($method->isPrivate());
break; break;
} }
@@ -185,17 +177,18 @@ abstract class BaseTestCase extends TestCase
} }
/** /**
* Verifies visibility and arguments of class constructor * Verifies visibility and arguments of class constructor.
* *
* @param string $classNamespace Namespace of class that contains constructor to verify * @param string $classNamespace Namespace of class that contains method to verify
* @param string $visibilityType Expected visibility of verified method. One of OopVisibilityType class * @param string $visibilityType Expected visibility of verified method. One of OopVisibilityType class
* constants. * constants.
* @param int $argumentsCount (optional) Expected count/amount of arguments of the verified method * @param int $argumentsCount (optional) Expected count/amount of arguments of the verified method
* @param int $requiredArgumentsCount (optional) Expected count/amount of required arguments of the verified * @param int $requiredArgumentsCount (optional) Expected count/amount of required arguments of the verified
* method * method
*
* @throws UnknownOopVisibilityTypeException * @throws UnknownOopVisibilityTypeException
*/ */
protected static function assertConstructorVisibilityAndArguments( protected function verifyConstructorVisibilityAndArguments(
$classNamespace, $classNamespace,
$visibilityType, $visibilityType,
$argumentsCount = 0, $argumentsCount = 0,
@@ -207,32 +200,6 @@ abstract class BaseTestCase extends TestCase
$reflection = new ReflectionClass($classNamespace); $reflection = new ReflectionClass($classNamespace);
$method = $reflection->getConstructor(); $method = $reflection->getConstructor();
return static::assertMethodVisibilityAndArguments($classNamespace, $method, $visibilityType, $argumentsCount, $requiredArgumentsCount); return $this->verifyMethodVisibilityAndArguments($classNamespace, $method, $visibilityType, $argumentsCount, $requiredArgumentsCount);
}
/**
* Asserts that class with given namespace has no constructor
*
* @param string $classNamespace Namespace of class that contains constructor to verify
*/
protected static function assertHasNoConstructor($classNamespace)
{
/*
* Let's grab the constructor
*/
$reflection = new ReflectionClass($classNamespace);
$constructor = $reflection->getConstructor();
static::assertNull($constructor);
}
/**
* Sets path of directory with data used by test cases
*
* @param string $testsDataDirPath Path of directory with data used by test cases
*/
protected static function setTestsDataDirPath($testsDataDirPath)
{
static::$testsDataDirPath = $testsDataDirPath;
} }
} }

View File

@@ -6,7 +6,7 @@ use Generator;
use Meritoo\Common\Type\Base\BaseType; use Meritoo\Common\Type\Base\BaseType;
/** /**
* Base test case for the type of something * Base test case for the type of something.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -14,7 +14,7 @@ use Meritoo\Common\Type\Base\BaseType;
abstract class BaseTypeTestCase extends BaseTestCase abstract class BaseTypeTestCase extends BaseTestCase
{ {
/** /**
* Verifies availability of all types * Verifies availability of all types.
*/ */
public function testAvailabilityOfAllTypes() public function testAvailabilityOfAllTypes()
{ {
@@ -25,7 +25,7 @@ abstract class BaseTypeTestCase extends BaseTestCase
} }
/** /**
* Verifies whether given type is correct or not * Verifies whether given type is correct or not.
* *
* @param string $type Type to verify * @param string $type Type to verify
* @param bool $expected Information if given type is correct or not * @param bool $expected Information if given type is correct or not
@@ -38,21 +38,21 @@ abstract class BaseTypeTestCase extends BaseTestCase
} }
/** /**
* Provides type to verify and information if it's correct * Provides type to verify and information if it's correct.
* *
* @return Generator * @return Generator
*/ */
abstract public function provideTypeToVerify(); abstract public function provideTypeToVerify();
/** /**
* Returns instance of the tested type * Returns instance of the tested type.
* *
* @return BaseType * @return BaseType
*/ */
abstract protected function getTestedTypeInstance(); abstract protected function getTestedTypeInstance();
/** /**
* Returns all expected types of the tested type * Returns all expected types of the tested type.
* *
* @return array * @return array
*/ */

View File

@@ -20,20 +20,20 @@ use Meritoo\Common\Utilities\Reflection;
abstract class BaseType abstract class BaseType
{ {
/** /**
* All types * All types.
* *
* @var array * @var array
*/ */
private $all; private $all;
/** /**
* Returns all types * Returns all types.
* *
* @return array * @return array
*/ */
public function getAll() public function getAll()
{ {
if (null === $this->all) { if ($this->all === null) {
$this->all = Reflection::getConstants($this); $this->all = Reflection::getConstants($this);
} }
@@ -41,9 +41,10 @@ abstract class BaseType
} }
/** /**
* Returns information if given type is correct * Returns information if given type is correct.
* *
* @param string $type The type to check * @param string $type The type to check
*
* @return bool * @return bool
*/ */
public function isCorrectType($type) public function isCorrectType($type)

View File

@@ -11,7 +11,7 @@ namespace Meritoo\Common\Type;
use Meritoo\Common\Type\Base\BaseType; use Meritoo\Common\Type\Base\BaseType;
/** /**
* Type of date part, e.g. "year" * Type of date part, e.g. "year".
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -19,42 +19,42 @@ use Meritoo\Common\Type\Base\BaseType;
class DatePartType extends BaseType class DatePartType extends BaseType
{ {
/** /**
* The "day" date part * The "day" date part.
* *
* @var string * @var string
*/ */
const DAY = 'day'; const DAY = 'day';
/** /**
* The "hour" date part * The "hour" date part.
* *
* @var string * @var string
*/ */
const HOUR = 'hour'; const HOUR = 'hour';
/** /**
* The "minute" date part * The "minute" date part.
* *
* @var string * @var string
*/ */
const MINUTE = 'minute'; const MINUTE = 'minute';
/** /**
* The "month" date part * The "month" date part.
* *
* @var string * @var string
*/ */
const MONTH = 'month'; const MONTH = 'month';
/** /**
* The "second" date part * The "second" date part.
* *
* @var string * @var string
*/ */
const SECOND = 'second'; const SECOND = 'second';
/** /**
* The "year" date part * The "year" date part.
* *
* @var string * @var string
*/ */

View File

@@ -5,7 +5,7 @@ namespace Meritoo\Common\Type;
use Meritoo\Common\Type\Base\BaseType; use Meritoo\Common\Type\Base\BaseType;
/** /**
* The visibility of a property, a method or (as of PHP 7.1.0) a constant * The visibility of a property, a method or (as of PHP 7.1.0) a constant.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -15,21 +15,21 @@ use Meritoo\Common\Type\Base\BaseType;
class OopVisibilityType extends BaseType class OopVisibilityType extends BaseType
{ {
/** /**
* The "private" visibility of OOP * The "private" visibility of OOP.
* *
* @var int * @var int
*/ */
const IS_PRIVATE = 3; const IS_PRIVATE = 3;
/** /**
* The "protected" visibility of OOP * The "protected" visibility of OOP.
* *
* @var int * @var int
*/ */
const IS_PROTECTED = 2; const IS_PROTECTED = 2;
/** /**
* The "public" visibility of OOP * The "public" visibility of OOP.
* *
* @var int * @var int
*/ */

View File

@@ -9,15 +9,15 @@
namespace Meritoo\Common\Utilities; namespace Meritoo\Common\Utilities;
/** /**
* Useful arrays methods * Useful arrays methods.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class Arrays class Arrays
{ {
/** /**
* Name of the array's key used to store position of element of the array * Name of the array's key used to store position of element of the array.
* *
* @var string * @var string
*/ */
@@ -30,6 +30,7 @@ class Arrays
* @param array $array Array data to be converted * @param array $array Array data to be converted
* @param string|int $arrayColumnKey (optional) Column name * @param string|int $arrayColumnKey (optional) Column name
* @param string $separator (optional) Separator used in resultant string * @param string $separator (optional) Separator used in resultant string
*
* @return string * @return string
*/ */
public static function values2string(array $array, $arrayColumnKey = '', $separator = ',') public static function values2string(array $array, $arrayColumnKey = '', $separator = ',')
@@ -79,12 +80,13 @@ class Arrays
} }
/** /**
* Converts given array to string with keys, e.g. abc=1&def=2 or abc="1" def="2" * Converts given array to string with keys, e.g. abc=1&def=2 or abc="1" def="2".
* *
* @param array $array Array data to be converted * @param array $array Array data to be converted
* @param string $separator (optional) Separator used between name-value pairs in resultant string * @param string $separator (optional) Separator used between name-value pairs in resultant string
* @param string $valuesKeysSeparator (optional) Separator used between name and value in resultant string * @param string $valuesKeysSeparator (optional) Separator used between name and value in resultant string
* @param string $valuesWrapper (optional) Wrapper used to wrap values, e.g. double-quote: key="value" * @param string $valuesWrapper (optional) Wrapper used to wrap values, e.g. double-quote: key="value"
*
* @return string * @return string
*/ */
public static function valuesKeys2string($array, $separator = ',', $valuesKeysSeparator = '=', $valuesWrapper = '') public static function valuesKeys2string($array, $separator = ',', $valuesKeysSeparator = '=', $valuesWrapper = '')
@@ -101,7 +103,7 @@ class Arrays
$value = sprintf('%s%s%s', $valuesWrapper, $value, $valuesWrapper); $value = sprintf('%s%s%s', $valuesWrapper, $value, $valuesWrapper);
} }
$effect .= $key . $valuesKeysSeparator . $value; $effect .= $key.$valuesKeysSeparator.$value;
} }
} }
@@ -109,10 +111,11 @@ class Arrays
} }
/** /**
* Converts given array's rows to csv string * Converts given array's rows to csv string.
* *
* @param array $array Array data to be converted. It have to be an array that represents database table. * @param array $array Array data to be converted. It have to be an array that represents database table.
* @param string $separator (optional) Separator used in resultant string * @param string $separator (optional) Separator used in resultant string
*
* @return string * @return string
*/ */
public static function values2csv($array, $separator = ',') public static function values2csv($array, $separator = ',')
@@ -145,12 +148,13 @@ class Arrays
} }
/** /**
* Returns information if given element is the first one * Returns information if given element is the first one.
* *
* @param array $array The array to get the first element of * @param array $array The array to get the first element of
* @param mixed $element The element to check / verify * @param mixed $element The element to check / verify
* @param bool $firstLevelOnly (optional) If is set to true, first element is returned. Otherwise - totally * @param bool $firstLevelOnly (optional) If is set to true, first element is returned. Otherwise - totally
* first element is returned (first of the First array). * first element is returned (first of the First array).
*
* @return bool * @return bool
*/ */
public static function isFirstElement(array $array, $element, $firstLevelOnly = true) public static function isFirstElement(array $array, $element, $firstLevelOnly = true)
@@ -161,7 +165,7 @@ class Arrays
} }
/** /**
* Returns the first element of given array * Returns the first element of given array.
* *
* It may be first element of given array or the totally first element from the all elements (first element of the * It may be first element of given array or the totally first element from the all elements (first element of the
* first array). * first array).
@@ -169,6 +173,7 @@ class Arrays
* @param array $array The array to get the first element of * @param array $array The array to get the first element of
* @param bool $firstLevelOnly (optional) If is set to true, first element is returned. Otherwise - totally * @param bool $firstLevelOnly (optional) If is set to true, first element is returned. Otherwise - totally
* first element is returned (first of the first array). * first element is returned (first of the first array).
*
* @return mixed * @return mixed
*/ */
public static function getFirstElement(array $array, $firstLevelOnly = true) public static function getFirstElement(array $array, $firstLevelOnly = true)
@@ -192,9 +197,10 @@ class Arrays
} }
/** /**
* Returns first key of array * Returns first key of array.
* *
* @param array $array The array to get the first key of * @param array $array The array to get the first key of
*
* @return mixed * @return mixed
*/ */
public static function getFirstKey(array $array) public static function getFirstKey(array $array)
@@ -213,12 +219,13 @@ class Arrays
} }
/** /**
* Returns information if given element is the last one * Returns information if given element is the last one.
* *
* @param array $array The array to get the last element of * @param array $array The array to get the last element of
* @param mixed $element The element to check / verify * @param mixed $element The element to check / verify
* @param bool $firstLevelOnly (optional) If is set to true, last element is returned. Otherwise - totally * @param bool $firstLevelOnly (optional) If is set to true, last element is returned. Otherwise - totally
* last element is returned (last of the latest array). * last element is returned (last of the latest array).
*
* @return bool * @return bool
*/ */
public static function isLastElement(array $array, $element, $firstLevelOnly = true) public static function isLastElement(array $array, $element, $firstLevelOnly = true)
@@ -229,7 +236,7 @@ class Arrays
} }
/** /**
* Returns the last element of given array * Returns the last element of given array.
* *
* It may be last element of given array or the totally last element from the all elements (last element of the * It may be last element of given array or the totally last element from the all elements (last element of the
* latest array). * latest array).
@@ -237,6 +244,7 @@ class Arrays
* @param array $array The array to get the last element of * @param array $array The array to get the last element of
* @param bool $firstLevelOnly (optional) If is set to true, last element is returned. Otherwise - totally * @param bool $firstLevelOnly (optional) If is set to true, last element is returned. Otherwise - totally
* last element is returned (last of the latest array). * last element is returned (last of the latest array).
*
* @return mixed * @return mixed
*/ */
public static function getLastElement(array $array, $firstLevelOnly = true) public static function getLastElement(array $array, $firstLevelOnly = true)
@@ -259,10 +267,11 @@ class Arrays
} }
/** /**
* Returns breadcrumb (a path) to the last element of array * Returns breadcrumb (a path) to the last element of array.
* *
* @param array $array The array to get the breadcrumb * @param array $array The array to get the breadcrumb
* @param string $separator (optional) Separator used to stick the elements * @param string $separator (optional) Separator used to stick the elements
*
* @return string * @return string
*/ */
public static function getLastElementBreadCrumb($array, $separator = '/') public static function getLastElementBreadCrumb($array, $separator = '/')
@@ -281,13 +290,14 @@ class Arrays
$crumb = $last; $crumb = $last;
} }
return $breadCrumb . $separator . $crumb; return $breadCrumb.$separator.$crumb;
} }
/** /**
* Returns the last row of array * Returns the last row of array.
* *
* @param array $array The array to get the last row of * @param array $array The array to get the last row of
*
* @return mixed * @return mixed
*/ */
public static function getLastRow(array $array) public static function getLastRow(array $array)
@@ -322,11 +332,12 @@ class Arrays
} }
/** /**
* Replaces array keys that match given pattern with new key name * Replaces array keys that match given pattern with new key name.
* *
* @param array $dataArray The array * @param array $dataArray The array
* @param string $oldKeyPattern Old key pattern * @param string $oldKeyPattern Old key pattern
* @param string $newKey New key name * @param string $newKey New key name
*
* @return array * @return array
*/ */
public static function replaceArrayKeys($dataArray, $oldKeyPattern, $newKey) public static function replaceArrayKeys($dataArray, $oldKeyPattern, $newKey)
@@ -351,12 +362,13 @@ class Arrays
} }
/** /**
* Generates JavaScript code for given PHP array * Generates JavaScript code for given PHP array.
* *
* @param array $array The array that should be generated to JavaScript * @param array $array The array that should be generated to JavaScript
* @param string $jsVariableName (optional) Name of the variable that will be in generated JavaScript code * @param string $jsVariableName (optional) Name of the variable that will be in generated JavaScript code
* @param bool $preserveIndexes (optional) If is set to true and $jsVariableName isn't empty, indexes also * @param bool $preserveIndexes (optional) If is set to true and $jsVariableName isn't empty, indexes also
* will be added to the JavaScript code. Otherwise not. * will be added to the JavaScript code. Otherwise not.
*
* @return string|null * @return string|null
*/ */
public static function array2JavaScript(array $array, $jsVariableName = '', $preserveIndexes = false) public static function array2JavaScript(array $array, $jsVariableName = '', $preserveIndexes = false)
@@ -401,8 +413,8 @@ class Arrays
if (is_array($value)) { if (is_array($value)) {
$variable = $index; $variable = $index;
if (is_integer($index)) { if (is_int($index)) {
$variable = 'value_' . $variable; $variable = 'value_'.$variable;
} }
$value = self::array2JavaScript($value, $variable, $preserveIndexes); $value = self::array2JavaScript($value, $variable, $preserveIndexes);
@@ -415,11 +427,11 @@ class Arrays
* var autoGeneratedVariable = new Array(...);autoGeneratedVariable[0] = new Array(...); * var autoGeneratedVariable = new Array(...);autoGeneratedVariable[0] = new Array(...);
* autoGeneratedVariable[1] = new Array(...); * autoGeneratedVariable[1] = new Array(...);
*/ */
if (1 === $counter) { if ($counter === 1) {
$effect .= "\n"; $effect .= "\n";
} }
$effect .= $value . "\n"; $effect .= $value."\n";
$effect .= sprintf('%s[%s] = %s;', $jsVariableName, Miscellaneous::quoteValue($index), $variable); $effect .= sprintf('%s[%s] = %s;', $jsVariableName, Miscellaneous::quoteValue($index), $variable);
if ($counter !== $arrayCount) { if ($counter !== $arrayCount) {
@@ -452,9 +464,10 @@ class Arrays
} }
/** /**
* Quotes (adds quotes) to elements of an array that are strings * Quotes (adds quotes) to elements of an array that are strings.
* *
* @param array $array The array to check for string values * @param array $array The array to check for string values
*
* @return array * @return array
*/ */
public static function quoteStrings($array) public static function quoteStrings($array)
@@ -469,7 +482,7 @@ class Arrays
$value = self::quoteStrings($value); $value = self::quoteStrings($value);
} elseif (is_string($value)) { } elseif (is_string($value)) {
if (!Regex::isQuoted($value)) { if (!Regex::isQuoted($value)) {
$value = '\'' . $value . '\''; $value = '\''.$value.'\'';
} }
} }
@@ -481,10 +494,11 @@ class Arrays
} }
/** /**
* Removes marginal element (first or last) * Removes marginal element (first or last).
* *
* @param string|array $item The item which should be shortened * @param string|array $item The item which should be shortened
* @param bool $last (optional) If is set to true, last element is removed. Otherwise - first. * @param bool $last (optional) If is set to true, last element is removed. Otherwise - first.
*
* @return string|array * @return string|array
*/ */
public static function removeMarginalElement($item, $last = true) public static function removeMarginalElement($item, $last = true)
@@ -509,9 +523,10 @@ class Arrays
} }
/** /**
* Returns last key of array * Returns last key of array.
* *
* @param array $array The array to get the last key of * @param array $array The array to get the last key of
*
* @return mixed * @return mixed
*/ */
public static function getLastKey(array $array) public static function getLastKey(array $array)
@@ -522,10 +537,11 @@ class Arrays
} }
/** /**
* Removes element / item of given array * Removes element / item of given array.
* *
* @param array $array The array that contains element / item which should be removed * @param array $array The array that contains element / item which should be removed
* @param mixed $item The element / item which should be removed * @param mixed $item The element / item which should be removed
*
* @return bool|array * @return bool|array
*/ */
public static function removeElement(array $array, $item) public static function removeElement(array $array, $item)
@@ -553,7 +569,7 @@ class Arrays
} }
/** /**
* Removes items from given array starting at given element (before or after the element) * Removes items from given array starting at given element (before or after the element).
* *
* @param array $array The array which contains items to remove * @param array $array The array which contains items to remove
* @param mixed $needle The element which is start point of deletion * @param mixed $needle The element which is start point of deletion
@@ -605,6 +621,7 @@ class Arrays
* value will be used with it's key, because other will be overridden. * value will be used with it's key, because other will be overridden.
* Otherwise - values are preserved and keys assigned to that values are * Otherwise - values are preserved and keys assigned to that values are
* returned as an array. * returned as an array.
*
* @return array * @return array
* *
* Example of $ignoreDuplicatedValues = false: * Example of $ignoreDuplicatedValues = false:
@@ -639,6 +656,7 @@ class Arrays
*/ */
if (is_array($value)) { if (is_array($value)) {
$replaced[$key] = self::setKeysAsValues($value, $ignoreDuplicatedValues); $replaced[$key] = self::setKeysAsValues($value, $ignoreDuplicatedValues);
continue; continue;
} }
@@ -666,10 +684,11 @@ class Arrays
} }
/** /**
* Applies ksort() function recursively in the given array * Applies ksort() function recursively in the given array.
* *
* @param array $array The array to sort * @param array $array The array to sort
* @param int $sortFlags (optional) Options of ksort() function * @param int $sortFlags (optional) Options of ksort() function
*
* @return array|null * @return array|null
*/ */
public static function ksortRecursive(array &$array, $sortFlags = SORT_REGULAR) public static function ksortRecursive(array &$array, $sortFlags = SORT_REGULAR)
@@ -695,9 +714,10 @@ class Arrays
} }
/** /**
* Returns count / amount of elements that are not array * Returns count / amount of elements that are not array.
* *
* @param array $array The array to count * @param array $array The array to count
*
* @return int|null * @return int|null
*/ */
public static function getNonArrayElementsCount(array $array) public static function getNonArrayElementsCount(array $array)
@@ -715,6 +735,7 @@ class Arrays
foreach ($array as &$value) { foreach ($array as &$value) {
if (is_array($value)) { if (is_array($value)) {
$count += self::getNonArrayElementsCount($value); $count += self::getNonArrayElementsCount($value);
continue; continue;
} }
@@ -725,7 +746,7 @@ class Arrays
} }
/** /**
* Converts given string with special separators to array * Converts given string with special separators to array.
* *
* Example: * Example:
* ~ string: * ~ string:
@@ -740,6 +761,7 @@ class Arrays
* @param string $string The string to be converted * @param string $string The string to be converted
* @param string $separator (optional) Separator used between name-value pairs in the string * @param string $separator (optional) Separator used between name-value pairs in the string
* @param string $valuesKeysSeparator (optional) Separator used between name and value in the string * @param string $valuesKeysSeparator (optional) Separator used between name and value in the string
*
* @return array * @return array
*/ */
public static function string2array($string, $separator = '|', $valuesKeysSeparator = ':') public static function string2array($string, $separator = '|', $valuesKeysSeparator = ':')
@@ -758,7 +780,7 @@ class Arrays
foreach ($exploded as $item) { foreach ($exploded as $item) {
$exploded2 = explode($valuesKeysSeparator, $item); $exploded2 = explode($valuesKeysSeparator, $item);
if (2 == count($exploded2)) { if (count($exploded2) == 2) {
$key = trim($exploded2[0]); $key = trim($exploded2[0]);
$value = trim($exploded2[1]); $value = trim($exploded2[1]);
@@ -770,11 +792,12 @@ class Arrays
} }
/** /**
* Returns information if given keys exist in given array * Returns information if given keys exist in given array.
* *
* @param array $keys The keys to find * @param array $keys The keys to find
* @param array $array The array which maybe contains keys * @param array $array The array which maybe contains keys
* @param bool $explicit (optional) If is set to true, all keys should exist in given array. Otherwise - not all. * @param bool $explicit (optional) If is set to true, all keys should exist in given array. Otherwise - not all.
*
* @return bool * @return bool
*/ */
public static function areKeysInArray($keys, $array, $explicit = true) public static function areKeysInArray($keys, $array, $explicit = true)
@@ -812,7 +835,7 @@ class Arrays
} }
/** /**
* Returns paths of the last elements * Returns paths of the last elements.
* *
* @param array $array The array with elements * @param array $array The array with elements
* @param string $separator (optional) Separator used in resultant strings. Default: ".". * @param string $separator (optional) Separator used in resultant strings. Default: ".".
@@ -820,6 +843,7 @@ class Arrays
* @param string|array $stopIfMatchedBy (optional) Patterns of keys or paths that matched will stop the process * @param string|array $stopIfMatchedBy (optional) Patterns of keys or paths that matched will stop the process
* of path building and including children of those keys or paths (recursive * of path building and including children of those keys or paths (recursive
* will not be used for keys in lower level of given array) * will not be used for keys in lower level of given array)
*
* @return array * @return array
* *
* Examples - $stopIfMatchedBy argument: * Examples - $stopIfMatchedBy argument:
@@ -862,6 +886,7 @@ class Arrays
if (preg_match($pattern, $key) || preg_match($pattern, $path)) { if (preg_match($pattern, $key) || preg_match($pattern, $path)) {
$stopRecursion = true; $stopRecursion = true;
break; break;
} }
} }
@@ -875,6 +900,7 @@ class Arrays
*/ */
if (!is_array($value) || (is_array($value) && empty($value)) || $stopRecursion) { if (!is_array($value) || (is_array($value) && empty($value)) || $stopRecursion) {
$paths[$path] = $value; $paths[$path] = $value;
continue; continue;
} }
@@ -892,9 +918,10 @@ class Arrays
} }
/** /**
* Makes and returns an array for given variable * Makes and returns an array for given variable.
* *
* @param mixed $variable Variable that should be an array * @param mixed $variable Variable that should be an array
*
* @return array * @return array
*/ */
public static function makeArray($variable) public static function makeArray($variable)
@@ -907,12 +934,13 @@ class Arrays
} }
/** /**
* Returns information if keys / indexes of given array are matched by given pattern * Returns information if keys / indexes of given array are matched by given pattern.
* *
* @param array $array The array to check * @param array $array The array to check
* @param string $pattern The pattern which keys / indexes should match, e.g. "\d+" * @param string $pattern The pattern which keys / indexes should match, e.g. "\d+"
* @param bool $firstLevelOnly (optional) If is set to true, all keys / indexes are checked. Otherwise - from the * @param bool $firstLevelOnly (optional) If is set to true, all keys / indexes are checked. Otherwise - from the
* first level only. * first level only.
*
* @return bool * @return bool
*/ */
public static function areAllKeysMatchedByPattern($array, $pattern, $firstLevelOnly = false) public static function areAllKeysMatchedByPattern($array, $pattern, $firstLevelOnly = false)
@@ -943,6 +971,7 @@ class Arrays
*/ */
if (!preg_match($pattern, $key)) { if (!preg_match($pattern, $key)) {
$areMatched = false; $areMatched = false;
break; break;
} }
@@ -960,11 +989,12 @@ class Arrays
/** /**
* Returns information if keys / indexes of given array are integers, in other words if the array contains * Returns information if keys / indexes of given array are integers, in other words if the array contains
* zero-based keys / indexes * zero-based keys / indexes.
* *
* @param array $array The array to check * @param array $array The array to check
* @param bool $firstLevelOnly (optional) If is set to true, all keys / indexes are checked. Otherwise - from the * @param bool $firstLevelOnly (optional) If is set to true, all keys / indexes are checked. Otherwise - from the
* first level only. * first level only.
*
* @return bool * @return bool
*/ */
public static function areAllKeysIntegers($array, $firstLevelOnly = false) public static function areAllKeysIntegers($array, $firstLevelOnly = false)
@@ -980,6 +1010,7 @@ class Arrays
* *
* @param array $array The array which should contains a value * @param array $array The array which should contains a value
* @param array $keys Keys, path of keys, to find in given array * @param array $keys Keys, path of keys, to find in given array
*
* @return mixed * @return mixed
* *
* Examples: * Examples:
@@ -1029,6 +1060,7 @@ class Arrays
* *
* @param array $array The array to check * @param array $array The array to check
* @param array $keys Keys, path of keys, to find in given array * @param array $keys Keys, path of keys, to find in given array
*
* @return bool * @return bool
* *
* Examples: * Examples:
@@ -1079,6 +1111,7 @@ class Arrays
* *
* @param array $array The array which should contain values of the key * @param array $array The array which should contain values of the key
* @param string $key The key * @param string $key The key
*
* @return array|null * @return array|null
*/ */
public static function getAllValuesOfKey(array $array, $key) public static function getAllValuesOfKey(array $array, $key)
@@ -1092,6 +1125,7 @@ class Arrays
foreach ($array as $index => $value) { foreach ($array as $index => $value) {
if ($index === $key) { if ($index === $key) {
$values[] = $value; $values[] = $value;
continue; continue;
} }
@@ -1108,7 +1142,7 @@ class Arrays
} }
/** /**
* Sets positions for each element / child of given array and returns the array * Sets positions for each element / child of given array and returns the array.
* *
* Position for the 1st element / child of a parent is set to 1 and incremented for the next element and * Position for the 1st element / child of a parent is set to 1 and incremented for the next element and
* so on. Each parent is treated as separate array, so its elements are treated as positioned at 1st level. * so on. Each parent is treated as separate array, so its elements are treated as positioned at 1st level.
@@ -1117,6 +1151,7 @@ class Arrays
* @param string $keyName (optional) Name of key which will contain the position value * @param string $keyName (optional) Name of key which will contain the position value
* @param int $startPosition (optional) Default, start value of the position for main / given array, not the * @param int $startPosition (optional) Default, start value of the position for main / given array, not the
* children * children
*
* @return array * @return array
*/ */
public static function setPositions(array $array, $keyName = self::POSITION_KEY_NAME, $startPosition = null) public static function setPositions(array $array, $keyName = self::POSITION_KEY_NAME, $startPosition = null)
@@ -1124,7 +1159,7 @@ class Arrays
if (!empty($array)) { if (!empty($array)) {
$childPosition = 1; $childPosition = 1;
if (null !== $startPosition) { if ($startPosition !== null) {
$array[$keyName] = $startPosition; $array[$keyName] = $startPosition;
} }
@@ -1140,9 +1175,10 @@ class Arrays
} }
/** /**
* Trims string values of given array and returns the new array * Trims string values of given array and returns the new array.
* *
* @param array $array The array which values should be trimmed * @param array $array The array which values should be trimmed
*
* @return array * @return array
*/ */
public static function trimRecursive(array $array) public static function trimRecursive(array $array)
@@ -1155,6 +1191,7 @@ class Arrays
foreach ($array as $key => $value) { foreach ($array as $key => $value) {
if (is_array($value)) { if (is_array($value)) {
$effect[$key] = self::trimRecursive($value); $effect[$key] = self::trimRecursive($value);
continue; continue;
} }
@@ -1210,6 +1247,7 @@ class Arrays
* *
* @param array $array An array to sort * @param array $array An array to sort
* @param array $keysOrder An array with keys of the 1st argument in proper / required order * @param array $keysOrder An array with keys of the 1st argument in proper / required order
*
* @return array|null * @return array|null
*/ */
public static function sortByCustomKeysOrder(array $array, array $keysOrder) public static function sortByCustomKeysOrder(array $array, array $keysOrder)
@@ -1251,7 +1289,7 @@ class Arrays
} }
/** /**
* Returns smartly imploded string * Returns smartly imploded string.
* *
* Separators located at the beginning or end of elements are removed. * Separators located at the beginning or end of elements are removed.
* It's required to avoid problems with duplicated separator, e.g. "first//second/third", where separator is a * It's required to avoid problems with duplicated separator, e.g. "first//second/third", where separator is a
@@ -1259,6 +1297,7 @@ class Arrays
* *
* @param array $array The array with elements to implode * @param array $array The array with elements to implode
* @param string $separator Separator used to stick together elements of given array * @param string $separator Separator used to stick together elements of given array
*
* @return string * @return string
*/ */
public static function implodeSmart(array $array, $separator) public static function implodeSmart(array $array, $separator)
@@ -1289,11 +1328,12 @@ class Arrays
} }
/** /**
* Returns information if given array is empty, iow. information if all elements of given array are empty * Returns information if given array is empty, iow. information if all elements of given array are empty.
* *
* @param array $array The array to verify * @param array $array The array to verify
* @param bool $strictNull (optional) If is set to true elements are verified if they are null. Otherwise - only * @param bool $strictNull (optional) If is set to true elements are verified if they are null. Otherwise - only
* if they are empty (e.g. null, '', 0, array()). * if they are empty (e.g. null, '', 0, array()).
*
* @return bool * @return bool
*/ */
public static function areAllValuesEmpty(array $array, $strictNull = false) public static function areAllValuesEmpty(array $array, $strictNull = false)
@@ -1316,7 +1356,7 @@ class Arrays
* *
* If one of the above is true, not all elements of given array are empty * If one of the above is true, not all elements of given array are empty
*/ */
if ((!is_array($element) && $strictNull && null !== $element) || !empty($element)) { if ((!is_array($element) && $strictNull && $element !== null) || !empty($element)) {
return false; return false;
} }
} }
@@ -1343,6 +1383,7 @@ class Arrays
* @param array $array2 The 2nd array to verify * @param array $array2 The 2nd array to verify
* @param bool $valuesOnly (optional) If is set to true, compares values only. Otherwise - keys and values * @param bool $valuesOnly (optional) If is set to true, compares values only. Otherwise - keys and values
* (default behaviour). * (default behaviour).
*
* @return array * @return array
*/ */
public static function arrayDiffRecursive(array $array1, array $array2, $valuesOnly = false) public static function arrayDiffRecursive(array $array1, array $array2, $valuesOnly = false)
@@ -1353,7 +1394,7 @@ class Arrays
* Values should be compared only and both arrays are one-dimensional? * Values should be compared only and both arrays are one-dimensional?
* Let's find difference by using simple function * Let's find difference by using simple function
*/ */
if ($valuesOnly && 1 == self::getDimensionsCount($array1) && 1 == self::getDimensionsCount($array2)) { if ($valuesOnly && self::getDimensionsCount($array1) == 1 && self::getDimensionsCount($array2) == 1) {
return array_diff($array1, $array2); return array_diff($array1, $array2);
} }
@@ -1381,7 +1422,7 @@ class Arrays
} }
} }
if (null !== $difference) { if ($difference !== null) {
$effect[] = $difference; $effect[] = $difference;
} }
} else { } else {
@@ -1429,10 +1470,11 @@ class Arrays
} }
/** /**
* Returns an index / key of given element in given array * Returns an index / key of given element in given array.
* *
* @param array $array The array to verify * @param array $array The array to verify
* @param mixed $element The element who index / key is needed * @param mixed $element The element who index / key is needed
*
* @return bool|null|mixed * @return bool|null|mixed
*/ */
public static function getIndexOf(array $array, $element) public static function getIndexOf(array $array, $element)
@@ -1455,12 +1497,13 @@ class Arrays
} }
/** /**
* Returns an array with incremented indexes / keys * Returns an array with incremented indexes / keys.
* *
* @param array $array The array which indexes / keys should be incremented * @param array $array The array which indexes / keys should be incremented
* @param int|null $startIndex (optional) Index from which incrementation should be started. If not provided, * @param int|null $startIndex (optional) Index from which incrementation should be started. If not provided,
* the first index / key will be used. * the first index / key will be used.
* @param int $incrementStep (optional) Value used for incrementation. The step of incrementation. * @param int $incrementStep (optional) Value used for incrementation. The step of incrementation.
*
* @return array * @return array
*/ */
public static function incrementIndexes(array $array, $startIndex = null, $incrementStep = 1) public static function incrementIndexes(array $array, $startIndex = null, $incrementStep = 1)
@@ -1472,7 +1515,7 @@ class Arrays
* Start index not provided? * Start index not provided?
* Let's look for the first index / key of given array * Let's look for the first index / key of given array
*/ */
if (null === $startIndex) { if ($startIndex === null) {
$startIndex = self::getFirstKey($array); $startIndex = self::getFirstKey($array);
} }
@@ -1511,10 +1554,11 @@ class Arrays
} }
/** /**
* Returns next element of given array related to given element * Returns next element of given array related to given element.
* *
* @param array $array The array with elements * @param array $array The array with elements
* @param mixed $element Element for who next element should be returned * @param mixed $element Element for who next element should be returned
*
* @return null|mixed * @return null|mixed
*/ */
public static function getNextElement(array $array, $element) public static function getNextElement(array $array, $element)
@@ -1523,10 +1567,11 @@ class Arrays
} }
/** /**
* Returns previous element of given array related to given element * Returns previous element of given array related to given element.
* *
* @param array $array The array with elements * @param array $array The array with elements
* @param mixed $element Element for who previous element should be returned * @param mixed $element Element for who previous element should be returned
*
* @return null|mixed * @return null|mixed
*/ */
public static function getPreviousElement(array $array, $element) public static function getPreviousElement(array $array, $element)
@@ -1535,9 +1580,10 @@ class Arrays
} }
/** /**
* Returns information if given array is a multi dimensional array * Returns information if given array is a multi dimensional array.
* *
* @param array $array The array to verify * @param array $array The array to verify
*
* @return bool|null * @return bool|null
*/ */
public static function isMultiDimensional(array $array) public static function isMultiDimensional(array $array)
@@ -1554,9 +1600,10 @@ class Arrays
} }
/** /**
* Returns count of dimensions, maximum nesting level actually, in given array * Returns count of dimensions, maximum nesting level actually, in given array.
* *
* @param array $array The array to verify * @param array $array The array to verify
*
* @return int * @return int
*/ */
public static function getDimensionsCount(array $array) public static function getDimensionsCount(array $array)
@@ -1581,11 +1628,12 @@ class Arrays
} }
/** /**
* Returns neighbour (next or previous element) for given element * Returns neighbour (next or previous element) for given element.
* *
* @param array $array The array with elements * @param array $array The array with elements
* @param mixed $element Element for who next element should be returned * @param mixed $element Element for who next element should be returned
* @param bool $next (optional) If is set to true, returns next neighbour. Otherwise - previous. * @param bool $next (optional) If is set to true, returns next neighbour. Otherwise - previous.
*
* @return mixed|null * @return mixed|null
*/ */
private static function getNeighbour(array $array, $element, $next = true) private static function getNeighbour(array $array, $element, $next = true)
@@ -1617,7 +1665,7 @@ class Arrays
* Index of element or of element's key is unknown? * Index of element or of element's key is unknown?
* Probably the element does not exist in given array, so... nothing to do * Probably the element does not exist in given array, so... nothing to do
*/ */
if (null === $elementKey || null === $indexOfKey) { if ($elementKey === null || $indexOfKey === null) {
return null; return null;
} }

View File

@@ -9,19 +9,20 @@
namespace Meritoo\Common\Utilities; namespace Meritoo\Common\Utilities;
/** /**
* Useful methods for bundle * Useful methods for bundle.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class Bundle class Bundle
{ {
/** /**
* Returns path to view / template of given bundle * Returns path to view / template of given bundle.
* *
* @param string $viewPath Path of the view / template, e.g. "MyDirectory/my-template" * @param string $viewPath Path of the view / template, e.g. "MyDirectory/my-template"
* @param string $bundleName Name of the bundle, e.g. "MyExtraBundle" * @param string $bundleName Name of the bundle, e.g. "MyExtraBundle"
* @param string $extension (optional) Extension of the view / template * @param string $extension (optional) Extension of the view / template
*
* @return string|null * @return string|null
*/ */
public static function getBundleViewPath($viewPath, $bundleName, $extension = 'html.twig') public static function getBundleViewPath($viewPath, $bundleName, $extension = 'html.twig')

View File

@@ -11,7 +11,7 @@ namespace Meritoo\Common\Utilities;
use stdClass; use stdClass;
/** /**
* Useful Composer-related methods (only static functions) * Useful Composer-related methods (only static functions).
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -19,17 +19,18 @@ use stdClass;
class Composer class Composer
{ {
/** /**
* Name of the Composer's main file with configuration in Json format * Name of the Composer's main file with configuration in Json format.
* *
* @var string * @var string
*/ */
const FILE_NAME_MAIN = 'composer.json'; const FILE_NAME_MAIN = 'composer.json';
/** /**
* Returns value from composer.json file * Returns value from composer.json file.
* *
* @param string $composerJsonPath Path of composer.json file * @param string $composerJsonPath Path of composer.json file
* @param string $nodeName Name of node who value should be returned * @param string $nodeName Name of node who value should be returned
*
* @return string|null * @return string|null
*/ */
public static function getValue($composerJsonPath, $nodeName) public static function getValue($composerJsonPath, $nodeName)
@@ -59,7 +60,7 @@ class Composer
* Unknown data from the composer.json file or there is no node with given name? * Unknown data from the composer.json file or there is no node with given name?
* Nothing to do * Nothing to do
*/ */
if (null === $data || !isset($data->{$nodeName})) { if ($data === null || !isset($data->{$nodeName})) {
return null; return null;
} }

View File

@@ -14,10 +14,10 @@ use Meritoo\Common\Exception\Date\UnknownDatePartTypeException;
use Meritoo\Common\Type\DatePartType; use Meritoo\Common\Type\DatePartType;
/** /**
* Useful date methods * Useful date methods.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class Date class Date
{ {
@@ -66,6 +66,7 @@ class Date
* The dates are returned in an array with indexes 'start' and 'end'. * The dates are returned in an array with indexes 'start' and 'end'.
* *
* @param int $period The period, type of period. One of DatePeriod class constants, e.g. DatePeriod::LAST_WEEK. * @param int $period The period, type of period. One of DatePeriod class constants, e.g. DatePeriod::LAST_WEEK.
*
* @return DatePeriod * @return DatePeriod
*/ */
public static function getDatesForPeriod($period) public static function getDatesForPeriod($period)
@@ -129,10 +130,10 @@ class Date
$dateStart = new DateTime(); $dateStart = new DateTime();
$dateEnd = new DateTime(); $dateEnd = new DateTime();
if (DatePeriod::LAST_YEAR == $period || DatePeriod::NEXT_YEAR == $period) { if ($period == DatePeriod::LAST_YEAR || $period == DatePeriod::NEXT_YEAR) {
$yearDifference = 1; $yearDifference = 1;
if (DatePeriod::LAST_YEAR == $period) { if ($period == DatePeriod::LAST_YEAR) {
$yearDifference *= -1; $yearDifference *= -1;
} }
@@ -148,7 +149,7 @@ class Date
break; break;
} }
if (null !== $dateStart && null !== $dateEnd) { if ($dateStart !== null && $dateEnd !== null) {
$dateStart->setTime(0, 0, 0); $dateStart->setTime(0, 0, 0);
$dateEnd->setTime(23, 59, 59); $dateEnd->setTime(23, 59, 59);
@@ -160,10 +161,11 @@ class Date
} }
/** /**
* Generates and returns random time (the hour, minute and second values) * Generates and returns random time (the hour, minute and second values).
* *
* @param string $format (optional) Format of returned value. A string acceptable by the DateTime::format() * @param string $format (optional) Format of returned value. A string acceptable by the DateTime::format()
* method. * method.
*
* @return string|null * @return string|null
*/ */
public static function generateRandomTime($format = 'H:i:s') public static function generateRandomTime($format = 'H:i:s')
@@ -207,7 +209,7 @@ class Date
} }
/** /**
* Returns current day of week * Returns current day of week.
* *
* @return int * @return int
*/ */
@@ -231,13 +233,14 @@ class Date
* @param int $day The day value * @param int $day The day value
* *
* @return int * @return int
*
* @throws UnknownDatePartTypeException * @throws UnknownDatePartTypeException
*/ */
public static function getDayOfWeek($year, $month, $day) public static function getDayOfWeek($year, $month, $day)
{ {
$year = (int)$year; $year = (int) $year;
$month = (int)$month; $month = (int) $month;
$day = (int)$day; $day = (int) $day;
/* /*
* Oops, incorrect year * Oops, incorrect year
@@ -277,7 +280,7 @@ class Date
} }
/** /**
* Returns based on locale name of current weekday * Returns based on locale name of current weekday.
* *
* @return string * @return string
*/ */
@@ -293,11 +296,12 @@ class Date
} }
/** /**
* Returns name of weekday based on locale * Returns name of weekday based on locale.
* *
* @param int $year The year value * @param int $year The year value
* @param int $month The month value * @param int $month The month value
* @param int $day The day value * @param int $day The day value
*
* @return string * @return string
*/ */
public static function getDayOfWeekName($year, $month, $day) public static function getDayOfWeekName($year, $month, $day)
@@ -311,7 +315,7 @@ class Date
$encoding = mb_detect_encoding($name); $encoding = mb_detect_encoding($name);
if (false === $encoding) { if ($encoding === false) {
$name = mb_convert_encoding($name, 'UTF-8', 'ISO-8859-2'); $name = mb_convert_encoding($name, 'UTF-8', 'ISO-8859-2');
} }
@@ -338,6 +342,7 @@ class Date
* @param int $differenceUnit (optional) Unit of date difference. One of this class * @param int $differenceUnit (optional) Unit of date difference. One of this class
* DATE_DIFFERENCE_UNIT_* constants. If is set to null all units are * DATE_DIFFERENCE_UNIT_* constants. If is set to null all units are
* returned in the array. * returned in the array.
*
* @return array|int * @return array|int
*/ */
public static function getDateDifference($dateStart, $dateEnd, $differenceUnit = null) public static function getDateDifference($dateStart, $dateEnd, $differenceUnit = null)
@@ -378,46 +383,46 @@ class Date
self::DATE_DIFFERENCE_UNIT_MINUTES, self::DATE_DIFFERENCE_UNIT_MINUTES,
]; ];
if (null === $differenceUnit || self::DATE_DIFFERENCE_UNIT_YEARS == $differenceUnit) { if ($differenceUnit === null || $differenceUnit == self::DATE_DIFFERENCE_UNIT_YEARS) {
$diff = $dateEnd->diff($dateStart); $diff = $dateEnd->diff($dateStart);
/* /*
* Difference between dates in years should be returned only? * Difference between dates in years should be returned only?
*/ */
if (self::DATE_DIFFERENCE_UNIT_YEARS == $differenceUnit) { if ($differenceUnit == self::DATE_DIFFERENCE_UNIT_YEARS) {
return $diff->y; return $diff->y;
} }
$difference[self::DATE_DIFFERENCE_UNIT_YEARS] = $diff->y; $difference[self::DATE_DIFFERENCE_UNIT_YEARS] = $diff->y;
} }
if (null === $differenceUnit || self::DATE_DIFFERENCE_UNIT_MONTHS == $differenceUnit) { if ($differenceUnit === null || $differenceUnit == self::DATE_DIFFERENCE_UNIT_MONTHS) {
$diff = $dateEnd->diff($dateStart); $diff = $dateEnd->diff($dateStart);
/* /*
* Difference between dates in months should be returned only? * Difference between dates in months should be returned only?
*/ */
if (self::DATE_DIFFERENCE_UNIT_MONTHS == $differenceUnit) { if ($differenceUnit == self::DATE_DIFFERENCE_UNIT_MONTHS) {
return $diff->m; return $diff->m;
} }
$difference[self::DATE_DIFFERENCE_UNIT_MONTHS] = $diff->m; $difference[self::DATE_DIFFERENCE_UNIT_MONTHS] = $diff->m;
} }
if (null === $differenceUnit || in_array($differenceUnit, $relatedUnits)) { if ($differenceUnit === null || in_array($differenceUnit, $relatedUnits)) {
$days = (int)floor($dateDiff / $daySeconds); $days = (int) floor($dateDiff / $daySeconds);
/* /*
* Difference between dates in days should be returned only? * Difference between dates in days should be returned only?
*/ */
if (self::DATE_DIFFERENCE_UNIT_DAYS == $differenceUnit) { if ($differenceUnit == self::DATE_DIFFERENCE_UNIT_DAYS) {
return $days; return $days;
} }
/* /*
* All units should be returned? * All units should be returned?
*/ */
if (null === $differenceUnit) { if ($differenceUnit === null) {
$difference[self::DATE_DIFFERENCE_UNIT_DAYS] = $days; $difference[self::DATE_DIFFERENCE_UNIT_DAYS] = $days;
} }
@@ -427,20 +432,20 @@ class Date
$daysInSeconds = $days * $daySeconds; $daysInSeconds = $days * $daySeconds;
} }
if (null === $differenceUnit || in_array($differenceUnit, $relatedUnits)) { if ($differenceUnit === null || in_array($differenceUnit, $relatedUnits)) {
$hours = (int)floor(($dateDiff - $daysInSeconds) / $hourSeconds); $hours = (int) floor(($dateDiff - $daysInSeconds) / $hourSeconds);
/* /*
* Difference between dates in hours should be returned only? * Difference between dates in hours should be returned only?
*/ */
if (self::DATE_DIFFERENCE_UNIT_HOURS == $differenceUnit) { if ($differenceUnit == self::DATE_DIFFERENCE_UNIT_HOURS) {
return $hours; return $hours;
} }
/* /*
* All units should be returned? * All units should be returned?
*/ */
if (null === $differenceUnit) { if ($differenceUnit === null) {
$difference[self::DATE_DIFFERENCE_UNIT_HOURS] = $hours; $difference[self::DATE_DIFFERENCE_UNIT_HOURS] = $hours;
} }
@@ -450,13 +455,13 @@ class Date
$hoursInSeconds = $hours * $hourSeconds; $hoursInSeconds = $hours * $hourSeconds;
} }
if (null === $differenceUnit || self::DATE_DIFFERENCE_UNIT_MINUTES == $differenceUnit) { if ($differenceUnit === null || $differenceUnit == self::DATE_DIFFERENCE_UNIT_MINUTES) {
$minutes = (int)floor(($dateDiff - $daysInSeconds - $hoursInSeconds) / 60); $minutes = (int) floor(($dateDiff - $daysInSeconds - $hoursInSeconds) / 60);
/* /*
* Difference between dates in minutes should be returned only? * Difference between dates in minutes should be returned only?
*/ */
if (self::DATE_DIFFERENCE_UNIT_MINUTES == $differenceUnit) { if ($differenceUnit == self::DATE_DIFFERENCE_UNIT_MINUTES) {
return $minutes; return $minutes;
} }
@@ -475,6 +480,7 @@ class Date
* @param string $intervalTemplate (optional) Template used to build date interval. It should contain "%d" as the * @param string $intervalTemplate (optional) Template used to build date interval. It should contain "%d" as the
* placeholder which is replaced with a number that represents each iteration. * placeholder which is replaced with a number that represents each iteration.
* Default: interval for days. * Default: interval for days.
*
* @return array * @return array
*/ */
public static function getDatesCollection(DateTime $startDate, $datesCount, $intervalTemplate = 'P%dD') public static function getDatesCollection(DateTime $startDate, $datesCount, $intervalTemplate = 'P%dD')
@@ -500,7 +506,7 @@ class Date
$matchCount = preg_match($intervalPattern, $intervalTemplate, $matches); $matchCount = preg_match($intervalPattern, $intervalTemplate, $matches);
if ($matchCount > 0 && (!empty($matches[1]) || !empty($matches[2]))) { if ($matchCount > 0 && (!empty($matches[1]) || !empty($matches[2]))) {
$datesCount = (int)$datesCount; $datesCount = (int) $datesCount;
for ($index = 1; $index <= $datesCount; ++$index) { for ($index = 1; $index <= $datesCount; ++$index) {
$date = clone $startDate; $date = clone $startDate;
@@ -513,23 +519,24 @@ class Date
} }
/** /**
* Returns random date based on given start date * Returns random date based on given start date.
* *
* @param DateTime $startDate The start date. Start of the random date. * @param DateTime $startDate The start date. Start of the random date.
* @param int $start (optional) Start of random partition * @param int $start (optional) Start of random partition
* @param int $end (optional) End of random partition * @param int $end (optional) End of random partition
* @param string $intervalTemplate (optional) Template used to build date interval. The placeholder is replaced * @param string $intervalTemplate (optional) Template used to build date interval. The placeholder is replaced
* with next, iterated value. * with next, iterated value.
*
* @return DateTime * @return DateTime
*/ */
public static function getRandomDate(DateTime $startDate = null, $start = 1, $end = 100, $intervalTemplate = 'P%sD') public static function getRandomDate(DateTime $startDate = null, $start = 1, $end = 100, $intervalTemplate = 'P%sD')
{ {
if (null === $startDate) { if ($startDate === null) {
$startDate = new DateTime(); $startDate = new DateTime();
} }
$start = (int)$start; $start = (int) $start;
$end = (int)$end; $end = (int) $end;
/* /*
* Incorrect end of random partition? * Incorrect end of random partition?
@@ -556,6 +563,7 @@ class Date
* @param string $dateFormat (optional) Format of date used to verify if given value is actually a date. * @param string $dateFormat (optional) Format of date used to verify if given value is actually a date.
* It should be format matched to the given value, e.g. "Y-m-d H:i" for * It should be format matched to the given value, e.g. "Y-m-d H:i" for
* "2015-01-01 10:00" value. * "2015-01-01 10:00" value.
*
* @return DateTime|bool * @return DateTime|bool
*/ */
public static function getDateTime($value, $allowCompoundFormats = false, $dateFormat = 'Y-m-d') public static function getDateTime($value, $allowCompoundFormats = false, $dateFormat = 'Y-m-d')
@@ -590,7 +598,7 @@ class Date
*/ */
$dateFromFormat = DateTime::createFromFormat($dateFormat, $value); $dateFromFormat = DateTime::createFromFormat($dateFormat, $value);
if (false === $dateFromFormat) { if ($dateFromFormat === false) {
/* /*
* Nothing to do more, because: * Nothing to do more, because:
* a) instance of the DateTime was created * a) instance of the DateTime was created
@@ -658,12 +666,13 @@ class Date
} }
/** /**
* Returns information if given value is valid date * Returns information if given value is valid date.
* *
* @param mixed $value The value which maybe is a date * @param mixed $value The value which maybe is a date
* @param bool $allowCompoundFormats (optional) If is set to true, the compound formats used to create an * @param bool $allowCompoundFormats (optional) If is set to true, the compound formats used to create an
* instance of DateTime class are allowed (e.g. "now", "last day of next * instance of DateTime class are allowed (e.g. "now", "last day of next
* month", "yyyy"). Otherwise - not and every incorrect value is refused. * month", "yyyy"). Otherwise - not and every incorrect value is refused.
*
* @return bool * @return bool
*/ */
public static function isValidDate($value, $allowCompoundFormats = false) public static function isValidDate($value, $allowCompoundFormats = false)
@@ -672,9 +681,10 @@ class Date
} }
/** /**
* Returns information if given format of date is valid * Returns information if given format of date is valid.
* *
* @param string $format The validated format of date * @param string $format The validated format of date
*
* @return bool * @return bool
*/ */
public static function isValidDateFormat($format) public static function isValidDateFormat($format)

View File

@@ -14,90 +14,90 @@ use DateTime;
* A date's period. * A date's period.
* Contains start and end date of the period. * Contains start and end date of the period.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class DatePeriod class DatePeriod
{ {
/** /**
* The period constant: last month * The period constant: last month.
* *
* @var int * @var int
*/ */
const LAST_MONTH = 4; const LAST_MONTH = 4;
/** /**
* The period constant: last week * The period constant: last week.
* *
* @var int * @var int
*/ */
const LAST_WEEK = 1; const LAST_WEEK = 1;
/** /**
* The period constant: last year * The period constant: last year.
* *
* @var int * @var int
*/ */
const LAST_YEAR = 7; const LAST_YEAR = 7;
/** /**
* The period constant: next month * The period constant: next month.
* *
* @var int * @var int
*/ */
const NEXT_MONTH = 6; const NEXT_MONTH = 6;
/** /**
* The period constant: next week * The period constant: next week.
* *
* @var int * @var int
*/ */
const NEXT_WEEK = 3; const NEXT_WEEK = 3;
/** /**
* The period constant: next year * The period constant: next year.
* *
* @var int * @var int
*/ */
const NEXT_YEAR = 9; const NEXT_YEAR = 9;
/** /**
* The period constant: this month * The period constant: this month.
* *
* @var int * @var int
*/ */
const THIS_MONTH = 5; const THIS_MONTH = 5;
/** /**
* The period constant: this week * The period constant: this week.
* *
* @var int * @var int
*/ */
const THIS_WEEK = 2; const THIS_WEEK = 2;
/** /**
* The period constant: this year * The period constant: this year.
* *
* @var int * @var int
*/ */
const THIS_YEAR = 8; const THIS_YEAR = 8;
/** /**
* The start date of period * The start date of period.
* *
* @var DateTime * @var DateTime
*/ */
private $startDate; private $startDate;
/** /**
* The end date of period * The end date of period.
* *
* @var DateTime * @var DateTime
*/ */
private $endDate; private $endDate;
/** /**
* Class constructor * Class constructor.
* *
* @param DateTime $startDate (optional) The start date of period * @param DateTime $startDate (optional) The start date of period
* @param DateTime $endDate (optional) The end date of period * @param DateTime $endDate (optional) The end date of period
@@ -109,9 +109,10 @@ class DatePeriod
} }
/** /**
* Returns information if given period is correct * Returns information if given period is correct.
* *
* @param int $period The period to verify * @param int $period The period to verify
*
* @return bool * @return bool
*/ */
public static function isCorrectPeriod($period) public static function isCorrectPeriod($period)
@@ -120,10 +121,11 @@ class DatePeriod
} }
/** /**
* Returns formatted one of the period's date: start date or end date * Returns formatted one of the period's date: start date or end date.
* *
* @param string $format Format used to format the date * @param string $format Format used to format the date
* @param bool $startDate (optional) If is set to true, start date is formatted. Otherwise - end date. * @param bool $startDate (optional) If is set to true, start date is formatted. Otherwise - end date.
*
* @return string * @return string
*/ */
public function getFormattedDate($format, $startDate = true) public function getFormattedDate($format, $startDate = true)
@@ -140,7 +142,7 @@ class DatePeriod
/* /*
* Unknown date or format is invalid? * Unknown date or format is invalid?
*/ */
if (null === $date || !Date::isValidDateFormat($format)) { if ($date === null || !Date::isValidDateFormat($format)) {
return ''; return '';
} }
@@ -148,7 +150,7 @@ class DatePeriod
} }
/** /**
* Returns the end date of period * Returns the end date of period.
* *
* @return DateTime * @return DateTime
*/ */
@@ -158,9 +160,10 @@ class DatePeriod
} }
/** /**
* Sets the end date of period * Sets the end date of period.
* *
* @param DateTime $endDate (optional) The end date of period * @param DateTime $endDate (optional) The end date of period
*
* @return $this * @return $this
*/ */
public function setEndDate(DateTime $endDate = null) public function setEndDate(DateTime $endDate = null)
@@ -171,7 +174,7 @@ class DatePeriod
} }
/** /**
* Returns the start date of period * Returns the start date of period.
* *
* @return DateTime * @return DateTime
*/ */
@@ -181,9 +184,10 @@ class DatePeriod
} }
/** /**
* Sets the start date of period * Sets the start date of period.
* *
* @param DateTime $startDate (optional) The start date of period * @param DateTime $startDate (optional) The start date of period
*
* @return $this * @return $this
*/ */
public function setStartDate(DateTime $startDate = null) public function setStartDate(DateTime $startDate = null)

View File

@@ -11,7 +11,7 @@ namespace Meritoo\Common\Utilities;
use Generator; use Generator;
/** /**
* Useful methods for the Generator class (only static functions) * Useful methods for the Generator class (only static functions).
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -19,9 +19,10 @@ use Generator;
class GeneratorUtility class GeneratorUtility
{ {
/** /**
* Returns elements of generator * Returns elements of generator.
* *
* @param Generator $generator The generator who elements should be returned * @param Generator $generator The generator who elements should be returned
*
* @return array * @return array
*/ */
public static function getGeneratorElements(Generator $generator) public static function getGeneratorElements(Generator $generator)

View File

@@ -9,20 +9,21 @@
namespace Meritoo\Common\Utilities; namespace Meritoo\Common\Utilities;
/** /**
* Useful locale methods * Useful locale methods.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class Locale class Locale
{ {
/** /**
* Sets locale for given category using given language and country code * Sets locale for given category using given language and country code.
* *
* @param int $category Named constant specifying the category of the functions affected by the locale * @param int $category Named constant specifying the category of the functions affected by the locale
* setting. It's the same constant as required by setlocale() function. * setting. It's the same constant as required by setlocale() function.
* @param string $languageCode Language code, in ISO 639-1 format. Short form of the locale, e.g. "fr". * @param string $languageCode Language code, in ISO 639-1 format. Short form of the locale, e.g. "fr".
* @param string $countryCode (optional) Country code, in ISO 3166-1 alpha-2 format, e.g. "FR" * @param string $countryCode (optional) Country code, in ISO 3166-1 alpha-2 format, e.g. "FR"
*
* @return bool * @return bool
* *
* Available categories (values of $category argument): * Available categories (values of $category argument):
@@ -36,7 +37,7 @@ class Locale
*/ */
public static function setLocale($category, $languageCode, $countryCode = '') public static function setLocale($category, $languageCode, $countryCode = '')
{ {
$category = (int)$category; $category = (int) $category;
if (is_string($languageCode)) { if (is_string($languageCode)) {
$languageCode = trim($languageCode); $languageCode = trim($languageCode);
@@ -63,11 +64,12 @@ class Locale
} }
/** /**
* Returns long form of the locale * Returns long form of the locale.
* *
* @param string $languageCode Language code, in ISO 639-1 format. Short form of the locale, e.g. "fr". * @param string $languageCode Language code, in ISO 639-1 format. Short form of the locale, e.g. "fr".
* @param string $countryCode (optional) Country code, in ISO 3166-1 alpha-2 format, e.g. "FR" * @param string $countryCode (optional) Country code, in ISO 3166-1 alpha-2 format, e.g. "FR"
* @param string $encoding (optional) Encoding of the final locale * @param string $encoding (optional) Encoding of the final locale
*
* @return string * @return string
* *
* Example: * Example:

View File

@@ -0,0 +1,822 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Utilities;
/**
* Useful methods for mime types of files.
*
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl
*/
class MimeTypes
{
/**
* Mime types data.
*
* @var array
*/
private static $mimeTypes = [
'7z' => 'application/x-7z-compressed',
'ez' => 'application/andrew-inset',
'atom' => 'application/atom+xml',
'atomcat' => 'application/atomcat+xml',
'atomsvc' => 'application/atomsvc+xml',
'ccxml' => 'application/ccxml+xml',
'davmount' => 'application/davmount+xml',
'ecma' => 'application/ecmascript',
'pfr' => 'application/font-tdpfr',
'stk' => 'application/hyperstudio',
'js' => 'application/javascript',
'json' => 'application/json',
'hqx' => 'application/mac-binhex40',
'cpt' => 'application/mac-compactpro',
'mrc' => 'application/marc',
'ma' => 'application/mathematica',
'nb' => 'application/mathematica',
'mb' => 'application/mathematica',
'mathml' => 'application/mathml+xml',
'mbox' => 'application/mbox',
'mscml' => 'application/mediaservercontrol+xml',
'mp4s' => 'application/mp4',
'dot' => 'application/msword',
'doc' => 'application/msword',
/*
* MS Office system file format MIME types
* http://technet.microsoft.com/en-us/library/ee309278%28office.12%29.aspx
*/
'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'mxf' => 'application/mxf',
'bin' => 'application/octet-stream',
'dms' => 'application/octet-stream',
'lha' => 'application/octet-stream',
'lzh' => 'application/octet-stream',
'class' => 'application/octet-stream',
'so' => 'application/octet-stream',
'iso' => 'application/octet-stream',
'dmg' => 'application/octet-stream',
'dist' => 'application/octet-stream',
'distz' => 'application/octet-stream',
'pkg' => 'application/octet-stream',
'bpk' => 'application/octet-stream',
'dump' => 'application/octet-stream',
'elc' => 'application/octet-stream',
'scpt' => 'application/octet-stream',
'oda' => 'application/oda',
'ogg' => 'application/ogg',
'pdf' => 'application/pdf',
'pgp' => 'application/pgp-encrypted',
'asc' => 'application/pgp-signature',
'sig' => 'application/pgp-signature',
'prf' => 'application/pics-rules',
'p10' => 'application/pkcs10',
'p7m' => 'application/pkcs7-mime',
'p7c' => 'application/pkcs7-mime',
'p7s' => 'application/pkcs7-signature',
'cer' => 'application/pkix-cert',
'crl' => 'application/pkix-crl',
'pkipath' => 'application/pkix-pkipath',
'pki' => 'application/pkixcmp',
'pls' => 'application/pls+xml',
'ai' => 'application/postscript',
'eps' => 'application/postscript',
'ps' => 'application/postscript',
'cww' => 'application/prs.cww',
'rdf' => 'application/rdf+xml',
'rif' => 'application/reginfo+xml',
'rnc' => 'application/relax-ng-compact-syntax',
'rl' => 'application/resource-lists+xml',
'rs' => 'application/rls-services+xml',
'rsd' => 'application/rsd+xml',
'rss' => 'application/rss+xml',
'rtf' => 'application/rtf',
'sbml' => 'application/sbml+xml',
'sdp' => 'application/sdp',
'setpay' => 'application/set-payment-initiation',
'setreg' => 'application/set-registration-initiation',
'shf' => 'application/shf+xml',
'smi' => 'application/smil+xml',
'smil' => 'application/smil+xml',
'gram' => 'application/srgs',
'grxml' => 'application/srgs+xml',
'ssml' => 'application/ssml+xml',
'plb' => 'application/vnd.3gpp.pic-bw-large',
'psb' => 'application/vnd.3gpp.pic-bw-small',
'pvb' => 'application/vnd.3gpp.pic-bw-var',
'pwn' => 'application/vnd.3m.post-it-notes',
'aso' => 'application/vnd.accpac.simply.aso',
'imp' => 'application/vnd.accpac.simply.imp',
'acu' => 'application/vnd.acucobol',
'atc' => 'application/vnd.acucorp',
'acutc' => 'application/vnd.acucorp',
'xdp' => 'application/vnd.adobe.xdp+xml',
'xfdf' => 'application/vnd.adobe.xfdf',
'ami' => 'application/vnd.amiga.ami',
'cii' => 'application/vnd.anser-web-certificate-issue-initiation',
'fti' => 'application/vnd.anser-web-funds-transfer-initiation',
'atx' => 'application/vnd.antix.game-component',
'mpkg' => 'application/vnd.apple.installer+xml',
'aep' => 'application/vnd.audiograph',
'mpm' => 'application/vnd.blueice.multipass',
'bmi' => 'application/vnd.bmi',
'rep' => 'application/vnd.businessobjects',
'cdxml' => 'application/vnd.chemdraw+xml',
'mmd' => 'application/vnd.chipnuts.karaoke-mmd',
'cdy' => 'application/vnd.cinderella',
'cla' => 'application/vnd.claymore',
'c4g' => 'application/vnd.clonk.c4group',
'c4d' => 'application/vnd.clonk.c4group',
'c4f' => 'application/vnd.clonk.c4group',
'c4p' => 'application/vnd.clonk.c4group',
'c4u' => 'application/vnd.clonk.c4group',
'csp' => 'application/vnd.commonspace',
'cst' => 'application/vnd.commonspace',
'cdbcmsg' => 'application/vnd.contact.cmsg',
'cmc' => 'application/vnd.cosmocaller',
'clkx' => 'application/vnd.crick.clicker',
'clkk' => 'application/vnd.crick.clicker.keyboard',
'clkp' => 'application/vnd.crick.clicker.palette',
'clkt' => 'application/vnd.crick.clicker.template',
'clkw' => 'application/vnd.crick.clicker.wordbank',
'wbs' => 'application/vnd.criticaltools.wbs+xml',
'pml' => 'application/vnd.ctc-posml',
'ppd' => 'application/vnd.cups-ppd',
'curl' => 'application/vnd.curl',
'rdz' => 'application/vnd.data-vision.rdz',
'dna' => 'application/vnd.dna',
'mlp' => 'application/vnd.dolby.mlp',
'dpg' => 'application/vnd.dpgraph',
'dfac' => 'application/vnd.dreamfactory',
'mag' => 'application/vnd.ecowin.chart',
'nml' => 'application/vnd.enliven',
'esf' => 'application/vnd.epson.esf',
'msf' => 'application/vnd.epson.msf',
'qam' => 'application/vnd.epson.quickanime',
'slt' => 'application/vnd.epson.salt',
'ssf' => 'application/vnd.epson.ssf',
'es3' => 'application/vnd.eszigno3+xml',
'et3' => 'application/vnd.eszigno3+xml',
'ez2' => 'application/vnd.ezpix-album',
'ez3' => 'application/vnd.ezpix-package',
'fdf' => 'application/vnd.fdf',
'gph' => 'application/vnd.flographit',
'ftc' => 'application/vnd.fluxtime.clip',
'fm' => 'application/vnd.framemaker',
'frame' => 'application/vnd.framemaker',
'maker' => 'application/vnd.framemaker',
'fnc' => 'application/vnd.frogans.fnc',
'ltf' => 'application/vnd.frogans.ltf',
'fsc' => 'application/vnd.fsc.weblaunch',
'oas' => 'application/vnd.fujitsu.oasys',
'oa2' => 'application/vnd.fujitsu.oasys2',
'oa3' => 'application/vnd.fujitsu.oasys3',
'fg5' => 'application/vnd.fujitsu.oasysgp',
'bh2' => 'application/vnd.fujitsu.oasysprs',
'ddd' => 'application/vnd.fujixerox.ddd',
'xdw' => 'application/vnd.fujixerox.docuworks',
'xbd' => 'application/vnd.fujixerox.docuworks.binder',
'fzs' => 'application/vnd.fuzzysheet',
'txd' => 'application/vnd.genomatix.tuxedo',
'kml' => 'application/vnd.google-earth.kml+xml',
'kmz' => 'application/vnd.google-earth.kmz',
'gqf' => 'application/vnd.grafeq',
'gqs' => 'application/vnd.grafeq',
'gac' => 'application/vnd.groove-account',
'ghf' => 'application/vnd.groove-help',
'gim' => 'application/vnd.groove-identity-message',
'grv' => 'application/vnd.groove-injector',
'gtm' => 'application/vnd.groove-tool-message',
'tpl' => 'application/vnd.groove-tool-template',
'vcg' => 'application/vnd.groove-vcard',
'zmm' => 'application/vnd.handheld-entertainment+xml',
'hbci' => 'application/vnd.hbci',
'les' => 'application/vnd.hhe.lesson-player',
'hpgl' => 'application/vnd.hp-hpgl',
'hpid' => 'application/vnd.hp-hpid',
'hps' => 'application/vnd.hp-hps',
'jlt' => 'application/vnd.hp-jlyt',
'pcl' => 'application/vnd.hp-pcl',
'pclxl' => 'application/vnd.hp-pclxl',
'x3d' => 'application/vnd.hzn-3d-crossword',
'mpy' => 'application/vnd.ibm.minipay',
'afp' => 'application/vnd.ibm.modcap',
'listafp' => 'application/vnd.ibm.modcap',
'list3820' => 'application/vnd.ibm.modcap',
'irm' => 'application/vnd.ibm.rights-management',
'sc' => 'application/vnd.ibm.secure-container',
'igl' => 'application/vnd.igloader',
'ivp' => 'application/vnd.immervision-ivp',
'ivu' => 'application/vnd.immervision-ivu',
'xpw' => 'application/vnd.intercon.formnet',
'xpx' => 'application/vnd.intercon.formnet',
'qbo' => 'application/vnd.intu.qbo',
'qfx' => 'application/vnd.intu.qfx',
'rcprofile' => 'application/vnd.ipunplugged.rcprofile',
'irp' => 'application/vnd.irepository.package+xml',
'xpr' => 'application/vnd.is-xpr',
'jam' => 'application/vnd.jam',
'rms' => 'application/vnd.jcp.javame.midlet-rms',
'jisp' => 'application/vnd.jisp',
'ktz' => 'application/vnd.kahootz',
'ktr' => 'application/vnd.kahootz',
'karbon' => 'application/vnd.kde.karbon',
'chrt' => 'application/vnd.kde.kchart',
'kfo' => 'application/vnd.kde.kformula',
'flw' => 'application/vnd.kde.kivio',
'kon' => 'application/vnd.kde.kontour',
'kpr' => 'application/vnd.kde.kpresenter',
'kpt' => 'application/vnd.kde.kpresenter',
'ksp' => 'application/vnd.kde.kspread',
'kwd' => 'application/vnd.kde.kword',
'kwt' => 'application/vnd.kde.kword',
'htke' => 'application/vnd.kenameaapp',
'kia' => 'application/vnd.kidspiration',
'kne' => 'application/vnd.kinar',
'knp' => 'application/vnd.kinar',
'skp' => 'application/vnd.koan',
'skd' => 'application/vnd.koan',
'skt' => 'application/vnd.koan',
'skm' => 'application/vnd.koan',
'lbd' => 'application/vnd.llamagraphics.life-balance.desktop',
'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml',
'123' => 'application/vnd.lotus-1-2-3',
'apr' => 'application/vnd.lotus-approach',
'pre' => 'application/vnd.lotus-freelance',
'nsf' => 'application/vnd.lotus-notes',
'org' => 'application/vnd.lotus-organizer',
'scm' => 'application/vnd.lotus-screencam',
'lwp' => 'application/vnd.lotus-wordpro',
'portpkg' => 'application/vnd.macports.portpkg',
'mcd' => 'application/vnd.mcd',
'mc1' => 'application/vnd.medcalcdata',
'cdkey' => 'application/vnd.mediastation.cdkey',
'mwf' => 'application/vnd.mfer',
'mfm' => 'application/vnd.mfmp',
'flo' => 'application/vnd.micrografx.flo',
'igx' => 'application/vnd.micrografx.igx',
'mif' => 'application/vnd.mif',
'daf' => 'application/vnd.mobius.daf',
'dis' => 'application/vnd.mobius.dis',
'mbk' => 'application/vnd.mobius.mbk',
'mqy' => 'application/vnd.mobius.mqy',
'msl' => 'application/vnd.mobius.msl',
'plc' => 'application/vnd.mobius.plc',
'txf' => 'application/vnd.mobius.txf',
'mpn' => 'application/vnd.mophun.application',
'mpc' => 'application/vnd.mophun.certificate',
'xul' => 'application/vnd.mozilla.xul+xml',
'cil' => 'application/vnd.ms-artgalry',
'asf' => 'application/vnd.ms-asf',
'cab' => 'application/vnd.ms-cab-compressed',
'xls' => 'application/vnd.ms-excel',
'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'xlm' => 'application/vnd.ms-excel',
'xla' => 'application/vnd.ms-excel',
'xlc' => 'application/vnd.ms-excel',
'xlt' => 'application/vnd.ms-excel',
'xlw' => 'application/vnd.ms-excel',
'eot' => 'application/vnd.ms-fontobject',
'chm' => 'application/vnd.ms-htmlhelp',
'ims' => 'application/vnd.ms-ims',
'lrm' => 'application/vnd.ms-lrm',
'ppt' => 'application/vnd.ms-powerpoint',
'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
'pps' => 'application/vnd.ms-powerpoint',
'pot' => 'application/vnd.ms-powerpoint',
'mpp' => 'application/vnd.ms-project',
'mpt' => 'application/vnd.ms-project',
'wps' => 'application/vnd.ms-works',
'wks' => 'application/vnd.ms-works',
'wcm' => 'application/vnd.ms-works',
'wdb' => 'application/vnd.ms-works',
'wpl' => 'application/vnd.ms-wpl',
'xps' => 'application/vnd.ms-xpsdocument',
'mseq' => 'application/vnd.mseq',
'mus' => 'application/vnd.musician',
'nlu' => 'application/vnd.neurolanguage.nlu',
'nnd' => 'application/vnd.noblenet-directory',
'nns' => 'application/vnd.noblenet-sealer',
'nnw' => 'application/vnd.noblenet-web',
'ngdat' => 'application/vnd.nokia.n-gage.data',
'n-gage' => 'application/vnd.nokia.n-gage.symbian.install',
'rpst' => 'application/vnd.nokia.radio-preset',
'rpss' => 'application/vnd.nokia.radio-presets',
'edm' => 'application/vnd.novadigm.edm',
'edx' => 'application/vnd.novadigm.edx',
'ext' => 'application/vnd.novadigm.ext',
'odc' => 'application/vnd.oasis.opendocument.chart',
'otc' => 'application/vnd.oasis.opendocument.chart-template',
'odf' => 'application/vnd.oasis.opendocument.formula',
'otf' => 'application/vnd.oasis.opendocument.formula-template',
'odg' => 'application/vnd.oasis.opendocument.graphics',
'otg' => 'application/vnd.oasis.opendocument.graphics-template',
'odi' => 'application/vnd.oasis.opendocument.image',
'oti' => 'application/vnd.oasis.opendocument.image-template',
'odp' => 'application/vnd.oasis.opendocument.presentation',
'otp' => 'application/vnd.oasis.opendocument.presentation-template',
'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
'odt' => 'application/vnd.oasis.opendocument.text',
'otm' => 'application/vnd.oasis.opendocument.text-master',
'ott' => 'application/vnd.oasis.opendocument.text-template',
'oth' => 'application/vnd.oasis.opendocument.text-web',
'xo' => 'application/vnd.olpc-sugar',
'dd2' => 'application/vnd.oma.dd2+xml',
'oxt' => 'application/vnd.openofficeorg.extension',
'dp' => 'application/vnd.osgi.dp',
'prc' => 'application/vnd.palm',
'pdb' => 'application/vnd.palm',
'pqa' => 'application/vnd.palm',
'oprc' => 'application/vnd.palm',
'str' => 'application/vnd.pg.format',
'ei6' => 'application/vnd.pg.osasli',
'efif' => 'application/vnd.picsel',
'plf' => 'application/vnd.pocketlearn',
'pbd' => 'application/vnd.powerbuilder6',
'box' => 'application/vnd.previewsystems.box',
'mgz' => 'application/vnd.proteus.magazine',
'qps' => 'application/vnd.publishare-delta-tree',
'ptid' => 'application/vnd.pvi.ptid1',
'qxd' => 'application/vnd.quark.quarkxpress',
'qxt' => 'application/vnd.quark.quarkxpress',
'qwd' => 'application/vnd.quark.quarkxpress',
'qwt' => 'application/vnd.quark.quarkxpress',
'qxl' => 'application/vnd.quark.quarkxpress',
'qxb' => 'application/vnd.quark.quarkxpress',
'mxl' => 'application/vnd.recordare.musicxml',
'rm' => 'application/vnd.rn-realmedia',
'see' => 'application/vnd.seemail',
'sema' => 'application/vnd.sema',
'semd' => 'application/vnd.semd',
'semf' => 'application/vnd.semf',
'ifm' => 'application/vnd.shana.informed.formdata',
'itp' => 'application/vnd.shana.informed.formtemplate',
'iif' => 'application/vnd.shana.informed.interchange',
'ipk' => 'application/vnd.shana.informed.package',
'twd' => 'application/vnd.simtech-mindmapper',
'twds' => 'application/vnd.simtech-mindmapper',
'mmf' => 'application/vnd.smaf',
'sdkm' => 'application/vnd.solent.sdkm+xml',
'sdkd' => 'application/vnd.solent.sdkm+xml',
'dxp' => 'application/vnd.spotfire.dxp',
'sfs' => 'application/vnd.spotfire.sfs',
'sus' => 'application/vnd.sus-calendar',
'susp' => 'application/vnd.sus-calendar',
'svd' => 'application/vnd.svd',
'xsm' => 'application/vnd.syncml+xml',
'bdm' => 'application/vnd.syncml.dm+wbxml',
'xdm' => 'application/vnd.syncml.dm+xml',
'tao' => 'application/vnd.tao.intent-module-archive',
'tmo' => 'application/vnd.tmobile-livetv',
'tpt' => 'application/vnd.trid.tpt',
'mxs' => 'application/vnd.triscape.mxs',
'tra' => 'application/vnd.trueapp',
'ufd' => 'application/vnd.ufdl',
'ufdl' => 'application/vnd.ufdl',
'utz' => 'application/vnd.uiq.theme',
'umj' => 'application/vnd.umajin',
'unityweb' => 'application/vnd.unity',
'uoml' => 'application/vnd.uoml+xml',
'vcx' => 'application/vnd.vcx',
'vsd' => 'application/vnd.visio',
'vst' => 'application/vnd.visio',
'vss' => 'application/vnd.visio',
'vsw' => 'application/vnd.visio',
'vis' => 'application/vnd.visionary',
'vsf' => 'application/vnd.vsf',
'wbxml' => 'application/vnd.wap.wbxml',
'wmlc' => 'application/vnd.wap.wmlc',
'wmlsc' => 'application/vnd.wap.wmlscriptc',
'wtb' => 'application/vnd.webturbo',
'wpd' => 'application/vnd.wordperfect',
'wqd' => 'application/vnd.wqd',
'stf' => 'application/vnd.wt.stf',
'xar' => 'application/vnd.xara',
'xfdl' => 'application/vnd.xfdl',
'hvd' => 'application/vnd.yamaha.hv-dic',
'hvs' => 'application/vnd.yamaha.hv-script',
'hvp' => 'application/vnd.yamaha.hv-voice',
'saf' => 'application/vnd.yamaha.smaf-audio',
'spf' => 'application/vnd.yamaha.smaf-phrase',
'cmp' => 'application/vnd.yellowriver-custom-menu',
'zaz' => 'application/vnd.zzazz.deck+xml',
'vxml' => 'application/voicexml+xml',
'hlp' => 'application/winhlp',
'wsdl' => 'application/wsdl+xml',
'wspolicy' => 'application/wspolicy+xml',
'ace' => 'application/x-ace-compressed',
'bcpio' => 'application/x-bcpio',
'torrent' => 'application/x-bittorrent',
'bz' => 'application/x-bzip',
'bz2' => 'application/x-bzip2',
'boz' => 'application/x-bzip2',
'vcd' => 'application/x-cdlink',
'chat' => 'application/x-chat',
'pgn' => 'application/x-chess-pgn',
'cpio' => 'application/x-cpio',
'csh' => 'application/x-csh',
'dcr' => 'application/x-director',
'dir' => 'application/x-director',
'dxr' => 'application/x-director',
'fgd' => 'application/x-director',
'dvi' => 'application/x-dvi',
'spl' => 'application/x-futuresplash',
'gtar' => 'application/x-gtar',
'hdf' => 'application/x-hdf',
'jnlp' => 'application/x-java-jnlp-file',
'latex' => 'application/x-latex',
'wmd' => 'application/x-ms-wmd',
'wmz' => 'application/x-ms-wmz',
'mdb' => 'application/x-msaccess',
'obd' => 'application/x-msbinder',
'crd' => 'application/x-mscardfile',
'clp' => 'application/x-msclip',
'exe' => 'application/x-msdownload',
'dll' => 'application/x-msdownload',
'com' => 'application/x-msdownload',
'bat' => 'application/x-msdownload',
'msi' => 'application/x-msdownload',
'mvb' => 'application/x-msmediaview',
'm13' => 'application/x-msmediaview',
'm14' => 'application/x-msmediaview',
'wmf' => 'application/x-msmetafile',
'mny' => 'application/x-msmoney',
'pub' => 'application/x-mspublisher',
'scd' => 'application/x-msschedule',
'trm' => 'application/x-msterminal',
'wri' => 'application/x-mswrite',
'nc' => 'application/x-netcdf',
'cdf' => 'application/x-netcdf',
'p12' => 'application/x-pkcs12',
'pfx' => 'application/x-pkcs12',
'p7b' => 'application/x-pkcs7-certificates',
'spc' => 'application/x-pkcs7-certificates',
'p7r' => 'application/x-pkcs7-certreqresp',
'rar' => 'application/x-rar-compressed',
'sh' => 'application/x-sh',
'shar' => 'application/x-shar',
'swf' => 'application/x-shockwave-flash',
'sit' => 'application/x-stuffit',
'sitx' => 'application/x-stuffitx',
'sv4cpio' => 'application/x-sv4cpio',
'sv4crc' => 'application/x-sv4crc',
'tar' => 'application/x-tar',
'tcl' => 'application/x-tcl',
'tex' => 'application/x-tex',
'texinfo' => 'application/x-texinfo',
'texi' => 'application/x-texinfo',
'ustar' => 'application/x-ustar',
'src' => 'application/x-wais-source',
'der' => 'application/x-x509-ca-cert',
'crt' => 'application/x-x509-ca-cert',
'xenc' => 'application/xenc+xml',
'xhtml' => 'application/xhtml+xml',
'xht' => 'application/xhtml+xml',
'xml' => 'application/xml',
'xsl' => 'application/xml',
'dtd' => 'application/xml-dtd',
'xop' => 'application/xop+xml',
'xslt' => 'application/xslt+xml',
'xspf' => 'application/xspf+xml',
'mxml' => 'application/xv+xml',
'xhvml' => 'application/xv+xml',
'xvml' => 'application/xv+xml',
'xvm' => 'application/xv+xml',
'zip' => 'application/zip',
'au' => 'audio/basic',
'snd' => 'audio/basic',
'mid' => 'audio/midi',
'midi' => 'audio/midi',
'kar' => 'audio/midi',
'rmi' => 'audio/midi',
'mp4a' => 'audio/mp4',
'm4a' => 'audio/mp4a-latm',
'm4p' => 'audio/mp4a-latm',
'mpga' => 'audio/mpeg',
'mp2' => 'audio/mpeg',
'mp2a' => 'audio/mpeg',
'mp3' => 'audio/mpeg',
'm2a' => 'audio/mpeg',
'm3a' => 'audio/mpeg',
'eol' => 'audio/vnd.digital-winds',
'lvp' => 'audio/vnd.lucent.voice',
'ecelp4800' => 'audio/vnd.nuera.ecelp4800',
'ecelp7470' => 'audio/vnd.nuera.ecelp7470',
'ecelp9600' => 'audio/vnd.nuera.ecelp9600',
'wav' => 'audio/wav',
'aif' => 'audio/x-aiff',
'aiff' => 'audio/x-aiff',
'aifc' => 'audio/x-aiff',
'm3u' => 'audio/x-mpegurl',
'wax' => 'audio/x-ms-wax',
'wma' => 'audio/x-ms-wma',
'ram' => 'audio/x-pn-realaudio',
'ra' => 'audio/x-pn-realaudio',
'rmp' => 'audio/x-pn-realaudio-plugin',
'cdx' => 'chemical/x-cdx',
'cif' => 'chemical/x-cif',
'cmdf' => 'chemical/x-cmdf',
'cml' => 'chemical/x-cml',
'csml' => 'chemical/x-csml',
'xyz' => 'chemical/x-xyz',
'bmp' => 'image/bmp',
'cgm' => 'image/cgm',
'g3' => 'image/g3fax',
'gif' => 'image/gif',
'ief' => 'image/ief',
'jp2' => 'image/jp2',
'jpeg' => 'image/jpeg',
'jpe' => 'image/jpeg',
'jpg' => 'image/jpeg',
'pict' => 'image/pict',
'pic' => 'image/pict',
'pct' => 'image/pict',
'png' => 'image/png',
'btif' => 'image/prs.btif',
'svg' => 'image/svg+xml',
'svgz' => 'image/svg+xml',
'tiff' => 'image/tiff',
'tif' => 'image/tiff',
'psd' => 'image/vnd.adobe.photoshop',
'djvu' => 'image/vnd.djvu',
'djv' => 'image/vnd.djvu',
'dwg' => 'image/vnd.dwg',
'dxf' => 'image/vnd.dxf',
'fbs' => 'image/vnd.fastbidsheet',
'fpx' => 'image/vnd.fpx',
'fst' => 'image/vnd.fst',
'mmr' => 'image/vnd.fujixerox.edmics-mmr',
'rlc' => 'image/vnd.fujixerox.edmics-rlc',
'ico' => 'image/vnd.microsoft.icon',
'mdi' => 'image/vnd.ms-modi',
'npx' => 'image/vnd.net-fpx',
'wbmp' => 'image/vnd.wap.wbmp',
'xif' => 'image/vnd.xiff',
'ras' => 'image/x-cmu-raster',
'cmx' => 'image/x-cmx',
'pntg' => 'image/x-macpaint',
'pnt' => 'image/x-macpaint',
'mac' => 'image/x-macpaint',
'pcx' => 'image/x-pcx',
'pnm' => 'image/x-portable-anymap',
'pbm' => 'image/x-portable-bitmap',
'pgm' => 'image/x-portable-graymap',
'ppm' => 'image/x-portable-pixmap',
'qtif' => 'image/x-quicktime',
'qti' => 'image/x-quicktime',
'rgb' => 'image/x-rgb',
'xbm' => 'image/x-xbitmap',
'xpm' => 'image/x-xpixmap',
'xwd' => 'image/x-xwindowdump',
'eml' => 'message/rfc822',
'mime' => 'message/rfc822',
'igs' => 'model/iges',
'iges' => 'model/iges',
'msh' => 'model/mesh',
'mesh' => 'model/mesh',
'silo' => 'model/mesh',
'dwf' => 'model/vnd.dwf',
'gdl' => 'model/vnd.gdl',
'gtw' => 'model/vnd.gtw',
'mts' => 'model/vnd.mts',
'vtu' => 'model/vnd.vtu',
'wrl' => 'model/vrml',
'vrml' => 'model/vrml',
'ics' => 'text/calendar',
'ifb' => 'text/calendar',
'css' => 'text/css',
'csv' => 'text/csv',
'html' => 'text/html',
'htm' => 'text/html',
'txt' => 'text/plain',
'text' => 'text/plain',
'conf' => 'text/plain',
'def' => 'text/plain',
'list' => 'text/plain',
'log' => 'text/plain',
'in' => 'text/plain',
'dsc' => 'text/prs.lines.tag',
'rtx' => 'text/richtext',
'sgml' => 'text/sgml',
'sgm' => 'text/sgml',
'tsv' => 'text/tab-separated-values',
't' => 'text/troff',
'tr' => 'text/troff',
'roff' => 'text/troff',
'man' => 'text/troff',
'me' => 'text/troff',
'ms' => 'text/troff',
'uri' => 'text/uri-list',
'uris' => 'text/uri-list',
'urls' => 'text/uri-list',
'fly' => 'text/vnd.fly',
'flx' => 'text/vnd.fmi.flexstor',
'3dml' => 'text/vnd.in3d.3dml',
'spot' => 'text/vnd.in3d.spot',
'jad' => 'text/vnd.sun.j2me.app-descriptor',
'wml' => 'text/vnd.wap.wml',
'wmls' => 'text/vnd.wap.wmlscript',
's' => 'text/x-asm',
'asm' => 'text/x-asm',
'c' => 'text/x-c',
'cc' => 'text/x-c',
'cxx' => 'text/x-c',
'cpp' => 'text/x-c',
'h' => 'text/x-c',
'hh' => 'text/x-c',
'dic' => 'text/x-c',
'f' => 'text/x-fortran',
'for' => 'text/x-fortran',
'f77' => 'text/x-fortran',
'f90' => 'text/x-fortran',
'p' => 'text/x-pascal',
'pas' => 'text/x-pascal',
'java' => 'text/x-java-source',
'etx' => 'text/x-setext',
'uu' => 'text/x-uuencode',
'vcs' => 'text/x-vcalendar',
'vcf' => 'text/x-vcard',
'3gp' => 'video/3gpp',
'3g2' => 'video/3gpp2',
'h261' => 'video/h261',
'h263' => 'video/h263',
'h264' => 'video/h264',
'jpgv' => 'video/jpeg',
'jpm' => 'video/jpm',
'jpgm' => 'video/jpm',
'mj2' => 'video/mj2',
'mjp2' => 'video/mj2',
'mp4' => 'video/mp4',
'mp4v' => 'video/mp4',
'mpg4' => 'video/mp4',
'm4v' => 'video/mp4',
'mpeg' => 'video/mpeg',
'mpg' => 'video/mpeg',
'mpe' => 'video/mpeg',
'm1v' => 'video/mpeg',
'm2v' => 'video/mpeg',
'qt' => 'video/quicktime',
'mov' => 'video/quicktime',
'fvt' => 'video/vnd.fvt',
'mxu' => 'video/vnd.mpegurl',
'm4u' => 'video/vnd.mpegurl',
'viv' => 'video/vnd.vivo',
'dv' => 'video/x-dv',
'dif' => 'video/x-dv',
'fli' => 'video/x-fli',
'asx' => 'video/x-ms-asf',
'wm' => 'video/x-ms-wm',
'wmv' => 'video/x-ms-wmv',
'wmx' => 'video/x-ms-wmx',
'wvx' => 'video/x-ms-wvx',
'avi' => 'video/x-msvideo',
'movie' => 'video/x-sgi-movie',
'ice' => 'x-conference/x-cooltalk',
];
/**
* Returns extensions for given mimes types.
*
* @param array $mimesTypes The mimes types, e.g. ['video/mpeg', 'image/jpeg']
* @param bool $asUpperCase (optional) If is set to true, extensions are returned as upper case. Otherwise - lower
* case.
*
* @return array
*/
public static function getExtensions(array $mimesTypes, $asUpperCase = false)
{
if (empty($mimesTypes)) {
return [];
}
$extensions = [];
foreach ($mimesTypes as $mimeType) {
$extension = self::getExtension($mimeType);
/*
* No extension for given mime type?
* Nothing to do
*/
if (empty($extension)) {
continue;
}
/*
* Extensions should be returned as upper case?
*/
if ($asUpperCase) {
if (is_array($extension)) {
array_walk($extension, function (&$value) {
$value = strtoupper($value);
});
} else {
$extension = strtoupper($extension);
}
}
$extensions[$mimeType] = $extension;
}
return $extensions;
}
/**
* Returns extension for given mime type.
*
* @param string $mimeType The mime type, e.g. "video/mpeg"
*
* @return string|array
*/
public static function getExtension($mimeType)
{
if (is_string($mimeType) && in_array($mimeType, self::$mimeTypes)) {
$data = Arrays::setKeysAsValues(self::$mimeTypes, false);
return $data[$mimeType];
}
return '';
}
/**
* Returns information whether file with the given path is an image.
*
* @param string $path Path of the file to check
*
* @return bool
*/
public static function isImagePath($path)
{
$mimeType = self::getMimeType($path);
return self::isImage($mimeType);
}
/**
* Returns mime type of given file.
*
* @param string $filePath Path of the file to check
*
* @return string
*
* @throws \RuntimeException
*/
public static function getMimeType($filePath)
{
/*
* The file does not exist?
* Nothing to do
*/
if (!is_string($filePath) || !is_readable($filePath)) {
return '';
}
/*
* 1st possibility: the finfo class
*/
if (class_exists('finfo')) {
$finfo = new \finfo();
return $finfo->file($filePath, FILEINFO_MIME_TYPE);
}
/*
* 2nd possibility: the mime_content_type function
*/
if (function_exists('mime_content_type')) {
return mime_content_type($filePath);
}
/*
* Oops, there is no possibility to read the mime type
*/
$template = 'Neither \'finfo\' class nor \'mime_content_type\' function exists. There is no way to read the'
.' mime type of file \'%s\'.';
$message = sprintf($template, $filePath);
throw new \RuntimeException($message);
}
/**
* Returns information whether the given file type is an image.
*
* @param string $mimeType The mime type of file
*
* @return bool
*/
public static function isImage($mimeType)
{
if (in_array($mimeType, self::$mimeTypes)) {
return (bool) preg_match('|^image/.+$|', $mimeType);
}
return false;
}
}

View File

@@ -13,21 +13,22 @@ use Symfony\Component\HttpFoundation\Cookie;
use Transliterator; use Transliterator;
/** /**
* Miscellaneous methods (only static functions) * Miscellaneous methods (only static functions).
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class Miscellaneous class Miscellaneous
{ {
/** /**
* Returns directory's content (names of directories and files) * Returns directory's content (names of directories and files).
* *
* @param string $directoryPath Path of directory who content should be returned * @param string $directoryPath Path of directory who content should be returned
* @param bool $recursive (optional) If is set to true, sub-directories are also searched for content. * @param bool $recursive (optional) If is set to true, sub-directories are also searched for content.
* Otherwise - only content of given directory is returned. * Otherwise - only content of given directory is returned.
* @param int $maxFilesCount (optional) Maximum files that will be returned. If it's null, all files are * @param int $maxFilesCount (optional) Maximum files that will be returned. If it's null, all files are
* returned. * returned.
*
* @return array|null * @return array|null
*/ */
public static function getDirectoryContent($directoryPath, $recursive = false, $maxFilesCount = null) public static function getDirectoryContent($directoryPath, $recursive = false, $maxFilesCount = null)
@@ -65,7 +66,7 @@ class Miscellaneous
if (!empty($directoryContent)) { if (!empty($directoryContent)) {
foreach ($directoryContent as $fileName) { foreach ($directoryContent as $fileName) {
if ('.' != $fileName && '..' != $fileName) { if ($fileName != '.' && $fileName != '..') {
$content = null; $content = null;
if (!empty($startFileName) && !$startFileFound) { if (!empty($startFileName) && !$startFileFound) {
@@ -76,11 +77,11 @@ class Miscellaneous
continue; continue;
} }
if ($recursive && is_dir($directoryPath . $fileName)) { if ($recursive && is_dir($directoryPath.$fileName)) {
$content = self::getDirectoryContent($directoryPath . $fileName, true, $maxFilesCount - $count); $content = self::getDirectoryContent($directoryPath.$fileName, true, $maxFilesCount - $count);
} }
if (null !== $content) { if ($content !== null) {
$files[$fileName] = $content; $files[$fileName] = $content;
if (!empty($maxFilesCount)) { if (!empty($maxFilesCount)) {
@@ -105,9 +106,10 @@ class Miscellaneous
} }
/** /**
* Returns information if given path it's a file's path, if the path contains file name * Returns information if given path it's a file's path, if the path contains file name.
* *
* @param string $path The path to check * @param string $path The path to check
*
* @return bool * @return bool
*/ */
public static function isFilePath($path) public static function isFilePath($path)
@@ -118,15 +120,16 @@ class Miscellaneous
} }
/** /**
* Converts checkbox value to boolean * Converts checkbox value to boolean.
* *
* @param string $checkboxValue Checkbox value * @param string $checkboxValue Checkbox value
*
* @return bool * @return bool
*/ */
public static function checkboxValue2Boolean($checkboxValue) public static function checkboxValue2Boolean($checkboxValue)
{ {
$mapping = [ $mapping = [
'on' => true, 'on' => true,
'off' => false, 'off' => false,
]; ];
@@ -140,21 +143,23 @@ class Miscellaneous
} }
/** /**
* Converts checkbox value to integer * Converts checkbox value to integer.
* *
* @param string $checkboxValue Checkbox value * @param string $checkboxValue Checkbox value
*
* @return int * @return int
*/ */
public static function checkboxValue2Integer($checkboxValue) public static function checkboxValue2Integer($checkboxValue)
{ {
return (int)self::checkboxValue2Boolean($checkboxValue); return (int) self::checkboxValue2Boolean($checkboxValue);
} }
/** /**
* Returns name of file with given extension after verification if it contains the extension * Returns name of file with given extension after verification if it contains the extension.
* *
* @param string $fileName The file name to verify * @param string $fileName The file name to verify
* @param string $extension The extension to verify and include * @param string $extension The extension to verify and include
*
* @return string * @return string
*/ */
public static function includeFileExtension($fileName, $extension) public static function includeFileExtension($fileName, $extension)
@@ -167,10 +172,11 @@ class Miscellaneous
} }
/** /**
* Returns file extension * Returns file extension.
* *
* @param string $fileName File name * @param string $fileName File name
* @param bool $asLowerCase (optional) if true extension is returned as lowercase string * @param bool $asLowerCase (optional) if true extension is returned as lowercase string
*
* @return string * @return string
*/ */
public static function getFileExtension($fileName, $asLowerCase = false) public static function getFileExtension($fileName, $asLowerCase = false)
@@ -190,9 +196,10 @@ class Miscellaneous
} }
/** /**
* Returns file name from given path * Returns file name from given path.
* *
* @param string $path A path that contains file name * @param string $path A path that contains file name
*
* @return string * @return string
*/ */
public static function getFileNameFromPath($path) public static function getFileNameFromPath($path)
@@ -200,7 +207,7 @@ class Miscellaneous
$matches = []; $matches = [];
$pattern = sprintf('|([^\%s.]+\.[A-Za-z0-9.]+)$|', DIRECTORY_SEPARATOR); $pattern = sprintf('|([^\%s.]+\.[A-Za-z0-9.]+)$|', DIRECTORY_SEPARATOR);
if ((bool)preg_match($pattern, $path, $matches)) { if ((bool) preg_match($pattern, $path, $matches)) {
return $matches[1]; return $matches[1];
} }
@@ -208,11 +215,12 @@ class Miscellaneous
} }
/** /**
* Returns unique name for file based on given original name * Returns unique name for file based on given original name.
* *
* @param string $originalFileName Original name of the file * @param string $originalFileName Original name of the file
* @param int $objectId (optional) Object ID, the ID of database's row. May be included into the * @param int $objectId (optional) Object ID, the ID of database's row. May be included into the
* generated / unique name. * generated / unique name.
*
* @return string * @return string
*/ */
public static function getUniqueFileName($originalFileName, $objectId = 0) public static function getUniqueFileName($originalFileName, $objectId = 0)
@@ -260,16 +268,17 @@ class Miscellaneous
} }
/** /**
* Returns file name without extension * Returns file name without extension.
* *
* @param string $fileName The file name * @param string $fileName The file name
*
* @return string * @return string
*/ */
public static function getFileNameWithoutExtension($fileName) public static function getFileNameWithoutExtension($fileName)
{ {
$matches = []; $matches = [];
if (is_string($fileName) && (bool)preg_match('|(.+)\.(.+)|', $fileName, $matches)) { if (is_string($fileName) && (bool) preg_match('|(.+)\.(.+)|', $fileName, $matches)) {
return $matches[1]; return $matches[1];
} }
@@ -277,15 +286,16 @@ class Miscellaneous
} }
/** /**
* Converts value to non-negative integer (element of the set {0, 1, 2, 3, ...}) * Converts value to non-negative integer (element of the set {0, 1, 2, 3, ...}).
* *
* @param mixed $value Value to convert * @param mixed $value Value to convert
* @param int $negativeReplacement (optional) Replacement for negative value * @param int $negativeReplacement (optional) Replacement for negative value
*
* @return int * @return int
*/ */
public static function value2NonNegativeInteger($value, $negativeReplacement = 0) public static function value2NonNegativeInteger($value, $negativeReplacement = 0)
{ {
$effect = (int)$value; $effect = (int) $value;
if ($effect < 0) { if ($effect < 0) {
return $negativeReplacement; return $negativeReplacement;
@@ -295,7 +305,7 @@ class Miscellaneous
} }
/** /**
* Displays variable content as preformatted text (fixed-width font and preserves both spaces and line breaks) * Displays variable content as preformatted text (fixed-width font and preserves both spaces and line breaks).
* *
* If xdebug php module is loaded, displays variable using var_dump(), otherwise <pre>var_dump()</pre>. * If xdebug php module is loaded, displays variable using var_dump(), otherwise <pre>var_dump()</pre>.
* You can pass as many variables as you wish. * You can pass as many variables as you wish.
@@ -323,9 +333,10 @@ class Miscellaneous
} }
/** /**
* Returns information if given PHP module is compiled and loaded * Returns information if given PHP module is compiled and loaded.
* *
* @param string $phpModuleName PHP module name * @param string $phpModuleName PHP module name
*
* @return bool * @return bool
*/ */
public static function isPhpModuleLoaded($phpModuleName) public static function isPhpModuleLoaded($phpModuleName)
@@ -336,13 +347,14 @@ class Miscellaneous
} }
/** /**
* Converts given string characters to latin characters * Converts given string characters to latin characters.
* *
* @param string $string String to convert * @param string $string String to convert
* @param bool $lowerCaseHuman (optional) If is set to true, converted string is returned as lowercase and * @param bool $lowerCaseHuman (optional) If is set to true, converted string is returned as lowercase and
* human-readable. Otherwise - as original. * human-readable. Otherwise - as original.
* @param string $replacementChar (optional) Replacement character for all non-latin characters and uppercase * @param string $replacementChar (optional) Replacement character for all non-latin characters and uppercase
* letters, if 2nd argument is set to true * letters, if 2nd argument is set to true
*
* @return string * @return string
*/ */
public static function toLatin($string, $lowerCaseHuman = true, $replacementChar = '-') public static function toLatin($string, $lowerCaseHuman = true, $replacementChar = '-')
@@ -365,7 +377,7 @@ class Miscellaneous
* Oops, cannot instantiate converter * Oops, cannot instantiate converter
* Nothing to do * Nothing to do
*/ */
if (null === $converter) { if ($converter === null) {
return ''; return '';
} }
@@ -394,11 +406,12 @@ class Miscellaneous
} }
/** /**
* Returns unique string * Returns unique string.
* *
* @param string $prefix (optional) Prefix of the unique string. May be used while generating the unique * @param string $prefix (optional) Prefix of the unique string. May be used while generating the unique
* string simultaneously on several hosts at the same microsecond. * string simultaneously on several hosts at the same microsecond.
* @param bool $hashed (optional) If is set to true, the unique string is hashed additionally. Otherwise - not. * @param bool $hashed (optional) If is set to true, the unique string is hashed additionally. Otherwise - not.
*
* @return string * @return string
*/ */
public static function getUniqueString($prefix = '', $hashed = false) public static function getUniqueString($prefix = '', $hashed = false)
@@ -422,6 +435,7 @@ class Miscellaneous
* @param string|array $replacement The string or an array of strings to replace. It may be: string or an array * @param string|array $replacement The string or an array of strings to replace. It may be: string or an array
* of strings. * of strings.
* @param bool $quoteStrings (optional) If is set to true, strings are surrounded with single quote sign * @param bool $quoteStrings (optional) If is set to true, strings are surrounded with single quote sign
*
* @return string * @return string
* *
* Example: * Example:
@@ -460,7 +474,7 @@ class Miscellaneous
* Value to find is neither a string nor an array OR it's an empty string? * Value to find is neither a string nor an array OR it's an empty string?
* Nothing to do * Nothing to do
*/ */
if ((!$searchIsString && !$searchIsArray) || ($searchIsString && 0 == strlen($search))) { if ((!$searchIsString && !$searchIsArray) || ($searchIsString && strlen($search) == 0)) {
return $effect; return $effect;
} }
@@ -475,7 +489,7 @@ class Miscellaneous
*/ */
if ($searchIsString && $replacementIsString) { if ($searchIsString && $replacementIsString) {
if ($quoteStrings) { if ($quoteStrings) {
$replacement = '\'' . $replacement . '\''; $replacement = '\''.$replacement.'\'';
} }
$effect = str_replace($search, $replacement, $subject); $effect = str_replace($search, $replacement, $subject);
@@ -487,7 +501,7 @@ class Miscellaneous
*/ */
if ($effect == $subject && ($bothAreStrings || $bothAreArrays)) { if ($effect == $subject && ($bothAreStrings || $bothAreArrays)) {
if ($quoteStrings && $replacementIsString) { if ($quoteStrings && $replacementIsString) {
$replacement = '\'' . $replacement . '\''; $replacement = '\''.$replacement.'\'';
} }
/* /*
@@ -529,7 +543,7 @@ class Miscellaneous
if ($quoteStrings) { if ($quoteStrings) {
foreach ($replacement as &$item) { foreach ($replacement as &$item) {
if (is_string($item)) { if (is_string($item)) {
$item = '\'' . $item . '\''; $item = '\''.$item.'\'';
} }
} }
@@ -549,6 +563,7 @@ class Miscellaneous
if ($subjectIsArray) { if ($subjectIsArray) {
$effect[] = $subEffect; $effect[] = $subEffect;
continue; continue;
} }
@@ -560,11 +575,12 @@ class Miscellaneous
} }
/** /**
* Returns new file name after adding prefix or suffix (or both of them) to the name * Returns new file name after adding prefix or suffix (or both of them) to the name.
* *
* @param string $fileName The file name * @param string $fileName The file name
* @param string $prefix File name prefix * @param string $prefix File name prefix
* @param string $suffix File name suffix * @param string $suffix File name suffix
*
* @return string * @return string
*/ */
public static function getNewFileName($fileName, $prefix, $suffix) public static function getNewFileName($fileName, $prefix, $suffix)
@@ -582,7 +598,7 @@ class Miscellaneous
} }
/** /**
* Returns operating system name PHP is running on * Returns operating system name PHP is running on.
* *
* @return string * @return string
*/ */
@@ -592,11 +608,12 @@ class Miscellaneous
} }
/** /**
* Returns part of string preserving words * Returns part of string preserving words.
* *
* @param string $text The string / text * @param string $text The string / text
* @param int $maxLength Maximum length of given string * @param int $maxLength Maximum length of given string
* @param string $suffix (optional) The suffix to add at the end of string * @param string $suffix (optional) The suffix to add at the end of string
*
* @return string * @return string
*/ */
public static function substringToWord($text, $maxLength, $suffix = '...') public static function substringToWord($text, $maxLength, $suffix = '...')
@@ -612,7 +629,7 @@ class Miscellaneous
$effect = mb_substr($text, 0, $maxLength, 'utf-8'); $effect = mb_substr($text, 0, $maxLength, 'utf-8');
$lastSpacePosition = mb_strrpos($effect, ' ', 'utf-8'); $lastSpacePosition = mb_strrpos($effect, ' ', 'utf-8');
if (false !== $lastSpacePosition) { if ($lastSpacePosition !== false) {
$effect = mb_substr($effect, 0, $lastSpacePosition, 'utf-8'); $effect = mb_substr($effect, 0, $lastSpacePosition, 'utf-8');
} }
@@ -623,13 +640,14 @@ class Miscellaneous
} }
/** /**
* Breaks long text * Breaks long text.
* *
* @param string $text The text to check and break * @param string $text The text to check and break
* @param int $perLine (optional) Characters count per line * @param int $perLine (optional) Characters count per line
* @param string $separator (optional) Separator that is placed beetwen lines * @param string $separator (optional) Separator that is placed beetwen lines
* @param string $encoding (optional) Character encoding. Used by mb_substr(). * @param string $encoding (optional) Character encoding. Used by mb_substr().
* @param int $proportionalAberration (optional) Proportional aberration for chars (percent value) * @param int $proportionalAberration (optional) Proportional aberration for chars (percent value)
*
* @return string * @return string
*/ */
public static function breakLongText( public static function breakLongText(
@@ -717,6 +735,7 @@ class Miscellaneous
* @param string $directoryPath Directory path * @param string $directoryPath Directory path
* @param bool $contentOnly (optional) If is set to true, only content of the directory is removed, not * @param bool $contentOnly (optional) If is set to true, only content of the directory is removed, not
* directory. Otherwise - directory is removed too. * directory. Otherwise - directory is removed too.
*
* @return bool * @return bool
*/ */
public static function removeDirectory($directoryPath, $contentOnly = false) public static function removeDirectory($directoryPath, $contentOnly = false)
@@ -730,11 +749,11 @@ class Miscellaneous
} }
foreach (scandir($directoryPath) as $item) { foreach (scandir($directoryPath) as $item) {
if ('.' == $item || '..' == $item) { if ($item == '.' || $item == '..') {
continue; continue;
} }
if (!self::removeDirectory($directoryPath . DIRECTORY_SEPARATOR . $item)) { if (!self::removeDirectory($directoryPath.DIRECTORY_SEPARATOR.$item)) {
return false; return false;
} }
} }
@@ -747,21 +766,23 @@ class Miscellaneous
} }
/** /**
* Returns information if value is decimal * Returns information if value is decimal.
* *
* @param mixed $value The value to check * @param mixed $value The value to check
*
* @return bool * @return bool
*/ */
public static function isDecimal($value) public static function isDecimal($value)
{ {
return is_scalar($value) && floor($value) !== (float)$value; return is_scalar($value) && floor($value) !== (float) $value;
} }
/** /**
* Returns the string in camel case * Returns the string in camel case.
* *
* @param string $string The string to convert e.g. this-is-eXamplE (return: thisIsExample) * @param string $string The string to convert e.g. this-is-eXamplE (return: thisIsExample)
* @param string $separator (optional) Separator used to find parts of the string, e.g. '-' or ',' * @param string $separator (optional) Separator used to find parts of the string, e.g. '-' or ','
*
* @return string * @return string
*/ */
public static function getCamelCase($string, $separator = ' ') public static function getCamelCase($string, $separator = ' ')
@@ -776,7 +797,7 @@ class Miscellaneous
foreach ($members as $key => $value) { foreach ($members as $key => $value) {
$value = mb_strtolower($value); $value = mb_strtolower($value);
if (0 == $key) { if ($key == 0) {
$effect .= self::lowercaseFirst($value); $effect .= self::lowercaseFirst($value);
} else { } else {
$effect .= self::uppercaseFirst($value); $effect .= self::uppercaseFirst($value);
@@ -787,10 +808,11 @@ class Miscellaneous
} }
/** /**
* Make a string's first character lowercase * Make a string's first character lowercase.
* *
* @param string $text The text to get first character lowercase * @param string $text The text to get first character lowercase
* @param bool|null $restLowercase (optional) Information that to do with rest of given string * @param bool|null $restLowercase (optional) Information that to do with rest of given string
*
* @return string * @return string
* *
* Values of the $restLowercase argument: * Values of the $restLowercase argument:
@@ -812,7 +834,7 @@ class Miscellaneous
if ($restLowercase) { if ($restLowercase) {
$effect = mb_strtolower($effect); $effect = mb_strtolower($effect);
} elseif (false === $restLowercase) { } elseif ($restLowercase === false) {
$effect = mb_strtoupper($effect); $effect = mb_strtoupper($effect);
} }
@@ -822,17 +844,18 @@ class Miscellaneous
$first = mb_strtolower($effect[0]); $first = mb_strtolower($effect[0]);
$rest = mb_substr($effect, 1); $rest = mb_substr($effect, 1);
$effect = $first . $rest; $effect = $first.$rest;
} }
return $effect; return $effect;
} }
/** /**
* Make a string's first character uppercase * Make a string's first character uppercase.
* *
* @param string $text The text to get uppercase * @param string $text The text to get uppercase
* @param bool|null $restLowercase (optional) Information that to do with rest of given string * @param bool|null $restLowercase (optional) Information that to do with rest of given string
*
* @return string * @return string
* *
* Values of the $restLowercase argument: * Values of the $restLowercase argument:
@@ -850,7 +873,7 @@ class Miscellaneous
if ($restLowercase) { if ($restLowercase) {
$effect = mb_strtolower($effect); $effect = mb_strtolower($effect);
} elseif (false === $restLowercase) { } elseif ($restLowercase === false) {
$effect = mb_strtoupper($effect); $effect = mb_strtoupper($effect);
} }
@@ -860,17 +883,18 @@ class Miscellaneous
$first = mb_strtoupper($effect[0]); $first = mb_strtoupper($effect[0]);
$rest = mb_substr($effect, 1); $rest = mb_substr($effect, 1);
$effect = $first . $rest; $effect = $first.$rest;
} }
return $effect; return $effect;
} }
/** /**
* Quotes given value with apostrophes or quotation marks * Quotes given value with apostrophes or quotation marks.
* *
* @param mixed $value The value to quote * @param mixed $value The value to quote
* @param bool $useApostrophe (optional) If is set to true, apostrophes are used. Otherwise - quotation marks. * @param bool $useApostrophe (optional) If is set to true, apostrophes are used. Otherwise - quotation marks.
*
* @return string * @return string
*/ */
public static function quoteValue($value, $useApostrophe = true) public static function quoteValue($value, $useApostrophe = true)
@@ -889,9 +913,10 @@ class Miscellaneous
} }
/** /**
* Returns size (of file or directory) in human readable format * Returns size (of file or directory) in human readable format.
* *
* @param int $sizeInBytes The size in bytes * @param int $sizeInBytes The size in bytes
*
* @return string * @return string
*/ */
public static function getHumanReadableSize($sizeInBytes) public static function getHumanReadableSize($sizeInBytes)
@@ -907,7 +932,7 @@ class Miscellaneous
$index = floor(log($sizeInBytes, 1024)); $index = floor(log($sizeInBytes, 1024));
$size = round($sizeInBytes / pow(1024, $index), 2); $size = round($sizeInBytes / pow(1024, $index), 2);
$unit = $units[(int)$index]; $unit = $units[(int) $index];
return sprintf('%s %s', $size, $unit); return sprintf('%s %s', $size, $unit);
} }
@@ -918,6 +943,7 @@ class Miscellaneous
* *
* @param string $string The string to check * @param string $string The string to check
* @param string $separator The separator which divides elements of string * @param string $separator The separator which divides elements of string
*
* @return string * @return string
*/ */
public static function getStringWithoutLastElement($string, $separator) public static function getStringWithoutLastElement($string, $separator)
@@ -931,10 +957,11 @@ class Miscellaneous
} }
/** /**
* Returns elements of given string divided by given separator * Returns elements of given string divided by given separator.
* *
* @param string $string The string to check * @param string $string The string to check
* @param string $separator The separator which divides elements of string * @param string $separator The separator which divides elements of string
*
* @return array * @return array
*/ */
public static function getStringElements($string, $separator) public static function getStringElements($string, $separator)
@@ -951,10 +978,11 @@ class Miscellaneous
} }
/** /**
* Returns the last element of given string divided by given separator * Returns the last element of given string divided by given separator.
* *
* @param string $string The string to check * @param string $string The string to check
* @param string $separator The separator which divides elements of string * @param string $separator The separator which divides elements of string
*
* @return string|null * @return string|null
*/ */
public static function getLastElementOfString($string, $separator) public static function getLastElementOfString($string, $separator)
@@ -979,6 +1007,7 @@ class Miscellaneous
* If the string is empty, contains only spaces, e.g. " ", nothing is done and the original string is returned. * If the string is empty, contains only spaces, e.g. " ", nothing is done and the original string is returned.
* *
* @param string $string The string to trim * @param string $string The string to trim
*
* @return string * @return string
*/ */
public static function trimSmart($string) public static function trimSmart($string)
@@ -993,7 +1022,7 @@ class Miscellaneous
} }
/** /**
* Returns concatenated given paths * Returns concatenated given paths.
* *
* The paths may be passed as: * The paths may be passed as:
* - an array of paths / strings * - an array of paths / strings
@@ -1005,6 +1034,7 @@ class Miscellaneous
* *
* @param string|array $paths Paths co concatenate. As described above: an array of paths / strings or strings * @param string|array $paths Paths co concatenate. As described above: an array of paths / strings or strings
* passed as following arguments. * passed as following arguments.
*
* @return string * @return string
*/ */
public static function concatenatePaths($paths) public static function concatenatePaths($paths)
@@ -1032,8 +1062,6 @@ class Miscellaneous
$separator = DIRECTORY_SEPARATOR; $separator = DIRECTORY_SEPARATOR;
foreach ($paths as $path) { foreach ($paths as $path) {
$path = trim($path);
/* /*
* Empty paths are useless * Empty paths are useless
*/ */
@@ -1069,6 +1097,7 @@ class Miscellaneous
*/ */
if ($firstWindowsBased && empty($concatenated)) { if ($firstWindowsBased && empty($concatenated)) {
$concatenated = $path; $concatenated = $path;
continue; continue;
} }
@@ -1082,11 +1111,12 @@ class Miscellaneous
} }
/** /**
* Removes the starting / beginning directory's separator * Removes the starting / beginning directory's separator.
* *
* @param string $text Text that may contain a directory's separator at the start / beginning * @param string $text Text that may contain a directory's separator at the start / beginning
* @param string $separator (optional) The directory's separator, e.g. "/". If is empty (not provided), separator * @param string $separator (optional) The directory's separator, e.g. "/". If is empty (not provided), separator
* provided by operating system will be used. * provided by operating system will be used.
*
* @return string * @return string
*/ */
public static function removeStartingDirectorySeparator($text, $separator = '') public static function removeStartingDirectorySeparator($text, $separator = '')
@@ -1113,11 +1143,12 @@ class Miscellaneous
} }
/** /**
* Removes the ending directory's separator * Removes the ending directory's separator.
* *
* @param string $text Text that may contain a directory's separator at the end * @param string $text Text that may contain a directory's separator at the end
* @param string $separator (optional) The directory's separator, e.g. "/". If is empty (not provided), system's * @param string $separator (optional) The directory's separator, e.g. "/". If is empty (not provided), system's
* separator is used. * separator is used.
*
* @return string * @return string
*/ */
public static function removeEndingDirectorySeparator($text, $separator = '') public static function removeEndingDirectorySeparator($text, $separator = '')
@@ -1144,43 +1175,49 @@ class Miscellaneous
} }
/** /**
* Returns safely value of global variable, found in one of the global arrays / variables, e.g. $_GET * Returns safely value of global variable, found in one of the global arrays / variables, e.g. $_GET.
* *
* @param int $globalSourceType Represents the global array / variable. One of constants: INPUT_GET, INPUT_POST, * @param int $globalSourceType Represents the global array / variable. One of constants: INPUT_GET, INPUT_POST,
* INPUT_COOKIE, INPUT_SERVER, or INPUT_ENV. * INPUT_COOKIE, INPUT_SERVER, or INPUT_ENV.
* @param string $variableName Name of the variable to return value * @param string $variableName Name of the variable to return value
*
* @return mixed * @return mixed
*/ */
public static function getSafelyGlobalVariable($globalSourceType, $variableName) public static function getSafelyGlobalVariable($globalSourceType, $variableName)
{ {
$value = filter_input($globalSourceType, $variableName); $value = filter_input($globalSourceType, $variableName);
if (null === $value) { if ($value === null) {
$globalSource = null; $globalSource = null;
switch ($globalSourceType) { switch ($globalSourceType) {
case INPUT_GET: case INPUT_GET:
$globalSource = $_GET; $globalSource = $_GET;
break; break;
case INPUT_POST: case INPUT_POST:
$globalSource = $_POST; $globalSource = $_POST;
break; break;
case INPUT_COOKIE: case INPUT_COOKIE:
$globalSource = $_COOKIE; $globalSource = $_COOKIE;
break; break;
case INPUT_SERVER: case INPUT_SERVER:
$globalSource = $_SERVER; $globalSource = $_SERVER;
break; break;
case INPUT_ENV: case INPUT_ENV:
$globalSource = $_ENV; $globalSource = $_ENV;
break; break;
} }
if (null !== $globalSource && isset($globalSource[$variableName])) { if ($globalSource !== null && isset($globalSource[$variableName])) {
$value = $globalSource[$variableName]; $value = $globalSource[$variableName];
if (!ini_get('magic_quotes_gpc')) { if (!ini_get('magic_quotes_gpc')) {
@@ -1193,7 +1230,7 @@ class Miscellaneous
} }
/** /**
* Returns a CURL response with parsed HTTP headers as array with "headers", "cookies" and "content" keys * Returns a CURL response with parsed HTTP headers as array with "headers", "cookies" and "content" keys.
* *
* The headers and cookies are parsed and returned as an array, and an array of Cookie objects. Returned array looks * The headers and cookies are parsed and returned as an array, and an array of Cookie objects. Returned array looks
* like this example: * like this example:
@@ -1218,6 +1255,7 @@ class Miscellaneous
* *
* @param string $response the full content of response, including HTTP headers * @param string $response the full content of response, including HTTP headers
* @param int $headerSize The length of HTTP headers in content * @param int $headerSize The length of HTTP headers in content
*
* @return array * @return array
*/ */
public static function getCurlResponseWithHeaders($response, $headerSize) public static function getCurlResponseWithHeaders($response, $headerSize)
@@ -1234,7 +1272,7 @@ class Miscellaneous
/* /*
* First line is only HTTP status and is unneeded so skip it * First line is only HTTP status and is unneeded so skip it
*/ */
if (0 === $i) { if ($i === 0) {
continue; continue;
} }
@@ -1244,7 +1282,7 @@ class Miscellaneous
/* /*
* If the header is a "set-cookie" let's save it to "cookies" array * If the header is a "set-cookie" let's save it to "cookies" array
*/ */
if ('Set-Cookie' === $key) { if ($key === 'Set-Cookie') {
$cookieParameters = explode(';', $value); $cookieParameters = explode(';', $value);
$name = ''; $name = '';
@@ -1262,9 +1300,10 @@ class Miscellaneous
* First parameter will be always a cookie name and it's value. It is not needed to run * First parameter will be always a cookie name and it's value. It is not needed to run
* further actions for them, so save the values and move to next parameter. * further actions for them, so save the values and move to next parameter.
*/ */
if (0 === $j) { if ($j === 0) {
$name = trim($param[0]); $name = trim($param[0]);
$value = trim($param[1]); $value = trim($param[1]);
continue; continue;
} }
@@ -1286,18 +1325,23 @@ class Miscellaneous
switch ($paramName) { switch ($paramName) {
case 'expires': case 'expires':
$expire = $paramValue; $expire = $paramValue;
break; break;
case 'path': case 'path':
$path = $paramValue; $path = $paramValue;
break; break;
case 'domain': case 'domain':
$domain = $paramValue; $domain = $paramValue;
break; break;
case 'secure': case 'secure':
$secure = $paramValue; $secure = $paramValue;
break; break;
case 'httponly': case 'httponly':
$httpOnly = $paramValue; $httpOnly = $paramValue;
break; break;
} }
} }
@@ -1307,6 +1351,7 @@ class Miscellaneous
* I must skip to next header as cookies shouldn't be saved in "headers" array. * I must skip to next header as cookies shouldn't be saved in "headers" array.
*/ */
$cookies[] = new Cookie($name, $value, $expire, $path, $domain, $secure, $httpOnly); $cookies[] = new Cookie($name, $value, $expire, $path, $domain, $secure, $httpOnly);
continue; continue;
} }
@@ -1325,7 +1370,7 @@ class Miscellaneous
} }
/** /**
* Adds missing the "0" characters to given number until given length is reached * Adds missing the "0" characters to given number until given length is reached.
* *
* Example: * Example:
* - number: 201 * - number: 201
@@ -1338,6 +1383,7 @@ class Miscellaneous
* @param mixed $number Number for who the "0" characters should be inserted * @param mixed $number Number for who the "0" characters should be inserted
* @param int $length Wanted length of final number * @param int $length Wanted length of final number
* @param bool $before (optional) If false, 0 characters will be inserted after given number * @param bool $before (optional) If false, 0 characters will be inserted after given number
*
* @return string * @return string
*/ */
public static function fillMissingZeros($number, $length, $before = true) public static function fillMissingZeros($number, $length, $before = true)
@@ -1359,22 +1405,24 @@ class Miscellaneous
for ($i = ($length - $textLength); 0 < $i; --$i) { for ($i = ($length - $textLength); 0 < $i; --$i) {
if ($before) { if ($before) {
$text = '0' . $text; $text = '0'.$text;
continue; continue;
} }
$text = $text . '0'; $text = $text.'0';
} }
return $text; return $text;
} }
/** /**
* Returns information if given value is located in interval between given utmost left and right values * Returns information if given value is located in interval between given utmost left and right values.
* *
* @param int|float $value Value to verify * @param int|float $value Value to verify
* @param int|float $left Left utmost value of interval * @param int|float $left Left utmost value of interval
* @param int|float $right Right utmost value of interval * @param int|float $right Right utmost value of interval
*
* @return bool * @return bool
*/ */
public static function isBetween($value, $left, $right) public static function isBetween($value, $left, $right)
@@ -1387,6 +1435,7 @@ class Miscellaneous
* If it's an object, full class name is returned. * If it's an object, full class name is returned.
* *
* @param mixed $variable Variable who type should be returned * @param mixed $variable Variable who type should be returned
*
* @return string * @return string
*/ */
public static function getType($variable) public static function getType($variable)
@@ -1405,11 +1454,12 @@ class Miscellaneous
* @param int $colorComponent Color's component to verify. Decimal value, e.g. 255. * @param int $colorComponent Color's component to verify. Decimal value, e.g. 255.
* @param bool $asHexadecimal (optional) If is set to true, hexadecimal value is returned (default behaviour). * @param bool $asHexadecimal (optional) If is set to true, hexadecimal value is returned (default behaviour).
* Otherwise - decimal. * Otherwise - decimal.
*
* @return int|string * @return int|string
*/ */
public static function getValidColorComponent($colorComponent, $asHexadecimal = true) public static function getValidColorComponent($colorComponent, $asHexadecimal = true)
{ {
$colorComponent = (int)$colorComponent; $colorComponent = (int) $colorComponent;
if ($colorComponent < 0 || $colorComponent > 255) { if ($colorComponent < 0 || $colorComponent > 255) {
$colorComponent = 0; $colorComponent = 0;
@@ -1418,7 +1468,7 @@ class Miscellaneous
if ($asHexadecimal) { if ($asHexadecimal) {
$hexadecimal = dechex($colorComponent); $hexadecimal = dechex($colorComponent);
if (1 == strlen($hexadecimal)) { if (strlen($hexadecimal) == 1) {
return sprintf('0%s', $hexadecimal, $hexadecimal); return sprintf('0%s', $hexadecimal, $hexadecimal);
} }
@@ -1429,9 +1479,10 @@ class Miscellaneous
} }
/** /**
* Returns inverted value of color for given color * Returns inverted value of color for given color.
* *
* @param string $color Hexadecimal value of color to invert (with or without hash), e.g. "dd244c" or "#22a5fe" * @param string $color Hexadecimal value of color to invert (with or without hash), e.g. "dd244c" or "#22a5fe"
*
* @return string * @return string
*/ */
public static function getInvertedColor($color) public static function getInvertedColor($color)
@@ -1473,37 +1524,4 @@ class Miscellaneous
return $invertedColor; return $invertedColor;
} }
/**
* Returns project's root path.
* Looks for directory that contains composer.json.
*
* @return string
*/
public static function getProjectRootPath()
{
$projectRootPath = '';
$fileName = 'composer.json';
$directoryPath = __DIR__;
/*
* Path of directory it's not the path of last directory?
*/
while (DIRECTORY_SEPARATOR !== $directoryPath) {
$filePath = static::concatenatePaths($directoryPath, $fileName);
/*
* Is here file we are looking for?
* Maybe it's a project's root path
*/
if (file_exists($filePath)) {
$projectRootPath = $directoryPath;
}
$directoryPath = dirname($directoryPath);
}
return $projectRootPath;
}
} }

View File

@@ -15,10 +15,10 @@ use Doctrine\ORM\Query\Parameter;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
/** /**
* Useful methods for query builder (the Doctrine's QueryBuilder class) * Useful methods for query builder (the Doctrine's QueryBuilder class).
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class QueryBuilderUtility class QueryBuilderUtility
{ {
@@ -27,6 +27,7 @@ class QueryBuilderUtility
* If null is returned, alias was not found. * If null is returned, alias was not found.
* *
* @param QueryBuilder $queryBuilder The query builder to retrieve root alias * @param QueryBuilder $queryBuilder The query builder to retrieve root alias
*
* @return null|string * @return null|string
*/ */
public static function getRootAlias(QueryBuilder $queryBuilder) public static function getRootAlias(QueryBuilder $queryBuilder)
@@ -47,6 +48,7 @@ class QueryBuilderUtility
* *
* @param QueryBuilder $queryBuilder The query builder to verify * @param QueryBuilder $queryBuilder The query builder to verify
* @param string $property Name of property that maybe is joined * @param string $property Name of property that maybe is joined
*
* @return null|string * @return null|string
*/ */
public static function getJoinedPropertyAlias(QueryBuilder $queryBuilder, $property) public static function getJoinedPropertyAlias(QueryBuilder $queryBuilder, $property)
@@ -75,13 +77,14 @@ class QueryBuilderUtility
} }
/** /**
* Sets the WHERE criteria in given query builder * Sets the WHERE criteria in given query builder.
* *
* @param QueryBuilder $queryBuilder The query builder * @param QueryBuilder $queryBuilder The query builder
* @param array $criteria (optional) The criteria used in WHERE clause. It may simple array with pairs * @param array $criteria (optional) The criteria used in WHERE clause. It may simple array with pairs
* key-value or an array of arrays where second element of sub-array is the * key-value or an array of arrays where second element of sub-array is the
* comparison operator. Example below. * comparison operator. Example below.
* @param string $alias (optional) Alias used in the query * @param string $alias (optional) Alias used in the query
*
* @return QueryBuilder * @return QueryBuilder
* *
* Example of the $criteria argument: * Example of the $criteria argument:
@@ -108,7 +111,7 @@ class QueryBuilderUtility
$compareOperator = '='; $compareOperator = '=';
if (is_array($value) && !empty($value)) { if (is_array($value) && !empty($value)) {
if (2 == count($value)) { if (count($value) == 2) {
$compareOperator = $value[1]; $compareOperator = $value[1];
} }
@@ -117,7 +120,7 @@ class QueryBuilderUtility
$predicate = sprintf('%s.%s %s :%s', $alias, $column, $compareOperator, $column); $predicate = sprintf('%s.%s %s :%s', $alias, $column, $compareOperator, $column);
if (null === $value) { if ($value === null) {
$predicate = $queryBuilder->expr()->isNull(sprintf('%s.%s', $alias, $column)); $predicate = $queryBuilder->expr()->isNull(sprintf('%s.%s', $alias, $column));
unset($criteria[$column]); unset($criteria[$column]);
} else { } else {
@@ -132,12 +135,13 @@ class QueryBuilderUtility
} }
/** /**
* Deletes given entities * Deletes given entities.
* *
* @param EntityManager $entityManager The entity manager * @param EntityManager $entityManager The entity manager
* @param array|ArrayCollection $entities The entities to delete * @param array|ArrayCollection $entities The entities to delete
* @param bool $flushDeleted (optional) If is set to true, flushes the deleted objects. * @param bool $flushDeleted (optional) If is set to true, flushes the deleted objects.
* Otherwise - not. * Otherwise - not.
*
* @return bool * @return bool
*/ */
public static function deleteEntities(EntityManager $entityManager, $entities, $flushDeleted = true) public static function deleteEntities(EntityManager $entityManager, $entities, $flushDeleted = true)
@@ -171,6 +175,7 @@ class QueryBuilderUtility
* @param QueryBuilder $queryBuilder The query builder * @param QueryBuilder $queryBuilder The query builder
* @param array|ArrayCollection $parameters Parameters to add. Collection of instances of * @param array|ArrayCollection $parameters Parameters to add. Collection of instances of
* Doctrine\ORM\Query\Parameter class or an array with key-value pairs. * Doctrine\ORM\Query\Parameter class or an array with key-value pairs.
*
* @return QueryBuilder * @return QueryBuilder
*/ */
public static function addParameters(QueryBuilder $queryBuilder, $parameters) public static function addParameters(QueryBuilder $queryBuilder, $parameters)

View File

@@ -8,9 +8,9 @@
namespace Meritoo\Common\Utilities; namespace Meritoo\Common\Utilities;
use Doctrine\Common\Collections\Collection;
use Doctrine\Common\Util\ClassUtils; use Doctrine\Common\Util\ClassUtils;
use Doctrine\Common\Util\Inflector; use Doctrine\Common\Util\Inflector;
use Meritoo\Common\Collection\Collection;
use Meritoo\Common\Exception\Reflection\CannotResolveClassNameException; use Meritoo\Common\Exception\Reflection\CannotResolveClassNameException;
use Meritoo\Common\Exception\Reflection\MissingChildClassesException; use Meritoo\Common\Exception\Reflection\MissingChildClassesException;
use Meritoo\Common\Exception\Reflection\TooManyChildClassesException; use Meritoo\Common\Exception\Reflection\TooManyChildClassesException;
@@ -21,19 +21,20 @@ use ReflectionObject;
use ReflectionProperty; use ReflectionProperty;
/** /**
* Useful reflection methods * Useful reflection methods.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class Reflection class Reflection
{ {
/** /**
* Returns names of methods for given class / object * Returns names of methods for given class / object.
* *
* @param object|string $class The object or name of object's class * @param object|string $class The object or name of object's class
* @param bool $withoutInheritance (optional) If is set to true, only methods for given class are returned. * @param bool $withoutInheritance (optional) If is set to true, only methods for given class are returned.
* Otherwise - all methods, with inherited methods too. * Otherwise - all methods, with inherited methods too.
*
* @return array * @return array
*/ */
public static function getMethods($class, $withoutInheritance = false) public static function getMethods($class, $withoutInheritance = false)
@@ -61,9 +62,10 @@ class Reflection
} }
/** /**
* Returns constants of given class / object * Returns constants of given class / object.
* *
* @param object|string $class The object or name of object's class * @param object|string $class The object or name of object's class
*
* @return array * @return array
*/ */
public static function getConstants($class) public static function getConstants($class)
@@ -78,6 +80,7 @@ class Reflection
* Values of constants should be integers. * Values of constants should be integers.
* *
* @param object|string $class The object or name of object's class * @param object|string $class The object or name of object's class
*
* @return int|null * @return int|null
*/ */
public static function getMaxNumberConstant($class) public static function getMaxNumberConstant($class)
@@ -100,10 +103,11 @@ class Reflection
} }
/** /**
* Returns information if given class / object has given method * Returns information if given class / object has given method.
* *
* @param object|string $class The object or name of object's class * @param object|string $class The object or name of object's class
* @param string $method Name of the method to find * @param string $method Name of the method to find
*
* @return bool * @return bool
*/ */
public static function hasMethod($class, $method) public static function hasMethod($class, $method)
@@ -114,10 +118,11 @@ class Reflection
} }
/** /**
* Returns information if given class / object has given property * Returns information if given class / object has given property.
* *
* @param object|string $class The object or name of object's class * @param object|string $class The object or name of object's class
* @param string $property Name of the property to find * @param string $property Name of the property to find
*
* @return bool * @return bool
*/ */
public static function hasProperty($class, $property) public static function hasProperty($class, $property)
@@ -128,10 +133,11 @@ class Reflection
} }
/** /**
* Returns information if given class / object has given constant * Returns information if given class / object has given constant.
* *
* @param object|string $class The object or name of object's class * @param object|string $class The object or name of object's class
* @param string $constant Name of the constant to find * @param string $constant Name of the constant to find
*
* @return bool * @return bool
*/ */
public static function hasConstant($class, $constant) public static function hasConstant($class, $constant)
@@ -142,10 +148,11 @@ class Reflection
} }
/** /**
* Returns value of given constant * Returns value of given constant.
* *
* @param object|string $class The object or name of object's class * @param object|string $class The object or name of object's class
* @param string $constant Name of the constant that contains a value * @param string $constant Name of the constant that contains a value
*
* @return mixed * @return mixed
*/ */
public static function getConstantValue($class, $constant) public static function getConstantValue($class, $constant)
@@ -168,6 +175,7 @@ class Reflection
* dot-separated, e.g. "invoice.user.email". * dot-separated, e.g. "invoice.user.email".
* @param bool $force (optional) If is set to true, try to retrieve value even if the object doesn't have * @param bool $force (optional) If is set to true, try to retrieve value even if the object doesn't have
* property. Otherwise - not. * property. Otherwise - not.
*
* @return mixed * @return mixed
*/ */
public static function getPropertyValue($object, $property, $force = false) public static function getPropertyValue($object, $property, $force = false)
@@ -201,7 +209,7 @@ class Reflection
* Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* 2016-11-07 * 2016-11-07
*/ */
if (null !== $object) { if ($object !== null) {
unset($exploded[0]); unset($exploded[0]);
$property = implode('.', $exploded); $property = implode('.', $exploded);
@@ -229,45 +237,33 @@ class Reflection
if ($class->hasProperty($property) || $force) { if ($class->hasProperty($property) || $force) {
$property = Inflector::classify($property); $property = Inflector::classify($property);
$getterPrefixes = [ $methodPrefixes = [
'get', 'get',
'has', 'has',
'is', 'is',
]; ];
foreach ($getterPrefixes as $prefix) { foreach ($methodPrefixes as $prefix) {
$getterName = sprintf('%s%s', $prefix, $property); $method = sprintf('%s%s', $prefix, $property);
if ($class->hasMethod($getterName)) { if ($class->hasMethod($method)) {
$method = new ReflectionMethod($object, $getterName); $value = $object->{$method}();
/*
* Getter is not accessible publicly?
* I have to skip it, to avoid an error like this:
*
* Call to protected method My\ExtraClass::getExtraProperty() from context 'My\ExtraClass'
*/
if ($method->isProtected() || $method->isPrivate()) {
continue;
}
$value = $object->{$getterName}();
$valueFound = true; $valueFound = true;
break; break;
} }
} }
} }
if (!$valueFound && null !== $reflectionProperty) { if (!$valueFound && $reflectionProperty !== null) {
/* /*
* Oops, value of the property is still unknown * Oops, we have got exception.
* *
* 3rd try: * 3rd try:
* Let's modify accessibility of the property and try again to get value * Let's try modify accessibility of the property and try again to get value.
*/ */
$reflectionProperty->setAccessible(true); $reflectionProperty->setAccessible(true);
$value = $reflectionProperty->getValue($object); $value = $reflectionProperty->getValue($object);
$reflectionProperty->setAccessible(false);
} }
} }
} }
@@ -284,18 +280,11 @@ class Reflection
* @param string $property Name of the property that contains a value * @param string $property Name of the property that contains a value
* @param bool $force (optional) If is set to true, try to retrieve value even if the * @param bool $force (optional) If is set to true, try to retrieve value even if the
* object does not have property. Otherwise - not. * object does not have property. Otherwise - not.
*
* @return array * @return array
*/ */
public static function getPropertyValues($objects, $property, $force = false) public static function getPropertyValues($objects, $property, $force = false)
{ {
/*
* No objects?
* Nothing to do
*/
if (empty($objects)) {
return [];
}
if ($objects instanceof Collection) { if ($objects instanceof Collection) {
$objects = $objects->toArray(); $objects = $objects->toArray();
} }
@@ -306,7 +295,7 @@ class Reflection
foreach ($objects as $entity) { foreach ($objects as $entity) {
$value = self::getPropertyValue($entity, $property, $force); $value = self::getPropertyValue($entity, $property, $force);
if (null !== $value) { if ($value !== null) {
$values[] = $value; $values[] = $value;
} }
} }
@@ -315,11 +304,12 @@ class Reflection
} }
/** /**
* Returns a class name for given source * Returns a class name for given source.
* *
* @param array|object|string $source An array of objects, namespaces, object or namespace * @param array|object|string $source An array of objects, namespaces, object or namespace
* @param bool $withoutNamespace (optional) If is set to true, namespace is omitted. Otherwise - * @param bool $withoutNamespace (optional) If is set to true, namespace is omitted. Otherwise -
* not, full name of class is returned, with namespace. * not, full name of class is returned, with namespace.
*
* @return string|null * @return string|null
*/ */
public static function getClassName($source, $withoutNamespace = false) public static function getClassName($source, $withoutNamespace = false)
@@ -366,7 +356,7 @@ class Reflection
if ($withoutNamespace) { if ($withoutNamespace) {
$classOnly = Miscellaneous::getLastElementOfString($name, '\\'); $classOnly = Miscellaneous::getLastElementOfString($name, '\\');
if (null !== $classOnly) { if ($classOnly !== null) {
$name = $classOnly; $name = $classOnly;
} }
@@ -377,9 +367,10 @@ class Reflection
} }
/** /**
* Returns namespace of class for given source * Returns namespace of class for given source.
* *
* @param array|object|string $source An array of objects, namespaces, object or namespace * @param array|object|string $source An array of objects, namespaces, object or namespace
*
* @return string * @return string
*/ */
public static function getClassNamespace($source) public static function getClassNamespace($source)
@@ -400,10 +391,11 @@ class Reflection
} }
/** /**
* Returns information if given interface is implemented by given class / object * Returns information if given interface is implemented by given class / object.
* *
* @param array|object|string $source An array of objects, namespaces, object or namespace * @param array|object|string $source An array of objects, namespaces, object or namespace
* @param string $interface The interface that should be implemented * @param string $interface The interface that should be implemented
*
* @return bool * @return bool
*/ */
public static function isInterfaceImplemented($source, $interface) public static function isInterfaceImplemented($source, $interface)
@@ -415,10 +407,11 @@ class Reflection
} }
/** /**
* Returns information if given child class is a subclass of given parent class * Returns information if given child class is a subclass of given parent class.
* *
* @param array|object|string $childClass The child class. An array of objects, namespaces, object or namespace. * @param array|object|string $childClass The child class. An array of objects, namespaces, object or namespace.
* @param array|object|string $parentClass The parent class. An array of objects, namespaces, object or namespace. * @param array|object|string $parentClass The parent class. An array of objects, namespaces, object or namespace.
*
* @return bool * @return bool
*/ */
public static function isChildOfClass($childClass, $parentClass) public static function isChildOfClass($childClass, $parentClass)
@@ -436,47 +429,35 @@ class Reflection
} }
/** /**
* Returns given object properties * Returns given object properties.
*
* @param array|object|string $source An array of objects, namespaces, object or namespace
* @param int $filter (optional) Filter of properties. Uses ReflectionProperty class constants.
* By default all properties are returned.
* *
* @param array|object|string $source An array of objects, namespaces, object or namespace
* @param int $filter (optional) Filter of properties. Uses ReflectionProperty class
* constants. By default all properties are returned.
* @param bool $includeParents (optional) If is set to true, properties of parent classes are
* included (recursively). Otherwise - not.
* @return array|ReflectionProperty * @return array|ReflectionProperty
*/ */
public static function getProperties($source, $filter = null, $includeParents = false) public static function getProperties($source, $filter = null)
{ {
$className = self::getClassName($source); $className = self::getClassName($source);
$reflection = new ReflectionClass($className); $reflection = new ReflectionClass($className);
if (null === $filter) { if ($filter === null) {
$filter = ReflectionProperty::IS_PRIVATE $filter = ReflectionProperty::IS_PRIVATE
+ ReflectionProperty::IS_PROTECTED + ReflectionProperty::IS_PROTECTED
+ ReflectionProperty::IS_PUBLIC + ReflectionProperty::IS_PUBLIC
+ ReflectionProperty::IS_STATIC; + ReflectionProperty::IS_STATIC;
} }
$properties = $reflection->getProperties($filter); return $reflection->getProperties($filter);
$parentProperties = [];
if ($includeParents) {
$parent = self::getParentClass($source);
if (false !== $parent) {
$parentClass = $parent->getName();
$parentProperties = self::getProperties($parentClass, $filter, $includeParents);
}
}
return array_merge($properties, $parentProperties);
} }
/** /**
* Returns a parent class or false if there is no parent class * Returns a parent class.
* *
* @param array|object|string $source An array of objects, namespaces, object or namespace * @param array|object|string $source An array of objects, namespaces, object or namespace
* @return ReflectionClass|bool *
* @return ReflectionClass
*/ */
public static function getParentClass($source) public static function getParentClass($source)
{ {
@@ -492,7 +473,9 @@ class Reflection
* *
* @param array|object|string $class Class who child classes should be returned. An array of objects, strings, * @param array|object|string $class Class who child classes should be returned. An array of objects, strings,
* object or string. * object or string.
*
* @return array|null * @return array|null
*
* @throws CannotResolveClassNameException * @throws CannotResolveClassNameException
*/ */
public static function getChildClasses($class) public static function getChildClasses($class)
@@ -512,7 +495,7 @@ class Reflection
/* /*
* Oops, cannot resolve class * Oops, cannot resolve class
*/ */
if (null === $className) { if ($className === null) {
throw new CannotResolveClassNameException($class); throw new CannotResolveClassNameException($class);
} }
@@ -547,6 +530,7 @@ class Reflection
* *
* @param array|object|string $parentClass Class who child class should be returned. An array of objects, * @param array|object|string $parentClass Class who child class should be returned. An array of objects,
* namespaces, object or namespace. * namespaces, object or namespace.
*
* @return mixed * @return mixed
* *
* @throws MissingChildClassesException * @throws MissingChildClassesException
@@ -576,12 +560,13 @@ class Reflection
} }
/** /**
* Returns property, the ReflectionProperty instance, of given object * Returns property, the ReflectionProperty instance, of given object.
* *
* @param array|object|string $class An array of objects, namespaces, object or namespace * @param array|object|string $class An array of objects, namespaces, object or namespace
* @param string $property Name of the property * @param string $property Name of the property
* @param int $filter (optional) Filter of properties. Uses ReflectionProperty class constants. * @param int $filter (optional) Filter of properties. Uses ReflectionProperty class constants.
* By default all properties are allowed / processed. * By default all properties are allowed / processed.
*
* @return null|ReflectionProperty * @return null|ReflectionProperty
*/ */
public static function getProperty($class, $property, $filter = null) public static function getProperty($class, $property, $filter = null)
@@ -602,13 +587,15 @@ class Reflection
} }
/** /**
* Returns information if given class / object uses / implements given trait * Returns information if given class / object uses / implements given trait.
* *
* @param array|object|string $class An array of objects, namespaces, object or namespace * @param array|object|string $class An array of objects, namespaces, object or namespace
* @param array|string $trait An array of strings or string * @param array|string $trait An array of strings or string
* @param bool $verifyParents If is set to true, parent classes are verified if they use given * @param bool $verifyParents If is set to true, parent classes are verified if they use given
* trait. Otherwise - not. * trait. Otherwise - not.
*
* @return bool|null * @return bool|null
*
* @throws CannotResolveClassNameException * @throws CannotResolveClassNameException
*/ */
public static function usesTrait($class, $trait, $verifyParents = false) public static function usesTrait($class, $trait, $verifyParents = false)
@@ -638,7 +625,7 @@ class Reflection
if (!$uses && $verifyParents) { if (!$uses && $verifyParents) {
$parentClassName = self::getParentClassName($className); $parentClassName = self::getParentClassName($className);
if (null !== $parentClassName) { if ($parentClassName !== null) {
return self::usesTrait($parentClassName, $trait, true); return self::usesTrait($parentClassName, $trait, true);
} }
} }
@@ -651,6 +638,7 @@ class Reflection
* If given class does not extend another, returns null. * If given class does not extend another, returns null.
* *
* @param array|object|string $class An array of objects, namespaces, object or namespace * @param array|object|string $class An array of objects, namespaces, object or namespace
*
* @return string|null * @return string|null
*/ */
public static function getParentClassName($class) public static function getParentClassName($class)
@@ -659,7 +647,7 @@ class Reflection
$reflection = new ReflectionClass($className); $reflection = new ReflectionClass($className);
$parentClass = $reflection->getParentClass(); $parentClass = $reflection->getParentClass();
if (null === $parentClass || false === $parentClass) { if ($parentClass === null || $parentClass === false) {
return null; return null;
} }

View File

@@ -12,37 +12,38 @@ use Meritoo\Common\Exception\Regex\IncorrectColorHexLengthException;
use Meritoo\Common\Exception\Regex\InvalidColorHexValueException; use Meritoo\Common\Exception\Regex\InvalidColorHexValueException;
/** /**
* Useful regular expressions methods * Useful regular expressions methods.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class Regex class Regex
{ {
/** /**
* Patterns used to validate / verify values * Patterns used to validate / verify values.
* *
* @var array * @var array
*/ */
private static $patterns = [ private static $patterns = [
'email' => '/[\w-]{2,}@[\w-]+\.[\w]{2,}+/', 'email' => '/[\w-]{2,}@[\w-]+\.[\w]{2,}+/',
'phone' => '/^\+?[0-9 ]+$/', 'phone' => '/^\+?[0-9 ]+$/',
'camelCasePart' => '/([a-z]|[A-Z]){1}[a-z]*/', 'camelCasePart' => '/([a-z]|[A-Z]){1}[a-z]*/',
'urlProtocol' => '/^([a-z]+:\/\/)', 'urlProtocol' => '/^([a-z]+:\/\/)',
'urlDomain' => '([\da-z\.-]+)\.([a-z\.]{2,6})(\/)?([\w\.\-]*)?(\?)?([\w \.\-\/=&]*)\/?$/i', 'urlDomain' => '([\da-z\.-]+)\.([a-z\.]{2,6})(\/)?([\w\.\-]*)?(\?)?([\w \.\-\/=&]*)\/?$/i',
'letterOrDigit' => '/[a-zA-Z0-9]+/', 'letterOrDigit' => '/[a-zA-Z0-9]+/',
'htmlEntity' => '/&[a-z0-9]+;/', 'htmlEntity' => '/&[a-z0-9]+;/',
'fileName' => '/.+\.\w+$/', 'fileName' => '/.+\.\w+$/',
'isQuoted' => '/^[\'"]{1}.+[\'"]{1}$/', 'isQuoted' => '/^[\'"]{1}.+[\'"]{1}$/',
'windowsBasedPath' => '/^[A-Z]{1}:\\\.*$/', 'windowsBasedPath' => '/^[A-Z]{1}:\\\.*$/',
'money' => '/^[-+]?\d+([\.,]{1}\d*)?$/', 'money' => '/^[-+]?\d+([\.,]{1}\d*)?$/',
'color' => '/^[a-f0-9]{6}$/i', 'color' => '/^[a-f0-9]{6}$/i',
]; ];
/** /**
* Returns information if given e-mail address is valid * Returns information if given e-mail address is valid.
* *
* @param string $email E-mail address to validate / verify * @param string $email E-mail address to validate / verify
*
* @return bool * @return bool
* *
* Examples: * Examples:
@@ -58,13 +59,14 @@ class Regex
{ {
$pattern = self::getEmailPattern(); $pattern = self::getEmailPattern();
return (bool)preg_match($pattern, $email); return (bool) preg_match($pattern, $email);
} }
/** /**
* Returns information if given tax ID (in polish: NIP) is valid * Returns information if given tax ID (in polish: NIP) is valid.
* *
* @param string $taxidString Tax ID (NIP) string * @param string $taxidString Tax ID (NIP) string
*
* @return bool * @return bool
*/ */
public static function isValidTaxid($taxidString) public static function isValidTaxid($taxidString)
@@ -84,7 +86,7 @@ class Regex
$taxid = preg_replace('/[\s-]/', '', $taxidString); $taxid = preg_replace('/[\s-]/', '', $taxidString);
$sum = 0; $sum = 0;
if (10 == strlen($taxid) && is_numeric($taxid)) { if (strlen($taxid) == 10 && is_numeric($taxid)) {
for ($x = 0; $x <= 8; ++$x) { for ($x = 0; $x <= 8; ++$x) {
$sum += $taxid[$x] * $weights[$x]; $sum += $taxid[$x] * $weights[$x];
} }
@@ -99,40 +101,43 @@ class Regex
} }
/** /**
* Returns information if given url address is valid * Returns information if given url address is valid.
* *
* @param string $url The url to validate / verify * @param string $url The url to validate / verify
* @param bool $requireProtocol (optional) If is set to true, the protocol is required to be passed in the url. * @param bool $requireProtocol (optional) If is set to true, the protocol is required to be passed in the url.
* Otherwise - not. * Otherwise - not.
*
* @return bool * @return bool
*/ */
public static function isValidUrl($url, $requireProtocol = false) public static function isValidUrl($url, $requireProtocol = false)
{ {
$pattern = self::getUrlPattern($requireProtocol); $pattern = self::getUrlPattern($requireProtocol);
return (bool)preg_match($pattern, $url); return (bool) preg_match($pattern, $url);
} }
/** /**
* Returns information if given phone number is valid * Returns information if given phone number is valid.
* *
* @param string $phoneNumber The phone number to validate / verify * @param string $phoneNumber The phone number to validate / verify
*
* @return bool * @return bool
*/ */
public static function isValidPhoneNumber($phoneNumber) public static function isValidPhoneNumber($phoneNumber)
{ {
$pattern = self::getPhoneNumberPattern(); $pattern = self::getPhoneNumberPattern();
return (bool)preg_match($pattern, $phoneNumber); return (bool) preg_match($pattern, $phoneNumber);
} }
/** /**
* Returns array values that matches given pattern (or values that keys matches) * Returns array values that matches given pattern (or values that keys matches).
* *
* @param string $pattern Pattern to match * @param string $pattern Pattern to match
* @param array $dataArray The array * @param array $dataArray The array
* @param bool $itsKeyPattern (optional) If is set to true, keys are checks if they match pattern. Otherwise - * @param bool $itsKeyPattern (optional) If is set to true, keys are checks if they match pattern. Otherwise -
* values are checks. * values are checks.
*
* @return array * @return array
*/ */
public static function getArrayValuesByPattern($pattern, $dataArray, $itsKeyPattern = false) public static function getArrayValuesByPattern($pattern, $dataArray, $itsKeyPattern = false)
@@ -157,7 +162,7 @@ class Regex
} }
/** /**
* Filters array by given expression and column * Filters array by given expression and column.
* *
* Expression can be simple compare expression, like ' == 2', or regular expression. * Expression can be simple compare expression, like ' == 2', or regular expression.
* Returns filtered array. * Returns filtered array.
@@ -167,6 +172,7 @@ class Regex
* @param string $filterExpression Filter expression, e.g. '== 2' or '!= \'home\'' * @param string $filterExpression Filter expression, e.g. '== 2' or '!= \'home\''
* @param bool $itsRegularExpression (optional) If is set to true, means that filter expression is a * @param bool $itsRegularExpression (optional) If is set to true, means that filter expression is a
* regular expression * regular expression
*
* @return array * @return array
*/ */
public static function arrayFilter($array, $arrayColumnKey, $filterExpression, $itsRegularExpression = false) public static function arrayFilter($array, $arrayColumnKey, $filterExpression, $itsRegularExpression = false)
@@ -182,18 +188,18 @@ class Regex
if ($itsRegularExpression) { if ($itsRegularExpression) {
$matches = []; $matches = [];
$pattern = '|' . $filterExpression . '|'; $pattern = '|'.$filterExpression.'|';
$matchesCount = preg_match($pattern, $value, $matches); $matchesCount = preg_match($pattern, $value, $matches);
$remove = 0 == $matchesCount; $remove = $matchesCount == 0;
} else { } else {
if ('' == $value) { if ($value == '') {
$value = '\'\''; $value = '\'\'';
} elseif (is_string($value)) { } elseif (is_string($value)) {
$value = '\'' . $value . '\''; $value = '\''.$value.'\'';
} }
eval('$isTrue = ' . $value . $filterExpression . ';'); eval('$isTrue = '.$value.$filterExpression.';');
/* @var bool $isTrue */ /* @var bool $isTrue */
$remove = !$isTrue; $remove = !$isTrue;
@@ -217,6 +223,7 @@ class Regex
* @param string $subject The string to check * @param string $subject The string to check
* @param bool $mustAllMatch (optional) If is set to true, $subject must match all $patterns. Otherwise - * @param bool $mustAllMatch (optional) If is set to true, $subject must match all $patterns. Otherwise -
* not. * not.
*
* @return bool * @return bool
*/ */
public static function pregMultiMatch($patterns, $subject, $mustAllMatch = false) public static function pregMultiMatch($patterns, $subject, $mustAllMatch = false)
@@ -231,13 +238,14 @@ class Regex
foreach ($patterns as $pattern) { foreach ($patterns as $pattern) {
$matches = []; $matches = [];
$matched = (bool)preg_match_all($pattern, $subject, $matches); $matched = (bool) preg_match_all($pattern, $subject, $matches);
if ($mustAllMatch) { if ($mustAllMatch) {
$effect = $effect && $matched; $effect = $effect && $matched;
} else { } else {
if ($matched) { if ($matched) {
$effect = $matched; $effect = $matched;
break; break;
} }
} }
@@ -248,11 +256,12 @@ class Regex
} }
/** /**
* Returns string in human readable style generated from given camel case string / text * Returns string in human readable style generated from given camel case string / text.
* *
* @param string $string The string / text to convert * @param string $string The string / text to convert
* @param bool $applyUpperCaseFirst (optional) If is set to true, first word / element from the converted * @param bool $applyUpperCaseFirst (optional) If is set to true, first word / element from the converted
* string is uppercased. Otherwise - not. * string is uppercased. Otherwise - not.
*
* @return string * @return string
*/ */
public static function camelCase2humanReadable($string, $applyUpperCaseFirst = false) public static function camelCase2humanReadable($string, $applyUpperCaseFirst = false)
@@ -277,9 +286,10 @@ class Regex
} }
/** /**
* Returns parts of given camel case string / text * Returns parts of given camel case string / text.
* *
* @param string $string The string / text to retrieve parts * @param string $string The string / text to retrieve parts
*
* @return array * @return array
*/ */
public static function getCamelCaseParts($string) public static function getCamelCaseParts($string)
@@ -292,11 +302,12 @@ class Regex
} }
/** /**
* Returns simple, lowercase string generated from given camel case string / text * Returns simple, lowercase string generated from given camel case string / text.
* *
* @param string $string The string / text to convert * @param string $string The string / text to convert
* @param string $separator (optional) Separator used to concatenate parts of the string, e.g. '-' or '_' * @param string $separator (optional) Separator used to concatenate parts of the string, e.g. '-' or '_'
* @param bool $applyLowercase (optional) If is set to true, returned string will be lowercased. Otherwise - not. * @param bool $applyLowercase (optional) If is set to true, returned string will be lowercased. Otherwise - not.
*
* @return string * @return string
*/ */
public static function camelCase2simpleLowercase($string, $separator = '', $applyLowercase = true) public static function camelCase2simpleLowercase($string, $separator = '', $applyLowercase = true)
@@ -315,7 +326,7 @@ class Regex
} }
/** /**
* Returns pattern used to validate / verify or get e-mail address * Returns pattern used to validate / verify or get e-mail address.
* *
* @return string * @return string
*/ */
@@ -325,7 +336,7 @@ class Regex
} }
/** /**
* Returns pattern used to validate / verify or get phone number * Returns pattern used to validate / verify or get phone number.
* *
* @return string * @return string
*/ */
@@ -335,7 +346,7 @@ class Regex
} }
/** /**
* Returns pattern used to validate / verify or get camel case parts of string * Returns pattern used to validate / verify or get camel case parts of string.
* *
* @return string * @return string
*/ */
@@ -345,10 +356,11 @@ class Regex
} }
/** /**
* Returns pattern used to validate / verify or get url address * Returns pattern used to validate / verify or get url address.
* *
* @param bool $requireProtocol (optional) If is set to true, the protocol is required to be passed in the url. * @param bool $requireProtocol (optional) If is set to true, the protocol is required to be passed in the url.
* Otherwise - not. * Otherwise - not.
*
* @return string * @return string
*/ */
public static function getUrlPattern($requireProtocol = false) public static function getUrlPattern($requireProtocol = false)
@@ -365,10 +377,11 @@ class Regex
} }
/** /**
* Returns information if given path is sub-path of another path, e.g. path file is owned by path of directory * Returns information if given path is sub-path of another path, e.g. path file is owned by path of directory.
* *
* @param string $subPath Path to verify, probably sub-path * @param string $subPath Path to verify, probably sub-path
* @param string $path Main / parent path * @param string $path Main / parent path
*
* @return bool * @return bool
*/ */
public static function isSubPathOf($subPath, $path) public static function isSubPathOf($subPath, $path)
@@ -395,11 +408,11 @@ class Regex
$pattern = sprintf('/^%s.*/', $prepared); $pattern = sprintf('/^%s.*/', $prepared);
return (bool)preg_match($pattern, $subPath); return (bool) preg_match($pattern, $subPath);
} }
/** /**
* Returns pattern used to validate / verify letter or digit * Returns pattern used to validate / verify letter or digit.
* *
* @return string * @return string
*/ */
@@ -409,62 +422,66 @@ class Regex
} }
/** /**
* Returns information if given character is a letter or digit * Returns information if given character is a letter or digit.
* *
* @param string $char Character to check * @param string $char Character to check
*
* @return bool * @return bool
*/ */
public static function isLetterOrDigit($char) public static function isLetterOrDigit($char)
{ {
$pattern = self::getLetterOrDigitPattern(); $pattern = self::getLetterOrDigitPattern();
return is_scalar($char) && (bool)preg_match($pattern, $char); return is_scalar($char) && (bool) preg_match($pattern, $char);
} }
/** /**
* Returns information if the string starts with given beginning / characters * Returns information if the string starts with given beginning / characters.
* *
* @param string $string String to check * @param string $string String to check
* @param string $beginning The beginning of string, one or more characters * @param string $beginning The beginning of string, one or more characters
*
* @return bool * @return bool
*/ */
public static function startsWith($string, $beginning) public static function startsWith($string, $beginning)
{ {
if (!empty($string) && !empty($beginning)) { if (!empty($string) && !empty($beginning)) {
if (1 == strlen($beginning) && !self::isLetterOrDigit($beginning)) { if (strlen($beginning) == 1 && !self::isLetterOrDigit($beginning)) {
$beginning = '\\' . $beginning; $beginning = '\\'.$beginning;
} }
$pattern = sprintf('|^%s|', $beginning); $pattern = sprintf('|^%s|', $beginning);
return (bool)preg_match($pattern, $string); return (bool) preg_match($pattern, $string);
} }
return false; return false;
} }
/** /**
* Returns information if the string ends with given ending / characters * Returns information if the string ends with given ending / characters.
* *
* @param string $string String to check * @param string $string String to check
* @param string $ending The ending of string, one or more characters * @param string $ending The ending of string, one or more characters
*
* @return bool * @return bool
*/ */
public static function endsWith($string, $ending) public static function endsWith($string, $ending)
{ {
if (1 == strlen($ending) && !self::isLetterOrDigit($ending)) { if (strlen($ending) == 1 && !self::isLetterOrDigit($ending)) {
$ending = '\\' . $ending; $ending = '\\'.$ending;
} }
return (bool)preg_match('|' . $ending . '$|', $string); return (bool) preg_match('|'.$ending.'$|', $string);
} }
/** /**
* Returns information if the string starts with directory's separator * Returns information if the string starts with directory's separator.
* *
* @param string $string String that may contain a directory's separator at the start / beginning * @param string $string String that may contain a directory's separator at the start / beginning
* @param string $separator (optional) The directory's separator, e.g. "/". If is empty (not provided), system's * @param string $separator (optional) The directory's separator, e.g. "/". If is empty (not provided), system's
* separator is used. * separator is used.
*
* @return bool * @return bool
*/ */
public static function startsWithDirectorySeparator($string, $separator = '') public static function startsWithDirectorySeparator($string, $separator = '')
@@ -477,11 +494,12 @@ class Regex
} }
/** /**
* Returns information if the string ends with directory's separator * Returns information if the string ends with directory's separator.
* *
* @param string $text String that may contain a directory's separator at the end * @param string $text String that may contain a directory's separator at the end
* @param string $separator (optional) The directory's separator, e.g. "/". If is empty (not provided), system's * @param string $separator (optional) The directory's separator, e.g. "/". If is empty (not provided), system's
* separator is used. * separator is used.
*
* @return string * @return string
*/ */
public static function endsWithDirectorySeparator($text, $separator = '') public static function endsWithDirectorySeparator($text, $separator = '')
@@ -494,19 +512,20 @@ class Regex
} }
/** /**
* Returns information if uri contains parameter * Returns information if uri contains parameter.
* *
* @param string $uri Uri string (e.g. $_SERVER['REQUEST_URI']) * @param string $uri Uri string (e.g. $_SERVER['REQUEST_URI'])
* @param string $parameterName Uri parameter name * @param string $parameterName Uri parameter name
*
* @return bool * @return bool
*/ */
public static function isSetUriParameter($uri, $parameterName) public static function isSetUriParameter($uri, $parameterName)
{ {
return (bool)preg_match('|[?&]{1}' . $parameterName . '=|', $uri); // e.g. ?name=phil&type=4 -> '$type=' return (bool) preg_match('|[?&]{1}'.$parameterName.'=|', $uri); // e.g. ?name=phil&type=4 -> '$type='
} }
/** /**
* Returns pattern used to validate / verify html entity * Returns pattern used to validate / verify html entity.
* *
* @return string * @return string
*/ */
@@ -516,36 +535,38 @@ class Regex
} }
/** /**
* Returns information if the string contains html entities * Returns information if the string contains html entities.
* *
* @param string $string String to check * @param string $string String to check
*
* @return bool * @return bool
*/ */
public static function containsEntities($string) public static function containsEntities($string)
{ {
$pattern = self::getHtmlEntityPattern(); $pattern = self::getHtmlEntityPattern();
return (bool)preg_match_all($pattern, $string); return (bool) preg_match_all($pattern, $string);
} }
/** /**
* Returns information if one string contains another string * Returns information if one string contains another string.
* *
* @param string $haystack The string to search in * @param string $haystack The string to search in
* @param string $needle The string to be search for * @param string $needle The string to be search for
*
* @return bool * @return bool
*/ */
public static function contains($haystack, $needle) public static function contains($haystack, $needle)
{ {
if (1 == strlen($needle) && !self::isLetterOrDigit($needle)) { if (strlen($needle) == 1 && !self::isLetterOrDigit($needle)) {
$needle = '\\' . $needle; $needle = '\\'.$needle;
} }
return (bool)preg_match('|.*' . $needle . '.*|', $haystack); return (bool) preg_match('|.*'.$needle.'.*|', $haystack);
} }
/** /**
* Returns pattern used to validate / verify name of file * Returns pattern used to validate / verify name of file.
* *
* @return string * @return string
*/ */
@@ -559,17 +580,18 @@ class Regex
* Verifies if given name contains a dot and an extension, e.g. "My File 001.jpg". * Verifies if given name contains a dot and an extension, e.g. "My File 001.jpg".
* *
* @param string $fileName Name of file to check. It may be path of file also. * @param string $fileName Name of file to check. It may be path of file also.
*
* @return bool * @return bool
*/ */
public static function isFileName($fileName) public static function isFileName($fileName)
{ {
$pattern = self::getFileNamePattern(); $pattern = self::getFileNamePattern();
return (bool)preg_match($pattern, $fileName); return (bool) preg_match($pattern, $fileName);
} }
/** /**
* Returns pattern used to validate / verify if value is quoted (by apostrophes or quotation marks) * Returns pattern used to validate / verify if value is quoted (by apostrophes or quotation marks).
* *
* @return string * @return string
*/ */
@@ -579,20 +601,21 @@ class Regex
} }
/** /**
* Returns information if given value is quoted (by apostrophes or quotation marks) * Returns information if given value is quoted (by apostrophes or quotation marks).
* *
* @param mixed $value The value to check * @param mixed $value The value to check
*
* @return bool * @return bool
*/ */
public static function isQuoted($value) public static function isQuoted($value)
{ {
$pattern = self::getIsQuotedPattern(); $pattern = self::getIsQuotedPattern();
return is_scalar($value) && (bool)preg_match($pattern, $value); return is_scalar($value) && (bool) preg_match($pattern, $value);
} }
/** /**
* Returns pattern used to validate / verify if given path is a Windows-based path, e.g. "C:\path\to\file.jpg" * Returns pattern used to validate / verify if given path is a Windows-based path, e.g. "C:\path\to\file.jpg".
* *
* @return string * @return string
*/ */
@@ -602,22 +625,24 @@ class Regex
} }
/** /**
* Returns information if given path is a Windows-based path, e.g. "C:\path\to\file.jpg" * Returns information if given path is a Windows-based path, e.g. "C:\path\to\file.jpg".
* *
* @param string $path The path to verify * @param string $path The path to verify
*
* @return bool * @return bool
*/ */
public static function isWindowsBasedPath($path) public static function isWindowsBasedPath($path)
{ {
$pattern = self::getWindowsBasedPathPattern(); $pattern = self::getWindowsBasedPathPattern();
return (bool)preg_match($pattern, $path); return (bool) preg_match($pattern, $path);
} }
/** /**
* Returns information if given NIP number is valid * Returns information if given NIP number is valid.
* *
* @param string $nip A given NIP number * @param string $nip A given NIP number
*
* @return bool * @return bool
* *
* @see https://pl.wikipedia.org/wiki/NIP#Znaczenie_numeru * @see https://pl.wikipedia.org/wiki/NIP#Znaczenie_numeru
@@ -653,13 +678,13 @@ class Regex
} }
$modulo = $sum % 11; $modulo = $sum % 11;
$numberControl = (10 == $modulo) ? 0 : $modulo; $numberControl = ($modulo == 10) ? 0 : $modulo;
return $numberControl == $nip[9]; return $numberControl == $nip[9];
} }
/** /**
* Returns pattern used to validate / verify if given value is money-related value * Returns pattern used to validate / verify if given value is money-related value.
* *
* @return string * @return string
*/ */
@@ -669,16 +694,17 @@ class Regex
} }
/** /**
* Returns information if given value is valid money-related value * Returns information if given value is valid money-related value.
* *
* @param mixed $value Value to verify * @param mixed $value Value to verify
*
* @return bool * @return bool
*/ */
public static function isValidMoneyValue($value) public static function isValidMoneyValue($value)
{ {
$pattern = self::getMoneyPattern(); $pattern = self::getMoneyPattern();
return (bool)preg_match($pattern, $value); return (bool) preg_match($pattern, $value);
} }
/** /**
@@ -688,6 +714,7 @@ class Regex
* @param string $color Color to verify * @param string $color Color to verify
* @param bool $throwException (optional) If is set to true, throws an exception if given color is invalid * @param bool $throwException (optional) If is set to true, throws an exception if given color is invalid
* (default behaviour). Otherwise - not. * (default behaviour). Otherwise - not.
*
* @return string|bool * @return string|bool
* *
* @throws IncorrectColorHexLengthException * @throws IncorrectColorHexLengthException
@@ -698,10 +725,10 @@ class Regex
$color = Miscellaneous::replace($color, '/#/', ''); $color = Miscellaneous::replace($color, '/#/', '');
$length = strlen($color); $length = strlen($color);
if (3 === $length) { if ($length === 3) {
$color = Miscellaneous::replace($color, '/(.)(.)(.)/', '$1$1$2$2$3$3'); $color = Miscellaneous::replace($color, '/(.)(.)(.)/', '$1$1$2$2$3$3');
} else { } else {
if (6 !== $length) { if ($length !== 6) {
if ($throwException) { if ($throwException) {
throw new IncorrectColorHexLengthException($color); throw new IncorrectColorHexLengthException($color);
} }
@@ -711,7 +738,7 @@ class Regex
} }
$pattern = self::$patterns['color']; $pattern = self::$patterns['color'];
$match = (bool)preg_match($pattern, $color); $match = (bool) preg_match($pattern, $color);
if (!$match) { if (!$match) {
if ($throwException) { if ($throwException) {

View File

@@ -12,15 +12,15 @@ use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
/** /**
* Useful methods for repository * Useful methods for repository.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class Repository class Repository
{ {
/** /**
* Replenishes positions of given items * Replenishes positions of given items.
* *
* @param array $items The items * @param array $items The items
* @param bool $asLast (optional) If is set to true, items are placed at the end. Otherwise - at the top. * @param bool $asLast (optional) If is set to true, items are placed at the end. Otherwise - at the top.
@@ -31,14 +31,14 @@ class Repository
{ {
$position = self::getExtremePosition($items, $asLast); $position = self::getExtremePosition($items, $asLast);
if (null === $position && $force) { if ($position === null && $force) {
$position = 0; $position = 0;
} }
if (null !== $position && !empty($items)) { if ($position !== null && !empty($items)) {
foreach ($items as $item) { foreach ($items as $item) {
if (method_exists($item, 'getPosition')) { if (method_exists($item, 'getPosition')) {
if (null === $item->getPosition()) { if ($item->getPosition() === null) {
if ($asLast) { if ($asLast) {
++$position; ++$position;
} else { } else {
@@ -55,10 +55,11 @@ class Repository
} }
/** /**
* Returns extreme position (max or min) of given items * Returns extreme position (max or min) of given items.
* *
* @param array $items The items * @param array $items The items
* @param bool $max (optional) If is set to true, maximum value is returned. Otherwise - minimum. * @param bool $max (optional) If is set to true, maximum value is returned. Otherwise - minimum.
*
* @return int * @return int
*/ */
public static function getExtremePosition($items, $max = true) public static function getExtremePosition($items, $max = true)
@@ -93,6 +94,7 @@ class Repository
* @param EntityRepository $repository Repository of the entity * @param EntityRepository $repository Repository of the entity
* @param string $property (optional) Name of property used by the ORDER BY clause * @param string $property (optional) Name of property used by the ORDER BY clause
* @param string $direction (optional) Direction used by the ORDER BY clause ("ASC" or "DESC") * @param string $direction (optional) Direction used by the ORDER BY clause ("ASC" or "DESC")
*
* @return QueryBuilder * @return QueryBuilder
*/ */
public static function getEntityOrderedQueryBuilder( public static function getEntityOrderedQueryBuilder(

View File

@@ -9,17 +9,18 @@
namespace Meritoo\Common\Utilities; namespace Meritoo\Common\Utilities;
/** /**
* Useful uri methods (only static functions) * Useful uri methods (only static functions).
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class Uri class Uri
{ {
/** /**
* Returns full uri string * Returns full uri string.
* *
* @param bool $withoutHost (optional) If is set to true, means that host / server name is omitted * @param bool $withoutHost (optional) If is set to true, means that host / server name is omitted
*
* @return string * @return string
*/ */
public static function getFullUri($withoutHost = false) public static function getFullUri($withoutHost = false)
@@ -30,13 +31,14 @@ class Uri
return $effect; return $effect;
} }
return self::getServerNameOrIp(true) . $effect; return self::getServerNameOrIp(true).$effect;
} }
/** /**
* Returns server name or IP address * Returns server name or IP address.
* *
* @param bool $withProtocol (optional) If is set to true, protocol name is included. Otherwise isn't. * @param bool $withProtocol (optional) If is set to true, protocol name is included. Otherwise isn't.
*
* @return string * @return string
*/ */
public static function getServerNameOrIp($withProtocol = false) public static function getServerNameOrIp($withProtocol = false)
@@ -44,14 +46,14 @@ class Uri
$protocol = ''; $protocol = '';
if ($withProtocol) { if ($withProtocol) {
$protocol .= self::getProtocolName() . '://'; $protocol .= self::getProtocolName().'://';
} }
return $protocol . Miscellaneous::getSafelyGlobalVariable(INPUT_SERVER, 'HTTP_HOST'); return $protocol.Miscellaneous::getSafelyGlobalVariable(INPUT_SERVER, 'HTTP_HOST');
} }
/** /**
* Returns protocol name * Returns protocol name.
* *
* @return string * @return string
*/ */
@@ -76,7 +78,7 @@ class Uri
} }
/** /**
* Returns http referer uri * Returns http referer uri.
* *
* @return string * @return string
*/ */
@@ -92,7 +94,7 @@ class Uri
} }
/** /**
* Returns user's IP address * Returns user's IP address.
* *
* @return string * @return string
*/ */
@@ -102,10 +104,11 @@ class Uri
} }
/** /**
* Returns name and version of user's web browser * Returns name and version of user's web browser.
* *
* @param bool $withVersion (optional) If is set to true, version of the browser is returned too. Otherwise - * @param bool $withVersion (optional) If is set to true, version of the browser is returned too. Otherwise -
* name only. * name only.
*
* @return string * @return string
*/ */
public static function getUserWebBrowserName($withVersion = false) public static function getUserWebBrowserName($withVersion = false)
@@ -114,9 +117,9 @@ class Uri
$knownBrowsers = [ $knownBrowsers = [
'Firefox/([\d\.]+)$' => 'Mozilla Firefox', 'Firefox/([\d\.]+)$' => 'Mozilla Firefox',
'OPR/([\d\.]+)$' => 'Opera', 'OPR/([\d\.]+)$' => 'Opera',
'Chrome/([\d\.]+)$' => 'Google Chrome', 'Chrome/([\d\.]+)$' => 'Google Chrome',
'Safari/([\d\.]+)$' => 'Apple Safari', 'Safari/([\d\.]+)$' => 'Apple Safari',
]; ];
foreach ($knownBrowsers as $pattern => $browserName) { foreach ($knownBrowsers as $pattern => $browserName) {
@@ -138,7 +141,7 @@ class Uri
} }
/** /**
* Returns user's web browser information * Returns user's web browser information.
* *
* @return string * @return string
* *
@@ -164,7 +167,7 @@ class Uri
} }
/** /**
* Returns name of user's operating system * Returns name of user's operating system.
* *
* @return string * @return string
*/ */
@@ -174,8 +177,8 @@ class Uri
$knownSystems = [ $knownSystems = [
'Linux' => 'Linux', 'Linux' => 'Linux',
'Win' => 'Windows', 'Win' => 'Windows',
'Mac' => 'Mac OS', 'Mac' => 'Mac OS',
]; ];
foreach ($knownSystems as $pattern => $systemName) { foreach ($knownSystems as $pattern => $systemName) {
@@ -191,7 +194,7 @@ class Uri
} }
/** /**
* Returns information if running server is localhost * Returns information if running server is localhost.
* *
* @return bool * @return bool
*/ */
@@ -207,9 +210,10 @@ class Uri
} }
/** /**
* Returns information if given url is external, from another server / domain * Returns information if given url is external, from another server / domain.
* *
* @param string $url The url to check * @param string $url The url to check
*
* @return bool * @return bool
*/ */
public static function isExternalUrl($url) public static function isExternalUrl($url)
@@ -221,11 +225,12 @@ class Uri
} }
/** /**
* Replenishes protocol in the given url * Replenishes protocol in the given url.
* *
* @param string $url The url to check and replenish * @param string $url The url to check and replenish
* @param string $protocol (optional) The protocol which is replenished. If is empty, protocol of current request * @param string $protocol (optional) The protocol which is replenished. If is empty, protocol of current request
* is used. * is used.
*
* @return string * @return string
*/ */
public static function replenishProtocol($url, $protocol = '') public static function replenishProtocol($url, $protocol = '')
@@ -264,11 +269,12 @@ class Uri
} }
/** /**
* Returns url to resource secured by given htpasswd login and password * Returns url to resource secured by given htpasswd login and password.
* *
* @param string $url A path / url to some resource, e.g. page, image, css file * @param string $url A path / url to some resource, e.g. page, image, css file
* @param string $user (optional) User name used to log in * @param string $user (optional) User name used to log in
* @param string $password (optional) User password used to log in * @param string $password (optional) User password used to log in
*
* @return string * @return string
*/ */
public static function getSecuredUrl($url, $user = '', $password = '') public static function getSecuredUrl($url, $user = '', $password = '')
@@ -280,7 +286,7 @@ class Uri
$url = sprintf('/%s', $url); $url = sprintf('/%s', $url);
} }
$url = $host . $url; $url = $host.$url;
if (!empty($user) && !empty($password)) { if (!empty($user) && !empty($password)) {
$url = sprintf('%s:%s@%s', $user, $password, $url); $url = sprintf('%s:%s@%s', $user, $password, $url);
@@ -295,13 +301,14 @@ class Uri
* *
* @param string $url Url string * @param string $url Url string
* @param string $protocol (optional) Protocol string * @param string $protocol (optional) Protocol string
*
* @return string * @return string
*/ */
public static function addProtocolToUrl($url, $protocol = 'http') public static function addProtocolToUrl($url, $protocol = 'http')
{ {
$pattern = sprintf('/^%s.*/', $protocol); $pattern = sprintf('/^%s.*/', $protocol);
if ((bool)preg_match($pattern, $url)) { if ((bool) preg_match($pattern, $url)) {
return $url; return $url;
} }

View File

@@ -13,10 +13,10 @@ use DOMXPath;
use SimpleXMLElement; use SimpleXMLElement;
/** /**
* Useful XML-related methods (only static functions) * Useful XML-related methods (only static functions).
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class Xml class Xml
{ {
@@ -26,6 +26,7 @@ class Xml
* *
* @param SimpleXMLElement $element1 First element to merge * @param SimpleXMLElement $element1 First element to merge
* @param SimpleXMLElement $element2 Second element to merge * @param SimpleXMLElement $element2 Second element to merge
*
* @return SimpleXMLElement * @return SimpleXMLElement
*/ */
public static function mergeNodes(SimpleXMLElement $element1, SimpleXMLElement $element2) public static function mergeNodes(SimpleXMLElement $element1, SimpleXMLElement $element2)
@@ -40,7 +41,7 @@ class Xml
$query = $path->query('/*/*'); $query = $path->query('/*/*');
$nodesCount = $query->length; $nodesCount = $query->length;
if (0 == $nodesCount) { if ($nodesCount == 0) {
return $element1; return $element1;
} }

View File

@@ -1,816 +0,0 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Utilities;
/**
* Useful methods for mime types of files
*
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl
*/
class MimeTypes
{
/**
* Mime types data
*
* @var array
*/
private static $mimeTypes = [
'7z' => 'application/x-7z-compressed',
'ez' => 'application/andrew-inset',
'atom' => 'application/atom+xml',
'atomcat' => 'application/atomcat+xml',
'atomsvc' => 'application/atomsvc+xml',
'ccxml' => 'application/ccxml+xml',
'davmount' => 'application/davmount+xml',
'ecma' => 'application/ecmascript',
'pfr' => 'application/font-tdpfr',
'stk' => 'application/hyperstudio',
'js' => 'application/javascript',
'json' => 'application/json',
'hqx' => 'application/mac-binhex40',
'cpt' => 'application/mac-compactpro',
'mrc' => 'application/marc',
'ma' => 'application/mathematica',
'nb' => 'application/mathematica',
'mb' => 'application/mathematica',
'mathml' => 'application/mathml+xml',
'mbox' => 'application/mbox',
'mscml' => 'application/mediaservercontrol+xml',
'mp4s' => 'application/mp4',
'dot' => 'application/msword',
'doc' => 'application/msword',
/*
* MS Office system file format MIME types
* http://technet.microsoft.com/en-us/library/ee309278%28office.12%29.aspx
*/
'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'mxf' => 'application/mxf',
'bin' => 'application/octet-stream',
'dms' => 'application/octet-stream',
'lha' => 'application/octet-stream',
'lzh' => 'application/octet-stream',
'class' => 'application/octet-stream',
'so' => 'application/octet-stream',
'iso' => 'application/octet-stream',
'dmg' => 'application/octet-stream',
'dist' => 'application/octet-stream',
'distz' => 'application/octet-stream',
'pkg' => 'application/octet-stream',
'bpk' => 'application/octet-stream',
'dump' => 'application/octet-stream',
'elc' => 'application/octet-stream',
'scpt' => 'application/octet-stream',
'oda' => 'application/oda',
'ogg' => 'application/ogg',
'pdf' => 'application/pdf',
'pgp' => 'application/pgp-encrypted',
'asc' => 'application/pgp-signature',
'sig' => 'application/pgp-signature',
'prf' => 'application/pics-rules',
'p10' => 'application/pkcs10',
'p7m' => 'application/pkcs7-mime',
'p7c' => 'application/pkcs7-mime',
'p7s' => 'application/pkcs7-signature',
'cer' => 'application/pkix-cert',
'crl' => 'application/pkix-crl',
'pkipath' => 'application/pkix-pkipath',
'pki' => 'application/pkixcmp',
'pls' => 'application/pls+xml',
'ai' => 'application/postscript',
'eps' => 'application/postscript',
'ps' => 'application/postscript',
'cww' => 'application/prs.cww',
'rdf' => 'application/rdf+xml',
'rif' => 'application/reginfo+xml',
'rnc' => 'application/relax-ng-compact-syntax',
'rl' => 'application/resource-lists+xml',
'rs' => 'application/rls-services+xml',
'rsd' => 'application/rsd+xml',
'rss' => 'application/rss+xml',
'rtf' => 'application/rtf',
'sbml' => 'application/sbml+xml',
'sdp' => 'application/sdp',
'setpay' => 'application/set-payment-initiation',
'setreg' => 'application/set-registration-initiation',
'shf' => 'application/shf+xml',
'smi' => 'application/smil+xml',
'smil' => 'application/smil+xml',
'gram' => 'application/srgs',
'grxml' => 'application/srgs+xml',
'ssml' => 'application/ssml+xml',
'plb' => 'application/vnd.3gpp.pic-bw-large',
'psb' => 'application/vnd.3gpp.pic-bw-small',
'pvb' => 'application/vnd.3gpp.pic-bw-var',
'pwn' => 'application/vnd.3m.post-it-notes',
'aso' => 'application/vnd.accpac.simply.aso',
'imp' => 'application/vnd.accpac.simply.imp',
'acu' => 'application/vnd.acucobol',
'atc' => 'application/vnd.acucorp',
'acutc' => 'application/vnd.acucorp',
'xdp' => 'application/vnd.adobe.xdp+xml',
'xfdf' => 'application/vnd.adobe.xfdf',
'ami' => 'application/vnd.amiga.ami',
'cii' => 'application/vnd.anser-web-certificate-issue-initiation',
'fti' => 'application/vnd.anser-web-funds-transfer-initiation',
'atx' => 'application/vnd.antix.game-component',
'mpkg' => 'application/vnd.apple.installer+xml',
'aep' => 'application/vnd.audiograph',
'mpm' => 'application/vnd.blueice.multipass',
'bmi' => 'application/vnd.bmi',
'rep' => 'application/vnd.businessobjects',
'cdxml' => 'application/vnd.chemdraw+xml',
'mmd' => 'application/vnd.chipnuts.karaoke-mmd',
'cdy' => 'application/vnd.cinderella',
'cla' => 'application/vnd.claymore',
'c4g' => 'application/vnd.clonk.c4group',
'c4d' => 'application/vnd.clonk.c4group',
'c4f' => 'application/vnd.clonk.c4group',
'c4p' => 'application/vnd.clonk.c4group',
'c4u' => 'application/vnd.clonk.c4group',
'csp' => 'application/vnd.commonspace',
'cst' => 'application/vnd.commonspace',
'cdbcmsg' => 'application/vnd.contact.cmsg',
'cmc' => 'application/vnd.cosmocaller',
'clkx' => 'application/vnd.crick.clicker',
'clkk' => 'application/vnd.crick.clicker.keyboard',
'clkp' => 'application/vnd.crick.clicker.palette',
'clkt' => 'application/vnd.crick.clicker.template',
'clkw' => 'application/vnd.crick.clicker.wordbank',
'wbs' => 'application/vnd.criticaltools.wbs+xml',
'pml' => 'application/vnd.ctc-posml',
'ppd' => 'application/vnd.cups-ppd',
'curl' => 'application/vnd.curl',
'rdz' => 'application/vnd.data-vision.rdz',
'dna' => 'application/vnd.dna',
'mlp' => 'application/vnd.dolby.mlp',
'dpg' => 'application/vnd.dpgraph',
'dfac' => 'application/vnd.dreamfactory',
'mag' => 'application/vnd.ecowin.chart',
'nml' => 'application/vnd.enliven',
'esf' => 'application/vnd.epson.esf',
'msf' => 'application/vnd.epson.msf',
'qam' => 'application/vnd.epson.quickanime',
'slt' => 'application/vnd.epson.salt',
'ssf' => 'application/vnd.epson.ssf',
'es3' => 'application/vnd.eszigno3+xml',
'et3' => 'application/vnd.eszigno3+xml',
'ez2' => 'application/vnd.ezpix-album',
'ez3' => 'application/vnd.ezpix-package',
'fdf' => 'application/vnd.fdf',
'gph' => 'application/vnd.flographit',
'ftc' => 'application/vnd.fluxtime.clip',
'fm' => 'application/vnd.framemaker',
'frame' => 'application/vnd.framemaker',
'maker' => 'application/vnd.framemaker',
'fnc' => 'application/vnd.frogans.fnc',
'ltf' => 'application/vnd.frogans.ltf',
'fsc' => 'application/vnd.fsc.weblaunch',
'oas' => 'application/vnd.fujitsu.oasys',
'oa2' => 'application/vnd.fujitsu.oasys2',
'oa3' => 'application/vnd.fujitsu.oasys3',
'fg5' => 'application/vnd.fujitsu.oasysgp',
'bh2' => 'application/vnd.fujitsu.oasysprs',
'ddd' => 'application/vnd.fujixerox.ddd',
'xdw' => 'application/vnd.fujixerox.docuworks',
'xbd' => 'application/vnd.fujixerox.docuworks.binder',
'fzs' => 'application/vnd.fuzzysheet',
'txd' => 'application/vnd.genomatix.tuxedo',
'kml' => 'application/vnd.google-earth.kml+xml',
'kmz' => 'application/vnd.google-earth.kmz',
'gqf' => 'application/vnd.grafeq',
'gqs' => 'application/vnd.grafeq',
'gac' => 'application/vnd.groove-account',
'ghf' => 'application/vnd.groove-help',
'gim' => 'application/vnd.groove-identity-message',
'grv' => 'application/vnd.groove-injector',
'gtm' => 'application/vnd.groove-tool-message',
'tpl' => 'application/vnd.groove-tool-template',
'vcg' => 'application/vnd.groove-vcard',
'zmm' => 'application/vnd.handheld-entertainment+xml',
'hbci' => 'application/vnd.hbci',
'les' => 'application/vnd.hhe.lesson-player',
'hpgl' => 'application/vnd.hp-hpgl',
'hpid' => 'application/vnd.hp-hpid',
'hps' => 'application/vnd.hp-hps',
'jlt' => 'application/vnd.hp-jlyt',
'pcl' => 'application/vnd.hp-pcl',
'pclxl' => 'application/vnd.hp-pclxl',
'x3d' => 'application/vnd.hzn-3d-crossword',
'mpy' => 'application/vnd.ibm.minipay',
'afp' => 'application/vnd.ibm.modcap',
'listafp' => 'application/vnd.ibm.modcap',
'list3820' => 'application/vnd.ibm.modcap',
'irm' => 'application/vnd.ibm.rights-management',
'sc' => 'application/vnd.ibm.secure-container',
'igl' => 'application/vnd.igloader',
'ivp' => 'application/vnd.immervision-ivp',
'ivu' => 'application/vnd.immervision-ivu',
'xpw' => 'application/vnd.intercon.formnet',
'xpx' => 'application/vnd.intercon.formnet',
'qbo' => 'application/vnd.intu.qbo',
'qfx' => 'application/vnd.intu.qfx',
'rcprofile' => 'application/vnd.ipunplugged.rcprofile',
'irp' => 'application/vnd.irepository.package+xml',
'xpr' => 'application/vnd.is-xpr',
'jam' => 'application/vnd.jam',
'rms' => 'application/vnd.jcp.javame.midlet-rms',
'jisp' => 'application/vnd.jisp',
'ktz' => 'application/vnd.kahootz',
'ktr' => 'application/vnd.kahootz',
'karbon' => 'application/vnd.kde.karbon',
'chrt' => 'application/vnd.kde.kchart',
'kfo' => 'application/vnd.kde.kformula',
'flw' => 'application/vnd.kde.kivio',
'kon' => 'application/vnd.kde.kontour',
'kpr' => 'application/vnd.kde.kpresenter',
'kpt' => 'application/vnd.kde.kpresenter',
'ksp' => 'application/vnd.kde.kspread',
'kwd' => 'application/vnd.kde.kword',
'kwt' => 'application/vnd.kde.kword',
'htke' => 'application/vnd.kenameaapp',
'kia' => 'application/vnd.kidspiration',
'kne' => 'application/vnd.kinar',
'knp' => 'application/vnd.kinar',
'skp' => 'application/vnd.koan',
'skd' => 'application/vnd.koan',
'skt' => 'application/vnd.koan',
'skm' => 'application/vnd.koan',
'lbd' => 'application/vnd.llamagraphics.life-balance.desktop',
'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml',
'123' => 'application/vnd.lotus-1-2-3',
'apr' => 'application/vnd.lotus-approach',
'pre' => 'application/vnd.lotus-freelance',
'nsf' => 'application/vnd.lotus-notes',
'org' => 'application/vnd.lotus-organizer',
'scm' => 'application/vnd.lotus-screencam',
'lwp' => 'application/vnd.lotus-wordpro',
'portpkg' => 'application/vnd.macports.portpkg',
'mcd' => 'application/vnd.mcd',
'mc1' => 'application/vnd.medcalcdata',
'cdkey' => 'application/vnd.mediastation.cdkey',
'mwf' => 'application/vnd.mfer',
'mfm' => 'application/vnd.mfmp',
'flo' => 'application/vnd.micrografx.flo',
'igx' => 'application/vnd.micrografx.igx',
'mif' => 'application/vnd.mif',
'daf' => 'application/vnd.mobius.daf',
'dis' => 'application/vnd.mobius.dis',
'mbk' => 'application/vnd.mobius.mbk',
'mqy' => 'application/vnd.mobius.mqy',
'msl' => 'application/vnd.mobius.msl',
'plc' => 'application/vnd.mobius.plc',
'txf' => 'application/vnd.mobius.txf',
'mpn' => 'application/vnd.mophun.application',
'mpc' => 'application/vnd.mophun.certificate',
'xul' => 'application/vnd.mozilla.xul+xml',
'cil' => 'application/vnd.ms-artgalry',
'asf' => 'application/vnd.ms-asf',
'cab' => 'application/vnd.ms-cab-compressed',
'xls' => 'application/vnd.ms-excel',
'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'xlm' => 'application/vnd.ms-excel',
'xla' => 'application/vnd.ms-excel',
'xlc' => 'application/vnd.ms-excel',
'xlt' => 'application/vnd.ms-excel',
'xlw' => 'application/vnd.ms-excel',
'eot' => 'application/vnd.ms-fontobject',
'chm' => 'application/vnd.ms-htmlhelp',
'ims' => 'application/vnd.ms-ims',
'lrm' => 'application/vnd.ms-lrm',
'ppt' => 'application/vnd.ms-powerpoint',
'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
'pps' => 'application/vnd.ms-powerpoint',
'pot' => 'application/vnd.ms-powerpoint',
'mpp' => 'application/vnd.ms-project',
'mpt' => 'application/vnd.ms-project',
'wps' => 'application/vnd.ms-works',
'wks' => 'application/vnd.ms-works',
'wcm' => 'application/vnd.ms-works',
'wdb' => 'application/vnd.ms-works',
'wpl' => 'application/vnd.ms-wpl',
'xps' => 'application/vnd.ms-xpsdocument',
'mseq' => 'application/vnd.mseq',
'mus' => 'application/vnd.musician',
'nlu' => 'application/vnd.neurolanguage.nlu',
'nnd' => 'application/vnd.noblenet-directory',
'nns' => 'application/vnd.noblenet-sealer',
'nnw' => 'application/vnd.noblenet-web',
'ngdat' => 'application/vnd.nokia.n-gage.data',
'n-gage' => 'application/vnd.nokia.n-gage.symbian.install',
'rpst' => 'application/vnd.nokia.radio-preset',
'rpss' => 'application/vnd.nokia.radio-presets',
'edm' => 'application/vnd.novadigm.edm',
'edx' => 'application/vnd.novadigm.edx',
'ext' => 'application/vnd.novadigm.ext',
'odc' => 'application/vnd.oasis.opendocument.chart',
'otc' => 'application/vnd.oasis.opendocument.chart-template',
'odf' => 'application/vnd.oasis.opendocument.formula',
'otf' => 'application/vnd.oasis.opendocument.formula-template',
'odg' => 'application/vnd.oasis.opendocument.graphics',
'otg' => 'application/vnd.oasis.opendocument.graphics-template',
'odi' => 'application/vnd.oasis.opendocument.image',
'oti' => 'application/vnd.oasis.opendocument.image-template',
'odp' => 'application/vnd.oasis.opendocument.presentation',
'otp' => 'application/vnd.oasis.opendocument.presentation-template',
'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
'odt' => 'application/vnd.oasis.opendocument.text',
'otm' => 'application/vnd.oasis.opendocument.text-master',
'ott' => 'application/vnd.oasis.opendocument.text-template',
'oth' => 'application/vnd.oasis.opendocument.text-web',
'xo' => 'application/vnd.olpc-sugar',
'dd2' => 'application/vnd.oma.dd2+xml',
'oxt' => 'application/vnd.openofficeorg.extension',
'dp' => 'application/vnd.osgi.dp',
'prc' => 'application/vnd.palm',
'pdb' => 'application/vnd.palm',
'pqa' => 'application/vnd.palm',
'oprc' => 'application/vnd.palm',
'str' => 'application/vnd.pg.format',
'ei6' => 'application/vnd.pg.osasli',
'efif' => 'application/vnd.picsel',
'plf' => 'application/vnd.pocketlearn',
'pbd' => 'application/vnd.powerbuilder6',
'box' => 'application/vnd.previewsystems.box',
'mgz' => 'application/vnd.proteus.magazine',
'qps' => 'application/vnd.publishare-delta-tree',
'ptid' => 'application/vnd.pvi.ptid1',
'qxd' => 'application/vnd.quark.quarkxpress',
'qxt' => 'application/vnd.quark.quarkxpress',
'qwd' => 'application/vnd.quark.quarkxpress',
'qwt' => 'application/vnd.quark.quarkxpress',
'qxl' => 'application/vnd.quark.quarkxpress',
'qxb' => 'application/vnd.quark.quarkxpress',
'mxl' => 'application/vnd.recordare.musicxml',
'rm' => 'application/vnd.rn-realmedia',
'see' => 'application/vnd.seemail',
'sema' => 'application/vnd.sema',
'semd' => 'application/vnd.semd',
'semf' => 'application/vnd.semf',
'ifm' => 'application/vnd.shana.informed.formdata',
'itp' => 'application/vnd.shana.informed.formtemplate',
'iif' => 'application/vnd.shana.informed.interchange',
'ipk' => 'application/vnd.shana.informed.package',
'twd' => 'application/vnd.simtech-mindmapper',
'twds' => 'application/vnd.simtech-mindmapper',
'mmf' => 'application/vnd.smaf',
'sdkm' => 'application/vnd.solent.sdkm+xml',
'sdkd' => 'application/vnd.solent.sdkm+xml',
'dxp' => 'application/vnd.spotfire.dxp',
'sfs' => 'application/vnd.spotfire.sfs',
'sus' => 'application/vnd.sus-calendar',
'susp' => 'application/vnd.sus-calendar',
'svd' => 'application/vnd.svd',
'xsm' => 'application/vnd.syncml+xml',
'bdm' => 'application/vnd.syncml.dm+wbxml',
'xdm' => 'application/vnd.syncml.dm+xml',
'tao' => 'application/vnd.tao.intent-module-archive',
'tmo' => 'application/vnd.tmobile-livetv',
'tpt' => 'application/vnd.trid.tpt',
'mxs' => 'application/vnd.triscape.mxs',
'tra' => 'application/vnd.trueapp',
'ufd' => 'application/vnd.ufdl',
'ufdl' => 'application/vnd.ufdl',
'utz' => 'application/vnd.uiq.theme',
'umj' => 'application/vnd.umajin',
'unityweb' => 'application/vnd.unity',
'uoml' => 'application/vnd.uoml+xml',
'vcx' => 'application/vnd.vcx',
'vsd' => 'application/vnd.visio',
'vst' => 'application/vnd.visio',
'vss' => 'application/vnd.visio',
'vsw' => 'application/vnd.visio',
'vis' => 'application/vnd.visionary',
'vsf' => 'application/vnd.vsf',
'wbxml' => 'application/vnd.wap.wbxml',
'wmlc' => 'application/vnd.wap.wmlc',
'wmlsc' => 'application/vnd.wap.wmlscriptc',
'wtb' => 'application/vnd.webturbo',
'wpd' => 'application/vnd.wordperfect',
'wqd' => 'application/vnd.wqd',
'stf' => 'application/vnd.wt.stf',
'xar' => 'application/vnd.xara',
'xfdl' => 'application/vnd.xfdl',
'hvd' => 'application/vnd.yamaha.hv-dic',
'hvs' => 'application/vnd.yamaha.hv-script',
'hvp' => 'application/vnd.yamaha.hv-voice',
'saf' => 'application/vnd.yamaha.smaf-audio',
'spf' => 'application/vnd.yamaha.smaf-phrase',
'cmp' => 'application/vnd.yellowriver-custom-menu',
'zaz' => 'application/vnd.zzazz.deck+xml',
'vxml' => 'application/voicexml+xml',
'hlp' => 'application/winhlp',
'wsdl' => 'application/wsdl+xml',
'wspolicy' => 'application/wspolicy+xml',
'ace' => 'application/x-ace-compressed',
'bcpio' => 'application/x-bcpio',
'torrent' => 'application/x-bittorrent',
'bz' => 'application/x-bzip',
'bz2' => 'application/x-bzip2',
'boz' => 'application/x-bzip2',
'vcd' => 'application/x-cdlink',
'chat' => 'application/x-chat',
'pgn' => 'application/x-chess-pgn',
'cpio' => 'application/x-cpio',
'csh' => 'application/x-csh',
'dcr' => 'application/x-director',
'dir' => 'application/x-director',
'dxr' => 'application/x-director',
'fgd' => 'application/x-director',
'dvi' => 'application/x-dvi',
'spl' => 'application/x-futuresplash',
'gtar' => 'application/x-gtar',
'hdf' => 'application/x-hdf',
'jnlp' => 'application/x-java-jnlp-file',
'latex' => 'application/x-latex',
'wmd' => 'application/x-ms-wmd',
'wmz' => 'application/x-ms-wmz',
'mdb' => 'application/x-msaccess',
'obd' => 'application/x-msbinder',
'crd' => 'application/x-mscardfile',
'clp' => 'application/x-msclip',
'exe' => 'application/x-msdownload',
'dll' => 'application/x-msdownload',
'com' => 'application/x-msdownload',
'bat' => 'application/x-msdownload',
'msi' => 'application/x-msdownload',
'mvb' => 'application/x-msmediaview',
'm13' => 'application/x-msmediaview',
'm14' => 'application/x-msmediaview',
'wmf' => 'application/x-msmetafile',
'mny' => 'application/x-msmoney',
'pub' => 'application/x-mspublisher',
'scd' => 'application/x-msschedule',
'trm' => 'application/x-msterminal',
'wri' => 'application/x-mswrite',
'nc' => 'application/x-netcdf',
'cdf' => 'application/x-netcdf',
'p12' => 'application/x-pkcs12',
'pfx' => 'application/x-pkcs12',
'p7b' => 'application/x-pkcs7-certificates',
'spc' => 'application/x-pkcs7-certificates',
'p7r' => 'application/x-pkcs7-certreqresp',
'rar' => 'application/x-rar-compressed',
'sh' => 'application/x-sh',
'shar' => 'application/x-shar',
'swf' => 'application/x-shockwave-flash',
'sit' => 'application/x-stuffit',
'sitx' => 'application/x-stuffitx',
'sv4cpio' => 'application/x-sv4cpio',
'sv4crc' => 'application/x-sv4crc',
'tar' => 'application/x-tar',
'tcl' => 'application/x-tcl',
'tex' => 'application/x-tex',
'texinfo' => 'application/x-texinfo',
'texi' => 'application/x-texinfo',
'ustar' => 'application/x-ustar',
'src' => 'application/x-wais-source',
'der' => 'application/x-x509-ca-cert',
'crt' => 'application/x-x509-ca-cert',
'xenc' => 'application/xenc+xml',
'xhtml' => 'application/xhtml+xml',
'xht' => 'application/xhtml+xml',
'xml' => 'application/xml',
'xsl' => 'application/xml',
'dtd' => 'application/xml-dtd',
'xop' => 'application/xop+xml',
'xslt' => 'application/xslt+xml',
'xspf' => 'application/xspf+xml',
'mxml' => 'application/xv+xml',
'xhvml' => 'application/xv+xml',
'xvml' => 'application/xv+xml',
'xvm' => 'application/xv+xml',
'zip' => 'application/zip',
'au' => 'audio/basic',
'snd' => 'audio/basic',
'mid' => 'audio/midi',
'midi' => 'audio/midi',
'kar' => 'audio/midi',
'rmi' => 'audio/midi',
'mp4a' => 'audio/mp4',
'm4a' => 'audio/mp4a-latm',
'm4p' => 'audio/mp4a-latm',
'mpga' => 'audio/mpeg',
'mp2' => 'audio/mpeg',
'mp2a' => 'audio/mpeg',
'mp3' => 'audio/mpeg',
'm2a' => 'audio/mpeg',
'm3a' => 'audio/mpeg',
'eol' => 'audio/vnd.digital-winds',
'lvp' => 'audio/vnd.lucent.voice',
'ecelp4800' => 'audio/vnd.nuera.ecelp4800',
'ecelp7470' => 'audio/vnd.nuera.ecelp7470',
'ecelp9600' => 'audio/vnd.nuera.ecelp9600',
'wav' => 'audio/wav',
'aif' => 'audio/x-aiff',
'aiff' => 'audio/x-aiff',
'aifc' => 'audio/x-aiff',
'm3u' => 'audio/x-mpegurl',
'wax' => 'audio/x-ms-wax',
'wma' => 'audio/x-ms-wma',
'ram' => 'audio/x-pn-realaudio',
'ra' => 'audio/x-pn-realaudio',
'rmp' => 'audio/x-pn-realaudio-plugin',
'cdx' => 'chemical/x-cdx',
'cif' => 'chemical/x-cif',
'cmdf' => 'chemical/x-cmdf',
'cml' => 'chemical/x-cml',
'csml' => 'chemical/x-csml',
'xyz' => 'chemical/x-xyz',
'bmp' => 'image/bmp',
'cgm' => 'image/cgm',
'g3' => 'image/g3fax',
'gif' => 'image/gif',
'ief' => 'image/ief',
'jp2' => 'image/jp2',
'jpeg' => 'image/jpeg',
'jpe' => 'image/jpeg',
'jpg' => 'image/jpeg',
'pict' => 'image/pict',
'pic' => 'image/pict',
'pct' => 'image/pict',
'png' => 'image/png',
'btif' => 'image/prs.btif',
'svg' => 'image/svg+xml',
'svgz' => 'image/svg+xml',
'tiff' => 'image/tiff',
'tif' => 'image/tiff',
'psd' => 'image/vnd.adobe.photoshop',
'djvu' => 'image/vnd.djvu',
'djv' => 'image/vnd.djvu',
'dwg' => 'image/vnd.dwg',
'dxf' => 'image/vnd.dxf',
'fbs' => 'image/vnd.fastbidsheet',
'fpx' => 'image/vnd.fpx',
'fst' => 'image/vnd.fst',
'mmr' => 'image/vnd.fujixerox.edmics-mmr',
'rlc' => 'image/vnd.fujixerox.edmics-rlc',
'ico' => 'image/vnd.microsoft.icon',
'mdi' => 'image/vnd.ms-modi',
'npx' => 'image/vnd.net-fpx',
'wbmp' => 'image/vnd.wap.wbmp',
'xif' => 'image/vnd.xiff',
'ras' => 'image/x-cmu-raster',
'cmx' => 'image/x-cmx',
'pntg' => 'image/x-macpaint',
'pnt' => 'image/x-macpaint',
'mac' => 'image/x-macpaint',
'pcx' => 'image/x-pcx',
'pnm' => 'image/x-portable-anymap',
'pbm' => 'image/x-portable-bitmap',
'pgm' => 'image/x-portable-graymap',
'ppm' => 'image/x-portable-pixmap',
'qtif' => 'image/x-quicktime',
'qti' => 'image/x-quicktime',
'rgb' => 'image/x-rgb',
'xbm' => 'image/x-xbitmap',
'xpm' => 'image/x-xpixmap',
'xwd' => 'image/x-xwindowdump',
'eml' => 'message/rfc822',
'mime' => 'message/rfc822',
'igs' => 'model/iges',
'iges' => 'model/iges',
'msh' => 'model/mesh',
'mesh' => 'model/mesh',
'silo' => 'model/mesh',
'dwf' => 'model/vnd.dwf',
'gdl' => 'model/vnd.gdl',
'gtw' => 'model/vnd.gtw',
'mts' => 'model/vnd.mts',
'vtu' => 'model/vnd.vtu',
'wrl' => 'model/vrml',
'vrml' => 'model/vrml',
'ics' => 'text/calendar',
'ifb' => 'text/calendar',
'css' => 'text/css',
'csv' => 'text/csv',
'html' => 'text/html',
'htm' => 'text/html',
'txt' => 'text/plain',
'text' => 'text/plain',
'conf' => 'text/plain',
'def' => 'text/plain',
'list' => 'text/plain',
'log' => 'text/plain',
'in' => 'text/plain',
'dsc' => 'text/prs.lines.tag',
'rtx' => 'text/richtext',
'sgml' => 'text/sgml',
'sgm' => 'text/sgml',
'tsv' => 'text/tab-separated-values',
't' => 'text/troff',
'tr' => 'text/troff',
'roff' => 'text/troff',
'man' => 'text/troff',
'me' => 'text/troff',
'ms' => 'text/troff',
'uri' => 'text/uri-list',
'uris' => 'text/uri-list',
'urls' => 'text/uri-list',
'fly' => 'text/vnd.fly',
'flx' => 'text/vnd.fmi.flexstor',
'3dml' => 'text/vnd.in3d.3dml',
'spot' => 'text/vnd.in3d.spot',
'jad' => 'text/vnd.sun.j2me.app-descriptor',
'wml' => 'text/vnd.wap.wml',
'wmls' => 'text/vnd.wap.wmlscript',
's' => 'text/x-asm',
'asm' => 'text/x-asm',
'c' => 'text/x-c',
'cc' => 'text/x-c',
'cxx' => 'text/x-c',
'cpp' => 'text/x-c',
'h' => 'text/x-c',
'hh' => 'text/x-c',
'dic' => 'text/x-c',
'f' => 'text/x-fortran',
'for' => 'text/x-fortran',
'f77' => 'text/x-fortran',
'f90' => 'text/x-fortran',
'p' => 'text/x-pascal',
'pas' => 'text/x-pascal',
'java' => 'text/x-java-source',
'etx' => 'text/x-setext',
'uu' => 'text/x-uuencode',
'vcs' => 'text/x-vcalendar',
'vcf' => 'text/x-vcard',
'3gp' => 'video/3gpp',
'3g2' => 'video/3gpp2',
'h261' => 'video/h261',
'h263' => 'video/h263',
'h264' => 'video/h264',
'jpgv' => 'video/jpeg',
'jpm' => 'video/jpm',
'jpgm' => 'video/jpm',
'mj2' => 'video/mj2',
'mjp2' => 'video/mj2',
'mp4' => 'video/mp4',
'mp4v' => 'video/mp4',
'mpg4' => 'video/mp4',
'm4v' => 'video/mp4',
'mpeg' => 'video/mpeg',
'mpg' => 'video/mpeg',
'mpe' => 'video/mpeg',
'm1v' => 'video/mpeg',
'm2v' => 'video/mpeg',
'qt' => 'video/quicktime',
'mov' => 'video/quicktime',
'fvt' => 'video/vnd.fvt',
'mxu' => 'video/vnd.mpegurl',
'm4u' => 'video/vnd.mpegurl',
'viv' => 'video/vnd.vivo',
'dv' => 'video/x-dv',
'dif' => 'video/x-dv',
'fli' => 'video/x-fli',
'asx' => 'video/x-ms-asf',
'wm' => 'video/x-ms-wm',
'wmv' => 'video/x-ms-wmv',
'wmx' => 'video/x-ms-wmx',
'wvx' => 'video/x-ms-wvx',
'avi' => 'video/x-msvideo',
'movie' => 'video/x-sgi-movie',
'ice' => 'x-conference/x-cooltalk',
];
/**
* Returns extensions for given mimes types
*
* @param array $mimesTypes The mimes types, e.g. ['video/mpeg', 'image/jpeg']
* @param bool $asUpperCase (optional) If is set to true, extensions are returned as upper case. Otherwise - lower
* case.
* @return array
*/
public static function getExtensions(array $mimesTypes, $asUpperCase = false)
{
if (empty($mimesTypes)) {
return [];
}
$extensions = [];
foreach ($mimesTypes as $mimeType) {
$extension = self::getExtension($mimeType);
/*
* No extension for given mime type?
* Nothing to do
*/
if (empty($extension)) {
continue;
}
/*
* Extensions should be returned as upper case?
*/
if ($asUpperCase) {
if (is_array($extension)) {
array_walk($extension, function (&$value) {
$value = strtoupper($value);
});
} else {
$extension = strtoupper($extension);
}
}
$extensions[$mimeType] = $extension;
}
return $extensions;
}
/**
* Returns extension for given mime type
*
* @param string $mimeType The mime type, e.g. "video/mpeg"
* @return string|array
*/
public static function getExtension($mimeType)
{
if (is_string($mimeType) && in_array($mimeType, self::$mimeTypes)) {
$data = Arrays::setKeysAsValues(self::$mimeTypes, false);
return $data[$mimeType];
}
return '';
}
/**
* Returns information whether file with the given path is an image
*
* @param string $path Path of the file to check
* @return bool
*/
public static function isImagePath($path)
{
$mimeType = self::getMimeType($path);
return self::isImage($mimeType);
}
/**
* Returns mime type of given file
*
* @param string $filePath Path of the file to check
* @return string
*
* @throws \RuntimeException
*/
public static function getMimeType($filePath)
{
/*
* The file does not exist?
* Nothing to do
*/
if (!is_string($filePath) || !is_readable($filePath)) {
return '';
}
/*
* 1st possibility: the finfo class
*/
if (class_exists('finfo')) {
$finfo = new \finfo();
return $finfo->file($filePath, FILEINFO_MIME_TYPE);
}
/*
* 2nd possibility: the mime_content_type function
*/
if (function_exists('mime_content_type')) {
return mime_content_type($filePath);
}
/*
* Oops, there is no possibility to read the mime type
*/
$template = 'Neither \'finfo\' class nor \'mime_content_type\' function exists. There is no way to read the'
. ' mime type of file \'%s\'.';
$message = sprintf($template, $filePath);
throw new \RuntimeException($message);
}
/**
* Returns information whether the given file type is an image
*
* @param string $mimeType The mime type of file
* @return bool
*/
public static function isImage($mimeType)
{
if (in_array($mimeType, self::$mimeTypes)) {
return (bool)preg_match('|^image/.+$|', $mimeType);
}
return false;
}
}

View File

@@ -1,71 +0,0 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Test\Exception\Date;
use Generator;
use Meritoo\Common\Exception\Date\UnknownDatePartTypeException;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Type\DatePartType;
use Meritoo\Common\Type\OopVisibilityType;
/**
* Test case of an exception used while type of date part, e.g. "year", is unknown
*
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl
*/
class UnknownDatePartTypeExceptionTest extends BaseTestCase
{
public function testConstructorVisibilityAndArguments()
{
static::assertConstructorVisibilityAndArguments(UnknownDatePartTypeException::class, OopVisibilityType::IS_PUBLIC, 2, 2);
}
/**
* @param string $unknownDatePart Type of date part, e.g. "year". One of DatePartType class constants.
* @param string $value Incorrect value
* @param string $expectedMessage Expected exception's message
*
* @dataProvider provideDatePartAndValue
*/
public function testConstructorMessage($unknownDatePart, $value, $expectedMessage)
{
$exception = new UnknownDatePartTypeException($unknownDatePart, $value);
static::assertEquals($expectedMessage, $exception->getMessage());
}
/**
* Provides type of date part, incorrect value and expected exception's message
*
* @return Generator
*/
public function provideDatePartAndValue()
{
$template = 'The \'%s\' type of date part (with value %s) is unknown. Probably doesn\'t exist or there is a'
. ' typo. You should use one of these types: day, hour, minute, month, second, year.';
yield[
DatePartType::DAY,
'44',
sprintf($template, DatePartType::DAY, '44'),
];
yield[
DatePartType::MONTH,
'22',
sprintf($template, DatePartType::MONTH, '22'),
];
yield[
DatePartType::MINUTE,
'77',
sprintf($template, DatePartType::MINUTE, '77'),
];
}
}

View File

@@ -1,60 +0,0 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Test\Exception\File;
use Generator;
use Meritoo\Common\Exception\File\EmptyFileException;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Type\OopVisibilityType;
/**
* Test case of an exception used while file with given path is empty (has no content)
*
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl
*/
class EmptyFileExceptionTest extends BaseTestCase
{
public function testConstructorVisibilityAndArguments()
{
static::assertConstructorVisibilityAndArguments(EmptyFileException::class, OopVisibilityType::IS_PUBLIC, 1, 1);
}
/**
* @param string $emptyFilePath Path of the empty file
* @param string $expectedMessage Expected exception's message
*
* @dataProvider providePathOfFile
*/
public function testConstructorMessage($emptyFilePath, $expectedMessage)
{
$exception = new EmptyFileException($emptyFilePath);
static::assertEquals($expectedMessage, $exception->getMessage());
}
/**
* Provides path of the empty file and expected exception's message
*
* @return Generator
*/
public function providePathOfFile()
{
$template = 'File with path \'%s\' is empty (has no content). Did you provide path of proper file?';
yield[
'aa/bb/cc',
sprintf($template, 'aa/bb/cc'),
];
yield[
'images/show/car.jpg',
sprintf($template, 'images/show/car.jpg'),
];
}
}

View File

@@ -1,33 +0,0 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Test\Exception\File;
use Meritoo\Common\Exception\File\EmptyFilePathException;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Type\OopVisibilityType;
/**
* Test case of an exception used while path of given file is empty
*
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl
*/
class EmptyFilePathExceptionTest extends BaseTestCase
{
public function testConstructorVisibilityAndArguments()
{
static::assertConstructorVisibilityAndArguments(EmptyFilePathException::class, OopVisibilityType::IS_PUBLIC);
}
public function testConstructorMessage()
{
$exception = new EmptyFilePathException();
static::assertEquals('Path of the file is empty. Did you provide path of proper file?', $exception->getMessage());
}
}

View File

@@ -1,60 +0,0 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Test\Exception\File;
use Generator;
use Meritoo\Common\Exception\File\NotExistingFileException;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Type\OopVisibilityType;
/**
* Test case of an exception used while file with given path does not exist
*
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl
*/
class NotExistingFileExceptionTest extends BaseTestCase
{
public function testConstructorVisibilityAndArguments()
{
static::assertConstructorVisibilityAndArguments(NotExistingFileException::class, OopVisibilityType::IS_PUBLIC, 1, 1);
}
/**
* @param string $notExistingFilePath Path of not existing (or not readable) file
* @param string $expectedMessage Expected exception's message
*
* @dataProvider providePathOfFile
*/
public function testConstructorMessage($notExistingFilePath, $expectedMessage)
{
$exception = new NotExistingFileException($notExistingFilePath);
static::assertEquals($expectedMessage, $exception->getMessage());
}
/**
* Provides path of not existing file and expected exception's message
*
* @return Generator
*/
public function providePathOfFile()
{
$template = 'File with path \'%s\' does not exist (or is not readable). Did you provide path of proper file?';
yield[
'aa/bb/cc',
sprintf($template, 'aa/bb/cc'),
];
yield[
'images/show/car.jpg',
sprintf($template, 'images/show/car.jpg'),
];
}
}

View File

@@ -1,65 +0,0 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Test\Exception\Method;
use Generator;
use Meritoo\Common\Exception\Method\DisabledMethodException;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Type\OopVisibilityType;
/**
* Test case of an exception used while method cannot be called, because is disabled
*
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl
*/
class DisabledMethodExceptionTest extends BaseTestCase
{
public function testConstructorVisibilityAndArguments()
{
static::assertConstructorVisibilityAndArguments(DisabledMethodException::class, OopVisibilityType::IS_PUBLIC, 2, 1);
}
/**
* @param string $disabledMethod Name of the disabled method
* @param string $alternativeMethod Name of the alternative method
* @param string $expectedMessage Expected exception's message
*
* @internal param string $emptyFilePath Path of the empty file
* @dataProvider provideMethodsNames
*/
public function testConstructorMessage($disabledMethod, $alternativeMethod, $expectedMessage)
{
$exception = new DisabledMethodException($disabledMethod, $alternativeMethod);
static::assertEquals($expectedMessage, $exception->getMessage());
}
/**
* Provides name of the disabled method, name of the alternative method and expected exception's message
*
* @return Generator
*/
public function provideMethodsNames()
{
$templateShort = 'Method %s() cannot be called, because is disabled.';
$templateLong = $templateShort . ' Use %s() instead.';
yield[
'FooBar::loremIpsum',
'',
sprintf($templateShort, 'FooBar::loremIpsum'),
];
yield[
'FooBar::loremIpsum',
'AnotherClass::alternativeMethod',
sprintf($templateLong, 'FooBar::loremIpsum', 'AnotherClass::alternativeMethod'),
];
}
}

View File

@@ -1,73 +0,0 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Test\Exception\Reflection;
use Generator;
use Meritoo\Common\Exception\Reflection\CannotResolveClassNameException;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Type\OopVisibilityType;
/**
* Test case of an exception used while name of class or trait cannot be resolved
*
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl
*/
class CannotResolveClassNameExceptionTest extends BaseTestCase
{
public function testConstructorVisibilityAndArguments()
{
static::assertConstructorVisibilityAndArguments(CannotResolveClassNameException::class, OopVisibilityType::IS_PUBLIC, 2, 1);
}
/**
* @param array|object|string $source Source of the class's / trait's name. It can be an array of objects,
* namespaces, object or namespace.
* @param bool $forClass If is set to true, message of this exception for class is prepared.
* Otherwise - for trait.
* @param string $expectedMessage Expected exception's message
*
* @dataProvider provideClassName
*/
public function testConstructorMessage($source, $forClass, $expectedMessage)
{
$exception = new CannotResolveClassNameException($source, $forClass);
static::assertEquals($expectedMessage, $exception->getMessage());
}
/**
* Provides source of the class's / trait's name, information if message of this exception should be prepared for
* class and the expected exception's message
*
* @return Generator
*/
public function provideClassName()
{
yield[
'Not\Existing\Class',
true,
'Name of class from given \'string\' Not\Existing\Class cannot be resolved. Is there everything ok?',
];
yield[
'Not\Existing\Trait',
false,
'Name of trait from given \'string\' Not\Existing\Trait cannot be resolved. Is there everything ok?',
];
yield[
[
new \stdClass(),
new \stdClass(),
],
true,
'Name of class from given \'array\' cannot be resolved. Is there everything ok?',
];
}
}

View File

@@ -1,65 +0,0 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Test\Exception\Reflection;
use Generator;
use Meritoo\Common\Exception\Reflection\MissingChildClassesException;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Type\OopVisibilityType;
/**
* Test case of an exception used while given class has no child classes
*
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl
*/
class MissingChildClassesExceptionTest extends BaseTestCase
{
public function testConstructorVisibilityAndArguments()
{
static::assertConstructorVisibilityAndArguments(MissingChildClassesException::class, OopVisibilityType::IS_PUBLIC, 1, 1);
}
/**
* @param array|object|string $parentClass Class that hasn't child classes, but it should. An array of objects,
* strings, object or string.
* @param string $expectedMessage Expected exception's message
*
* @dataProvider provideParentClass
*/
public function testConstructorMessage($parentClass, $expectedMessage)
{
$exception = new MissingChildClassesException($parentClass);
static::assertEquals($expectedMessage, $exception->getMessage());
}
/**
* Provides name of class that hasn't child classes, but it should, and expected exception's message
*
* @return Generator
*/
public function provideParentClass()
{
$template = 'The \'%s\' class requires one child class at least who will extend her (maybe is an abstract'
. ' class), but the child classes are missing. Did you forget to extend this class?';
yield[
MissingChildClassesException::class,
sprintf($template, MissingChildClassesException::class),
];
yield[
[
new \stdClass(),
new \stdClass(),
],
sprintf($template, \stdClass::class),
];
}
}

View File

@@ -1,74 +0,0 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Test\Exception\Reflection;
use Generator;
use Meritoo\Common\Exception\Reflection\TooManyChildClassesException;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Type\OopVisibilityType;
/**
* Test case of an exception used while given class has more than one child class
*
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl
*/
class TooManyChildClassesExceptionTest extends BaseTestCase
{
public function testConstructorVisibilityAndArguments()
{
static::assertConstructorVisibilityAndArguments(TooManyChildClassesException::class, OopVisibilityType::IS_PUBLIC, 2, 2);
}
/**
* @param array|object|string $parentClass Class that has more than one child class, but it shouldn't. An array
* of objects, strings, object or string.
* @param array $childClasses Child classes
* @param string $expectedMessage Expected exception's message
*
* @dataProvider provideParentAndChildClasses
*/
public function testConstructorMessage($parentClass, array $childClasses, $expectedMessage)
{
$exception = new TooManyChildClassesException($parentClass, $childClasses);
static::assertEquals($expectedMessage, $exception->getMessage());
}
/**
* Provides name of class that has more than one child class, but it shouldn't, child classes, and expected
* exception's message
*
* @return Generator
*/
public function provideParentAndChildClasses()
{
$template = "The '%s' class requires one child class at most who will extend her, but more than one child"
. " class was found:\n- %s\n\nWhy did you create more than one classes that extend '%s' class?";
yield[
BaseTestCase::class,
[
\stdClass::class,
OopVisibilityType::class,
],
sprintf($template, BaseTestCase::class, implode("\n- ", [
\stdClass::class,
OopVisibilityType::class,
]), BaseTestCase::class),
];
yield[
TooManyChildClassesException::class,
[
\stdClass::class,
],
sprintf($template, TooManyChildClassesException::class, implode("\n- ", [\stdClass::class]), TooManyChildClassesException::class),
];
}
}

View File

@@ -1,60 +0,0 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Test\Exception\Regex;
use Generator;
use Meritoo\Common\Exception\Regex\IncorrectColorHexLengthException;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Type\OopVisibilityType;
/**
* Test case of an exception used while length of given hexadecimal value of color is incorrect
*
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl
*/
class IncorrectColorHexLengthExceptionTest extends BaseTestCase
{
public function testConstructorVisibilityAndArguments()
{
static::assertConstructorVisibilityAndArguments(IncorrectColorHexLengthException::class, OopVisibilityType::IS_PUBLIC, 1, 1);
}
/**
* @param string $color Incorrect hexadecimal value of color
* @param string $expectedMessage Expected exception's message
*
* @dataProvider provideColor
*/
public function testConstructorMessage($color, $expectedMessage)
{
$exception = new IncorrectColorHexLengthException($color);
static::assertEquals($expectedMessage, $exception->getMessage());
}
/**
* Provides incorrect hexadecimal value of color and expected exception's message
*
* @return Generator
*/
public function provideColor()
{
$template = 'Length of hexadecimal value of color \'%s\' is incorrect. It\'s %d, but it should be 3 or 6. Is there everything ok?';
yield[
'',
sprintf($template, '', strlen('')),
];
yield[
'aa-bb-cc',
sprintf($template, 'aa-bb-cc', strlen('aa-bb-cc')),
];
}
}

View File

@@ -1,60 +0,0 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Test\Exception\Regex;
use Generator;
use Meritoo\Common\Exception\Regex\InvalidColorHexValueException;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Type\OopVisibilityType;
/**
* Test case of an exception used while given hexadecimal value of color is invalid
*
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl
*/
class InvalidColorHexValueExceptionTest extends BaseTestCase
{
public function testConstructorVisibilityAndArguments()
{
static::assertConstructorVisibilityAndArguments(InvalidColorHexValueException::class, OopVisibilityType::IS_PUBLIC, 1, 1);
}
/**
* @param string $color Invalid hexadecimal value of color
* @param string $expectedMessage Expected exception's message
*
* @dataProvider provideColor
*/
public function testConstructorMessage($color, $expectedMessage)
{
$exception = new InvalidColorHexValueException($color);
static::assertEquals($expectedMessage, $exception->getMessage());
}
/**
* Provides invalid hexadecimal value of color and expected exception's message
*
* @return Generator
*/
public function provideColor()
{
$template = 'Hexadecimal value of color \'%s\' is invalid. Is there everything ok?';
yield[
'',
sprintf($template, ''),
];
yield[
'aa-bb-cc',
sprintf($template, 'aa-bb-cc'),
];
}
}

View File

@@ -1,60 +0,0 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Test\Exception\Regex;
use Generator;
use Meritoo\Common\Exception\Regex\InvalidUrlException;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Type\OopVisibilityType;
/**
* Test case of an exception used while url is invalid
*
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl
*/
class InvalidUrlExceptionTest extends BaseTestCase
{
public function testConstructorVisibilityAndArguments()
{
static::assertConstructorVisibilityAndArguments(InvalidUrlException::class, OopVisibilityType::IS_PUBLIC, 1, 1);
}
/**
* @param string $url Invalid url
* @param string $expectedMessage Expected exception's message
*
* @dataProvider provideUrl
*/
public function testConstructorMessage($url, $expectedMessage)
{
$exception = new InvalidUrlException($url);
static::assertEquals($expectedMessage, $exception->getMessage());
}
/**
* Provides invalid url and expected exception's message
*
* @return Generator
*/
public function provideUrl()
{
$template = 'Url \'%s\' is invalid. Is there everything ok?';
yield[
'aa/bb/cc',
sprintf($template, 'aa/bb/cc'),
];
yield[
'http:/images\show\car.jpg',
sprintf($template, 'http:/images\show\car.jpg'),
];
}
}

View File

@@ -1,64 +0,0 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Test\Exception\Type;
use Generator;
use Meritoo\Common\Exception\Type\UnknownOopVisibilityTypeException;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Type\OopVisibilityType;
/**
* Test case of an exception used while the visibility of a property, a method or (as of PHP 7.1.0) a constant is
* unknown
*
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl
*/
class UnknownOopVisibilityTypeExceptionTest extends BaseTestCase
{
public function testConstructorVisibilityAndArguments()
{
static::assertConstructorVisibilityAndArguments(UnknownOopVisibilityTypeException::class, OopVisibilityType::IS_PUBLIC, 1, 1);
}
/**
* @param string $unknownType Unknown OOP-related visibility
* @param string $expectedMessage Expected exception's message
*
* @dataProvider provideUnknownType
*/
public function testConstructorMessage($unknownType, $expectedMessage)
{
$exception = new UnknownOopVisibilityTypeException($unknownType);
static::assertEquals($expectedMessage, $exception->getMessage());
}
/**
* Provides path of the empty file and expected exception's message
*
* @return Generator
*/
public function provideUnknownType()
{
$allTypes = (new OopVisibilityType())->getAll();
$template = 'The \'%s\' type of OOP-related visibility is unknown. Probably doesn\'t exist or there is a typo.'
. ' You should use one of these types: %s.';
yield[
'',
sprintf($template, '', implode(', ', $allTypes)),
];
yield[
123,
sprintf($template, 123, implode(', ', $allTypes)),
];
}
}

View File

@@ -14,7 +14,7 @@ use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Type\OopVisibilityType; use Meritoo\Common\Type\OopVisibilityType;
/** /**
* Test case of the collection of elements * Tests of the collection of elements.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -22,21 +22,21 @@ use Meritoo\Common\Type\OopVisibilityType;
class CollectionTest extends BaseTestCase class CollectionTest extends BaseTestCase
{ {
/** /**
* An empty collection * An empty collection.
* *
* @var Collection * @var Collection
*/ */
private $emptyCollection; private $emptyCollection;
/** /**
* Simple collection * Simple collection.
* *
* @var Collection * @var Collection
*/ */
private $simpleCollection; private $simpleCollection;
/** /**
* Elements of simple collection * Elements of simple collection.
* *
* @var array * @var array
*/ */
@@ -306,7 +306,7 @@ class CollectionTest extends BaseTestCase
public function testExistsVisibilityAndArguments() public function testExistsVisibilityAndArguments()
{ {
static::assertMethodVisibilityAndArguments(Collection::class, 'exists', OopVisibilityType::IS_PRIVATE, 1, 1); $this->verifyMethodVisibilityAndArguments(Collection::class, 'exists', OopVisibilityType::IS_PRIVATE, 1, 1);
} }
/** /**

View File

@@ -9,23 +9,17 @@
namespace Meritoo\Common\Test\Exception\Base; namespace Meritoo\Common\Test\Exception\Base;
use Meritoo\Common\Exception\Base\UnknownTypeException; use Meritoo\Common\Exception\Base\UnknownTypeException;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Type\Base\BaseType; use Meritoo\Common\Type\Base\BaseType;
use Meritoo\Common\Type\OopVisibilityType; use PHPUnit_Framework_TestCase;
/** /**
* Test case of the exception used while type of something is unknown * Tests of the exception used while type of something is unknown.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class UnknownTypeExceptionTest extends BaseTestCase class UnknownTypeExceptionTest extends PHPUnit_Framework_TestCase
{ {
public function testConstructorVisibilityAndArguments()
{
static::assertConstructorVisibilityAndArguments(UnknownTestTypeException::class, OopVisibilityType::IS_PUBLIC, 1, 1);
}
public function testWithoutException() public function testWithoutException()
{ {
self::assertEquals('Test 2', (new TestService())->getTranslatedType('test_2')); self::assertEquals('Test 2', (new TestService())->getTranslatedType('test_2'));
@@ -39,7 +33,7 @@ class UnknownTypeExceptionTest extends BaseTestCase
} }
/** /**
* Type of something (for testing purposes) * Type of something (for testing purposes).
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -52,7 +46,7 @@ class TestType extends BaseType
} }
/** /**
* An exception used while type of something is unknown (for testing purposes) * An exception used while type of something is unknown (for testing purposes).
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -60,7 +54,7 @@ class TestType extends BaseType
class UnknownTestTypeException extends UnknownTypeException class UnknownTestTypeException extends UnknownTypeException
{ {
/** /**
* Class constructor * Class constructor.
* *
* @param int|string $unknownType The unknown type of something (for testing purposes) * @param int|string $unknownType The unknown type of something (for testing purposes)
*/ */
@@ -71,7 +65,7 @@ class UnknownTestTypeException extends UnknownTypeException
} }
/** /**
* Service used together with type of something (for testing purposes) * Service used together with type of something (for testing purposes).
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -79,9 +73,10 @@ class UnknownTestTypeException extends UnknownTypeException
class TestService class TestService
{ {
/** /**
* Returns translated type (for testing purposes) * Returns translated type (for testing purposes).
* *
* @param string $type Type of something (for testing purposes) * @param string $type Type of something (for testing purposes)
*
* @return string * @return string
* *
* @throws UnknownTestTypeException * @throws UnknownTestTypeException

View File

@@ -10,15 +10,15 @@ namespace Meritoo\Common\Test\Type\Base;
use Generator; use Generator;
use Meritoo\Common\Type\Base\BaseType; use Meritoo\Common\Type\Base\BaseType;
use PHPUnit\Framework\TestCase; use PHPUnit_Framework_TestCase;
/** /**
* Test case of the base / abstract type of something * Tests of the base / abstract type of something.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class BaseTypeTest extends TestCase class BaseTypeTest extends PHPUnit_Framework_TestCase
{ {
/** /**
* @param BaseType $type Type of something * @param BaseType $type Type of something
@@ -45,7 +45,7 @@ class BaseTypeTest extends TestCase
} }
/** /**
* Provides type of something for testing the getAll() method * Provides type of something for testing the getAll() method.
* *
* @return Generator * @return Generator
*/ */
@@ -66,7 +66,7 @@ class BaseTypeTest extends TestCase
} }
/** /**
* Provides type of something for testing the isCorrectType() method * Provides type of something for testing the isCorrectType() method.
* *
* @return Generator * @return Generator
*/ */
@@ -177,7 +177,7 @@ class BaseTypeTest extends TestCase
} }
/** /**
* Empty type of something used for testing * Empty type of something used for testing.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -187,7 +187,7 @@ class TestEmptyType extends BaseType
} }
/** /**
* Type of something used for testing * Type of something used for testing.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl

View File

@@ -12,7 +12,7 @@ use Meritoo\Common\Test\Base\BaseTypeTestCase;
use Meritoo\Common\Type\DatePartType; use Meritoo\Common\Type\DatePartType;
/** /**
* Test case of the type of date part, e.g. "year" * Tests of the type of date part, e.g. "year".
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -25,12 +25,12 @@ class DatePartTypeTest extends BaseTypeTestCase
protected function getAllExpectedTypes() protected function getAllExpectedTypes()
{ {
return [ return [
'DAY' => DatePartType::DAY, 'DAY' => DatePartType::DAY,
'HOUR' => DatePartType::HOUR, 'HOUR' => DatePartType::HOUR,
'MINUTE' => DatePartType::MINUTE, 'MINUTE' => DatePartType::MINUTE,
'MONTH' => DatePartType::MONTH, 'MONTH' => DatePartType::MONTH,
'SECOND' => DatePartType::SECOND, 'SECOND' => DatePartType::SECOND,
'YEAR' => DatePartType::YEAR, 'YEAR' => DatePartType::YEAR,
]; ];
} }

View File

@@ -8,16 +8,16 @@
namespace Meritoo\Common\Test\Utilities; namespace Meritoo\Common\Test\Utilities;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Utilities\Arrays; use Meritoo\Common\Utilities\Arrays;
use PHPUnit_Framework_TestCase;
/** /**
* Test case of the useful arrays methods * Tests of the useful arrays methods.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class ArraysTest extends BaseTestCase class ArraysTest extends PHPUnit_Framework_TestCase
{ {
private $simpleArray; private $simpleArray;
private $simpleArrayWithKeys; private $simpleArrayWithKeys;
@@ -25,11 +25,6 @@ class ArraysTest extends BaseTestCase
private $complexArray; private $complexArray;
private $superComplexArray; private $superComplexArray;
public function testConstructor()
{
static::assertHasNoConstructor(Arrays::class);
}
public function testValues2string() public function testValues2string()
{ {
/* /*
@@ -72,8 +67,8 @@ class ArraysTest extends BaseTestCase
self::assertEquals('', Arrays::values2csv($this->simpleArray)); self::assertEquals('', Arrays::values2csv($this->simpleArray));
self::assertEquals("lorem,ipsum,dolor,sit,amet\n" self::assertEquals("lorem,ipsum,dolor,sit,amet\n"
. "consectetur,adipiscing,elit\n" ."consectetur,adipiscing,elit\n"
. 'donec,sagittis,fringilla,eleifend', Arrays::values2csv($this->twoDimensionsArray)); .'donec,sagittis,fringilla,eleifend', Arrays::values2csv($this->twoDimensionsArray));
} }
public function testGetFirstKey() public function testGetFirstKey()
@@ -180,7 +175,7 @@ class ArraysTest extends BaseTestCase
{ {
$effect = [ $effect = [
'nullam' => 'donec', 'nullam' => 'donec',
'x' => [ 'x' => [
'vitae' => [ 'vitae' => [
'x' => 'quis', 'x' => 'quis',
], ],
@@ -193,7 +188,7 @@ class ArraysTest extends BaseTestCase
self::assertEquals([ self::assertEquals([
'x' => 'sit', 'x' => 'sit',
4 => 'amet', 4 => 'amet',
], Arrays::replaceArrayKeys($this->simpleArray, '|[0-3]+|', 'x')); ], Arrays::replaceArrayKeys($this->simpleArray, '|[0-3]+|', 'x'));
} }
@@ -375,19 +370,19 @@ letsTest[2] = value_2;';
'lorem' => 0, 'lorem' => 0,
'ipsum' => 1, 'ipsum' => 1,
'dolor' => 2, 'dolor' => 2,
'sit' => 3, 'sit' => 3,
'amet' => 4, 'amet' => 4,
], ],
[ [
'consectetur' => 0, 'consectetur' => 0,
'adipiscing' => 1, 'adipiscing' => 1,
'elit' => 2, 'elit' => 2,
], ],
[ [
'donec' => 0, 'donec' => 0,
'sagittis' => 1, 'sagittis' => 1,
'fringilla' => 2, 'fringilla' => 2,
'eleifend' => 3, 'eleifend' => 3,
], ],
]; ];
@@ -433,16 +428,16 @@ letsTest[2] = value_2;';
*/ */
$array = [ $array = [
'light' => '#fff', 'light' => '#fff',
'dark' => '#000', 'dark' => '#000',
]; ];
self::assertEquals($array, Arrays::string2array('light:#fff|dark:#000')); self::assertEquals($array, Arrays::string2array('light:#fff|dark:#000'));
self::assertEquals($array, Arrays::string2array('light: #fff | dark: #000')); self::assertEquals($array, Arrays::string2array('light: #fff | dark: #000'));
$array = [ $array = [
'red' => '#f00', 'red' => '#f00',
'green' => '#0f0', 'green' => '#0f0',
'blue' => '#00f', 'blue' => '#00f',
]; ];
self::assertEquals($array, Arrays::string2array('red:#f00|green:#0f0|blue:#00f')); self::assertEquals($array, Arrays::string2array('red:#f00|green:#0f0|blue:#00f'));
@@ -494,12 +489,12 @@ letsTest[2] = value_2;';
$keys16 = [ $keys16 = [
'a' => 'lorem', 'a' => 'lorem',
11 => 'amet', 11 => 'amet',
]; ];
$keys17 = [ $keys17 = [
'a' => 'lorem', 'a' => 'lorem',
11 => 'amet', 11 => 'amet',
'c' => 'sit__', 'c' => 'sit__',
]; ];
@@ -523,16 +518,16 @@ letsTest[2] = value_2;';
* Using default separator and other default arguments * Using default separator and other default arguments
*/ */
$expected = [ $expected = [
'lorem.ipsum.dolor' => 'sit', 'lorem.ipsum.dolor' => 'sit',
'lorem.ipsum.diam.non' => 'egestas', 'lorem.ipsum.diam.non' => 'egestas',
'consectetur' => 'adipiscing', 'consectetur' => 'adipiscing',
'mollis' => 1234, 'mollis' => 1234,
2 => [], 2 => [],
'sit.nullam' => 'donec', 'sit.nullam' => 'donec',
'sit.aliquet.vitae.ligula' => 'quis', 'sit.aliquet.vitae.ligula' => 'quis',
'sit.0' => 'elit', 'sit.0' => 'elit',
'amet.0' => 'iaculis', 'amet.0' => 'iaculis',
'amet.1' => 'primis', 'amet.1' => 'primis',
]; ];
self::assertEquals($expected, Arrays::getLastElementsPaths($this->complexArray)); self::assertEquals($expected, Arrays::getLastElementsPaths($this->complexArray));
@@ -542,16 +537,16 @@ letsTest[2] = value_2;';
*/ */
$separator = ' -> '; $separator = ' -> ';
$expected = [ $expected = [
sprintf('lorem%sipsum%sdolor', $separator, $separator) => 'sit', sprintf('lorem%sipsum%sdolor', $separator, $separator) => 'sit',
sprintf('lorem%sipsum%sdiam%snon', $separator, $separator, $separator) => 'egestas', sprintf('lorem%sipsum%sdiam%snon', $separator, $separator, $separator) => 'egestas',
'consectetur' => 'adipiscing', 'consectetur' => 'adipiscing',
'mollis' => 1234, 'mollis' => 1234,
2 => [], 2 => [],
sprintf('sit%snullam', $separator) => 'donec', sprintf('sit%snullam', $separator) => 'donec',
sprintf('sit%saliquet%svitae%sligula', $separator, $separator, $separator) => 'quis', sprintf('sit%saliquet%svitae%sligula', $separator, $separator, $separator) => 'quis',
sprintf('sit%s0', $separator) => 'elit', sprintf('sit%s0', $separator) => 'elit',
sprintf('amet%s0', $separator) => 'iaculis', sprintf('amet%s0', $separator) => 'iaculis',
sprintf('amet%s1', $separator) => 'primis', sprintf('amet%s1', $separator) => 'primis',
]; ];
self::assertEquals($expected, Arrays::getLastElementsPaths($this->complexArray, $separator)); self::assertEquals($expected, Arrays::getLastElementsPaths($this->complexArray, $separator));
@@ -560,16 +555,16 @@ letsTest[2] = value_2;';
* Special exception: do not use, stop recursive on the "diam" key * Special exception: do not use, stop recursive on the "diam" key
*/ */
$expected = [ $expected = [
'lorem.ipsum.dolor' => 'sit', 'lorem.ipsum.dolor' => 'sit',
'consectetur' => 'adipiscing', 'consectetur' => 'adipiscing',
'mollis' => 1234, 'mollis' => 1234,
2 => [], 2 => [],
'sit.nullam' => 'donec', 'sit.nullam' => 'donec',
'sit.aliquet.vitae.ligula' => 'quis', 'sit.aliquet.vitae.ligula' => 'quis',
'sit.0' => 'elit', 'sit.0' => 'elit',
'amet.0' => 'iaculis', 'amet.0' => 'iaculis',
'amet.1' => 'primis', 'amet.1' => 'primis',
'lorem.ipsum.diam' => [ 'lorem.ipsum.diam' => [
'non' => 'egestas', 'non' => 'egestas',
], ],
]; ];
@@ -584,17 +579,17 @@ letsTest[2] = value_2;';
*/ */
$expected = [ $expected = [
'lorem . ipsum . dolor' => 'sit', 'lorem . ipsum . dolor' => 'sit',
'consectetur' => 'adipiscing', 'consectetur' => 'adipiscing',
'mollis' => 1234, 'mollis' => 1234,
2 => [], 2 => [],
'sit . nullam' => 'donec', 'sit . nullam' => 'donec',
'sit . 0' => 'elit', 'sit . 0' => 'elit',
'amet . 0' => 'iaculis', 'amet . 0' => 'iaculis',
'amet . 1' => 'primis', 'amet . 1' => 'primis',
'lorem . ipsum . diam' => [ 'lorem . ipsum . diam' => [
'non' => 'egestas', 'non' => 'egestas',
], ],
'sit . aliquet' => [ 'sit . aliquet' => [
'vitae' => [ 'vitae' => [
'ligula' => 'quis', 'ligula' => 'quis',
], ],
@@ -628,12 +623,12 @@ letsTest[2] = value_2;';
2, 2,
3, 3,
], ],
'primis > 0' => [ 'primis > 0' => [
'in', 'in',
'faucibus', 'faucibus',
'orci', 'orci',
], ],
'primis > 1' => [ 'primis > 1' => [
'luctus', 'luctus',
'et', 'et',
'ultrices', 'ultrices',
@@ -658,14 +653,14 @@ letsTest[2] = value_2;';
*/ */
$expected = [ $expected = [
'lorem > ipsum > dolor' => 'sit', 'lorem > ipsum > dolor' => 'sit',
'consectetur' => 'adipiscing', 'consectetur' => 'adipiscing',
'mollis' => 1234, 'mollis' => 1234,
2 => [], 2 => [],
'sit > nullam' => 'donec', 'sit > nullam' => 'donec',
'sit > 0' => 'elit', 'sit > 0' => 'elit',
'amet > 0' => 'iaculis', 'amet > 0' => 'iaculis',
'amet > 1' => 'primis', 'amet > 1' => 'primis',
'lorem > ipsum > diam' => [ 'lorem > ipsum > diam' => [
'non' => 'egestas', 'non' => 'egestas',
], ],
'sit > aliquet > vitae' => [ 'sit > aliquet > vitae' => [
@@ -684,7 +679,7 @@ letsTest[2] = value_2;';
* Stop building of paths on these paths (verify paths only) * Stop building of paths on these paths (verify paths only)
*/ */
$expected = [ $expected = [
'ipsum > quis > vestibulum > porta-1' => [ 'ipsum > quis > vestibulum > porta-1' => [
'turpis', 'turpis',
'urna', 'urna',
], ],
@@ -696,13 +691,13 @@ letsTest[2] = value_2;';
], ],
], ],
], ],
'ipsum > quis > vestibulum > porta-3 > 0' => 1, 'ipsum > quis > vestibulum > porta-3 > 0' => 1,
'ipsum > quis > vestibulum > porta-3 > 1' => 2, 'ipsum > quis > vestibulum > porta-3 > 1' => 2,
'ipsum > quis > vestibulum > porta-3 > 2' => 3, 'ipsum > quis > vestibulum > porta-3 > 2' => 3,
'primis > 0 > 0' => 'in', 'primis > 0 > 0' => 'in',
'primis > 0 > 1' => 'faucibus', 'primis > 0 > 1' => 'faucibus',
'primis > 0 > 2' => 'orci', 'primis > 0 > 2' => 'orci',
'primis > 1' => [ 'primis > 1' => [
'luctus', 'luctus',
'et', 'et',
'ultrices', 'ultrices',
@@ -721,7 +716,7 @@ letsTest[2] = value_2;';
* Stop building of paths if path contains any of these part (verify part of paths only) * Stop building of paths if path contains any of these part (verify part of paths only)
*/ */
$expected = [ $expected = [
'ipsum > quis > vestibulum > porta-1' => [ 'ipsum > quis > vestibulum > porta-1' => [
'turpis', 'turpis',
'urna', 'urna',
], ],
@@ -731,15 +726,15 @@ letsTest[2] = value_2;';
'aliquam', 'aliquam',
], ],
], ],
'ipsum > quis > vestibulum > porta-3 > 0' => 1, 'ipsum > quis > vestibulum > porta-3 > 0' => 1,
'ipsum > quis > vestibulum > porta-3 > 1' => 2, 'ipsum > quis > vestibulum > porta-3 > 1' => 2,
'ipsum > quis > vestibulum > porta-3 > 2' => 3, 'ipsum > quis > vestibulum > porta-3 > 2' => 3,
'primis > 0' => [ 'primis > 0' => [
'in', 'in',
'faucibus', 'faucibus',
'orci', 'orci',
], ],
'primis > 1' => [ 'primis > 1' => [
'luctus', 'luctus',
'et', 'et',
'ultrices', 'ultrices',
@@ -835,7 +830,7 @@ letsTest[2] = value_2;';
]; ];
$existingKeys = [ $existingKeys = [
'simpleArray' => [ 'simpleArray' => [
1, 1,
3, 3,
4, 4,
@@ -844,11 +839,11 @@ letsTest[2] = value_2;';
'dolor', 'dolor',
'amet', 'amet',
], ],
'twoDimensionsArray' => [ 'twoDimensionsArray' => [
2, 2,
3, 3,
], ],
'complexArray' => [ 'complexArray' => [
'sit', 'sit',
'aliquet', 'aliquet',
'vitae', 'vitae',
@@ -888,7 +883,7 @@ letsTest[2] = value_2;';
2, 2,
2, 2,
], ],
'complexArray' => [ 'complexArray' => [
[ [
'lorem', 'lorem',
'ipsum', 'ipsum',
@@ -994,22 +989,22 @@ letsTest[2] = value_2;';
* Positive case - multi-dimensions array * Positive case - multi-dimensions array
*/ */
$effect = [ $effect = [
'amet' => [ 'amet' => [
'iaculis', 'iaculis',
'primis', 'primis',
], ],
'consectetur' => 'adipiscing', 'consectetur' => 'adipiscing',
'lorem' => [ 'lorem' => [
'ipsum' => [ 'ipsum' => [
'dolor' => 'sit', 'dolor' => 'sit',
'diam' => [ 'diam' => [
'non' => 'egestas', 'non' => 'egestas',
], ],
], ],
], ],
'mollis' => 1234, 'mollis' => 1234,
'sit' => [ 'sit' => [
'nullam' => 'donec', 'nullam' => 'donec',
'aliquet' => [ 'aliquet' => [
'vitae' => [ 'vitae' => [
'ligula' => 'quis', 'ligula' => 'quis',
@@ -1017,7 +1012,7 @@ letsTest[2] = value_2;';
], ],
'elit', 'elit',
], ],
2 => [], 2 => [],
]; ];
self::assertEquals($effect, Arrays::ksortRecursive($this->complexArray)); self::assertEquals($effect, Arrays::ksortRecursive($this->complexArray));
@@ -1026,23 +1021,23 @@ letsTest[2] = value_2;';
* Positive case - multi-dimensions array - with options of ksort() function * Positive case - multi-dimensions array - with options of ksort() function
*/ */
$effect = [ $effect = [
2 => [], 2 => [],
'amet' => [ 'amet' => [
'iaculis', 'iaculis',
'primis', 'primis',
], ],
'consectetur' => 'adipiscing', 'consectetur' => 'adipiscing',
'lorem' => [ 'lorem' => [
'ipsum' => [ 'ipsum' => [
'dolor' => 'sit', 'dolor' => 'sit',
'diam' => [ 'diam' => [
'non' => 'egestas', 'non' => 'egestas',
], ],
], ],
], ],
'mollis' => 1234, 'mollis' => 1234,
'sit' => [ 'sit' => [
'nullam' => 'donec', 'nullam' => 'donec',
'aliquet' => [ 'aliquet' => [
'vitae' => [ 'vitae' => [
'ligula' => 'quis', 'ligula' => 'quis',
@@ -1091,7 +1086,7 @@ letsTest[2] = value_2;';
'dolor', 'dolor',
'sit', 'sit',
], ],
'amet' => [ 'amet' => [
'consectetur', 'consectetur',
'adipiscing' => [ 'adipiscing' => [
'elit' => [ 'elit' => [
@@ -1110,10 +1105,10 @@ letsTest[2] = value_2;';
'sit', 'sit',
Arrays::POSITION_KEY_NAME => 1, Arrays::POSITION_KEY_NAME => 1,
], ],
'amet' => [ 'amet' => [
'consectetur', 'consectetur',
'adipiscing' => [ 'adipiscing' => [
'elit' => [ 'elit' => [
'cras', 'cras',
'quis', 'quis',
'ligula', 'ligula',
@@ -1238,7 +1233,7 @@ letsTest[2] = value_2;';
$sorted = [ $sorted = [
'dolor' => 'sit', 'dolor' => 'sit',
'amet' => 'consectetur', 'amet' => 'consectetur',
'Lorem' => 'ipsum', 'Lorem' => 'ipsum',
]; ];
@@ -1311,9 +1306,9 @@ letsTest[2] = value_2;';
* An array with elements that contain separator * An array with elements that contain separator
*/ */
$array = [ $array = [
'lorem' . $separator, 'lorem'.$separator,
'ipsum', 'ipsum',
$separator . 'dolor', $separator.'dolor',
]; ];
self::assertEquals(implode($separator, [ self::assertEquals(implode($separator, [
@@ -1663,7 +1658,7 @@ letsTest[2] = value_2;';
} }
/** /**
* Provides simple array to set/replace values with keys * Provides simple array to set/replace values with keys.
* *
* @return \Generator * @return \Generator
*/ */
@@ -1696,14 +1691,14 @@ letsTest[2] = value_2;';
'Lorem' => 0, 'Lorem' => 0,
'ipsum' => 1, 'ipsum' => 1,
'dolor' => 2, 'dolor' => 2,
'sit' => 3, 'sit' => 3,
'amet' => 4, 'amet' => 4,
], ],
]; ];
} }
/** /**
* Provides an array with duplicated values to set/replace values with keys * Provides an array with duplicated values to set/replace values with keys.
* *
* @return \Generator * @return \Generator
*/ */
@@ -1713,18 +1708,18 @@ letsTest[2] = value_2;';
[ [
'lorem' => 'ipsum', 'lorem' => 'ipsum',
'dolor' => 'ipsum', 'dolor' => 'ipsum',
'sit' => 'amet', 'sit' => 'amet',
'diam' => 'non', 'diam' => 'non',
'elit' => 'non', 'elit' => 'non',
'in' => 'non', 'in' => 'non',
], ],
[ [
'ipsum' => [ 'ipsum' => [
'lorem', 'lorem',
'dolor', 'dolor',
], ],
'amet' => 'sit', 'amet' => 'sit',
'non' => [ 'non' => [
'diam', 'diam',
'elit', 'elit',
'in', 'in',
@@ -1734,14 +1729,14 @@ letsTest[2] = value_2;';
yield[ yield[
[ [
'lorem' => [ 'lorem' => [
'diam' => 'non', 'diam' => 'non',
'elit' => 'non', 'elit' => 'non',
'in' => 'non', 'in' => 'non',
], ],
'dolor1' => 'ipsum', 'dolor1' => 'ipsum',
'dolor2' => 'ipsum', 'dolor2' => 'ipsum',
'sit' => 'amet', 'sit' => 'amet',
], ],
[ [
'lorem' => [ 'lorem' => [
@@ -1755,7 +1750,7 @@ letsTest[2] = value_2;';
'dolor1', 'dolor1',
'dolor2', 'dolor2',
], ],
'amet' => 'sit', 'amet' => 'sit',
], ],
]; ];
} }
@@ -1778,7 +1773,7 @@ letsTest[2] = value_2;';
$this->simpleArrayWithKeys = [ $this->simpleArrayWithKeys = [
'Lorem' => 'ipsum', 'Lorem' => 'ipsum',
'dolor' => 'sit', 'dolor' => 'sit',
'amet' => 'consectetur', 'amet' => 'consectetur',
]; ];
$this->twoDimensionsArray = [ $this->twoDimensionsArray = [
@@ -1803,19 +1798,19 @@ letsTest[2] = value_2;';
]; ];
$this->complexArray = [ $this->complexArray = [
'lorem' => [ 'lorem' => [
'ipsum' => [ 'ipsum' => [
'dolor' => 'sit', 'dolor' => 'sit',
'diam' => [ 'diam' => [
'non' => 'egestas', 'non' => 'egestas',
], ],
], ],
], ],
'consectetur' => 'adipiscing', 'consectetur' => 'adipiscing',
'mollis' => 1234, 'mollis' => 1234,
2 => [], 2 => [],
'sit' => [ 'sit' => [
'nullam' => 'donec', 'nullam' => 'donec',
'aliquet' => [ 'aliquet' => [
'vitae' => [ 'vitae' => [
'ligula' => 'quis', 'ligula' => 'quis',
@@ -1823,14 +1818,14 @@ letsTest[2] = value_2;';
], ],
'elit', 'elit',
], ],
'amet' => [ 'amet' => [
'iaculis', 'iaculis',
'primis', 'primis',
], ],
]; ];
$this->superComplexArray = [ $this->superComplexArray = [
'ipsum' => [ 'ipsum' => [
'quis' => [ 'quis' => [
'vestibulum' => [ 'vestibulum' => [
'porta-1' => [ 'porta-1' => [

View File

@@ -8,22 +8,17 @@
namespace Meritoo\Common\Test\Utilities; namespace Meritoo\Common\Test\Utilities;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Utilities\Bundle; use Meritoo\Common\Utilities\Bundle;
use PHPUnit_Framework_TestCase;
/** /**
* Test case of the useful methods for bundle * Tests of the useful methods for bundle.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class BundleTest extends BaseTestCase class BundleTest extends PHPUnit_Framework_TestCase
{ {
public function testConstructor()
{
static::assertHasNoConstructor(Bundle::class);
}
public function testGetBundleViewPathEmptyPathAndBundle() public function testGetBundleViewPathEmptyPathAndBundle()
{ {
self::assertNull(Bundle::getBundleViewPath('', '')); self::assertNull(Bundle::getBundleViewPath('', ''));

View File

@@ -13,7 +13,7 @@ use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Utilities\Composer; use Meritoo\Common\Utilities\Composer;
/** /**
* Test case of the useful Composer-related methods * Tests of the useful Composer-related methods.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -21,17 +21,12 @@ use Meritoo\Common\Utilities\Composer;
class ComposerTest extends BaseTestCase class ComposerTest extends BaseTestCase
{ {
/** /**
* Path of existing composer.json used as source of data for tests * Path of existing composer.json used as source of data for tests.
* *
* @var string * @var string
*/ */
private $composerJsonPath; private $composerJsonPath;
public function testConstructor()
{
static::assertHasNoConstructor(Composer::class);
}
/** /**
* @param string $composerJsonPath Empty value, e.g. "" * @param string $composerJsonPath Empty value, e.g. ""
* @dataProvider provideEmptyValue * @dataProvider provideEmptyValue
@@ -64,7 +59,7 @@ class ComposerTest extends BaseTestCase
} }
/** /**
* Provides names and values of existing nodes * Provides names and values of existing nodes.
* *
* @return Generator * @return Generator
*/ */

View File

@@ -15,7 +15,7 @@ use Meritoo\Common\Type\OopVisibilityType;
use Meritoo\Common\Utilities\DatePeriod; use Meritoo\Common\Utilities\DatePeriod;
/** /**
* Test case of date's period * Tests of date's period.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -24,7 +24,7 @@ class DatePeriodTest extends BaseTestCase
{ {
public function testConstructorVisibilityAndArguments() public function testConstructorVisibilityAndArguments()
{ {
static::assertConstructorVisibilityAndArguments(DatePeriod::class, OopVisibilityType::IS_PUBLIC, 2, 0); $this->verifyConstructorVisibilityAndArguments(DatePeriod::class, OopVisibilityType::IS_PUBLIC, 2, 0);
} }
/** /**
@@ -110,7 +110,7 @@ class DatePeriodTest extends BaseTestCase
} }
/** /**
* Provides the start and end date of date period * Provides the start and end date of date period.
* *
* @return Generator * @return Generator
*/ */
@@ -143,7 +143,7 @@ class DatePeriodTest extends BaseTestCase
} }
/** /**
* Provides incorrect period * Provides incorrect period.
* *
* @return Generator * @return Generator
*/ */
@@ -155,7 +155,7 @@ class DatePeriodTest extends BaseTestCase
} }
/** /**
* Provides period to verify * Provides period to verify.
* *
* @return Generator * @return Generator
*/ */
@@ -173,7 +173,7 @@ class DatePeriodTest extends BaseTestCase
} }
/** /**
* Provides period and incorrect format of date to verify * Provides period and incorrect format of date to verify.
* *
* @return Generator * @return Generator
*/ */
@@ -199,7 +199,7 @@ class DatePeriodTest extends BaseTestCase
} }
/** /**
* Provides period and format of date to verify * Provides period and format of date to verify.
* *
* @return Generator * @return Generator
*/ */

View File

@@ -16,18 +16,13 @@ use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Utilities\Date; use Meritoo\Common\Utilities\Date;
/** /**
* Test case of the Date methods (only static functions) * Tests of the Date methods (only static functions).
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class DateTest extends BaseTestCase class DateTest extends BaseTestCase
{ {
public function testConstructor()
{
static::assertHasNoConstructor(Date::class);
}
/** /**
* @param mixed $value Empty value, e.g. "" * @param mixed $value Empty value, e.g. ""
* @dataProvider provideEmptyValue * @dataProvider provideEmptyValue
@@ -194,7 +189,7 @@ class DateTest extends BaseTestCase
public function testGetCurrentDayOfWeek() public function testGetCurrentDayOfWeek()
{ {
self::assertRegExp('/^[0-6]{1}$/', (string)Date::getCurrentDayOfWeek()); self::assertRegExp('/^[0-6]{1}$/', (string) Date::getCurrentDayOfWeek());
} }
public function testGetCurrentDayOfWeekName() public function testGetCurrentDayOfWeekName()
@@ -236,7 +231,7 @@ class DateTest extends BaseTestCase
*/ */
public function testGetDayOfWeek($year, $month, $day) public function testGetDayOfWeek($year, $month, $day)
{ {
self::assertRegExp('/^[0-6]{1}$/', (string)Date::getDayOfWeek($year, $month, $day)); self::assertRegExp('/^[0-6]{1}$/', (string) Date::getDayOfWeek($year, $month, $day));
} }
/** /**
@@ -265,10 +260,10 @@ class DateTest extends BaseTestCase
$dateEnd = '2017-01-02'; $dateEnd = '2017-01-02';
$effect = [ $effect = [
Date::DATE_DIFFERENCE_UNIT_YEARS => 0, Date::DATE_DIFFERENCE_UNIT_YEARS => 0,
Date::DATE_DIFFERENCE_UNIT_MONTHS => 0, Date::DATE_DIFFERENCE_UNIT_MONTHS => 0,
Date::DATE_DIFFERENCE_UNIT_DAYS => 1, Date::DATE_DIFFERENCE_UNIT_DAYS => 1,
Date::DATE_DIFFERENCE_UNIT_HOURS => 0, Date::DATE_DIFFERENCE_UNIT_HOURS => 0,
Date::DATE_DIFFERENCE_UNIT_MINUTES => 0, Date::DATE_DIFFERENCE_UNIT_MINUTES => 0,
]; ];
@@ -285,10 +280,10 @@ class DateTest extends BaseTestCase
* Difference of 1 day (using the relative date format) * Difference of 1 day (using the relative date format)
*/ */
$effect = [ $effect = [
Date::DATE_DIFFERENCE_UNIT_YEARS => 0, Date::DATE_DIFFERENCE_UNIT_YEARS => 0,
Date::DATE_DIFFERENCE_UNIT_MONTHS => 0, Date::DATE_DIFFERENCE_UNIT_MONTHS => 0,
Date::DATE_DIFFERENCE_UNIT_DAYS => 1, Date::DATE_DIFFERENCE_UNIT_DAYS => 1,
Date::DATE_DIFFERENCE_UNIT_HOURS => 0, Date::DATE_DIFFERENCE_UNIT_HOURS => 0,
Date::DATE_DIFFERENCE_UNIT_MINUTES => 0, Date::DATE_DIFFERENCE_UNIT_MINUTES => 0,
]; ];
@@ -306,10 +301,10 @@ class DateTest extends BaseTestCase
$dateEnd = '2017-01-02 14:15'; $dateEnd = '2017-01-02 14:15';
$effect = [ $effect = [
Date::DATE_DIFFERENCE_UNIT_YEARS => 0, Date::DATE_DIFFERENCE_UNIT_YEARS => 0,
Date::DATE_DIFFERENCE_UNIT_MONTHS => 0, Date::DATE_DIFFERENCE_UNIT_MONTHS => 0,
Date::DATE_DIFFERENCE_UNIT_DAYS => 1, Date::DATE_DIFFERENCE_UNIT_DAYS => 1,
Date::DATE_DIFFERENCE_UNIT_HOURS => 2, Date::DATE_DIFFERENCE_UNIT_HOURS => 2,
Date::DATE_DIFFERENCE_UNIT_MINUTES => 15, Date::DATE_DIFFERENCE_UNIT_MINUTES => 15,
]; ];
@@ -335,10 +330,10 @@ class DateTest extends BaseTestCase
$dateEnd = '2017-02-11 16:30'; $dateEnd = '2017-02-11 16:30';
$effect = [ $effect = [
Date::DATE_DIFFERENCE_UNIT_YEARS => 0, Date::DATE_DIFFERENCE_UNIT_YEARS => 0,
Date::DATE_DIFFERENCE_UNIT_MONTHS => 1, Date::DATE_DIFFERENCE_UNIT_MONTHS => 1,
Date::DATE_DIFFERENCE_UNIT_DAYS => 41, Date::DATE_DIFFERENCE_UNIT_DAYS => 41,
Date::DATE_DIFFERENCE_UNIT_HOURS => 4, Date::DATE_DIFFERENCE_UNIT_HOURS => 4,
Date::DATE_DIFFERENCE_UNIT_MINUTES => 30, Date::DATE_DIFFERENCE_UNIT_MINUTES => 30,
]; ];
@@ -367,10 +362,10 @@ class DateTest extends BaseTestCase
$dateEnd = $dateStart; $dateEnd = $dateStart;
$effect = [ $effect = [
Date::DATE_DIFFERENCE_UNIT_YEARS => 0, Date::DATE_DIFFERENCE_UNIT_YEARS => 0,
Date::DATE_DIFFERENCE_UNIT_MONTHS => 0, Date::DATE_DIFFERENCE_UNIT_MONTHS => 0,
Date::DATE_DIFFERENCE_UNIT_DAYS => 0, Date::DATE_DIFFERENCE_UNIT_DAYS => 0,
Date::DATE_DIFFERENCE_UNIT_HOURS => 0, Date::DATE_DIFFERENCE_UNIT_HOURS => 0,
Date::DATE_DIFFERENCE_UNIT_MINUTES => 0, Date::DATE_DIFFERENCE_UNIT_MINUTES => 0,
]; ];
@@ -507,7 +502,7 @@ class DateTest extends BaseTestCase
} }
/** /**
* Provides incorrect invalidCount of DateTime * Provides incorrect invalidCount of DateTime.
* *
* @return Generator * @return Generator
*/ */
@@ -557,7 +552,7 @@ class DateTest extends BaseTestCase
} }
/** /**
* Provides invalid format of date * Provides invalid format of date.
* *
* @return Generator * @return Generator
*/ */
@@ -575,7 +570,7 @@ class DateTest extends BaseTestCase
} }
/** /**
* Provide empty dates for date difference * Provide empty dates for date difference.
* *
* @return Generator * @return Generator
*/ */
@@ -603,7 +598,7 @@ class DateTest extends BaseTestCase
} }
/** /**
* Provides incorrect values of year, month and day * Provides incorrect values of year, month and day.
* *
* @return Generator * @return Generator
*/ */
@@ -653,7 +648,7 @@ class DateTest extends BaseTestCase
} }
/** /**
* Provides values of year, month and day * Provides values of year, month and day.
* *
* @return Generator * @return Generator
*/ */
@@ -703,7 +698,7 @@ class DateTest extends BaseTestCase
} }
/** /**
* Provides data for the random date with incorrect end of random partition * Provides data for the random date with incorrect end of random partition.
* *
* @return Generator * @return Generator
*/ */
@@ -717,7 +712,7 @@ class DateTest extends BaseTestCase
} }
/** /**
* Provides data for the random date * Provides data for the random date.
* *
* @return Generator * @return Generator
*/ */

View File

@@ -12,18 +12,13 @@ use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Utilities\GeneratorUtility; use Meritoo\Common\Utilities\GeneratorUtility;
/** /**
* Test case of the useful methods for the Generator class * Tests of the useful methods for the Generator class.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class GeneratorUtilityTest extends BaseTestCase class GeneratorUtilityTest extends BaseTestCase
{ {
public function testConstructor()
{
static::assertHasNoConstructor(GeneratorUtility::class);
}
public function testGetGeneratorElements() public function testGetGeneratorElements()
{ {
/* /*

View File

@@ -13,18 +13,13 @@ use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Utilities\Locale; use Meritoo\Common\Utilities\Locale;
/** /**
* Test case of the useful locale methods * Tests of the useful locale methods.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class LocaleTest extends BaseTestCase class LocaleTest extends BaseTestCase
{ {
public function testConstructor()
{
static::assertHasNoConstructor(Locale::class);
}
/** /**
* @param mixed $languageCode Empty value, e.g. "" * @param mixed $languageCode Empty value, e.g. ""
* @dataProvider provideEmptyValue * @dataProvider provideEmptyValue
@@ -69,7 +64,7 @@ class LocaleTest extends BaseTestCase
} }
/** /**
* Provides language and country code * Provides language and country code.
* *
* @return Generator * @return Generator
*/ */
@@ -105,7 +100,7 @@ class LocaleTest extends BaseTestCase
} }
/** /**
* Provides category and language * Provides category and language.
* *
* @return Generator * @return Generator
*/ */

View File

@@ -13,18 +13,13 @@ use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Utilities\MimeTypes; use Meritoo\Common\Utilities\MimeTypes;
/** /**
* Test case of the useful methods for mime types of files * Tests of the useful methods for mime types of files.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class MimeTypesTest extends BaseTestCase class MimeTypesTest extends BaseTestCase
{ {
public function testConstructor()
{
static::assertHasNoConstructor(MimeTypes::class);
}
/** /**
* @param mixed $mimeType Empty value, e.g. "" * @param mixed $mimeType Empty value, e.g. ""
* @dataProvider provideEmptyValue * @dataProvider provideEmptyValue
@@ -191,7 +186,7 @@ class MimeTypesTest extends BaseTestCase
} }
/** /**
* Provides not existing mime type * Provides not existing mime type.
* *
* @return Generator * @return Generator
*/ */
@@ -203,7 +198,7 @@ class MimeTypesTest extends BaseTestCase
} }
/** /**
* Provides mime type of non-image * Provides mime type of non-image.
* *
* @return Generator * @return Generator
*/ */
@@ -216,7 +211,7 @@ class MimeTypesTest extends BaseTestCase
} }
/** /**
* Provides mime type of image * Provides mime type of image.
* *
* @return Generator * @return Generator
*/ */
@@ -231,7 +226,7 @@ class MimeTypesTest extends BaseTestCase
} }
/** /**
* Provides existing mime type used to get single, one extension * Provides existing mime type used to get single, one extension.
* *
* @return Generator * @return Generator
*/ */
@@ -254,7 +249,7 @@ class MimeTypesTest extends BaseTestCase
} }
/** /**
* Provides existing mime type used to get multiple, more than one extension * Provides existing mime type used to get multiple, more than one extension.
* *
* @return Generator * @return Generator
*/ */
@@ -321,7 +316,7 @@ class MimeTypesTest extends BaseTestCase
} }
/** /**
* Provides not existing mime types * Provides not existing mime types.
* *
* @return Generator * @return Generator
*/ */
@@ -349,7 +344,7 @@ class MimeTypesTest extends BaseTestCase
} }
/** /**
* Provides mime types used to get extensions * Provides mime types used to get extensions.
* *
* @return Generator * @return Generator
*/ */
@@ -362,7 +357,7 @@ class MimeTypesTest extends BaseTestCase
], ],
[ [
'application/x-7z-compressed' => '7z', 'application/x-7z-compressed' => '7z',
'application/json' => 'json', 'application/json' => 'json',
], ],
]; ];
@@ -379,12 +374,12 @@ class MimeTypesTest extends BaseTestCase
'nb', 'nb',
'mb', 'mb',
], ],
'application/xml' => [ 'application/xml' => [
'xml', 'xml',
'xsl', 'xsl',
], ],
'audio/mp4' => 'mp4a', 'audio/mp4' => 'mp4a',
'video/mp4' => [ 'video/mp4' => [
'mp4', 'mp4',
'mp4v', 'mp4v',
'mpg4', 'mpg4',
@@ -395,7 +390,7 @@ class MimeTypesTest extends BaseTestCase
} }
/** /**
* Provides mime types used to get extensions as upper case * Provides mime types used to get extensions as upper case.
* *
* @return Generator * @return Generator
*/ */
@@ -408,7 +403,7 @@ class MimeTypesTest extends BaseTestCase
], ],
[ [
'application/x-7z-compressed' => '7Z', 'application/x-7z-compressed' => '7Z',
'application/json' => 'JSON', 'application/json' => 'JSON',
], ],
]; ];
@@ -424,12 +419,12 @@ class MimeTypesTest extends BaseTestCase
'XML', 'XML',
'XSL', 'XSL',
], ],
'audio/mp4' => 'MP4A', 'audio/mp4' => 'MP4A',
'text/html' => [ 'text/html' => [
'HTML', 'HTML',
'HTM', 'HTM',
], ],
'video/mp4' => [ 'video/mp4' => [
'MP4', 'MP4',
'MP4V', 'MP4V',
'MPG4', 'MPG4',
@@ -440,7 +435,7 @@ class MimeTypesTest extends BaseTestCase
} }
/** /**
* Provides real file path to get mime type * Provides real file path to get mime type.
* *
* @return Generator * @return Generator
*/ */
@@ -458,7 +453,7 @@ class MimeTypesTest extends BaseTestCase
} }
/** /**
* Provides real file path to get information if the file is an image * Provides real file path to get information if the file is an image.
* *
* @return Generator * @return Generator
*/ */

View File

@@ -17,7 +17,7 @@ use Meritoo\Common\Utilities\Miscellaneous;
use stdClass; use stdClass;
/** /**
* Test case of the Miscellaneous methods (only static functions) * Tests of the Miscellaneous methods (only static functions).
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
@@ -28,14 +28,9 @@ class MiscellaneousTest extends BaseTestCase
private $stringCommaSeparated; private $stringCommaSeparated;
private $stringDotSeparated; private $stringDotSeparated;
public function testConstructor()
{
static::assertHasNoConstructor(Miscellaneous::class);
}
public function testGetDirectoryContent() public function testGetDirectoryContent()
{ {
$directoryPath = __DIR__ . '/../'; $directoryPath = __DIR__.'/../';
$filePath = __FILE__; $filePath = __FILE__;
self::assertNull(Miscellaneous::getDirectoryContent(null)); self::assertNull(Miscellaneous::getDirectoryContent(null));
@@ -128,8 +123,8 @@ class MiscellaneousTest extends BaseTestCase
*/ */
$uniqueFileName2 = Miscellaneous::getUniqueFileName($originalFileName); $uniqueFileName2 = Miscellaneous::getUniqueFileName($originalFileName);
$isCorrect1 = (bool)preg_match($pattern, $uniqueFileName1); $isCorrect1 = (bool) preg_match($pattern, $uniqueFileName1);
$isCorrect2 = (bool)preg_match($pattern, $uniqueFileName2); $isCorrect2 = (bool) preg_match($pattern, $uniqueFileName2);
self::assertTrue($isCorrect1); self::assertTrue($isCorrect1);
self::assertTrue($isCorrect2); self::assertTrue($isCorrect2);
@@ -159,8 +154,8 @@ class MiscellaneousTest extends BaseTestCase
$expected = "int(123)\n"; $expected = "int(123)\n";
if ($xdebugLoaded) { if ($xdebugLoaded) {
$libraryPath = realpath(sprintf('%s%s', dirname(__FILE__), '/../..')); $libraryPath = realpath(sprintf('%s%s', dirname(__FILE__), '/../../../../..'));
$filePath = sprintf('%s%s', $libraryPath, '/src/Utilities/Miscellaneous.php:'); $filePath = sprintf('%s%s', $libraryPath, '/src/Meritoo/Common/Utilities/Miscellaneous.php:');
/* /*
* Attention. I have to use "\d+" at the end of $filePath, because number of line may be different if new * Attention. I have to use "\d+" at the end of $filePath, because number of line may be different if new
@@ -350,8 +345,8 @@ class MiscellaneousTest extends BaseTestCase
{ {
$suffix = '...'; $suffix = '...';
self::assertEquals('Lorem ipsum' . $suffix, Miscellaneous::substringToWord($this->stringCommaSeparated, 20)); self::assertEquals('Lorem ipsum'.$suffix, Miscellaneous::substringToWord($this->stringCommaSeparated, 20));
self::assertEquals('Lorem ipsum dolor sit' . $suffix, Miscellaneous::substringToWord($this->stringCommaSeparated, 25)); self::assertEquals('Lorem ipsum dolor sit'.$suffix, Miscellaneous::substringToWord($this->stringCommaSeparated, 25));
self::assertEquals('Lorem ipsum dolor', Miscellaneous::substringToWord($this->stringCommaSeparated, 20, '')); self::assertEquals('Lorem ipsum dolor', Miscellaneous::substringToWord($this->stringCommaSeparated, 20, ''));
self::assertEquals('Lorem ipsum dolor sit amet, consectetur', Miscellaneous::substringToWord($this->stringCommaSeparated, 40, '')); self::assertEquals('Lorem ipsum dolor sit amet, consectetur', Miscellaneous::substringToWord($this->stringCommaSeparated, 40, ''));
@@ -373,26 +368,26 @@ class MiscellaneousTest extends BaseTestCase
/* /*
* Removing not directory * Removing not directory
*/ */
$directoryPath = sys_get_temp_dir() . '/ipsum.txt'; $directoryPath = sys_get_temp_dir().'/ipsum.txt';
touch($directoryPath); touch($directoryPath);
self::assertTrue(Miscellaneous::removeDirectory($directoryPath)); self::assertTrue(Miscellaneous::removeDirectory($directoryPath));
/* /*
* Removing simple directory * Removing simple directory
*/ */
$directoryPath = sys_get_temp_dir() . '/lorem/ipsum'; $directoryPath = sys_get_temp_dir().'/lorem/ipsum';
mkdir($directoryPath, 0777, true); mkdir($directoryPath, 0777, true);
self::assertTrue(Miscellaneous::removeDirectory($directoryPath)); self::assertTrue(Miscellaneous::removeDirectory($directoryPath));
/* /*
* Removing more complex directory * Removing more complex directory
*/ */
$directory1Path = sys_get_temp_dir() . '/lorem/ipsum'; $directory1Path = sys_get_temp_dir().'/lorem/ipsum';
$directory2Path = sys_get_temp_dir() . '/lorem/dolor/sit'; $directory2Path = sys_get_temp_dir().'/lorem/dolor/sit';
mkdir($directory1Path, 0777, true); mkdir($directory1Path, 0777, true);
mkdir($directory2Path, 0777, true); mkdir($directory2Path, 0777, true);
self::assertTrue(Miscellaneous::removeDirectory(sys_get_temp_dir() . '/lorem', false)); self::assertTrue(Miscellaneous::removeDirectory(sys_get_temp_dir().'/lorem', false));
} }
/** /**
@@ -508,35 +503,16 @@ class MiscellaneousTest extends BaseTestCase
self::assertEquals('lorem ipsum', Miscellaneous::trimSmart(' lorem ipsum ')); self::assertEquals('lorem ipsum', Miscellaneous::trimSmart(' lorem ipsum '));
} }
/** public function testConcatenatePaths()
* @param mixed $emptyPaths Empty paths co concatenate
* @dataProvider provideEmptyValue
*/
public function testConcatenatePathsWithEmptyPaths($emptyPaths)
{
self::assertEquals('', Miscellaneous::concatenatePaths($emptyPaths));
}
public function testConcatenatePathsWithOneEmptyPath()
{
$paths = [
'first/directory',
'second/one',
'',
'and/the/third',
];
$concatenated = Miscellaneous::concatenatePaths($paths);
unset($paths[2]);
$imploded = implode('/', $paths);
self::assertEquals('/' . $imploded, $concatenated);
}
public function testConcatenatePathsInNixOs()
{ {
/* /*
* For *nix operating system * Common cases
*/
self::assertEquals('', Miscellaneous::concatenatePaths(null));
self::assertEquals('', Miscellaneous::concatenatePaths([]));
/*
* *nix operating system
*/ */
$paths1 = [ $paths1 = [
'first/directory', 'first/directory',
@@ -544,12 +520,9 @@ class MiscellaneousTest extends BaseTestCase
'and/the/third', 'and/the/third',
]; ];
self::assertEquals('/' . implode('/', $paths1), Miscellaneous::concatenatePaths($paths1)); self::assertEquals('/'.implode('/', $paths1), Miscellaneous::concatenatePaths($paths1));
self::assertEquals('/' . implode('/', $paths1), Miscellaneous::concatenatePaths($paths1[0], $paths1[1], $paths1[2])); self::assertEquals('/'.implode('/', $paths1), Miscellaneous::concatenatePaths($paths1[0], $paths1[1], $paths1[2]));
}
public function testConcatenatePathsInWindowsOs()
{
/* /*
* For Windows operating system * For Windows operating system
*/ */
@@ -747,13 +720,8 @@ class MiscellaneousTest extends BaseTestCase
self::assertSame($expected, Miscellaneous::fillMissingZeros($number, $length, $before)); self::assertSame($expected, Miscellaneous::fillMissingZeros($number, $length, $before));
} }
public function testGetProjectRootPath()
{
self::assertNotEmpty(Miscellaneous::getProjectRootPath());
}
/** /**
* Provides string to convert characters to latin characters and not lower cased and not human-readable * Provides string to convert characters to latin characters and not lower cased and not human-readable.
* *
* @return Generator * @return Generator
*/ */
@@ -848,7 +816,7 @@ class MiscellaneousTest extends BaseTestCase
} }
/** /**
* Provides string to convert characters to latin characters and lower cased and human-readable * Provides string to convert characters to latin characters and lower cased and human-readable.
* *
* @return Generator * @return Generator
*/ */
@@ -943,7 +911,7 @@ class MiscellaneousTest extends BaseTestCase
} }
/** /**
* Provides names of files * Provides names of files.
* *
* @return Generator * @return Generator
*/ */
@@ -971,7 +939,7 @@ class MiscellaneousTest extends BaseTestCase
} }
/** /**
* Provides string to convert to camel case * Provides string to convert to camel case.
* *
* @return Generator * @return Generator
*/ */
@@ -997,7 +965,7 @@ class MiscellaneousTest extends BaseTestCase
} }
/** /**
* Provides path used to remove the starting / beginning directory's separator * Provides path used to remove the starting / beginning directory's separator.
* *
* @return Generator * @return Generator
*/ */
@@ -1041,7 +1009,7 @@ class MiscellaneousTest extends BaseTestCase
} }
/** /**
* Provides path used to remove the ending directory's separator * Provides path used to remove the ending directory's separator.
* *
* @return Generator * @return Generator
*/ */
@@ -1085,7 +1053,7 @@ class MiscellaneousTest extends BaseTestCase
} }
/** /**
* Provides empty value used to fill missing zeros * Provides empty value used to fill missing zeros.
* *
* @return Generator * @return Generator
*/ */
@@ -1099,7 +1067,7 @@ class MiscellaneousTest extends BaseTestCase
} }
/** /**
* Provides number used to fill missing zeros * Provides number used to fill missing zeros.
* *
* @return Generator * @return Generator
*/ */

View File

@@ -19,15 +19,8 @@ class A
{ {
use E; use E;
private $count = 1;
protected function lorem() protected function lorem()
{ {
return 'ipsum'; return 'ipsum';
} }
protected function getCount()
{
return $this->count;
}
} }

View File

@@ -17,10 +17,4 @@ namespace Meritoo\Common\Test\Utilities\Reflection;
*/ */
class B extends A class B extends A
{ {
protected $name = 'Lorem Ipsum';
public function getName()
{
return $this->name;
}
} }

View File

@@ -10,7 +10,6 @@ namespace Meritoo\Common\Test\Utilities;
use DateTime; use DateTime;
use Generator; use Generator;
use Meritoo\Common\Collection\Collection;
use Meritoo\Common\Exception\Reflection\CannotResolveClassNameException; use Meritoo\Common\Exception\Reflection\CannotResolveClassNameException;
use Meritoo\Common\Exception\Reflection\MissingChildClassesException; use Meritoo\Common\Exception\Reflection\MissingChildClassesException;
use Meritoo\Common\Exception\Reflection\TooManyChildClassesException; use Meritoo\Common\Exception\Reflection\TooManyChildClassesException;
@@ -20,24 +19,16 @@ use Meritoo\Common\Test\Utilities\Reflection\B;
use Meritoo\Common\Test\Utilities\Reflection\C; use Meritoo\Common\Test\Utilities\Reflection\C;
use Meritoo\Common\Test\Utilities\Reflection\D; use Meritoo\Common\Test\Utilities\Reflection\D;
use Meritoo\Common\Test\Utilities\Reflection\E; use Meritoo\Common\Test\Utilities\Reflection\E;
use Meritoo\Common\Test\Utilities\Reflection\F;
use Meritoo\Common\Test\Utilities\Reflection\G;
use Meritoo\Common\Utilities\Reflection; use Meritoo\Common\Utilities\Reflection;
use ReflectionProperty;
/** /**
* Test case of the useful reflection methods * Tests of the useful reflection methods.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class ReflectionTest extends BaseTestCase class ReflectionTest extends BaseTestCase
{ {
public function testConstructor()
{
static::assertHasNoConstructor(Reflection::class);
}
/** /**
* @param mixed $invalidClass Empty value, e.g. "" * @param mixed $invalidClass Empty value, e.g. ""
* @dataProvider provideEmptyValue * @dataProvider provideEmptyValue
@@ -180,11 +171,11 @@ class ReflectionTest extends BaseTestCase
public function testGetMethods() public function testGetMethods()
{ {
self::assertEquals(1, count(Reflection::getMethods(B::class, true))); self::assertEquals(0, count(Reflection::getMethods(B::class, true)));
self::assertEquals(3, count(Reflection::getMethods(B::class))); self::assertEquals(1, count(Reflection::getMethods(B::class)));
self::assertEquals(2, count(Reflection::getMethods(A::class))); self::assertEquals(1, count(Reflection::getMethods(A::class)));
self::assertEquals(2, count(Reflection::getMethods(C::class, true))); self::assertEquals(2, count(Reflection::getMethods(C::class, true)));
self::assertEquals(5, count(Reflection::getMethods(C::class))); self::assertEquals(3, count(Reflection::getMethods(C::class)));
} }
/** /**
@@ -225,162 +216,8 @@ class ReflectionTest extends BaseTestCase
self::assertFalse(Reflection::usesTrait(D::class, E::class, true)); self::assertFalse(Reflection::usesTrait(D::class, E::class, true));
} }
public function testGetProperties()
{
self::assertCount(1, Reflection::getProperties(B::class));
}
public function testGetPropertiesUsingFilter()
{
self::assertCount(1, Reflection::getProperties(B::class, ReflectionProperty::IS_PROTECTED));
self::assertCount(0, Reflection::getProperties(B::class, ReflectionProperty::IS_PRIVATE));
self::assertCount(1, Reflection::getProperties(B::class, ReflectionProperty::IS_PRIVATE, true));
}
public function testGetPropertiesWithParents()
{
self::assertCount(2, Reflection::getProperties(B::class, null, true));
}
public function testGetPropertyValueOfNotExistingProperty()
{
self::assertNull(Reflection::getPropertyValue(new D(), 'something'));
self::assertNull(Reflection::getPropertyValue(new D(), 'something', true));
}
public function testGetPropertyValueFromChain()
{
$f = new F(1000, 'New York', 'USA', 'john.scott');
self::assertEquals('John', Reflection::getPropertyValue($f, 'gInstance.firstName'));
}
public function testGetPropertyValueWithPublicGetter()
{
$country = 'USA';
$f = new F(1000, 'New York', $country, 'john.scott');
self::assertEquals($country, Reflection::getPropertyValue($f, 'country'));
}
public function testGetPropertyValueWithProtectedGetter()
{
$city = 'New York';
$f = new F(1000, $city, 'USA', 'john.scott');
self::assertEquals($city, Reflection::getPropertyValue($f, 'city'));
}
public function testGetPropertyValueWithPrivateGetter()
{
$accountBalance = 1000;
$f = new F($accountBalance, 'New York', 'USA', 'john.scott');
self::assertEquals($accountBalance, Reflection::getPropertyValue($f, 'accountBalance'));
}
public function testGetPropertyValueWithoutGetter()
{
$username = 'john.scott';
$f = new F(1000, 'New York', 'USA', $username);
self::assertEquals($username, Reflection::getPropertyValue($f, 'username'));
}
public function testGetPropertyValuesFromEmptySource()
{
self::assertEquals([], Reflection::getPropertyValues([], 'something'));
self::assertEquals([], Reflection::getPropertyValues(new Collection(), 'something'));
}
public function testGetPropertyValuesOfNotExistingPropertyFromSingleObject()
{
self::assertEquals([], Reflection::getPropertyValues(new D(), 'something'));
self::assertEquals([], Reflection::getPropertyValues(new D(), 'something', true));
}
public function testGetPropertyValuesOfNotExistingPropertyFromMultipleObjects()
{
$objects = [
new A(),
new A(),
new A(),
new B(),
new B(),
new C(),
new D(),
];
self::assertEquals([], Reflection::getPropertyValues($objects, 'something'));
self::assertEquals([], Reflection::getPropertyValues($objects, 'something', true));
$collection = new Collection($objects);
self::assertEquals([], Reflection::getPropertyValues($collection, 'something'));
self::assertEquals([], Reflection::getPropertyValues($collection, 'something', true));
}
public function testGetPropertyValuesOfExistingPropertyFromSingleObject()
{
self::assertEquals(['John'], Reflection::getPropertyValues(new G(), 'firstName'));
self::assertEquals(['John'], Reflection::getPropertyValues(new G(), 'firstName', true));
}
public function testGetPropertyValuesOfExistingPropertyFromMultipleObjects()
{
$expected = [
'New York',
'London',
'Tokyo',
];
$objects = [
new F(1000, 'New York', 'USA', 'john.scott'),
new F(2000, 'London', 'GB', 'john.scott'),
new F(3000, 'Tokyo', 'Japan', 'john.scott'),
];
self::assertEquals($expected, Reflection::getPropertyValues($objects, 'city'));
self::assertEquals($expected, Reflection::getPropertyValues($objects, 'city', true));
$collection = new Collection($objects);
self::assertEquals($expected, Reflection::getPropertyValues($collection, 'city'));
self::assertEquals($expected, Reflection::getPropertyValues($collection, 'city', true));
}
public function testGetPropertyValuesFromChainAndSingleObject()
{
$f = new F(1000, 'New York', 'USA', 'john.scott');
self::assertEquals(['John'], Reflection::getPropertyValues($f, 'gInstance.firstName'));
self::assertEquals(['John'], Reflection::getPropertyValues($f, 'gInstance.firstName', true));
}
public function testGetPropertyValuesFromChainAndMultipleObjects()
{
$expected = [
'John',
'Mary',
'Peter',
];
$objects = [
new F(1000, 'New York', 'USA', 'john.scott'),
new F(2000, 'London', 'GB', 'john.scott', 'Mary', 'Jane'),
new F(3000, 'Tokyo', 'Japan', 'john.scott', 'Peter', 'Brown'),
];
self::assertEquals($expected, Reflection::getPropertyValues($objects, 'gInstance.firstName'));
self::assertEquals($expected, Reflection::getPropertyValues($objects, 'gInstance.firstName', true));
$collection = new Collection($objects);
self::assertEquals($expected, Reflection::getPropertyValues($collection, 'gInstance.firstName'));
self::assertEquals($expected, Reflection::getPropertyValues($collection, 'gInstance.firstName', true));
}
/** /**
* Provides invalid class and trait * Provides invalid class and trait.
* *
* @return Generator * @return Generator
*/ */

View File

@@ -8,23 +8,17 @@
namespace Meritoo\Common\Utilities; namespace Meritoo\Common\Utilities;
use Meritoo\Common\Test\Base\BaseTestCase;
/** /**
* Test case of the useful regular expressions methods * Tests of the useful regular expressions methods.
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class RegexTest extends BaseTestCase class RegexTest extends \PHPUnit_Framework_TestCase
{ {
private $simpleText; private $simpleText;
private $camelCaseText;
public function testConstructor() private $camelCaseText;
{
static::assertHasNoConstructor(Regex::class);
}
public function testGetCamelCaseParts() public function testGetCamelCaseParts()
{ {

View File

@@ -12,18 +12,13 @@ use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Utilities\Uri; use Meritoo\Common\Utilities\Uri;
/** /**
* Test case of the useful uri methods (only static functions) * Tests of the useful uri methods (only static functions).
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class UriTest extends BaseTestCase class UriTest extends BaseTestCase
{ {
public function testConstructor()
{
static::assertHasNoConstructor(Uri::class);
}
public function testAddProtocolToUrl() public function testAddProtocolToUrl()
{ {
$http = 'http'; $http = 'http';
@@ -63,7 +58,7 @@ class UriTest extends BaseTestCase
} }
/** /**
* Provides urls to replenish protocol * Provides urls to replenish protocol.
* *
* @return \Generator * @return \Generator
*/ */

View File

@@ -8,26 +8,21 @@
namespace Meritoo\Common\Test\Utilities; namespace Meritoo\Common\Test\Utilities;
use Meritoo\Common\Test\Base\BaseTestCase;
use Meritoo\Common\Utilities\Xml; use Meritoo\Common\Utilities\Xml;
use PHPUnit_Framework_TestCase;
use SimpleXMLElement; use SimpleXMLElement;
/** /**
* Test case of the useful XML-related methods (only static functions) * Tests of the useful XML-related methods (only static functions).
* *
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl> * @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl * @copyright Meritoo.pl
*/ */
class XmlTest extends BaseTestCase class XmlTest extends PHPUnit_Framework_TestCase
{ {
private $simpleXml; private $simpleXml;
private $advancedXml; private $advancedXml;
public function testConstructor()
{
static::assertHasNoConstructor(Xml::class);
}
public function testMergeNodes() public function testMergeNodes()
{ {
/* /*
@@ -37,7 +32,7 @@ class XmlTest extends BaseTestCase
$element2 = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><employees />'); $element2 = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><employees />');
$merged = Xml::mergeNodes($element1, $element2); $merged = Xml::mergeNodes($element1, $element2);
self::assertEquals('', (string)$merged); self::assertEquals('', (string) $merged);
/* /*
* XMLs with data * XMLs with data
@@ -46,7 +41,7 @@ class XmlTest extends BaseTestCase
$element2 = new SimpleXMLElement($this->advancedXml); $element2 = new SimpleXMLElement($this->advancedXml);
$merged = Xml::mergeNodes($element1, $element2); $merged = Xml::mergeNodes($element1, $element2);
self::assertEquals('John', (string)$merged->author[0]->first_name); self::assertEquals('John', (string) $merged->author[0]->first_name);
} }
/** /**

View File

@@ -1,54 +0,0 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Test\Utilities\Reflection;
/**
* The F class.
* Used for testing the Reflection class.
*
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl
*/
class F
{
protected $username;
private $accountBalance;
private $city;
private $country;
private $gInstance;
public function __construct($accountBalance, $city, $country, $username, $firstName = 'John', $lastName = 'Scott')
{
$this->accountBalance = $accountBalance;
$this->city = $city;
$this->country = $country;
$this->username = $username;
$this->gInstance = new G($firstName, $lastName);
/*
* Called to avoid "Unused private method getAccountBalance" warning only
*/
$this->getAccountBalance();
}
public function getCountry()
{
return $this->country;
}
protected function getCity()
{
return $this->city;
}
private function getAccountBalance()
{
return $this->accountBalance;
}
}

View File

@@ -1,38 +0,0 @@
<?php
/**
* (c) Meritoo.pl, http://www.meritoo.pl
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Meritoo\Common\Test\Utilities\Reflection;
/**
* The G class.
* Used for testing the Reflection class.
*
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
* @copyright Meritoo.pl
*/
class G
{
private $firstName;
private $lastName;
public function __construct($firstName = 'John', $lastName = 'Scott')
{
$this->firstName = $firstName;
$this->lastName = $lastName;
}
public function getFirstName()
{
return $this->firstName;
}
public function getLastName()
{
return $this->lastName;
}
}