• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

contributte / datagrid / 7048127238

30 Nov 2023 02:47PM UTC coverage: 34.081%. First build
7048127238

Pull #1060

github

paveljanda
Minor CSS changes for the next verison of datagrid
Pull Request #1060: [7.x] Next

118 of 431 new or added lines in 54 files covered. (27.38%)

1125 of 3301 relevant lines covered (34.08%)

0.34 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/DataSource/DibiFluentMssqlDataSource.php
1
<?php declare(strict_types = 1);
2

3
namespace Contributte\Datagrid\DataSource;
4

5
use Contributte\Datagrid\Exception\DatagridDateTimeHelperException;
6
use Contributte\Datagrid\Filter\FilterDate;
7
use Contributte\Datagrid\Filter\FilterDateRange;
8
use Contributte\Datagrid\Filter\FilterText;
9
use Contributte\Datagrid\Utils\DateTimeHelper;
10
use dibi;
11
use Dibi\Fluent;
12
use Dibi\Helpers;
13
use Dibi\Result;
14
use UnexpectedValueException;
15

16
class DibiFluentMssqlDataSource extends DibiFluentDataSource
17
{
18

19
        /** @var array */
20
        protected array $data = [];
21

22
        public function __construct(Fluent $dataSource, string $primaryKey)
23
        {
24
                parent::__construct($dataSource, $primaryKey);
×
25
        }
26

27
        public function getCount(): int
28
        {
29
                $clone = clone $this->dataSource;
×
30
                $clone->removeClause('ORDER BY');
×
31

32
                return $clone->count();
×
33
        }
34

35
        /**
36
         * {@inheritDoc}
37
         */
38
        public function filterOne(array $condition): IDataSource
39
        {
40
                $this->dataSource->where($condition);
×
41

42
                return $this;
×
43
        }
44

45
        public function limit(int $offset, int $limit): IDataSource
46
        {
47
                $sql = (string) $this->dataSource;
×
48

49
                $result = $this->dataSource->getConnection()
×
50
                        ->query('%sql OFFSET ? ROWS FETCH NEXT ? ROWS ONLY', $sql, $offset, $limit);
×
51

52
                if (!$result instanceof Result) {
×
53
                        throw new UnexpectedValueException();
×
54
                }
55

56
                $this->data = $result->fetchAll();
×
57

58
                return $this;
×
59
        }
60

61
        protected function applyFilterDate(FilterDate $filter): void
62
        {
63
                $conditions = $filter->getCondition();
×
64

65
                try {
66
                        $date = DateTimeHelper::tryConvertToDateTime(
×
67
                                $conditions[$filter->getColumn()],
×
68
                                [$filter->getPhpFormat()]
×
69
                        );
70

71
                        $this->dataSource->where(
×
72
                                'CONVERT(varchar(10), %n, 112) = ?',
×
73
                                $filter->getColumn(),
×
74
                                $date->format('Ymd')
×
75
                        );
NEW
76
                } catch (DatagridDateTimeHelperException) {
×
77
                        // ignore the invalid filter value
78
                }
79
        }
80

81
        protected function applyFilterDateRange(FilterDateRange $filter): void
82
        {
83
                $conditions = $filter->getCondition();
×
84

85
                $valueFrom = $conditions[$filter->getColumn()]['from'];
×
86
                $valueTo = $conditions[$filter->getColumn()]['to'];
×
87

88
                if ($valueFrom) {
×
89
                        $this->dataSource->where(
×
90
                                'CONVERT(varchar(10), %n, 112) >= ?',
×
91
                                $filter->getColumn(),
×
92
                                $valueFrom
93
                        );
94
                }
95

96
                if ($valueTo) {
×
97
                        $this->dataSource->where(
×
98
                                'CONVERT(varchar(10), %n, 112) <= ?',
×
99
                                $filter->getColumn(),
×
100
                                $valueTo
101
                        );
102
                }
103
        }
104

105
        protected function applyFilterText(FilterText $filter): void
106
        {
107
                $condition = $filter->getCondition();
×
108
                $driver = $this->dataSource->getConnection()->getDriver();
×
109
                $or = [];
×
110

111
                foreach ($condition as $column => $value) {
×
NEW
112
                        $column = Helpers::escape($driver, $column, dibi::IDENTIFIER);
×
113

114
                        if ($filter->isExactSearch()) {
×
NEW
115
                                $this->dataSource->where(sprintf('%s = %%s', $column), $value);
×
116

117
                                continue;
×
118
                        }
119

NEW
120
                        $or[] = sprintf('%s LIKE "%%%s%%"', $column, $value);
×
121
                }
122

NEW
123
                if (count($or) > 1) {
×
124
                        $this->dataSource->where('(%or)', $or);
×
125
                } else {
126
                        $this->dataSource->where($or);
×
127
                }
128
        }
129

130
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc