commit
3ca521bba3
59
src/Annotation.php
Normal file
59
src/Annotation.php
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace DavidBadura\Taskwarrior;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use JMS\Serializer\Annotation as JMS;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author David Badura <d.a.badura@gmail.com>
|
||||||
|
*/
|
||||||
|
class Annotation
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*
|
||||||
|
* @JMS\Type("string")
|
||||||
|
*/
|
||||||
|
private $description;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Carbon
|
||||||
|
*
|
||||||
|
* @JMS\Type("Carbon")
|
||||||
|
*/
|
||||||
|
private $entry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $description
|
||||||
|
*/
|
||||||
|
public function __construct($description = null)
|
||||||
|
{
|
||||||
|
$this->entry = new Carbon(); // todo https://bug.tasktools.org/browse/TW-1780
|
||||||
|
$this->description = $description;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getDescription()
|
||||||
|
{
|
||||||
|
return $this->description;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $description
|
||||||
|
*/
|
||||||
|
public function setDescription($description)
|
||||||
|
{
|
||||||
|
$this->description = $description;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Carbon
|
||||||
|
*/
|
||||||
|
public function getEntry()
|
||||||
|
{
|
||||||
|
return $this->entry;
|
||||||
|
}
|
||||||
|
}
|
48
src/Task.php
48
src/Task.php
@ -106,6 +106,13 @@ class Task
|
|||||||
*/
|
*/
|
||||||
private $until;
|
private $until;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Annotation[]
|
||||||
|
*
|
||||||
|
* @JMS\Type("array<DavidBadura\Taskwarrior\Annotation>")
|
||||||
|
*/
|
||||||
|
private $annotations = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Carbon
|
* @var Carbon
|
||||||
*
|
*
|
||||||
@ -352,6 +359,47 @@ class Task
|
|||||||
$this->until = $this->parseDateTime($until);
|
$this->until = $this->parseDateTime($until);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Annotation[]
|
||||||
|
*/
|
||||||
|
public function getAnnotations()
|
||||||
|
{
|
||||||
|
return (array)$this->annotations;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Annotation[] $annotations
|
||||||
|
*/
|
||||||
|
public function setAnnotations(array $annotations = [])
|
||||||
|
{
|
||||||
|
$this->annotations = [];
|
||||||
|
|
||||||
|
foreach ($annotations as $annotation) {
|
||||||
|
$this->addAnnotation($annotation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Annotation $annotation
|
||||||
|
*/
|
||||||
|
public function addAnnotation(Annotation $annotation)
|
||||||
|
{
|
||||||
|
if (!in_array($annotation, $this->annotations)) {
|
||||||
|
$this->annotations[] = $annotation;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Annotation $annotation
|
||||||
|
*/
|
||||||
|
public function removeAnnotation(Annotation $annotation)
|
||||||
|
{
|
||||||
|
if (false !== $key = array_search($annotation, $this->annotations)) {
|
||||||
|
unset($this->annotations[$key]);
|
||||||
|
$this->annotations = array_values($this->annotations);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Carbon
|
* @return Carbon
|
||||||
*/
|
*/
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace DavidBadura\Taskwarrior\Test;
|
namespace DavidBadura\Taskwarrior\Test;
|
||||||
|
|
||||||
|
use DavidBadura\Taskwarrior\Annotation;
|
||||||
use DavidBadura\Taskwarrior\Recurring;
|
use DavidBadura\Taskwarrior\Recurring;
|
||||||
use DavidBadura\Taskwarrior\Task;
|
use DavidBadura\Taskwarrior\Task;
|
||||||
use DavidBadura\Taskwarrior\TaskManager;
|
use DavidBadura\Taskwarrior\TaskManager;
|
||||||
@ -928,6 +929,64 @@ class TaskManagerTest extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertEquals(0, $this->taskManager->count('+baz'));
|
$this->assertEquals(0, $this->taskManager->count('+baz'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testEmptyAnnotation()
|
||||||
|
{
|
||||||
|
$task = new Task();
|
||||||
|
$task->setDescription('foo');
|
||||||
|
|
||||||
|
$this->taskManager->save($task);
|
||||||
|
|
||||||
|
$temp1 = $this->taskManager->find($task->getUuid());
|
||||||
|
|
||||||
|
$this->assertCount(0, $temp1->getAnnotations());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testAnnotation()
|
||||||
|
{
|
||||||
|
$task = new Task();
|
||||||
|
$task->setDescription('foo');
|
||||||
|
$task->addAnnotation(new Annotation('testbar'));
|
||||||
|
|
||||||
|
$this->taskManager->save($task);
|
||||||
|
$task = $this->taskManager->find($task->getUuid());
|
||||||
|
|
||||||
|
$annotations = $task->getAnnotations();
|
||||||
|
$this->assertCount(1, $annotations);
|
||||||
|
$this->assertEquals('testbar', $annotations[0]->getDescription());
|
||||||
|
|
||||||
|
$task->addAnnotation(new Annotation('blabla'));
|
||||||
|
|
||||||
|
$this->taskManager->save($task);
|
||||||
|
$task = $this->taskManager->find($task->getUuid());
|
||||||
|
|
||||||
|
$annotations = $task->getAnnotations();
|
||||||
|
$this->assertCount(2, $annotations);
|
||||||
|
$this->assertEquals('testbar', $annotations[0]->getDescription());
|
||||||
|
$this->assertEquals('blabla', $annotations[1]->getDescription());
|
||||||
|
|
||||||
|
$task->removeAnnotation($annotations[0]);
|
||||||
|
|
||||||
|
$this->taskManager->save($task);
|
||||||
|
$task = $this->taskManager->find($task->getUuid());
|
||||||
|
|
||||||
|
$annotations = $task->getAnnotations();
|
||||||
|
$this->assertCount(1, $annotations);
|
||||||
|
$this->assertEquals('blabla', $annotations[0]->getDescription());
|
||||||
|
|
||||||
|
$task->setAnnotations([
|
||||||
|
new Annotation('foo'),
|
||||||
|
new Annotation('bar')
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->taskManager->save($task);
|
||||||
|
$task = $this->taskManager->find($task->getUuid());
|
||||||
|
|
||||||
|
$annotations = $task->getAnnotations();
|
||||||
|
$this->assertCount(2, $annotations);
|
||||||
|
$this->assertEquals('foo', $annotations[0]->getDescription());
|
||||||
|
$this->assertEquals('bar', $annotations[1]->getDescription());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $string
|
* @param string $string
|
||||||
* @return \DateTime
|
* @return \DateTime
|
||||||
|
Loading…
Reference in New Issue
Block a user