public function syncVirtualAliasesWithUsers(array $users, array $groups) { $deleteVirtualUsersIds = []; $virtualUsers = $this->mtaConnector->getCurrentVirtualUsers(false); $groupPrefix = $this->configurator->get('group_prefix'); $groupPrefixLength = strlen($groupPrefix); // delete fake user unset($users[array_search($this->configurator->get('collab_user'), $users)]); foreach ($virtualUsers as $virtualUser) { $vUid = explode('@', $virtualUser['email'])[0]; // -group if (strlen($vUid) > $groupPrefixLength && substr($vUid, -$groupPrefixLength) === $groupPrefix) { $gvUid = substr($vUid, 0, -$groupPrefixLength); if (!in_array($gvUid, $groups)) { $deleteVirtualUsersIds[] = $virtualUser['id']; } else { unset($groups[array_search($gvUid, $groups)]); } } else { if (!in_array($vUid, $users)) { $deleteVirtualUsersIds[] = $virtualUser['id']; } else { unset($users[array_search($vUid, $users)]); } } } // Delete virtual_users . var_dump('Delete: ', $deleteVirtualUsersIds); if (!empty($deleteVirtualUsersIds)) { $deleteVirtualUsersIdsStr = join(',', $deleteVirtualUsersIds); $result = $this->mtaConnector->deleteVirtualUserIn($deleteVirtualUsersIdsStr); if ($result) { Helper::mailParserLoger('Deleted virtual user id: ' . $deleteVirtualUsersIdsStr); } } // Add new virtual_users Users . var_dump('Add users:', $users); if (!empty($users)) { foreach ($users as $user) { $this->onPreCreateUser($user, Helper::randomString(8)); } } // Add new virtual_users Groups . var_dump('Add groups:', $groups); if (!empty($groups)) { foreach ($groups as $group) { $this->onPreCreateGroup($group); } } }