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

contributte / datagrid / 8685602316

13 Mar 2024 12:24PM UTC coverage: 34.102%. Remained the same
8685602316

push

github

web-flow
[7.x] Next (#1060)

* PHP 8.0

* Translator: switch from ITranslator to Translator (#973)

* [7.x] Bootstrap 5 + PHP 8 + vanilla javascript (#1021)

* Bootstrap 5

* Bootstrap 5 (docs)

* Bootstrap 5

* form-control -> form-select

* Bump bootstrap-select for Bootstrap 5 support

* Removed `input-sm` from Bootstrap 3

See https://getbootstrap.com/docs/4.0/migration/#forms-1

* Bootstrap 5: When selectpicker, replace form-select classes with form-control and refresh it

* Hide `underline` also for `dropdown-item`. And merged into one CSS rule.

* Update the filterMultiSelect initialization

* Text-align: left -> start

Co-authored-by: Radim Vaculík <radim.vaculik@gmail.com>
Co-authored-by: Jaroslav Líbal <jaroslav.libal@neatous.cz>

* [7.x] phpstan-deprecation-rules (#1061)

* Fix sort

* Add method for setting custom Action href, v6.x (#853)

* [7.x] Nextras ORM 4 support, closes #984

* Fix ElasticsearchDataSource.php data source (#1041)

* Error: Typed property Ublaboo\DataGrid\InlineEdit\InlineEdit::$itemID must not be accessed before initialization

* composer: allow-plugins: php-http/discovery

* ItemDetailForm: $httpPost: Typed property must not be accessed...

* phpstan: revert  --memory-limit=4G

* NetteDatabaseSelectionHelper: Context -> Explorer, getSupplementalDriver -> getDriver

* Update README.md

* Templates: fix variables

* data-bs-toggle attribute for multiaction button (#1072)

* dependabot.yml (#1078)

* Allow nette/utils:4.0 (#1077)

* Add onColumnShow and onColumnHide event methods (#1076)

* Add onColumnShow and onColumnHide event methods

* Add native type array

* Removed duplicity

* Return value of BackedEnum when reading Doctrine entity property. (#1081)

* Return value of BackedEnum when reading array value (#1083)

* Added method to check if filter is on default values; Closes #1082 (#1084)

* ublaboo -> contributte (#1067) (#1075)

* Delete depe... (continued)

117 of 435 new or added lines in 54 files covered. (26.9%)

1455 existing lines in 67 files now uncovered.

1124 of 3296 relevant lines covered (34.1%)

0.34 hits per line

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

23.91
/src/DataModel.php
1
<?php declare(strict_types = 1);
2

3
namespace Contributte\Datagrid;
4

5
use Contributte\Datagrid\Components\DatagridPaginator\DatagridPaginator;
6
use Contributte\Datagrid\DataSource\ArrayDataSource;
7
use Contributte\Datagrid\DataSource\DibiFluentDataSource;
8
use Contributte\Datagrid\DataSource\DibiFluentMssqlDataSource;
9
use Contributte\Datagrid\DataSource\DibiFluentPostgreDataSource;
10
use Contributte\Datagrid\DataSource\DoctrineCollectionDataSource;
11
use Contributte\Datagrid\DataSource\DoctrineDataSource;
12
use Contributte\Datagrid\DataSource\IDataSource;
13
use Contributte\Datagrid\DataSource\NetteDatabaseTableDataSource;
14
use Contributte\Datagrid\DataSource\NetteDatabaseTableMssqlDataSource;
15
use Contributte\Datagrid\DataSource\NextrasDataSource;
16
use Contributte\Datagrid\Exception\DatagridWrongDataSourceException;
17
use Contributte\Datagrid\Utils\NetteDatabaseSelectionHelper;
18
use Contributte\Datagrid\Utils\Sorting;
19
use Dibi\Drivers\MsSqlDriver;
20
use Dibi\Drivers\OdbcDriver;
21
use Dibi\Drivers\PostgreDriver;
22
use Dibi\Drivers\SqlsrvDriver;
23
use Dibi\Fluent;
24
use Doctrine\Common\Collections\Collection;
25
use Doctrine\ORM\QueryBuilder;
26
use Nette\Database\Drivers\MsSqlDriver as NDBMsSqlDriver;
27
use Nette\Database\Drivers\SqlsrvDriver as NDBSqlsrvDriver;
28
use Nette\Database\Table\Selection;
29
use Nette\SmartObject;
30
use Nextras\Orm\Collection\ICollection;
31

32
/**
33
 * @method onBeforeFilter(IDataSource $dataSource)
34
 * @method onAfterFilter(IDataSource $dataSource)
35
 * @method onAfterPaginated(IDataSource $dataSource)
36
 */
37
final class DataModel
38
{
39

40
        use SmartObject;
41

42
        /** @var array|callable[] */
43
        public array $onBeforeFilter = [];
44

45
        /** @var array|callable[] */
46
        public array $onAfterFilter = [];
47

48
        /** @var array|callable[] */
49
        public array $onAfterPaginated = [];
50

51
        private IDataSource $dataSource;
52

53
        public function __construct(mixed $source, string $primaryKey)
1✔
54
        {
55
                if (is_array($source)) {
1✔
56
                        $source = new ArrayDataSource($source);
1✔
57

NEW
58
                } elseif ($source instanceof Fluent) {
×
59
                        $driver = $source->getConnection()->getDriver();
×
60

NEW
61
                        if ($driver instanceof OdbcDriver) {
×
62
                                $source = new DibiFluentMssqlDataSource($source, $primaryKey);
×
63

NEW
64
                        } elseif ($driver instanceof MsSqlDriver) {
×
65
                                $source = new DibiFluentMssqlDataSource($source, $primaryKey);
×
66

NEW
67
                        } elseif ($driver instanceof PostgreDriver) {
×
68
                                $source = new DibiFluentPostgreDataSource($source, $primaryKey);
×
69

NEW
70
                        } elseif ($driver instanceof SqlsrvDriver) {
×
71
                                $source = new DibiFluentMssqlDataSource($source, $primaryKey);
×
72

73
                        } else {
74
                                $source = new DibiFluentDataSource($source, $primaryKey);
×
75
                        }
76
                } elseif ($source instanceof Selection) {
×
77
                        $driver = NetteDatabaseSelectionHelper::getDriver($source);
×
78

NEW
79
                        $source = $driver instanceof NDBMsSqlDriver || $driver instanceof NDBSqlsrvDriver ? new NetteDatabaseTableMssqlDataSource($source, $primaryKey) : new NetteDatabaseTableDataSource($source, $primaryKey);
×
UNCOV
80
                } elseif ($source instanceof QueryBuilder) {
×
UNCOV
81
                        $source = new DoctrineDataSource($source, $primaryKey);
×
82

UNCOV
83
                } elseif ($source instanceof Collection) {
×
UNCOV
84
                        $source = new DoctrineCollectionDataSource($source, $primaryKey);
×
85

UNCOV
86
                } elseif ($source instanceof ICollection) {
×
UNCOV
87
                        $source = new NextrasDataSource($source, $primaryKey);
×
88

NEW
89
                } elseif (!($source instanceof IDataSource)) {
×
NEW
90
                        throw new DatagridWrongDataSourceException(sprintf(
×
NEW
91
                                'Datagrid can not take [%s] as data source.',
×
NEW
92
                                is_object($source) ? $source::class : 'null'
×
93
                        ));
94
                }
95

96
                $this->dataSource = $source;
1✔
97
        }
1✔
98

99
        public function getDataSource(): IDataSource
100
        {
101
                return $this->dataSource;
×
102
        }
103

104
        public function filterData(
1✔
105
                ?DatagridPaginator $paginatorComponent,
106
                Sorting $sorting,
107
                array $filters
108
        ): iterable
109
        {
110
                $this->onBeforeFilter($this->dataSource);
1✔
111

112
                $this->dataSource->filter($filters);
1✔
113

114
                $this->onAfterFilter($this->dataSource);
1✔
115

116
                /**
117
                 * Paginator is optional
118
                 */
119
                if ($paginatorComponent !== null) {
1✔
120
                        $paginator = $paginatorComponent->getPaginator();
×
UNCOV
121
                        $paginator->setItemCount($this->dataSource->getCount());
×
122

UNCOV
123
                        $this->dataSource->sort($sorting)->limit(
×
UNCOV
124
                                $paginator->getOffset(),
×
UNCOV
125
                                $paginator->getItemsPerPage()
×
126
                        );
127

UNCOV
128
                        $this->onAfterPaginated($this->dataSource);
×
129

UNCOV
130
                        return $this->dataSource->getData();
×
131
                }
132

133
                return $this->dataSource->sort($sorting)->getData();
1✔
134
        }
135

136
        public function filterRow(array $condition): mixed
137
        {
UNCOV
138
                $this->onBeforeFilter($this->dataSource);
×
UNCOV
139
                $this->onAfterFilter($this->dataSource);
×
140

UNCOV
141
                return $this->dataSource->filterOne($condition)->getData();
×
142
        }
143

144
}
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