tabs_available_fields( $form_type );
}
}
/**
* Display predefined fields
*
* @since 2.0.0
* @package userswp
*
* @param string $form_type Form type
*
*/
public function manage_tabs_predefined_fields( $form_type ) {
if ( 'profile-tabs' == $form_type ) {
$this->tabs_predefined_fields( $form_type );
}
}
/**
* Display custom fields
*
* @since 2.0.0
* @package userswp
*
* @param string $form_type Form type
*
*/
public function manage_available_fields_custom( $form_type ) {
if ( 'profile-tabs' == $form_type ) {
$this->tabs_custom_fields( $form_type );
}
}
/**
* Display selected fields
*
* @since 2.0.0
* @package userswp
*
* @param string $form_type Form type
*
*/
public function manage_tabs_selected_fields( $form_type ) {
if ( 'profile-tabs' == $form_type ) {
$this->tabs_selected_fields( $form_type );
}
}
/**
* Display custom fields
*
* @since 2.0.0
* @package userswp
*
* @param string $form_type Form type
*
*/
public function tabs_custom_fields( $form_type ) {
// insert the required code for the SD button.
$js_insert_function = $this->insert_shortcode_function();
WP_Super_Duper::shortcode_insert_button( '', $js_insert_function );
$fields = array();
$fields[] = array(
'tab_type' => 'shortcode',
'tab_name' => __( 'Shortcode', 'userswp' ),
'tab_icon' => 'fas fa-cubes',
'tab_key' => '',
'tab_content' => '',
);
?>
function sd_insert_shortcode(){
$shortcode = jQuery('#sd-shortcode-output').val();
if($shortcode){
jQuery('#uwp-field-settings textarea').val($shortcode);
tb_remove();
}
}
get_results( 'select tab_key from ' . $table_name . " where form_type ='" . $form_type . "'" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$existing_field_ids = array();
if ( ! empty( $existing_fields ) ) {
foreach ( $existing_fields as $existing_field ) {
$existing_field_ids[] = $existing_field->tab_key;
}
}
?>
tabs_fields( $form_type, $form_id );
if ( ! empty( $fields ) ) {
foreach ( $fields as $field ) {
$field = stripslashes_deep( $field ); // strip slashes
$fieldset_width = '';
if ( $field['tab_type'] == 'fieldset' ) {
$fieldset_width = 'width:100%;';
}
$display = '';
if ( in_array( $field['tab_key'], $existing_field_ids ) ) {
$display = 'display:none;';
}
$style = 'style="' . $display . $fieldset_width . '"';
$icon = $field['tab_icon'];
if ( uwp_is_fa_icon( $icon ) ) {
$tab_icon = '';
} elseif ( uwp_is_icon_url( $icon ) ) {
$tab_icon = '';
} else {
$tab_icon = '';
}
?>
- class="col px-1" >
'standard',
'tab_name' => __( 'More Info', 'userswp' ),
'tab_icon' => 'fas fa-info-circle',
'tab_key' => 'more_info',
'tab_content' => '',
);
$fields[] = array(
'tab_type' => 'standard',
'tab_name' => __( 'Posts', 'userswp' ),
'tab_icon' => 'fas fa-info-circle',
'tab_key' => 'posts',
'tab_content' => '',
);
$fields[] = array(
'tab_type' => 'standard',
'tab_name' => __( 'Comments', 'userswp' ),
'tab_icon' => 'fas fa-comments',
'tab_key' => 'comments',
'tab_content' => '',
);
$fields[] = array(
'tab_type' => 'standard',
'tab_name' => __( 'User Comments', 'userswp' ),
'tab_icon' => 'fas fa-comments',
'tab_key' => 'user-comments',
'tab_content' => '',
);
$fields = apply_filters( 'uwp_profile_tabs_predefined_fields', $fields, $form_type );
?>
$field ) {
?>
-
';
} elseif ( uwp_is_icon_url( $icon ) ) {
$tab_icon = '';
} else {
$tab_icon = '';
}
?>
get_results( $wpdb->prepare( 'SELECT * FROM ' . $table_name . ' where form_type = %s AND form_id = %s order by sort_order asc', array( $form_type, $form_id ) ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
?>
get_row( $wpdb->prepare( 'select * from ' . $tabs_table_name . ' where id= %d', array( $cf ) ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
} elseif ( is_object( $cf ) ) {
$result_str = $cf->id;
$field_info = $wpdb->get_row( $wpdb->prepare( 'select * from ' . $tabs_table_name . ' where id= %d', array( (int)$cf->id ) ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
} elseif ( isset( $cf ) && ! empty( $cf ) ) {
$field_info = $wpdb->get_row( $wpdb->prepare( 'select * from ' . $tabs_table_name . ' where tab_key= %s', array( $cf ) ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
} else {
$field_info = array();
}
if ( isset( $request['tab_type'] ) && $request['tab_type'] != '' ) {
$tab_type = esc_attr( $request['tab_type'] );
} elseif ( $field_info && isset( $field_info->tab_type ) ) {
$tab_type = $field_info->tab_type;
} else {
$tab_type = '';
}
if ( isset( $request['tab_name'] ) ) {
$field_site_name = esc_attr( $request['tab_name'] );
} elseif ( $field_info && isset( $field_info->tab_name ) ) {
$field_site_name = $field_info->tab_name;
} else {
$field_site_name = '';
}
if ( isset( $request['tab_key'] ) && $request['tab_key'] != '' ) {
$tab_key = esc_attr( $request['tab_key'] );
} elseif ( $field_info && isset( $field_info->tab_key ) ) {
$tab_key = $field_info->tab_key;
} else {
$tab_key = '';
}
if ( isset( $request['tab_content'] ) && $request['tab_content'] != '' ) {
$tab_content = esc_attr( $request['tab_content'] );
} elseif ( $field_info && isset( $field_info->tab_content ) ) {
$tab_content = $field_info->tab_content;
} else {
$tab_content = '';
}
if ( isset( $request['tab_icon'] ) && $request['tab_icon'] != '' ) {
$icon = esc_attr( $request['tab_icon'] );
} elseif ( $field_info && isset( $field_info->tab_icon ) ) {
$icon = $field_info->tab_icon;
} else {
$icon = 'fas fa-cog';
}
if ( uwp_is_fa_icon( $icon ) ) {
$field_icon = '';
} elseif ( uwp_is_icon_url( $icon ) ) {
$field_icon = '';
} elseif ( isset( $field_info->tab_type ) && $field_info->tab_type == 'fieldset' ) {
$field_icon = '';
} else {
$field_icon = '';
}
if ( isset( $request['tab_privacy'] ) && $request['tab_privacy'] != '' ) {
$privacy = absint( $request['tab_privacy'] );
} elseif ( $field_info && isset( $field_info->tab_privacy ) ) {
$privacy = $field_info->tab_privacy;
} else {
$privacy = 1;
}
if ( isset( $request['user_decided'] ) && $request['user_decided'] != '' ) {
$user_decided = esc_attr( $request['user_decided'] );
} elseif ( $field_info && isset( $field_info->user_decided ) ) {
$user_decided = $field_info->user_decided;
} else {
$user_decided = 0;
}
if ( isset( $request['tab_parent'] ) && $request['tab_parent'] != '' ) {
$tab_parent = esc_attr( $request['tab_parent'] );
} elseif ( $field_info && isset( $field_info->tab_parent ) ) {
$tab_parent = $field_info->tab_parent;
} else {
$tab_parent = 0;
}
if ( isset( $request['tab_level'] ) && $request['tab_level'] != '' ) {
$tab_level = esc_attr( $request['tab_level'] );
} elseif ( $field_info && isset( $field_info->tab_level ) ) {
$tab_level = $field_info->tab_level;
} else {
$tab_level = 0;
}
$exclude_privacy_tab = apply_filters( 'uwp_exclude_privacy_settings_tabs', array() );
$exclude_privacy_option = false;
if ( ! empty( $exclude_privacy_tab ) && in_array( $tab_key, $exclude_privacy_tab ) ) {
$exclude_privacy_option = true;
}
$nonce = wp_create_nonce( 'uwp_tabs_extras_nonce_' . $result_str );
?>
-
update_field_order( $tabs, $form_id );
}
}
/* ---- Show field form in admin ---- */
if ( $field_action == 'new' ) {
if ( ! wp_verify_nonce( $_REQUEST['_wpnonce'], 'uwp-admin-settings' ) ) {
return;
}
$htmlvar_name = isset( $_REQUEST['htmlvar_name'] ) ? sanitize_text_field( $_REQUEST['htmlvar_name'] ) : sanitize_text_field( $_REQUEST['tab_key'] );
$this->tabs_field_adminhtml( $htmlvar_name, $field_action, $_REQUEST );
}
/* ---- Delete field ---- */
if ( $field_id != '' && $field_action == 'delete' && isset( $_REQUEST['_wpnonce'] ) ) {
if ( ! wp_verify_nonce( $_REQUEST['_wpnonce'], 'uwp_form_tab_delete_nonce_' . $field_id ) ) {
return;
}
$this->tabs_field_delete( $field_id );
}
/* ---- Save field ---- */
if ( $field_action == 'submit' && isset( $_REQUEST['_wpnonce'] ) ) {
if ( ! wp_verify_nonce( $_REQUEST['_wpnonce'], 'uwp_tabs_extras_nonce_' . $field_id ) ) {
return;
}
foreach ( $_REQUEST as $pkey => $pval ) {
$tags = is_array( $_REQUEST[ $pkey ] ) ? 'skip_field' : '';
if ( $tags != 'skip_field' && $pkey != 'tab_content' ) {
$_REQUEST[ $pkey ] = strip_tags( sanitize_text_field( $_REQUEST[ $pkey ] ), $tags );
}
}
$lastid = $this->tabs_field_save( $_REQUEST );
if ( is_int( $lastid ) && $lastid > 0 ) {
$this->tabs_field_adminhtml( $lastid, 'submit' );
} else {
echo esc_html( $lastid );
}
}
}
die();
}
/**
* Save tabs fields
*
* @since 2.0.0
* @package userswp
*
* @param array $request_field Request data
*
* @return string|int
*
*/
public function tabs_field_save( $request_field = array() ) {
global $wpdb;
$table_name = uwp_get_table_prefix() . 'uwp_profile_tabs';
$tab_id = isset( $request_field['field_id'] ) && $request_field['field_id'] ? absint( $request_field['field_id'] ) : '';
$tab_name = isset( $request_field['tab_name'] ) ? sanitize_text_field( $request_field['tab_name'] ) : '';
$tab_icon = isset( $request_field['tab_icon'] ) ? sanitize_text_field( $request_field['tab_icon'] ) : '';
$tab_key = ! empty( $request_field['tab_key'] ) ? sanitize_title( $request_field['tab_key'] ) : sanitize_title( $tab_name, 'uwp-tab-' . $tab_name );
$tab_level = ! empty( $request_field['tab_level'] ) ? sanitize_text_field( $request_field['tab_level'] ) : 0;
$tab_parent = ! empty( $request_field['tab_parent'] ) ? sanitize_text_field( $request_field['tab_parent'] ) : 0;
$tab_type = isset( $request_field['tab_type'] ) ? sanitize_text_field( $request_field['tab_type'] ) : 'standard';
$form_type = isset( $request_field['form_type'] ) ? $request_field['form_type'] : $tab_type;
$tab_privacy = isset( $request_field['tab_privacy'] ) ? (int)$request_field['tab_privacy'] : 0;
$user_decided = isset( $request_field['user_decided'] ) ? (int)$request_field['user_decided'] : 0;
$form_id = isset( $request_field['form_id'] ) ? (int)$request_field['form_id'] : 1;
$total_tabs = $wpdb->get_var( "SELECT COUNT(id) FROM {$table_name}" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$data = array(
'form_type' => 'profile-tabs',
'sort_order' => $total_tabs + 1,
'tab_layout' => 'profile',
'tab_type' => $tab_type,
'tab_level' => sanitize_text_field( $tab_level ),
'tab_parent' => sanitize_text_field( $tab_parent ),
'tab_name' => $tab_name,
'tab_icon' => $tab_icon,
'tab_key' => sanitize_text_field( $tab_key ),
'tab_content' => wp_kses_post( $request_field['tab_content'] ),
'tab_privacy' => $tab_privacy,
'user_decided' => $user_decided,
'form_id' => $form_id,
);
$format = array_fill( 0, count( $data ), '%s' );
$check_html_variable = $wpdb->get_var( $wpdb->prepare( 'select COUNT(*) from ' . $table_name . ' where tab_type = %s AND tab_name LIKE %s AND tab_key = %s AND form_type = %s AND form_id = %s', array( $tab_type, $tab_name, $tab_key, $form_type, $form_id ) ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
if ( ! $tab_id && (int)$check_html_variable > 0 ) {
return 'invalid_key';
}
if ( $tab_id ) { // update
$wpdb->update( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$table_name,
$data,
array( 'id' => $tab_id ),
$format
);
$lastid = $tab_id;
} else { // insert
$wpdb->insert( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
$table_name,
$data,
$format
);
$lastid = $wpdb->insert_id;
}
return (int) $lastid;
}
/**
* Save tabs fields
*
* @since 2.0.0
* @package userswp
*
* @param string $field_id Request data
*
* @return int
*
*/
public function tabs_field_delete( $field_id = '' ) {
global $wpdb;
$table_name = uwp_get_table_prefix() . 'uwp_profile_tabs';
if ( $field_id != '' ) {
$cf = trim( $field_id, '_' );
$wpdb->query( $wpdb->prepare( 'delete from ' . $table_name . ' where id= %d ', array( $cf ) ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
return $field_id;
} else {
return 0;
}
}
/**
* Updates profile tabs sort order.
*
* @param array $tabs Tabs array.
*
* @return object|bool Sorted tabs.
*/
public function update_field_order( $tabs = array(), $form_id = 1 ) {
global $wpdb;
$table_name = uwp_get_table_prefix() . 'uwp_profile_tabs';
$count = 0;
if ( ! empty( $tabs ) ) {
$result = false;
foreach ( $tabs as $index => $tab ) {
$result = $wpdb->update( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$table_name,
array(
'sort_order' => $index,
'tab_level' => (int)$tab['tab_level'],
'tab_parent' => (int)$tab['tab_parent'],
),
array(
'id' => absint( $tab['id'] ),
'form_id' => $form_id,
),
array( '%d', '%d' )
);
++$count;
}
if ( $result !== false ) {
return true;
} else {
return new WP_Error( 'failed', __( 'Failed to sort tab items.', 'userswp' ) );
}
} else {
return new WP_Error( 'failed', __( 'Failed to sort tab items.', 'userswp' ) );
}
}
}
}
new UsersWP_Settings_Profile_Tabs();