/** * @return \Nextras\Datagrid\Datagrid */ protected function createComponentGrid() { $grid = new MyDatagrid(); $grid->setTranslator($this->translator); $grid->setShowCheckboxes(FALSE); $grid->addColumn('login', 'Uživatel')->enableSort(); $grid->addColumn('ip', 'IP adresa')->enableSort(); $grid->addColumn('message', 'Zpráva')->enableSort(); $grid->addColumn('timestamp', 'Datum a čas')->enableSort(); $grid->setRowPrimaryKey('syslogID'); $model = $this->historyRepository; $grid->setColumnGetterCallback(function ($row, $column) { $getter = "get" . ucfirst($column); return $row->{$getter}(); }); $grid->setDatasourceCallback(function ($filter, $order, $paginator) use($model) { $data = $model->read($paginator)->select("syslog.*, user.login, user.ip AS loginIP"); foreach ($filter as $k => $v) { $k = str_replace("login", "user.login", $k); $k = str_replace("ip", "syslog.ip", $k); $data->where($k . " LIKE ?", "%" . $v . "%"); } if ($order) { $order = str_replace("login", "user.login", implode(" ", $order)); $order = str_replace("ip", "syslog.ip", $order); $data->order($order); } else { $data->order("timestamp DESC"); } return $data; }); $grid->setPagination(10, function ($filter) use($model) { $data = $model->read(); foreach ($filter as $k => $v) { $k = str_replace("login", "user.login", $k); $k = str_replace("ip", "syslog.ip", $k); $data->where($k . " LIKE ?", "%" . $v . "%"); } return $data->count('*'); }); $grid->setFilterFormFactory(function () { $form = new Container(); $form->addText("login", "Uživatel"); $form->addText("ip", "IP adresa"); $form->addText("message", "Zpráva"); // these buttons are not compulsory $form->addSubmit('filter', 'Filtrovat')->getControlPrototype()->class = 'btn btn-primary'; $form->addSubmit('cancel', 'Storno')->getControlPrototype()->class = 'btn btn-default'; return $form; }); return $grid; }
/** * @return MyDatagrid */ protected function createComponentGridAction() { $grid = new MyDatagrid(); $grid->setTranslator($this->translator); $grid->setShowCheckboxes(TRUE); $grid->addColumn('name', 'Jméno akce')->enableSort(); $grid->addColumn('humanName', 'Lidský formát')->enableSort(); $grid->addCellsTemplate(APP_DIR . "/templates/" . $this->getName() . "/action-row-actions.latte"); $grid->setRowPrimaryKey('aclActionID'); $model = $this->actionRepository; $grid->setDatasourceCallback(function ($filter, $order, $paginator) use($model) { $data = $model->read($paginator); foreach ($filter as $k => $v) { $data->where($k . " LIKE ?", "%" . $v . "%"); } if ($order) { $data->order(implode(" ", $order)); } return $data; }); $grid->setPagination(10, function ($filter) use($model) { $data = $model->read(); foreach ($filter as $k => $v) { $data->where($k . " LIKE ?", "%" . $v . "%"); } return $data->count('*'); }); $grid->setFilterFormFactory(function () { $form = new Container(); $form->addText("name", "Jméno akce"); $form->addText("humanName", "Jméno akce - lidský formát"); // these buttons are not compulsory $form->addSubmit('filter', 'Filtrovat')->getControlPrototype()->class = 'btn btn-primary'; $form->addSubmit('cancel', 'Storno')->getControlPrototype()->class = 'btn'; return $form; }); return $grid; }
/** Vytvoří komponentu gridu * */ protected function createComponentGrid() { $grid = new MyDatagrid(); $grid->setTranslator($this->translator); $grid->setShowCheckboxes(TRUE); $grid->addColumn('login', 'Uživatelské jméno')->enableSort(); $grid->addColumn('roleName', 'Skupina')->enableSort(); $grid->addColumn('active', 'Aktivní')->enableSort(); $grid->addColumn('lastLogged', 'Poslední přihlášení')->enableSort(); $grid->addColumn('ip', 'IP adresa')->enableSort(); $grid->addCellsTemplate(APP_DIR . "/templates/" . $this->getName() . "/row-actions.latte"); $grid->setRowPrimaryKey('userID'); $model = $this->userRepository; $user = $this->user; $grid->setDatasourceCallback(function ($filter, $order, $paginator) use($model, $user) { if ($user->isInRole("root")) { $data = $model->read($paginator); } else { $data = $model->read($paginator)->where("login != ?", "root")->where("userID = ? OR user.aclRoleID != ?", array($user->getId(), $user->getIdentity()->data['aclRoleID'])); } foreach ($filter as $k => $v) { $k = str_replace("roleName", "role.name", $k); $data->where($k . " LIKE ?", "%" . $v . "%"); } if ($order) { $order = str_replace("roleName", "role.name", implode(" ", $order)); $data->order($order); } // Role name hacking foreach ($data as $entity) { $entity->setRoleName($entity->getRole()->getName()); } return $data; }); $grid->setPagination(10, function ($filter) use($model) { $data = $model->read(); foreach ($filter as $k => $v) { $k = str_replace("roleName", "role.name", $k); $data->where($k . " LIKE ?", "%" . $v . "%"); } return $data->count('*'); }); $roleModel = $this->roleRepository; $grid->setFilterFormFactory(function () use($roleModel) { $form = new Container(); $form->addText("login", "Uživatelské jméno"); $form->addSelect("roleName", "Skupina", $roleModel->read()->fetchPairs("name", "name"))->setPrompt("Vše"); $form->addSelect("active", "Aktivní", array("0" => "Neaktivní", "1" => "Aktivní"))->setPrompt("Vše"); $form->addText("lastLogged", "Poslední přihlášení"); $form->addText("ip", "IP adresa"); // these buttons are not compulsory $form->addSubmit('filter', 'Filtrovat')->getControlPrototype()->class = 'btn btn-primary'; $form->addSubmit('cancel', 'Storno')->getControlPrototype()->class = 'btn'; return $form; }); return $grid; }