Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 76 additions & 0 deletions app/components/form/FilterTasks.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
<?php
namespace App\Components\Form;

use App\Model\Entity\Task;
use App\Model\Entity\TaskGroup;
use App\Model\Repository\TaskRepository;
use App\Model\Repository\TaskGroupRepository;
use App\Presenters\TaskPresenter;
use Nette\Application\UI\Control;
use Nette\Application\UI\Form;

class FilterTasks extends Control
{
/** @var TaskRepository*/
public $taskRepository;
/** @var number */
public $idTaskGroup;
/** @var array */
public $filter = array();

/**
* @param TaskRepository $taskRepository
*/
public function __construct(TaskRepository $taskRepository)
{
parent::__construct();
$this->taskRepository = $taskRepository;
}

public function render()
{
$template = $this->template;
$template->setFile(__DIR__ . '/templates/FilterTasks.latte');
$template->render();
}

/**
* @param int $idTaskGroup
*/
public function setTaskGroupId($idTaskGroup)
{
$this->idTaskGroup = $idTaskGroup;
}

/**
* @param array $filter
*/
public function setFilter(array $filter)
{
$this->filter = $filter;
}

/**
* @return Form
*/
protected function createComponentFilterTasksForm()
{
$form = new Form();
$form->addText('name', 'Name');
$form->addSubmit('submit', 'Filter');
$form->onSuccess[] = array($this, 'filterTasksFormSuccess');

$form->setDefaults($this->filter);

return $form;
}

/**
* @param Form $form
* @param $values
*/
public function filterTasksFormSuccess(Form $form, $values)
{
$this->presenter->redirect('this', array('filter' => (array) $values));
}
}
23 changes: 17 additions & 6 deletions app/components/form/InsertTask.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use App\Model\Entity\TaskGroup;
use App\Model\Repository\TaskRepository;
use App\Model\Repository\TaskGroupRepository;
use App\Presenters\TaskPresenter;
use Nette\Application\UI\Control;
use Nette\Application\UI\Form;

Expand Down Expand Up @@ -53,26 +54,36 @@ protected function createComponentInsertTaskForm()
->setRequired('Please fill task name');
$form->addText('date', 'Date')
->setRequired('Please fill task date');
$form->addHidden('idTaskGroup', $this->idTaskGroup);
$form->addSelect('taskGroup', 'Task group', $this->taskGroupRepository->getSelect())
->setRequired('Please select task group')
->setDefaultValue($this->idTaskGroup);
$form->addSubmit('submit', 'Add');
$form->onSuccess[] = array($this, 'insertTaskFromSuccess');
$form->onSuccess[] = array($this, 'insertTaskFormSuccess');
return $form;
}

/**
* @param Form $form
* @param $values
*/
public function insertTaskFromSuccess(Form $form, $values)
public function insertTaskFormSuccess(Form $form, $values)
{
$taskGroup = $this->taskGroupRepository->getById($values->idTaskGroup);
$taskGroup = $this->taskGroupRepository->getById($values->taskGroup);

$taskEntity = new Task();
$taskEntity->setName($values->name);
$taskEntity->setDate($values->date);
$taskEntity->setTaskGroup($taskGroup);
$this->taskRepository->insert($taskEntity);
$this->presenter->flashMessage('Task was created', 'success');
$this->redirect('this');

if($this->presenter->isAjax()){
$form->setValues(array('taskGroup' => $this->idTaskGroup), TRUE);
$this->redrawControl();
}

/** @var TaskPresenter $presenter */
$presenter = $this->presenter;
$presenter->flashMessage('Task was created', 'success');
$presenter->redrawOrRedirect(array('flashes', 'tasks'));
}
}
16 changes: 16 additions & 0 deletions app/components/form/templates/FilterTasks.latte
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{snippet}
{form filterTasksForm}
<div class="row">
<div class="col-md-4">
<div class="form-group">
{label name /}
{input name, class => 'form-control'}
</div>
</div>
<div class="col-md-2">
<br/>
{input submit, class => 'btn btn-primary'}
</div>
</div>
{/form}
{/snippet}
48 changes: 28 additions & 20 deletions app/components/form/templates/InsertTask.latte
Original file line number Diff line number Diff line change
@@ -1,20 +1,28 @@
{form insertTaskForm}
<div class="row">
<div class="col-md-7">
<div class="form-group">
{label name /}
{input name, class => 'form-control'}
</div>
</div>
<div class="col-md-3">
<div class="form-group">
{label date /}
{input date, class => 'form-control datepicker'}
</div>
</div>
<div class="col-md-2">
<br/>
{input submit, class => 'btn btn-primary'}
</div>
</div>
{/form}
{snippet}
{form insertTaskForm}
<div class="row">
<div class="col-md-4">
<div class="form-group">
{label name /}
{input name, class => 'form-control'}
</div>
</div>
<div class="col-md-3">
<div class="form-group">
{label taskGroup /}
{input taskGroup, class => 'form-control'}
</div>
</div>
<div class="col-md-3">
<div class="form-group">
{label date /}
{input date, class => 'form-control datepicker'}
</div>
</div>
<div class="col-md-2">
<br/>
{input submit, class => 'btn btn-primary ajax'}
</div>
</div>
{/form}
{/snippet}
1 change: 1 addition & 0 deletions app/config/config.neon
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ services:
- App\Model\Repository\TaskRepository
- App\Factories\Modal\IInsertTaskGroupFactory
- App\Factories\Form\IInsertTaskFactory
- App\Factories\Form\IFilterTasksFactory

extensions:
console: Kdyby\Console\DI\ConsoleExtension
Expand Down
12 changes: 12 additions & 0 deletions app/factories/form/IFilterTasksFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php
namespace App\Factories\Form;

use App\Components\Form\FilterTasks;

interface IFilterTasksFactory
{
/**
* @return FilterTasks
*/
public function create();
}
13 changes: 13 additions & 0 deletions app/model/repository/TaskGroupRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,17 @@ public function insert(Entity\TaskGroup $taskGroup)
$this->entityManager->persist($taskGroup);
$this->entityManager->flush();
}

/**
* @param array $criteria
* @param string $value
* @param string $key
* @param array $orderBy
* @return array
*/
public function getSelect($criteria = array(), $value = 'name',
$orderBy = array('name' => 'ASC'), $key = 'id')
{
return $this->taskGroup->findPairs($criteria, $value, $orderBy, $key);
}
}
25 changes: 18 additions & 7 deletions app/model/repository/TaskRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,25 @@ public function getById($id)
{
return $this->task->find($id);
}

/**
* @param number $idTaskGroup
* @return Entity\Task[]
*/
public function getByTaskGroup($idTaskGroup)

/**
* @param number $idTaskGroup
* @param array|null $orderBy
* @return Entity\Task[]
*/
public function getByTaskGroup($idTaskGroup, $orderBy = NULL)
{
return $this->task->findBy(array('taskGroup' => $idTaskGroup), $orderBy);
}

/**
* @param array $criteria
* @param array|null $orderBy
* @return Entity\Task[]
*/
public function getBy(array $criteria, $orderBy = NULL)
{
return $this->task->findBy(array('taskGroup' => $idTaskGroup));
return $this->task->findBy($criteria, $orderBy);
}

/**
Expand Down
87 changes: 79 additions & 8 deletions app/presenter/TaskPresenter.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,25 +15,48 @@ class TaskPresenter extends BasePresenter
public $insertTaskGroupFactory;
/** @var \App\Factories\Form\IInsertTaskFactory @inject */
public $insertTaskFactory;
/** @var number */
protected $idTaskGroup;
/** @var \App\Factories\Form\IFilterTasksFactory @inject */
public $filterTasksFactory;
/**
* @var number
* @persistent
*/
public $idTaskGroup;
/**
* @var array
* @persistent
*/
public $filter = array();

public function renderDefault()
{
$this->template->taskGroups = $this->getTaskGroups();
}

/**
* @param int $id
*/
public function handleCompleteTask($id)
{
$task = $this->taskRepository->getById($id);
if($task){
$task->setCompleted(TRUE);
$this->taskRepository->updateEntity($task);
$this->flashMessage('Task was completed', 'success');
} else {
$this->flashMessage('Task was not found', 'error');
}

$this->redrawOrRedirect(array('tasks', 'flashes'));
}

/**
* @param int $id
*/
public function handleDeleteTaskGroup($id)
{
$this->taskGroupRepository->delete($id);
if ($this->isAjax()) {
$this->redrawControl('taskGroups');
} else {
$this->redirect('this');
}
$this->redrawOrRedirect('taskGroups');
}

/**
Expand Down Expand Up @@ -64,6 +87,17 @@ protected function createComponentInsertTaskForm()
return $control;
}

/**
* @return \App\Components\Form\FilterTasks
*/
protected function createComponentFilterTasksForm()
{
$control = $this->filterTasksFactory->create();
$control->setTaskGroupId($this->idTaskGroup);
$control->setFilter($this->filter);
return $control;
}

/**
* @return array
*/
Expand All @@ -87,7 +121,12 @@ protected function getTaskGroups()
protected function getTasks($idTaskGroup)
{
$result = array();
$tasks = $this->taskRepository->getByTaskGroup($idTaskGroup);
$criteria = array_merge(
$this->prepareTasksFilter(),
array('taskGroup' => $idTaskGroup)
);

$tasks = $this->taskRepository->getBy($criteria, array('date' => 'DESC'));
foreach ($tasks as $task) {
$item = array();
$item['id'] = $task->getId();
Expand All @@ -98,4 +137,36 @@ protected function getTasks($idTaskGroup)
}
return $result;
}


/**
* @param string|array $snippets
* @param string $destination
*/
public function redrawOrRedirect($snippets, $destination = 'this')
{
if($this->isAjax()){
if(!is_array($snippets)){
$snippets = array($snippets);
}
foreach($snippets as $snippet){
$this->redrawControl($snippet);
}
} else {
$this->redirect($destination);
}
}


/**
* @return array
*/
private function prepareTasksFilter()
{
$filter = array();
if(array_key_exists('name', $this->filter)){
$filter['name LIKE'] = "%{$this->filter['name']}%";
}
return $filter;
}
}
Loading