3.2 KiB
3.2 KiB
Taskwarrior PHP lib
used by doThings - a Taskwarrior web-ui.
Install
composer require 'davidbadura/taskwarrior'
Unfortunately, the annotation reader is not automatically registered on composer. So you should add following line if you have [Semantical Error] The annotation "@JMS\Serializer\Annotation\Type" in property [...] does not exist, or could not be auto-loaded.
exception:
\Doctrine\Common\Annotations\AnnotationRegistry::registerLoader('class_exists');
Requirements
Taskwarrior changes its behavior by patch level updates and it is very difficult to support all versions. That's why I've decided just to support only one version: 2.4.4
Usage
use DavidBadura\Taskwarrior\TaskManager;
use DavidBadura\Taskwarrior\Task;
use DavidBadura\Taskwarrior\Recurring;
$tm = TaskManager::create();
$task = new Task();
$task->setDescription('program this lib');
$task->setProject('hobby');
$task->setDue('tomorrow');
$task->setPriority(Task::PRIORITY_HIGH);
$task->addTag('next');
$task->setRecurring(Recurring::DAILY);
$tm->save($task);
$tasks = $tm->filterPending('project:hobby'); // one task
$tm->done($task);
$tasks = $tm->filterPending('project:hobby'); // empty
$tasks = $tm->filter('project:hobby'); // one task
$tasks = $tm->filterByReport('waiting'); // and sorting
API
Task
attr | writeable | type |
---|---|---|
uuid | false | string |
description | true | string |
priority | true | string |
project | true | string |
due | true | DateTime |
wait | true | DateTime |
tags | true | string[] |
urgency | false | float |
entry | false | DateTime |
start | false | DateTime |
recur | true | Recurring |
unti | true | DateTime |
modified | false | DateTime |
end | false | DateTime |
status | false | string |
Example:
$task = new Task();
$task->setDescription('program this lib');
$task->setProject('hobby');
$task->setDue('tomorrow');
$task->setPriority(Task::PRIORITY_HIGH);
$task->addTag('next');
$task->setRecurring(Recurring::DAILY);
Taskwarrior
create TaskManager:
$tm = TaskManager::create();
save a task:
$task = new Task();
$task->setDescription('foo');
$tm->save($task);
find a task:
$task = $tm->find('b1d46c75-63cc-4753-a20f-a0b376f1ead0');
filter tasks:
$tasks = $tm->filter('status:pending');
$tasks = $tm->filter('status:pending +home');
$tasks = $tm->filter('status:pending and +home');
$tasks = $tm->filter(['status:pending', '+home']);
filter pending tasks:
$tasks = $tm->filterPending('+home');
$tasks = $tm->filterPending('project:hobby +home');
$tasks = $tm->filterPending('project:hobby and +home');
$tasks = $tm->filterPending(['project:hobby', '+home']);
delete task:
$tm->delete($task);
done task:
$tm->done($task);
start task:
$tm->start($task);
stop task:
$tm->stop($task);
reopen task:
$tm->reopen($task);
QueryBuilder
example:
$tasks = $taskManager->createQueryBuilder()
->whereProject('hobby')
->orderBy(['entry' => 'DESC'])
->getResult()