/**
* Create an AS message from this task
*
* @param array $options Options:
* - protocolversion: (float) The EAS version to support
* DEFAULT: 2.5
* - bodyprefs: (array) A BODYPREFERENCE array.
* DEFAULT: none (No body prefs enforced).
* - truncation: (integer) Truncate event body to this length
* DEFAULT: none (No truncation).
*
* @return Horde_ActiveSync_Message_Task
*/
public function toASTask(array $options = array())
{
$message = new Horde_ActiveSync_Message_Task(array('protocolversion' => $options['protocolversion']));
/* Notes and Title */
if ($options['protocolversion'] >= Horde_ActiveSync::VERSION_TWELVE) {
$bp = $options['bodyprefs'];
$body = new Horde_ActiveSync_Message_AirSyncBaseBody();
$body->type = Horde_ActiveSync::BODYPREF_TYPE_PLAIN;
if (isset($bp[Horde_ActiveSync::BODYPREF_TYPE_PLAIN]['truncationsize'])) {
$truncation = $bp[Horde_ActiveSync::BODYPREF_TYPE_PLAIN]['truncationsize'];
} elseif (isset($bp[Horde_ActiveSync::BODYPREF_TYPE_HTML])) {
$truncation = $bp[Horde_ActiveSync::BODYPREF_TYPE_HTML]['truncationsize'];
$this->desc = Horde_Text_Filter::filter($this->desc, 'Text2html', array('parselevel' => Horde_Text_Filter_Text2html::MICRO));
} else {
$truncation = false;
}
if ($truncation && Horde_String::length($this->desc) > $truncation) {
$body->data = Horde_String::substr($this->desc, 0, $truncation);
$body->truncated = 1;
} else {
$body->data = $this->desc;
}
$body->estimateddatasize = Horde_String::length($this->desc);
$message->airsyncbasebody = $body;
} else {
$message->body = $this->desc;
}
$message->subject = $this->name;
/* Completion */
if ($this->completed) {
$message->datecompleted = new Horde_Date($this->completed_date);
$message->complete = Horde_ActiveSync_Message_Task::TASK_COMPLETE_TRUE;
} else {
$message->complete = Horde_ActiveSync_Message_Task::TASK_COMPLETE_FALSE;
}
/* Due Date */
if (!empty($this->due)) {
$message->utcduedate = new Horde_Date($this->due);
$message->duedate = new Horde_Date($this->due, 'UTC');
}
/* Start Date */
if (!empty($this->start)) {
$message->utcstartdate = new Horde_Date($this->start);
$message->startdate = new Horde_Date($this->start, 'UTC');
}
/* Priority */
switch ($this->priority) {
case 5:
$priority = Horde_ActiveSync_Message_Task::IMPORTANCE_LOW;
break;
case 4:
case 3:
case 2:
$priority = Horde_ActiveSync_Message_Task::IMPORTANCE_NORMAL;
break;
case 1:
$priority = Horde_ActiveSync_Message_Task::IMPORTANCE_HIGH;
break;
default:
$priority = Horde_ActiveSync_Message_Task::IMPORTANCE_NORMAL;
}
$message->setImportance($priority);
/* Reminders */
if ($this->due && $this->alarm) {
$message->setReminder(new Horde_Date($this->due - $this->alarm * 60));
}
/* Recurrence */
if ($this->recurs()) {
$message->setRecurrence($this->recurrence);
}
/* Categories */
$message->categories = $this->tags;
return $message;
}