'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.