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

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