Skip to content

Instantly share code, notes, and snippets.

@igorpocta
Last active February 6, 2017 17:47
Show Gist options
  • Save igorpocta/7bce689c70145a91f01fb06d704dcdfb to your computer and use it in GitHub Desktop.
Save igorpocta/7bce689c70145a91f01fb06d704dcdfb to your computer and use it in GitHub Desktop.
<?php
namespace App\TaskTracker\Components\TasksGrid;
use App\Components\AbstractControl;
use App\Factories\DataGrid\DataGridFactory;
use App\SAP\Employee;
use App\TaskTracker\Facades\GroupFacade;
use App\TaskTracker\Facades\TaskFacade;
use App\TaskTracker\Group;
use App\TaskTracker\Task;
use Doctrine\ORM\ORMException;
use Kdyby\Doctrine\QueryBuilder;
/**
* @method onRemove(TasksGrid $control, Task $task)
* @method onException(TasksGrid $control, \Exception $exception)
*/
final class TasksGrid extends AbstractControl
{
/** @var Group */
private $group;
/** @var TaskFacade */
private $taskFacade;
/** @var GroupFacade */
private $groupFacade;
/** @var Employee */
private $employee;
/** @var DataGridFactory */
private $dataGridFactory;
/** @var \Closure */
public $onRemove = [];
/** @var \Closure */
public $onException = [];
public function __construct(Group $group = null, Employee $employee = NULL, TaskFacade $taskFacade,
GroupFacade $groupFacade, DataGridFactory $dataGridFactory)
{
$this->group = $group;
$this->employee = $employee;
$this->taskFacade = $taskFacade;
$this->groupFacade = $groupFacade;
$this->dataGridFactory = $dataGridFactory;
}
public function render()
{
$this->template->setFile(__DIR__ . '/TasksGrid.latte');
$this->template->render();
}
protected function createComponentTasksGrid($name)
{
$qb = $this->taskFacade->getRepository()->createQueryBuilder('tr');
$qb->where($qb->expr()->andX(
$qb->expr()->eq('tr.enabled', TRUE),
$qb->expr()->eq('tr.taskGroup', $this->group->getId())
));
$dataGrid = $this->dataGridFactory->create($this, $name, $qb);
$dataGrid->setColumnReset();
$dataGrid->setTemplateFile(__DIR__ . '/grid.latte');
$dataGrid->setColumnsHideable();
$p = $this->getPresenter();
$dataGrid->addColumnText('id', 'taskTracker.components.tasksGrid.id')
->setAlign('center')
->setDefaultHide()
->addAttributes(["width" => "8%"]);
$dataGrid->addColumnText('title', 'taskTracker.components.tasksGrid.title')
->setFilterText('title')
->setCondition(function ($qb, $value) {
$qb->andWhere($qb->expr()->like('tr.title', $qb->expr()->literal('%' . $value . '%')));
});
$dataGrid->addColumnText('solver', 'taskTracker.components.tasksGrid.solver', 'solver.name')
->setAlign('center')
->setFilterSelect($this->groupFacade->getSolversList($this->group), 'solver');
$dataGrid->addColumnText('percentDone', 'taskTracker.components.tasksGrid.percentDone')
->setAlign('center')
->addAttributes(["width" => "8%"]);
$dataGrid->addColumnDateTime('deadline', 'taskTracker.components.tasksGrid.deadline')
->setAlign('center')
->addAttributes(["width" => "15%"])
->setFilterDate('deadline')->setTemplate($this->dataGridFactory->customFilterTemplate('date'))
->setCondition(function ($qb, $value) {
/** @var QueryBuilder $qb */
$date = \DateTime::createFromFormat("j. n. Y", $value);
if ($date) {
$qb->andWhere($qb->expr()->eq('tr.deadline', $qb->expr()->literal($date->format("Y-m-d"))));
}
});
// Zobrazit
$dataGrid->addActionCallback('custom_callback_showTask', '')
->setIcon('eye')
->setTitle('taskTracker.components.tasksGrid.showItemButton')
->setClass('btn btn-xs btn-primary')->onClick[] = function ($id) use ($p) {
$this->getPresenter()->redirect(":TaskTracker:Task:show", ["task" => $id]);
};
// Upravit
$dataGrid->addActionCallback('custom_callback_editTask', '')
->setIcon('pencil')
->setTitle('taskTracker.components.tasksGrid.editItemButton')
->setClass('btn btn-xs btn-info')->onClick[] = function ($id) use ($p) {
$this->getPresenter()->redirect(":TaskTracker:Task:edit", ["task" => $id]);
};
// Smazat
$dataGrid->addAction('delete', '', 'deleteTask!')
->setIcon('trash')
->setClass('btn btn-xs btn-danger ajax')
->setConfirm('taskTracker.components.tasksGrid.deleteTaskConfirm');
$dataGrid->allowRowsAction('custom_callback_editTask', function (Task $item) {
return $this->getPresenter()->getUser()->isInRole('admin');
});
$dataGrid->allowRowsAction('delete', function (Task $item) {
return $this->getPresenter()->getUser()->isInRole('admin')
});
return $dataGrid;
}
public function handleDeleteTask($id)
{
// ...
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment