public function convert($start, $end, $interval)
{
$noderoot = $this->_document->documentElement;
if (empty($noderoot) || empty($noderoot->childNodes)) {
throw new Horde_Kolab_FreeBusy_Exception('Invalid OWA input!');
}
$children = $noderoot->childNodes;
if ($children->length != 1 || $children->item(0)->tagName != 'a:recipients') {
throw new Horde_Kolab_FreeBusy_Exception('Invalid OWA input!');
}
$items = array();
$nodes = $children->item(0)->childNodes;
for ($i = 0; $i < $nodes->length; $i++) {
$node = $nodes->item($i);
if ($node->tagName != 'a:item') {
continue;
}
$values = $node->childNodes;
$item = array();
for ($j = 0; $j < $values->length; $j++) {
$item[$values->item($j)->tagName] = $values->item($j)->textContent;
}
$items[] = $item;
}
$object = array();
$object['start-date'] = $start;
$object['end-date'] = $end;
foreach ($items as $n => $item) {
if (!empty($item['a:fbdata']) && !empty($item['a:email'])) {
$fbdata = $item['a:fbdata'] . self::FREE;
$prev = '0';
$count = 0;
$start_date = $start;
$fbparsed = array();
for ($i = 0; $i < strlen($fbdata); $i++) {
if ($fbdata[$i] === $prev) {
$count++;
continue;
} else {
if ($count) {
$end_date = $start_date->add($count * $interval * 60);
if ($prev != self::FREE) {
$fbparsed[] = array('start-date' => $start_date, 'end-date' => $end_date, 'show-time-as' => $this->_stateAsString($prev));
}
$start_date = $end_date;
}
$count = 1;
$prev = $fbdata[$i];
}
}
$object[$item['a:email']] = $fbparsed;
}
}
return $object;
}
public function testConversionTwo() { $owa = new Horde_Kolab_FreeBusy_Freebusy_Helper_Owa(fopen(__DIR__ . '/../../../fixtures/owa_freebusy.xml', 'r')); $result = $owa->convert(new Horde_Date('2009-09-25T00:00:00-07:00'), new Horde_Date('2009-09-26T00:00:00-07:00'), 30); $this->assertEquals(array(0 => '2009-09-25 03:00:00 - 2009-09-25 05:00:00: busy', 1 => '2009-09-25 12:30:00 - 2009-09-25 14:30:00: tentative'), $this->_readable($result['*****@*****.**'])); }