PluginProbe
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder / 51.1.83
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder v51.1.83
51.1.83 51.1.82 51.1.81 51.1.79 51.1.78 51.1.77 51.1.76 51.1.74 51.1.75 51.1.65 51.1.64 51.1.63 trunk 51.1.14 51.1.2 51.1.35 51.1.36 51.1.37 51.1.38 51.1.39 51.1.44 51.1.45 51.1.46 51.1.47 51.1.49 All 37 releases
king-addons / includes / widgets / Form_Builder / helpers / View_Submissions_Pro.php

View_Submissions_Pro.php in King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder 51.1.83, at includes/widgets/Form_Builder/helpers/View_Submissions_Pro.php

491 lines 21.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace King_Addons;
4
5 use WP_Query;
6
7 if (!defined('ABSPATH')) {
8 exit;
9 }
10
11 class View_Submissions_Pro
12 {
13 public function __construct()
14 {
15
16
17 add_action('admin_enqueue_scripts', [$this, 'enqueue_submissions_script']);
18 add_action('init', [$this, 'register_post_type_king_addons_submissions']);
19 add_action('in_admin_header', [$this, 'renderAdminCustomHeader']);
20
21 add_filter('manage_king-addons-fb-sub_posts_columns', [$this, 'king_addons_submissions_custom_columns']);
22 add_action('manage_king-addons-fb-sub_posts_custom_column', [$this, 'king_addons_submissions_custom_column_content'], 10, 2);
23 add_filter('manage_edit-king-addons-fb-sub_sortable_columns', [$this, 'king_addons_submissions_sortable_columns']);
24
25 add_action('wp_ajax_king_addons_submissions_update_read_status', [$this, 'king_addons_submissions_update_read_status']);
26 add_action('current_screen', [$this, 'king_addons_submissions_mark_as_read']);
27 add_filter('post_row_actions', [$this, 'king_addons_submissions_row_actions'], 10, 2);
28 add_action('current_screen', [$this, 'king_addons_submissions_remove_bulk_edit_filter']);
29
30 add_action('admin_enqueue_scripts', array($this, 'enqueueScripts'));
31
32
33 }
34
35 public static function enqueueScripts(): void
36 {
37 $screen = get_current_screen();
38 if ($screen->id === 'edit-king-addons-fb-sub') {
39 wp_enqueue_style('king-addons-fb-sub-style', KING_ADDONS_URL . 'includes/widgets/Form_Builder/admin.css', '', KING_ADDONS_VERSION);
40 }
41 }
42
43 public function renderAdminCustomHeader()
44 {
45 $current_screen = get_current_screen()->id;
46 if ($current_screen !== 'edit-king-addons-fb-sub') {
47 return;
48 }
49
50 ?>
51 <div class="king-addons-pb-settings-page-header">
52 <h1><?php esc_html_e('Form Builder Submissions', 'king-addons'); ?></h1>
53 <p>
54 <?php esc_html_e('Submitted data from the Form Builder element will be displayed on this page', 'king-addons'); ?>
55 </p>
56 <?php if (!king_addons_freemius()->can_use_premium_code__premium_only()): ?>
57 <div class="king-addons-pb-preview-buttons">
58 <div class="kng-promo-btn-wrap">
59 <a href="https://kingaddons.com/pricing/?utm_source=king-addons-fb-submissions-page" target="_blank">
60 <div class="kng-promo-btn-txt">
61 <?php esc_html_e('Unlock Premium Features & 650+ Templates Today!', 'king-addons'); ?>
62 </div>
63 <img width="16px"
64 src="<?php echo esc_url(KING_ADDONS_URL) . 'includes/admin/img/share-v2.svg'; ?>"
65 alt="<?php echo esc_html__('Open link in the new tab', 'king-addons'); ?>">
66 </a>
67 </div>
68 </div>
69 <?php endif; ?>
70 </div>
71 <?php
72 }
73
74 public function enqueue_submissions_script($hook)
75 {
76
77 $post_type = 'king-addons-fb-sub';
78
79
80 if ($hook == 'post.php' || $hook == 'post-new.php' || $hook == 'edit.php') {
81 global $post;
82
83
84 if (isset($post) && $post->post_type === $post_type) {
85 $form_page_id = absint(get_post_meta($post->ID, 'king_addons_form_page_id', true));
86
87 // Check if Pro constants are defined before using them
88 if (defined('KING_ADDONS_PRO_URL') && defined('KING_ADDONS_PRO_VERSION')) {
89 wp_enqueue_style('king-addons-form-builder-submissions-css', KING_ADDONS_PRO_URL . 'assets/css/king-addons-submissions.css', [], KING_ADDONS_VERSION);
90 wp_enqueue_script('king-addons-form-builder-submissions-js', KING_ADDONS_PRO_URL . 'assets/js/king-addons-submissions.js', ['jquery'], KING_ADDONS_VERSION);
91 } else {
92 wp_enqueue_style('king-addons-form-builder-submissions-css', KING_ADDONS_URL . 'includes/widgets/Form_Builder/assets/css/king-addons-submissions.css', [], KING_ADDONS_VERSION);
93 wp_enqueue_script('king-addons-form-builder-submissions-js', KING_ADDONS_URL . 'includes/widgets/Form_Builder/assets/js/king-addons-submissions.js', ['jquery'], KING_ADDONS_VERSION);
94 }
95
96 wp_localize_script(
97 'king-addons-form-builder-submissions-js',
98 'KingAddonsSubmissions',
99 [
100 'ajaxurl' => esc_url_raw(admin_url('admin-ajax.php')),
101 'resturl' => esc_url_raw(get_rest_url() . 'king-addons/v1'),
102 'nonce' => wp_create_nonce('king-addons-submissions-js'),
103 'form_name' => sanitize_text_field(get_post_meta($post->ID, 'king_addons_form_name', true)),
104 'form_id' => sanitize_key(get_post_meta($post->ID, 'king_addons_form_id', true)),
105 'form_page' => sanitize_text_field(get_post_meta($post->ID, 'king_addons_form_page', true)),
106 'form_page_id' => $form_page_id,
107 'form_page_url' => $form_page_id ? esc_url_raw(get_permalink($form_page_id)) : '',
108 'form_page_editor' => $form_page_id ? esc_url_raw(admin_url('post.php?post=' . $form_page_id . '&action=elementor')) : '',
109 'form_agent' => sanitize_textarea_field(get_post_meta($post->ID, 'king_addons_user_agent', true)),
110 'agent_ip' => sanitize_text_field(get_post_meta($post->ID, 'king_addons_user_ip', true)),
111 'post_created' => date('F j, Y g:i a', strtotime($post->post_date)),
112 'post_updated' => date('F j, Y g:i a', strtotime($post->post_modified)),
113 ]
114 );
115 }
116 }
117 }
118
119
120 public function king_addons_submissions_meta_box()
121 {
122 $args = new WP_Query([
123 'post_type' => 'king-addons-fb-sub'
124 ]);
125 foreach ($args as $arg) {
126
127 add_meta_box(
128 'king_addons_submission_fields',
129 'King Addons Submissions',
130 [$this, 'king_addons_meta_box_callback'],
131 'king-addons-fb-sub',
132 'normal',
133 'default'
134 );
135 }
136 }
137
138
139 public function king_addons_meta_box_callback($post, $metabox)
140 {
141 echo '<button class="king-addons-edit-submissions button button-primary">' . esc_html__('Edit', 'king-addons') . '</button>';
142 $this->render_payment_block($post);
143 foreach (get_post_meta($post->ID) as $key => $value) {
144
145 $exclude = [
146 'king_addons_form_id', 'king_addons_form_name', 'king_addons_form_page', 'king_addons_form_page_id',
147 'king_addons_user_agent', 'king_addons_user_ip', 'king_addons_submission_read_status',
148 '_edit_lock', '_edit_last',
149 'king_addons_payment_status', 'king_addons_payment_provider', 'king_addons_payment_txn_id',
150 'king_addons_payment_amount', 'king_addons_payment_currency', 'king_addons_payment_time',
151 'king_addons_payment_events', 'king_addons_paypal_order_id', 'king_addons_stripe_session_id',
152 'king_addons_payment_expected_amount', 'king_addons_payment_expected_currency',
153 ];
154
155 if (in_array($key, $exclude)) {
156 continue;
157 }
158
159 echo '<div class="king-addons-submissions-wrap">';
160 $meta_value = $value[0];
161
162 if (is_serialized($meta_value)) {
163 $unserialized = maybe_unserialize($meta_value);
164 if (is_array($unserialized)) {
165 $value = $unserialized;
166 } else {
167 $value = [$meta_value];
168 }
169 }
170
171 $prefix = "form_field-";
172 $key_title = !empty($value[2]) ? esc_html($value[2]) : esc_html(ucfirst(str_replace($prefix, "", $key)));
173
174 if (str_contains($key, '_action_')) {
175 $prefix = '_action_king_addons_form_builder_';
176 $label = ucfirst(substr($key, strpos($key, $prefix) + strlen($prefix)));
177 echo '<label>' . esc_html($label) . '</label>';
178 $status = isset($value['status']) ? sanitize_html_class($value['status']) : '';
179 $message = isset($value['message']) ? esc_html(ucfirst($value['message'])) : '';
180 echo '<p class="notice notice-' . esc_attr($status) . '">' . $message . '</p>';
181 } elseif (isset($value[0]) && 'file' === $value[0]) {
182 echo '<label for="' . esc_attr($key) . '">' . $key_title . ' </label>';
183 if (is_array($value[1])) {
184 foreach ($value[1] as $index => $file) {
185 $file_url = esc_url($file);
186 echo '<a id="' . esc_attr($key . '_' . $index) . '" target="_blank" href="' . $file_url . '">' . $file_url . '</a>';
187 }
188 }
189 } elseif (isset($value[0]) && 'textarea' === $value[0]) {
190 echo '<label for="' . esc_attr($key) . '">' . $key_title . ' </label>';
191 $text_value = isset($value[1]) ? esc_textarea($value[1]) : '';
192 echo '<textarea id="' . esc_attr($key) . '">' . $text_value . '</textarea>';
193 } elseif (isset($value[0]) && ('radio' === $value[0] || 'checkbox' === $value[0])) {
194 echo '<label for="' . esc_attr($key) . '" class="' . esc_attr($key) . '">' . $key_title . ' </label>';
195 if (is_array($value[1])) {
196 foreach ($value[1] as $index => $item) {
197 $checked = (!empty($item[1]) && 'true' === $item[1]) ? 'checked' : '';
198 $input_value = isset($item[0]) ? esc_attr($item[0]) : '';
199 $input_name = isset($item[2]) ? esc_attr($item[2]) : '';
200 $input_id = isset($item[3]) ? esc_attr($item[3]) : esc_attr($key . '_' . $index);
201 echo '<input class="king-addons-inline" type="' . esc_attr($value[0]) . '" name="' . $input_name . '" id="' . $input_id . '" value="' . $input_value . '" ' . $checked . '>';
202 echo '<label class="king-addons-inline" for="' . $input_name . '">' . esc_html($item[0] ?? '') . ' </label>';
203 }
204 }
205 } elseif (isset($value[0]) && 'select' === $value[0]) {
206 $select_value = $value[1];
207 if (is_array($select_value)) {
208 $select_value = implode(",", $select_value);
209 }
210 echo '<label for="' . esc_attr($key) . '">' . $key_title . ' </label>';
211 echo '<input type="text" id="' . esc_attr($key) . '" value="' . esc_attr($select_value) . '">';
212 } else {
213 $type_attr = !empty($value[0]) ? $value[0] : 'text';
214 $input_val = isset($value[1]) ? $value[1] : (isset($value[0]) ? $value[0] : '');
215 echo '<label for="' . esc_attr($key) . '">' . $key_title . ' </label>';
216 echo '<input type="' . esc_attr($type_attr) . '" id="' . esc_attr($key) . '" value="' . esc_attr($input_val) . '">';
217 }
218 echo '</div>';
219 }
220
221
222 }
223
224 /**
225 * Payment status block on the submission card.
226 *
227 * @param \WP_Post $post Submission.
228 *
229 * @return void
230 */
231 private function render_payment_block($post): void
232 {
233 $status = sanitize_key((string) get_post_meta($post->ID, 'king_addons_payment_status', true));
234 if ('' === $status) {
235 return;
236 }
237
238 $provider = sanitize_key((string) get_post_meta($post->ID, 'king_addons_payment_provider', true));
239 $txn = sanitize_text_field((string) get_post_meta($post->ID, 'king_addons_payment_txn_id', true));
240 $amount = get_post_meta($post->ID, 'king_addons_payment_amount', true);
241 $currency = sanitize_text_field((string) get_post_meta($post->ID, 'king_addons_payment_currency', true));
242 $time = absint(get_post_meta($post->ID, 'king_addons_payment_time', true));
243
244 echo '<div class="king-addons-submissions-wrap">';
245 echo '<label>' . esc_html__('Payment', 'king-addons') . '</label>';
246 echo '<p>';
247 echo esc_html($status);
248 if ('' !== $provider) {
249 echo ' · ' . esc_html($provider);
250 }
251 if ('' !== (string) $amount) {
252 echo ' · ' . esc_html((string) $amount . ' ' . $currency);
253 }
254 if ('' !== $txn) {
255 echo ' · ' . esc_html($txn);
256 }
257 if ($time) {
258 echo ' · ' . esc_html(date_i18n(get_option('date_format') . ' ' . get_option('time_format'), $time));
259 }
260 echo '</p>';
261 echo '</div>';
262 }
263
264 public function register_post_type_king_addons_submissions()
265 {
266 $labels = [
267 'name' => esc_html__('Form Submissions', 'king-addons'),
268 'singular_name' => esc_html__('Submission', 'king-addons'),
269 'edit_item' => esc_html__('Edit Submission', 'king-addons'),
270 'view_item' => esc_html__('View Submission', 'king-addons'),
271 'all_items' => esc_html__('Form Submissions', 'king-addons'),
272 'search_items' => esc_html__('Search Submissions', 'king-addons'),
273 'parent_item_colon' => esc_html__('Parent Submissions:', 'king-addons'),
274 'not_found' => esc_html__('No Submissions found.', 'king-addons'),
275 'not_found_in_trash' => esc_html__('No Submissions found in Trash.', 'king-addons'),
276 ];
277
278 $args = [
279 'labels' => $labels,
280 'public' => true,
281 'show_ui' => true,
282 // 'show_in_menu' => 'king-addons',
283 'show_in_menu' => false,
284 'rewrite' => ['slug' => 'king-addons-fb-sub'],
285 'supports' => [],
286 'register_meta_box_cb' => [$this, 'king_addons_submissions_meta_box']
287 ];
288 register_post_type('king-addons-fb-sub', $args);
289 // Remove Title and Editor fields for submissions
290 remove_post_type_support('king-addons-fb-sub', 'title');
291 remove_post_type_support('king-addons-fb-sub', 'editor');
292 }
293
294 public function king_addons_submissions_custom_columns($columns)
295 {
296
297 unset($columns['title']);
298 unset($columns['author']);
299 unset($columns['categories']);
300 unset($columns['date']);
301
302
303 $columns['main'] = __('Main', 'king-addons');
304 $columns['action_status'] = __('Action Status', 'king-addons');
305 $columns['payment'] = __('Payment', 'king-addons');
306 $columns['form_id'] = __('Form', 'king-addons');
307 $columns['page'] = __('Page', 'king-addons');
308 $columns['post_id'] = __('ID', 'king-addons');
309 $columns['read_status'] = __('Read Status');
310 $columns['date'] = __('Date', 'king-addons');
311
312 return $columns;
313 }
314
315 public function king_addons_submissions_sortable_columns($columns)
316 {
317 $columns['read_status'] = 'read_status';
318 return $columns;
319 }
320
321 public function king_addons_submissions_custom_column_content($column, $post_id)
322 {
323 $submission = get_post($post_id);
324 $submission_meta = get_post_meta($post_id);
325 $action_status = 'success';
326 $main_key = '';
327
328 foreach ($submission_meta as $key => $value) {
329 if (str_contains($key, 'form_field-email')) {
330 $main_key = $key;
331 }
332
333 if (str_contains($key, '_action_')) {
334 if (str_contains($value[0], 'error')) {
335 $action_status = 'error';
336 }
337 }
338 }
339
340 switch ($column) {
341 case 'main':
342 $main_value = '';
343 if ($main_key !== '') {
344 $main_meta = get_post_meta($post_id, $main_key, true);
345 $main_value = is_array($main_meta) && isset($main_meta[1]) ? $main_meta[1] : $main_meta;
346 }
347
348 echo sprintf(
349 '<a href="%s" title="%s">%s</a>',
350 esc_url(admin_url('post.php?post=' . $post_id . '&action=edit')),
351 esc_attr__('View', 'king-addons'),
352 esc_html($main_value)
353 );
354 break;
355
356 case 'action_status':
357
358 echo esc_html($action_status);
359 break;
360
361 case 'payment':
362 $pay_status = sanitize_key((string) get_post_meta($post_id, 'king_addons_payment_status', true));
363 if ('' === $pay_status) {
364 echo '&mdash;';
365 break;
366 }
367 $pay_amount = get_post_meta($post_id, 'king_addons_payment_amount', true);
368 $pay_currency = sanitize_text_field((string) get_post_meta($post_id, 'king_addons_payment_currency', true));
369 echo esc_html($pay_status);
370 if ('' !== (string) $pay_amount) {
371 echo ' ' . esc_html((string) $pay_amount . ' ' . $pay_currency);
372 }
373 break;
374
375 case 'form_id':
376 $form_page_id = absint(get_post_meta($post_id, 'king_addons_form_page_id', true));
377 $form_name = sanitize_text_field(get_post_meta($post_id, 'king_addons_form_name', true));
378 echo '<a href="' . esc_url($form_page_id ? admin_url('post.php?post=' . $form_page_id . '&action=elementor') : '#') . '" target="_blank" rel="noopener noreferrer">';
379 echo esc_html($form_name);
380 echo '</a>';
381 break;
382
383 case 'page':
384 $form_page_id = absint(get_post_meta($post_id, 'king_addons_form_page_id', true));
385 $form_page = sanitize_text_field(get_post_meta($post_id, 'king_addons_form_page', true));
386 echo '<a href="' . esc_url($form_page_id ? get_permalink($form_page_id) : '#') . '" target="_blank" rel="noopener noreferrer">';
387 echo esc_html($form_page);
388 echo '</a>';
389 break;
390
391 case 'post_id':
392
393 echo esc_html(absint($submission->ID));
394 break;
395
396 case 'read_status':
397 $read_status = get_post_meta($post_id, 'king_addons_submission_read_status', true);
398
399 if ($read_status == '1') {
400 echo '<span class="king-addons-button king-addons-submission-read">' . esc_html__('Read', 'king-addons') . '</span>';
401 } else {
402 echo '<span class="king-addons-button king-addons-submission-unread">' . esc_html__('Unread', 'king-addons') . '</span>';
403 }
404 break;
405
406 case 'custom_date':
407 echo esc_html((string) get_post_meta($post_id, 'custom_date_key', true));
408 break;
409 }
410 }
411
412 public function king_addons_submissions_update_read_status()
413 {
414 if (!isset($_POST['post_id']) || !isset($_POST['read_status']) || !wp_verify_nonce($_POST['nonce'], 'king-addons-submissions-js')) {
415 wp_send_json_error('Invalid request');
416 }
417
418 $post_id = intval($_POST['post_id']);
419 $read_status = $_POST['read_status'] === '1' ? '1' : '0';
420
421 if (!current_user_can('edit_post', $post_id)) {
422 wp_send_json_error('Insufficient permissions');
423 }
424
425 update_post_meta($post_id, 'king_addons_submission_read_status', $read_status);
426
427 wp_send_json_success();
428 }
429
430 public function king_addons_submissions_mark_as_read($screen)
431 {
432 if (is_admin()) {
433 $screen = get_current_screen();
434
435
436 if ($screen && $screen->base == 'post' && $screen->post_type == 'king-addons-fb-sub') {
437 if (isset($_GET['post']) && !empty($_GET['post'])) {
438 $post_id = intval($_GET['post']);
439 $post = get_post($post_id);
440
441 if (!$post || !current_user_can('edit_post', $post_id)) {
442 return;
443 }
444
445 update_post_meta($post_id, 'king_addons_submission_read_status', '1');
446 }
447 }
448 }
449 }
450
451 public function king_addons_submissions_row_actions($actions, $post)
452 {
453
454 if ($post->post_type === 'king-addons-fb-sub') {
455
456 unset($actions['edit']);
457 unset($actions['inline hide-if-no-js']);
458
459
460 $actions['view'] = sprintf(
461 '<a href="%s" title="%s">%s</a>',
462 esc_url(admin_url('post.php?post=' . $post->ID . '&action=edit')),
463 __('View', 'king-addons'),
464 __('View', 'king-addons')
465 );
466 }
467
468 return $actions;
469 }
470
471 public function king_addons_submissions_remove_bulk_edit($actions)
472 {
473
474 unset($actions['edit']);
475 return $actions;
476 }
477
478 public function king_addons_submissions_remove_bulk_edit_filter()
479 {
480 $screen = get_current_screen();
481
482
483 if ($screen->id === 'edit-king-addons-fb-sub') {
484
485 add_filter('bulk_actions-' . $screen->id, [$this, 'king_addons_submissions_remove_bulk_edit']);
486 }
487 }
488
489 }
490
491 new View_Submissions_Pro();