Advertisement
Guest User

dataTable

a guest
Feb 10th, 2019
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.62 KB | None | 0 0
  1. controler ///
  2.  
  3. function get_table_data() {
  4. $all = $this->model->get_table_data($_GET,0);
  5. $val = $this->model->get_table_data($_GET,1);
  6.  
  7. $total = count($all);
  8. $hitung = count($val);
  9. $m=array();
  10. $n=array();
  11. $h=array();
  12. $cell=array();
  13. if($hitung>=1) {
  14. foreach($val as $row => $key) {$m[]=$key;}
  15. foreach($m[0] as $r => $k) { $n[]=$r; }
  16. foreach($n as $r => $k) { $h[]=$k; }
  17. $i=0;
  18. foreach($val as $row) {
  19. for($z=0;$z<=count($h)-1;$z++) {
  20. $x=$h[$z];
  21. $cell[$z]=$row->$x;
  22. }
  23. $data[] = $cell;
  24. $i++;
  25. }
  26. } else { $data = array(); }
  27.  
  28. $out = array(
  29. 'draw' => $_GET['draw'],
  30. 'data' => $data,
  31. 'recordsTotal'=>$hitung,
  32. 'recordsFiltered'=>$total,
  33. );
  34. echo json_encode($out);
  35. }
  36.  
  37. // MODEL //
  38.  
  39. function get_table_data($data,$limit) {
  40.  
  41. if($data['search']['value']!='') {
  42. $v = $data['search']['value'];
  43. if($data['table']=='MST_LDS') :
  44. $this->db->where("( `date` LIKE '%$v%' ESCAPE '!' OR `name` LIKE '%$v%' ESCAPE '!' OR `phone` LIKE '%$v%' ESCAPE '!' OR `email` LIKE '%$v%' ESCAPE '!' OR `alamat` LIKE '%$v%' ESCAPE '!' OR `leeds` LIKE '%$v%' ESCAPE '!' OR `marketing` LIKE '%$v%' ESCAPE '!' OR `prepared` LIKE '%$v%' ESCAPE '!' )");
  45. endif;
  46. }
  47.  
  48. if ($limit==1) {
  49. if($data['length']!=-1) :
  50. $this->db->limit($data['length'],$data['start']);
  51. endif;
  52. }
  53.  
  54. if(isset($data['order'])) {
  55. $col = $data['order'][0]['column'];
  56. if($col==100) :
  57. $this->db->order_by('id','desc');
  58. else :
  59. $this->db->order_by($data['columns'][$col]['name'],$data['order'][0]['dir']);
  60. endif;
  61. }
  62.  
  63. if(isset($data['where'])){
  64. return $this->db->get_where(constant($data['table']),$data['where'])->result();
  65. } else {
  66. return $this->db->get(constant($data['table']))->result();
  67. }
  68. }
  69.  
  70. // JS //
  71.  
  72.  
  73. (function( $ ) {
  74. 'use strict';
  75.  
  76. var get_actions = function( d,actions ) {
  77. actions = [
  78. '<a href="#" class="hidden on-editing save-row"><i class="fa fa-save" id="'+d[0]+'"></i></a>',
  79. '<a href="#" class="hidden on-editing cancel-row"><i class="fa fa-times" id="'+d[0]+'"></i></a>',
  80. '<a href="#" class="on-default edit-row"><i class="fa fa-pencil" id="'+d[0]+'"></i></a>',
  81. '<a href="#" class="on-default remove-row"><i class="fa fa-trash-o" id="'+d[0]+'"></i></a>',
  82. ].join(' ');
  83. return actions
  84. };
  85.  
  86. var EditableTable = {
  87.  
  88. options: {
  89. addButton: '#addToTable',
  90. table: '#datatable-editable',
  91. dialog: {
  92. wrapper: '#dialog',
  93. cancelButton: '#dialogCancel',
  94. confirmButton: '#dialogConfirm',
  95. }
  96. },
  97.  
  98. initialize: function() {
  99. this
  100. .setVars()
  101. .build()
  102. .events();
  103. },
  104.  
  105. setVars: function() {
  106. this.$table = $( this.options.table );
  107. this.$addButton = $( this.options.addButton );
  108.  
  109. // dialog
  110. this.dialog = {};
  111. this.dialog.$wrapper = $( this.options.dialog.wrapper );
  112. this.dialog.$cancel = $( this.options.dialog.cancelButton );
  113. this.dialog.$confirm = $( this.options.dialog.confirmButton );
  114.  
  115. return this;
  116. },
  117.  
  118. get_level: function( d ) {
  119. if (d[10]==0) {return ''}
  120. var name=level[d[10]];
  121. if (name==undefined) {return '';}
  122. else {return name;}
  123. },
  124.  
  125. get_region: function( d ) {
  126. if (d[4]==0) {return ''}
  127. var name=region[d[4]];
  128. if (name==undefined) {return '';}
  129. else {return name;}
  130. },
  131.  
  132.  
  133. build: function() {
  134. var _self = this;
  135. this.datatable = this.$table.DataTable({
  136. orderMulti: false,
  137. bServerSide:true,
  138. processing:true,
  139. bAutoWidth:false,
  140. order:[],
  141. ajax: {
  142. url : 'get_table_data',
  143. type : 'GET',
  144. data : {
  145. table:'MST_USR',
  146. field:'id,email,password,fullname,region_id,level',
  147. },
  148. },
  149.  
  150. aoColumns: [
  151. {title:"Username / Email", name:"email", data: 1},
  152. {title:"Password", name:"password", data: 2},
  153. {title:"Fullname", name:"fullname", data: 3},
  154. {title:"Level / Previlage", name:"level", data: _self.get_level},
  155. {title:"Action", name:"actions", data: get_actions, sortable: false, searchable: false, sClass:"text-center"},
  156. ],
  157. });
  158.  
  159. window.dt = this.datatable;
  160. return this;
  161. },
  162.  
  163. events: function() {
  164. var _self = this;
  165.  
  166. this.$table
  167. .on('click', 'a.save-row', function( e ) {
  168. e.preventDefault();
  169.  
  170. _self.rowSave( $(this).closest( 'tr' ) );
  171. })
  172. .on('click', 'a.cancel-row', function( e ) {
  173. e.preventDefault();
  174.  
  175. _self.rowCancel( $(this).closest( 'tr' ) );
  176. })
  177. .on('click', 'a.edit-row', function( e ) {
  178. e.preventDefault();
  179.  
  180. _self.rowEdit( $(this).closest( 'tr' ) );
  181. })
  182. .on( 'click', 'a.remove-row', function( e ) {
  183. e.preventDefault();
  184.  
  185. var $row = $(this).closest( 'tr' );
  186.  
  187. $.magnificPopup.open({
  188. items: {
  189. src: '#dialog',
  190. type: 'inline'
  191. },
  192. preloader: false,
  193. modal: true,
  194. callbacks: {
  195. change: function() {
  196. _self.dialog.$confirm.on( 'click', function( e ) {
  197. e.preventDefault();
  198.  
  199. _self.rowRemove( $row );
  200. $.magnificPopup.close();
  201. });
  202. },
  203. close: function() {
  204. _self.dialog.$confirm.off( 'click' );
  205. }
  206. }
  207. });
  208. });
  209.  
  210. this.$addButton.on( 'click', function(e) {
  211. e.preventDefault();
  212. _self.rowAdd();
  213. });
  214.  
  215. this.dialog.$cancel.on( 'click', function( e ) {
  216. e.preventDefault();
  217. $.magnificPopup.close();
  218. });
  219.  
  220. return this;
  221. },
  222.  
  223. // ==========================================================================================
  224. // ROW FUNCTIONS
  225. // ==========================================================================================
  226.  
  227. rowAdd: function() {
  228. this.$addButton.attr({ 'disabled': 'disabled' });
  229. var actions,
  230. data,
  231. $row,
  232.  
  233. actions = [
  234. '<a href="#" class="on-editing save-row"><i class="fa fa-save"></i></a>',
  235. '<a href="#" class="on-editing cancel-row"><i class="fa fa-times"></i></a>',
  236. ].join(' ');
  237.  
  238. data = [
  239. '<tr role="row" class="adding odd">'+
  240. '<td><input type="text" class="form-control input-block" /></td>'+
  241. '<td><input type="text" class="form-control input-block" /></td>'+
  242. '<td><input type="text" class="form-control input-block" /></td>'+
  243. '<td><select id="level" data-plugin-selectTwo class="form-control populate"></select></td>'+
  244. '<td class="actions text-center">' + actions + '</td>'+
  245. '</tr>',
  246. ].join(' ');
  247.  
  248. $("table").append(data);
  249. $('#oper').val('add');
  250.  
  251. var obj = {};
  252. $(".populate").each(function() {
  253. var id = $(this).attr('id');
  254. if(id=='region_id') { var obj = region; }
  255. if(id=='level') { var obj = level; }
  256.  
  257. $('select#'+id)
  258. .append($('<option></option>')
  259. .attr('value','').text(''))
  260. .themePluginSelect2({ "minimumResultsForSearch" : -1 });
  261.  
  262. $('select#'+id+' option').filter(function (a,b) {
  263. return this.value == '';
  264. }).attr('selected',true);
  265.  
  266. $.each(obj, function(key, value) {
  267. $('select#'+id).append($('<option></option>').attr('value',key).text(value))
  268. })
  269. })
  270. },
  271.  
  272. rowCancel: function( $row ) {
  273. var _self = this,
  274. $actions,
  275. i,
  276. data;
  277. if ( $row.hasClass('adding') ) {
  278. this.rowRemove( $row );
  279. } else {
  280. $actions = $row.find('td.actions');
  281. if ( $actions.get(0) ) {
  282. this.rowSetActionsDefault( $row );
  283. $($actions[0]).removeClass( 'actions' );
  284. }
  285.  
  286. data = this.datatable.row( $row.get(0) ).data();
  287.  
  288. var actions = [
  289. '<a href="#" class="hidden on-editing save-row"><i class="fa fa-save" id="'+data[0]+'"></i></a>',
  290. '<a href="#" class="hidden on-editing cancel-row"><i class="fa fa-times" id="'+data[0]+'"></i></a>',
  291. '<a href="#" class="on-default edit-row"><i class="fa fa-pencil" id="'+data[0]+'"></i></a>',
  292. '<a href="#" class="on-default remove-row"><i class="fa fa-trash-o" id="'+data[0]+'"></i></a>',
  293. ].join(' ');
  294.  
  295. var cell = [
  296. '<td>' + data[1] + '</td>',
  297. '<td>' + data[2] + '</td>',
  298. '<td>' + data[3] + '</td>',
  299. '<td>' + _self.get_level(data) + '</td>',
  300. '<td class="text-center">' + actions + '</td>',
  301. ].join( ' ' );
  302. $row.html(cell)
  303. }
  304. },
  305.  
  306. rowEdit: function( $row ) {
  307. var _self = this,
  308. data;
  309.  
  310. $('#oper').val('edit')
  311.  
  312. data = this.datatable.row( $row.get(0) ).data();
  313.  
  314. $row.children( 'td' ).each(function( i ) {
  315. var $this = $( this );
  316. $row.find( 'td:last' ).addClass( 'actions' );
  317.  
  318. if ( $this.hasClass('actions') ) {
  319. _self.rowSetActionsEditing( $row );
  320. } else {
  321.  
  322. var actions = [
  323. '<a href="#" class="hidden on-editing save-row"><i class="fa fa-save" id="'+data[0]+'"></i></a>',
  324. '<a href="#" class="hidden on-editing cancel-row"><i class="fa fa-times" id="'+data[0]+'"></i></a>',
  325. '<a href="#" class="on-default edit-row"><i class="fa fa-pencil" id="'+data[0]+'"></i></a>',
  326. '<a href="#" class="on-default remove-row"><i class="fa fa-trash-o" id="'+data[0]+'"></i></a>',
  327. ].join(' ');
  328. $row.html( ''+
  329. '<td><input type="text" class="form-control input-block" value="' + data[1] + '" /></td>'+
  330. '<td><input type="text" class="form-control input-block" value="' + data[2] + '" /></td>'+
  331. '<td><input type="text" class="form-control input-block" value="' + data[3] + '" /></td>'+
  332. '<td><select id="level" data-plugin-selectTwo class="form-control populate"></select></td>'+
  333. '<td class="actions text-center">' + actions + '</td>'
  334. );
  335. }
  336. });
  337.  
  338. var obj = {}, vl, tx;
  339. $(".populate").each(function() {
  340. var id = $(this).attr('id');
  341. if(id=='region_id') { obj = region; vl = data[4]; tx = _self.get_region(data); }
  342. if(id=='level') { obj = level; vl = data[5]; tx = _self.get_level(data) }
  343.  
  344. $.each(obj, function(key, value) {
  345. $('select#'+id)
  346. .append($('<option></option>')
  347. .attr('value',key).text(value))
  348. })
  349.  
  350. $('select#' + id + ' option').filter(function (a,b) {
  351. return this.text == tx;
  352. }).attr('selected',true);
  353.  
  354. })
  355. $('#region_id, #level').themePluginSelect2({ "minimumResultsForSearch" : -1 });
  356. },
  357.  
  358. rowSave: function( $row ) {
  359. var _self = this,
  360. $actions,
  361. values = [];
  362.  
  363. if ( $row.hasClass( 'adding' ) ) {
  364. this.$addButton.removeAttr( 'disabled' );
  365. $row.removeClass( 'adding' );
  366. }
  367.  
  368. values = $row.find('td').map(function() {
  369. var $this = $(this);
  370.  
  371. if ( $this.hasClass('actions') ) {
  372. _self.rowSetActionsDefault( $row );
  373. return _self.datatable.cell( this ).data();
  374. } else {
  375. return $.trim( $this.find('input').val() );
  376. }
  377. });
  378.  
  379. var datable = this.datatable;
  380.  
  381. //this.datatable.row( $row.get(0) ).data( values );
  382.  
  383. $actions = $row.find('td.actions');
  384. if ( $actions.get(0) ) {
  385. this.rowSetActionsDefault( $row );
  386. }
  387.  
  388. var id = $row.find('td.actions > a > i').attr('id');
  389. var val = {};
  390. val.email = values[0];
  391. val.username = values[0];
  392. val.password = values[1];
  393. val.fullname = values[2];
  394. val.level = $('select#level').val();
  395. val.id = id;
  396. val.oper = $('#oper').val();
  397. val.table = 'MST_USR';
  398. //console.log(val);
  399. $.post('manage_data',val,
  400. function(d,s,e) {
  401. if (d.status==1) {
  402. //show_messages('Data Updates')
  403. datable.draw();
  404. } else {
  405. //show_messages('Data Not Updates')
  406. datable.draw();
  407. }
  408. },'json')
  409. },
  410.  
  411. rowRemove: function( $row ) {
  412. var tbl = this.datatable;
  413. if ( $row.hasClass('adding') ) {
  414. this.$addButton.removeAttr( 'disabled' );
  415. $row.remove()
  416. } else {
  417. var id = $row.find('i.fa-trash-o').attr('id')
  418. var val = {};
  419. val.id = id;
  420. val.oper = 'del';
  421. val.table = 'MST_USR';
  422. $.post('manage_data',val,
  423. function(d,s,e) {
  424. if (d.status==1) {
  425. show_messages('Data Deleted')
  426. tbl.row( $row.get(0) ).remove().draw();
  427. } else {
  428. show_messages('Data Not Deleted')
  429. tbl.row( $row.get(0) ).remove().draw();
  430. }
  431. },'json')
  432. }
  433. },
  434.  
  435. rowSetActionsEditing: function( $row ) {
  436. $row.find( '.on-editing' ).removeClass( 'hidden' );
  437. $row.find( '.on-default' ).addClass( 'hidden' );
  438. },
  439.  
  440. rowSetActionsDefault: function( $row ) {
  441. $row.find( '.on-editing' ).addClass( 'hidden' );
  442. $row.find( '.on-default' ).removeClass( 'hidden' );
  443. }
  444.  
  445. };
  446.  
  447. $(function() {
  448. EditableTable.initialize();
  449. });
  450.  
  451. }).apply( this, [ jQuery ]);
  452.  
  453.  
  454. // HTML //
  455.  
  456. <section class="panel">
  457. <div class="panel-body">
  458. <div class="row">
  459. <div class="col-sm-6">
  460. <div class="mb-md">
  461. <button id="addToTable" class="btn btn-primary">Tambah User <i class="fa fa-plus"></i></button>
  462. </div>
  463. </div>
  464. </div>
  465. <table class="table table-bordered table-striped mb-none" id="datatable-editable"></table>
  466. </div>
  467. </section>
  468.  
  469. <div id="dialog" class="modal-block mfp-hide">
  470. <section class="panel">
  471. <header class="panel-heading">
  472. <h2 class="panel-title">Konfirmasi</h2>
  473. </header>
  474. <div class="panel-body">
  475. <div class="modal-wrapper">
  476. <div class="modal-text">
  477. <p>Apakah anda yakin akan menghapus data ini?</p>
  478. </div>
  479. </div>
  480. </div>
  481. <footer class="panel-footer">
  482. <div class="row">
  483. <div class="col-md-12 text-right">
  484. <button id="dialogConfirm" class="btn btn-primary">Yakin</button>
  485. <button id="dialogCancel" class="btn btn-default">Batal</button>
  486. </div>
  487. </div>
  488. </footer>
  489. </section>
  490. </div>
  491. <input type="hidden" id="oper" />
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement