-
Notifications
You must be signed in to change notification settings - Fork 13
/
DibiPresenter.php
112 lines (91 loc) · 3.55 KB
/
DibiPresenter.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php
namespace App\Presenters;
use App\Controls\Grido\Grid;
use Nette\Utils\Html;
/**
* Dibi example.
* @link http://dibiphp.com/
*
* @package Grido
* @author Petr Bugyík
*/
final class DibiPresenter extends Presenter
{
/** @var \DibiConnection @inject */
public $database;
protected function createComponentGrid($name)
{
$grid = new Grid($this, $name);
$fluent = $this->database->select('u.*, c.title AS country')
->from('[user] u')
->join('[country] c')->on('u.country_code = c.code');
$grid->model = $fluent;
$grid->addColumnText('firstname', 'Firstname')
->setFilterText()
->setSuggestion();
$grid->addColumnText('surname', 'Surname')
->setSortable()
->setFilterText()
->setSuggestion();
$grid->addColumnText('gender', 'Gender')
->setSortable()
->cellPrototype->class[] = 'center';
$grid->addColumnDate('birthday', 'Birthday', \Grido\Components\Columns\Date::FORMAT_TEXT)
->setSortable()
->setFilterDate()
->setCondition($grid->birthdayFilterCondition);
$grid->getColumn('birthday')->cellPrototype->class[] = 'center';
$customRender = function($item) {
$baseUri = $this->getBaseUri();
$img = Html::el('img')->src("$baseUri/img/flags/$item->country_code.gif");
return "$img $item->country";
};
$grid->addColumnText('country', 'Country')
->setSortable()
->setCustomRender($customRender)
->setFilterText()
->setColumn('c.title')
->setSuggestion('title');
$grid->addColumnText('card', 'Card')
->setSortable()
->setColumn('cctype') //name of db column
->setReplacement(array('MasterCard' => Html::el('b')->setText('MasterCard')))
->cellPrototype->class[] = 'center';
$grid->addColumnEmail('emailaddress', 'Email')
->setSortable()
->setFilterText();
$grid->getColumn('emailaddress')->cellPrototype->class[] = 'center';
$grid->addColumnText('centimeters', 'Height')
->setSortable()
->setFilterNumber();
$grid->getColumn('centimeters')->cellPrototype->class[] = 'center';
$grid->addFilterSelect('gender', 'Gender', array(
'' => '',
'female' => 'female',
'male' => 'male'
));
$grid->addFilterSelect('card', 'Card', array(
'' => '',
'MasterCard' => 'MasterCard',
'Visa' => 'Visa'
))
->setColumn('cctype');
$grid->addFilterCheck('preferred', 'Only preferred girls :)')
->setCondition(array(
TRUE => array(array('gender', 'AND', 'centimeters'), array('= ?', '>= ?'), array('female', 170)))
);
$grid->addActionHref('edit', 'Edit')
->setIcon('pencil');
$grid->addActionHref('delete', 'Delete')
->setIcon('trash')
->setConfirm(function($item) {
return "Are you sure you want to delete {$item->firstname} {$item->surname}?";
});
$operation = array('print' => 'Print', 'delete' => 'Delete');
$grid->setOperation($operation, $this->handleOperations)
->setConfirm('delete', 'Are you sure you want to delete %i items?');
$grid->filterRenderType = $this->filterRenderType;
$grid->setExport();
return $grid;
}
}