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

415 lines 17.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/?rel=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
86 // Check if Pro constants are defined before using them
87 if (defined('KING_ADDONS_PRO_URL') && defined('KING_ADDONS_PRO_VERSION')) {
88 wp_enqueue_style('king-addons-form-builder-submissions-css', KING_ADDONS_PRO_URL . 'assets/css/king-addons-submissions.css', [], KING_ADDONS_VERSION);
89 wp_enqueue_script('king-addons-form-builder-submissions-js', KING_ADDONS_PRO_URL . 'assets/js/king-addons-submissions.js', ['jquery'], KING_ADDONS_VERSION);
90 } else {
91 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);
92 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);
93 }
94
95 wp_localize_script(
96 'king-addons-form-builder-submissions-js',
97 'KingAddonsSubmissions',
98 [
99 'ajaxurl' => admin_url('admin-ajax.php'),
100 'resturl' => get_rest_url() . 'king-addons/v1',
101 'nonce' => wp_create_nonce('king-addons-submissions-js'),
102 'form_name' => get_post_meta($post->ID, 'king_addons_form_name', true),
103 'form_id' => get_post_meta($post->ID, 'king_addons_form_id', true),
104 'form_page' => get_post_meta($post->ID, 'king_addons_form_page', true),
105 'form_page_id' => get_post_meta($post->ID, 'king_addons_form_page_id', true),
106 'form_page_url' => get_permalink(get_post_meta($post->ID, 'king_addons_form_page_id', true)),
107 'form_page_editor' => admin_url('post.php?post=' . get_post_meta($post->ID, 'king_addons_form_page_id', true) . '&action=elementor'),
108 'form_agent' => get_post_meta($post->ID, 'king_addons_user_agent', true),
109 'agent_ip' => get_post_meta($post->ID, 'king_addons_user_ip', true),
110 'post_created' => date('F j, Y g:i a', strtotime($post->post_date)),
111 'post_updated' => date('F j, Y g:i a', strtotime($post->post_modified)),
112 ]
113 );
114 }
115 }
116 }
117
118
119 public function king_addons_submissions_meta_box()
120 {
121 $args = new WP_Query([
122 'post_type' => 'king-addons-fb-sub'
123 ]);
124 foreach ($args as $arg) {
125
126 add_meta_box(
127 'king_addons_submission_fields',
128 'King Addons Submissions',
129 [$this, 'king_addons_meta_box_callback'],
130 'king-addons-fb-sub',
131 'normal',
132 'default'
133 );
134 }
135 }
136
137
138 public function king_addons_meta_box_callback($post, $metabox)
139 {
140 echo '<button class="king-addons-edit-submissions button button-primary">' . esc_html__('Edit', 'king-addons') . '</button>';
141 foreach (get_post_meta($post->ID) as $key => $value) {
142
143 $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'];
144
145 if (in_array($key, $exclude)) {
146 continue;
147 }
148
149 echo '<div class="king-addons-submissions-wrap">';
150 if (is_serialized($value[0])) {
151
152
153 if ($value[0]) {
154 // Security fix: Use safe unserialize with validation
155 $unserialized = @unserialize($value[0]);
156 if ($unserialized !== false && is_array($unserialized)) {
157 $value = $unserialized;
158 } else {
159 $value = $value[0]; // Fallback to original string if unserialize fails
160 }
161 }
162
163 $prefix = "form_field-";
164 $key_title = !empty($value[2]) ? $value[2] : ucfirst(str_replace($prefix, "", $key));
165
166 if (str_contains($key, '_action_')) {
167 $prefix = '_action_king_addons_form_builder_';
168 $label = ucfirst(substr($key, strpos($key, $prefix) + strlen($prefix)));
169 echo '<label>' . $label . '</label>';
170 echo '<p class="notice notice-' . $value['status'] . '">' . ucfirst($value['message']) . '</p>';
171 } elseif ('file' == $value[0]) {
172 echo '<label for="' . $key . '">' . $key_title . ' </label>';
173 if (is_array($value[1])) {
174 foreach ($value[1] as $index => $file) {
175 echo '<a id="' . $key . '_' . $index . '" target="_blank" href="' . $file . '">' . $file . '</a>';
176 }
177 }
178 } elseif ('textarea' == $value[0]) {
179 echo '<label for="' . $key . '">' . $key_title . ' </label>';
180 echo '<textarea id="' . $key . '">' . $value[1] . '</textarea>';
181 } else {
182 if ($value[0] === 'radio' || $value[0] === 'checkbox') {
183 echo '<label for="' . $key . '" class="' . $key . '">' . $key_title . ' </label>';
184 foreach ($value[1] as $index => $item) {
185 $checked = $item[1] == 'true' ? 'checked' : '';
186 echo '<input class="king-addons-inline" type="' . $value[0] . '" name="' . $item[2] . '" id="' . $item[3] . '" value="' . $item[0] . '" ' . $checked . '>';
187 echo '<label class="king-addons-inline" for="' . $item[2] . '">' . $item[0] . ' </label>';
188 }
189 } else {
190 if ($value[0] == 'select') {
191 if (is_array($value[1])) {
192 $value[1] = implode(",", $value[1]);
193 }
194
195 echo '<label for="' . $key . '">' . $key_title . ' </label>';
196 echo '<input type="text" id="' . $key . '" value="' . $value[1] . '">';
197
198 } else {
199 echo '<label for="' . $key . '">' . $key_title . ' </label>';
200 // Use 'text' if type is empty, and sanitize attributes
201 $type_attr = ! empty( $value[0] ) ? $value[0] : 'text';
202 echo '<input type="' . esc_attr( $type_attr ) . '" id="' . esc_attr( $key ) . '" value="' . esc_attr( $value[1] ) . '">';
203 }
204 }
205 }
206 } else {
207 $prefix = "form_field-";
208 $key_title = !empty($value[2]) ? $value[2] : ucfirst(str_replace($prefix, "", $key));
209
210 echo '<label for="' . $key . '">' . $key_title . ' </label>';
211 echo '<input type="text" id="' . $key . '" value="' . $value[0] . '">';
212 }
213 echo '</div>';
214 }
215
216
217 }
218
219 public function register_post_type_king_addons_submissions()
220 {
221 $labels = [
222 'name' => esc_html__('Form Submissions', 'king-addons'),
223 'singular_name' => esc_html__('Submission', 'king-addons'),
224 'edit_item' => esc_html__('Edit Submission', 'king-addons'),
225 'view_item' => esc_html__('View Submission', 'king-addons'),
226 'all_items' => esc_html__('Form Submissions', 'king-addons'),
227 'search_items' => esc_html__('Search Submissions', 'king-addons'),
228 'parent_item_colon' => esc_html__('Parent Submissions:', 'king-addons'),
229 'not_found' => esc_html__('No Submissions found.', 'king-addons'),
230 'not_found_in_trash' => esc_html__('No Submissions found in Trash.', 'king-addons'),
231 ];
232
233 $args = [
234 'labels' => $labels,
235 'public' => true,
236 'show_ui' => true,
237 // 'show_in_menu' => 'king-addons',
238 'show_in_menu' => false,
239 'rewrite' => ['slug' => 'king-addons-fb-sub'],
240 'supports' => [],
241 'register_meta_box_cb' => [$this, 'king_addons_submissions_meta_box']
242 ];
243 register_post_type('king-addons-fb-sub', $args);
244 // Remove Title and Editor fields for submissions
245 remove_post_type_support('king-addons-fb-sub', 'title');
246 remove_post_type_support('king-addons-fb-sub', 'editor');
247 }
248
249 public function king_addons_submissions_custom_columns($columns)
250 {
251
252 unset($columns['title']);
253 unset($columns['author']);
254 unset($columns['categories']);
255 unset($columns['date']);
256
257
258 $columns['main'] = __('Main', 'king-addons');
259 $columns['action_status'] = __('Action Status', 'king-addons');
260 $columns['form_id'] = __('Form', 'king-addons');
261 $columns['page'] = __('Page', 'king-addons');
262 $columns['post_id'] = __('ID', 'king-addons');
263 $columns['read_status'] = __('Read Status');
264 $columns['date'] = __('Date', 'king-addons');
265
266 return $columns;
267 }
268
269 public function king_addons_submissions_sortable_columns($columns)
270 {
271 $columns['read_status'] = 'read_status';
272 return $columns;
273 }
274
275 public function king_addons_submissions_custom_column_content($column, $post_id)
276 {
277 $submission = get_post($post_id);
278 $submission_meta = get_post_meta($post_id);
279 $action_status = 'success';
280
281 foreach ($submission_meta as $key => $value) {
282 if (str_contains($key, 'form_field-email')) {
283 $main_key = $key;
284 }
285
286 if (str_contains($key, '_action_')) {
287 if (str_contains($value[0], 'error')) {
288 $action_status = 'error';
289 }
290 }
291 }
292
293 switch ($column) {
294 case 'main':
295
296 echo sprintf(
297 '<a href="%s" title="%s">%s</a>',
298 esc_url(admin_url('post.php?post=' . $post_id . '&action=edit')),
299 __('View', 'king-addons'),
300 __(get_post_meta($post_id, $main_key, true)[1], 'king-addons')
301 );
302 break;
303
304 case 'action_status':
305
306 echo $action_status;
307 break;
308
309 case 'form_id':
310 echo '<a href="' . admin_url('post.php?post=' . get_post_meta($post_id, 'king_addons_form_page_id', true) . '&action=elementor') . '" target="_blank">';
311 echo get_post_meta($post_id, 'king_addons_form_name', true);
312 echo '</a>';
313 break;
314
315 case 'page':
316 echo '<a href="' . get_permalink(get_post_meta($post_id, 'king_addons_form_page_id', true)) . '" target="_blank">';
317 echo get_post_meta($post_id, 'king_addons_form_page', true);
318 echo '</a>';
319 break;
320
321 case 'post_id':
322
323 echo $submission->ID;
324 break;
325
326 case 'read_status':
327 $read_status = get_post_meta($post_id, 'king_addons_submission_read_status', true);
328
329 if ($read_status == '1') {
330 echo '<span class="king-addons-button king-addons-submission-read">' . __('Read') . '</span>';
331 } else {
332 echo '<span class="king-addons-button king-addons-submission-unread">' . __('Unread') . '</span>';
333 }
334 break;
335
336 case 'custom_date':
337
338 echo get_post_meta($post_id, 'custom_date_key', true);
339 break;
340 }
341 }
342
343 public function king_addons_submissions_update_read_status()
344 {
345 if (!isset($_POST['post_id']) || !isset($_POST['read_status']) || !wp_verify_nonce($_POST['nonce'], 'king-addons-submissions-js')) {
346 wp_send_json_error('Invalid request');
347 }
348
349 $post_id = intval($_POST['post_id']);
350 $read_status = $_POST['read_status'] === '1' ? '1' : '0';
351
352 update_post_meta($post_id, 'king_addons_submission_read_status', $read_status);
353
354 wp_send_json_success();
355 }
356
357 public function king_addons_submissions_mark_as_read($screen)
358 {
359 if (is_admin()) {
360 $screen = get_current_screen();
361
362
363 if ($screen && $screen->base == 'post' && $screen->post_type == 'king-addons-fb-sub') {
364 if (isset($_GET['post']) && !empty($_GET['post'])) {
365 $post_id = intval($_GET['post']);
366 $post = get_post($post_id);
367
368
369 update_post_meta($post_id, 'king_addons_submission_read_status', '1');
370 }
371 }
372 }
373 }
374
375 public function king_addons_submissions_row_actions($actions, $post)
376 {
377
378 if ($post->post_type === 'king-addons-fb-sub') {
379
380 unset($actions['edit']);
381 unset($actions['inline hide-if-no-js']);
382
383
384 $actions['view'] = sprintf(
385 '<a href="%s" title="%s">%s</a>',
386 esc_url(admin_url('post.php?post=' . $post->ID . '&action=edit')),
387 __('View', 'king-addons'),
388 __('View', 'king-addons')
389 );
390 }
391
392 return $actions;
393 }
394
395 public function king_addons_submissions_remove_bulk_edit($actions)
396 {
397
398 unset($actions['edit']);
399 return $actions;
400 }
401
402 public function king_addons_submissions_remove_bulk_edit_filter()
403 {
404 $screen = get_current_screen();
405
406
407 if ($screen->id === 'edit-king-addons-fb-sub') {
408
409 add_filter('bulk_actions-' . $screen->id, [$this, 'king_addons_submissions_remove_bulk_edit']);
410 }
411 }
412
413 }
414
415 new View_Submissions_Pro();