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 DocumentFactory extends Object {
11: 12: 13:
14: private $documentRepository;
15:
16: 17: 18:
19: private $documenttypeRepository;
20:
21: function __construct(DocumentRepository $documentRepository, DocumenttypeRepository $documenttypeRepository) {
22: $this->documentRepository = $documentRepository;
23: $this->documenttypeRepository = $documenttypeRepository;
24: }
25:
26: function createDataGrid() {
27: $grid = new \Nextras\Datagrid\Datagrid;
28:
29: $grid->addColumn('name', 'Název')->enableSort();
30: $grid->addColumn('documenttype', 'Typ')->enableSort();
31:
32: $grid->setRowPrimaryKey('id');
33:
34: $grid->setDatasourceCallback(function ($filter, $order, Paginator $paginator = null) {
35: return $this->documentRepository->getGridSelection($filter, $order, $paginator->page, $paginator->itemsPerPage);
36: });
37:
38: $grid->setFilterFormFactory(function () {
39: $form = new \Nette\Forms\Container;
40:
41: $form->addText('name');
42: $form->addSelect('documenttype', 'Typ', array('' => '') + $this->documenttypeRepository->getPairData());
43:
44: $form->addSubmit('filter', 'Hledej');
45: $form->addSubmit('cancel', 'Zrušit');
46:
47: $pretyp = $form['filter']->getControlPrototype();
48: $pretyp->setName("button");
49: $pretyp->type = 'submit';
50: $pretyp->class = 'ico-btn';
51: $pretyp->create('i class="fa fa-search"');
52:
53: $pretyp = $form['cancel']->getControlPrototype();
54: $pretyp->setName("button");
55: $pretyp->type = 'submit';
56: $pretyp->class = 'ico-btn';
57: $pretyp->create('i class="fa fa-times-circle-o"');
58:
59: return $form;
60: });
61:
62: $grid->setPagination(20, function ($filter, $order) {
63: return $this->documentRepository->getGridCount($filter);
64: });
65:
66: $grid->addCellsTemplate(__DIR__ . '/../templates/Document/grid.latte');
67:
68: return $grid;
69: }
70:
71: function createEditForm($backlink) {
72: $form = new UI\Form;
73:
74: $form->setRenderer(new BootstrapRenderer());
75:
76: $form->getElementPrototype()->class = 'form-horizontal';
77:
78: $form->addText('name', 'Název:')
79: ->setRequired('Zadejte prosím název')
80: ->setAttribute('class', 'form-control');
81:
82: $form->addSelect('id_documenttype', 'Typ', $this->documenttypeRepository->getPairData());
83:
84: $form->addUpload('file', 'Soubor:');
85:
86: $form->addSubmit('saving', 'Uložit a zpět')
87: ->setAttribute('class', 'btn btn-primary');
88:
89: $form->addSubmit('back')
90: ->setAttribute('class', 'btn btn-inverse')
91: ->getControlPrototype()
92: ->setName('a')
93: ->href($backlink)
94: ->add(Html::el('i')->class('fa fa-reply'))
95: ->add(Html::el('span', ' Zpět'));
96:
97: return $form;
98: }
99:
100: function createDocumentsDataGrid() {
101: $grid = new DocumentsDatagrid;
102:
103: $grid->addColumn('name', 'Název')->enableSort();
104: $grid->addColumn('lastmod', 'Datum')->enableSort();
105: $grid->addColumn('documenttype', 'Typ')->enableSort();
106: $grid->addColumn('assigned', 'Zařazeno');
107:
108: $grid->setRowPrimaryKey('id');
109:
110: $grid->setDatasourceCallback(function ($filter, $order, Paginator $paginator = null) use ($grid) {
111: return $this->documentRepository->getGridSelection($filter, $order, $paginator->page, $paginator->itemsPerPage, $grid->getAssigned());
112: });
113:
114: $grid->setFilterFormFactory(function () {
115: $form = new \Nette\Forms\Container;
116:
117: $form->addText('name');
118: $form->addText('lastmod')->setAttribute('data-dateinput-type', 'date');
119: $form->addSelect('documenttype', 'Typ', array('' => '') + $this->documenttypeRepository->getPairData());
120: $form->addSelect('assigned', 'Zařazeno', array('' => '', '1' => 'Ano', 0 => 'Ne'));
121:
122: $form->addSubmit('filter', 'Hledej');
123: $form->addSubmit('cancel', 'Zrušit');
124:
125: $pretyp = $form['filter']->getControlPrototype();
126: $pretyp->setName("button");
127: $pretyp->type = 'submit';
128: $pretyp->class = 'ico-btn';
129: $pretyp->create('i class="fa fa-search"');
130:
131: $pretyp = $form['cancel']->getControlPrototype();
132: $pretyp->setName("button");
133: $pretyp->type = 'submit';
134: $pretyp->class = 'ico-btn';
135: $pretyp->create('i class="fa fa-times-circle-o"');
136:
137: return $form;
138: });
139:
140: $grid->setPagination(20, function ($filter, $order) use ($grid) {
141: return $this->documentRepository->getGridCount($filter, $grid->getAssigned());
142: });
143:
144: $grid->addCellsTemplate(__DIR__ . '/../templates/Document/documentsgrid.latte');
145:
146: return $grid;
147: }
148: }