Horde_ActiveSync_Device::_sniffMultiplex PHP Method

_sniffMultiplex() protected method

Basic sniffing for determining if devices can support non-multiplexed collections.
protected _sniffMultiplex ( )
    protected function _sniffMultiplex()
    {
        $clientType = Horde_String::lower($this->clientType);
        if ($this->_isIos()) {
            // iOS seems to support multiple collections for everything except Notes.
            $this->_properties['properties'][self::MULTIPLEX] = Horde_ActiveSync_Device::MULTIPLEX_NOTES;
        } else {
            if ($clientType == self::TYPE_ANDROID) {
                // Special cases: These clients don't support non-multiplexed
                // collections. Samsung's native client and HTCOnemini2.
                if (stripos($this->deviceType, 'samsung') === 0 || stripos($this->model, 'HTCOnemini2') === 0 || $this->deviceType == 'HTCOnemini2') {
                    $this->_properties['properties'][self::MULTIPLEX] = Horde_ActiveSync_Device::MULTIPLEX_CONTACTS | Horde_ActiveSync_Device::MULTIPLEX_CALENDAR | Horde_ActiveSync_Device::MULTIPLEX_NOTES | Horde_ActiveSync_Device::MULTIPLEX_TASKS;
                    return;
                }
                // All android before 4.4 KitKat requires multiplex. KitKat and
                // Android 5 native supports non-multiplexed calendars only.
                if (!empty($this->properties[self::OS]) && preg_match('/(\\d+\\.\\d+(\\.\\d+)*)/', $this->properties[self::OS], $matches) && version_compare($matches[0], '4.4.0') >= 0) {
                    $this->_properties['properties'][self::MULTIPLEX] = Horde_ActiveSync_Device::MULTIPLEX_NOTES | Horde_ActiveSync_Device::MULTIPLEX_CONTACTS | Horde_ActiveSync_Device::MULTIPLEX_TASKS;
                } else {
                    $this->_properties['properties'][self::MULTIPLEX] = Horde_ActiveSync_Device::MULTIPLEX_CONTACTS | Horde_ActiveSync_Device::MULTIPLEX_CALENDAR | Horde_ActiveSync_Device::MULTIPLEX_NOTES | Horde_ActiveSync_Device::MULTIPLEX_TASKS;
                }
            } else {
                if (strpos($this->userAgent, 'MSFT-WP/8.10') !== false) {
                    // Windows Phone 8.10 supports multiple calendars and tasks, but
                    // no contacts.
                    $this->_properties['properties'][self::MULTIPLEX] = Horde_ActiveSync_Device::MULTIPLEX_CONTACTS;
                } else {
                    if (strpos($this->userAgent, 'MSFT-WP/8.0') !== false || $this->deviceType == 'WP8') {
                        // Windows Phone 8.0 seems that only multiple tasklists are
                        // supported. The rest must be multiplexed.
                        $this->_properties['properties'][self::MULTIPLEX] = Horde_ActiveSync_Device::MULTIPLEX_CONTACTS | Horde_ActiveSync_Device::MULTIPLEX_CALENDAR;
                    } else {
                        if (strpos($this->userAgent, 'MSFT-PPC') !== false || $this->deviceType == 'PocketPC') {
                            // PocketPC versions seem to not support any user defined
                            // collections at all, though I've only tested on a single HTC device.
                            $this->_properties['properties'][self::MULTIPLEX] = Horde_ActiveSync_Device::MULTIPLEX_CONTACTS | Horde_ActiveSync_Device::MULTIPLEX_CALENDAR | Horde_ActiveSync_Device::MULTIPLEX_NOTES | Horde_ActiveSync_Device::MULTIPLEX_TASKS;
                        } else {
                            if (strpos($this->userAgent, 'Outlook/15.0') !== false || strpos($this->userAgent, 'Outlook/16.0') !== false) {
                                // OL2013 and OL2016 do not support multiple contact lists.
                                $this->_properties['properties'][self::MULTIPLEX] = Horde_ActiveSync_Device::MULTIPLEX_CONTACTS;
                            } else {
                                $this->_properties['properties']['multiplex'] = 0;
                            }
                        }
                    }
                }
            }
        }
    }