This commit is contained in:
DavidBadura 2015-04-23 21:28:57 +00:00
parent 4ebaee91aa
commit da2d664f58
6 changed files with 187 additions and 73 deletions

121
README.md
View File

@ -10,7 +10,7 @@
composer require 'davidbadura/taskwarrior'
```
**Requirements: Taskwarrior >=2.1**
**Requirements: Taskwarrior >=2.4**
## Usage
@ -31,21 +31,132 @@ $task->setRecurring(Recurring::DAILY);
$tm->save($task);
$tasks = $tm->filter('project:hobby'); // one task
$tasks = $tm->filterPending('project:hobby'); // one task
$tm->done($task);
$tasks = $tm->filter('project:hobby'); // empty
$tasks = $tm->filterPending('project:hobby'); // empty
$tasks = $tm->filter('project:hobby'); // one task
$tasks = $tm->filterByReport('waiting');
$tasks = $tm->filterByReport('waiting'); // and sorting
```
## API
todo...
### 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:
```php
$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:
```php
$tm = TaskManager::create();
```
save a task:
```php
$task = new Task();
$task->setDescription('foo');
$tm->save($task);
```
save a task:
```php
$task = new Task();
$task->setDescription('foo');
$tm->save($task);
```
find a task:
```php
$task = $tm->find('b1d46c75-63cc-4753-a20f-a0b376f1ead0');
```
filter tasks:
```php
$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:
```php
$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:
```php
$tm->delete($task);
```
done task:
```php
$tm->done($task);
```
start task:
```php
$tm->start($task);
```
stop task:
```php
$tm->stop($task);
```
reopen task:
```php
$tm->reopen($task);
```
### QueryBuilder
example:
```php
$tasks = $taskManager->createQueryBuilder()
->whereProject('hobby')

View File

@ -195,7 +195,7 @@ class QueryBuilder
*/
public function getFilter()
{
return implode(' ', $this->filter);
return $this->filter;
}
/**
@ -203,7 +203,7 @@ class QueryBuilder
*/
public function getResult()
{
$result = $this->taskManager->filter($this->getFilter());
$result = $this->taskManager->filter($this->filter);
return $result->matching($this->criteria);
}

View File

@ -79,7 +79,7 @@ class TaskManager
return $this->tasks[$uuid];
}
$tasks = $this->filterAll($uuid);
$tasks = $this->filter($uuid);
if (count($tasks) == 0) {
return null;
@ -96,7 +96,7 @@ class TaskManager
* @param string $filter
* @return Task[]|ArrayCollection
*/
public function filterAll($filter = null)
public function filter($filter = null)
{
$result = $this->export($filter);
@ -119,9 +119,9 @@ class TaskManager
* @param string|array $filter
* @return Task[]|ArrayCollection
*/
public function filter($filter = null)
public function filterPending($filter = null)
{
return $this->filterAll($filter . ' status:pending');
return $this->filter(array_merge((array)$filter, ['status:pending']));
}
/**
@ -219,15 +219,6 @@ class TaskManager
return $errors;
}
/**
* @param Task $task
*/
public function refresh(Task $task)
{
$clean = $this->export($task->getUuid())[0];
$this->merge($task, $clean);
}
/**
*
*/
@ -277,6 +268,15 @@ class TaskManager
->getResult();
}
/**
* @param Task $task
*/
private function refresh(Task $task)
{
$clean = $this->export($task->getUuid())[0];
$this->merge($task, $clean);
}
/**
* @param string|array $filter
* @return Task[]

View File

@ -47,7 +47,7 @@ class Taskwarrior
}
/**
* @param string $filter
* @param string|string[] $filter
*/
public function delete($filter)
{
@ -55,7 +55,7 @@ class Taskwarrior
}
/**
* @param string $filter
* @param string|string[] $filter
*/
public function done($filter)
{
@ -63,7 +63,7 @@ class Taskwarrior
}
/**
* @param string $filter
* @param string|string[] $filter
*/
public function start($filter)
{
@ -71,7 +71,7 @@ class Taskwarrior
}
/**
* @param string $filter
* @param string|string[] $filter
*/
public function stop($filter)
{
@ -88,7 +88,7 @@ class Taskwarrior
/**
* @param array $params
* @param string $filter
* @param string|string[] $filter
*/
public function modify(array $params, $filter = null)
{
@ -96,7 +96,7 @@ class Taskwarrior
}
/**
* @param string $filter
* @param string|string[] $filter
* @return array
*/
public function projects($filter = null)
@ -107,7 +107,7 @@ class Taskwarrior
}
/**
* @param string $filter
* @param string|string[] $filter
* @return array
*/
public function tags($filter = null)
@ -146,7 +146,7 @@ class Taskwarrior
}
/**
* @param string $filter
* @param string|string[] $filter
* @return string
*/
public function export($filter = null)
@ -156,7 +156,7 @@ class Taskwarrior
/**
* @param string $command
* @param string $filter
* @param string|string[] $filter
* @param array $options
* @return string
* @throws TaskwarriorException
@ -170,7 +170,9 @@ class Taskwarrior
}
if ($filter) {
$parts[] = "( " . $filter . ' )';
foreach((array)$filter as $f) {
$parts[] = "( " . $f . ' )';
}
}
$parts[] = $command;

View File

@ -1,6 +1,6 @@
<?php
namespace DavidBadura\Taskwarrior\Test;
namespace DavidBadura\Taskwarrior\Test\Query;
use DavidBadura\Taskwarrior\Query\QueryBuilder;
@ -32,6 +32,6 @@ class QueryBuilderTest extends \PHPUnit_Framework_TestCase
->wherePriority('testPriority')
->getFilter();
$this->assertEquals('project:testProject +testTag status:testStatus priority:testPriority', $filter);
$this->assertEquals(['project:testProject', '+testTag', 'status:testStatus', 'priority:testPriority'], $filter);
}
}

View File

@ -50,7 +50,7 @@ class TaskManagerTest extends \PHPUnit_Framework_TestCase
public function testEmpty()
{
$tasks = $this->taskManager->filter();
$tasks = $this->taskManager->filterPending();
$this->assertEmpty($tasks);
}
@ -123,7 +123,7 @@ class TaskManagerTest extends \PHPUnit_Framework_TestCase
$this->taskManager->save($task);
$result = $this->taskManager->filterAll($task->getUuid());
$result = $this->taskManager->filter($task->getUuid());
$this->assertSame($task, $result[0]);
}
@ -147,14 +147,14 @@ class TaskManagerTest extends \PHPUnit_Framework_TestCase
$this->taskManager->save($task);
$this->assertEquals($uuid, $task->getUuid());
$this->assertCount(1, $this->taskManager->filter());
$this->assertCount(1, $this->taskManager->filterPending());
$this->taskManager->clear();
$this->taskManager->save($task);
$this->assertEquals($uuid, $task->getUuid());
$this->assertCount(1, $this->taskManager->filter());
$this->assertCount(1, $this->taskManager->filterPending());
}
public function testClone()
@ -163,12 +163,12 @@ class TaskManagerTest extends \PHPUnit_Framework_TestCase
$task->setDescription('foo');
$this->taskManager->save($task);
$this->assertCount(1, $this->taskManager->filter());
$this->assertCount(1, $this->taskManager->filterPending());
$task2 = clone $task;
$this->taskManager->save($task2);
$this->assertCount(2, $this->taskManager->filter());
$this->assertCount(2, $this->taskManager->filterPending());
$this->taskManager->done($task);
$this->isTrue($task->isCompleted());
@ -194,7 +194,7 @@ class TaskManagerTest extends \PHPUnit_Framework_TestCase
$this->taskManager->save($task1);
$this->taskManager->save($task2);
$result = $this->taskManager->filter();
$result = $this->taskManager->filterPending();
$this->assertInstanceOf('Doctrine\Common\Collections\ArrayCollection', $result);
$this->assertCount(2, $result);
@ -214,7 +214,7 @@ class TaskManagerTest extends \PHPUnit_Framework_TestCase
$this->taskManager->save($task1);
$this->taskManager->save($task2);
$this->assertCount(1, $this->taskManager->filter('project:home prio:H +now'));
$this->assertCount(1, $this->taskManager->filterPending('project:home prio:H +now'));
}
public function testModified()
@ -306,7 +306,7 @@ class TaskManagerTest extends \PHPUnit_Framework_TestCase
$this->assertEquals(Task::STATUS_PENDING, $result->getStatus());
$this->assertTrue($result->isPending());
$this->assertCount(1, $this->taskManager->filter());
$this->assertCount(1, $this->taskManager->filterPending());
}
public function testDelete()
@ -314,17 +314,17 @@ class TaskManagerTest extends \PHPUnit_Framework_TestCase
$task1 = new Task();
$task1->setDescription('foo1');
$this->assertCount(0, $this->taskManager->filter());
$this->assertCount(0, $this->taskManager->filterPending());
$this->taskManager->save($task1);
$this->assertCount(1, $this->taskManager->filterAll());
$this->assertCount(1, $this->taskManager->filter());
$this->assertCount(1, $this->taskManager->filterPending());
$this->assertFalse($task1->isDeleted());
$this->assertEquals(Task::STATUS_PENDING, $task1->getStatus());
$this->taskManager->delete($task1);
$this->assertCount(1, $this->taskManager->filterAll());
$this->assertCount(0, $this->taskManager->filter());
$this->assertCount(1, $this->taskManager->filter());
$this->assertCount(0, $this->taskManager->filterPending());
$this->assertTrue($task1->isDeleted());
$this->assertEquals(Task::STATUS_DELETED, $task1->getStatus());
}
@ -334,17 +334,17 @@ class TaskManagerTest extends \PHPUnit_Framework_TestCase
$task1 = new Task();
$task1->setDescription('foo1');
$this->assertCount(0, $this->taskManager->filter());
$this->assertCount(0, $this->taskManager->filterPending());
$this->taskManager->save($task1);
$this->assertCount(1, $this->taskManager->filterAll());
$this->assertCount(1, $this->taskManager->filter());
$this->assertCount(1, $this->taskManager->filterPending());
$this->assertFalse($task1->isCompleted());
$this->assertEquals(Task::STATUS_PENDING, $task1->getStatus());
$this->taskManager->done($task1);
$this->assertCount(1, $this->taskManager->filterAll());
$this->assertCount(0, $this->taskManager->filter());
$this->assertCount(1, $this->taskManager->filter());
$this->assertCount(0, $this->taskManager->filterPending());
$this->assertTrue($task1->isCompleted());
$this->assertEquals(Task::STATUS_COMPLETED, $task1->getStatus());
}
@ -439,18 +439,18 @@ class TaskManagerTest extends \PHPUnit_Framework_TestCase
$this->assertEquals('home', $task1->getProject());
$this->assertEquals('office', $task2->getProject());
$this->assertCount(2, $this->taskManager->filter());
$this->assertCount(1, $this->taskManager->filter('project:home'));
$this->assertCount(1, $this->taskManager->filter('project:office'));
$this->assertCount(0, $this->taskManager->filter('project:hobby'));
$this->assertCount(2, $this->taskManager->filterPending());
$this->assertCount(1, $this->taskManager->filterPending('project:home'));
$this->assertCount(1, $this->taskManager->filterPending('project:office'));
$this->assertCount(0, $this->taskManager->filterPending('project:hobby'));
$task2->setProject('home');
$this->taskManager->save($task2);
$this->assertCount(2, $this->taskManager->filter());
$this->assertCount(2, $this->taskManager->filter('project:home'));
$this->assertCount(0, $this->taskManager->filter('project:office'));
$this->assertCount(0, $this->taskManager->filter('project:hobby'));
$this->assertCount(2, $this->taskManager->filterPending());
$this->assertCount(2, $this->taskManager->filterPending('project:home'));
$this->assertCount(0, $this->taskManager->filterPending('project:office'));
$this->assertCount(0, $this->taskManager->filterPending('project:hobby'));
}
public function testProjects()
@ -521,8 +521,8 @@ class TaskManagerTest extends \PHPUnit_Framework_TestCase
$task1 = $this->taskManager->find($task1->getUuid());
$this->assertEquals(array('b', 'c', 'd'), $task1->getTags());
$this->assertCount(0, $this->taskManager->filter('+a'));
$this->assertCount(1, $this->taskManager->filter('+b'));
$this->assertCount(0, $this->taskManager->filterPending('+a'));
$this->assertCount(1, $this->taskManager->filterPending('+b'));
}
public function testTagUnicode()
@ -538,7 +538,7 @@ class TaskManagerTest extends \PHPUnit_Framework_TestCase
$this->assertEquals(array('später'), $task1->getTags());
$this->assertEquals(array('später'), $this->taskwarrior->tags());
$this->assertCount(1,$this->taskManager->filter('+später'));
$this->assertCount(1,$this->taskManager->filterPending('+später'));
}
public function testWait()
@ -556,12 +556,12 @@ class TaskManagerTest extends \PHPUnit_Framework_TestCase
$this->taskManager->save($task1);
$this->assertTrue($task1->isWaiting());
$this->assertCount(0, $this->taskManager->filter());
$this->assertCount(1, $this->taskManager->filterAll('status:waiting'));
$this->assertCount(0, $this->taskManager->filterPending());
$this->assertCount(1, $this->taskManager->filter('status:waiting'));
sleep(3);
$this->assertCount(1, $this->taskManager->filter());
$this->assertCount(1, $this->taskManager->filterPending());
$this->assertFalse($task1->isWaiting());
}
@ -574,11 +574,11 @@ class TaskManagerTest extends \PHPUnit_Framework_TestCase
$this->taskManager->save($task1);
$this->assertCount(2, $this->taskManager->filterAll());
$this->assertCount(2, $this->taskManager->filter());
$this->assertTrue($task1->isRecurring());
$result = $this->taskManager->filter();
$result = $this->taskManager->filterPending();
$this->assertCount(1, $result);
$this->assertTrue($result[0]->isPending());
@ -640,7 +640,7 @@ class TaskManagerTest extends \PHPUnit_Framework_TestCase
$this->taskManager->save($task1);
$this->assertCount(1, $this->taskManager->filterAll());
$this->assertCount(1, $this->taskManager->filter());
}
public function testRecurringModify()
@ -680,15 +680,15 @@ class TaskManagerTest extends \PHPUnit_Framework_TestCase
$this->taskManager->save($task1);
$this->taskManager->clear();
$this->assertCount(1, $this->taskManager->filterAll('status:recurring'));
$this->assertCount(2, $this->taskManager->filterAll());
$this->assertCount(1, $this->taskManager->filter('status:recurring'));
$this->assertCount(2, $this->taskManager->filter());
$this->taskManager->delete($task1);
$this->taskManager->clear();
$this->assertCount(0, $this->taskManager->filterAll('status:recurring'));
$this->assertCount(2, $this->taskManager->filterAll());
$this->assertCount(0, $this->taskManager->filter('status:recurring'));
$this->assertCount(2, $this->taskManager->filter());
}
public function testUntil()
@ -699,11 +699,11 @@ class TaskManagerTest extends \PHPUnit_Framework_TestCase
$this->taskManager->save($task1);
$this->assertCount(1, $this->taskManager->filter());
$this->assertCount(1, $this->taskManager->filterPending());
sleep(3);
$this->assertCount(0, $this->taskManager->filter());
$this->assertCount(0, $this->taskManager->filterPending());
}
@ -763,7 +763,8 @@ class TaskManagerTest extends \PHPUnit_Framework_TestCase
$task1->setDescription('foo1');
$this->taskManager->save($task1);
$this->assertCount(1, $this->taskManager->filterAll('(status:pending or status:waiting)'));
$this->assertCount(1, $this->taskManager->filter('(status:pending or status:waiting)'));
$this->assertCount(1, $this->taskManager->filterPending('(status:pending or status:waiting)'));
}
/**