PluginProbe ʕ •ᴥ•ʔ
LatePoint – Calendar Booking Plugin for Appointments and Events / 5.1.3
LatePoint – Calendar Booking Plugin for Appointments and Events v5.1.3
5.6.6 5.6.5 5.6.4 5.6.3 5.6.2 5.6.1 5.6.0 5.5.2 5.5.1 5.5.0 5.4.2 trunk 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.1.8 5.1.9 5.1.91 5.1.92 5.1.93 5.1.94 5.2.0 5.2.1 5.2.10 5.2.11 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.0 5.3.1 5.3.2 5.4.0 5.4.1
latepoint / lib / controllers / activities_controller.php
latepoint / lib / controllers Last commit date
activities_controller.php 1 year ago auth_controller.php 1 year ago booking_form_settings_controller.php 1 year ago bookings_controller.php 1 year ago calendars_controller.php 1 year ago carts_controller.php 1 year ago controller.php 1 year ago customer_cabinet_controller.php 1 year ago customers_controller.php 1 year ago dashboard_controller.php 1 year ago default_agent_controller.php 1 year ago events_controller.php 1 year ago form_fields_controller.php 1 year ago integrations_controller.php 1 year ago invoices_controller.php 1 year ago manage_booking_by_key_controller.php 1 year ago manage_order_by_key_controller.php 1 year ago notifications_controller.php 1 year ago orders_controller.php 1 year ago pro_controller.php 1 year ago process_jobs_controller.php 1 year ago processes_controller.php 1 year ago search_controller.php 1 year ago services_controller.php 1 year ago settings_controller.php 1 year ago steps_controller.php 1 year ago stripe_connect_controller.php 1 year ago support_topics_controller.php 1 year ago todos_controller.php 1 year ago transactions_controller.php 1 year ago wizard_controller.php 1 year ago
activities_controller.php
276 lines
1 <?php
2 if ( ! defined( 'ABSPATH' ) ) {
3 exit; // Exit if accessed directly.
4 }
5
6
7 if ( ! class_exists( 'OsActivitiesController' ) ) :
8
9
10 class OsActivitiesController extends OsController {
11
12
13 function __construct() {
14 parent::__construct();
15
16 $this->views_folder = LATEPOINT_VIEWS_ABSPATH . 'activities/';
17 $this->vars['page_header'] = OsMenuHelper::get_menu_items_by_id( 'processes' );
18 $this->vars['pre_page_header'] = OsMenuHelper::get_label_by_id( 'processes' );
19 $this->vars['breadcrumbs'][] = array(
20 'label' => __( 'Activities', 'latepoint' ),
21 'link' => OsRouterHelper::build_link( OsRouterHelper::build_route_name( 'activities', 'index' ) )
22 );
23
24 }
25
26 public function clear_all() {
27 $this->check_nonce( 'clear_activities' );
28 global $wpdb;
29 $wpdb->query( $wpdb->prepare("TRUNCATE TABLE %i", esc_sql(LATEPOINT_TABLE_ACTIVITIES) ));
30 if ( $this->get_return_format() == 'json' ) {
31 $this->send_json( array(
32 'status' => LATEPOINT_STATUS_SUCCESS,
33 'message' => __( 'Activities log cleared', 'latepoint' )
34 ) );
35 }
36 }
37
38 public function export() {
39 $csv_filename = 'activities_log_' . OsUtilHelper::random_text() . '.csv';
40
41 header( "Content-Type: text/csv" );
42 header( "Content-Disposition: attachment; filename={$csv_filename}" );
43
44 $labels_row = [
45 __( 'Type', 'latepoint' ),
46 __( 'Agent ID', 'latepoint' ),
47 __( 'Booking ID', 'latepoint' ),
48 __( 'Service ID', 'latepoint' ),
49 __( 'Customer ID', 'latepoint' ),
50 __( 'Location ID', 'latepoint' ),
51 __( 'Action By User Type', 'latepoint' ),
52 __( 'Action By User ID', 'latepoint' ),
53 __( 'Date, Time', 'latepoint' ),
54 __( 'Description', 'latepoint' )
55 ];
56
57
58 $activities_data = [];
59 $activities_data[] = $labels_row;
60
61 $activities = new OsActivityModel();
62 $activities_arr = $activities->order_by( 'created_at' )->get_results( ARRAY_A );
63
64 if ( $activities_arr ) {
65 foreach ( $activities_arr as $activity ) {
66 $values_row = [
67 $activity['code'],
68 $activity['agent_id'],
69 $activity['booking_id'],
70 $activity['service_id'],
71 $activity['customer_id'],
72 $activity['location_id'],
73 $activity['initiated_by'],
74 $activity['initiated_by_id'],
75 $activity['created_at'],
76 $activity['description'],
77 ];
78 $activities_data[] = $values_row;
79 }
80
81 }
82
83 OsCSVHelper::array_to_csv( $activities_data );
84
85 return;
86 }
87
88 /*
89 Index of activities
90 */
91
92 public function index() {
93 $per_page = OsSettingsHelper::get_number_of_records_per_page();
94 $page_number = isset( $this->params['page_number'] ) ? $this->params['page_number'] : 1;
95
96 $activities = new OsActivityModel();
97 $count_activities = new OsActivityModel();
98
99 // TABLE SEARCH FILTERS
100 $filter = isset( $this->params['filter'] ) ? $this->params['filter'] : false;
101
102 $query_args = [];
103 if ( $filter ) {
104 if ( ! empty( $filter['code'] ) ) {
105 $query_args['code'] = $filter['code'];
106 }
107 if ( ! empty( $filter['initiated_by_id'] ) ) {
108 $query_args['initiated_by_id'] = $filter['initiated_by_id'];
109 }
110
111 if ( ! empty( $filter['created_at_from'] ) && ! empty( $filter['created_at_to'] ) ) {
112 $query_args['created_at >='] = $filter['created_at_from'];
113 $query_args['created_at <='] = $filter['created_at_to'];
114 }
115 }
116
117 $total_activities = $count_activities->where( $query_args )->count();
118
119 $activities = $activities->where( $query_args )->order_by( 'id desc' )->set_limit( $per_page );
120 if ( $page_number > 1 ) {
121 $activities = $activities->set_offset( ( $page_number - 1 ) * $per_page );
122 }
123
124 $this->vars['activities'] = $activities->get_results_as_models();
125
126 $this->vars['total_activities'] = $total_activities;
127 $this->vars['current_page_number'] = $page_number;
128 $this->vars['per_page'] = $per_page;
129 $total_pages = ceil( $total_activities / $per_page );
130 $this->vars['total_pages'] = $total_pages;
131
132 $this->vars['showing_from'] = ( ( $page_number - 1 ) * $per_page ) ? ( ( $page_number - 1 ) * $per_page ) : 1;
133 $this->vars['showing_to'] = min( $page_number * $per_page, $total_activities );
134
135
136 $this->vars['breadcrumbs'][] = array( 'label' => __( 'Index', 'latepoint' ), 'link' => false );
137
138 $this->format_render( [
139 'json_view_name' => '_table_body',
140 'html_view_name' => __FUNCTION__
141 ], [], [
142 'total_pages' => $total_pages,
143 'showing_from' => $this->vars['showing_from'],
144 'showing_to' => $this->vars['showing_to'],
145 'total_records' => $total_activities
146 ] );
147 }
148
149 public function destroy() {
150 if ( filter_var( $this->params['id'], FILTER_VALIDATE_INT ) ) {
151
152 $this->check_nonce( 'destroy_activity_' . $this->params['id'] );
153 $activity = new OsActivityModel( $this->params['id'] );
154 if ( $activity->delete() ) {
155 $status = LATEPOINT_STATUS_SUCCESS;
156 $response_html = __( 'Activity Removed', 'latepoint' );
157 } else {
158 $status = LATEPOINT_STATUS_ERROR;
159 $response_html = __( 'Error Removing Activity', 'latepoint' );
160 }
161 } else {
162 $status = LATEPOINT_STATUS_ERROR;
163 $response_html = __( 'Error Removing Activity', 'latepoint' );
164 }
165
166 if ( $this->get_return_format() == 'json' ) {
167 $this->send_json( array( 'status' => $status, 'message' => $response_html ) );
168 }
169 }
170
171 public function view() {
172 $activity = new OsActivityModel( $this->params['id'] );
173 $data = json_decode( $activity->description, true );
174
175 $this->vars['activity_id'] = $activity->id;
176 $this->vars['activity_name'] = $activity->name;
177 $this->vars['activity_type'] = $activity->code;
178 $this->vars['status'] = $data['status'] ?? '';
179
180 $status_html = '';
181 if ( ! empty( $data['status'] ) ) {
182 $status_html = '<div class="status-item">' . __( 'Status:', 'latepoint' ) . ' <strong>' . $data['status'] . '</strong></div>';
183 $status_html .= '<div class="status-item">' . __( 'Processed on:', 'latepoint' ) . ' <strong>' . $data['processed_datetime'] . '</strong></div>';
184 if ( ! empty( $data['errors'] ) ) {
185 $status_html .= '<div class="status-item">' . __( 'Errors:', 'latepoint' ) . '<strong>' . ( is_array( $data['errors'] ) ? implode( ', ', $data['errors'] ) : $data['errors'] ) . '</strong></div>';
186 }
187 }
188
189 switch ( $activity->code ) {
190 // orders
191 case 'order_intent_updated':
192 $link_to_order = $activity->order_id ? '<a href="#" ' . OsOrdersHelper::quick_order_btn_html( $activity->order_id ) . '>' . __( 'View Order', 'latepoint' ) . '</a>' : '';
193 $meta_html = '<div class="activity-preview-to">' . ( $link_to_order ? ( '<span class="os-value">' . $link_to_order . '</span>' ) : '' ) . '<span class="os-label">' . __( 'Created On:', 'latepoint' ) . '</span><span class="os-value">' . $activity->nice_created_at . '</div>';
194 $content_html = '<pre class="format-json">' . wp_json_encode( $data['order_data_vars'], JSON_PRETTY_PRINT ) . '</pre>';
195 break;
196 case 'order_intent_created':
197 $link_to_order = $activity->order_id ? '<a href="#" ' . OsOrdersHelper::quick_order_btn_html( $activity->order_id ) . '>' . __( 'View Order', 'latepoint' ) . '</a>' : '';
198 $meta_html = '<div class="activity-preview-to">' . ( $link_to_order ? ( '<span class="os-value">' . $link_to_order . '</span>' ) : '' ) . '<span class="os-label">' . __( 'Created On:', 'latepoint' ) . '</span><span class="os-value">' . $activity->nice_created_at . '</div>';
199 $content_html = '<pre class="format-json">' . wp_json_encode( $data['order_data_vars'], JSON_PRETTY_PRINT ) . '</pre>';
200 break;
201 case 'order_intent_converted':
202 $link_to_order = '<a href="#" ' . OsOrdersHelper::quick_order_btn_html( $activity->order_id ) . '>' . __( 'View Order', 'latepoint' ) . '</a>';
203 $meta_html = '<div class="activity-preview-to"><span class="os-value">' . $link_to_order . '</span><span class="os-label">' . __( 'Created On:', 'latepoint' ) . '</span><span class="os-value">' . $activity->nice_created_at . '</div>';
204 $content_html = '<pre class="format-json">' . wp_json_encode( $data['order_data_vars'], JSON_PRETTY_PRINT ) . '</pre>';
205 break;
206 case 'order_created':
207 $link_to_order = '<a href="#" ' . OsOrdersHelper::quick_order_btn_html( $activity->order_id ) . '>' . __( 'View Order', 'latepoint' ) . '</a>';
208 $meta_html = '<div class="activity-preview-to"><span class="os-value">' . $link_to_order . '</span><span class="os-label">' . __( 'Created On:', 'latepoint' ) . '</span><span class="os-value">' . $activity->nice_created_at . '</div>';
209 $content_html = '<pre class="format-json">' . wp_json_encode( $data['order_data_vars'], JSON_PRETTY_PRINT ) . '</pre>';
210 break;
211 case 'order_updated':
212 $link_to_order = '<a href="#" ' . OsOrdersHelper::quick_order_btn_html( $activity->order_id ) . '>' . __( 'View Order', 'latepoint' ) . '</a>';
213 $meta_html = '<div class="activity-preview-to"><span class="os-value">' . $link_to_order . '</span><span class="os-label">' . __( 'Updated On:', 'latepoint' ) . '</span><span class="os-value">' . $activity->nice_created_at . '</div>';
214 $changes = OsUtilHelper::compare_model_data_vars( $data['order_data_vars']['new'], $data['order_data_vars']['old'] );
215 $content_html = '<pre class="format-json">' . wp_json_encode( $changes, JSON_PRETTY_PRINT ) . '</pre>';
216 break;
217 case 'payment_request_created':
218 $link_to_order = '<a href="#" ' . OsOrdersHelper::quick_order_btn_html( $activity->order_id ) . '>' . __( 'View Order', 'latepoint' ) . '</a>';
219 $meta_html = '<div class="activity-preview-to"><span class="os-value">' . $link_to_order . '</span><span class="os-label">' . __( 'Created On:', 'latepoint' ) . '</span><span class="os-value">' . $activity->nice_created_at . '</div>';
220 $content_html = '<pre class="format-json">' . wp_json_encode( $data['payment_request_data_vars'], JSON_PRETTY_PRINT ) . '</pre>';
221 break;
222
223 // bookings
224 case 'booking_change_status':
225 $link_to_order = $activity->order_id ? '<a href="#" ' . OsBookingHelper::quick_booking_btn_html( $activity->booking_id ) . '>' . __( 'View Booking', 'latepoint' ) . '</a>' : '';
226 $meta_html = '<div class="activity-preview-to">' . ( $link_to_order ? ( '<span class="os-value">' . $link_to_order . '</span>' ) : '' ) . '<span class="os-label">' . __( 'Created On:', 'latepoint' ) . '</span><span class="os-value">' . $activity->nice_created_at . '</div>';
227 $content_html = '<div class="activity-preview-content">' . $activity->description . '</div>';
228 break;
229 case 'booking_created':
230 $link_to_booking = '<a href="#" ' . OsBookingHelper::quick_booking_btn_html( $activity->booking_id ) . '>' . __( 'View Booking', 'latepoint' ) . '</a>';
231 $meta_html = '<div class="activity-preview-to"><span class="os-value">' . $link_to_booking . '</span><span class="os-label">' . __( 'Created On:', 'latepoint' ) . '</span><span class="os-value">' . $activity->nice_created_at . '</div>';
232 $content_html = '<pre class="format-json">' . wp_json_encode( $data['booking_data_vars'], JSON_PRETTY_PRINT ) . '</pre>';
233 break;
234 case 'booking_updated':
235 $link_to_booking = '<a href="#" ' . OsBookingHelper::quick_booking_btn_html( $activity->booking_id ) . '>' . __( 'View Booking', 'latepoint' ) . '</a>';
236 $meta_html = '<div class="activity-preview-to"><span class="os-value">' . $link_to_booking . '</span><span class="os-label">' . __( 'Updated On:', 'latepoint' ) . '</span><span class="os-value">' . $activity->nice_created_at . '</div>';
237 $changes = OsUtilHelper::compare_model_data_vars( $data['booking_data_vars']['new'], $data['booking_data_vars']['old'] );
238 $content_html = '<pre class="format-json">' . wp_json_encode( $changes, JSON_PRETTY_PRINT ) . '</pre>';
239 break;
240 case 'email_sent':
241 $meta_html = '<div class="activity-preview-subject">' . esc_html( $data['extra_data']['subject'] ) . '</div>';
242 $meta_html .= '<div class="activity-preview-to"><span class="os-label">' . __( 'To:', 'latepoint' ) . '</span><span class="os-value">' . esc_html( $data['to'] ) . '</div>';
243 $content_html = '<div class="activity-preview-content">' . $data['content'] . '</div>';
244 break;
245 case 'sms_sent':
246 $meta_html = '<div class="activity-preview-to"><span class="os-label">' . __( 'To:', 'latepoint' ) . '</span><span class="os-value">' . esc_html( $data['to'] ) . '</div>';
247 $content_html = '<div class="activity-preview-content">' . $data['content'] . '</div>';
248 break;
249 case 'http_request':
250 $meta_html = '<div class="activity-preview-to"><span class="os-label">' . __( 'URL:', 'latepoint' ) . '</span><span class="os-value"><a href="#" target="_blank">' . esc_html( $data['to'] ) . '</a></div>';
251 $content_html = '<pre class="format-json">' . wp_json_encode( $data['content'], JSON_PRETTY_PRINT ) . '</pre>';
252 break;
253 case 'process_job_run':
254 $job = new OsProcessJobModel( $data['job_id'] );
255 $name = $job->process->name . ', ID: ' . $job->process->id;
256 $meta_html = '<div class="activity-preview-to"><span class="os-label">' . __( 'Process:', 'latepoint' ) . '</span><span class="os-value">' . esc_html( $name ) . '</div>';
257 $content_html = '<pre class="format-json">' . $data['run_result'] . '</pre>';
258 break;
259 case 'error':
260 $meta_html = '<div class="activity-preview-to"><span class="os-label">' . __( 'Error Message:', 'latepoint' ) . '</span><span class="os-value">' . esc_html( $data['message'] ) . ' | ' . esc_html( $data['error_code'] ) . '</div>';
261 $content_html = '<pre class="format-json">' . wp_json_encode( $data['extra_description'], JSON_PRETTY_PRINT ) . '</pre>';
262 break;
263 }
264
265 $this->vars['content_html'] = $content_html ?? '';
266 $this->vars['meta_html'] = $meta_html ?? '';
267 $this->vars['status_html'] = $status_html ?? '';
268
269 $this->vars = apply_filters( 'latepoint_activity_view_vars', $this->vars, $activity );
270
271 $this->format_render( __FUNCTION__ );
272 }
273 }
274
275
276 endif;