ActiveSync - add Json FE remoteResetDevices
[tine20] / tine20 / ActiveSync / Model / Device.php
1 <?php
2 /**
3  * Tine 2.0
4  * 
5  * @package     ActiveSync
6  * @subpackage  Model
7  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
8  * @author      Lars Kneschke <l.kneschke@metaways.de>
9  * @copyright   Copyright (c) 2014-2015 Metaways Infosystems GmbH (http://www.metaways.de)
10  */
11
12 /**
13  * class to hold device data
14  * 
15  * @package     ActiveSync
16  * @subpackage  Model
17  * @property  string  $acsversion         activesync protocoll version
18  * @property  string  $calendarfilter_id  the calendar filter id
19  * @property  string  $contactsfilter_id  the contacts filter id
20  * @property  string  $emailfilter_id     the email filter id
21  * @property  string  $id                 the id
22  * @property  string  $policy_id          the current policy_id
23  * @property  string  $policykey          the current policykey
24  * @property  string  $tasksfilter_id     the tasks filter id
25  * @property  boolean $remotewipe
26  */
27 class ActiveSync_Model_Device extends Tinebase_Record_Abstract
28 {
29     /**
30      * key in $_validators/$_properties array for the filed which 
31      * represents the identifier
32      * 
33      * @var string
34      */    
35     protected $_identifier = 'id';
36     
37     /**
38      * application the record belongs to
39      *
40      * @var string
41      */
42     protected $_application = 'ActiveSync';
43     
44     /**
45      * if foreign Id fields should be resolved on search and get from json
46      * should have this format:
47      *     array('Calendar_Model_Contact' => 'contact_id', ...)
48      * or for more fields:
49      *     array('Calendar_Model_Contact' => array('contact_id', 'customer_id), ...)
50      * (e.g. resolves contact_id with the corresponding Model)
51      *
52      * @var array
53      */
54     protected static $_resolveForeignIdFields = array(
55         'Tinebase_Model_User' => array('owner_id'),
56     );
57     
58     /**
59      * list of zend inputfilter
60      * 
61      * this filter get used when validating user generated content with Zend_Input_Filter
62      *
63      * @var array
64      */
65     protected $_filters = array(
66         'devicetype'             => 'StringToLower',
67     );
68     
69     /**
70      * list of zend validator
71      * 
72      * this validators get used when validating user generated content with Zend_Input_Filter
73      *
74      * @var array
75      */
76     protected $_validators = array(
77         'id'                    => array(Zend_Filter_Input::ALLOW_EMPTY => true, Zend_Filter_Input::DEFAULT_VALUE => NULL),
78         'deviceid'              => array(Zend_Filter_Input::ALLOW_EMPTY => false, 'presence'=>'required'),
79         'devicetype'            => array(Zend_Filter_Input::ALLOW_EMPTY => false, 'presence'=>'required'),
80         'owner_id'              => array(Zend_Filter_Input::ALLOW_EMPTY => false, 'presence'=>'required'),
81         'policy_id'             => array(Zend_Filter_Input::ALLOW_EMPTY => true),
82         //'policykey'             => array(Zend_Filter_Input::ALLOW_EMPTY => true),
83         'acsversion'            => array(Zend_Filter_Input::ALLOW_EMPTY => false, 'presence'=>'required'),
84         'useragent'             => array(Zend_Filter_Input::ALLOW_EMPTY => false, 'presence'=>'required'),
85         'model'                 => array(Zend_Filter_Input::ALLOW_EMPTY => true),
86         'imei'                  => array(Zend_Filter_Input::ALLOW_EMPTY => true),
87         'friendlyname'          => array(Zend_Filter_Input::ALLOW_EMPTY => true),
88         'os'                    => array(Zend_Filter_Input::ALLOW_EMPTY => true),
89         'oslanguage'            => array(Zend_Filter_Input::ALLOW_EMPTY => true),
90         'phonenumber'           => array(Zend_Filter_Input::ALLOW_EMPTY => true),
91         'pinglifetime'          => array(Zend_Filter_Input::ALLOW_EMPTY => true),
92         'pingfolder'            => array(Zend_Filter_Input::ALLOW_EMPTY => true),
93         'remotewipe'            => array(Zend_Filter_Input::ALLOW_EMPTY => true, Zend_Filter_Input::DEFAULT_VALUE => 0),
94         'calendarfilter_id'     => array(Zend_Filter_Input::ALLOW_EMPTY => true),
95         'contactsfilter_id'     => array(Zend_Filter_Input::ALLOW_EMPTY => true),
96         'emailfilter_id'        => array(Zend_Filter_Input::ALLOW_EMPTY => true),
97         'tasksfilter_id'        => array(Zend_Filter_Input::ALLOW_EMPTY => true),
98         'lastping'              => array(Zend_Filter_Input::ALLOW_EMPTY => true)
99     );
100     
101     /**
102      * name of fields containing datetime or or an array of datetime information
103      *
104      * @var array list of datetime fields
105      */
106     protected $_datetimeFields = array(
107         'lastping'
108     );
109     
110     /**
111      * Returns major firmware version of this device
112      * 
113      * @return int/string
114      */
115     public function getMajorVersion()
116     {
117         switch ($this->devicetype) {
118             case Syncroton_Model_Device::TYPE_IPHONE:
119                 if (preg_match('/(.+)\/(\d+)\.(\d+)/', $this->useragent, $matches)) {
120                     list(, $name, $majorVersion, $minorVersion) = $matches;
121                     return $majorVersion;
122                 }
123                 break;
124             default:
125                 break;
126         }
127         
128         return 0;
129     }
130 }