2017-05-27 05:02:04 +08:00
$ ( document ) . ready ( function ( ) {
// Auto-fill domain quota when adding new domain
auto _fill _quota = function ( domain ) {
$ . get ( "/api/v1/get/domain/" + domain , function ( data ) {
var result = $ . parseJSON ( JSON . stringify ( data ) ) ;
max _new _mailbox _quota = ( result . max _new _mailbox _quota / 1048576 ) ;
if ( max _new _mailbox _quota != '0' ) {
$ ( "#quotaBadge" ) . html ( 'max. ' + max _new _mailbox _quota + ' MiB' ) ;
$ ( '#addInputQuota' ) . attr ( { "disabled" : false , "value" : "" , "type" : "number" , "max" : max _new _mailbox _quota } ) ;
$ ( '#addInputQuota' ) . val ( max _new _mailbox _quota ) ;
}
else {
$ ( "#quotaBadge" ) . html ( 'max. ' + max _new _mailbox _quota + ' MiB' ) ;
$ ( '#addInputQuota' ) . attr ( { "disabled" : true , "value" : "" , "type" : "text" , "value" : "n/a" } ) ;
$ ( '#addInputQuota' ) . val ( max _new _mailbox _quota ) ;
}
} ) ;
}
$ ( '#addSelectDomain' ) . on ( 'change' , function ( ) {
auto _fill _quota ( $ ( '#addSelectDomain' ) . val ( ) ) ;
} ) ;
auto _fill _quota ( $ ( '#addSelectDomain' ) . val ( ) ) ;
2017-06-16 14:52:41 +08:00
$ ( ".generate_password" ) . click ( function ( event ) {
event . preventDefault ( ) ;
var random _passwd = Math . random ( ) . toString ( 36 ) . slice ( - 8 )
$ ( '#password' ) . prop ( 'type' , 'text' ) ;
$ ( '#password' ) . val ( random _passwd ) ;
$ ( '#password2' ) . prop ( 'type' , 'text' ) ;
$ ( '#password2' ) . val ( random _passwd ) ;
} ) ;
2017-05-27 05:02:04 +08:00
2017-09-15 15:05:51 +08:00
$ ( "#goto_null" ) . click ( function ( event ) {
if ( $ ( "#goto_null" ) . is ( ":checked" ) ) {
$ ( '#textarea_alias_goto' ) . prop ( 'disabled' , true ) ;
}
else {
$ ( "#textarea_alias_goto" ) . removeAttr ( 'disabled' ) ;
}
} ) ;
2017-07-29 16:32:17 +08:00
// Log modal
2017-11-04 03:37:24 +08:00
$ ( '#syncjobLogModal' ) . on ( 'show.bs.modal' , function ( e ) {
var syncjob _id = $ ( e . relatedTarget ) . data ( 'syncjob-id' ) ;
$ . ajax ( {
url : '/inc/ajax/syncjob_logs.php' ,
data : { id : syncjob _id } ,
dataType : 'text' ,
success : function ( data ) {
$ ( e . currentTarget ) . find ( '#logText' ) . text ( data ) ;
} ,
error : function ( xhr , status , error ) {
$ ( e . currentTarget ) . find ( '#logText' ) . text ( xhr . responseText ) ;
}
} ) ;
} ) ;
2018-01-02 17:24:48 +08:00
// Log modal
$ ( '#dnsInfoModal' ) . on ( 'show.bs.modal' , function ( e ) {
var domain = $ ( e . relatedTarget ) . data ( 'domain' ) ;
2018-01-03 01:17:27 +08:00
$ ( '.dns-modal-body' ) . html ( '<center><span style="font-size:18pt;margin:50px" class="glyphicon glyphicon-refresh glyphicon-spin"></span></center>' ) ;
2018-01-02 17:24:48 +08:00
$ . ajax ( {
url : '/inc/ajax/dns_diagnostics.php' ,
data : { domain : domain } ,
dataType : 'text' ,
success : function ( data ) {
$ ( '.dns-modal-body' ) . html ( data ) ;
} ,
error : function ( xhr , status , error ) {
$ ( '.dns-modal-body' ) . html ( xhr . responseText ) ;
}
} ) ;
} ) ;
2017-11-04 03:37:24 +08:00
// Sieve data modal
$ ( '#sieveDataModal' ) . on ( 'show.bs.modal' , function ( e ) {
var sieveScript = $ ( e . relatedTarget ) . data ( 'sieve-script' ) ;
$ ( e . currentTarget ) . find ( '#sieveDataText' ) . html ( '<pre style="font-size:14px;line-height:1.1">' + sieveScript + '</pre>' ) ;
} ) ;
// Set line numbers for textarea
$ ( "#script_data" ) . numberedtextarea ( { allowTabChar : true } ) ;
// Disable submit button on script change
$ ( '#script_data' ) . on ( 'keyup' , function ( ) {
$ ( '#add_filter_btns > #add_item' ) . attr ( { "disabled" : true } ) ;
$ ( '#validation_msg' ) . html ( '-' ) ;
} ) ;
// Validate script data
$ ( "#validate_sieve" ) . click ( function ( event ) {
event . preventDefault ( ) ;
var script = $ ( '#script_data' ) . val ( ) ;
$ . ajax ( {
dataType : 'jsonp' ,
url : "/inc/ajax/sieve_validation.php" ,
type : "get" ,
data : { script : script } ,
complete : function ( data ) {
var response = ( data . responseText ) ;
response _obj = JSON . parse ( response ) ;
if ( response _obj . type == "success" ) {
$ ( '#add_filter_btns > #add_item' ) . attr ( { "disabled" : false } ) ;
}
mailcow _alert _box ( response _obj . msg , response _obj . type ) ;
} ,
} ) ;
2017-07-29 16:32:17 +08:00
} ) ;
2017-11-04 03:37:24 +08:00
// $(document).on('DOMNodeInserted', '#prefilter_table', function () {
// $("#active-script").closest('td').css('background-color','#b0f0a0');
// $("#inactive-script").closest('td').css('background-color','#b0f0a0');
// });
2017-07-29 16:32:17 +08:00
} ) ;
2017-05-12 05:10:32 +08:00
jQuery ( function ( $ ) {
2017-07-29 16:32:17 +08:00
// http://stackoverflow.com/questions/24816/escaping-html-strings-with-jquery
var entityMap = {
'&' : '&' ,
'<' : '<' ,
'>' : '>' ,
'"' : '"' ,
"'" : ''' ,
'/' : '/' ,
'`' : '`' ,
'=' : '='
} ;
function escapeHtml ( string ) {
return String ( string ) . replace ( /[&<>"'`=\/]/g , function ( s ) {
return entityMap [ s ] ;
} ) ;
}
// http://stackoverflow.com/questions/46155/validate-email-address-in-javascript
function validateEmail ( email ) {
var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ ;
return re . test ( email ) ;
}
2017-05-12 05:10:32 +08:00
// Calculation human readable file sizes
2017-03-21 15:11:06 +08:00
function humanFileSize ( bytes ) {
if ( Math . abs ( bytes ) < 1024 ) {
return bytes + ' B' ;
}
var units = [ 'KiB' , 'MiB' , 'GiB' , 'TiB' , 'PiB' , 'EiB' , 'ZiB' , 'YiB' ] ;
var u = - 1 ;
do {
bytes /= 1024 ;
++ u ;
} while ( Math . abs ( bytes ) >= 1024 && u < units . length - 1 ) ;
return bytes . toFixed ( 1 ) + ' ' + units [ u ] ;
}
2017-05-12 05:10:32 +08:00
function unix _time _format ( tm ) {
var date = new Date ( tm ? tm * 1000 : 0 ) ;
return date . toLocaleString ( ) ;
}
function draw _domain _table ( ) {
ft _domain _table = FooTable . init ( '#domain_table' , {
"columns" : [
2017-11-04 03:37:24 +08:00
{ "name" : "chkbox" , "title" : "" , "style" : { "maxWidth" : "60px" , "width" : "60px" } , "filterable" : false , "sortable" : false , "type" : "html" } ,
2017-05-12 05:10:32 +08:00
{ "sorted" : true , "name" : "domain_name" , "title" : lang . domain , "style" : { "width" : "250px" } } ,
{ "name" : "aliases" , "title" : lang . aliases , "breakpoints" : "xs sm" } ,
{ "name" : "mailboxes" , "title" : lang . mailboxes } ,
{ "name" : "quota" , "style" : { "whiteSpace" : "nowrap" } , "title" : lang . domain _quota , "formatter" : function ( value ) {
res = value . split ( "/" ) ;
return humanFileSize ( res [ 0 ] ) + " / " + humanFileSize ( res [ 1 ] ) ;
2017-03-21 15:11:06 +08:00
} ,
2017-05-12 05:10:32 +08:00
"sortValue" : function ( value ) {
res = value . split ( "/" ) ;
2018-02-27 22:45:08 +08:00
return Number ( res [ 0 ] ) ;
2017-03-21 15:11:06 +08:00
} ,
} ,
2018-07-13 17:02:46 +08:00
{ "name" : "max_quota_for_mbox" , "title" : lang . mailbox _quota , "breakpoints" : "xs sm" , "style" : { "width" : "125px" } } ,
2017-05-12 05:10:32 +08:00
{ "name" : "backupmx" , "filterable" : false , "style" : { "maxWidth" : "120px" , "width" : "120px" } , "title" : lang . backup _mx , "breakpoints" : "xs sm" } ,
{ "name" : "active" , "filterable" : false , "style" : { "maxWidth" : "80px" , "width" : "80px" } , "title" : lang . active } ,
2018-01-02 17:24:48 +08:00
{ "name" : "action" , "filterable" : false , "sortable" : false , "style" : { "text-align" : "right" , "maxWidth" : "240px" , "width" : "240px" } , "type" : "html" , "title" : lang . action , "breakpoints" : "xs sm" }
2017-05-12 05:10:32 +08:00
] ,
"rows" : $ . ajax ( {
dataType : 'json' ,
url : '/api/v1/get/domain/all' ,
jsonp : false ,
2017-05-13 14:55:34 +08:00
error : function ( data ) {
console . log ( 'Cannot draw domain table' ) ;
2017-03-21 15:11:06 +08:00
} ,
2017-05-12 05:10:32 +08:00
success : function ( data ) {
$ . each ( data , function ( i , item ) {
item . aliases = item . aliases _in _domain + " / " + item . max _num _aliases _for _domain ;
item . mailboxes = item . mboxes _in _domain + " / " + item . max _num _mboxes _for _domain ;
item . quota = item . quota _used _in _domain + "/" + item . max _quota _for _domain ;
item . max _quota _for _mbox = humanFileSize ( item . max _quota _for _mbox ) ;
2018-02-11 04:00:00 +08:00
item . chkbox = '<input type="checkbox" data-id="domain" name="multi_select" value="' + encodeURIComponent ( item . domain _name ) + '" />' ;
2018-01-02 17:24:48 +08:00
item . action = '<div class="btn-group">' ;
2017-05-12 05:10:32 +08:00
if ( role == "admin" ) {
2018-02-11 04:00:00 +08:00
item . action += '<a href="/edit.php?domain=' + encodeURIComponent ( item . domain _name ) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang . edit + '</a>' +
'<a href="#" id="delete_selected" data-id="single-domain" data-api-url="delete/domain" data-item="' + encodeURIComponent ( item . domain _name ) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang . remove + '</a>' ;
2017-05-12 05:10:32 +08:00
}
else {
2018-02-11 04:00:00 +08:00
item . action += '<a href="/edit.php?domain=' + encodeURIComponent ( item . domain _name ) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang . edit + '</a>' ;
2017-05-12 05:10:32 +08:00
}
2018-02-11 04:00:00 +08:00
item . action += '<a href="#dnsInfoModal" class="btn btn-xs btn-info" data-toggle="modal" data-domain="' + encodeURIComponent ( item . domain _name ) + '"><span class="glyphicon glyphicon-question-sign"></span> DNS</a></div>' ;
2017-05-12 05:10:32 +08:00
} ) ;
2017-03-21 15:11:06 +08:00
}
2017-05-12 05:10:32 +08:00
} ) ,
"empty" : lang . empty ,
"paging" : {
"enabled" : true ,
"limit" : 5 ,
"size" : pagination _size
} ,
"filtering" : {
"enabled" : true ,
"position" : "left" ,
2017-12-21 04:15:43 +08:00
"connectors" : false ,
2017-05-12 05:10:32 +08:00
"placeholder" : lang . filter _table
} ,
"sorting" : {
"enabled" : true
}
} ) ;
}
function draw _mailbox _table ( ) {
ft _mailbox _table = FooTable . init ( '#mailbox_table' , {
"columns" : [
2017-11-04 03:37:24 +08:00
{ "name" : "chkbox" , "title" : "" , "style" : { "maxWidth" : "60px" , "width" : "60px" } , "filterable" : false , "sortable" : false , "type" : "html" } ,
2017-05-12 05:10:32 +08:00
{ "sorted" : true , "name" : "username" , "style" : { "word-break" : "break-all" , "min-width" : "120px" } , "title" : lang . username } ,
{ "name" : "name" , "title" : lang . fname , "style" : { "word-break" : "break-all" , "min-width" : "120px" } , "breakpoints" : "xs sm" } ,
{ "name" : "domain" , "title" : lang . domain , "breakpoints" : "xs sm" } ,
{ "name" : "quota" , "style" : { "whiteSpace" : "nowrap" } , "title" : lang . domain _quota , "formatter" : function ( value ) {
res = value . split ( "/" ) ;
return humanFileSize ( res [ 0 ] ) + " / " + humanFileSize ( res [ 1 ] ) ;
2017-03-21 17:02:23 +08:00
} ,
2017-05-12 05:10:32 +08:00
"sortValue" : function ( value ) {
res = value . split ( "/" ) ;
2018-02-27 22:45:08 +08:00
return Number ( res [ 0 ] ) ;
2017-03-21 17:02:23 +08:00
} ,
} ,
2017-05-12 05:10:32 +08:00
{ "name" : "spam_aliases" , "filterable" : false , "title" : lang . spam _aliases , "breakpoints" : "xs sm md" } ,
2018-06-01 20:19:42 +08:00
{ "name" : "in_use" , "filterable" : false , "type" : "html" , "title" : lang . in _use , "sortValue" : function ( value ) {
2018-06-01 20:32:27 +08:00
return Number ( $ ( value ) . find ( ".progress-bar" ) . attr ( 'aria-valuenow' ) ) ;
2018-06-01 20:19:42 +08:00
} ,
} ,
2017-05-12 05:10:32 +08:00
{ "name" : "messages" , "filterable" : false , "title" : lang . msg _num , "breakpoints" : "xs sm md" } ,
{ "name" : "active" , "filterable" : false , "title" : lang . active } ,
{ "name" : "action" , "filterable" : false , "sortable" : false , "style" : { "text-align" : "right" , "min-width" : "250px" } , "type" : "html" , "title" : lang . action , "breakpoints" : "xs sm md" }
] ,
"empty" : lang . empty ,
"rows" : $ . ajax ( {
dataType : 'json' ,
url : '/api/v1/get/mailbox/all' ,
jsonp : false ,
error : function ( ) {
2017-05-13 14:55:34 +08:00
console . log ( 'Cannot draw mailbox table' ) ;
2017-03-21 17:02:23 +08:00
} ,
2017-05-12 05:10:32 +08:00
success : function ( data ) {
$ . each ( data , function ( i , item ) {
item . quota = item . quota _used + "/" + item . quota ;
item . max _quota _for _mbox = humanFileSize ( item . max _quota _for _mbox ) ;
2018-02-11 04:00:00 +08:00
item . chkbox = '<input type="checkbox" data-id="mailbox" name="multi_select" value="' + encodeURIComponent ( item . username ) + '" />' ;
2017-05-12 05:10:32 +08:00
if ( role == "admin" ) {
item . action = '<div class="btn-group">' +
2018-02-11 04:00:00 +08:00
'<a href="/edit.php?mailbox=' + encodeURIComponent ( item . username ) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang . edit + '</a>' +
'<a href="#" id="delete_selected" data-id="single-mailbox" data-api-url="delete/mailbox" data-item="' + encodeURIComponent ( item . username ) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang . remove + '</a>' +
'<a href="/index.php?duallogin=' + encodeURIComponent ( item . username ) + '" class="btn btn-xs btn-success"><span class="glyphicon glyphicon-user"></span> Login</a>' +
2017-05-12 05:10:32 +08:00
'</div>' ;
}
else {
item . action = '<div class="btn-group">' +
2018-02-11 04:00:00 +08:00
'<a href="/edit.php?mailbox=' + encodeURIComponent ( item . username ) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang . edit + '</a>' +
'<a href="#" id="delete_selected" data-id="single-mailbox" data-api-url="delete/mailbox" data-item="' + encodeURIComponent ( item . username ) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang . remove + '</a>' +
2017-05-12 05:10:32 +08:00
'</div>' ;
}
item . in _use = '<div class="progress">' +
'<div class="progress-bar progress-bar-' + item . percent _class + ' role="progressbar" aria-valuenow="' + item . percent _in _use + '" aria-valuemin="0" aria-valuemax="100" ' +
'style="min-width:2em;width:' + item . percent _in _use + '%">' + item . percent _in _use + '%' + '</div></div>' ;
2018-02-11 05:42:46 +08:00
item . username = escapeHtml ( item . username ) ;
2017-05-12 05:10:32 +08:00
} ) ;
2017-04-24 19:13:23 +08:00
}
2017-05-12 05:10:32 +08:00
} ) ,
"paging" : {
"enabled" : true ,
"limit" : 5 ,
"size" : pagination _size
} ,
"filtering" : {
"enabled" : true ,
"position" : "left" ,
2017-12-21 04:15:43 +08:00
"connectors" : false ,
2017-05-12 05:10:32 +08:00
"placeholder" : lang . filter _table
} ,
"sorting" : {
"enabled" : true
}
} ) ;
}
function draw _resource _table ( ) {
ft _resource _table = FooTable . init ( '#resource_table' , {
"columns" : [
2017-11-04 03:37:24 +08:00
{ "name" : "chkbox" , "title" : "" , "style" : { "maxWidth" : "60px" , "width" : "60px" } , "filterable" : false , "sortable" : false , "type" : "html" } ,
2017-05-12 05:10:32 +08:00
{ "sorted" : true , "name" : "description" , "title" : lang . description , "style" : { "width" : "250px" } } ,
{ "name" : "kind" , "title" : lang . kind } ,
{ "name" : "domain" , "title" : lang . domain , "breakpoints" : "xs sm" } ,
2018-05-07 03:51:00 +08:00
{ "name" : "multiple_bookings" , "filterable" : false , "style" : { "maxWidth" : "150px" , "width" : "140px" } , "title" : lang . multiple _bookings , "breakpoints" : "xs sm" } ,
2017-05-12 05:10:32 +08:00
{ "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" }
] ,
"empty" : lang . empty ,
"rows" : $ . ajax ( {
dataType : 'json' ,
url : '/api/v1/get/resource/all' ,
jsonp : false ,
error : function ( ) {
2017-05-13 14:55:34 +08:00
console . log ( 'Cannot draw resource table' ) ;
2017-03-21 17:02:23 +08:00
} ,
2017-05-12 05:10:32 +08:00
success : function ( data ) {
$ . each ( data , function ( i , item ) {
2018-05-07 03:51:00 +08:00
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>' ;
}
2017-05-12 05:10:32 +08:00
item . action = '<div class="btn-group">' +
2018-02-11 04:00:00 +08:00
'<a href="/edit.php?resource=' + encodeURIComponent ( item . name ) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang . edit + '</a>' +
2018-03-09 03:46:43 +08:00
'<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>' +
2017-05-12 05:10:32 +08:00
'</div>' ;
2018-02-11 04:00:00 +08:00
item . chkbox = '<input type="checkbox" data-id="resource" name="multi_select" value="' + encodeURIComponent ( item . name ) + '" />' ;
2018-02-11 05:42:46 +08:00
item . name = escapeHtml ( item . name ) ;
2017-04-27 15:49:04 +08:00
} ) ;
}
2017-05-12 05:10:32 +08:00
} ) ,
"paging" : {
"enabled" : true ,
"limit" : 5 ,
"size" : pagination _size
} ,
"filtering" : {
"enabled" : true ,
"position" : "left" ,
2017-12-21 04:15:43 +08:00
"connectors" : false ,
2017-05-12 05:10:32 +08:00
"placeholder" : lang . filter _table
} ,
"sorting" : {
"enabled" : true
}
} ) ;
}
2017-11-19 22:13:43 +08:00
function draw _bcc _table ( ) {
ft _bcc _table = FooTable . init ( '#bcc_table' , {
"columns" : [
{ "name" : "chkbox" , "title" : "" , "style" : { "maxWidth" : "60px" , "width" : "60px" } , "filterable" : false , "sortable" : false , "type" : "html" } ,
{ "sorted" : true , "name" : "id" , "title" : "ID" , "style" : { "maxWidth" : "60px" , "width" : "60px" , "text-align" : "center" } } ,
2017-12-09 20:17:15 +08:00
{ "name" : "type" , "title" : lang . bcc _type } ,
{ "name" : "local_dest" , "title" : lang . bcc _local _dest } ,
{ "name" : "bcc_dest" , "title" : lang . bcc _destinations } ,
2017-11-19 22:13:43 +08:00
{ "name" : "domain" , "title" : lang . domain , "breakpoints" : "xs sm" } ,
{ "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" }
] ,
"empty" : lang . empty ,
"rows" : $ . ajax ( {
dataType : 'json' ,
url : '/api/v1/get/bcc/all' ,
jsonp : false ,
error : function ( ) {
console . log ( 'Cannot draw bcc table' ) ;
} ,
success : function ( data ) {
$ . each ( data , function ( i , item ) {
item . action = '<div class="btn-group">' +
'<a href="/edit.php?bcc=' + item . id + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang . edit + '</a>' +
'<a href="#" id="delete_selected" data-id="single-bcc" data-api-url="delete/bcc" data-item="' + item . id + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang . remove + '</a>' +
'</div>' ;
item . chkbox = '<input type="checkbox" data-id="bcc" name="multi_select" value="' + item . id + '" />' ;
2018-02-11 01:16:01 +08:00
item . local _dest = escapeHtml ( item . local _dest ) ;
item . bcc _dest = escapeHtml ( item . bcc _dest ) ;
2017-11-19 22:13:43 +08:00
if ( item . type == 'sender' ) {
item . type = '<span id="active-script" class="label label-success">Sender</span>' ;
} else {
item . type = '<span id="inactive-script" class="label label-warning">Recipient</span>' ;
}
} ) ;
}
} ) ,
"paging" : {
"enabled" : true ,
"limit" : 5 ,
"size" : pagination _size
} ,
"filtering" : {
"enabled" : true ,
"position" : "left" ,
2017-12-21 04:15:43 +08:00
"connectors" : false ,
2017-11-19 22:13:43 +08:00
"placeholder" : lang . filter _table
} ,
"sorting" : {
"enabled" : true
}
} ) ;
}
2018-01-24 02:59:06 +08:00
function draw _recipient _map _table ( ) {
ft _recipient _map _table = FooTable . init ( '#recipient_map_table' , {
"columns" : [
{ "name" : "chkbox" , "title" : "" , "style" : { "maxWidth" : "60px" , "width" : "60px" } , "filterable" : false , "sortable" : false , "type" : "html" } ,
{ "sorted" : true , "name" : "id" , "title" : "ID" , "style" : { "maxWidth" : "60px" , "width" : "60px" , "text-align" : "center" } } ,
{ "name" : "recipient_map_old" , "title" : lang . recipient _map _old } ,
{ "name" : "recipient_map_new" , "title" : lang . recipient _map _new } ,
{ "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" : ( role == "admin" ? lang . action : "" ) , "breakpoints" : "xs sm" }
] ,
"empty" : lang . empty ,
"rows" : $ . ajax ( {
dataType : 'json' ,
url : '/api/v1/get/recipient_map/all' ,
jsonp : false ,
error : function ( ) {
console . log ( 'Cannot draw recipient map table' ) ;
} ,
success : function ( data ) {
if ( role == "admin" ) {
$ . each ( data , function ( i , item ) {
2018-02-11 01:16:01 +08:00
item . recipient _map _old = escapeHtml ( item . recipient _map _old ) ;
item . recipient _map _new = escapeHtml ( item . recipient _map _new ) ;
2018-01-24 02:59:06 +08:00
item . action = '<div class="btn-group">' +
'<a href="/edit.php?recipient_map=' + item . id + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang . edit + '</a>' +
'<a href="#" id="delete_selected" data-id="single-recipient_map" data-api-url="delete/recipient_map" data-item="' + item . id + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang . remove + '</a>' +
'</div>' ;
item . chkbox = '<input type="checkbox" data-id="recipient_map" name="multi_select" value="' + item . id + '" />' ;
} ) ;
}
}
} ) ,
"paging" : {
"enabled" : true ,
"limit" : 5 ,
"size" : pagination _size
} ,
"filtering" : {
"enabled" : true ,
"position" : "left" ,
"connectors" : false ,
"placeholder" : lang . filter _table
} ,
"sorting" : {
"enabled" : true
}
} ) ;
}
2017-05-12 05:10:32 +08:00
function draw _alias _table ( ) {
ft _alias _table = FooTable . init ( '#alias_table' , {
"columns" : [
2017-11-04 03:37:24 +08:00
{ "name" : "chkbox" , "title" : "" , "style" : { "maxWidth" : "60px" , "width" : "60px" } , "filterable" : false , "sortable" : false , "type" : "html" } ,
2017-05-12 05:10:32 +08:00
{ "sorted" : true , "name" : "address" , "title" : lang . alias , "style" : { "width" : "250px" } } ,
{ "name" : "goto" , "title" : lang . target _address } ,
{ "name" : "domain" , "title" : lang . domain , "breakpoints" : "xs sm" } ,
{ "name" : "active" , "filterable" : false , "style" : { "maxWidth" : "50px" , "width" : "70px" } , "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" }
] ,
"empty" : lang . empty ,
"rows" : $ . ajax ( {
dataType : 'json' ,
url : '/api/v1/get/alias/all' ,
jsonp : false ,
error : function ( ) {
2017-05-13 14:55:34 +08:00
console . log ( 'Cannot draw alias table' ) ;
2017-05-12 05:10:32 +08:00
} ,
success : function ( data ) {
$ . each ( data , function ( i , item ) {
item . action = '<div class="btn-group">' +
2018-02-11 04:00:00 +08:00
'<a href="/edit.php?alias=' + encodeURIComponent ( item . address ) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang . edit + '</a>' +
'<a href="#" id="delete_selected" data-id="single-alias" data-api-url="delete/alias" data-item="' + encodeURIComponent ( item . address ) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang . remove + '</a>' +
2017-05-12 05:10:32 +08:00
'</div>' ;
2018-02-11 04:00:00 +08:00
item . chkbox = '<input type="checkbox" data-id="alias" name="multi_select" value="' + encodeURIComponent ( item . address ) + '" />' ;
2018-06-08 16:26:19 +08:00
item . goto = escapeHtml ( item . goto . replace ( /,/g , " " ) ) ;
2017-05-12 05:10:32 +08:00
if ( item . is _catch _all == 1 ) {
2018-02-11 04:00:00 +08:00
item . address = '<div class="label label-default">Catch-All</div> ' + escapeHtml ( item . address ) ;
2017-05-12 05:10:32 +08:00
}
2018-02-11 05:42:46 +08:00
else {
item . address = escapeHtml ( item . address ) ;
}
2017-09-15 15:05:51 +08:00
if ( item . goto == "null@localhost" ) {
item . goto = '⤷ <span style="font-size:12px" class="glyphicon glyphicon-trash" aria-hidden="true"></span>' ;
}
2017-05-12 05:10:32 +08:00
if ( item . in _primary _domain !== "" ) {
item . domain = "↳ " + item . domain + " (" + item . in _primary _domain + ")" ;
2017-04-27 15:49:04 +08:00
}
} ) ;
}
2017-05-12 05:10:32 +08:00
} ) ,
"paging" : {
"enabled" : true ,
"limit" : 5 ,
"size" : pagination _size
} ,
"filtering" : {
"enabled" : true ,
"position" : "left" ,
2017-12-21 04:15:43 +08:00
"connectors" : false ,
2017-05-12 05:10:32 +08:00
"placeholder" : lang . filter _table
} ,
"sorting" : {
"enabled" : true
}
} ) ;
}
2017-04-27 17:58:20 +08:00
2017-05-12 05:10:32 +08:00
function draw _aliasdomain _table ( ) {
ft _aliasdomain _table = FooTable . init ( '#aliasdomain_table' , {
"columns" : [
2017-11-04 03:37:24 +08:00
{ "name" : "chkbox" , "title" : "" , "style" : { "maxWidth" : "60px" , "width" : "60px" } , "filterable" : false , "sortable" : false , "type" : "html" } ,
2017-05-12 05:10:32 +08:00
{ "sorted" : true , "name" : "alias_domain" , "title" : lang . alias , "style" : { "width" : "250px" } } ,
{ "name" : "target_domain" , "title" : lang . target _domain } ,
{ "name" : "active" , "filterable" : false , "style" : { "maxWidth" : "50px" , "width" : "70px" } , "title" : lang . active } ,
2018-01-03 01:17:27 +08:00
{ "name" : "action" , "filterable" : false , "sortable" : false , "style" : { "text-align" : "right" , "maxWidth" : "250px" , "width" : "250px" } , "type" : "html" , "title" : lang . action , "breakpoints" : "xs sm" }
2017-05-12 05:10:32 +08:00
] ,
"empty" : lang . empty ,
"rows" : $ . ajax ( {
dataType : 'json' ,
url : '/api/v1/get/alias-domain/all' ,
jsonp : false ,
error : function ( ) {
2017-05-13 14:55:34 +08:00
console . log ( 'Cannot draw alias domain table' ) ;
2017-05-12 05:10:32 +08:00
} ,
success : function ( data ) {
$ . each ( data , function ( i , item ) {
item . action = '<div class="btn-group">' +
2018-02-11 04:00:00 +08:00
'<a href="/edit.php?aliasdomain=' + encodeURIComponent ( item . alias _domain ) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang . edit + '</a>' +
'<a href="#" id="delete_selected" data-id="single-alias-domain" data-api-url="delete/alias-domain" data-item="' + encodeURIComponent ( item . alias _domain ) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang . remove + '</a>' +
'<a href="#dnsInfoModal" class="btn btn-xs btn-info" data-toggle="modal" data-domain="' + encodeURIComponent ( item . alias _domain ) + '"><span class="glyphicon glyphicon-question-sign"></span> DNS</a></div>' +
2017-05-12 05:10:32 +08:00
'</div>' ;
2018-02-11 04:00:00 +08:00
item . chkbox = '<input type="checkbox" data-id="alias-domain" name="multi_select" value="' + encodeURIComponent ( item . alias _domain ) + '" />' ;
2017-05-12 05:10:32 +08:00
} ) ;
2017-04-27 15:49:04 +08:00
}
2017-05-12 05:10:32 +08:00
} ) ,
"paging" : {
"enabled" : true ,
"limit" : 5 ,
"size" : pagination _size
} ,
"filtering" : {
"enabled" : true ,
"position" : "left" ,
2017-12-21 04:15:43 +08:00
"connectors" : false ,
2017-05-12 05:10:32 +08:00
"placeholder" : lang . filter _table
} ,
"sorting" : {
"enabled" : true
}
} ) ;
}
2017-04-27 15:49:04 +08:00
2017-07-29 16:32:17 +08:00
function draw _sync _job _table ( ) {
ft _syncjob _table = FooTable . init ( '#sync_job_table' , {
"columns" : [
2017-11-04 03:37:24 +08:00
{ "name" : "chkbox" , "title" : "" , "style" : { "maxWidth" : "60px" , "width" : "60px" , "text-align" : "center" } , "filterable" : false , "sortable" : false , "type" : "html" } ,
2017-07-29 16:32:17 +08:00
{ "sorted" : true , "name" : "id" , "title" : "ID" , "style" : { "maxWidth" : "60px" , "width" : "60px" , "text-align" : "center" } } ,
{ "name" : "user2" , "title" : lang . owner } ,
{ "name" : "server_w_port" , "title" : "Server" , "breakpoints" : "xs" } ,
2017-12-31 22:26:11 +08:00
{ "name" : "exclude" , "title" : lang . excludes , "breakpoints" : "all" } ,
2017-07-29 16:32:17 +08:00
{ "name" : "mins_interval" , "title" : lang . mins _interval , "breakpoints" : "all" } ,
{ "name" : "last_run" , "title" : lang . last _run , "breakpoints" : "all" } ,
{ "name" : "log" , "title" : "Log" } ,
2017-11-08 18:07:32 +08:00
{ "name" : "active" , "filterable" : false , "style" : { "maxWidth" : "70px" , "width" : "70px" } , "title" : lang . active } ,
{ "name" : "is_running" , "filterable" : false , "style" : { "maxWidth" : "120px" , "width" : "100px" } , "title" : lang . status } ,
2017-07-29 16:32:17 +08:00
{ "name" : "action" , "filterable" : false , "sortable" : false , "style" : { "text-align" : "right" , "maxWidth" : "180px" , "width" : "180px" } , "type" : "html" , "title" : lang . action , "breakpoints" : "xs sm" }
] ,
"empty" : lang . empty ,
"rows" : $ . ajax ( {
dataType : 'json' ,
2017-11-04 03:37:24 +08:00
url : '/api/v1/get/syncjobs/all/no_log' ,
2017-07-29 16:32:17 +08:00
jsonp : false ,
error : function ( ) {
console . log ( 'Cannot draw sync job table' ) ;
} ,
success : function ( data ) {
$ . each ( data , function ( i , item ) {
2018-02-11 04:00:00 +08:00
item . log = '<a href="#syncjobLogModal" data-toggle="modal" data-syncjob-id="' + encodeURIComponent ( item . id ) + '">Open logs</a>'
2018-02-11 01:16:01 +08:00
item . user2 = escapeHtml ( item . user2 ) ;
2017-12-31 22:26:11 +08:00
if ( ! item . exclude > 0 ) {
item . exclude = '-' ;
} else {
item . exclude = '<code>' + item . exclude + '</code>' ;
}
2018-02-11 05:42:46 +08:00
item . server _w _port = escapeHtml ( item . user1 ) + '@' + item . host1 + ':' + item . port1 ;
2017-07-29 16:32:17 +08:00
item . action = '<div class="btn-group">' +
'<a href="/edit.php?syncjob=' + item . id + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang . edit + '</a>' +
2018-02-11 04:00:00 +08:00
'<a href="#" id="delete_selected" data-id="single-syncjob" data-api-url="delete/syncjob" data-item="' + item . id + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang . remove + '</a>' +
2017-07-29 16:32:17 +08:00
'</div>' ;
item . chkbox = '<input type="checkbox" data-id="syncjob" name="multi_select" value="' + item . id + '" />' ;
2017-11-08 18:07:32 +08:00
if ( item . is _running == 1 ) {
item . is _running = '<span id="active-script" class="label label-success">' + lang . running + '</span>' ;
} else {
item . is _running = '<span id="inactive-script" class="label label-warning">' + lang . waiting + '</span>' ;
}
if ( ! item . last _run > 0 ) {
item . last _run = lang . waiting ;
}
2017-07-29 16:32:17 +08:00
} ) ;
}
} ) ,
"paging" : {
"enabled" : true ,
"limit" : 5 ,
"size" : pagination _size
} ,
2017-11-04 03:37:24 +08:00
"filtering" : {
"enabled" : true ,
"position" : "left" ,
2017-12-21 04:15:43 +08:00
"connectors" : false ,
2017-11-04 03:37:24 +08:00
"placeholder" : lang . filter _table
} ,
2017-07-29 16:32:17 +08:00
"sorting" : {
"enabled" : true
}
} ) ;
}
2017-11-04 03:37:24 +08:00
function draw _filter _table ( ) {
ft _filter _table = FooTable . init ( '#filter_table' , {
"columns" : [
{ "name" : "chkbox" , "title" : "" , "style" : { "maxWidth" : "60px" , "width" : "60px" , "text-align" : "center" } , "filterable" : false , "sortable" : false , "type" : "html" } ,
{ "name" : "id" , "title" : "ID" , "style" : { "maxWidth" : "60px" , "width" : "60px" , "text-align" : "center" } } ,
{ "name" : "active" , "style" : { "maxWidth" : "80px" , "width" : "80px" } , "title" : lang . active } ,
{ "name" : "filter_type" , "style" : { "maxWidth" : "80px" , "width" : "80px" } , "title" : "Type" } ,
{ "sorted" : true , "name" : "username" , "title" : lang . owner , "style" : { "maxWidth" : "550px" , "width" : "350px" } } ,
{ "name" : "script_desc" , "title" : lang . description , "breakpoints" : "xs" } ,
{ "name" : "script_data" , "title" : "Script" , "breakpoints" : "all" } ,
{ "name" : "action" , "filterable" : false , "sortable" : false , "style" : { "text-align" : "right" , "maxWidth" : "180px" , "width" : "180px" } , "type" : "html" , "title" : lang . action , "breakpoints" : "xs sm" }
] ,
"empty" : lang . empty ,
"rows" : $ . ajax ( {
dataType : 'json' ,
url : '/api/v1/get/filters/all' ,
jsonp : false ,
error : function ( ) {
console . log ( 'Cannot draw filter table' ) ;
} ,
success : function ( data ) {
$ . each ( data , function ( i , item ) {
if ( item . active _int == 1 ) {
item . active = '<span id="active-script" class="label label-success">' + lang . active + '</span>' ;
} else {
item . active = '<span id="inactive-script" class="label label-warning">' + lang . inactive + '</span>' ;
}
item . script _data = '<pre style="margin:0px">' + escapeHtml ( item . script _data ) + '</pre>'
item . filter _type = '<div class="label label-default">' + item . filter _type . charAt ( 0 ) . toUpperCase ( ) + item . filter _type . slice ( 1 ) . toLowerCase ( ) + '</div>'
item . action = '<div class="btn-group">' +
'<a href="/edit.php?filter=' + item . id + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang . edit + '</a>' +
2018-02-11 04:00:00 +08:00
'<a href="#" id="delete_selected" data-id="single-filter" data-api-url="delete/filter" data-item="' + encodeURIComponent ( item . id ) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang . remove + '</a>' +
2017-11-04 03:37:24 +08:00
'</div>' ;
item . chkbox = '<input type="checkbox" data-id="filter_item" name="multi_select" value="' + item . id + '" />'
} ) ;
}
} ) ,
"paging" : {
"enabled" : true ,
"limit" : 5 ,
"size" : pagination _size
} ,
"filtering" : {
"enabled" : true ,
"position" : "left" ,
2017-12-21 04:15:43 +08:00
"connectors" : false ,
2017-11-04 03:37:24 +08:00
"placeholder" : lang . filter _table
} ,
"sorting" : {
"enabled" : true
}
} ) ;
} ;
2017-05-12 05:10:32 +08:00
draw _domain _table ( ) ;
draw _mailbox _table ( ) ;
draw _resource _table ( ) ;
draw _alias _table ( ) ;
draw _aliasdomain _table ( ) ;
2017-07-29 16:32:17 +08:00
draw _sync _job _table ( ) ;
2017-11-04 03:37:24 +08:00
draw _filter _table ( ) ;
2017-11-19 22:13:43 +08:00
draw _bcc _table ( ) ;
2018-01-24 02:59:06 +08:00
draw _recipient _map _table ( ) ;
2017-11-04 03:37:24 +08:00
} ) ;