[Web] Fix implementation of multiple bookings for resources, fixes #1358
parent
74008735ca
commit
2ee983c1a1
|
@ -572,7 +572,6 @@ if (isset($_SESSION['mailcow_cc_role'])) {
|
||||||
<h4><?=$lang['edit']['resource'];?></h4>
|
<h4><?=$lang['edit']['resource'];?></h4>
|
||||||
<form class="form-horizontal" role="form" method="post" data-id="editresource">
|
<form class="form-horizontal" role="form" method="post" data-id="editresource">
|
||||||
<input type="hidden" value="0" name="active">
|
<input type="hidden" value="0" name="active">
|
||||||
<input type="hidden" value="0" name="multiple_bookings">
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-sm-2" for="description"><?=$lang['add']['description'];?></label>
|
<label class="control-label col-sm-2" for="description"><?=$lang['add']['description'];?></label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
|
@ -590,16 +589,24 @@ if (isset($_SESSION['mailcow_cc_role'])) {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="col-sm-offset-2 col-sm-10">
|
<label class="control-label col-sm-2" for="multiple_bookings_select"><?=$lang['add']['multiple_bookings'];?>:</label>
|
||||||
<div class="checkbox">
|
<div class="col-sm-10">
|
||||||
<label><input type="checkbox" value="1" name="active" <?=($result['active_int']=="1") ? "checked" : null;?>> <?=$lang['edit']['active'];?></label>
|
<select name="multiple_bookings_select" id="multiple_bookings_select" title="<?=$lang['add']['select'];?>" required>
|
||||||
|
<option value="0" <?=($result['multiple_bookings'] == 0) ? "selected" : null;?>><?=$lang['mailbox']['booking_0'];?></option>
|
||||||
|
<option value="-1" <?=($result['multiple_bookings'] == -1) ? "selected" : null;?>><?=$lang['mailbox']['booking_lt0'];?></option>
|
||||||
|
<option value="custom" <?=($result['multiple_bookings'] >= 1) ? "selected" : null;?>><?=$lang['mailbox']['booking_custom'];?></option>
|
||||||
|
</select>
|
||||||
|
<div style="display:none" id="multiple_bookings_custom_div">
|
||||||
|
<hr>
|
||||||
|
<input type="number" class="form-control" name="multiple_bookings_custom" id="multiple_bookings_custom" value="<?=($result['multiple_bookings'] >= 1) ? $result['multiple_bookings'] : null;?>">
|
||||||
</div>
|
</div>
|
||||||
|
<input type="hidden" name="multiple_bookings" id="multiple_bookings">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="col-sm-offset-2 col-sm-10">
|
<div class="col-sm-offset-2 col-sm-10">
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<label><input type="checkbox" value="1" name="multiple_bookings" <?=($result['multiple_bookings_int']=="1") ? "checked" : null;?>> <?=$lang['edit']['multiple_bookings'];?></label>
|
<label><input type="checkbox" value="1" name="active" <?=($result['active_int']=="1") ? "checked" : null;?>> <?=$lang['edit']['active'];?></label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -945,8 +945,8 @@ function mailbox($_action, $_type, $_data = null, $attr = null) {
|
||||||
$local_part = preg_replace('/[^\da-z]/i', '', preg_quote($description, '/'));
|
$local_part = preg_replace('/[^\da-z]/i', '', preg_quote($description, '/'));
|
||||||
$name = $local_part . '@' . $domain;
|
$name = $local_part . '@' . $domain;
|
||||||
$kind = $_data['kind'];
|
$kind = $_data['kind'];
|
||||||
$active = intval($_data['active']);
|
|
||||||
$multiple_bookings = intval($_data['multiple_bookings']);
|
$multiple_bookings = intval($_data['multiple_bookings']);
|
||||||
|
$active = intval($_data['active']);
|
||||||
if (!filter_var($name, FILTER_VALIDATE_EMAIL)) {
|
if (!filter_var($name, FILTER_VALIDATE_EMAIL)) {
|
||||||
$_SESSION['return'] = array(
|
$_SESSION['return'] = array(
|
||||||
'type' => 'danger',
|
'type' => 'danger',
|
||||||
|
@ -961,7 +961,9 @@ function mailbox($_action, $_type, $_data = null, $attr = null) {
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (!isset($multiple_bookings) || $multiple_bookings < -1) {
|
||||||
|
$multiple_bookings = -1;
|
||||||
|
}
|
||||||
if ($kind != 'location' && $kind != 'group' && $kind != 'thing') {
|
if ($kind != 'location' && $kind != 'group' && $kind != 'thing') {
|
||||||
$_SESSION['return'] = array(
|
$_SESSION['return'] = array(
|
||||||
'type' => 'danger',
|
'type' => 'danger',
|
||||||
|
@ -2184,7 +2186,7 @@ function mailbox($_action, $_type, $_data = null, $attr = null) {
|
||||||
$is_now = mailbox('get', 'resource_details', $name);
|
$is_now = mailbox('get', 'resource_details', $name);
|
||||||
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'];
|
||||||
$multiple_bookings = (isset($_data['multiple_bookings'])) ? intval($_data['multiple_bookings']) : $is_now['multiple_bookings_int'];
|
$multiple_bookings = (isset($_data['multiple_bookings'])) ? intval($_data['multiple_bookings']) : $is_now['multiple_bookings'];
|
||||||
$description = (!empty($_data['description'])) ? $_data['description'] : $is_now['description'];
|
$description = (!empty($_data['description'])) ? $_data['description'] : $is_now['description'];
|
||||||
$kind = (!empty($_data['kind'])) ? $_data['kind'] : $is_now['kind'];
|
$kind = (!empty($_data['kind'])) ? $_data['kind'] : $is_now['kind'];
|
||||||
}
|
}
|
||||||
|
@ -2202,6 +2204,9 @@ function mailbox($_action, $_type, $_data = null, $attr = null) {
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (!isset($multiple_bookings) || $multiple_bookings < -1) {
|
||||||
|
$multiple_bookings = -1;
|
||||||
|
}
|
||||||
if (empty($description)) {
|
if (empty($description)) {
|
||||||
$_SESSION['return'] = array(
|
$_SESSION['return'] = array(
|
||||||
'type' => 'danger',
|
'type' => 'danger',
|
||||||
|
@ -3133,10 +3138,9 @@ function mailbox($_action, $_type, $_data = null, $attr = null) {
|
||||||
`username`,
|
`username`,
|
||||||
`name`,
|
`name`,
|
||||||
`kind`,
|
`kind`,
|
||||||
`multiple_bookings` AS `multiple_bookings_int`,
|
`multiple_bookings`,
|
||||||
`local_part`,
|
`local_part`,
|
||||||
`active` AS `active_int`,
|
`active` AS `active_int`,
|
||||||
CASE `multiple_bookings` WHEN 1 THEN '".$lang['mailbox']['yes']."' ELSE '".$lang['mailbox']['no']."' END AS `multiple_bookings`,
|
|
||||||
CASE `active` WHEN 1 THEN '".$lang['mailbox']['yes']."' ELSE '".$lang['mailbox']['no']."' END AS `active`,
|
CASE `active` WHEN 1 THEN '".$lang['mailbox']['yes']."' ELSE '".$lang['mailbox']['no']."' END AS `active`,
|
||||||
`domain`
|
`domain`
|
||||||
FROM `mailbox` WHERE `kind` REGEXP 'location|thing|group' AND `username` = :resource");
|
FROM `mailbox` WHERE `kind` REGEXP 'location|thing|group' AND `username` = :resource");
|
||||||
|
@ -3147,7 +3151,6 @@ function mailbox($_action, $_type, $_data = null, $attr = null) {
|
||||||
$resourcedata['name'] = $row['username'];
|
$resourcedata['name'] = $row['username'];
|
||||||
$resourcedata['kind'] = $row['kind'];
|
$resourcedata['kind'] = $row['kind'];
|
||||||
$resourcedata['multiple_bookings'] = $row['multiple_bookings'];
|
$resourcedata['multiple_bookings'] = $row['multiple_bookings'];
|
||||||
$resourcedata['multiple_bookings_int'] = $row['multiple_bookings_int'];
|
|
||||||
$resourcedata['description'] = $row['name'];
|
$resourcedata['description'] = $row['name'];
|
||||||
$resourcedata['active'] = $row['active'];
|
$resourcedata['active'] = $row['active'];
|
||||||
$resourcedata['active_int'] = $row['active_int'];
|
$resourcedata['active_int'] = $row['active_int'];
|
||||||
|
|
|
@ -3,7 +3,7 @@ function init_db_schema() {
|
||||||
try {
|
try {
|
||||||
global $pdo;
|
global $pdo;
|
||||||
|
|
||||||
$db_version = "06052018_1239";
|
$db_version = "06052018_1839";
|
||||||
|
|
||||||
$stmt = $pdo->query("SHOW TABLES LIKE 'versions'");
|
$stmt = $pdo->query("SHOW TABLES LIKE 'versions'");
|
||||||
$num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
|
$num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
|
||||||
|
@ -191,7 +191,7 @@ function init_db_schema() {
|
||||||
"domain" => "VARCHAR(255) NOT NULL",
|
"domain" => "VARCHAR(255) NOT NULL",
|
||||||
"attributes" => "JSON",
|
"attributes" => "JSON",
|
||||||
"kind" => "VARCHAR(100) NOT NULL DEFAULT ''",
|
"kind" => "VARCHAR(100) NOT NULL DEFAULT ''",
|
||||||
"multiple_bookings" => "TINYINT(1) NOT NULL DEFAULT '0'",
|
"multiple_bookings" => "INT NOT NULL DEFAULT -1",
|
||||||
"created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
|
"created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
|
||||||
"modified" => "DATETIME ON UPDATE CURRENT_TIMESTAMP",
|
"modified" => "DATETIME ON UPDATE CURRENT_TIMESTAMP",
|
||||||
"active" => "TINYINT(1) NOT NULL DEFAULT '1'"
|
"active" => "TINYINT(1) NOT NULL DEFAULT '1'"
|
||||||
|
|
|
@ -12,7 +12,22 @@ $(document).ready(function() {
|
||||||
});
|
});
|
||||||
$("#script_data").numberedtextarea({allowTabChar: true});
|
$("#script_data").numberedtextarea({allowTabChar: true});
|
||||||
});
|
});
|
||||||
|
if ($("#multiple_bookings_select").val() == "custom") {
|
||||||
|
$("#multiple_bookings_custom_div").show();
|
||||||
|
$("#multiple_bookings").val($("#multiple_bookings_custom").val());
|
||||||
|
}
|
||||||
|
$("#multiple_bookings_select").change(function() {
|
||||||
|
$("#multiple_bookings").val($("#multiple_bookings_select").val());
|
||||||
|
if ($("#multiple_bookings").val() == "custom") {
|
||||||
|
$("#multiple_bookings_custom_div").show();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$("#multiple_bookings_custom_div").hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$("#multiple_bookings_custom").bind("change keypress keyup blur", function() {
|
||||||
|
$("#multiple_bookings").val($("#multiple_bookings_custom").val());
|
||||||
|
});
|
||||||
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) {
|
||||||
|
|
|
@ -294,7 +294,7 @@ jQuery(function($){
|
||||||
{"sorted": true,"name":"description","title":lang.description,"style":{"width":"250px"}},
|
{"sorted": true,"name":"description","title":lang.description,"style":{"width":"250px"}},
|
||||||
{"name":"kind","title":lang.kind},
|
{"name":"kind","title":lang.kind},
|
||||||
{"name":"domain","title":lang.domain,"breakpoints":"xs sm"},
|
{"name":"domain","title":lang.domain,"breakpoints":"xs sm"},
|
||||||
{"name":"multiple_bookings","filterable": false,"style":{"maxWidth":"120px","width":"120px"},"title":lang.multiple_bookings,"breakpoints":"xs sm"},
|
{"name":"multiple_bookings","filterable": false,"style":{"maxWidth":"150px","width":"140px"},"title":lang.multiple_bookings,"breakpoints":"xs sm"},
|
||||||
{"name":"active","filterable": false,"style":{"maxWidth":"80px","width":"80px"},"title":lang.active},
|
{"name":"active","filterable": false,"style":{"maxWidth":"80px","width":"80px"},"title":lang.active},
|
||||||
{"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","maxWidth":"180px","width":"180px"},"type":"html","title":lang.action,"breakpoints":"xs sm"}
|
{"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","maxWidth":"180px","width":"180px"},"type":"html","title":lang.action,"breakpoints":"xs sm"}
|
||||||
],
|
],
|
||||||
|
@ -308,6 +308,13 @@ jQuery(function($){
|
||||||
},
|
},
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
$.each(data, function (i, item) {
|
$.each(data, function (i, item) {
|
||||||
|
if (item.multiple_bookings == '0') {
|
||||||
|
item.multiple_bookings = '<span id="active-script" class="label label-success">' + lang.booking_0_short + '</span>';
|
||||||
|
} else if (item.multiple_bookings == '-1') {
|
||||||
|
item.multiple_bookings = '<span id="active-script" class="label label-warning">' + lang.booking_lt0_short + '</span>';
|
||||||
|
} else {
|
||||||
|
item.multiple_bookings = '<span id="active-script" class="label label-danger">' + lang.booking_custom_short + ' (' + item.multiple_bookings + ')</span>';
|
||||||
|
}
|
||||||
item.action = '<div class="btn-group">' +
|
item.action = '<div class="btn-group">' +
|
||||||
'<a href="/edit.php?resource=' + encodeURIComponent(item.name) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' +
|
'<a href="/edit.php?resource=' + encodeURIComponent(item.name) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' +
|
||||||
'<a href="#" id="delete_selected" data-id="single-resource" data-api-url="delete/resource" data-item="' + item.name + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' +
|
'<a href="#" id="delete_selected" data-id="single-resource" data-api-url="delete/resource" data-item="' + item.name + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' +
|
||||||
|
|
|
@ -185,6 +185,12 @@ $lang['header']['mailcow_settings'] = 'Konfiguration';
|
||||||
$lang['header']['administration'] = 'Administration';
|
$lang['header']['administration'] = 'Administration';
|
||||||
$lang['header']['mailboxes'] = 'Mailboxen';
|
$lang['header']['mailboxes'] = 'Mailboxen';
|
||||||
$lang['header']['user_settings'] = 'Benutzereinstellungen';
|
$lang['header']['user_settings'] = 'Benutzereinstellungen';
|
||||||
|
$lang['mailbox']['booking_0'] = 'Immer als verfügbar anzeigen';
|
||||||
|
$lang['mailbox']['booking_lt0'] = 'Unbegrenzt, jedoch anzeigen, wenn gebucht';
|
||||||
|
$lang['mailbox']['booking_custom'] = 'Benutzerdefiniertes Limit';
|
||||||
|
$lang['mailbox']['booking_0_short'] = 'Immer verfügbar';
|
||||||
|
$lang['mailbox']['booking_lt0_short'] = 'Weiches Limit';
|
||||||
|
$lang['mailbox']['booking_custom_short'] = 'Hartes Limit';
|
||||||
$lang['mailbox']['domain'] = 'Domain';
|
$lang['mailbox']['domain'] = 'Domain';
|
||||||
$lang['mailbox']['spam_aliases'] = 'Temp. Alias';
|
$lang['mailbox']['spam_aliases'] = 'Temp. Alias';
|
||||||
$lang['mailbox']['alias'] = 'Alias';
|
$lang['mailbox']['alias'] = 'Alias';
|
||||||
|
|
|
@ -183,6 +183,12 @@ $lang['header']['mailcow_settings'] = 'Configuration';
|
||||||
$lang['header']['administration'] = 'Administration';
|
$lang['header']['administration'] = 'Administration';
|
||||||
$lang['header']['mailboxes'] = 'Mailboxes';
|
$lang['header']['mailboxes'] = 'Mailboxes';
|
||||||
$lang['header']['user_settings'] = 'User settings';
|
$lang['header']['user_settings'] = 'User settings';
|
||||||
|
$lang['mailbox']['booking_0'] = 'Always show as free';
|
||||||
|
$lang['mailbox']['booking_lt0'] = 'Unlimited, but show as busy when booked';
|
||||||
|
$lang['mailbox']['booking_custom'] = 'Hard-limit to a custom amount of bookings';
|
||||||
|
$lang['mailbox']['booking_0_short'] = 'Always free';
|
||||||
|
$lang['mailbox']['booking_lt0_short'] = 'Soft limit';
|
||||||
|
$lang['mailbox']['booking_custom_short'] = 'Hard limit';
|
||||||
$lang['mailbox']['domain'] = 'Domain';
|
$lang['mailbox']['domain'] = 'Domain';
|
||||||
$lang['mailbox']['spam_aliases'] = 'Temp. alias';
|
$lang['mailbox']['spam_aliases'] = 'Temp. alias';
|
||||||
$lang['mailbox']['multiple_bookings'] = 'Multiple bookings';
|
$lang['mailbox']['multiple_bookings'] = 'Multiple bookings';
|
||||||
|
|
|
@ -100,6 +100,12 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
|
||||||
<a class="btn btn-sm btn-success" href="#" data-toggle="modal" data-target="#addResourceModal"><span class="glyphicon glyphicon-plus"></span> <?=$lang['mailbox']['add_resource'];?></a>
|
<a class="btn btn-sm btn-success" href="#" data-toggle="modal" data-target="#addResourceModal"><span class="glyphicon glyphicon-plus"></span> <?=$lang['mailbox']['add_resource'];?></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="panel-body help-block">
|
||||||
|
<p><span class="label label-success"><?=$lang['mailbox']['booking_0_short'];?></span> - <?=$lang['mailbox']['booking_0'];?></p>
|
||||||
|
<p><span class="label label-warning"><?=$lang['mailbox']['booking_lt0_short'];?></span> - <?=$lang['mailbox']['booking_lt0'];?></p>
|
||||||
|
<p><span class="label label-danger"><?=$lang['mailbox']['booking_custom_short'];?></span> - <?=$lang['mailbox']['booking_custom'];?></p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -192,16 +192,24 @@ if (!isset($_SESSION['mailcow_cc_role'])) {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="col-sm-offset-2 col-sm-10">
|
<label class="control-label col-sm-2" for="multiple_bookings_select"><?=$lang['add']['multiple_bookings'];?>:</label>
|
||||||
<div class="checkbox">
|
<div class="col-sm-10">
|
||||||
<label><input type="checkbox" value="1" name="active" checked> <?=$lang['add']['active'];?></label>
|
<select name="multiple_bookings_select" id="multiple_bookings_select" title="<?=$lang['add']['select'];?>" required>
|
||||||
|
<option value="0"><?=$lang['mailbox']['booking_0'];?></option>
|
||||||
|
<option value="-1" selected><?=$lang['mailbox']['booking_lt0'];?></option>
|
||||||
|
<option value="custom"><?=$lang['mailbox']['booking_custom'];?></option>
|
||||||
|
</select>
|
||||||
|
<div style="display:none" id="multiple_bookings_custom_div">
|
||||||
|
<hr>
|
||||||
|
<input type="number" class="form-control" name="multiple_bookings_custom" id="multiple_bookings_custom">
|
||||||
</div>
|
</div>
|
||||||
|
<input type="hidden" name="multiple_bookings" id="multiple_bookings">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="col-sm-offset-2 col-sm-10">
|
<div class="col-sm-offset-2 col-sm-10">
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<label><input type="checkbox" value="1" name="multiple_bookings" checked> <?=$lang['add']['multiple_bookings'];?></label>
|
<label><input type="checkbox" value="1" name="active" checked> <?=$lang['add']['active'];?></label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -657,3 +665,24 @@ if (!isset($_SESSION['mailcow_cc_role'])) {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div><!-- DNS info modal -->
|
</div><!-- DNS info modal -->
|
||||||
|
<script>
|
||||||
|
$('#addResourceModal').on('shown.bs.modal', function() {
|
||||||
|
$("#multiple_bookings").val($("#multiple_bookings_select").val());
|
||||||
|
if ($("#multiple_bookings").val() == "custom") {
|
||||||
|
$("#multiple_bookings_custom_div").show();
|
||||||
|
$("#multiple_bookings").val($("#multiple_bookings_custom").val());
|
||||||
|
}
|
||||||
|
})
|
||||||
|
$("#multiple_bookings_select").change(function() {
|
||||||
|
$("#multiple_bookings").val($("#multiple_bookings_select").val());
|
||||||
|
if ($("#multiple_bookings").val() == "custom") {
|
||||||
|
$("#multiple_bookings_custom_div").show();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$("#multiple_bookings_custom_div").hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$("#multiple_bookings_custom").bind ("change keypress keyup blur", function () {
|
||||||
|
$("#multiple_bookings").val($("#multiple_bookings_custom").val());
|
||||||
|
});
|
||||||
|
</script>
|
Loading…
Reference in New Issue