1: <?php
2:
3: declare(strict_types=1);
4:
5: namespace Atk4\Ui\Table\Column\FilterModel;
6:
7: use Atk4\Data\Model;
8: use Atk4\Ui\Table\Column;
9:
10: class TypeTime extends Column\FilterModel
11: {
12: #[\Override]
13: protected function init(): void
14: {
15: parent::init();
16:
17: $this->op->values = [
18: '=' => '=',
19: '!=' => '!=',
20: '<' => '<',
21: '<=' => '< or equal',
22: '>' => '>',
23: '>=' => '> or equal',
24: 'between' => 'Between',
25: ];
26:
27: $this->op->default = '=';
28: $this->value->type = 'time';
29: $this->addField('range', ['ui' => ['caption' => ''], 'type' => 'time']);
30: }
31:
32: #[\Override]
33: public function setConditionForModel(Model $model)
34: {
35: $filter = $this->recallData();
36: if ($filter !== null) {
37: switch ($filter['op']) {
38: case 'between':
39: $d1 = $filter['value'];
40: $d2 = $filter['range'];
41: if ($d2 >= $d1) {
42: $value = $model->getPersistence()->typecastSaveField($model->getField($filter['name']), $d1);
43: $value2 = $model->getPersistence()->typecastSaveField($model->getField($filter['name']), $d2);
44: } else {
45: $value = $model->getPersistence()->typecastSaveField($model->getField($filter['name']), $d2);
46: $value2 = $model->getPersistence()->typecastSaveField($model->getField($filter['name']), $d1);
47: }
48: $model->addCondition($model->expr('[field] between [value] and [value2]', [
49: 'field' => $model->getField($filter['name']),
50: 'value' => $value,
51: 'value2' => $value2,
52: ]));
53:
54: break;
55: default:
56: $model->addCondition($filter['name'], $filter['op'], $filter['value']);
57: }
58: }
59:
60: return $model;
61: }
62:
63: #[\Override]
64: public function getFormDisplayRules(): array
65: {
66: return [
67: 'range' => ['op' => 'isExactly[between]'],
68: ];
69: }
70: }
71: