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)
13 * controller for ActiveSync
17 class ActiveSync_Controller extends Tinebase_Controller_Abstract
20 * holds the instance of the singleton
22 * @var ActiveSync_Controller
24 private static $_instance = NULL;
29 private function __construct()
34 * don't clone. Use the singleton.
37 private function __clone()
42 * the singleton pattern
44 * @return ActiveSync_Controller
46 public static function getInstance()
48 if (self::$_instance === NULL) {
49 self::$_instance = new ActiveSync_Controller;
52 return self::$_instance;
58 * @param string $username
59 * @param array $classesToReset
62 public function resetSyncForUser($username, $classesToReset)
64 if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__
65 . ' Resetting sync for user ' . $username . ' collections: ' . print_r($classesToReset, true));
67 $user = Tinebase_User::getInstance()->getUserByPropertyFromSqlBackend('accountLoginName', $username);
69 self::initSyncrotonRegistry();
71 $devices = $this->_getDevicesForUser($user);
73 foreach ($devices as $device) {
74 if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__
75 . ' Resetting device' . $device->friendlyname . ' / id: ' . $device->getId());
77 foreach ($classesToReset as $class) {
78 $folderToReset = $this->_getFoldersForDeviceAndClass($device, $class);
80 if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__
81 . ' Resetting ' . count($folderToReset) . ' folder(s) for class ' . $class);
83 foreach ($folderToReset as $folderState) {
84 Syncroton_Registry::getSyncStateBackend()->resetState($device->getId(), $folderState->id);
93 * fetch devices for user
95 * @param Tinebase_Model_FullUser $user
97 protected function _getDevicesForUser($user)
99 $deviceBackend = new ActiveSync_Backend_Device();
100 $deviceFilter = new ActiveSync_Model_DeviceFilter(array(
101 array('field' => 'owner_id', 'operator' => 'equals', 'value' => $user->getId())
103 $devices = $deviceBackend->search($deviceFilter);
107 protected function _getFoldersForDeviceAndClass($device, $class)
109 $folderState = Syncroton_Registry::getFolderBackend()->getFolderState($device->getId(), $class);
113 public static function initSyncrotonRegistry()
115 Syncroton_Registry::setDatabase(Tinebase_Core::getDb());
116 Syncroton_Registry::setTransactionManager(Tinebase_TransactionManager::getInstance());
118 Syncroton_Registry::set(Syncroton_Registry::DEVICEBACKEND, new Syncroton_Backend_Device(Tinebase_Core::getDb(), SQL_TABLE_PREFIX . 'acsync_'));
119 Syncroton_Registry::set(Syncroton_Registry::FOLDERBACKEND, new Syncroton_Backend_Folder(Tinebase_Core::getDb(), SQL_TABLE_PREFIX . 'acsync_'));
120 Syncroton_Registry::set(Syncroton_Registry::SYNCSTATEBACKEND, new Syncroton_Backend_SyncState(Tinebase_Core::getDb(), SQL_TABLE_PREFIX . 'acsync_'));
121 Syncroton_Registry::set(Syncroton_Registry::CONTENTSTATEBACKEND, new Syncroton_Backend_Content(Tinebase_Core::getDb(), SQL_TABLE_PREFIX . 'acsync_'));
122 Syncroton_Registry::set(Syncroton_Registry::POLICYBACKEND, new Syncroton_Backend_Policy(Tinebase_Core::getDb(), SQL_TABLE_PREFIX . 'acsync_'));
123 Syncroton_Registry::set(Syncroton_Registry::LOGGERBACKEND, Tinebase_Core::getLogger());
124 Syncroton_Registry::set(Syncroton_Registry::SESSION_VALIDATOR, function() {
125 return ! Tinebase_Core::inMaintenanceMode();