add more configuration

This commit is contained in:
DavidBadura
2015-04-23 19:09:52 +00:00
parent 72088ff6a8
commit 6268128cc9
12 changed files with 534 additions and 114 deletions

210
src/Query/QueryBuilder.php Normal file
View File

@@ -0,0 +1,210 @@
<?php
namespace DavidBadura\Taskwarrior\Query;
use DavidBadura\Taskwarrior\Task;
use DavidBadura\Taskwarrior\TaskManager;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Criteria;
/**
* @author David Badura <d.a.badura@gmail.com>
*/
class QueryBuilder
{
/**
* @var string
*/
const ASC = Criteria::ASC;
/**
* @var string
*/
const DESC = Criteria::DESC;
/**
* @var TaskManager
*/
protected $taskManager;
/**
* @var array
*/
protected $filter = [];
/**
* @var Criteria
*/
protected $criteria;
/**
* @param TaskManager $taskManager
*/
public function __construct(TaskManager $taskManager)
{
$this->taskManager = $taskManager;
$this->criteria = new Criteria();
}
/**
* @param string $project
* @return $this
*/
public function whereProject($project)
{
return $this->where('project:' . $project);
}
/**
* @param string $tag
* @return $this
*/
public function whereTag($tag)
{
return $this->where('+' . $tag);
}
/**
* @param string $priority
* @return $this
*/
public function wherePriority($priority)
{
return $this->where('priority:' . $priority);
}
/**
* @return $this
*/
public function wherePriorityL()
{
return $this->wherePriority(Task::PRIORITY_LOW);
}
/**
* @return $this
*/
public function wherePriorityM()
{
return $this->wherePriority(Task::PRIORITY_MEDIUM);
}
/**
* @return $this
*/
public function wherePriorityH()
{
return $this->wherePriority(Task::PRIORITY_HIGH);
}
/**
* @param string $status
* @return $this
*/
public function whereStatus($status)
{
return $this->where('status:' . $status);
}
/**
* @return $this
*/
public function wherePending()
{
return $this->whereStatus(Task::STATUS_PENDING);
}
/**
* @return $this
*/
public function whereWaiting()
{
return $this->whereStatus(Task::STATUS_WAITING);
}
/**
* @return $this
*/
public function whereCompleted()
{
return $this->whereStatus(Task::STATUS_COMPLETED);
}
/**
* @return $this
*/
public function whereRecurring()
{
return $this->whereStatus(Task::STATUS_RECURRING);
}
/**
* @return $this
*/
public function whereDeleted()
{
return $this->whereStatus(Task::STATUS_DELETED);
}
/**
* @param string $where
* @return $this
*/
public function where($where)
{
$this->filter[] = $where;
return $this;
}
/**
* @param array $orderings
* @return $this
*/
public function orderBy(array $orderings)
{
$this->criteria->orderBy($orderings);
return $this;
}
/**
* @param int $firstResult
* @return $this
*/
public function setFirstResult($firstResult)
{
$this->criteria->setFirstResult($firstResult);
return $this;
}
/**
* @param int $maxResults
* @return $this
*/
public function setMaxResults($maxResults)
{
$this->criteria->setMaxResults($maxResults);
return $this;
}
/**
* @return string
*/
public function getFilter()
{
return implode(' ', $this->filter);
}
/**
* @return Task[]|ArrayCollection
*/
public function getResult()
{
$result = $this->taskManager->filter($this->getFilter());
return $result->matching($this->criteria);
}
}