Update 1.2.98

This commit is contained in:
ultimatemember
2015-05-18 14:12:50 +03:00
parent 722367a11c
commit 1c4ca1802c
28 changed files with 485 additions and 51 deletions
+11
View File
@@ -135,6 +135,17 @@
color: #888;
}
@media screen and (max-width:1124px){
.redux-sidebar .redux-group-tab-link-a i {
position: relative;
top: auto;
}
.redux-sidebar .redux-group-menu li a {
text-align: center;
padding: 6px !important;
}
}
.redux-sidebar .redux-menu-warning i, .redux-sidebar .redux-menu-error i, .redux-sidebar .hasSubSections .extraIconSubsections i {
top: 11px;
}
+1
View File
@@ -327,6 +327,7 @@ class UM_Admin_Users {
if ( $this->custom_role == $column_name ) {
delete_option( "um_cache_userdata_{$user_id}" );
um_fetch_user( $user_id );
return um_user('role_name');
+8 -1
View File
@@ -1,10 +1,17 @@
<?php
$premium['private-messages'] = array(
'url' => 'https://ultimatemember.com/extensions/private-messages/',
'image' => 'https://ultimatemember.com/wp-content/uploads/2015/05/privatemessages-01-copy.png',
'name' => 'Private Messages',
'desc' => 'Add a private messaging system to your site and allow users to privately message each other. Perfect for websites where users needly to interact one on one.',
);
$premium['followers'] = array(
'url' => 'https://ultimatemember.com/extensions/followers/',
'image' => 'https://ultimatemember.com/wp-content/uploads/2015/04/followers-01-copy.png',
'name' => 'Followers',
'desc' => ' With the followers extension you can increase user interaction on your site by allowing users to follow each other.',
'desc' => 'With the followers extension you can increase user interaction on your site by allowing users to follow each other.',
);
$premium['profile-completeness'] = array(
+24 -2
View File
@@ -20,7 +20,7 @@
.um-misc-img img {
border-radius: 999px;
height: auto !important;
display: inline-block;
display: inline-block !important;
}
.um-misc-ul,
@@ -28,8 +28,30 @@
font-size: 14px;
}
/* profile misc */
/* responsive embeds */
.um-youtube,
.um-vimeo,
.um-googlemap {
position: relative;
height: 0;
overflow: hidden;
}
.um-youtube {padding-bottom: 56.25%;}
.um-vimeo {padding-bottom: 56.25%;}
.um-googlemap {padding-bottom: 75%;}
.um-youtube iframe,
.um-vimeo iframe,
.um-googlemap iframe {
position: absolute;
top: 0;
left: 0;
width: 100% !important;
height: 100% !important;
}
/* profile misc */
.um-profile-connect.um-member-connect {
padding: 5px 0 10px 0;
}
+1 -1
View File
@@ -382,7 +382,7 @@ font-weight: normal;
.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: 7px;left: 10px}
.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;
+2 -2
View File
File diff suppressed because one or more lines are too long
+12 -7
View File
@@ -763,6 +763,7 @@ function prepare_Modal() {
function remove_Modal() {
if ( jQuery('.um-popup-overlay').length ) {
jQuery('.tipsy').remove();
jQuery('.um-popup').empty().remove();
jQuery('.um-popup-overlay').empty().remove();
jQuery("body,html").css({ overflow: 'inherit' });
@@ -772,26 +773,30 @@ function remove_Modal() {
function show_Modal( contents ) {
if ( jQuery('.um-popup-overlay').length ) {
jQuery('.um-popup').removeClass('loading').html( contents );
jQuery('.um-tip-n').tipsy({gravity: 'n', opacity: 1, offset: 3, delayIn: 500 });
jQuery('.um-tip-w').tipsy({gravity: 'w', opacity: 1, offset: 3, delayIn: 500 });
jQuery('.um-tip-e').tipsy({gravity: 'e', opacity: 1, offset: 3, delayIn: 500 });
jQuery('.um-tip-s').tipsy({gravity: 's', opacity: 1, offset: 3, delayIn: 500 });
}
}
function responsive_Modal() {
if ( jQuery('.um-popup-overlay').length ) {
ag_height = jQuery(window).height() - jQuery('.um-popup-header').outerHeight() - jQuery('.um-popup-footer').outerHeight() - 40;
ag_height = jQuery(window).height() - jQuery('.um-popup um-popup-header').outerHeight() - jQuery('.um-popup .um-popup-footer').outerHeight() - 80;
if ( ag_height > 350 ) {
ag_height = 350;
}
if ( jQuery('.um-popup-autogrow').length ) {
if ( jQuery('.um-popup-autogrow:visible').length ) {
jQuery('.um-popup-autogrow').css({'height': ag_height + 'px'});
jQuery('.um-popup-autogrow').mCustomScrollbar({ theme:"dark-3", mouseWheelPixels:500 }).mCustomScrollbar("scrollTo", "bottom",{ scrollInertia:0} );
jQuery('.um-popup-autogrow:visible').css({'height': ag_height + 'px'});
jQuery('.um-popup-autogrow:visible').mCustomScrollbar({ theme:"dark-3", mouseWheelPixels:500 }).mCustomScrollbar("scrollTo", "bottom",{ scrollInertia:0} );
} else if ( jQuery('.um-popup-autogrow2').length ) {
} else if ( jQuery('.um-popup-autogrow2:visible').length ) {
jQuery('.um-popup-autogrow2').css({'max-height': ag_height + 'px'});
jQuery('.um-popup-autogrow2').mCustomScrollbar({ theme:"dark-3", mouseWheelPixels:500 });
jQuery('.um-popup-autogrow2:visible').css({'max-height': ag_height + 'px'});
jQuery('.um-popup-autogrow2:visible').mCustomScrollbar({ theme:"dark-3", mouseWheelPixels:500 });
}
}
+2 -2
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -72,7 +72,7 @@ class UM_Account {
global $ultimatemember;
if ( um_is_core_page('account') && !is_user_logged_in() ) {
um_redirect_home();
exit( wp_redirect( add_query_arg('redirect_to', urlencode( um_get_core_page('account') ) , um_get_core_page('login') ) ) );
}
if ( um_is_core_page('account') ) {
+2
View File
@@ -91,6 +91,8 @@
$output = $uri;
delete_option( "um_cache_userdata_{$user_id}" );
if(is_array($output)){ print_r($output); }else{ echo $output; } die;
}
+3 -1
View File
@@ -196,7 +196,9 @@
}
if ( isset( $array['html'] ) && $array['html'] == 0 ) {
$args[$key] = strip_tags( $args[$key] );
if ( wp_strip_all_tags( $args[$key] ) != $args[$key] ) {
$ultimatemember->form->add_error($key, __('You can not use HTML tags here','ultimatemember') );
}
}
if ( isset( $array['force_good_pass'] ) && $array['force_good_pass'] == 1 ) {
+6 -18
View File
@@ -55,24 +55,11 @@
}
}
$check = wp_authenticate_username_password( null, $user_name, $args['user_password'] );
if ( is_wp_error( $check ) ) {
$err = $check->get_error_code();
switch( $err ) {
default:
break;
case 'incorrect_password':
if ( username_exists( $user_name ) ) {
$ultimatemember->form->add_error( 'user_password', __('Password is incorrect. Please try again.','ultimatemember') );
}
break;
}
} else {
$user = get_user_by( 'login', $user_name );
if ( $user && wp_check_password( $args['user_password'], $user->data->user_pass, $user->ID) ) {
$ultimatemember->login->auth_id = username_exists( $user_name );
} else {
$ultimatemember->form->add_error( 'user_password', __('Password is incorrect. Please try again.','ultimatemember') );
}
}
@@ -106,8 +93,9 @@
}
if ( isset( $args['form_id'] ) && $args['form_id'] == $ultimatemember->shortcodes->core_login_form() && $ultimatemember->form->errors )
if ( isset( $args['form_id'] ) && $args['form_id'] == $ultimatemember->shortcodes->core_login_form() && $ultimatemember->form->errors && !isset( $_POST[ $ultimatemember->honeypot ] ) ) {
exit( wp_redirect( um_get_core_page('login') ) );
}
}
+2 -2
View File
@@ -92,7 +92,7 @@
}
if ( isset( $args['submitted']['description'] ) ) {
$to_update['description'] = $ultimatemember->validation->remove_html( $args['submitted']['description'] );
$to_update['description'] = $args['submitted']['description'];
}
if ( isset( $args['submitted']['role'] ) && !empty( $args['submitted']['role'] ) ) {
@@ -111,8 +111,8 @@
$ultimatemember->user->update_files( $files );
}
do_action('um_after_user_upload', um_user('ID') );
do_action('um_after_user_updated', um_user('ID') );
do_action('um_after_user_upload', um_user('ID') );
do_action('um_user_after_updating_profile', $to_update );
if ( !isset( $args['is_signup'] ) ) {
+3
View File
@@ -10,6 +10,9 @@
// Logout screen
if ( isset( $pagenow ) && $pagenow == 'wp-login.php' && is_user_logged_in() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'logout' ) {
$redirect = um_get_core_page('logout');
if ( isset( $_REQUEST['redirect_to'] ) && !empty( $_REQUEST['redirect_to'] ) ) {
$redirect = add_query_arg( 'redirect_to', $_REQUEST['redirect_to'], $redirect );
}
exit( wp_redirect( $redirect ) );
}
+139
View File
@@ -52,6 +52,7 @@ class UM_REST_API {
$vars[] = 'type';
$vars[] = 'data';
$vars[] = 'fields';
$vars[] = 'value';
$vars[] = 'number';
$vars[] = 'id';
$vars[] = 'email';
@@ -189,6 +190,10 @@ class UM_REST_API {
switch( $query_mode ) :
case 'get.stats':
$data = $this->get_stats( $args );
break;
case 'get.users':
$data = $this->get_users( $args );
break;
@@ -196,6 +201,14 @@ class UM_REST_API {
case 'get.user':
$data = $this->get_auser( $args );
break;
case 'update.user':
$data = $this->update_user( $args );
break;
case 'delete.user':
$data = $this->delete_user( $args );
break;
case 'get.following':
$data = $this->get_following( $args );
@@ -217,6 +230,100 @@ class UM_REST_API {
$this->output();
}
/**
* Get some stats
*/
public function get_stats( $args ) {
global $wpdb, $ultimatemember;
extract( $args );
$response = array();
$error = array();
$query = "SELECT COUNT(*) FROM {$wpdb->prefix}users";
$count = absint( $wpdb->get_var($query) );
$response['stats']['total_users'] = $count;
include_once um_path . 'admin/core/um-admin-dashboard.php';
$pending = $um_dashboard->get_pending_users_count();
$response['stats']['pending_users'] = absint( $pending );
if ( class_exists( 'UM_Notifications_API') ) {
$query = "SELECT COUNT(*) FROM {$wpdb->prefix}um_notifications";
$total_notifications = absint( $wpdb->get_var( $query ) );
$response['stats']['total_notifications'] = $total_notifications;
}
if ( class_exists( 'UM_Messaging_API') ) {
$query = "SELECT COUNT(*) FROM {$wpdb->prefix}um_conversations";
$total_conversations = absint( $wpdb->get_var( $query ) );
$response['stats']['total_conversations'] = $total_conversations;
$query = "SELECT COUNT(*) FROM {$wpdb->prefix}um_messages";
$total_messages = absint( $wpdb->get_var( $query ) );
$response['stats']['total_messages'] = $total_messages;
}
if ( class_exists( 'UM_Online_API') ) {
global $um_online;
$total_online = count( $um_online->get_users() );
$response['stats']['total_online'] = $total_online;
}
if ( class_exists( 'UM_Reviews_API') ) {
$query = "SELECT COUNT(*) FROM {$wpdb->prefix}posts WHERE post_status='publish' AND post_type='um_review'";
$total_reviews = absint( $wpdb->get_var( $query ) );
$response['stats']['total_reviews'] = $total_reviews;
}
return $response;
}
/**
* Update user API query
*/
public function update_user( $args ) {
global $ultimatemember;
extract( $args );
$response = array();
$error = array();
if ( !$id ) {
$error['error'] = __('You must provide a user ID','ultimatemember');
return $error;
}
if ( !$data ) {
$error['error'] = __('You need to provide data to update','ultimatemember');
return $error;
}
um_fetch_user( $id );
switch ( $data ) {
case 'status':
$ultimatemember->user->set_status( $value );
$response['success'] = __('User status has been changed.','ultimatemember');
break;
case 'role':
$ultimatemember->user->set_role( $value );
$response['success'] = __('User level has been changed.','ultimatemember');
break;
case 'wp_role':
$wp_user_object = new WP_User( $id );
$wp_user_object->set_role( $value );
$response['success'] = __('User WordPress role has been changed.','ultimatemember');
break;
default:
update_user_meta( $id, $data, esc_attr( $value ) );
$response['success'] = __('User meta has been changed.','ultimatemember');
break;
}
return $response;
}
/**
* Process Get followers users API Request
*/
@@ -361,6 +468,35 @@ class UM_REST_API {
return $response;
}
/**
* Process delete user via API
*/
public function delete_user( $args ) {
global $ultimatemember;
extract( $args );
$response = array();
$error = array();
if ( !isset( $id ) ) {
$error['error'] = __('You must provide a user ID','ultimatemember');
return $error;
}
$user = get_userdata( $id );
if ( !$user ) {
$error['error'] = __('Invalid user specified','ultimatemember');
return $error;
}
um_fetch_user( $id );
$ultimatemember->user->delete();
$response['success'] = __('User has been successfully deleted.','ultimatemember');
return $response;
}
/**
* Process Get user API Request
*/
@@ -489,8 +625,11 @@ class UM_REST_API {
$accepted = apply_filters( 'um_api_valid_query_modes', array(
'get.users',
'get.user',
'update.user',
'delete.user',
'get.following',
'get.followers',
'get.stats',
) );
$query = isset( $wp_query->query_vars['um-api'] ) ? $wp_query->query_vars['um-api'] : null;
+64
View File
@@ -428,6 +428,70 @@ class UM_Builtin {
)
),
'googlemap' => array(
'name' => 'Google Map',
'col1' => array('_title','_metakey','_help','_visibility'),
'col2' => array('_label','_placeholder','_public','_roles','_validate','_custom_validate'),
'col3' => array('_required','_editable','_icon'),
'validate' => array(
'_title' => array(
'mode' => 'required',
'error' => 'You must provide a title'
),
'_metakey' => array(
'mode' => 'unique',
),
)
),
'youtube_video' => array(
'name' => 'YouTube Video',
'col1' => array('_title','_metakey','_help','_visibility'),
'col2' => array('_label','_placeholder','_public','_roles','_validate','_custom_validate'),
'col3' => array('_required','_editable','_icon'),
'validate' => array(
'_title' => array(
'mode' => 'required',
'error' => 'You must provide a title'
),
'_metakey' => array(
'mode' => 'unique',
),
)
),
'vimeo_video' => array(
'name' => 'Vimeo Video',
'col1' => array('_title','_metakey','_help','_visibility'),
'col2' => array('_label','_placeholder','_public','_roles','_validate','_custom_validate'),
'col3' => array('_required','_editable','_icon'),
'validate' => array(
'_title' => array(
'mode' => 'required',
'error' => 'You must provide a title'
),
'_metakey' => array(
'mode' => 'unique',
),
)
),
'soundcloud_track' => array(
'name' => 'SoundCloud Track',
'col1' => array('_title','_metakey','_help','_visibility'),
'col2' => array('_label','_placeholder','_public','_roles','_validate','_custom_validate'),
'col3' => array('_required','_editable','_icon'),
'validate' => array(
'_title' => array(
'mode' => 'required',
'error' => 'You must provide a title'
),
'_metakey' => array(
'mode' => 'unique',
),
)
),
/*'group' => array(
'name' => 'Field Group',
'col1' => array('_title','_max_entries'),
+1 -1
View File
@@ -13,7 +13,7 @@ class UM_Cache {
***/
function do_not_cache() {
if ( um_is_core_uri() ) {
if ( um_is_core_uri() && ! defined( 'DONOTCACHEPAGE' ) ) {
define( "DONOTCACHEPAGE", true );
}
+47 -3
View File
@@ -592,6 +592,14 @@ class UM_Fields {
switch( $array['type'] ) {
case 'googlemap':
case 'youtube_video':
case 'vimeo_video':
case 'soundcloud_track':
$array['disabled'] = '';
$array['input'] = 'text';
break;
case 'text':
$array['disabled'] = '';
@@ -916,6 +924,37 @@ class UM_Fields {
$mode = (isset($this->set_mode))?$this->set_mode:'no_mode';
$output .= apply_filters("um_edit_field_{$mode}_{$type}", $output, $data);
break;
/* Other fields */
case 'googlemap':
case 'youtube_video':
case 'vimeo_video':
case 'soundcloud_track':
$output .= '<div class="um-field' . $classes . '"' . $conditional . ' data-key="'.$key.'">';
if ( isset( $data['label'] ) ) {
$output .= $this->field_label($label, $key, $data);
}
$output .= '<div class="um-field-area">';
if ( isset($icon) && $icon && isset( $this->field_icons ) && $this->field_icons == 'field' ) {
$output .= '<div class="um-field-icon"><i class="'.$icon.'"></i></div>';
}
$output .= '<input '.$disabled.' class="'.$this->get_class($key, $data).'" type="'.$input.'" name="'.$key.$ultimatemember->form->form_suffix.'" id="'.$key.$ultimatemember->form->form_suffix.'" value="'. htmlspecialchars( $this->field_value( $key, $default, $data ) ) .'" placeholder="'.$placeholder.'" data-validate="'.$validate.'" data-key="'.$key.'" />
</div>';
if ( $this->is_error($key) ) {
$output .= $this->field_error( $this->show_error($key) );
}
$output .= '</div>';
break;
/* Text */
case 'text':
@@ -934,7 +973,7 @@ class UM_Fields {
}
$output .= '<input '.$disabled.' class="'.$this->get_class($key, $data).'" type="'.$input.'" name="'.$key.$ultimatemember->form->form_suffix.'" id="'.$key.$ultimatemember->form->form_suffix.'" value="'. $this->field_value( $key, $default, $data ) .'" placeholder="'.$placeholder.'" data-validate="'.$validate.'" data-key="'.$key.'" />
$output .= '<input '.$disabled.' class="'.$this->get_class($key, $data).'" type="'.$input.'" name="'.$key.$ultimatemember->form->form_suffix.'" id="'.$key.$ultimatemember->form->form_suffix.'" value="'. htmlspecialchars( $this->field_value( $key, $default, $data ) ) .'" placeholder="'.$placeholder.'" data-validate="'.$validate.'" data-key="'.$key.'" />
</div>';
@@ -1239,7 +1278,12 @@ class UM_Fields {
if ( $this->field_value( $key, $default, $data ) ) {
if ( !in_array( $key, array('profile_photo','cover_photo') ) ) {
$img = '<img src="' . um_user_uploads_uri() . $this->field_value( $key, $default, $data ) . '" alt="" />';
if ( isset( $this->set_mode ) && $this->set_mode == 'register' ) {
$imgValue = $this->field_value( $key, $default, $data );
} else {
$imgValue = um_user_uploads_uri() . $this->field_value( $key, $default, $data );
}
$img = '<img src="' . $imgValue . '" alt="" />';
} else {
$img = '';
}
@@ -1952,7 +1996,7 @@ class UM_Fields {
}
$output .= '<div class="um-field-area">';
$output .= '<div class="um-field-value">' . $this->field_value( $key, $default, $data ) . '</div>';
$output .= '<div class="um-field-value">' . stripslashes( $this->field_value( $key, $default, $data ) ) . '</div>';
$output .= '</div>';
$output .= '</div>';
+53 -1
View File
@@ -22,13 +22,65 @@
return $label;
}
/***
*** @outputs a soundcloud track
***/
add_filter('um_profile_field_filter_hook__soundcloud_track', 'um_profile_field_filter_hook__soundcloud_track', 99, 2);
function um_profile_field_filter_hook__soundcloud_track( $value, $data ) {
if ( !is_numeric( $value ) ) {
return __('Invalid soundcloud track ID','ultimatemember');
}
$value = '<div class="um-soundcloud">
<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/' . $value . '&amp;color=ff6600&amp;auto_play=false&amp;show_artwork=true"></iframe>
</div>';
return $value;
}
/***
*** @outputs a youtube video
***/
add_filter('um_profile_field_filter_hook__youtube_video', 'um_profile_field_filter_hook__youtube_video', 99, 2);
function um_profile_field_filter_hook__youtube_video( $value, $data ) {
$value = ( strstr( $value, 'http') || strstr( $value, '://' ) ) ? um_youtube_id_from_url( $value ) : $value;
$value = '<div class="um-youtube">
<iframe width="600" height="450" src="https://www.youtube.com/embed/' . $value . '" frameborder="0" allowfullscreen></iframe>
</div>';
return $value;
}
/***
*** @outputs a vimeo video
***/
add_filter('um_profile_field_filter_hook__vimeo_video', 'um_profile_field_filter_hook__vimeo_video', 99, 2);
function um_profile_field_filter_hook__vimeo_video( $value, $data ) {
$value = ( !is_numeric( $value ) ) ? (int) substr(parse_url($value, PHP_URL_PATH), 1) : $value;
$value = '<div class="um-vimeo">
<iframe src="https://player.vimeo.com/video/'. $value . '" width="600" height="450" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
</div>';
return $value;
}
/***
*** @outputs a google map
***/
add_filter('um_profile_field_filter_hook__googlemap', 'um_profile_field_filter_hook__googlemap', 99, 2);
function um_profile_field_filter_hook__googlemap( $value, $data ) {
$value = '<div class="um-googlemap">
<iframe width="600" height="450" frameborder="0" style="border:0" src="https://maps.google.it/maps?q=' . urlencode( $value ) . '&output=embed"></iframe>
</div>';
return $value;
}
/***
*** @user's registration date
***/
add_filter('um_profile_field_filter_hook__user_registered', 'um_profile_field_filter_hook__user_registered', 99, 2);
function um_profile_field_filter_hook__user_registered( $value, $data ) {
$value = strtotime($value);
$value = sprintf(__('Joined %s','ultimatemember'), date('d M Y', $value) );
$value = sprintf(__('Joined %s','ultimatemember'), date_i18n('d M Y', $value) );
return $value;
}
+1 -1
View File
@@ -78,7 +78,7 @@
$operator = 'LIKE';
}
if ( $value && $field != 'um_search' ) {
if ( $value && $field != 'um_search' && $field != 'page_id' ) {
if ( !in_array( $field, $ultimatemember->members->core_search_fields ) ) {
+1 -1
View File
@@ -21,7 +21,7 @@ class UM_Members {
/***
*** @Add display name
***/
function add_display_name(){
function add_display_name( $search_columns ){
$search_columns[] = 'display_name';
return $search_columns;
}
+4 -1
View File
@@ -24,7 +24,10 @@ class UM_Password {
if ( isset($_REQUEST['act']) && $_REQUEST['act'] == 'reset_password' && isset($_REQUEST['hash']) && strlen($_REQUEST['hash']) == 40 &&
isset($_REQUEST['user_id']) && is_numeric($_REQUEST['user_id']) ) {
um_fetch_user( $_REQUEST['user_id'] );
$user_id = absint( $_REQUEST['user_id'] );
delete_option( "um_cache_userdata_{$user_id}" );
um_fetch_user( $user_id );
if ( $_REQUEST['hash'] != um_user('reset_pass_hash') ) wp_die( __('This is not a valid hash, or it has expired.','ultimatemember') );
+4 -1
View File
@@ -64,7 +64,10 @@ class UM_Permalinks {
if ( isset($_REQUEST['act']) && $_REQUEST['act'] == 'activate_via_email' && isset($_REQUEST['hash']) && strlen($_REQUEST['hash']) == 40 &&
isset($_REQUEST['user_id']) && is_numeric($_REQUEST['user_id']) ) { // valid token
um_fetch_user( $_REQUEST['user_id'] );
$user_id = absint( $_REQUEST['user_id'] );
delete_option( "um_cache_userdata_{$user_id}" );
um_fetch_user( $user_id );
if ( um_user('account_status') != 'awaiting_email_confirmation' ) wp_die('The activation link you used is invalid or has expired.');
+28 -1
View File
@@ -131,7 +131,7 @@ function um_user_ip() {
if ( isset( $data ) && is_array( $data ) ) {
foreach( $data as $k => $v ) {
if ( !strstr( $k, 'user_pass' ) ) {
if ( !strstr( $k, 'user_pass' ) && $k != 'g-recaptcha-response' && $k != 'request' ) {
if ( is_array($v) ) {
$v = implode(',', $v );
@@ -801,6 +801,33 @@ function um_fetch_user( $user_id ) {
}
}
/***
*** @Get youtube video ID from url
***/
function um_youtube_id_from_url($url) {
$pattern =
'%^# Match any youtube URL
(?:https?://)? # Optional scheme. Either http or https
(?:www\.)? # Optional www subdomain
(?: # Group host alternatives
youtu\.be/ # Either youtu.be,
| youtube\.com # or youtube.com
(?: # Group path alternatives
/embed/ # Either /embed/
| /v/ # or /v/
| /watch\?v= # or /watch\?v=
) # End path alternatives.
) # End host alternatives.
([\w-]{10,12}) # Allow 10-12 for 11 char youtube id.
$%x'
;
$result = preg_match($pattern, $url, $matches);
if (false !== $result) {
return $matches[1];
}
return false;
}
/***
*** @user uploads uri
***/
+12 -1
View File
@@ -41,6 +41,8 @@ class UM_User {
add_action('um_after_user_account_updated', array(&$this, 'remove_cache') );
add_action('personal_options_update', array(&$this, 'remove_cache') );
add_action('edit_user_profile_update', array(&$this, 'remove_cache') );
add_action('um_when_role_is_set', array(&$this, 'remove_cache') );
add_action('um_when_status_is_set', array(&$this, 'remove_cache') );
}
@@ -71,8 +73,10 @@ class UM_User {
function get_cached_data( $user_id ) {
$find_user = get_option("um_cache_userdata_{$user_id}");
if ( $find_user )
if ( $find_user ) {
$find_user = apply_filters('um_user_permissions_filter', $find_user, $user_id);
return $find_user;
}
}
function setup_cache( $user_id, $profile ) {
@@ -333,6 +337,8 @@ class UM_User {
*
*/
function set_role( $role ){
do_action('um_when_role_is_set', um_user('ID') );
do_action('um_before_user_role_is_changed');
@@ -350,6 +356,8 @@ class UM_User {
***/
function set_status( $status ){
do_action( 'um_when_status_is_set', um_user('ID') );
$this->profile['account_status'] = $status;
$this->update_usermeta_info('account_status');
@@ -419,6 +427,9 @@ class UM_User {
function approve(){
global $ultimatemember;
$user_id = um_user('ID');
delete_option( "um_cache_userdata_{$user_id}" );
if ( um_user('account_status') == 'awaiting_admin_review' ) {
$email_tpl = 'approved_email';
} else {
+1 -1
View File
@@ -3,7 +3,7 @@
Plugin Name: Ultimate Member
Plugin URI: http://ultimatemember.com/
Description: The easiest way to create powerful online communities and beautiful user profiles with WordPress
Version: 1.2.93
Version: 1.2.98
Author: Ultimate Member
Author URI: http://ultimatemember.com/
*/
+49 -2
View File
@@ -5,9 +5,9 @@ Contributors: ultimatemember
Donate link:
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, gravatar, hide wp-admin, login, login page, logged-in users, mandrill, member, members, membership, member directory, online users, 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 profile, user-profile, user profiles, user roles
Requires at least: 4.1
Tested up to: 4.2.1
Tested up to: 4.2.2
Stable Tag: 1.2.93
Stable Tag: 1.2.98
License: GNU Version 2 or Any Later Version
@@ -45,6 +45,7 @@ Read about all of the plugin's features at [Ultimate Member](https://ultimatemem
Ultimate Member has a range of extensions that allow you to extend the power of the plugin
* [Private Messages](https://ultimatemember.com/extensions/private-messages/) - Add a private messaging system to your site & allow users to message each other
* [Followers](https://ultimatemember.com/extensions/followers/) - Allow users to follow each other on your site and protect their profile information
* [Real-time Notifications](https://ultimatemember.com/extensions/real-time-notifications/) - Add a notifications system to your site so users can receive real-time notifications
* [Social Login](https://ultimatemember.com/extensions/social-login/) - Let users register & login to your site via Facebook, Twitter, G+, LinkedIn, Instagram and Vkontakte (VK.com)
@@ -79,9 +80,12 @@ Ultimate Member has been translated into the following languages:
* German - Deutsch
* Dutch - Nederlands
* Finnish - Suomi
* Danish - Dansk
* Swedish - Svenska
* Polish - Polski
* Russian - Русский
* Turkish - Türkçe
* Hebrew
* العربية
== Installation ==
@@ -141,6 +145,49 @@ The plugin works with popular caching plugins by automatically excluding Ultimat
== Changelog ==
= 1.2.98: May 18, 2015 =
* New: added Google map field
* New: added Vimeo video field
* New: added YouTube video field
* New: added SoundCloud track field
* New: added Hebrew language support
* Tweak: do not show captcha response in submitted registration details
* Fixed: profile photo upload issue on profile view mode
* Fixed: user search in backend/frontend
* Fixed: UM login check
* Fixed: admin settings css issue on mobile
* Fixed: cache variable undefined issue
= 1.2.97: May 13, 2015 =
* Fixed: issue with image upload fields
* Fixed: date localization resolved
* Fixed: issue with image upload during registration
* Fixed: JS issues for PM extension
= 1.2.96: May 12, 2015 =
* New: hooks and compatibility with Private Messages extension
* Fixed: bug with empty password on welcome e-mail
* Fixed: bug with member search using default permalinks
= 1.2.95: May 9, 2015 =
* New: RESTful API methods update.user, get.stats, and delete.user
* New: added Danish (Dansk) support
* New: added Swedish (Svenska) support
* Tweak: minor account and logout redirection tweaks
* Fixed: issue with changing user role
* Fixed: bug with login form validation
* Fixed: issue with biography field and html
= 1.2.94: May 6, 2015 =
* Fixed: bug with activation e-mails
* Fixed: bug stopping password reset
* Fixed: bug with changing user role and status in backend
= 1.2.93: May 5, 2015 =
* New: user profiles are cached to speed up load time
+3
View File
@@ -24,9 +24,12 @@ class UM_API {
'de_DE' => 'Deutsch',
'nl_NL' => 'Nederlands',
'fi_FI' => 'Suomi',
'da_DK' => 'Dansk',
'sv_SE' => 'Svenska',
'pl_PL' => 'Polski',
'ru_RU' => 'Русский',
'tr_TR' => 'Türkçe',
'he_IL' => 'Hebrew',
'ar' => 'العربية'
);