PluginProbe
weForms – Easy Drag & Drop Contact Form Builder For WordPress / 1.6.3
weForms – Easy Drag & Drop Contact Form Builder For WordPress v1.6.3
1.6.7 1.6.8 1.6.9 1.6.12 1.6.13 1.6.14 1.6.15 1.6.16 1.6.17 1.6.18 1.6.19 1.6.2 1.6.20 1.6.21 1.6.22 1.6.23 1.6.24 1.6.25 1.6.26 1.6.27 1.6.28 1.6.3 1.6.4 1.6.5 1.6.6 All 74 releases
weforms / includes / admin / class-admin.php

class-admin.php in weForms – Easy Drag & Drop Contact Form Builder For WordPress 1.6.3, at includes/admin/class-admin.php

391 lines 14.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * The admin page handler class
5 */
6 class WeForms_Admin {
7
8 public function __construct() {
9 add_action( 'init', [ $this, 'register_post_type' ] );
10 add_action( 'admin_menu', [ $this, 'register_admin_menu' ] );
11 add_action( 'pre_update_option_wpuf_general', [ $this, 'watch_wpuf_settings' ] );
12
13 add_filter( 'admin_footer_text', [ $this, 'admin_footer_text' ] );
14 add_filter( 'admin_post_weforms_export_forms', [ $this, 'export_forms' ] );
15 add_filter( 'admin_post_weforms_export_form_entries', [ $this, 'export_form_entries' ] );
16
17 // load default settings tabs
18 add_filter( 'weforms_settings_tabs', [ $this, 'set_default_settings' ], 5 );
19 add_action( 'weforms_settings_tab_content_general', [ $this, 'settings_tab_general' ] );
20 add_action( 'weforms_settings_tab_content_recaptcha', [ $this, 'settings_tab_recaptcha' ] );
21 add_action( 'weforms_settings_tab_content_secure-database', [ $this, 'settings_tab_secure_database' ] );
22 add_action( 'weforms_settings_tab_content_privacy', [ $this, 'settings_tab_privacy' ] );
23 }
24
25 /**
26 * Register form post types
27 *
28 * @return void
29 */
30 public function register_post_type() {
31 $capability = weforms_form_access_capability();
32
33 register_post_type( 'wpuf_contact_form', [
34 'label' => __( 'Contact Forms', 'weforms' ),
35 'public' => false,
36 'show_ui' => true,
37 'show_in_menu' => false,
38 'capability_type' => 'post',
39 'hierarchical' => false,
40 'query_var' => false,
41 'supports' => ['title'],
42 'capabilities' => [
43 'publish_posts' => $capability,
44 'edit_posts' => $capability,
45 'edit_others_posts' => $capability,
46 'delete_posts' => $capability,
47 'delete_others_posts' => $capability,
48 'read_private_posts' => $capability,
49 'edit_post' => $capability,
50 'delete_post' => $capability,
51 'read_post' => $capability,
52 ],
53 'labels' => [
54 'name' => __( 'Forms', 'weforms' ),
55 'singular_name' => __( 'Form', 'weforms' ),
56 'menu_name' => __( 'Contact Forms', 'weforms' ),
57 'add_new' => __( 'Add Form', 'weforms' ),
58 'add_new_item' => __( 'Add New Form', 'weforms' ),
59 'edit' => __( 'Edit', 'weforms' ),
60 'edit_item' => __( 'Edit Form', 'weforms' ),
61 'new_item' => __( 'New Form', 'weforms' ),
62 'view' => __( 'View Form', 'weforms' ),
63 'view_item' => __( 'View Form', 'weforms' ),
64 'search_items' => __( 'Search Form', 'weforms' ),
65 'not_found' => __( 'No Form Found', 'weforms' ),
66 'not_found_in_trash' => __( 'No Form Found in Trash', 'weforms' ),
67 'parent' => __( 'Parent Form', 'weforms' ),
68 ],
69 ] );
70 }
71
72 /**
73 * Register the admin menu
74 *
75 * @return void
76 */
77 public function register_admin_menu() {
78 global $submenu;
79
80 $capability = weforms_form_access_capability();
81
82 $hook = add_menu_page( __( 'weForms - The Best Contact Form', 'weforms' ), 'weForms', $capability, 'weforms', [ $this, 'contact_form_page'], 'data:image/svg+xml;base64,' . base64_encode( '<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve"><g fill="#9ea3a8"><path d="M285.1,24.1C273.1,9.4,254.8,0,234.3,0H65.7C46.6,0,29.3,8.2,17.3,21.2C6.6,32.9,0,48.5,0,65.7v60.5v108.1 C0,270.6,29.4,300,65.7,300h140h28.6c15.3,0,29.5-5.3,40.7-14.1c15.2-12,25-30.7,25-51.6V65.7C300,49.9,294.4,35.4,285.1,24.1z M212.7,187L104.6,233c-11.1,4.8-24-0.3-28.7-11.4c-4.8-11.1,0.3-24,11.4-28.7l108.1-46.1c11.1-4.8,24,0.3,28.7,11.4 C228.9,169.3,223.8,182.2,212.7,187z M217.4,107.1L99.9,157.8c-11.1,4.8-24-0.3-28.7-11.4c-4.8-11.1,0.3-24,11.4-28.7L200.1,67 c11.1-4.8,24,0.3,28.7,11.4v0C233.6,89.5,228.5,102.3,217.4,107.1z"/></g></svg>' ), 56 );
83
84 if ( current_user_can( $capability ) ) {
85 $submenu['weforms'][] = [ __( 'All Forms', 'weforms' ), $capability, 'admin.php?page=weforms#/' ];
86 $submenu['weforms'][] = [ __( 'Entries', 'weforms' ), $capability, 'admin.php?page=weforms#/entries' ];
87 $submenu['weforms'][] = [ __( 'Tools', 'weforms' ), $capability, 'admin.php?page=weforms#/tools' ];
88
89 if ( class_exists( 'WeForms_Pro' ) ) {
90 if ( current_user_can( 'manage_options' ) ) {
91 $submenu['weforms'][] = [ __( 'Modules', 'weforms' ), $capability, 'admin.php?page=weforms#/modules' ];
92 }
93 } else {
94 $submenu['weforms'][] = [ __( 'Premium', 'weforms' ), $capability, 'admin.php?page=weforms#/premium' ];
95 }
96
97 do_action( 'weforms-admin-menu', $hook, $capability );
98
99 $submenu['weforms'][] = [ __( '<span style="color:#f18500">Help</span>', 'weforms' ), $capability, 'admin.php?page=weforms#/help' ];
100 $submenu['weforms'][] = [ __( 'Privacy', 'weforms' ), $capability, 'admin.php?page=weforms#/privacy' ];
101 }
102
103 // only admins should see the settings page
104 if ( current_user_can( 'manage_options' ) ) {
105 $submenu['weforms'][] = [ __( 'Settings', 'weforms' ), 'manage_options', 'admin.php?page=weforms#/settings' ];
106 }
107
108 add_action( 'load-' . $hook, [ $this, 'load_assets' ] );
109 }
110
111 /**
112 * Load the asset libraries
113 *
114 * @return void
115 */
116 public function load_assets() {
117 require_once __DIR__ . '/class-form-builder-assets.php';
118 new WeForms_Form_Builder_Assets();
119 }
120
121 /**
122 * The contact form page handler
123 *
124 * @return void
125 */
126 public function contact_form_page() {
127 require_once __DIR__ . '/views/vue-index.php';
128 }
129
130 /**
131 * Export forms to JSON
132 *
133 * @return void
134 */
135 public function export_forms() {
136 check_admin_referer( 'weforms-export-forms' );
137
138 if ( !isset( $_REQUEST['weforms_export_forms'] ) ) {
139 return;
140 }
141
142 $export_type = isset( $_POST['export_type'] ) ? sanitize_text_field( wp_unslash( $_POST['export_type'] ) ) : 'all';
143 $selected = isset( $_POST['selected_forms'] ) ? array_map( 'absint', $_POST['selected_forms'] ) : array();
144
145 if ( !class_exists( 'WeForms_Admin_Tools' ) ) {
146 require_once __DIR__ . '/class-admin-tools.php';
147 }
148
149 switch ( $export_type ) {
150 case 'all':
151 WeForms_Admin_Tools::export_to_json();
152
153 return;
154
155 case 'selected':
156 WeForms_Admin_Tools::export_to_json( $selected );
157
158 return;
159 }
160
161 exit;
162 }
163
164 /**
165 * Export form entries to CSV
166 *
167 * @return void
168 */
169 public function export_form_entries() {
170 $form_id = isset( $_REQUEST['selected_forms'] ) ? absint( $_REQUEST['selected_forms'] ) : 0;
171
172 if ( !$form_id ) {
173 return;
174 }
175
176 $entry_array = [];
177 $columns = weforms_get_entry_columns( $form_id, false );
178 $total_entries = weforms_count_form_entries( $form_id );
179 $entries = weforms_get_form_entries( $form_id, [
180 'number' => $total_entries,
181 'offset' => 0,
182 ] );
183 $extra_columns = [
184 'ip_address' => __( 'IP Address', 'weforms' ),
185 'created_at' => __( 'Date', 'weforms' ),
186 ];
187
188 $columns = array_merge( [ 'id' => 'Entry ID' ], $columns, $extra_columns );
189
190 foreach ( $entries as $entry ) {
191 $temp = [];
192
193 foreach ( $columns as $column_id => $label ) {
194 switch ( $column_id ) {
195 case 'id':
196 $temp[ $column_id ] = $entry->id;
197 break;
198
199 case 'ip_address':
200 $temp[ $column_id ] = $entry->ip_address;
201 break;
202
203 case 'created_at':
204 $temp[ $column_id ] = $entry->created_at;
205 break;
206
207 default:
208
209 $value = weforms_get_entry_meta( $entry->id, $column_id, true );
210 $value = weforms_get_pain_text( $value );
211 $temp[ $column_id ] = str_replace( WeForms::$field_separator, ' ', $value );
212
213 break;
214 }
215 }
216
217 $entry_array[] = $temp;
218 }
219
220 error_reporting( 0 );
221
222 if ( ob_get_contents() ) {
223 ob_clean();
224 }
225
226 $blogname = sanitize_title( strtolower( str_replace( ' ', '-', get_option( 'blogname' ) ) ) );
227 $file_name = $blogname . '-weforms-entries-' . time() . '.csv';
228
229 // force download
230 header( 'Content-Type: application/force-download' );
231 header( 'Content-Type: application/octet-stream' );
232 header( 'Content-Type: application/download' );
233
234 // disposition / encoding on response body
235 header( "Content-Disposition: attachment;filename={$file_name}" );
236 header( 'Content-Transfer-Encoding: binary' );
237
238 $handle = fopen( 'php://output', 'w' );
239
240 //handle UTF-8 chars conversion for CSV
241 fprintf( $handle, chr( 0xEF ) . chr( 0xBB ) . chr( 0xBF ) );
242
243 // put the column headers
244 fputcsv( $handle, array_values( $columns ) );
245
246 // put the entry values
247 foreach ( $entry_array as $row ) {
248 fputcsv( $handle, $row );
249 }
250
251 fclose( $handle );
252
253 exit;
254 }
255
256 /**
257 * Watch the wpuf general settings and sync with weforms settings
258 *
259 * @param array $value
260 *
261 * @return array
262 */
263 public function watch_wpuf_settings( $settings ) {
264 $merge_array = [];
265
266 if ( isset( $settings['gmap_api_key'] ) ) {
267 $merge_array['gmap_api'] = $settings['gmap_api_key'];
268 }
269
270 if ( isset( $settings['recaptcha_public'] ) ) {
271 $recaptcha = new StdClass();
272 $recaptcha->key = $settings['recaptcha_public'];
273 $recaptcha->secret = $settings['recaptcha_private'];
274 $recaptcha->type = $settings['recaptcha_type'];
275
276 $merge_array['recaptcha'] = $recaptcha;
277 }
278
279 if ( $merge_array ) {
280 $weforms_settings = get_option( 'weforms_settings', [] );
281 $weforms_settings = array_merge( $weforms_settings, $merge_array );
282
283 update_option( 'weforms_settings', $weforms_settings );
284 }
285
286 return $settings;
287 }
288
289 /**
290 * Admin footer text.
291 *
292 * Fired by `admin_footer_text` filter.
293 *
294 * @since 1.3.5
295 *
296 * @param string $footer_text the content that will be printed
297 *
298 * @return string the content that will be printed
299 **/
300 public function admin_footer_text( $footer_text ) {
301 $current_screen = get_current_screen();
302 $is_weforms_screen = ( $current_screen && false !== strpos( $current_screen->id, 'weforms' ) );
303
304 if ( $is_weforms_screen ) {
305 $footer_text = sprintf(
306 __( 'If you like %1$s please leave us a %2$s rating.', 'weforms' ),
307 '<strong>' . __( 'weForms', 'weforms' ) . '</strong>',
308 '<a href="https://wordpress.org/support/plugin/weforms/reviews/" target="_blank">&#9733;&#9733;&#9733;&#9733;&#9733;</a>'
309 );
310 }
311
312 return $footer_text;
313 }
314
315 /**
316 * Set default settings tabs
317 *
318 * @param array $tabs
319 *
320 * @return array
321 */
322 public function set_default_settings( $tabs = [] ) {
323 $tabs['general'] = [
324 'label' => __( 'General Settings', 'weforms' ),
325 'icon' => WEFORMS_ASSET_URI . '/images/integrations/general-setting.svg',
326 ];
327
328 $tabs['recaptcha'] = [
329 'label' => __( 'reCaptcha', 'weforms' ),
330 'icon' => WEFORMS_ASSET_URI . '/images/integrations/reCaptcha.svg',
331 ];
332
333 $tabs['secure-database'] = [
334 'label' => __( 'Secure Database', 'weforms' ),
335 'icon' => WEFORMS_ASSET_URI . '/images/integrations/secure-database.png',
336 ];
337
338 /* TODO: Refactor this block when more options are added in privacy settings*/
339 if ( class_exists( 'WeForms_Pro' ) ) {
340 $tabs['privacy'] = [
341 'label' => __( 'Privacy', 'weforms' ),
342 'icon' => WEFORMS_ASSET_URI . '/images/privacy.svg',
343 ];
344 }
345
346 return $tabs;
347 }
348
349 /**
350 * General tab content
351 *
352 * @param array $tab
353 *
354 * @return void
355 */
356 public function settings_tab_general( $tab ) {
357 include __DIR__ . '/views/weforms-settings-general.php';
358 }
359
360 /**
361 * recaptcha tab content
362 *
363 * @param array $tab
364 *
365 * @return void
366 */
367 public function settings_tab_recaptcha( $tab ) {
368 include __DIR__ . '/views/weforms-settings-recaptcha.php';
369 }
370 /**
371 * secure database tab content
372 *
373 * @param array $tab
374 *
375 * @return void
376 */
377 public function settings_tab_secure_database( $tab ) {
378 include __DIR__ . '/views/weforms-settings-secure-database.php';
379 }
380 /**
381 * Privacy tab content
382 *
383 * @param array $tab
384 *
385 * @return void
386 */
387 public function settings_tab_privacy( $tab ) {
388 include __DIR__ . '/views/weforms-settings-privacy.php';
389 }
390 }
391