'wpmem-settings', 'tab' => 'fields', 'mode' => 'edit', 'edit' => 'field', 'field' => $field_id, ); $link = add_query_arg( $link_args, admin_url( 'options-general.php' ) ); return '' . __( 'Edit' ) . ''; } /** * Renders the content of the fields tab. * * @since 3.1.8 * * @global object $wpmem The WP_Members Object. * @global string $did_update * @global string $delete_action */ function wpmem_a_render_fields_tab() { global $wpmem, $did_update, $delete_action; $wpmem_fields = wpmem_fields(); $edit_meta = sanitize_text_field( wpmem_get( 'field', false, 'get' ) ); $add_meta = sanitize_text_field( wpmem_get( 'add_field', false ) ); if ( 'delete' == $delete_action ) { $delete_fields = wpmem_get( 'delete' ); ?>

fields[ $meta ]['label'] ) . ' (meta key: ' . $meta . ')
'; } ?>
" />

' . __( '(optional)', 'wp-members' ) . ''; $span_required = '' . __( '(required)', 'wp-members' ) . ''; $form_submit = array( 'mode' => $mode ); if ( isset( $_GET['field'] ) ) { $form_submit['field'] = $meta_key; } ?>


«

$field ) { // @todo - transitional until new array keys if ( is_numeric( $key ) ) { $meta = $field[2]; $ut_checked = ( ( $wpmem_ut_fields ) && ( in_array( $field[1], $wpmem_ut_fields ) ) ) ? $field[1] : ''; $us_checked = ( ( $wpmem_us_fields ) && ( in_array( $field[1], $wpmem_us_fields ) ) ) ? $field[1] : ''; $field_items[] = array( 'order' => $field[0], 'label' => $field[1], 'meta' => $meta, 'type' => $field[3], 'display' => ( 'user_email' != $meta && 'username' != $meta ) ? wpmem_create_formfield( $meta . "_display", 'checkbox', 'y', $field[4] ) : '', 'req' => ( 'user_email' != $meta && 'username' != $meta ) ? wpmem_create_formfield( $meta . "_required", 'checkbox', 'y', $field[5] ) : '', //'profile' => ( $meta != 'user_email' ) ? wpmem_create_formfield( $meta . "_profile", 'checkbox', true, $field[6] ) : '', 'userscrn' => ( ! in_array( $meta, $wpmem_ut_fields_skip ) ) ? wpmem_create_formfield( 'ut_fields[' . $meta . ']', 'checkbox', $field[1], $ut_checked ) : '', 'usearch' => ( ! in_array( $meta, $wpmem_us_fields_skip ) ) ? wpmem_create_formfield( 'us_fields[' . $meta . ']', 'checkbox', $field[1], $us_checked ) : '', 'edit' => wpmem_fields_edit_link( $meta ), 'sort' => '', ); } } $extra_user_screen_items = array( 'user_registered' => __( 'Registration Date', 'wp-members' ), 'active' => __( 'Active', 'wp-members' ), 'wpmem_reg_ip' => __( 'Registration IP', 'wp-members' ), 'exp_type' => __( 'Subscription Type', 'wp-members' ), 'expires' => __( 'Expires', 'wp-members' ), 'user_id' => __( 'User ID', 'wp-members' ), ); foreach ( $extra_user_screen_items as $key => $item ) { $ut_checked = ( ( $wpmem_ut_fields ) && ( in_array( $item, $wpmem_ut_fields ) ) ) ? $item : ''; if ( 'user_id' == $key || 'user_registered' == $key || 'wpmem_reg_ip' == $key || ( 'active' == $key && 1 == $wpmem->mod_reg ) || defined( 'WPMEM_EXP_MODULE' ) && $wpmem->use_exp == 1 && ( 'exp_type' == $key || 'expires' == $key ) ) { $user_screen_items[ $key ] = array( 'label' => __( $item, 'wp-members' ), 'meta' => $key, 'userscrn' => wpmem_create_formfield( "ut_fields[{$key}]", 'checkbox', $item, $ut_checked ), ); } } foreach ( $user_screen_items as $screen_item ) { $field_items[] = array( 'label' => $screen_item['label'], 'meta' => $screen_item['meta'], 'type' => '', 'display' => '', 'req' => '', 'profile' => '', 'userscrn' => $screen_item['userscrn'], 'usearch' => '', 'edit' => '', 'sort' => '', ); } $table = new WP_Members_Fields_Table(); $heading = __( 'Manage Fields', 'wp-members' ); //$description = __( 'Displaying fields for:', 'wp-members' ); //$which_form = $wpmem->form_tags[ $wpmem->admin->current_form ]; echo '
'; printf( '

%s

', $heading ); //printf( '

%s %s

', $description, $which_form ); printf( '
', wpmem_admin_form_post_url() ); $table->items = $field_items; $table->prepare_items(); $table->display(); echo '
'; echo '
'; } /** * Extends the WP_List_Table to create a table of form fields. * * @since 3.1.8 */ class WP_Members_Fields_Table extends WP_List_Table { private $excludes = array( 'user_registered', 'active', 'wpmem_reg_ip', 'exp_type', 'expires', 'user_id' ); private $no_delete = array( 'username', 'user_email', 'first_name', 'last_name', 'user_url' ); /** * Checkbox at start of row. * * @since 3.1.8 * * @param $item * @return string The checkbox. */ function column_cb( $item ) { if ( in_array( $item['meta'], $this->no_delete ) || in_array( $item['meta'], $this->excludes ) ) { return; } else { return sprintf( '', $item['meta'], __( 'delete', 'wp-members' ) ); } } /** * Returns table columns. * * @since 3.1.8 * * @return array */ function get_columns() { return array( 'cb' => '', 'label' => __( 'Display Label', 'wp-members' ), 'meta' => __( 'Meta Key', 'wp-members' ), 'type' => __( 'Field Type', 'wp-members' ), 'display' => __( 'Display?', 'wp-members' ), 'req' => __( 'Required?', 'wp-members' ), //'profile' => __( 'Profile Only', 'wp-members' ), 'userscrn' => __( 'Users Screen', 'wp-members' ), 'usearch' => __( 'Users Search', 'wp-members' ), 'edit' => __( 'Edit', 'wp-members' ), 'sort' => __( 'Sort', 'wp-members' ), ); } /** * Set up table columns. * * @since 3.1.8 */ function prepare_items() { $columns = $this->get_columns(); $hidden = array(); $sortable = array(); $this->_column_headers = array( $columns, $hidden, $sortable ); } /** * Iterates through the columns * * @since 3.1.8 * * @param array $item * @param string $column_name * @return string $item[ $column_name ] */ function column_default( $item, $column_name ) { switch( $column_name ) { default: return $item[ $column_name ]; } } /** * Sets actions in the bulk menu. * * @since 3.1.8 * * @return array $actions */ function get_bulk_actions() { $actions = array( 'delete' => __( 'Delete Selected', 'wp-members' ), 'save' => __( 'Save Settings', 'wp-members' ), ); return $actions; } /** * Handles "delete" column - checkbox * * @since 3.1.8 * * @param array $item * @return string */ function column_delete( $item ) { $can_delete = ( $item['meta_key'] == 'user_nicename' || $item['meta_key'] == 'display_name' || $item['meta_key'] == 'nickname' ) ? true : false; return ( ( $can_delete ) || ! $item['native'] ) ? sprintf( $item['native'] . '', $item['meta'] ) : ''; } /** * Sets rows so that they have field IDs in the id. * * @since 3.1.8 * * @global wpmem * @param array $columns */ function single_row( $columns ) { if ( in_array( $columns['meta'], $this->excludes ) ) { echo ''; echo $this->single_row_columns( $columns ); echo "\n"; } else { echo ''; echo $this->single_row_columns( $columns ); echo "\n"; } } public function process_bulk_action() { //nonce validations,etc $action = $this->current_action(); switch ( $action ) { case 'delete': // Do whatever you want wp_safe_redirect( esc_url( add_query_arg() ) ); break; default: // do nothing or something else return; break; } return; } } /** * Javascript to ID the fields table and add curser style to rows. * * @since 3.1.8 */ add_action( 'admin_footer', 'wpmem_bulk_fields_action' ); function wpmem_bulk_fields_action() { if ( 'wpmem-settings' == wpmem_get( 'page', false, 'get' ) && 'fields' == wpmem_get( 'tab', false, 'get' ) ) { ?> $item ) { $ut_fields_arr[ sanitize_text_field( $key ) ] = sanitize_text_field( $item ); } update_option( 'wpmembers_utfields', $ut_fields_arr ); // Update user search fields. $arr = ( isset( $_POST['us_fields'] ) ) ? $_POST['us_fields'] : array(); $us_fields_arr = array(); foreach ( $arr as $key => $item ) { $us_fields_arr[ sanitize_text_field( $key ) ] = sanitize_text_field( $item ); } update_option( 'wpmembers_usfields', $us_fields_arr ); // Update display/required settings foreach ( $wpmem_fields as $key => $field ) { $meta_key = $field[2]; if ( 'username' == $meta_key || 'user_email' == $meta_key ) { $wpmem_fields[ $key ][4] = 'y'; $wpmem_fields[ $key ][5] = 'y'; } else { $wpmem_fields[ $key ][4] = ( wpmem_get( $meta_key . "_display" ) ) ? 'y' : ''; $wpmem_fields[ $key ][5] = ( wpmem_get( $meta_key . "_required" ) ) ? 'y' : ''; } } update_option( 'wpmembers_fields', $wpmem_fields ); $wpmem->load_fields(); $did_update = __( 'WP-Members fields were updated', 'wp-members' ); return $did_update; } elseif ( 'delete' == $action ) { // Check nonce. check_admin_referer( 'bulk-settings_page_wpmem-settings' ); $delete_action = 'delete'; } elseif ( ( 'add_field' == wpmem_get( 'wpmem_admin_a' ) || 'edit_field' == wpmem_get( 'wpmem_admin_a' ) ) && check_admin_referer( 'wpmem_add_field' ) ) { // Set action. $action = sanitize_text_field( wpmem_get( 'wpmem_admin_a' ) ); global $add_field_err_msg; $add_field_err_msg = false; $add_name = sanitize_text_field( wpmem_get( 'add_name' ) ); $add_option = sanitize_text_field( wpmem_get( 'add_option' ) ); // Error check that field label and option name are included and unique. $add_field_err_msg = ( ! $add_name ) ? __( 'Field Label is required. Nothing was updated.', 'wp-members' ) : $add_field_err_msg; $add_field_err_msg = ( ! $add_option ) ? __( 'Meta Key is required. Nothing was updated.', 'wp-members' ) : $add_field_err_msg; $add_field_err_msg = ( ! preg_match("/^[A-Za-z0-9_]*$/", $add_option ) ) ? __( 'Meta Key must contain only letters, numbers, and underscores', 'wp-members' ) : $add_field_err_msg; // Check for duplicate field names. $chk_fields = array(); foreach ( $wpmem_fields as $field ) { $chk_fields[] = $field[2]; } $add_field_err_msg = ( in_array( $add_option, $chk_fields ) ) ? __( 'A field with that meta key already exists', 'wp-members' ) : $add_field_err_msg; // Error check for reserved terms. $reserved_terms = wpmem_wp_reserved_terms(); if ( in_array( strtolower( $add_option ), $reserved_terms ) ) { $add_field_err_msg = sprintf( __( 'Sorry, "%s" is a reserved term. Field was not added.', 'wp-members' ), $add_option ); } // Error check option name for spaces and replace with underscores. $us_option = preg_replace( "/ /", '_', $add_option ); $arr = array(); $type = sanitize_text_field( wpmem_get( 'add_type' ) ); $arr[0] = filter_var( wpmem_get( 'add_order_id' ), FILTER_SANITIZE_NUMBER_INT ); $arr[1] = sanitize_text_field( stripslashes( wpmem_get( 'add_name' ) ) ); $arr[2] = $us_option; $arr[3] = $type; $arr[4] = ( 'y' == wpmem_get( 'add_display', 'n' ) ) ? 'y' : 'n'; $arr[5] = ( 'y' == wpmem_get( 'add_required', 'n' ) ) ? 'y' : 'n'; // Mark native fields: $native_fields = array( 'user_login', 'user_pass', 'user_nicename', 'user_email', 'user_url', 'user_registered', 'display_name', 'first_name', 'last_name', 'nickname', 'description' ); $arr[6] = ( in_array( $us_option, $native_fields ) ) ? 'y' : 'n'; if ( 'text' == $type || 'email' == $type || 'textarea' == $type || 'password' == $type || 'url' == $type || 'number' == $type || 'date' == $type ) { $arr['placeholder'] = sanitize_text_field( stripslashes( wpmem_get( 'add_placeholder' ) ) ); } if ( 'text' == $type || 'email' == $type || 'password' == $type || 'url' == $type || 'number' == $type || 'date' == $type ) { $arr['pattern'] = sanitize_text_field( stripslashes( wpmem_get( 'add_pattern' ) ) ); $arr['title'] = sanitize_text_field( stripslashes( wpmem_get( 'add_title' ) ) ); } if ( 'number' == $type || 'date' == $type ) { $arr['min'] = filter_var( wpmem_get( 'add_min' ), FILTER_SANITIZE_NUMBER_INT ); $arr['max'] = filter_var( wpmem_get( 'add_max' ), FILTER_SANITIZE_NUMBER_INT ); } if ( 'textarea' == $type ) { $arr['rows'] = filter_var( wpmem_get( 'add_rows' ), FILTER_SANITIZE_NUMBER_INT ); $arr['cols'] = filter_var( wpmem_get( 'add_cols' ), FILTER_SANITIZE_NUMBER_INT ); } if ( $type == 'checkbox' ) { $add_field_err_msg = ( ! $_POST['add_checked_value'] ) ? __( 'Checked value is required for checkboxes. Nothing was updated.', 'wp-members' ) : $add_field_err_msg; $arr[7] = sanitize_text_field( wpmem_get( 'add_checked_value', false ) ); $arr[8] = ( 'y' == wpmem_get( 'add_checked_default', 'n' ) ) ? 'y' : 'n'; } if ( $type == 'select' || $type == 'multiselect' || $type == 'radio' || $type == 'multicheckbox' ) { // Get the values. $str = stripslashes( sanitize_textarea_field( $_POST['add_dropdown_value'] ) ); // Remove linebreaks. $str = trim( str_replace( array("\r", "\r\n", "\n"), '', $str ) ); // Create array. if ( ! function_exists( 'str_getcsv' ) ) { $arr[7] = explode( ',', $str ); } else { $arr[7] = str_getcsv( $str, ',', '"' ); } // If multiselect or multicheckbox, set delimiter. if ( 'multiselect' == $type || 'multicheckbox' == $type ) { $arr[8] = ( ',' === wpmem_get( 'add_delimiter_value', '|' ) ) ? ',' : '|'; } } if ( $type == 'file' || $type == 'image' ) { $arr[7] = sanitize_text_field( stripslashes( $_POST['add_file_value'] ) ); } if ( wpmem_get( 'add_type' ) == 'hidden' ) { $add_field_err_msg = ( ! $_POST['add_hidden_value'] ) ? __( 'A value is required for hidden fields. Nothing was updated.', 'wp-members' ) : $add_field_err_msg; $arr[7] = ( isset( $_POST['add_hidden_value'] ) ) ? sanitize_text_field( stripslashes( $_POST['add_hidden_value'] ) ) : ''; } if ( $action == 'add_field' ) { if ( ! $add_field_err_msg ) { array_push( $wpmem_fields, $arr ); $did_update = sprintf( __( '%s was added', 'wp-members' ), esc_html( $_POST['add_name'] ) ); } else { $did_update = $add_field_err_msg; } } else { for ( $row = 0; $row < count( $wpmem_fields ); $row++ ) { if ( $wpmem_fields[ $row ][2] == wpmem_get( 'field', false, 'get' ) ) { $arr[0] = $wpmem_fields[ $row ][0]; foreach ( $arr as $key => $value ) { $wpmem_fields[ $row ][ $key ] = $arr[ $key ]; } } } $did_update = sprintf( __( '%s was updated', 'wp-members' ), esc_html( stripslashes( $add_name ) ) ); $did_update.= '

« ' . __( 'Return to Fields Table', 'wp-members' ) . '

'; } $wpmem_newfields = $wpmem_fields; update_option( 'wpmembers_fields', $wpmem_newfields ); $wpmem->load_fields(); return $did_update; } } } /** * Reorders form fields. * * @since 2.5.1 * @since 3.1.8 Rebuilt for new List Table. */ function wpmem_a_field_reorder() { // Start fresh. $new_order = $wpmem_fields = $field = $key = $wpmem_new_fields = $id = $k = ''; $wpmem_fields = get_option( 'wpmembers_fields' ); // Get the list items $new_order = $_POST; // Put fields in the proper order for the current form. $wpmem_new_fields = array(); foreach ( $new_order['list_items'] as $id ) { foreach( $wpmem_fields as $val ) { if ( $val[0] == $id ) { $wpmem_new_fields[] = $val; } } } // Save fields array with new current form field order. update_option( 'wpmembers_fields', $wpmem_new_fields ); // Indicate successful transaction. _e( 'Form field order updated.', 'wp-members' ); die(); // This is required to return a proper result. } // End of file.