|
|
<?php |
|
|
|
|
|
namespace Kanboard\Filter; |
|
|
|
|
|
use Kanboard\Core\DateParser; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
abstract class BaseDateFilter extends BaseFilter |
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected $dateParser; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function setDateParser(DateParser $dateParser) |
|
|
{ |
|
|
$this->dateParser = $dateParser; |
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected function parseOperator() |
|
|
{ |
|
|
$operators = array( |
|
|
'<=' => 'lte', |
|
|
'>=' => 'gte', |
|
|
'<' => 'lt', |
|
|
'>' => 'gt', |
|
|
); |
|
|
|
|
|
foreach ($operators as $operator => $method) { |
|
|
if (strpos($this->value, $operator) === 0) { |
|
|
$this->value = substr($this->value, strlen($operator)); |
|
|
return $method; |
|
|
} |
|
|
} |
|
|
|
|
|
return ''; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected function applyDateFilter($field) |
|
|
{ |
|
|
$method = $this->parseOperator(); |
|
|
$timestamp = $this->dateParser->getTimestampFromIsoFormat($this->value); |
|
|
|
|
|
if ($method !== '') { |
|
|
$this->query->$method($field, $this->getTimestampFromOperator($method, $timestamp)); |
|
|
} else { |
|
|
$this->query->gte($field, $timestamp); |
|
|
$this->query->lte($field, $timestamp + 86399); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected function getTimestampFromOperator($method, $timestamp) |
|
|
{ |
|
|
switch ($method) { |
|
|
case 'lte': |
|
|
return $timestamp + 86399; |
|
|
case 'lt': |
|
|
return $timestamp; |
|
|
case 'gte': |
|
|
return $timestamp; |
|
|
case 'gt': |
|
|
return $timestamp + 86400; |
|
|
} |
|
|
|
|
|
return $timestamp; |
|
|
} |
|
|
} |
|
|
|