diff --git a/data/web/inc/functions.inc.php b/data/web/inc/functions.inc.php index f0677d53..8b5d6ad4 100644 --- a/data/web/inc/functions.inc.php +++ b/data/web/inc/functions.inc.php @@ -4609,6 +4609,46 @@ function mailbox_delete_mailbox($postarray) { 'msg' => sprintf($lang['success']['mailbox_removed'], htmlspecialchars($username)) ); } +function mailbox_reset_eas($username) { + global $lang; + global $pdo; + + (isset($postarray['username'])) ? $username = $postarray['username'] : $username = $_SESSION['mailcow_cc_username']; + + if (!filter_var($username, FILTER_VALIDATE_EMAIL)) { + $_SESSION['return'] = array( + 'type' => 'danger', + 'msg' => sprintf($lang['danger']['access_denied']) + ); + return false; + } + + if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) { + $_SESSION['return'] = array( + 'type' => 'danger', + 'msg' => sprintf($lang['danger']['access_denied']) + ); + return false; + } + + try { + $stmt = $pdo->prepare("DELETE FROM `sogo_cache_folder` WHERE `c_uid` = :username"); + $stmt->execute(array( + ':username' => $username + )); + } + catch (PDOException $e) { + $_SESSION['return'] = array( + 'type' => 'danger', + 'msg' => 'MySQL: '.$e + ); + return false; + } + $_SESSION['return'] = array( + 'type' => 'success', + 'msg' => sprintf($lang['success']['eas_reset'], htmlspecialchars($username)) + ); +} function mailbox_delete_resource($postarray) { global $lang; global $pdo; @@ -4630,10 +4670,38 @@ function mailbox_delete_resource($postarray) { } try { - $stmt = $pdo->prepare("DELETE FROM `mailbox` WHERE `username` = :name"); + $stmt = $pdo->prepare("DELETE FROM `mailbox` WHERE `username` = :username"); $stmt->execute(array( - ':name' => $name + ':username' => $name )); + $stmt = $pdo->prepare("DELETE FROM `sogo_user_profile` WHERE `c_uid` = :username"); + $stmt->execute(array( + ':username' => $name + )); + $stmt = $pdo->prepare("DELETE FROM `sogo_cache_folder` WHERE `c_uid` = :username"); + $stmt->execute(array( + ':username' => $name + )); + $stmt = $pdo->prepare("DELETE FROM `sogo_acl` WHERE `c_object` LIKE '%/" . $name . "/%' OR `c_uid` = :username"); + $stmt->execute(array( + ':username' => $name + )); + $stmt = $pdo->prepare("DELETE FROM `sogo_store` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)"); + $stmt->execute(array( + ':username' => $name + )); + $stmt = $pdo->prepare("DELETE FROM `sogo_quick_contact` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)"); + $stmt->execute(array( + ':username' => $name + )); + $stmt = $pdo->prepare("DELETE FROM `sogo_quick_appointment` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)"); + $stmt->execute(array( + ':username' => $name + )); + $stmt = $pdo->prepare("DELETE FROM `sogo_folder_info` WHERE `c_path2` = :username"); + $stmt->execute(array( + ':username' => $name + )); } catch (PDOException $e) { $_SESSION['return'] = array( diff --git a/data/web/inc/triggers.inc.php b/data/web/inc/triggers.inc.php index 3e68c87f..2dbe321a 100644 --- a/data/web/inc/triggers.inc.php +++ b/data/web/inc/triggers.inc.php @@ -77,6 +77,9 @@ if (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == "user if (isset($_POST["edit_user_account"])) { edit_user_account($_POST); } + if (isset($_POST["mailbox_reset_eas"])) { + mailbox_reset_eas($_POST); + } if (isset($_POST["edit_spam_score"])) { edit_spam_score($_POST); } diff --git a/data/web/lang/lang.de.php b/data/web/lang/lang.de.php index 6b6f5ab8..3575fb74 100644 --- a/data/web/lang/lang.de.php +++ b/data/web/lang/lang.de.php @@ -78,6 +78,7 @@ $lang['success']['alias_removed'] = 'Alias-Adresse %s wurde entfernt'; $lang['success']['alias_domain_removed'] = 'Alias-Domain %s wurde entfernt'; $lang['success']['domain_admin_removed'] = 'Domain-Administrator %s wurde entfernt'; $lang['success']['mailbox_removed'] = 'Mailbox %s wurde entfernt'; +$lang['success']['eas_reset'] = "ActiveSync Gerät des Benutzers %s wurden zurückgesetzt"; $lang['success']['resource_removed'] = 'Ressource %s wurde entfernt'; $lang['danger']['max_quota_in_use'] = 'Mailbox Speicherplatzlimit muss größer oder gleich %d MiB sein'; $lang['danger']['domain_quota_m_in_use'] = 'Domain Speicherplatzlimit muss größer oder gleich %d MiB sein'; @@ -156,6 +157,9 @@ $lang['user']['tag_in_subject'] = 'In Betreff'; $lang['user']['tag_help_explain'] = 'Als Unterordner: Es wird ein Ordner mit dem Namen des Tags unterhalb der Inbox erstellt ("INBOX/Facebook").
In Betreff: Der Name des Tags wird dem Betreff angefügt, etwa "[Facebook] Meine Neuigkeiten".'; $lang['user']['tag_help_example'] = 'Beispiel für eine getaggte E-Mail-Adresse: ich+Facebook@example.org'; +$lang['user']['eas_reset'] = 'ActiveSync Geräte-Cache zurücksetzen'; +$lang['user']['eas_reset_now'] = 'Jetzt zurücksetzen'; +$lang['user']['eas_reset_help'] = 'In vielen Fällen kann ein ActiveSync Profil durch das Zurücksetzen des Caches repariert werden.
Vorsicht: Alle Elemente werden erneut heruntergeladen!'; $lang['user']['encryption'] = 'Verschlüsselung'; $lang['user']['username'] = 'Benutzername'; diff --git a/data/web/lang/lang.en.php b/data/web/lang/lang.en.php index ed60a7f6..9f4efad4 100644 --- a/data/web/lang/lang.en.php +++ b/data/web/lang/lang.en.php @@ -80,6 +80,7 @@ $lang['success']['alias_removed'] = "Alias-Adresse %s has been removed"; $lang['success']['alias_domain_removed'] = "Alias domain %s has been removed"; $lang['success']['domain_admin_removed'] = "Domain administrator %s has been removed"; $lang['success']['mailbox_removed'] = "Mailbox %s has been removed"; +$lang['success']['eas_reset'] = "ActiveSync devices for user %s were reset"; $lang['success']['resource_removed'] = "Resource %s has been removed"; $lang['danger']['max_quota_in_use'] = "Mailbox quota must be greater or equal to %d MiB"; $lang['danger']['domain_quota_m_in_use'] = "Domain quota must be greater or equal to %s MiB"; @@ -158,6 +159,9 @@ $lang['user']['tag_in_subject'] = 'In subject'; $lang['user']['tag_help_explain'] = 'In subfolder: a new subfolder named after the tag will be created below INBOX ("INBOX/Facebook").
In subject: the tags name will be prepended to the mails subject, example: "[Facebook] Meine Neuigkeiten".'; $lang['user']['tag_help_example'] = 'Example for a tagged email address: ich+Facebook@example.org'; +$lang['user']['eas_reset'] = 'Reset ActiveSync device cache'; +$lang['user']['eas_reset_now'] = 'Reset now'; +$lang['user']['eas_reset_help'] = 'In many cases a device cache reset will help to recover a broken ActiveSync profile.
Attention: All elements will be redownloaded!'; $lang['user']['encryption'] = 'Encyrption'; $lang['user']['username'] = 'Username'; diff --git a/data/web/user.php b/data/web/user.php index d158439d..9c5b93ec 100644 --- a/data/web/user.php +++ b/data/web/user.php @@ -112,6 +112,16 @@ elseif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == ' + +
+
+
:
+
+ +

+
+
+