2018-10-27 01:19:34 -05:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Aerex\TaskwarriorPlugin;
|
|
|
|
|
|
|
|
use Aerex\TaskwarriorPlugin\Config;
|
|
|
|
use Sabre\DAV\Exception;
|
|
|
|
use Sabre\VObject\Component\VEvent;
|
|
|
|
use Sabre\VObject\Component\VTodo;
|
|
|
|
|
|
|
|
|
|
|
|
class iCalEventProcessor {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var Config
|
|
|
|
*/
|
|
|
|
private $config;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var string
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
private $taskrc;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
|
|
|
|
private $taskDataDir;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var array
|
|
|
|
*/
|
|
|
|
private $cachedTasks = [];
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
|
|
|
|
private $taskBinFile;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var Taskwarrior
|
|
|
|
*/
|
|
|
|
|
|
|
|
private $taskwarrior;
|
|
|
|
|
|
|
|
|
|
|
|
public function __construct(Config $taskConfig = null){
|
|
|
|
if(!is_null($taskConfig)){
|
|
|
|
$this->taskConfig = $taskConfig;
|
|
|
|
} else {
|
|
|
|
$this->taskConfig = new Config();
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->taskwarrior = $this->taskConfig->getTaskwarriorInstance();
|
|
|
|
$this->logger = $this->taskConfig->getLogger();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public function importTask(VTodo $ToDoComponent = null){
|
|
|
|
|
|
|
|
if(!isset($ToDoComponent)){
|
|
|
|
$this->logger->error("vCal ToDo component is not defined");
|
|
|
|
throw new Exception("vCal Todo component is not defined");
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if($this->taskwarrior->exists($ToDoComponent->UID)){
|
|
|
|
$this->logger->error("Event already exists " . (string)$ToDoComponent->UID);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
2018-10-28 00:11:01 -05:00
|
|
|
|
|
|
|
|
|
|
|
// parse iCalendar event times to DateTime objects
|
2018-10-28 11:16:46 -05:00
|
|
|
//$entry = $this->taskwarrior->parseiCalDateTime($ToDoComponent->DSTAMP);
|
|
|
|
//$start = $this->taskwarrior->parseiCalDateTime($ToDoComponent->DSTART);
|
|
|
|
//$modified = $this->taskwarrior->parseiCalDateTime($ToDoComponent->{'LAST-MODIFIED'});
|
|
|
|
//$end = $this->taskwarrior->parseiCalDateTime($ToDoComponent->DTEND);
|
|
|
|
|
|
|
|
$start = $ToDoComponent->DSTART;
|
|
|
|
$entry = $ToDoComponent->DSTAMP;
|
|
|
|
$modified = $ToDoComponent->{'LAST-MODIFIED'};
|
|
|
|
$end = $ToDoComponent->DTEND;
|
2018-10-28 00:11:01 -05:00
|
|
|
|
|
|
|
$task = $this->taskwarrior->createTask($ToDoComponent->UID);
|
|
|
|
|
|
|
|
$tags = $this->taskwarrior->convertToStringArray($ToDoComponent->CATEGORIES);
|
|
|
|
$task->setTags($tags);
|
|
|
|
|
|
|
|
$task->setDue($ToDoComponent->DUE->getDateTime());
|
|
|
|
$task->setDescription($ToDoComponent->DESCRIPTION);
|
|
|
|
|
|
|
|
|
|
|
|
// override protected taskwarrior properties using iCal event
|
|
|
|
|
|
|
|
$this->taskwarrior->setValue($task, $this->taskwarrior::ENTRY, $entry);
|
|
|
|
$this->taskwarrior->setValue($task, $this->taskwarrior::START, $start);
|
|
|
|
$this->taskwarrior->setValue($task, $this->taskwarrior::MODIFIED, $modified);
|
|
|
|
$this->taskwarrior->setValue($task, $this->taskwarrior::END, $end);
|
|
|
|
|
|
|
|
$this->taskwarrior->save($task);
|
2018-10-27 01:19:34 -05:00
|
|
|
|
|
|
|
} catch(Exception $e){
|
|
|
|
$this->logger->error($e->message);
|
|
|
|
throw $e;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
?>
|