Horde_Kolab_FreeBusy_Freebusy_Helper_Owa::convert PHP Méthode

convert() public méthode

Convert the free/busy data from the XML to an array.
public convert ( Horde_Date $start, Horde_Date $end, integer $interval ) : array
$start Horde_Date The start of the requested free/busy data.
$end Horde_Date The end of the requested free/busy data.
$interval integer The interval of the data.
Résultat array The data array representing the XML data.
    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;
    }

Usage Example

Exemple #1
0
 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['*****@*****.**']));
 }
All Usage Examples Of Horde_Kolab_FreeBusy_Freebusy_Helper_Owa::convert
Horde_Kolab_FreeBusy_Freebusy_Helper_Owa