Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
32d28be931 | ||
|
06e67dec3c | ||
|
75ccc2d316 | ||
6657fab031 | |||
488cf14aac |
@@ -3,24 +3,30 @@
|
||||
"description": "A Baikal plugin for taskwarrior",
|
||||
"type": "library",
|
||||
"keywords": [
|
||||
"task",
|
||||
"taskwarrior",
|
||||
"GTD",
|
||||
"Baikal",
|
||||
"sabre"
|
||||
"task",
|
||||
"taskwarrior",
|
||||
"GTD",
|
||||
"Baikal",
|
||||
"sabre"
|
||||
],
|
||||
"repositories": [
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://git.aerex.me/Aerex/Taskwarrior"
|
||||
}
|
||||
],
|
||||
|
||||
"repositories": [{"type": "vcs", "url": "https://aerex.me/git/Aerex/Taskwarrior"}],
|
||||
"require": {
|
||||
"php": ">=5.5",
|
||||
"sabre/dav": "~3.1.2",
|
||||
"sabre/dav" : "~4.0.2",
|
||||
"sabre/vobject": "^4.0",
|
||||
"easycorp/easy-log-handler": "^1.0",
|
||||
"zendframework/zend-validator": "^2.10",
|
||||
"nesbot/carbon": "^1.14"
|
||||
"nesbot/carbon": "^2.0.0",
|
||||
"laminas/laminas-validator": "^2.13",
|
||||
"laminas/laminas-stdlib": "^3.2",
|
||||
"psr/container": "^1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit" : "> 4.8, <=6.0.0"
|
||||
"phpunit/phpunit": "> 4.8, <=6.0.0"
|
||||
},
|
||||
"authors": [
|
||||
{
|
||||
|
2377
composer.lock
generated
2377
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
namespace Aerex\TaskwarriorPlugin;
|
||||
use Aerex\TaskwarriorPlugin\Taskwarrior\TaskwarriorManager;
|
||||
use Aerex\TaskwarriorPlugin\TW\TaskwarriorManager;
|
||||
use Sabre\VObject\Component\VTodo;
|
||||
|
||||
/**
|
||||
@@ -18,14 +18,12 @@ class CalendarProcessor
|
||||
|
||||
public function importTask(VTodo $Todo){
|
||||
|
||||
if($this->taskwarriorManager->exists($Todo->UID)){
|
||||
if($this->taskwarriorManager->taskExists($Todo->UID)){
|
||||
$this->taskwarriorManager->updateTask($Todo);
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
$this->taskwarriorManager->addTask($Todo);
|
||||
|
||||
return $this->taskwarriorManager->addTask($Todo);
|
||||
} catch(Exception $e){
|
||||
echo $e->getMessage();
|
||||
throw $e;
|
||||
@@ -42,3 +40,4 @@ class CalendarProcessor
|
||||
|
||||
?>
|
||||
|
||||
|
||||
|
@@ -2,8 +2,8 @@
|
||||
|
||||
namespace Aerex\TaskwarriorPlugin;
|
||||
|
||||
use Aerex\TaskwarriorPlugin\Taskwarrior\Taskwarrior;
|
||||
use Aerex\TaskwarriorPlugin\Taskwarrior\TaskwarriorManager;
|
||||
use Aerex\TaskwarriorPlugin\TW\Taskwarrior;
|
||||
use Aerex\TaskwarriorPlugin\TW\TaskwarriorManager;
|
||||
|
||||
class Config {
|
||||
|
||||
|
@@ -10,8 +10,8 @@ use Sabre\Xml\ParseException;
|
||||
use Sabre\DAV\ServerPlugin;
|
||||
use Sabre\DAV\Server;
|
||||
use Aerex\TaskwarriorPlugin\CalendarProcessor;
|
||||
use Aerex\TaskwarriorPlugin\Taskwarrior\Taskwarrior;
|
||||
use Aerex\TaskwarriorPlugin\Taskwarrior\TaskwarriorManager;
|
||||
use Aerex\TaskwarriorPlugin\TW\Taskwarrior;
|
||||
use Aerex\TaskwarriorPlugin\TW\TaskwarriorManager;
|
||||
use Aerex\TaskwarriorPlugin\Config;
|
||||
|
||||
/**
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
namespace Aerex\TaskwarriorPlugin\Taskwarrior\Commands;
|
||||
namespace Aerex\TaskwarriorPlugin\TW\Commands;
|
||||
|
||||
use Aerex\TaskwarriorPlugin\Taskwarrior\Task;
|
||||
use Aerex\TaskwarriorPlugin\TW\Task;
|
||||
|
||||
interface IStrategy {
|
||||
public function add(Task $task);
|
115
src/TW/Commands/TodoStrategy.php
Normal file
115
src/TW/Commands/TodoStrategy.php
Normal file
@@ -0,0 +1,115 @@
|
||||
<?php
|
||||
|
||||
namespace Aerex\TaskwarriorPlugin\TW\Commands;
|
||||
use Aerex\TaskwarriorPlugin\TW\Task;
|
||||
use Aerex\TaskwarriorPlugin\Config;
|
||||
use Symfony\Component\Process\Process;
|
||||
use Symfony\Component\Process\Exception\ProcessFailedException;
|
||||
use Aerex\TaskwarriorPlugin\Exceptions\TaskwarriorCommandException;
|
||||
|
||||
|
||||
|
||||
class TodoStrategy implements IStrategy {
|
||||
private $config;
|
||||
|
||||
public function __construct(Config $config){
|
||||
$this->config = $config;
|
||||
}
|
||||
|
||||
public function count($uuid){
|
||||
$cmd[] = $this->config->getTaskBin();
|
||||
$cmd[] = sprintf('%s count', $uuid);
|
||||
return $this->executeCommand($cmd);
|
||||
}
|
||||
|
||||
public function modify($task){
|
||||
$cmd[] = $this->config->getTaskBin();
|
||||
|
||||
$uuid = $task->getUuid();
|
||||
$taskJson = $task->convertToArray();
|
||||
|
||||
// Append modify command
|
||||
$cmd[] = sprintf(' %s modify ', $uuid);
|
||||
|
||||
$document = $task->getDescription();
|
||||
|
||||
// Append as first modifier description if set
|
||||
|
||||
if(isset($document)){
|
||||
$cmd[] = $document;
|
||||
}
|
||||
|
||||
// Append on modifiers
|
||||
foreach($taskJson as $prop => $value){
|
||||
if(isset($value) && $value != null){
|
||||
$cmd[] = sprintf(' %s: %s ', $prop, $value);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->executeCommand($cmd);
|
||||
|
||||
}
|
||||
|
||||
public function add(Task $task){
|
||||
$cmd[] = $this->config->getTaskBin();
|
||||
$cmd[] = 'add';
|
||||
|
||||
if($task->getDescription() != null){
|
||||
$cmd[] = sprintf('"%s"', (string)$task->getDescription());
|
||||
}
|
||||
|
||||
if($task->getCategories() != null){
|
||||
$categories = implode(' +', (string)$task->getCategories());
|
||||
$cmd[] = $categories;
|
||||
}
|
||||
|
||||
if($task->getDue() != null){
|
||||
$cmd[] = sprintf("due:%s",$task->getDue('Y-m-dTH:i:s'));
|
||||
}
|
||||
|
||||
if($task->getRecurrence() != null){
|
||||
$rrule = $task->getRecurrence()->getParts();
|
||||
$cmd[] = sprintf('recur:%s', $rrule['FREQ']);
|
||||
if(isset($rrule['UNTIL'])){
|
||||
$cmd[] = sprintf('until:%s', $rrule['UNTIL']);
|
||||
}
|
||||
}
|
||||
|
||||
if($task->getStatus() != null){
|
||||
$cmd[] = sprintf('status:%s', (string)$task->getStatus());
|
||||
}
|
||||
|
||||
return $this->executeCommand($cmd);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private function executeCommand($command){
|
||||
$rcOptions = $this->config->getOptions();
|
||||
|
||||
foreach ($rcOptions as $rcOption) {
|
||||
$command[] = $rcOption;
|
||||
}
|
||||
|
||||
$cmdString = implode(' ', $command);
|
||||
echo $cmdString;
|
||||
$process = new Process($cmdString);
|
||||
|
||||
try {
|
||||
$process->mustRun();
|
||||
// clear cmd queue
|
||||
$this->cmd = [];
|
||||
return $process->getOutput();
|
||||
} catch(ProcessFailedException $error){
|
||||
throw new TaskwarriorCommandException($error->getMesage());
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
297
src/TW/Task.php
Normal file
297
src/TW/Task.php
Normal file
@@ -0,0 +1,297 @@
|
||||
<?php
|
||||
|
||||
namespace Aerex\TaskwarriorPlugin\TW;
|
||||
use Laminas\Validator\Uuid;
|
||||
use Carbon\Carbon;
|
||||
use Sabre\VObject\Component\VTodo;
|
||||
|
||||
/**
|
||||
* Task
|
||||
* @author Aerex
|
||||
*/
|
||||
class Task {
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @JMS\Type("string")
|
||||
*/
|
||||
private $uuid;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @JMS\Type("string")
|
||||
*/
|
||||
private $description;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
private $priority;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
private $project;
|
||||
|
||||
/**
|
||||
* @var Carbon
|
||||
*
|
||||
*/
|
||||
private $due;
|
||||
|
||||
/**
|
||||
* @var Carbon
|
||||
*
|
||||
*/
|
||||
private $wait;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*
|
||||
*/
|
||||
private $tags;
|
||||
|
||||
/**
|
||||
* @var float
|
||||
*
|
||||
*/
|
||||
private $urgency;
|
||||
|
||||
/**
|
||||
* @var Carbon
|
||||
*
|
||||
*/
|
||||
private $entry;
|
||||
|
||||
/**
|
||||
* @var Carbon
|
||||
*
|
||||
*/
|
||||
private $start;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
private $recur;
|
||||
|
||||
/**
|
||||
* @var Carbon
|
||||
*
|
||||
*/
|
||||
private $until;
|
||||
|
||||
/**
|
||||
* @var Annotation[]
|
||||
*
|
||||
*/
|
||||
private $annotations = [];
|
||||
|
||||
/**
|
||||
* @var Carbon
|
||||
*
|
||||
*/
|
||||
private $modified;
|
||||
|
||||
/**
|
||||
* @var Carbon
|
||||
*
|
||||
*/
|
||||
private $end;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
private $status;
|
||||
|
||||
/**
|
||||
* @var Task[]|ArrayCollection
|
||||
*
|
||||
*/
|
||||
private $depends;
|
||||
|
||||
|
||||
public function __construct($UUID=null){
|
||||
$validator = new Uuid();
|
||||
|
||||
if(!isset($UUID)){
|
||||
$this->uuid = uniqid();
|
||||
} else if(isset($UUID) && !$validator->isValid($UUID)){
|
||||
throw new Exception(sprintf('%s is not a valid uuid', $UUID));
|
||||
}
|
||||
|
||||
$this->uuid = $UUID;
|
||||
|
||||
|
||||
}
|
||||
|
||||
public function getUuid(){
|
||||
return $this->uuid;
|
||||
|
||||
}
|
||||
|
||||
public function convertToArray(){
|
||||
$tagsString = null;
|
||||
$dependsString = null;
|
||||
$dueString = null;
|
||||
|
||||
// Process array properties
|
||||
if(isset($this->tags)){
|
||||
$tagsString = implode(',', $this->tags);
|
||||
}
|
||||
if(isset($this->depends)){
|
||||
$dependsString = implode(',', $this->depends);
|
||||
}
|
||||
|
||||
// Process date properties
|
||||
if(isset($this->due)){
|
||||
$dueString = $this->due->format('Y-m-dTH:i:s');
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
return array(
|
||||
"status" => $this->status,
|
||||
"start" => $this->start,
|
||||
"wait" => $this->wait,
|
||||
"end" => $this->end,
|
||||
"entry" => $this->entry,
|
||||
"priority" => $this->priority,
|
||||
"project" => $this->project,
|
||||
"due" => $this->due,
|
||||
"tags" => $tagsString,
|
||||
"urgency" => $this->urgency,
|
||||
"recu" => $this->recur,
|
||||
"until" => $this->until,
|
||||
"tags" => $this->annotations,
|
||||
"modified" => $this->modified,
|
||||
"depends" => $dependsString
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* If description is not available attempt to summary, otherwise throw Exception
|
||||
*/
|
||||
public function setDescription(VTodo $component){
|
||||
if(!isset($component->DESCRIPTION) && isset($component->SUMMARY)){
|
||||
$this->description = $component->SUMMARY;
|
||||
} else if(!isset($component->DESCRIPTION) && !isset($component->SUMMARY)){
|
||||
throw new Exception("Task must have a description or summary");
|
||||
} else {
|
||||
$this->description = $component->DESCRIPTION;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function getDescription(){
|
||||
return $this->description;
|
||||
}
|
||||
|
||||
public function setEntryTime(VTodo $document){
|
||||
|
||||
if(isset($document->DTSTAMP)){
|
||||
$this->entry = new Carbon($document->DTSTAMP->getDateTime()->format(\DateTime::W3C));
|
||||
} else {
|
||||
throw new Exception('Task must have a entry time');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function getEntryTime(){
|
||||
return $this->entry;
|
||||
}
|
||||
|
||||
public function setStartTime(VTodo $document){
|
||||
if(isset($document->DTSTART)){
|
||||
$this->start = new Carbon($document->DTSTART->getDateTime()->format(\DateTime::W3C));
|
||||
}
|
||||
}
|
||||
|
||||
public function getStartTime(){
|
||||
return $this->start;
|
||||
|
||||
}
|
||||
|
||||
public function setModifiedTime(VTodo $document){
|
||||
if(isset($document->{'LAST-MODIFIED'})){
|
||||
$this->modified = new Carbon($document->{'LAST-MODIFIED'}->getDateTime()->format(\DateTime::W3C));
|
||||
}
|
||||
}
|
||||
|
||||
public function getModifiedTime(){
|
||||
return $this->modified;
|
||||
}
|
||||
|
||||
public function setDue(VTodo $document){
|
||||
|
||||
if(isset($document->DUE)){
|
||||
$this->due = new Carbon($document->DUE->getDateTime()->format(\DateTime::W3C));
|
||||
}
|
||||
}
|
||||
public function getDue($format=null){
|
||||
if($format != null){
|
||||
return $this->due->format($format);
|
||||
}
|
||||
|
||||
return $this->due;
|
||||
}
|
||||
|
||||
public function setStopTime(VTodo $document){
|
||||
if(isset($document->DTEND)){
|
||||
$this->end = new Carbon($document->DTEND->getDateTime()->format(\DateTime::W3C));
|
||||
}
|
||||
}
|
||||
|
||||
public function getStopTime(){
|
||||
return $this->end;
|
||||
}
|
||||
|
||||
public function setCategories(VTodo $document){
|
||||
if(isset($document->CATEGORIES)){
|
||||
$this->tags = explode(',', (string)$document->CATEGORIES);
|
||||
}
|
||||
}
|
||||
|
||||
public function getCategories(){
|
||||
return $this->tags;
|
||||
}
|
||||
|
||||
public function setStatus(VTodo $document){
|
||||
if(isset($document->STATUS)){
|
||||
switch((string)$document->STATUS){
|
||||
case 'NEEDS-ACTION':
|
||||
$this->status = 'pending';
|
||||
break;
|
||||
case 'COMPLETED':
|
||||
$this->status = 'completed';
|
||||
break;
|
||||
case 'CANCELED':
|
||||
$this->status = 'deleted';
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function getRecurrence(){
|
||||
return $this->recur;
|
||||
|
||||
}
|
||||
public function setRecurrence(VTodo $document){
|
||||
if(isset($document->RRULE)){
|
||||
$this->recur = $document->RRULE;
|
||||
}
|
||||
}
|
||||
|
||||
public function getStatus(){
|
||||
return $this->status;
|
||||
}
|
||||
}
|
||||
|
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace Aerex\TaskwarriorPlugin\Taskwarrior;
|
||||
namespace Aerex\TaskwarriorPlugin\TW;
|
||||
use Symfony\Component\Process\Process;
|
||||
use Aerex\TaskwarriorPlugin\Commands\IStrategy;
|
||||
use Aerex\TaskwarriorPlugin\TW\Commands\IStrategy;
|
||||
use Aerex\TaskwarriorPlugin\Config;
|
||||
|
||||
class Taskwarrior {
|
@@ -1,10 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace Aerex\TaskwarriorPlugin\Taskwarrior;
|
||||
namespace Aerex\TaskwarriorPlugin\TW;
|
||||
|
||||
use Aerex\TaskwarriorPlugin\Taskwarrior\Taskwarrior;
|
||||
use Aerex\TaskwarriorPlugin\Taskwarrior\Task;
|
||||
use Aerex\TaskwarriorPlugin\Taskwarrior\Commands\TodoStrategy;
|
||||
use Aerex\TaskwarriorPlugin\TW\Taskwarrior;
|
||||
use Aerex\TaskwarriorPlugin\TW\Task;
|
||||
use Aerex\TaskwarriorPlugin\TW\Commands\TodoStrategy;
|
||||
use Sabre\VObject\Component\VTodo;
|
||||
|
||||
class TaskwarriorManager {
|
||||
@@ -73,7 +73,7 @@ class TaskwarriorManager {
|
||||
|
||||
$updatedTask = $this->taskwarrior->modify($task);
|
||||
|
||||
return $upatedTask;
|
||||
return $updatedTask;
|
||||
}
|
||||
|
||||
public function taskExists($taskUuid){
|
@@ -1,115 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Aerex\TaskwarriorPlugin\Taskwarrior\Commands;
|
||||
use Aerex\TaskwarriorPlugin\Taskwarrior\Task;
|
||||
use Aerex\TaskwarriorPlugin\Config;
|
||||
use Symfony\Component\Process\Process;
|
||||
use Symfony\Component\Process\Exception\ProcessFailedException;
|
||||
use Aerex\TaskwarriorPlugin\Exceptions\TaskwarriorCommandException;
|
||||
|
||||
|
||||
|
||||
class TodoStrategy implements IStrategy {
|
||||
private $config;
|
||||
|
||||
public function __construct(Config $config){
|
||||
$this->config = $config;
|
||||
}
|
||||
|
||||
public function count($uuid){
|
||||
$cmd[] = $this->config->getTaskBin();
|
||||
$cmd[] = sprintf('%s count', $uuid);
|
||||
return $this->executeCommand($cmd);
|
||||
}
|
||||
|
||||
public function modify($task){
|
||||
$cmd[] = $this->config->getTaskBin();
|
||||
|
||||
$uuid = $task->getUuid();
|
||||
$taskJson = $task->convertToArray();
|
||||
|
||||
// Append modify command
|
||||
$cmd[] = sprintf(' %s modify ', $uuid);
|
||||
|
||||
$document = $task->getDescription();
|
||||
|
||||
// Append as first modifier description if set
|
||||
|
||||
if(isset($document)){
|
||||
$cmd[] = $document;
|
||||
}
|
||||
|
||||
// Append on modifiers
|
||||
foreach($taskJson as $prop => $value){
|
||||
if(isset($value) && $value != null){
|
||||
$cmd[] = sprintf(' %s: %s ', $prop, $value);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->executeCommand($cmd);
|
||||
|
||||
}
|
||||
|
||||
public function add(Task $task){
|
||||
$cmd[] = $this->config->getTaskBin();
|
||||
$cmd[] = 'add';
|
||||
|
||||
if($task->getDescription() != null){
|
||||
$cmd[] = sprintf('"%s"', (string)$task->getDescription());
|
||||
}
|
||||
|
||||
if($task->getCategories() != null){
|
||||
$categories = implode(' +', (string)$task->getCategories());
|
||||
$cmd[] = $categories;
|
||||
}
|
||||
|
||||
if($task->getDue() != null){
|
||||
$cmd[] = sprintf("due:%s",$task->getDue('Y-m-dTH:i:s'));
|
||||
}
|
||||
|
||||
if($task->getRecurrence() != null){
|
||||
$rrule = $task->getRecurrence()->getParts();
|
||||
$cmd[] = sprintf('recur:%s', $rrule['FREQ']);
|
||||
if(isset($rrule['UNTIL'])){
|
||||
$cmd[] = sprintf('until:%s', $rrule['UNTIL']);
|
||||
}
|
||||
}
|
||||
|
||||
if($task->getStatus() != null){
|
||||
$cmd[] = sprintf('status:%s', (string)$task->getStatus());
|
||||
}
|
||||
|
||||
return $this->executeCommand($cmd);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private function executeCommand($command){
|
||||
$rcOptions = $this->config->getOptions();
|
||||
|
||||
foreach ($rcOptions as $rcOption) {
|
||||
$command[] = $rcOption;
|
||||
}
|
||||
|
||||
$cmdString = implode(' ', $command);
|
||||
echo $cmdString;
|
||||
$process = new Process($cmdString);
|
||||
|
||||
try {
|
||||
$process->mustRun();
|
||||
// clear cmd queue
|
||||
$this->cmd = [];
|
||||
return $process->getOutput();
|
||||
} catch(ProcessFailedException $error){
|
||||
throw new TaskwarriorCommandException($error->getMesage());
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,303 +0,0 @@
|
||||
|
||||
<?php
|
||||
|
||||
namespace Aerex\TaskwarriorPlugin\Taskwarrior;
|
||||
use Zend\Validator\Uuid;
|
||||
use Carbon\Carbon;
|
||||
use Sabre\VObject\Component\VTodo;
|
||||
|
||||
/**
|
||||
* Task
|
||||
* @author Aerex
|
||||
*/
|
||||
class Task {
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @JMS\Type("string")
|
||||
*/
|
||||
private $uuid;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @JMS\Type("string")
|
||||
*/
|
||||
private $description;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
private $priority;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
private $project;
|
||||
|
||||
/**
|
||||
* @var Carbon
|
||||
*
|
||||
*/
|
||||
private $due;
|
||||
|
||||
/**
|
||||
* @var Carbon
|
||||
*
|
||||
*/
|
||||
private $wait;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*
|
||||
*/
|
||||
private $tags;
|
||||
|
||||
/**
|
||||
* @var float
|
||||
*
|
||||
*/
|
||||
private $urgency;
|
||||
|
||||
/**
|
||||
* @var Carbon
|
||||
*
|
||||
*/
|
||||
private $entry;
|
||||
|
||||
/**
|
||||
* @var Carbon
|
||||
*
|
||||
*/
|
||||
private $start;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
private $recur;
|
||||
|
||||
/**
|
||||
* @var Carbon
|
||||
*
|
||||
*/
|
||||
private $until;
|
||||
|
||||
/**
|
||||
* @var Annotation[]
|
||||
*
|
||||
*/
|
||||
private $annotations = [];
|
||||
|
||||
/**
|
||||
* @var Carbon
|
||||
*
|
||||
*/
|
||||
private $modified;
|
||||
|
||||
/**
|
||||
* @var Carbon
|
||||
*
|
||||
*/
|
||||
private $end;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
*/
|
||||
private $status;
|
||||
|
||||
/**
|
||||
* @var Task[]|ArrayCollection
|
||||
*
|
||||
*/
|
||||
private $depends;
|
||||
|
||||
|
||||
public function __construct($UUID=null){
|
||||
$validator = new Uuid();
|
||||
|
||||
if(!isset($UUID)){
|
||||
$this->uuid = uniqid();
|
||||
} else if(isset($UUID) && !$validator->isValid($UUID)){
|
||||
throw new Exception(sprintf('%s is not a valid uuid', $UUID));
|
||||
}
|
||||
|
||||
$this->uuid = $UUID;
|
||||
|
||||
|
||||
}
|
||||
|
||||
public function getUuid(){
|
||||
return $this->uuid;
|
||||
|
||||
}
|
||||
|
||||
public function convertToArray(){
|
||||
$tagsString = null;
|
||||
$dependsString = null;
|
||||
$dueString = null;
|
||||
|
||||
// Process array properties
|
||||
if(isset($this->tags)){
|
||||
$tagsString = implode(',', $this->tags);
|
||||
}
|
||||
if(isset($this->depends)){
|
||||
$dependsString = implode(',', $this->depends);
|
||||
}
|
||||
|
||||
// Process date properties
|
||||
if(isset($this->due)){
|
||||
$dueString = $this->due->format('Y-m-dTH:i:s');
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
return array(
|
||||
"status" => $this->status,
|
||||
"start" => $this->start,
|
||||
"wait" => $this->wait,
|
||||
"end" => $this->end,
|
||||
"entry" => $this->entry,
|
||||
"priority" => $this->priority,
|
||||
"project" => $this->project,
|
||||
"due" => $this->due,
|
||||
"tags" => $tagsString,
|
||||
"urgency" => $this->urgency,
|
||||
"recu" => $this->recur,
|
||||
"until" => $this->until,
|
||||
"tags" => $this->annotations,
|
||||
"modified" => $this->modified,
|
||||
"depends" => $dependsString
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* If description is not available attempt to summary, otherwise throw Exception
|
||||
*/
|
||||
public function setDescription(VTodo $component){
|
||||
if(!isset($component->DESCRIPTION) && isset($component->SUMMARY)){
|
||||
$this->description = $component->SUMMARY;
|
||||
} else if(!isset($component->DESCRIPTION) && !isset($component->SUMMARY)){
|
||||
throw new Exception("Task must have a description or summary");
|
||||
} else {
|
||||
$this->description = $component->DESCRIPTION;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function getDescription(){
|
||||
return $this->description;
|
||||
}
|
||||
|
||||
public function setEntryTime(VTodo $document){
|
||||
|
||||
if(isset($document->DTSTAMP)){
|
||||
$this->entry = new Carbon($document->DTSTAMP->getDateTime()->format(\DateTime::W3C));
|
||||
} else {
|
||||
throw new Exception('Task must have a entry time');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function getEntryTime(){
|
||||
return $this->entry;
|
||||
}
|
||||
|
||||
public function setStartTime(VTodo $document){
|
||||
if(isset($document->DTSTART)){
|
||||
$this->start = new Carbon($document->DTSTART->getDateTime()->format(\DateTime::W3C));
|
||||
}
|
||||
}
|
||||
|
||||
public function getStartTime(){
|
||||
return $this->start;
|
||||
|
||||
}
|
||||
|
||||
public function setModifiedTime(VTodo $document){
|
||||
if(isset($document->{'LAST-MODIFIED'})){
|
||||
$this->modified = new Carbon($document->{'LAST-MODIFIED'}->getDateTime()->format(\DateTime::W3C));
|
||||
}
|
||||
}
|
||||
|
||||
public function getModifiedTime(){
|
||||
return $this->modified;
|
||||
}
|
||||
|
||||
public function setDue(VTodo $document){
|
||||
|
||||
if(isset($document->DUE)){
|
||||
$this->due = new Carbon($document->DUE->getDateTime()->format(\DateTime::W3C));
|
||||
}
|
||||
}
|
||||
public function getDue($format=null){
|
||||
if($format != null){
|
||||
return $this->due->format($format);
|
||||
}
|
||||
|
||||
return $this->due;
|
||||
}
|
||||
|
||||
public function setStopTime(VTodo $document){
|
||||
if(isset($document->DTEND)){
|
||||
$this->end = new Carbon($document->DTEND->getDateTime()->format(\DateTime::W3C));
|
||||
}
|
||||
}
|
||||
|
||||
public function getStopTime(){
|
||||
return $this->end;
|
||||
}
|
||||
|
||||
public function setCategories(VTodo $document){
|
||||
if(isset($document->CATEGORIES)){
|
||||
$this->tags = explode(',', (string)$document->CATEGORIES);
|
||||
}
|
||||
}
|
||||
|
||||
public function getCategories(){
|
||||
return $this->tags;
|
||||
}
|
||||
|
||||
public function setStatus(VTodo $document){
|
||||
if(isset($document->STATUS)){
|
||||
switch((string)$document->STATUS){
|
||||
case 'NEEDS-ACTION':
|
||||
$this->status = 'pending';
|
||||
break;
|
||||
case 'COMPLETED':
|
||||
$this->status = 'completed';
|
||||
break;
|
||||
case 'CANCELED':
|
||||
$this->status = 'deleted';
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function getRecurrence(){
|
||||
return $this->recur;
|
||||
|
||||
}
|
||||
public function setRecurrence(VTodo $document){
|
||||
if(isset($document->RRULE)){
|
||||
$this->recur = $document->RRULE;
|
||||
}
|
||||
}
|
||||
|
||||
public function getStatus(){
|
||||
return $this->status;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@@ -1,14 +1,11 @@
|
||||
<?php
|
||||
|
||||
use Sabre\VObject\Component\VCalendar;
|
||||
use Sabre\DAV\Exception\BadRequest;
|
||||
use Aerex\TaskwarriorPlugin\Taskwarrior\Task;
|
||||
use Aerex\TaskwarriorPlugin\Plugin;
|
||||
use Carbon\Carbon;
|
||||
use Aerex\TaskwarriorPlugin\Config;
|
||||
use Sabre\DAV\Server;
|
||||
use DateTime;
|
||||
use DateTimeZone;
|
||||
|
||||
class TaskTest extends \PHPUnit\Framework\TestCase {
|
||||
|
||||
|
Reference in New Issue
Block a user