diff --git a/core/um-profile.php b/core/um-profile.php
index c7d13324..3488b280 100644
--- a/core/um-profile.php
+++ b/core/um-profile.php
@@ -3,19 +3,30 @@
class UM_Profile {
function __construct() {
-
+
add_action('template_redirect', array(&$this, 'active_tab'), 10002);
add_action('template_redirect', array(&$this, 'active_subnav'), 10002);
-
+
}
-
+
/***
*** @all tab data
***/
function tabs(){
- return apply_filters('um_profile_tabs', $tabs = array() );
+ $tabs = apply_filters('um_profile_tabs', $tabs = array() );
+
+ // disable private tabs
+ if( !is_admin() ) {
+ foreach( $tabs as $id => $tab ) {
+ if( !$this->can_view_tab( $id ) ) {
+ unset( $tabs[$id] );
+ }
+ }
+ }
+
+ return $tabs;
}
-
+
/***
*** @tabs that are active
***/
@@ -27,7 +38,7 @@ class UM_Profile {
}
return $tabs;
}
-
+
/***
*** @primary tabs only
***/
@@ -40,7 +51,7 @@ class UM_Profile {
}
return $primary;
}
-
+
/***
*** @Activated tabs in backend
***/
@@ -55,7 +66,63 @@ class UM_Profile {
}
return ( isset( $primary ) ) ? $primary : '';
}
-
+
+ /***
+ *** @Privacy options
+ ***/
+ function tabs_privacy() {
+ $privacy = array(
+ 0 => 'Anyone',
+ 1 => 'Guests only',
+ 2 => 'Members only',
+ 3 => 'Only the owner',
+ 4 => 'Specific roles'
+ );
+
+ return $privacy;
+ }
+
+ /***
+ *** @Check if the user can view the current tab
+ ***/
+ function can_view_tab( $tab ) {
+ global $ultimatemember;
+
+ $privacy = intval( um_get_option( 'profile_tab_' . $tab . '_privacy' ) );
+ $can_view = false;
+
+ switch( $privacy ) {
+ case 1:
+ $can_view = is_user_logged_in() ? false : true;
+ break;
+
+ case 2:
+ $can_view = is_user_logged_in() ? true : false;
+ break;
+
+ case 3:
+ $can_view = get_current_user_id() == um_user( 'ID' ) ? true : false;
+ break;
+
+ case 4:
+ $can_view = false;
+ if( is_user_logged_in() ) {
+ $roles = um_get_option( 'profile_tab_' . $tab . '_roles' );
+ if( is_array( $roles )
+ && in_array( $ultimatemember->user->get_role(), $roles ) ) {
+ $can_view = true;
+ }
+ }
+ break;
+
+ default:
+ $can_view = true;
+ break;
+ }
+
+ return $can_view;
+ }
+
/***
*** @Get active_tab
***/
@@ -66,53 +133,53 @@ class UM_Profile {
if ( get_query_var('profiletab') ) {
$this->active_tab = get_query_var('profiletab');
}
-
+
$this->active_tab = apply_filters( 'um_profile_active_tab', $this->active_tab );
return $this->active_tab;
}
-
+
/***
*** @Get active active_subnav
***/
function active_subnav() {
-
+
$this->active_subnav = null;
-
+
if ( get_query_var('subnav') ) {
$this->active_subnav = get_query_var('subnav');
}
-
+
return $this->active_subnav;
}
-
+
/***
*** @Show meta in profile
***/
function show_meta( $array ) {
global $ultimatemember;
$output = '';
-
+
foreach( $array as $key ) {
$data = '';
if ( $key && um_filtered_value( $key ) ) {
-
+
if ( isset( $ultimatemember->builtin->all_user_fields[$key]['icon'] ) ) {
$icon = $ultimatemember->builtin->all_user_fields[$key]['icon'];
} else {
$icon = '';
}
-
+
$icon = ( isset( $icon ) && !empty( $icon ) ) ? '' : '';
-
+
if ( !um_get_option('profile_show_metaicon') )
$icon = '';
-
+
$value = um_filtered_value( $key );
-
+
$items[] = '' . $icon . $value . '';
$items[] = '•';
-
+
}
}
@@ -126,4 +193,4 @@ class UM_Profile {
return $output;
}
-}
\ No newline at end of file
+}
diff --git a/um-config.php b/um-config.php
index c833e65d..7df81853 100644
--- a/um-config.php
+++ b/um-config.php
@@ -1594,6 +1594,30 @@ foreach( $tabs as $id => $tab ) {
'off' => __('Off','ultimatemember'),
);
+ $tab_options[] = array(
+ 'id' => 'profile_tab_' . $id . '_privacy',
+ 'type' => 'select',
+ 'select2' => array( 'allowClear' => 0, 'minimumResultsForSearch' => -1 ),
+ 'title' => sprintf( __( 'Who can see %s Tab?','ultimatemember' ), $tab ),
+ 'desc' => __( 'Select which users can view this tab.','ultimatemember' ),
+ 'default' => 0,
+ 'options' => $ultimatemember->profile->tabs_privacy(),
+ 'required' => array( 'profile_tab_' . $id, '=', 1 ),
+ );
+
+ $tab_options[] = array(
+ 'id' => 'profile_tab_' . $id . '_roles',
+ 'type' => 'select',
+ 'multi' => true,
+ 'select2' => array( 'allowClear' => 1, 'minimumResultsForSearch' => -1 ),
+ 'title' => __( 'Allowed roles','ultimatemember' ),
+ 'desc' => __( 'Select the the user roles allowed to view this tab.','ultimatemember' ),
+ 'default' => '',
+ 'options' => $ultimatemember->query->get_roles(),
+ 'placeholder' => __( 'Choose user roles...','ultimatemember' ),
+ 'required' => array( 'profile_tab_' . $id . '_privacy', '=', 4 ),
+ );
+
}
$tab_options[] = array(