1 |
3f8f3bd6
|
Filip Jani
|
<?php
|
2 |
|
|
|
3 |
|
|
|
4 |
|
|
namespace App\AdminModule\Components;
|
5 |
|
|
|
6 |
|
|
|
7 |
|
|
use App\Model\Repository\BookRepository;
|
8 |
|
|
use App\Model\Repository\BookTypeRepository;
|
9 |
|
|
use App\Model\Repository\MuseumRepository;
|
10 |
|
|
use App\Model\Repository\OriginRepository;
|
11 |
|
|
use App\Model\Repository\TransliterationRepository;
|
12 |
|
|
use App\Utils\DataGrid\DataGrid;
|
13 |
|
|
use Nette\Database\Table\ActiveRow;
|
14 |
|
|
use Nette\Database\Table\Selection;
|
15 |
|
|
use Ublaboo\DataGrid\Exception\DataGridException;
|
16 |
|
|
|
17 |
|
|
class TransliterationGrid extends DataGrid
|
18 |
|
|
{
|
19 |
|
|
/**
|
20 |
|
|
* @var TransliterationRepository
|
21 |
|
|
*/
|
22 |
|
|
private $transliterationRepository;
|
23 |
|
|
/**
|
24 |
|
|
* @var BookRepository
|
25 |
|
|
*/
|
26 |
|
|
private $bookRepository;
|
27 |
|
|
/**
|
28 |
|
|
* @var MuseumRepository
|
29 |
|
|
*/
|
30 |
|
|
private $museumRepository;
|
31 |
|
|
/**
|
32 |
|
|
* @var OriginRepository
|
33 |
|
|
*/
|
34 |
|
|
private $originRepository;
|
35 |
|
|
/**
|
36 |
|
|
* @var BookTypeRepository
|
37 |
|
|
*/
|
38 |
|
|
private $bookTypeRepository;
|
39 |
|
|
|
40 |
|
|
public function __construct(TransliterationRepository $transliterationRepository,
|
41 |
|
|
BookRepository $bookRepository,
|
42 |
|
|
MuseumRepository $museumRepository,
|
43 |
|
|
OriginRepository $originRepository,
|
44 |
|
|
BookTypeRepository $bookTypeRepository
|
45 |
|
|
)
|
46 |
|
|
{
|
47 |
|
|
$this->transliterationRepository = $transliterationRepository;
|
48 |
|
|
$this->bookRepository = $bookRepository;
|
49 |
|
|
$this->museumRepository = $museumRepository;
|
50 |
|
|
$this->originRepository = $originRepository;
|
51 |
|
|
$this->bookTypeRepository = $bookTypeRepository;
|
52 |
|
|
|
53 |
|
|
parent::__construct(FALSE);
|
54 |
|
|
}
|
55 |
|
|
|
56 |
|
|
/**
|
57 |
|
|
* Abstraktní metoda, slouží k nastavení primárního klíče a nastavení datasource
|
58 |
|
|
* 1. $this->setPrimaryKey();
|
59 |
|
|
* 2. $this->setDataSource();
|
60 |
|
|
*
|
61 |
|
|
* @throws DataGridException
|
62 |
|
|
*/
|
63 |
|
|
public function init()
|
64 |
|
|
{
|
65 |
|
|
$this->setPrimaryKey(TransliterationRepository::COLUMN_ID);
|
66 |
|
|
$this->setDataSource($this->transliterationRepository->findAll());
|
67 |
|
|
}
|
68 |
|
|
|
69 |
|
|
/**
|
70 |
|
|
* Definice sloupečků, akcí, vyhledávácích filtrů gridu
|
71 |
|
|
*
|
72 |
|
|
* @throws DataGridException
|
73 |
|
|
*/
|
74 |
|
|
public function define()
|
75 |
|
|
{
|
76 |
|
|
$bookRepository = $this->bookRepository;
|
77 |
|
|
$museumRepository = $this->museumRepository;
|
78 |
|
|
|
79 |
|
|
// ==================
|
80 |
|
|
// Definice sloupečků
|
81 |
|
|
// ==================
|
82 |
|
|
$this->addColumnNumber(TransliterationRepository::COLUMN_ID, 'ID')->setDefaultHide(TRUE);
|
83 |
|
|
$this->addColumnLink(TransliterationRepository::COLUMN_BOOK_ID, 'Book')
|
84 |
|
|
->setRenderer(function (ActiveRow $activeRow)
|
85 |
|
|
{
|
86 |
1cc8ab3c
|
Filip Jani
|
return $this->getRenderer(
|
87 |
|
|
$activeRow,
|
88 |
|
|
BookRepository::TABLE_NAME,
|
89 |
|
|
BookRepository::COLUMN_ID,
|
90 |
|
|
BookRepository::COLUMN_BOOK_ABREV,
|
91 |
5257d326
|
Filip Jani
|
TransliterationRepository::COLUMN_BOOK_ID,
|
92 |
|
|
'Book:edit'
|
93 |
1cc8ab3c
|
Filip Jani
|
);
|
94 |
3f8f3bd6
|
Filip Jani
|
});
|
95 |
|
|
$this->addColumnNumber(TransliterationRepository::COLUMN_CHAPTER, 'Chapter');
|
96 |
|
|
$this->addColumnLink(TransliterationRepository::COLUMN_MUSEUM_ID, 'Museum')
|
97 |
|
|
->setRenderer(function (ActiveRow $activeRow)
|
98 |
|
|
{
|
99 |
1cc8ab3c
|
Filip Jani
|
return $this->getRenderer(
|
100 |
|
|
$activeRow,
|
101 |
|
|
MuseumRepository::TABLE_NAME,
|
102 |
|
|
MuseumRepository::COLUMN_ID,
|
103 |
|
|
MuseumRepository::COLUMN_NAME,
|
104 |
5257d326
|
Filip Jani
|
TransliterationRepository::COLUMN_MUSEUM_ID,
|
105 |
|
|
'Museum:edit'
|
106 |
1cc8ab3c
|
Filip Jani
|
);
|
107 |
3f8f3bd6
|
Filip Jani
|
});
|
108 |
|
|
$this->addColumnText(TransliterationRepository::COLUMN_MUSEUM_NO, 'Museum No');
|
109 |
|
|
$this->addColumnLink(TransliterationRepository::COLUMN_ORIGIN_ID, 'Origin')
|
110 |
|
|
->setRenderer(function (ActiveRow $activeRow)
|
111 |
|
|
{
|
112 |
1cc8ab3c
|
Filip Jani
|
return $this->getRenderer(
|
113 |
|
|
$activeRow,
|
114 |
|
|
OriginRepository::TABLE_NAME,
|
115 |
|
|
OriginRepository::COLUMN_ID,
|
116 |
|
|
OriginRepository::COLUMN_ORIGIN,
|
117 |
5257d326
|
Filip Jani
|
TransliterationRepository::COLUMN_ORIGIN_ID,
|
118 |
|
|
'Origin:edit'
|
119 |
1cc8ab3c
|
Filip Jani
|
);
|
120 |
3f8f3bd6
|
Filip Jani
|
});
|
121 |
|
|
$this->addColumnLink(TransliterationRepository::COLUMN_BOOK_TYPE_ID, 'Book Type')
|
122 |
|
|
->setRenderer(function (ActiveRow $activeRow)
|
123 |
|
|
{
|
124 |
1cc8ab3c
|
Filip Jani
|
return $this->getRenderer(
|
125 |
|
|
$activeRow,
|
126 |
|
|
BookTypeRepository::TABLE_NAME,
|
127 |
|
|
BookTypeRepository::COLUMN_ID,
|
128 |
|
|
BookTypeRepository::COLUMN_BOOK_TYPE,
|
129 |
5257d326
|
Filip Jani
|
TransliterationRepository::COLUMN_BOOK_TYPE_ID,
|
130 |
|
|
'BookType:edit'
|
131 |
1cc8ab3c
|
Filip Jani
|
);
|
132 |
3f8f3bd6
|
Filip Jani
|
});
|
133 |
|
|
$this->addColumnText(TransliterationRepository::COLUMN_REG_NO, 'Reg No');
|
134 |
|
|
$this->addColumnText(TransliterationRepository::COLUMN_DATE, 'Date');
|
135 |
|
|
|
136 |
|
|
// ===============
|
137 |
|
|
// Definice filtrů
|
138 |
|
|
// ===============
|
139 |
|
|
$this->addFilterText(TransliterationRepository::COLUMN_BOOK_ID, 'Book')
|
140 |
|
|
->setCondition(function (Selection $selection, $value) use ($bookRepository)
|
141 |
|
|
{
|
142 |
|
|
$bookIds = $bookRepository->getBooksLikeBookAbbrev($value)->fetchField(BookRepository::COLUMN_ID);
|
143 |
|
|
$bookIds = $bookIds ? $bookIds : NULL;
|
144 |
|
|
|
145 |
|
|
$selection->where(BookRepository::COLUMN_ID, $bookIds);
|
146 |
|
|
});
|
147 |
|
|
$this->addFilterText(TransliterationRepository::COLUMN_CHAPTER, 'Chapter');
|
148 |
|
|
$this->addFilterText(TransliterationRepository::COLUMN_MUSEUM_ID, 'Museum')
|
149 |
|
|
->setCondition(function (Selection $selection, $value) use ($museumRepository)
|
150 |
|
|
{
|
151 |
|
|
$museumIds = $museumRepository->getMuseumsLikeName($value)->fetchField(MuseumRepository::COLUMN_ID);
|
152 |
|
|
$museumIds = $museumIds ? $museumIds : NULL;
|
153 |
|
|
|
154 |
|
|
$selection->where(MuseumRepository::COLUMN_ID, $museumIds);
|
155 |
|
|
});
|
156 |
|
|
$this->addFilterText(TransliterationRepository::COLUMN_MUSEUM_NO, 'Museum No');
|
157 |
1cc8ab3c
|
Filip Jani
|
$this->addFilterSelect(TransliterationRepository::COLUMN_ORIGIN_ID, 'Origin', $this->getOriginFilterArray());
|
158 |
|
|
$this->addFilterSelect(TransliterationRepository::COLUMN_BOOK_TYPE_ID, 'Book Type', $this->getBookTypeFilterArray());
|
159 |
3f8f3bd6
|
Filip Jani
|
$this->addFilterText(TransliterationRepository::COLUMN_REG_NO, 'Reg No');
|
160 |
|
|
$this->addFilterText(TransliterationRepository::COLUMN_DATE, 'Date');
|
161 |
|
|
|
162 |
1cc8ab3c
|
Filip Jani
|
// Zakázání zobrazení všech položek, protože jinak se grid sekne a nelze resetovat
|
163 |
|
|
$this->setItemsPerPageList([10, 20, 50, 100], FALSE);
|
164 |
|
|
|
165 |
3f8f3bd6
|
Filip Jani
|
// =============
|
166 |
|
|
// Definice akcí
|
167 |
|
|
// =============
|
168 |
2d22b618
|
hard456
|
$this->addAction('edit', 'edit', 'Transliteration:edit', ['id' => TransliterationRepository::COLUMN_ID])
|
169 |
|
|
->setTitle('Edit');
|
170 |
3f8f3bd6
|
Filip Jani
|
|
171 |
|
|
$this->addAction('delete', 'delete', 'deleteTransliteration!', ['id' => TransliterationRepository::COLUMN_ID])
|
172 |
|
|
->setConfirm('Do you really want to delete transliteration?')
|
173 |
|
|
->setTitle('Delete')
|
174 |
|
|
->setClass('btn btn-xs btn-danger ajax');
|
175 |
|
|
}
|
176 |
1cc8ab3c
|
Filip Jani
|
|
177 |
|
|
/**
|
178 |
|
|
* Vrací pole s možnostmi pro combobox filtr místa původu
|
179 |
|
|
*
|
180 |
|
|
* @return array
|
181 |
|
|
*/
|
182 |
|
|
private function getOriginFilterArray()
|
183 |
|
|
{
|
184 |
98f9c8ed
|
Filip Jani
|
$array = $this->originRepository->findAll()->order(OriginRepository::COLUMN_ORIGIN)->fetchPairs(OriginRepository::COLUMN_ID, OriginRepository::COLUMN_ORIGIN);
|
185 |
1cc8ab3c
|
Filip Jani
|
return $array;
|
186 |
|
|
}
|
187 |
|
|
|
188 |
|
|
/**
|
189 |
|
|
* Vrací pole s možnostmi pro combobox filtr typu knihy
|
190 |
|
|
*
|
191 |
|
|
* @return array
|
192 |
|
|
*/
|
193 |
|
|
private function getBookTypeFilterArray()
|
194 |
|
|
{
|
195 |
98f9c8ed
|
Filip Jani
|
$array = $this->bookTypeRepository->findAll()->order(BookTypeRepository::COLUMN_BOOK_TYPE)->fetchPairs(BookTypeRepository::COLUMN_ID, BookTypeRepository::COLUMN_BOOK_TYPE);
|
196 |
1cc8ab3c
|
Filip Jani
|
return $array;
|
197 |
|
|
}
|
198 |
|
|
|
199 |
|
|
/**
|
200 |
|
|
* Vrací renderer pro vlastní zobrazení názvu místo ID cizího klíče v gridu
|
201 |
|
|
*
|
202 |
|
|
* @param ActiveRow $activeRow
|
203 |
|
|
* @param string $key
|
204 |
|
|
* @param string $throughColumn
|
205 |
|
|
* @param string $titleColumn
|
206 |
|
|
* @param string $idColumn
|
207 |
5257d326
|
Filip Jani
|
* @param string $destination
|
208 |
1cc8ab3c
|
Filip Jani
|
* @return string
|
209 |
|
|
* @throws \Nette\Application\UI\InvalidLinkException
|
210 |
|
|
*/
|
211 |
5257d326
|
Filip Jani
|
private function getRenderer(ActiveRow $activeRow, string $key, string $throughColumn, string $titleColumn, string $idColumn, string $destination)
|
212 |
1cc8ab3c
|
Filip Jani
|
{
|
213 |
|
|
$ref = $activeRow->ref($key, $throughColumn);
|
214 |
|
|
|
215 |
|
|
if ($ref)
|
216 |
|
|
{
|
217 |
|
|
$title = $ref->{$titleColumn};
|
218 |
5257d326
|
Filip Jani
|
return $this->getRendererWithLink($activeRow, $title, $destination, $activeRow->{$idColumn});
|
219 |
1cc8ab3c
|
Filip Jani
|
} else
|
220 |
|
|
{
|
221 |
|
|
return "";
|
222 |
|
|
}
|
223 |
|
|
}
|
224 |
3f8f3bd6
|
Filip Jani
|
}
|
225 |
|
|
|
226 |
|
|
interface ITransliterationGridFactory
|
227 |
|
|
{
|
228 |
|
|
/**
|
229 |
|
|
* @return TransliterationGrid
|
230 |
|
|
*/
|
231 |
|
|
public function create();
|
232 |
|
|
}
|