Version 1.0.35

This commit is contained in:
ultimatemember
2015-02-01 01:30:04 +02:00
parent df37a3164f
commit 539ebf10d7
41 changed files with 938 additions and 226 deletions
+11
View File
@@ -11,6 +11,17 @@
exit( wp_redirect( remove_query_arg('um_adm_action') ) );
}
/***
*** @Hide exif notice
***/
add_action('um_admin_do_action__um_show_exif_notice', 'um_admin_do_action__um_show_exif_notice');
function um_admin_do_action__um_show_exif_notice( $action ){
global $ultimatemember;
if ( !is_admin() || !current_user_can('manage_options') ) die();
update_option( $action, 1 );
exit( wp_redirect( remove_query_arg('um_adm_action') ) );
}
/***
*** @Opt-in tracking
***/
+1 -1
View File
@@ -348,7 +348,7 @@ class UM_Admin_Metabox {
$where = array( 'ID' => $post_id );
if (empty($_POST['post_title'])) $_POST['post_title'] = 'Role #'.$post_id;
$wpdb->update( $wpdb->posts, array( 'post_title' => $_POST['post_title'] ), $where );
$wpdb->update( $wpdb->posts, array( 'post_title' => $_POST['post_title'], 'post_name' => wp_unique_post_slug( sanitize_title( $_POST['post_title'] ) ) ), $where );
// save
delete_post_meta( $post_id, '_um_can_view_roles' );
+15 -2
View File
@@ -15,9 +15,9 @@ class UM_Admin_Notices {
***/
function main_notices(){
$hide_notice = get_option('um_can_register_notice');
$hide_register_notice = get_option('um_can_register_notice');
if ( !get_option('users_can_register') && !$hide_notice ) {
if ( !get_option('users_can_register') && !$hide_register_notice ) {
echo '<div class="updated" style="border-color: #3ba1da;"><p>';
@@ -26,6 +26,19 @@ class UM_Admin_Notices {
echo '</p></div>';
}
$hide_exif_notice = get_option('um_show_exif_notice');
if ( !extension_loaded('exif') && !$hide_exif_notice ) {
echo '<div class="updated" style="border-color: #3ba1da;"><p>';
echo sprintf(__( 'Exif is not enabled on your server. Mobile photo uploads will not be rotated correctly until you enable the exif extension. <a href="%s">Hide this notice</a>', 'ultimatemember' ), add_query_arg('um_adm_action', 'um_show_exif_notice') );
echo '</p></div>';
}
}
/***
+2 -1
View File
@@ -117,7 +117,8 @@ class UM_Admin_Users {
foreach($users as $user_id){
$ultimatemember->user->set( $user_id );
if ( !um_user('super_admin') ) {
// change role for non-wp admins or non-community admins only
if ( !um_user('super_admin') || um_user('role') != 'admin' ) {
$ultimatemember->user->set_role( $new_role );
} else {
$admin_err = 1;
+9 -1
View File
@@ -7,13 +7,21 @@
<label class="um-admin-half"><?php _e('Can access wp-admin?','ultimatemember'); ?> <?php $this->tooltip( __('The core admin role must always have access to wp-admin / WordPress backend','ultimatemember') ); ?></label>
<span class="um-admin-half"><?php $this->ui_on_off('_um_can_access_wpadmin', 1); ?></span>
</p><div class="um-admin-clear"></div>
<p>
<label class="um-admin-half"><?php _e('Force hiding adminbar in frontend?','ultimatemember'); ?> <?php $this->tooltip( __('Show/hide the adminbar on frontend','ultimatemember') ); ?></label>
<span class="um-admin-half"><?php $this->ui_on_off('_um_can_not_see_adminbar', 0); ?></span>
</p><div class="um-admin-clear"></div>
<?php } else { ?>
<p>
<label class="um-admin-half"><?php _e('Can access wp-admin?','ultimatemember'); ?> <?php $this->tooltip( __('Allow this role to access the admin dashboard. If turned on the WordPress toolbar will appear at top of the page.','ultimatemember') ); ?></label>
<span class="um-admin-half"><?php $this->ui_on_off('_um_can_access_wpadmin', 0); ?></span>
</p><div class="um-admin-clear"></div>
<p>
<label class="um-admin-half"><?php _e('Force hiding adminbar in frontend?','ultimatemember'); ?> <?php $this->tooltip( __('Show/hide the adminbar on frontend','ultimatemember') ); ?></label>
<span class="um-admin-half"><?php $this->ui_on_off('_um_can_not_see_adminbar', 1); ?></span>
</p><div class="um-admin-clear"></div>
<?php } ?>
<p>
<label class="um-admin-half"><?php _e('Can edit other member accounts?','ultimatemember'); ?> <?php $this->tooltip( __('Allow this role to edit accounts of other members','ultimatemember') ); ?></label>
<span class="um-admin-half"><?php $this->ui_on_off('_um_can_edit_everyone', 0, true, 1, 'edit-roles', 'xxx'); ?></span>
+35 -15
View File
@@ -342,26 +342,37 @@ font-weight: normal;
color: #FFF!important;
}
.um-profile-nav-item.active a span.count {background: transparent}
.um-profile-nav-item a {
color: #fff!important;
font-size: 15px;
font-size: 14px;
font-weight: 600;
padding: 7px 20px;
padding: 6px 10px 6px 28px;
display: block;
float: left;
border-radius: 4px;
margin-left: 10px;
margin-left: 5px;
position: relative;
}
.um-profile-nav-item a:hover {
background: #555;
.um-profile-nav-item.without-icon a {padding-left: 10px}
.um-profile-nav-item.without-icon span.title {padding-left: 0}
.um-profile-nav-item.without-icon i {display: none}
.um-profile-nav-item a:hover {background: #555}
.um-profile-nav-item i {font-size: 18px;height: 18px;line-height: 18px;position: absolute;display: block;top: 8px;left: 10px}
.um-profile-nav-item span.title {padding-left: 5px}
.um-profile-nav-item span.count {
font-size: 12px;
font-weight: 300;
background: #777;
border-radius: 3px;
padding: 2px 4px;
margin-left: 3px;
}
.um-profile-nav-item i {
font-size: 20px;
width: 20px;
text-align: center;
}
/* Subnav */
.um-profile-subnav {
background: #eee;
@@ -415,18 +426,27 @@ font-weight: normal;
.um-item-link a {
color: #333;
font-size: 16px;
line-height: 20px;
}
.um-item-link a:hover {
text-decoration: underline !important;
}
.um-item-meta {color: #999}
.um-item-link i {
font-size: 24px;
color: #ccc;
margin-right: 10px;
position: relative;
top: 3px;
}
.um-item-meta {color: #888}
.um-item-meta span {
font-size: 14px;
font-weight: 500;
font-style: italic;
font-size: 13px;
font-weight: 400;
font-style: italic;
}
.um-item-meta span:not(:last-child):after {
@@ -435,7 +455,7 @@ font-weight: normal;
content: "•";
}
.um-item-meta a {border-bottom: 1px solid #E0E0E0;color: #3BA1DA}
.um-item-meta a {font-weight: bold;border-bottom: 1px solid #E0E0E0;color: #3BA1DA}
.um-item-meta a:hover {border-bottom-color: #bbb}
.um-load-items {
+19 -10
View File
@@ -46,11 +46,13 @@ div.uimob340 .um-profile-nav {
}
div.uimob340 .um-profile-nav-item a {
padding: 1px 12px;
padding: 10px 16px;
margin-left: 0;
border-radius: 0;
}
div.uimob340 .um-profile-nav-item i{display:block;position: static;top: auto;left: auto}
div.uimob340 .um-profile-subnav {
padding: 8px 15px;
}
@@ -260,14 +262,17 @@ div.uimob340 .um-account-meta {
/********************************************/
div.uimob500 .um-profile-nav {
padding: 6px;
padding: 0;
}
div.uimob500 .um-profile-nav-item a {
padding: 1px 12px;
margin-left: 6px;
padding: 10px 16px;
margin-left: 0;
border-radius: 0;
}
div.uimob500 .um-profile-nav-item i{display:block;position: static;top: auto;left: auto;font-size: 22px;height: 22px;line-height: 22px;}
div.uimob500 .um-profile-subnav {
padding: 8px 15px;
}
@@ -462,16 +467,18 @@ div.uimob500 .um-account-meta {
for 800px and below
**/
div.uimob800 .um-profile-nav-item a {
padding: 1px 12px;
margin-left: 6px;
div.uimob800 .um-profile-nav {
padding: 0;
}
div.uimob800 .um-profile-nav-item i {
font-size: 25px;
width: 25px;
div.uimob800 .um-profile-nav-item a {
padding: 10px 20px;
margin-left: 0;
border-radius: 0;
}
div.uimob800 .um-profile-nav-item i{display:block;position: static;top: auto;left: auto;font-size: 26px;height: 26px;line-height: 26px;}
div.uimob800 .um-profile-subnav {
padding: 8px 15px;
}
@@ -555,6 +562,8 @@ div.uimob800 .um-account-meta img {
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
max-width: 100%;
height: auto;
}
div.uimob800 .um-profile-photo {
+1 -1
View File
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -65,7 +65,7 @@ function um_conditional(){
}
if ( operator0 == 'contains' ) {
if ( live_value.indexOf( value0 ) >= 0 ) {
if ( live_value && live_value.indexOf( value0 ) >= 0 ) {
jQuery(this).fadeIn();
} else {
jQuery(this).hide();
@@ -127,7 +127,7 @@ function um_conditional(){
}
if ( operator0 == 'contains' ) {
if ( live_value.indexOf( value0 ) >= 0 ) {
if ( live_value && live_value.indexOf( value0 ) >= 0 ) {
jQuery(this).hide();
} else {
jQuery(this).fadeIn();
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -61,7 +61,7 @@
$post_id = get_option('woocommerce_shop_page_id');
} else if ( is_archive() ) {
} else if ( is_archive() || is_front_page() || is_search() || in_the_loop() ) {
return;
+4
View File
@@ -65,6 +65,10 @@
$success = __('You have successfully changed your password.','ultimatemember');
break;
case 'account_active':
$success = __('Your account is now active! You can login.','ultimatemember');
break;
}
}
+53
View File
@@ -0,0 +1,53 @@
<?php
/***
*** @Search results
***/
add_action('pre_get_posts','um_pre_get_posts');
function um_pre_get_posts($query) {
if ( !is_admin() && $query->is_main_query() ) {
if ( $query->is_search || $query->is_archive() || $query->is_home ) {
if ( $query->is_home && !um_get_option('exclude_from_main_loop' ) ) return;
if ( $query->is_archive && !um_get_option('exclude_from_archive_loop' ) ) return;
if ( $query->is_search && !um_get_option('exclude_from_search_loop' ) ) return;
if ( is_user_logged_in() ) {
$meta_query['relation'] = 'OR';
$meta_query[] = array(
'key'=>'_um_accessible',
'value'=>'1',
'compare'=>'!=',
);
$meta_query[] = array(
'key'=>'_um_accessible',
'compare'=>'NOT EXISTS',
);
$query->set('meta_query',$meta_query);
}
if ( !is_user_logged_in() ) {
$meta_query['relation'] = 'OR';
$meta_query[] = array(
'key'=>'_um_accessible',
'value'=>'2',
'compare'=>'!=',
);
$meta_query[] = array(
'key'=>'_um_accessible',
'compare'=>'NOT EXISTS',
);
$query->set('meta_query',$meta_query);
}
}
}
}
+45 -17
View File
@@ -141,9 +141,11 @@
add_action('um_profile_header_cover_area', 'um_profile_header_cover_area' );
function um_profile_header_cover_area( $args ) {
global $ultimatemember;
if ( $args['cover_enabled'] == 1 ) {
if ( $args['cover_enabled'] == 1 ) {
$default_cover = um_get_option('default_cover');
$overlay = '<span class="um-cover-overlay">
<span class="um-cover-overlay-s">
<ins>
@@ -155,7 +157,7 @@
?>
<div class="um-cover <?php if ( um_profile('cover_photo') ) echo 'has-cover'; ?>" data-user_id="<?php echo um_profile_id(); ?>" data-ratio="<?php echo $args['cover_ratio']; ?>">
<div class="um-cover <?php if ( um_profile('cover_photo') || ( $default_cover && $default_cover['url'] ) ) echo 'has-cover'; ?>" data-user_id="<?php echo um_profile_id(); ?>" data-ratio="<?php echo $args['cover_ratio']; ?>">
<?php
@@ -170,7 +172,6 @@
echo $ultimatemember->menu->new_ui( 'bc', 'div.um-cover', 'click', $items );
}
?>
<?php $ultimatemember->fields->add_hidden_field( 'cover_photo' ); ?>
@@ -195,13 +196,21 @@
?>
<?php } else { ?>
<?php } elseif ( $default_cover && $default_cover['url'] ) {
$default_cover = $default_cover['url'];
echo '<img src="'. $default_cover . '" alt="" />';
} else {
<?php if ( !isset( $ultimatemember->user->cannot_edit ) ) { ?>
<a href="#" class="um-cover-add um-manual-trigger" data-parent=".um-cover" data-child=".um-btn-auto-width"><span class="um-cover-add-i"><i class="um-icon-plus um-tip-n" title="<?php _e('Upload a cover photo','ultimatemember'); ?>"></i></span></a>
<?php } ?>
if ( !isset( $ultimatemember->user->cannot_edit ) ) { ?>
<?php } ?>
<a href="#" class="um-cover-add um-manual-trigger" data-parent=".um-cover" data-child=".um-btn-auto-width"><span class="um-cover-add-i"><i class="um-icon-plus um-tip-n" title="<?php _e('Upload a cover photo','ultimatemember'); ?>"></i></span></a>
<?php }
} ?>
</div>
@@ -505,12 +514,21 @@
function um_profile_navbar( $args ) {
global $ultimatemember;
$tabs = $ultimatemember->profile->tabs();
$tabs = $ultimatemember->profile->tabs_active();
if ( count( $tabs ) == 1 ) return;
$tabs = apply_filters('um_user_profile_tabs', $tabs );
$active_tab = $ultimatemember->profile->active_tab;
$ultimatemember->user->tabs = $tabs;
if ( count( $tabs ) <= 1 ) return;
$active_tab = $ultimatemember->profile->active_tab();
if ( !isset( $tabs[$active_tab] ) )
$active_tab = 'main';
$ultimatemember->profile->active_tab = $active_tab;
$ultimatemember->profile->active_subnav = null;
?>
<div class="um-profile-nav">
@@ -523,20 +541,30 @@
$nav_link = add_query_arg('profiletab', $id, $nav_link )
?>
<div class="um-profile-nav-item <?php if ( $id == $active_tab ) echo 'active'; ?>"><a href="<?php echo $nav_link; ?>" title="<?php echo $tab['name']; ?>"><i class="<?php echo $tab['icon']; ?> uimob500-show uimob340-show uimob800-show"></i><span class="uimob500-hide uimob340-hide uimob800-hide"><?php echo $tab['name']; ?></span></a></div>
<div class="um-profile-nav-item <?php if ( !um_get_option('profile_menu_icons') ) { echo 'without-icon'; } ?> <?php if ( $id == $active_tab ) { echo 'active'; } ?>">
<a href="<?php echo $nav_link; ?>" title="<?php echo $tab['name']; ?>">
<i class="<?php echo $tab['icon']; ?>"></i>
<span class="uimob500-hide uimob340-hide uimob800-hide title"><?php echo $tab['name']; ?></span>
<?php if ( um_get_option('profile_menu_counts') && isset( $tab['count'] ) ) { ?>
<span class="uimob500-hide uimob340-hide uimob800-hide count"><?php echo $tab['count']; ?></span>
<?php } ?>
</a>
</div>
<?php } ?>
<div class="um-clear"></div>
</div>
<?php
foreach( $tabs as $id => $tab ) {
<?php foreach( $tabs as $id => $tab ) {
if ( isset( $tab['subnav'] ) && $active_tab == $id ) {
$active_subnav = (isset($ultimatemember->profile->active_subnav)) ? $ultimatemember->profile->active_subnav : $tab['subnav_default'];
$active_subnav = ( $ultimatemember->profile->active_subnav() ) ? $ultimatemember->profile->active_subnav() : $tab['subnav_default'];
echo '<div class="um-profile-subnav">';
foreach( $tab['subnav'] as $id => $subtab ) {
+4 -1
View File
@@ -64,7 +64,10 @@
*** @hide admin bar appropriately
***/
function um_control_admin_bar(){
if( !is_admin() && !um_user('can_access_wpadmin')) {
if ( um_user('can_not_see_adminbar') )
return false;
if( !is_admin() && !um_user('can_access_wpadmin') ) {
return false;
} else {
um_fetch_user( get_current_user_id() );
+27 -32
View File
@@ -48,7 +48,6 @@ class UM_Fields {
echo $output;
echo '</div>';
}
/***
@@ -448,28 +447,6 @@ class UM_Fields {
return false;
}
/***
*** @Fix for children custom fields
***/
function find_custom_field_data($key, $fields) {
foreach ($fields as $k => $v) {
if ( $k == $key ){
return $fields[$key];
}
if (isset($fields[$k]['fields'])) {
foreach( $fields[$k]['fields'] as $k1 => $v1 ){
if ($k1 == $key){
return $fields[$k]['fields'][$k1];
}
}
}
}
return array('');
}
/***
*** @Get Field Icon
@@ -509,9 +486,9 @@ class UM_Fields {
global $ultimatemember;
$fields = $this->get_fields();
if ( isset( $fields ) && is_array( $fields ) ) {
$array = $this->find_custom_field_data($key, $fields);
if ( isset( $fields ) && is_array( $fields ) && isset( $fields[$key] ) ) {
$array = $fields[$key];
} else {
$array = $ultimatemember->builtin->predefined_fields[$key];
}
@@ -607,6 +584,7 @@ class UM_Fields {
$array['disabled_weekdays'] = '[' . implode(',',$array['disabled_weekdays']) . ']';
}
// When date range is strictly defined
if ( $array['range'] == 'date_range' ) {
$array['date_min'] = str_replace('/',',',$array['range_start']);
@@ -615,14 +593,31 @@ class UM_Fields {
} else {
if ( $array['years_x'] == 'past' ) {
$array['date_min'] = date('Y,n,d', mktime(0, 0, 0, date("n") , date("d"), date("Y") - $array['years'] ) );
$date = new DateTime( date('Y-n-d') );
$past = $date->modify('-'.$array['years'].' years')->format('Y,n,d');
$array['date_min'] = $past;
$array['date_max'] = date('Y,n,d');
} else if ( $array['years_x'] == 'future' ) {
$date = new DateTime( date('Y-n-d') );
$future = $date->modify('+'.$array['years'].' years')->format('Y,n,d');
$array['date_min'] = date('Y,n,d');
$array['date_max'] = date('Y,n,d', mktime(0, 0, 0, date("n") , date("d"), date("Y") + $array['years'] ) );
$array['date_max'] = $future;
} else {
$array['date_min'] = date('Y,n,d', mktime(0, 0, 0, date("n") , date("d"), date("Y") - ( $array['years'] / 2 ) ) );
$array['date_max'] = date('Y,n,d', mktime(0, 0, 0, date("n") , date("d"), date("Y") + ( $array['years'] / 2 ) ) );
$date = new DateTime( date('Y-n-d') );
$date_f = new DateTime( date('Y-n-d') );
$past = $date->modify('-'. ( $array['years'] / 2 ).' years')->format('Y,n,d');
$future = $date_f->modify('+'. ( $array['years'] / 2 ).' years')->format('Y,n,d');
$array['date_min'] = $past;
$array['date_max'] = $future;
}
}
@@ -1340,7 +1335,7 @@ class UM_Fields {
$v = rtrim($v);
if ( !is_numeric( $k ) ) {
if ( !is_numeric( $k ) && in_array($form_key, array('role') ) ) {
$option_value = $k;
} else {
$option_value = $v;
@@ -1438,7 +1433,7 @@ class UM_Fields {
$v = rtrim($v);
if ( !is_numeric( $k ) ) {
if ( !is_numeric( $k ) && in_array($form_key, array('role') ) ) {
$option_value = $k;
} else {
$option_value = $v;
+14 -13
View File
@@ -129,24 +129,25 @@ class UM_Files {
*** @fix image orientation
***/
function fix_image_orientation($rotate, $source){
$exif = @exif_read_data($source);
if ( extension_loaded('exif') ){
$exif = @exif_read_data($source);
if (isset($exif['Orientation'])) {
switch ($exif['Orientation']) {
case 3:
$rotate = imagerotate($rotate, 180, 0);
break;
if (isset($exif['Orientation'])) {
switch ($exif['Orientation']) {
case 3:
$rotate = imagerotate($rotate, 180, 0);
break;
case 6:
$rotate = imagerotate($rotate, -90, 0);
break;
case 6:
$rotate = imagerotate($rotate, -90, 0);
break;
case 8:
$rotate = imagerotate($rotate, 90, 0);
break;
case 8:
$rotate = imagerotate($rotate, 90, 0);
break;
}
}
}
return $rotate;
}
+2 -2
View File
@@ -9,13 +9,13 @@
if ( is_multisite() ) { // Need to the work
if ( get_current_blog_id() == '1' ) return;
if ( get_current_blog_id() == '1' ) return $dir;
$split = explode('sites',$dir);
$um_dir = 'ultimatemember/';
$dir = $split[0] . $um_dir;
}
return $dir;
}
+7 -3
View File
@@ -66,12 +66,16 @@
foreach( $query as $field => $value ) {
$operator = 'LIKE';
if ( in_array( $field, array('gender') ) ) {
$operator = '=';
} else {
$operator = 'LIKE';
}
if ( in_array( $ultimatemember->fields->get_field_type( $field ), array('checkbox','multiselect') ) ) {
$operator = 'LIKE';
}
if ( $value && $field != 'um_search' ) {
if ( !in_array( $field, $ultimatemember->members->core_search_fields ) ) {
+10
View File
@@ -0,0 +1,10 @@
<?php
/***
*** @formats numbers nicely
***/
add_filter('um_pretty_number_formatting', 'um_pretty_number_formatting');
function um_pretty_number_formatting( $count ) {
$count = (int)$count;
return number_format( $count );
}
+1 -1
View File
@@ -40,7 +40,7 @@
switch( $mode ) {
case 2:
if (isset($roles) && !empty($roles)) {
if ( is_user_logged_in() && isset($roles) && !empty($roles)) {
if ( in_array( um_user('role'), (array)$roles) ) {
$visible = true;
} else {
+1 -1
View File
@@ -18,7 +18,7 @@
*** @dynamic profile page title
***/
add_filter('wp_title', 'um_dynamic_user_profile_pagetitle', 100000, 2 );
function um_dynamic_user_profile_pagetitle( $title, $sep ) {
function um_dynamic_user_profile_pagetitle( $title, $sep = '' ) {
global $paged, $page, $ultimatemember;
$profile_title = um_get_option('profile_title');
+6
View File
@@ -50,6 +50,9 @@ class UM_Mail {
$search = array(
'{display_name}',
'{first_name}',
'{last_name}',
'{gender}',
'{username}',
'{email}',
'{password}',
@@ -66,6 +69,9 @@ class UM_Mail {
$replace = array(
um_user('display_name'),
um_user('first_name'),
um_user('last_name'),
um_user('gender'),
um_user('user_login'),
um_user('user_email'),
um_user('_um_cool_but_hard_to_guess_plain_pw'),
+1 -1
View File
@@ -5,7 +5,7 @@ if ( ! class_exists( 'UM_Menu_Item_Custom_Fields' ) ) :
class UM_Menu_Item_Custom_Fields {
public static function load() {
add_filter( 'wp_edit_nav_menu_walker', array( __CLASS__, '_filter_walker' ), 99 );
add_filter( 'wp_edit_nav_menu_walker', array( __CLASS__, '_filter_walker' ), 200 );
}
public static function _filter_walker( $walker ) {
+2
View File
@@ -73,6 +73,8 @@ class UM_Permalinks {
um_reset_user();
exit( wp_redirect( um_get_core_page('login', 'account_active') ) );
}
}
+39 -4
View File
@@ -5,31 +5,66 @@ class UM_Profile {
function __construct() {
add_action('template_redirect', array(&$this, 'active_tab'), 10002);
$this->active_tab = 'main';
add_action('template_redirect', array(&$this, 'active_subnav'), 10002);
}
/***
*** @Global tabs
*** @all tab data
***/
function tabs(){
return apply_filters('um_profile_tabs', $tabs = array() );
}
/***
*** @Get active tab
*** @tabs that are active
***/
function tabs_active(){
$tabs = $this->tabs();
foreach( $tabs as $id => $info ) {
if ( !um_get_option('profile_tab_'.$id) )
unset( $tabs[$id] );
}
return $tabs;
}
/***
*** @primary tabs only
***/
function tabs_primary(){
$tabs = $this->tabs();
foreach( $tabs as $id => $info ){
$primary[$id] = $info['name'];
}
return $primary;
}
/***
*** @Get active_tab
***/
function active_tab() {
$this->active_tab = um_get_option('profile_menu_default_tab');
if ( get_query_var('profiletab') ) {
$this->active_tab = get_query_var('profiletab');
}
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;
}
/***
+14 -3
View File
@@ -21,9 +21,20 @@ class UM_Query {
extract( $args );
$custom_posts = new WP_Query();
$custom_posts->query( $args );
return $custom_posts;
if ( $post_type == 'comment' ) { // comments
unset( $args['post_type'] );
$comments = get_comments($args);
return $comments;
} else {
$custom_posts = new WP_Query();
$custom_posts->query( $args );
return $custom_posts;
}
}
/***
+8 -3
View File
@@ -34,17 +34,22 @@ class UM_Rewrite {
if ( isset( $ultimatemember->permalinks->core['user'] ) ) {
$user_page_id = $ultimatemember->permalinks->core['user'];
$account_page_id = $ultimatemember->permalinks->core['account'];
$user = get_post($user_page_id);
$user_slug = $user->post_name;
$account = get_post($account_page_id);
$account_slug = $account->post_name;
add_rewrite_rule(
'^user/([^/]*)$',
'^'.$user_slug.'/([^/]*)$',
'index.php?page_id='.$user_page_id.'&um_user=$matches[1]',
'top'
);
add_rewrite_rule(
'^account/([^/]*)$',
'^'.$account_slug.'/([^/]*)$',
'index.php?page_id='.$account_page_id.'&um_tab=$matches[1]',
'top'
);
+4
View File
@@ -147,6 +147,8 @@ class UM_Setup {
'_um_login_secondary_btn_hover' => '#e5e5e5',
'_um_login_secondary_btn_text' => '#666',
'_um_directory_template' => 'members',
'_um_directory_header' => __('{total_users} Members','ultimatemember'),
'_um_directory_header_single' => __('{total_users} Member','ultimatemember'),
);
$this->core_form_meta_all = apply_filters('um_core_form_meta_all', $this->core_form_meta_all );
@@ -176,6 +178,7 @@ class UM_Setup {
$this->perms = array(
'core' => 'admin',
'can_access_wpadmin' => 1,
'can_not_see_adminbar' => 0,
'can_edit_everyone' => 1,
'can_delete_everyone' => 1,
'can_edit_profile' => 1,
@@ -194,6 +197,7 @@ class UM_Setup {
$this->nonadmin_perms = array(
'core' => 'member',
'can_access_wpadmin' => 0,
'can_not_see_adminbar' => 1,
'can_edit_everyone' => 0,
'can_delete_everyone' => 0,
'can_make_private_profile' => 0,
+30 -6
View File
@@ -391,9 +391,10 @@
function um_edit_my_profile_uri() {
global $ultimatemember;
$url = $ultimatemember->permalinks->get_current_url( get_option('permalink_structure') );
$url = remove_query_arg( 'profiletab', $url );
$url = remove_query_arg( 'subnav', $url );
$url = add_query_arg( 'um_action', 'edit', $url );
$url = remove_query_arg('profiletab', $url);
$url = remove_query_arg('subnav', $url);
$url = add_query_arg('profiletab', 'main', $url);
$url = add_query_arg('um_action', 'edit', $url);
return $url;
}
@@ -710,6 +711,17 @@
return $uri;
}
/***
*** @default cover
***/
function um_get_default_cover_uri() {
$uri = um_get_option('default_cover');
$uri = $uri['url'];
if ( $uri )
return $uri;
return '';
}
/***
*** @get user data
***/
@@ -846,15 +858,27 @@
$avatar_uri = um_get_default_avatar_uri();
}
return '<img src="' . $avatar_uri . '" class="gravatar avatar avatar-'.$attrs.' um-avatar" width="'.$attrs.'" height="'.$attrs.'" alt="" />';
if ( $avatar_uri )
return '<img src="' . $avatar_uri . '" class="gravatar avatar avatar-'.$attrs.' um-avatar" width="'.$attrs.'" height="'.$attrs.'" alt="" />';
if ( !$avatar_uri )
return '';
break;
case 'cover_photo':
if ( um_profile('cover_photo') ) {
$cover_uri = um_get_cover_uri( um_profile('cover_photo'), $attrs );
return '<img src="'. $cover_uri .'" alt="" />';
} else {
$cover_uri = um_get_default_cover_uri();
}
if ( $cover_uri )
return '<img src="'. $cover_uri .'" alt="" />';
if ( !$cover_uri )
return '';
break;
}
+14 -11
View File
@@ -219,22 +219,25 @@ class UM_Shortcodes {
$pattern_array = apply_filters('um_allowed_user_tags_patterns', $pattern_array);
$matches = false;
foreach ( $pattern_array as $pattern )
{
if (preg_match($pattern, $str))
{
foreach ( $pattern_array as $pattern ) {
if (preg_match($pattern, $str)) {
$usermeta = str_replace('{','',$pattern);
$usermeta = str_replace('}','',$usermeta);
if ( um_user( $usermeta ) ){
$str = preg_replace('/'.$pattern.'/', um_user($usermeta) , $str );
}
}
}
if ( get_option('permalink_structure') ) {
$str = str_replace( untrailingslashit( um_get_core_page('user') ), untrailingslashit( um_user_profile_url() ), $str );
} else {
$str = str_replace( um_get_core_page('user'), um_user_profile_url(), $str );
if ( get_option('permalink_structure') ) {
$str = str_replace( untrailingslashit( um_get_core_page('user') ), untrailingslashit( um_user_profile_url() ), $str );
} else {
$str = str_replace( um_get_core_page('user'), um_user_profile_url(), $str );
}
}
}
return $str;
+125
View File
@@ -0,0 +1,125 @@
<?php
class UM_User_posts {
function __construct() {
add_filter('um_profile_tabs', array(&$this, 'add_tab'), 100);
add_action('um_profile_content_posts', array(&$this, 'add_posts') );
add_action('um_profile_content_comments', array(&$this, 'add_comments') );
add_action('um_ajax_load_posts__um_load_posts', array(&$this, 'load_posts') );
add_action('um_ajax_load_posts__um_load_comments', array(&$this, 'load_comments') );
}
/***
*** @dynamic load of posts
***/
function load_posts( $args ) {
global $ultimatemember;
$array = explode(',', $args );
$post_type = $array[0];
$posts_per_page = $array[1];
$offset = $array[2];
$author = $array[3];
$offset_n = $posts_per_page + $offset;
$modified_args = "$post_type,$posts_per_page,$offset_n,$author";
$loop = $ultimatemember->query->make("post_type=$post_type&posts_per_page=$posts_per_page&offset=$offset&author=$author");
include_once um_path . 'templates/profile/posts-single.php';
}
/***
*** @dynamic load of comments
***/
function load_comments( $args ) {
global $ultimatemember;
$array = explode(',', $args );
$post_type = $array[0];
$posts_per_page = $array[1];
$offset = $array[2];
$author = $array[3];
$offset_n = $posts_per_page + $offset;
$modified_args = "$post_type,$posts_per_page,$offset_n,$author";
$loop = $ultimatemember->query->make("post_type=$post_type&number=$posts_per_page&offset=$offset&author_email=$author");
include_once um_path . 'templates/profile/comments-single.php';
}
/***
*** @adds a tab
***/
function add_tab( $tabs ){
$tabs['posts'] = array(
'name' => __('Posts','ultimatemember'),
'icon' => 'um-faicon-pencil',
'count' => $this->count_user_posts_by_type(),
);
$tabs['comments'] = array(
'name' => __('Comments','ultimatemember'),
'icon' => 'um-faicon-comment',
'count' => $this->count_user_comments(),
);
return $tabs;
}
/***
*** @add posts
***/
function add_posts() {
global $ultimatemember;
include_once um_path . 'templates/profile/posts.php';
}
/***
*** @add comments
***/
function add_comments() {
global $ultimatemember;
include_once um_path . 'templates/profile/comments.php';
}
/***
*** @count posts
***/
function count_user_posts_by_type( $user_id= '', $post_type = 'post' ) {
global $wpdb;
if ( !$user_id )
$user_id = um_user('ID');
$where = get_posts_by_author_sql( $post_type, true, $user_id );
$count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts $where" );
return apply_filters('um_pretty_number_formatting', $count);
}
/***
*** @count comments
***/
function count_user_comments( $user_id = null ) {
global $wpdb;
if ( !$user_id )
$user_id = um_user('ID');
$count = $wpdb->get_var('
SELECT COUNT(comment_ID)
FROM ' . $wpdb->comments. '
WHERE user_id = "' . $user_id . '"');
return apply_filters('um_pretty_number_formatting', $count);
}
}
+1 -1
View File
@@ -3,7 +3,7 @@
Plugin Name: Ultimate Member
Plugin URI: http://ultimatemember.com/
Description: Ultimate Member is a powerful community and membership plugin that allows you to create beautiful community and membership sites with WordPress
Version: 1.0.30
Version: 1.0.35
Author: Ultimate Member
Author URI: http://ultimatemember.com/
*/
+170 -66
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Ultimate Member\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-01-29 15:23+0200\n"
"PO-Revision-Date: 2015-01-29 15:23+0200\n"
"POT-Creation-Date: 2015-01-30 22:04+0200\n"
"PO-Revision-Date: 2015-01-30 22:04+0200\n"
"Last-Translator: Calum Allison <umplugin@gmail.com>\n"
"Language-Team: Ultimate Member <umplugin@gmail.com>\n"
"Language: en_US\n"
@@ -579,7 +579,7 @@ msgid ""
msgstr ""
#: admin/core/lib/ReduxFramework/ReduxCore/inc/tracking.php:135 admin/core/um-admin-tracking.php:153
#: um-config.php:1520
#: um-config.php:1575
msgid "Allow tracking"
msgstr ""
@@ -1543,7 +1543,7 @@ msgstr ""
#: admin/core/lib/ReduxFramework/sample/sample-config.php:796 admin/core/um-admin-metabox.php:281
#: admin/core/um-admin-metabox.php:287 admin/core/um-admin-metabox.php:293
#: admin/templates/form/login_css.php:4 admin/templates/form/profile_css.php:4
#: admin/templates/form/register_css.php:4 um-config.php:1472 um-config.php:1478
#: admin/templates/form/register_css.php:4 um-config.php:1527 um-config.php:1533
msgid "Custom CSS"
msgstr ""
@@ -2573,7 +2573,7 @@ msgstr ""
msgid "Customize the search result text . e.g. Found 3,000 Members. Leave this blank to not show result text"
msgstr ""
#: admin/templates/directory/search.php:79 core/um-setup.php:47
#: admin/templates/directory/search.php:79 core/um-setup.php:47 core/um-setup.php:150
msgid "{total_users} Members"
msgstr ""
@@ -2585,7 +2585,7 @@ msgstr ""
msgid "Same as above but in case of 1 user found only"
msgstr ""
#: admin/templates/directory/search.php:88 core/um-setup.php:48
#: admin/templates/directory/search.php:88 core/um-setup.php:48 core/um-setup.php:151
msgid "{total_users} Member"
msgstr ""
@@ -2693,7 +2693,7 @@ msgstr ""
msgid "<strong>Note:</strong> Form type cannot be changed for the default forms."
msgstr ""
#: admin/templates/form/mode.php:9 um-config.php:1292
#: admin/templates/form/mode.php:9 um-config.php:1347
msgid "Registration Form"
msgstr ""
@@ -2701,7 +2701,7 @@ msgstr ""
msgid "Profile Form"
msgstr ""
#: admin/templates/form/mode.php:13 um-config.php:1383
#: admin/templates/form/mode.php:13 um-config.php:1438
msgid "Login Form"
msgstr ""
@@ -2789,7 +2789,7 @@ msgstr ""
msgid "Assign role to form"
msgstr ""
#: admin/templates/form/register_customize.php:42 um-config.php:1052 um-config.php:1318 um-config.php:1409
#: admin/templates/form/register_customize.php:42 um-config.php:1052 um-config.php:1373 um-config.php:1464
msgid "The shortcode is centered by default unless you specify otherwise here"
msgstr ""
@@ -2883,7 +2883,7 @@ msgstr ""
msgid "Choose from %s available icons"
msgstr ""
#: admin/templates/role/admin.php:7 admin/templates/role/admin.php:12
#: admin/templates/role/admin.php:7 admin/templates/role/admin.php:16
msgid "Can access wp-admin?"
msgstr ""
@@ -2891,41 +2891,49 @@ msgstr ""
msgid "The core admin role must always have access to wp-admin / WordPress backend"
msgstr ""
#: admin/templates/role/admin.php:12
#: admin/templates/role/admin.php:11 admin/templates/role/admin.php:20
msgid "Force hiding adminbar in frontend?"
msgstr ""
#: admin/templates/role/admin.php:11 admin/templates/role/admin.php:20
msgid "Show/hide the adminbar on frontend"
msgstr ""
#: admin/templates/role/admin.php:16
msgid ""
"Allow this role to access the admin dashboard. If turned on the WordPress toolbar will appear at top of the "
"page."
msgstr ""
#: admin/templates/role/admin.php:18
#: admin/templates/role/admin.php:26
msgid "Can edit other member accounts?"
msgstr ""
#: admin/templates/role/admin.php:18
#: admin/templates/role/admin.php:26
msgid "Allow this role to edit accounts of other members"
msgstr ""
#: admin/templates/role/admin.php:23
#: admin/templates/role/admin.php:31
msgid "Can edit these user roles only"
msgstr ""
#: admin/templates/role/admin.php:23
#: admin/templates/role/admin.php:31
msgid "Which roles that role can edit, choose none to allow role to edit all member roles"
msgstr ""
#: admin/templates/role/admin.php:36
#: admin/templates/role/admin.php:44
msgid "Can delete other member accounts?"
msgstr ""
#: admin/templates/role/admin.php:36
#: admin/templates/role/admin.php:44
msgid "Allow this role to edit the profile fields of certain roles only"
msgstr ""
#: admin/templates/role/admin.php:41
#: admin/templates/role/admin.php:49
msgid "Can delete these user roles only"
msgstr ""
#: admin/templates/role/admin.php:41
#: admin/templates/role/admin.php:49
msgid "Which roles that role can delete, choose none to allow role to delete all member roles"
msgstr ""
@@ -3346,7 +3354,7 @@ msgstr ""
msgid "%s of %d"
msgstr ""
#: core/um-actions-misc.php:58 core/um-actions-misc.php:81
#: core/um-actions-misc.php:58 core/um-actions-misc.php:85
msgid "Registration is currently disabled"
msgstr ""
@@ -3354,31 +3362,35 @@ msgstr ""
msgid "You have successfully changed your password."
msgstr ""
#: core/um-actions-misc.php:77
#: core/um-actions-misc.php:69
msgid "Your account is now active! You can login."
msgstr ""
#: core/um-actions-misc.php:81
msgid "An error has been encountered"
msgstr ""
#: core/um-actions-misc.php:85 core/um-filters-login.php:33
#: core/um-actions-misc.php:89 core/um-filters-login.php:33
msgid "This email address has been blocked."
msgstr ""
#: core/um-actions-misc.php:89 core/um-filters-login.php:36
#: core/um-actions-misc.php:93 core/um-filters-login.php:36
msgid "Your IP address has been blocked."
msgstr ""
#: core/um-actions-misc.php:93 core/um-filters-login.php:78
#: core/um-actions-misc.php:97 core/um-filters-login.php:78
msgid "Your account has been disabled."
msgstr ""
#: core/um-actions-misc.php:97 core/um-filters-login.php:81
#: core/um-actions-misc.php:101 core/um-filters-login.php:81
msgid "Your account has not been approved yet."
msgstr ""
#: core/um-actions-misc.php:101 core/um-filters-login.php:84
#: core/um-actions-misc.php:105 core/um-filters-login.php:84
msgid "Your account is awaiting e-mail verifications."
msgstr ""
#: core/um-actions-misc.php:105 core/um-filters-login.php:87
#: core/um-actions-misc.php:109 core/um-filters-login.php:87
msgid "Your membership request has been rejected."
msgstr ""
@@ -3815,6 +3827,14 @@ msgstr ""
msgid "Search Member Directories"
msgstr ""
#: core/um-user-posts.php:65
msgid "Posts"
msgstr ""
#: core/um-user-posts.php:71
msgid "Comments"
msgstr ""
#: index.php:57
msgid "Docs"
msgstr ""
@@ -3827,6 +3847,53 @@ msgstr ""
msgid "Uninstall"
msgstr ""
#: templates/profile/comments-single.php:6
#, php-format
msgid "On <a href=\"%1$s\">%2$s</a>"
msgstr ""
#: templates/profile/comments-single.php:15 templates/profile/comments.php:14
msgid "load more comments"
msgstr ""
#: templates/profile/comments.php:23
msgid "You have not made any comments."
msgstr ""
#: templates/profile/comments.php:23
msgid "This user has not made any comments."
msgstr ""
#: templates/profile/posts-single.php:6
#, php-format
msgid "%s ago"
msgstr ""
#: templates/profile/posts-single.php:8
msgid "no comments"
msgstr ""
#: templates/profile/posts-single.php:8
msgid "1 comment"
msgstr ""
#: templates/profile/posts-single.php:8
#, php-format
msgid "% comments"
msgstr ""
#: templates/profile/posts-single.php:17 templates/profile/posts.php:14
msgid "load more posts"
msgstr ""
#: templates/profile/posts.php:23
msgid "You have not created any posts."
msgstr ""
#: templates/profile/posts.php:23
msgid "This user has not created any posts."
msgstr ""
#: um-config.php:13
msgid "Users"
msgstr ""
@@ -4269,15 +4336,15 @@ msgstr ""
msgid "Profile Shortcode Alignment"
msgstr ""
#: um-config.php:1055 um-config.php:1321 um-config.php:1412
#: um-config.php:1055 um-config.php:1376 um-config.php:1467
msgid "Centered"
msgstr ""
#: um-config.php:1056 um-config.php:1322 um-config.php:1413
#: um-config.php:1056 um-config.php:1377 um-config.php:1468
msgid "Left aligned"
msgstr ""
#: um-config.php:1057 um-config.php:1323 um-config.php:1414
#: um-config.php:1057 um-config.php:1378 um-config.php:1469
msgid "Right aligned"
msgstr ""
@@ -4289,15 +4356,15 @@ msgstr ""
msgid "This is applicable for edit mode only"
msgstr ""
#: um-config.php:1069 um-config.php:1335 um-config.php:1426
#: um-config.php:1069 um-config.php:1390 um-config.php:1481
msgid "Show inside text field"
msgstr ""
#: um-config.php:1070 um-config.php:1336 um-config.php:1427
#: um-config.php:1070 um-config.php:1391 um-config.php:1482
msgid "Show with label"
msgstr ""
#: um-config.php:1071 um-config.php:1337 um-config.php:1428
#: um-config.php:1071 um-config.php:1392 um-config.php:1483
msgid "Turn off"
msgstr ""
@@ -4401,125 +4468,162 @@ msgstr ""
msgid "Show the emoticon"
msgstr ""
#: um-config.php:1299
msgid "Registration Default Template"
#: um-config.php:1293
msgid "Enable profile menu"
msgstr ""
#: um-config.php:1300
msgid "This will be the default template to output registration"
#: um-config.php:1301
#, php-format
msgid "%s Tab"
msgstr ""
#: um-config.php:1308
msgid "Registration Maximum Width"
#: um-config.php:1303
msgid "Enabled"
msgstr ""
#: um-config.php:1317
msgid "Registration Shortcode Alignment"
#: um-config.php:1304
msgid "Disabled"
msgstr ""
#: um-config.php:1313
msgid "Profile menu default tab"
msgstr ""
#: um-config.php:1314
msgid "This will be the default tab on user profile page"
msgstr ""
#: um-config.php:1323
msgid "Enable menu icons in desktop view"
msgstr ""
#: um-config.php:1331
msgid "Enable counts in menu"
msgstr ""
#: um-config.php:1339
msgid "Profile Menu"
msgstr ""
#: um-config.php:1354
msgid "Registration Default Template"
msgstr ""
#: um-config.php:1355
msgid "This will be the default template to output registration"
msgstr ""
#: um-config.php:1363
msgid "Registration Maximum Width"
msgstr ""
#: um-config.php:1372
msgid "Registration Shortcode Alignment"
msgstr ""
#: um-config.php:1386
msgid "Registration Field Icons"
msgstr ""
#: um-config.php:1332
#: um-config.php:1387
msgid "This controls the display of field icons in the registration form"
msgstr ""
#: um-config.php:1344
#: um-config.php:1399
msgid "Registration Primary Button Text"
msgstr ""
#: um-config.php:1352
#: um-config.php:1407
msgid "Registration Secondary Button"
msgstr ""
#: um-config.php:1360
#: um-config.php:1415
msgid "Registration Secondary Button Text"
msgstr ""
#: um-config.php:1370
#: um-config.php:1425
msgid "Registration Default Role"
msgstr ""
#: um-config.php:1371
#: um-config.php:1426
msgid "This will be the default role assigned to users registering thru registration form"
msgstr ""
#: um-config.php:1390
#: um-config.php:1445
msgid "Login Default Template"
msgstr ""
#: um-config.php:1391
#: um-config.php:1446
msgid "This will be the default template to output login"
msgstr ""
#: um-config.php:1399
#: um-config.php:1454
msgid "Login Maximum Width"
msgstr ""
#: um-config.php:1408
#: um-config.php:1463
msgid "Login Shortcode Alignment"
msgstr ""
#: um-config.php:1422
#: um-config.php:1477
msgid "Login Field Icons"
msgstr ""
#: um-config.php:1423
#: um-config.php:1478
msgid "This controls the display of field icons in the login form"
msgstr ""
#: um-config.php:1435
#: um-config.php:1490
msgid "Login Primary Button Text"
msgstr ""
#: um-config.php:1443
#: um-config.php:1498
msgid "Login Secondary Button"
msgstr ""
#: um-config.php:1451
#: um-config.php:1506
msgid "Login Secondary Button Text"
msgstr ""
#: um-config.php:1460
#: um-config.php:1515
msgid "Login Forgot Password Link"
msgstr ""
#: um-config.php:1479
#: um-config.php:1534
msgid "Any custom css rules that you specify here will be applied globally to the plugin."
msgstr ""
#: um-config.php:1494
#: um-config.php:1549
msgid "Advanced"
msgstr ""
#: um-config.php:1500
#: um-config.php:1555
msgid "Disable JS/CSS Compression"
msgstr ""
#: um-config.php:1502
#: um-config.php:1557
msgid ""
"Not recommended. This will load all plugin js and css files separately and may slow down your website. Use "
"this setting for development or debugging purposes only."
msgstr ""
#: um-config.php:1509
#: um-config.php:1564
msgid "Never load plugin JS and CSS on the following pages"
msgstr ""
#: um-config.php:1510
#: um-config.php:1565
msgid "Enter a url or page slug (e.g /about/) to disable loading the plugin's css and js on that page."
msgstr ""
#: um-config.php:1511
#: um-config.php:1566
msgid "Add New Page"
msgstr ""
#: um-config.php:1517
#: um-config.php:1572
msgid "Allow Tracking"
msgstr ""
#: um-config.php:1521
#: um-config.php:1576
msgid "Do not allow"
msgstr ""
+67 -18
View File
@@ -3,11 +3,11 @@ Author URI: https://ultimatemember.com/
Plugin URI: https://ultimatemember.com/
Contributors: ultimatemember
Donate link:
Tags: access control, community, communities, conditional fields, conditional logic, conditional menus, content protection, custom fields, file uploads, form builder, front-end login, front-end registration, hide wp-admin, login, login page, logged-in users, mandrill, member, members, membership, member directory, profile, profiles, profile builder, registration, restrict content, role creation, role menus, search filters, sign in, sign up, social network, star ratings, toolbar, user, users, user fields, user profiles, user roles
Tags: access control, author, authors, author profile, comments, community, communities, conditional fields, conditional logic, conditional menus, content protection, custom fields, file uploads, form builder, front-end login, front-end registration, hide wp-admin, login, login page, logged-in users, mandrill, member, members, membership, member directory, profile, profiles, profile builder, registration, restriction, restrict content, role creation, role menus, search filters, sign in, sign up, social network, star ratings, toolbar, user, users, user fields, user profiles, user roles
Requires at least: 4.1
Tested up to: 4.1
Stable Tag: 1.0.30
Stable Tag: 1.0.35
License: GNU Version 2 or Any Later Version
@@ -35,6 +35,7 @@ Features of the plugin include:
* Custom e-mail templates
* Content restriction
* Conditional menus
* Show author posts & comments on user profiles
* Mobile adaptive & responsive
* SEO optimized
* Developer friendly with dozens of actions and filters
@@ -89,6 +90,10 @@ With Ultimate Member you can restrict content on a global or per page/post basis
The plugin provides a range of customizable text only email templates which are triggered depending on certain events (e.g welcome email, account activation, account deleted etc). Each email type can be turned on/off. The plugin also offers a range of optional admin notification emails so you can find out when a new user registers or if new user needs reviewed.
**Show author posts & comments on user profiles**
The plugin provides a fully flexible menu and tab system on user profiles that allows you to optionally display a users posts and comments on their profile. With this feature you can put the focus on a users posts by making author posts the default tab when viewing a user profile.
**Mobile adaptive & responsive**
Ultimate Member has been built with a focus on mobile and is fully mobile adaptive and responsive. The plugin has completely separate designs for mobiles, tablets and larger screens which means the plugin will look and function great on all devices.
@@ -151,25 +156,69 @@ The plugin works with popular caching plugins by automatically excluding Ultimat
== Screenshots ==
1. Front-end User Profile (Edit mode)
2. Photo / File Upload Modal
3. Image Crop Feature
4. Account Page
5. Photo Modal
6. User Profile (Cover photo turned off)
7. Searchable Member Directory
8. Plugin Dashboard
9. Plugin Settings Panel
10. Forms
11. Custom Field Manager
12. Adding a New Field
13. User Roles
14. Adding a New Role
15. Adding a New Directory
16. Appearance and Customization Settings
1. Screenshot 1
2. Screenshot 2
3. Screenshot 3
4. Screenshot 4
5. Screenshot 5
6. Screenshot 6
7. Screenshot 7
8. Screenshot 8
9. Screenshot 9
10. Screenshot 10
11. Screenshot 11
12. Screenshot 12
13. Screenshot 13
14. Screenshot 14
15. Screenshot 15
16. Screenshot 16
== Changelog ==
= 1.0.35: January 31, 2015 =
* Tweak: exif module is not required anymore and does not stop photo uploads (exif is highly recommended)
* Fixed: issue with changing a WP administrator role to a community administrator role
* Fixed: issue with plugin uploads directory on some multisite installations
* Fixed: conflict with default profile tab and editing profile
* Fixed: minor css conflict on account page with some themes when viewed on tablets
= 1.0.34: January 31, 2015 =
* New: added option to set a default cover photo
* New: added option to hide restricted content from search and archive
* Fixed: php error in title tab with ElegantThemes
* Fixed: theme conflict with photo/cover upload
* Fixed: issue with country field showing country code in profile
* Fixed: issue with setting default tab
* Fixed: issue with 2-name user roles
= 1.0.33: January 30, 2015 =
* New: Introducing profile menu / tab system (optional)
* New: display user posts and comments in profile menu (optional)
* New: added option to force hide adminbar on the frontend even for administrators
* Tweak: added profile menu options to plugin settings panel
* Tweak: added option to enable/disable profile menu and/or profile menu tabs
* Tweak: added option to show or hide post and comment counts (when the tabs are active)
* Tweak: account activation via e-mail redirects user to login page and displays a success message
* Fixed: issue with conditional logic on profile fields has been resolved
* Fixed: bug with searching members by gender
* Fixed: admin nav menus conditional logic conflict with some themes
* Fixed: bug with datepicker field on windows servers
= 1.0.32: January 30, 2015 =
* New: added 3 new tags to use in email templates {first_name}, {last_name}, and {gender}
* Fixed: Issue with account page permalink resolved - [view issue](https://ultimatemember.com/forums/topic/permalink-bug/)
* Fixed: Issue with conditional menu items showing for un-approved users resolved - [view issue](https://ultimatemember.com/forums/topic/registration/)
= 1.0.31: January 29, 2015 =
* Fixed: Issue with custom user page slug resolved [view issue](https://wordpress.org/support/topic/translate-plugin-9)
* Fixed: PHP warning in members directory resolved
* Fixed: Issue with hardcoded user profile URLs in menu
= 1.0.30: January 29, 2015 =
* New: added option to control number of profiles to display in members directory for mobile devices
+18
View File
@@ -0,0 +1,18 @@
<?php foreach( $loop as $comment ) { ?>
<div class="um-item">
<div class="um-item-link"><a href="<?php echo get_comment_link( $comment->comment_ID ); ?>"><?php echo get_comment_excerpt( $comment->comment_ID ); ?></a></div>
<div class="um-item-meta">
<span><?php printf(__('On <a href="%1$s">%2$s</a>','ultimatemember'), get_permalink($comment->comment_post_ID), get_the_title($comment->comment_post_ID) ); ?></span>
</div>
</div>
<?php } ?>
<?php if ( isset($modified_args) && count($loop) >= 10 ) { ?>
<div class="um-load-items">
<a href="#" class="um-ajax-paginate um-button" data-hook="um_load_comments" data-args="<?php echo $modified_args; ?>"><?php _e('load more comments','um-bbpress'); ?></a>
</div>
<?php } ?>
+25
View File
@@ -0,0 +1,25 @@
<?php $loop = $ultimatemember->query->make('post_type=comment&number=10&offset=0&author_email=' . um_user('user_email') ); ?>
<?php if ( $loop ) { ?>
<?php include_once um_path . 'templates/profile/comments-single.php'; ?>
<div class="um-ajax-items">
<!--Ajax output-->
<?php if ( count($loop) >= 10 ) { ?>
<div class="um-load-items">
<a href="#" class="um-ajax-paginate um-button" data-hook="um_load_comments" data-args="comment,10,10,<?php echo um_user('user_email'); ?>"><?php _e('load more comments','um-bbpress'); ?></a>
</div>
<?php } ?>
</div>
<?php } else { ?>
<?php ( um_is_myprofile() ) ? _e('You have not made any comments.') : _e('This user has not made any comments.'); ?>
<?php } ?>
+20
View File
@@ -0,0 +1,20 @@
<?php while ($loop->have_posts()) { $loop->the_post(); $post_id = get_the_ID(); ?>
<div class="um-item">
<div class="um-item-link"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></div>
<div class="um-item-meta">
<span><?php echo sprintf(__('%s ago','ultimatemember'), human_time_diff( get_the_time('U'), current_time('timestamp') ) ); ?></span>
<span>in: <?php the_category( ', ' ); ?></span>
<span><?php comments_number( __('no comments','ultimatemember'), __('1 comment','ultimatemember'), __('% comments','ultimatemember') ); ?></span>
</div>
</div>
<?php } ?>
<?php if ( isset($modified_args) && $loop->have_posts() && $loop->found_posts >= 10 ) { ?>
<div class="um-load-items">
<a href="#" class="um-ajax-paginate um-button" data-hook="um_load_posts" data-args="<?php echo $modified_args; ?>"><?php _e('load more posts','um-bbpress'); ?></a>
</div>
<?php } ?>
+25
View File
@@ -0,0 +1,25 @@
<?php $loop = $ultimatemember->query->make('post_type=post&posts_per_page=10&offset=0&author=' . um_user('ID') ); ?>
<?php if ( $loop->have_posts()) { ?>
<?php include_once um_path . 'templates/profile/posts-single.php'; ?>
<div class="um-ajax-items">
<!--Ajax output-->
<?php if ( $loop->found_posts >= 10 ) { ?>
<div class="um-load-items">
<a href="#" class="um-ajax-paginate um-button" data-hook="um_load_posts" data-args="post,10,10,<?php echo um_user('ID'); ?>"><?php _e('load more posts','um-bbpress'); ?></a>
</div>
<?php } ?>
</div>
<?php } else { ?>
<?php ( um_is_myprofile() ) ? _e('You have not created any posts.') : _e('This user has not created any posts.'); ?>
<?php } ?>
+100 -8
View File
@@ -167,6 +167,15 @@ $this->sections[] = array(
'title' => __( 'Access'),
'fields' => array(
array(
'id' => 'panic_key',
'type' => 'text',
'title' => __( 'Panic Key' ),
'desc' => 'Panic Key is a random generated key that allow you to access the WordPress backend always regardless of backend settings.',
'default' => $ultimatemember->validation->randomize(),
'desc' => trailingslashit( get_bloginfo('url') ).'wp-admin/?um_panic_key=<strong>your_panic_key</strong>'
),
array(
'id' => 'accessible',
'type' => 'select',
@@ -199,12 +208,33 @@ $this->sections[] = array(
),
array(
'id' => 'panic_key',
'type' => 'text',
'title' => __( 'Panic Key' ),
'desc' => 'Panic Key is a random generated key that allow you to access the WordPress backend always regardless of backend settings.',
'default' => $ultimatemember->validation->randomize(),
'desc' => trailingslashit( get_bloginfo('url') ).'wp-admin/?um_panic_key=<strong>YOUR_PANIC_KEY_VALUE</strong>'
'id' => 'exclude_from_main_loop',
'type' => 'switch',
'title' => __( 'Exclude restricted pages from main loop' ),
'default' => 1,
'desc' => 'Whether to exclude restricted pages from main loop',
'on' => __('Yes','ultimatemember'),
'off' => __('No','ultimatemember'),
),
array(
'id' => 'exclude_from_search_loop',
'type' => 'switch',
'title' => __( 'Exclude restricted pages from search loop' ),
'default' => 1,
'desc' => 'Whether to exclude restricted pages from search results',
'on' => __('Yes','ultimatemember'),
'off' => __('No','ultimatemember'),
),
array(
'id' => 'exclude_from_archive_loop',
'type' => 'switch',
'title' => __( 'Exclude restricted pages from archive loop' ),
'default' => 1,
'desc' => 'Whether to exclude restricted pages from archives',
'on' => __('Yes','ultimatemember'),
'off' => __('No','ultimatemember'),
),
array(
@@ -1128,8 +1158,6 @@ $this->sections[] = array(
array(
'id' => 'default_avatar',
'type' => 'media',
'width' => '150',
'height' => '150',
'title' => __('Default Profile Photo', 'ultimatemember'),
'desc' => __('You can change the default profile picture globally here. Please make sure that the photo is 300x300px.', 'ultimatemember'),
'default' => array(
@@ -1137,6 +1165,15 @@ $this->sections[] = array(
),
),
array(
'id' => 'default_cover',
'type' => 'media',
'url' => true,
'preview' => false,
'title' => __('Default Cover Photo', 'ultimatemember'),
'desc' => __('You can change the default cover photo globally here. Please make sure that the default cover is large enough and respects the ratio you are using for cover photos.', 'ultimatemember'),
),
array(
'id' => 'profile_photosize',
'type' => 'text',
@@ -1286,6 +1323,61 @@ $this->sections[] = array(
);
$tabs = $ultimatemember->profile->tabs_primary();
$tab_options[] = array(
'id' => 'profile_menu',
'type' => 'switch',
'title' => __('Enable profile menu'),
'default' => 1,
);
foreach( $tabs as $id => $tab ) {
$tab_options[] = array(
'id' => 'profile_tab_' . $id,
'type' => 'switch',
'title' => sprintf(__('%s Tab','ultimatemember'), $tab ),
'default' => 1,
'on' => __('Enabled'),
'off' => __('Disabled'),
'required' => array( 'profile_menu', '=', 1 ),
);
}
$tab_options[] = array(
'id' => 'profile_menu_default_tab',
'type' => 'select',
'select2' => array( 'allowClear' => 0, 'minimumResultsForSearch' => -1 ),
'title' => __( 'Profile menu default tab' ),
'desc' => __( 'This will be the default tab on user profile page' ),
'default' => 'main',
'options' => $ultimatemember->profile->tabs_primary(),
'required' => array( 'profile_menu', '=', 1 ),
);
$tab_options[] = array(
'id' => 'profile_menu_icons',
'type' => 'switch',
'title' => __('Enable menu icons in desktop view'),
'default' => 1,
'required' => array( 'profile_menu', '=', 1 ),
);
$tab_options[] = array(
'id' => 'profile_menu_counts',
'type' => 'switch',
'title' => __('Enable counts in menu'),
'default' => 1,
'required' => array( 'profile_menu', '=', 1 ),
);
$this->sections[] = array(
'subsection' => true,
'title' => __( 'Profile Menu'),
'fields' => $tab_options
);
$this->sections[] = array(
'subsection' => true,
+4
View File
@@ -36,6 +36,7 @@ class UM_API {
require_once um_path . 'core/um-fields.php';
require_once um_path . 'core/um-form.php';
require_once um_path . 'core/um-user.php';
require_once um_path . 'core/um-user-posts.php';
require_once um_path . 'core/um-profile.php';
require_once um_path . 'core/um-query.php';
require_once um_path . 'core/um-datetime.php';
@@ -74,6 +75,7 @@ class UM_API {
require_once um_path . 'core/um-actions-save-profile.php';
require_once um_path . 'core/um-actions-modal.php';
require_once um_path . 'core/um-actions-misc.php';
require_once um_path . 'core/um-actions-posts.php';
require_once um_path . 'core/um-filters-login.php';
require_once um_path . 'core/um-filters-register.php';
@@ -86,6 +88,7 @@ class UM_API {
require_once um_path . 'core/um-filters-members.php';
require_once um_path . 'core/um-filters-profile.php';
require_once um_path . 'core/um-filters-account.php';
require_once um_path . 'core/um-filters-misc.php';
/* initialize UM */
$this->rewrite = new UM_Rewrite();
@@ -100,6 +103,7 @@ class UM_API {
$this->register = new UM_Register();
$this->fields = new UM_Fields();
$this->user = new UM_User();
$this->user_posts = new UM_User_Posts();
$this->profile = new UM_Profile();
$this->datetime = new UM_DateTime();
$this->chart = new UM_Chart();