diff --git a/includes/admin/core/class-admin-settings.php b/includes/admin/core/class-admin-settings.php index 08e3f58e..a9897792 100644 --- a/includes/admin/core/class-admin-settings.php +++ b/includes/admin/core/class-admin-settings.php @@ -133,38 +133,52 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { ) ); - $tabs = UM()->profile()->tabs_primary(); + $tabs = UM()->profile()->tabs(); foreach ( $tabs as $id => $tab ) { - $appearances_profile_menu_fields = array_merge( $appearances_profile_menu_fields, array( - array( - 'id' => 'profile_tab_' . $id, - 'type' => 'checkbox', - 'label' => sprintf( __( '%s Tab', 'ultimate-member' ), $tab ), - 'conditional' => array( 'profile_menu', '=', 1 ), - ), - array( - 'id' => 'profile_tab_' . $id . '_privacy', - 'type' => 'select', - 'label' => sprintf( __( 'Who can see %s Tab?', 'ultimate-member' ), $tab ), - 'tooltip' => __( 'Select which users can view this tab.', 'ultimate-member' ), - 'options' => UM()->profile()->tabs_privacy(), - 'conditional' => array( 'profile_tab_' . $id, '=', 1 ), - 'size' => 'small' - ), - array( - 'id' => 'profile_tab_' . $id . '_roles', - 'type' => 'select', - 'multi' => true, - 'label' => __( 'Allowed roles','ultimate-member' ), - 'tooltip' => __( 'Select the the user roles allowed to view this tab.','ultimate-member' ), - 'options' => UM()->roles()->get_roles(), - 'placeholder' => __( 'Choose user roles...','ultimate-member' ), - 'conditional' => array( 'profile_tab_' . $id . '_privacy', '=', 4 ), - 'size' => 'small' - ) - ) ); + if ( isset( $tab['default_privacy'] ) ) { + $fields = array( + array( + 'id' => 'profile_tab_' . $id, + 'type' => 'checkbox', + 'label' => sprintf( __( '%s Tab', 'ultimate-member' ), $tab['name'] ), + 'conditional' => array( 'profile_menu', '=', 1 ), + ), + ); + } else { + + $fields = array( + array( + 'id' => 'profile_tab_' . $id, + 'type' => 'checkbox', + 'label' => sprintf( __( '%s Tab', 'ultimate-member' ), $tab['name'] ), + 'conditional' => array( 'profile_menu', '=', 1 ), + ), + array( + 'id' => 'profile_tab_' . $id . '_privacy', + 'type' => 'select', + 'label' => sprintf( __( 'Who can see %s Tab?', 'ultimate-member' ), $tab['name'] ), + 'tooltip' => __( 'Select which users can view this tab.', 'ultimate-member' ), + 'options' => UM()->profile()->tabs_privacy(), + 'conditional' => array( 'profile_tab_' . $id, '=', 1 ), + 'size' => 'small' + ), + array( + 'id' => 'profile_tab_' . $id . '_roles', + 'type' => 'select', + 'multi' => true, + 'label' => __( 'Allowed roles','ultimate-member' ), + 'tooltip' => __( 'Select the the user roles allowed to view this tab.','ultimate-member' ), + 'options' => UM()->roles()->get_roles(), + 'placeholder' => __( 'Choose user roles...','ultimate-member' ), + 'conditional' => array( 'profile_tab_' . $id . '_privacy', '=', 4 ), + 'size' => 'small' + ) + ); + } + + $appearances_profile_menu_fields = array_merge( $appearances_profile_menu_fields, $fields ); } $appearances_profile_menu_fields = array_merge( $appearances_profile_menu_fields, array( diff --git a/includes/class-config.php b/includes/class-config.php index 3b2be7e9..b0389db7 100644 --- a/includes/class-config.php +++ b/includes/class-config.php @@ -543,11 +543,14 @@ if ( ! class_exists( 'um\Config' ) ) { add_filter( 'um_get_tabs_from_config', '__return_true' ); - $tabs = UM()->profile()->tabs_primary(); + $tabs = UM()->profile()->tabs(); foreach ( $tabs as $id => $tab ) { $this->settings_defaults['profile_tab_' . $id] = 1; - $this->settings_defaults['profile_tab_' . $id . '_privacy'] = 0; - $this->settings_defaults['profile_tab_' . $id . '_roles'] = ''; + + if ( ! isset( $tab['default_privacy'] ) ) { + $this->settings_defaults['profile_tab_' . $id . '_privacy'] = 0; + $this->settings_defaults['profile_tab_' . $id . '_roles'] = ''; + } } foreach ( $this->email_notifications as $key => $notification ) { diff --git a/includes/core/class-profile.php b/includes/core/class-profile.php index fea8e952..eb5e6540 100644 --- a/includes/core/class-profile.php +++ b/includes/core/class-profile.php @@ -128,7 +128,7 @@ if ( ! class_exists( 'um\core\Profile' ) ) { } foreach ( $tabs as $id => $tab ) { - if ( ! $this->can_view_tab( $id ) ) { + if ( ! $this->can_view_tab( $id, $tab ) ) { unset( $tabs[ $id ] ); } } @@ -151,7 +151,7 @@ if ( ! class_exists( 'um\core\Profile' ) ) { $tabs = $this->tabs(); foreach ( $tabs as $id => $info ) { - if ( ! UM()->options()->get( 'profile_tab_' . $id ) && ! isset( $info['_builtin'] ) && ! isset( $info['custom'] ) ) { + if ( ! UM()->options()->get( 'profile_tab_' . $id ) ) { unset( $tabs[ $id ] ); } } @@ -160,37 +160,20 @@ if ( ! class_exists( 'um\core\Profile' ) ) { } - /** - * Primary tabs only - * - * @return array - */ - function tabs_primary() { - $tabs = $this->tabs(); - $primary = array(); - foreach ( $tabs as $id => $info ) { - if ( isset( $info['name'] ) ) { - $primary[$id] = $info['name']; - } - } - return $primary; - } - - /** * Activated tabs in backend * * @return string */ function tabs_enabled() { - $tabs = $this->tabs(); + $tabs = $this->tabs_active(); + foreach ( $tabs as $id => $info ) { if ( isset( $info['name'] ) ) { - if ( UM()->options()->get( 'profile_tab_' . $id ) || isset( $info['_builtin'] ) ) { - $primary[ $id ] = $info['name']; - } + $primary[ $id ] = $info['name']; } } + return isset( $primary ) ? $primary : ''; } @@ -202,11 +185,11 @@ if ( ! class_exists( 'um\core\Profile' ) ) { */ function tabs_privacy() { $privacy = array( - 0 => 'Anyone', - 1 => 'Guests only', - 2 => 'Members only', - 3 => 'Only the owner', - 4 => 'Specific roles' + 0 => __( 'Anyone', 'ultimate-member' ), + 1 => __( 'Guests only', 'ultimate-member' ), + 2 => __( 'Members only', 'ultimate-member' ), + 3 => __( 'Only the owner', 'ultimate-member' ), + 4 => __( 'Specific roles', 'ultimate-member' ), ); return $privacy; @@ -216,20 +199,26 @@ if ( ! class_exists( 'um\core\Profile' ) ) { /** * Check if the user can view the current tab * - * @param $tab + * @param string $tab + * @param array $tab_data * * @return bool */ - function can_view_tab( $tab ) { + function can_view_tab( $tab, $tab_data = array() ) { + $can_view = false; $target_id = (int) UM()->user()->target_id; if ( empty( $target_id ) ) { return true; } - $can_view = false; + if ( isset( $tab_data['default_privacy'] ) ) { + $privacy = $tab_data['default_privacy']; + } else { + $privacy = intval( UM()->options()->get( 'profile_tab_' . $tab . '_privacy' ) ); + } - $privacy = intval( UM()->options()->get( 'profile_tab_' . $tab . '_privacy' ) ); + $privacy = apply_filters( 'um_profile_menu_tab_privacy', $privacy, $tab ); switch ( $privacy ) { case 0: $can_view = true; @@ -249,7 +238,11 @@ if ( ! class_exists( 'um\core\Profile' ) ) { case 4: if ( is_user_logged_in() ) { - $roles = (array) UM()->options()->get( 'profile_tab_' . $tab . '_roles' ); + if ( isset( $tab_data['default_privacy'] ) ) { + $roles = isset( $tab_data['default_privacy_roles'] ) ? $tab_data['default_privacy_roles'] : array(); + } else { + $roles = (array) UM()->options()->get( 'profile_tab_' . $tab . '_roles' ); + } $current_user_roles = um_user( 'roles' ); if ( ! empty( $current_user_roles ) && count( array_intersect( $current_user_roles, $roles ) ) > 0 ) {