🔧
This commit is contained in:
@@ -4,6 +4,7 @@ namespace DeepCopy;
|
||||
|
||||
use ArrayObject;
|
||||
use DateInterval;
|
||||
use DatePeriod;
|
||||
use DateTimeInterface;
|
||||
use DateTimeZone;
|
||||
use DeepCopy\Exception\CloneException;
|
||||
@@ -12,6 +13,7 @@ use DeepCopy\Filter\Filter;
|
||||
use DeepCopy\Matcher\Matcher;
|
||||
use DeepCopy\Reflection\ReflectionHelper;
|
||||
use DeepCopy\TypeFilter\Date\DateIntervalFilter;
|
||||
use DeepCopy\TypeFilter\Date\DatePeriodFilter;
|
||||
use DeepCopy\TypeFilter\Spl\ArrayObjectFilter;
|
||||
use DeepCopy\TypeFilter\Spl\SplDoublyLinkedListFilter;
|
||||
use DeepCopy\TypeFilter\TypeFilter;
|
||||
@@ -64,6 +66,7 @@ class DeepCopy
|
||||
|
||||
$this->addTypeFilter(new ArrayObjectFilter($this), new TypeMatcher(ArrayObject::class));
|
||||
$this->addTypeFilter(new DateIntervalFilter(), new TypeMatcher(DateInterval::class));
|
||||
$this->addTypeFilter(new DatePeriodFilter(), new TypeMatcher(DatePeriod::class));
|
||||
$this->addTypeFilter(new SplDoublyLinkedListFilter($this), new TypeMatcher(SplDoublyLinkedList::class));
|
||||
}
|
||||
|
||||
@@ -119,6 +122,14 @@ class DeepCopy
|
||||
];
|
||||
}
|
||||
|
||||
public function prependTypeFilter(TypeFilter $filter, TypeMatcher $matcher)
|
||||
{
|
||||
array_unshift($this->typeFilters, [
|
||||
'matcher' => $matcher,
|
||||
'filter' => $filter,
|
||||
]);
|
||||
}
|
||||
|
||||
private function recursiveCopy($var)
|
||||
{
|
||||
// Matches Type Filter
|
||||
@@ -224,6 +235,11 @@ class DeepCopy
|
||||
return;
|
||||
}
|
||||
|
||||
// Ignore readonly properties
|
||||
if (method_exists($property, 'isReadOnly') && $property->isReadOnly()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Apply the filters
|
||||
foreach ($this->filters as $item) {
|
||||
/** @var Matcher $matcher */
|
||||
|
||||
42
vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DatePeriodFilter.php
vendored
Normal file
42
vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DatePeriodFilter.php
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace DeepCopy\TypeFilter\Date;
|
||||
|
||||
use DatePeriod;
|
||||
use DeepCopy\TypeFilter\TypeFilter;
|
||||
|
||||
/**
|
||||
* @final
|
||||
*/
|
||||
class DatePeriodFilter implements TypeFilter
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @param DatePeriod $element
|
||||
*
|
||||
* @see http://news.php.net/php.bugs/205076
|
||||
*/
|
||||
public function apply($element)
|
||||
{
|
||||
$options = 0;
|
||||
if (PHP_VERSION_ID >= 80200 && $element->include_end_date) {
|
||||
$options |= DatePeriod::INCLUDE_END_DATE;
|
||||
}
|
||||
if (!$element->include_start_date) {
|
||||
$options |= DatePeriod::EXCLUDE_START_DATE;
|
||||
}
|
||||
|
||||
if ($element->getEndDate()) {
|
||||
return new DatePeriod($element->getStartDate(), $element->getDateInterval(), $element->getEndDate(), $options);
|
||||
}
|
||||
|
||||
if (PHP_VERSION_ID >= 70217) {
|
||||
$recurrences = $element->getRecurrences();
|
||||
} else {
|
||||
$recurrences = $element->recurrences - $element->include_start_date;
|
||||
}
|
||||
|
||||
return new DatePeriod($element->getStartDate(), $element->getDateInterval(), $recurrences, $options);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user