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 UserFactory extends Object {
11: 12: 13:
14: private $userRepository;
15:
16: 17: 18:
19: private $roleRepository;
20:
21: function __construct(UserRepository $userRepository, RoleRepository $roleRepository) {
22: $this->userRepository = $userRepository;
23: $this->roleRepository = $roleRepository;
24: }
25:
26: function createDataGrid() {
27: $grid = new \Nextras\Datagrid\Datagrid;
28:
29: $grid->addColumn('firstname', 'Jméno')->enableSort();
30: $grid->addColumn('lastname', 'Příjmení')->enableSort();
31: $grid->addColumn('username', 'Uživ. jméno')->enableSort();
32: $grid->addColumn('role', 'Role')->enableSort();
33: $grid->addColumn('receiveemail', 'Upozornit e-mailem');
34:
35: $grid->setRowPrimaryKey('id');
36:
37: $grid->setDatasourceCallback(function ($filter, $order, Paginator $paginator = null) {
38: return $this->userRepository->getGridSelection($filter, $order, $paginator->page, $paginator->itemsPerPage);
39: });
40:
41: $grid->setFilterFormFactory(function () {
42: $form = new \Nette\Forms\Container;
43:
44: $form->addText('firstname');
45: $form->addText('lastname');
46: $form->addText('username');
47:
48: $data = $this->roleRepository->getPairData();
49: $data = array('' => '') + $data;
50:
51: $form->addSelect('role', 'Typ', $data);
52:
53: $form->addSubmit('filter', 'Hledej');
54: $form->addSubmit('cancel', 'Zrušit');
55:
56: $pretyp = $form['filter']->getControlPrototype();
57: $pretyp->setName("button");
58: $pretyp->type = 'submit';
59: $pretyp->class = 'ico-btn';
60: $pretyp->create('i class="fa fa-search"');
61:
62: $pretyp = $form['cancel']->getControlPrototype();
63: $pretyp->setName("button");
64: $pretyp->type = 'submit';
65: $pretyp->class = 'ico-btn';
66: $pretyp->create('i class="fa fa-times-circle-o"');
67:
68: return $form;
69: });
70:
71: $grid->setPagination(20, function ($filter, $order) {
72: return $this->userRepository->getGridCount($filter);
73: });
74:
75: $grid->addCellsTemplate(__DIR__ . '/../templates/User/grid.latte');
76:
77: return $grid;
78: }
79:
80: function createEditForm($backlink) {
81: $form = new UI\Form;
82:
83: $form->setRenderer(new BootstrapRenderer());
84:
85: $form->getElementPrototype()->class = 'form-horizontal';
86:
87: $form->addText('firstname', 'Jméno:')
88: ->setRequired('Zadejte prosím jméno')
89: ->setAttribute('class', 'form-control');
90:
91: $form->addText('lastname', 'Příjmení:')
92: ->setRequired('Zadejte prosím příjmení')
93: ->setAttribute('class', 'form-control');
94:
95: $form->addText('email', 'Email:')
96: ->setAttribute('class', 'form-control');
97:
98: $form->addPassword('password', 'Heslo:')
99: ->setAttribute('autocomplete', 'off')
100: ->setAttribute('class', 'form-control');
101:
102: $form->addText('username', 'Uživ. jméno:')
103: ->setRequired('Zadejte prosím uživatelské jméno')
104: ->setAttribute('class', 'form-control');
105:
106: $form->addCheckbox('receiveemail')
107: ->setAttribute('class', 'form-control');
108:
109: $form->addSelect('role', 'Role', $this->roleRepository->getPairData());
110:
111: $form->addSubmit('saving', 'Uložit a zpět')
112: ->setAttribute('class', 'btn btn-primary');
113:
114: $form->addSubmit('back')
115: ->setAttribute('class', 'btn btn-inverse')
116: ->getControlPrototype()
117: ->setName('a')
118: ->href($backlink)
119: ->add(Html::el('i')->class('fa fa-reply'))
120: ->add(Html::el('span', ' Zpět'));
121:
122: return $form;
123: }
124: }