PluginProbe ʕ •ᴥ•ʔ
Admin Columns / 7.1.4
Admin Columns v7.1.4
7.1.4 7.0.19 2.3.5 2.4 2.4.1 2.4.10 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.6.1 2.5.6.2 2.5.6.3 2.5.6.4 3.0 3.0.1 3.0.2 3.0.3 3.0.5 3.0.7 3.1 3.1.1 3.1.10 3.1.2 3.1.3 3.1.5 3.2.3 3.2.7 3.3.1 3.4.1 3.4.6 3.4.8 4.0.1 4.0.3 4.1.6 4.2.2 4.2.5 4.3 4.3.2 4.4.1 4.4.4 4.4.5 4.5.5 4.6.1 4.7.18 4.7.19 4.7.20 4.7.7 7.0.13 7.0.14 7.0.16 trunk 1.0 1.1 1.1.3 1.2 1.2.1 1.3 1.3.1 1.4 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.5.1 1.4.6 1.4.6.1 1.4.6.2 1.4.6.3 1.4.6.4 1.4.7 1.4.8 1.4.9 2.0.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.2 2.2.1 2.2.1.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.5.1 2.2.6 2.2.6.1 2.2.6.2 2.2.6.3 2.2.6.4 2.2.7 2.2.8 2.2.8.1 2.2.9 2.3.1 2.3.2 2.3.3
codepress-admin-columns / classes / Expression / DateRelativeDaysSpecification.php
codepress-admin-columns / classes / Expression Last commit date
Exception 2 days ago SpecificationFactory 2 days ago AggregateSpecification.php 2 days ago AndSpecification.php 2 days ago CollectionOperators.php 2 days ago CollectionSpecification.php 2 days ago ComparisonOperators.php 2 days ago ComparisonSpecification.php 2 days ago CompositeSpecification.php 2 days ago ContainsSpecification.php 2 days ago Context.php 2 days ago ContextAwareSpecification.php 2 days ago DateComparisonSpecification.php 2 days ago DateOperators.php 2 days ago DateRangeSpecification.php 2 days ago DateRelativeDaysSpecification.php 2 days ago DateRelativeDeductedSpecification.php 2 days ago DateSpecification.php 2 days ago DateTimeFactory.php 2 days ago DateTrait.php 2 days ago EndsWithSpecification.php 2 days ago FactSpecification.php 2 days ago FactTrait.php 2 days ago FloatComparisonSpecification.php 2 days ago FloatRangeSpecification.php 2 days ago IntegerComparisonSpecification.php 2 days ago IntegerRangeSpecification.php 2 days ago NotSpecification.php 2 days ago NullSpecification.php 2 days ago OperatorExpression.php 2 days ago OrSpecification.php 2 days ago RangeOperators.php 2 days ago RangeSpecification.php 2 days ago Specification.php 2 days ago SpecificationFactory.php 2 days ago StartsWithSpecification.php 2 days ago StringComparisonSpecification.php 2 days ago StringMatchSpecification.php 2 days ago StringOperators.php 2 days ago Type.php 2 days ago TypeSpecification.php 2 days ago TypeTrait.php 2 days ago Types.php 2 days ago
DateRelativeDaysSpecification.php
73 lines
1 <?php
2
3 declare(strict_types=1);
4
5 namespace AC\Expression;
6
7 use AC\DateFormats;
8 use AC\Expression\Exception\InvalidDateFormatException;
9 use AC\Expression\Exception\OperatorNotFoundException;
10 use DateTimeZone;
11
12 final class DateRelativeDaysSpecification extends OperatorExpression implements FactSpecification
13 {
14 use DateTrait;
15 use FactTrait;
16
17 public function __construct(string $operator, int $fact, ?string $format = null, ?DateTimeZone $timezone = null)
18 {
19 parent::__construct($operator);
20
21 $this->fact = DateTimeFactory::create($timezone)->modify($this->get_modifier_string($fact, $operator));
22 $this->format = $format;
23 $this->timezone = $timezone;
24 }
25
26 private function get_modifier_string(int $fact, $operator): string
27 {
28 switch ($operator) {
29 case DateOperators::WITHIN_DAYS:
30 return sprintf('+%d days', $fact);
31 case DateOperators::GT_DAYS_AGO:
32 case DateOperators::LT_DAYS_AGO:
33 return sprintf('-%d days', $fact);
34 }
35
36 throw new OperatorNotFoundException($operator);
37 }
38
39 /**
40 * @throws InvalidDateFormatException
41 */
42 public function is_satisfied_by($value): bool
43 {
44 // Format that discards time
45 $format = DateFormats::DATE_MYSQL;
46
47 $today = DateTimeFactory::create($this->timezone)->format($format);
48 $date = DateTimeFactory::create_from_format($value, $this->format, $this->timezone)->format($format);
49 $fact = $this->fact->format($format);
50
51 switch ($this->operator) {
52 case DateOperators::WITHIN_DAYS:
53 return $date <= $fact && $date >= $today;
54 case DateOperators::LT_DAYS_AGO:
55 return $date <= $today && $date >= $fact;
56 case DateOperators::GT_DAYS_AGO:
57 return $date <= $fact;
58 }
59
60 throw new OperatorNotFoundException($this->operator);
61 }
62
63 public function export(): array
64 {
65 return array_merge(
66 parent::export(),
67 $this->export_date(),
68 $this->export_fact()
69 );
70 }
71
72 }
73