PluginProbe
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder / 51.1.14
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder v51.1.14
51.1.87 51.1.86 51.1.84 51.1.85 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 All 41 releases
king-addons / includes / widgets / Form_Builder / helpers / View_Submissions_Pro.php

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

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