diff --git a/README.md b/README.md index 60be46d..67c3461 100644 --- a/README.md +++ b/README.md @@ -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') diff --git a/src/Query/QueryBuilder.php b/src/Query/QueryBuilder.php index fcc67d5..58375b0 100644 --- a/src/Query/QueryBuilder.php +++ b/src/Query/QueryBuilder.php @@ -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); } diff --git a/src/TaskManager.php b/src/TaskManager.php index a4445e9..f3502ea 100644 --- a/src/TaskManager.php +++ b/src/TaskManager.php @@ -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[] diff --git a/src/Taskwarrior.php b/src/Taskwarrior.php index 6d2c40d..f47562a 100644 --- a/src/Taskwarrior.php +++ b/src/Taskwarrior.php @@ -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; diff --git a/tests/QueryBuilderTest.php b/tests/Query/QueryBuilderTest.php similarity index 81% rename from tests/QueryBuilderTest.php rename to tests/Query/QueryBuilderTest.php index e96823e..60cc3e0 100644 --- a/tests/QueryBuilderTest.php +++ b/tests/Query/QueryBuilderTest.php @@ -1,6 +1,6 @@ wherePriority('testPriority') ->getFilter(); - $this->assertEquals('project:testProject +testTag status:testStatus priority:testPriority', $filter); + $this->assertEquals(['project:testProject', '+testTag', 'status:testStatus', 'priority:testPriority'], $filter); } } \ No newline at end of file diff --git a/tests/TaskManagerTest.php b/tests/TaskManagerTest.php index 1f01620..5ee8568 100644 --- a/tests/TaskManagerTest.php +++ b/tests/TaskManagerTest.php @@ -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)')); } /**