From e965b1b3c156882fbe2533f1ee4f87e04946d43d Mon Sep 17 00:00:00 2001 From: nikitasinelnikov Date: Mon, 6 Jan 2020 11:05:32 +0200 Subject: [PATCH] - code formatted; - added handlers when you create UM custom fields; --- includes/admin/core/class-admin-builder.php | 18 +- includes/admin/core/class-admin-settings.php | 161 ++++++++++++------ .../core/packages/2.1.3-beta3/functions.php | 13 +- includes/core/class-fields.php | 8 + includes/core/class-member-directory-meta.php | 117 ++++++++++--- includes/core/class-member-directory.php | 108 ++---------- includes/core/class-user.php | 148 ++++++++++++++++ 7 files changed, 389 insertions(+), 184 deletions(-) diff --git a/includes/admin/core/class-admin-builder.php b/includes/admin/core/class-admin-builder.php index 9e565744..78f276cc 100644 --- a/includes/admin/core/class-admin-builder.php +++ b/includes/admin/core/class-admin-builder.php @@ -635,7 +635,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) { * } * ?> */ - $array = apply_filters( "um_admin_pre_save_fields_hook", $array ); + $array = apply_filters( 'um_admin_pre_save_fields_hook', $array ); /** * UM hook @@ -666,23 +666,23 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) { */ extract( $array['post'] ); - if ( empty( $output['error'] ) ){ + if ( empty( $output['error'] ) ) { $save = array(); $save[ $_metakey ] = null; - foreach( $array['post'] as $key => $val){ + foreach ( $array['post'] as $key => $val ) { - if ( substr( $key, 0, 1) === '_' && $val != '' ) { // field attribute + if ( substr( $key, 0, 1 ) === '_' && $val != '' ) { // field attribute $new_key = ltrim ($key,'_'); if ( $new_key == 'options' ) { //$save[ $_metakey ][$new_key] = explode(PHP_EOL, $val); - $save[ $_metakey ][$new_key] = preg_split('/[\r\n]+/', $val, -1, PREG_SPLIT_NO_EMPTY); + $save[ $_metakey ][ $new_key ] = preg_split( '/[\r\n]+/', $val, -1, PREG_SPLIT_NO_EMPTY ); } else { - $save[ $_metakey ][$new_key] = $val; + $save[ $_metakey ][ $new_key ] = $val; } - } else if ( strstr( $key, 'um_editor' ) ) { + } elseif ( strstr( $key, 'um_editor' ) ) { $save[ $_metakey ]['content'] = $val; } @@ -711,7 +711,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) { * } * ?> */ - $field_args = apply_filters("um_admin_pre_save_field_to_form", $field_args ); + $field_args = apply_filters( 'um_admin_pre_save_field_to_form', $field_args ); UM()->fields()->update_field( $field_ID, $field_args, $post_id ); @@ -735,7 +735,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) { * } * ?> */ - $field_args = apply_filters("um_admin_pre_save_field_to_db", $field_args ); + $field_args = apply_filters( 'um_admin_pre_save_field_to_db', $field_args ); if ( ! isset( $array['args']['form_only'] ) ) { if ( ! isset( UM()->builtin()->predefined_fields[ $field_ID ] ) ) { diff --git a/includes/admin/core/class-admin-settings.php b/includes/admin/core/class-admin-settings.php index acb181eb..a33e5c79 100644 --- a/includes/admin/core/class-admin-settings.php +++ b/includes/admin/core/class-admin-settings.php @@ -33,6 +33,9 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { var $need_change_permalinks; + var $gravatar_changed = false; + + /** * Admin_Settings constructor. */ @@ -524,79 +527,79 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { 'placeholder' => __( 'Select...', 'ultimate-member' ), ), array( - 'id' => 'display_name', - 'type' => 'select', + 'id' => 'display_name', + 'type' => 'select', 'size' => 'medium', - 'label' => __( 'User Display Name','ultimate-member' ), - 'tooltip' => __( 'This is the name that will be displayed for users on the front end of your site. Default setting uses first/last name as display name if it exists','ultimate-member' ), - 'options' => array( - 'default' => __('Default WP Display Name','ultimate-member'), - 'nickname' => __('Nickname','ultimate-member'), - 'username' => __('Username','ultimate-member'), - 'full_name' => __('First name & last name','ultimate-member'), - 'sur_name' => __('Last name & first name','ultimate-member'), - 'initial_name' => __('First name & first initial of last name','ultimate-member'), - 'initial_name_f' => __('First initial of first name & last name','ultimate-member'), - 'first_name' => __('First name only','ultimate-member'), - 'field' => __('Custom field(s)','ultimate-member'), + 'label' => __( 'User Display Name', 'ultimate-member' ), + 'tooltip' => __( 'This is the name that will be displayed for users on the front end of your site. Default setting uses first/last name as display name if it exists', 'ultimate-member' ), + 'options' => array( + 'default' => __( 'Default WP Display Name', 'ultimate-member' ), + 'nickname' => __( 'Nickname', 'ultimate-member' ), + 'username' => __( 'Username', 'ultimate-member' ), + 'full_name' => __( 'First name & last name', 'ultimate-member' ), + 'sur_name' => __( 'Last name & first name', 'ultimate-member' ), + 'initial_name' => __( 'First name & first initial of last name', 'ultimate-member' ), + 'initial_name_f' => __( 'First initial of first name & last name', 'ultimate-member' ), + 'first_name' => __( 'First name only', 'ultimate-member' ), + 'field' => __( 'Custom field(s)', 'ultimate-member' ), ), - 'placeholder' => __('Select...'), + 'placeholder' => __( 'Select...', 'ultimate-member' ), ), array( - 'id' => 'display_name_field', - 'type' => 'text', - 'label' => __( 'Display Name Custom Field(s)','ultimate-member' ), - 'tooltip' => __('Specify the custom field meta key or custom fields seperated by comma that you want to use to display users name on the frontend of your site','ultimate-member'), + 'id' => 'display_name_field', + 'type' => 'text', + 'label' => __( 'Display Name Custom Field(s)', 'ultimate-member' ), + 'tooltip' => __( 'Specify the custom field meta key or custom fields seperated by comma that you want to use to display users name on the frontend of your site', 'ultimate-member' ), 'conditional' => array( 'display_name', '=', 'field' ), ), array( - 'id' => 'author_redirect', - 'type' => 'checkbox', - 'label' => __( 'Automatically redirect author page to their profile?','ultimate-member'), - 'tooltip' => __('If enabled, author pages will automatically redirect to the user\'s profile page','ultimate-member'), + 'id' => 'author_redirect', + 'type' => 'checkbox', + 'label' => __( 'Automatically redirect author page to their profile?', 'ultimate-member' ), + 'tooltip' => __( 'If enabled, author pages will automatically redirect to the user\'s profile page', 'ultimate-member' ), ), array( - 'id' => 'members_page', - 'type' => 'checkbox', - 'label' => __( 'Enable Members Directory','ultimate-member' ), - 'tooltip' => __('Control whether to enable or disable member directories on this site','ultimate-member'), + 'id' => 'members_page', + 'type' => 'checkbox', + 'label' => __( 'Enable Members Directory', 'ultimate-member' ), + 'tooltip' => __( 'Control whether to enable or disable member directories on this site', 'ultimate-member' ), ), array( - 'id' => 'use_gravatars', - 'type' => 'checkbox', - 'label' => __( 'Use Gravatars?','ultimate-member' ), - 'tooltip' => __('Do you want to use gravatars instead of the default plugin profile photo (If the user did not upload a custom profile photo / avatar)','ultimate-member'), + 'id' => 'use_gravatars', + 'type' => 'checkbox', + 'label' => __( 'Use Gravatars?', 'ultimate-member' ), + 'tooltip' => __( 'Do you want to use gravatars instead of the default plugin profile photo (If the user did not upload a custom profile photo / avatar)', 'ultimate-member' ), ), array( - 'id' => 'use_um_gravatar_default_builtin_image', - 'type' => 'select', - 'label' => __( 'Use Gravatar builtin image','ultimate-member' ), - 'tooltip' => __( 'Gravatar has a number of built in options which you can also use as defaults','ultimate-member' ), - 'options' => array( - 'default' => __('Default','ultimate-member'), - '404' => __('404 ( File Not Found response )','ultimate-member'), - 'mm' => __('Mystery Man','ultimate-member'), - 'identicon' => __('Identicon','ultimate-member'), - 'monsterid' => __('Monsterid','ultimate-member'), - 'wavatar' => __('Wavatar','ultimate-member'), - 'retro' => __('Retro','ultimate-member'), - 'blank' => __('Blank ( a transparent PNG image )','ultimate-member'), + 'id' => 'use_um_gravatar_default_builtin_image', + 'type' => 'select', + 'label' => __( 'Use Gravatar builtin image', 'ultimate-member' ), + 'tooltip' => __( 'Gravatar has a number of built in options which you can also use as defaults', 'ultimate-member' ), + 'options' => array( + 'default' => __( 'Default', 'ultimate-member' ), + '404' => __( '404 ( File Not Found response )', 'ultimate-member' ), + 'mm' => __( 'Mystery Man', 'ultimate-member' ), + 'identicon' => __( 'Identicon', 'ultimate-member' ), + 'monsterid' => __( 'Monsterid', 'ultimate-member' ), + 'wavatar' => __( 'Wavatar', 'ultimate-member' ), + 'retro' => __( 'Retro', 'ultimate-member' ), + 'blank' => __( 'Blank ( a transparent PNG image )', 'ultimate-member' ), ), - 'conditional' => array( 'use_gravatars', '=', 1 ), + 'conditional' => array( 'use_gravatars', '=', 1 ), 'size' => 'medium' ), array( - 'id' => 'use_um_gravatar_default_image', - 'type' => 'checkbox', - 'label' => __( 'Use Default plugin avatar as Gravatar\'s Default avatar','ultimate-member' ), - 'tooltip' => __('Do you want to use the plugin default avatar instead of the gravatar default photo (If the user did not upload a custom profile photo / avatar)','ultimate-member'), - 'conditional' => array( 'use_um_gravatar_default_builtin_image', '=', 'default' ), + 'id' => 'use_um_gravatar_default_image', + 'type' => 'checkbox', + 'label' => __( 'Use Default plugin avatar as Gravatar\'s Default avatar', 'ultimate-member' ), + 'tooltip' => __( 'Do you want to use the plugin default avatar instead of the gravatar default photo (If the user did not upload a custom profile photo / avatar)', 'ultimate-member' ), + 'conditional' => array( 'use_um_gravatar_default_builtin_image', '=', 'default' ), ), array( - 'id' => 'reset_require_strongpass', - 'type' => 'checkbox', - 'label' => __( 'Require a strong password? (when user resets password only)','ultimate-member' ), - 'tooltip' => __('Enable or disable a strong password rules on password reset and change procedure','ultimate-member'), + 'id' => 'reset_require_strongpass', + 'type' => 'checkbox', + 'label' => __( 'Require a strong password? (when user resets password only)', 'ultimate-member' ), + 'tooltip' => __( 'Enable or disable a strong password rules on password reset and change procedure', 'ultimate-member' ), ) ) ), @@ -1781,6 +1784,15 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { $this->need_change_permalinks = true; } } + + // set variable if gravatar settings were changed + // update for um_member_directory_data metakey + if ( isset( $_POST['um_options']['use_gravatars'] ) ) { + $use_gravatar = UM()->options()->get( 'use_gravatars' ); + if ( ( empty( $use_gravatar ) && ! empty( $_POST['um_options']['use_gravatars'] ) ) || ( ! empty( $use_gravatar ) && empty( $_POST['um_options']['use_gravatars'] ) ) ) { + $this->gravatar_changed = true; + } + } } @@ -1830,6 +1842,47 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { } } } + + + // update for um_member_directory_data metakey + if ( isset( $_POST['um_options']['use_gravatars'] ) ) { + if ( $this->gravatar_changed ) { + global $wpdb; + + if ( ! empty( $_POST['um_options']['use_gravatars'] ) ) { + + $results = $wpdb->get_col( + "SELECT u.ID FROM {$wpdb->users} AS u + LEFT JOIN {$wpdb->usermeta} AS um ON ( um.user_id = u.ID AND um.meta_key = 'synced_gravatar_hashed_id' ) + LEFT JOIN {$wpdb->usermeta} AS um2 ON ( um2.user_id = u.ID AND um2.meta_key = 'um_member_directory_data' ) + WHERE um.meta_value != '' AND um.meta_value IS NOT NULL AND + um2.meta_value LIKE '%s:13:\"profile_photo\";b:0;%'" + ); + + } else { + + $results = $wpdb->get_col( + "SELECT u.ID FROM {$wpdb->users} AS u + LEFT JOIN {$wpdb->usermeta} AS um ON ( um.user_id = u.ID AND ( um.meta_key = 'synced_profile_photo' || um.meta_key = 'profile_photo' ) ) + LEFT JOIN {$wpdb->usermeta} AS um2 ON ( um2.user_id = u.ID AND um2.meta_key = 'um_member_directory_data' ) + WHERE ( um.meta_value IS NULL OR um.meta_value = '' ) AND + um2.meta_value LIKE '%s:13:\"profile_photo\";b:1;%'" + ); + + } + + if ( ! empty( $results ) ) { + foreach ( $results as $user_id ) { + $md_data = get_user_meta( $user_id, 'um_member_directory_data', true ); + if ( ! empty( $md_data ) ) { + $md_data['profile_photo'] = ! empty( $_POST['um_options']['use_gravatars'] ); + update_user_meta( $user_id, 'um_member_directory_data', $md_data ); + } + } + } + } + } + } elseif ( isset( $_POST['um_options']['member_directory_own_table'] ) ) { if ( empty( $_POST['um_options']['member_directory_own_table'] ) ) { global $wpdb; diff --git a/includes/admin/core/packages/2.1.3-beta3/functions.php b/includes/admin/core/packages/2.1.3-beta3/functions.php index 1323ec82..c463e453 100644 --- a/includes/admin/core/packages/2.1.3-beta3/functions.php +++ b/includes/admin/core/packages/2.1.3-beta3/functions.php @@ -84,15 +84,18 @@ function um_upgrade_metadata_per_user213beta3() { break; case 'synced_gravatar_hashed_id': - case 'synced_profile_photo': - - if ( empty( $users_map[ $metadatarow['user_id'] ]['profile_photo'] ) ) { - $users_map[ $metadatarow['user_id'] ]['profile_photo'] = ! empty( $metadatarow['meta_value'] ); + if ( UM()->options()->get( 'use_gravatars' ) ) { + if ( empty( $users_map[ $metadatarow['user_id'] ]['profile_photo'] ) ) { + $users_map[ $metadatarow['user_id'] ]['profile_photo'] = ! empty( $metadatarow['meta_value'] ); + } } break; + case 'synced_profile_photo': case 'profile_photo': - $users_map[ $metadatarow['user_id'] ]['profile_photo'] = ! empty( $metadatarow['meta_value'] ); + if ( empty( $users_map[ $metadatarow['user_id'] ]['profile_photo'] ) ) { + $users_map[ $metadatarow['user_id'] ]['profile_photo'] = ! empty( $metadatarow['meta_value'] ); + } break; case 'cover_photo': $users_map[ $metadatarow['user_id'] ]['cover_photo'] = ! empty( $metadatarow['meta_value'] ); diff --git a/includes/core/class-fields.php b/includes/core/class-fields.php index 774ea3ef..56018a40 100644 --- a/includes/core/class-fields.php +++ b/includes/core/class-fields.php @@ -150,6 +150,8 @@ if ( ! class_exists( 'um\core\Fields' ) ) { unset( $fields[ $id ]['in_group'] ); unset( $fields[ $id ]['position'] ); + do_action( 'um_add_new_field', $id ); + update_option( 'um_fields', $fields ); } @@ -248,6 +250,9 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $fields = UM()->builtin()->saved_fields; if ( isset( $fields[ $id ] ) ) { unset( $fields[ $id ] ); + + do_action( 'um_delete_custom_field', $id ); + update_option( 'um_fields', $fields ); } } @@ -354,6 +359,9 @@ if ( ! class_exists( 'um\core\Fields' ) ) { unset( $all_fields[ $new_metakey ]['in_group'] ); unset( $all_fields[ $new_metakey ]['position'] ); + + do_action( 'um_add_new_field', $new_metakey ); + UM()->query()->update_attr( 'custom_fields', $form_id, $fields ); update_option( 'um_fields', $all_fields ); } diff --git a/includes/core/class-member-directory-meta.php b/includes/core/class-member-directory-meta.php index 4ec8f659..493f1781 100644 --- a/includes/core/class-member-directory-meta.php +++ b/includes/core/class-member-directory-meta.php @@ -33,9 +33,92 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) { add_action( 'updated_user_meta', array( &$this, 'on_update_usermeta' ), 10, 4 ); add_action( 'added_user_meta', array( &$this, 'on_update_usermeta' ), 10, 4 ); + add_action( 'deleted_user_meta', array( &$this, 'on_delete_usermeta' ), 10, 4 ); + + add_action( 'um_add_new_field', array( &$this, 'on_new_field_added' ), 10, 1 ); + add_action( 'um_delete_custom_field', array( &$this, 'on_delete_custom_field' ), 10, 1 ); } + /** + * Delete custom field and metakey from UM usermeta table + * + * @param $metakey + */ + function on_delete_custom_field( $metakey ) { + $metakeys = get_option( 'um_usermeta_fields', array() ); + if ( in_array( $metakey, $metakeys ) ) { + unset( $metakeys[ array_search( $metakey, $metakeys ) ] ); + + global $wpdb; + + $wpdb->delete( + "{$wpdb->prefix}um_metadata", + array( + 'um_key' => $metakey + ), + array( + '%s' + ) + ); + + update_option( 'um_usermeta_fields', $metakeys ); + } + } + + + /** + * Add metakey to usermeta fields + * + * @param $metakey + */ + function on_new_field_added( $metakey ) { + $metakeys = get_option( 'um_usermeta_fields', array() ); + if ( ! in_array( $metakey, $metakeys ) ) { + $metakeys[] = $metakey; + update_option( 'um_usermeta_fields', $metakeys ); + } + } + + + /** + * When you delete usermeta - remove row from um_metadata + * + * @param int|array $meta_ids + * @param int $object_id + * @param string $meta_key + * @param mixed $_meta_value + */ + function on_delete_usermeta( $meta_ids, $object_id, $meta_key, $_meta_value ) { + $metakeys = get_option( 'um_usermeta_fields', array() ); + if ( ! in_array( $meta_key, $metakeys ) ) { + return; + } + + global $wpdb; + + $wpdb->delete( + "{$wpdb->prefix}um_metadata", + array( + 'user_id' => $object_id, + 'um_key' => $meta_key + ), + array( + '%d', + '%s' + ) + ); + } + + + /** + * When you add/update usermeta - add/update row from um_metadata + * + * @param int $meta_id + * @param int $object_id + * @param string $meta_key + * @param mixed $_meta_value + */ function on_update_usermeta( $meta_id, $object_id, $meta_key, $_meta_value ) { $metakeys = get_option( 'um_usermeta_fields', array() ); @@ -45,7 +128,15 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) { global $wpdb; - $result = $wpdb->get_var( $wpdb->prepare( "SELECT umeta_id FROM {$wpdb->prefix}um_metadata WHERE user_id = %d AND um_key = %s LIMIT 1", $object_id, $meta_key ) ); + $result = $wpdb->get_var( $wpdb->prepare( + "SELECT umeta_id + FROM {$wpdb->prefix}um_metadata + WHERE user_id = %d AND + um_key = %s + LIMIT 1", + $object_id, + $meta_key + ) ); if ( empty( $result ) ) { $wpdb->insert( @@ -68,8 +159,7 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) { 'um_value' => $_meta_value, ), array( - 'umeta_id' => $result, - 'um_key' => $meta_key, + 'umeta_id' => $result, ), array( '%s', @@ -79,22 +169,6 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) { ) ); } - -// $wpdb->update( -// "{$wpdb->prefix}um_metadata", -// array( -// $meta_key => $_meta_value, -// ), -// array( -// 'user_id' => $object_id, -// ), -// array( -// '%s' -// ), -// array( -// '%d' -// ) -// ); } @@ -140,11 +214,6 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) { $profile_photo_where = ''; if ( $directory_data['has_profile_photo'] == 1 ) { -// $gravatars_query = ''; -// if ( UM()->options()->get( 'use_gravatars' ) ) { -// $gravatars_query = " OR ( umm_general.synced_gravatar_hashed_id != '' AND umm_general.synced_gravatar_hashed_id IS NOT NULL )"; -// } - $profile_photo_where = " AND umm_general.um_value LIKE '%s:13:\"profile_photo\";b:1;%'"; } diff --git a/includes/core/class-member-directory.php b/includes/core/class-member-directory.php index b33c95ad..11ac2533 100644 --- a/includes/core/class-member-directory.php +++ b/includes/core/class-member-directory.php @@ -95,40 +95,9 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { add_filter( 'init', array( &$this, 'init_filter_types' ), 2 ); add_action( 'template_redirect', array( &$this, 'access_members' ), 555 ); - - - //add_action( 'updated_user_meta', array( &$this, 'on_update_usermeta' ), 10, 4 ); } - function on_update_usermeta( $meta_id, $object_id, $meta_key, $_meta_value ) { - - //$object_id //userID - //$meta_key // meta_key - //$_meta_value // value - - $metakeys = get_option( 'um_usermeta_fields', array() ); - - - - - global $wpdb; - - $charset_collate = $wpdb->get_charset_collate(); - - $sql = "CREATE TABLE {$wpdb->prefix}um_followers ( -user_id int(11) unsigned NOT NULL auto_increment, -time datetime NOT NULL DEFAULT '0000-00-00 00:00:00', -user_id1 int(11) unsigned NOT NULL, -user_id2 int(11) unsigned NOT NULL, -PRIMARY KEY (id) -) $charset_collate;"; - - require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); - dbDelta( $sql ); - - } - /** * Getting member directory post ID via hash * Hash is unique attr, which we use visible at frontend @@ -948,9 +917,9 @@ PRIMARY KEY (id) } $this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( array( - 'key' => 'account_status', - 'value' => 'approved', - 'compare' => '=' + 'key' => 'um_member_directory_data', + 'value' => 's:14:"account_status";s:8:"approved";', + 'compare' => 'LIKE' ) ) ); } @@ -987,38 +956,11 @@ PRIMARY KEY (id) return; } - $meta_query = array( - 'relation' => 'OR', - array( - 'key' => 'hide_in_members', - 'compare' => 'NOT EXISTS' - ), - ); - - - if ( __( 'Yes', 'ultimate-member' ) == 'Yes' ) { - $meta_query[] = array( - 'key' => 'hide_in_members', - 'value' => 'Yes', - 'compare' => 'NOT LIKE', - ); - } else { - $meta_query[] = array( - 'relation' => 'AND', - array( - 'key' => 'hide_in_members', - 'value' => __( 'Yes', 'ultimate-member' ), - 'compare' => 'NOT LIKE' - ), - array( - 'key' => 'hide_in_members', - 'value' => 'Yes', - 'compare' => 'NOT LIKE' - ), - ); - } - - $this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $meta_query ) ); + $this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( array( + 'key' => 'um_member_directory_data', + 'value' => 's:15:"hide_in_members";b:0;', + 'compare' => 'LIKE' + ) ) ); } @@ -1063,29 +1005,11 @@ PRIMARY KEY (id) */ function show_only_with_avatar( $directory_data ) { if ( $directory_data['has_profile_photo'] == 1 ) { - $meta_query = array( - 'relation' => 'OR', - array( - 'key' => 'synced_profile_photo', // addons - 'value' => '', - 'compare' => '!=' - ), - array( - 'key' => 'profile_photo', // from upload form - 'value' => '', - 'compare' => '!=' - ) - ); - - if ( UM()->options()->get( 'use_gravatars' ) ) { - $meta_query[] = array( - 'key' => 'synced_gravatar_hashed_id', // gravatar - 'value' => '', - 'compare' => '!=' - ); - } - - $this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $meta_query ) ); + $this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( array( + 'key' => 'um_member_directory_data', + 'value' => 's:13:"profile_photo";b:1;', + 'compare' => 'LIKE' + ) ) ); } } @@ -1098,9 +1022,9 @@ PRIMARY KEY (id) function show_only_with_cover( $directory_data ) { if ( $directory_data['has_cover_photo'] == 1 ) { $this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( array( - 'key' => 'cover_photo', - 'value' => '', - 'compare' => '!=' + 'key' => 'um_member_directory_data', + 'value' => 's:11:"cover_photo";b:1;', + 'compare' => 'LIKE' ) ) ); } } diff --git a/includes/core/class-user.php b/includes/core/class-user.php index de393acd..922d9276 100644 --- a/includes/core/class-user.php +++ b/includes/core/class-user.php @@ -93,6 +93,154 @@ if ( ! class_exists( 'um\core\User' ) ) { } else { add_action( 'delete_user', array( &$this, 'delete_user_handler' ), 10, 1 ); } + + + add_action( 'updated_user_meta', array( &$this, 'on_update_usermeta' ), 10, 4 ); + add_action( 'added_user_meta', array( &$this, 'on_update_usermeta' ), 10, 4 ); + + add_action( 'deleted_user_meta', array( &$this, 'on_delete_usermeta' ), 10, 4 ); + } + + + /** + * When you delete usermeta connected with member directory - reset it to default value + * + * @param int|array $meta_ids + * @param int $object_id + * @param string $meta_key + * @param mixed $_meta_value + */ + function on_delete_usermeta( $meta_ids, $object_id, $meta_key, $_meta_value ) { + $metakeys = array( 'account_status', 'hide_in_members', 'synced_gravatar_hashed_id', 'synced_profile_photo', 'profile_photo', 'cover_photo', '_um_verified' ); + if ( ! in_array( $meta_key, $metakeys ) ) { + return; + } + + $md_data = get_user_meta( $object_id, 'um_member_directory_data', true ); + if ( empty( $md_data ) ) { + $md_data = array( + 'account_status' => 'approved', + 'hide_in_members' => false, + 'profile_photo' => false, + 'cover_photo' => false, + 'verified' => false, + ); + } + + switch ( $meta_key ) { + case 'account_status': + $md_data['account_status'] = 'approved'; + break; + case 'hide_in_members': + $md_data['hide_in_members'] = false; + break; + case 'synced_gravatar_hashed_id': + if ( UM()->options()->get( 'use_gravatars' ) ) { + $profile_photo = get_user_meta( $object_id, 'profile_photo', true ); + $synced_profile_photo = get_user_meta( $object_id, 'synced_profile_photo', true ); + + $md_data['profile_photo'] = ! empty( $profile_photo ) || ! empty( $synced_profile_photo ); + } + + break; + case 'synced_profile_photo': + $profile_photo = get_user_meta( $object_id, 'profile_photo', true ); + + $synced_gravatar_hashed_id = false; + if ( UM()->options()->get( 'use_gravatars' ) ) { + $synced_gravatar_hashed_id = get_user_meta( $object_id, 'synced_gravatar_hashed_id', true ); + } + + $md_data['profile_photo'] = ! empty( $profile_photo ) || ! empty( $synced_gravatar_hashed_id ); + break; + case 'profile_photo': + $synced_profile_photo = get_user_meta( $object_id, 'synced_profile_photo', true ); + + $synced_gravatar_hashed_id = false; + if ( UM()->options()->get( 'use_gravatars' ) ) { + $synced_gravatar_hashed_id = get_user_meta( $object_id, 'synced_gravatar_hashed_id', true ); + } + + $md_data['profile_photo'] = ! empty( $synced_profile_photo ) || ! empty( $synced_gravatar_hashed_id ); + break; + case 'cover_photo': + $md_data['cover_photo'] = false; + break; + case '_um_verified': + $md_data['verified'] = false; + break; + } + + update_user_meta( $object_id, 'um_member_directory_data', $md_data ); + } + + + /** + * When you add/update usermeta connected with member directories - set this data to member directory metakey + * + * @param int $meta_id + * @param int $object_id + * @param string $meta_key + * @param mixed $_meta_value + */ + function on_update_usermeta( $meta_id, $object_id, $meta_key, $_meta_value ) { + + $metakeys = array( 'account_status', 'hide_in_members', 'synced_gravatar_hashed_id', 'synced_profile_photo', 'profile_photo', 'cover_photo', '_um_verified' ); + if ( ! in_array( $meta_key, $metakeys ) ) { + return; + } + + $md_data = get_user_meta( $object_id, 'um_member_directory_data', true ); + if ( empty( $md_data ) ) { + $md_data = array( + 'account_status' => 'approved', + 'hide_in_members' => false, + 'profile_photo' => false, + 'cover_photo' => false, + 'verified' => false, + ); + } + + switch ( $meta_key ) { + case 'account_status': + $md_data['account_status'] = $_meta_value; + break; + case 'hide_in_members': + + $hide_in_members = false; + if ( ! empty( $_meta_value ) ) { + if ( $_meta_value == 'Yes' || $_meta_value == __( 'Yes', 'ultimate-member' ) || + $_meta_value == serialize( array( 'Yes' ) ) || $_meta_value == serialize( array( __( 'Yes', 'ultimate-member' ) ) ) ) { + $hide_in_members = true; + } + } + + $md_data['hide_in_members'] = $hide_in_members; + + break; + case 'synced_gravatar_hashed_id': + if ( UM()->options()->get( 'use_gravatars' ) ) { + if ( empty( $md_data['profile_photo'] ) ) { + $md_data['profile_photo'] = ! empty( $_meta_value ); + } + } + + break; + case 'synced_profile_photo': + case 'profile_photo': + if ( empty( $md_data['profile_photo'] ) ) { + $md_data['profile_photo'] = ! empty( $_meta_value ); + } + break; + case 'cover_photo': + $md_data['cover_photo'] = ! empty( $_meta_value ); + break; + case '_um_verified': + $md_data['verified'] = $_meta_value == 'verified' ? true : false; + break; + } + + update_user_meta( $object_id, 'um_member_directory_data', $md_data ); }