diff --git a/admin/assets/css/um-admin-dashboard.css b/admin/assets/css/um-admin-dashboard.css index 87ca19b7..21600ec4 100644 --- a/admin/assets/css/um-admin-dashboard.css +++ b/admin/assets/css/um-admin-dashboard.css @@ -89,6 +89,7 @@ float: left; width: 202px; min-height: 300px; + display: none !important; } .um-admin-dash-nav a { @@ -133,16 +134,15 @@ - Main */ -.um-admin-dash-content { - display: none; -} - .um-admin-dash-main { margin-left: 201px; border-left: 1px solid #D8D8D8; padding: 0 30px 30px 30px; box-shadow: 0px 1px 0px #FFF inset; min-height: 300px; + + border-left: none; + margin-left: 0; } .um-admin-dash-main h3{ @@ -151,6 +151,19 @@ margin: 0 !important; } +.um-admin-dash-content { + display: none; + display: block; +} + +.um-admin-dash-review { + text-decoration: none !important; + font-size: 16px; + position: absolute; + top: 0px; + right: 4px; +} + /* - Share icons */ @@ -176,8 +189,8 @@ .um-admin-dash-two-col .um-admin-dash-col { display: inline-block; - width: 42%; - margin-right: 4%; + width: 46%; + margin-right: 3%; vertical-align: top; } @@ -200,7 +213,7 @@ .um-admin-dash-thumb { display: inline-block; width: 30px; - margin-right: 14px; + margin-right: 10px; } .um-admin-dash-thumb a, @@ -212,14 +225,15 @@ .um-admin-dash-info { display: inline-block; - width: 110px; - margin-right: 10px; + width: 90px; + margin-right: 6px; } .um-admin-dash-meta { display: inline-block; width: 100px; - margin-right: 10px; + margin-right: 6px; + position: relative; } .um-admin-dash-more { diff --git a/admin/assets/js/um-admin-dashboard.js b/admin/assets/js/um-admin-dashboard.js index 4125de1d..0ffc600c 100644 --- a/admin/assets/js/um-admin-dashboard.js +++ b/admin/assets/js/um-admin-dashboard.js @@ -1,9 +1,12 @@ jQuery(document).ready(function() { + /** + var active_tab = jQuery('.um-admin-dash-nav a.active').attr('data-rel'); jQuery('.um-admin-dash-content').hide(); jQuery('.um-admin-dash-content#'+active_tab).show(); + draw_linechart(); chart_ready = 0; jQuery(document).on('click', '.um-admin-dash-nav a', function(e){ @@ -20,4 +23,6 @@ jQuery(document).ready(function() { return false; }); + **/ + }); \ No newline at end of file diff --git a/admin/assets/js/um-admin-modal.js b/admin/assets/js/um-admin-modal.js index 27d85020..64232a29 100644 --- a/admin/assets/js/um-admin-modal.js +++ b/admin/assets/js/um-admin-modal.js @@ -55,24 +55,38 @@ function um_admin_modal_ajaxcall( act_id, arg1, arg2, arg3 ) { if ( jQuery('.um-admin-editor:visible').length > 0 ) { - tinyMCE.execCommand('mceRemoveEditor', true, 'um_editor'); - jQuery('.um-admin-editor').html( jQuery('.um-hidden-editor-container').contents() ); - tinyMCE.execCommand('mceAddEditor', true, 'um_editor'); + if ( act_id == 'um_admin_edit_field_popup' ) { - jQuery('.switch-html').trigger('click'); - jQuery('.switch-html').trigger('click'); - jQuery('.switch-tmce').trigger('click'); + tinyMCE.execCommand('mceRemoveEditor', true, 'um_editor_edit'); + jQuery('.um-admin-editor:visible').html( jQuery('.um-hidden-editor-edit').contents() ); + tinyMCE.execCommand('mceAddEditor', true, 'um_editor_edit'); + + jQuery('.switch-html').trigger('click'); + jQuery('.switch-html').trigger('click'); + jQuery('.switch-tmce').trigger('click'); + + jQuery('#um_editor_edit_ifr').height(200); + + var editor = tinyMCE.get('um_editor_edit'); + var content = editor.getContent(); + editor.setContent( jQuery('.um-admin-modal:visible .dynamic-mce-content').html() ); + + } else { - jQuery('#um_editor_ifr').height(200); + tinyMCE.execCommand('mceRemoveEditor', true, 'um_editor_new'); + jQuery('.um-admin-editor:visible').html( jQuery('.um-hidden-editor-new').contents() ); + tinyMCE.execCommand('mceAddEditor', true, 'um_editor_new'); + + jQuery('.switch-html').trigger('click'); + jQuery('.switch-html').trigger('click'); + jQuery('.switch-tmce').trigger('click'); + + jQuery('#um_editor_new_ifr').height(200); + + } } - if ( jQuery('.dynamic-mce-content').length > 0 ) { - var editor = tinyMCE.get('um_editor'); - var content = editor.getContent(); - editor.setContent( jQuery('.dynamic-mce-content').html() ); - } - }, error: function(data){ @@ -90,9 +104,19 @@ function um_admin_remove_modal(){ if ( jQuery('.um-admin-editor:visible').length > 0 ) { - tinyMCE.execCommand('mceRemoveEditor', true, 'um_editor'); - jQuery('.um-hidden-editor-container').html( jQuery('.um-admin-editor').contents() ); - tinyMCE.execCommand('mceAddEditor', true, 'um_editor'); + if ( jQuery('.um-admin-modal:visible').find('form').parent().attr('id') == 'UM_edit_field' ) { + + tinyMCE.execCommand('mceRemoveEditor', true, 'um_editor_edit'); + jQuery('.um-hidden-editor-edit').html( jQuery('.um-admin-editor:visible').contents() ); + tinyMCE.execCommand('mceAddEditor', true, 'um_editor_edit'); + + } else { + + tinyMCE.execCommand('mceRemoveEditor', true, 'um_editor_new'); + jQuery('.um-hidden-editor-new').html( jQuery('.um-admin-editor:visible').contents() ); + tinyMCE.execCommand('mceAddEditor', true, 'um_editor_new'); + + } } diff --git a/admin/core/um-admin-actions-fields.php b/admin/core/um-admin-actions-fields.php index 7d9faf4e..ab6cea66 100644 --- a/admin/core/um-admin-actions-fields.php +++ b/admin/core/um-admin-actions-fields.php @@ -40,7 +40,7 @@ $save[ $_metakey ][$new_key] = $val; } - } else if ( $key == 'um_editor' ) { + } else if ( strstr( $key, 'um_editor' ) ) { $save[ $_metakey ]['content'] = $val; } diff --git a/admin/core/um-admin-metabox.php b/admin/core/um-admin-metabox.php index a636903d..c4c2390c 100644 --- a/admin/core/um-admin-metabox.php +++ b/admin/core/um-admin-metabox.php @@ -362,8 +362,12 @@ class UM_Admin_Metabox { $settings['textarea_rows'] = 8; - echo ' -
- -
+
- + Resend Email
@@ -134,25 +126,10 @@ -
- - Review details'; - - } else { - - echo 'No information available'; - - } - ?> - -
+
- + Re-activate  |  Delete
diff --git a/admin/templates/modal/dynamic_registration_preview.php b/admin/templates/modal/dynamic_registration_preview.php index ebc96218..03ce2140 100644 --- a/admin/templates/modal/dynamic_registration_preview.php +++ b/admin/templates/modal/dynamic_registration_preview.php @@ -9,9 +9,7 @@
- - - +
\ No newline at end of file diff --git a/assets/css/um-responsive.css b/assets/css/um-responsive.css index c8c97130..7eac857a 100644 --- a/assets/css/um-responsive.css +++ b/assets/css/um-responsive.css @@ -98,7 +98,7 @@ div.uimob340 .um-profile-photo { width: 100% !important; text-align: center !important; position: absolute; - top: -20px; + top: -40px; left: 0; } @@ -117,7 +117,7 @@ div.uimob340 .um-header .um-profile-meta { padding-left: 0 !important; padding-right: 0 !important; text-align: center !important; - padding-top: 90px !important; + padding-top: 70px !important; } div.uimob340 .um-header .um-name { @@ -281,8 +281,8 @@ div.uimob500 .um-profile-photo { } div.uimob500 .um-profile-photo a.um-profile-photo-img { - width: 110px !important; - height: 110px !important; + width: 100px !important; + height: 100px !important; margin: 0 auto !important; float: none !important; display: inline-block !important; @@ -295,7 +295,7 @@ div.uimob500 .um-header .um-profile-meta { padding-left: 0 !important; padding-right: 0 !important; text-align: center !important; - padding-top: 80px !important; + padding-top: 70px !important; } div.uimob500 .um-header .um-name { diff --git a/assets/css/um-styles.css b/assets/css/um-styles.css index a8c00953..0d3d40e3 100644 --- a/assets/css/um-styles.css +++ b/assets/css/um-styles.css @@ -33,8 +33,9 @@ /* only in admin mode */ .um.um-in-admin { padding-top: 0; - margin-bottom: 10px; + margin-bottom: 0 !important; } +.um.um-in-admin .um-tip {display: none !important} .um input, .um select, diff --git a/core/um-actions-form.php b/core/um-actions-form.php index d8f54800..f5315628 100644 --- a/core/um-actions-form.php +++ b/core/um-actions-form.php @@ -132,7 +132,7 @@ $form_id = $args['form_id']; $mode = $args['mode']; $fields = unserialize( $args['custom_fields'] ); - + foreach( $fields as $key => $array ) { if ( isset( $array['required'] ) && $array['required'] == 1 ) { @@ -286,4 +286,11 @@ } + if ( isset( $args['description'] ) ) { + $max_chars = um_get_option('profile_bio_maxchars'); + if ( strlen( utf8_decode( $args['description'] ) ) > $max_chars && $max_chars ) { + $ultimatemember->form->add_error('description', sprintf(__('Your user description must contain less than %s characters'), $max_chars ) ); + } + } + } \ No newline at end of file diff --git a/core/um-actions-profile.php b/core/um-actions-profile.php index 41f9124e..1af05d81 100644 --- a/core/um-actions-profile.php +++ b/core/um-actions-profile.php @@ -209,6 +209,10 @@
+ + fields->is_error('description') ) + echo $ultimatemember->fields->field_error( $ultimatemember->fields->show_error('description') ); ?> +
@@ -372,7 +376,7 @@ } if ( isset( $args['submitted']['description'] ) ) { - $to_update['description'] = $args['submitted']['description']; + $to_update['description'] = $ultimatemember->validation->remove_html( $args['submitted']['description'] ); } if ( is_array( $to_update ) ) { diff --git a/core/um-actions-user.php b/core/um-actions-user.php index 5b713266..fd84cfc8 100644 --- a/core/um-actions-user.php +++ b/core/um-actions-user.php @@ -1,28 +1,5 @@ mail->send( um_admin_email(), 'notification_deletion' ); - - // increase the num. of deleted accounts that day - $UM_deleted_users = get_option('um_deleted_users'); - if (!isset($UM_deleted_users[ date('Y-m-d') ] )){ - $UM_deleted_users[ date('Y-m-d') ] = 1; - } else { - $UM_deleted_users[ date('Y-m-d') ] = $UM_deleted_users[ date('Y-m-d') ] +1; - } - - update_option('um_deleted_users', $UM_deleted_users); - - } - add_action("delete_user", "um_notify_delete_user"); - /*** *** @listen to a new user creation in backend ***/ diff --git a/core/um-builtin.php b/core/um-builtin.php index 929e62ba..ba232dc0 100644 --- a/core/um-builtin.php +++ b/core/um-builtin.php @@ -128,8 +128,8 @@ class UM_Builtin { 'textarea' => array( 'name' => 'Textarea', - 'col1' => array('_title','_metakey','_help','_height','_max_chars','_max_words','_html'), - 'col2' => array('_label','_placeholder','_public','_roles','_default'), + 'col1' => array('_title','_metakey','_help','_height','_max_chars','_max_words'), + 'col2' => array('_label','_placeholder','_public','_roles','_default','_html'), 'col3' => array('_required','_editable','_icon'), 'validate' => array( '_title' => array( @@ -363,10 +363,6 @@ class UM_Builtin { 'mode' => 'required', 'error' => 'You must provide a title' ), - 'um_editor' => array( - 'mode' => 'required', - 'error' => 'You must add some content first' - ), ) ), @@ -413,7 +409,7 @@ class UM_Builtin { ) ), - 'group' => array( + /*'group' => array( 'name' => 'Field Group', 'col1' => array('_title','_max_entries'), 'col2' => array('_label','_public','_roles'), @@ -428,7 +424,7 @@ class UM_Builtin { 'error' => 'You must provide a label' ), ) - ), + ),*/ ); diff --git a/core/um-chart.php b/core/um-chart.php index a56b2e46..732772f2 100644 --- a/core/um-chart.php +++ b/core/um-chart.php @@ -55,29 +55,11 @@ class UM_Chart { data.addColumn('number', ''); datetime->get_last_days( $days ); - } - - if ($data == 'deleted_users'){ - $data_y = $ultimatemember->query->deleted_users_per_day( $days ); - } - + if (isset($data_y) && !empty($data_y)){ foreach($data_y as $key => $val){ - - if ($data == 'new_users'){ - $row_value = $ultimatemember->query->count_users_registered_on( $key ); - ?>data.addRow(['', ]);datetime->format( $key, 'm/d' ); - ?>data.addRow(['', ]);user->preview ) && $ultimatemember->user->preview ) { + if ( $data['type'] == 'password' ){ + return; + } + } /* Begin by field type */ diff --git a/core/um-form.php b/core/um-form.php index 36fd4efc..f0278336 100644 --- a/core/um-form.php +++ b/core/um-form.php @@ -79,7 +79,7 @@ class UM_Form { if ( $form_timestamp == '' ) wp_die( __('Hello, spam bot!') ); - if ( $live_timestamp - $form_timestamp < 5 ) + if ( $live_timestamp - $form_timestamp < 3 ) wp_die( __('Whoa, slow down! You\'re seeing this message because you tried to submit a form too fast and we think you might be a spam bot. If you are a real human being please wait a few seconds before submitting the form. Thanks!') ); } diff --git a/core/um-query.php b/core/um-query.php index afe7ab1a..bed63c2b 100644 --- a/core/um-query.php +++ b/core/um-query.php @@ -297,41 +297,5 @@ class UM_Query { return $roles; } - - /*** - *** @Number of users registered on specific day - ***/ - function count_users_registered_on( $date='' ){ - global $wpdb; - - // defaults to today - if( empty($date) ) - $date = date('Y-m-d'); - - $morning = new DateTime($date. ' 00:00:00'); - $night = new DateTime($date.' 23:59:59'); - $m = $morning->format('Y-m-d H:i:s'); - $n = $night->format('Y-m-d H:i:s'); - - $sql = $wpdb->prepare("SELECT wp_users.* FROM wp_users WHERE 1=1 AND CAST(user_registered AS DATE) BETWEEN %s AND %s ORDER BY user_login ASC",$m,$n); - - $users = $wpdb->get_results($sql); - - return $wpdb->num_rows; - } - - /*** - *** @Get deleted users count for last x days - ***/ - function deleted_users_per_day( $limit = 30 ){ - $option = get_option('um_deleted_users'); - if (is_array($option)){ - $slice = array_slice($option, 0, $limit); - $reverse = array_reverse($slice); - return $reverse; - } else { - return null; - } - } } \ No newline at end of file diff --git a/core/um-setup.php b/core/um-setup.php index 091407d5..fa22e5e7 100644 --- a/core/um-setup.php +++ b/core/um-setup.php @@ -40,7 +40,7 @@ class UM_Setup { '_um_search' => 0, '_um_userinfo_animate' => '1', '_um_directory_header' => __('{total_users} Members','ultimatemember'), - '_um_directory_no_users' => __('We are sorry. We cannot find any users who match your search criteria.','ultimatemember'), + '_um_directory_no_users' => __('Sorry, we cannot find any users who match your search criteria.','ultimatemember'), '_um_sortby' => 'user_registered_desc', '_um_profile_photo' => '1', '_um_cover_photos' => '1', @@ -85,6 +85,7 @@ class UM_Setup { '_um_secondary_btn_text' => '#666', '_um_profile_show_name' => 1, '_um_profile_show_bio' => 1, + '_um_profile_bio_maxchars' => 180, '_um_profile_role' => '0', '_um_profile_template' => 'profile', '_um_profile_max_width' => '1000px', diff --git a/core/um-user.php b/core/um-user.php index 92eed733..3d5f15a3 100644 --- a/core/um-user.php +++ b/core/um-user.php @@ -252,9 +252,17 @@ class UM_User { ***/ function approve(){ global $ultimatemember; + + if ( um_user('account_status') == 'awaiting_admin_review' ) { + $email_tpl = 'approved_email'; + } else { + $email_tpl = 'welcome_email'; + } + $this->set_status('approved'); $this->delete_meta('account_secret_hash'); - $ultimatemember->mail->send( um_user('user_email'), 'approved_email' ); + + $ultimatemember->mail->send( um_user('user_email'), $email_tpl ); } /*** @@ -282,6 +290,7 @@ class UM_User { function reject(){ global $ultimatemember; $this->set_status('rejected'); + $this->delete( false ); $ultimatemember->mail->send( um_user('user_email'), 'rejected_email' ); } @@ -297,10 +306,12 @@ class UM_User { /*** *** @delete user ***/ - function delete() { + function delete( $send_mail = true ) { global $ultimatemember; - $ultimatemember->mail->send( um_user('user_email'), 'deletion_email' ); + if ( $send_mail ) { + $ultimatemember->mail->send( um_user('user_email'), 'deletion_email' ); + } require_once( ABSPATH . 'wp-admin/includes/user.php' ); diff --git a/core/um-validation.php b/core/um-validation.php index 1001cb1b..a15c6bf5 100644 --- a/core/um-validation.php +++ b/core/um-validation.php @@ -10,6 +10,13 @@ class UM_Validation { } + /*** + *** @removes html from any string + ***/ + function remove_html($string) { + return wp_strip_all_tags( $string ); + } + /*** *** @normalize a string ***/ diff --git a/templates/password-reset.php b/templates/password-reset.php index a4f4b24e..d1a36efa 100644 --- a/templates/password-reset.php +++ b/templates/password-reset.php @@ -8,20 +8,18 @@ if ( !isset( $ultimatemember->password->reset_request ) ) { - do_action('um_reset_password_page_hidden_fields', $args ); - - do_action('um_reset_password_form', $args ); - - do_action("um_after_form_fields", $args); + do_action('um_reset_password_page_hidden_fields', $args ); + + do_action('um_reset_password_form', $args ); + + do_action("um_after_form_fields", $args); } else { echo '
'; - echo '

A password reset link has been sent to '. $ultimatemember->password->reset_request['user_email'] . ' for your '. um_get_option('site_name') . ' account.

'; + echo '

A password reset link has been sent to ' . $ultimatemember->password->reset_request['user_email'] . '. Please check your inbox!

'; - echo '

Please check your inbox!

'; - echo '
'; } diff --git a/um-config.php b/um-config.php index eb537804..0d3d7ddf 100644 --- a/um-config.php +++ b/um-config.php @@ -391,29 +391,29 @@ $this->sections[] = array( ), array( - 'id' => 'approved_email_on', + 'id' => 'welcome_email_on', 'type' => 'switch', - 'title' => __( 'Account Approved Email' ), + 'title' => __( 'Account Welcome Email' ), 'default' => 1, - 'desc' => 'Whether to send the user an email when his account is approved', + 'desc' => 'Whether to send the user an email when his account is automatically approved', ), array( - 'id' => 'approved_email_sub', + 'id' => 'welcome_email_sub', 'type' => 'text', - 'title' => __( 'Account Approved Email' ), + 'title' => __( 'Account Welcome Email' ), 'subtitle' => __( 'Subject Line' ), - 'default' => 'Your account at {site_name} is now active', - 'required' => array( 'approved_email_on', '=', 1 ), + 'default' => 'Welcome to {site_name}!', + 'required' => array( 'welcome_email_on', '=', 1 ), 'desc' => 'This is the subject line of the e-mail', ), array( - 'id' => 'approved_email', + 'id' => 'welcome_email', 'type' => 'textarea', - 'title' => __( 'Account Approved Email' ), + 'title' => __( 'Account Welcome Email' ), 'subtitle' => __( 'Message Body' ), - 'required' => array( 'approved_email_on', '=', 1 ), + 'required' => array( 'welcome_email_on', '=', 1 ), 'default' => 'Hi {display_name},' . "\r\n\r\n" . 'Thank you for signing up with {site_name}! Your account is now active.' . "\r\n\r\n" . 'To login please visit the following url:' . "\r\n\r\n" . @@ -425,7 +425,7 @@ $this->sections[] = array( 'Thanks,' . "\r\n" . '{site_name}', ), - + array( 'id' => 'checkmail_email_on', 'type' => 'switch', @@ -457,7 +457,7 @@ $this->sections[] = array( 'Thanks,' . "\r\n" . '{site_name}', ), - + array( 'id' => 'pending_email_on', 'type' => 'switch', @@ -489,7 +489,43 @@ $this->sections[] = array( 'Thanks,' . "\r\n" . '{site_name}', ), + + array( + 'id' => 'approved_email_on', + 'type' => 'switch', + 'title' => __( 'Account Approved Email' ), + 'default' => 1, + 'desc' => 'Whether to send the user an email when his account is approved', + ), + + array( + 'id' => 'approved_email_sub', + 'type' => 'text', + 'title' => __( 'Account Approved Email' ), + 'subtitle' => __( 'Subject Line' ), + 'default' => 'Your account at {site_name} is now active', + 'required' => array( 'approved_email_on', '=', 1 ), + 'desc' => 'This is the subject line of the e-mail', + ), + array( + 'id' => 'approved_email', + 'type' => 'textarea', + 'title' => __( 'Account Approved Email' ), + 'subtitle' => __( 'Message Body' ), + 'required' => array( 'approved_email_on', '=', 1 ), + 'default' => 'Hi {display_name},' . "\r\n\r\n" . + 'Thank you for signing up with {site_name}! Your account has been approved and is now active.' . "\r\n\r\n" . + 'To login please visit the following url:' . "\r\n\r\n" . + '{login_url}' . "\r\n\r\n" . + 'Your account e-mail: {email}' . "\r\n" . + 'Your account username: {username}' . "\r\n" . + 'Your account password: {password}' . "\r\n\r\n" . + 'If you have any problems, please contact us at {admin_email}' . "\r\n\r\n" . + 'Thanks,' . "\r\n" . + '{site_name}', + ), + array( 'id' => 'rejected_email_on', 'type' => 'switch', @@ -1217,6 +1253,15 @@ $this->sections[] = array( 'desc' => 'Switch on/off the user description on profile header', ), + array( + 'id' => 'profile_bio_maxchars', + 'type' => 'text', + 'title' => __( 'User description maximum chars' ), + 'default' => um_get_metadefault('profile_bio_maxchars'), + 'desc' => 'Maximum number of characters to allow in user description field in header.', + 'required' => array( 'profile_show_bio', '=', 1 ), + ), + ) );