tabs = $this->get_tabs(); ksort( $this->tabs ); $tabs_structed = array(); foreach ( $this->tabs as $k => $arr ) { foreach ( $arr as $id => $info ) { if ( ! empty( $args['tab'] ) && $id != $args['tab'] ) continue; $output = $this->get_tab_fields( $id, $args ); if ( ! empty( $output ) ) $tabs_structed[$id] = $info; } } $this->tabs = $tabs_structed; } /** * @return mixed|void */ function get_tabs() { $tabs = array(); $tabs[100]['general'] = array( 'icon' => 'um-faicon-user', 'title' => __( 'Account', 'ultimate-member' ), 'submit_title' => __( 'Update Account', 'ultimate-member' ), ); $tabs[200]['password'] = array( 'icon' => 'um-faicon-asterisk', 'title' => __( 'Change Password', 'ultimate-member' ), 'submit_title' => __( 'Update Password', 'ultimate-member' ), ); $tabs[300]['privacy'] = array( 'icon' => 'um-faicon-lock', 'title' => __( 'Privacy', 'ultimate-member' ), 'submit_title' => __( 'Update Privacy', 'ultimate-member' ), ); $tabs[400]['notifications'] = array( 'icon' => 'um-faicon-envelope', 'title' => __( 'Notifications', 'ultimate-member' ), 'submit_title' => __( 'Update Notifications', 'ultimate-member' ), ); //if user cannot delete profile hide delete tab if ( um_user( 'can_delete_profile' ) || um_user( 'can_delete_everyone' ) ) { $tabs[99999]['delete'] = array( 'icon' => 'um-faicon-trash-o', 'title' => __( 'Delete Account', 'ultimate-member' ), 'submit_title' => __( 'Delete Account', 'ultimate-member' ), ); } /** * UM hook * * @type filter * @title um_account_page_default_tabs_hook * @description Account Page Tabs * @input_vars * [{"var":"$tabs","type":"array","desc":"Account Page Tabs"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_account_page_default_tabs_hook', 'function_name', 10, 1 ); * @example * */ return apply_filters( 'um_account_page_default_tabs_hook', $tabs ); } /** * Account Shortcode * * @param array $args * @return string */ function ultimatemember_account( $args = array() ) { um_fetch_user( get_current_user_id() ); ob_start(); $defaults = array( 'template' => 'account', 'mode' => 'account', 'form_id' => 'um_account_id', ); $args = wp_parse_args( $args, $defaults ); /** * UM hook * * @type filter * @title um_account_shortcode_args_filter * @description Account Shortcode Arguments * @input_vars * [{"var":"$args","type":"array","desc":"Shortcode Arguments"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_account_shortcode_args_filter', 'function_name', 10, 1 ); * @example * */ $args = apply_filters( 'um_account_shortcode_args_filter', $args ); if ( ! empty( $args['tab'] ) ) { if ( $args['tab'] == 'account' ) $args['tab'] = 'general'; $this->init_tabs( $args ); $this->current_tab = $args['tab']; if ( ! empty( $this->tabs[ $args['tab'] ] ) ) { ?>
*/ do_action( 'um_account_page_hidden_fields', $args ); $this->render_account_tab( $args['tab'], $this->tabs[$args['tab']], $args ); ?>
init_tabs( $args ); /** * UM hook * * @type action * @title um_pre_{$mode}_shortcode * @description Make some action before account tabs loading * @input_vars * [{"var":"$args","type":"array","desc":"Account Page Arguments"}] * @change_log * ["Since: 2.0"] * @usage add_action( 'um_pre_{$mode}_shortcode', 'function_name', 10, 1 ); * @example * */ do_action( "um_pre_{$args['mode']}_shortcode", $args ); /** * UM hook * * @type action * @title um_before_form_is_loaded * @description Make some action before account tabs loading * @input_vars * [{"var":"$args","type":"array","desc":"Account Page Arguments"}] * @change_log * ["Since: 2.0"] * @usage add_action( 'um_before_form_is_loaded', 'function_name', 10, 1 ); * @example * */ do_action( "um_before_form_is_loaded", $args ); /** * UM hook * * @type action * @title um_before_{$mode}_form_is_loaded * @description Make some action before account tabs loading * @input_vars * [{"var":"$args","type":"array","desc":"Account Page Arguments"}] * @change_log * ["Since: 2.0"] * @usage add_action( 'um_before_{$mode}_form_is_loaded', 'function_name', 10, 1 ); * @example * */ do_action( "um_before_{$args['mode']}_form_is_loaded", $args ); UM()->shortcodes()->template_load( $args['template'], $args ); } if ( ! is_admin() && ! defined( 'DOING_AJAX' ) ) { UM()->shortcodes()->dynamic_css( $args ); } $output = ob_get_clean(); return $output; } /** * Restrict access to Account page */ function account_page_restrict() { if ( um_is_core_page( 'account' ) ) { //redirect to login for not logged in users if ( ! is_user_logged_in() ) { $redirect_to = add_query_arg( 'redirect_to', urlencode_deep( um_get_core_page( 'account' ) ) , um_get_core_page( 'login' ) ); exit( wp_redirect( $redirect_to ) ); } //set data for fields UM()->fields()->set_mode = 'account'; UM()->fields()->editing = true; if ( get_query_var('um_tab') ) $this->current_tab = get_query_var('um_tab'); } } /** * Submit Account handler */ function account_submit() { if ( um_submitting_account_page() ) { UM()->form()->post_form = $_POST; /** * UM hook * * @type action * @title um_submit_account_errors_hook * @description Validate process on account submit * @input_vars * [{"var":"$submitted","type":"array","desc":"Account Page Submitted data"}] * @change_log * ["Since: 2.0"] * @usage add_action( 'um_submit_account_errors_hook', 'function_name', 10, 1 ); * @example * */ do_action( 'um_submit_account_errors_hook', UM()->form()->post_form ); if ( ! isset( UM()->form()->errors ) ) { if ( um_is_core_page( 'account' ) && get_query_var( 'um_tab' ) ) { $this->current_tab = get_query_var( 'um_tab' ); } else { $this->current_tab = UM()->form()->post_form['_um_account_tab']; } /** * UM hook * * @type action * @title um_submit_account_details * @description On success account submit * @input_vars * [{"var":"$submitted","type":"array","desc":"Account Page Submitted data"}] * @change_log * ["Since: 2.0"] * @usage add_action( 'um_submit_account_details', 'function_name', 10, 1 ); * @example * */ do_action( 'um_submit_account_details', UM()->form()->post_form ); } } } /** * Filter account fields * @param array $predefined_fields * @return array */ function predefined_fields_hook( $predefined_fields ) { $account_hide_in_directory = UM()->options()->get( 'account_hide_in_directory' ); if ( ! $account_hide_in_directory ) unset( $predefined_fields['hide_in_members'] ); return $predefined_fields; } /** * Get Tab Link * @param integer $id * @return string */ function tab_link( $id ) { if ( get_option('permalink_structure') ) { $url = trailingslashit( untrailingslashit( um_get_core_page('account') ) ); $url = $url . $id . '/'; } else { $url = add_query_arg( 'um_tab', $id, um_get_core_page('account') ); } return $url; } /** * @param $fields * @param $shortcode_args * @return mixed */ function filter_fields_by_attrs( $fields, $shortcode_args ) { foreach ( $fields as $k => $field ) { if ( isset( $shortcode_args[ $field['metakey'] ] ) && 0 == $shortcode_args[ $field['metakey'] ] ) unset( $fields[ $k ] ); } return $fields; } /** * @param $fields * @param $id * * @return mixed|void */ function account_secure_fields( $fields, $id ) { /** * UM hook * * @type filter * @title um_account_secure_fields * @description Change Account secure fields * @input_vars * [{"var":"$fields","type":"array","desc":"Account Fields"}, * {"var":"$id","type":"int","desc":"User ID"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_account_secure_fields', 'function_name', 10, 2 ); * @example * */ $fields = apply_filters( 'um_account_secure_fields', $fields, $id ); return $fields; } /** * * Get Tab Output * * @param integer $id * @param array $shortcode_args * @return mixed|null|string|void */ function get_tab_fields( $id, $shortcode_args ) { $output = null; UM()->fields()->set_mode = 'account'; UM()->fields()->editing = true; if ( ! empty( $this->tab_output[$id]['content'] ) && ! empty( $this->tab_output[$id]['hash'] ) && $this->tab_output[$id]['hash'] == md5( json_encode( $shortcode_args ) ) ) return $this->tab_output[$id]['content']; switch ( $id ) { case 'privacy': $args = 'profile_privacy,hide_in_members'; /** * UM hook * * @type filter * @title um_account_tab_privacy_fields * @description Extend Account Tab Privacy * @input_vars * [{"var":"$args","type":"array","desc":"Account Arguments"}, * {"var":"$shortcode_args","type":"array","desc":"Account Shortcode Arguments"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_account_tab_privacy_fields', 'function_name', 10, 2 ); * @example * */ $args = apply_filters( 'um_account_tab_privacy_fields', $args, $shortcode_args ); $fields = UM()->builtin()->get_specific_fields( $args ); $fields = $this->account_secure_fields( $fields, $id ); $fields = $this->filter_fields_by_attrs( $fields, $shortcode_args ); foreach ( $fields as $key => $data ){ $output .= UM()->fields()->edit_field( $key, $data ); } break; case 'delete': $args = 'single_user_password'; /** * UM hook * * @type filter * @title um_account_tab_delete_fields * @description Extend Account Tab Delete * @input_vars * [{"var":"$args","type":"array","desc":"Account Arguments"}, * {"var":"$shortcode_args","type":"array","desc":"Account Shortcode Arguments"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_account_tab_delete_fields', 'function_name', 10, 2 ); * @example * */ $args = apply_filters( 'um_account_tab_delete_fields', $args, $shortcode_args ); $fields = UM()->builtin()->get_specific_fields( $args ); $fields = $this->account_secure_fields( $fields, $id ); $fields = $this->filter_fields_by_attrs( $fields, $shortcode_args ); foreach ( $fields as $key => $data ) { $output .= UM()->fields()->edit_field( $key, $data ); } break; case 'general': $args = 'user_login,first_name,last_name,user_email'; if ( ! UM()->options()->get( 'account_name' ) ) { $args = 'user_login,user_email'; } if ( ! UM()->options()->get( 'account_email' ) && ! um_user( 'can_edit_everyone' ) ) { $args = str_replace(',user_email','', $args ); } /** * UM hook * * @type filter * @title um_account_tab_general_fields * @description Extend Account Tab General * @input_vars * [{"var":"$args","type":"array","desc":"Account Arguments"}, * {"var":"$shortcode_args","type":"array","desc":"Account Shortcode Arguments"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_account_tab_general_fields', 'function_name', 10, 2 ); * @example * */ $args = apply_filters( 'um_account_tab_general_fields', $args, $shortcode_args ); $fields = UM()->builtin()->get_specific_fields( $args ); $fields = $this->account_secure_fields( $fields, $id ); $fields = $this->filter_fields_by_attrs( $fields, $shortcode_args ); foreach ( $fields as $key => $data ) { $output .= UM()->fields()->edit_field( $key, $data ); } break; case 'password': $args = 'user_password'; /** * UM hook * * @type filter * @title um_account_tab_password_fields * @description Extend Account Tab Password * @input_vars * [{"var":"$args","type":"array","desc":"Account Arguments"}, * {"var":"$shortcode_args","type":"array","desc":"Account Shortcode Arguments"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_account_tab_password_fields', 'function_name', 10, 2 ); * @example * */ $args = apply_filters( 'um_account_tab_password_fields', $args, $shortcode_args ); $fields = UM()->builtin()->get_specific_fields( $args ); $fields = $this->account_secure_fields( $fields, $id ); $fields = $this->filter_fields_by_attrs( $fields, $shortcode_args ); foreach ( $fields as $key => $data ) { $output .= UM()->fields()->edit_field( $key, $data ); } break; default : /** * UM hook * * @type filter * @title um_account_content_hook_{$id} * @description Change not default Account tabs content * @input_vars * [{"var":"$output","type":"string","desc":"Account Tab Output"}, * {"var":"$shortcode_args","type":"array","desc":"Account Shortcode Arguments"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_account_content_hook_{$id}', 'function_name', 10, 2 ); * @example * */ $output = apply_filters( "um_account_content_hook_{$id}", $output, $shortcode_args ); break; } $this->tab_output[$id] = array( 'content' => $output, 'hash' => md5( json_encode( $shortcode_args ) ) ); return $output; } /** * Render Account Tab HTML * * @param $tab_id * @param $tab_data * @param $args */ function render_account_tab( $tab_id, $tab_data, $args ) { $output = $this->get_tab_fields( $tab_id, $args ); if ( $output ) { if ( ! empty ( $tab_data['with_header'] ) ) { ?>
*/ do_action( "um_before_account_{$tab_id}", $args ); echo $output; /** * UM hook * * @type action * @title um_after_account_{$tab_id} * @description Make some action after show account tab * @input_vars * [{"var":"$args","type":"array","desc":"Account Page Arguments"}] * @change_log * ["Since: 2.0"] * @usage add_action( 'um_after_account_{$tab_id}', 'function_name', 10, 1 ); * @example * */ do_action( "um_after_account_{$tab_id}", $args ); // var_dump($args); if ( ! isset( $tab_data['show_button'] ) || false !== $tab_data['show_button'] ) { ?>
*/ do_action( "um_after_account_{$tab_id}_button" ); ?>
fields()->editing == true ) { $classes .= ' um-editing'; } if ( UM()->fields()->viewing == true ) { $classes .= ' um-viewing'; } /** * UM hook * * @type filter * @title um_form_official_classes__hook * @description Change not default Account tabs content * @input_vars * [{"var":"$classes","type":"string","desc":"Form Classes"}] * @change_log * ["Since: 2.0"] * @usage add_filter( 'um_form_official_classes__hook', 'function_name', 10, 1 ); * @example * */ $classes = apply_filters( 'um_form_official_classes__hook', $classes ); return $classes; } } }