PluginProbe
weForms – Easy Drag & Drop Contact Form Builder For WordPress / 1.4.9
weForms – Easy Drag & Drop Contact Form Builder For WordPress v1.4.9
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 / trunk / includes / admin / class-admin.php

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

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