1: <?php
2: namespace Budovy;
3:
4: use Nette\Object;
5: use Nette\Utils\Paginator;
6: use Nette\Utils\Html;
7: use Nette\Application\UI;
8: use Kdyby\BootstrapFormRenderer\BootstrapRenderer;
9:
10: class UnitFactory extends Object {
11: 12: 13:
14: protected $documenttypeRepository;
15:
16: 17: 18:
19: protected $unitRepository;
20:
21: 22: 23:
24: protected $placeRepository;
25:
26: function __construct(UnitRepository $unitRepository, DocumenttypeRepository $documenttypeRepository, PlaceRepository $placeRepository) {
27: $this->unitRepository = $unitRepository;
28: $this->documenttypeRepository = $documenttypeRepository;
29: $this->placeRepository = $placeRepository;
30: }
31:
32: function createDataGrid() {
33: $grid = new \Nextras\Datagrid\Datagrid;
34:
35: $grid->addColumn('name', 'Název')->enableSort();
36: $grid->addColumn('place', 'Umístění')->enableSort();
37:
38: $grid->setRowPrimaryKey('id');
39:
40: $grid->setDatasourceCallback(function ($filter, $order, Paginator $paginator = null) {
41: return $this->unitRepository->getGridSelection($filter, $order, $paginator->page, $paginator->itemsPerPage);
42: });
43:
44: $grid->setFilterFormFactory(function () {
45: $form = new \Nette\Forms\Container;
46:
47: $form->addText('name');
48: $form->addSelect('place', 'Umístění', array('' => '') + $this->placeRepository->getPairData());
49:
50: $form->addSubmit('filter', 'Hledej');
51: $form->addSubmit('cancel', 'Zrušit');
52:
53: $pretyp = $form['filter']->getControlPrototype();
54: $pretyp->setName("button");
55: $pretyp->type = 'submit';
56: $pretyp->class = 'ico-btn';
57: $pretyp->create('i class="fa fa-search"');
58:
59: $pretyp = $form['cancel']->getControlPrototype();
60: $pretyp->setName("button");
61: $pretyp->type = 'submit';
62: $pretyp->class = 'ico-btn';
63: $pretyp->create('i class="fa fa-times-circle-o"');
64:
65: return $form;
66: });
67:
68: $grid->setPagination(20, function ($filter, $order) {
69: return $this->unitRepository->getGridCount($filter);
70: });
71:
72: $grid->addCellsTemplate(__DIR__ . '/../templates/Unit/grid.latte');
73:
74: return $grid;
75: }
76:
77: function createEditForm($backlink) {
78: $form = new UI\Form;
79:
80: $form->setRenderer(new BootstrapRenderer());
81:
82: $form->getElementPrototype()->class = 'form-horizontal';
83:
84: $base = $form->addContainer('base');
85:
86: $base->addText('name', 'Název:')
87: ->setRequired('Zadejte prosím název')
88: ->setAttribute('class', 'form-control');
89:
90: $base->addSelect('id_place', 'Umístění', $this->placeRepository->getPairData());
91:
92: $base->addTextArea('description', 'Popis:')
93: ->setAttribute('class', 'form-control');
94:
95: $form->addSubmit('saving', 'Uložit a zpět')
96: ->setAttribute('class', 'btn btn-primary');
97:
98: $form->addSubmit('back')
99: ->setAttribute('class', 'btn btn-inverse')
100: ->getControlPrototype()
101: ->setName('a')
102: ->href($backlink)
103: ->add(Html::el('i')->class('fa fa-reply'))
104: ->add(Html::el('span', ' Zpět'));
105:
106: $document = $form->addContainer('document');
107:
108: $document->addSelect('id_documenttype', 'Typ', $this->documenttypeRepository->getPairData());
109: $document->addUpload('files', 'Soubor', true);
110:
111: return $form;
112: }
113: }