mirror of
https://github.com/10h30/ultimatemember.git
synced 2026-07-11 18:56:10 +09:00
updating to 1.0.16
This commit is contained in:
@@ -418,7 +418,7 @@ class UM_Admin_Metabox {
|
||||
case '_visibility':
|
||||
?>
|
||||
|
||||
<p><label for="_visibility">Visibility <?php $this->tooltip('Where this field should appear?'); ?></label>
|
||||
<p><label for="_visibility">Visibility <?php $this->tooltip( __('Select where this field should appear. This option should only be changed on the profile form and allows you to show a field in one mode only (edit or view) or in both modes.','ultimatemember') ); ?></label>
|
||||
<select name="_visibility" id="_visibility" class="umaf-selectjs" style="width: 100%">
|
||||
<option value="all" <?php selected( 'all', $this->edit_mode_value ); ?>>View everywhere</option>
|
||||
<option value="edit" <?php selected( 'edit', $this->edit_mode_value ); ?>>Edit mode only</option>
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
</div>
|
||||
|
||||
<div class="last-feature">
|
||||
<h4>Membership Levels</h4>
|
||||
<p>Create unlimited, custom <a href="<?php echo admin_url('edit.php?post_type=um_role'); ?>">membership levels</a> and set up permissions for each membership level easily.</p>
|
||||
<h4>User Roles</h4>
|
||||
<p>Create unlimited, custom <a href="<?php echo admin_url('edit.php?post_type=um_role'); ?>">user roles</a> and set up permissions for each user role easily.</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
||||
@@ -14,6 +14,11 @@ class UM_Admin_API {
|
||||
add_action('admin_menu', array(&$this, 'admin_menu'), 0 );
|
||||
add_action('admin_menu', array(&$this, 'secondary_menu_items'), 1000 );
|
||||
|
||||
$_redux_tracker['dev_mode'] = false;
|
||||
$_redux_tracker['hash'] = md5( network_site_url() . '-' . $_SERVER['REMOTE_ADDR'] );
|
||||
$_redux_tracker['allow_tracking'] = 'no';
|
||||
update_option('redux-framework-tracking', $_redux_tracker);
|
||||
|
||||
if ( !class_exists( 'ReduxFramework' ) && file_exists( um_path . 'admin/core/lib/ReduxFramework/ReduxCore/framework.php' ) ) {
|
||||
require_once( um_path . 'admin/core/lib/ReduxFramework/ReduxCore/framework.php' );
|
||||
}
|
||||
|
||||
@@ -295,4 +295,33 @@ font-weight: normal;
|
||||
padding-left: 10px;
|
||||
font-size: 14px;
|
||||
color: #777;
|
||||
}
|
||||
|
||||
/*
|
||||
- Profile body
|
||||
*/
|
||||
|
||||
.um-profile-note {
|
||||
display: none;
|
||||
text-align: center;
|
||||
margin-top: 20px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.um-profile-note i {
|
||||
display: inline-block;
|
||||
font-size: 70px;
|
||||
height: 70px;
|
||||
line-height: 70px;
|
||||
}
|
||||
|
||||
.um-profile-note span {
|
||||
margin-top: 10px;
|
||||
display: block;
|
||||
font-size: 16px;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.um-profile-note a:hover {
|
||||
text-decoration: underline !important;
|
||||
}
|
||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
+22
-2
@@ -13,7 +13,8 @@ jQuery(document).ready(function() {
|
||||
e.preventDefault();
|
||||
|
||||
var parent = jQuery(this).parents('.um-modal-body');
|
||||
|
||||
var src = jQuery(this).parents('.um-modal-body').find('.um-single-fileinfo a').attr('href');
|
||||
|
||||
parent.find('.um-single-file-preview').hide();
|
||||
|
||||
parent.find('.ajax-upload-dragdrop').show();
|
||||
@@ -22,6 +23,15 @@ jQuery(document).ready(function() {
|
||||
|
||||
um_modal_responsive();
|
||||
|
||||
jQuery.ajax({
|
||||
url: ultimatemember_ajax_url,
|
||||
type: 'post',
|
||||
data: {
|
||||
action: 'ultimatemember_remove_file',
|
||||
src: src
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
@@ -29,7 +39,8 @@ jQuery(document).ready(function() {
|
||||
e.preventDefault();
|
||||
|
||||
var parent = jQuery(this).parents('.um-modal-body');
|
||||
|
||||
var src = jQuery(this).parents('.um-modal-body').find('.um-single-image-preview img').attr('src');
|
||||
|
||||
parent.find('.um-modal .um-single-image-preview img').cropper("destroy");
|
||||
|
||||
parent.find('.um-single-image-preview img').attr('src', '');
|
||||
@@ -42,6 +53,15 @@ jQuery(document).ready(function() {
|
||||
|
||||
um_modal_responsive();
|
||||
|
||||
jQuery.ajax({
|
||||
url: ultimatemember_ajax_url,
|
||||
type: 'post',
|
||||
data: {
|
||||
action: 'ultimatemember_remove_file',
|
||||
src: src
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
jQuery(document).ready(function() {
|
||||
|
||||
if ( jQuery('.um-profile.um-viewing .um-profile-body').length && jQuery('.um-profile.um-viewing .um-profile-body').find('.um-field').length == 0 ) {
|
||||
jQuery('.um-profile-note').show();
|
||||
}
|
||||
|
||||
jQuery(document).on('click', '.um-profile-save', function(e){
|
||||
e.preventDefault();
|
||||
jQuery(this).parents('.um').find('form').submit();
|
||||
|
||||
@@ -116,19 +116,41 @@ jQuery(document).ready(function() {
|
||||
jQuery(document).on('click', '.um .um-single-image-preview a.cancel', function(e){
|
||||
e.preventDefault();
|
||||
var parent = jQuery(this).parents('.um-field');
|
||||
var src = jQuery(this).parents('.um-field').find('.um-single-image-preview img').attr('src');
|
||||
parent.find('.um-single-image-preview img').attr('src','');
|
||||
parent.find('.um-single-image-preview').hide();
|
||||
parent.find('.um-btn-auto-width').html('Upload');
|
||||
parent.find('input[type=hidden]').val('');
|
||||
|
||||
jQuery.ajax({
|
||||
url: ultimatemember_ajax_url,
|
||||
type: 'post',
|
||||
data: {
|
||||
action: 'ultimatemember_remove_file',
|
||||
src: src
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
jQuery(document).on('click', '.um .um-single-file-preview a.cancel', function(e){
|
||||
e.preventDefault();
|
||||
var parent = jQuery(this).parents('.um-field');
|
||||
var src = jQuery(this).parents('.um-field').find('.um-single-fileinfo a').attr('href');
|
||||
parent.find('.um-single-file-preview').hide();
|
||||
parent.find('.um-btn-auto-width').html('Upload');
|
||||
parent.find('input[type=hidden]').val('');
|
||||
|
||||
jQuery.ajax({
|
||||
url: ultimatemember_ajax_url,
|
||||
type: 'post',
|
||||
data: {
|
||||
action: 'ultimatemember_remove_file',
|
||||
src: src
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
|
||||
Vendored
+10
-20
File diff suppressed because one or more lines are too long
@@ -18,6 +18,17 @@
|
||||
<?php
|
||||
}
|
||||
|
||||
/***
|
||||
*** @remove any file silently
|
||||
***/
|
||||
add_action('wp_ajax_nopriv_ultimatemember_remove_file', 'ultimatemember_remove_file');
|
||||
add_action('wp_ajax_ultimatemember_remove_file', 'ultimatemember_remove_file');
|
||||
function ultimatemember_remove_file(){
|
||||
global $ultimatemember;
|
||||
extract($_REQUEST);
|
||||
$ultimatemember->files->delete_file( $src );
|
||||
}
|
||||
|
||||
/***
|
||||
*** @remove profile photo silently
|
||||
***/
|
||||
|
||||
+13
-10
@@ -35,18 +35,21 @@
|
||||
}
|
||||
|
||||
if ( isset( $args['submitted'][ $key ] ) ) {
|
||||
|
||||
if ( isset( $userinfo[$key]) && $args['submitted'][$key] != $userinfo[$key] ) {
|
||||
$to_update[ $key ] = $args['submitted'][ $key ];
|
||||
} else if ( $args['submitted'][$key] ) {
|
||||
$to_update[ $key ] = $args['submitted'][ $key ];
|
||||
|
||||
if ( isset( $fields[$key]['type'] ) && in_array( $fields[$key]['type'], array('image','file') ) && um_is_temp_upload( $args['submitted'][ $key ] ) ) {
|
||||
|
||||
$files[ $key ] = $args['submitted'][ $key ];
|
||||
|
||||
} else {
|
||||
|
||||
if ( isset( $userinfo[$key]) && $args['submitted'][$key] != $userinfo[$key] ) {
|
||||
$to_update[ $key ] = $args['submitted'][ $key ];
|
||||
} else if ( $args['submitted'][$key] ) {
|
||||
$to_update[ $key ] = $args['submitted'][ $key ];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// files
|
||||
if ( isset( $fields[$key]['type'] ) && in_array( $fields[$key]['type'], array('image','file') ) && um_is_temp_upload( $args['submitted'][ $key ] ) ) {
|
||||
$files[ $key ] = $args['submitted'][ $key ];
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+15
-15
@@ -112,7 +112,7 @@ class UM_Builtin {
|
||||
|
||||
'text' => array(
|
||||
'name' => 'Text Box',
|
||||
'col1' => array('_title','_metakey','_help','_default','_min_chars'),
|
||||
'col1' => array('_title','_metakey','_help','_default','_min_chars','_visibility'),
|
||||
'col2' => array('_label','_placeholder','_public','_roles','_validate','_custom_validate','_max_chars'),
|
||||
'col3' => array('_required','_editable','_icon'),
|
||||
'validate' => array(
|
||||
@@ -128,7 +128,7 @@ class UM_Builtin {
|
||||
|
||||
'textarea' => array(
|
||||
'name' => 'Textarea',
|
||||
'col1' => array('_title','_metakey','_help','_height','_max_chars','_max_words'),
|
||||
'col1' => array('_title','_metakey','_help','_height','_max_chars','_max_words','_visibility'),
|
||||
'col2' => array('_label','_placeholder','_public','_roles','_default','_html'),
|
||||
'col3' => array('_required','_editable','_icon'),
|
||||
'validate' => array(
|
||||
@@ -144,7 +144,7 @@ class UM_Builtin {
|
||||
|
||||
'select' => array(
|
||||
'name' => 'Dropdown',
|
||||
'col1' => array('_title','_metakey','_help','_default','_options'),
|
||||
'col1' => array('_title','_metakey','_help','_default','_options','_visibility'),
|
||||
'col2' => array('_label','_placeholder','_public','_roles'),
|
||||
'col3' => array('_required','_editable','_icon'),
|
||||
'validate' => array(
|
||||
@@ -164,7 +164,7 @@ class UM_Builtin {
|
||||
|
||||
'multiselect' => array(
|
||||
'name' => 'Multi-Select',
|
||||
'col1' => array('_title','_metakey','_help','_default','_options'),
|
||||
'col1' => array('_title','_metakey','_help','_default','_options','_visibility'),
|
||||
'col2' => array('_label','_placeholder','_public','_roles','_min_selections','_max_selections'),
|
||||
'col3' => array('_required','_editable','_icon'),
|
||||
'validate' => array(
|
||||
@@ -184,7 +184,7 @@ class UM_Builtin {
|
||||
|
||||
'radio' => array(
|
||||
'name' => 'Radio',
|
||||
'col1' => array('_title','_metakey','_help','_default','_options'),
|
||||
'col1' => array('_title','_metakey','_help','_default','_options','_visibility'),
|
||||
'col2' => array('_label','_public','_roles'),
|
||||
'col3' => array('_required','_editable','_icon'),
|
||||
'validate' => array(
|
||||
@@ -204,7 +204,7 @@ class UM_Builtin {
|
||||
|
||||
'checkbox' => array(
|
||||
'name' => 'Checkbox',
|
||||
'col1' => array('_title','_metakey','_help','_default','_options'),
|
||||
'col1' => array('_title','_metakey','_help','_default','_options','_visibility'),
|
||||
'col2' => array('_label','_public','_roles','_max_selections'),
|
||||
'col3' => array('_required','_editable','_icon'),
|
||||
'validate' => array(
|
||||
@@ -224,7 +224,7 @@ class UM_Builtin {
|
||||
|
||||
'url' => array(
|
||||
'name' => 'URL',
|
||||
'col1' => array('_title','_metakey','_help','_default','_url_text'),
|
||||
'col1' => array('_title','_metakey','_help','_default','_url_text','_visibility'),
|
||||
'col2' => array('_label','_placeholder','_url_target','_url_rel','_public','_roles','_validate','_custom_validate'),
|
||||
'col3' => array('_required','_editable','_icon'),
|
||||
'validate' => array(
|
||||
@@ -240,7 +240,7 @@ class UM_Builtin {
|
||||
|
||||
'password' => array(
|
||||
'name' => 'Password',
|
||||
'col1' => array('_title','_metakey','_help','_min_chars','_max_chars'),
|
||||
'col1' => array('_title','_metakey','_help','_min_chars','_max_chars','_visibility'),
|
||||
'col2' => array('_label','_placeholder','_public','_roles','_force_good_pass','_force_confirm_pass'),
|
||||
'col3' => array('_required','_editable','_icon'),
|
||||
'validate' => array(
|
||||
@@ -256,7 +256,7 @@ class UM_Builtin {
|
||||
|
||||
'image' => array(
|
||||
'name' => 'Image Upload',
|
||||
'col1' => array('_title','_metakey','_help','_allowed_types','_max_size','_crop'),
|
||||
'col1' => array('_title','_metakey','_help','_allowed_types','_max_size','_crop','_visibility'),
|
||||
'col2' => array('_label','_public','_roles','_upload_text','_upload_help_text','_button_text'),
|
||||
'col3' => array('_required','_editable','_icon'),
|
||||
'validate' => array(
|
||||
@@ -276,7 +276,7 @@ class UM_Builtin {
|
||||
|
||||
'file' => array(
|
||||
'name' => 'File Upload',
|
||||
'col1' => array('_title','_metakey','_help','_allowed_types','_max_size'),
|
||||
'col1' => array('_title','_metakey','_help','_allowed_types','_max_size','_visibility'),
|
||||
'col2' => array('_label','_public','_roles','_upload_text','_upload_help_text','_button_text'),
|
||||
'col3' => array('_required','_editable','_icon'),
|
||||
'validate' => array(
|
||||
@@ -296,7 +296,7 @@ class UM_Builtin {
|
||||
|
||||
'date' => array(
|
||||
'name' => 'Date Picker',
|
||||
'col1' => array('_title','_metakey','_help','_range','_years','_years_x','_range_start','_range_end'),
|
||||
'col1' => array('_title','_metakey','_help','_range','_years','_years_x','_range_start','_range_end','_visibility'),
|
||||
'col2' => array('_label','_placeholder','_public','_roles','_format','_pretty_format','_disabled_weekdays'),
|
||||
'col3' => array('_required','_editable','_icon'),
|
||||
'validate' => array(
|
||||
@@ -322,7 +322,7 @@ class UM_Builtin {
|
||||
|
||||
'time' => array(
|
||||
'name' => 'Time Picker',
|
||||
'col1' => array('_title','_metakey','_help','_format'),
|
||||
'col1' => array('_title','_metakey','_help','_format','_visibility'),
|
||||
'col2' => array('_label','_placeholder','_public','_roles','_intervals'),
|
||||
'col3' => array('_required','_editable','_icon'),
|
||||
'validate' => array(
|
||||
@@ -338,7 +338,7 @@ class UM_Builtin {
|
||||
|
||||
'rating' => array(
|
||||
'name' => 'Rating',
|
||||
'col1' => array('_title','_metakey','_help'),
|
||||
'col1' => array('_title','_metakey','_help','_visibility'),
|
||||
'col2' => array('_label','_public','_roles','_number','_default'),
|
||||
'col3' => array('_required','_editable','_icon'),
|
||||
'validate' => array(
|
||||
@@ -385,7 +385,7 @@ class UM_Builtin {
|
||||
|
||||
'spacing' => array(
|
||||
'name' => 'Spacing',
|
||||
'col1' => array('_title'),
|
||||
'col1' => array('_title','_visibility'),
|
||||
'col2' => array('_spacing'),
|
||||
'form_only' => true,
|
||||
'validate' => array(
|
||||
@@ -398,7 +398,7 @@ class UM_Builtin {
|
||||
|
||||
'divider' => array(
|
||||
'name' => 'Divider',
|
||||
'col1' => array('_title','_width'),
|
||||
'col1' => array('_title','_width','_visibility'),
|
||||
'col2' => array('_style','_color'),
|
||||
'form_only' => true,
|
||||
'validate' => array(
|
||||
|
||||
+7
-1
@@ -251,7 +251,7 @@ class UM_Fields {
|
||||
|
||||
$output .= '<label for="'.$key.$ultimatemember->form->form_suffix.'">'.$label.'</label>';
|
||||
|
||||
if ( isset( $data['help'] ) && !empty( $data['help'] ) && $this->viewing == false ) {
|
||||
if ( isset( $data['help'] ) && !empty( $data['help'] ) && $this->viewing == false && !strstr($key, 'confirm_user_pass') ) {
|
||||
|
||||
if ( !$ultimatemember->mobile->isMobile() ) {
|
||||
$output .= '<span class="um-tip um-tip-w" title="'.$data['help'].'"><i class="um-icon-help-circled"></i></span>';
|
||||
@@ -1883,6 +1883,12 @@ class UM_Fields {
|
||||
// start output here
|
||||
$this->get_fields = $this->get_fields();
|
||||
|
||||
if ( um_is_myprofile() ) {
|
||||
$output .= '<p class="um-profile-note"><i class="um-faicon-frown-o"></i><span>' . sprintf(__('Your profile is looking a little empty. Why not <a href="%s">add</a> some information!','ultimatemember'), add_query_arg('um_action','edit') ) . '</span></p>';
|
||||
} else {
|
||||
$output .= '<p class="um-profile-note"><i class="um-faicon-frown-o"></i><span>' . __('This user has not added any information to their profile yet.','ultimatemember') . '</span></p>';
|
||||
}
|
||||
|
||||
if ( !empty( $this->get_fields ) ) {
|
||||
|
||||
// find rows
|
||||
|
||||
@@ -342,6 +342,23 @@ class UM_Files {
|
||||
return false;
|
||||
}
|
||||
|
||||
/***
|
||||
*** @This function will delete file upload from server
|
||||
***/
|
||||
function delete_file( $src ) {
|
||||
|
||||
if ( strstr( $src, '?' ) ){
|
||||
$splitted = explode('?', $src );
|
||||
$src = $splitted[0];
|
||||
}
|
||||
|
||||
$is_temp = um_is_temp_upload( $src );
|
||||
if ( $is_temp )
|
||||
unlink( $is_temp );
|
||||
rmdir( dirname( $is_temp ) );
|
||||
|
||||
}
|
||||
|
||||
/***
|
||||
*** @delete a main user photo
|
||||
***/
|
||||
@@ -473,6 +490,14 @@ class UM_Files {
|
||||
rmdir( $dir );
|
||||
|
||||
// update user's meta
|
||||
$existing = get_user_meta( $user_id, $key, true );
|
||||
if ( $existing ) {
|
||||
$file = basename( $existing );
|
||||
if ( $file != $filename ) {
|
||||
$delete_src = $this->upload_basedir . $user_id . '/' . basename( $existing );
|
||||
unlink( $delete_src );
|
||||
}
|
||||
}
|
||||
update_user_meta( $user_id, $key, $filename );
|
||||
|
||||
// the url of upload
|
||||
@@ -480,4 +505,15 @@ class UM_Files {
|
||||
|
||||
}
|
||||
|
||||
/***
|
||||
*** @Remove a directory
|
||||
***/
|
||||
function remove_dir($dir) {
|
||||
if ( file_exists( $dir ) ) {
|
||||
foreach(glob($dir . '/*') as $file) {
|
||||
if(is_dir($file)) remove_dir($file); else unlink($file);
|
||||
} rmdir($dir);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -46,7 +46,8 @@
|
||||
|
||||
foreach( $query as $field => $value ) {
|
||||
|
||||
$operator = '=';
|
||||
$operator = 'LIKE';
|
||||
|
||||
if ( in_array( $ultimatemember->fields->get_field_type( $field ), array('checkbox','multiselect') ) ) {
|
||||
$operator = 'LIKE';
|
||||
}
|
||||
|
||||
+3
-5
@@ -314,18 +314,16 @@ class UM_User {
|
||||
$ultimatemember->mail->send( um_user('user_email'), 'deletion_email' );
|
||||
}
|
||||
|
||||
$ultimatemember->files->remove_dir( um_user_uploads_dir() );
|
||||
|
||||
require_once( ABSPATH . 'wp-admin/includes/user.php' );
|
||||
|
||||
if ( is_multisite() ) {
|
||||
|
||||
wpmu_delete_user( $this->id );
|
||||
|
||||
} else {
|
||||
|
||||
wp_delete_user( $this->id );
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/***
|
||||
|
||||
@@ -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.10
|
||||
Version: 1.0.16
|
||||
Author: Ultimate Member
|
||||
Author URI: http://ultimatemember.com/
|
||||
*/
|
||||
|
||||
+1340
-282
File diff suppressed because it is too large
Load Diff
+16
-3
@@ -7,7 +7,7 @@ Tags: members, member, membership, community, communities, profile, profiles, re
|
||||
Requires at least: 4.1
|
||||
Tested up to: 4.1
|
||||
|
||||
Stable Tag: 1.0.10
|
||||
Stable Tag: 1.0.16
|
||||
|
||||
License: GNU Version 2 or Any Later Version
|
||||
|
||||
@@ -50,9 +50,9 @@ Allow users to login directly from your site and avoid the ugly WordPress login
|
||||
|
||||
Ultimate Member gives every user of your site a beautiful user profile where they can edit their information. You can create unique profiles for each user role and decide what information to show on the profiles.
|
||||
|
||||
**Custom fields**
|
||||
**Custom profile fields**
|
||||
|
||||
With our custom fields, Ultimate Member allows you to gather any information you like from user's when they signup or via their profile. The plugin comes with a full range of field types including: text box, textarea, dropdown, multi-select, radio, checkbox, url, password, image upload, file upload, date picker, time picker and star ratings
|
||||
With our custom profile fields, Ultimate Member allows you to gather any information you like from user's when they register or when they fill in their profiles. The plugin comes with a full range of field types including: text box, textarea, dropdown, multi-select, radio, checkbox, url, password, image upload, file upload, date picker, time picker and star ratings.
|
||||
|
||||
**Drag and drop form builder**
|
||||
|
||||
@@ -165,6 +165,19 @@ We are currently in beta phase so at the moment the plugin only works on single
|
||||
|
||||
== Changelog ==
|
||||
|
||||
= 1.0.16: January 22, 2015 =
|
||||
|
||||
* Fixed: Settings page: tracking popup removed
|
||||
|
||||
= 1.0.15: January 22, 2015 =
|
||||
|
||||
* New: User profiles now show a cool message if the user profile field area is empty
|
||||
* New: Added 'visibility' setting to all field types in backend
|
||||
* Tweak: Members search function supports partial search matching
|
||||
* Tweak: Deleting photo or file removes file from server
|
||||
* Tweak: Deleting a user will delete all his personal uploads from the server
|
||||
* Fixed: Duplicate tooltip for password field has been removed
|
||||
|
||||
= 1.0.10: January 22, 2015 =
|
||||
|
||||
* Fixed: Template tags for welcome e-mail
|
||||
|
||||
Reference in New Issue
Block a user