packages.tpl 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <ul class="breadcrumb">
  2. <li><a href="addonmodules.php?module=DNSManager2"><i class="fa fa-home"></i></a></li>
  3. <li class="active">{$MGLANG->absoluteT('addonAA', 'pagesLabels', 'settings', 'packages')}</li>
  4. </ul>
  5. <table class="table table-hover table-striped" id="packageslist">
  6. <thead>
  7. <tr>
  8. <th>{$MGLANG->T('table','name')}</th>
  9. <th>{$MGLANG->T('table','servers')}</th>
  10. <th>{$MGLANG->T('table','assigned_to')}</th>
  11. <th>{$MGLANG->T('table','status')}</th>
  12. <th></th>
  13. </tr>
  14. </thead>
  15. <tbody>
  16. </tbody>
  17. </table>
  18. <div class="well">
  19. <a class="btn btn-success btn-inverse" data-act="addPackage">{$MGLANG->T('add_package')}</a>
  20. </div>
  21. {literal}
  22. <style>
  23. .mg-wrapper .checkbox-styled.disabled {
  24. cursor: not-allowed;
  25. }
  26. .mg-wrapper #items-tab label.checkbox[title] {
  27. color: #BED1C6;
  28. }
  29. .mg-wrapper #items-tab label.checkbox-other {
  30. padding-top: 0px;
  31. padding-bottom: 0px;
  32. }
  33. </style>
  34. <script data-cfasync="false" type="text/javascript">
  35. function refreshTable() {
  36. jQuery('#packageslist').DataTable().ajax.reload();
  37. }
  38. function packageSaveCallback(data, $obj) { refreshTable();}
  39. function disablePackageCallback(data, $obj) { refreshTable();}
  40. function enablePackageCallback(data, $obj) { refreshTable();}
  41. function removePackageCallback(data, $obj) { refreshTable();}
  42. function addPackageServerCallback(data, $obj) {
  43. if(data.new_server) {
  44. var $table = $obj.parents('div.tab-pane').first().find('.package-servers-table');
  45. $table.find('tbody').append(data.new_server);
  46. $table.find('.nobody-is-here').hide();
  47. var $select = $obj.parents('.row').find('select');
  48. $select.find('option:selected').attr('disabled', 'disabled');
  49. $select.find('option:not([disabled])').attr('selected', 'selected').prop('selected', true);
  50. $select.select2();
  51. DNSStartServerValidation();
  52. }
  53. }
  54. function removeServerRow($obj, serverid) {
  55. $('.mg-wrapper [title]').bstooltip('hide');
  56. var $tbody = $obj.parents('tbody');
  57. $obj.parents('tr').first().remove();
  58. if(!Boolean($tbody.find('tr:not(.nobody-is-here)').length)) {
  59. $tbody.find('.nobody-is-here').show();
  60. }
  61. $('#server-tab').find('select[name=add_server] option[value='+serverid.toString()+']').removeAttr('disabled');
  62. DNSStartServerValidation();
  63. return false;
  64. }
  65. // Commented by Vitalii A
  66. // function is now in mgLibs.js (TODO : make scripts in js script files, templates are loaded several times, don't know why, maybe caching is f*cked up
  67. </script>
  68. {/literal}
  69. {literal}
  70. <script data-cfasync="false" type="text/javascript">
  71. jQuery(document).ready(function(){
  72. var last;
  73. jQuery('#table-filters').change(function() {
  74. jQuery('#packageslist').DataTable().ajax.reload();
  75. });
  76. jQuery('#packageslist').dataTable({
  77. drawCallback:replaceEmptyRowDataTable,
  78. serverSide: true,
  79. // searching: true,
  80. searchDelay: 800,
  81. autoWidth: false,
  82. ajax: function(data, callback, settings){
  83. if(last != data.length) {
  84. data.start = 0;
  85. }
  86. last = data.length;
  87. var filters = [];//$('#table-filters :input').serializeArray();
  88. JSONParser.request(
  89. 'refreshPackagesTable'
  90. , $.merge(filters, [
  91. {name: 'order[column]', value: data.columns[data.order[0].column].name},
  92. {name: 'order[dir]', value: data.order[0].dir},
  93. {name: 'limit', value: data.length},
  94. {name: 'offset', value: data.start},
  95. {name: 'search', value: data.search.value},
  96. ])
  97. , function(data) {
  98. callback(data);
  99. jQuery('.mg-wrapper [title]').bstooltip({html: true});
  100. }
  101. );
  102. },
  103. columns: [
  104. {name: 'name'}
  105. ,{name: 'servers', orderable: false}
  106. ,{name: 'assignedto', orderable: false}
  107. ,{name: 'status'}
  108. ,{ orderable: false, targets: 0}
  109. ],
  110. pagingType: "simple_numbers",
  111. aLengthMenu: [
  112. [5, 10, 25, 50, 75, 100],
  113. [5, 10, 25, 50, 75, 100]
  114. ],
  115. iDisplayLength: 10,
  116. //sDom: 't<"table-bottom"<"row"<"col-sm-6"p><"col-sm-6"L>>>',
  117. "oLanguage": {
  118. "oPaginate" : {
  119. "sNext": "{/literal}{$MGLANG->absoluteT('addonAA','datatables','sNext')}{literal}",
  120. "sFirst": "{/literal}{$MGLANG->absoluteT('addonAA','datatables','sFirst')}{literal}",
  121. "sLast ": "{/literal}{$MGLANG->absoluteT('addonAA','datatables','sLast')}{literal}",
  122. "sPrevious": "{/literal}{$MGLANG->absoluteT('addonAA','datatables','sPrevious')}{literal}",
  123. },
  124. "sEmptyTable": "{/literal}{$MGLANG->absoluteT('addonAA','datatables','sEmptyTable')}{literal}",
  125. "sPrevious": "{/literal}{$MGLANG->absoluteT('addonAA','datatables','sPrevious')}{literal}",
  126. "sNext": "{/literal}{$MGLANG->absoluteT('addonAA','datatables','sNext')}{literal}",
  127. "sZeroRecords": "{/literal}{$MGLANG->absoluteT('addonAA','datatables','sZeroRecords')}{literal}",
  128. "sInfoEmpty": "{/literal}{$MGLANG->absoluteT('addonAA','datatables','sInfoEmpty')}{literal}",
  129. "sSearch": "{/literal}{$MGLANG->absoluteT('addonAA','datatables','sSearch')}{literal}",
  130. "sLengthMenu": "{/literal}{$MGLANG->absoluteT('addonAA','datatables','sLengthMenu')}{literal}",
  131. "sInfoFiltered": "{/literal}{$MGLANG->absoluteT('addonAA','datatables','sInfoFiltered')}{literal}",
  132. "sInfo": "{/literal}{$MGLANG->absoluteT('addonAA','datatables','sInfo')}{literal}",
  133. }
  134. });
  135. });
  136. </script>
  137. {/literal}