protected function parseDevice()
 {
     $this->devices[$this->xml->getAttribute('id')] = array();
     $device =& $this->devices[$this->xml->getAttribute('id')];
     $device = array('id' => $this->xml->getAttribute('id'), 'user_agent' => TeraWurflUserAgent::cleanUserAgent($this->xml->getAttribute('user_agent')), 'fall_back' => $this->xml->getAttribute('fall_back'));
     if ($this->xml->getAttribute('actual_device_root')) {
         $device['actual_device_root'] = $this->xml->getAttribute('actual_device_root') == "true" ? 1 : 0;
     }
     $groupdevice = '';
     $groupname = '';
     $filtering = TeraWurflConfig::$CAPABILITY_FILTER ? true : false;
     $includegroup = false;
     while ($this->xml->read()) {
         if ($this->xml->nodeType != XMLReader::ELEMENT) {
             continue;
         }
         // recurse back into this function for the rest of the devices
         switch ($this->xml->name) {
             case "device":
                 $this->devices[$this->xml->getAttribute('id')] = array();
                 $device =& $this->devices[$this->xml->getAttribute('id')];
                 $device = array('id' => $this->xml->getAttribute('id'), 'user_agent' => TeraWurflUserAgent::cleanUserAgent($this->xml->getAttribute('user_agent')), 'fall_back' => $this->xml->getAttribute('fall_back'));
                 if ($this->xml->getAttribute('actual_device_root')) {
                     $device['actual_device_root'] = $this->xml->getAttribute('actual_device_root') == "true" ? 1 : 0;
                 }
                 break;
             case "group":
                 $groupname = $this->xml->getAttribute('id');
                 if ($filtering && $this->enabled($this->xml->getAttribute('id'))) {
                     $includegroup = true;
                 } else {
                     $includegroup = false;
                     continue;
                 }
                 $device[$groupname] = array();
                 break;
             case "capability":
                 if (!$filtering || $filtering && $includegroup) {
                     // the groupdevice array must already exist
                     $device[$groupname][$this->xml->getAttribute('name')] = self::cleanValue($this->xml->getAttribute('value'));
                     continue;
                 }
                 if ($filtering && !$includegroup && $this->enabled($this->xml->getAttribute('name'))) {
                     // the groupdevice array might already exists
                     if (!array_key_exists($groupname, $device)) {
                         $device[$groupname] = array();
                     }
                     $device[$groupname][$this->xml->getAttribute('name')] = self::cleanValue($this->xml->getAttribute('value'));
                     continue;
                 }
                 break;
         }
     }
 }
 protected function loadDeviceXMLToArray(&$device)
 {
     $id = (string) $device['id'];
     $this->devices[$id] = array('id' => $id);
     $filtering = TeraWurflConfig::$CAPABILITY_FILTER ? true : false;
     $includegroup = false;
     if (isset($device['fall_back'])) {
         $this->devices[$id]['fall_back'] = (string) $device['fall_back'];
     }
     if (isset($device['user_agent'])) {
         $this->devices[$id]['user_agent'] = TeraWurflUserAgent::cleanUserAgent((string) $device['user_agent']);
     }
     if (isset($device['actual_device_root'])) {
         $this->devices[$id]['actual_device_root'] = (string) $device['actual_device_root'];
         $this->devices[$id]['actual_device_root'] = $this->devices[$id]['actual_device_root'] ? 1 : 0;
     }
     foreach ($device->group as $group) {
         $groupname = (string) $group['id'];
         if ($filtering && $this->enabled($groupname)) {
             $includegroup = true;
         } else {
             $includegroup = false;
         }
         $groupdata = array();
         foreach ($group->capability as $cap) {
             $capname = (string) $cap['name'];
             if (!$filtering || $filtering && $includegroup || $filtering && !$includegroup && $this->enabled($capname)) {
                 $groupdata[$capname] = $this->cleanValue((string) $cap['value']);
             }
         }
         if (count($groupdata) > 0) {
             $this->devices[$id][$groupname] = $groupdata;
         }
         unset($groupdata);
     }
 }