ignore system users when deleting/expiring deleted users
authorPhilipp Schüle <p.schuele@metaways.de>
Wed, 2 Dec 2015 15:52:40 +0000 (16:52 +0100)
committerPhilipp Schüle <p.schuele@metaways.de>
Thu, 3 Dec 2015 12:37:28 +0000 (13:37 +0100)
see 0011192: LDAP sync should delete contacts

Change-Id: I23cc8889205f7f1509a2a78425e29df279b38019
Reviewed-on: http://gerrit.tine20.com/customers/2458
Tested-by: Jenkins CI (http://ci.tine20.com/)
Reviewed-by: Philipp Schüle <p.schuele@metaways.de>
tine20/Tinebase/User.php

index 5698c6a..d022a9a 100644 (file)
@@ -744,16 +744,20 @@ class Tinebase_User
         $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...');
+            . ' About to delete / expire ' . count($deletedInSyncBackend) . ' users in SQL backend...');
 
         foreach ($deletedInSyncBackend as $userToDelete) {
             $user = Tinebase_User::getInstance()->getUserByPropertyFromSqlBackend('accountId', $userToDelete, 'Tinebase_Model_FullUser');
 
+            if (in_array($user->accountLoginName, self::getSystemUsernames())) {
+                return;
+            }
+
             // at first, we expire the user
             $now = Tinebase_DateTime::now();
             if (! $user->accountExpires) {
                 if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__
-                    . ' Set expiry date to ' . $now);
+                    . ' Set expiry date of ' . $user->accountLoginName . ' to ' . $now);
                 $user->accountExpires = $now;
                 Tinebase_User::getInstance()->updateUserInSqlBackend($user);
             } else {
@@ -780,6 +784,16 @@ class Tinebase_User
     }
 
     /**
+     * returns login_names of system users
+     *
+     * @return array
+     */
+    public static function getSystemUsernames()
+    {
+        return array('cronuser', 'calendarscheduling');
+    }
+
+    /**
      * 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