PluginProbe
WP-Members Membership Plugin / trunk
WP-Members Membership Plugin vtrunk
trunk 3.3.9 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.4.4.2 3.4.5 3.4.6 3.4.7 3.4.8 3.4.9 3.4.9.1 3.4.9.2 3.4.9.3 3.4.9.4 3.4.9.5 3.4.9.6 3.4.9.7 3.5.0 3.5.1 3.5.2 3.5.3 3.5.4 All 34 releases
wp-members / includes / admin / tabs / class-wp-members-admin-tab-fields.php

class-wp-members-admin-tab-fields.php in WP-Members Membership Plugin trunk, at includes/admin/tabs/class-wp-members-admin-tab-fields.php

930 lines 43.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * WP-Members Admin Functions
4 *
5 * Functions to manage the fields tab.
6 *
7 * This file is part of the WP-Members plugin by Chad Butler
8 * You can find out more about this plugin at https://rocketgeek.com
9 * Copyright (c) 2006-2026 Chad Butler
10 * WP-Members(tm) is a trademark of butlerblog.com
11 *
12 * @package WP-Members
13 * @author Chad Butler
14 * @copyright 2006-2026
15 */
16
17 // Exit if accessed directly.
18 if ( ! defined( 'ABSPATH' ) ) {
19 exit();
20 }
21
22 class WP_Members_Admin_Tab_Fields {
23
24 /**
25 * Creates the fields tab.
26 *
27 * @since 3.0.1
28 * @since 3.3.0 Renamed wpmem_a_fields_tab() to do_tab().
29 *
30 * @param string $tab The admin tab being displayed.
31 * @return string|bool The fields tab, otherwise false.
32 */
33 public static function do_tab( $tab ) {
34 if ( $tab == 'fields' ) {
35 // Render the fields tab.
36 WP_Members_Admin_Tab_Fields::build_settings();
37 return;
38 }
39 }
40
41 /**
42 * Scripts needed for the fields tab.
43 *
44 * @since 3.1.8
45 * @sinec 3.3.0 Renamed wpmem_a_fields_tab_scripts() to enqueue_scripts
46 */
47 public static function enqueue_scripts() {
48 wp_enqueue_script( 'jquery-ui-sortable' );
49 }
50
51 /**
52 * Renders the content of the fields tab.
53 *
54 * @since 3.1.8
55 * @since 3.3.0 Renamed from wpmem_a_render_fields_tab() to build_settings().
56 *
57 * @global object $wpmem The WP_Members Object.
58 * @global string $did_update
59 * @global string $delete_action
60 */
61 public static function build_settings() {
62
63 global $wpmem, $did_update, $delete_action;
64 $wpmem_fields = wpmem_fields();
65 $edit_meta = sanitize_text_field( wpmem_get( 'field', false, 'get' ) );
66 $add_meta = sanitize_text_field( wpmem_get( 'add_field', false ) );
67
68 if ( 'delete' == $delete_action ) {
69
70 $delete_fields = wpmem_sanitize_array( wpmem_get( 'delete' ) );?>
71
72 <?php if ( empty( $delete_fields ) ) { ?>
73 <p><?php _e( 'No fields selected for deletion', 'wp-members' ); ?></p>
74 <?php } else { ?>
75 <p><?php _e( 'Are you sure you want to delete the following fields?', 'wp-members' ); ?></p>
76 <?php foreach ( $delete_fields as $meta ) {
77 $meta = esc_html( $meta );
78 echo esc_html( $wpmem->fields[ $meta ]['label'] ) . ' (meta key: ' . $meta . ')<br />';
79 } ?>
80 <form name="<?php echo esc_attr( $delete_action ); ?>" id="<?php echo esc_attr( $delete_action ); ?>" method="post" action="<?php echo esc_url( wpmem_admin_form_post_url() ); ?>">
81 <?php wp_nonce_field( 'wpmem-confirm-delete' ); ?>
82 <input type="hidden" name="delete_fields" value="<?php echo esc_attr( implode( ",", $delete_fields ) ); ?>" />
83 <input type="hidden" name="dodelete" value="delete_confirmed" />
84 <?php submit_button( 'Delete Fields' ); ?>
85 </form><?php
86 }
87 } else {
88
89 if ( 'delete_confirmed' == wpmem_get( 'dodelete' ) ) {
90
91 check_admin_referer( 'wpmem-confirm-delete' );
92
93 $delete_fields = sanitize_text_field( wpmem_get( 'delete_fields', array() ) );
94 $delete_fields = explode( ",", $delete_fields );
95 $wpmem_new_fields = array();
96 foreach ( $wpmem_fields as $field ) {
97 if ( ! in_array( $field[2], $delete_fields ) ) {
98 $wpmem_new_fields[] = $field;
99 }
100 }
101 update_option( 'wpmembers_fields', $wpmem_new_fields, false );
102 $did_update = esc_html__( 'Fields deleted', 'wp-members' );
103 }
104
105 if ( $did_update ) { ?>
106 <div id="message" class="updated fade"><p><strong><?php echo $did_update; ?></strong></p></div>
107 <?php }
108 if ( $edit_meta || $add_meta ) {
109 $mode = ( $edit_meta ) ? sanitize_text_field( wpmem_get( 'mode', false, 'get' ) ) : 'add';
110 self::build_field_edit( $mode, $wpmem_fields, $edit_meta );
111 } else {
112 self::build_field_table();
113 } ?>
114 <h3><span><?php _e( 'Need help?', 'wp-members' ); ?></span></h3>
115 <div class="inside">
116 <strong><i><a href="https://rocketgeek.com/plugins/wp-members/docs/plugin-settings/fields/" target="_blank"><?php _e( 'Field Manager Documentation', 'wp-members' ); ?></a></i></strong>
117 </div>
118 <?php
119 }
120 }
121
122 /**
123 * Function to dispay the add/edit field form.
124 *
125 * @since 2.8
126 * @since 3.1.8 Changed name from wpmem_a_field_edit().
127 * @since 3.3.0 Changed name from wpmem_a_render_fields_tab_field_edit() to build_field_edit().
128 *
129 * @global object $wpmem The WP_Members Object.
130 * @param string $mode The mode for the function (edit|add)
131 * @param array|null $wpmem_fields The array of fields
132 * @param string|null $field The field being edited
133 */
134 public static function build_field_edit( $mode, $wpmem_fields, $meta_key ) {
135 global $wpmem;
136 $fields = wpmem_fields();
137 if ( $mode == 'edit' ) {
138 $field = $fields[ $meta_key ];
139 } else {
140 $field['checkbox_label'] = ''; // fixes unset variable at 308/309 since $field would not be set.
141 }
142 $form_action = ( $mode == 'edit' ) ? 'editfieldform' : 'addfieldform';
143 $span_optional = '<span class="description">' . esc_html__( '(optional)', 'wp-members' ) . '</span>';
144 $span_required = '<span class="req">' . esc_html__( '(required)', 'wp-members' ) . '</span>';
145 $form_submit = array( 'mode' => $mode );
146 if ( isset( $_GET['field'] ) ) {
147 $form_submit['field'] = $meta_key;
148 } ?>
149 <h3 class="title"><?php ( $mode == 'edit' ) ? _e( 'Edit Field', 'wp-members' ) : _e( 'Add a Field', 'wp-members' ); ?></h3>
150 <form name="<?php echo $form_action; ?>" id="<?php echo $form_action; ?>" method="post" action="<?php echo wpmem_admin_form_post_url( $form_submit ); ?>">
151 <?php wp_nonce_field( 'wpmem_add_field' ); ?>
152 <ul>
153 <li>
154 <label><?php _e( 'Field Label', 'wp-members' ); ?> <?php echo $span_required; ?></label>
155 <input type="text" name="add_name" value="<?php echo ( $mode == 'edit' ) ? $field['label'] : false; ?>" class="regular-text" required />
156 <?php _e( 'The name of the field as it will be displayed to the user.', 'wp-members' ); ?>
157 </li>
158 <li>
159 <label><?php _e( 'Meta Key', 'wp-members' ); ?> <?php echo $span_required; ?></label>
160 <?php if ( $mode == 'edit' ) {
161 echo "<span>$meta_key</span>"; ?>
162 <input type="hidden" name="add_option" value="<?php echo $meta_key; ?>" required />
163 <?php } else { ?>
164 <input type="text" name="add_option" value="" class="regular-text" />
165 <?php _e( 'The database meta value for the field. It must be unique and contain no spaces (underscores are ok).', 'wp-members' ); ?>
166 <?php } ?>
167 </li>
168 <li>
169 <label><?php _e( 'Field Type', 'wp-members' ); ?></label>
170 <?php if ( $mode == 'edit' ) {
171 echo '<span>' . $field['type'] . '</span>'; ?>
172 <input type="hidden" name="add_type" value="<?php echo $field['type']; ?>" />
173 <?php } else { ?>
174 <select name="add_type" id="wpmem_field_type_select">
175 <option value="text"><?php _e( 'text', 'wp-members' ); ?></option>
176 <option value="email"><?php _e( 'email', 'wp-members' ); ?></option>
177 <option value="textarea"><?php _e( 'textarea', 'wp-members' ); ?></option>
178 <option value="checkbox"><?php _e( 'checkbox', 'wp-members' ); ?></option>
179 <option value="multicheckbox"><?php _e( 'multiple checkbox', 'wp-members' ); ?></option>
180 <option value="select"><?php _e( 'select (dropdown)', 'wp-members' ); ?></option>
181 <option value="multiselect"><?php _e( 'multiple select', 'wp-members' ); ?></option>
182 <option value="radio"><?php _e( 'radio group', 'wp-members' ); ?></option>
183 <option value="password"><?php _e( 'password', 'wp-members' ); ?></option>
184 <option value="image"><?php _e( 'image', 'wp-members' ); ?></option>
185 <option value="file"><?php _e( 'file', 'wp-members' ); ?></option>
186 <option value="url"><?php _e( 'url', 'wp-members' ); ?></option>
187 <option value="number"><?php _e( 'number', 'wp-members' ); ?></option>
188 <option value="date"><?php _e( 'date', 'wp-members' ); ?></option>
189 <option value="timestamp"><?php _e( 'timestamp', 'wp-members' ); ?></option>
190 <option value="hidden"><?php _e( 'hidden', 'wp-members' ); ?></option>
191 <?php if ( $wpmem->enable_products ) { ?>
192 <option value="membership"><?php _e( 'membership', 'wp-members' ); ?></option>
193 <?php } ?>
194 </select>
195 <?php } ?>
196 </li>
197 <li>
198 <label><?php _e( 'Registration', 'wp-members' ); ?></label>
199 <?php if ( 'username' != $meta_key && 'user_email' != $meta_key ) { ?>
200 <input type="checkbox" name="add_display" value="y" <?php echo ( $mode == 'edit' ) ? checked( true, $field['register'] ) : false; ?> />
201 <?php } else { ?>
202 <span><?php _e( 'This field is always displayed', 'wp-members' ); ?></span>
203 <input type="hidden" name="add_display" value="y" />
204 <?php } ?>
205 </li>
206 <li>
207 <label><?php _e( 'Profile', 'wp-members' ); ?></label>
208 <?php if ( 'username' != $meta_key && 'user_email' != $meta_key ) { ?>
209 <input type="checkbox" name="add_profile" value="y" <?php echo ( $mode == 'edit' ) ? checked( true, $field['profile'] ) : false; ?> />
210 <?php } else { ?>
211 <span><?php _e( 'This field cannot be changed', 'wp-members' ); ?></span>
212 <input type="hidden" name="add_profile" value="y" />
213 <?php } ?>
214 </li>
215 <li>
216 <label><?php _e( 'Required?', 'wp-members' ); ?></label>
217 <?php if ( 'username' != $meta_key && 'user_email' != $meta_key ) { ?>
218 <input type="checkbox" name="add_required" value="y" <?php echo ( $mode == 'edit' ) ? checked( true, $field['required'] ) : false; ?> />
219 <?php } else { ?>
220 <span><?php _e( 'This field is always required', 'wp-members' ); ?></span>
221 <input type="hidden" name="add_required" value="y" />
222 <?php } ?>
223 </li>
224 <!--<div id="wpmem_allowhtml">
225 <li>
226 <label><?php //_e( 'Allow HTML?', 'wp-members' ); ?></label>
227 <input type="checkbox" name="add_html" value="y" <?php //echo ( $mode == 'edit' ) ? checked( true, $field['html'] ) : false; ?> />
228 </li>
229 </div>-->
230
231 <?php
232 /**
233 @todo add default value entry for field properties.
234
235 if ( $mode == 'add' || ( $mode == 'edit' && ( in_array( $field['type'], array( 'text', 'number', 'date' ) ) ) ) ) {
236 echo ( $mode == 'add' ) ? '<div id="wpmem_default_value">' : '';
237 <li>
238 <label><?php _e( 'Default value', 'wp-members' ); ?></label>
239 <input type="text" name="add_default_value" value="<?php echo ( $mode == 'edit' ) ? ( isset( $field['default_value'] ) ? $field['default_value'] : false ) : false; ?>" /> <?php echo __( 'This will pre-populate the field with a default value. Leave empty if no default value is desired', 'wp-members' ) . ' ' . $span_optional; ?>
240 </li>
241 echo ( $mode == 'add' ) ? '</div>' : '';
242 }
243 */ ?>
244
245 <?php if ( $mode == 'add' || ( $mode == 'edit' && ( in_array( $field['type'], array( 'text', 'password', 'email', 'url', 'number', 'date', 'textarea', 'timestamp' ) ) ) ) ) { ?>
246 <?php echo ( $mode == 'add' ) ? '<div id="wpmem_placeholder">' : ''; ?>
247 <li>
248 <label><?php _e( 'Placeholder', 'wp-members' ); ?></label>
249 <input type="text" name="add_placeholder" value="<?php echo ( $mode == 'edit' ) ? ( isset( $field['placeholder'] ) ? $field['placeholder'] : false ) : false; ?>" class="regular-text" /> <?php echo $span_optional; ?>
250 </li>
251 <?php echo ( $mode == 'add' ) ? '</div>' : ''; ?>
252 <?php } ?>
253 <?php if ( $mode == 'add' || ( $mode == 'edit' && ( in_array( $field['type'], array( 'text', 'password', 'email', 'url', 'date', 'timestamp' ) ) ) ) ) { ?>
254 <?php echo ( $mode == 'add' ) ? '<div id="wpmem_pattern">' : ''; ?>
255 <li>
256 <label><?php _e( 'Pattern', 'wp-members' ); ?></label>
257 <input type="text" name="add_pattern" value="<?php echo ( $mode == 'edit' ) ? ( isset( $field['pattern'] ) ? $field['pattern'] : false ) : false; ?>" class="regular-text" /> <?php echo $span_optional; ?>
258 </li>
259 <?php echo ( $mode == 'add' ) ? '</div>' : ''; ?>
260 <?php } ?>
261 <?php if ( $mode == 'add' || ( $mode == 'edit' && ( in_array( $field['type'], array( 'text', 'password', 'email', 'url', 'number', 'date', 'timestamp' ) ) ) ) ) { ?>
262 <?php echo ( $mode == 'add' ) ? '<div id="wpmem_title">' : ''; ?>
263 <li>
264 <label><?php _e( 'Title', 'wp-members' ); ?></label>
265 <input type="text" name="add_title" value="<?php echo ( $mode == 'edit' ) ? ( isset( $field['title'] ) ? $field['title'] : false ) : false; ?>" class="regular-text" /> <?php echo $span_optional; ?>
266 </li>
267 <?php echo ( $mode == 'add' ) ? '</div>' : ''; ?>
268 <?php } ?>
269 <?php if ( $mode == 'add' || ( $mode == 'edit' && ( in_array( $field['type'], array( 'timestamp' ) ) ) ) ) { ?>
270 <?php echo ( $mode == 'add' ) ? '<div id="wpmem_date_format">' : ''; ?>
271 <li>
272 <label><?php _e( 'PHP Date Format', 'wp-members' ); ?></label>
273 <input type="text" name="add_timestamp_display" value="<?php echo ( $mode == 'edit' ) ? ( isset( $field['timestamp_display'] ) ? $field['timestamp_display'] : false ) : false; ?>" class="regular-text" /> <?php echo $span_optional; ?>
274 </li>
275 <?php echo ( $mode == 'add' ) ? '</div>' : ''; ?>
276 <?php } ?>
277
278 <?php if ( $mode == 'add' || ( $mode == 'edit' && ( in_array( $field['type'], array( 'number', 'date' ) ) ) ) ) { ?>
279 <?php echo ( $mode == 'add' ) ? '<div id="wpmem_min_max">' : ''; ?>
280 <li>
281 <label><?php _e( 'Minimum Value', 'wp-members' ); ?></label>
282 <input type="text" name="add_min" value="<?php echo ( $mode == 'edit' ) ? ( isset( $field['min'] ) ? $field['min'] : false ) : false; ?>" class="regular-text" /> <?php echo $span_optional; ?>
283 </li>
284 <li>
285 <label><?php _e( 'Maximum Value', 'wp-members' ); ?></label>
286 <input type="text" name="add_max" value="<?php echo ( $mode == 'edit' ) ? ( isset( $field['max'] ) ? $field['max'] : false ) : false; ?>" class="regular-text" /> <?php echo $span_optional; ?>
287 </li>
288 <?php echo ( $mode == 'add' ) ? '</div>' : ''; ?>
289 <?php } ?>
290 <?php if ( $mode == 'add' || ( $mode == 'edit' && ( in_array( $field['type'], array( 'textarea' ) ) ) ) ) { ?>
291 <?php echo ( $mode == 'add' ) ? '<div id="wpmem_rows_cols">' : ''; ?>
292 <li>
293 <label><?php _e( 'Rows', 'wp-members' ); ?></label>
294 <input type="number" name="add_rows" value="<?php echo ( $mode == 'edit' ) ? ( isset( $field['rows'] ) ? $field['rows'] : false ) : false; ?>" /> <?php echo $span_optional; ?>
295 </li>
296 <li>
297 <label><?php _e( 'Columns', 'wp-members' ); ?></label>
298 <input type="number" name="add_cols" value="<?php echo ( $mode == 'edit' ) ? ( isset( $field['cols'] ) ? $field['cols'] : false ) : false; ?>" /> <?php echo $span_optional; ?>
299 </li>
300 <?php echo ( $mode == 'add' ) ? '</div>' : ''; ?>
301 <?php } ?>
302 <?php if ( $mode == 'add' || ( $mode == 'edit' && ( $field['type'] == 'file' || $field['type'] == 'image' ) ) ) { ?>
303 <?php echo ( $mode == 'add' ) ? '<div id="wpmem_file_info">' : ''; ?>
304 <li>
305 <label><?php _e( 'Accepted file types:', 'wp-members' ); ?></label>
306 <input type="text" name="add_file_value" value="<?php echo ( $mode == 'edit' && ( $field['type'] == 'file' || $field['type'] == 'image' ) ) ? $field['file_types'] : false; ?>" class="regular-text" />
307 </li>
308 <li>
309 <label>&nbsp;</label>
310 <span class="description"><?php _e( 'Accepted file types should be set like this: jpg|jpeg|png|gif', 'wp-members' ); ?></span>
311 </li>
312 <?php echo ( $mode == 'add' ) ? '</div>' : ''; ?>
313 <?php } ?>
314 <?php if ( $mode == 'add' || ( $mode == 'edit' && $field['type'] == 'checkbox' ) ) { ?>
315 <?php echo ( $mode == 'add' ) ? '<div id="wpmem_checkbox_info">' : ''; ?>
316 <li>
317 <label><?php _e( 'Checked by default?', 'wp-members' ); ?></label>
318 <input type="checkbox" name="add_checked_default" value="y" <?php echo ( $mode == 'edit' && $field['type'] == 'checkbox' ) ? checked( true, $field['checked_default'] ) : false; ?> />
319 </li>
320 <li>
321 <label><?php _e( 'HTML label position', 'wp-members' ); ?></label>
322 <select name="add_checkbox_label">
323 <option value="0" <?php selected( $field['checkbox_label'], 0 ); ?>><?php _e( 'Before the input tag', 'wp-members' ); ?></option>
324 <option value="1" <?php selected( $field['checkbox_label'], 1 ); ?>><?php _e( 'After the input tag', 'wp-members' ); ?></option>
325 </select> <span class="description"><?php _e( 'Selecting "after" will generally display the label to the right of the checkbox', 'wp-members' ); ?></span>
326 </li>
327 <li>
328 <label><?php _e( 'Stored value if checked:', 'wp-members' ); ?></label>
329 <input type="text" name="add_checked_value" id="add_checked_value" value="<?php echo ( $mode == 'edit' && $field['type'] == 'checkbox' ) ? $field['checked_value'] : false; ?>" class="regular-text" /> <span class="req"><?php _e( '(required)', 'wp-members' ); ?></span>
330 </li>
331 <?php echo ( $mode == 'add' ) ? '</div>' : ''; ?>
332 <?php }
333
334 if ( isset( $field['type'] ) ) {
335 $additional_settings = ( $field['type'] == 'select' || $field['type'] == 'multiselect' || $field['type'] == 'multicheckbox' || $field['type'] == 'radio' ) ? true : false;
336 $delimiter_settings = ( $field['type'] == 'multiselect' || $field['type'] == 'multicheckbox' ) ? true : false;
337 }
338 if ( $mode == 'add' || ( $mode == 'edit' && $additional_settings ) ) { ?>
339 <?php echo ( $mode == 'add' ) ? '<div id="wpmem_dropdown_info">' : ''; ?>
340 <?php if ( $mode == 'add' || ( $mode == 'edit' && $delimiter_settings ) ) {
341 echo ( $mode == 'add' ) ? '<div id="wpmem_delimiter_info">' : '';
342 if ( isset( $field['delimiter'] ) && ( "|" == $field['delimiter'] || "," == $field['delimiter'] ) ) {
343 $delimiter = $field['delimiter'];
344 } else {
345 $delimiter = "|";
346 }
347 ?>
348 <li>
349 <label><?php _e( 'Stored values delimiter:', 'wp-members' ); ?></label>
350 <select name = "add_delimiter_value">
351 <option value="|" <?php selected( '|', $delimiter ); ?>>pipe "|"</option>
352 <option value="," <?php selected( ',', $delimiter ); ?>>comma ","</option>
353 </select>
354 </li>
355 <?php echo ( $mode == 'add' ) ? '</div>' : '';
356 } ?>
357 <?php if ( $mode == 'add' || ( $mode == 'edit' && ( $field['type'] == 'select' || $field['type'] == 'multiselect' ) ) ) { ?>
358 <li id="add_dropdown_value">
359 <label style="vertical-align:top"><?php _e( 'Values (Displayed|Stored):', 'wp-members' ); ?> <?php echo $span_required; ?></label>
360 <textarea name="add_dropdown_value" rows="8" cols="60"><?php
361 // Accomodate editing the current dropdown values or create dropdown value example.
362 if ( $mode == 'edit' ) {
363 for ( $row = 0; $row < count( $field['values'] ); $row++ ) {
364 // If the row contains commas (i.e. 1,000-10,000), wrap in double quotes.
365 if ( strstr( $field['values'][ $row ], ',' ) ) {
366 echo '"' . $field['values'][ $row ]; echo ( $row == count( $field['values'] )- 1 ) ? '"' : "\",\n";
367 } else {
368 echo $field['values'][ $row ]; echo ( $row == count( $field['values'] )- 1 ) ? "" : ",\n";
369 } }
370 } else { ?>
371 ---- Select One ----|,
372 Choice One|choice_one,
373 "1,000|one_thousand",
374 "1,000-10,000|1,000-10,000",
375 Last Row|last_row
376 <?php } ?></textarea>
377 </li>
378 <?php } ?>
379 <?php if ( $mode == 'add' || ( $mode == 'edit' && ( $field['type'] == 'radio' || $field['type'] == 'multicheckbox' ) ) ) { ?>
380 <li id="add_radio_value" >
381 <label style="vertical-align:top"><?php _e( 'Values (Displayed|Stored):', 'wp-members' ); ?> <?php echo $span_required; ?></label>
382 <textarea name="add_radio_value" rows="8" cols="60"><?php
383 // Accomodate editing the current radio values or create radio value example.
384 if ( $mode == 'edit' ) {
385 for ( $row = 0; $row < count( $field['values'] ); $row++ ) {
386 // If the row contains commas (i.e. 1,000-10,000), wrap in double quotes.
387 if ( strstr( $field['values'][ $row ], ',' ) ) {
388 echo '"' . $field['values'][ $row ]; echo ( $row == count( $field['values'] )- 1 ) ? '"' : "\",\n";
389 } else {
390 echo $field['values'][ $row ]; echo ( $row == count( $field['values'] )- 1 ) ? "" : ",\n";
391 } }
392 } else { ?>
393 Choice One|choice_one,
394 "1,000|one_thousand",
395 "1,000-10,000|1,000-10,000",
396 Last Row|last_row
397 <?php } ?></textarea>
398 </li>
399 <?php } ?>
400 <li>
401 <label>&nbsp;</label>
402 <span class="description"><?php _e( 'Options should be Option Name|option_value,', 'wp-members' ); ?></span>
403 </li>
404 <li>
405 <label>&nbsp;</label>
406 <span class="description"><a href="https://rocketgeek.com/plugins/wp-members/docs/registration/choosing-fields/" target="_blank"><?php _e( 'Visit plugin site for more information', 'wp-members' ); ?></a></span>
407 </li>
408 <?php echo ( $mode == 'add' ) ? '</div>' : ''; ?>
409 <?php } ?>
410 <?php if ( $mode == 'add' || ( $mode == 'edit' && $field['type'] == 'hidden' ) ) { ?>
411 <?php echo ( $mode == 'add' ) ? '<div id="wpmem_hidden_info">' : ''; ?>
412 <li>
413 <label><?php _e( 'Value', 'wp-members' ); ?> <?php echo $span_required; ?></label>
414 <input type="text" name="add_hidden_value" id="add_hidden_value" value="<?php echo ( $mode == 'edit' && $field['type'] == 'hidden' ) ? $field['value'] : ''; ?>" class="regular-text" />
415 </li>
416 <?php echo ( $mode == 'add' ) ? '</div>' : ''; ?>
417 <?php } ?>
418 <li>
419 <label><?php _e( 'Label href', 'wp-members' ); ?></label>
420 <input type="text" name="add_terms_check_href" value="<?php echo ( $mode == 'edit' ) ? ( isset( $field['label_href'] ) ? $field['label_href'] : false ) : false; ?>" class="regular-text" /> <?php echo $span_optional; ?>
421 </li>
422 </ul><br />
423 <?php if ( $mode == 'edit' ) { ?><input type="hidden" name="field_arr" value="<?php echo $meta_key; ?>" /><?php } ?>
424 <?php if ( 'add' == $mode ) {
425 $ids = array();
426 foreach ( $fields as $f ) {
427 $ids[] = $f[0];
428 }
429 sort( $ids );
430 $field_order_id = end( $ids ) + 1;
431 } else {
432 $field_order_id = $field[0];
433 } ?>
434 <input type="hidden" name="add_order_id" value="<?php echo intval( $field_order_id ); ?>" />
435 <input type="hidden" name="wpmem_admin_a" value="<?php echo ( $mode == 'edit' ) ? 'edit_field' : 'add_field'; ?>" />
436 <?php $text = ( $mode == 'edit' ) ? esc_html__( 'Save Changes', 'wp-members' ) : esc_html__( 'Add Field', 'wp-members' ); ?>
437 <?php submit_button( $text ); ?>
438 <p><a href="<?php echo esc_url( add_query_arg( array( 'page' => 'wpmem-settings', 'tab' => 'fields' ), get_admin_url() . 'options-general.php' ) ); ?>">&laquo; <?php esc_html_e( 'Return to Fields Table', 'wp-members' ); ?></a></p>
439 </form><?php
440 }
441
442 /**
443 * Function to display the table of fields in the field manager tab.
444 *
445 * @since 2.8.0
446 * @since 3.1.8 Changed name from wpmem_a_field_table().
447 * @since 3.3.0 Changed namme from wpmem_a_render_fields_tab_field_table() to build_field_table().
448 *
449 * @global object $wpmem
450 */
451 public static function build_field_table() {
452 global $wpmem;
453
454 $wpmem_ut_fields_skip = array( 'username', 'user_email', 'confirm_email', 'password', 'confirm_password' );
455 $wpmem_ut_fields = get_option( 'wpmembers_utfields' );
456 $wpmem_us_fields_skip = array( 'username', 'user_email', 'confirm_email', 'password', 'confirm_password' );
457 $wpmem_us_fields = get_option( 'wpmembers_usfields' );
458 if ( wpmem_is_woo_active() ) {
459 if ( 1 == $wpmem->woo->add_checkout_fields ) {
460 $wpmem_wc_checkout_skip = array_merge( rktgk_wc_checkout_fields(), array( 'username', 'user_login', 'user_email', 'confirm_email', 'password', 'confirm_password' ) );
461 $wpmem_wc_checkout_fields = get_option( 'wpmembers_wcchkout_fields' );
462 }
463 if ( 1 == $wpmem->woo->add_my_account_fields ) {
464 $wpmem_wc_acct_skip = array_merge( array( 'username', 'user_login', 'user_email', 'confirm_email', 'password', 'confirm_password' ) );
465 $wpmem_wc_acct_fields = get_option( 'wpmembers_wcacct_fields' );
466 }
467 if ( 1 == $wpmem->woo->add_update_fields ) {
468 $wpmem_wc_update_skip = array_merge( rktgk_wc_checkout_fields(), array( 'username', 'user_login', 'user_email', 'confirm_email', 'password', 'confirm_password' ) );
469 $wpmem_wc_update_fields = get_option( 'wpmembers_wcupdate_fields' );
470 }
471 }
472
473 $wpmem_fields = get_option( 'wpmembers_fields', array() );
474 foreach ( $wpmem_fields as $key => $field ) {
475
476 // @todo - transitional until new array keys (so maybe never, or maybe 3.5.0)
477 if ( is_numeric( $key ) ) {
478 // Adjust for profile @todo - temporary until new array keys.
479 if ( isset( $field['profile'] ) ) {
480 $profile = ( true == $field['profile'] ) ? 'y' : 'n';
481 } else {
482 $profile = $field[4];
483 }
484
485 $meta = $field[2];
486 $ut_checked = ( ( $wpmem_ut_fields ) && ( array_key_exists( $meta, $wpmem_ut_fields ) ) ) ? $meta : false;
487 $us_checked = ( ( $wpmem_us_fields ) && ( array_key_exists( $meta, $wpmem_us_fields ) ) ) ? $meta : false;
488
489 if ( wpmem_is_woo_active() ) {
490 if ( 1 == $wpmem->woo->add_checkout_fields ) {
491 $wc_chkout_checked = ( ( $wpmem_wc_checkout_fields ) && ( in_array( $meta, $wpmem_wc_checkout_fields ) ) ) ? $meta : false;
492 }
493 if ( 1 == $wpmem->woo->add_my_account_fields ) {
494 $wc_acct_checked = ( ( $wpmem_wc_acct_fields ) && ( in_array( $meta, $wpmem_wc_acct_fields ) ) ) ? $meta : false;
495 }
496 if ( 1 == $wpmem->woo->add_update_fields ) {
497 $wc_update_checked = ( ( $wpmem_wc_update_fields ) && ( in_array( $meta, $wpmem_wc_update_fields ) ) ) ? $meta : false;
498 }
499 }
500
501 $item['order'] = $field[0];
502 $item['label'] = $field[1];
503 $item['meta'] = $meta;
504 $item['type'] = $field[3];
505 $item['display'] = ( 'user_email' != $meta && 'username' != $meta ) ? wpmem_form_field( array(
506 'name' => "wpmem_fields_display[]",
507 'type' => 'checkbox',
508 'value' => $meta,
509 'compare' => ( ( 'y' == $field[4] ) ? $meta : false )
510 ) ) : '';
511 $item['req'] = ( 'user_email' != $meta && 'username' != $meta ) ? wpmem_form_field( array(
512 'name' => "wpmem_fields_required[]",
513 'type' => 'checkbox',
514 'value' => $meta,
515 'compare' => ( ( 'y' == $field[5] ) ? $meta : false )
516 ) ) : '';
517 $item['profile'] = ( 'user_email' != $meta && 'username' != $meta && 'password' != $meta && 'confirm_password' != $meta ) ? wpmem_form_field( array(
518 'name' => "wpmem_fields_profile[]",
519 'type' => "checkbox",
520 'value' => $meta,
521 'compare' => ( ( 'y' == $profile ) ? $meta : false )
522 ) ) : '';
523 $item['userscrn'] = ( ! in_array( $meta, $wpmem_ut_fields_skip ) ) ? wpmem_form_field( array(
524 'name' => "wpmem_fields_uscreen[" . $meta . "]",
525 'type' => 'checkbox',
526 'value' => $field[1],
527 'compare' => ( ( $ut_checked == $meta ) ? $field[1] : false )
528 ) ) : '';
529 $item['usearch'] = ( ! in_array( $meta, $wpmem_us_fields_skip ) ) ? wpmem_form_field( array(
530 'name' => "wpmem_fields_usearch[" . $meta . "]",
531 'type' => 'checkbox',
532 'value' => $field[1],
533 'compare' => ( ( $us_checked == $meta ) ? $field[1] : false )
534 ) ) : '';
535
536 if ( wpmem_is_woo_active() ) {
537 //if ( wpmem_is_enabled( 'woo/add_checkout_fields' ) ) {
538 if ( 1 == $wpmem->woo->add_checkout_fields ) {
539 $item['wcchkout'] = ( ! in_array( $meta, $wpmem_wc_checkout_skip ) && $item['type'] != 'file' && $item['type'] != 'image' ) ? wpmem_form_field( array(
540 'name' => "wpmem_fields_wcchkout[]",
541 'type' => 'checkbox',
542 'value' => $meta,
543 'compare' => ( ( $wc_chkout_checked == $meta ) ? $meta : false )
544 ) ) : '';
545 }
546 //if ( wpmem_is_enabled( 'woo/add_my_account_fields' ) ) {
547 if ( 1 == $wpmem->woo->add_my_account_fields ) {
548 $item['wcaccount'] = ( ! in_array( $meta, $wpmem_wc_acct_skip ) && $item['type'] != 'file' && $item['type'] != 'image' ) ? wpmem_form_field( array(
549 'name' => "wpmem_fields_wcaccount[]",
550 'type' => 'checkbox',
551 'value' => $meta,
552 'compare' => ( ( $wc_acct_checked == $meta ) ? $meta : false )
553 ) ) : '';
554 }
555 //if ( wpmem_is_enabled( 'woo/add_update_fields' ) ) {
556 if ( 1 == $wpmem->woo->add_update_fields ) {
557 $item['wcupdate'] = ( ! in_array( $meta, $wpmem_wc_update_skip ) && $item['type'] != 'file' && $item['type'] != 'image' ) ? wpmem_form_field( array(
558 'name' => "wpmem_fields_wcupdate[]",
559 'type' => 'checkbox',
560 'value' => $meta,
561 'compare' => ( ( $wc_update_checked == $meta ) ? $meta : false )
562 ) ) : '';
563 }
564 }
565
566 $item['edit'] = '<span class="dashicons dashicons-move" title="' . esc_html__( 'Drag and drop to reorder fields', 'wp-members' ) . '"></span>';
567
568 $field_items[] = $item;
569 }
570 }
571
572 $extra_user_screen_items = array(
573 'user_registered' => esc_html__( 'Registration Date', 'wp-members' ),
574 '_wpmem_user_confirmed' => esc_html__( 'Confirmed', 'wp-members' ),
575 'active' => esc_html__( 'Activated', 'wp-members' ),
576 'wpmem_reg_ip' => esc_html__( 'Registration IP', 'wp-members' ),
577 'exp_type' => esc_html__( 'Subscription Type', 'wp-members' ),
578 'expires' => esc_html__( 'Expires', 'wp-members' ),
579 'user_id' => esc_html__( 'User ID', 'wp-members' ),
580 );
581
582 foreach ( $extra_user_screen_items as $key => $item ) {
583 $ut_checked = ( ( $wpmem_ut_fields ) && ( in_array( $item, $wpmem_ut_fields ) ) ) ? $item : '';
584 if ( 'user_id' == $key
585 || 'user_registered' == $key
586 || 'wpmem_reg_ip' == $key
587 || ( '_wpmem_user_confirmed' == $key && 1 == $wpmem->act_link )
588 || ( 'active' == $key && 1 == $wpmem->mod_reg )
589 || wpmem_is_exp_enabled() && $wpmem->use_exp == 1 && ( 'exp_type' == $key || 'expires' == $key ) ) {
590 $user_screen_items[ $key ] = array( 'label' => esc_html__( $item, 'wp-members' ), 'meta' => $key,
591 'userscrn' => wpmem_form_field( "wpmem_fields_uscreen[{$key}]", 'checkbox', $item, $ut_checked ),
592 );
593 }
594 }
595
596 foreach ( $user_screen_items as $screen_item ) {
597 $field_items[] = array(
598 'label' => $screen_item['label'],
599 'meta' => $screen_item['meta'],
600 'type' => '',
601 'display' => '',
602 'req' => '',
603 'profile' => '',
604 'userscrn' => $screen_item['userscrn'],
605 'usearch' => '',
606 'edit' => '',
607 'sort' => '',
608 );
609 }
610
611 $table = new WP_Members_Fields_Table();
612
613 $heading = esc_html__( 'Manage Fields', 'wp-members' );
614 //$description = esc_html__( 'Displaying fields for:', 'wp-members' );
615 //$which_form = $wpmem->form_tags[ $wpmem->admin->current_form ];
616
617 echo '<div class="wrap">';
618 printf( '<h3 class="title">%s</h3>', $heading );
619 //printf( '<p>%s <strong>%s</strong></p>', $description, $which_form );
620 printf( '<form name="updatefieldform" id="updatefieldform" method="post" action="%s">', wpmem_admin_form_post_url() );
621
622 $table->items = $field_items;
623 $table->prepare_items();
624 $table->display();
625 echo '</form>';
626 echo '</div>';
627 }
628
629 /**
630 * Javascript to ID the fields table and add curser style to rows.
631 *
632 * @since 3.1.8
633 * @since 3.3.0 Changed from wpmem_bulk_fields_actions() to bulk_actions().
634 */
635
636 public static function bulk_actions() {
637 if ( 'wpmem-settings' == wpmem_get( 'page', false, 'get' ) && 'fields' == wpmem_get( 'tab', false, 'get' ) ) {
638 ?><script type="text/javascript">(function($){$(document).ready(function(){$("table").attr("id","wpmem-fields");});})(jQuery);</script><?php
639 }
640 }
641
642 /**
643 * Updates fields.
644 *
645 * Derived from wpmem_update_fields()
646 *
647 * @since 3.1.8
648 * @since 3.3.0 Changed from wpmem_admin_fields_update() to update().
649 * @since 3.3.9 load_fields() moved to forms object class.
650 *
651 * @global object $wpmem
652 * @global string $did_update
653 * @global string $add_field_err_msg The add field error message
654 */
655 public static function update() {
656
657 global $wpmem, $did_update, $delete_action;
658
659 if ( 'wpmem-settings' == wpmem_get( 'page', false, 'get' ) && 'fields' == wpmem_get( 'tab', false, 'get' ) ) {
660 // Get the current fields.
661 $wpmem_fields = get_option( 'wpmembers_fields' );
662
663 $action = sanitize_text_field( wpmem_get( 'action', false ) );
664 $action = ( -1 == $action ) ? sanitize_text_field( wpmem_get( 'action2' ) ) : $action;
665
666 $delete_action = false;
667
668 if ( 'save' == $action ) {
669
670 // Check nonce.
671 check_admin_referer( 'bulk-settings_page_wpmem-settings' );
672
673 // Update user table fields.
674 update_option( 'wpmembers_utfields', wpmem_sanitize_array( wpmem_get( 'wpmem_fields_uscreen', array() ) ), false );
675
676 // Update user search fields.
677 update_option( 'wpmembers_usfields', wpmem_sanitize_array( wpmem_get( 'wpmem_fields_usearch', array() ) ), false );
678 if ( wpmem_is_woo_active() ) {
679 if ( 1 == $wpmem->woo->add_checkout_fields ) {
680 update_option( 'wpmembers_wcchkout_fields', wpmem_sanitize_array( wpmem_get( 'wpmem_fields_wcchkout', array() ) ), false );
681 }
682 if ( 1 == $wpmem->woo->add_my_account_fields ) {
683 update_option( 'wpmembers_wcacct_fields', wpmem_sanitize_array( wpmem_get( 'wpmem_fields_wcaccount', array() ) ), false );
684 }
685 if ( 1 == $wpmem->woo->add_update_fields ) {
686 update_option( 'wpmembers_wcupdate_fields', wpmem_sanitize_array( wpmem_get( 'wpmem_fields_wcupdate', array() ) ), false );
687 }
688 }
689
690 $wpmem_fields_display_post = wpmem_get( 'wpmem_fields_display', array() );
691 $wpmem_fields_required_post = wpmem_get( 'wpmem_fields_required', array() );
692 $wpmem_fields_profile_post = wpmem_get( 'wpmem_fields_profile', array() );
693
694 // Update display/required settings
695 foreach ( $wpmem_fields as $key => $field ) {
696
697 // What is the field?
698 $meta_key = $field[2];
699
700 // Main settings (display, required, profile).
701 if ( 'username' == $meta_key || 'user_email' == $meta_key ) {
702 $wpmem_fields[ $key ][4] = 'y';
703 $wpmem_fields[ $key ][5] = 'y';
704 $wpmem_fields[ $key ]['profile'] = ( 'username' == $meta_key ) ? false : true;
705 } else {
706 $wpmem_fields[ $key ][4] = ( in_array( $meta_key, $wpmem_fields_display_post ) ) ? 'y' : '';
707 $wpmem_fields[ $key ][5] = ( in_array( $meta_key, $wpmem_fields_required_post ) ) ? 'y' : '';
708 $wpmem_fields[ $key ]['profile'] = ( in_array( $meta_key, $wpmem_fields_profile_post ) ) ? true : false;
709 }
710 }
711
712 // Save updates.
713 update_option( 'wpmembers_fields', $wpmem_fields, false );
714 $wpmem->forms->load_fields();
715
716 // Set update message.
717 $did_update = esc_html__( 'WP-Members fields were updated', 'wp-members' );
718
719 // Return.
720 return $did_update;
721
722 } elseif ( 'delete' == $action ) {
723
724 // Check nonce.
725 check_admin_referer( 'bulk-settings_page_wpmem-settings' );
726
727 $delete_action = 'delete';
728
729 } elseif ( ( 'add_field' == wpmem_get( 'wpmem_admin_a' ) || 'edit_field' == wpmem_get( 'wpmem_admin_a' ) ) && check_admin_referer( 'wpmem_add_field' ) ) {
730
731 // Set action.
732 $action = sanitize_text_field( wpmem_get( 'wpmem_admin_a' ) );
733
734 global $add_field_err_msg;
735
736 $add_field_err_msg = false;
737 $add_name = sanitize_text_field( wpmem_get( 'add_name' ) );
738 $add_option = sanitize_text_field( wpmem_get( 'add_option' ) );
739
740 // Error check that field label and option name are included and unique.
741 $add_field_err_msg = ( ! $add_name ) ? esc_html__( 'Field Label is required. Nothing was updated.', 'wp-members' ) : $add_field_err_msg;
742 $add_field_err_msg = ( ! $add_option ) ? esc_html__( 'Meta Key is required. Nothing was updated.', 'wp-members' ) : $add_field_err_msg;
743
744 $add_field_err_msg = ( ! preg_match("/^[A-Za-z0-9_]*$/", $add_option ) ) ? esc_html__( 'Meta Key must contain only letters, numbers, and underscores', 'wp-members' ) : $add_field_err_msg;
745
746 // Check for duplicate field names.
747 $chk_fields = array();
748 foreach ( $wpmem_fields as $field ) {
749 $chk_fields[] = $field[2];
750 }
751 $add_field_err_msg = ( in_array( $add_option, $chk_fields ) ) ? esc_html__( 'A field with that meta key already exists', 'wp-members' ) : $add_field_err_msg;
752
753 // Error check for reserved terms.
754 $reserved_terms = wpmem_wp_reserved_terms();
755 if ( in_array( strtolower( $add_option ), $reserved_terms ) ) {
756 $add_field_err_msg = sprintf( esc_html__( 'Sorry, "%s" is a <a href="https://codex.wordpress.org/Function_Reference/register_taxonomy#Reserved_Terms" target="_blank">reserved term</a>. Field was not added.', 'wp-members' ), $add_option );
757 }
758
759 // Error check option name for spaces and replace with underscores.
760 $us_option = preg_replace( "/ /", '_', $add_option );
761
762 $arr = array();
763
764 $type = sanitize_text_field( wpmem_get( 'add_type' ) );
765
766 $arr[0] = filter_var( wpmem_get( 'add_order_id' ), FILTER_SANITIZE_NUMBER_INT );
767 $arr[1] = sanitize_text_field( stripslashes( wpmem_get( 'add_name' ) ) );
768 $arr[2] = $us_option;
769 $arr[3] = $type;
770 $arr[4] = ( 'y' == wpmem_get( 'add_display', 'n' ) ) ? 'y' : 'n';
771 $arr[5] = ( 'y' == wpmem_get( 'add_required', 'n' ) ) ? 'y' : 'n';
772 $arr['profile'] = ( 'y' == wpmem_get( 'add_profile', 'n' ) ) ? true : false;
773
774 // Optional label href
775 $href = wpmem_get( 'add_terms_check_href', false );
776 if ( $href ) {
777 $sanitized_href = ( strpos( $href, 'http' ) ) ? esc_url_raw( $href ) : sanitize_text_field( $href );
778 $arr['label_href'] = $sanitized_href;
779 }
780
781 // Mark native fields:
782 $native_fields = array( 'user_login', 'user_pass', 'user_nicename', 'user_email', 'user_url', 'user_registered', 'display_name', 'first_name', 'last_name', 'nickname', 'description' );
783 $arr[6] = ( in_array( $us_option, $native_fields ) ) ? 'y' : 'n';
784
785 if ( 'text' == $type || 'email' == $type || 'textarea' == $type || 'password' == $type || 'url' == $type || 'number' == $type || 'date' == $type || 'timestamp' == $type ) {
786 $arr['placeholder'] = sanitize_text_field( stripslashes( wpmem_get( 'add_placeholder' ) ) );
787 }
788
789 if ( 'text' == $type || 'email' == $type || 'password' == $type || 'url' == $type || 'number' == $type || 'date' == $type || 'timestamp' == $type ) {
790 $arr['pattern'] = sanitize_text_field( stripslashes( wpmem_get( 'add_pattern' ) ) );
791 $arr['title'] = sanitize_text_field( stripslashes( wpmem_get( 'add_title' ) ) );
792 }
793
794 if ( 'number' == $type || 'date' == $type ) {
795 $arr['min'] = filter_var( wpmem_get( 'add_min' ), FILTER_SANITIZE_NUMBER_INT );
796 $arr['max'] = filter_var( wpmem_get( 'add_max' ), FILTER_SANITIZE_NUMBER_INT );
797 }
798
799 if ( 'textarea' == $type ) {
800 $arr['rows'] = filter_var( wpmem_get( 'add_rows' ), FILTER_SANITIZE_NUMBER_INT );
801 $arr['cols'] = filter_var( wpmem_get( 'add_cols' ), FILTER_SANITIZE_NUMBER_INT );
802 }
803
804 if ( $type == 'checkbox' ) {
805 $add_field_err_msg = ( ! $_POST['add_checked_value'] ) ? esc_html__( 'Checked value is required for checkboxes. Nothing was updated.', 'wp-members' ) : $add_field_err_msg;
806 $arr[7] = sanitize_text_field( wpmem_get( 'add_checked_value', false ) );
807 $arr[8] = ( 'y' == wpmem_get( 'add_checked_default', 'n' ) ) ? 'y' : 'n';
808 $arr['checkbox_label'] = intval( wpmem_get( 'add_checkbox_label', 0 ) );
809 }
810
811 if ( $type == 'select'
812 || $type == 'multiselect'
813 || $type == 'radio'
814 || $type == 'multicheckbox'
815 ) {
816 // Get the values.
817 $which_post = ( $type == 'radio' || $type == 'multicheckbox' || $type == 'multiselect' ) ? 'add_radio_value' : 'add_dropdown_value';
818 $str = stripslashes( sanitize_textarea_field( $_POST[ $which_post ] ) );
819 // Remove linebreaks.
820 $str = trim( str_replace( array("\r", "\r\n", "\n"), '', $str ) );
821 // Create array.
822 if ( ! function_exists( 'str_getcsv' ) ) {
823 $clean_values = explode( ',', $str );
824 } else {
825 $clean_values = str_getcsv( $str, ',', '"' );
826 }
827 // Clean input values.
828 foreach ( $clean_values as $key => $raw_value ) {
829 $pieces = array_map( 'trim', explode( '|', $raw_value ) );
830 $clean_values[ $key ] = $pieces[0] . '|' . $pieces[1];
831 }
832 $arr[7] = $clean_values;
833 // If multiselect or multicheckbox, set delimiter.
834 if ( 'multiselect' == $type || 'multicheckbox' == $type ) {
835 $arr[8] = ( ',' === wpmem_get( 'add_delimiter_value', '|' ) ) ? ',' : '|';
836 }
837 }
838
839 if ( $type == 'file' || $type == 'image' ) {
840 $arr[7] = sanitize_text_field( stripslashes( $_POST['add_file_value'] ) );
841 }
842
843 if ( wpmem_get( 'add_type' ) == 'hidden' ) {
844 $add_field_err_msg = ( ! $_POST['add_hidden_value'] ) ? esc_html__( 'A value is required for hidden fields. Nothing was updated.', 'wp-members' ) : $add_field_err_msg;
845 $arr[7] = ( isset( $_POST['add_hidden_value'] ) ) ? sanitize_text_field( stripslashes( $_POST['add_hidden_value'] ) ) : '';
846 }
847
848 if ( 'timestamp' == wpmem_get( 'add_type' ) ) {
849 $arr['timestamp_display'] = sanitize_text_field( wpmem_get( 'add_timestamp_display', 'Y-m-d', 'post' ) );
850 }
851
852 if ( $action == 'add_field' ) {
853 if ( ! $add_field_err_msg ) {
854 array_push( $wpmem_fields, $arr );
855 $did_update = sprintf( esc_html__( '%s was added', 'wp-members' ), esc_html( $_POST['add_name'] ) );
856 } else {
857 $did_update = $add_field_err_msg;
858 }
859 } else {
860 for ( $row = 0; $row < count( $wpmem_fields ); $row++ ) {
861 if ( $wpmem_fields[ $row ][2] == wpmem_get( 'field', false, 'get' ) ) {
862 $arr[0] = $wpmem_fields[ $row ][0];
863 foreach ( $arr as $key => $value ) {
864 $wpmem_fields[ $row ][ $key ] = $arr[ $key ];
865 }
866 }
867 }
868 $did_update = sprintf( esc_html__( '%s was updated', 'wp-members' ), esc_html( stripslashes( $add_name ) ) );
869 $did_update.= '<p><a href="' . esc_url( add_query_arg( array( 'page' => 'wpmem-settings', 'tab' => 'fields' ), get_admin_url() . 'options-general.php' ) ) . '">&laquo; ' . esc_html__( 'Return to Fields Table', 'wp-members' ) . '</a></p>';
870 }
871
872 $wpmem_newfields = $wpmem_fields;
873
874 update_option( 'wpmembers_fields', $wpmem_newfields, false );
875 $wpmem->forms->load_fields();
876 return $did_update;
877 }
878 }
879 }
880
881 /**
882 * Reorders form fields.
883 *
884 * @since 2.5.1
885 * @since 3.1.8 Rebuilt for new List Table.
886 * @since 3.3.0 Merged do_field_reorder() and field_reorder().
887 * @since 3.4.8 Added nonce check.
888 */
889 public static function do_field_reorder() {
890
891 // Check nonce.
892 if ( ! check_admin_referer( 'wpmem_settings_nonce', 'nonce' ) ) {
893 _e( 'The link has expired. Please reload the page, or make sure your request originates from the WP-Members Fields tab.', 'wp-members' );
894 die();
895 }
896
897 // Check user caps in case this is hit by a non-admin user.
898 if ( ! current_user_can( 'manage_options' ) ) {
899 _e( 'User lacks required capability to make this change.', 'wp-members' );
900 die();
901 }
902
903 // Start fresh.
904 $new_order = $wpmem_fields = $field = $key = $wpmem_new_fields = $id = $k = '';
905 $wpmem_fields = get_option( 'wpmembers_fields' );
906
907 // Get the list items
908 $new_order = $_POST;
909
910 // Put fields in the proper order for the current form.
911 $wpmem_new_fields = array();
912 foreach ( $new_order['list_items'] as $id ) {
913 foreach( $wpmem_fields as $val ) {
914 if ( $val[0] == intval( $id ) ) {
915 $wpmem_new_fields[] = $val;
916 }
917 }
918 }
919
920 // Save fields array with new current form field order.
921 update_option( 'wpmembers_fields', $wpmem_new_fields, false );
922
923 // Indicate successful transaction.
924 _e( 'Form field order updated.', 'wp-members' );
925
926 die(); // This is required to return a proper result.
927
928 }
929 }
930 // End of file.