timesheet source code
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

147 rindas
4.6KB

  1. <?php
  2. namespace Biukop;
  3. class Apiv1{
  4. private $office;
  5. private $job_table;
  6. public function __construct($office, $job_table){
  7. $this->office = $office;
  8. $this->job_table = $job_table;
  9. add_shortcode( 'bts_jobv1_item', array($this, 'bts_jobv1_item'));
  10. add_shortcode( 'bb_timesheet_canvas_v1', array($this, 'bb_timesheet_canvas_v1'));
  11. add_shortcode( 'bts_jobv1_editor', array($this, 'bts_jobv1_editor'));
  12. add_action('wp_ajax_list_jobv1', array($this,'list_job' ));
  13. add_action('wp_ajax_delete_jobv1', array($this,'delete_jobv1' ));
  14. }
  15. public function bts_jobv1_item($attr){
  16. $html =$this->template('jobv1_item', 'jobv1.html');
  17. //$html = str_replace('[bts-tos-options]', $this->bts_tos_options([]), $html);
  18. $html = do_shortcode($html);
  19. return $html;
  20. }
  21. public function bts_jobv1_editor($attr){
  22. $html =$this->template('jobv1_editor', 'jobv1_editor.html');
  23. $html = do_shortcode($html);
  24. return $html;
  25. }
  26. public function bb_timesheet_canvas_v1($attr)
  27. {
  28. return file_get_contents(plugin_dir_path(__FILE__) . "/html/timesheet_canvas_v1.html");
  29. }
  30. //generate template based on html file
  31. private function template($id, $file)
  32. {
  33. $text = '<script id="' . $id .'" type="text/x-biukop-template">';
  34. $text .= file_get_contents(plugin_dir_path(__FILE__) . "/html/$file");
  35. $text .= '</script>';
  36. return $text;
  37. }
  38. //ajax browse job with different filters
  39. function list_job(){
  40. global $wpdb;
  41. check_ajax_referer('acaresydney');
  42. $start = $_POST['start'] . " 00:00:00";
  43. $finish = $_POST['finish']. " 23:59:59";
  44. $response = array(
  45. 'status'=>'success',
  46. 'jobs' => [],
  47. 'job_maps' =>[],
  48. );
  49. $sql = "SELECT * FROM $this->job_table WHERE start>='%s' and start <='%s' order by start ASC ,staff ASC";
  50. //$sql = "SELECT * FROM $this->job_table order by start ASC ,staff ASC";
  51. $query = $wpdb->prepare ($sql, array($start, $finish));
  52. $response['sql'] = $query;
  53. $jobs = $wpdb->get_results($query);
  54. if (! empty($jobs)){
  55. $response['status'] = 'success';
  56. foreach( $jobs as $s){
  57. $data = array(
  58. 'id' => $s->id,
  59. 'tos' => $s->tos,
  60. 'start'=> $s->start,
  61. 'finish'=> $s->finish,
  62. 'rate'=> $s->rate,
  63. 'staff'=> $s->staff,
  64. 'client'=> $s->client,
  65. 'ack' => $s->ack,
  66. 'rating' =>$s->rating,
  67. );
  68. $response['jobs'][] = $data;
  69. $response['jobs_maps'][$s->id] = $data;
  70. }
  71. }
  72. wp_send_json($response);
  73. }
  74. //ajax delete jobs
  75. function delete_jobv1(){
  76. check_ajax_referer('acaresydney');
  77. $id = $_POST['jobid'];
  78. $jobs = $_POST['jobs'];
  79. if ($id != ''){
  80. $this->ajax_delete_single_job($id);
  81. }else if (!empty($jobs)) {
  82. $this->ajax_delete_multiple_jobs($jobs);
  83. }
  84. wp_die();
  85. }
  86. private function ajax_delete_single_job($id)
  87. {
  88. global $wpdb;
  89. //delete single job;
  90. $result = $wpdb->delete($this->job_table, array('id'=> $id));
  91. $response=array(
  92. 'status' => 'success',
  93. 'id' => $id,
  94. 'action'=> 'delete',
  95. 'error' => $wpdb->last_error,
  96. );
  97. if ($result == 1){
  98. wp_send_json($response);
  99. }else{
  100. $response['status'] = 'error';
  101. $response['error'] = $this->db->last_error;
  102. wp_send_json($response);
  103. }
  104. wp_die();
  105. }
  106. private function ajax_delete_multiple_jobs($job_ids)
  107. {
  108. global $wpdb;
  109. $ids = implode( ',', array_map( 'absint', $job_ids ) );
  110. $sql = "DELETE FROM $this->job_table WHERE ID IN($ids)" ;
  111. $result = $wpdb->query( "DELETE FROM $this->job_table WHERE ID IN($ids)" );
  112. $response=array(
  113. 'status' => 'success',
  114. 'ids' => $job_ids,
  115. 'action'=> 'delete',
  116. 'deleted' => $result,
  117. 'error' => $wpdb->last_error,
  118. );
  119. if ($this->db->last_error == "" ){
  120. wp_send_json($response);
  121. }else{
  122. $response['status'] = 'error';
  123. $response['error'] = $this->db->last_error;
  124. wp_send_json($response);
  125. }
  126. wp_die();
  127. }
  128. }