convert param to array
[tine20] / tine20 / ActiveSync / Controller.php
1 <?php
2 /**
3  * Tine 2.0
4  *
5  * @package     ActiveSync
6  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
7  * @author      Lars Kneschke <l.kneschke@metaways.de>
8  * @copyright   Copyright (c) 2008-2012 Metaways Infosystems GmbH (http://www.metaways.de)
9  * 
10  */
11
12 /**
13  * controller for ActiveSync
14  *
15  * @package     ActiveSync
16  */
17 class ActiveSync_Controller extends Tinebase_Controller_Abstract
18 {
19     /**
20      * holds the instance of the singleton
21      *
22      * @var ActiveSync_Controller
23      */
24     private static $_instance = NULL;
25     
26     /**
27      * constructor
28      */
29     private function __construct() 
30     {
31     }
32     
33     /**
34      * don't clone. Use the singleton.
35      *
36      */
37     private function __clone() 
38     {
39     }
40     
41     /**
42      * the singleton pattern
43      *
44      * @return ActiveSync_Controller
45      */
46     public static function getInstance() 
47     {
48         if (self::$_instance === NULL) {
49             self::$_instance = new ActiveSync_Controller;
50         }
51         
52         return self::$_instance;
53     }
54
55     /**
56      * reset sync for user
57      *
58      * @param mixed $user
59      * @param array|string $classesToReset
60      * @return boolean
61      */
62     public function resetSyncForUser($user, $classesToReset)
63     {
64         if (is_string($classesToReset)) {
65             $classesToReset = array($classesToReset);
66         }
67
68         if (! $user instanceof Tinebase_Model_User) {
69             try {
70                 $user = Tinebase_User::getInstance()->getFullUserById($user);
71             } catch (Tinebase_Exception_NotFound $tenf) {
72                 $user = Tinebase_User::getInstance()->getUserByPropertyFromSqlBackend('accountLoginName', $user);
73             }
74         }
75
76         if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__
77             . ' Resetting sync for user ' . $user->accountDisplayName . ' collections: ' . print_r($classesToReset, true));
78
79         self::initSyncrotonRegistry();
80         
81         $devices = $this->_getDevicesForUser($user->getId());
82         
83         foreach ($devices as $device) {
84             if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__
85                     . ' Resetting device' . $device->friendlyname . ' / id: ' . $device->getId());
86             
87             foreach ($classesToReset as $class) {
88                 $folderToReset = $this->_getFoldersForDeviceAndClass($device, $class);
89                 
90                 if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__
91                         . ' Resetting ' . count($folderToReset) . ' folder(s) for class ' . $class);
92                 
93                 foreach ($folderToReset as $folderState) {
94                     Syncroton_Registry::getSyncStateBackend()->resetState($device->getId(), $folderState->id);
95                 }
96             }
97         }
98         
99         return true;
100     }
101     
102     /**
103      * fetch devices for user
104      * 
105      * @param string $userId
106      */
107     protected function _getDevicesForUser($userId)
108     {
109         $deviceBackend = new ActiveSync_Backend_Device();
110         $deviceFilter = new ActiveSync_Model_DeviceFilter(array(
111             array('field' => 'owner_id', 'operator' => 'equals', 'value' => $userId)
112         ));
113         $devices = $deviceBackend->search($deviceFilter);
114         return $devices;
115     }
116     
117     protected function _getFoldersForDeviceAndClass($device, $class)
118     {
119         $folderState = Syncroton_Registry::getFolderBackend()->getFolderState($device->getId(), $class);
120         return $folderState;
121     }
122     
123     public static function initSyncrotonRegistry()
124     {
125         Syncroton_Registry::setDatabase(Tinebase_Core::getDb());
126         Syncroton_Registry::setTransactionManager(Tinebase_TransactionManager::getInstance());
127         
128         Syncroton_Registry::set(Syncroton_Registry::DEVICEBACKEND,       new Syncroton_Backend_Device(Tinebase_Core::getDb(), SQL_TABLE_PREFIX . 'acsync_'));
129         Syncroton_Registry::set(Syncroton_Registry::FOLDERBACKEND,       new Syncroton_Backend_Folder(Tinebase_Core::getDb(), SQL_TABLE_PREFIX . 'acsync_'));
130         Syncroton_Registry::set(Syncroton_Registry::SYNCSTATEBACKEND,    new Syncroton_Backend_SyncState(Tinebase_Core::getDb(), SQL_TABLE_PREFIX . 'acsync_'));
131         Syncroton_Registry::set(Syncroton_Registry::CONTENTSTATEBACKEND, new Syncroton_Backend_Content(Tinebase_Core::getDb(), SQL_TABLE_PREFIX . 'acsync_'));
132         Syncroton_Registry::set(Syncroton_Registry::POLICYBACKEND,       new Syncroton_Backend_Policy(Tinebase_Core::getDb(), SQL_TABLE_PREFIX . 'acsync_'));
133         Syncroton_Registry::set(Syncroton_Registry::LOGGERBACKEND,       Tinebase_Core::getLogger());
134         Syncroton_Registry::set(Syncroton_Registry::SESSION_VALIDATOR,   function() {
135             return ! Tinebase_Core::inMaintenanceMode();
136         });
137     }
138 }