PluginProbe
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder / 51.1.65
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder v51.1.65
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.65, at includes/widgets/Form_Builder/helpers/View_Submissions_Pro.php

428 lines 18.2 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 foreach (get_post_meta($post->ID) as $key => $value) {
143
144 $exclude = ['king_addons_form_id', 'king_addons_form_name', 'king_addons_form_page', 'king_addons_form_page_id', 'king_addons_user_agent', 'king_addons_user_ip', 'king_addons_submission_read_status', '_edit_lock', '_edit_last'];
145
146 if (in_array($key, $exclude)) {
147 continue;
148 }
149
150 echo '<div class="king-addons-submissions-wrap">';
151 $meta_value = $value[0];
152
153 if (is_serialized($meta_value)) {
154 $unserialized = maybe_unserialize($meta_value);
155 if (is_array($unserialized)) {
156 $value = $unserialized;
157 } else {
158 $value = [$meta_value];
159 }
160 }
161
162 $prefix = "form_field-";
163 $key_title = !empty($value[2]) ? esc_html($value[2]) : esc_html(ucfirst(str_replace($prefix, "", $key)));
164
165 if (str_contains($key, '_action_')) {
166 $prefix = '_action_king_addons_form_builder_';
167 $label = ucfirst(substr($key, strpos($key, $prefix) + strlen($prefix)));
168 echo '<label>' . esc_html($label) . '</label>';
169 $status = isset($value['status']) ? sanitize_html_class($value['status']) : '';
170 $message = isset($value['message']) ? esc_html(ucfirst($value['message'])) : '';
171 echo '<p class="notice notice-' . esc_attr($status) . '">' . $message . '</p>';
172 } elseif (isset($value[0]) && 'file' === $value[0]) {
173 echo '<label for="' . esc_attr($key) . '">' . $key_title . ' </label>';
174 if (is_array($value[1])) {
175 foreach ($value[1] as $index => $file) {
176 $file_url = esc_url($file);
177 echo '<a id="' . esc_attr($key . '_' . $index) . '" target="_blank" href="' . $file_url . '">' . $file_url . '</a>';
178 }
179 }
180 } elseif (isset($value[0]) && 'textarea' === $value[0]) {
181 echo '<label for="' . esc_attr($key) . '">' . $key_title . ' </label>';
182 $text_value = isset($value[1]) ? esc_textarea($value[1]) : '';
183 echo '<textarea id="' . esc_attr($key) . '">' . $text_value . '</textarea>';
184 } elseif (isset($value[0]) && ('radio' === $value[0] || 'checkbox' === $value[0])) {
185 echo '<label for="' . esc_attr($key) . '" class="' . esc_attr($key) . '">' . $key_title . ' </label>';
186 if (is_array($value[1])) {
187 foreach ($value[1] as $index => $item) {
188 $checked = (!empty($item[1]) && 'true' === $item[1]) ? 'checked' : '';
189 $input_value = isset($item[0]) ? esc_attr($item[0]) : '';
190 $input_name = isset($item[2]) ? esc_attr($item[2]) : '';
191 $input_id = isset($item[3]) ? esc_attr($item[3]) : esc_attr($key . '_' . $index);
192 echo '<input class="king-addons-inline" type="' . esc_attr($value[0]) . '" name="' . $input_name . '" id="' . $input_id . '" value="' . $input_value . '" ' . $checked . '>';
193 echo '<label class="king-addons-inline" for="' . $input_name . '">' . esc_html($item[0] ?? '') . ' </label>';
194 }
195 }
196 } elseif (isset($value[0]) && 'select' === $value[0]) {
197 $select_value = $value[1];
198 if (is_array($select_value)) {
199 $select_value = implode(",", $select_value);
200 }
201 echo '<label for="' . esc_attr($key) . '">' . $key_title . ' </label>';
202 echo '<input type="text" id="' . esc_attr($key) . '" value="' . esc_attr($select_value) . '">';
203 } else {
204 $type_attr = !empty($value[0]) ? $value[0] : 'text';
205 $input_val = isset($value[1]) ? $value[1] : (isset($value[0]) ? $value[0] : '');
206 echo '<label for="' . esc_attr($key) . '">' . $key_title . ' </label>';
207 echo '<input type="' . esc_attr($type_attr) . '" id="' . esc_attr($key) . '" value="' . esc_attr($input_val) . '">';
208 }
209 echo '</div>';
210 }
211
212
213 }
214
215 public function register_post_type_king_addons_submissions()
216 {
217 $labels = [
218 'name' => esc_html__('Form Submissions', 'king-addons'),
219 'singular_name' => esc_html__('Submission', 'king-addons'),
220 'edit_item' => esc_html__('Edit Submission', 'king-addons'),
221 'view_item' => esc_html__('View Submission', 'king-addons'),
222 'all_items' => esc_html__('Form Submissions', 'king-addons'),
223 'search_items' => esc_html__('Search Submissions', 'king-addons'),
224 'parent_item_colon' => esc_html__('Parent Submissions:', 'king-addons'),
225 'not_found' => esc_html__('No Submissions found.', 'king-addons'),
226 'not_found_in_trash' => esc_html__('No Submissions found in Trash.', 'king-addons'),
227 ];
228
229 $args = [
230 'labels' => $labels,
231 'public' => true,
232 'show_ui' => true,
233 // 'show_in_menu' => 'king-addons',
234 'show_in_menu' => false,
235 'rewrite' => ['slug' => 'king-addons-fb-sub'],
236 'supports' => [],
237 'register_meta_box_cb' => [$this, 'king_addons_submissions_meta_box']
238 ];
239 register_post_type('king-addons-fb-sub', $args);
240 // Remove Title and Editor fields for submissions
241 remove_post_type_support('king-addons-fb-sub', 'title');
242 remove_post_type_support('king-addons-fb-sub', 'editor');
243 }
244
245 public function king_addons_submissions_custom_columns($columns)
246 {
247
248 unset($columns['title']);
249 unset($columns['author']);
250 unset($columns['categories']);
251 unset($columns['date']);
252
253
254 $columns['main'] = __('Main', 'king-addons');
255 $columns['action_status'] = __('Action Status', 'king-addons');
256 $columns['form_id'] = __('Form', 'king-addons');
257 $columns['page'] = __('Page', 'king-addons');
258 $columns['post_id'] = __('ID', 'king-addons');
259 $columns['read_status'] = __('Read Status');
260 $columns['date'] = __('Date', 'king-addons');
261
262 return $columns;
263 }
264
265 public function king_addons_submissions_sortable_columns($columns)
266 {
267 $columns['read_status'] = 'read_status';
268 return $columns;
269 }
270
271 public function king_addons_submissions_custom_column_content($column, $post_id)
272 {
273 $submission = get_post($post_id);
274 $submission_meta = get_post_meta($post_id);
275 $action_status = 'success';
276 $main_key = '';
277
278 foreach ($submission_meta as $key => $value) {
279 if (str_contains($key, 'form_field-email')) {
280 $main_key = $key;
281 }
282
283 if (str_contains($key, '_action_')) {
284 if (str_contains($value[0], 'error')) {
285 $action_status = 'error';
286 }
287 }
288 }
289
290 switch ($column) {
291 case 'main':
292 $main_value = '';
293 if ($main_key !== '') {
294 $main_meta = get_post_meta($post_id, $main_key, true);
295 $main_value = is_array($main_meta) && isset($main_meta[1]) ? $main_meta[1] : $main_meta;
296 }
297
298 echo sprintf(
299 '<a href="%s" title="%s">%s</a>',
300 esc_url(admin_url('post.php?post=' . $post_id . '&action=edit')),
301 esc_attr__('View', 'king-addons'),
302 esc_html($main_value)
303 );
304 break;
305
306 case 'action_status':
307
308 echo esc_html($action_status);
309 break;
310
311 case 'form_id':
312 $form_page_id = absint(get_post_meta($post_id, 'king_addons_form_page_id', true));
313 $form_name = sanitize_text_field(get_post_meta($post_id, 'king_addons_form_name', true));
314 echo '<a href="' . esc_url($form_page_id ? admin_url('post.php?post=' . $form_page_id . '&action=elementor') : '#') . '" target="_blank" rel="noopener noreferrer">';
315 echo esc_html($form_name);
316 echo '</a>';
317 break;
318
319 case 'page':
320 $form_page_id = absint(get_post_meta($post_id, 'king_addons_form_page_id', true));
321 $form_page = sanitize_text_field(get_post_meta($post_id, 'king_addons_form_page', true));
322 echo '<a href="' . esc_url($form_page_id ? get_permalink($form_page_id) : '#') . '" target="_blank" rel="noopener noreferrer">';
323 echo esc_html($form_page);
324 echo '</a>';
325 break;
326
327 case 'post_id':
328
329 echo esc_html(absint($submission->ID));
330 break;
331
332 case 'read_status':
333 $read_status = get_post_meta($post_id, 'king_addons_submission_read_status', true);
334
335 if ($read_status == '1') {
336 echo '<span class="king-addons-button king-addons-submission-read">' . esc_html__('Read', 'king-addons') . '</span>';
337 } else {
338 echo '<span class="king-addons-button king-addons-submission-unread">' . esc_html__('Unread', 'king-addons') . '</span>';
339 }
340 break;
341
342 case 'custom_date':
343
344 echo get_post_meta($post_id, 'custom_date_key', true);
345 break;
346 }
347 }
348
349 public function king_addons_submissions_update_read_status()
350 {
351 if (!isset($_POST['post_id']) || !isset($_POST['read_status']) || !wp_verify_nonce($_POST['nonce'], 'king-addons-submissions-js')) {
352 wp_send_json_error('Invalid request');
353 }
354
355 $post_id = intval($_POST['post_id']);
356 $read_status = $_POST['read_status'] === '1' ? '1' : '0';
357
358 if (!current_user_can('edit_post', $post_id)) {
359 wp_send_json_error('Insufficient permissions');
360 }
361
362 update_post_meta($post_id, 'king_addons_submission_read_status', $read_status);
363
364 wp_send_json_success();
365 }
366
367 public function king_addons_submissions_mark_as_read($screen)
368 {
369 if (is_admin()) {
370 $screen = get_current_screen();
371
372
373 if ($screen && $screen->base == 'post' && $screen->post_type == 'king-addons-fb-sub') {
374 if (isset($_GET['post']) && !empty($_GET['post'])) {
375 $post_id = intval($_GET['post']);
376 $post = get_post($post_id);
377
378 if (!$post || !current_user_can('edit_post', $post_id)) {
379 return;
380 }
381
382 update_post_meta($post_id, 'king_addons_submission_read_status', '1');
383 }
384 }
385 }
386 }
387
388 public function king_addons_submissions_row_actions($actions, $post)
389 {
390
391 if ($post->post_type === 'king-addons-fb-sub') {
392
393 unset($actions['edit']);
394 unset($actions['inline hide-if-no-js']);
395
396
397 $actions['view'] = sprintf(
398 '<a href="%s" title="%s">%s</a>',
399 esc_url(admin_url('post.php?post=' . $post->ID . '&action=edit')),
400 __('View', 'king-addons'),
401 __('View', 'king-addons')
402 );
403 }
404
405 return $actions;
406 }
407
408 public function king_addons_submissions_remove_bulk_edit($actions)
409 {
410
411 unset($actions['edit']);
412 return $actions;
413 }
414
415 public function king_addons_submissions_remove_bulk_edit_filter()
416 {
417 $screen = get_current_screen();
418
419
420 if ($screen->id === 'edit-king-addons-fb-sub') {
421
422 add_filter('bulk_actions-' . $screen->id, [$this, 'king_addons_submissions_remove_bulk_edit']);
423 }
424 }
425
426 }
427
428 new View_Submissions_Pro();