PluginProbe ʕ •ᴥ•ʔ
Appointment Booking Plugin – LatePoint | Calendar & Scheduling for WordPress / 5.2.10
Appointment Booking Plugin – LatePoint | Calendar & Scheduling for WordPress v5.2.10
5.6.10 5.6.9 5.6.8 5.6.7 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 6 months ago auth_controller.php 6 months ago booking_form_settings_controller.php 6 months ago bookings_controller.php 1 year ago calendars_controller.php 11 months ago carts_controller.php 1 year ago controller.php 11 months ago customer_cabinet_controller.php 6 months ago customers_controller.php 6 months ago dashboard_controller.php 11 months ago default_agent_controller.php 1 year ago events_controller.php 1 year ago form_fields_controller.php 11 months ago integrations_controller.php 11 months ago invoices_controller.php 6 months ago manage_booking_by_key_controller.php 6 months ago manage_order_by_key_controller.php 1 year ago notifications_controller.php 1 year ago orders_controller.php 6 months ago pro_controller.php 1 year ago process_jobs_controller.php 6 months ago processes_controller.php 6 months ago search_controller.php 1 year ago services_controller.php 11 months ago settings_controller.php 6 months ago steps_controller.php 11 months ago stripe_connect_controller.php 10 months ago support_topics_controller.php 1 year ago todos_controller.php 1 year ago transactions_controller.php 6 months ago wizard_controller.php 6 months ago
activities_controller.php
311 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 // Verify nonce.
40 $this->check_nonce( 'export_activities' );
41
42 $csv_filename = 'activities_log_' . OsUtilHelper::random_text() . '.csv';
43
44 header( "Content-Type: text/csv" );
45 header( "Content-Disposition: attachment; filename={$csv_filename}" );
46
47 $labels_row = [
48 __( 'Type', 'latepoint' ),
49 __( 'Agent ID', 'latepoint' ),
50 __( 'Booking ID', 'latepoint' ),
51 __( 'Service ID', 'latepoint' ),
52 __( 'Customer ID', 'latepoint' ),
53 __( 'Location ID', 'latepoint' ),
54 __( 'Action By User Type', 'latepoint' ),
55 __( 'Action By User ID', 'latepoint' ),
56 __( 'Date, Time', 'latepoint' ),
57 __( 'Description', 'latepoint' )
58 ];
59
60
61 $activities_data = [];
62 $activities_data[] = $labels_row;
63
64 $activities = new OsActivityModel();
65 $activities_arr = $activities->order_by( 'created_at' )->get_results( ARRAY_A );
66
67 if ( $activities_arr ) {
68 foreach ( $activities_arr as $activity ) {
69 $values_row = [
70 $activity['code'],
71 $activity['agent_id'],
72 $activity['booking_id'],
73 $activity['service_id'],
74 $activity['customer_id'],
75 $activity['location_id'],
76 $activity['initiated_by'],
77 $activity['initiated_by_id'],
78 $activity['created_at'],
79 $activity['description'],
80 ];
81 $activities_data[] = $values_row;
82 }
83
84 }
85
86 OsCSVHelper::array_to_csv( $activities_data );
87
88 return;
89 }
90
91 /*
92 Index of activities
93 */
94
95 public function index() {
96 $per_page = OsSettingsHelper::get_number_of_records_per_page();
97 $page_number = isset( $this->params['page_number'] ) ? $this->params['page_number'] : 1;
98
99 $activities = new OsActivityModel();
100 $count_activities = new OsActivityModel();
101
102 // TABLE SEARCH FILTERS
103 $filter = isset( $this->params['filter'] ) ? $this->params['filter'] : false;
104
105 $query_args = [];
106 if ( $filter ) {
107 if ( ! empty( $filter['code'] ) ) {
108 $query_args['code'] = $filter['code'];
109 }
110 if ( ! empty( $filter['initiated_by_id'] ) ) {
111 $query_args['initiated_by_id'] = $filter['initiated_by_id'];
112 }
113
114 if ( ! empty( $filter['created_at_from'] ) && ! empty( $filter['created_at_to'] ) ) {
115 $query_args['created_at >='] = $filter['created_at_from'];
116 $query_args['created_at <='] = $filter['created_at_to'];
117 }
118 }
119
120 $total_activities = $count_activities->where( $query_args )->count();
121
122 $activities = $activities->where( $query_args )->order_by( 'id desc' )->set_limit( $per_page );
123 if ( $page_number > 1 ) {
124 $activities = $activities->set_offset( ( $page_number - 1 ) * $per_page );
125 }
126
127 $this->vars['activities'] = $activities->get_results_as_models();
128
129 $this->vars['total_activities'] = $total_activities;
130 $this->vars['current_page_number'] = $page_number;
131 $this->vars['per_page'] = $per_page;
132 $total_pages = ceil( $total_activities / $per_page );
133 $this->vars['total_pages'] = $total_pages;
134
135 $this->vars['showing_from'] = ( ( $page_number - 1 ) * $per_page ) ? ( ( $page_number - 1 ) * $per_page ) : 1;
136 $this->vars['showing_to'] = min( $page_number * $per_page, $total_activities );
137
138
139 $this->vars['breadcrumbs'][] = array( 'label' => __( 'Index', 'latepoint' ), 'link' => false );
140
141 $this->format_render( [
142 'json_view_name' => '_table_body',
143 'html_view_name' => __FUNCTION__
144 ], [], [
145 'total_pages' => $total_pages,
146 'showing_from' => $this->vars['showing_from'],
147 'showing_to' => $this->vars['showing_to'],
148 'total_records' => $total_activities
149 ] );
150 }
151
152 public function destroy() {
153 if ( filter_var( $this->params['id'], FILTER_VALIDATE_INT ) ) {
154
155 $this->check_nonce( 'destroy_activity_' . $this->params['id'] );
156 $activity = new OsActivityModel( $this->params['id'] );
157 if ( $activity->delete() ) {
158 $status = LATEPOINT_STATUS_SUCCESS;
159 $response_html = __( 'Activity Removed', 'latepoint' );
160 } else {
161 $status = LATEPOINT_STATUS_ERROR;
162 $response_html = __( 'Error Removing Activity', 'latepoint' );
163 }
164 } else {
165 $status = LATEPOINT_STATUS_ERROR;
166 $response_html = __( 'Error Removing Activity', 'latepoint' );
167 }
168
169 if ( $this->get_return_format() == 'json' ) {
170 $this->send_json( array( 'status' => $status, 'message' => $response_html ) );
171 }
172 }
173
174 public function view() {
175 $activity = new OsActivityModel( $this->params['id'] );
176 $data = json_decode( $activity->description, true );
177
178 $this->vars['activity_id'] = $activity->id;
179 $this->vars['activity_name'] = $activity->name;
180 $this->vars['activity_type'] = $activity->code;
181 $this->vars['status'] = $data['status'] ?? '';
182
183 $status_html = '';
184 if ( ! empty( $data['status'] ) ) {
185 $status_html = '<div class="status-item">' . __( 'Status:', 'latepoint' ) . ' <strong>' . $data['status'] . '</strong></div>';
186 $status_html .= '<div class="status-item">' . __( 'Processed on:', 'latepoint' ) . ' <strong>' . $data['processed_datetime'] . '</strong></div>';
187 if ( ! empty( $data['errors'] ) ) {
188 $status_html .= '<div class="status-item">' . __( 'Errors:', 'latepoint' ) . '<strong>' . ( is_array( $data['errors'] ) ? implode( ', ', $data['errors'] ) : $data['errors'] ) . '</strong></div>';
189 }
190 }
191
192 switch ( $activity->code ) {
193 // orders
194 case 'order_intent_updated':
195 $link_to_order = $activity->order_id ? '<a href="#" ' . OsOrdersHelper::quick_order_btn_html( $activity->order_id ) . '>' . __( 'View Order', 'latepoint' ) . '</a>' : '';
196 $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>';
197 $content_html = '<pre class="format-json">' . wp_json_encode( $data['order_data_vars'], JSON_PRETTY_PRINT ) . '</pre>';
198 break;
199 case 'order_intent_created':
200 $link_to_order = $activity->order_id ? '<a href="#" ' . OsOrdersHelper::quick_order_btn_html( $activity->order_id ) . '>' . __( 'View Order', 'latepoint' ) . '</a>' : '';
201 $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>';
202 $content_html = '<pre class="format-json">' . wp_json_encode( $data['order_data_vars'], JSON_PRETTY_PRINT ) . '</pre>';
203 break;
204 case 'order_intent_converted':
205 $link_to_order = '<a href="#" ' . OsOrdersHelper::quick_order_btn_html( $activity->order_id ) . '>' . __( 'View Order', 'latepoint' ) . '</a>';
206 $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>';
207 $content_html = '<pre class="format-json">' . wp_json_encode( $data['order_data_vars'], JSON_PRETTY_PRINT ) . '</pre>';
208 break;
209 case 'order_created':
210 $link_to_order = '<a href="#" ' . OsOrdersHelper::quick_order_btn_html( $activity->order_id ) . '>' . __( 'View Order', 'latepoint' ) . '</a>';
211 $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>';
212 $content_html = '<pre class="format-json">' . wp_json_encode( $data['order_data_vars'], JSON_PRETTY_PRINT ) . '</pre>';
213 break;
214 case 'order_updated':
215 $link_to_order = '<a href="#" ' . OsOrdersHelper::quick_order_btn_html( $activity->order_id ) . '>' . __( 'View Order', 'latepoint' ) . '</a>';
216 $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>';
217 $changes = OsUtilHelper::compare_model_data_vars( $data['order_data_vars']['new'], $data['order_data_vars']['old'] );
218 $content_html = '<pre class="format-json">' . wp_json_encode( $changes, JSON_PRETTY_PRINT ) . '</pre>';
219 break;
220
221 case 'customer_created':
222 $link_to_customer = '<a href="#" ' . OsCustomerHelper::quick_customer_btn_html( $activity->customer_id ) . '>' . __( 'View Customer', 'latepoint' ) . '</a>';
223 $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>';
224 $content_html = '<pre class="format-json">' . esc_html( wp_json_encode( $data['customer_data_vars'], JSON_PRETTY_PRINT | JSON_HEX_TAG ) ) . '</pre>';
225 break;
226 case 'customer_updated':
227 $link_to_customer = '<a href="#" ' . OsCustomerHelper::quick_customer_btn_html( $activity->customer_id ) . '>' . __( 'View Customer', 'latepoint' ) . '</a>';
228 $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>';
229 $changes = OsUtilHelper::compare_model_data_vars( $data['customer_data_vars']['new'], $data['customer_data_vars']['old'] );
230 $content_html = '<pre class="format-json">' . esc_html( wp_json_encode( $changes, JSON_PRETTY_PRINT | JSON_HEX_TAG ) ) . '</pre>';
231 break;
232 case 'payment_request_created':
233 $link_to_order = '<a href="#" ' . OsOrdersHelper::quick_order_btn_html( $activity->order_id ) . '>' . __( 'View Order', 'latepoint' ) . '</a>';
234 $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>';
235 $content_html = '<pre class="format-json">' . wp_json_encode( $data['payment_request_data_vars'], JSON_PRETTY_PRINT ) . '</pre>';
236 break;
237
238 // bookings
239 case 'booking_change_status':
240 $link_to_order = $activity->order_id ? '<a href="#" ' . OsBookingHelper::quick_booking_btn_html( $activity->booking_id ) . '>' . __( 'View Booking', 'latepoint' ) . '</a>' : '';
241 $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>';
242 $content_html = '<div class="activity-preview-content">' . $activity->description . '</div>';
243 break;
244 case 'booking_created':
245 $link_to_booking = '<a href="#" ' . OsBookingHelper::quick_booking_btn_html( $activity->booking_id ) . '>' . __( 'View Booking', 'latepoint' ) . '</a>';
246 $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>';
247 $content_html = '<pre class="format-json">' . wp_json_encode( $data['booking_data_vars'], JSON_PRETTY_PRINT ) . '</pre>';
248 break;
249 case 'booking_updated':
250 $link_to_booking = '<a href="#" ' . OsBookingHelper::quick_booking_btn_html( $activity->booking_id ) . '>' . __( 'View Booking', 'latepoint' ) . '</a>';
251 $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>';
252 $changes = OsUtilHelper::compare_model_data_vars( $data['booking_data_vars']['new'], $data['booking_data_vars']['old'] );
253 $content_html = '<pre class="format-json">' . wp_json_encode( $changes, JSON_PRETTY_PRINT ) . '</pre>';
254 break;
255 case 'email_sent':
256 $meta_html = '<div class="activity-preview-subject">' . esc_html( $data['extra_data']['subject'] ) . '</div>';
257 $meta_html .= '<div class="activity-preview-to"><span class="os-label">' . __( 'To:', 'latepoint' ) . '</span><span class="os-value">' . esc_html( $data['to'] ) . '</span></div>';
258 $content_html = '<div class="activity-preview-content">' . $data['content'] . '</div>';
259 break;
260 case 'sms_sent':
261 $meta_html = '<div class="activity-preview-to"><span class="os-label">' . __( 'To:', 'latepoint' ) . '</span><span class="os-value">' . esc_html( $data['to'] ) . '</span></div>';
262 $content_html = '<div class="activity-preview-content">' . $data['content'] . '</div>';
263 break;
264 case 'http_request':
265 $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>';
266 $content_html = '<pre class="format-json">' . wp_json_encode( $data['content'], JSON_PRETTY_PRINT ) . '</pre>';
267 break;
268 case 'process_job_run':
269 $job = new OsProcessJobModel( $data['job_id'] );
270 $name = $job->process->name . ', ID: ' . $job->process->id;
271 $meta_html = '<div class="activity-preview-to"><span class="os-label">' . __( 'Process:', 'latepoint' ) . '</span><span class="os-value">' . esc_html( $name ) . '</span></div>';
272 $content_html = '<pre class="format-json">' . $data['run_result'] . '</pre>';
273 break;
274 case 'error':
275 $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>';
276 $content_html = '<pre class="format-json">' . wp_json_encode( $data['extra_description'], JSON_PRETTY_PRINT ) . '</pre>';
277 break;
278
279 default:
280 /**
281 * Allow to add custom activity
282 *
283 * @since 5.1.8
284 * @hook latepoint_custom_activity_html
285 *
286 * @param {OsActivityModel} $activity
287 * @param {array} $data
288 *
289 * @returns {array} The array of meta and content HTML
290 */
291 $custom_activity_html = apply_filters('latepoint_custom_activity_html', false, $activity, $data);
292 if ($custom_activity_html !== false) {
293 $meta_html = $custom_activity_html['meta_html'] ?? '';
294 $content_html = $custom_activity_html['content_html'] ?? '';
295 break;
296 }
297 break;
298 }
299
300 $this->vars['content_html'] = $content_html ?? '';
301 $this->vars['meta_html'] = $meta_html ?? '';
302 $this->vars['status_html'] = $status_html ?? '';
303
304 $this->vars = apply_filters( 'latepoint_activity_view_vars', $this->vars, $activity );
305
306 $this->format_render( __FUNCTION__ );
307 }
308 }
309
310
311 endif;