Merge branch '2013.10' into 2014.11
[tine20] / tine20 / Tinebase / User.php
index dddcd7a..cd9e18f 100644 (file)
@@ -704,7 +704,7 @@ class Tinebase_User
     public static function syncUsers($options)
     {
         if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__ 
-            .' Start synchronizing users ...');
+            .' Start synchronizing users with options ' . print_r($options, true));
         
         $users = Tinebase_User::getInstance()->getUsersFromSyncBackend(NULL, NULL, 'ASC', NULL, NULL, 'Tinebase_Model_FullUser');
         
@@ -719,6 +719,10 @@ class Tinebase_User
                     . $ten->getMessage());
             }
         }
+
+        if (isset($options['deleteUsers']) && $options['deleteUsers']) {
+            self::_syncDeletedUsers($users);
+        }
         
         // @todo this should be improved: only the cache of synced users + group memberships should be cleaned
         if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ 
@@ -727,6 +731,24 @@ class Tinebase_User
     }
 
     /**
+     * deletes user in tine20 db that no longer exist in sync backend
+     *
+     * @param Tinebase_Record_RecordSet $usersInSyncBackend
+     */
+    protected static function _syncDeletedUsers(Tinebase_Record_RecordSet $usersInSyncBackend)
+    {
+        $userIdsInSqlBackend = Tinebase_User::getInstance()->getAllUserIdsFromSqlBackend();
+        $deletedInSyncBackend = array_diff($userIdsInSqlBackend, $usersInSyncBackend->getArrayOfIds());
+
+        if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__
+            . ' About to delete ' . count($deletedInSyncBackend) . ' users in SQL backend...');
+
+        foreach ($deletedInSyncBackend as $userToDelete) {
+            Tinebase_User::getInstance()->deleteUserInSqlBackend($userToDelete);
+        }
+    }
+
+    /**
      * get all user passwords from ldap
      * - set pw for user (in sql and sql plugins)
      * - do not encrypt the pw again as it is encrypted in LDAP
@@ -775,6 +797,7 @@ class Tinebase_User
      *
      * @param array $_options [hash that may contain override values for admin user name and password]
      * @return void
+     * @throws Tinebase_Exception_InvalidArgument
      */
     public static function createInitialAccounts($_options)
     {