Horde_ActiveSync_Device::hasQuirk PHP Method

hasQuirk() public method

Return if this client has the described quirk.
public hasQuirk ( integer $quirk ) : boolean
$quirk integer The specified quirk to check for.
return boolean True if quirk is present.
    public function hasQuirk($quirk)
    {
        switch ($quirk) {
            case self::QUIRK_NEEDS_SUPPORTED_PICTURE_TAG:
                return $this->_isIos() && $this->getMajorVersion() == 4;
            case self::QUIRK_INCORRECTLY_SENDS_EMPTY_PICTURE_TAG:
                return $this->_isIos() && $this->getMajorVersion() >= 8 && $this->getMinorVersion() > 1;
            default:
                return false;
        }
    }

Usage Example

Exemplo n.º 1
0
 public function testDeviceDetection()
 {
     // // iOS
     $state = $this->getMockSkipConstructor('Horde_ActiveSync_State_Base');
     $fixture = array('deviceType' => 'iPod', 'userAgent' => 'Apple-iPod5C1/1102.55400001', 'properties' => array(Horde_ActiveSync_Device::OS => 'iOS 7.0.4'));
     $device = new Horde_ActiveSync_Device($state, $fixture);
     $this->assertEquals(7, $device->getMajorVersion());
     $this->assertEquals(0, $device->getMinorVersion());
     $this->assertEquals(Horde_ActiveSync_Device::TYPE_IPOD, Horde_String::lower($device->deviceType));
     $this->assertEquals(Horde_ActiveSync_Device::MULTIPLEX_NOTES, $device->multiplex);
     $fixture = array('deviceType' => 'iPhone', 'userAgent' => 'iOS/1002.329');
     $device = new Horde_ActiveSync_Device($state, $fixture);
     $this->assertEquals(6, $device->getMajorVersion());
     $this->assertEquals(1, $device->getMinorVersion());
     $this->assertEquals(Horde_ActiveSync_Device::TYPE_IPHONE, Horde_String::lower($device->deviceType));
     $this->assertEquals(Horde_ActiveSync_Device::MULTIPLEX_NOTES, $device->multiplex);
     $this->assertEquals(false, $device->hasQuirk(Horde_ActiveSync_Device::QUIRK_NEEDS_SUPPORTED_PICTURE_TAG));
     $fixture = array('deviceType' => 'iPod', 'userAgent' => 'Apple-iPod2C1/803.148');
     $device = new Horde_ActiveSync_Device($state, $fixture);
     $this->assertEquals(4, $device->getMajorVersion());
     $this->assertEquals(2, $device->getMinorVersion());
     $this->assertEquals(true, $device->hasQuirk(Horde_ActiveSync_Device::QUIRK_NEEDS_SUPPORTED_PICTURE_TAG));
     $fixture = array('deviceType' => 'iPad', 'userAgent' => 'Apple-iPad3C6/1202.435', 'properties' => array(Horde_ActiveSync_Device::OS => 'iOS 8.1.1'));
     $device = new Horde_ActiveSync_Device($state, $fixture);
     $this->assertEquals(8, $device->getMajorVersion());
     $this->assertEquals(1, $device->getMinorVersion());
     $this->assertEquals(Horde_ActiveSync_Device::TYPE_IPAD, Horde_String::lower($device->deviceType));
     $this->assertEquals(Horde_ActiveSync_Device::MULTIPLEX_NOTES, $device->multiplex);
     $fixture = array('deviceType' => 'iPad', 'userAgent' => 'Apple-iPad4C5/1206.69', 'properties' => array(Horde_ActiveSync_Device::OS => 'iOS 8.3 12F69'));
     $device = new Horde_ActiveSync_Device($state, $fixture);
     $this->assertEquals(8, $device->getMajorVersion());
     $this->assertEquals(3, $device->getMinorVersion());
     $this->assertEquals(Horde_ActiveSync_Device::TYPE_IPAD, Horde_String::lower($device->deviceType));
     $this->assertEquals(Horde_ActiveSync_Device::MULTIPLEX_NOTES, $device->multiplex);
     $fixture = array('deviceType' => 'iPhone', 'userAgent' => 'Apple-iPhone6C1/1104.201', 'properties' => array(Horde_ActiveSync_Device::OS => 'iOS 9.0.2 13A452'));
     $device = new Horde_ActiveSync_Device($state, $fixture);
     $this->assertEquals(9, $device->getMajorVersion());
     $this->assertEquals(0, $device->getMinorVersion());
     $this->assertEquals(Horde_ActiveSync_Device::TYPE_IPHONE, Horde_String::lower($device->deviceType));
     $this->assertEquals(Horde_ActiveSync_Device::MULTIPLEX_NOTES, $device->multiplex);
     // Old Android.
     $fixture = array('userAgent' => 'Android/0.3', 'deviceType' => 'Android');
     $device = new Horde_ActiveSync_Device($state, $fixture);
     $this->assertEquals(0, $device->getMajorVersion());
     $this->assertEquals(3, $device->getMinorVersion());
     $this->assertEquals(Horde_ActiveSync_Device::TYPE_ANDROID, Horde_String::lower($device->deviceType));
     $this->assertEquals(Horde_ActiveSync_Device::TYPE_ANDROID, Horde_String::lower($device->clientType));
     $this->assertEquals(Horde_ActiveSync_Device::MULTIPLEX_CONTACTS | Horde_ActiveSync_Device::MULTIPLEX_CALENDAR | Horde_ActiveSync_Device::MULTIPLEX_NOTES | Horde_ActiveSync_Device::MULTIPLEX_TASKS, $device->multiplex);
     // Touchdown client on Android.
     $fixture = array('userAgent' => 'TouchDown(MSRPC)/7.1.0005', 'deviceType' => 'Android');
     $device = new Horde_ActiveSync_Device($state, $fixture);
     $this->assertEquals(7, $device->getMajorVersion());
     $this->assertEquals(1, $device->getMinorVersion());
     $this->assertEquals(Horde_ActiveSync_Device::TYPE_ANDROID, Horde_String::lower($device->deviceType));
     $this->assertEquals(Horde_ActiveSync_Device::TYPE_TOUCHDOWN, Horde_String::lower($device->clientType));
     $this->assertEquals(0, $device->multiplex);
     // Not-so-old-but-still-old Android.
     $fixture = array('userAgent' => 'MOTOROLA-Droid(4D6F7869SAM)/2.1707', 'deviceType' => 'Android');
     $device = new Horde_ActiveSync_Device($state, $fixture);
     $this->assertEquals(2, $device->getMajorVersion());
     $this->assertEquals(1707, $device->getMinorVersion());
     $this->assertEquals(Horde_ActiveSync_Device::TYPE_ANDROID, Horde_String::lower($device->deviceType));
     $this->assertEquals(Horde_ActiveSync_Device::TYPE_ANDROID, Horde_String::lower($device->clientType));
     $this->assertEquals(15, $device->multiplex);
     // KK Android (taken from SDK).
     $fixture = array('userAgent' => 'Android/4.4.2-EAS-1.3', 'deviceType' => 'Android', 'properties' => array(Horde_ActiveSync_Device::OS => 'Android 4.4.2'));
     $device = new Horde_ActiveSync_Device($state, $fixture);
     $this->assertEquals(4, $device->getMajorVersion());
     $this->assertEquals(4, $device->getMinorVersion());
     $this->assertEquals(Horde_ActiveSync_Device::TYPE_ANDROID, Horde_String::lower($device->deviceType));
     $this->assertEquals(Horde_ActiveSync_Device::TYPE_ANDROID, Horde_String::lower($device->clientType));
     $this->assertEquals(13, $device->multiplex);
     // Devices like this (from a Note 3) we simply can't sniff multiplex for
     // since there is no version string. Stuff like this would go in the
     // hook.
     $fixture = array('deviceType' => 'SAMSUNGSMN900V', 'userAgent' => 'SAMSUNG-SM-N900V/101.403', 'properties' => array(Horde_ActiveSync_Device::OS => 'Android'));
     $device = new Horde_ActiveSync_Device($state, $fixture);
     // These are useless values, but still tests the reliability of the code
     $this->assertEquals(101, $device->getMajorVersion());
     $this->assertEquals(403, $device->getMinorVersion());
     $this->assertEquals('samsungsmn900v', Horde_String::lower($device->deviceType));
     $this->assertEquals(Horde_ActiveSync_Device::TYPE_ANDROID, Horde_String::lower($device->clientType));
     $this->assertEquals(15, $device->multiplex);
     // Nine (From Note 3 running 4.4.2).
     $fixture = array('deviceType' => 'Android', 'userAgent' => 'hltevzw/KOT49H', 'properties' => array(Horde_ActiveSync_Device::OS => 'Android 4.4.2.N900VVRUCNC4'));
     $device = new Horde_ActiveSync_Device($state, $fixture);
     $device->id = '6E696E656331393035333833303331';
     $this->assertEquals(4, $device->getMajorVersion());
     $this->assertEquals('android', Horde_String::lower($device->deviceType));
     $this->assertEquals(Horde_ActiveSync_Device::TYPE_NINE, Horde_String::lower($device->clientType));
     $this->assertEquals(0, $device->multiplex);
     // HTCOneMini2
     $fixture = array('userAgent' => 'HTC', 'deviceType' => 'HTCOnemini2', 'properties' => array(Horde_ActiveSync_Device::OS => 'Android 4.4.2', Horde_ActiveSync_Device::MODEL => 'HTCOnemini2'));
     $device = new Horde_ActiveSync_Device($state, $fixture);
     $this->assertEquals(4, $device->getMajorVersion());
     $this->assertEquals(4, $device->getMinorVersion());
     $this->assertEquals('htconemini2', Horde_String::lower($device->deviceType));
     $this->assertEquals(Horde_ActiveSync_Device::TYPE_ANDROID, Horde_String::lower($device->clientType));
     $this->assertEquals(15, $device->multiplex);
 }