PluginProbe
weForms – Easy Drag & Drop Contact Form Builder For WordPress / 1.4.0
weForms – Easy Drag & Drop Contact Form Builder For WordPress v1.4.0
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.4.0, at includes/admin/class-admin.php

378 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
10 add_action( 'init', array( $this, 'register_post_type' ) );
11 add_action( 'admin_menu', array( $this, 'register_admin_menu' ) );
12 add_action( 'pre_update_option_wpuf_general', array( $this, 'watch_wpuf_settings' ) );
13
14 add_filter( 'admin_footer_text', array( $this, 'admin_footer_text' ) );
15 add_filter( 'admin_post_weforms_export_forms', array( $this, 'export_forms' ) );
16 add_filter( 'admin_post_weforms_export_form_entries', array( $this, 'export_form_entries' ) );
17
18 // load default settings tabs
19 add_filter( 'weforms_settings_tabs', array( $this, 'set_default_settings' ), 5 );
20 add_action( 'weforms_settings_tab_content_general', array( $this, 'settings_tab_general' ) );
21 add_action( 'weforms_settings_tab_content_recaptcha', array( $this, 'settings_tab_recaptcha' ) );
22 add_action( 'weforms_settings_tab_content_privacy', array( $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', array(
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' => array('title'),
42 'capabilities' => array(
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' => array(
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', array( $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'][] = array( __( 'All Forms', 'weforms' ), $capability, 'admin.php?page=weforms#/' );
86 $submenu['weforms'][] = array( __( 'Entries', 'weforms' ), $capability, 'admin.php?page=weforms#/entries' );
87 $submenu['weforms'][] = array( __( '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'][] = array( __( 'Modules', 'weforms' ), $capability, 'admin.php?page=weforms#/modules' );
92 }
93 } else {
94 $submenu['weforms'][] = array( __( 'Premium', 'weforms' ), $capability, 'admin.php?page=weforms#/premium' );
95 }
96
97 do_action( 'weforms-admin-menu', $hook, $capability );
98
99 $submenu['weforms'][] = array( __( 'Help', 'weforms' ), $capability, 'admin.php?page=weforms#/help' );
100 }
101
102 // only admins should see the settings page
103 if ( current_user_can( 'manage_options' ) ) {
104 $submenu['weforms'][] = array( __( 'Settings', 'weforms' ), 'manage_options', 'admin.php?page=weforms#/settings' );
105 }
106
107 add_action( 'load-'. $hook, array( $this, 'load_assets' ) );
108 }
109
110 /**
111 * Load the asset libraries
112 *
113 * @return void
114 */
115 public function load_assets() {
116 require_once dirname( __FILE__ ) . '/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 dirname( __FILE__ ) . '/views/vue-index.php';
127 }
128
129 /**
130 * Export forms to JSON
131 *
132 * @return void
133 */
134 public function export_forms() {
135
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'] ) ? $_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 dirname( __FILE__ ) . '/class-admin-tools.php';
147 }
148
149 switch ($export_type) {
150 case 'all':
151 WeForms_Admin_Tools::export_to_json();
152 return;
153
154 case 'selected':
155 WeForms_Admin_Tools::export_to_json( $selected );
156 return;
157 }
158
159 exit;
160 }
161
162 /**
163 * Export form entries to CSV
164 *
165 * @return void
166 */
167 public function export_form_entries() {
168
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, array(
179 'number' => $total_entries,
180 'offset' => 0
181 ) );
182 $extra_columns = array(
183 'ip_address' => __( 'IP Address', 'weforms' ),
184 'created_at' => __( 'Date', 'weforms' )
185 );
186
187 $columns = array_merge( array( 'id' => 'Entry ID' ), $columns, $extra_columns );
188
189 foreach ($entries as $entry) {
190 $temp = array();
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
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 = 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
275 $merge_array['recaptcha'] = $recaptcha;
276 }
277
278 if ( $merge_array ) {
279 $weforms_settings = get_option( 'weforms_settings', array() );
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. A huge thank you from %3$s in advance!', '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 '<strong>weDevs</strong>'
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 function set_default_settings( $tabs = array() ) {
323
324 $tabs['general'] = array(
325 'label' => __('General Settings', 'weforms'),
326 'icon' => WEFORMS_ASSET_URI . '/images/integrations/general-setting.svg',
327 );
328
329 $tabs['recaptcha'] = array(
330 'label' => __('reCaptcha', 'weforms'),
331 'icon' => WEFORMS_ASSET_URI . '/images/integrations/reCaptcha.svg',
332 );
333
334 /* TODO: Refactor this block when more options are added in privacy settings*/
335 if ( class_exists( 'WeForms_Pro' ) ) {
336 $tabs['privacy'] = array(
337 'label' => __('Privacy', 'weforms'),
338 'icon' => WEFORMS_ASSET_URI . '/images/privacy.svg',
339 );
340 }
341
342 return $tabs;
343 }
344
345 /**
346 * General tab content
347 *
348 * @param array $tab
349 *
350 * @return void
351 */
352 function settings_tab_general( $tab ) {
353 include dirname( __FILE__ ) . '/views/weforms-settings-general.php';
354 }
355
356 /**
357 * recaptcha tab content
358 *
359 * @param array $tab
360 *
361 * @return void
362 */
363 function settings_tab_recaptcha( $tab ) {
364 include dirname( __FILE__ ) . '/views/weforms-settings-recaptcha.php';
365 }
366
367 /**
368 * Privacy tab content
369 *
370 * @param array $tab
371 *
372 * @return void
373 */
374 function settings_tab_privacy( $tab ) {
375 include dirname( __FILE__ ) . '/views/weforms-settings-privacy.php';
376 }
377 }
378