File manager - Edit - /home/autoph/public_html/projects/Rating-AutoHub/public/css/myclabs.zip
Back
PK 3��Z�盵� � deep-copy/composer.jsonnu �[��� { "name": "myclabs/deep-copy", "description": "Create deep copies (clones) of your objects", "license": "MIT", "type": "library", "keywords": [ "clone", "copy", "duplicate", "object", "object graph" ], "require": { "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "conflict": { "doctrine/collections": "<1.6.8", "doctrine/common": "<2.13.3 || >=3,<3.2.2" }, "autoload": { "psr-4": { "DeepCopy\\": "src/DeepCopy/" }, "files": [ "src/DeepCopy/deep_copy.php" ] }, "autoload-dev": { "psr-4": { "DeepCopy\\": "fixtures/", "DeepCopyTest\\": "tests/DeepCopyTest/" } }, "config": { "sort-packages": true } } PK 3��Z:��~ ~ 6 deep-copy/src/DeepCopy/Reflection/ReflectionHelper.phpnu �[��� <?php namespace DeepCopy\Reflection; use DeepCopy\Exception\PropertyException; use ReflectionClass; use ReflectionException; use ReflectionObject; use ReflectionProperty; class ReflectionHelper { /** * Retrieves all properties (including private ones), from object and all its ancestors. * * Standard \ReflectionClass->getProperties() does not return private properties from ancestor classes. * * @author muratyaman@gmail.com * @see http://php.net/manual/en/reflectionclass.getproperties.php * * @param ReflectionClass $ref * * @return ReflectionProperty[] */ public static function getProperties(ReflectionClass $ref) { $props = $ref->getProperties(); $propsArr = array(); foreach ($props as $prop) { $propertyName = $prop->getName(); $propsArr[$propertyName] = $prop; } if ($parentClass = $ref->getParentClass()) { $parentPropsArr = self::getProperties($parentClass); foreach ($propsArr as $key => $property) { $parentPropsArr[$key] = $property; } return $parentPropsArr; } return $propsArr; } /** * Retrieves property by name from object and all its ancestors. * * @param object|string $object * @param string $name * * @throws PropertyException * @throws ReflectionException * * @return ReflectionProperty */ public static function getProperty($object, $name) { $reflection = is_object($object) ? new ReflectionObject($object) : new ReflectionClass($object); if ($reflection->hasProperty($name)) { return $reflection->getProperty($name); } if ($parentClass = $reflection->getParentClass()) { return self::getProperty($parentClass->getName(), $name); } throw new PropertyException( sprintf( 'The class "%s" doesn\'t have a property with the given name: "%s".', is_object($object) ? get_class($object) : $object, $name ) ); } } PK 3��ZL��t 3 deep-copy/src/DeepCopy/Exception/CloneException.phpnu �[��� <?php namespace DeepCopy\Exception; use UnexpectedValueException; class CloneException extends UnexpectedValueException { } PK 3��Z�4�x x 6 deep-copy/src/DeepCopy/Exception/PropertyException.phpnu �[��� <?php namespace DeepCopy\Exception; use ReflectionException; class PropertyException extends ReflectionException { } PK 3��Zs�w�� � 2 deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.phpnu �[��� <?php namespace DeepCopy\TypeMatcher; class TypeMatcher { /** * @var string */ private $type; /** * @param string $type */ public function __construct($type) { $this->type = $type; } /** * @param mixed $element * * @return boolean */ public function matches($element) { return is_object($element) ? is_a($element, $this->type) : gettype($element) === $this->type; } } PK 3��Z��Z�� � 7 deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.phpnu �[��� <?php namespace DeepCopy\TypeFilter; /** * @final */ class ShallowCopyFilter implements TypeFilter { /** * {@inheritdoc} */ public function apply($element) { return clone $element; } } PK 3��ZJ�� C deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.phpnu �[��� <?php namespace DeepCopy\TypeFilter\Spl; use Closure; use DeepCopy\DeepCopy; use DeepCopy\TypeFilter\TypeFilter; use SplDoublyLinkedList; /** * @final */ class SplDoublyLinkedListFilter implements TypeFilter { private $copier; public function __construct(DeepCopy $copier) { $this->copier = $copier; } /** * {@inheritdoc} */ public function apply($element) { $newElement = clone $element; $copy = $this->createCopyClosure(); return $copy($newElement); } private function createCopyClosure() { $copier = $this->copier; $copy = function (SplDoublyLinkedList $list) use ($copier) { // Replace each element in the list with a deep copy of itself for ($i = 1; $i <= $list->count(); $i++) { $copy = $copier->recursiveCopy($list->shift()); $list->push($copy); } return $list; }; return Closure::bind($copy, null, DeepCopy::class); } } PK 3��Z��̰ � = deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.phpnu �[��� <?php namespace DeepCopy\TypeFilter\Spl; /** * @deprecated Use {@see SplDoublyLinkedListFilter} instead. */ class SplDoublyLinkedList extends SplDoublyLinkedListFilter { } PK 3��Z0� )� � ; deep-copy/src/DeepCopy/TypeFilter/Spl/ArrayObjectFilter.phpnu �[��� <?php namespace DeepCopy\TypeFilter\Spl; use DeepCopy\DeepCopy; use DeepCopy\TypeFilter\TypeFilter; /** * In PHP 7.4 the storage of an ArrayObject isn't returned as * ReflectionProperty. So we deep copy its array copy. */ final class ArrayObjectFilter implements TypeFilter { /** * @var DeepCopy */ private $copier; public function __construct(DeepCopy $copier) { $this->copier = $copier; } /** * {@inheritdoc} */ public function apply($arrayObject) { $clone = clone $arrayObject; foreach ($arrayObject->getArrayCopy() as $k => $v) { $clone->offsetSet($k, $this->copier->copy($v)); } return $clone; } } PK 3��Z�-h� � 0 deep-copy/src/DeepCopy/TypeFilter/TypeFilter.phpnu �[��� <?php namespace DeepCopy\TypeFilter; interface TypeFilter { /** * Applies the filter to the object. * * @param mixed $element */ public function apply($element); } PK 3��ZGF�� = deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.phpnu �[��� <?php namespace DeepCopy\TypeFilter\Date; use DateInterval; use DeepCopy\TypeFilter\TypeFilter; /** * @final * * @deprecated Will be removed in 2.0. This filter will no longer be necessary in PHP 7.1+. */ class DateIntervalFilter implements TypeFilter { /** * {@inheritdoc} * * @param DateInterval $element * * @see http://news.php.net/php.bugs/205076 */ public function apply($element) { $copy = new DateInterval('P0D'); foreach ($element as $propertyName => $propertyValue) { $copy->{$propertyName} = $propertyValue; } return $copy; } } PK 3��Z7�� 3 deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.phpnu �[��� <?php namespace DeepCopy\TypeFilter; /** * @final */ class ReplaceFilter implements TypeFilter { /** * @var callable */ protected $callback; /** * @param callable $callable Will be called to get the new value for each element to replace */ public function __construct(callable $callable) { $this->callback = $callable; } /** * {@inheritdoc} */ public function apply($element) { return call_user_func($this->callback, $element); } } PK 3��Z"e�� � $ deep-copy/src/DeepCopy/deep_copy.phpnu �[��� <?php namespace DeepCopy; use function function_exists; if (false === function_exists('DeepCopy\deep_copy')) { /** * Deep copies the given value. * * @param mixed $value * @param bool $useCloneMethod * * @return mixed */ function deep_copy($value, $useCloneMethod = false) { return (new DeepCopy($useCloneMethod))->copy($value); } } PK 3��Z0� � # deep-copy/src/DeepCopy/DeepCopy.phpnu �[��� <?php namespace DeepCopy; use ArrayObject; use DateInterval; use DateTimeInterface; use DateTimeZone; use DeepCopy\Exception\CloneException; use DeepCopy\Filter\ChainableFilter; use DeepCopy\Filter\Filter; use DeepCopy\Matcher\Matcher; use DeepCopy\Reflection\ReflectionHelper; use DeepCopy\TypeFilter\Date\DateIntervalFilter; use DeepCopy\TypeFilter\Spl\ArrayObjectFilter; use DeepCopy\TypeFilter\Spl\SplDoublyLinkedListFilter; use DeepCopy\TypeFilter\TypeFilter; use DeepCopy\TypeMatcher\TypeMatcher; use ReflectionObject; use ReflectionProperty; use SplDoublyLinkedList; /** * @final */ class DeepCopy { /** * @var object[] List of objects copied. */ private $hashMap = []; /** * Filters to apply. * * @var array Array of ['filter' => Filter, 'matcher' => Matcher] pairs. */ private $filters = []; /** * Type Filters to apply. * * @var array Array of ['filter' => Filter, 'matcher' => Matcher] pairs. */ private $typeFilters = []; /** * @var bool */ private $skipUncloneable = false; /** * @var bool */ private $useCloneMethod; /** * @param bool $useCloneMethod If set to true, when an object implements the __clone() function, it will be used * instead of the regular deep cloning. */ public function __construct($useCloneMethod = false) { $this->useCloneMethod = $useCloneMethod; $this->addTypeFilter(new ArrayObjectFilter($this), new TypeMatcher(ArrayObject::class)); $this->addTypeFilter(new DateIntervalFilter(), new TypeMatcher(DateInterval::class)); $this->addTypeFilter(new SplDoublyLinkedListFilter($this), new TypeMatcher(SplDoublyLinkedList::class)); } /** * If enabled, will not throw an exception when coming across an uncloneable property. * * @param $skipUncloneable * * @return $this */ public function skipUncloneable($skipUncloneable = true) { $this->skipUncloneable = $skipUncloneable; return $this; } /** * Deep copies the given object. * * @param mixed $object * * @return mixed */ public function copy($object) { $this->hashMap = []; return $this->recursiveCopy($object); } public function addFilter(Filter $filter, Matcher $matcher) { $this->filters[] = [ 'matcher' => $matcher, 'filter' => $filter, ]; } public function prependFilter(Filter $filter, Matcher $matcher) { array_unshift($this->filters, [ 'matcher' => $matcher, 'filter' => $filter, ]); } public function addTypeFilter(TypeFilter $filter, TypeMatcher $matcher) { $this->typeFilters[] = [ 'matcher' => $matcher, 'filter' => $filter, ]; } private function recursiveCopy($var) { // Matches Type Filter if ($filter = $this->getFirstMatchedTypeFilter($this->typeFilters, $var)) { return $filter->apply($var); } // Resource if (is_resource($var)) { return $var; } // Array if (is_array($var)) { return $this->copyArray($var); } // Scalar if (! is_object($var)) { return $var; } // Enum if (PHP_VERSION_ID >= 80100 && enum_exists(get_class($var))) { return $var; } // Object return $this->copyObject($var); } /** * Copy an array * @param array $array * @return array */ private function copyArray(array $array) { foreach ($array as $key => $value) { $array[$key] = $this->recursiveCopy($value); } return $array; } /** * Copies an object. * * @param object $object * * @throws CloneException * * @return object */ private function copyObject($object) { $objectHash = spl_object_hash($object); if (isset($this->hashMap[$objectHash])) { return $this->hashMap[$objectHash]; } $reflectedObject = new ReflectionObject($object); $isCloneable = $reflectedObject->isCloneable(); if (false === $isCloneable) { if ($this->skipUncloneable) { $this->hashMap[$objectHash] = $object; return $object; } throw new CloneException( sprintf( 'The class "%s" is not cloneable.', $reflectedObject->getName() ) ); } $newObject = clone $object; $this->hashMap[$objectHash] = $newObject; if ($this->useCloneMethod && $reflectedObject->hasMethod('__clone')) { return $newObject; } if ($newObject instanceof DateTimeInterface || $newObject instanceof DateTimeZone) { return $newObject; } foreach (ReflectionHelper::getProperties($reflectedObject) as $property) { $this->copyObjectProperty($newObject, $property); } return $newObject; } private function copyObjectProperty($object, ReflectionProperty $property) { // Ignore static properties if ($property->isStatic()) { return; } // Apply the filters foreach ($this->filters as $item) { /** @var Matcher $matcher */ $matcher = $item['matcher']; /** @var Filter $filter */ $filter = $item['filter']; if ($matcher->matches($object, $property->getName())) { $filter->apply( $object, $property->getName(), function ($object) { return $this->recursiveCopy($object); } ); if ($filter instanceof ChainableFilter) { continue; } // If a filter matches, we stop processing this property return; } } $property->setAccessible(true); // Ignore uninitialized properties (for PHP >7.4) if (method_exists($property, 'isInitialized') && !$property->isInitialized($object)) { return; } $propertyValue = $property->getValue($object); // Copy the property $property->setValue($object, $this->recursiveCopy($propertyValue)); } /** * Returns first filter that matches variable, `null` if no such filter found. * * @param array $filterRecords Associative array with 2 members: 'filter' with value of type {@see TypeFilter} and * 'matcher' with value of type {@see TypeMatcher} * @param mixed $var * * @return TypeFilter|null */ private function getFirstMatchedTypeFilter(array $filterRecords, $var) { $matched = $this->first( $filterRecords, function (array $record) use ($var) { /* @var TypeMatcher $matcher */ $matcher = $record['matcher']; return $matcher->matches($var); } ); return isset($matched) ? $matched['filter'] : null; } /** * Returns first element that matches predicate, `null` if no such element found. * * @param array $elements Array of ['filter' => Filter, 'matcher' => Matcher] pairs. * @param callable $predicate Predicate arguments are: element. * * @return array|null Associative array with 2 members: 'filter' with value of type {@see TypeFilter} and 'matcher' * with value of type {@see TypeMatcher} or `null`. */ private function first(array $elements, callable $predicate) { foreach ($elements as $element) { if (call_user_func($predicate, $element)) { return $element; } } return null; } } PK 3��Z3!�*$ $ 6 deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.phpnu �[��� <?php namespace DeepCopy\Matcher; use DeepCopy\Reflection\ReflectionHelper; use ReflectionException; /** * Matches a property by its type. * * It is recommended to use {@see DeepCopy\TypeFilter\TypeFilter} instead, as it applies on all occurrences * of given type in copied context (eg. array elements), not just on object properties. * * @final */ class PropertyTypeMatcher implements Matcher { /** * @var string */ private $propertyType; /** * @param string $propertyType Property type */ public function __construct($propertyType) { $this->propertyType = $propertyType; } /** * {@inheritdoc} */ public function matches($object, $property) { try { $reflectionProperty = ReflectionHelper::getProperty($object, $property); } catch (ReflectionException $exception) { return false; } $reflectionProperty->setAccessible(true); // Uninitialized properties (for PHP >7.4) if (method_exists($reflectionProperty, 'isInitialized') && !$reflectionProperty->isInitialized($object)) { // null instanceof $this->propertyType return false; } return $reflectionProperty->getValue($object) instanceof $this->propertyType; } } PK 3��Zq�e� � * deep-copy/src/DeepCopy/Matcher/Matcher.phpnu �[��� <?php namespace DeepCopy\Matcher; interface Matcher { /** * @param object $object * @param string $property * * @return boolean */ public function matches($object, $property); } PK 3��ZY��x� � 6 deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.phpnu �[��� <?php namespace DeepCopy\Matcher; /** * @final */ class PropertyNameMatcher implements Matcher { /** * @var string */ private $property; /** * @param string $property Property name */ public function __construct($property) { $this->property = $property; } /** * Matches a property by its name. * * {@inheritdoc} */ public function matches($object, $property) { return $property == $this->property; } } PK 3��Z?S�b� � 2 deep-copy/src/DeepCopy/Matcher/PropertyMatcher.phpnu �[��� <?php namespace DeepCopy\Matcher; /** * @final */ class PropertyMatcher implements Matcher { /** * @var string */ private $class; /** * @var string */ private $property; /** * @param string $class Class name * @param string $property Property name */ public function __construct($class, $property) { $this->class = $class; $this->property = $property; } /** * Matches a specific property of a specific class. * * {@inheritdoc} */ public function matches($object, $property) { return ($object instanceof $this->class) && $property == $this->property; } } PK 3��ZL�b�h h @ deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.phpnu �[��� <?php namespace DeepCopy\Matcher\Doctrine; use DeepCopy\Matcher\Matcher; use Doctrine\Persistence\Proxy; /** * @final */ class DoctrineProxyMatcher implements Matcher { /** * Matches a Doctrine Proxy class. * * {@inheritdoc} */ public function matches($object, $property) { return $object instanceof Proxy; } } PK 3��Z,�>� � 1 deep-copy/src/DeepCopy/Filter/ChainableFilter.phpnu �[��� <?php namespace DeepCopy\Filter; /** * Defines a decorator filter that will not stop the chain of filters. */ class ChainableFilter implements Filter { /** * @var Filter */ protected $filter; public function __construct(Filter $filter) { $this->filter = $filter; } public function apply($object, $property, $objectCopier) { $this->filter->apply($object, $property, $objectCopier); } } PK 3��Z]��]� � / deep-copy/src/DeepCopy/Filter/SetNullFilter.phpnu �[��� <?php namespace DeepCopy\Filter; use DeepCopy\Reflection\ReflectionHelper; /** * @final */ class SetNullFilter implements Filter { /** * Sets the object property to null. * * {@inheritdoc} */ public function apply($object, $property, $objectCopier) { $reflectionProperty = ReflectionHelper::getProperty($object, $property); $reflectionProperty->setAccessible(true); $reflectionProperty->setValue($object, null); } } PK 3��Za�˲� � / deep-copy/src/DeepCopy/Filter/ReplaceFilter.phpnu �[��� <?php namespace DeepCopy\Filter; use DeepCopy\Reflection\ReflectionHelper; /** * @final */ class ReplaceFilter implements Filter { /** * @var callable */ protected $callback; /** * @param callable $callable Will be called to get the new value for each property to replace */ public function __construct(callable $callable) { $this->callback = $callable; } /** * Replaces the object property by the result of the callback called with the object property. * * {@inheritdoc} */ public function apply($object, $property, $objectCopier) { $reflectionProperty = ReflectionHelper::getProperty($object, $property); $reflectionProperty->setAccessible(true); $value = call_user_func($this->callback, $reflectionProperty->getValue($object)); $reflectionProperty->setValue($object, $value); } } PK 3��Z6S��\ \ ( deep-copy/src/DeepCopy/Filter/Filter.phpnu �[��� <?php namespace DeepCopy\Filter; /** * Filter to apply to a property while copying an object */ interface Filter { /** * Applies the filter to the object. * * @param object $object * @param string $property * @param callable $objectCopier */ public function apply($object, $property, $objectCopier); } PK 3��Z�:D C deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.phpnu �[��� <?php namespace DeepCopy\Filter\Doctrine; use DeepCopy\Filter\Filter; use DeepCopy\Reflection\ReflectionHelper; /** * @final */ class DoctrineCollectionFilter implements Filter { /** * Copies the object property doctrine collection. * * {@inheritdoc} */ public function apply($object, $property, $objectCopier) { $reflectionProperty = ReflectionHelper::getProperty($object, $property); $reflectionProperty->setAccessible(true); $oldCollection = $reflectionProperty->getValue($object); $newCollection = $oldCollection->map( function ($item) use ($objectCopier) { return $objectCopier($item); } ); $reflectionProperty->setValue($object, $newCollection); } } PK 3��Z��7� � H deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.phpnu �[��� <?php namespace DeepCopy\Filter\Doctrine; use DeepCopy\Filter\Filter; use DeepCopy\Reflection\ReflectionHelper; use Doctrine\Common\Collections\ArrayCollection; /** * @final */ class DoctrineEmptyCollectionFilter implements Filter { /** * Sets the object property to an empty doctrine collection. * * @param object $object * @param string $property * @param callable $objectCopier */ public function apply($object, $property, $objectCopier) { $reflectionProperty = ReflectionHelper::getProperty($object, $property); $reflectionProperty->setAccessible(true); $reflectionProperty->setValue($object, new ArrayCollection()); } } PK 3��Z�� � >