PluginProbe ʕ •ᴥ•ʔ
LatePoint – Calendar Booking Plugin for Appointments and Events / 5.2.4
LatePoint – Calendar Booking Plugin for Appointments and Events v5.2.4
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 11 months ago auth_controller.php 9 months ago booking_form_settings_controller.php 1 year ago bookings_controller.php 1 year ago calendars_controller.php 9 months ago carts_controller.php 1 year ago controller.php 9 months ago customer_cabinet_controller.php 9 months ago customers_controller.php 9 months ago dashboard_controller.php 9 months ago default_agent_controller.php 1 year ago events_controller.php 1 year ago form_fields_controller.php 9 months ago integrations_controller.php 9 months 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 9 months ago processes_controller.php 1 year ago search_controller.php 1 year ago services_controller.php 9 months ago settings_controller.php 1 year ago steps_controller.php 9 months ago stripe_connect_controller.php 9 months 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
308 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 . '</span></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 . '</span></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 . '</span></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 . '</span><span class="os-label">' . esc_html__('by:','latepoint') . '</span><span class="os-value">' . $activity->get_user_link() . '</span></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 . '</span><span class="os-label">' . esc_html__('by:','latepoint') . '</span><span class="os-value">' . $activity->get_user_link() . '</span></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
218 case 'customer_created':
219 $link_to_customer = '<a href="#" ' . OsCustomerHelper::quick_customer_btn_html( $activity->customer_id ) . '>' . __( 'View Customer', 'latepoint' ) . '</a>';
220 $meta_html = '<div class="activity-preview-to"><span class="os-value">' . $link_to_customer . '</span><span class="os-label">' . __( 'Created On:', 'latepoint' ) . '</span><span class="os-value">' . $activity->nice_created_at . '</span><span class="os-label">' . esc_html__('by:','latepoint') . '</span><span class="os-value">' . $activity->get_user_link() . '</span></div>';
221 $content_html = '<pre class="format-json">' . wp_json_encode( $data['customer_data_vars'], JSON_PRETTY_PRINT ) . '</pre>';
222 break;
223 case 'customer_updated':
224 $link_to_customer = '<a href="#" ' . OsCustomerHelper::quick_customer_btn_html( $activity->customer_id ) . '>' . __( 'View Customer', 'latepoint' ) . '</a>';
225 $meta_html = '<div class="activity-preview-to"><span class="os-value">' . $link_to_customer . '</span><span class="os-label">' . __( 'Updated On:', 'latepoint' ) . '</span><span class="os-value">' . $activity->nice_created_at . '</span><span class="os-label">' . esc_html__('by:','latepoint') . '</span><span class="os-value">' . $activity->get_user_link() . '</span></div>';
226 $changes = OsUtilHelper::compare_model_data_vars( $data['customer_data_vars']['new'], $data['customer_data_vars']['old'] );
227 $content_html = '<pre class="format-json">' . wp_json_encode( $changes, JSON_PRETTY_PRINT ) . '</pre>';
228 break;
229 case 'payment_request_created':
230 $link_to_order = '<a href="#" ' . OsOrdersHelper::quick_order_btn_html( $activity->order_id ) . '>' . __( 'View Order', 'latepoint' ) . '</a>';
231 $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 . '</span></div>';
232 $content_html = '<pre class="format-json">' . wp_json_encode( $data['payment_request_data_vars'], JSON_PRETTY_PRINT ) . '</pre>';
233 break;
234
235 // bookings
236 case 'booking_change_status':
237 $link_to_order = $activity->order_id ? '<a href="#" ' . OsBookingHelper::quick_booking_btn_html( $activity->booking_id ) . '>' . __( 'View Booking', 'latepoint' ) . '</a>' : '';
238 $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 . '</span><span class="os-label">' . esc_html__('by:','latepoint') . '</span><span class="os-value">' . $activity->get_user_link() . '</span></div>';
239 $content_html = '<div class="activity-preview-content">' . $activity->description . '</div>';
240 break;
241 case 'booking_created':
242 $link_to_booking = '<a href="#" ' . OsBookingHelper::quick_booking_btn_html( $activity->booking_id ) . '>' . __( 'View Booking', 'latepoint' ) . '</a>';
243 $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 . '</span><span class="os-label">' . esc_html__('by:','latepoint') . '</span><span class="os-value">' . $activity->get_user_link() . '</span></div>';
244 $content_html = '<pre class="format-json">' . wp_json_encode( $data['booking_data_vars'], JSON_PRETTY_PRINT ) . '</pre>';
245 break;
246 case 'booking_updated':
247 $link_to_booking = '<a href="#" ' . OsBookingHelper::quick_booking_btn_html( $activity->booking_id ) . '>' . __( 'View Booking', 'latepoint' ) . '</a>';
248 $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 . '</span><span class="os-label">' . esc_html__('by:','latepoint') . '</span><span class="os-value">' . $activity->get_user_link() . '</span></div>';
249 $changes = OsUtilHelper::compare_model_data_vars( $data['booking_data_vars']['new'], $data['booking_data_vars']['old'] );
250 $content_html = '<pre class="format-json">' . wp_json_encode( $changes, JSON_PRETTY_PRINT ) . '</pre>';
251 break;
252 case 'email_sent':
253 $meta_html = '<div class="activity-preview-subject">' . esc_html( $data['extra_data']['subject'] ) . '</div>';
254 $meta_html .= '<div class="activity-preview-to"><span class="os-label">' . __( 'To:', 'latepoint' ) . '</span><span class="os-value">' . esc_html( $data['to'] ) . '</span></div>';
255 $content_html = '<div class="activity-preview-content">' . $data['content'] . '</div>';
256 break;
257 case 'sms_sent':
258 $meta_html = '<div class="activity-preview-to"><span class="os-label">' . __( 'To:', 'latepoint' ) . '</span><span class="os-value">' . esc_html( $data['to'] ) . '</span></div>';
259 $content_html = '<div class="activity-preview-content">' . $data['content'] . '</div>';
260 break;
261 case 'http_request':
262 $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></span></div>';
263 $content_html = '<pre class="format-json">' . wp_json_encode( $data['content'], JSON_PRETTY_PRINT ) . '</pre>';
264 break;
265 case 'process_job_run':
266 $job = new OsProcessJobModel( $data['job_id'] );
267 $name = $job->process->name . ', ID: ' . $job->process->id;
268 $meta_html = '<div class="activity-preview-to"><span class="os-label">' . __( 'Process:', 'latepoint' ) . '</span><span class="os-value">' . esc_html( $name ) . '</span></div>';
269 $content_html = '<pre class="format-json">' . $data['run_result'] . '</pre>';
270 break;
271 case 'error':
272 $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'] ) . '</span></div>';
273 $content_html = '<pre class="format-json">' . wp_json_encode( $data['extra_description'], JSON_PRETTY_PRINT ) . '</pre>';
274 break;
275
276 default:
277 /**
278 * Allow to add custom activity
279 *
280 * @since 5.1.8
281 * @hook latepoint_custom_activity_html
282 *
283 * @param {OsActivityModel} $activity
284 * @param {array} $data
285 *
286 * @returns {array} The array of meta and content HTML
287 */
288 $custom_activity_html = apply_filters('latepoint_custom_activity_html', false, $activity, $data);
289 if ($custom_activity_html !== false) {
290 $meta_html = $custom_activity_html['meta_html'] ?? '';
291 $content_html = $custom_activity_html['content_html'] ?? '';
292 break;
293 }
294 break;
295 }
296
297 $this->vars['content_html'] = $content_html ?? '';
298 $this->vars['meta_html'] = $meta_html ?? '';
299 $this->vars['status_html'] = $status_html ?? '';
300
301 $this->vars = apply_filters( 'latepoint_activity_view_vars', $this->vars, $activity );
302
303 $this->format_render( __FUNCTION__ );
304 }
305 }
306
307
308 endif;