[Web] Add feature for null mail

This commit is contained in:
andryyy 2017-09-15 09:05:51 +02:00
parent edacce0329
commit dd3bd82838
8 changed files with 102 additions and 56 deletions

View File

@ -31,7 +31,10 @@ if (isset($_SESSION['mailcow_cc_role'])) {
<div class="form-group"> <div class="form-group">
<label class="control-label col-sm-2" for="goto"><?=$lang['edit']['target_address'];?></label> <label class="control-label col-sm-2" for="goto"><?=$lang['edit']['target_address'];?></label>
<div class="col-sm-10"> <div class="col-sm-10">
<textarea class="form-control" autocapitalize="none" autocorrect="off" rows="10" id="goto" name="goto"><?=htmlspecialchars($result['goto']) ?></textarea> <textarea id="textarea_alias_goto" class="form-control" autocapitalize="none" autocorrect="off" rows="10" id="goto" name="goto" required><?= ($result['goto'] != "null@localhost") ? htmlspecialchars($result['goto']) : null; ?></textarea>
<div class="checkbox">
<label><input id="goto_null" type="checkbox" value="1" name="goto_null" <?= ($result['goto'] == "null@localhost") ? "checked" : null; ?>> <?=$lang['add']['goto_null'];?></label>
</div>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">

View File

@ -324,6 +324,7 @@ function mailbox($_action, $_type, $_data = null) {
$addresses = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['address'])); $addresses = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['address']));
$gotos = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['goto'])); $gotos = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['goto']));
$active = intval($_data['active']); $active = intval($_data['active']);
$goto_null = intval($_data['goto_null']);
if (empty($addresses[0])) { if (empty($addresses[0])) {
$_SESSION['return'] = array( $_SESSION['return'] = array(
'type' => 'danger', 'type' => 'danger',
@ -331,13 +332,17 @@ function mailbox($_action, $_type, $_data = null) {
); );
return false; return false;
} }
if (empty($gotos[0])) { if (empty($gotos[0]) && $goto_null == 0) {
$_SESSION['return'] = array( $_SESSION['return'] = array(
'type' => 'danger', 'type' => 'danger',
'msg' => sprintf($lang['danger']['goto_empty']) 'msg' => sprintf($lang['danger']['goto_empty'])
); );
return false; return false;
} }
if ($goto_null == "1") {
$goto = "null@localhost";
}
else {
foreach ($gotos as &$goto) { foreach ($gotos as &$goto) {
if (empty($goto)) { if (empty($goto)) {
continue; continue;
@ -367,6 +372,7 @@ function mailbox($_action, $_type, $_data = null) {
} }
$gotos = array_filter($gotos); $gotos = array_filter($gotos);
$goto = implode(",", $gotos); $goto = implode(",", $gotos);
}
foreach ($addresses as $address) { foreach ($addresses as $address) {
if (empty($address)) { if (empty($address)) {
continue; continue;
@ -1385,6 +1391,7 @@ function mailbox($_action, $_type, $_data = null) {
$is_now = mailbox('get', 'alias_details', $address); $is_now = mailbox('get', 'alias_details', $address);
if (!empty($is_now)) { if (!empty($is_now)) {
$active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active_int']; $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active_int'];
$goto_null = (isset($_data['goto_null'])) ? intval($_data['goto_null']) : $is_now['goto_null'];
$goto = (!empty($_data['goto'])) ? $_data['goto'] : $is_now['goto']; $goto = (!empty($_data['goto'])) ? $_data['goto'] : $is_now['goto'];
} }
else { else {
@ -1394,7 +1401,10 @@ function mailbox($_action, $_type, $_data = null) {
); );
return false; return false;
} }
if ($goto_null == "1") {
$goto = "null@localhost";
}
else {
$gotos = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['goto'])); $gotos = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['goto']));
foreach ($gotos as &$goto) { foreach ($gotos as &$goto) {
if (empty($goto)) { if (empty($goto)) {
@ -1417,7 +1427,7 @@ function mailbox($_action, $_type, $_data = null) {
} }
$gotos = array_filter($gotos); $gotos = array_filter($gotos);
$goto = implode(",", $gotos); $goto = implode(",", $gotos);
}
$domain = idn_to_ascii(substr(strstr($address, '@'), 1)); $domain = idn_to_ascii(substr(strstr($address, '@'), 1));
$local_part = strstr($address, '@', true); $local_part = strstr($address, '@', true);
if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) { if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {

View File

@ -67,7 +67,7 @@ $(document).ready(function() {
var req_empty = false; var req_empty = false;
$(this).closest("form").find('select, textarea, input').each(function() { $(this).closest("form").find('select, textarea, input').each(function() {
if ($(this).prop('required')) { if ($(this).prop('required')) {
if (!$(this).val()) { if (!$(this).val() && $(this).prop('disabled') === false) {
req_empty = true; req_empty = true;
$(this).addClass('inputMissingAttr'); $(this).addClass('inputMissingAttr');
} else { } else {
@ -126,7 +126,7 @@ $(document).ready(function() {
var req_empty = false; var req_empty = false;
$(this).closest("form").find('select, textarea, input').each(function() { $(this).closest("form").find('select, textarea, input').each(function() {
if ($(this).prop('required')) { if ($(this).prop('required')) {
if (!$(this).val()) { if (!$(this).val() && $(this).prop('disabled') === false) {
req_empty = true; req_empty = true;
$(this).addClass('inputMissingAttr'); $(this).addClass('inputMissingAttr');
} else { } else {

View File

@ -1,3 +1,17 @@
$(document).ready(function() {
if ($("#goto_null").is(":checked")) {
$('#textarea_alias_goto').prop('disabled', true);
}
$("#goto_null").click(function( event ) {
if ($("#goto_null").is(":checked")) {
$('#textarea_alias_goto').prop('disabled', true);
}
else {
$("#textarea_alias_goto").removeAttr('disabled');
}
});
});
jQuery(function($){ jQuery(function($){
// http://stackoverflow.com/questions/46155/validate-email-address-in-javascript // http://stackoverflow.com/questions/46155/validate-email-address-in-javascript
function validateEmail(email) { function validateEmail(email) {

View File

@ -30,6 +30,15 @@ $(document).ready(function() {
$('#password2').val(random_passwd); $('#password2').val(random_passwd);
}); });
$("#goto_null").click(function( event ) {
if ($("#goto_null").is(":checked")) {
$('#textarea_alias_goto').prop('disabled', true);
}
else {
$("#textarea_alias_goto").removeAttr('disabled');
}
});
// Log modal // Log modal
$('#logModal').on('show.bs.modal', function(e) { $('#logModal').on('show.bs.modal', function(e) {
var logText = $(e.relatedTarget).data('log-text'); var logText = $(e.relatedTarget).data('log-text');
@ -283,6 +292,9 @@ jQuery(function($){
if (item.is_catch_all == 1) { if (item.is_catch_all == 1) {
item.address = '<div class="label label-default">Catch-All</div> ' + item.address; item.address = '<div class="label label-default">Catch-All</div> ' + item.address;
} }
if (item.goto == "null@localhost") {
item.goto = '⤷ <span style="font-size:12px" class="glyphicon glyphicon-trash" aria-hidden="true"></span>';
}
if (item.in_primary_domain !== "") { if (item.in_primary_domain !== "") {
item.domain = "↳ " + item.domain + " (" + item.in_primary_domain + ")"; item.domain = "↳ " + item.domain + " (" + item.in_primary_domain + ")";
} }

View File

@ -331,6 +331,7 @@ $lang['edit']['dont_check_sender_acl'] = 'Absender für Domain %s u. Alias-Dom.
$lang['edit']['multiple_bookings'] = 'Mehrfaches Buchen'; $lang['edit']['multiple_bookings'] = 'Mehrfaches Buchen';
$lang['edit']['kind'] = 'Art'; $lang['edit']['kind'] = 'Art';
$lang['edit']['resource'] = 'Ressource'; $lang['edit']['resource'] = 'Ressource';
$lang['edit']['goto_null'] = 'Nachrichten sofort verwerfen';
$lang['add']['syncjob'] = 'Sync-Job erstellen'; $lang['add']['syncjob'] = 'Sync-Job erstellen';
$lang['add']['syncjob_hint'] = 'Passwörter werden unverschlüsselt abgelegt!'; $lang['add']['syncjob_hint'] = 'Passwörter werden unverschlüsselt abgelegt!';
@ -385,6 +386,7 @@ $lang['add']['password'] = 'Passwort';
$lang['add']['password_repeat'] = 'Passwort (Wiederholung)'; $lang['add']['password_repeat'] = 'Passwort (Wiederholung)';
$lang['add']['previous'] = 'Vorherige Seite'; $lang['add']['previous'] = 'Vorherige Seite';
$lang['add']['restart_sogo_hint'] = 'Der SOGo Container muss nach dem Hinzufügen einer neuen Domain neugestartet werden!'; $lang['add']['restart_sogo_hint'] = 'Der SOGo Container muss nach dem Hinzufügen einer neuen Domain neugestartet werden!';
$lang['add']['goto_null'] = 'Nachrichten sofort verwerfen';
$lang['login']['title'] = 'Anmeldung'; $lang['login']['title'] = 'Anmeldung';
$lang['login']['administration'] = 'Administration'; $lang['login']['administration'] = 'Administration';

View File

@ -336,6 +336,7 @@ $lang['edit']['dont_check_sender_acl'] = "Disable sender check for domain %s + a
$lang['edit']['multiple_bookings'] = 'Multiple bookings'; $lang['edit']['multiple_bookings'] = 'Multiple bookings';
$lang['edit']['kind'] = 'Kind'; $lang['edit']['kind'] = 'Kind';
$lang['edit']['resource'] = 'Resource'; $lang['edit']['resource'] = 'Resource';
$lang['edit']['goto_null'] = 'Silently discard mail';
$lang['add']['syncjob'] = 'Add sync job'; $lang['add']['syncjob'] = 'Add sync job';
$lang['add']['syncjob_hint'] = 'Be aware that passwords need to be saved plain-text!'; $lang['add']['syncjob_hint'] = 'Be aware that passwords need to be saved plain-text!';
@ -390,6 +391,7 @@ $lang['add']['password'] = 'Password';
$lang['add']['password_repeat'] = 'Confirmation password (repeat)'; $lang['add']['password_repeat'] = 'Confirmation password (repeat)';
$lang['add']['previous'] = 'Previous page'; $lang['add']['previous'] = 'Previous page';
$lang['add']['restart_sogo_hint'] = 'You will need to restart the SOGo service container after adding a new domain!'; $lang['add']['restart_sogo_hint'] = 'You will need to restart the SOGo service container after adding a new domain!';
$lang['add']['goto_null'] = 'Silently discard mail';
$lang['login']['title'] = 'Login'; $lang['login']['title'] = 'Login';
$lang['login']['administration'] = 'Administration'; $lang['login']['administration'] = 'Administration';

View File

@ -234,7 +234,10 @@ if (!isset($_SESSION['mailcow_cc_role'])) {
<div class="form-group"> <div class="form-group">
<label class="control-label col-sm-2" for="goto"><?=$lang['add']['target_address'];?></label> <label class="control-label col-sm-2" for="goto"><?=$lang['add']['target_address'];?></label>
<div class="col-sm-10"> <div class="col-sm-10">
<textarea autocorrect="off" autocapitalize="none" class="form-control" rows="5" id="goto" name="goto" required></textarea> <textarea id="textarea_alias_goto" autocorrect="off" autocapitalize="none" class="form-control" rows="5" id="goto" name="goto" required></textarea>
<div class="checkbox">
<label><input id="goto_null" type="checkbox" value="1" name="goto_null"> <?=$lang['add']['goto_null'];?></label>
</div>
<p><?=$lang['add']['target_address_info'];?></p> <p><?=$lang['add']['target_address_info'];?></p>
</div> </div>
</div> </div>