From 47e6fd8d7a89592e62b242e44351d39a44982e50 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Tue, 5 Sep 2023 10:35:04 +0300 Subject: [PATCH 01/81] - updated versions --- readme.txt | 4 ++++ ultimate-member.php | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/readme.txt b/readme.txt index d611a68a..fbf8212f 100644 --- a/readme.txt +++ b/readme.txt @@ -166,6 +166,10 @@ No specific extensions are needed. But we highly recommended keep active these P IMPORTANT: PLEASE UPDATE THE PLUGIN TO AT LEAST VERSION 2.6.7 IMMEDIATELY. VERSION 2.6.7 PATCHES SECURITY PRIVILEGE ESCALATION VULNERABILITY. PLEASE SEE [THIS ARTICLE](https://docs.ultimatemember.com/article/1866-security-incident-update-and-recommended-actions) FOR MORE INFORMATION += 2.6.12: September xx, 2023 = + + + = 2.6.11: September 06, 2023 = * Bugfixes: diff --git a/ultimate-member.php b/ultimate-member.php index 5e8517cd..d34df4bc 100644 --- a/ultimate-member.php +++ b/ultimate-member.php @@ -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: 2.6.11 + * Version: 2.6.12-alpha * Author: Ultimate Member * Author URI: http://ultimatemember.com/ * Text Domain: ultimate-member From 77d3ad9b5662285d48eaaf673a38852b3af00c51 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Sat, 9 Sep 2023 02:21:15 +0300 Subject: [PATCH 02/81] - added hash type for the user permalink like: http://localhost:8000/user/~b866ebabacc30f06c1/; - wpcs + documented new hooks; --- includes/admin/core/class-admin-settings.php | 15 +- includes/core/class-permalinks.php | 26 +- includes/core/class-rewrite.php | 204 ++++++--------- includes/core/class-user.php | 259 +++++++++++------- includes/core/um-filters-user.php | 262 +++++++------------ 5 files changed, 363 insertions(+), 403 deletions(-) diff --git a/includes/admin/core/class-admin-settings.php b/includes/admin/core/class-admin-settings.php index 29b62c94..cabdcb26 100644 --- a/includes/admin/core/class-admin-settings.php +++ b/includes/admin/core/class-admin-settings.php @@ -1019,6 +1019,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { 'name_dash' => __( 'First and Last Name with \'-\'', 'ultimate-member' ), 'name_plus' => __( 'First and Last Name with \'+\'', 'ultimate-member' ), 'user_id' => __( 'User ID', 'ultimate-member' ), + 'hash' => __( 'Unique hash string', 'ultimate-member' ), ), 'placeholder' => __( 'Select...', 'ultimate-member' ), ), @@ -2439,9 +2440,11 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { } elseif ( ! empty( $_POST['um_options']['permalink_base'] ) ) { if ( ! empty( $this->need_change_permalinks ) ) { - $users = get_users( array( - 'fields' => 'ids', - ) ); + $users = get_users( + array( + 'fields' => 'ids', + ) + ); if ( ! empty( $users ) ) { foreach ( $users as $user_id ) { UM()->user()->generate_profile_slug( $user_id ); @@ -3701,12 +3704,12 @@ Use Only Cookies: options()->get( 'permalink_base' ); $user_id = $wpdb->get_var( - "SELECT user_id - FROM {$wpdb->usermeta} - WHERE meta_key = 'um_user_profile_url_slug_{$permalink_base}' AND - meta_value = '{$slug}' - ORDER BY umeta_id ASC - LIMIT 1" + $wpdb->prepare( + "SELECT user_id + FROM {$wpdb->usermeta} + WHERE meta_key = %s AND + meta_value = %s + ORDER BY umeta_id ASC + LIMIT 1", + 'um_user_profile_url_slug_' . $permalink_base, + $slug + ) ); if ( ! empty( $user_id ) ) { - return $user_id; + return absint( $user_id ); } return false; @@ -374,9 +378,7 @@ if ( ! class_exists( 'um\core\Permalinks' ) ) { $user_in_url = ''; - $full_name = str_replace( "'", "", $full_name ); - $full_name = str_replace( "&", "", $full_name ); - $full_name = str_replace( "/", "", $full_name ); + $full_name = str_replace( array( "'", '&', '/' ), '', $full_name ); switch ( $permalink_base ) { case 'name': // dotted diff --git a/includes/core/class-rewrite.php b/includes/core/class-rewrite.php index 3cca8331..8595d2b7 100644 --- a/includes/core/class-rewrite.php +++ b/includes/core/class-rewrite.php @@ -1,65 +1,59 @@ config()->permalinks['user'] ) ) { $user_page_id = UM()->config()->permalinks['user']; - $user = get_post( $user_page_id ); + $user = get_post( $user_page_id ); if ( isset( $user->post_name ) ) { - - $user_slug = $user->post_name; + $user_slug = $user->post_name; $newrules[ $user_slug . '/([^/]+)/?$' ] = 'index.php?page_id=' . $user_page_id . '&um_user=$matches[1]'; } @@ -104,12 +96,11 @@ if ( ! class_exists( 'um\core\Rewrite' ) ) { $active_languages = $sitepress->get_active_languages(); foreach ( $active_languages as $language_code => $language ) { - - $lang_post_id = wpml_object_id_filter( $user_page_id, 'post', false, $language_code ); + $lang_post_id = wpml_object_id_filter( $user_page_id, 'post', false, $language_code ); $lang_post_obj = get_post( $lang_post_id ); - if ( isset( $lang_post_obj->post_name ) && $lang_post_obj->post_name != $user->post_name ) { - $user_slug = $lang_post_obj->post_name; + if ( isset( $lang_post_obj->post_name ) && $lang_post_obj->post_name !== $user->post_name ) { + $user_slug = $lang_post_obj->post_name; $newrules[ $user_slug . '/([^/]+)/?$' ] = 'index.php?page_id=' . $lang_post_id . '&um_user=$matches[1]&lang=' . $language_code; } } @@ -117,13 +108,11 @@ if ( ! class_exists( 'um\core\Rewrite' ) ) { } if ( isset( UM()->config()->permalinks['account'] ) ) { - $account_page_id = UM()->config()->permalinks['account']; - $account = get_post( $account_page_id ); + $account = get_post( $account_page_id ); if ( isset( $account->post_name ) ) { - - $account_slug = $account->post_name; + $account_slug = $account->post_name; $newrules[ $account_slug . '/([^/]+)?$' ] = 'index.php?page_id=' . $account_page_id . '&um_tab=$matches[1]'; } @@ -133,12 +122,11 @@ if ( ! class_exists( 'um\core\Rewrite' ) ) { $active_languages = $sitepress->get_active_languages(); foreach ( $active_languages as $language_code => $language ) { - - $lang_post_id = wpml_object_id_filter( $account_page_id, 'post', false, $language_code ); + $lang_post_id = wpml_object_id_filter( $account_page_id, 'post', false, $language_code ); $lang_post_obj = get_post( $lang_post_id ); - if ( isset( $lang_post_obj->post_name ) && $lang_post_obj->post_name != $account->post_name ) { - $account_slug = $lang_post_obj->post_name; + if ( isset( $lang_post_obj->post_name ) && $lang_post_obj->post_name !== $account->post_name ) { + $account_slug = $lang_post_obj->post_name; $newrules[ $account_slug . '/([^/]+)/?$' ] = 'index.php?page_id=' . $lang_post_id . '&um_user=$matches[1]&lang=' . $language_code; } } @@ -148,47 +136,41 @@ if ( ! class_exists( 'um\core\Rewrite' ) ) { return $newrules + $rules; } - /** - * Author page to user profile redirect + * Author page to user profile redirect. */ - function redirect_author_page() { - if ( UM()->options()->get( 'author_redirect' ) && is_author() ) { + public function redirect_author_page() { + if ( is_author() && UM()->options()->get( 'author_redirect' ) ) { $id = get_query_var( 'author' ); um_fetch_user( $id ); - exit( wp_redirect( um_user_profile_url() ) ); + wp_safe_redirect( um_user_profile_url() ); + exit; } } - /** - * Locate/display a profile + * Locate/display a profile. */ - function locate_user_profile() { + public function locate_user_profile() { + $permalink_base = UM()->options()->get( 'permalink_base' ); if ( um_queried_user() && um_is_core_page( 'user' ) ) { - - if ( UM()->options()->get( 'permalink_base' ) == 'user_login' ) { - + if ( 'user_login' === $permalink_base ) { $user_id = username_exists( um_queried_user() ); - //Try if ( ! $user_id ) { - $permalink_base = UM()->options()->get( 'permalink_base' ); - // Search by Profile Slug $args = array( - "fields" => 'ids', + 'fields' => 'ids', 'meta_query' => array( array( - 'key' => 'um_user_profile_url_slug_' . $permalink_base, - 'value' => strtolower( um_queried_user() ), - 'compare' => '=' - ) + 'key' => 'um_user_profile_url_slug_' . $permalink_base, + 'value' => strtolower( um_queried_user() ), + 'compare' => '=', + ), ), - 'number' => 1 + 'number' => 1, ); - $ids = new \WP_User_Query( $args ); if ( $ids->total_users > 0 ) { $user_id = current( $ids->get_results() ); @@ -197,10 +179,10 @@ if ( ! class_exists( 'um\core\Rewrite' ) ) { // Try nice name if ( ! $user_id ) { - $slug = um_queried_user(); - $slug = str_replace( '.', '-', $slug ); + $slug = um_queried_user(); + $slug = str_replace( '.', '-', $slug ); $the_user = get_user_by( 'slug', $slug ); - if ( isset( $the_user->ID ) ){ + if ( isset( $the_user->ID ) ) { $user_id = $the_user->ID; } @@ -211,56 +193,46 @@ if ( ! class_exists( 'um\core\Rewrite' ) ) { if ( ! $user_id ) { $user_id = UM()->user()->user_exists_by_email_as_username( $slug ); } - } - } - if ( UM()->options()->get( 'permalink_base' ) == 'user_id' ) { + if ( 'user_id' === $permalink_base ) { $user_id = UM()->user()->user_exists_by_id( um_queried_user() ); } - if ( in_array( UM()->options()->get( 'permalink_base' ), array( 'name', 'name_dash', 'name_dot', 'name_plus' ) ) ) { + if ( 'hash' === $permalink_base ) { + $user_id = UM()->user()->user_exists_by_hash( um_queried_user() ); + } + + if ( in_array( $permalink_base, array( 'name', 'name_dash', 'name_dot', 'name_plus' ), true ) ) { $user_id = UM()->user()->user_exists_by_name( um_queried_user() ); } /** USER EXISTS SET USER AND CONTINUE **/ - if ( $user_id ) { - + if ( ! empty( $user_id ) ) { um_set_requested_user( $user_id ); - /** - * UM hook + * Fires after setting requested user. * - * @type action - * @title um_access_profile - * @description Action on user access profile - * @input_vars - * [{"var":"$user_id","type":"int","desc":"User ID"}] - * @change_log - * ["Since: 2.0"] - * @usage add_action( 'um_access_profile', 'function_name', 10, 1 ); - * @example - * Some action on user access profile and requested user isset. * add_action( 'um_access_profile', 'my_access_profile', 10, 1 ); * function my_access_profile( $user_id ) { * // your code here * } - * ?> */ do_action( 'um_access_profile', $user_id ); - } else { - - exit( wp_redirect( um_get_core_page( 'user' ) ) ); - + wp_safe_redirect( um_get_core_page( 'user' ) ); + exit; } - } elseif ( um_is_core_page( 'user' ) ) { - if ( is_user_logged_in() ) { // just redirect to their profile - $query = UM()->permalinks()->get_query_array(); $url = um_user_profile_url( um_user( 'ID' ) ); @@ -270,41 +242,33 @@ if ( ! class_exists( 'um\core\Rewrite' ) ) { $url = add_query_arg( $key, $val, $url ); } } - - exit( wp_redirect( $url ) ); - } else { - - /** - * UM hook - * - * @type filter - * @title um_locate_user_profile_not_loggedin__redirect - * @description Change redirect URL from user profile for not logged in user - * @input_vars - * [{"var":"$url","type":"string","desc":"Redirect URL"}] - * @change_log - * ["Since: 2.0"] - * @usage - * - * @example - * - */ - $redirect_to = apply_filters( 'um_locate_user_profile_not_loggedin__redirect', home_url() ); - if ( ! empty( $redirect_to ) ) { - exit( wp_redirect( $redirect_to ) ); - } - + wp_safe_redirect( $url ); + exit; } + /** + * Filters the redirect URL from user profile for not logged-in user. + * + * @param {string} $url Redirect URL. By default, it's a home page. + * + * @return {string} Redirect URL. + * + * @since 1.3.x + * @hook um_locate_user_profile_not_loggedin__redirect + * + * @example Change redirect URL from user profile for not logged-in user to WordPress native login. + * function my_user_profile_not_loggedin__redirect( $url ) { + * // your code here + * $url = wp_login_url(); + * return $url; + * } + * add_filter( 'um_locate_user_profile_not_loggedin__redirect', 'my_user_profile_not_loggedin__redirect' ); + */ + $redirect_to = apply_filters( 'um_locate_user_profile_not_loggedin__redirect', home_url() ); + if ( ! empty( $redirect_to ) ) { + um_safe_redirect( $redirect_to ); + } } - } - } -} \ No newline at end of file +} diff --git a/includes/core/class-user.php b/includes/core/class-user.php index 21276e42..1d7201da 100644 --- a/includes/core/class-user.php +++ b/includes/core/class-user.php @@ -440,11 +440,11 @@ if ( ! class_exists( 'um\core\User' ) ) { $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' => UM()->member_directory()->get_hide_in_members_default(), - 'profile_photo' => false, - 'cover_photo' => false, - 'verified' => false, + 'account_status' => 'approved', + 'hide_in_members' => UM()->member_directory()->get_hide_in_members_default(), + 'profile_photo' => false, + 'cover_photo' => false, + 'verified' => false, ); } @@ -457,7 +457,7 @@ if ( ! class_exists( 'um\core\User' ) ) { break; case 'synced_gravatar_hashed_id': if ( UM()->options()->get( 'use_gravatars' ) ) { - $profile_photo = get_user_meta( $object_id, 'profile_photo', true ); + $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 ); @@ -514,11 +514,11 @@ if ( ! class_exists( 'um\core\User' ) ) { $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' => UM()->member_directory()->get_hide_in_members_default(), - 'profile_photo' => false, - 'cover_photo' => false, - 'verified' => false, + 'account_status' => 'approved', + 'hide_in_members' => UM()->member_directory()->get_hide_in_members_default(), + 'profile_photo' => false, + 'cover_photo' => false, + 'verified' => false, ); } @@ -527,7 +527,6 @@ if ( ! class_exists( 'um\core\User' ) ) { $md_data['account_status'] = $_meta_value; break; case 'hide_in_members': - $hide_in_members = UM()->member_directory()->get_hide_in_members_default(); if ( ! empty( $_meta_value ) ) { if ( $_meta_value == 'Yes' || $_meta_value == __( 'Yes', 'ultimate-member' ) || @@ -704,14 +703,14 @@ if ( ! class_exists( 'um\core\User' ) ) { * * @return bool|mixed */ - function get_profile_slug( $user_id ) { + public function get_profile_slug( $user_id ) { // Permalink base $permalink_base = UM()->options()->get( 'permalink_base' ); - $profile_slug = get_user_meta( $user_id, "um_user_profile_url_slug_{$permalink_base}", true ); + $profile_slug = get_user_meta( $user_id, "um_user_profile_url_slug_{$permalink_base}", true ); //get default username permalink if it's empty then return false if ( empty( $profile_slug ) ) { - if ( $permalink_base != 'user_login' ) { + if ( 'user_login' !== $permalink_base ) { $profile_slug = get_user_meta( $user_id, 'um_user_profile_url_slug_user_login', true ); } @@ -723,7 +722,6 @@ if ( ! class_exists( 'um\core\User' ) ) { return $profile_slug; } - /** * @param $user_id * @@ -739,6 +737,20 @@ if ( ! class_exists( 'um\core\User' ) ) { return UM()->permalinks()->profile_permalink( $profile_slug ); } + public function generate_user_hash( $user_id ) { + $user_id = absint( $user_id ); + $append = 0; + + while ( 1 ) { + $user_in_url = '~' . substr( strrev( md5( uniqid( 'um_user_hash' . $append, true ) . $user_id ) ), 0, 18 ); + $slug_exists_user_id = UM()->permalinks()->slug_exists_user_id( $user_in_url ); + if ( empty( $slug_exists_user_id ) || $user_id === $slug_exists_user_id ) { + break; + } + $append++; + } + return $user_in_url; + } /** * Generate User Profile Slug and save to meta @@ -746,7 +758,7 @@ if ( ! class_exists( 'um\core\User' ) ) { * @param int $user_id * @param bool $force */ - function generate_profile_slug( $user_id, $force = false ) { + public function generate_profile_slug( $user_id, $force = false ) { $userdata = get_userdata( $user_id ); if ( empty( $userdata ) ) { @@ -757,16 +769,20 @@ if ( ! class_exists( 'um\core\User' ) ) { $current_profile_slug = $this->get_profile_slug( $user_id ); - $user_in_url = ''; + $user_in_url = ''; $permalink_base = UM()->options()->get( 'permalink_base' ); // User ID - if ( $permalink_base == 'user_id' ) { + if ( 'user_id' === $permalink_base ) { $user_in_url = $user_id; } + if ( 'hash' === $permalink_base ) { + $user_in_url = $this->generate_user_hash( $user_id ); + } + // Username - if ( $permalink_base == 'user_login' ) { + if ( 'user_login' === $permalink_base ) { $user_in_url = $userdata->user_login; @@ -790,21 +806,25 @@ if ( ! class_exists( 'um\core\User' ) ) { // Fisrt and Last name $full_name_permalinks = array( 'name', 'name_dash', 'name_plus' ); - if ( in_array( $permalink_base, $full_name_permalinks ) ) { - $separated = array( 'name' => '.', 'name_dash' => '-', 'name_plus' => '+' ); - $separate = $separated[ $permalink_base ]; - $first_name = $userdata->first_name; - $last_name = $userdata->last_name; - $full_name = trim( sprintf( '%s %s', $first_name, $last_name ) ); - $full_name = preg_replace( '/\s+/', ' ', $full_name ); // Remove double spaces + if ( in_array( $permalink_base, $full_name_permalinks, true ) ) { + $separated = array( + 'name' => '.', + 'name_dash' => '-', + 'name_plus' => '+', + ); + $separate = $separated[ $permalink_base ]; + $first_name = $userdata->first_name; + $last_name = $userdata->last_name; + $full_name = trim( sprintf( '%s %s', $first_name, $last_name ) ); + $full_name = preg_replace( '/\s+/', ' ', $full_name ); // Remove double spaces $profile_slug = UM()->permalinks()->profile_slug( $full_name, $first_name, $last_name ); - $append = 0; - $username = $full_name; - $_username = $full_name; + $append = 0; + $username = $full_name; + $_username = $full_name; while ( 1 ) { - $username = $_username . ( empty( $append ) ? '' : " $append" ); + $username = $_username . ( empty( $append ) ? '' : " $append" ); $slug_exists_user_id = UM()->permalinks()->slug_exists_user_id( $profile_slug . ( empty( $append ) ? '' : "{$separate}{$append}" ) ); if ( empty( $slug_exists_user_id ) || $user_id == $slug_exists_user_id ) { break; @@ -839,12 +859,11 @@ if ( ! class_exists( 'um\core\User' ) ) { $user_in_url = apply_filters( 'um_change_user_profile_slug', $user_in_url, $user_id ); - if ( $force || empty( $current_profile_slug ) || $current_profile_slug != $user_in_url ) { + if ( $force || empty( $current_profile_slug ) || $current_profile_slug !== $user_in_url ) { update_user_meta( $user_id, "um_user_profile_url_slug_{$permalink_base}", $user_in_url ); } } - /** * Backend user creation * @@ -961,7 +980,8 @@ if ( ! class_exists( 'um\core\User' ) ) { if ( $userdata !== 'add-new-user' && $userdata !== 'add-existing-user' ) { ?>

- roles ) && count( $userdata->roles ) == 1 ) { $style = 'style="display:none;"'; } - } $class = ( $userdata == 'add-existing-user' ) ? 'um_role_existing_selector_wrapper' : 'um_role_selector_wrapper'; - ob_start(); ?> + ob_start(); + ?> -
> +
>
- id = $user_id; + $this->id = $user_id; $this->usermeta = get_user_meta( $user_id ); - $this->data = get_userdata( $this->id ); + $this->data = get_userdata( $this->id ); } elseif ( is_user_logged_in() && $clean == false ) { - $this->id = get_current_user_id(); - $this->usermeta = get_user_meta($this->id); - $this->data = get_userdata($this->id); + $this->id = get_current_user_id(); + $this->usermeta = get_user_meta( $this->id ); + $this->data = get_userdata( $this->id ); } else { - $this->id = 0; + $this->id = 0; $this->usermeta = null; - $this->data = null; + $this->data = null; } @@ -1203,54 +1224,54 @@ if ( ! class_exists( 'um\core\User' ) ) { // add user data $this->data = $this->toArray( $this->data ); - foreach ( $this->data as $k=>$v ) { - if ( $k == 'roles') { - $this->profile['wp_roles'] = implode(',',$v); - } else if ( is_array( $v ) ) { - foreach($v as $k2 => $v2){ - $this->profile[$k2] = $v2; + foreach ( $this->data as $k => $v ) { + if ( $k == 'roles' ) { + $this->profile['wp_roles'] = implode( ',', $v ); + } elseif ( is_array( $v ) ) { + foreach ( $v as $k2 => $v2 ) { + $this->profile[ $k2 ] = $v2; } } else { - $this->profile[$k] = $v; + $this->profile[ $k ] = $v; } } // add account status - if ( !isset( $this->usermeta['account_status'][0] ) ) { + if ( ! isset( $this->usermeta['account_status'][0] ) ) { $this->usermeta['account_status'][0] = 'approved'; } if ( $this->usermeta['account_status'][0] == 'approved' ) { - $this->usermeta['account_status_name'][0] = __('Approved','ultimate-member'); + $this->usermeta['account_status_name'][0] = __( 'Approved', 'ultimate-member' ); } if ( $this->usermeta['account_status'][0] == 'awaiting_email_confirmation' ) { - $this->usermeta['account_status_name'][0] = __('Awaiting E-mail Confirmation','ultimate-member'); + $this->usermeta['account_status_name'][0] = __( 'Awaiting E-mail Confirmation', 'ultimate-member' ); } if ( $this->usermeta['account_status'][0] == 'awaiting_admin_review' ) { - $this->usermeta['account_status_name'][0] = __('Pending Review','ultimate-member'); + $this->usermeta['account_status_name'][0] = __( 'Pending Review', 'ultimate-member' ); } if ( $this->usermeta['account_status'][0] == 'rejected' ) { - $this->usermeta['account_status_name'][0] = __('Membership Rejected','ultimate-member'); + $this->usermeta['account_status_name'][0] = __( 'Membership Rejected', 'ultimate-member' ); } if ( $this->usermeta['account_status'][0] == 'inactive' ) { - $this->usermeta['account_status_name'][0] = __('Membership Inactive','ultimate-member'); + $this->usermeta['account_status_name'][0] = __( 'Membership Inactive', 'ultimate-member' ); } // add user meta foreach ( $this->usermeta as $k => $v ) { - if ( $k == 'display_name') { + if ( $k == 'display_name' ) { continue; } $this->profile[ $k ] = $v[0]; } // add permissions - $user_role = UM()->roles()->get_priority_user_role( $this->id ); - $this->profile['role'] = $user_role; + $user_role = UM()->roles()->get_priority_user_role( $this->id ); + $this->profile['role'] = $user_role; $this->profile['roles'] = UM()->roles()->get_all_user_roles( $this->id ); $role_meta = UM()->roles()->role_data( $user_role ); @@ -1285,7 +1306,7 @@ if ( ! class_exists( 'um\core\User' ) ) { return array( $key => $item ); }, array_keys( $role_meta ), $role_meta );*/ - $this->profile = array_merge( $this->profile, (array)$role_meta ); + $this->profile = array_merge( $this->profile, (array) $role_meta ); $this->profile['super_admin'] = ( is_super_admin( $this->id ) ) ? 1 : 0; @@ -1296,7 +1317,6 @@ if ( ! class_exists( 'um\core\User' ) ) { $this->setup_cache( $this->id, $this->profile ); } - } } @@ -1307,8 +1327,8 @@ if ( ! class_exists( 'um\core\User' ) ) { * * @param bool $clean */ - function reset( $clean = false ){ - $this->set(0, $clean); + function reset( $clean = false ) { + $this->set( 0, $clean ); } /** @@ -1645,7 +1665,7 @@ if ( ! class_exists( 'um\core\User' ) ) { * */ function approve( $repeat = true ) { - $user_id = um_user('ID'); + $user_id = um_user( 'ID' ); if ( ! $repeat ) { $status = get_user_meta( $user_id, 'account_status', true ); @@ -1828,7 +1848,7 @@ if ( ! class_exists( 'um\core\User' ) ) { if ( is_multisite() ) { if ( ! function_exists( 'wpmu_delete_user' ) ) { - require_once( ABSPATH . 'wp-admin/includes/ms.php' ); + require_once ABSPATH . 'wp-admin/includes/ms.php'; } wpmu_delete_user( $this->id ); @@ -1836,7 +1856,7 @@ if ( ! class_exists( 'um\core\User' ) ) { } else { if ( ! function_exists( 'wp_delete_user' ) ) { - require_once( ABSPATH . 'wp-admin/includes/user.php' ); + require_once ABSPATH . 'wp-admin/includes/user.php'; } wp_delete_user( $this->id ); @@ -1951,10 +1971,15 @@ if ( ! class_exists( 'um\core\User' ) ) { } foreach ( $actions as $id => $arr ) { - $url = add_query_arg( array( 'um_action' => $id, 'uid' => um_profile_id() ) ); + $url = add_query_arg( + array( + 'um_action' => $id, + 'uid' => um_profile_id(), + ) + ); /*$url = add_query_arg( 'um_action', $id ); $url = add_query_arg( 'uid', um_profile_id(), $url );*/ - $items[] = '' . esc_html( $arr['label'] ) . ''; + $items[] = '' . esc_html( $arr['label'] ) . ''; } return $items; } @@ -2202,19 +2227,25 @@ if ( ! class_exists( 'um\core\User' ) ) { $value = UM()->validation()->safe_name_in_url( $value ); - $ids = get_users( array( 'fields' => 'ID', 'meta_key' => $key, 'meta_value' => $value, 'meta_compare' => '=' ) ); + $ids = get_users( + array( + 'fields' => 'ID', + 'meta_key' => $key, + 'meta_value' => $value, + 'meta_compare' => '=', + ) + ); if ( ! isset( $ids ) || empty( $ids ) ) { return false; } foreach ( $ids as $k => $id ) { - if ( $id == um_user('ID') ) { + if ( $id == um_user( 'ID' ) ) { unset( $ids[ $k ] ); } else { $duplicates[] = $id; } - } if ( ! empty( $duplicates ) ) { @@ -2231,29 +2262,28 @@ if ( ! class_exists( 'um\core\User' ) ) { * * @return bool */ - function user_exists_by_name( $value ) { + public function user_exists_by_name( $value ) { // Permalink base $permalink_base = UM()->options()->get( 'permalink_base' ); $raw_value = $value; - $value = UM()->validation()->safe_name_in_url( $value ); - $value = um_clean_user_basename( $value ); + $value = UM()->validation()->safe_name_in_url( $value ); + $value = um_clean_user_basename( $value ); // Search by Profile Slug $args = array( - 'fields' => array( 'ID' ), + 'fields' => array( 'ID' ), 'meta_query' => array( 'relation' => 'OR', array( - 'key' => 'um_user_profile_url_slug_' . $permalink_base, - 'value' => strtolower( $raw_value ), - 'compare' => '=', + 'key' => 'um_user_profile_url_slug_' . $permalink_base, + 'value' => strtolower( $raw_value ), + 'compare' => '=', ), ), ); - $ids = new \WP_User_Query( $args ); if ( $ids->total_users > 0 ) { @@ -2263,9 +2293,9 @@ if ( ! class_exists( 'um\core\User' ) ) { // Search by Display Name or ID $args = array( - 'fields' => array( 'ID' ), - 'search' => $value, - 'search_columns' => array( 'display_name', 'ID' ), + 'fields' => array( 'ID' ), + 'search' => $value, + 'search_columns' => array( 'display_name', 'ID' ), ); $ids = new \WP_User_Query( $args ); @@ -2275,17 +2305,15 @@ if ( ! class_exists( 'um\core\User' ) ) { return $um_user_query->ID; } - // Search By User Login - $value = str_replace( ".", "_", $value ); - $value = str_replace( " ", "", $value ); + $value = str_replace( array( '.', ' ' ), array( '_', '' ), $value ); $args = array( - 'fields' => array( 'ID' ), - 'search' => $value, - 'search_columns' => array( + 'fields' => array( 'ID' ), + 'search' => $value, + 'search_columns' => array( 'user_login', - ) + ), ); $ids = new \WP_User_Query( $args ); @@ -2321,7 +2349,7 @@ if ( ! class_exists( 'um\core\User' ) ) { * */ - function user_exists_by_id( $user_id ) { + public function user_exists_by_id( $user_id ) { $aux = get_userdata( absint( $user_id ) ); if ( $aux == false ) { return false; @@ -2330,6 +2358,38 @@ if ( ! class_exists( 'um\core\User' ) ) { } } + /** + * @param string $hash + * + * @return bool|int + */ + public function user_exists_by_hash( $hash ) { + // Permalink base + $permalink_base = UM()->options()->get( 'permalink_base' ); + $raw_value = $hash; + + // Search by Profile Slug + $args = array( + 'fields' => array( 'ID' ), + 'meta_query' => array( + 'relation' => 'OR', + array( + 'key' => 'um_user_profile_url_slug_' . $permalink_base, + 'value' => strtolower( $raw_value ), + 'compare' => '=', + ), + ), + ); + + $ids = new \WP_User_Query( $args ); + + if ( $ids->total_users > 0 ) { + $um_user_query = current( $ids->get_results() ); + return $um_user_query->ID; + } + + return false; + } /** * This method checks if a user exists or not in your site based on the user email as username @@ -2355,7 +2415,12 @@ if ( ! class_exists( 'um\core\User' ) ) { $user_id = false; - $ids = get_users( array( 'fields' => 'ID', 'meta_key' => 'um_email_as_username_' . $slug ) ); + $ids = get_users( + array( + 'fields' => 'ID', + 'meta_key' => 'um_email_as_username_' . $slug, + ) + ); if ( ! empty( $ids[0] ) ) { $user_id = $ids[0]; } @@ -2373,11 +2438,11 @@ if ( ! class_exists( 'um\core\User' ) ) { function set_gravatar( $user_id ) { um_fetch_user( $user_id ); - $email_address = um_user( 'user_email' ); + $email_address = um_user( 'user_email' ); $hash_email_address = ''; if ( $email_address ) { - $hash_email_address = md5( $email_address ); + $hash_email_address = md5( $email_address ); $this->profile['synced_gravatar_hashed_id'] = $hash_email_address; $this->update_usermeta_info( 'synced_gravatar_hashed_id' ); } diff --git a/includes/core/um-filters-user.php b/includes/core/um-filters-user.php index 6d8bfe8a..455651ca 100644 --- a/includes/core/um-filters-user.php +++ b/includes/core/um-filters-user.php @@ -1,47 +1,49 @@ -roles()->get_priority_user_role( get_current_user_id() ) ); - $can_edit_users = current_user_can( 'edit_users' ) && $role->has_cap( 'edit_users' ); + $can_edit_users = null !== $role && current_user_can( 'edit_users' ) && $role->has_cap( 'edit_users' ); if ( $can_edit_users ) { + $account_status = um_user( 'account_status' ); - if ( um_user( 'account_status' ) == 'awaiting_admin_review' ) { + if ( 'awaiting_admin_review' === $account_status ) { $actions['um_approve_membership'] = array( 'label' => __( 'Approve Membership', 'ultimate-member' ) ); - $actions['um_reject_membership'] = array( 'label' => __( 'Reject Membership', 'ultimate-member' ) ); + $actions['um_reject_membership'] = array( 'label' => __( 'Reject Membership', 'ultimate-member' ) ); } - if ( um_user( 'account_status' ) == 'rejected' ) { + if ( 'rejected' === $account_status ) { $actions['um_approve_membership'] = array( 'label' => __( 'Approve Membership', 'ultimate-member' ) ); } - if ( um_user( 'account_status' ) == 'approved' ) { + if ( 'approved' === $account_status ) { $actions['um_put_as_pending'] = array( 'label' => __( 'Put as Pending Review', 'ultimate-member' ) ); } - if ( um_user( 'account_status' ) == 'awaiting_email_confirmation' ) { + if ( 'awaiting_email_confirmation' === $account_status ) { $actions['um_resend_activation'] = array( 'label' => __( 'Resend Activation E-mail', 'ultimate-member' ) ); } - if ( um_user( 'account_status' ) != 'inactive' ) { + if ( 'inactive' !== $account_status ) { $actions['um_deactivate'] = array( 'label' => __( 'Deactivate this account', 'ultimate-member' ) ); } - if ( um_user( 'account_status' ) == 'inactive' ) { + if ( 'inactive' === $account_status ) { $actions['um_reenable'] = array( 'label' => __( 'Reactivate this account', 'ultimate-member' ) ); } - } if ( UM()->roles()->um_current_user_can( 'delete', $user_id ) ) { @@ -56,226 +58,150 @@ function um_admin_user_actions_hook( $actions, $user_id ) { } add_filter( 'um_admin_user_actions_hook', 'um_admin_user_actions_hook', 10, 2 ); - /** - * Filter user basename + * Filter user basename. + * * @param string $value + * * @return string - * @hook_filter: um_clean_user_basename_filter */ -function um_clean_user_basename_filter( $value, $raw ){ +function um_clean_user_basename_filter( $value, $raw ) { $permalink_base = UM()->options()->get( 'permalink_base' ); $user_query = new WP_User_Query( array( - 'meta_query' => array( - 'relation' => 'AND', + 'meta_query' => array( + 'relation' => 'AND', array( - 'key' => 'um_user_profile_url_slug_'.$permalink_base, + 'key' => 'um_user_profile_url_slug_' . $permalink_base, 'value' => $raw, - 'compare' => '=' - ) + 'compare' => '=', + ), ), - 'fields' => array('ID') + 'fields' => array( 'ID' ), ) - ); - if( $user_query->total_users > 0 ){ - + if ( $user_query->total_users > 0 ) { $result = current( $user_query->get_results() ); - $slugname = ''; - - if( isset( $result->ID ) ){ - $slugname = get_user_meta( $result->ID, 'um_user_profile_url_slug_'.$permalink_base, true ); - $value = $slugname; + if ( isset( $result->ID ) ) { + $value = get_user_meta( $result->ID, 'um_user_profile_url_slug_' . $permalink_base, true ); } } /** - * UM hook + * Filters the base user permalink value before cleaning. * - * @type filter - * @title um_permalink_base_before_filter - * @description Base permalink before - * @input_vars - * [{"var":"$permalink","type":"string","desc":"User Permalink"}] - * @change_log - * ["Since: 2.0"] - * @usage - * - * @example - * Change base permalink before cleaning. * function my_permalink_base_before( $permalink ) { * // your code here * return $permalink; * } - * ?> + * add_filter( 'um_permalink_base_before_filter', 'my_permalink_base_before' ); */ - $value = apply_filters( "um_permalink_base_before_filter", $value ); - $raw_value = $value; + $value = apply_filters( 'um_permalink_base_before_filter', $value ); + $raw_value = $value; + $filter_slug = ''; - switch( $permalink_base ) { + switch ( $permalink_base ) { case 'name': - - - if( ! empty( $value ) && strrpos( $value ,"_") > -1 ){ + if ( ! empty( $value ) && strrpos( $value, '_' ) > -1 ) { $value = str_replace( '_', '. ', $value ); } - if( ! empty( $value ) && strrpos( $value ,"_") > -1 ){ + if ( ! empty( $value ) && strrpos( $value, '_' ) > -1 ) { $value = str_replace( '_', '-', $value ); } - if( ! empty( $value ) && strrpos( $value ,".") > -1 && strrpos( $raw_value ,"_" ) <= -1 ){ + if ( ! empty( $value ) && strrpos( $value, '.' ) > -1 && strrpos( $raw_value, '_' ) <= -1 ) { $value = str_replace( '.', ' ', $value ); } - /** - * UM hook - * - * @type filter - * @title um_permalink_base_after_filter_name - * @description Base permalink after if permalink is username - * @input_vars - * [{"var":"$permalink","type":"string","desc":"User Permalink"}, - * {"var":"$raw_permalink","type":"string","desc":"RAW User Permalink"}] - * @change_log - * ["Since: 2.0"] - * @usage - * - * @example - * - */ - $value = apply_filters("um_permalink_base_after_filter_name", $value, $raw_value ); - + $filter_slug = '_' . $permalink_base; break; - case 'name_dash': - - if( ! empty( $value ) && strrpos( $value ,"-") > -1 ){ + if ( ! empty( $value ) && strrpos( $value, '-' ) > -1 ) { $value = str_replace( '-', ' ', $value ); } - if( ! empty( $value ) && strrpos( $value ,"_") > -1 ){ + if ( ! empty( $value ) && strrpos( $value, '_' ) > -1 ) { $value = str_replace( '_', '-', $value ); } // Checks if last name has a dash - if( ! empty( $value ) && strrpos( $value ,"_") > -1 ){ + if ( ! empty( $value ) && strrpos( $value, '_' ) > -1 ) { $value = str_replace( '_', '-', $value ); } - /** - * UM hook - * - * @type filter - * @title um_permalink_base_after_filter_name_dash - * @description Base permalink after if permalink is first name - last name - * @input_vars - * [{"var":"$permalink","type":"string","desc":"User Permalink"}, - * {"var":"$raw_permalink","type":"string","desc":"RAW User Permalink"}] - * @change_log - * ["Since: 2.0"] - * @usage - * - * @example - * - */ - $value = apply_filters("um_permalink_base_after_filter_name_dash", $value, $raw_value ); - + $filter_slug = '_' . $permalink_base; break; - - case 'name_plus': - - if( ! empty( $value ) && strrpos( $value ,"+") > -1 ){ + if ( ! empty( $value ) && strrpos( $value, '+' ) > -1 ) { $value = str_replace( '+', ' ', $value ); } - if( ! empty( $value ) && strrpos( $value ,"_") > -1 ){ + if ( ! empty( $value ) && strrpos( $value, '_' ) > -1 ) { $value = str_replace( '_', '+', $value ); } - /** - * UM hook - * - * @type filter - * @title um_permalink_base_after_filter_name_plus - * @description Base permalink after if permalink is first name + last name - * @input_vars - * [{"var":"$permalink","type":"string","desc":"User Permalink"}, - * {"var":"$raw_permalink","type":"string","desc":"RAW User Permalink"}] - * @change_log - * ["Since: 2.0"] - * @usage - * - * @example - * - */ - $value = apply_filters("um_permalink_base_after_filter_name_plus", $value, $raw_value ); - + $filter_slug = '_' . $permalink_base; break; - default: - // Checks if last name has a dash - if( ! empty( $value ) && strrpos( $value ,"_") > -1 && substr( $value , "_") == 1 ){ + if ( ! empty( $value ) && strrpos( $value, '_' ) > -1 ) { $value = str_replace( '_', '-', $value ); } - - /** - * UM hook - * - * @type filter - * @title um_permalink_base_after_filter - * @description Base permalink after for default permalink - * @input_vars - * [{"var":"$permalink","type":"string","desc":"User Permalink"}, - * {"var":"$raw_permalink","type":"string","desc":"RAW User Permalink"}] - * @change_log - * ["Since: 2.0"] - * @usage - * - * @example - * - */ - $value = apply_filters("um_permalink_base_after_filter", $value, $raw_value ); - break; } - return $value; - + /** + * Filters the base user permalink value after cleaning. + * $filter_slug - can be empty '' or equals 'name', 'name_dash', 'name_plus' + * + * @param {string} $permalink User Profile permalink. + * @param {string} $raw_value The base user permalink value before cleaning. + * + * @return {string} User Profile permalink. + * + * @since 1.3.x + * @hook um_permalink_base_after_filter{$filter_slug} + * + * @example Change base permalink after cleaning if permalink settings isn't connected with user first or last name. + * function my_permalink_base_after_filter( $permalink, $raw_permalink ) { + * // your code here + * return $permalink; + * } + * add_filter( 'um_permalink_base_after_filter', 'my_permalink_base_after_filter', 10, 2 ); + * @example Change base permalink after cleaning if permalink settings is a full name. + * function my_permalink_base_after_filter_name( $permalink, $raw_permalink ) { + * // your code here + * return $permalink; + * } + * add_filter( 'um_permalink_base_after_filter_name', 'my_permalink_base_after_filter_name', 10, 2 ); + * @example Change base permalink after cleaning if permalink settings is a full name connected by dash. + * function my_permalink_base_after_filter_name_dash( $permalink, $raw_permalink ) { + * // your code here + * return $permalink; + * } + * add_filter( 'um_permalink_base_after_filter_name_dash', 'my_permalink_base_after_filter_name_dash', 10, 2 ); + * @example Change base permalink after cleaning if permalink settings is a full name connected by plus. + * function my_permalink_base_after_filter_name_plus( $permalink, $raw_permalink ) { + * // your code here + * return $permalink; + * } + * add_filter( 'um_permalink_base_after_filter_name_plus', 'my_permalink_base_after_filter_name_plus', 10, 2 ); + */ + return apply_filters( "um_permalink_base_after_filter{$filter_slug}", $value, $raw_value ); } add_filter( 'um_clean_user_basename_filter', 'um_clean_user_basename_filter', 2, 10 ); - /** * Filter before update profile to force utf8 strings * @@ -296,4 +222,4 @@ function um_before_update_profile( $changes, $user_id ) { return $changes; } -add_filter( 'um_before_update_profile','um_before_update_profile', 10, 2 ); +add_filter( 'um_before_update_profile', 'um_before_update_profile', 10, 2 ); From 17545553792359f7ab34eedb587ede8c4e396e9b Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Sat, 9 Sep 2023 02:56:11 +0300 Subject: [PATCH 03/81] - fixed the issue with `UM()->metabox()->edit_mode_value` variable. We need to flush it after each `field_input()`; - wpcs for Admin_Metabox() class; --- includes/admin/core/class-admin-metabox.php | 201 +++++++++----------- 1 file changed, 86 insertions(+), 115 deletions(-) diff --git a/includes/admin/core/class-admin-metabox.php b/includes/admin/core/class-admin-metabox.php index 776e25a8..934577e0 100644 --- a/includes/admin/core/class-admin-metabox.php +++ b/includes/admin/core/class-admin-metabox.php @@ -93,7 +93,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) { */ function hide_metabox_restrict_content_shop( $hide ) { if ( function_exists( 'wc_get_page_id' ) && ! empty( $_GET['post'] ) && - absint( $_GET['post'] ) == wc_get_page_id( 'shop' ) ) { + absint( $_GET['post'] ) == wc_get_page_id( 'shop' ) ) { return true; } @@ -220,7 +220,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) { public function save_metabox_custom( $post_id, $post ) { // validate nonce if ( ! isset( $_POST['um_admin_save_metabox_custom_nonce'] ) || - ! wp_verify_nonce( $_POST['um_admin_save_metabox_custom_nonce'], basename( __FILE__ ) ) ) { + ! wp_verify_nonce( $_POST['um_admin_save_metabox_custom_nonce'], basename( __FILE__ ) ) ) { return; } @@ -324,7 +324,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) { function save_metabox_restrict_content( $post_id, $post ) { // validate nonce if ( ! isset( $_POST['um_admin_save_metabox_restrict_content_nonce'] ) || - ! wp_verify_nonce( $_POST['um_admin_save_metabox_restrict_content_nonce'], basename( __FILE__ ) ) ) { + ! wp_verify_nonce( $_POST['um_admin_save_metabox_restrict_content_nonce'], basename( __FILE__ ) ) ) { return; } @@ -351,7 +351,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) { function save_attachment_metabox_restrict_content( $post_id ) { // validate nonce if ( ! isset( $_POST['um_admin_save_metabox_restrict_content_nonce'] ) - || ! wp_verify_nonce( $_POST['um_admin_save_metabox_restrict_content_nonce'], basename( __FILE__ ) ) ) { + || ! wp_verify_nonce( $_POST['um_admin_save_metabox_restrict_content_nonce'], basename( __FILE__ ) ) ) { return; } @@ -1166,7 +1166,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) { // validate nonce if ( ! isset( $_POST['um_admin_save_metabox_form_nonce'] ) || - ! wp_verify_nonce( $_POST['um_admin_save_metabox_form_nonce'], basename( __FILE__ ) ) ) { + ! wp_verify_nonce( $_POST['um_admin_save_metabox_form_nonce'], basename( __FILE__ ) ) ) { return; } @@ -1254,7 +1254,6 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) { } } - /** * Show field input for edit at modal field * @@ -1262,7 +1261,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) { * @param null $form_id * @param array $field_args */ - function field_input( $attribute, $form_id = null, $field_args = array() ) { + public function field_input( $attribute, $form_id = null, $field_args = array() ) { if ( $this->in_edit == true ) { // we're editing a field $real_attr = substr( $attribute, 1 ); @@ -1270,9 +1269,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) { } switch ( $attribute ) { - default: - /** * UM hook * @@ -1299,7 +1296,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) { case '_visibility': ?> -

+

+ +

+ - +    +

- - - - - - - - -    -

- - - -

- -

- - +

+ +

+ - -

- -

- - +

+ +

+ + ?> -

- -

+

+ +

- @@ -1470,62 +1455,49 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) { break; case '_icon': - - if ( $this->set_field_type == 'row' ) { + if ( 'row' === $this->set_field_type ) { $back = 'UM_edit_row'; - ?> +

+ -

+ edit_mode_value ) ) { ?> - + - edit_mode_value ) { ?> - - - - edit_mode_value ) { ?> + edit_mode_value ) ) { ?> -

- - in_edit ) { $back = 'UM_edit_field'; } else { $back = 'UM_add_field'; } - ?> -
+

+ -

+ - + edit_mode_value ) ) { ?> - edit_mode_value ) { ?> + - - - edit_mode_value ) { ?> + edit_mode_value ) ) { ?> -

-
- edit_mode_value = null; } - } } From 0149605a36778673529d1e2ffaf0941bca52b1cf Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Mon, 11 Sep 2023 15:41:29 +0300 Subject: [PATCH 04/81] - added ability to use custom metakey as profile slug; - important: use for this case required usermeta which cannot be empty --- includes/admin/core/class-admin-settings.php | 32 +++++---- includes/class-config.php | 1 + includes/core/class-permalinks.php | 14 +++- includes/core/class-rewrite.php | 12 ++++ includes/core/class-user.php | 71 +++++++++++++++++++- 5 files changed, 115 insertions(+), 15 deletions(-) diff --git a/includes/admin/core/class-admin-settings.php b/includes/admin/core/class-admin-settings.php index cabdcb26..5046d64e 100644 --- a/includes/admin/core/class-admin-settings.php +++ b/includes/admin/core/class-admin-settings.php @@ -7,41 +7,34 @@ if ( ! defined( 'ABSPATH' ) ) { if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { - /** * Class Admin_Settings * @package um\admin\core */ class Admin_Settings { - /** * @var array */ public $settings_map; - /** * @var array */ public $settings_structure; - /** * @var */ private $previous_licenses; - /** * @var */ private $need_change_permalinks; - private $gravatar_changed = false; - /** * Admin_Settings constructor. */ @@ -668,6 +661,9 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { 'permalink_base' => array( 'sanitize' => 'key', ), + 'permalink_base_custom_meta' => array( + 'sanitize' => 'text', + ), 'display_name' => array( 'sanitize' => 'key', ), @@ -1014,15 +1010,24 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { // translators: %s: Profile page URL 'tooltip' => sprintf( __( 'Here you can control the permalink structure of the user profile URL globally e.g. %susername/', 'ultimate-member' ), trailingslashit( um_get_core_page( 'user' ) ) ), 'options' => array( - 'user_login' => __( 'Username', 'ultimate-member' ), - 'name' => __( 'First and Last Name with \'.\'', 'ultimate-member' ), - 'name_dash' => __( 'First and Last Name with \'-\'', 'ultimate-member' ), - 'name_plus' => __( 'First and Last Name with \'+\'', 'ultimate-member' ), - 'user_id' => __( 'User ID', 'ultimate-member' ), - 'hash' => __( 'Unique hash string', 'ultimate-member' ), + 'user_login' => __( 'Username', 'ultimate-member' ), + 'name' => __( 'First and Last Name with \'.\'', 'ultimate-member' ), + 'name_dash' => __( 'First and Last Name with \'-\'', 'ultimate-member' ), + 'name_plus' => __( 'First and Last Name with \'+\'', 'ultimate-member' ), + 'user_id' => __( 'User ID', 'ultimate-member' ), + 'hash' => __( 'Unique hash string', 'ultimate-member' ), + 'custom_meta' => __( 'Custom usermeta', 'ultimate-member' ), ), 'placeholder' => __( 'Select...', 'ultimate-member' ), ), + array( + 'id' => 'permalink_base_custom_meta', + 'type' => 'text', + 'label' => __( 'Profile Permalink Base Custom Meta Key', 'ultimate-member' ), + 'tooltip' => __( 'Specify the custom field meta key that you want to use as profile permalink base. Meta value should be unique.', 'ultimate-member' ), + 'conditional' => array( 'permalink_base', '=', 'custom_meta' ), + 'size' => 'medium', + ), array( 'id' => 'display_name', 'type' => 'select', @@ -1048,6 +1053,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { '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' ), + 'size' => 'medium', ), array( 'id' => 'author_redirect', diff --git a/includes/class-config.php b/includes/class-config.php index ffeb704a..6390cb93 100644 --- a/includes/class-config.php +++ b/includes/class-config.php @@ -511,6 +511,7 @@ if ( ! class_exists( 'um\Config' ) ) { 'disable_restriction_pre_queries' => 0, 'uninstall_on_delete' => 0, 'permalink_base' => 'user_login', + 'permalink_base_custom_meta' => '', 'display_name' => 'full_name', 'display_name_field' => '', 'author_redirect' => 1, diff --git a/includes/core/class-permalinks.php b/includes/core/class-permalinks.php index a04c29b6..6fef7102 100644 --- a/includes/core/class-permalinks.php +++ b/includes/core/class-permalinks.php @@ -257,6 +257,18 @@ if ( ! class_exists( 'um\core\Permalinks' ) ) { global $wpdb; $permalink_base = UM()->options()->get( 'permalink_base' ); + if ( 'custom_meta' === $permalink_base ) { + $custom_meta = UM()->options()->get( 'permalink_base_custom_meta' ); + if ( empty( $custom_meta ) ) { + // Set default permalink base if custom meta is empty. + $permalink_base = 'user_login'; + $meta_key = 'um_user_profile_url_slug_' . $permalink_base; + } else { + $meta_key = $custom_meta; + } + } else { + $meta_key = 'um_user_profile_url_slug_' . $permalink_base; + } $user_id = $wpdb->get_var( $wpdb->prepare( @@ -266,7 +278,7 @@ if ( ! class_exists( 'um\core\Permalinks' ) ) { meta_value = %s ORDER BY umeta_id ASC LIMIT 1", - 'um_user_profile_url_slug_' . $permalink_base, + $meta_key, $slug ) ); diff --git a/includes/core/class-rewrite.php b/includes/core/class-rewrite.php index 8595d2b7..2b8d11b8 100644 --- a/includes/core/class-rewrite.php +++ b/includes/core/class-rewrite.php @@ -153,6 +153,14 @@ if ( ! class_exists( 'um\core\Rewrite' ) ) { */ public function locate_user_profile() { $permalink_base = UM()->options()->get( 'permalink_base' ); + if ( 'custom_meta' === $permalink_base ) { + $custom_meta = UM()->options()->get( 'permalink_base_custom_meta' ); + if ( empty( $custom_meta ) ) { + // Set default permalink base if custom meta is empty. + $permalink_base = 'user_login'; + } + } + if ( um_queried_user() && um_is_core_page( 'user' ) ) { if ( 'user_login' === $permalink_base ) { $user_id = username_exists( um_queried_user() ); @@ -204,6 +212,10 @@ if ( ! class_exists( 'um\core\Rewrite' ) ) { $user_id = UM()->user()->user_exists_by_hash( um_queried_user() ); } + if ( 'custom_meta' === $permalink_base ) { + $user_id = UM()->user()->user_exists_by_custom_meta( um_queried_user() ); + } + if ( in_array( $permalink_base, array( 'name', 'name_dash', 'name_dot', 'name_plus' ), true ) ) { $user_id = UM()->user()->user_exists_by_name( um_queried_user() ); } diff --git a/includes/core/class-user.php b/includes/core/class-user.php index 1d7201da..20221847 100644 --- a/includes/core/class-user.php +++ b/includes/core/class-user.php @@ -706,7 +706,19 @@ if ( ! class_exists( 'um\core\User' ) ) { public function get_profile_slug( $user_id ) { // Permalink base $permalink_base = UM()->options()->get( 'permalink_base' ); - $profile_slug = get_user_meta( $user_id, "um_user_profile_url_slug_{$permalink_base}", true ); + if ( 'custom_meta' === $permalink_base ) { + $custom_meta = UM()->options()->get( 'permalink_base_custom_meta' ); + if ( empty( $custom_meta ) ) { + // Set default permalink base if custom meta is empty. + $permalink_base = 'user_login'; + $meta_key = 'um_user_profile_url_slug_' . $permalink_base; + } else { + $meta_key = $custom_meta; + } + } else { + $meta_key = 'um_user_profile_url_slug_' . $permalink_base; + } + $profile_slug = get_user_meta( $user_id, $meta_key, true ); //get default username permalink if it's empty then return false if ( empty( $profile_slug ) ) { @@ -781,6 +793,17 @@ if ( ! class_exists( 'um\core\User' ) ) { $user_in_url = $this->generate_user_hash( $user_id ); } + if ( 'custom_meta' === $permalink_base ) { + $custom_meta = UM()->options()->get( 'permalink_base_custom_meta' ); + if ( empty( $custom_meta ) ) { + // Set default permalink base if custom meta is empty. + $permalink_base = 'user_login'; + } else { + $user_in_url = rawurlencode( get_user_meta( $user_id, $custom_meta, true ) ); + $user_in_url = apply_filters( 'um_custom_meta_permalink_base_generate_user_slug', $user_in_url, $user_id, $custom_meta ); + } + } + // Username if ( 'user_login' === $permalink_base ) { @@ -2391,6 +2414,52 @@ if ( ! class_exists( 'um\core\User' ) ) { return false; } + /** + * @param string $slug + * + * @return bool|int + */ + public function user_exists_by_custom_meta( $slug ) { + $permalink_base = UM()->options()->get( 'permalink_base' ); + $custom_meta = UM()->options()->get( 'permalink_base_custom_meta' ); + if ( empty( $custom_meta ) ) { + // Set default permalink base if custom meta is empty. + $permalink_base = 'user_login'; + $meta_key = 'um_user_profile_url_slug_' . $permalink_base; + } else { + $meta_key = $custom_meta; + } + + $raw_value = $slug; + + // Search by Profile Slug + $args = array( + 'fields' => array( 'ID' ), + 'meta_query' => array( + 'relation' => 'OR', + array( + 'key' => $meta_key, + 'value' => strtolower( $raw_value ), + 'compare' => '=', + ), + array( + 'key' => 'um_user_profile_url_slug_' . $permalink_base, + 'value' => strtolower( $raw_value ), + 'compare' => '=', + ), + ), + ); + + $ids = new \WP_User_Query( $args ); + + if ( $ids->total_users > 0 ) { + $um_user_query = current( $ids->get_results() ); + return $um_user_query->ID; + } + + return false; + } + /** * This method checks if a user exists or not in your site based on the user email as username * From c144eefe6a5c53c8c88ac831d8703e7b4fa1797b Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Mon, 11 Sep 2023 16:18:56 +0300 Subject: [PATCH 05/81] - added `um_custom_meta_permalink_base_generate_user_slug` hook docs; --- includes/core/class-user.php | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/includes/core/class-user.php b/includes/core/class-user.php index 20221847..f88feadf 100644 --- a/includes/core/class-user.php +++ b/includes/core/class-user.php @@ -800,6 +800,28 @@ if ( ! class_exists( 'um\core\User' ) ) { $permalink_base = 'user_login'; } else { $user_in_url = rawurlencode( get_user_meta( $user_id, $custom_meta, true ) ); + /** + * Filters the user profile slug when custom meta is set. + * + * @param {string} $slug User profile slug. + * @param {int} $user_id User ID. + * @param {string} $metakey Meta key. + * + * @return {string} User profile slug. + * + * @since 2.6.12 + * @hook um_custom_meta_permalink_base_generate_user_slug + * + * @example Use base64encode value as user slug. + * function my_custom_meta_permalink_base_generate_user_slug( $slug, $user_id, $metakey ) { + * // your code here + * $slug = base64encode( $user_id ); + * update_user_meta( $user_id, $metakey, $slug ); + * $slug = rawurlencode( $slug ); + * return $slug; + * } + * add_filter( 'um_custom_meta_permalink_base_generate_user_slug', 'my_custom_meta_permalink_base_generate_user_slug', 10, 3 ); + */ $user_in_url = apply_filters( 'um_custom_meta_permalink_base_generate_user_slug', $user_in_url, $user_id, $custom_meta ); } } From ffc52f3f531a30927cf00978dd20560795ca47e7 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Tue, 12 Sep 2023 01:03:47 +0300 Subject: [PATCH 06/81] - added docs for `um_user_profile_restricted_edit_fields` hook; --- includes/core/class-fields.php | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/includes/core/class-fields.php b/includes/core/class-fields.php index 026f6322..5bfce945 100644 --- a/includes/core/class-fields.php +++ b/includes/core/class-fields.php @@ -2068,16 +2068,34 @@ if ( ! class_exists( 'um\core\Fields' ) ) { /** * Getting the fields that need to be disabled in edit mode (profile) * - * @param bool $_um_profile_id + * @param bool|int $_um_profile_id * * @return array */ - function get_restricted_fields_for_edit( $_um_profile_id = false ) { + public function get_restricted_fields_for_edit( $_um_profile_id = false ) { // fields that need to be disabled in edit mode (profile) $arr_restricted_fields = array( 'user_email', 'username', 'user_login', 'user_password', '_um_last_login', 'user_registered' ); - $arr_restricted_fields = apply_filters( 'um_user_profile_restricted_edit_fields', $arr_restricted_fields, $_um_profile_id ); - - return $arr_restricted_fields; + /** + * Filters the form fields that need to be disabled in edit mode (profile). + * + * @param {array} $fields Form fields. + * @param {int} $_um_profile_id User Profile ID. + * + * @return {array} Form fields. + * + * @since 2.0 + * @hook um_user_profile_restricted_edit_fields + * + * @example Make user email field editable on the Profile Page. + * function my_make_email_editable( $fields, $_um_profile_id ) { + * $fields = array_flip( $fields ); + * unset( $fields['user_email'] ); + * $fields = array_keys( $fields ); + * return $fields; + * } + * add_filter( 'um_user_profile_restricted_edit_fields', 'my_make_email_editable', 10, 2 ); + */ + return apply_filters( 'um_user_profile_restricted_edit_fields', $arr_restricted_fields, $_um_profile_id ); } /** From 1e2f285289a9e5c0e4aea4b51844697915be9fbc Mon Sep 17 00:00:00 2001 From: ashubawork Date: Wed, 13 Sep 2023 13:10:29 +0300 Subject: [PATCH 07/81] - add the ID to the blacklist of meta key --- includes/core/class-builtin.php | 41 ++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/includes/core/class-builtin.php b/includes/core/class-builtin.php index d296ac55..d4bf45bf 100644 --- a/includes/core/class-builtin.php +++ b/includes/core/class-builtin.php @@ -33,6 +33,11 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { */ public $saved_fields = array(); + /** + * @var array + */ + public $blacklist_fields = array(); + /** * @var array */ @@ -50,6 +55,7 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { add_action( 'init', array( &$this, 'set_core_fields' ), 1 ); add_action( 'init', array( &$this, 'set_predefined_fields' ), 1 ); add_action( 'init', array( &$this, 'set_custom_fields' ), 1 ); + add_action( 'init', array( &$this, 'set_blacklist_fields' ), 1 ); $this->saved_fields = get_option( 'um_fields', array() ); } @@ -149,7 +155,7 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { * * @return int|string */ - function unique_field_err( $key ) { + public function unique_field_err( $key ) { if ( empty( $key ) ) { return __( 'Please provide a meta key', 'ultimate-member' ); } @@ -162,6 +168,9 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { if ( isset( $this->saved_fields[ $key ] ) ) { return __( 'Your meta key already exists in your fields list', 'ultimate-member' ); } + if ( in_array( $key, $this->blacklist_fields, true ) ) { + return __( 'Your meta key can not be used', 'ultimate-member' ); + } if ( ! UM()->validation()->safe_string( $key ) ) { return __( 'Your meta key contains illegal characters. Please correct it.', 'ultimate-member' ); } @@ -1355,6 +1364,36 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { } + public function set_blacklist_fields() { + + $this->blacklist_fields = array( + 'ID', + ); + + /** + * UM hook + * + * @type filter + * @title um_blacklist_fields_hook + * @description Extend Blacklist Fields + * @input_vars + * [{"var":"$blacklist_fields","type":"array","desc":"Blacklist Fields"}] + * @change_log + * ["Since: 2.0"] + * @usage add_filter( 'um_blacklist_fields_hook', 'function_name', 10, 1 ); + * @example + * + */ + $this->blacklist_fields = apply_filters( 'um_blacklist_fields_hook', $this->blacklist_fields ); + } + + /** * Custom Fields */ From 35132844c57a1f09f694115d0ff535cb9f92c3f9 Mon Sep 17 00:00:00 2001 From: ashubawork Date: Wed, 13 Sep 2023 15:06:22 +0300 Subject: [PATCH 08/81] - change validation --- includes/admin/core/class-admin-builder.php | 5 +++ includes/core/class-builtin.php | 47 ++++++++++++--------- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/includes/admin/core/class-admin-builder.php b/includes/admin/core/class-admin-builder.php index 1ed73dbc..7787114f 100644 --- a/includes/admin/core/class-admin-builder.php +++ b/includes/admin/core/class-admin-builder.php @@ -86,6 +86,11 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) { continue; } + $blacklist_error = UM()->builtin()->blacklist_field_err( $submission_data['post']['_metakey'] ); + if ( ! empty( $blacklist_error ) ) { + $errors['_metakey'] = $blacklist_error; + } + switch ( $arr['mode'] ) { case 'numeric': if ( ! empty( $submission_data['post'][ $post_input ] ) && ! is_numeric( $submission_data['post'][ $post_input ] ) ) { diff --git a/includes/core/class-builtin.php b/includes/core/class-builtin.php index d4bf45bf..ad27a38c 100644 --- a/includes/core/class-builtin.php +++ b/includes/core/class-builtin.php @@ -168,9 +168,6 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { if ( isset( $this->saved_fields[ $key ] ) ) { return __( 'Your meta key already exists in your fields list', 'ultimate-member' ); } - if ( in_array( $key, $this->blacklist_fields, true ) ) { - return __( 'Your meta key can not be used', 'ultimate-member' ); - } if ( ! UM()->validation()->safe_string( $key ) ) { return __( 'Your meta key contains illegal characters. Please correct it.', 'ultimate-member' ); } @@ -179,6 +176,22 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { } + /** + * Checks for a blacklist field error + * + * @param $key + * + * @return int|string + */ + public function blacklist_field_err( $key ) { + if ( in_array( strtolower( $key ), UM()->builtin()->blacklist_fields, true ) ) { + return __( 'Your meta key can not be used', 'ultimate-member' ); + } + + return 0; + } + + /** * Check date range errors (start date) * @@ -1365,30 +1378,26 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { public function set_blacklist_fields() { - $this->blacklist_fields = array( - 'ID', + 'id', ); /** - * UM hook + * Filters change metakeys in the blacklist. * - * @type filter - * @title um_blacklist_fields_hook - * @description Extend Blacklist Fields - * @input_vars - * [{"var":"$blacklist_fields","type":"array","desc":"Blacklist Fields"}] - * @change_log - * ["Since: 2.0"] - * @usage add_filter( 'um_blacklist_fields_hook', 'function_name', 10, 1 ); - * @example - * Change array of metakeys in the blacklist. + * function my_um_blacklist_fields_hook( $blacklist_fields ) { * // your code here * return $blacklist_fields; * } - * ?> + * add_filter( 'um_blacklist_fields_hook', 'my_um_blacklist_fields_hook' ); */ $this->blacklist_fields = apply_filters( 'um_blacklist_fields_hook', $this->blacklist_fields ); } From bf7f3f06e67683b5496a6ed1b2d1b08b274f46b9 Mon Sep 17 00:00:00 2001 From: ashubawork Date: Wed, 13 Sep 2023 15:08:52 +0300 Subject: [PATCH 09/81] - fix validation --- includes/admin/core/class-admin-builder.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/includes/admin/core/class-admin-builder.php b/includes/admin/core/class-admin-builder.php index 7787114f..0a9567eb 100644 --- a/includes/admin/core/class-admin-builder.php +++ b/includes/admin/core/class-admin-builder.php @@ -49,6 +49,12 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) { return $errors; } + $blacklist_error = UM()->builtin()->blacklist_field_err( $submission_data['post']['_metakey'] ); + if ( ! empty( $blacklist_error ) ) { + $errors['_metakey'] = $blacklist_error; + return $errors; + } + $field_attr = UM()->builtin()->get_core_field_attrs( $submission_data['field_type'] ); if ( ! array_key_exists( 'validate', $field_attr ) ) { return $errors; @@ -86,11 +92,6 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) { continue; } - $blacklist_error = UM()->builtin()->blacklist_field_err( $submission_data['post']['_metakey'] ); - if ( ! empty( $blacklist_error ) ) { - $errors['_metakey'] = $blacklist_error; - } - switch ( $arr['mode'] ) { case 'numeric': if ( ! empty( $submission_data['post'][ $post_input ] ) && ! is_numeric( $submission_data['post'][ $post_input ] ) ) { From 887dfa44285205ad741c4894fe1b97e83bf41e8f Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Wed, 13 Sep 2023 16:19:48 +0300 Subject: [PATCH 10/81] - WPCS; --- includes/core/class-builtin.php | 55 ++++++++++++++++----------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/includes/core/class-builtin.php b/includes/core/class-builtin.php index ad27a38c..44956c60 100644 --- a/includes/core/class-builtin.php +++ b/includes/core/class-builtin.php @@ -175,23 +175,21 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { return 0; } - /** - * Checks for a blacklist field error + * Checks for a blacklist field error. * - * @param $key + * @param string $key Custom field metakey. * - * @return int|string + * @return int|string Empty or error string. */ public function blacklist_field_err( $key ) { - if ( in_array( strtolower( $key ), UM()->builtin()->blacklist_fields, true ) ) { + if ( in_array( strtolower( $key ), $this->blacklist_fields, true ) ) { return __( 'Your meta key can not be used', 'ultimate-member' ); } return 0; } - /** * Check date range errors (start date) * @@ -475,29 +473,29 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { ), 'date' => array( - 'name' => 'Date Picker', - 'col1' => array( '_title', '_metakey', '_help', '_default', '_range', '_years', '_years_x', '_range_start', '_range_end', '_visibility' ), - 'col2' => array( '_label', '_placeholder', '_public', '_roles', '_format', '_format_custom', '_pretty_format', '_disabled_weekdays' ), - 'col3' => array( '_required', '_editable', '_icon' ), - 'validate' => array( - '_title' => array( + 'name' => 'Date Picker', + 'col1' => array( '_title', '_metakey', '_help', '_default', '_range', '_years', '_years_x', '_range_start', '_range_end', '_visibility' ), + 'col2' => array( '_label', '_placeholder', '_public', '_roles', '_format', '_format_custom', '_pretty_format', '_disabled_weekdays' ), + 'col3' => array( '_required', '_editable', '_icon' ), + 'validate' => array( + '_title' => array( 'mode' => 'required', - 'error' => __( 'You must provide a title', 'ultimate-member' ) + 'error' => __( 'You must provide a title', 'ultimate-member' ), ), - '_metakey' => array( - 'mode' => 'unique', + '_metakey' => array( + 'mode' => 'unique', ), - '_years' => array( + '_years' => array( 'mode' => 'numeric', - 'error' => __( 'Number of years is not valid', 'ultimate-member' ) + 'error' => __( 'Number of years is not valid', 'ultimate-member' ), ), - '_range_start' => array( - 'mode' => 'range-start', + '_range_start' => array( + 'mode' => 'range-start', ), - '_range_end' => array( - 'mode' => 'range-end', + '_range_end' => array( + 'mode' => 'range-end', ), - ) + ), ), 'time' => array( @@ -1376,7 +1374,9 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { $this->predefined_fields = apply_filters( 'um_predefined_fields_hook', $this->predefined_fields ); } - + /** + * Set `blacklist_fields` to avoid creating the custom fields with these keys. + */ public function set_blacklist_fields() { $this->blacklist_fields = array( 'id', @@ -1388,13 +1388,13 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { * @since 2.6.12 * @hook um_blacklist_fields_hook * - * @param {array} $blacklist_fields array of metakeys in the blacklist. + * @param {array} $blacklist_fields Blacklisted usermeta keys. * - * @return {array} Array of metakeys in the blacklis. + * @return {array} Blacklisted usermeta keys. * - * @example Change array of metakeys in the blacklist. + * @example Change array of metakeys in the blacklist. Adding 'user_email' metakey. * function my_um_blacklist_fields_hook( $blacklist_fields ) { - * // your code here + * $blacklist_fields[] = 'user_email'; * return $blacklist_fields; * } * add_filter( 'um_blacklist_fields_hook', 'my_um_blacklist_fields_hook' ); @@ -1402,7 +1402,6 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { $this->blacklist_fields = apply_filters( 'um_blacklist_fields_hook', $this->blacklist_fields ); } - /** * Custom Fields */ From 4ea341007f07069bea862ca86189265b72d9bfbc Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Wed, 13 Sep 2023 16:54:12 +0300 Subject: [PATCH 11/81] - added 'um_form_version' postmeta for make the legacy functionality in the future; --- includes/admin/core/class-admin-metabox.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/includes/admin/core/class-admin-metabox.php b/includes/admin/core/class-admin-metabox.php index 934577e0..ff353493 100644 --- a/includes/admin/core/class-admin-metabox.php +++ b/includes/admin/core/class-admin-metabox.php @@ -1181,6 +1181,9 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) { return; } + // Set post meta for legacy support in the future. + add_post_meta( $post_id, 'um_form_version', UM_VERSION ); + if ( empty( $_POST['post_title'] ) ) { $where = array( 'ID' => $post_id ); // translators: %s: Form id. From a605a91b9128a69ddbb16906fe43c1ad8ce2f6a4 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Wed, 13 Sep 2023 16:59:15 +0300 Subject: [PATCH 12/81] - WPCS; --- includes/admin/core/class-admin-metabox.php | 35 +++++++++++---------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/includes/admin/core/class-admin-metabox.php b/includes/admin/core/class-admin-metabox.php index ff353493..83d2ea0b 100644 --- a/includes/admin/core/class-admin-metabox.php +++ b/includes/admin/core/class-admin-metabox.php @@ -1,13 +1,14 @@ admin()->sanitize_form_meta( $_POST['form'] ); foreach ( $form_meta as $k => $v ) { - if ( strstr( $k, '_um_' ) ) { - if ( $k === '_um_is_default' ) { + if ( 0 === strpos( $k, '_um_' ) ) { + if ( '_um_is_default' === $k ) { $mode = UM()->query()->get_attr( 'mode', $post_id ); if ( ! empty( $mode ) ) { - $posts = $wpdb->get_col( $wpdb->prepare( - "SELECT post_id - FROM {$wpdb->postmeta} - WHERE meta_key = '_um_mode' AND - meta_value = %s", - $mode - ) ); + $posts = $wpdb->get_col( + $wpdb->prepare( + "SELECT post_id + FROM {$wpdb->postmeta} + WHERE meta_key = '_um_mode' AND + meta_value = %s", + $mode + ) + ); foreach ( $posts as $p_id ) { delete_post_meta( $p_id, '_um_is_default' ); } @@ -1217,10 +1220,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) { update_post_meta( $post_id, $k, $v ); } } - } - /** * Load modal content */ From 57159f2496336a3d32726593a445214233bfd20c Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Wed, 13 Sep 2023 17:00:28 +0300 Subject: [PATCH 13/81] - WPCS; --- includes/admin/core/class-admin-metabox.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/admin/core/class-admin-metabox.php b/includes/admin/core/class-admin-metabox.php index 83d2ea0b..8ead46d6 100644 --- a/includes/admin/core/class-admin-metabox.php +++ b/includes/admin/core/class-admin-metabox.php @@ -1157,9 +1157,9 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) { } /** - * Save form metabox + * Save form metabox. * - * @param int $post_id + * @param int $post_id * @param WP_Post $post */ public function save_metabox_form( $post_id, $post ) { From b83da8b814f11194dc429a03ef643b462cb17839 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Wed, 13 Sep 2023 22:56:32 +0300 Subject: [PATCH 14/81] - WPCS for defined constants; * um_url -> UM_URL * um_path -> UM_PATH * um_plugin -> UM_PLUGIN * ultimatemember_version -> UM_VERSION * ultimatemember_plugin_name -> UM_PLUGIN_NAME --- includes/admin/core/class-admin-enqueue.php | 112 +++++++++--------- includes/admin/core/class-admin-gdpr.php | 8 +- includes/admin/core/class-admin-menu.php | 6 +- includes/admin/core/class-admin-metabox.php | 14 +-- includes/admin/core/class-admin-notices.php | 22 ++-- includes/admin/core/class-admin-settings.php | 14 +-- includes/admin/core/class-admin-upgrade.php | 10 +- .../packages/2.0-beta1/email_templates.php | 4 +- includes/admin/templates/extensions.php | 4 +- includes/admin/templates/gdpr.php | 4 +- includes/class-dependencies.php | 10 +- includes/class-functions.php | 2 +- includes/class-init.php | 16 +-- includes/core/class-blocks.php | 2 +- includes/core/class-enqueue.php | 100 ++++++++-------- includes/core/class-external-integrations.php | 2 +- includes/core/class-fonticons.php | 4 +- includes/core/class-gdpr.php | 2 +- includes/core/class-mail.php | 4 +- includes/core/class-modal.php | 4 +- includes/core/class-shortcodes.php | 6 +- includes/core/class-templates.php | 4 +- includes/core/rest/class-api.php | 2 +- includes/um-short-functions.php | 2 +- uninstall.php | 68 +++++------ 25 files changed, 213 insertions(+), 213 deletions(-) diff --git a/includes/admin/core/class-admin-enqueue.php b/includes/admin/core/class-admin-enqueue.php index b540ae27..d0b848a0 100644 --- a/includes/admin/core/class-admin-enqueue.php +++ b/includes/admin/core/class-admin-enqueue.php @@ -62,11 +62,11 @@ if ( ! class_exists( 'um\admin\core\Admin_Enqueue' ) ) { * Admin_Enqueue constructor. */ public function __construct() { - $this->js_url = um_url . 'includes/admin/assets/js/'; - $this->css_url = um_url . 'includes/admin/assets/css/'; + $this->js_url = UM_URL . 'includes/admin/assets/js/'; + $this->css_url = UM_URL . 'includes/admin/assets/css/'; - $this->front_js_baseurl = um_url . 'assets/js/'; - $this->front_css_baseurl = um_url . 'assets/css/'; + $this->front_js_baseurl = UM_URL . 'assets/js/'; + $this->front_css_baseurl = UM_URL . 'assets/css/'; $this->suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG || defined( 'UM_SCRIPT_DEBUG' ) ) ? '' : '.min'; @@ -98,22 +98,22 @@ if ( ! class_exists( 'um\admin\core\Admin_Enqueue' ) ) { * Enqueue Gutenberg Block Editor assets */ public function block_editor() { - wp_register_style( 'um_ui', um_url . 'assets/css/jquery-ui.css', array(), ultimatemember_version ); - wp_register_style( 'um_members', um_url . 'assets/css/um-members.css', array( 'um_ui' ), ultimatemember_version ); + wp_register_style( 'um_ui', UM_URL . 'assets/css/jquery-ui.css', array(), UM_VERSION ); + wp_register_style( 'um_members', UM_URL . 'assets/css/um-members.css', array( 'um_ui' ), UM_VERSION ); if ( is_rtl() ) { - wp_register_style( 'um_members_rtl', um_url . 'assets/css/um-members-rtl.css', array( 'um_members' ), ultimatemember_version ); + wp_register_style( 'um_members_rtl', UM_URL . 'assets/css/um-members-rtl.css', array( 'um_members' ), UM_VERSION ); } - wp_register_style( 'um_styles', um_url . 'assets/css/um-styles.css', array(), ultimatemember_version ); - wp_register_style( 'um_profile', um_url . 'assets/css/um-profile.css', array(), ultimatemember_version ); - wp_register_style( 'um_crop', um_url . 'assets/css/um-crop.css', array(), ultimatemember_version ); - wp_register_style( 'um_responsive', um_url . 'assets/css/um-responsive.css', array( 'um_profile', 'um_crop' ), ultimatemember_version ); - wp_register_style( 'um_account', um_url . 'assets/css/um-account.css', array(), ultimatemember_version ); - wp_register_style( 'um_default_css', um_url . 'assets/css/um-old-default.css', array(), ultimatemember_version ); - wp_register_style( 'um_fonticons_fa', um_url . 'assets/css/um-fonticons-fa.css', array(), ultimatemember_version ); - wp_register_style( 'select2', um_url . 'assets/css/select2/select2' . $this->suffix . '.css', array(), ultimatemember_version ); - wp_register_style( 'um_fonticons_ii', um_url . 'assets/css/um-fonticons-ii.css', array(), ultimatemember_version ); + wp_register_style( 'um_styles', UM_URL . 'assets/css/um-styles.css', array(), UM_VERSION ); + wp_register_style( 'um_profile', UM_URL . 'assets/css/um-profile.css', array(), UM_VERSION ); + wp_register_style( 'um_crop', UM_URL . 'assets/css/um-crop.css', array(), UM_VERSION ); + wp_register_style( 'um_responsive', UM_URL . 'assets/css/um-responsive.css', array( 'um_profile', 'um_crop' ), UM_VERSION ); + wp_register_style( 'um_account', UM_URL . 'assets/css/um-account.css', array(), UM_VERSION ); + wp_register_style( 'um_default_css', UM_URL . 'assets/css/um-old-default.css', array(), UM_VERSION ); + wp_register_style( 'um_fonticons_fa', UM_URL . 'assets/css/um-fonticons-fa.css', array(), UM_VERSION ); + wp_register_style( 'select2', UM_URL . 'assets/css/select2/select2' . $this->suffix . '.css', array(), UM_VERSION ); + wp_register_style( 'um_fonticons_ii', UM_URL . 'assets/css/um-fonticons-ii.css', array(), UM_VERSION ); - wp_register_script( 'um_admin_blocks_shortcodes', um_url . 'assets/js/um-blocks' . $this->suffix . '.js', array( 'wp-i18n', 'wp-blocks', 'wp-components' ), ultimatemember_version, true ); + wp_register_script( 'um_admin_blocks_shortcodes', UM_URL . 'assets/js/um-blocks' . $this->suffix . '.js', array( 'wp-i18n', 'wp-blocks', 'wp-components' ), UM_VERSION, true ); wp_set_script_translations( 'um_admin_blocks_shortcodes', 'ultimate-member' ); if ( ! empty( UM()->account()->get_tab_fields( 'notifications', array() ) ) ) { @@ -149,12 +149,12 @@ if ( ! class_exists( 'um\admin\core\Admin_Enqueue' ) ) { wp_enqueue_script( 'um_admin_blocks_shortcodes' ); - wp_register_script( 'select2', um_url . 'assets/js/select2/select2.full' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry' ), ultimatemember_version, true ); - wp_register_script( 'um_datetime', um_url . 'assets/js/pickadate/picker.js', array( 'jquery' ), ultimatemember_version, true ); - wp_register_script( 'um_datetime_date', um_url . 'assets/js/pickadate/picker.date.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); - wp_register_script( 'um_datetime_time', um_url . 'assets/js/pickadate/picker.time.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); - wp_register_script( 'um_conditional', um_url . 'assets/js/um-conditional' . $this->suffix . '.js', array( 'jquery', 'wp-hooks' ), ultimatemember_version, true ); - wp_register_script( 'um_scripts', um_url . 'assets/js/um-scripts' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', 'select2' ), ultimatemember_version, true ); + wp_register_script( 'select2', UM_URL . 'assets/js/select2/select2.full' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry' ), UM_VERSION, true ); + wp_register_script( 'um_datetime', UM_URL . 'assets/js/pickadate/picker.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_datetime_date', UM_URL . 'assets/js/pickadate/picker.date.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); + wp_register_script( 'um_datetime_time', UM_URL . 'assets/js/pickadate/picker.time.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); + wp_register_script( 'um_conditional', UM_URL . 'assets/js/um-conditional' . $this->suffix . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); + wp_register_script( 'um_scripts', UM_URL . 'assets/js/um-scripts' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', 'select2' ), UM_VERSION, true ); $max_upload_size = wp_max_upload_size(); if ( ! $max_upload_size ) { $max_upload_size = 0; @@ -169,14 +169,14 @@ if ( ! class_exists( 'um\admin\core\Admin_Enqueue' ) ) { ); wp_localize_script( 'um_scripts', 'um_scripts', $localize_data ); - wp_register_script( 'um_dropdown', um_url . 'assets/js/dropdown' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, true ); - wp_register_script( 'um_members', um_url . 'assets/js/um-members' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'jquery-ui-slider', 'um_dropdown', 'wp-hooks', 'jquery-masonry', 'um_scripts' ), ultimatemember_version, true ); + wp_register_script( 'um_dropdown', UM_URL . 'assets/js/dropdown' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_members', UM_URL . 'assets/js/um-members' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'jquery-ui-slider', 'um_dropdown', 'wp-hooks', 'jquery-masonry', 'um_scripts' ), UM_VERSION, true ); - wp_register_script( 'um_account', um_url . 'assets/js/um-account' . $this->suffix . '.js', array( 'jquery', 'wp-hooks' ), ultimatemember_version, true ); - wp_register_script( 'um_scrollbar', um_url . 'assets/js/simplebar' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, true ); - wp_register_script( 'um_crop', um_url . 'assets/js/um-crop' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, true ); - wp_register_script( 'um_functions', um_url . 'assets/js/um-functions' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry', 'wp-util', 'um_scrollbar' ), ultimatemember_version, true ); - wp_register_script( 'um_responsive', um_url . 'assets/js/um-responsive' . $this->suffix . '.js', array( 'jquery', 'um_functions', 'um_crop' ), ultimatemember_version, true ); + wp_register_script( 'um_account', UM_URL . 'assets/js/um-account' . $this->suffix . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); + wp_register_script( 'um_scrollbar', UM_URL . 'assets/js/simplebar' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_crop', UM_URL . 'assets/js/um-crop' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_functions', UM_URL . 'assets/js/um-functions' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry', 'wp-util', 'um_scrollbar' ), UM_VERSION, true ); + wp_register_script( 'um_responsive', UM_URL . 'assets/js/um-responsive' . $this->suffix . '.js', array( 'jquery', 'um_functions', 'um_crop' ), UM_VERSION, true ); // render blocks wp_enqueue_script( 'um_datetime' ); @@ -239,33 +239,33 @@ if ( ! class_exists( 'um\admin\core\Admin_Enqueue' ) ) { } wp_register_script( 'select2', $this->front_js_baseurl . 'select2/select2.full' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry' ), '4.0.13', true ); - wp_register_script( 'um_jquery_form', $this->front_js_baseurl . 'um-jquery-form' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, true ); - wp_register_script( 'um_fileupload', $this->front_js_baseurl . 'um-fileupload.js', array( 'jquery' ), ultimatemember_version, true ); - wp_register_script( 'um_crop', $this->front_js_baseurl . 'um-crop' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, true ); - wp_register_script( 'um_tipsy', $this->front_js_baseurl . 'um-tipsy' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, true ); - wp_register_script( 'um_functions', $this->front_js_baseurl . 'um-functions' . $this->suffix . '.js', array( 'jquery', 'um_tipsy', 'um_scrollbar' ), ultimatemember_version, true ); + wp_register_script( 'um_jquery_form', $this->front_js_baseurl . 'um-jquery-form' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_fileupload', $this->front_js_baseurl . 'um-fileupload.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_crop', $this->front_js_baseurl . 'um-crop' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_tipsy', $this->front_js_baseurl . 'um-tipsy' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_functions', $this->front_js_baseurl . 'um-functions' . $this->suffix . '.js', array( 'jquery', 'um_tipsy', 'um_scrollbar' ), UM_VERSION, true ); - wp_register_script( 'um_datetime', $this->front_js_baseurl . 'pickadate/picker.js', array( 'jquery' ), ultimatemember_version, true ); - wp_register_script( 'um_datetime_date', $this->front_js_baseurl . 'pickadate/picker.date.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); - wp_register_script( 'um_datetime_time', $this->front_js_baseurl . 'pickadate/picker.time.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); - //wp_register_script( 'um_datetime_legacy', $this->front_js_baseurl . 'pickadate/legacy.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); + wp_register_script( 'um_datetime', $this->front_js_baseurl . 'pickadate/picker.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_datetime_date', $this->front_js_baseurl . 'pickadate/picker.date.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); + wp_register_script( 'um_datetime_time', $this->front_js_baseurl . 'pickadate/picker.time.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); + //wp_register_script( 'um_datetime_legacy', $this->front_js_baseurl . 'pickadate/legacy.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); // load a localized version for date/time $locale = get_locale(); if ( $locale ) { if ( file_exists( WP_LANG_DIR . '/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js' ) ) { - wp_register_script( 'um_datetime_locale', content_url() . '/languages/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); - } elseif ( file_exists( um_path . 'assets/js/pickadate/translations/' . $locale . '.js' ) ) { - wp_register_script( 'um_datetime_locale', um_url . 'assets/js/pickadate/translations/' . $locale . '.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); + wp_register_script( 'um_datetime_locale', content_url() . '/languages/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); + } elseif ( file_exists( UM_PATH . 'assets/js/pickadate/translations/' . $locale . '.js' ) ) { + wp_register_script( 'um_datetime_locale', UM_URL . 'assets/js/pickadate/translations/' . $locale . '.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); } } - wp_register_script( 'um_scripts', $this->front_js_baseurl . 'um-scripts' . $this->suffix . '.js', array( 'um_functions', 'um_crop', 'um_raty', 'select2', 'um_jquery_form', 'um_fileupload', 'um_datetime', 'um_datetime_date', 'um_datetime_time'/*, 'um_datetime_legacy'*/ ), ultimatemember_version, true ); - wp_register_script( 'um_responsive', $this->front_js_baseurl . 'um-responsive' . $this->suffix . '.js', array( 'um_scripts' ), ultimatemember_version, true ); - wp_register_script( 'um_modal', $this->front_js_baseurl . 'um-modal' . $this->suffix . '.js', array( 'um_responsive' ), ultimatemember_version, true ); + wp_register_script( 'um_scripts', $this->front_js_baseurl . 'um-scripts' . $this->suffix . '.js', array( 'um_functions', 'um_crop', 'um_raty', 'select2', 'um_jquery_form', 'um_fileupload', 'um_datetime', 'um_datetime_date', 'um_datetime_time'/*, 'um_datetime_legacy'*/ ), UM_VERSION, true ); + wp_register_script( 'um_responsive', $this->front_js_baseurl . 'um-responsive' . $this->suffix . '.js', array( 'um_scripts' ), UM_VERSION, true ); + wp_register_script( 'um_modal', $this->front_js_baseurl . 'um-modal' . $this->suffix . '.js', array( 'um_responsive' ), UM_VERSION, true ); wp_register_style( 'select2', $this->front_css_baseurl . 'select2/select2' . $this->suffix . '.css', array(), '4.0.13' ); - wp_register_style( 'um_datetime', $this->front_css_baseurl . 'pickadate/default.css', array(), ultimatemember_version ); - wp_register_style( 'um_datetime_date', $this->front_css_baseurl . 'pickadate/default.date.css', array( 'um_datetime' ), ultimatemember_version ); + wp_register_style( 'um_datetime', $this->front_css_baseurl . 'pickadate/default.css', array(), UM_VERSION ); + wp_register_style( 'um_datetime_date', $this->front_css_baseurl . 'pickadate/default.date.css', array( 'um_datetime' ), UM_VERSION ); wp_register_style( 'um_datetime_time', $this->front_css_baseurl . 'pickadate/default.time.css', array( 'um_datetime' ), ultimatemember_version ); wp_register_style( 'um_scrollbar', $this->front_css_baseurl . 'simplebar.css', array(), ultimatemember_version ); @@ -485,8 +485,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Enqueue' ) ) { * Load functions js */ public function load_functions() { - wp_register_script( 'um_scrollbar', um_url . 'assets/js/simplebar.js', array( 'jquery' ), ultimatemember_version, true ); - wp_register_script( 'um_functions', um_url . 'assets/js/um-functions.js', array( 'jquery', 'jquery-masonry', 'wp-util', 'um_scrollbar' ), ultimatemember_version, true ); + wp_register_script( 'um_scrollbar', UM_URL . 'assets/js/simplebar.js', array( 'jquery' ), ultimatemember_version, true ); + wp_register_script( 'um_functions', UM_URL . 'assets/js/um-functions.js', array( 'jquery', 'jquery-masonry', 'wp-util', 'um_scrollbar' ), ultimatemember_version, true ); wp_enqueue_script( 'um_functions' ); } @@ -495,10 +495,10 @@ if ( ! class_exists( 'um\admin\core\Admin_Enqueue' ) ) { * Load Fonticons */ public function load_fonticons() { - wp_register_style( 'um_fonticons_ii', um_url . 'assets/css/um-fonticons-ii.css', array(), ultimatemember_version ); + wp_register_style( 'um_fonticons_ii', UM_URL . 'assets/css/um-fonticons-ii.css', array(), ultimatemember_version ); wp_enqueue_style( 'um_fonticons_ii' ); - wp_register_style( 'um_fonticons_fa', um_url . 'assets/css/um-fonticons-fa.css', array(), ultimatemember_version ); + wp_register_style( 'um_fonticons_fa', UM_URL . 'assets/css/um-fonticons-fa.css', array(), ultimatemember_version ); wp_enqueue_style( 'um_fonticons_fa' ); } @@ -528,8 +528,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Enqueue' ) ) { if ( $locale ) { if ( file_exists( WP_LANG_DIR . '/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js' ) ) { wp_register_script( 'um_datetime_locale', content_url() . '/languages/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); - } elseif ( file_exists( um_path . 'assets/js/pickadate/translations/' . $locale . '.js' ) ) { - wp_register_script( 'um_datetime_locale', um_url . 'assets/js/pickadate/translations/' . $locale . '.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); + } elseif ( file_exists( UM_PATH . 'assets/js/pickadate/translations/' . $locale . '.js' ) ) { + wp_register_script( 'um_datetime_locale', UM_URL . 'assets/js/pickadate/translations/' . $locale . '.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); } } @@ -694,10 +694,10 @@ if ( ! class_exists( 'um\admin\core\Admin_Enqueue' ) ) { UM()->enqueue()->load_modal(); UM()->enqueue()->load_responsive(); - wp_register_script( 'um_raty', um_url . 'assets/js/um-raty' . UM()->enqueue()->suffix . '.js', array( 'jquery', 'wp-i18n' ), ultimatemember_version, true ); - wp_register_style( 'um_raty', um_url . 'assets/css/um-raty.css', array(), ultimatemember_version ); + wp_register_script( 'um_raty', UM_URL . 'assets/js/um-raty' . UM()->enqueue()->suffix . '.js', array( 'jquery', 'wp-i18n' ), ultimatemember_version, true ); + wp_register_style( 'um_raty', UM_URL . 'assets/css/um-raty.css', array(), ultimatemember_version ); - wp_register_style( 'um_default_css', um_url . 'assets/css/um-old-default.css', '', ultimatemember_version, 'all' ); + wp_register_style( 'um_default_css', UM_URL . 'assets/css/um-old-default.css', '', ultimatemember_version, 'all' ); wp_enqueue_style( 'um_default_css' ); if ( is_rtl() ) { diff --git a/includes/admin/core/class-admin-gdpr.php b/includes/admin/core/class-admin-gdpr.php index 55e947bd..f7dbcf9d 100644 --- a/includes/admin/core/class-admin-gdpr.php +++ b/includes/admin/core/class-admin-gdpr.php @@ -137,7 +137,7 @@ if ( ! class_exists( 'um\admin\core\Admin_GDPR' ) ) { */ function plugin_add_suggested_privacy_content() { $content = $this->plugin_get_default_privacy_content(); - wp_add_privacy_policy_content( ultimatemember_plugin_name, $content ); + wp_add_privacy_policy_content( UM_PLUGIN_NAME, $content ); } @@ -152,7 +152,7 @@ if ( ! class_exists( 'um\admin\core\Admin_GDPR' ) ) { */ function plugin_register_exporters( $exporters ) { $exporters[] = array( - 'exporter_friendly_name' => ultimatemember_plugin_name, + 'exporter_friendly_name' => UM_PLUGIN_NAME, 'callback' => array( &$this, 'data_exporter' ) ); return $exporters; @@ -222,7 +222,7 @@ if ( ! class_exists( 'um\admin\core\Admin_GDPR' ) ) { // If you define your own group, the first exporter to // include a label will be used as the group label in the // final exported report - $group_label = ultimatemember_plugin_name; + $group_label = UM_PLUGIN_NAME; // Plugins can add as many items in the item data array as they want //$data = array(); @@ -257,7 +257,7 @@ if ( ! class_exists( 'um\admin\core\Admin_GDPR' ) ) { */ function plugin_register_erasers( $erasers = array() ) { $erasers[] = array( - 'eraser_friendly_name' => ultimatemember_plugin_name, + 'eraser_friendly_name' => UM_PLUGIN_NAME, 'callback' => array( &$this, 'data_eraser' ) ); return $erasers; diff --git a/includes/admin/core/class-admin-menu.php b/includes/admin/core/class-admin-menu.php index af82e47f..b90c3698 100644 --- a/includes/admin/core/class-admin-menu.php +++ b/includes/admin/core/class-admin-menu.php @@ -192,9 +192,9 @@ if ( ! class_exists( 'um\admin\core\Admin_Menu' ) ) { */ function um_roles_pages() { if ( empty( $_GET['tab'] ) ) { - include_once um_path . 'includes/admin/core/list-tables/roles-list-table.php'; + include_once UM_PATH . 'includes/admin/core/list-tables/roles-list-table.php'; } elseif ( 'add' === sanitize_key( $_GET['tab'] ) || 'edit' === sanitize_key( $_GET['tab'] ) ) { - include_once um_path . 'includes/admin/templates/role/role-edit.php'; + include_once UM_PATH . 'includes/admin/templates/role/role-edit.php'; } else { um_js_redirect( add_query_arg( array( 'page' => 'um_roles' ), get_admin_url( 'admin.php' ) ) ); } @@ -301,7 +301,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Menu' ) ) {
-

Ultimate Member

+

Ultimate Member

diff --git a/includes/admin/core/class-admin-metabox.php b/includes/admin/core/class-admin-metabox.php index 8ead46d6..4eacf967 100644 --- a/includes/admin/core/class-admin-metabox.php +++ b/includes/admin/core/class-admin-metabox.php @@ -710,7 +710,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) { $path = $matches[0]; $box['id'] = preg_replace('~(\\{[^}]+\\})~','', $box['id'] ); } else { - $path = um_path; + $path = UM_PATH; } $path = str_replace('{','', $path ); @@ -746,7 +746,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) { $path = $matches[0]; $box['id'] = preg_replace('~(\\{[^}]+\\})~','', $box['id'] ); } else { - $path = um_path; + $path = UM_PATH; } $path = str_replace('{','', $path ); @@ -778,7 +778,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) { $path = $matches[0]; $box['id'] = preg_replace('~(\\{[^}]+\\})~','', $box['id'] ); } else { - $path = um_path; + $path = UM_PATH; } $path = str_replace('{','', $path ); @@ -810,7 +810,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) { $path = $matches[0]; $box['id'] = preg_replace('~(\\{[^}]+\\})~','', $box['id'] ); } else { - $path = um_path; + $path = UM_PATH; } $path = str_replace('{','', $path ); @@ -1229,17 +1229,17 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) { $screen = get_current_screen(); if ( isset( $screen->id ) && strstr( $screen->id, 'um_form' ) ) { - foreach ( glob( um_path . 'includes/admin/templates/modal/forms/*.php' ) as $modal_content ) { + foreach ( glob( UM_PATH . 'includes/admin/templates/modal/forms/*.php' ) as $modal_content ) { include_once $modal_content; } } if ( $this->init_icon ) { - include_once um_path . 'includes/admin/templates/modal/forms/fonticons.php'; + include_once UM_PATH . 'includes/admin/templates/modal/forms/fonticons.php'; } if ( 'users' === $screen->id ) { - include_once um_path . 'includes/admin/templates/modal/dynamic_registration_preview.php'; + include_once UM_PATH . 'includes/admin/templates/modal/dynamic_registration_preview.php'; } // needed on forms only diff --git a/includes/admin/core/class-admin-notices.php b/includes/admin/core/class-admin-notices.php index 257db6e7..371448df 100644 --- a/includes/admin/core/class-admin-notices.php +++ b/includes/admin/core/class-admin-notices.php @@ -365,7 +365,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Notices' ) ) { array( 'class' => 'error', // translators: %1$s is a plugin name; %2$s is a plugin version; %3$s is a plugin name; %4$s is a doc link. - 'message' => '

' . sprintf( __( '%1$s %2$s requires 2.0 extensions. You have pre 2.0 extensions installed on your site.
Please update %3$s extensions to latest versions. For more info see this doc.', 'ultimate-member' ), ultimatemember_plugin_name, ultimatemember_version, ultimatemember_plugin_name, 'https://docs.ultimatemember.com/article/201-how-to-update-your-site' ) . '

', + 'message' => '

' . sprintf( __( '%1$s %2$s requires 2.0 extensions. You have pre 2.0 extensions installed on your site.
Please update %3$s extensions to latest versions. For more info see this doc.', 'ultimate-member' ), UM_PLUGIN_NAME, UM_VERSION, UM_PLUGIN_NAME, 'https://docs.ultimatemember.com/article/201-how-to-update-your-site' ) . '

', ), 0 ); @@ -396,7 +396,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Notices' ) ) {

get_allowed_html( 'admin_notice' ) ); + echo wp_kses( sprintf( __( '%s needs to create several pages (User Profiles, Account, Registration, Login, Password Reset, Logout, Member Directory) to function correctly.', 'ultimate-member' ), UM_PLUGIN_NAME ), UM()->get_allowed_html( 'admin_notice' ) ); ?>

@@ -569,7 +569,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Notices' ) ) { function check_wrong_install_folder() { $invalid_folder = false; - $slug_array = explode( '/', um_plugin ); + $slug_array = explode( '/', UM_PLUGIN ); if ( $slug_array[0] != 'ultimate-member' ) { $invalid_folder = true; } @@ -580,7 +580,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Notices' ) ) { array( 'class' => 'error', // translators: %s: Plugin name. - 'message' => '

' . sprintf( __( 'You have installed %s with wrong folder name. Correct folder name is "ultimate-member".', 'ultimate-member' ), ultimatemember_plugin_name ) . '

', + 'message' => '

' . sprintf( __( 'You have installed %s with wrong folder name. Correct folder name is "ultimate-member".', 'ultimate-member' ), UM_PLUGIN_NAME ) . '

', ), 1 ); @@ -615,7 +615,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Notices' ) ) { array( 'class' => 'error', // translators: %1$s is a inactive license number; %2$s is a plugin name; %3$s is a store link. - 'message' => '

' . sprintf( __( 'There are %1$s inactive %2$s license keys for this site. This site is not authorized to get plugin updates. You can active this site on www.ultimatemember.com.', 'ultimate-member' ), count( $arr_inactive_license_keys ), ultimatemember_plugin_name, UM()->store_url ) . '

', + 'message' => '

' . sprintf( __( 'There are %1$s inactive %2$s license keys for this site. This site is not authorized to get plugin updates. You can active this site on www.ultimatemember.com.', 'ultimate-member' ), count( $arr_inactive_license_keys ), UM_PLUGIN_NAME, UM()->store_url ) . '

', ), 3 ); @@ -627,7 +627,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Notices' ) ) { array( 'class' => 'error', // translators: %1$s is a invalid license; %2$s is a plugin name; %3$s is a license link. - 'message' => '

' . sprintf( __( 'You have %1$s invalid or expired license keys for %2$s. Please go to the Licenses page to correct this issue.', 'ultimate-member' ), $invalid_license, ultimatemember_plugin_name, add_query_arg( array( 'page' => 'um_options', 'tab' => 'licenses' ), admin_url( 'admin.php' ) ) ) . '

', + 'message' => '

' . sprintf( __( 'You have %1$s invalid or expired license keys for %2$s. Please go to the Licenses page to correct this issue.', 'ultimate-member' ), $invalid_license, UM_PLUGIN_NAME, add_query_arg( array( 'page' => 'um_options', 'tab' => 'licenses' ), admin_url( 'admin.php' ) ) ) . '

', ), 3 ); @@ -645,7 +645,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Notices' ) ) {

%1$s version %2$s needs to be updated to work correctly.
It is necessary to update the structure of the database and options that are associated with %3$s %4$s.
Please visit "Upgrade" page and run the upgrade process.', 'ultimate-member' ), ultimatemember_plugin_name, ultimatemember_version, ultimatemember_plugin_name, ultimatemember_version, $url ), UM()->get_allowed_html( 'admin_notice' ) ); + echo wp_kses( sprintf( __( '%1$s version %2$s needs to be updated to work correctly.
It is necessary to update the structure of the database and options that are associated with %3$s %4$s.
Please visit "Upgrade" page and run the upgrade process.', 'ultimate-member' ), UM_PLUGIN_NAME, UM_VERSION, UM_PLUGIN_NAME, UM_VERSION, $url ), UM()->get_allowed_html( 'admin_notice' ) ); ?>

@@ -673,7 +673,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Notices' ) ) { array( 'class' => 'updated', // translators: %1$s is a plugin name title; %2$s is a plugin version. - 'message' => '

' . sprintf( __( '%1$s %2$s Successfully Upgraded', 'ultimate-member' ), ultimatemember_plugin_name, ultimatemember_version ) . '

', + 'message' => '

' . sprintf( __( '%1$s %2$s Successfully Upgraded', 'ultimate-member' ), UM_PLUGIN_NAME, UM_VERSION ) . '

', ), 4 ); @@ -704,7 +704,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Notices' ) ) {

get_allowed_html( 'admin_notice' ) ); + echo wp_kses( sprintf( __( 'Hey there! It\'s been one month since you installed %s. How have you found the plugin so far?', 'ultimate-member' ), UM_PLUGIN_NAME ), UM()->get_allowed_html( 'admin_notice' ) ); ?>

@@ -715,7 +715,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Notices' ) ) {

- +

@@ -761,7 +761,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Notices' ) ) {

%1$s future plans! Detailed future list is here', 'ultimate-member' ), ultimatemember_plugin_name, '#' ), UM()->get_allowed_html( 'admin_notice' ) ); + echo wp_kses( sprintf( __( '%1$s future plans! Detailed future list is here', 'ultimate-member' ), UM_PLUGIN_NAME, '#' ), UM()->get_allowed_html( 'admin_notice' ) ); ?>

diff --git a/includes/admin/core/class-admin-settings.php b/includes/admin/core/class-admin-settings.php index 5046d64e..65e0bc92 100644 --- a/includes/admin/core/class-admin-settings.php +++ b/includes/admin/core/class-admin-settings.php @@ -1474,7 +1474,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { 'tooltip' => __( 'You can change the default profile picture globally here. Please make sure that the photo is 300x300px.', 'ultimate-member' ), 'upload_frame_title' => __( 'Select Default Profile Photo', 'ultimate-member' ), 'default' => array( - 'url' => um_url . 'assets/img/default_avatar.jpg', + 'url' => UM_URL . 'assets/img/default_avatar.jpg', ), ), array( @@ -2660,7 +2660,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { $emails = UM()->config()->email_notifications; if ( empty( $email_key ) || empty( $emails[ $email_key ] ) ) { - include_once um_path . 'includes/admin/core/list-tables/emails-list-table.php'; + include_once UM_PATH . 'includes/admin/core/list-tables/emails-list-table.php'; } } @@ -3121,7 +3121,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {

scan_template_files( um_path . '/templates/' ); + $scan_files['um'] = $this->scan_template_files( UM_PATH . '/templates/' ); /** * Filters an array of the template files for scanning versions. * @@ -3199,8 +3199,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { $core_path = $located['core']; $core_file_path = stristr( $core_path, 'wp-content' ); } else { - $core_path = um_path . '/templates/' . $core_file; - $core_file_path = stristr( um_path . 'templates/' . $core_file, 'wp-content' ); + $core_path = UM_PATH . '/templates/' . $core_file; + $core_file_path = stristr( UM_PATH . 'templates/' . $core_file, 'wp-content' ); } $core_version = $this->get_file_version( $core_path ); $theme_version = $this->get_file_version( $theme_file ); @@ -3312,7 +3312,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { global $wpdb; if ( ! class_exists( '\Browser' ) ) - require_once um_path . 'includes/lib/browser.php'; + require_once UM_PATH . 'includes/lib/browser.php'; // Detect browser $browser = new \Browser(); diff --git a/includes/admin/core/class-admin-upgrade.php b/includes/admin/core/class-admin-upgrade.php index bb6f21f5..765bf79c 100644 --- a/includes/admin/core/class-admin-upgrade.php +++ b/includes/admin/core/class-admin-upgrade.php @@ -69,7 +69,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Upgrade' ) ) { add_action( 'wp_loaded', array( $this, 'initialize_upgrade_packages' ), 0 ); } - add_action( 'in_plugin_update_message-' . um_plugin, array( $this, 'in_plugin_update_message' ) ); + add_action( 'in_plugin_update_message-' . UM_PLUGIN, array( $this, 'in_plugin_update_message' ) ); } /** @@ -92,7 +92,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Upgrade' ) ) { function in_plugin_update_message( $args ) { $show_additional_notice = false; if ( isset( $args['new_version'] ) ) { - $old_version_array = explode( '.', ultimatemember_version ); + $old_version_array = explode( '.', UM_VERSION ); $new_version_array = explode( '.', $args['new_version'] ); if ( $old_version_array[0] < $new_version_array[0] ) { @@ -175,7 +175,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Upgrade' ) ) { $all_packages = $this->get_packages(); foreach ( $all_packages as $package ) { - if ( version_compare( $um_last_version_upgrade, $package, '<' ) && version_compare( $package, ultimatemember_version, '<=' ) ) { + if ( version_compare( $um_last_version_upgrade, $package, '<' ) && version_compare( $package, UM_VERSION, '<=' ) ) { $diff_packages[] = $package; } } @@ -257,13 +257,13 @@ if ( ! class_exists( 'um\admin\core\Admin_Upgrade' ) ) {

get_allowed_html( 'admin_notice' ) ); + echo wp_kses( sprintf( __( '%s - Upgrade Process', 'ultimate-member' ), UM_PLUGIN_NAME ), UM()->get_allowed_html( 'admin_notice' ) ); ?>

%1$s version. Your latest DB version is %2$s. We recommend creating a backup of your site before running the update process. Do not exit the page before the update process has complete.', 'ultimate-member' ), ultimatemember_version, $um_last_version_upgrade ), UM()->get_allowed_html( 'admin_notice' ) ); + echo wp_kses( sprintf( __( 'You have installed %1$s version. Your latest DB version is %2$s. We recommend creating a backup of your site before running the update process. Do not exit the page before the update process has complete.', 'ultimate-member' ), UM_VERSION, $um_last_version_upgrade ), UM()->get_allowed_html( 'admin_notice' ) ); ?>

"Run" button, the update process will start. All information will be displayed in the "Upgrade Log" field.', 'ultimate-member' ); ?>

diff --git a/includes/admin/core/packages/2.0-beta1/email_templates.php b/includes/admin/core/packages/2.0-beta1/email_templates.php index b8f71e26..e7f3bcc8 100644 --- a/includes/admin/core/packages/2.0-beta1/email_templates.php +++ b/includes/admin/core/packages/2.0-beta1/email_templates.php @@ -50,7 +50,7 @@ function um_upgrade20beta1_get_template_file( $location, $template_name, $html = $template_path = trailingslashit( get_stylesheet_directory() . '/ultimate-member/email' . $blog_id ). $template_name_file . $ext; break; case 'plugin': - $path = ! empty( UM()->mail()->path_by_slug[ $template_name ] ) ? UM()->mail()->path_by_slug[ $template_name ] : um_path . 'templates/email'; + $path = ! empty( UM()->mail()->path_by_slug[ $template_name ] ) ? UM()->mail()->path_by_slug[ $template_name ] : UM_PATH . 'templates/email'; $template_path = trailingslashit( $path ) . $template_name . $ext; break; } @@ -194,4 +194,4 @@ if ( is_multisite() ) { restore_current_blog(); } else { um_upgrade20beta1_email_templates_process(); -} \ No newline at end of file +} diff --git a/includes/admin/templates/extensions.php b/includes/admin/templates/extensions.php index be183050..d392c867 100644 --- a/includes/admin/templates/extensions.php +++ b/includes/admin/templates/extensions.php @@ -232,7 +232,7 @@ $free['terms-conditions'] = array(
@@ -261,7 +261,7 @@ $free['terms-conditions'] = array(
diff --git a/includes/admin/templates/gdpr.php b/includes/admin/templates/gdpr.php index eadd8331..b37d159d 100644 --- a/includes/admin/templates/gdpr.php +++ b/includes/admin/templates/gdpr.php @@ -9,7 +9,7 @@

get_allowed_html( 'admin_notice' ) ); + echo wp_kses( sprintf( __( '%s provides you with forms for user registration, login and profiles.', 'ultimate-member' ), UM_PLUGIN_NAME ), UM()->get_allowed_html( 'admin_notice' ) ); ?>

@@ -38,7 +38,7 @@

get_allowed_html( 'admin_notice' ) ); + echo wp_kses( sprintf( __( '%s does not send any user data outside of your site by default.', 'ultimate-member' ), UM_PLUGIN_NAME ), UM()->get_allowed_html( 'admin_notice' ) ); ?>

diff --git a/includes/class-dependencies.php b/includes/class-dependencies.php index 1bc977e0..4fbc8f61 100644 --- a/includes/class-dependencies.php +++ b/includes/class-dependencies.php @@ -187,20 +187,20 @@ if ( ! class_exists( 'um\Dependencies' ) ) { */ public function compare_versions( $um_required_ver, $ext_ver, $ext_key, $ext_title ) { - if ( version_compare( ultimatemember_version, $um_required_ver, '<' ) + if ( version_compare( UM_VERSION, $um_required_ver, '<' ) || empty( $this->ext_required_version[$ext_key] ) || version_compare( $this->ext_required_version[$ext_key], $ext_ver, '>' ) ) { $message = ''; - if ( version_compare( ultimatemember_version, $um_required_ver, '<' ) ) { + if ( version_compare( UM_VERSION, $um_required_ver, '<' ) ) { // translators: %1$s is a extension name; %2$s is a plugin name; %3$s is a required version. - $message = sprintf( __( 'This version of "%1$s" requires the core %2$s plugin to be %3$s or higher.', 'ultimate-member' ), $ext_title, ultimatemember_plugin_name, $um_required_ver ) . + $message = sprintf( __( 'This version of "%1$s" requires the core %2$s plugin to be %3$s or higher.', 'ultimate-member' ), $ext_title, UM_PLUGIN_NAME, $um_required_ver ) . '
' . // translators: %s: plugin name. - sprintf( __( 'Please update %s to the latest version.', 'ultimate-member' ), ultimatemember_plugin_name ); + sprintf( __( 'Please update %s to the latest version.', 'ultimate-member' ), UM_PLUGIN_NAME ); } elseif ( empty( $this->ext_required_version[ $ext_key ] ) || version_compare( $this->ext_required_version[ $ext_key ], $ext_ver, '>' ) ) { // translators: %1$s is a plugin name; %2$s is a extension name; %3$s is a extension version. - $message = sprintf( __( 'Sorry, but this version of %1$s does not work with extension "%2$s" %3$s version.', 'ultimate-member' ), ultimatemember_plugin_name, $ext_title, $ext_ver ) . + $message = sprintf( __( 'Sorry, but this version of %1$s does not work with extension "%2$s" %3$s version.', 'ultimate-member' ), UM_PLUGIN_NAME, $ext_title, $ext_ver ) . '
' . // translators: %s: extension name. sprintf( __( 'Please update extension "%s" to the latest version.', 'ultimate-member' ), $ext_title ); diff --git a/includes/class-functions.php b/includes/class-functions.php index dabefd4e..391e272c 100644 --- a/includes/class-functions.php +++ b/includes/class-functions.php @@ -302,7 +302,7 @@ if ( ! class_exists( 'UM_Functions' ) ) { if ( $path ) { $template = trailingslashit( trailingslashit( WP_PLUGIN_DIR ) . $path ); } else { - $template = trailingslashit( um_path ); + $template = trailingslashit( UM_PATH ); } $template .= 'templates' . DIRECTORY_SEPARATOR . $template_name; } diff --git a/includes/class-init.php b/includes/class-init.php index 2cf9fdf6..4a22e0e7 100644 --- a/includes/class-init.php +++ b/includes/class-init.php @@ -215,9 +215,9 @@ if ( ! class_exists( 'UM' ) ) { add_action( 'init', array( &$this, 'old_update_patch' ), 0 ); //run activation - register_activation_hook( um_plugin, array( &$this, 'activation' ) ); + register_activation_hook( UM_PLUGIN, array( &$this, 'activation' ) ); - register_deactivation_hook( um_plugin, array( &$this, 'deactivation' ) ); + register_deactivation_hook( UM_PLUGIN, array( &$this, 'deactivation' ) ); if ( is_multisite() && ! defined( 'DOING_AJAX' ) ) { add_action( 'wp_loaded', array( $this, 'maybe_network_activation' ) ); @@ -430,7 +430,7 @@ if ( ! class_exists( 'UM' ) ) { $array = explode( '\\', strtolower( $class ) ); $array[ count( $array ) - 1 ] = 'class-'. end( $array ); if ( strpos( $class, 'um_ext' ) === 0 ) { - $full_path = str_replace( 'ultimate-member', '', untrailingslashit( um_path ) ) . str_replace( '_', '-', $array[1] ) . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR; + $full_path = str_replace( 'ultimate-member', '', untrailingslashit( UM_PATH ) ) . str_replace( '_', '-', $array[1] ) . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR; unset( $array[0], $array[1] ); $path = implode( DIRECTORY_SEPARATOR, $array ); $path = str_replace( '_', '-', $path ); @@ -442,7 +442,7 @@ if ( ! class_exists( 'UM' ) ) { array( 'um\\', '_', '\\' ), array( $slash, '-', $slash ), $class ); - $full_path = um_path . 'includes' . $path . '.php'; + $full_path = UM_PATH . 'includes' . $path . '.php'; } if( isset( $full_path ) && file_exists( $full_path ) ) { @@ -487,7 +487,7 @@ if ( ! class_exists( 'UM' ) ) { delete_network_option( get_current_network_id(), 'um_maybe_network_wide_activation' ); - if ( is_plugin_active_for_network( um_plugin ) ) { + if ( is_plugin_active_for_network( UM_PLUGIN ) ) { // get all blogs $blogs = get_sites(); if ( ! empty( $blogs ) ) { @@ -510,7 +510,7 @@ if ( ! class_exists( 'UM' ) ) { //first install $version = get_option( 'um_version' ); if ( ! $version ) { - update_option( 'um_last_version_upgrade', ultimatemember_version ); + update_option( 'um_last_version_upgrade', UM_VERSION ); add_option( 'um_first_activation_date', time() ); @@ -522,8 +522,8 @@ if ( ! class_exists( 'UM' ) ) { UM()->options()->update( 'rest_api_version', '1.0' ); } - if ( $version != ultimatemember_version ) { - update_option( 'um_version', ultimatemember_version ); + if ( $version != UM_VERSION ) { + update_option( 'um_version', UM_VERSION ); } //run setup diff --git a/includes/core/class-blocks.php b/includes/core/class-blocks.php index ce3ed1cb..8e76e467 100644 --- a/includes/core/class-blocks.php +++ b/includes/core/class-blocks.php @@ -131,7 +131,7 @@ if ( ! class_exists( 'um\core\Blocks' ) ) { foreach ( $blocks as $k => $block_data ) { $block_type = str_replace( 'um-block/', '', $k ); - register_block_type_from_metadata( um_path . 'includes/blocks/' . $block_type, $block_data ); + register_block_type_from_metadata( UM_PATH . 'includes/blocks/' . $block_type, $block_data ); } } diff --git a/includes/core/class-enqueue.php b/includes/core/class-enqueue.php index 07aeb973..ae6d4af1 100644 --- a/includes/core/class-enqueue.php +++ b/includes/core/class-enqueue.php @@ -40,8 +40,8 @@ if ( ! class_exists( 'um\core\Enqueue' ) ) { function __construct() { $this->suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG || defined( 'UM_SCRIPT_DEBUG' ) ) ? '' : '.min'; - $this->js_baseurl = um_url . 'assets/js/'; - $this->css_baseurl = um_url . 'assets/css/'; + $this->js_baseurl = UM_URL . 'assets/js/'; + $this->css_baseurl = UM_URL . 'assets/css/'; add_action( 'init', array( &$this, 'scripts_enqueue_priority' ) ); } @@ -97,38 +97,38 @@ if ( ! class_exists( 'um\core\Enqueue' ) ) { } wp_register_script( 'select2', $this->js_baseurl . 'select2/select2.full' . $this->suffix . '.js', array( 'jquery' ), '4.0.13', true ); - wp_register_script( 'um_scrollbar', $this->js_baseurl . 'simplebar' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, true ); + wp_register_script( 'um_scrollbar', $this->js_baseurl . 'simplebar' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_jquery_form', $this->js_baseurl . 'um-jquery-form' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, true ); - wp_register_script( 'um_fileupload', $this->js_baseurl . 'um-fileupload.js', array( 'jquery', 'um_jquery_form' ), ultimatemember_version, true ); + wp_register_script( 'um_jquery_form', $this->js_baseurl . 'um-jquery-form' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_fileupload', $this->js_baseurl . 'um-fileupload.js', array( 'jquery', 'um_jquery_form' ), UM_VERSION, true ); - wp_register_script( 'um_datetime', $this->js_baseurl . 'pickadate/picker.js', array( 'jquery' ), ultimatemember_version, true ); - wp_register_script( 'um_datetime_date', $this->js_baseurl . 'pickadate/picker.date.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); - wp_register_script( 'um_datetime_time', $this->js_baseurl . 'pickadate/picker.time.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); -// wp_register_script( 'um_datetime_legacy', $this->js_baseurl . 'pickadate/legacy.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); + wp_register_script( 'um_datetime', $this->js_baseurl . 'pickadate/picker.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_datetime_date', $this->js_baseurl . 'pickadate/picker.date.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); + wp_register_script( 'um_datetime_time', $this->js_baseurl . 'pickadate/picker.time.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); +// wp_register_script( 'um_datetime_legacy', $this->js_baseurl . 'pickadate/legacy.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); // load a localized version for date/time $locale = get_locale(); if ( $locale ) { if ( file_exists( WP_LANG_DIR . '/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js' ) ) { - wp_register_script('um_datetime_locale', content_url() . '/languages/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); - } elseif ( file_exists( um_path . 'assets/js/pickadate/translations/' . $locale . '.js' ) ) { - wp_register_script('um_datetime_locale', um_url . 'assets/js/pickadate/translations/' . $locale . '.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); + wp_register_script('um_datetime_locale', content_url() . '/languages/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); + } elseif ( file_exists( UM_PATH . 'assets/js/pickadate/translations/' . $locale . '.js' ) ) { + wp_register_script('um_datetime_locale', UM_URL . 'assets/js/pickadate/translations/' . $locale . '.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); } } - wp_register_script( 'um_tipsy', $this->js_baseurl . 'um-tipsy' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, true ); - wp_register_script( 'um_raty', $this->js_baseurl . 'um-raty' . $this->suffix . '.js', array( 'jquery', 'wp-i18n' ), ultimatemember_version, true ); - wp_register_script( 'um_crop', $this->js_baseurl . 'um-crop' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, true ); + wp_register_script( 'um_tipsy', $this->js_baseurl . 'um-tipsy' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_raty', $this->js_baseurl . 'um-raty' . $this->suffix . '.js', array( 'jquery', 'wp-i18n' ), UM_VERSION, true ); + wp_register_script( 'um_crop', $this->js_baseurl . 'um-crop' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_modal', $this->js_baseurl . 'um-modal' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'um_crop' ), ultimatemember_version, true ); + wp_register_script( 'um_modal', $this->js_baseurl . 'um-modal' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'um_crop' ), UM_VERSION, true ); - wp_register_script('um_functions', $this->js_baseurl . 'um-functions' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry', 'wp-util', 'um_scrollbar' ), ultimatemember_version, true ); - wp_register_script( 'um_responsive', $this->js_baseurl . 'um-responsive' . $this->suffix . '.js', array( 'jquery', 'um_functions', 'um_crop' ), ultimatemember_version, true ); + wp_register_script('um_functions', $this->js_baseurl . 'um-functions' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry', 'wp-util', 'um_scrollbar' ), UM_VERSION, true ); + wp_register_script( 'um_responsive', $this->js_baseurl . 'um-responsive' . $this->suffix . '.js', array( 'jquery', 'um_functions', 'um_crop' ), UM_VERSION, true ); - wp_register_script( 'um-gdpr', $this->js_baseurl . 'um-gdpr' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, false ); - wp_register_script('um_conditional', $this->js_baseurl . 'um-conditional' . $this->suffix . '.js', array( 'jquery', 'wp-hooks' ), ultimatemember_version, true ); - wp_register_script('um_scripts', $this->js_baseurl . 'um-scripts' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', /*'um_datetime_legacy',*/ 'select2' ), ultimatemember_version, true ); + wp_register_script( 'um-gdpr', $this->js_baseurl . 'um-gdpr' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, false ); + wp_register_script('um_conditional', $this->js_baseurl . 'um-conditional' . $this->suffix . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); + wp_register_script('um_scripts', $this->js_baseurl . 'um-scripts' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', /*'um_datetime_legacy',*/ 'select2' ), UM_VERSION, true ); /** * UM hook * @@ -162,15 +162,15 @@ if ( ! class_exists( 'um\core\Enqueue' ) ) { ) ); wp_localize_script( 'um_scripts', 'um_scripts', $localize_data ); - wp_register_script('um_dropdown', $this->js_baseurl . 'dropdown' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, true ); + wp_register_script('um_dropdown', $this->js_baseurl . 'dropdown' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script('um_members', $this->js_baseurl . 'um-members' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'jquery-ui-slider', 'um_dropdown', 'wp-hooks', 'jquery-masonry', 'um_scripts' ), ultimatemember_version, true ); - wp_register_script('um_profile', $this->js_baseurl . 'um-profile' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'wp-i18n' ), ultimatemember_version, true ); + wp_register_script('um_members', $this->js_baseurl . 'um-members' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'jquery-ui-slider', 'um_dropdown', 'wp-hooks', 'jquery-masonry', 'um_scripts' ), UM_VERSION, true ); + wp_register_script('um_profile', $this->js_baseurl . 'um-profile' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'wp-i18n' ), UM_VERSION, true ); $account_deps = apply_filters( 'um_account_scripts_dependencies', array( 'jquery', 'wp-hooks' ) ); - wp_register_script('um_account', $this->js_baseurl . 'um-account' . $this->suffix . '.js', $account_deps, ultimatemember_version, true ); + wp_register_script('um_account', $this->js_baseurl . 'um-account' . $this->suffix . '.js', $account_deps, UM_VERSION, true ); - wp_register_script( 'um_gchart', 'https://www.google.com/jsapi', array(), ultimatemember_version, true ); + wp_register_script( 'um_gchart', 'https://www.google.com/jsapi', array(), UM_VERSION, true ); } @@ -180,36 +180,36 @@ if ( ! class_exists( 'um\core\Enqueue' ) ) { function register_styles() { //FontAwesome and FontIcons styles - wp_register_style( 'um_fonticons_ii', $this->css_baseurl . 'um-fonticons-ii.css', array(), ultimatemember_version ); - wp_register_style( 'um_fonticons_fa', $this->css_baseurl . 'um-fonticons-fa.css', array(), ultimatemember_version ); - wp_register_style( 'um_crop', $this->css_baseurl . 'um-crop.css', array(), ultimatemember_version ); - wp_register_style( 'um_tipsy', $this->css_baseurl . 'um-tipsy.css', array(), ultimatemember_version ); - wp_register_style( 'um_raty', $this->css_baseurl . 'um-raty.css', array(), ultimatemember_version ); + wp_register_style( 'um_fonticons_ii', $this->css_baseurl . 'um-fonticons-ii.css', array(), UM_VERSION ); + wp_register_style( 'um_fonticons_fa', $this->css_baseurl . 'um-fonticons-fa.css', array(), UM_VERSION ); + wp_register_style( 'um_crop', $this->css_baseurl . 'um-crop.css', array(), UM_VERSION ); + wp_register_style( 'um_tipsy', $this->css_baseurl . 'um-tipsy.css', array(), UM_VERSION ); + wp_register_style( 'um_raty', $this->css_baseurl . 'um-raty.css', array(), UM_VERSION ); wp_register_style( 'select2', $this->css_baseurl . 'select2/select2.min.css', array(), '4.0.13' ); - wp_register_style( 'um_fileupload', $this->css_baseurl . 'um-fileupload.css', array(), ultimatemember_version ); - wp_register_style( 'um_datetime', $this->css_baseurl . 'pickadate/default.css', array(), ultimatemember_version ); - wp_register_style( 'um_datetime_date', $this->css_baseurl . 'pickadate/default.date.css', array( 'um_datetime' ), ultimatemember_version ); - wp_register_style( 'um_datetime_time', $this->css_baseurl . 'pickadate/default.time.css', array( 'um_datetime' ), ultimatemember_version ); - wp_register_style( 'um_scrollbar', $this->css_baseurl . 'simplebar.css', array(), ultimatemember_version ); + wp_register_style( 'um_fileupload', $this->css_baseurl . 'um-fileupload.css', array(), UM_VERSION ); + wp_register_style( 'um_datetime', $this->css_baseurl . 'pickadate/default.css', array(), UM_VERSION ); + wp_register_style( 'um_datetime_date', $this->css_baseurl . 'pickadate/default.date.css', array( 'um_datetime' ), UM_VERSION ); + wp_register_style( 'um_datetime_time', $this->css_baseurl . 'pickadate/default.time.css', array( 'um_datetime' ), UM_VERSION ); + wp_register_style( 'um_scrollbar', $this->css_baseurl . 'simplebar.css', array(), UM_VERSION ); - wp_register_style( 'um_rtl', $this->css_baseurl . 'um.rtl.css', array(), ultimatemember_version ); - wp_register_style( 'um_default_css', $this->css_baseurl . 'um-old-default.css', array(), ultimatemember_version ); - wp_register_style( 'um_modal', $this->css_baseurl . 'um-modal.css', array( 'um_crop' ), ultimatemember_version ); - wp_register_style( 'um_responsive', $this->css_baseurl . 'um-responsive.css', array( 'um_profile', 'um_crop' ), ultimatemember_version ); + wp_register_style( 'um_rtl', $this->css_baseurl . 'um.rtl.css', array(), UM_VERSION ); + wp_register_style( 'um_default_css', $this->css_baseurl . 'um-old-default.css', array(), UM_VERSION ); + wp_register_style( 'um_modal', $this->css_baseurl . 'um-modal.css', array( 'um_crop' ), UM_VERSION ); + wp_register_style( 'um_responsive', $this->css_baseurl . 'um-responsive.css', array( 'um_profile', 'um_crop' ), UM_VERSION ); - wp_register_style( 'um_styles', $this->css_baseurl . 'um-styles.css', array(), ultimatemember_version ); + wp_register_style( 'um_styles', $this->css_baseurl . 'um-styles.css', array(), UM_VERSION ); - wp_register_style( 'um_ui', $this->css_baseurl . 'jquery-ui.css', array(), ultimatemember_version ); + wp_register_style( 'um_ui', $this->css_baseurl . 'jquery-ui.css', array(), UM_VERSION ); - wp_register_style( 'um_members', $this->css_baseurl . 'um-members.css', array( 'um_ui' ), ultimatemember_version ); + wp_register_style( 'um_members', $this->css_baseurl . 'um-members.css', array( 'um_ui' ), UM_VERSION ); if ( is_rtl() ) { - wp_register_style( 'um_members_rtl', $this->css_baseurl . 'um-members-rtl.css', array( 'um_members' ), ultimatemember_version ); + wp_register_style( 'um_members_rtl', $this->css_baseurl . 'um-members-rtl.css', array( 'um_members' ), UM_VERSION ); } - wp_register_style( 'um_profile', $this->css_baseurl . 'um-profile.css', array(), ultimatemember_version ); - wp_register_style( 'um_account', $this->css_baseurl . 'um-account.css', array(), ultimatemember_version ); - wp_register_style( 'um_misc', $this->css_baseurl . 'um-misc.css', array(), ultimatemember_version ); - + wp_register_style( 'um_profile', $this->css_baseurl . 'um-profile.css', array(), UM_VERSION ); + wp_register_style( 'um_account', $this->css_baseurl . 'um-account.css', array(), UM_VERSION ); + wp_register_style( 'um_misc', $this->css_baseurl . 'um-misc.css', array(), UM_VERSION ); + } @@ -247,7 +247,7 @@ if ( ! class_exists( 'um\core\Enqueue' ) ) { $uploads = wp_upload_dir(); $upload_dir = $uploads['basedir'] . DIRECTORY_SEPARATOR . 'ultimatemember' . DIRECTORY_SEPARATOR; if ( file_exists( $upload_dir . 'um_old_settings.css' ) ) { - wp_register_style( 'um_old_css', um_url . '../../uploads/ultimatemember/um_old_settings.css' ); + wp_register_style( 'um_old_css', UM_URL . '../../uploads/ultimatemember/um_old_settings.css' ); wp_enqueue_style( 'um_old_css' ); } } @@ -376,7 +376,7 @@ if ( ! class_exists( 'um\core\Enqueue' ) ) { // load a localized version for date/time $locale = get_locale(); - if ( $locale && ( file_exists( WP_LANG_DIR . '/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js' ) || file_exists( um_path . 'assets/js/pickadate/translations/' . $locale . '.js' ) ) ) { + if ( $locale && ( file_exists( WP_LANG_DIR . '/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js' ) || file_exists( UM_PATH . 'assets/js/pickadate/translations/' . $locale . '.js' ) ) ) { wp_enqueue_script('um_datetime_locale' ); } diff --git a/includes/core/class-external-integrations.php b/includes/core/class-external-integrations.php index aa100f34..905ae007 100644 --- a/includes/core/class-external-integrations.php +++ b/includes/core/class-external-integrations.php @@ -455,7 +455,7 @@ if ( ! class_exists( 'um\core\External_Integrations' ) ) { //if there isn't template at theme folder get template file from plugin dir if ( ! $template ) { - $path = ! empty( UM()->mail()->path_by_slug[ $template_name ] ) ? UM()->mail()->path_by_slug[ $template_name ] : um_path . 'templates/email'; + $path = ! empty( UM()->mail()->path_by_slug[ $template_name ] ) ? UM()->mail()->path_by_slug[ $template_name ] : UM_PATH . 'templates/email'; $template = trailingslashit( $path ) . $template_name . '.php'; } diff --git a/includes/core/class-fonticons.php b/includes/core/class-fonticons.php index 9d7abd74..e86762a1 100644 --- a/includes/core/class-fonticons.php +++ b/includes/core/class-fonticons.php @@ -27,8 +27,8 @@ if ( ! class_exists( 'um\core\FontIcons' ) ) { $cached_option = get_option( 'um_cache_fonticons', array() ); if ( empty( $cached_option ) ) { - $files['ii'] = um_path . 'assets/css/um-fonticons-ii.css'; - $files['fa'] = um_path . 'assets/css/um-fonticons-fa.css'; + $files['ii'] = UM_PATH . 'assets/css/um-fonticons-ii.css'; + $files['fa'] = UM_PATH . 'assets/css/um-fonticons-fa.css'; $array = array(); foreach ( $files as $c => $file ) { diff --git a/includes/core/class-gdpr.php b/includes/core/class-gdpr.php index 21397af4..ca035563 100644 --- a/includes/core/class-gdpr.php +++ b/includes/core/class-gdpr.php @@ -36,7 +36,7 @@ if ( ! class_exists( 'um\core\GDPR' ) ) { if ( file_exists( $template_path ) ) { require $template_path; } else { - require um_path . 'templates/gdpr-register.php'; + require UM_PATH . 'templates/gdpr-register.php'; } } } diff --git a/includes/core/class-mail.php b/includes/core/class-mail.php index b46854ea..b9f2b7c2 100644 --- a/includes/core/class-mail.php +++ b/includes/core/class-mail.php @@ -139,7 +139,7 @@ if ( ! class_exists( 'um\core\Mail' ) ) { // If there isn't template at theme folder, get template file from plugin dir if ( ! $template ) { - $path = ! empty( $this->path_by_slug[ $template_name ] ) ? $this->path_by_slug[ $template_name ] : um_path . 'templates/email'; + $path = ! empty( $this->path_by_slug[ $template_name ] ) ? $this->path_by_slug[ $template_name ] : UM_PATH . 'templates/email'; $template = trailingslashit( $path ) . $template_name . '.php'; } @@ -562,7 +562,7 @@ if ( ! class_exists( 'um\core\Mail' ) ) { $template_path = trailingslashit( get_stylesheet_directory() . '/ultimate-member/email' . $blog_id ) . $template_name_file . '.php'; break; case 'plugin': - $path = ! empty( $this->path_by_slug[ $template_name ] ) ? $this->path_by_slug[ $template_name ] : um_path . 'templates/email'; + $path = ! empty( $this->path_by_slug[ $template_name ] ) ? $this->path_by_slug[ $template_name ] : UM_PATH . 'templates/email'; $template_path = trailingslashit( $path ) . $template_name . '.php'; break; } diff --git a/includes/core/class-modal.php b/includes/core/class-modal.php index 8a0df650..19c76e33 100644 --- a/includes/core/class-modal.php +++ b/includes/core/class-modal.php @@ -39,7 +39,7 @@ if ( ! class_exists( 'um\core\Modal' ) ) { function load_modal_content() { if ( ! is_admin() ) { - $modal_templates = glob( um_path . 'templates/modal/*.php' ); + $modal_templates = glob( UM_PATH . 'templates/modal/*.php' ); if ( ! empty( $modal_templates ) ) { foreach ( $modal_templates as $modal_content ) { @@ -51,4 +51,4 @@ if ( ! class_exists( 'um\core\Modal' ) ) { } } -} \ No newline at end of file +} diff --git a/includes/core/class-shortcodes.php b/includes/core/class-shortcodes.php index 063a09ee..b9b50c22 100644 --- a/includes/core/class-shortcodes.php +++ b/includes/core/class-shortcodes.php @@ -328,7 +328,7 @@ if ( ! class_exists( 'um\core\Shortcodes' ) ) { // Avoid Directory Traversal vulnerability by the checking the realpath. // Templates can be situated only in the get_stylesheet_directory() or plugindir templates. $real_file = wp_normalize_path( realpath( $file ) ); - if ( 0 === strpos( $real_file, wp_normalize_path( um_path . "templates" . DIRECTORY_SEPARATOR ) ) || 0 === strpos( $real_file, wp_normalize_path( get_stylesheet_directory() . DIRECTORY_SEPARATOR . 'ultimate-member' . DIRECTORY_SEPARATOR . 'templates' . DIRECTORY_SEPARATOR ) ) ) { + if ( 0 === strpos( $real_file, wp_normalize_path( UM_PATH . "templates" . DIRECTORY_SEPARATOR ) ) || 0 === strpos( $real_file, wp_normalize_path( get_stylesheet_directory() . DIRECTORY_SEPARATOR . 'ultimate-member' . DIRECTORY_SEPARATOR . 'templates' . DIRECTORY_SEPARATOR ) ) ) { include $file; } } @@ -1003,7 +1003,7 @@ if ( ! class_exists( 'um\core\Shortcodes' ) ) { */ function template_exists($template) { - $file = um_path . 'templates/' . $template . '.php'; + $file = UM_PATH . 'templates/' . $template . '.php'; $theme_file = get_stylesheet_directory() . '/ultimate-member/templates/' . $template . '.php'; if (file_exists($theme_file) || file_exists($file)) { @@ -1041,7 +1041,7 @@ if ( ! class_exists( 'um\core\Shortcodes' ) ) { $array[ $excluded ] = __( 'Default Template', 'ultimate-member' ); } - $paths[] = glob( um_path . 'templates/' . '*.php' ); + $paths[] = glob( UM_PATH . 'templates/' . '*.php' ); if ( file_exists( get_stylesheet_directory() . '/ultimate-member/templates/' ) ) { $paths[] = glob( get_stylesheet_directory() . '/ultimate-member/templates/' . '*.php' ); diff --git a/includes/core/class-templates.php b/includes/core/class-templates.php index b92c3510..f4d6e8e7 100644 --- a/includes/core/class-templates.php +++ b/includes/core/class-templates.php @@ -28,7 +28,7 @@ if ( ! class_exists( 'Templates' ) ) { * @return string */ function get_template( $slug ) { - $file_list = um_path . "templates/{$slug}.php"; + $file_list = UM_PATH . "templates/{$slug}.php"; $theme_file = get_stylesheet_directory() . "/ultimate-member/templates/{$slug}.php"; if ( file_exists( $theme_file ) ) { @@ -38,4 +38,4 @@ if ( ! class_exists( 'Templates' ) ) { return $file_list; } } -} \ No newline at end of file +} diff --git a/includes/core/rest/class-api.php b/includes/core/rest/class-api.php index ba12fb9c..289aa67b 100644 --- a/includes/core/rest/class-api.php +++ b/includes/core/rest/class-api.php @@ -538,7 +538,7 @@ if ( ! class_exists( 'um\core\rest\API' ) ) { case 'xml' : - require_once um_path . 'includes/lib/array2xml.php'; + require_once UM_PATH . 'includes/lib/array2xml.php'; $xml = \Array2XML::createXML( 'um', $this->data ); echo $xml->saveXML(); diff --git a/includes/um-short-functions.php b/includes/um-short-functions.php index 8fedfccd..139fd66e 100644 --- a/includes/um-short-functions.php +++ b/includes/um-short-functions.php @@ -2131,7 +2131,7 @@ function um_get_default_avatar_uri() { $uri = UM()->options()->get( 'default_avatar' ); $uri = !empty( $uri['url'] ) ? $uri['url'] : ''; if ( ! $uri ) { - $uri = um_url . 'assets/img/default_avatar.jpg'; + $uri = UM_URL . 'assets/img/default_avatar.jpg'; } return set_url_scheme( $uri ); diff --git a/uninstall.php b/uninstall.php index 63e24f8b..2ff2924e 100644 --- a/uninstall.php +++ b/uninstall.php @@ -9,16 +9,16 @@ if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) { exit; } -if ( ! defined( 'um_path' ) ) { - define( 'um_path', plugin_dir_path( __FILE__ ) ); +if ( ! defined( 'UM_PATH' ) ) { + define( 'UM_PATH', plugin_dir_path( __FILE__ ) ); } -if ( ! defined( 'um_url' ) ) { - define( 'um_url', plugin_dir_url( __FILE__ ) ); +if ( ! defined( 'UM_URL' ) ) { + define( 'UM_URL', plugin_dir_url( __FILE__ ) ); } -if ( ! defined( 'um_plugin' ) ) { - define( 'um_plugin', plugin_basename( __FILE__ ) ); +if ( ! defined( 'UM_PLUGIN' ) ) { + define( 'UM_PLUGIN', plugin_basename( __FILE__ ) ); } //for delete Email options only for Core email notifications @@ -87,14 +87,14 @@ if ( ! empty( $delete_options ) ) { update_option( $wp_roles->role_key, $wp_roles->roles ); } - + //remove user role meta $role_keys = get_option( 'um_roles', array() ); if ( $role_keys ) { foreach ( $role_keys as $role_key ) { delete_option( 'um_role_' . $role_key . '_meta' ); } - + $um_custom_role_users = get_users( array( 'role__in' => $role_keys, @@ -135,37 +135,37 @@ if ( ! empty( $delete_options ) ) { global $wpdb; $wpdb->query( - "DELETE - FROM {$wpdb->usermeta} - WHERE meta_key LIKE '_um%' OR - meta_key LIKE 'um%' OR - meta_key LIKE 'reviews%' OR - meta_key = 'submitted' OR - meta_key = 'account_status' OR - meta_key = 'password_rst_attempts' OR - meta_key = 'profile_photo' OR - meta_key = '_enable_new_follow' OR - meta_key = '_enable_new_friend' OR - meta_key = '_mylists' OR - meta_key = '_enable_new_pm' OR - meta_key = '_hidden_conversations' OR - meta_key = '_pm_blocked' OR - meta_key = '_notifications_prefs' OR - meta_key = '_profile_progress' OR - meta_key = '_completed' OR - meta_key = '_cannot_add_review' OR - meta_key = 'synced_profile_photo' OR + "DELETE + FROM {$wpdb->usermeta} + WHERE meta_key LIKE '_um%' OR + meta_key LIKE 'um%' OR + meta_key LIKE 'reviews%' OR + meta_key = 'submitted' OR + meta_key = 'account_status' OR + meta_key = 'password_rst_attempts' OR + meta_key = 'profile_photo' OR + meta_key = '_enable_new_follow' OR + meta_key = '_enable_new_friend' OR + meta_key = '_mylists' OR + meta_key = '_enable_new_pm' OR + meta_key = '_hidden_conversations' OR + meta_key = '_pm_blocked' OR + meta_key = '_notifications_prefs' OR + meta_key = '_profile_progress' OR + meta_key = '_completed' OR + meta_key = '_cannot_add_review' OR + meta_key = 'synced_profile_photo' OR meta_key = 'full_name' OR - meta_key = '_reviews' OR - meta_key = '_reviews_compound' OR - meta_key = '_reviews_total' OR + meta_key = '_reviews' OR + meta_key = '_reviews_compound' OR + meta_key = '_reviews_total' OR meta_key = '_reviews_avg'" ); $wpdb->query( - "DELETE - FROM {$wpdb->postmeta} - WHERE meta_key LIKE '_um%' OR + "DELETE + FROM {$wpdb->postmeta} + WHERE meta_key LIKE '_um%' OR meta_key LIKE 'um%'" ); From 16fb8e32ff3803ea1f33a5d85da2c95ff7d8186f Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Wed, 13 Sep 2023 23:43:18 +0300 Subject: [PATCH 15/81] - added common enqueue class - copied blocks.js to the new path for admin JS --- assets/js/admin/blocks.js | 197 ++++++++++++++++++++++++++++++ includes/common/class-enqueue.php | 105 ++++++++++++++++ 2 files changed, 302 insertions(+) create mode 100644 assets/js/admin/blocks.js create mode 100644 includes/common/class-enqueue.php diff --git a/assets/js/admin/blocks.js b/assets/js/admin/blocks.js new file mode 100644 index 00000000..2f3ec381 --- /dev/null +++ b/assets/js/admin/blocks.js @@ -0,0 +1,197 @@ +'use strict'; + +var um_components = wp.components, + umSelectControl = um_components.SelectControl, + umTextareaControl = um_components.TextareaControl; + + +function um_admin_blocks_custom_fields( um_condition_fields, props ) { + return wp.hooks.applyFilters( 'um_admin_blocks_custom_fields', [], um_condition_fields, props ); +} + +var um_block_restriction = wp.compose.createHigherOrderComponent( + function( BlockEdit ) { + var um_condition_fields = { + um_who_access: 'um_block_settings_hide', + um_roles_access: 'um_block_settings_hide', + um_message_type: 'um_block_settings_hide', + um_message_content: 'um_block_settings_hide' + }; + + um_condition_fields = wp.hooks.applyFilters( 'um_admin_blocks_condition_fields_default', um_condition_fields ); + + return function( props ) { + let initialIsRestrict = props.attributes.um_is_restrict !== undefined ? props.attributes.um_is_restrict : false; + + if ( props.attributes.um_is_restrict !== true ) { + um_condition_fields['um_who_access'] = 'um_block_settings_hide'; + um_condition_fields['um_roles_access'] = 'um_block_settings_hide'; + um_condition_fields['um_message_type'] = 'um_block_settings_hide'; + um_condition_fields['um_message_content'] = 'um_block_settings_hide'; + } else { + um_condition_fields['um_who_access'] = ''; + + if ( parseInt( props.attributes.um_who_access ) === 0 || typeof props.attributes.um_who_access === 'undefined' ) { + um_condition_fields['um_roles_access'] = 'um_block_settings_hide'; + um_condition_fields['um_message_type'] = 'um_block_settings_hide'; + um_condition_fields['um_message_content'] = 'um_block_settings_hide'; + } else if ( parseInt( props.attributes.um_who_access ) === 1 ) { + um_condition_fields['um_roles_access'] = ''; + um_condition_fields['um_message_type'] = ''; + + if ( parseInt( props.attributes.um_message_type ) === 2 ) { + um_condition_fields['um_message_content'] = ''; + } else { + um_condition_fields['um_message_content'] = 'um_block_settings_hide'; + } + } else { + um_condition_fields['um_message_type'] = ''; + + if ( parseInt( props.attributes.um_message_type ) === 2 ) { + um_condition_fields['um_message_content'] = ''; + } else { + um_condition_fields['um_message_content'] = 'um_block_settings_hide'; + } + } + } + + um_condition_fields = wp.hooks.applyFilters( 'um_admin_blocks_condition_fields', um_condition_fields, props ); + + return wp.element.createElement( + wp.element.Fragment, + {}, + wp.element.createElement( BlockEdit, props ), + wp.element.createElement( + wp.blockEditor.InspectorControls, + {}, + wp.element.createElement( + wp.components.PanelBody, + { + title: wp.i18n.__( 'Ultimate Member: Content Restriction', 'ultimate-member' ), + className: 'um_block_settings' + }, + wp.element.createElement( + wp.components.ToggleControl, + { + label: wp.i18n.__( 'Restrict access?', 'ultimate-member' ), + checked: initialIsRestrict, + onChange: function onChange( value ) { + props.setAttributes( { um_is_restrict: value } ); + if ( value === false ) { + um_condition_fields['um_who_access'] = 'um_block_settings_hide'; + um_condition_fields['um_roles_access'] = 'um_block_settings_hide'; + um_condition_fields['um_message_type'] = 'um_block_settings_hide'; + um_condition_fields['um_message_content'] = 'um_block_settings_hide'; + } else { + um_condition_fields['um_who_access'] = ''; + } + + um_condition_fields = wp.hooks.applyFilters( 'um_admin_blocks_condition_fields_on_change', um_condition_fields, 'um_is_restrict', value ); + } + } + ), + wp.element.createElement( + umSelectControl, + { + type: 'number', + className: um_condition_fields['um_who_access'], + label: wp.i18n.__( 'Who can access this block?', 'ultimate-member' ), + value: props.attributes.um_who_access, + options: [ + { + label: wp.i18n.__( 'Everyone', 'ultimate-member' ), + value: 0 + }, + { + label: wp.i18n.__( 'Logged in users', 'ultimate-member' ), + value: 1 + }, + { + label: wp.i18n.__( 'Logged out users', 'ultimate-member' ), + value: 2 + } + ], + onChange: function onChange( value ) { + props.setAttributes( { um_who_access: value } ); + if ( parseInt( value ) === 0 ) { + um_condition_fields['um_message_type'] = 'um_block_settings_hide'; + um_condition_fields['um_message_content'] = 'um_block_settings_hide'; + um_condition_fields['um_roles_access'] = 'um_block_settings_hide'; + } else if ( parseInt( value ) === 1 ) { + um_condition_fields['um_message_type'] = ''; + um_condition_fields['um_roles_access'] = ''; + } else { + um_condition_fields['um_message_type'] = ''; + um_condition_fields['um_roles_access'] = 'um_block_settings_hide'; + } + + um_condition_fields = wp.hooks.applyFilters( 'um_admin_blocks_condition_fields_on_change', um_condition_fields, 'um_who_access', value ); + } + } + ), + wp.element.createElement( + umSelectControl, + { + multiple: true, + className: um_condition_fields['um_roles_access'], + label: wp.i18n.__( 'What roles can access this block?', 'ultimate-member' ), + value: props.attributes.um_roles_access, + options: um_restrict_roles, + onChange: function onChange( value ) { + props.setAttributes( { um_roles_access: value } ); + } + } + ), + wp.element.createElement( + umSelectControl, + { + type: 'number', + className: um_condition_fields['um_message_type'], + label: wp.i18n.__( 'Restriction action', 'ultimate-member' ), + value: props.attributes.um_message_type, + options: [ + { + label: wp.i18n.__( 'Hide block', 'ultimate-member' ), + value: 0 + }, + { + label: wp.i18n.__( 'Show global default message', 'ultimate-member' ), + value: 1 + }, + { + label: wp.i18n.__( 'Show custom message', 'ultimate-member' ), + value: 2 + } + ], + onChange: function onChange( value ) { + props.setAttributes( { um_message_type: value } ); + if ( parseInt( value ) === 2 ) { + um_condition_fields['um_message_content'] = ''; + } else { + um_condition_fields['um_message_content'] = 'um_block_settings_hide'; + } + } + } + ), + wp.element.createElement( + umTextareaControl, + { + type: 'number', + className: um_condition_fields['um_message_content'], + label: wp.i18n.__( 'Custom restricted access message', 'ultimate-member' ), + value: props.attributes.um_message_content, + onChange: function onChange( value ) { + props.setAttributes( { um_message_content: value } ); + } + } + ), + um_admin_blocks_custom_fields( um_condition_fields, props ) + ) + ) + ); + }; + }, + 'um_block_restriction' +); + +wp.hooks.addFilter( 'editor.BlockEdit', 'um-block/um_block_restriction', um_block_restriction ); diff --git a/includes/common/class-enqueue.php b/includes/common/class-enqueue.php new file mode 100644 index 00000000..5edfa7fd --- /dev/null +++ b/includes/common/class-enqueue.php @@ -0,0 +1,105 @@ +suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min'; + + $this->urls['js'] = UM_URL . 'assets/js/'; + $this->urls['css'] = UM_URL . 'assets/css/'; + $this->urls['libs'] = UM_URL . 'assets/libs/'; + } + + /** + * Register common JS/CSS libraries + * + * @since 2.7.0 + */ + public function common_libs() { + wp_register_style( 'um-jquery-ui', $this->urls['libs'] . 'jquery-ui/jquery-ui' . $this->suffix . '.css', array(), '1.12.1' ); + + wp_register_script( 'um-tipsy', $this->urls['libs'] . 'tipsy/um-tipsy' . $this->suffix . '.js', array( 'jquery' ), '1.0.0a', true ); + wp_register_style( 'um-tipsy', $this->urls['libs'] . 'tipsy/um-tipsy' . $this->suffix . '.css', array(), '1.0.0a' ); + + wp_register_script( 'um-helptip', $this->urls['libs'] . 'helptip/helptip' . $this->suffix . '.js', array( 'jquery', 'jquery-ui-tooltip' ), '1.0.0', true ); + wp_register_style( 'um-helptip', $this->urls['libs'] . 'helptip/helptip' . $this->suffix . '.css', array( 'dashicons', 'um-jquery-ui' ), '1.0.0' ); + + // old fonticons + $um_is_legacy = get_option( 'um_is_legacy' ); + if ( $um_is_legacy ) { + wp_register_style( 'um-fonticons-ii', $this->urls['libs'] . 'fonticons/um-fonticons-ii' . $this->suffix . '.css', array(), UM_VERSION ); + wp_register_style( 'um-fonticons-fa', $this->urls['libs'] . 'fonticons/um-fonticons-fa' . $this->suffix . '.css', array(), UM_VERSION ); + } + + // Select2 + $dequeue_select2 = apply_filters( 'um_dequeue_select2_scripts', false ); + if ( class_exists( 'WooCommerce' ) || $dequeue_select2 ) { + wp_dequeue_style( 'select2' ); + wp_deregister_style( 'select2' ); + + wp_dequeue_script( 'select2' ); + wp_deregister_script( 'select2' ); + } + wp_register_script( 'select2', $this->urls['libs'] . 'select2/select2.full' . $this->suffix . '.js', array( 'jquery' ), '4.0.13', true ); + wp_register_style( 'select2', $this->urls['libs'] . 'select2/select2' . $this->suffix . '.css', array(), '4.0.13' ); + + // Raty JS for rating field-type + wp_register_script( 'um-raty', $this->urls['libs'] . 'raty/um-raty' . $this->suffix . '.js', array( 'jquery', 'wp-i18n' ), '2.6.0', true ); + wp_register_style( 'um-raty', $this->urls['libs'] . 'raty/um-raty' . $this->suffix . '.css', array(), '2.6.0' ); + + // Modal + wp_register_script( 'um-modal', $this->urls['libs'] . 'modal/um-modal' . $this->suffix . '.js', array( 'jquery', 'wp-i18n', 'wp-hooks' ), UM_VERSION, true ); + wp_register_style( 'um-modal', $this->urls['libs'] . 'modal/um-modal' . $this->suffix . '.css', array(), UM_VERSION ); + + // Common JS scripts for wp-admin and frontend both + wp_register_script( 'um-common', $this->urls['js'] . 'common' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + $um_common_variables = apply_filters( + 'um_common_js_variables', + array( + 'locale' => get_locale(), + ) + ); + wp_localize_script( 'um-common', 'um_common_variables', $um_common_variables ); + wp_enqueue_script( 'um-common' ); + } +} From 2754b864fe393bc9e44ec79ed4c79e7abb2122c2 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Wed, 13 Sep 2023 23:56:59 +0300 Subject: [PATCH 16/81] - updated jquery-ui library; - added minified file for jquery-ui styles; --- assets/libs/jquery-ui/images/readme.txt | 1 + .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 393 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 265 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 323 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 324 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 390 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 325 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 7025 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4618 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 7090 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 7111 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4618 bytes assets/libs/jquery-ui/jquery-ui.css | 1311 +++++++++++++++++ assets/libs/jquery-ui/jquery-ui.min.css | 7 + includes/admin/core/class-admin-enqueue.php | 8 +- includes/common/class-enqueue.php | 22 +- includes/core/class-enqueue.php | 2 +- 17 files changed, 1333 insertions(+), 18 deletions(-) create mode 100644 assets/libs/jquery-ui/images/readme.txt create mode 100644 assets/libs/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 assets/libs/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 assets/libs/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 assets/libs/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 assets/libs/jquery-ui/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 assets/libs/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 assets/libs/jquery-ui/images/ui-icons_222222_256x240.png create mode 100644 assets/libs/jquery-ui/images/ui-icons_2e83ff_256x240.png create mode 100644 assets/libs/jquery-ui/images/ui-icons_454545_256x240.png create mode 100644 assets/libs/jquery-ui/images/ui-icons_888888_256x240.png create mode 100644 assets/libs/jquery-ui/images/ui-icons_cd0a0a_256x240.png create mode 100644 assets/libs/jquery-ui/jquery-ui.css create mode 100644 assets/libs/jquery-ui/jquery-ui.min.css diff --git a/assets/libs/jquery-ui/images/readme.txt b/assets/libs/jquery-ui/images/readme.txt new file mode 100644 index 00000000..351f3426 --- /dev/null +++ b/assets/libs/jquery-ui/images/readme.txt @@ -0,0 +1 @@ +These images are part of the jquery-ui library and used in the file jquery-ui.css \ No newline at end of file diff --git a/assets/libs/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png b/assets/libs/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..f4335d5a263dfb4c65aace29ff869117ab23c862 GIT binary patch literal 393 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&fCzz`*b-fq}tl1_Oh5!JJ)zHb4osByV?@|6srw@%;`^ zguTSm*OmP#H@670@zS{UKY&8Lo-U3d9>?FFSL9-H6lr)^KQBojr@3RpVm3z!!)lJ# zVXGqzGVlJbU_RJf(JETj{aE_oBT<*b-tj*!`|o?X%#xcyqAgM4KHJqPuV&q;{q`>I z1B+MUiJr9vN$<*>9G|F&=-dsQv0;%?yot%j%P074w*(g^i@m9I-Mh{614}p;vrV?+ ziwpm|GY=c|$bVw9NmL2$cvGndbeL+1YeY#(Vo9o1a#1RfVlXl=GSoE$p%5bjD+6OI oQ$uY7Aj2TVaApIFhTQy=%(P0}8bosxLE*#T>FVdQ&MBb@0C5|G!Tp0Av^(a+_p=q9HdwB{QuOw}#EqS{*Nn{1`6_P!I zd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!t9$=luK|9_FyhG&61 z_7YEDSN5me+#<}zOXJr601A0~x;TbdoKCLzHNUelQKVN%Yw`N+l6lpJhW`?iMADN? z5_kM>@6>F6c#&OgSy|iie#v>i4Gq~03}+b_{!2@WIe0|D_yeDut1}}bgUmZ&g?PLC zdZ4kYC9V-ADTyViR>?)FK#IZ0z{pV75QIXE46F={txOHI4S)=T6vLSfC>nC}Q!>*k VacdCGQ3Uyn!PC{xWt~$(69B*oTPXkl literal 0 HcmV?d00001 diff --git a/assets/libs/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png b/assets/libs/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..b705c3ed9ada785e63286df1df81d0c2a20667bd GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&0LWmFTHNUZq*&4&eH|GXHuiJ>Nn{1`6_P!I zd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!t9$=luK|9_FyhG&61 z_7YEDSN5me+#<|Imm=rq0fl@#T^vI!PA6APKYrwZL6@6gso>$w={)CqCFb2vOuBRW zNX5L)kJ7@A&DGra)ZF~kj^+FG#LtwFH?B!ZONu!9!LzT^vEqQNO;;NW6T=lzz`*b-fq}tl1_Oh5!JJ)zHb4osByV?@|6srw@%;`^ zguTSm*OmP#H@670(WS`wc|f5qPZ!4!kK=F8Z{%f6lxY9>{J)sc^BBc2f!=F;Udj;% z7^Ypg(CtzyEYZNLm-fT%q-^IqJJyYj0eh~luUOT-rQ*yxVP=Nog)+}?U)WYE%XD&9 z;hagE(!{kdeK6a#u2(L4Zg0%eL+wqACtbWgJA847NzvP#5;M)LBxA#@BxIlI@M=i> zIlASs#X0^;CU;$plv(pRJ%FxKEpd$~Nl7e8wMs5Z1yT$~21bUuh9DGTWME}rY-MVo mZ2)8#9CDjvf}$ZeKP5A*61RrU(pnur4Gf;HelF{r5}E)`nSu@g literal 0 HcmV?d00001 diff --git a/assets/libs/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/assets/libs/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..5ac0a23a14924ff6f5a276864502a94d5ef411b0 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^j6j?s03;ZUuHXC*q*&4&eH|GXHuiJ>Nn{1`6_P!I zd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!t9$=luK|9_FyhG&61 z_7YEDSN5me+#<|Imm=rq0fl@$T^vIsF7G|Jkhj4>fc4`1mycH6%zM$3m1p`$MZ{s# zf}a{Pzb2`>_w?~*b}jtt(#UKcv*SbS?qj{yesgwwUbCa%(XUency&+BDgFJJRc?>k z-)#^1JAekOmbgZgq$HN4S|t~y0x1R~10zFSLl6ovGO#i*wlX!)HUKgV4!KP-LD7(# ZpOTqYiCe>FX)TZq44$rjF6*2UngGceXDa{z literal 0 HcmV?d00001 diff --git a/assets/libs/jquery-ui/images/ui-icons_222222_256x240.png b/assets/libs/jquery-ui/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..92410d3d5dcc9b512fc47a98aed29785ce3d53dc GIT binary patch literal 7025 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 literal 0 HcmV?d00001 diff --git a/assets/libs/jquery-ui/images/ui-icons_2e83ff_256x240.png b/assets/libs/jquery-ui/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..f44b9cee698fb91aa112fc5a3f5b6e55f2c67f10 GIT binary patch literal 4618 zcmeHL_cxqfw0_?iy|?H!k_n=W-h$Dh6D>rW(OZ;HC(0-ZQnVn1$fW3mh(5{?osj6F z6N1sAOBh$a@0WZ3hx@Fv&ffd1v(H)U*?a9%67LvlQB$x}002O(qpe{A0N|wx?2BR8X)6 z09sES4OO#{?_0K%j?=aDB)!@t>se_W4SG3p-pw$78L?hF+lfH0(E`t9g<|Y`eAvZB zJkA?Ri_Je!n*<7^N5Ckn&s1`rdJl$Of ztt27Vg%7Hf<95qD|KpB_$Hm#z5%C6=sX4TPSVzP8X-0{^O>@K=Z<@SZVfYM-|7c?fWmZ)S~9Z zB|GEj8lm0p{rg^H!$7*|?$Ri`-K)M$8be%T(-24R8XXmO-uehKM=Hav{)NM6 z{R~zv*sSMWRi>m2-ZJhFDYuVR1v+!EF017 z;WfM;5P}=4a{>w~;ctz^_)ub>#K7&J*#2un$I!`D$$>+UaXX~%*IddEBeI4FM(;*4 zZQ(_@PvecerS;k|ci!TKAu5jdydSGm9%9i3OidA!ChV{1er@0T$bi6hbbVG-Dk|BbYgMg`ncRuh zdIop_aiCA*Mq?LOEO76jMFX#^?g)N3+%A!`T_A$(v^*e%gZ(SR7etS6Lt@M_U4CGllO*~zy4HvT^`bx3*j-jZ1dD-zRtWTJC`nBOo&Nd`} z6Sh#V7Qx%Q*nF!MDj#{9ERZjBp>Bl|ulR;YpA1A<;%x9cd>E1KWrmI)FcEMRQgzPo z<+_7Jk$4cr?bieQN1`dRhd&J|7l`5-0mF(e+}kfR3@O=%HJ#>>KodVFFEd>u_1&%P z9DjIrOCZ!j4!$Phdw2$1$2ei=a?~?LbOUw|S>p@v41+Yy1sOrIB~kyTch9fgH!4cR zJ54fZFFe0$!RJ}66|W6r{_(aT4#y$S(78P81{l_}U+pZZx^Q=H!l^nCLDM@eGp^Dv z1(jUU%==-=wAlk23bxW3)YU9VRw=Rl^#}~Dg4}bLP|C4si1F+nJ9Lv4NSAz3dwgW} zk7D=4fjG|bZL428O%0(>*5@6vQ88EE1rjNSd{D2N-89J7=Tk;KJgIi3n)_H~=|tv* zns-loIxUP;`|cJ}*oHdp`&7kB*Fs8XZfI?#ywRz%PR_)@0t zeS~Yhk{yIV6qQ-giXzUy8#!@?_e_SQnax5RkV7{XR*xdn1N+cG3I;nny_DJzqwlDLKpvR9Woa^49QMF_H+H!t)e2+l$W-9}a zJek{D?5G>vN1kZ=q&;}{V|9MJYeY_Q_HU!G{O#9(-q%rn!9mAJCAT6UVBqm zOklKC*V1yg)!o|p!C)(LIwFtcJ3=$h(-5!*o-yk2V6diByS_1QWBa{at8fD07TV|| zVQKw^-$_o?Y4vr)(Z#60vT48|iLrlLhQS`A3fk}i#Y)xB{_-TKg7lXWV_Tn0{>QZ%B-bC_m#dj@&0|Ai_l(cO7k^v4$E`ku1az9w57dn zl@ak__0R5@1u}{niCNtgJlE?{*`A5NVYEPa1$(tw=T^Y+^7PT&0@Cjb&wd-o4-|~B zkU$AyER^_o6__7beEL`tC@@z6)$;pVXDiwcBHwme-ulu77!^~=W=DJ&ibvVc-eKQ_`1s`U7tSY=d=t4QywyW_E2>tfEs zR1KwYJ`Rb2{r7dzy;Ie$Q2uiv8&)EJa$t!jqkoN?LL9}s~dnJk`F|lsT=RUBG zv~6>tI-v@>zTlkmM&RlGBF+exdbY29F4fzIEAUMaMr%|Ih(?Xu!=UK4X#((xv=5k@skOG86L1=+Z19l@y^E*jPIC_clVN>0&~3!se=D;Sv~ zAyt(i2}dS_(oo%tb~3GgwwI zhz(QMW-w38U7C1rmYcn?eAQpc{<;?8^tlHK?!=8S<3;mz8s$!ZozoG}zXAtqJtyOV znChmZWDXTvmDX2I`}~?F?J@1sCLN`yv@9h4YM=4DOj!2I;r^G@9JA->t>v|`QvPeA zM@$y$`&tiM%brj)5AUa0T`si%=HEz@@a2#0LOSgLXaz++6H(}`4u?H_2Ibt1rC|QH(gsCxMZUv)@8L)*beP$<=xb^04wEa72g*BzI zCDYu*Tn$$E$$A6}odb@~xA@8jE8n?HhJof*)2n-X+J|l=u|V!1Ii~IEYbvo~%crinu{S2BZ8Yh0xx&^g|Xj^2TUw>b6(N7JLQk%)f}iZ72Y zTKU$4o!Gy!bllUN4)1BLH$**X>I8@Hl*2# zALNYvSv5Mi(#L`cn%1Y%N;$Mm8u@^oKlrJbiT+_6G;2(~PF z*jTb*pVNa#GdF{#cefM<`W`Gmwn9_e)|hAtX&@hFd9$FodAUpWtuK?l@(JEQQL#y) zK7H7v%wn-ueEKi-bC@C0IH$(MlG2%)mKHyhe%-gg4D9%X1&v*l+pjRLZ14A* zLc!$~6`Vv7$_vj#F{witJ|TAfV|TwxoSWZ-W;~QUe`Xl9T!uu;+HS2~TaT$lF8t&Q z2W-J=KhuOFi`b!|UmLyxDn_oShYSrOTorj!Ds67bCo34{p~ZxQCDPiRTw^;Q{hQ54e> zQTik?zL6}B>>x-`bK$5#fE0)jmed^2tAj6$Ez6$UT~0IS zaa-Yi)bi}G`B_lLXV&kj>v-+Jze>gyUN<;{|8M!fdi7QjSG?YHE!w>c=;uA@Yrq*% zx>y-zmyvf(MTt|kq~aP;vOZbN>X+-!qoQPkG$`wTIpPdjDgS29CGNBLj{PEv!SeFq zTfRy2UGTUKXlr1~J?Rh?$L7OPjLe9`W|QAJ%y+zf#E>+Q?=`Zf$XNBjqZ%$~6-fc% zC37AIb0nuCB1ZD`@4gwk4r$Xy`M9n>g40#%&X&N c@9J#gZ0{8MPp|Xk2Mqw|Xc}sKP(#K14}~I)ivR!s literal 0 HcmV?d00001 diff --git a/assets/libs/jquery-ui/images/ui-icons_454545_256x240.png b/assets/libs/jquery-ui/images/ui-icons_454545_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..d79f2ef767bb8e2aaa6b06207b8f1e1f00ff728b GIT binary patch literal 7090 zcmZvBby$>7_xHUE%M!ALzycy6QX&mYH%pha(nw3E)Jh`_f^>>>cgspQNJy7R3W&7i z%lCSI*ZV%t^Lzi9Gv}T;*If7K%$b?{ixc-N+od!6>RyoL$@cryZke=q=C-hcAn1^{aqBDN#uoTJbuij~*vZ%&X;2abe1p%82VVOVfs|LE%QMUWMjYgqS1 zK%U_cWB-Im%`c!j{{q%ao>~PS-aCqtCbqM5o(&_N{aaoND|{gg>Yxy~e`pt;e-wglU((8qXAMFdiC{%5CdlN> zfH^PDCK=19Tp_bzs+d0#p~k(`Qe=QDl$`M$Zo9y&V6wkH>JgEd$}6akLCN z@d*2r=p|?y32myB#dTh6dYmMe*+fWKgUE{3azRX3`^eE`iX*P(PHU#Zf1 z$y6qL9IY2vsU#I$4g@B|?D}^PlNU>a@X38Qrs|>OZnyjtMvoVrE<$qd{U*`12FdyF zABl0r$_&Vr7C>v?UcSlCKYpj$zU@~WEV)Trx0%!Ote@HyU`P)0CyZ)A!S4W5h~i5v zzfiWjz|#OO(pD#}=zSeC-12Wj_WRL{`>*uh!KV4}yvD+CH(*v(BUnR@jqJ7!fl(O>FYoIVPms z-mIIPNKKbSB!dz&F+*YHePn}3q0)M1{!J`caXR_W4-V6moP3hWb^Gq>Imur5%B=#) z>b7akcy&rug82IIU*C}nuj2N1*c19osv?^***9{O30A+me^1}QifLEwI3gz()@yXb z2;!M>Fh?^|x8p#r-JeKfa+I-XK)9wDskFS07q;O>US9|7B4iI z{6f5Mc{wrbnxoWr(7BZ5${%)O8!Z`MFB#*opqIrhS1-<$sDWUOa>xCZLtan@H0esH zKdI1%4Qp>7`CcufZjSA%?ZGCM7(5vJU=uRhXduxCPo6a=V(>}-=Ui3M#4jpim4Un~ z+FOJLg})<<{$N*}(VBRps5C{PRrwj04xIarqgyqfMg5DxKXIapFE)o$Bdita^?6(8 zk|Q7`llsBYY40vejA>A z%^UScS5y)>ziDVA8&11F#|QlrR~!)j|A@1H;XXtDS*R6!bOs<&PPEyPjx$r9=Z{WZ z;d*4PVP$(rAK;-frE9Wwr{3$vG1H)8YIlC!)W$IA_x(x_tY1IUHE0MYLUQaH_LfnR zkl-) zEfQk=Rb=Ne%t=GEYb=Eo&=q#&!a`W7)G|xb{VOGe?KV9nO#SVBaaG3DV4VczVj-t* zU-4Wy_;jMr0QPxQs}DAhhCWcQ5YoImDJlQk@F|QU@w2707GKd0-qbu=eIcNgS;;*C zZN#j+BykyNC!ey&Zetz_#X-<* ziuOkPG5YS26&jeG=DAw!o@#D44;9{5Frs|5M~b~0&YgvAQQh&l{(A@Q@3m+uTvMqD zW%i6U#fBE^BP-rT<8&?0UF_^`4Us|qYAr6x@xrPrSL+6csVnW%%2IBo`~L7T>5dB7 zw~s!dZP1b5p?AadeQd7M8Mye4^rYZ{0~V2YUQG)1IgL=l19zDH!NZ^5#m(fmu9{UJdlA$|vE$^N_$! zkth8khJ1vn`{Cy2MASGxkHL0Hwv4qyEle-V7;IYGWU*q-&B}gQ-6%dtmy|E^3p?D# z3*G;zz9Q<#9jXRjtuFredm`^CP&=U5WoJCm5mmkYyG9aT?@0)DVlHXIhiR+syofAV z35{cV`X-=8Im1G%IZL-UtDJ#4`47oV&8X1KQKAN>WqI=o&5QFlS-FJ^W}WTL;>Qn( z*~8uaPhBI5dGki%<^kMl;xa+pKFlnV&}L*|Fy;B*9&i;l zdh7G*o7C<|u*(O-v|UkLMIvkpwTc;1@|H z=Dg!67WTS~XB4(-;rre>8pr^zB1t{TL%Nmb19%u7bv_5YhzMv6u_Iotj6mNXK6MJD zIcAYQ>-+S(eV%aPL3Og12C=^gOlhHmK*^63Eh#T!5);%+O;;}Ahjdu4{&`7hLG9s0 z1RCT2dBlOw>q=m)(+7>v8VuJPzU^4Um|NIUG@1E;#z7fi(_5{D#Iti~%^qW4m(blP ze6jVtUH|-Sy-UQ1&|eEPBC|t+_1tiH$-OsY^iXXPr!Aer;(8K2nfmL=W{R3vdSuGY z`5%#&m2znG0{492++q_VhPdl`Uxj~@qZu-P)ZLo#ro5jIAi19Tl|-!)S8_cFJtOu9k~PYE3QeIxW#mt9Pn&9Fty zh~j3&mCt}$v=UE8cG*<)3=$jn?3~*@;A>I)xvQS#9Vd=|p9H633lNL@?;&FZ$l}FX zoKUF7L2@>#xbz8<6Zn@nOQ(v)EZpXL8n2~;CybYC*5qSQGJh7!8hqc;Yy;ViQ)*0& zU(~TGqi=`x%);|8z zUiw0XiqZen`lLRc^zuvIKxKQ#MaAXY>dwY-xHlCeko44@Um^@cc^tyHy}2@D^9>T? zA}TkFH+b`K#R_`(AeqwEljW82t4-I%WK!TODp!RyLZV+RlHY0JRqm|Xg~D<_lNUWf zwVbA8E!9s#O-QDZ_s^2cL+#}Cg}X?l3p)6p2g1DRYF68X#GE66NigzlYX$j-aW?zTs_?9lhONZHM^^C1>Lin6=Po2=(kLzb?IMF zKgw7o`E@NpVV30O;Y2@nV*2>dhJCZupx?7O__vL8c>M_l{o|K~>}wDD>UYzcPF0>2 zKh!ASLG%}wv!O=TU}zd(>yIVysw^LT7+jYoHb$jpJzXGFX6m}>%R^8dHgF(+ zYREEmi&N9jRJ<+a-A3aD0V=`qP$xuj!%)KRIbZpEnn@6b-=o)*UC9jLfBx2A!=N8d zddTLG8=6y1q3_nFQ&)_&QtH|s&*JRSy>=wULr-`2lKi+bG1ha!TUqb;OI&zC{0L$@ zd@HzKD;*@}`@~r-Z#Uq}h|*uOj<1au`)NN+9E*695gq88O8+`LyTa?xw#N>@e^(ylMSIzN_a+_4hod@|%Jwy%G4HP8XjAvVh z5=FiJdcgO@lg497%ckh_W7FH1SjCfpK>7Y>xh*G&H-C$bBXk_F^?1hJr>qEf4@CUJ z2dwwT=3H9v{L_ObGtL1Qv5Hcmw=KO#!EzLCIo&_U9-F;?_CBW(dY{Fx|7RjF@({>H=(JC| z5o;f`QcVb|d3kQfgf-H!0+R|5t#|mv2Q)eCuYw0W%GY0&hK|YpzJuaEIV6HP5u6{w zmcM4UH4^segj?QT1 zKY=oZ#$U4AgkE(#cv0>>%ALLUOp7m6w8YPu@W zD)^O25k7JwPoZgN!SqpLdybK3=4BM}dF-6=)Ij6gOfG`EAvNFvr&3ovmJ5kpM}G!S zcJJePXFL3+0(rX?;MGfRWnlAS+>F2pJ9n0?bMHVnXXt_OY)`&H+Wdn79}LJBMJ!7s!tK*{f}z1%o9C04+Iznh5d?qh&m3JD*Ri+s=x$4Q0O)MEYGGqEPySHi zj}JeuBv)fe=x%Wdg`!x3m(^tDpXu~$^59(q7lKx`LHb@=i=$ca!{=MF+KpdFaT$%t zrJE>3QnTWwCrUS&jbmHHndf^3_H?X@Thgx{sOjRQI7QQ8#qub^1s+ZmWzwuW z#vOz$>ZV|rf9zqpFxe4As}R04eV$*R4g>LI4AuIENZVCue(NcS`994)Q|qZs7r2<6 zTH@U))!lX?bbr;F(ay%lxJcL@HuPf#)ZBQy^D z?YaK(@;0TupY!!2@sS?GjTNsC+V*TAm;H@HD#TXQ|5}y^ax>f3)feW$eW9Ob-t4#&XCZ~ov)9q@>zHl!=xpW1T0d@X3jLapJ z#`#gDEv=%LMb4-bKlF#vm`)Rnq)&s!6TP(|Ro|pl88#`AWF7LZ?fLibeCxY6WiR$H zCXi!gY2Oc~5wZU0H3Ri(H3SEEXR}uUAH$w5Ddi`uw^=$JY-c4#Ox#W$OEM8c%XO

)$5!dCr%6aW|CFWGq;w$j>*Nn&=enhRiRcaXb60UkOAU%AKV$l* zet9hCsjRtmUUD;e+r8`-m0+U0YmFb>J&MRXoct_yti25u*SHu97xsI6W#}yaX3;Tc zaD~M{S_^2 zX|R8o@P~9B@6`4cV!1E}#oGuKRZ&>s*`6La8(ldt|4P;=OCUJ16rXgESP-o%ieoNM zhq;=l@u_xc5qF=;{i9!mz+)JBpJRe(0Na6+$x{d#f_H6nwD~TIgIsNx+=5pJ5RoM| zdNlk0VWvccWHTlDO1Ngt`f(-tLy?fFR(d+D5T>`C^1sRLNriNjLfN3r(Afb{DPd7O zu9{N1R9Lk9K*kWF`lHl6oXr%D0pcBTR>Z-NkBr`vt;wr z5s^H1xWb)2vz}T z5od89rFJT#-+Sq4jN|x=eaVpJ&?_qpjo6>jC)rh4RUpIH5%tb6=Q6!BD+mOW<+Zlz z{roJAD>VDV5hfdW3PyqmpEFk`M6TD*np8V&_VR)v?Z(Ys4aqbzsp*n|6Mlmv4S9P< zG^C|x*&trn^oZ`&2_>+#JR7}BddzT^ zevlhL=uc*d>PDjJsjSjyTyo6_9I-Q29S&XxWu{>$BLzNI?*8e|yhMyvm9MG^|D>c| zPmAhu=ew!yhId4Wje4I*u2n8bgL3hjC@&a+Ptq5RmFv6UAgiVi3I~w0$&JicAoX?J zRWqQ$HOY+QlM{PwX087gi6awSE}Qkfv*QRgBK~IlW5vPXe*599Zltzy#2yT61Lu<) zmLAT5qJt+Vmc($y4lzov2DR$UbBpdz@*Q#KNE%IFBFommgIpOA=&XrVjg5D>LjFT| zE~Z#F3BMDc=BszJC3LIUKKUzNK6$7~QQr3uiHxv6^j`*snh8(CLB)LNCr%PxquK(m zur%{x_o|)Wk^RNFguN4ghNz@Qy!E-KfyR;^{a>o}o&vf*VD?4)TTUQfQpP)q1kNj0 zPEg5?<0ldCSHNQ00vzX)6JCJ(4uaqHrr^BQH>g0jcdi5G1b1XtuUHKcp)#DwU+K+; zZ*#0)%cPGxdUp)*TYKZbr=vZ+&R#;CKI_pY^SZQksoN_-piJI7Dv4)HiT_v_bR6ms zytT1;oyPtpJZmJRWr`u*leE+W%ifhC{ovLRbe6mP*nrTI6KGOno@fbw8eclL|=D?ZFv&<^%BcutV6UyMdi#tz~dp! zX4m~IwVei>`I)0q3MA<4}g9I2YXnVQ- z0moao7~OzCS^oz%EU0BK?UzEd?zg)d$-#P1y>(opq`Wdq)w5!ycPT3@RI-0==iX?ywOr{~!rHIFJ7{>-BdxcIGS1lKm2nYN3mH=F zXKxVM29bIkk z@R{g}z0Ol8AvGx-9{S5RkM-=UMw7eUoLWKLIEYEeTjLd4(>F_5H=@CB2nZ+GeFy2D zUl-HOmcqMIZcwoChy7%dtYtNy?DRoZX;+Cs=~rhdH&;<7+Tze{QgaaJDR4#ny*t}Q ziqp7BQ)D7PQ^ELS%P>kD`vf>zMqkD(OK+y=X3c2&^7Mxd)EIw+j@^o(>!C#iS465C zvn$_&kC{VEz45U1qQ#I!v%j|hQGXH4x|jK)iJ5Q6-7o(-#-<(Kf+%CkOYsi3ac*gX zvv^7vKHVe;GU()`Z?0Q2eukrlX~sr>TntAZhMs gWXS`vDyyah0A36L01EJnkBI{f`w>Jj2G1$-F-t^P{85MH!@LsFPTmH`(JKN`zp7O2waY|I;;2<9xghM z!kbmxAEEdB_qXTpK-71sQQT-5pqL+>SdgwYRETt1>_s+rW!y0mb?z``#RMJxb}jI% z?Y;)%^-n#}MK+;7-Nuik%FtNUjzv(&P8LSpMPAIyUKRV#U9*`PoRuFjXfNQsv_|rt zK{x2CfY&(ausBYf;O(c-4OK>V6qN5sr6?#N33~~S+j!sh06F}4w`>XY;9Y$Dd_s+g zteQ7V2-{Jd&znoU=DIK5;#W~Ug=y-XLObY^IddVz8ZMstoK`?1tJr8D%58=&4@XJW zjVs2s`1-N-U{;;8UdefR*w-krsw`_xgTK_}89CxiQ@wq#rm!NS_z{z0eK!QcwGn6R z_m#@1X57L&VfJ$<2`r=wj>1P_0FdEu0N8)qe`Aroc8oOU;NcDPSrpsy3smi;>KLZ& zD2Vz*egGO$si-deA`H`~q}uTP7W6G$7?y@Mq!;Xkb}+8jTwrV3&UXHFv0mgnt`d!D z9$9h>9>SQTc*7^WM7+>L)sY~Cm^?TcM*m$Ce-sC^!Od<;tlXW#D(aeDD2x<_72h{* zC~=77OwVTz#q*(-Fa^$kCtaB3TtH3^8k~8gqsNtzGo1ZwySn=NCtW7HBRJy`J46fo zmI6vs^v_9ytoU01o`3(Ryu035RT=&c&4-)M`S}RH53Sq2#X(}5)HR#gO)Py>&H#N< zC=4&E2}<$^7^BMTX!wS(J>u^no3gmA6_G8Jp|I!3cMD5k8oh?Dz6X5oI&uQ^BJju( zgxRmLp7C5aFLDz^w4x2s^I*NV3dgRKX5BEPK+=nZSI<;xsf`8Vi11j`+U8khPy~J2 zhsZt8D)*9~XgTvl$98d^*V!2wh76el=8XP15_^@wPH`jFwu{k?{t~+kXpP@=Yta;y z#^`OmDT%ht4UntZN9Yq$Ee??m2yB$QW_p@j$LomAyqgB;s#x}E?FtnHm?n`MTrA%LPN??i^NRnBb+o6Rk)ustm#^8dQ>Payso&Izxc z`tjosw>m8b`Y8E2ATM0q>AMMI%&aT}{K}+28jR&;{YL(RlvtHR= zx|3MsE*oXW?1xjfx)rYEl1r?g_65fBP2Jb*MjO*4ylQ*1`{t=->TOx=$$jxd)dnnr zE0v8YiMkS=1DBZS^4+e3{*9RWnf5CSaKARTIwfG=)yN`SADAb$oRJ4HT@uG?LY{w> zqW+enES%7$Gzt%3UD4daD=0h)FYZS#zo0hqf)c0;gDdjWukAPw>_@h$zCEQQ(jSbd z;;YS}ln5(%3D(r5eT5#RW*}9*BGs9CoTKoX;iA0Y=W@fwUsV#YGyzR3SA1hC)V*%E zQUh0k#opB$2HOIcl9$$|S;$Ol_sC(KSgW#smz$)3{|5Z$XKESxAWv_AT=9k_DYyRf zZu4#QO(Pa-=Fd z8oXMH=DCFBP_eMmatFK7X~&!|;5dm~Jo*UfA8?cbE7IFmfQRb;R5C6fq%pEY zsR;{e4#2L-CVqgyC3jc6X4|f>bT<2*`Wf~>W2C!!kK$CHN|L1P$6g0b{TWNr9Kw!0 z2r+F;4GPqbPqyI=o7}8qZKRG>`#D;lV+|U?fML}TrL+5LXu)zY44#sV1%}MSkLSwMgr;>-BH}U~zr<((x#?8J0?0cavFIC_-0d6O>z(U&eP9|Q=LT9~p=@Ja z$a!B&aHM8|JEw{0dFQz{2Bk28e+6fZEYS~Z_?;8fYvV&3hzaqO@s%SCqi%HZ;UaNr z&5-xoV5GI368}CM6}sk_V_BLk5+fmpZZkKXOS;Hf9^0f}eH|wT0h)K;4a4umV~Y`q z3r2qPah^Eu!KG~*rJOd5p*bq0yy5D^-AGDy%;t zafO!n4P$r*1>z$vT2r+B?};NHoS*!?{0lIxW8+?4BnJXmlE$Jj(O;~ez#~LlK{~)G zEfu5=FQK9>4Hxe>^D2ty=48lzOwUSlElnM%2?rv94)CNPz!9wwcEXA&{Pl|oQ4t-9?h!|m5)#IW&+ye9V_(8_s7Ed}kb+Jm^oU-z=+5Q->xHvmm#7oTv4KUx zi3(^G{g>1bR~D3y7~}S6i$VuQFDXECfAn_`kp2T}9&ZcTih-$)iW(op-%U8r39@4J z)Y@u8%yu%am%1|*C5?fIVJ`&tS)PGBm8_?23*0y`>hQAu90Ysg-^MuL9NWP>#yE1Y zn5sk#I}l}`?$o?^4YKFFfCg5JJ3_tQNz5Bo6=yt;03D^5M!g(} z;7wQLGc@K2x1@Z;LoY6^Hs?cfK~FBe)jI(A%+z zf7c*(MO2yIw$b6#gXcv@OI_)gOd&ah#6bcT)hs55N8%CfADQpsqvc&J57MOEchLb< z$Um5NklwL${QKDoM9TJ#eVaR-8VfRLY+6Uf&S>9c{GnJii_m4Rr~WQ5Xu@#0YR%yb zRQp6vRky7k*9FF*y;~TsYseJ%>!+UuYh}0Ese})<&A2&EvexV-98utby30kik*~-+ z-8fo7&flrf$Wr(n_0oMsvYsO}>-Wr+UBWyYrteDJ*{?%!A1z;>n$G$$5-$P3E0*NP6iH;(?#u>?A2$(;9GH;q2idd_MEpdLuKStO8j0Vv+4w5oXeKjk?e$G$zQ$FgL^!P6=-jQn!;Oyi*S?^ z)wfbg{}f3rPUO!}EDv02Z=o;>^x`JaSfp5zzdhA^IRnaCGie(P_DNE>%H-3iNfa^t z_G)j6K7F&{gMNHXn;gBXcnR+knm}!B4_sgobcMXCw~PsitW^Xu6Fy9CrTmsFo7V{C zwHZmbUo&<)(Sc@h9D4;j&aomWOiDQRLz7N9?ie0_*dHq`m%lG=0n0|^7d$^96g0}V zH&!&gs-oi(X-`}+HcW-qNV%zA6Y-X>WqFnz-zs3nC%Pjo`0Jxzd7jEq&aq#zIxT9e&af9&`5)SlRq_&DZ`_DL}2JF;a3xwCw$Z z*%|kBqkrZw$jr>tK8Pdndvmy6%BgVo-nWmQ85h@$Xe`P|@iV1$a^#jAZ%;>N)AN`z za)|2rJBf$+0+E)wq1P?BCR7q{K-%gPEB&F#Yi=SPGFQ5XvD@*eaj}}>t~)Po5$f&F z$`VHxJPb9qJXw4&@42`e1RG}^-n#+_;zt?Q>P>lr3V7qXd>3ifUsYuSHa#y|2)5nch z_kM#$A~LDWyrTAb9a2#v(lbhgBg1Ev=R%-5tsGqa&nOFY-m{iSs)+m`{W(|M zFI7eDjeM!9$L!E=umF!kQT zVC|IKOgt>Eq?+6HSiD8vC%xLUt>Va>loNy1fj+*&Obk%2Ae>F9dJLisj$F4tznCh# zmVzRs|9oWLG2D2wC_!>bUD&shb)&Q*QWCC0j;0_I@QsWpe|8!-<-ul9znJE-A+3LJbKD z+-WqP_D07^$?OM03AuO`OQZaX=mvS zi`^0sDsOVF)8f4DB<&nt?LR|NRe-1F`Mf%O$hIP3tTycF`1Bxo<%)Yro>@*%(Z?&z zcHz&DD}#Hku_lOjnI z2>Z|+Q6~_OKud@+aIvr^=GN;cb@3ZZTiV)eCk3PH{2%b$`&@ec2qW&mfTvkAoi9cYC48A6_l8&^S zKk>`56)0=;S}q%D6?`1OTlaiOuASvH#S$Iv(cf6{jL@`Y3r5+2`b(g4nECbj*!=bO zr|8B_avYTZuh~#)q)`XwG7C3UY#}N7DOwBs|$VR62_m31Cyr}quIRwBs>j?W7 za-=6ILI&Xiq9XVgkN?sFP)yxmwWq-gBWnz|4#g}N^WMfL1w4Ko^#A27MYC9#e}1BM z!cuoqAZEFoC(=!|3M3&r2!Ne(4wdJ!%Enq%=djZ0qJ%9E&z#gyT2k>aX zCZ?l8o>_ds>YuiqbJ4gUn0Ppri+*k2A_<6FYw%Qm5Or$McnnU}0 zVMxTmuQZ}vxz%b`7F>$TH63F03l7ZZL=~hfOFwcasF<<>aO$qe1LKT*gK_~$Rwj77 z!g{T?Wu?PrFApg4`=rUoLCJbX6)j?<_#^+YCab8|Y7!E&N~oUbW6}3I==b4BUAWGS zFKNE7XUND}miDl$5k&^x*?J!4-4q$7#3yXxw2#oNE{t@q?TE^r5 zA-p&$xWEfemR{3nEBR^azN^bWoERW_5c}C9{WD7Fp7qV|Vh-qY-*nRxaB#aFE-I~l z$8<+M&_E2cKS3*J=ky49o$^P-h(mw5>^Z<&4zQycy|!e!pp_mmuX92>4p=|U?)>x6GBPBbYTcWR z`nS7ppYV_bauJ-+?s^Y;l3Wok>S{D?lndt3MogJOBkMC7D)LLq%B*a^-$&9to6}ur z_PApXS94DPk>PJZ6&c|7No^fTYBxzlTMy@H%SWf!sRsD{x*dgBTN_YmLELQirA>?S zl{09P{n*(6KjIQN+$=*Kc&^v+>cmz5=HSlL{{eGEp%&x5;Ii2#u;3Sj2gNM&vBy>& zuBsQ_H>ow5XRcLyf-K>qdvi^6gTL|ts{1f}q9R8=>2jjv!bP&HmL$2X`F;LH&G1*7 zx?6YD*+4IMhov+9^@T~T#xA$$m)Xlk#EDmwn8idpai#Z5^EV2I(6EK=ejK*xnF=2+ zgbU9ZCzX5TZ%2`g_s%QnZLJ-0xMq=*R#GGMuKEvp6S!R7#0?|KfoY9OMt&*|AMWW; zTBz?hV#elQC6AM%?UBQTA1@mCc;^Dq=7)WPV#d@jE}`h!NXz2qG}%xR_^2UQu(f^z zv#w5IY}f3jR8nNUc_sBPcNaejygW5RhYekXqLF>`oe(yU^_E( z*;7+TklOX(AIQ|;RP;V?p_S2ju6$9f;1{&QP9c5$V!6)vp9?}3h5|hJJM#xB{BD-f z+2r`<;JV{CikhA=f9D$rM!m2>XdpNA{K-pPymnGGEe zpWf?2UcTRKf&CrU5Z(I!>g!!kytdL4HT!@h$P1(c?82*qhX~#*T>8}O#8E&zG=f+G z@Ac7a$awjW4xvk9oFi_r8s-E1ql1w z;Ma7rydJ1~4wN>k2sAX>tIW3llr=neh8c(v1M0XHjOI$G%#0|AV4X^&PW#4^$Mq4f=DiX8Yk2 zuK5;OZwB;XA&;TO4;EsI*hPBh74Qh=yUaY4O^2pDU1ZU_NNKy68M~MZnmU<3b-)|W zH(YF7oNSzLHMn>Lx!(xB;d;%4Um&kmMj-H G3iuxj6<_24 literal 0 HcmV?d00001 diff --git a/assets/libs/jquery-ui/images/ui-icons_cd0a0a_256x240.png b/assets/libs/jquery-ui/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..a8e162d347c0d676707fb5252b43100c38f89f56 GIT binary patch literal 4618 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 literal 0 HcmV?d00001 diff --git a/assets/libs/jquery-ui/jquery-ui.css b/assets/libs/jquery-ui/jquery-ui.css new file mode 100644 index 00000000..294452f1 --- /dev/null +++ b/assets/libs/jquery-ui/jquery-ui.css @@ -0,0 +1,1311 @@ +/*! jQuery UI - v1.12.1 - 2016-09-14 +* http://jqueryui.com +* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); /* support: IE8 */ +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; + pointer-events: none; +} + + +/* Icons +----------------------------------*/ +.ui-icon { + display: inline-block; + vertical-align: middle; + margin-top: -.25em; + position: relative; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + +.ui-widget-icon-block { + left: 50%; + margin-left: -8px; + display: block; +} + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin: 2px 0 0 0; + padding: .5em .5em .5em .7em; + font-size: 100%; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: 0; +} +.ui-menu .ui-menu { + position: absolute; +} +.ui-menu .ui-menu-item { + margin: 0; + cursor: pointer; + /* support: IE10, see #8844 */ + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); +} +.ui-menu .ui-menu-item-wrapper { + position: relative; + padding: 3px 1em 3px .4em; +} +.ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-state-focus, +.ui-menu .ui-state-active { + margin: -1px; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item-wrapper { + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: .2em; + margin: auto 0; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + left: auto; + right: 0; +} +.ui-button { + padding: .4em 1em; + display: inline-block; + position: relative; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + /* Support: IE <= 11 */ + overflow: visible; +} + +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} + +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2em; + box-sizing: border-box; + text-indent: -9999px; + white-space: nowrap; +} + +/* no icon support for input elements */ +input.ui-button.ui-button-icon-only { + text-indent: 0; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon { + position: absolute; + top: 50%; + left: 50%; + margin-top: -8px; + margin-left: -8px; +} + +.ui-button.ui-icon-notext .ui-icon { + padding: 0; + width: 2.1em; + height: 2.1em; + text-indent: -9999px; + white-space: nowrap; + +} + +input.ui-button.ui-icon-notext .ui-icon { + width: auto; + height: auto; + text-indent: 0; + white-space: normal; + padding: .4em 1em; +} + +/* workarounds */ +/* Support: Firefox 5 - 40 */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +.ui-controlgroup { + vertical-align: middle; + display: inline-block; +} +.ui-controlgroup > .ui-controlgroup-item { + float: left; + margin-left: 0; + margin-right: 0; +} +.ui-controlgroup > .ui-controlgroup-item:focus, +.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { + z-index: 9999; +} +.ui-controlgroup-vertical > .ui-controlgroup-item { + display: block; + float: none; + width: 100%; + margin-top: 0; + margin-bottom: 0; + text-align: left; +} +.ui-controlgroup-vertical .ui-controlgroup-item { + box-sizing: border-box; +} +.ui-controlgroup .ui-controlgroup-label { + padding: .4em 1em; +} +.ui-controlgroup .ui-controlgroup-label span { + font-size: 80%; +} +.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { + border-left: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { + border-top: none; +} +.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { + border-right: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { + border-bottom: none; +} + +/* Spinner specific style fixes */ +.ui-controlgroup-vertical .ui-spinner-input { + + /* Support: IE8 only, Android < 4.4 only */ + width: 75%; + width: calc( 100% - 2.4em ); +} +.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { + border-top-style: solid; +} + +.ui-checkboxradio-label .ui-icon-background { + box-shadow: inset 1px 1px 1px #ccc; + border-radius: .12em; + border: none; +} +.ui-checkboxradio-radio-label .ui-icon-background { + width: 16px; + height: 16px; + border-radius: 1em; + overflow: visible; + border: none; +} +.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, +.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { + background-image: none; + width: 8px; + height: 8px; + border-width: 4px; + border-style: solid; +} +.ui-checkboxradio-disabled { + pointer-events: none; +} +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 45%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} + +/* Icons */ +.ui-datepicker .ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; + left: .5em; + top: .3em; +} +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-n { + height: 2px; + top: 0; +} +.ui-dialog .ui-resizable-e { + width: 2px; + right: 0; +} +.ui-dialog .ui-resizable-s { + height: 2px; + bottom: 0; +} +.ui-dialog .ui-resizable-w { + width: 2px; + left: 0; +} +.ui-dialog .ui-resizable-se, +.ui-dialog .ui-resizable-sw, +.ui-dialog .ui-resizable-ne, +.ui-dialog .ui-resizable-nw { + width: 7px; + height: 7px; +} +.ui-dialog .ui-resizable-se { + right: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-sw { + left: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-ne { + right: 0; + top: 0; +} +.ui-dialog .ui-resizable-nw { + left: 0; + top: 0; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,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"); + height: 100%; + filter: alpha(opacity=25); /* support: IE8 */ + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-text { + display: block; + margin-right: 20px; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-selectmenu-button.ui-button { + text-align: left; + white-space: nowrap; + width: 14em; +} +.ui-selectmenu-icon.ui-icon { + float: right; + margin-top: 0; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; + -ms-touch-action: none; + touch-action: none; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* support: IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: .222em 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 2em; +} +.ui-spinner-button { + width: 1.6em; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to override default borders */ +.ui-spinner a.ui-spinner-button { + border-top-style: none; + border-bottom-style: none; + border-right-style: none; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; +} +body .ui-tooltip { + border-width: 2px; +} +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Verdana,Arial,sans-serif; + font-size: 1.1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Verdana,Arial,sans-serif; + font-size: 1em; +} +.ui-widget.ui-widget-content { + border: 1px solid #d3d3d3; +} +.ui-widget-content { + border: 1px solid #aaaaaa; + background: #ffffff; + color: #222222; +} +.ui-widget-content a { + color: #222222; +} +.ui-widget-header { + border: 1px solid #aaaaaa; + background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; + color: #222222; + font-weight: bold; +} +.ui-widget-header a { + color: #222222; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default, +.ui-button, + +/* We use html here because we need a greater specificity to make sure disabled +works properly when clicked or hovered */ +html .ui-button.ui-state-disabled:hover, +html .ui-button.ui-state-disabled:active { + border: 1px solid #d3d3d3; + background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #555555; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited, +a.ui-button, +a:link.ui-button, +a:visited.ui-button, +.ui-button { + color: #555555; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus, +.ui-button:hover, +.ui-button:focus { + border: 1px solid #999999; + background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited, +a.ui-button:hover, +a.ui-button:focus { + color: #212121; + text-decoration: none; +} + +.ui-visual-focus { + box-shadow: 0 0 3px 1px rgb(94, 158, 214); +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + border: 1px solid #aaaaaa; + background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-icon-background, +.ui-state-active .ui-icon-background { + border: #aaaaaa; + background-color: #212121; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #212121; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #fcefa1; + background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; + color: #363636; +} +.ui-state-checked { + border: 1px solid #fcefa1; + background: #fbf9ee; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #363636; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a; + background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; + color: #cd0a0a; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #cd0a0a; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #cd0a0a; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); /* support: IE8 */ + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); /* support: IE8 */ + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("images/ui-icons_222222_256x240.png"); +} +.ui-widget-header .ui-icon { + background-image: url("images/ui-icons_222222_256x240.png"); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon, +.ui-button:hover .ui-icon, +.ui-button:focus .ui-icon { + background-image: url("images/ui-icons_454545_256x240.png"); +} +.ui-state-active .ui-icon, +.ui-button:active .ui-icon { + background-image: url("images/ui-icons_454545_256x240.png"); +} +.ui-state-highlight .ui-icon, +.ui-button .ui-state-highlight.ui-icon { + background-image: url("images/ui-icons_2e83ff_256x240.png"); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("images/ui-icons_cd0a0a_256x240.png"); +} +.ui-button .ui-icon { + background-image: url("images/ui-icons_888888_256x240.png"); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-caret-1-n { background-position: 0 0; } +.ui-icon-caret-1-ne { background-position: -16px 0; } +.ui-icon-caret-1-e { background-position: -32px 0; } +.ui-icon-caret-1-se { background-position: -48px 0; } +.ui-icon-caret-1-s { background-position: -65px 0; } +.ui-icon-caret-1-sw { background-position: -80px 0; } +.ui-icon-caret-1-w { background-position: -96px 0; } +.ui-icon-caret-1-nw { background-position: -112px 0; } +.ui-icon-caret-2-n-s { background-position: -128px 0; } +.ui-icon-caret-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -65px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -65px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 1px -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 4px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ +} +.ui-widget-shadow { + -webkit-box-shadow: -8px -8px 8px #aaaaaa; + box-shadow: -8px -8px 8px #aaaaaa; +} diff --git a/assets/libs/jquery-ui/jquery-ui.min.css b/assets/libs/jquery-ui/jquery-ui.min.css new file mode 100644 index 00000000..dbd72353 --- /dev/null +++ b/assets/libs/jquery-ui/jquery-ui.min.css @@ -0,0 +1,7 @@ +/*! jQuery UI - v1.12.1 - 2016-09-14 +* http://jqueryui.com +* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup > .ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup > .ui-controlgroup-item:focus,.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical > .ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc( 100% - 2.4em )}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw,.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,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");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #d3d3d3}.ui-widget-content{border:1px solid #aaa;background:#fff;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #d3d3d3;background:#e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #999;background:#dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#212121;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #aaa;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-icon-background,.ui-state-active .ui-icon-background{border:#aaa;background-color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;color:#363636}.ui-state-checked{border:1px solid #fcefa1;background:#fbf9ee}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-button .ui-icon{background-image:url("images/ui-icons_888888_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{-webkit-box-shadow:-8px -8px 8px #aaa;box-shadow:-8px -8px 8px #aaa} \ No newline at end of file diff --git a/includes/admin/core/class-admin-enqueue.php b/includes/admin/core/class-admin-enqueue.php index d0b848a0..debc4cbe 100644 --- a/includes/admin/core/class-admin-enqueue.php +++ b/includes/admin/core/class-admin-enqueue.php @@ -98,7 +98,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Enqueue' ) ) { * Enqueue Gutenberg Block Editor assets */ public function block_editor() { - wp_register_style( 'um_ui', UM_URL . 'assets/css/jquery-ui.css', array(), UM_VERSION ); + wp_register_style( 'um_ui', UM_URL . 'assets/libs/jquery-ui/jquery-ui' . $this->suffix . '.css', array(), '1.12.1' ); wp_register_style( 'um_members', UM_URL . 'assets/css/um-members.css', array( 'um_ui' ), UM_VERSION ); if ( is_rtl() ) { wp_register_style( 'um_members_rtl', UM_URL . 'assets/css/um-members-rtl.css', array( 'um_members' ), UM_VERSION ); @@ -357,11 +357,11 @@ if ( ! class_exists( 'um\admin\core\Admin_Enqueue' ) ) { wp_register_script( 'select2', $this->front_js_baseurl . 'select2/select2.full' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry' ), '4.0.13', true ); wp_register_style( 'select2', $this->front_css_baseurl . 'select2/select2' . $this->suffix . '.css', array(), '4.0.13' ); - wp_register_style( 'um_ui', $this->front_css_baseurl . 'jquery-ui.css', array(), ultimatemember_version ); - wp_register_style( 'um_admin_forms', $this->css_url . 'um-admin-forms.css', array( 'wp-color-picker', 'um_ui', 'select2' ), ultimatemember_version ); + wp_register_style( 'um_ui', UM_URL . 'assets/libs/jquery-ui/jquery-ui' . $this->suffix . '.css', array(), '1.12.1' ); + wp_register_style( 'um_admin_forms', $this->css_url . 'um-admin-forms.css', array( 'wp-color-picker', 'um_ui', 'select2' ), UM_VERSION ); wp_enqueue_style( 'um_admin_forms' ); - wp_register_script( 'um_admin_forms', $this->js_url . 'um-admin-forms.js', array( 'jquery', 'wp-i18n', 'select2' ), ultimatemember_version, true ); + wp_register_script( 'um_admin_forms', $this->js_url . 'um-admin-forms.js', array( 'jquery', 'wp-i18n', 'select2' ), UM_VERSION, true ); wp_localize_script( 'um_admin_forms', diff --git a/includes/common/class-enqueue.php b/includes/common/class-enqueue.php index 5edfa7fd..a0ae4cd9 100644 --- a/includes/common/class-enqueue.php +++ b/includes/common/class-enqueue.php @@ -28,7 +28,7 @@ class Enqueue { /** * Enqueue constructor. * - * @since 3.0 + * @since 2.7.0 */ public function __construct() { add_action( 'um_core_loaded', array( $this, 'init_variables' ) ); @@ -51,7 +51,7 @@ class Enqueue { } /** - * Register common JS/CSS libraries + * Register common JS/CSS libraries. * * @since 2.7.0 */ @@ -64,12 +64,9 @@ class Enqueue { wp_register_script( 'um-helptip', $this->urls['libs'] . 'helptip/helptip' . $this->suffix . '.js', array( 'jquery', 'jquery-ui-tooltip' ), '1.0.0', true ); wp_register_style( 'um-helptip', $this->urls['libs'] . 'helptip/helptip' . $this->suffix . '.css', array( 'dashicons', 'um-jquery-ui' ), '1.0.0' ); - // old fonticons - $um_is_legacy = get_option( 'um_is_legacy' ); - if ( $um_is_legacy ) { - wp_register_style( 'um-fonticons-ii', $this->urls['libs'] . 'fonticons/um-fonticons-ii' . $this->suffix . '.css', array(), UM_VERSION ); - wp_register_style( 'um-fonticons-fa', $this->urls['libs'] . 'fonticons/um-fonticons-fa' . $this->suffix . '.css', array(), UM_VERSION ); - } + // Legacy Fonticons + wp_register_style( 'um-fonticons-ii', $this->urls['libs'] . 'fonticons/um-fonticons-ii' . $this->suffix . '.css', array(), UM_VERSION ); + wp_register_style( 'um-fonticons-fa', $this->urls['libs'] . 'fonticons/um-fonticons-fa' . $this->suffix . '.css', array(), UM_VERSION ); // Select2 $dequeue_select2 = apply_filters( 'um_dequeue_select2_scripts', false ); @@ -93,12 +90,11 @@ class Enqueue { // Common JS scripts for wp-admin and frontend both wp_register_script( 'um-common', $this->urls['js'] . 'common' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - $um_common_variables = apply_filters( - 'um_common_js_variables', - array( - 'locale' => get_locale(), - ) + + $um_common_variables = array( + 'locale' => get_locale(), ); + $um_common_variables = apply_filters( 'um_common_js_variables', $um_common_variables ); wp_localize_script( 'um-common', 'um_common_variables', $um_common_variables ); wp_enqueue_script( 'um-common' ); } diff --git a/includes/core/class-enqueue.php b/includes/core/class-enqueue.php index ae6d4af1..649e876e 100644 --- a/includes/core/class-enqueue.php +++ b/includes/core/class-enqueue.php @@ -199,7 +199,7 @@ if ( ! class_exists( 'um\core\Enqueue' ) ) { wp_register_style( 'um_styles', $this->css_baseurl . 'um-styles.css', array(), UM_VERSION ); - wp_register_style( 'um_ui', $this->css_baseurl . 'jquery-ui.css', array(), UM_VERSION ); + wp_register_style( 'um_ui', UM_URL . 'assets/libs/jquery-ui/jquery-ui' . $this->suffix . '.css', array(), '1.12.1' ); wp_register_style( 'um_members', $this->css_baseurl . 'um-members.css', array( 'um_ui' ), UM_VERSION ); if ( is_rtl() ) { From 26792de205d95ec131a206d34867bca50b32d241 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Thu, 14 Sep 2023 01:08:48 +0300 Subject: [PATCH 17/81] - updated enqueue classes; - updated admin-navmenu class (removed support WordPress < 5.4); --- includes/admin/class-admin.php | 13 + includes/admin/class-enqueue.php | 748 +++++++++++++++++++ includes/admin/class-secure.php | 2 +- includes/admin/core/class-admin-enqueue.php | 753 -------------------- includes/admin/core/class-admin-navmenu.php | 45 +- includes/class-init.php | 26 +- includes/common/class-enqueue.php | 86 +-- includes/core/class-enqueue.php | 442 ------------ includes/frontend/class-enqueue.php | 427 +++++++++++ includes/frontend/class-init.php | 14 + 10 files changed, 1265 insertions(+), 1291 deletions(-) create mode 100644 includes/admin/class-enqueue.php delete mode 100644 includes/admin/core/class-admin-enqueue.php delete mode 100644 includes/core/class-enqueue.php create mode 100644 includes/frontend/class-enqueue.php diff --git a/includes/admin/class-admin.php b/includes/admin/class-admin.php index c2293a52..cdb76b36 100644 --- a/includes/admin/class-admin.php +++ b/includes/admin/class-admin.php @@ -86,6 +86,7 @@ if ( ! class_exists( 'um\admin\Admin' ) ) { } public function includes() { + $this->enqueue(); $this->notices(); $this->secure(); } @@ -2041,6 +2042,18 @@ if ( ! class_exists( 'um\admin\Admin' ) ) { return $parent_file; } + /** + * @since 2.6.12 + * + * @return Enqueue + */ + public function enqueue() { + if ( empty( UM()->classes['um\admin\enqueue'] ) ) { + UM()->classes['um\admin\enqueue'] = new Enqueue(); + } + return UM()->classes['um\admin\enqueue']; + } + /** * @since 2.0 * diff --git a/includes/admin/class-enqueue.php b/includes/admin/class-enqueue.php new file mode 100644 index 00000000..e7ce6786 --- /dev/null +++ b/includes/admin/class-enqueue.php @@ -0,0 +1,748 @@ +js_url = UM_URL . 'includes/admin/assets/js/'; + $this->css_url = UM_URL . 'includes/admin/assets/css/'; + + $this->front_js_baseurl = UM_URL . 'assets/js/'; + $this->front_css_baseurl = UM_URL . 'assets/css/'; + + $this->um_cpt_form_screen = false; + + add_action( 'admin_head', array( &$this, 'admin_head' ), 9 ); + + add_action( 'admin_enqueue_scripts', array( &$this, 'admin_enqueue_scripts' ) ); + + add_filter( 'enter_title_here', array( &$this, 'enter_title_here' ) ); + + add_action( 'load-user-new.php', array( &$this, 'enqueue_role_wrapper' ) ); + add_action( 'load-user-edit.php', array( &$this, 'enqueue_role_wrapper' ) ); + + add_action( 'load-post-new.php', array( &$this, 'enqueue_cpt_scripts' ) ); + add_action( 'load-post.php', array( &$this, 'enqueue_cpt_scripts' ) ); + + global $wp_version; + if ( version_compare( $wp_version, '5.8', '>=' ) ) { + add_filter( 'block_categories_all', array( &$this, 'blocks_category' ), 10, 2 ); + } else { + add_filter( 'block_categories', array( &$this, 'blocks_category' ), 10, 2 ); + } + add_action( 'enqueue_block_assets', array( &$this, 'block_editor' ), 11 ); + } + + + /** + * Enqueue Gutenberg Block Editor assets + */ + public function block_editor() { + $this->register_jquery_ui(); + wp_register_style( 'um_members', UM_URL . 'assets/css/um-members.css', array( 'um_ui' ), UM_VERSION ); + if ( is_rtl() ) { + wp_register_style( 'um_members_rtl', UM_URL . 'assets/css/um-members-rtl.css', array( 'um_members' ), UM_VERSION ); + } + wp_register_style( 'um_styles', UM_URL . 'assets/css/um-styles.css', array(), UM_VERSION ); + wp_register_style( 'um_profile', UM_URL . 'assets/css/um-profile.css', array(), UM_VERSION ); + wp_register_style( 'um_crop', UM_URL . 'assets/css/um-crop.css', array(), UM_VERSION ); + wp_register_style( 'um_responsive', UM_URL . 'assets/css/um-responsive.css', array( 'um_profile', 'um_crop' ), UM_VERSION ); + wp_register_style( 'um_account', UM_URL . 'assets/css/um-account.css', array(), UM_VERSION ); + wp_register_style( 'um_default_css', UM_URL . 'assets/css/um-old-default.css', array(), UM_VERSION ); + wp_register_style( 'um_fonticons_fa', UM_URL . 'assets/css/um-fonticons-fa.css', array(), UM_VERSION ); + wp_register_style( 'select2', UM_URL . 'assets/css/select2/select2' . $this->suffix . '.css', array(), UM_VERSION ); + wp_register_style( 'um_fonticons_ii', UM_URL . 'assets/css/um-fonticons-ii.css', array(), UM_VERSION ); + + wp_register_script( 'um_admin_blocks_shortcodes', UM_URL . 'assets/js/um-blocks' . $this->suffix . '.js', array( 'wp-i18n', 'wp-blocks', 'wp-components' ), UM_VERSION, true ); + wp_set_script_translations( 'um_admin_blocks_shortcodes', 'ultimate-member' ); + + if ( ! empty( UM()->account()->get_tab_fields( 'notifications', array() ) ) ) { + $notifications_enabled = 1; + } else { + $notifications_enabled = 0; + } + + $um_account_settings = array( + 'general' => array( + 'label' => __( 'General', 'ultimate-member' ), + 'enabled' => 1, + ), + 'password' => array( + 'label' => __( 'Password', 'ultimate-member' ), + 'enabled' => UM()->options()->get( 'account_tab_password' ), + ), + 'privacy' => array( + 'label' => __( 'Privacy', 'ultimate-member' ), + 'enabled' => UM()->options()->get( 'account_tab_privacy' ), + ), + 'notifications' => array( + 'label' => __( 'Notifications', 'ultimate-member' ), + 'enabled' => $notifications_enabled, + ), + 'delete' => array( + 'label' => __( 'Delete', 'ultimate-member' ), + 'enabled' => UM()->options()->get( 'account_tab_delete' ), + ), + ); + $um_account_settings = apply_filters( 'um_extend_account_settings', $um_account_settings ); + wp_localize_script( 'um_admin_blocks_shortcodes', 'um_account_settings', $um_account_settings ); + + wp_enqueue_script( 'um_admin_blocks_shortcodes' ); + + wp_register_script( 'select2', UM_URL . 'assets/js/select2/select2.full' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry' ), UM_VERSION, true ); + wp_register_script( 'um_datetime', UM_URL . 'assets/js/pickadate/picker.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_datetime_date', UM_URL . 'assets/js/pickadate/picker.date.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); + wp_register_script( 'um_datetime_time', UM_URL . 'assets/js/pickadate/picker.time.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); + wp_register_script( 'um_conditional', UM_URL . 'assets/js/um-conditional' . $this->suffix . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); + wp_register_script( 'um_scripts', UM_URL . 'assets/js/um-scripts' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', 'select2' ), UM_VERSION, true ); + $max_upload_size = wp_max_upload_size(); + if ( ! $max_upload_size ) { + $max_upload_size = 0; + } + + $localize_data = apply_filters( + 'um_enqueue_localize_data', + array( + 'max_upload_size' => $max_upload_size, + 'nonce' => wp_create_nonce( 'um-frontend-nonce' ), + ) + ); + wp_localize_script( 'um_scripts', 'um_scripts', $localize_data ); + + wp_register_script( 'um_dropdown', UM_URL . 'assets/js/dropdown' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_members', UM_URL . 'assets/js/um-members' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'jquery-ui-slider', 'um_dropdown', 'wp-hooks', 'jquery-masonry', 'um_scripts' ), UM_VERSION, true ); + + wp_register_script( 'um_account', UM_URL . 'assets/js/um-account' . $this->suffix . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); + wp_register_script( 'um_scrollbar', UM_URL . 'assets/js/simplebar' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_crop', UM_URL . 'assets/js/um-crop' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_functions', UM_URL . 'assets/js/um-functions' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry', 'wp-util', 'um_scrollbar' ), UM_VERSION, true ); + wp_register_script( 'um_responsive', UM_URL . 'assets/js/um-responsive' . $this->suffix . '.js', array( 'jquery', 'um_functions', 'um_crop' ), UM_VERSION, true ); + + // render blocks + wp_enqueue_script( 'um_datetime' ); + wp_enqueue_script( 'um_datetime_date' ); + wp_enqueue_script( 'um_datetime_time' ); + wp_enqueue_script( 'um_conditional' ); + wp_enqueue_script( 'um_dropdown' ); + wp_enqueue_script( 'um_members' ); + wp_enqueue_script( 'um_account' ); + wp_enqueue_script( 'um_scrollbar' ); + wp_enqueue_script( 'um_crop' ); + wp_enqueue_script( 'um_functions' ); + wp_enqueue_script( 'um_responsive' ); + + wp_enqueue_style( 'um_fonticons_ii' ); + wp_enqueue_style( 'select2' ); + wp_enqueue_style( 'um_default_css' ); + wp_enqueue_style( 'um_fonticons_fa' ); + wp_enqueue_style( 'um_members' ); + wp_enqueue_style( 'um_styles' ); + wp_enqueue_style( 'um_profile' ); + wp_enqueue_style( 'um_crop' ); + wp_enqueue_style( 'um_responsive' ); + wp_enqueue_style( 'um_account' ); + + $custom_css = '.um{opacity: 1;}.um_request_name {display: none !important;}'; + + wp_add_inline_style( 'um_styles', $custom_css ); + } + + + public function enqueue_role_wrapper() { + add_action( 'admin_enqueue_scripts', array( &$this, 'load_role_wrapper' ) ); + } + + + /** + * + */ + public function enqueue_cpt_scripts() { + // phpcs:ignore WordPress.Security.NonceVerification + if ( ( isset( $_GET['post_type'] ) && 'um_form' === sanitize_key( $_GET['post_type'] ) ) || ( isset( $_GET['post'] ) && 'um_form' === get_post_type( absint( $_GET['post'] ) ) ) ) { + $this->um_cpt_form_screen = true; + add_action( 'admin_footer', array( $this, 'admin_footer_scripts' ), 20 ); + } + } + + + /** + * + */ + public function enqueue_frontend_preview_assets() { + //scripts for FRONTEND PREVIEW + if ( class_exists( 'WooCommerce' ) ) { + wp_dequeue_style( 'select2' ); + wp_deregister_style( 'select2' ); + + wp_dequeue_script( 'select2' ); + wp_deregister_script( 'select2' ); + } + + wp_register_script( 'select2', $this->front_js_baseurl . 'select2/select2.full' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry' ), '4.0.13', true ); + wp_register_script( 'um_jquery_form', $this->front_js_baseurl . 'um-jquery-form' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_fileupload', $this->front_js_baseurl . 'um-fileupload.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_crop', $this->front_js_baseurl . 'um-crop' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_tipsy', $this->front_js_baseurl . 'um-tipsy' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_functions', $this->front_js_baseurl . 'um-functions' . $this->suffix . '.js', array( 'jquery', 'um_tipsy', 'um_scrollbar' ), UM_VERSION, true ); + + wp_register_script( 'um_datetime', $this->front_js_baseurl . 'pickadate/picker.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_datetime_date', $this->front_js_baseurl . 'pickadate/picker.date.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); + wp_register_script( 'um_datetime_time', $this->front_js_baseurl . 'pickadate/picker.time.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); + //wp_register_script( 'um_datetime_legacy', $this->front_js_baseurl . 'pickadate/legacy.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); + // load a localized version for date/time + $locale = get_locale(); + if ( $locale ) { + if ( file_exists( WP_LANG_DIR . '/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js' ) ) { + wp_register_script( 'um_datetime_locale', content_url() . '/languages/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); + } elseif ( file_exists( UM_PATH . 'assets/js/pickadate/translations/' . $locale . '.js' ) ) { + wp_register_script( 'um_datetime_locale', UM_URL . 'assets/js/pickadate/translations/' . $locale . '.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); + } + } + + wp_register_script( 'um_scripts', $this->front_js_baseurl . 'um-scripts' . $this->suffix . '.js', array( 'um_functions', 'um_crop', 'um_raty', 'select2', 'um_jquery_form', 'um_fileupload', 'um_datetime', 'um_datetime_date', 'um_datetime_time'/*, 'um_datetime_legacy'*/ ), UM_VERSION, true ); + wp_register_script( 'um_responsive', $this->front_js_baseurl . 'um-responsive' . $this->suffix . '.js', array( 'um_scripts' ), UM_VERSION, true ); + wp_register_script( 'um_modal', $this->front_js_baseurl . 'um-modal' . $this->suffix . '.js', array( 'um_responsive' ), UM_VERSION, true ); + + wp_register_style( 'select2', $this->front_css_baseurl . 'select2/select2' . $this->suffix . '.css', array(), '4.0.13' ); + wp_register_style( 'um_datetime', $this->front_css_baseurl . 'pickadate/default.css', array(), UM_VERSION ); + wp_register_style( 'um_datetime_date', $this->front_css_baseurl . 'pickadate/default.date.css', array( 'um_datetime' ), UM_VERSION ); + wp_register_style( 'um_datetime_time', $this->front_css_baseurl . 'pickadate/default.time.css', array( 'um_datetime' ), ultimatemember_version ); + + wp_register_style( 'um_scrollbar', $this->front_css_baseurl . 'simplebar.css', array(), ultimatemember_version ); + wp_register_style( 'um_crop', $this->front_css_baseurl . 'um-crop.css', array(), ultimatemember_version ); + wp_register_style( 'um_tipsy', $this->front_css_baseurl . 'um-tipsy.css', array(), ultimatemember_version ); + wp_register_style( 'um_responsive', $this->front_css_baseurl . 'um-responsive.css', array(), ultimatemember_version ); + wp_register_style( 'um_modal', $this->front_css_baseurl . 'um-modal.css', array(), ultimatemember_version ); + wp_register_style( 'um_styles', $this->front_css_baseurl . 'um-styles.css', array(), ultimatemember_version ); + wp_register_style( 'um_members', $this->front_css_baseurl . 'um-members.css', array(), ultimatemember_version ); + wp_register_style( 'um_profile', $this->front_css_baseurl . 'um-profile.css', array(), ultimatemember_version ); + wp_register_style( 'um_account', $this->front_css_baseurl . 'um-account.css', array(), ultimatemember_version ); + wp_register_style( 'um_misc', $this->front_css_baseurl . 'um-misc.css', array(), ultimatemember_version ); + wp_register_style( 'um_default_css', $this->front_css_baseurl . 'um-old-default.css', array( 'um_crop', 'um_tipsy', 'um_raty', 'um_responsive', 'um_modal', 'um_styles', 'um_members', 'um_profile', 'um_account', 'um_misc', 'um_datetime_date', 'um_datetime_time', 'um_scrollbar', 'select2' ), ultimatemember_version ); + + wp_enqueue_script( 'um_modal' ); + wp_enqueue_style( 'um_default_css' ); + } + + + /** + * Load js for Add/Edit User form + */ + public function load_role_wrapper() { + wp_register_script( 'um_admin_role_wrapper', $this->js_url . 'um-admin-role-wrapper.js', array( 'jquery' ), ultimatemember_version, true ); + $localize_roles_data = get_option( 'um_roles', array() ); + wp_localize_script( 'um_admin_role_wrapper', 'um_roles', (array) $localize_roles_data ); + wp_enqueue_script( 'um_admin_role_wrapper' ); + } + + + /** + * Enter title placeholder + * + * @param $title + * + * @return string + */ + public function enter_title_here( $title ) { + $screen = get_current_screen(); + if ( 'um_directory' === $screen->post_type ) { + $title = __( 'e.g. Member Directory', 'ultimate-member' ); + } elseif ( 'um_form' === $screen->post_type ) { + $title = __( 'e.g. New Registration Form', 'ultimate-member' ); + } + return $title; + } + + + /** + * Runs on admin head + */ + public function admin_head() { + if ( UM()->admin()->is_plugin_post_type() ) { ?> + + css_url . 'um-admin-form.css', array(), ultimatemember_version ); + wp_enqueue_style( 'um_admin_form' ); + + wp_register_script( 'um_admin_form', $this->js_url . 'um-admin-form.js', array( 'jquery' ), ultimatemember_version, true ); + wp_enqueue_script( 'um_admin_form' ); + } + + + /** + * Load Forms + */ + public function load_forms() { + if ( class_exists( 'WooCommerce' ) ) { + wp_dequeue_style( 'select2' ); + wp_deregister_style( 'select2' ); + + wp_dequeue_script( 'select2' ); + wp_deregister_script( 'select2' ); + } + + wp_register_script( 'select2', $this->front_js_baseurl . 'select2/select2.full' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry' ), '4.0.13', true ); + wp_register_style( 'select2', $this->front_css_baseurl . 'select2/select2' . $this->suffix . '.css', array(), '4.0.13' ); + + wp_register_style( 'um_admin_forms', $this->css_url . 'um-admin-forms.css', array( 'wp-color-picker', 'um_ui', 'select2' ), UM_VERSION ); + wp_enqueue_style( 'um_admin_forms' ); + + wp_register_script( 'um_admin_forms', $this->js_url . 'um-admin-forms.js', array( 'jquery', 'wp-i18n', 'select2' ), UM_VERSION, true ); + + wp_localize_script( + 'um_admin_forms', + 'um_forms_data', + array( + 'successfully_redirect' => add_query_arg( + array( + 'page' => 'um_options', + 'tab' => 'misc', + 'msg' => 'updated', + ), + admin_url( 'admin.php' ) + ), + 'md_sorting_data_types' => UM()->member_directory()->sort_data_types, + ) + ); + + wp_enqueue_script( 'um_admin_forms' ); + } + + + /** + * Load dashboard + */ + public function load_dashboard() { + wp_register_style( 'um_admin_dashboard', $this->css_url . 'um-admin-dashboard.css', array(), ultimatemember_version ); + wp_enqueue_style( 'um_admin_dashboard' ); + } + + + /** + * Load settings + */ + public function load_settings() { + wp_register_style( 'um_admin_settings', $this->css_url . 'um-admin-settings.css', array(), ultimatemember_version ); + wp_enqueue_style( 'um_admin_settings' ); + + wp_register_script( 'um_admin_settings', $this->js_url . 'um-admin-settings.js', array( 'jquery', 'wp-i18n' ), ultimatemember_version, true ); + wp_enqueue_script( 'um_admin_settings' ); + } + + + /** + * Load modal + */ + public function load_modal() { + wp_register_style( 'um_admin_modal', $this->css_url . 'um-admin-modal.css', array( 'wp-color-picker' ), ultimatemember_version ); + wp_enqueue_style( 'um_admin_modal' ); + + wp_register_script( 'um_admin_modal', $this->js_url . 'um-admin-modal.js', array( 'jquery', 'editor', 'wp-util', 'wp-color-picker', 'wp-tinymce', 'wp-i18n', 'jquery-ui-tooltip', 'um_admin_scripts' ), ultimatemember_version, true ); + wp_enqueue_script( 'um_admin_modal' ); + } + + + /** + * Field Processing + */ + public function load_field() { + wp_register_script( 'um_admin_field', $this->js_url . 'um-admin-field.js', array( 'jquery', 'wp-util', 'wp-i18n' ), ultimatemember_version, true ); + wp_enqueue_script( 'um_admin_field' ); + } + + + /** + * Load Builder + */ + public function load_builder() { + wp_register_script( 'um_admin_builder', $this->js_url . 'um-admin-builder.js', array( 'jquery', 'wp-util' ), ultimatemember_version, true ); + wp_enqueue_script( 'um_admin_builder' ); + + //hide footer text on add/edit UM Forms + //layouts crashed because we load and hide metaboxes + //and WP calculate page height + $hide_footer = false; + global $pagenow, $post; + // phpcs:ignore WordPress.Security.NonceVerification + if ( ( 'post.php' === $pagenow || 'post-new.php' === $pagenow ) && ( ( isset( $_GET['post_type'] ) && 'um_form' === sanitize_key( $_GET['post_type'] ) ) || ( isset( $post->post_type ) && 'um_form' === $post->post_type ) ) ) { + $hide_footer = true; + } + + $localize_data = array( + 'hide_footer' => $hide_footer, + ); + wp_localize_script( 'um_admin_builder', 'um_admin_builder_data', $localize_data ); + + wp_register_script( 'um_admin_dragdrop', $this->js_url . 'um-admin-dragdrop.js', array( 'jquery', 'wp-util' ), ultimatemember_version, true ); + wp_enqueue_script( 'um_admin_dragdrop' ); + + wp_register_style( 'um_admin_builder', $this->css_url . 'um-admin-builder.css', array(), ultimatemember_version ); + wp_enqueue_style( 'um_admin_builder' ); + } + + + /** + * Load core WP styles/scripts + */ + public function load_core_wp() { + wp_enqueue_script( 'jquery-ui-draggable' ); + wp_enqueue_script( 'jquery-ui-sortable' ); + + wp_enqueue_script( 'jquery-ui-tooltip' ); + } + + + /** + * Load Admin Styles + */ + public function load_css() { + wp_register_style( 'um_admin_menu', $this->css_url . 'um-admin-menu.css', array(), ultimatemember_version ); + wp_enqueue_style( 'um_admin_menu' ); + + wp_register_style( 'um_admin_columns', $this->css_url . 'um-admin-columns.css', array(), ultimatemember_version ); + wp_enqueue_style( 'um_admin_columns' ); + + wp_register_style( 'um_admin_misc', $this->css_url . 'um-admin-misc.css', array(), ultimatemember_version ); + wp_enqueue_style( 'um_admin_misc' ); + } + + + /** + * Load functions js + */ + public function load_functions() { + wp_register_script( 'um_scrollbar', UM_URL . 'assets/js/simplebar.js', array( 'jquery' ), ultimatemember_version, true ); + wp_register_script( 'um_functions', UM_URL . 'assets/js/um-functions.js', array( 'jquery', 'jquery-masonry', 'wp-util', 'um_scrollbar' ), ultimatemember_version, true ); + wp_enqueue_script( 'um_functions' ); + } + + + /** + * Load Fonticons + */ + public function load_fonticons() { + wp_register_style( 'um_fonticons_ii', UM_URL . 'assets/css/um-fonticons-ii.css', array(), ultimatemember_version ); + wp_enqueue_style( 'um_fonticons_ii' ); + + wp_register_style( 'um_fonticons_fa', UM_URL . 'assets/css/um-fonticons-fa.css', array(), ultimatemember_version ); + wp_enqueue_style( 'um_fonticons_fa' ); + } + + + /** + * Load global css + */ + public function load_global_scripts() { + wp_register_script( 'um_admin_global', $this->js_url . 'um-admin-global.js', array( 'jquery' ), ultimatemember_version, true ); + wp_enqueue_script( 'um_admin_global' ); + + wp_register_style( 'um_admin_global', $this->css_url . 'um-admin-global.css', array(), ultimatemember_version ); + wp_enqueue_style( 'um_admin_global' ); + } + + + /** + * Load jQuery custom code + */ + public function load_custom_scripts() { + wp_register_script( 'um_datetime', $this->front_js_baseurl . 'pickadate/picker.js', array( 'jquery' ), ultimatemember_version, true ); + wp_register_script( 'um_datetime_date', $this->front_js_baseurl . 'pickadate/picker.date.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); + wp_register_script( 'um_datetime_time', $this->front_js_baseurl . 'pickadate/picker.time.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); + //wp_register_script( 'um_datetime_legacy', $this->front_js_baseurl . 'pickadate/legacy.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); + // load a localized version for date/time + $locale = get_locale(); + if ( $locale ) { + if ( file_exists( WP_LANG_DIR . '/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js' ) ) { + wp_register_script( 'um_datetime_locale', content_url() . '/languages/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); + } elseif ( file_exists( UM_PATH . 'assets/js/pickadate/translations/' . $locale . '.js' ) ) { + wp_register_script( 'um_datetime_locale', UM_URL . 'assets/js/pickadate/translations/' . $locale . '.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); + } + } + + wp_register_style( 'um_datetime', $this->front_css_baseurl . 'pickadate/default.css', array(), ultimatemember_version ); + wp_register_style( 'um_datetime_date', $this->front_css_baseurl . 'pickadate/default.date.css', array( 'um_datetime' ), ultimatemember_version ); + wp_register_style( 'um_datetime_time', $this->front_css_baseurl . 'pickadate/default.time.css', array( 'um_datetime' ), ultimatemember_version ); + + wp_enqueue_style( 'um_datetime_date' ); + wp_enqueue_style( 'um_datetime_time' ); + + wp_register_script( 'um_admin_scripts', $this->js_url . 'um-admin-scripts.js', array( 'jquery', 'wp-util', 'wp-color-picker', 'um_datetime', 'um_datetime_date', 'um_datetime_time'/*, 'um_datetime_legacy'*/ ), ultimatemember_version, true ); + wp_enqueue_script( 'um_admin_scripts' ); + } + + + /** + * Load jQuery custom code + */ + public function load_nav_manus_scripts() { + wp_register_script( 'um_admin_nav_manus', $this->js_url . 'um-admin-nav-menu.js', array( 'jquery', 'wp-util' ), ultimatemember_version, true ); + wp_enqueue_script( 'um_admin_nav_manus' ); + } + + + /** + * Load AJAX + */ + public function load_ajax_js() { + wp_register_script( 'um_admin_ajax', $this->js_url . 'um-admin-ajax.js', array( 'jquery', 'wp-util' ), ultimatemember_version, true ); + wp_enqueue_script( 'um_admin_ajax' ); + } + + + /** + * Load Gutenberg scripts + */ + public function load_gutenberg_js() { + /** This filter is documented in includes/core/class-blocks.php */ + $disable_script = apply_filters( 'um_disable_blocks_script', false ); + if ( $disable_script ) { + return; + } + + $restricted_blocks = UM()->options()->get( 'restricted_blocks' ); + if ( empty( $restricted_blocks ) ) { + return; + } + + wp_register_script( 'um_block_js', $this->js_url . 'um-admin-blocks.js', array( 'wp-i18n', 'wp-blocks', 'wp-components', 'wp-hooks' ), ultimatemember_version, true ); + wp_set_script_translations( 'um_block_js', 'ultimate-member' ); + + $restrict_options = array(); + $roles = UM()->roles()->get_roles( false ); + if ( ! empty( $roles ) ) { + foreach ( $roles as $role_key => $title ) { + $restrict_options[] = array( + 'label' => $title, + 'value' => $role_key, + ); + } + } + wp_localize_script( 'um_block_js', 'um_restrict_roles', $restrict_options ); + + wp_enqueue_script( 'um_block_js' ); + + do_action( 'um_load_gutenberg_js' ); + } + + + /** + * Add Gutenberg category for UM shortcodes + * + * @param array $categories + * @param \WP_Block_Editor_Context $context + * + * @return array + */ + public function blocks_category( $categories, $context ) { + $enable_blocks = UM()->options()->get( 'enable_blocks' ); + if ( empty( $enable_blocks ) ) { + return $categories; + } + + return array_merge( + $categories, + array( + array( + 'slug' => 'um-blocks', + 'title' => __( 'Ultimate Member Blocks', 'ultimate-member' ), + ), + ) + ); + } + + /** + * Load localize scripts + */ + public function load_localize_scripts() { + + /** + * UM hook + * + * @type filter + * @title um_admin_enqueue_localize_data + * @description Extend localize data at wp-admin side + * @input_vars + * [{"var":"$localize_data","type":"array","desc":"Localize Data"}] + * @change_log + * ["Since: 2.0"] + * @usage add_filter( 'um_admin_enqueue_localize_data', 'function_name', 10, 1 ); + * @example + * + */ + $localize_data = apply_filters( 'um_admin_enqueue_localize_data', array( 'nonce' => wp_create_nonce( 'um-admin-nonce' ) ) ); + + wp_localize_script( 'um_admin_global', 'um_admin_scripts', $localize_data ); + } + + + /** + * Enqueue scripts and styles + */ + public function admin_enqueue_scripts() { + if ( UM()->admin()->is_um_screen() ) { + + /*if ( get_post_type() != 'shop_order' ) { + UM()->enqueue()->wp_enqueue_scripts(); + }*/ + + $modal_deps = array( 'um-admin-scripts' ); + if ( $this->um_cpt_form_screen ) { + $this->enqueue_frontend_preview_assets(); + $modal_deps[] = 'um-responsive'; + } + + $this->load_functions(); + $this->load_global_scripts(); + $this->load_form(); + $this->load_forms(); + $this->load_custom_scripts(); + $this->load_modal(); + $this->load_dashboard(); + $this->load_settings(); + $this->load_field(); + $this->load_builder(); + $this->load_css(); + $this->load_core_wp(); + $this->load_ajax_js(); + $this->load_fonticons(); + $this->load_localize_scripts(); + + //scripts for frontend preview + UM()->enqueue()->load_imagecrop(); + UM()->enqueue()->load_css(); + UM()->enqueue()->load_tipsy(); + UM()->enqueue()->load_modal(); + UM()->enqueue()->load_responsive(); + + wp_register_script( 'um_raty', UM_URL . 'assets/js/um-raty' . UM()->enqueue()->suffix . '.js', array( 'jquery', 'wp-i18n' ), ultimatemember_version, true ); + wp_register_style( 'um_raty', UM_URL . 'assets/css/um-raty.css', array(), ultimatemember_version ); + + wp_register_style( 'um_default_css', UM_URL . 'assets/css/um-old-default.css', '', ultimatemember_version, 'all' ); + wp_enqueue_style( 'um_default_css' ); + + if ( is_rtl() ) { + wp_register_style( 'um_admin_rtl', $this->css_url . 'um-admin-rtl.css', array(), ultimatemember_version ); + wp_enqueue_style( 'um_admin_rtl' ); + } + } else { + + $this->load_global_scripts(); + $this->load_localize_scripts(); + + } + + global $wp_version, $current_screen; + + if ( version_compare( $wp_version, '5.0', '>=' ) ) { + if ( isset( $current_screen ) && $current_screen->is_block_editor() ) { + $this->load_gutenberg_js(); + } + } + } + + + /** + * Print editor scripts if they are not printed by default + */ + public function admin_footer_scripts() { + /** + * @var $class \_WP_Editors + */ + $class = '\_WP_Editors'; + + if ( did_action( 'print_default_editor_scripts' ) ) { + return; + } + if ( did_action( 'wp_tiny_mce_init' ) ) { + return; + } + if ( has_action( 'admin_print_footer_scripts', array( $class, 'editor_js' ) ) ) { + return; + } + + if ( ! class_exists( $class, false ) ) { + require_once( ABSPATH . WPINC . '/class-wp-editor.php' ); + } + + $class::force_uncompressed_tinymce(); + $class::enqueue_scripts(); + $class::editor_js(); + } + +} diff --git a/includes/admin/class-secure.php b/includes/admin/class-secure.php index 5c35cb43..bb792fc4 100644 --- a/includes/admin/class-secure.php +++ b/includes/admin/class-secure.php @@ -61,7 +61,7 @@ if ( ! class_exists( 'um\admin\Secure' ) ) { } // phpcs:enable WordPress.Security.NonceVerification - wp_register_script( 'um_admin_secure', UM()->admin_enqueue()->js_url . 'um-admin-secure.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_admin_secure', UM()->admin()->enqueue()->js_url . 'um-admin-secure.js', array( 'jquery' ), UM_VERSION, true ); wp_enqueue_script( 'um_admin_secure' ); } diff --git a/includes/admin/core/class-admin-enqueue.php b/includes/admin/core/class-admin-enqueue.php deleted file mode 100644 index debc4cbe..00000000 --- a/includes/admin/core/class-admin-enqueue.php +++ /dev/null @@ -1,753 +0,0 @@ -js_url = UM_URL . 'includes/admin/assets/js/'; - $this->css_url = UM_URL . 'includes/admin/assets/css/'; - - $this->front_js_baseurl = UM_URL . 'assets/js/'; - $this->front_css_baseurl = UM_URL . 'assets/css/'; - - $this->suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG || defined( 'UM_SCRIPT_DEBUG' ) ) ? '' : '.min'; - - $this->um_cpt_form_screen = false; - - add_action( 'admin_head', array( &$this, 'admin_head' ), 9 ); - - add_action( 'admin_enqueue_scripts', array( &$this, 'admin_enqueue_scripts' ) ); - - add_filter( 'enter_title_here', array( &$this, 'enter_title_here' ) ); - - add_action( 'load-user-new.php', array( &$this, 'enqueue_role_wrapper' ) ); - add_action( 'load-user-edit.php', array( &$this, 'enqueue_role_wrapper' ) ); - - add_action( 'load-post-new.php', array( &$this, 'enqueue_cpt_scripts' ) ); - add_action( 'load-post.php', array( &$this, 'enqueue_cpt_scripts' ) ); - - global $wp_version; - if ( version_compare( $wp_version, '5.8', '>=' ) ) { - add_filter( 'block_categories_all', array( &$this, 'blocks_category' ), 10, 2 ); - } else { - add_filter( 'block_categories', array( &$this, 'blocks_category' ), 10, 2 ); - } - add_action( 'enqueue_block_assets', array( &$this, 'block_editor' ), 11 ); - } - - - /** - * Enqueue Gutenberg Block Editor assets - */ - public function block_editor() { - wp_register_style( 'um_ui', UM_URL . 'assets/libs/jquery-ui/jquery-ui' . $this->suffix . '.css', array(), '1.12.1' ); - wp_register_style( 'um_members', UM_URL . 'assets/css/um-members.css', array( 'um_ui' ), UM_VERSION ); - if ( is_rtl() ) { - wp_register_style( 'um_members_rtl', UM_URL . 'assets/css/um-members-rtl.css', array( 'um_members' ), UM_VERSION ); - } - wp_register_style( 'um_styles', UM_URL . 'assets/css/um-styles.css', array(), UM_VERSION ); - wp_register_style( 'um_profile', UM_URL . 'assets/css/um-profile.css', array(), UM_VERSION ); - wp_register_style( 'um_crop', UM_URL . 'assets/css/um-crop.css', array(), UM_VERSION ); - wp_register_style( 'um_responsive', UM_URL . 'assets/css/um-responsive.css', array( 'um_profile', 'um_crop' ), UM_VERSION ); - wp_register_style( 'um_account', UM_URL . 'assets/css/um-account.css', array(), UM_VERSION ); - wp_register_style( 'um_default_css', UM_URL . 'assets/css/um-old-default.css', array(), UM_VERSION ); - wp_register_style( 'um_fonticons_fa', UM_URL . 'assets/css/um-fonticons-fa.css', array(), UM_VERSION ); - wp_register_style( 'select2', UM_URL . 'assets/css/select2/select2' . $this->suffix . '.css', array(), UM_VERSION ); - wp_register_style( 'um_fonticons_ii', UM_URL . 'assets/css/um-fonticons-ii.css', array(), UM_VERSION ); - - wp_register_script( 'um_admin_blocks_shortcodes', UM_URL . 'assets/js/um-blocks' . $this->suffix . '.js', array( 'wp-i18n', 'wp-blocks', 'wp-components' ), UM_VERSION, true ); - wp_set_script_translations( 'um_admin_blocks_shortcodes', 'ultimate-member' ); - - if ( ! empty( UM()->account()->get_tab_fields( 'notifications', array() ) ) ) { - $notifications_enabled = 1; - } else { - $notifications_enabled = 0; - } - - $um_account_settings = array( - 'general' => array( - 'label' => __( 'General', 'ultimate-member' ), - 'enabled' => 1, - ), - 'password' => array( - 'label' => __( 'Password', 'ultimate-member' ), - 'enabled' => UM()->options()->get( 'account_tab_password' ), - ), - 'privacy' => array( - 'label' => __( 'Privacy', 'ultimate-member' ), - 'enabled' => UM()->options()->get( 'account_tab_privacy' ), - ), - 'notifications' => array( - 'label' => __( 'Notifications', 'ultimate-member' ), - 'enabled' => $notifications_enabled, - ), - 'delete' => array( - 'label' => __( 'Delete', 'ultimate-member' ), - 'enabled' => UM()->options()->get( 'account_tab_delete' ), - ), - ); - $um_account_settings = apply_filters( 'um_extend_account_settings', $um_account_settings ); - wp_localize_script( 'um_admin_blocks_shortcodes', 'um_account_settings', $um_account_settings ); - - wp_enqueue_script( 'um_admin_blocks_shortcodes' ); - - wp_register_script( 'select2', UM_URL . 'assets/js/select2/select2.full' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry' ), UM_VERSION, true ); - wp_register_script( 'um_datetime', UM_URL . 'assets/js/pickadate/picker.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_datetime_date', UM_URL . 'assets/js/pickadate/picker.date.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); - wp_register_script( 'um_datetime_time', UM_URL . 'assets/js/pickadate/picker.time.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); - wp_register_script( 'um_conditional', UM_URL . 'assets/js/um-conditional' . $this->suffix . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); - wp_register_script( 'um_scripts', UM_URL . 'assets/js/um-scripts' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', 'select2' ), UM_VERSION, true ); - $max_upload_size = wp_max_upload_size(); - if ( ! $max_upload_size ) { - $max_upload_size = 0; - } - - $localize_data = apply_filters( - 'um_enqueue_localize_data', - array( - 'max_upload_size' => $max_upload_size, - 'nonce' => wp_create_nonce( 'um-frontend-nonce' ), - ) - ); - wp_localize_script( 'um_scripts', 'um_scripts', $localize_data ); - - wp_register_script( 'um_dropdown', UM_URL . 'assets/js/dropdown' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_members', UM_URL . 'assets/js/um-members' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'jquery-ui-slider', 'um_dropdown', 'wp-hooks', 'jquery-masonry', 'um_scripts' ), UM_VERSION, true ); - - wp_register_script( 'um_account', UM_URL . 'assets/js/um-account' . $this->suffix . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); - wp_register_script( 'um_scrollbar', UM_URL . 'assets/js/simplebar' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_crop', UM_URL . 'assets/js/um-crop' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_functions', UM_URL . 'assets/js/um-functions' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry', 'wp-util', 'um_scrollbar' ), UM_VERSION, true ); - wp_register_script( 'um_responsive', UM_URL . 'assets/js/um-responsive' . $this->suffix . '.js', array( 'jquery', 'um_functions', 'um_crop' ), UM_VERSION, true ); - - // render blocks - wp_enqueue_script( 'um_datetime' ); - wp_enqueue_script( 'um_datetime_date' ); - wp_enqueue_script( 'um_datetime_time' ); - wp_enqueue_script( 'um_conditional' ); - wp_enqueue_script( 'um_dropdown' ); - wp_enqueue_script( 'um_members' ); - wp_enqueue_script( 'um_account' ); - wp_enqueue_script( 'um_scrollbar' ); - wp_enqueue_script( 'um_crop' ); - wp_enqueue_script( 'um_functions' ); - wp_enqueue_script( 'um_responsive' ); - - wp_enqueue_style( 'um_fonticons_ii' ); - wp_enqueue_style( 'select2' ); - wp_enqueue_style( 'um_default_css' ); - wp_enqueue_style( 'um_fonticons_fa' ); - wp_enqueue_style( 'um_members' ); - wp_enqueue_style( 'um_styles' ); - wp_enqueue_style( 'um_profile' ); - wp_enqueue_style( 'um_crop' ); - wp_enqueue_style( 'um_responsive' ); - wp_enqueue_style( 'um_account' ); - - $custom_css = '.um{opacity: 1;}.um_request_name {display: none !important;}'; - - wp_add_inline_style( 'um_styles', $custom_css ); - } - - - public function enqueue_role_wrapper() { - add_action( 'admin_enqueue_scripts', array( &$this, 'load_role_wrapper' ) ); - } - - - /** - * - */ - public function enqueue_cpt_scripts() { - // phpcs:ignore WordPress.Security.NonceVerification - if ( ( isset( $_GET['post_type'] ) && 'um_form' === sanitize_key( $_GET['post_type'] ) ) || ( isset( $_GET['post'] ) && 'um_form' === get_post_type( absint( $_GET['post'] ) ) ) ) { - $this->um_cpt_form_screen = true; - add_action( 'admin_footer', array( $this, 'admin_footer_scripts' ), 20 ); - } - } - - - /** - * - */ - public function enqueue_frontend_preview_assets() { - //scripts for FRONTEND PREVIEW - if ( class_exists( 'WooCommerce' ) ) { - wp_dequeue_style( 'select2' ); - wp_deregister_style( 'select2' ); - - wp_dequeue_script( 'select2' ); - wp_deregister_script( 'select2' ); - } - - wp_register_script( 'select2', $this->front_js_baseurl . 'select2/select2.full' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry' ), '4.0.13', true ); - wp_register_script( 'um_jquery_form', $this->front_js_baseurl . 'um-jquery-form' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_fileupload', $this->front_js_baseurl . 'um-fileupload.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_crop', $this->front_js_baseurl . 'um-crop' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_tipsy', $this->front_js_baseurl . 'um-tipsy' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_functions', $this->front_js_baseurl . 'um-functions' . $this->suffix . '.js', array( 'jquery', 'um_tipsy', 'um_scrollbar' ), UM_VERSION, true ); - - wp_register_script( 'um_datetime', $this->front_js_baseurl . 'pickadate/picker.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_datetime_date', $this->front_js_baseurl . 'pickadate/picker.date.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); - wp_register_script( 'um_datetime_time', $this->front_js_baseurl . 'pickadate/picker.time.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); - //wp_register_script( 'um_datetime_legacy', $this->front_js_baseurl . 'pickadate/legacy.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); - // load a localized version for date/time - $locale = get_locale(); - if ( $locale ) { - if ( file_exists( WP_LANG_DIR . '/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js' ) ) { - wp_register_script( 'um_datetime_locale', content_url() . '/languages/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); - } elseif ( file_exists( UM_PATH . 'assets/js/pickadate/translations/' . $locale . '.js' ) ) { - wp_register_script( 'um_datetime_locale', UM_URL . 'assets/js/pickadate/translations/' . $locale . '.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); - } - } - - wp_register_script( 'um_scripts', $this->front_js_baseurl . 'um-scripts' . $this->suffix . '.js', array( 'um_functions', 'um_crop', 'um_raty', 'select2', 'um_jquery_form', 'um_fileupload', 'um_datetime', 'um_datetime_date', 'um_datetime_time'/*, 'um_datetime_legacy'*/ ), UM_VERSION, true ); - wp_register_script( 'um_responsive', $this->front_js_baseurl . 'um-responsive' . $this->suffix . '.js', array( 'um_scripts' ), UM_VERSION, true ); - wp_register_script( 'um_modal', $this->front_js_baseurl . 'um-modal' . $this->suffix . '.js', array( 'um_responsive' ), UM_VERSION, true ); - - wp_register_style( 'select2', $this->front_css_baseurl . 'select2/select2' . $this->suffix . '.css', array(), '4.0.13' ); - wp_register_style( 'um_datetime', $this->front_css_baseurl . 'pickadate/default.css', array(), UM_VERSION ); - wp_register_style( 'um_datetime_date', $this->front_css_baseurl . 'pickadate/default.date.css', array( 'um_datetime' ), UM_VERSION ); - wp_register_style( 'um_datetime_time', $this->front_css_baseurl . 'pickadate/default.time.css', array( 'um_datetime' ), ultimatemember_version ); - - wp_register_style( 'um_scrollbar', $this->front_css_baseurl . 'simplebar.css', array(), ultimatemember_version ); - wp_register_style( 'um_crop', $this->front_css_baseurl . 'um-crop.css', array(), ultimatemember_version ); - wp_register_style( 'um_tipsy', $this->front_css_baseurl . 'um-tipsy.css', array(), ultimatemember_version ); - wp_register_style( 'um_responsive', $this->front_css_baseurl . 'um-responsive.css', array(), ultimatemember_version ); - wp_register_style( 'um_modal', $this->front_css_baseurl . 'um-modal.css', array(), ultimatemember_version ); - wp_register_style( 'um_styles', $this->front_css_baseurl . 'um-styles.css', array(), ultimatemember_version ); - wp_register_style( 'um_members', $this->front_css_baseurl . 'um-members.css', array(), ultimatemember_version ); - wp_register_style( 'um_profile', $this->front_css_baseurl . 'um-profile.css', array(), ultimatemember_version ); - wp_register_style( 'um_account', $this->front_css_baseurl . 'um-account.css', array(), ultimatemember_version ); - wp_register_style( 'um_misc', $this->front_css_baseurl . 'um-misc.css', array(), ultimatemember_version ); - wp_register_style( 'um_default_css', $this->front_css_baseurl . 'um-old-default.css', array( 'um_crop', 'um_tipsy', 'um_raty', 'um_responsive', 'um_modal', 'um_styles', 'um_members', 'um_profile', 'um_account', 'um_misc', 'um_datetime_date', 'um_datetime_time', 'um_scrollbar', 'select2' ), ultimatemember_version ); - - wp_enqueue_script( 'um_modal' ); - wp_enqueue_style( 'um_default_css' ); - } - - - /** - * Load js for Add/Edit User form - */ - public function load_role_wrapper() { - wp_register_script( 'um_admin_role_wrapper', $this->js_url . 'um-admin-role-wrapper.js', array( 'jquery' ), ultimatemember_version, true ); - $localize_roles_data = get_option( 'um_roles', array() ); - wp_localize_script( 'um_admin_role_wrapper', 'um_roles', (array) $localize_roles_data ); - wp_enqueue_script( 'um_admin_role_wrapper' ); - } - - - /** - * Enter title placeholder - * - * @param $title - * - * @return string - */ - public function enter_title_here( $title ) { - $screen = get_current_screen(); - if ( 'um_directory' === $screen->post_type ) { - $title = __( 'e.g. Member Directory', 'ultimate-member' ); - } elseif ( 'um_form' === $screen->post_type ) { - $title = __( 'e.g. New Registration Form', 'ultimate-member' ); - } - return $title; - } - - - /** - * Runs on admin head - */ - public function admin_head() { - if ( UM()->admin()->is_plugin_post_type() ) { ?> - - css_url . 'um-admin-form.css', array(), ultimatemember_version ); - wp_enqueue_style( 'um_admin_form' ); - - wp_register_script( 'um_admin_form', $this->js_url . 'um-admin-form.js', array( 'jquery' ), ultimatemember_version, true ); - wp_enqueue_script( 'um_admin_form' ); - } - - - /** - * Load Forms - */ - public function load_forms() { - if ( class_exists( 'WooCommerce' ) ) { - wp_dequeue_style( 'select2' ); - wp_deregister_style( 'select2' ); - - wp_dequeue_script( 'select2' ); - wp_deregister_script( 'select2' ); - } - - wp_register_script( 'select2', $this->front_js_baseurl . 'select2/select2.full' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry' ), '4.0.13', true ); - wp_register_style( 'select2', $this->front_css_baseurl . 'select2/select2' . $this->suffix . '.css', array(), '4.0.13' ); - - wp_register_style( 'um_ui', UM_URL . 'assets/libs/jquery-ui/jquery-ui' . $this->suffix . '.css', array(), '1.12.1' ); - wp_register_style( 'um_admin_forms', $this->css_url . 'um-admin-forms.css', array( 'wp-color-picker', 'um_ui', 'select2' ), UM_VERSION ); - wp_enqueue_style( 'um_admin_forms' ); - - wp_register_script( 'um_admin_forms', $this->js_url . 'um-admin-forms.js', array( 'jquery', 'wp-i18n', 'select2' ), UM_VERSION, true ); - - wp_localize_script( - 'um_admin_forms', - 'um_forms_data', - array( - 'successfully_redirect' => add_query_arg( - array( - 'page' => 'um_options', - 'tab' => 'misc', - 'msg' => 'updated', - ), - admin_url( 'admin.php' ) - ), - 'md_sorting_data_types' => UM()->member_directory()->sort_data_types, - ) - ); - - wp_enqueue_script( 'um_admin_forms' ); - } - - - /** - * Load dashboard - */ - public function load_dashboard() { - wp_register_style( 'um_admin_dashboard', $this->css_url . 'um-admin-dashboard.css', array(), ultimatemember_version ); - wp_enqueue_style( 'um_admin_dashboard' ); - } - - - /** - * Load settings - */ - public function load_settings() { - wp_register_style( 'um_admin_settings', $this->css_url . 'um-admin-settings.css', array(), ultimatemember_version ); - wp_enqueue_style( 'um_admin_settings' ); - - wp_register_script( 'um_admin_settings', $this->js_url . 'um-admin-settings.js', array( 'jquery', 'wp-i18n' ), ultimatemember_version, true ); - wp_enqueue_script( 'um_admin_settings' ); - } - - - /** - * Load modal - */ - public function load_modal() { - wp_register_style( 'um_admin_modal', $this->css_url . 'um-admin-modal.css', array( 'wp-color-picker' ), ultimatemember_version ); - wp_enqueue_style( 'um_admin_modal' ); - - wp_register_script( 'um_admin_modal', $this->js_url . 'um-admin-modal.js', array( 'jquery', 'editor', 'wp-util', 'wp-color-picker', 'wp-tinymce', 'wp-i18n', 'jquery-ui-tooltip', 'um_admin_scripts' ), ultimatemember_version, true ); - wp_enqueue_script( 'um_admin_modal' ); - } - - - /** - * Field Processing - */ - public function load_field() { - wp_register_script( 'um_admin_field', $this->js_url . 'um-admin-field.js', array( 'jquery', 'wp-util', 'wp-i18n' ), ultimatemember_version, true ); - wp_enqueue_script( 'um_admin_field' ); - } - - - /** - * Load Builder - */ - public function load_builder() { - wp_register_script( 'um_admin_builder', $this->js_url . 'um-admin-builder.js', array( 'jquery', 'wp-util' ), ultimatemember_version, true ); - wp_enqueue_script( 'um_admin_builder' ); - - //hide footer text on add/edit UM Forms - //layouts crashed because we load and hide metaboxes - //and WP calculate page height - $hide_footer = false; - global $pagenow, $post; - // phpcs:ignore WordPress.Security.NonceVerification - if ( ( 'post.php' === $pagenow || 'post-new.php' === $pagenow ) && ( ( isset( $_GET['post_type'] ) && 'um_form' === sanitize_key( $_GET['post_type'] ) ) || ( isset( $post->post_type ) && 'um_form' === $post->post_type ) ) ) { - $hide_footer = true; - } - - $localize_data = array( - 'hide_footer' => $hide_footer, - ); - wp_localize_script( 'um_admin_builder', 'um_admin_builder_data', $localize_data ); - - wp_register_script( 'um_admin_dragdrop', $this->js_url . 'um-admin-dragdrop.js', array( 'jquery', 'wp-util' ), ultimatemember_version, true ); - wp_enqueue_script( 'um_admin_dragdrop' ); - - wp_register_style( 'um_admin_builder', $this->css_url . 'um-admin-builder.css', array(), ultimatemember_version ); - wp_enqueue_style( 'um_admin_builder' ); - } - - - /** - * Load core WP styles/scripts - */ - public function load_core_wp() { - wp_enqueue_script( 'jquery-ui-draggable' ); - wp_enqueue_script( 'jquery-ui-sortable' ); - - wp_enqueue_script( 'jquery-ui-tooltip' ); - } - - - /** - * Load Admin Styles - */ - public function load_css() { - wp_register_style( 'um_admin_menu', $this->css_url . 'um-admin-menu.css', array(), ultimatemember_version ); - wp_enqueue_style( 'um_admin_menu' ); - - wp_register_style( 'um_admin_columns', $this->css_url . 'um-admin-columns.css', array(), ultimatemember_version ); - wp_enqueue_style( 'um_admin_columns' ); - - wp_register_style( 'um_admin_misc', $this->css_url . 'um-admin-misc.css', array(), ultimatemember_version ); - wp_enqueue_style( 'um_admin_misc' ); - } - - - /** - * Load functions js - */ - public function load_functions() { - wp_register_script( 'um_scrollbar', UM_URL . 'assets/js/simplebar.js', array( 'jquery' ), ultimatemember_version, true ); - wp_register_script( 'um_functions', UM_URL . 'assets/js/um-functions.js', array( 'jquery', 'jquery-masonry', 'wp-util', 'um_scrollbar' ), ultimatemember_version, true ); - wp_enqueue_script( 'um_functions' ); - } - - - /** - * Load Fonticons - */ - public function load_fonticons() { - wp_register_style( 'um_fonticons_ii', UM_URL . 'assets/css/um-fonticons-ii.css', array(), ultimatemember_version ); - wp_enqueue_style( 'um_fonticons_ii' ); - - wp_register_style( 'um_fonticons_fa', UM_URL . 'assets/css/um-fonticons-fa.css', array(), ultimatemember_version ); - wp_enqueue_style( 'um_fonticons_fa' ); - } - - - /** - * Load global css - */ - public function load_global_scripts() { - wp_register_script( 'um_admin_global', $this->js_url . 'um-admin-global.js', array( 'jquery' ), ultimatemember_version, true ); - wp_enqueue_script( 'um_admin_global' ); - - wp_register_style( 'um_admin_global', $this->css_url . 'um-admin-global.css', array(), ultimatemember_version ); - wp_enqueue_style( 'um_admin_global' ); - } - - - /** - * Load jQuery custom code - */ - public function load_custom_scripts() { - wp_register_script( 'um_datetime', $this->front_js_baseurl . 'pickadate/picker.js', array( 'jquery' ), ultimatemember_version, true ); - wp_register_script( 'um_datetime_date', $this->front_js_baseurl . 'pickadate/picker.date.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); - wp_register_script( 'um_datetime_time', $this->front_js_baseurl . 'pickadate/picker.time.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); - //wp_register_script( 'um_datetime_legacy', $this->front_js_baseurl . 'pickadate/legacy.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); - // load a localized version for date/time - $locale = get_locale(); - if ( $locale ) { - if ( file_exists( WP_LANG_DIR . '/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js' ) ) { - wp_register_script( 'um_datetime_locale', content_url() . '/languages/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); - } elseif ( file_exists( UM_PATH . 'assets/js/pickadate/translations/' . $locale . '.js' ) ) { - wp_register_script( 'um_datetime_locale', UM_URL . 'assets/js/pickadate/translations/' . $locale . '.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); - } - } - - wp_register_style( 'um_datetime', $this->front_css_baseurl . 'pickadate/default.css', array(), ultimatemember_version ); - wp_register_style( 'um_datetime_date', $this->front_css_baseurl . 'pickadate/default.date.css', array( 'um_datetime' ), ultimatemember_version ); - wp_register_style( 'um_datetime_time', $this->front_css_baseurl . 'pickadate/default.time.css', array( 'um_datetime' ), ultimatemember_version ); - - wp_enqueue_style( 'um_datetime_date' ); - wp_enqueue_style( 'um_datetime_time' ); - - wp_register_script( 'um_admin_scripts', $this->js_url . 'um-admin-scripts.js', array( 'jquery', 'wp-util', 'wp-color-picker', 'um_datetime', 'um_datetime_date', 'um_datetime_time'/*, 'um_datetime_legacy'*/ ), ultimatemember_version, true ); - wp_enqueue_script( 'um_admin_scripts' ); - } - - - /** - * Load jQuery custom code - */ - public function load_nav_manus_scripts() { - wp_register_script( 'um_admin_nav_manus', $this->js_url . 'um-admin-nav-menu.js', array( 'jquery', 'wp-util' ), ultimatemember_version, true ); - wp_enqueue_script( 'um_admin_nav_manus' ); - } - - - /** - * Load AJAX - */ - public function load_ajax_js() { - wp_register_script( 'um_admin_ajax', $this->js_url . 'um-admin-ajax.js', array( 'jquery', 'wp-util' ), ultimatemember_version, true ); - wp_enqueue_script( 'um_admin_ajax' ); - } - - - /** - * Load Gutenberg scripts - */ - public function load_gutenberg_js() { - /** This filter is documented in includes/core/class-blocks.php */ - $disable_script = apply_filters( 'um_disable_blocks_script', false ); - if ( $disable_script ) { - return; - } - - $restricted_blocks = UM()->options()->get( 'restricted_blocks' ); - if ( empty( $restricted_blocks ) ) { - return; - } - - wp_register_script( 'um_block_js', $this->js_url . 'um-admin-blocks.js', array( 'wp-i18n', 'wp-blocks', 'wp-components', 'wp-hooks' ), ultimatemember_version, true ); - wp_set_script_translations( 'um_block_js', 'ultimate-member' ); - - $restrict_options = array(); - $roles = UM()->roles()->get_roles( false ); - if ( ! empty( $roles ) ) { - foreach ( $roles as $role_key => $title ) { - $restrict_options[] = array( - 'label' => $title, - 'value' => $role_key, - ); - } - } - wp_localize_script( 'um_block_js', 'um_restrict_roles', $restrict_options ); - - wp_enqueue_script( 'um_block_js' ); - - do_action( 'um_load_gutenberg_js' ); - } - - - /** - * Add Gutenberg category for UM shortcodes - * - * @param array $categories - * @param \WP_Block_Editor_Context $context - * - * @return array - */ - public function blocks_category( $categories, $context ) { - $enable_blocks = UM()->options()->get( 'enable_blocks' ); - if ( empty( $enable_blocks ) ) { - return $categories; - } - - return array_merge( - $categories, - array( - array( - 'slug' => 'um-blocks', - 'title' => __( 'Ultimate Member Blocks', 'ultimate-member' ), - ), - ) - ); - } - - /** - * Load localize scripts - */ - public function load_localize_scripts() { - - /** - * UM hook - * - * @type filter - * @title um_admin_enqueue_localize_data - * @description Extend localize data at wp-admin side - * @input_vars - * [{"var":"$localize_data","type":"array","desc":"Localize Data"}] - * @change_log - * ["Since: 2.0"] - * @usage add_filter( 'um_admin_enqueue_localize_data', 'function_name', 10, 1 ); - * @example - * - */ - $localize_data = apply_filters( 'um_admin_enqueue_localize_data', array( 'nonce' => wp_create_nonce( 'um-admin-nonce' ) ) ); - - wp_localize_script( 'um_admin_global', 'um_admin_scripts', $localize_data ); - } - - - /** - * Enqueue scripts and styles - */ - public function admin_enqueue_scripts() { - if ( UM()->admin()->is_um_screen() ) { - - /*if ( get_post_type() != 'shop_order' ) { - UM()->enqueue()->wp_enqueue_scripts(); - }*/ - - $modal_deps = array( 'um-admin-scripts' ); - if ( $this->um_cpt_form_screen ) { - $this->enqueue_frontend_preview_assets(); - $modal_deps[] = 'um-responsive'; - } - - $this->load_functions(); - $this->load_global_scripts(); - $this->load_form(); - $this->load_forms(); - $this->load_custom_scripts(); - $this->load_modal(); - $this->load_dashboard(); - $this->load_settings(); - $this->load_field(); - $this->load_builder(); - $this->load_css(); - $this->load_core_wp(); - $this->load_ajax_js(); - $this->load_fonticons(); - $this->load_localize_scripts(); - - //scripts for frontend preview - UM()->enqueue()->load_imagecrop(); - UM()->enqueue()->load_css(); - UM()->enqueue()->load_tipsy(); - UM()->enqueue()->load_modal(); - UM()->enqueue()->load_responsive(); - - wp_register_script( 'um_raty', UM_URL . 'assets/js/um-raty' . UM()->enqueue()->suffix . '.js', array( 'jquery', 'wp-i18n' ), ultimatemember_version, true ); - wp_register_style( 'um_raty', UM_URL . 'assets/css/um-raty.css', array(), ultimatemember_version ); - - wp_register_style( 'um_default_css', UM_URL . 'assets/css/um-old-default.css', '', ultimatemember_version, 'all' ); - wp_enqueue_style( 'um_default_css' ); - - if ( is_rtl() ) { - wp_register_style( 'um_admin_rtl', $this->css_url . 'um-admin-rtl.css', array(), ultimatemember_version ); - wp_enqueue_style( 'um_admin_rtl' ); - } - } else { - - $this->load_global_scripts(); - $this->load_localize_scripts(); - - } - - global $wp_version, $current_screen; - - if ( version_compare( $wp_version, '5.0', '>=' ) ) { - if ( isset( $current_screen ) && $current_screen->is_block_editor() ) { - $this->load_gutenberg_js(); - } - } - } - - - /** - * Print editor scripts if they are not printed by default - */ - public function admin_footer_scripts() { - /** - * @var $class \_WP_Editors - */ - $class = '\_WP_Editors'; - - if ( did_action( 'print_default_editor_scripts' ) ) { - return; - } - if ( did_action( 'wp_tiny_mce_init' ) ) { - return; - } - if ( has_action( 'admin_print_footer_scripts', array( $class, 'editor_js' ) ) ) { - return; - } - - if ( ! class_exists( $class, false ) ) { - require_once( ABSPATH . WPINC . '/class-wp-editor.php' ); - } - - $class::force_uncompressed_tinymce(); - $class::enqueue_scripts(); - $class::editor_js(); - } - - } -} diff --git a/includes/admin/core/class-admin-navmenu.php b/includes/admin/core/class-admin-navmenu.php index d2eba992..e4204e0e 100644 --- a/includes/admin/core/class-admin-navmenu.php +++ b/includes/admin/core/class-admin-navmenu.php @@ -1,17 +1,18 @@ __( 'Display Mode', 'ultimate-member' ), - 'um_nav_roles' => __( 'By Role', 'ultimate-member' ) + 'um_nav_roles' => __( 'By Role', 'ultimate-member' ), ); - if ( $wp_version < '5.4' ) { - add_action( 'admin_footer-nav-menus.php', array( &$this, '_wp_template' ) ); - add_action( 'load-nav-menus.php', array( &$this, 'enqueue_nav_menus_scripts' ) ); - } else { - add_action( 'load-customize.php', array( &$this, 'enqueue_nav_menus_scripts' ) ); - } + add_action( 'customize_controls_print_footer_scripts', array( &$this, '_wp_template' ) ); + add_action( 'load-customize.php', array( &$this, 'enqueue_nav_menus_scripts' ) ); add_action( 'wp_update_nav_menu_item', array( &$this, '_save' ), 10, 3 ); add_action( 'wp_nav_menu_item_custom_fields', array( $this, 'wp_nav_menu_item_custom_fields' ), 20, 5 ); - //add_action( 'wp_nav_menu_item_custom_fields_customize_template', array( $this, 'wp_nav_menu_item_custom_fields_customize_template' ), 20 ); //waiting wp.org answer } @@ -112,29 +106,6 @@ if ( ! class_exists( 'um\admin\core\Admin_Navmenu' ) ) { } - /** - * - */ - function wp_nav_menu_item_custom_fields_customize_template() { - ?> -

-
-

- - <# console.log( data ); #> - -
-
- admin_enqueue()->load_nav_manus_scripts(); + UM()->admin()->enqueue()->load_nav_manus_scripts(); $menu_restriction_data = array(); diff --git a/includes/class-init.php b/includes/class-init.php index 4a22e0e7..c7959316 100644 --- a/includes/class-init.php +++ b/includes/class-init.php @@ -574,7 +574,6 @@ if ( ! class_exists( 'UM' ) ) { $this->admin_upgrade(); $this->admin_settings(); $this->columns(); - $this->admin_enqueue(); $this->metabox(); $this->users(); $this->dragdrop(); @@ -584,7 +583,6 @@ if ( ! class_exists( 'UM' ) ) { $this->theme_updater(); } elseif ( $this->is_request( 'frontend' ) ) { $this->frontend()->includes(); - $this->enqueue(); $this->account(); $this->password(); $this->login(); @@ -922,14 +920,13 @@ if ( ! class_exists( 'UM' ) ) { /** * @since 2.0 + * @depecated 2.6.12 * - * @return um\admin\core\Admin_Enqueue() + * @return um\admin\Enqueue */ - function admin_enqueue() { - if ( empty( $this->classes['admin_enqueue'] ) ) { - $this->classes['admin_enqueue'] = new um\admin\core\Admin_Enqueue(); - } - return $this->classes['admin_enqueue']; + public function admin_enqueue() { + _deprecated_function( __METHOD__, '2.6.12', 'UM()->admin()->enqueue()' ); + return $this->admin()->enqueue(); } @@ -1147,21 +1144,16 @@ if ( ! class_exists( 'UM' ) ) { return $this->classes['register']; } - /** * @since 2.0 + * @todo Make it deprecated and review extensions. * - * @return um\core\Enqueue + * @return um\frontend\Enqueue */ - function enqueue() { - if ( empty( $this->classes['enqueue'] ) ) { - $this->classes['enqueue'] = new um\core\Enqueue(); - } - - return $this->classes['enqueue']; + public function enqueue() { + return $this->frontend()->enqueue(); } - /** * @since 2.0 * diff --git a/includes/common/class-enqueue.php b/includes/common/class-enqueue.php index a0ae4cd9..32180349 100644 --- a/includes/common/class-enqueue.php +++ b/includes/common/class-enqueue.php @@ -43,59 +43,63 @@ class Enqueue { * @since 2.7.0 */ public function init_variables() { - $this->suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min'; + $this->suffix = ( ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) || ( defined( 'UM_SCRIPT_DEBUG' ) && UM_SCRIPT_DEBUG ) ) ? '' : '.min'; $this->urls['js'] = UM_URL . 'assets/js/'; $this->urls['css'] = UM_URL . 'assets/css/'; $this->urls['libs'] = UM_URL . 'assets/libs/'; } + protected function register_jquery_ui() { + wp_register_style( 'um_ui', $this->urls['libs'] . 'jquery-ui/jquery-ui' . $this->suffix . '.css', array(), '1.12.1' ); + } + /** * Register common JS/CSS libraries. * * @since 2.7.0 */ public function common_libs() { - wp_register_style( 'um-jquery-ui', $this->urls['libs'] . 'jquery-ui/jquery-ui' . $this->suffix . '.css', array(), '1.12.1' ); + $this->register_jquery_ui(); - wp_register_script( 'um-tipsy', $this->urls['libs'] . 'tipsy/um-tipsy' . $this->suffix . '.js', array( 'jquery' ), '1.0.0a', true ); - wp_register_style( 'um-tipsy', $this->urls['libs'] . 'tipsy/um-tipsy' . $this->suffix . '.css', array(), '1.0.0a' ); - - wp_register_script( 'um-helptip', $this->urls['libs'] . 'helptip/helptip' . $this->suffix . '.js', array( 'jquery', 'jquery-ui-tooltip' ), '1.0.0', true ); - wp_register_style( 'um-helptip', $this->urls['libs'] . 'helptip/helptip' . $this->suffix . '.css', array( 'dashicons', 'um-jquery-ui' ), '1.0.0' ); - - // Legacy Fonticons - wp_register_style( 'um-fonticons-ii', $this->urls['libs'] . 'fonticons/um-fonticons-ii' . $this->suffix . '.css', array(), UM_VERSION ); - wp_register_style( 'um-fonticons-fa', $this->urls['libs'] . 'fonticons/um-fonticons-fa' . $this->suffix . '.css', array(), UM_VERSION ); - - // Select2 - $dequeue_select2 = apply_filters( 'um_dequeue_select2_scripts', false ); - if ( class_exists( 'WooCommerce' ) || $dequeue_select2 ) { - wp_dequeue_style( 'select2' ); - wp_deregister_style( 'select2' ); - - wp_dequeue_script( 'select2' ); - wp_deregister_script( 'select2' ); - } - wp_register_script( 'select2', $this->urls['libs'] . 'select2/select2.full' . $this->suffix . '.js', array( 'jquery' ), '4.0.13', true ); - wp_register_style( 'select2', $this->urls['libs'] . 'select2/select2' . $this->suffix . '.css', array(), '4.0.13' ); - - // Raty JS for rating field-type - wp_register_script( 'um-raty', $this->urls['libs'] . 'raty/um-raty' . $this->suffix . '.js', array( 'jquery', 'wp-i18n' ), '2.6.0', true ); - wp_register_style( 'um-raty', $this->urls['libs'] . 'raty/um-raty' . $this->suffix . '.css', array(), '2.6.0' ); - - // Modal - wp_register_script( 'um-modal', $this->urls['libs'] . 'modal/um-modal' . $this->suffix . '.js', array( 'jquery', 'wp-i18n', 'wp-hooks' ), UM_VERSION, true ); - wp_register_style( 'um-modal', $this->urls['libs'] . 'modal/um-modal' . $this->suffix . '.css', array(), UM_VERSION ); - - // Common JS scripts for wp-admin and frontend both - wp_register_script( 'um-common', $this->urls['js'] . 'common' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - - $um_common_variables = array( - 'locale' => get_locale(), - ); - $um_common_variables = apply_filters( 'um_common_js_variables', $um_common_variables ); - wp_localize_script( 'um-common', 'um_common_variables', $um_common_variables ); - wp_enqueue_script( 'um-common' ); +// wp_register_script( 'um-tipsy', $this->urls['libs'] . 'tipsy/um-tipsy' . $this->suffix . '.js', array( 'jquery' ), '1.0.0a', true ); +// wp_register_style( 'um-tipsy', $this->urls['libs'] . 'tipsy/um-tipsy' . $this->suffix . '.css', array(), '1.0.0a' ); +// +// wp_register_script( 'um-helptip', $this->urls['libs'] . 'helptip/helptip' . $this->suffix . '.js', array( 'jquery', 'jquery-ui-tooltip' ), '1.0.0', true ); +// wp_register_style( 'um-helptip', $this->urls['libs'] . 'helptip/helptip' . $this->suffix . '.css', array( 'dashicons', 'um_ui' ), '1.0.0' ); +// +// // Legacy Fonticons +// wp_register_style( 'um-fonticons-ii', $this->urls['libs'] . 'fonticons/um-fonticons-ii' . $this->suffix . '.css', array(), UM_VERSION ); +// wp_register_style( 'um-fonticons-fa', $this->urls['libs'] . 'fonticons/um-fonticons-fa' . $this->suffix . '.css', array(), UM_VERSION ); +// +// // Select2 +// $dequeue_select2 = apply_filters( 'um_dequeue_select2_scripts', false ); +// if ( class_exists( 'WooCommerce' ) || $dequeue_select2 ) { +// wp_dequeue_style( 'select2' ); +// wp_deregister_style( 'select2' ); +// +// wp_dequeue_script( 'select2' ); +// wp_deregister_script( 'select2' ); +// } +// wp_register_script( 'select2', $this->urls['libs'] . 'select2/select2.full' . $this->suffix . '.js', array( 'jquery' ), '4.0.13', true ); +// wp_register_style( 'select2', $this->urls['libs'] . 'select2/select2' . $this->suffix . '.css', array(), '4.0.13' ); +// +// // Raty JS for rating field-type +// wp_register_script( 'um-raty', $this->urls['libs'] . 'raty/um-raty' . $this->suffix . '.js', array( 'jquery', 'wp-i18n' ), '2.6.0', true ); +// wp_register_style( 'um-raty', $this->urls['libs'] . 'raty/um-raty' . $this->suffix . '.css', array(), '2.6.0' ); +// +// // Modal +// wp_register_script( 'um-modal', $this->urls['libs'] . 'modal/um-modal' . $this->suffix . '.js', array( 'jquery', 'wp-i18n', 'wp-hooks' ), UM_VERSION, true ); +// wp_register_style( 'um-modal', $this->urls['libs'] . 'modal/um-modal' . $this->suffix . '.css', array(), UM_VERSION ); +// +// // Common JS scripts for wp-admin and frontend both +// wp_register_script( 'um-common', $this->urls['js'] . 'common' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); +// +// $um_common_variables = array( +// 'locale' => get_locale(), +// ); +// $um_common_variables = apply_filters( 'um_common_js_variables', $um_common_variables ); +// wp_localize_script( 'um-common', 'um_common_variables', $um_common_variables ); +// wp_enqueue_script( 'um-common' ); } } diff --git a/includes/core/class-enqueue.php b/includes/core/class-enqueue.php deleted file mode 100644 index 649e876e..00000000 --- a/includes/core/class-enqueue.php +++ /dev/null @@ -1,442 +0,0 @@ -suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG || defined( 'UM_SCRIPT_DEBUG' ) ) ? '' : '.min'; - - $this->js_baseurl = UM_URL . 'assets/js/'; - $this->css_baseurl = UM_URL . 'assets/css/'; - - add_action( 'init', array( &$this, 'scripts_enqueue_priority' ) ); - } - - - /** - * - */ - function scripts_enqueue_priority() { - add_action( 'wp_enqueue_scripts', array( &$this, 'wp_enqueue_scripts' ), $this->get_priority() ); - } - - - /** - * @return int - */ - function get_priority() { - /** - * UM hook - * - * @type filter - * @title um_core_enqueue_priority - * @description Change Enqueue scripts priority - * @input_vars - * [{"var":"$priority","type":"int","desc":"Priority"}] - * @change_log - * ["Since: 2.0"] - * @usage add_filter( 'um_core_enqueue_priority', 'function_name', 10, 1 ); - * @example - * - */ - return apply_filters( 'um_core_enqueue_priority', 100 ); - } - - - /** - * - */ - function register_scripts() { - $dequeue_select2 = apply_filters( 'um_dequeue_select2_scripts', false ); - if ( class_exists( 'WooCommerce' ) || $dequeue_select2 ) { - wp_dequeue_style( 'select2' ); - wp_deregister_style( 'select2' ); - - wp_dequeue_script( 'select2'); - wp_deregister_script('select2'); - } - wp_register_script( 'select2', $this->js_baseurl . 'select2/select2.full' . $this->suffix . '.js', array( 'jquery' ), '4.0.13', true ); - - wp_register_script( 'um_scrollbar', $this->js_baseurl . 'simplebar' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - - wp_register_script( 'um_jquery_form', $this->js_baseurl . 'um-jquery-form' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_fileupload', $this->js_baseurl . 'um-fileupload.js', array( 'jquery', 'um_jquery_form' ), UM_VERSION, true ); - - - wp_register_script( 'um_datetime', $this->js_baseurl . 'pickadate/picker.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_datetime_date', $this->js_baseurl . 'pickadate/picker.date.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); - wp_register_script( 'um_datetime_time', $this->js_baseurl . 'pickadate/picker.time.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); -// wp_register_script( 'um_datetime_legacy', $this->js_baseurl . 'pickadate/legacy.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); - // load a localized version for date/time - $locale = get_locale(); - if ( $locale ) { - if ( file_exists( WP_LANG_DIR . '/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js' ) ) { - wp_register_script('um_datetime_locale', content_url() . '/languages/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); - } elseif ( file_exists( UM_PATH . 'assets/js/pickadate/translations/' . $locale . '.js' ) ) { - wp_register_script('um_datetime_locale', UM_URL . 'assets/js/pickadate/translations/' . $locale . '.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); - } - } - - wp_register_script( 'um_tipsy', $this->js_baseurl . 'um-tipsy' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_raty', $this->js_baseurl . 'um-raty' . $this->suffix . '.js', array( 'jquery', 'wp-i18n' ), UM_VERSION, true ); - wp_register_script( 'um_crop', $this->js_baseurl . 'um-crop' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - - wp_register_script( 'um_modal', $this->js_baseurl . 'um-modal' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'um_crop' ), UM_VERSION, true ); - - wp_register_script('um_functions', $this->js_baseurl . 'um-functions' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry', 'wp-util', 'um_scrollbar' ), UM_VERSION, true ); - wp_register_script( 'um_responsive', $this->js_baseurl . 'um-responsive' . $this->suffix . '.js', array( 'jquery', 'um_functions', 'um_crop' ), UM_VERSION, true ); - - wp_register_script( 'um-gdpr', $this->js_baseurl . 'um-gdpr' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, false ); - wp_register_script('um_conditional', $this->js_baseurl . 'um-conditional' . $this->suffix . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); - wp_register_script('um_scripts', $this->js_baseurl . 'um-scripts' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', /*'um_datetime_legacy',*/ 'select2' ), UM_VERSION, true ); - /** - * UM hook - * - * @type filter - * @title um_enqueue_localize_data - * @description Extend UM localized data - * @input_vars - * [{"var":"$data","type":"array","desc":"Localize Array"}] - * @change_log - * ["Since: 2.0"] - * @usage add_filter( 'um_enqueue_localize_data', 'function_name', 10, 1 ); - * @example - * - */ - - - $max_upload_size = wp_max_upload_size(); - if ( ! $max_upload_size ) { - $max_upload_size = 0; - } - - $localize_data = apply_filters( 'um_enqueue_localize_data', array( - 'max_upload_size' => $max_upload_size, - 'nonce' => wp_create_nonce( "um-frontend-nonce" ), - ) ); - wp_localize_script( 'um_scripts', 'um_scripts', $localize_data ); - - wp_register_script('um_dropdown', $this->js_baseurl . 'dropdown' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - - wp_register_script('um_members', $this->js_baseurl . 'um-members' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'jquery-ui-slider', 'um_dropdown', 'wp-hooks', 'jquery-masonry', 'um_scripts' ), UM_VERSION, true ); - wp_register_script('um_profile', $this->js_baseurl . 'um-profile' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'wp-i18n' ), UM_VERSION, true ); - - $account_deps = apply_filters( 'um_account_scripts_dependencies', array( 'jquery', 'wp-hooks' ) ); - wp_register_script('um_account', $this->js_baseurl . 'um-account' . $this->suffix . '.js', $account_deps, UM_VERSION, true ); - - wp_register_script( 'um_gchart', 'https://www.google.com/jsapi', array(), UM_VERSION, true ); - } - - - /** - * Register styles - */ - function register_styles() { - - //FontAwesome and FontIcons styles - wp_register_style( 'um_fonticons_ii', $this->css_baseurl . 'um-fonticons-ii.css', array(), UM_VERSION ); - wp_register_style( 'um_fonticons_fa', $this->css_baseurl . 'um-fonticons-fa.css', array(), UM_VERSION ); - wp_register_style( 'um_crop', $this->css_baseurl . 'um-crop.css', array(), UM_VERSION ); - wp_register_style( 'um_tipsy', $this->css_baseurl . 'um-tipsy.css', array(), UM_VERSION ); - wp_register_style( 'um_raty', $this->css_baseurl . 'um-raty.css', array(), UM_VERSION ); - wp_register_style( 'select2', $this->css_baseurl . 'select2/select2.min.css', array(), '4.0.13' ); - wp_register_style( 'um_fileupload', $this->css_baseurl . 'um-fileupload.css', array(), UM_VERSION ); - wp_register_style( 'um_datetime', $this->css_baseurl . 'pickadate/default.css', array(), UM_VERSION ); - wp_register_style( 'um_datetime_date', $this->css_baseurl . 'pickadate/default.date.css', array( 'um_datetime' ), UM_VERSION ); - wp_register_style( 'um_datetime_time', $this->css_baseurl . 'pickadate/default.time.css', array( 'um_datetime' ), UM_VERSION ); - wp_register_style( 'um_scrollbar', $this->css_baseurl . 'simplebar.css', array(), UM_VERSION ); - - wp_register_style( 'um_rtl', $this->css_baseurl . 'um.rtl.css', array(), UM_VERSION ); - wp_register_style( 'um_default_css', $this->css_baseurl . 'um-old-default.css', array(), UM_VERSION ); - wp_register_style( 'um_modal', $this->css_baseurl . 'um-modal.css', array( 'um_crop' ), UM_VERSION ); - wp_register_style( 'um_responsive', $this->css_baseurl . 'um-responsive.css', array( 'um_profile', 'um_crop' ), UM_VERSION ); - - wp_register_style( 'um_styles', $this->css_baseurl . 'um-styles.css', array(), UM_VERSION ); - - wp_register_style( 'um_ui', UM_URL . 'assets/libs/jquery-ui/jquery-ui' . $this->suffix . '.css', array(), '1.12.1' ); - - wp_register_style( 'um_members', $this->css_baseurl . 'um-members.css', array( 'um_ui' ), UM_VERSION ); - if ( is_rtl() ) { - wp_register_style( 'um_members_rtl', $this->css_baseurl . 'um-members-rtl.css', array( 'um_members' ), UM_VERSION ); - } - - wp_register_style( 'um_profile', $this->css_baseurl . 'um-profile.css', array(), UM_VERSION ); - wp_register_style( 'um_account', $this->css_baseurl . 'um-account.css', array(), UM_VERSION ); - wp_register_style( 'um_misc', $this->css_baseurl . 'um-misc.css', array(), UM_VERSION ); - - } - - - /** - * Enqueue scripts and styles - */ - function wp_enqueue_scripts() { - - $this->register_scripts(); - $this->register_styles(); - - $this->load_original(); - - // rtl style - if ( is_rtl() ) { - wp_enqueue_style( 'um_rtl' ); - } - - global $post; - if ( is_object( $post ) && has_shortcode( $post->post_content,'ultimatemember' ) ) { - wp_dequeue_script( 'jquery-form' ); - } - - //old settings before UM 2.0 CSS - wp_enqueue_style( 'um_default_css' ); - - $this->old_css_settings(); - } - - - /** - * - */ - function old_css_settings() { - $uploads = wp_upload_dir(); - $upload_dir = $uploads['basedir'] . DIRECTORY_SEPARATOR . 'ultimatemember' . DIRECTORY_SEPARATOR; - if ( file_exists( $upload_dir . 'um_old_settings.css' ) ) { - wp_register_style( 'um_old_css', UM_URL . '../../uploads/ultimatemember/um_old_settings.css' ); - wp_enqueue_style( 'um_old_css' ); - } - } - - - /** - * This will load original files (not minified) - */ - function load_original() { - - //maybe deprecated - //$this->load_google_charts(); - - $this->load_fonticons(); - - $this->load_selectjs(); - - $this->load_modal(); - - $this->load_css(); - - $this->load_fileupload(); - - $this->load_datetimepicker(); - - $this->load_raty(); - - //$this->load_scrollto(); - - $this->load_scrollbar(); - - $this->load_imagecrop(); - - $this->load_tipsy(); - - $this->load_functions(); - - $this->load_responsive(); - - $this->load_customjs(); - - } - - - /** - * Include Google charts - */ - function load_google_charts() { - wp_enqueue_script( 'um_gchart' ); - } - - - /** - * Load plugin css - */ - function load_css() { - wp_enqueue_style( 'um_styles' ); - /*if ( is_rtl() ) { - wp_enqueue_style( 'um_members_rtl' ); - } else { - wp_enqueue_style( 'um_members' ); - }*/ - - wp_enqueue_style( 'um_profile' ); - wp_enqueue_style( 'um_account' ); - wp_enqueue_style( 'um_misc' ); - } - - - /** - * Load select-dropdowns JS - */ - function load_selectjs() { - wp_enqueue_script( 'select2' ); - wp_enqueue_style( 'select2' ); - } - - - /** - * Load Fonticons - */ - function load_fonticons() { - wp_enqueue_style( 'um_fonticons_ii' ); - wp_enqueue_style( 'um_fonticons_fa' ); - } - - - /** - * Load fileupload JS - */ - function load_fileupload() { - wp_enqueue_script( 'um_fileupload' ); - wp_enqueue_style( 'um_fileupload' ); - } - - - /** - * Load JS functions - */ - function load_functions() { - wp_enqueue_script('um_functions' ); - wp_enqueue_script( 'um-gdpr' ); - } - - - /** - * Load custom JS - */ - function load_customjs() { - wp_enqueue_script('um_conditional'); - wp_enqueue_script('um_scripts'); - //wp_enqueue_script('um_members'); - wp_enqueue_script('um_profile'); - wp_enqueue_script('um_account'); - } - - - /** - * Load date & time picker - */ - function load_datetimepicker() { - wp_enqueue_script( 'um_datetime' ); - wp_enqueue_script( 'um_datetime_date' ); - wp_enqueue_script( 'um_datetime_time' ); - //wp_enqueue_script( 'um_datetime_legacy' ); - - // load a localized version for date/time - $locale = get_locale(); - if ( $locale && ( file_exists( WP_LANG_DIR . '/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js' ) || file_exists( UM_PATH . 'assets/js/pickadate/translations/' . $locale . '.js' ) ) ) { - wp_enqueue_script('um_datetime_locale' ); - } - - wp_enqueue_style( 'um_datetime' ); - wp_enqueue_style( 'um_datetime_date' ); - wp_enqueue_style( 'um_datetime_time' ); - } - - - /** - * Load scrollbar - */ - function load_scrollbar(){ - wp_enqueue_style('um_scrollbar'); - } - - - /** - * Load rating - */ - function load_raty() { - wp_enqueue_script('um_raty'); - wp_enqueue_style('um_raty'); - } - - - /** - * Load crop script - */ - function load_imagecrop() { - wp_enqueue_script( 'um_crop' ); - wp_enqueue_style( 'um_crop' ); - } - - - /** - * Load tipsy - */ - function load_tipsy() { - wp_enqueue_script( 'um_tipsy' ); - wp_enqueue_style( 'um_tipsy' ); - } - - - /** - * Load modal - */ - function load_modal() { - wp_enqueue_script( 'um_modal' ); - wp_enqueue_style( 'um_modal' ); - } - - - /** - * Load responsive styles - */ - function load_responsive() { - wp_enqueue_script( 'um_responsive' ); - wp_enqueue_style( 'um_responsive' ); - } - - } -} diff --git a/includes/frontend/class-enqueue.php b/includes/frontend/class-enqueue.php new file mode 100644 index 00000000..b8196d0b --- /dev/null +++ b/includes/frontend/class-enqueue.php @@ -0,0 +1,427 @@ +js_baseurl = UM_URL . 'assets/js/'; + $this->css_baseurl = UM_URL . 'assets/css/'; + + add_action( 'init', array( &$this, 'scripts_enqueue_priority' ) ); + } + + + /** + * + */ + function scripts_enqueue_priority() { + add_action( 'wp_enqueue_scripts', array( &$this, 'wp_enqueue_scripts' ), $this->get_priority() ); + } + + + /** + * @return int + */ + function get_priority() { + /** + * UM hook + * + * @type filter + * @title um_core_enqueue_priority + * @description Change Enqueue scripts priority + * @input_vars + * [{"var":"$priority","type":"int","desc":"Priority"}] + * @change_log + * ["Since: 2.0"] + * @usage add_filter( 'um_core_enqueue_priority', 'function_name', 10, 1 ); + * @example + * + */ + return apply_filters( 'um_core_enqueue_priority', 100 ); + } + + + /** + * + */ + function register_scripts() { + $dequeue_select2 = apply_filters( 'um_dequeue_select2_scripts', false ); + if ( class_exists( 'WooCommerce' ) || $dequeue_select2 ) { + wp_dequeue_style( 'select2' ); + wp_deregister_style( 'select2' ); + + wp_dequeue_script( 'select2'); + wp_deregister_script('select2'); + } + wp_register_script( 'select2', $this->js_baseurl . 'select2/select2.full' . $this->suffix . '.js', array( 'jquery' ), '4.0.13', true ); + + wp_register_script( 'um_scrollbar', $this->js_baseurl . 'simplebar' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + + wp_register_script( 'um_jquery_form', $this->js_baseurl . 'um-jquery-form' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_fileupload', $this->js_baseurl . 'um-fileupload.js', array( 'jquery', 'um_jquery_form' ), UM_VERSION, true ); + + wp_register_script( 'um_datetime', $this->js_baseurl . 'pickadate/picker.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_datetime_date', $this->js_baseurl . 'pickadate/picker.date.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); + wp_register_script( 'um_datetime_time', $this->js_baseurl . 'pickadate/picker.time.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); +// wp_register_script( 'um_datetime_legacy', $this->js_baseurl . 'pickadate/legacy.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); + // load a localized version for date/time + $locale = get_locale(); + if ( $locale ) { + if ( file_exists( WP_LANG_DIR . '/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js' ) ) { + wp_register_script('um_datetime_locale', content_url() . '/languages/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); + } elseif ( file_exists( UM_PATH . 'assets/js/pickadate/translations/' . $locale . '.js' ) ) { + wp_register_script('um_datetime_locale', UM_URL . 'assets/js/pickadate/translations/' . $locale . '.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); + } + } + + wp_register_script( 'um_tipsy', $this->js_baseurl . 'um-tipsy' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_raty', $this->js_baseurl . 'um-raty' . $this->suffix . '.js', array( 'jquery', 'wp-i18n' ), UM_VERSION, true ); + wp_register_script( 'um_crop', $this->js_baseurl . 'um-crop' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + + wp_register_script( 'um_modal', $this->js_baseurl . 'um-modal' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'um_crop' ), UM_VERSION, true ); + + wp_register_script('um_functions', $this->js_baseurl . 'um-functions' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry', 'wp-util', 'um_scrollbar' ), UM_VERSION, true ); + wp_register_script( 'um_responsive', $this->js_baseurl . 'um-responsive' . $this->suffix . '.js', array( 'jquery', 'um_functions', 'um_crop' ), UM_VERSION, true ); + + wp_register_script( 'um-gdpr', $this->js_baseurl . 'um-gdpr' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, false ); + wp_register_script('um_conditional', $this->js_baseurl . 'um-conditional' . $this->suffix . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); + wp_register_script('um_scripts', $this->js_baseurl . 'um-scripts' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', /*'um_datetime_legacy',*/ 'select2' ), UM_VERSION, true ); + /** + * UM hook + * + * @type filter + * @title um_enqueue_localize_data + * @description Extend UM localized data + * @input_vars + * [{"var":"$data","type":"array","desc":"Localize Array"}] + * @change_log + * ["Since: 2.0"] + * @usage add_filter( 'um_enqueue_localize_data', 'function_name', 10, 1 ); + * @example + * + */ + + + $max_upload_size = wp_max_upload_size(); + if ( ! $max_upload_size ) { + $max_upload_size = 0; + } + + $localize_data = apply_filters( 'um_enqueue_localize_data', array( + 'max_upload_size' => $max_upload_size, + 'nonce' => wp_create_nonce( "um-frontend-nonce" ), + ) ); + wp_localize_script( 'um_scripts', 'um_scripts', $localize_data ); + + wp_register_script('um_dropdown', $this->js_baseurl . 'dropdown' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + + wp_register_script('um_members', $this->js_baseurl . 'um-members' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'jquery-ui-slider', 'um_dropdown', 'wp-hooks', 'jquery-masonry', 'um_scripts' ), UM_VERSION, true ); + wp_register_script('um_profile', $this->js_baseurl . 'um-profile' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'wp-i18n' ), UM_VERSION, true ); + + $account_deps = apply_filters( 'um_account_scripts_dependencies', array( 'jquery', 'wp-hooks' ) ); + wp_register_script('um_account', $this->js_baseurl . 'um-account' . $this->suffix . '.js', $account_deps, UM_VERSION, true ); + + wp_register_script( 'um_gchart', 'https://www.google.com/jsapi', array(), UM_VERSION, true ); + } + + + /** + * Register styles + */ + function register_styles() { + + //FontAwesome and FontIcons styles + wp_register_style( 'um_fonticons_ii', $this->css_baseurl . 'um-fonticons-ii.css', array(), UM_VERSION ); + wp_register_style( 'um_fonticons_fa', $this->css_baseurl . 'um-fonticons-fa.css', array(), UM_VERSION ); + wp_register_style( 'um_crop', $this->css_baseurl . 'um-crop.css', array(), UM_VERSION ); + wp_register_style( 'um_tipsy', $this->css_baseurl . 'um-tipsy.css', array(), UM_VERSION ); + wp_register_style( 'um_raty', $this->css_baseurl . 'um-raty.css', array(), UM_VERSION ); + wp_register_style( 'select2', $this->css_baseurl . 'select2/select2.min.css', array(), '4.0.13' ); + wp_register_style( 'um_fileupload', $this->css_baseurl . 'um-fileupload.css', array(), UM_VERSION ); + wp_register_style( 'um_datetime', $this->css_baseurl . 'pickadate/default.css', array(), UM_VERSION ); + wp_register_style( 'um_datetime_date', $this->css_baseurl . 'pickadate/default.date.css', array( 'um_datetime' ), UM_VERSION ); + wp_register_style( 'um_datetime_time', $this->css_baseurl . 'pickadate/default.time.css', array( 'um_datetime' ), UM_VERSION ); + wp_register_style( 'um_scrollbar', $this->css_baseurl . 'simplebar.css', array(), UM_VERSION ); + + wp_register_style( 'um_rtl', $this->css_baseurl . 'um.rtl.css', array(), UM_VERSION ); + wp_register_style( 'um_default_css', $this->css_baseurl . 'um-old-default.css', array(), UM_VERSION ); + wp_register_style( 'um_modal', $this->css_baseurl . 'um-modal.css', array( 'um_crop' ), UM_VERSION ); + wp_register_style( 'um_responsive', $this->css_baseurl . 'um-responsive.css', array( 'um_profile', 'um_crop' ), UM_VERSION ); + + wp_register_style( 'um_styles', $this->css_baseurl . 'um-styles.css', array(), UM_VERSION ); + + wp_register_style( 'um_members', $this->css_baseurl . 'um-members.css', array( 'um_ui' ), UM_VERSION ); + if ( is_rtl() ) { + wp_register_style( 'um_members_rtl', $this->css_baseurl . 'um-members-rtl.css', array( 'um_members' ), UM_VERSION ); + } + + wp_register_style( 'um_profile', $this->css_baseurl . 'um-profile.css', array(), UM_VERSION ); + wp_register_style( 'um_account', $this->css_baseurl . 'um-account.css', array(), UM_VERSION ); + wp_register_style( 'um_misc', $this->css_baseurl . 'um-misc.css', array(), UM_VERSION ); + + } + + + /** + * Enqueue scripts and styles + */ + function wp_enqueue_scripts() { + + $this->register_scripts(); + $this->register_styles(); + + $this->load_original(); + + // rtl style + if ( is_rtl() ) { + wp_enqueue_style( 'um_rtl' ); + } + + global $post; + if ( is_object( $post ) && has_shortcode( $post->post_content,'ultimatemember' ) ) { + wp_dequeue_script( 'jquery-form' ); + } + + //old settings before UM 2.0 CSS + wp_enqueue_style( 'um_default_css' ); + + $this->old_css_settings(); + } + + + /** + * + */ + function old_css_settings() { + $uploads = wp_upload_dir(); + $upload_dir = $uploads['basedir'] . DIRECTORY_SEPARATOR . 'ultimatemember' . DIRECTORY_SEPARATOR; + if ( file_exists( $upload_dir . 'um_old_settings.css' ) ) { + wp_register_style( 'um_old_css', UM_URL . '../../uploads/ultimatemember/um_old_settings.css' ); + wp_enqueue_style( 'um_old_css' ); + } + } + + + /** + * This will load original files (not minified) + */ + function load_original() { + + //maybe deprecated + //$this->load_google_charts(); + + $this->load_fonticons(); + + $this->load_selectjs(); + + $this->load_modal(); + + $this->load_css(); + + $this->load_fileupload(); + + $this->load_datetimepicker(); + + $this->load_raty(); + + //$this->load_scrollto(); + + $this->load_scrollbar(); + + $this->load_imagecrop(); + + $this->load_tipsy(); + + $this->load_functions(); + + $this->load_responsive(); + + $this->load_customjs(); + + } + + + /** + * Include Google charts + */ + function load_google_charts() { + wp_enqueue_script( 'um_gchart' ); + } + + + /** + * Load plugin css + */ + function load_css() { + wp_enqueue_style( 'um_styles' ); + /*if ( is_rtl() ) { + wp_enqueue_style( 'um_members_rtl' ); + } else { + wp_enqueue_style( 'um_members' ); + }*/ + + wp_enqueue_style( 'um_profile' ); + wp_enqueue_style( 'um_account' ); + wp_enqueue_style( 'um_misc' ); + } + + + /** + * Load select-dropdowns JS + */ + function load_selectjs() { + wp_enqueue_script( 'select2' ); + wp_enqueue_style( 'select2' ); + } + + + /** + * Load Fonticons + */ + function load_fonticons() { + wp_enqueue_style( 'um_fonticons_ii' ); + wp_enqueue_style( 'um_fonticons_fa' ); + } + + + /** + * Load fileupload JS + */ + function load_fileupload() { + wp_enqueue_script( 'um_fileupload' ); + wp_enqueue_style( 'um_fileupload' ); + } + + + /** + * Load JS functions + */ + function load_functions() { + wp_enqueue_script('um_functions' ); + wp_enqueue_script( 'um-gdpr' ); + } + + + /** + * Load custom JS + */ + function load_customjs() { + wp_enqueue_script('um_conditional'); + wp_enqueue_script('um_scripts'); + //wp_enqueue_script('um_members'); + wp_enqueue_script('um_profile'); + wp_enqueue_script('um_account'); + } + + + /** + * Load date & time picker + */ + function load_datetimepicker() { + wp_enqueue_script( 'um_datetime' ); + wp_enqueue_script( 'um_datetime_date' ); + wp_enqueue_script( 'um_datetime_time' ); + //wp_enqueue_script( 'um_datetime_legacy' ); + + // load a localized version for date/time + $locale = get_locale(); + if ( $locale && ( file_exists( WP_LANG_DIR . '/plugins/ultimate-member/assets/js/pickadate/' . $locale . '.js' ) || file_exists( UM_PATH . 'assets/js/pickadate/translations/' . $locale . '.js' ) ) ) { + wp_enqueue_script('um_datetime_locale' ); + } + + wp_enqueue_style( 'um_datetime' ); + wp_enqueue_style( 'um_datetime_date' ); + wp_enqueue_style( 'um_datetime_time' ); + } + + + /** + * Load scrollbar + */ + function load_scrollbar(){ + wp_enqueue_style('um_scrollbar'); + } + + + /** + * Load rating + */ + function load_raty() { + wp_enqueue_script('um_raty'); + wp_enqueue_style('um_raty'); + } + + + /** + * Load crop script + */ + function load_imagecrop() { + wp_enqueue_script( 'um_crop' ); + wp_enqueue_style( 'um_crop' ); + } + + + /** + * Load tipsy + */ + function load_tipsy() { + wp_enqueue_script( 'um_tipsy' ); + wp_enqueue_style( 'um_tipsy' ); + } + + + /** + * Load modal + */ + function load_modal() { + wp_enqueue_script( 'um_modal' ); + wp_enqueue_style( 'um_modal' ); + } + + + /** + * Load responsive styles + */ + function load_responsive() { + wp_enqueue_script( 'um_responsive' ); + wp_enqueue_style( 'um_responsive' ); + } +} diff --git a/includes/frontend/class-init.php b/includes/frontend/class-init.php index 21eff21a..d3de783e 100644 --- a/includes/frontend/class-init.php +++ b/includes/frontend/class-init.php @@ -20,9 +20,23 @@ if ( ! class_exists( 'um\frontend\Init' ) ) { * @used-by \UM::includes() */ public function includes() { + $this->enqueue(); $this->secure(); } + /** + * @since 2.6.12 + * + * @return Enqueue + */ + public function enqueue() { + if ( empty( UM()->classes['um\frontend\enqueue'] ) ) { + UM()->classes['um\frontend\enqueue'] = new Enqueue(); + } + + return UM()->classes['um\frontend\enqueue']; + } + /** * @since 2.6.8 * From 7ba73aaf35165555aa04996581f16aea841a5ac7 Mon Sep 17 00:00:00 2001 From: Champ Camba Date: Thu, 14 Sep 2023 19:54:58 +0800 Subject: [PATCH 18/81] Avoid regenerating hash for profile URL on profile update --- includes/core/class-user.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/includes/core/class-user.php b/includes/core/class-user.php index f88feadf..3bf706f1 100644 --- a/includes/core/class-user.php +++ b/includes/core/class-user.php @@ -790,7 +790,11 @@ if ( ! class_exists( 'um\core\User' ) ) { } if ( 'hash' === $permalink_base ) { - $user_in_url = $this->generate_user_hash( $user_id ); + if ( empty( $current_profile_slug ) ) { + $user_in_url = $this->generate_user_hash( $user_id ); + } else { + $user_in_url = $current_profile_slug; + } } if ( 'custom_meta' === $permalink_base ) { From b79a123110de0aaebb30e60d1c0c0c3903fd42db Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Fri, 15 Sep 2023 10:29:07 +0300 Subject: [PATCH 19/81] - removed old jquery-ui; - define enqueue variable default types; --- assets/css/images/readme.txt | 1 - assets/css/images/ui-icons_444444_256x240.png | Bin 7006 -> 0 bytes assets/css/images/ui-icons_555555_256x240.png | Bin 7074 -> 0 bytes assets/css/images/ui-icons_777620_256x240.png | Bin 4676 -> 0 bytes assets/css/images/ui-icons_777777_256x240.png | Bin 7013 -> 0 bytes assets/css/images/ui-icons_cc0000_256x240.png | Bin 4632 -> 0 bytes assets/css/images/ui-icons_ffffff_256x240.png | Bin 6313 -> 0 bytes assets/css/jquery-ui.css | 1311 ----------------- includes/common/class-enqueue.php | 8 +- 9 files changed, 4 insertions(+), 1316 deletions(-) delete mode 100644 assets/css/images/readme.txt delete mode 100644 assets/css/images/ui-icons_444444_256x240.png delete mode 100644 assets/css/images/ui-icons_555555_256x240.png delete mode 100644 assets/css/images/ui-icons_777620_256x240.png delete mode 100644 assets/css/images/ui-icons_777777_256x240.png delete mode 100644 assets/css/images/ui-icons_cc0000_256x240.png delete mode 100644 assets/css/images/ui-icons_ffffff_256x240.png delete mode 100644 assets/css/jquery-ui.css diff --git a/assets/css/images/readme.txt b/assets/css/images/readme.txt deleted file mode 100644 index 351f3426..00000000 --- a/assets/css/images/readme.txt +++ /dev/null @@ -1 +0,0 @@ -These images are part of the jquery-ui library and used in the file jquery-ui.css \ No newline at end of file diff --git a/assets/css/images/ui-icons_444444_256x240.png b/assets/css/images/ui-icons_444444_256x240.png deleted file mode 100644 index c2daae1663d47f397a01fd4166bce9b6b9ac4183..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7006 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 W$6)X8PycD00qQC`%4LeS5&s7ix^mY5 diff --git a/assets/css/images/ui-icons_777620_256x240.png b/assets/css/images/ui-icons_777620_256x240.png deleted file mode 100644 index d2f58d25581c605a5538fa50408fe09c4a30740d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4676 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 diff --git a/assets/css/images/ui-icons_777777_256x240.png b/assets/css/images/ui-icons_777777_256x240.png deleted file mode 100644 index 1d532588b989c5fd03e7a63f7e829b017c35d3cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7013 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 ZrDX-T^mH1q5`RzvpbBd8WwK_0{|mNJD+vGq diff --git a/assets/css/images/ui-icons_cc0000_256x240.png b/assets/css/images/ui-icons_cc0000_256x240.png deleted file mode 100644 index 2825f2004d10b413a76317d47384e6139abcbe00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4632 zcmeHKXIGP5v%c>nKte|l1Q7@wDbjlhy%zzcyaJ(j0vM{4fKmhn9z_vp0Z~LT6ctc< z6BGpmg(xk6^sY1^BnN%oFX!9&0q0tK?b)-|%$l`l?Q8bTO&cp?CVC!v005XwO$=-S z06aMYTX5*fPBb<9eIj7Kx|X^CP@By_cBeTpkg~C`H~a_y|G)l^87PgmOFzk@C)U== z4&Y{0fWd9rlJhSJUJ66`pm{jtKQb{P1vNSKSWV0Y1o+sUg~a6Sq|hmfX}GR{zQK2@ zhP=&v-vtYGFi z2?u(Z8yf)WH0MlC6gsS_r6C=Oj){gxc`o&g5dg3xnHuQYM}J>;VemZL!#35FDJ<11 z#x3jzMPzhH2uC=pn7ZZa@d%nQ$oUtrK73%iK&7T_Oa=P-?v>7YEeCBbcJEDSFE)K^ z$)D76N;>H^qCLHMA&r=*bG5Zw-8++MGVLnWdW(#``|L(Ai~ zSB)%_odv`MN{{7+m(O{@hGv_=`)c0=pjFh!)0)eLy1L;hxu67knKWln0>Q$ADH1giS0atY1^=R~SM{oO zXn%rDXPFXy;F_NK(3%mhq=q(b6%5if8Ew62CUp)Ct6@}Z;+7Gu0?lw@Z|z@Wt!F{#D=Pn?$lIuxf)>-g28+`Nxao^l_GC_ELqk zjuZJh-TH!-UstN=(mO@cC(smT?D0wbc{T^&FiXGwE0kLgwnZbb704>H@!sRSsnM$0>E%pkfR8q9Gg;*Rd~y5F z>udv~GokTG>qYDg9y2u}JigUI>8I7v*01F)0xIUEl}R!KaI_X_QekA7m4O|-iTlM# z$o&ZMQ2|F=B3kt~o53J>4)PQ)Wbb0J>Q&j)mNaNIUuF{GC8Q&A2@1$M=Y1F^fLt(x|OROO|1yx?f()V@i89 zX=%_I^0Iz7LGAMcAKHq($Vl>8w{>vsRpYY8{cCrN8@ix`RuQOdN(x(iECRe%cu6@-zW!FKF{8Q&r#^vY%W>>7>=_Ae8bR51lyHxl=z1(8 z8KS@f@#x-~$I5R7X0={=h~SuSzD|pZwYAGcNU1AKZ#I;(cPOvPA#arcNMvVI*Okxi zpCw{Eg;`rtnZcA%e)6g@7b}-b+aI2#XWrf^)ajE7p*yI5{#1p0b!T(rGA^Q^XQy?T z6e3VwZd)yGP_3*_{Op}Hd-`zzy##&g#{-#^VF)(CeG=je+w&#@*{)05v6XFXMcgoy zX)@cOE!%1VstsNf)OI!5R?rTzW$k`*a_DtAw?{lTMA8xH#}pIA5#f%2R<+H@doo<|^I~4l7u)1>8tW>jn7kK_^xd*lAjN0batU|Ldv1yPCTJ7V<=P#u zAW!2@HQ7#_X3iJQcz)U>$ytQh{|gzumod$xN8jMrX{|Fh`)W8eU}=2k!G|EkE`v_aX6fRpV%^HZ9+%bw zV+m1CMTAh`y2^AMgDm*++ea#GYC9|)0Gnu&@b<=B!bpT@`5NBzAda#Zw^0Y2fgG0d z5EcN`ImKAb3mJn-Ag1+KrW+6JN>k+RbJ^Zs1g@%vnhIRfarTgWK63g4GW1xT52Ap?B$1~$`ZB6ZOmV~1mD^F1FySA` z&3A;45cKY(-JufzKR6AS04E5LP~`kLa!xOuC$0ex$lO;6v% z_2ANW%I-NE2<;6(RtjCVyU#jgzkd<*2)~{R1c2WXk`6iLxWDjfz&tIodOz8ruQcdH zIs;+?im=dFHM#}Mg;dm{4%9!&hUGIyZE|E+ zYP@!&8MnNpRr$lzt{!U{>2N>gKxx@}BcAZyFVITneXsJUPQM~lXx@0AjBQ$Si${}sl?DZQD@~3xA%$En^0x+AA(q%Dd*fqQNx)N*l1F`jUg7}9tIW%h>C8YX| zoG<*+-%_MWgR|`0TrK5T6Dd-TV|!^G?#=xQqcx;4O3hShTiSnf#P;yjGMepUAXFUk zg>m_;C~4{wi*~MCjSv#06caF|)sc!4@!Z~U zk(M0CjB31q!67laFIe7Y59JtcXk1F$wL_hgJ4Ha2rfO6UTwo~EVIkR7wKY;x3Mry) z6Bu~ToX&2pZ-y07I6$VZ&M;w?Zpa%WIIa!86SJp+eTW6q#e~Nq%sNXF6;)AZu_aj?Fxaa^tB zpUWl}{!rR4@ zBRJU$ZQ8P(ve!%@Y_Y6o$fVUJOE82y#0n{UUvP5hcs?NH(rZDh5qq`9VyNR@_^rIH z?r`Tl-&6Q2()N1Gu4EM^6#Le$N;ZGuuh$!cHYn|{8$4q8TShBIPdw!4&qbRUzOnx& zz)iz$RW2Pz7f{Wt(r90GLfaV;hrIHZlP{T2YWc-u_sKcD4|j`tALDL?N1X$uo4)I>~pI zJB#YSR9|SZlYFlboNu#N0N!OEj!hmy;u+6piqAZNqMzarHIrR3FxK*(mc+|P;C+SU z1xCpi^QO;yKJ-Sc=umetzdT(G~QMe3gE*2ZlIR+e(pEyTzQ<@7w@!r7Ul*wN#J@yYLJ2$B)i4xO1lZ$4@bJo})7 zk?SD4C!cLqBSu;Bpd_N&?^3fpXdeuzRs^db@^%N;{APRenS33f)M%`CxFopbJ#Op2P8O{0di$;4^eR0EF zSa?FIf7CRB&Dgyr-PWQk|FPZ#Ii+Fmg%074>ZCM}-3#KEMgsm)&7hlG zh^{1h6vr0kbvahQj3F}eDTTx~SPTeooPlxpOAO>>+wOkq!|N?L7w6_r%miD-Ef$LC z*Xq~nLM-SlARk^m8SGjAXXP^^EvQ<=j=FBxdIrt+ZW0b2$jXY~9Vt)Moyccqv>mu* zL7_}5_uEWiMTt6S5s0!MD9Kji&Olt_Mb+-Ap}VZX)~VY03KUC?i;lpbzG61Ki^})S z(D={|)X_HZRe78jj=iZZ=FnnHud}cepBhH_@)KgXUNAJM<0rY#Y<^H8jKYt+&$!3t ziEDLwHn`ew_b8PkE9F3rtM?#ybzaZt)xyzh=YKll1gJ{A4elYuz7Fyaexl-;Vppbo zzP|Y_6rc9a&Zc60pBKi#fBXL0SV=V_Vw$Do490<*HSwqLo)7%$~;jFP!zj#9VH zV-j79`x_Sic24ToTlrb8)#WM1-$&8d4a zQQtxcXWco*IlN7F*1ps_<1dnD?4P-_c$?9lb703o{rKL?cyJ0EQFgbS;d^4zbkr7z zg%0&ah?IS2($?x}>MA8`7R`_S=SMxZ`I-+EVU*Zyt#d5=kpd5^o2BsJqhin1@w8Nw zcQxuuwV~;M|6+$EAG7Tyrp4K=v}r@0EGaBW!H5a<7sZLKJ$iARp@L?|4x$2@urC#u z*K*rKtVyg%Q%Dh$g!AUKRu9R#CpVG0>#T)XF}-DFi}Kzt4=57$Kf>No8VO9eQpW?m z&D;Hi-_wQvQSiL1@_HXOqWt>@_n`0h)>q6L?)}Y;prGbc-ZX`~*I0h;L%V*`2m@po zhnu7Bj2LQ2CzgoGq=rm5dJw$?(e~Biifs*ue6Ma$@dj}C^Zvn#K8&1$q4T2+LTVr zSR)*(2;HfrMfBR8(1Xvxh>{k!pR-d%Yh!~)B~8sH7NJ@wN)9?>RZ@mgT|wA93OqDS z`c`q%h*N|gbZ57c&QU`Ul9&mM`fI4ye6ASi$3m`6aNay9})y*;sS`2^pZ`ee}*=UVWop zI2}$UCTEIGbm?fIlHOW%LcHi-*Za#@f!J69M&1A&67cgINE`zdy%Il&ME|chJD~oC z(XZz+`Cs4wmIEZ|Ze;p~j<;xD!4z`@_=QKL9X#PTs6GN>xTPB*o8;ED@PqNq>sZ5+ zmOq~O7U^ox+79UYH~sc!W-qY=lHr~E8FakMCMGjn4&=*C&jz0$p*+Zw@bDY zDWD@Z_dk{lrsRA9{B6&h^e}QaTDi_!XTMzvlXeh!HoFOT+T?;^UpZ^S$r@cu-Yy*r zA%S81R<#CDn=Ge0C1-myXq1Dpo?h~}GF1VFzP;QLeS>;lEN0;r5Jl|Be+YjHdsy8q zf=J*U)yOQobz@qd7h@(&uk1`(u2;J3@ELr_I;UXMZD;U>T_u81{YCi)4-BUnhpJPd z*P5-E?#{=RSa4%$vsl*jr7>G!*k~q<;Gte_2Ho(%cbz6?MtEQ@E#=qy(%di}(ywo( z^&$wPV=dTLn4V(3*yU!nex$WzTgU4*TPKT$=4AHN1>ByNzy~=tJ<>)%(zkYP)bzTJ zE^L1eCjZ}#{AX9R9XPFh(p1zN4oGtZ;a<3Ifl0}1Z{He!u_QBw+$732kFZsPv76@eT5rdFK$*LSV)07oMjCq?@T6L1_+6V>1N=N9f=pT9R{)Y+*Q zE=_Onp8b?JbF*0N2a2^ixzBYlOCHGncaxb~@Khaa%wIT3l|n)Nx5V^}^1)Pc_Ce#g zaVC2ZzKzhUG<~cyBG*UjlG(0O9PfD(IEUQ0+_BdeYx@NHs~NvPH5%R-#(=Y<_z0Q- zCsW<$gH;zHOGqXoN*Q%2Dza)!ubwKrC(P_~Yu${N$FN!k#87~)p7IML=;lXkH)nXu z{1t+~2SAZ`K*uzRci_sw<_tnyUc=L)ElNxcRHCouao=DIxmDyEH-4&%Iz%mE4CO9- zc~tVHQTH*NWrK05BJwEc(C$&Qsb|V=4Wc;dgd3^*hAua61@1D^#&;1s9dGCV?=f8L zdZT_fV+UlLOtgUNZiViKn_iv?#wd|DyO(b49RZAj=*B@&ryo@|d-oi@^zoe*1j2Sl zBXQi<(FSgCl4?c+F8&_0wQs}Ya|feW7j;s<1(W4{uwh%pIiOAb5r$5=N{G}1+Hob>(kHU+ET&jz?npUucnqg3w4TYS5wk{uD& zGMI<6QT?c+Jwu#k#?^AtL6t+FCN?x_AQXwNpZl!-IMGWI&?wX@KVIX%KWA4!nIV^2 z!Z&I1K7%sCpVvw?fXBUfQ#gS0>s_qXGhctXXg_|C5~Yf4*Pdnw#d>;1`B4M?MFLtd z3%E$a{|e>5Qqy+K*OPK=_8+1v4qakc9#c?Ir~sb*+*_uohLpbS&oI; zF|@am1zFl_XFj&Hk$eVyq7EVH$sZ$lgb$b8=KRQ<8ja3# zJv_ZzZz%e6@>{?E*G`!z2E6|-A3Ntb*?M&HY!El|*i|R0HMi?dIlc3Wd~ML;e!*nl zo8&p#_sr$7=VUT z5b^W%S+HRY)3SHs8+~+1=0{s4`Du&N*r?UygS!Tb7H5Xc<9f=!0hG=#TE4P zIJK5C@GhjwM71DMF8`FYzjxE+1?7;GI_NZERU@{L=&|22o}s6Qbg~a@X0MyrecC>{ zMe^gFf=zBQ!^t;s>{eCPN!Ds02^P1g)W*QwEp-pFo7L#hSLmH4w-ID%H2+{R`L^`W zFnYUu5RJzTv69O1Bfi!kv!lkcP7Cer$!Zs!Xk+L|LG<-ue?fe3&$8bD3hUN`@yJ4@ zc_g4FJPqE1ph+qPmkF5ne087u?!}3w!+C%J{Pm1Q+LnhWfcf;*!I@4W@heylj$5{p zSg!H=_1ng8PdE9d?(w%nDWj|*QQyoX0mr`N=0CA7o3F*Y5h?C<2>{0tj*rK8sC;A? z=cYp*9DPcZhnvMn$+LhXk`X1N(qq@=D7LjZ6RM-r2!oju^gL|NSmZ&KL{EiB`I0z< zMfOv^nIrWUyZOT=r4$FJ!$4vw@yyVNo4fU@pwiVP!be_N^_QRCAV8sQ9-eyJZA9!d zgqf)&{-bvML!O2Ata^i5dPo+{%(5AvoEwN}E&zT&X5F-yncrt>XnVmYf)B)_NcgbN8MBs~f(Uj3(7cOVr?^l=sT@9Rx!T zc)K1jv&EhAkgoq!q>f+|31sY3^4t{U>1vN)2k>ov%Kdb^+Y06Lkl8w;m5oI}`%>T# z0gB+jX7lvb688egALlrcUWuT5EW408BJu3c;8ldewN^4ql)voC^^v&_k!?EwCp0|( z-puh>*R>7nI*O$q87JKh0G52uk;P{%!YiWNAG(UHbgjg{!@~3n4w%pjASBN#ERUmh z`mM3TM;dGF4|AkX@;|}9pIUjwq@rVs7iD@+DR-U8oDqqQ%B|hF1-|0rn&rGf zHIg8@z;cSu@6fHeFKTz8d}EA+<7e@>*vPQ3>DFifTTG0Z3lfmGqDSuBG~~hVUmDGL z{V|TNW&*9m!y9q!r4(--+5Z5Yzf;Y#CzgM_swq`K=JdAI)tk8^FNXJq^XR_jw-liM=q0L#Jh6FN4=(2EApeLKAcTwc9zU zkxAY*Nr~llO1x)Q+=g_|0G!u3)9-T7_Y`05Xa!>0!WUuwNoNYJr}^A->d7fjtcpUd zbCN$%rqHaVzXY+61{EvYrr5-LWF})IT|?#s`17KiH(4JU2&m}uu2Svp$ka4N=Go^5 zN}JH~A1@NOUe`W6PBn)8ve|8a`LGYClZy}zBDzigv~-Gm z>*g+>H~wH)PkqLXeX`|3I@g_YsPFyW=UTLO>bgssN{syu(_Qu-tiaOw`d;|^(}mW- zI;HhMa-ijsqYzf@-66dzUBD>2@z&@-mpXE?^?M}JTW7aOXIE@W>sZHUoyU@H+Y)@t z9ou4TXmpHLjYMkE-tyZ5=~@5oH^jldgvM#+6QYe%qLYeSgG0)*n=*7XM6^C1cWWXC zM=FL_e!Quo2;fm&MXx_pkb}9`B;7oNF*t;}%rNRG|KL<;{I$441@Pmin zsM3E>>Hlu(`5}!(_kGTV_4Z`vp$S*8zQ?F+XUc#iy}gE(FU>S1bMb_O+>rv;??hp; zIxlm4jh~f?&R8&e(KGmx9Clr%G7sjJa0)*a^J!vzpwjb;;Y4T>$p;dno^8As@}JWU(R&#d$s&w`5tJ6PMH#?<}r6Un;e8xx6Kx z{zwkqFvEW#9D-F@o3z{2C^E7^DJ{{Q72DxEbc$Q~^G+GZ+7Vcx1zf|^f?;|(?=pm^=L77+dr4z?*`IRg*+Dmm`S#ydsTc# z+sn|kLrVk-cili!n9!Ivr0exH>lN0)acF;4T>$K??bmGK0i zXs5cU@7!%8@BA|3u(BbYV+9t&ZfYQ@vF?tl=ThQW`&QG(W7XEz`>-VQ0sw9> zgT{?gd{Rw(hl~yFxk9BOvvdr9YjgNi##?-cSzvnyy^HlUzVd#Yx@q)3ZfHJ@G| z#2Ay|j`!k=tEGi|bf{UXzMdhar|E0g0_N^2Ns#pDm((0b-H#lop7?QF#pbL!dpX%$ z%ugi6dRl78y;x+7ksrS3Vt$;J_Ik^4wKv zgZM4`%ij2dJ#^h1ATN&+gw6E_G45pB@LquS$1BvRp}*kfMHz@UK)wydZud3V&6>@! z*6Spti+IpM!cnMI+8to0a8kPm^Nvu-hL+)3L%ZKxgt~y6OV!m`8~R131@hFrgEaOz zlVkN!iyHgP$6LngicGvXE-|=?8_%|iArjB=ga9-1WpDF}c`o>S*`l0YQhC^3*|w&; z_mrTaufMm)F@TG_D1^63kT}Wd(oF2E>3eVQ2c%6}iKtai>%5|}%fy@Yx!|7i^Cx(# zEz;eGhU1mSb*@e&N8ub_a*0b)Op=SdityJ=u_+o^h$!o!N|Ayp9GE?sY8*HN&#U^| zjYf9~Sawur%wd45-%r@Z^uMj29YexMb`w0%`yOaG5fU7f&f*y3e-pspVlVbP>)*KW zpB7yuPBGTv#FPaa>>B4^2|gsx9~vk9Mq5jy1DBy6~(z#XX7mK8rWIoy*gDlziks2rbdX#)mgs*!6WWE_ljEH85=e(=NG+SckN z$==Fk8$L<`_7D9?D<>Cd(!spToeK=0Tz=SV|5uT$?h;X(?%Mizi4jzzjwX^he)*>~ z`bV-nfn4&(dIVKGw^XWhJX>87L(is5n*O(B{5M*LQ{`BceV&hl?bK?Z*l!`*q~7M3 z1GEJi7rKjXGSt=MvSiCu5~ZH-sw8LBhc{GRQ5S|)k$ zVxo=LCOu?B2?Qw7%}W5dJ^)!?8M{+kW~5k|U=smC|A5f`A@P%2^MV$Js8Fp545610 zRENu!MFgyA?40cx10dcAcdhDL7fI-6OJ1O-OJ(Dl=_bEhlNCT+pwwY!+eT~eD4s#c zT3c@(Kabl#nM?c}BqD*X~!0#*`4Hvia~d(L6V?En>)Uz)OB%TfwvkT;RDqX^l&EpV&8(c=HI7I>OYt; zF_MN^iXn>_2F064G`4DCM+JR~z7K4cRP44$SH;48WfeXDd9*HY(qP0{asUc>)vWOP zO$~fxIkWCl`wKggY;o1cIvlN0&yU``LXRa{1TBMGZ3_85#^!p-i58!ZEZgcq9+1q7Ar)(67e}|4=E@vshUH>N zVq!Vu4~?IuH4*7R0K%yZyRacVdr=^Zi@`&4x^{y|L)uR$MZmUm-I;7ktfx%FsrKkH zuFOFgc5rOayR*5(wq5RgRz*Lr6V3vGnx83BC`W-g)`E5wE;BAy8^Z~x^`Ml~7rf2L zlh;Sx4+9-Y^Z>v7Q=!}_Hvd5fJMCsk+mS8&qlQRPn`5>B2ibG>NaTj_w*1}w%R9y| z9moQx>k0lPL>eJh8TUD}0!d{Z<$I0Uh?1-e7}v1myIv&9Q=5kUkdb3rd-Y+&rObVo z)q>@$ZV)Si*KLyYR!Um9FtEx$Bl>DC_gQVO-7@A^*j4PnC1)dR=r4k?%`5@Mq;-LJ z$p1gWt3>ww?~pN>bpncY=yPn}a=m~;h~q7%7!W!@ zuon|puuB@+aOu5C!U9Yp`jmk+9ej^mhg8zVDwW5{N{~`BTlz(mXeny_d3WNmkYnQ$ zR`t5lw>BrC45E2_y9Z<*FRi~>Vf1TYe=SIfp7~!q>c2y`UkVf%2=m|^q8f^RlQcx} zR^t!+pb|ZvP{as?kd*#JjK+Nkb^oc69;UzsQUUGnV1KoZH{~C7Q_gWChd!LjlU9o* z=(^df(opYoM~r#|sJPG=UkV(7O(U1V8+IbEgo>vxCV6I5H{ zU&jo_Ztn&&j}Guik+|Tl?E%BY+em-9A+FyC;c~KwK}N|u26z;55joZz@DqIixFDf? z1@WZ2ZXbgSKaDDC2&nLXrG#+qtW%@dsn2-gG|k?99p4GRp!J19bnk`ScM5S;aS3w0 z7=Y{2G71vX$`UeicVuK$WMx(U66I8+rTJ)RN&Z8@*Z;n!+k^jBP?V67y(2BJa$P}1 zUhW?SX(Qja7YZDI{o%I1TS&N5kSm~h-{0Al*TC1w-PPRH>HdSjFRp4A9{~osCOYL> Hjt~C}Fe}Pt diff --git a/assets/css/jquery-ui.css b/assets/css/jquery-ui.css deleted file mode 100644 index ec02ac15..00000000 --- a/assets/css/jquery-ui.css +++ /dev/null @@ -1,1311 +0,0 @@ -/*! jQuery UI - v1.12.1 - 2016-09-14 -* http://jqueryui.com -* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css -* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&fwDefault=normal&cornerRadius=3px&bgColorHeader=e9e9e9&bgTextureHeader=flat&borderColorHeader=dddddd&fcHeader=333333&iconColorHeader=444444&bgColorContent=ffffff&bgTextureContent=flat&borderColorContent=dddddd&fcContent=333333&iconColorContent=444444&bgColorDefault=f6f6f6&bgTextureDefault=flat&borderColorDefault=c5c5c5&fcDefault=454545&iconColorDefault=777777&bgColorHover=ededed&bgTextureHover=flat&borderColorHover=cccccc&fcHover=2b2b2b&iconColorHover=555555&bgColorActive=007fff&bgTextureActive=flat&borderColorActive=003eff&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=fffa90&bgTextureHighlight=flat&borderColorHighlight=dad55e&fcHighlight=777620&iconColorHighlight=777620&bgColorError=fddfdf&bgTextureError=flat&borderColorError=f1a899&fcError=5f3f3f&iconColorError=cc0000&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=666666&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=5px&offsetTopShadow=0px&offsetLeftShadow=0px&cornerRadiusShadow=8px -* Copyright jQuery Foundation and other contributors; Licensed MIT */ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { - display: none; -} -.ui-helper-hidden-accessible { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; -} -.ui-helper-reset { - margin: 0; - padding: 0; - border: 0; - outline: 0; - line-height: 1.3; - text-decoration: none; - font-size: 100%; - list-style: none; -} -.ui-helper-clearfix:before, -.ui-helper-clearfix:after { - content: ""; - display: table; - border-collapse: collapse; -} -.ui-helper-clearfix:after { - clear: both; -} -.ui-helper-zfix { - width: 100%; - height: 100%; - top: 0; - left: 0; - position: absolute; - opacity: 0; - filter:Alpha(Opacity=0); /* support: IE8 */ -} - -.ui-front { - z-index: 100; -} - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { - cursor: default !important; - pointer-events: none; -} - - -/* Icons -----------------------------------*/ -.ui-icon { - display: inline-block; - vertical-align: middle; - margin-top: -.25em; - position: relative; - text-indent: -99999px; - overflow: hidden; - background-repeat: no-repeat; -} - -.ui-widget-icon-block { - left: 50%; - margin-left: -8px; - display: block; -} - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; -} -.ui-accordion .ui-accordion-header { - display: block; - cursor: pointer; - position: relative; - margin: 2px 0 0 0; - padding: .5em .5em .5em .7em; - font-size: 100%; -} -.ui-accordion .ui-accordion-content { - padding: 1em 2.2em; - border-top: 0; - overflow: auto; -} -.ui-autocomplete { - position: absolute; - top: 0; - left: 0; - cursor: default; -} -.ui-menu { - list-style: none; - padding: 0; - margin: 0; - display: block; - outline: 0; -} -.ui-menu .ui-menu { - position: absolute; -} -.ui-menu .ui-menu-item { - margin: 0; - cursor: pointer; - /* support: IE10, see #8844 */ - list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); -} -.ui-menu .ui-menu-item-wrapper { - position: relative; - padding: 3px 1em 3px .4em; -} -.ui-menu .ui-menu-divider { - margin: 5px 0; - height: 0; - font-size: 0; - line-height: 0; - border-width: 1px 0 0 0; -} -.ui-menu .ui-state-focus, -.ui-menu .ui-state-active { - margin: -1px; -} - -/* icon support */ -.ui-menu-icons { - position: relative; -} -.ui-menu-icons .ui-menu-item-wrapper { - padding-left: 2em; -} - -/* left-aligned */ -.ui-menu .ui-icon { - position: absolute; - top: 0; - bottom: 0; - left: .2em; - margin: auto 0; -} - -/* right-aligned */ -.ui-menu .ui-menu-icon { - left: auto; - right: 0; -} -.ui-button { - padding: .4em 1em; - display: inline-block; - position: relative; - line-height: normal; - margin-right: .1em; - cursor: pointer; - vertical-align: middle; - text-align: center; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - - /* Support: IE <= 11 */ - overflow: visible; -} - -.ui-button, -.ui-button:link, -.ui-button:visited, -.ui-button:hover, -.ui-button:active { - text-decoration: none; -} - -/* to make room for the icon, a width needs to be set here */ -.ui-button-icon-only { - width: 2em; - box-sizing: border-box; - text-indent: -9999px; - white-space: nowrap; -} - -/* no icon support for input elements */ -input.ui-button.ui-button-icon-only { - text-indent: 0; -} - -/* button icon element(s) */ -.ui-button-icon-only .ui-icon { - position: absolute; - top: 50%; - left: 50%; - margin-top: -8px; - margin-left: -8px; -} - -.ui-button.ui-icon-notext .ui-icon { - padding: 0; - width: 2.1em; - height: 2.1em; - text-indent: -9999px; - white-space: nowrap; - -} - -input.ui-button.ui-icon-notext .ui-icon { - width: auto; - height: auto; - text-indent: 0; - white-space: normal; - padding: .4em 1em; -} - -/* workarounds */ -/* Support: Firefox 5 - 40 */ -input.ui-button::-moz-focus-inner, -button.ui-button::-moz-focus-inner { - border: 0; - padding: 0; -} -.ui-controlgroup { - vertical-align: middle; - display: inline-block; -} -.ui-controlgroup > .ui-controlgroup-item { - float: left; - margin-left: 0; - margin-right: 0; -} -.ui-controlgroup > .ui-controlgroup-item:focus, -.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { - z-index: 9999; -} -.ui-controlgroup-vertical > .ui-controlgroup-item { - display: block; - float: none; - width: 100%; - margin-top: 0; - margin-bottom: 0; - text-align: left; -} -.ui-controlgroup-vertical .ui-controlgroup-item { - box-sizing: border-box; -} -.ui-controlgroup .ui-controlgroup-label { - padding: .4em 1em; -} -.ui-controlgroup .ui-controlgroup-label span { - font-size: 80%; -} -.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { - border-left: none; -} -.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { - border-top: none; -} -.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { - border-right: none; -} -.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { - border-bottom: none; -} - -/* Spinner specific style fixes */ -.ui-controlgroup-vertical .ui-spinner-input { - - /* Support: IE8 only, Android < 4.4 only */ - width: 75%; - width: calc( 100% - 2.4em ); -} -.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { - border-top-style: solid; -} - -.ui-checkboxradio-label .ui-icon-background { - box-shadow: inset 1px 1px 1px #ccc; - border-radius: .12em; - border: none; -} -.ui-checkboxradio-radio-label .ui-icon-background { - width: 16px; - height: 16px; - border-radius: 1em; - overflow: visible; - border: none; -} -.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, -.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { - background-image: none; - width: 8px; - height: 8px; - border-width: 4px; - border-style: solid; -} -.ui-checkboxradio-disabled { - pointer-events: none; -} -.ui-datepicker { - width: 17em; - padding: .2em .2em 0; - display: none; -} -.ui-datepicker .ui-datepicker-header { - position: relative; - padding: .2em 0; -} -.ui-datepicker .ui-datepicker-prev, -.ui-datepicker .ui-datepicker-next { - position: absolute; - top: 2px; - width: 1.8em; - height: 1.8em; -} -.ui-datepicker .ui-datepicker-prev-hover, -.ui-datepicker .ui-datepicker-next-hover { - top: 1px; -} -.ui-datepicker .ui-datepicker-prev { - left: 2px; -} -.ui-datepicker .ui-datepicker-next { - right: 2px; -} -.ui-datepicker .ui-datepicker-prev-hover { - left: 1px; -} -.ui-datepicker .ui-datepicker-next-hover { - right: 1px; -} -.ui-datepicker .ui-datepicker-prev span, -.ui-datepicker .ui-datepicker-next span { - display: block; - position: absolute; - left: 50%; - margin-left: -8px; - top: 50%; - margin-top: -8px; -} -.ui-datepicker .ui-datepicker-title { - margin: 0 2.3em; - line-height: 1.8em; - text-align: center; -} -.ui-datepicker .ui-datepicker-title select { - font-size: 1em; - margin: 1px 0; -} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { - width: 45%; -} -.ui-datepicker table { - width: 100%; - font-size: .9em; - border-collapse: collapse; - margin: 0 0 .4em; -} -.ui-datepicker th { - padding: .7em .3em; - text-align: center; - font-weight: bold; - border: 0; -} -.ui-datepicker td { - border: 0; - padding: 1px; -} -.ui-datepicker td span, -.ui-datepicker td a { - display: block; - padding: .2em; - text-align: right; - text-decoration: none; -} -.ui-datepicker .ui-datepicker-buttonpane { - background-image: none; - margin: .7em 0 0 0; - padding: 0 .2em; - border-left: 0; - border-right: 0; - border-bottom: 0; -} -.ui-datepicker .ui-datepicker-buttonpane button { - float: right; - margin: .5em .2em .4em; - cursor: pointer; - padding: .2em .6em .3em .6em; - width: auto; - overflow: visible; -} -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { - float: left; -} - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { - width: auto; -} -.ui-datepicker-multi .ui-datepicker-group { - float: left; -} -.ui-datepicker-multi .ui-datepicker-group table { - width: 95%; - margin: 0 auto .4em; -} -.ui-datepicker-multi-2 .ui-datepicker-group { - width: 50%; -} -.ui-datepicker-multi-3 .ui-datepicker-group { - width: 33.3%; -} -.ui-datepicker-multi-4 .ui-datepicker-group { - width: 25%; -} -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { - border-left-width: 0; -} -.ui-datepicker-multi .ui-datepicker-buttonpane { - clear: left; -} -.ui-datepicker-row-break { - clear: both; - width: 100%; - font-size: 0; -} - -/* RTL support */ -.ui-datepicker-rtl { - direction: rtl; -} -.ui-datepicker-rtl .ui-datepicker-prev { - right: 2px; - left: auto; -} -.ui-datepicker-rtl .ui-datepicker-next { - left: 2px; - right: auto; -} -.ui-datepicker-rtl .ui-datepicker-prev:hover { - right: 1px; - left: auto; -} -.ui-datepicker-rtl .ui-datepicker-next:hover { - left: 1px; - right: auto; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane { - clear: right; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane button { - float: left; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, -.ui-datepicker-rtl .ui-datepicker-group { - float: right; -} -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { - border-right-width: 0; - border-left-width: 1px; -} - -/* Icons */ -.ui-datepicker .ui-icon { - display: block; - text-indent: -99999px; - overflow: hidden; - background-repeat: no-repeat; - left: .5em; - top: .3em; -} -.ui-dialog { - position: absolute; - top: 0; - left: 0; - padding: .2em; - outline: 0; -} -.ui-dialog .ui-dialog-titlebar { - padding: .4em 1em; - position: relative; -} -.ui-dialog .ui-dialog-title { - float: left; - margin: .1em 0; - white-space: nowrap; - width: 90%; - overflow: hidden; - text-overflow: ellipsis; -} -.ui-dialog .ui-dialog-titlebar-close { - position: absolute; - right: .3em; - top: 50%; - width: 20px; - margin: -10px 0 0 0; - padding: 1px; - height: 20px; -} -.ui-dialog .ui-dialog-content { - position: relative; - border: 0; - padding: .5em 1em; - background: none; - overflow: auto; -} -.ui-dialog .ui-dialog-buttonpane { - text-align: left; - border-width: 1px 0 0 0; - background-image: none; - margin-top: .5em; - padding: .3em 1em .5em .4em; -} -.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { - float: right; -} -.ui-dialog .ui-dialog-buttonpane button { - margin: .5em .4em .5em 0; - cursor: pointer; -} -.ui-dialog .ui-resizable-n { - height: 2px; - top: 0; -} -.ui-dialog .ui-resizable-e { - width: 2px; - right: 0; -} -.ui-dialog .ui-resizable-s { - height: 2px; - bottom: 0; -} -.ui-dialog .ui-resizable-w { - width: 2px; - left: 0; -} -.ui-dialog .ui-resizable-se, -.ui-dialog .ui-resizable-sw, -.ui-dialog .ui-resizable-ne, -.ui-dialog .ui-resizable-nw { - width: 7px; - height: 7px; -} -.ui-dialog .ui-resizable-se { - right: 0; - bottom: 0; -} -.ui-dialog .ui-resizable-sw { - left: 0; - bottom: 0; -} -.ui-dialog .ui-resizable-ne { - right: 0; - top: 0; -} -.ui-dialog .ui-resizable-nw { - left: 0; - top: 0; -} -.ui-draggable .ui-dialog-titlebar { - cursor: move; -} -.ui-draggable-handle { - -ms-touch-action: none; - touch-action: none; -} -.ui-resizable { - position: relative; -} -.ui-resizable-handle { - position: absolute; - font-size: 0.1px; - display: block; - -ms-touch-action: none; - touch-action: none; -} -.ui-resizable-disabled .ui-resizable-handle, -.ui-resizable-autohide .ui-resizable-handle { - display: none; -} -.ui-resizable-n { - cursor: n-resize; - height: 7px; - width: 100%; - top: -5px; - left: 0; -} -.ui-resizable-s { - cursor: s-resize; - height: 7px; - width: 100%; - bottom: -5px; - left: 0; -} -.ui-resizable-e { - cursor: e-resize; - width: 7px; - right: -5px; - top: 0; - height: 100%; -} -.ui-resizable-w { - cursor: w-resize; - width: 7px; - left: -5px; - top: 0; - height: 100%; -} -.ui-resizable-se { - cursor: se-resize; - width: 12px; - height: 12px; - right: 1px; - bottom: 1px; -} -.ui-resizable-sw { - cursor: sw-resize; - width: 9px; - height: 9px; - left: -5px; - bottom: -5px; -} -.ui-resizable-nw { - cursor: nw-resize; - width: 9px; - height: 9px; - left: -5px; - top: -5px; -} -.ui-resizable-ne { - cursor: ne-resize; - width: 9px; - height: 9px; - right: -5px; - top: -5px; -} -.ui-progressbar { - height: 2em; - text-align: left; - overflow: hidden; -} -.ui-progressbar .ui-progressbar-value { - margin: -1px; - height: 100%; -} -.ui-progressbar .ui-progressbar-overlay { - background: url("data:image/gif;base64,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"); - height: 100%; - filter: alpha(opacity=25); /* support: IE8 */ - opacity: 0.25; -} -.ui-progressbar-indeterminate .ui-progressbar-value { - background-image: none; -} -.ui-selectable { - -ms-touch-action: none; - touch-action: none; -} -.ui-selectable-helper { - position: absolute; - z-index: 100; - border: 1px dotted black; -} -.ui-selectmenu-menu { - padding: 0; - margin: 0; - position: absolute; - top: 0; - left: 0; - display: none; -} -.ui-selectmenu-menu .ui-menu { - overflow: auto; - overflow-x: hidden; - padding-bottom: 1px; -} -.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { - font-size: 1em; - font-weight: bold; - line-height: 1.5; - padding: 2px 0.4em; - margin: 0.5em 0 0 0; - height: auto; - border: 0; -} -.ui-selectmenu-open { - display: block; -} -.ui-selectmenu-text { - display: block; - margin-right: 20px; - overflow: hidden; - text-overflow: ellipsis; -} -.ui-selectmenu-button.ui-button { - text-align: left; - white-space: nowrap; - width: 14em; -} -.ui-selectmenu-icon.ui-icon { - float: right; - margin-top: 0; -} -.ui-slider { - position: relative; - text-align: left; -} -.ui-slider .ui-slider-handle { - position: absolute; - z-index: 2; - width: 1.2em; - height: 1.2em; - cursor: default; - -ms-touch-action: none; - touch-action: none; -} -.ui-slider .ui-slider-range { - position: absolute; - z-index: 1; - font-size: .7em; - display: block; - border: 0; - background-position: 0 0; -} - -/* support: IE8 - See #6727 */ -.ui-slider.ui-state-disabled .ui-slider-handle, -.ui-slider.ui-state-disabled .ui-slider-range { - filter: inherit; -} - -.ui-slider-horizontal { - height: .8em; -} -.ui-slider-horizontal .ui-slider-handle { - top: -.3em; - margin-left: -.6em; -} -.ui-slider-horizontal .ui-slider-range { - top: 0; - height: 100%; -} -.ui-slider-horizontal .ui-slider-range-min { - left: 0; -} -.ui-slider-horizontal .ui-slider-range-max { - right: 0; -} - -.ui-slider-vertical { - width: .8em; - height: 100px; -} -.ui-slider-vertical .ui-slider-handle { - left: -.3em; - margin-left: 0; - margin-bottom: -.6em; -} -.ui-slider-vertical .ui-slider-range { - left: 0; - width: 100%; -} -.ui-slider-vertical .ui-slider-range-min { - bottom: 0; -} -.ui-slider-vertical .ui-slider-range-max { - top: 0; -} -.ui-sortable-handle { - -ms-touch-action: none; - touch-action: none; -} -.ui-spinner { - position: relative; - display: inline-block; - overflow: hidden; - padding: 0; - vertical-align: middle; -} -.ui-spinner-input { - border: none; - background: none; - color: inherit; - padding: .222em 0; - margin: .2em 0; - vertical-align: middle; - margin-left: .4em; - margin-right: 2em; -} -.ui-spinner-button { - width: 1.6em; - height: 50%; - font-size: .5em; - padding: 0; - margin: 0; - text-align: center; - position: absolute; - cursor: default; - display: block; - overflow: hidden; - right: 0; -} -/* more specificity required here to override default borders */ -.ui-spinner a.ui-spinner-button { - border-top-style: none; - border-bottom-style: none; - border-right-style: none; -} -.ui-spinner-up { - top: 0; -} -.ui-spinner-down { - bottom: 0; -} -.ui-tabs { - position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ - padding: .2em; -} -.ui-tabs .ui-tabs-nav { - margin: 0; - padding: .2em .2em 0; -} -.ui-tabs .ui-tabs-nav li { - list-style: none; - float: left; - position: relative; - top: 0; - margin: 1px .2em 0 0; - border-bottom-width: 0; - padding: 0; - white-space: nowrap; -} -.ui-tabs .ui-tabs-nav .ui-tabs-anchor { - float: left; - padding: .5em 1em; - text-decoration: none; -} -.ui-tabs .ui-tabs-nav li.ui-tabs-active { - margin-bottom: -1px; - padding-bottom: 1px; -} -.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, -.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, -.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { - cursor: text; -} -.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { - cursor: pointer; -} -.ui-tabs .ui-tabs-panel { - display: block; - border-width: 0; - padding: 1em 1.4em; - background: none; -} -.ui-tooltip { - padding: 8px; - position: absolute; - z-index: 9999; - max-width: 300px; -} -body .ui-tooltip { - border-width: 2px; -} -/* Component containers -----------------------------------*/ -.ui-widget { - font-family: Arial,Helvetica,sans-serif; - font-size: 1em; -} -.ui-widget .ui-widget { - font-size: 1em; -} -.ui-widget input, -.ui-widget select, -.ui-widget textarea, -.ui-widget button { - font-family: Arial,Helvetica,sans-serif; - font-size: 1em; -} -.ui-widget.ui-widget-content { - border: 1px solid #c5c5c5; -} -.ui-widget-content { - border: 1px solid #dddddd; - background: #ffffff; - color: #333333; -} -.ui-widget-content a { - color: #333333; -} -.ui-widget-header { - border: 1px solid #dddddd; - background: #e9e9e9; - color: #333333; - font-weight: bold; -} -.ui-widget-header a { - color: #333333; -} - -/* Interaction states -----------------------------------*/ -.ui-state-default, -.ui-widget-content .ui-state-default, -.ui-widget-header .ui-state-default, -.ui-button, - - /* We use html here because we need a greater specificity to make sure disabled - works properly when clicked or hovered */ -html .ui-button.ui-state-disabled:hover, -html .ui-button.ui-state-disabled:active { - border: 1px solid #c5c5c5; - background: #f6f6f6; - font-weight: normal; - color: #454545; -} -.ui-state-default a, -.ui-state-default a:link, -.ui-state-default a:visited, -a.ui-button, -a:link.ui-button, -a:visited.ui-button, -.ui-button { - color: #454545; - text-decoration: none; -} -.ui-state-hover, -.ui-widget-content .ui-state-hover, -.ui-widget-header .ui-state-hover, -.ui-state-focus, -.ui-widget-content .ui-state-focus, -.ui-widget-header .ui-state-focus, -.ui-button:hover, -.ui-button:focus { - border: 1px solid #cccccc; - background: #ededed; - font-weight: normal; - color: #2b2b2b; -} -.ui-state-hover a, -.ui-state-hover a:hover, -.ui-state-hover a:link, -.ui-state-hover a:visited, -.ui-state-focus a, -.ui-state-focus a:hover, -.ui-state-focus a:link, -.ui-state-focus a:visited, -a.ui-button:hover, -a.ui-button:focus { - color: #2b2b2b; - text-decoration: none; -} - -.ui-visual-focus { - box-shadow: 0 0 3px 1px rgb(94, 158, 214); -} -.ui-state-active, -.ui-widget-content .ui-state-active, -.ui-widget-header .ui-state-active, -a.ui-button:active, -.ui-button:active, -.ui-button.ui-state-active:hover { - border: 1px solid #003eff; - background: #007fff; - font-weight: normal; - color: #ffffff; -} -.ui-icon-background, -.ui-state-active .ui-icon-background { - border: #003eff; - background-color: #ffffff; -} -.ui-state-active a, -.ui-state-active a:link, -.ui-state-active a:visited { - color: #ffffff; - text-decoration: none; -} - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, -.ui-widget-content .ui-state-highlight, -.ui-widget-header .ui-state-highlight { - border: 1px solid #dad55e; - background: #fffa90; - color: #777620; -} -.ui-state-checked { - border: 1px solid #dad55e; - background: #fffa90; -} -.ui-state-highlight a, -.ui-widget-content .ui-state-highlight a, -.ui-widget-header .ui-state-highlight a { - color: #777620; -} -.ui-state-error, -.ui-widget-content .ui-state-error, -.ui-widget-header .ui-state-error { - border: 1px solid #f1a899; - background: #fddfdf; - color: #5f3f3f; -} -.ui-state-error a, -.ui-widget-content .ui-state-error a, -.ui-widget-header .ui-state-error a { - color: #5f3f3f; -} -.ui-state-error-text, -.ui-widget-content .ui-state-error-text, -.ui-widget-header .ui-state-error-text { - color: #5f3f3f; -} -.ui-priority-primary, -.ui-widget-content .ui-priority-primary, -.ui-widget-header .ui-priority-primary { - font-weight: bold; -} -.ui-priority-secondary, -.ui-widget-content .ui-priority-secondary, -.ui-widget-header .ui-priority-secondary { - opacity: .7; - filter:Alpha(Opacity=70); /* support: IE8 */ - font-weight: normal; -} -.ui-state-disabled, -.ui-widget-content .ui-state-disabled, -.ui-widget-header .ui-state-disabled { - opacity: .35; - filter:Alpha(Opacity=35); /* support: IE8 */ - background-image: none; -} -.ui-state-disabled .ui-icon { - filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ -} - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { - width: 16px; - height: 16px; -} -.ui-icon, -.ui-widget-content .ui-icon { - background-image: url("images/ui-icons_444444_256x240.png"); -} -.ui-widget-header .ui-icon { - background-image: url("images/ui-icons_444444_256x240.png"); -} -.ui-state-hover .ui-icon, -.ui-state-focus .ui-icon, -.ui-button:hover .ui-icon, -.ui-button:focus .ui-icon { - background-image: url("images/ui-icons_555555_256x240.png"); -} -.ui-state-active .ui-icon, -.ui-button:active .ui-icon { - background-image: url("images/ui-icons_ffffff_256x240.png"); -} -.ui-state-highlight .ui-icon, -.ui-button .ui-state-highlight.ui-icon { - background-image: url("images/ui-icons_777620_256x240.png"); -} -.ui-state-error .ui-icon, -.ui-state-error-text .ui-icon { - background-image: url("images/ui-icons_cc0000_256x240.png"); -} -.ui-button .ui-icon { - background-image: url("images/ui-icons_777777_256x240.png"); -} - -/* positioning */ -.ui-icon-blank { background-position: 16px 16px; } -.ui-icon-caret-1-n { background-position: 0 0; } -.ui-icon-caret-1-ne { background-position: -16px 0; } -.ui-icon-caret-1-e { background-position: -32px 0; } -.ui-icon-caret-1-se { background-position: -48px 0; } -.ui-icon-caret-1-s { background-position: -65px 0; } -.ui-icon-caret-1-sw { background-position: -80px 0; } -.ui-icon-caret-1-w { background-position: -96px 0; } -.ui-icon-caret-1-nw { background-position: -112px 0; } -.ui-icon-caret-2-n-s { background-position: -128px 0; } -.ui-icon-caret-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -65px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -65px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 1px -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-on { background-position: -96px -144px; } -.ui-icon-radio-off { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-all, -.ui-corner-top, -.ui-corner-left, -.ui-corner-tl { - border-top-left-radius: 3px; -} -.ui-corner-all, -.ui-corner-top, -.ui-corner-right, -.ui-corner-tr { - border-top-right-radius: 3px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-left, -.ui-corner-bl { - border-bottom-left-radius: 3px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-right, -.ui-corner-br { - border-bottom-right-radius: 3px; -} - -/* Overlays */ -.ui-widget-overlay { - background: #aaaaaa; - opacity: .3; - filter: Alpha(Opacity=30); /* support: IE8 */ -} -.ui-widget-shadow { - -webkit-box-shadow: 0px 0px 5px #666666; - box-shadow: 0px 0px 5px #666666; -} diff --git a/includes/common/class-enqueue.php b/includes/common/class-enqueue.php index 32180349..d590ef31 100644 --- a/includes/common/class-enqueue.php +++ b/includes/common/class-enqueue.php @@ -12,18 +12,18 @@ if ( ! defined( 'ABSPATH' ) ) { class Enqueue { /** - * @var string scripts' Standard or Minified versions + * @var string scripts' Standard or Minified versions. * * @since 2.7.0 */ - public $suffix; + public $suffix = ''; /** - * @var array URLs for easy using + * @var array URLs for easy using. * * @since 2.7.0 */ - public $urls; + public $urls = array(); /** * Enqueue constructor. From f81c2865344e062ee95c48701e36002a7692815d Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Fri, 15 Sep 2023 11:52:24 +0300 Subject: [PATCH 20/81] - changed get assets URLs function to public static; - changed get_suffix() function to public static; --- includes/admin/class-enqueue.php | 54 +++++++++++++---------------- includes/common/class-enqueue.php | 37 ++++++++++++-------- includes/frontend/class-enqueue.php | 32 ++++++++--------- 3 files changed, 63 insertions(+), 60 deletions(-) diff --git a/includes/admin/class-enqueue.php b/includes/admin/class-enqueue.php index e7ce6786..b977cbb2 100644 --- a/includes/admin/class-enqueue.php +++ b/includes/admin/class-enqueue.php @@ -37,12 +37,6 @@ final class Enqueue extends \um\common\Enqueue { public $front_css_baseurl; - /** - * @var string - */ - public $suffix; - - /** * @var bool */ @@ -107,10 +101,10 @@ final class Enqueue extends \um\common\Enqueue { wp_register_style( 'um_account', UM_URL . 'assets/css/um-account.css', array(), UM_VERSION ); wp_register_style( 'um_default_css', UM_URL . 'assets/css/um-old-default.css', array(), UM_VERSION ); wp_register_style( 'um_fonticons_fa', UM_URL . 'assets/css/um-fonticons-fa.css', array(), UM_VERSION ); - wp_register_style( 'select2', UM_URL . 'assets/css/select2/select2' . $this->suffix . '.css', array(), UM_VERSION ); + wp_register_style( 'select2', UM_URL . 'assets/css/select2/select2' . self::get_suffix() . '.css', array(), UM_VERSION ); wp_register_style( 'um_fonticons_ii', UM_URL . 'assets/css/um-fonticons-ii.css', array(), UM_VERSION ); - wp_register_script( 'um_admin_blocks_shortcodes', UM_URL . 'assets/js/um-blocks' . $this->suffix . '.js', array( 'wp-i18n', 'wp-blocks', 'wp-components' ), UM_VERSION, true ); + wp_register_script( 'um_admin_blocks_shortcodes', UM_URL . 'assets/js/um-blocks' . self::get_suffix() . '.js', array( 'wp-i18n', 'wp-blocks', 'wp-components' ), UM_VERSION, true ); wp_set_script_translations( 'um_admin_blocks_shortcodes', 'ultimate-member' ); if ( ! empty( UM()->account()->get_tab_fields( 'notifications', array() ) ) ) { @@ -146,12 +140,12 @@ final class Enqueue extends \um\common\Enqueue { wp_enqueue_script( 'um_admin_blocks_shortcodes' ); - wp_register_script( 'select2', UM_URL . 'assets/js/select2/select2.full' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry' ), UM_VERSION, true ); + wp_register_script( 'select2', UM_URL . 'assets/js/select2/select2.full' . self::get_suffix() . '.js', array( 'jquery', 'jquery-masonry' ), UM_VERSION, true ); wp_register_script( 'um_datetime', UM_URL . 'assets/js/pickadate/picker.js', array( 'jquery' ), UM_VERSION, true ); wp_register_script( 'um_datetime_date', UM_URL . 'assets/js/pickadate/picker.date.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); wp_register_script( 'um_datetime_time', UM_URL . 'assets/js/pickadate/picker.time.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); - wp_register_script( 'um_conditional', UM_URL . 'assets/js/um-conditional' . $this->suffix . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); - wp_register_script( 'um_scripts', UM_URL . 'assets/js/um-scripts' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', 'select2' ), UM_VERSION, true ); + wp_register_script( 'um_conditional', UM_URL . 'assets/js/um-conditional' . self::get_suffix() . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); + wp_register_script( 'um_scripts', UM_URL . 'assets/js/um-scripts' . self::get_suffix() . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', 'select2' ), UM_VERSION, true ); $max_upload_size = wp_max_upload_size(); if ( ! $max_upload_size ) { $max_upload_size = 0; @@ -166,14 +160,14 @@ final class Enqueue extends \um\common\Enqueue { ); wp_localize_script( 'um_scripts', 'um_scripts', $localize_data ); - wp_register_script( 'um_dropdown', UM_URL . 'assets/js/dropdown' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_members', UM_URL . 'assets/js/um-members' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'jquery-ui-slider', 'um_dropdown', 'wp-hooks', 'jquery-masonry', 'um_scripts' ), UM_VERSION, true ); + wp_register_script( 'um_dropdown', UM_URL . 'assets/js/dropdown' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_members', UM_URL . 'assets/js/um-members' . self::get_suffix() . '.js', array( 'jquery', 'wp-util', 'jquery-ui-slider', 'um_dropdown', 'wp-hooks', 'jquery-masonry', 'um_scripts' ), UM_VERSION, true ); - wp_register_script( 'um_account', UM_URL . 'assets/js/um-account' . $this->suffix . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); - wp_register_script( 'um_scrollbar', UM_URL . 'assets/js/simplebar' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_crop', UM_URL . 'assets/js/um-crop' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_functions', UM_URL . 'assets/js/um-functions' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry', 'wp-util', 'um_scrollbar' ), UM_VERSION, true ); - wp_register_script( 'um_responsive', UM_URL . 'assets/js/um-responsive' . $this->suffix . '.js', array( 'jquery', 'um_functions', 'um_crop' ), UM_VERSION, true ); + wp_register_script( 'um_account', UM_URL . 'assets/js/um-account' . self::get_suffix() . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); + wp_register_script( 'um_scrollbar', UM_URL . 'assets/js/simplebar' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_crop', UM_URL . 'assets/js/um-crop' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_functions', UM_URL . 'assets/js/um-functions' . self::get_suffix() . '.js', array( 'jquery', 'jquery-masonry', 'wp-util', 'um_scrollbar' ), UM_VERSION, true ); + wp_register_script( 'um_responsive', UM_URL . 'assets/js/um-responsive' . self::get_suffix() . '.js', array( 'jquery', 'um_functions', 'um_crop' ), UM_VERSION, true ); // render blocks wp_enqueue_script( 'um_datetime' ); @@ -235,12 +229,12 @@ final class Enqueue extends \um\common\Enqueue { wp_deregister_script( 'select2' ); } - wp_register_script( 'select2', $this->front_js_baseurl . 'select2/select2.full' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry' ), '4.0.13', true ); - wp_register_script( 'um_jquery_form', $this->front_js_baseurl . 'um-jquery-form' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'select2', $this->front_js_baseurl . 'select2/select2.full' . self::get_suffix() . '.js', array( 'jquery', 'jquery-masonry' ), '4.0.13', true ); + wp_register_script( 'um_jquery_form', $this->front_js_baseurl . 'um-jquery-form' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); wp_register_script( 'um_fileupload', $this->front_js_baseurl . 'um-fileupload.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_crop', $this->front_js_baseurl . 'um-crop' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_tipsy', $this->front_js_baseurl . 'um-tipsy' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_functions', $this->front_js_baseurl . 'um-functions' . $this->suffix . '.js', array( 'jquery', 'um_tipsy', 'um_scrollbar' ), UM_VERSION, true ); + wp_register_script( 'um_crop', $this->front_js_baseurl . 'um-crop' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_tipsy', $this->front_js_baseurl . 'um-tipsy' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_functions', $this->front_js_baseurl . 'um-functions' . self::get_suffix() . '.js', array( 'jquery', 'um_tipsy', 'um_scrollbar' ), UM_VERSION, true ); wp_register_script( 'um_datetime', $this->front_js_baseurl . 'pickadate/picker.js', array( 'jquery' ), UM_VERSION, true ); wp_register_script( 'um_datetime_date', $this->front_js_baseurl . 'pickadate/picker.date.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); @@ -256,11 +250,11 @@ final class Enqueue extends \um\common\Enqueue { } } - wp_register_script( 'um_scripts', $this->front_js_baseurl . 'um-scripts' . $this->suffix . '.js', array( 'um_functions', 'um_crop', 'um_raty', 'select2', 'um_jquery_form', 'um_fileupload', 'um_datetime', 'um_datetime_date', 'um_datetime_time'/*, 'um_datetime_legacy'*/ ), UM_VERSION, true ); - wp_register_script( 'um_responsive', $this->front_js_baseurl . 'um-responsive' . $this->suffix . '.js', array( 'um_scripts' ), UM_VERSION, true ); - wp_register_script( 'um_modal', $this->front_js_baseurl . 'um-modal' . $this->suffix . '.js', array( 'um_responsive' ), UM_VERSION, true ); + wp_register_script( 'um_scripts', $this->front_js_baseurl . 'um-scripts' . self::get_suffix() . '.js', array( 'um_functions', 'um_crop', 'um_raty', 'select2', 'um_jquery_form', 'um_fileupload', 'um_datetime', 'um_datetime_date', 'um_datetime_time'/*, 'um_datetime_legacy'*/ ), UM_VERSION, true ); + wp_register_script( 'um_responsive', $this->front_js_baseurl . 'um-responsive' . self::get_suffix() . '.js', array( 'um_scripts' ), UM_VERSION, true ); + wp_register_script( 'um_modal', $this->front_js_baseurl . 'um-modal' . self::get_suffix() . '.js', array( 'um_responsive' ), UM_VERSION, true ); - wp_register_style( 'select2', $this->front_css_baseurl . 'select2/select2' . $this->suffix . '.css', array(), '4.0.13' ); + wp_register_style( 'select2', $this->front_css_baseurl . 'select2/select2' . self::get_suffix() . '.css', array(), '4.0.13' ); wp_register_style( 'um_datetime', $this->front_css_baseurl . 'pickadate/default.css', array(), UM_VERSION ); wp_register_style( 'um_datetime_date', $this->front_css_baseurl . 'pickadate/default.date.css', array( 'um_datetime' ), UM_VERSION ); wp_register_style( 'um_datetime_time', $this->front_css_baseurl . 'pickadate/default.time.css', array( 'um_datetime' ), ultimatemember_version ); @@ -351,8 +345,8 @@ final class Enqueue extends \um\common\Enqueue { wp_deregister_script( 'select2' ); } - wp_register_script( 'select2', $this->front_js_baseurl . 'select2/select2.full' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry' ), '4.0.13', true ); - wp_register_style( 'select2', $this->front_css_baseurl . 'select2/select2' . $this->suffix . '.css', array(), '4.0.13' ); + wp_register_script( 'select2', $this->front_js_baseurl . 'select2/select2.full' . self::get_suffix() . '.js', array( 'jquery', 'jquery-masonry' ), '4.0.13', true ); + wp_register_style( 'select2', $this->front_css_baseurl . 'select2/select2' . self::get_suffix() . '.css', array(), '4.0.13' ); wp_register_style( 'um_admin_forms', $this->css_url . 'um-admin-forms.css', array( 'wp-color-picker', 'um_ui', 'select2' ), UM_VERSION ); wp_enqueue_style( 'um_admin_forms' ); @@ -690,7 +684,7 @@ final class Enqueue extends \um\common\Enqueue { UM()->enqueue()->load_modal(); UM()->enqueue()->load_responsive(); - wp_register_script( 'um_raty', UM_URL . 'assets/js/um-raty' . UM()->enqueue()->suffix . '.js', array( 'jquery', 'wp-i18n' ), ultimatemember_version, true ); + wp_register_script( 'um_raty', UM_URL . 'assets/js/um-raty' . self::get_suffix() . '.js', array( 'jquery', 'wp-i18n' ), ultimatemember_version, true ); wp_register_style( 'um_raty', UM_URL . 'assets/css/um-raty.css', array(), ultimatemember_version ); wp_register_style( 'um_default_css', UM_URL . 'assets/css/um-old-default.css', '', ultimatemember_version, 'all' ); diff --git a/includes/common/class-enqueue.php b/includes/common/class-enqueue.php index d590ef31..c16477eb 100644 --- a/includes/common/class-enqueue.php +++ b/includes/common/class-enqueue.php @@ -16,14 +16,18 @@ class Enqueue { * * @since 2.7.0 */ - public $suffix = ''; + public static $suffix = ''; /** * @var array URLs for easy using. * * @since 2.7.0 */ - public $urls = array(); + public static $urls = array( + 'js' => UM_URL . 'assets/js/', + 'css' => UM_URL . 'assets/css/', + 'libs' => UM_URL . 'assets/libs/', + ); /** * Enqueue constructor. @@ -31,27 +35,32 @@ class Enqueue { * @since 2.7.0 */ public function __construct() { - add_action( 'um_core_loaded', array( $this, 'init_variables' ) ); - add_action( 'admin_enqueue_scripts', array( &$this, 'common_libs' ), 9 ); add_action( 'wp_enqueue_scripts', array( &$this, 'common_libs' ), 9 ); } + public static function get_url( $type ) { + if ( ! in_array( $type, array( 'js', 'css', 'libs' ), true ) ) { + return ''; + } + + return self::$urls[ $type ]; + } + + public static function get_suffix() { + if ( empty( self::$suffix ) ) { + self::$suffix = ( ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) || ( defined( 'UM_SCRIPT_DEBUG' ) && UM_SCRIPT_DEBUG ) ) ? '' : '.min'; + } + return self::$suffix; + } + /** - * Init variables for enqueue scripts. + * Register jQuery-UI styles. * * @since 2.7.0 */ - public function init_variables() { - $this->suffix = ( ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) || ( defined( 'UM_SCRIPT_DEBUG' ) && UM_SCRIPT_DEBUG ) ) ? '' : '.min'; - - $this->urls['js'] = UM_URL . 'assets/js/'; - $this->urls['css'] = UM_URL . 'assets/css/'; - $this->urls['libs'] = UM_URL . 'assets/libs/'; - } - protected function register_jquery_ui() { - wp_register_style( 'um_ui', $this->urls['libs'] . 'jquery-ui/jquery-ui' . $this->suffix . '.css', array(), '1.12.1' ); + wp_register_style( 'um_ui', self::get_url( 'libs' ) . 'jquery-ui/jquery-ui' . self::get_suffix() . '.css', array(), '1.12.1' ); } /** diff --git a/includes/frontend/class-enqueue.php b/includes/frontend/class-enqueue.php index b8196d0b..5c52b421 100644 --- a/includes/frontend/class-enqueue.php +++ b/includes/frontend/class-enqueue.php @@ -85,11 +85,11 @@ final class Enqueue extends \um\common\Enqueue { wp_dequeue_script( 'select2'); wp_deregister_script('select2'); } - wp_register_script( 'select2', $this->js_baseurl . 'select2/select2.full' . $this->suffix . '.js', array( 'jquery' ), '4.0.13', true ); + wp_register_script( 'select2', $this->js_baseurl . 'select2/select2.full' . self::get_suffix() . '.js', array( 'jquery' ), '4.0.13', true ); - wp_register_script( 'um_scrollbar', $this->js_baseurl . 'simplebar' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_scrollbar', $this->js_baseurl . 'simplebar' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_jquery_form', $this->js_baseurl . 'um-jquery-form' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_jquery_form', $this->js_baseurl . 'um-jquery-form' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); wp_register_script( 'um_fileupload', $this->js_baseurl . 'um-fileupload.js', array( 'jquery', 'um_jquery_form' ), UM_VERSION, true ); wp_register_script( 'um_datetime', $this->js_baseurl . 'pickadate/picker.js', array( 'jquery' ), UM_VERSION, true ); @@ -106,18 +106,18 @@ final class Enqueue extends \um\common\Enqueue { } } - wp_register_script( 'um_tipsy', $this->js_baseurl . 'um-tipsy' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_raty', $this->js_baseurl . 'um-raty' . $this->suffix . '.js', array( 'jquery', 'wp-i18n' ), UM_VERSION, true ); - wp_register_script( 'um_crop', $this->js_baseurl . 'um-crop' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_tipsy', $this->js_baseurl . 'um-tipsy' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_raty', $this->js_baseurl . 'um-raty' . self::get_suffix() . '.js', array( 'jquery', 'wp-i18n' ), UM_VERSION, true ); + wp_register_script( 'um_crop', $this->js_baseurl . 'um-crop' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_modal', $this->js_baseurl . 'um-modal' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'um_crop' ), UM_VERSION, true ); + wp_register_script( 'um_modal', $this->js_baseurl . 'um-modal' . self::get_suffix() . '.js', array( 'jquery', 'wp-util', 'um_crop' ), UM_VERSION, true ); - wp_register_script('um_functions', $this->js_baseurl . 'um-functions' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry', 'wp-util', 'um_scrollbar' ), UM_VERSION, true ); - wp_register_script( 'um_responsive', $this->js_baseurl . 'um-responsive' . $this->suffix . '.js', array( 'jquery', 'um_functions', 'um_crop' ), UM_VERSION, true ); + wp_register_script('um_functions', $this->js_baseurl . 'um-functions' . self::get_suffix() . '.js', array( 'jquery', 'jquery-masonry', 'wp-util', 'um_scrollbar' ), UM_VERSION, true ); + wp_register_script( 'um_responsive', $this->js_baseurl . 'um-responsive' . self::get_suffix() . '.js', array( 'jquery', 'um_functions', 'um_crop' ), UM_VERSION, true ); - wp_register_script( 'um-gdpr', $this->js_baseurl . 'um-gdpr' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, false ); - wp_register_script('um_conditional', $this->js_baseurl . 'um-conditional' . $this->suffix . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); - wp_register_script('um_scripts', $this->js_baseurl . 'um-scripts' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', /*'um_datetime_legacy',*/ 'select2' ), UM_VERSION, true ); + wp_register_script( 'um-gdpr', $this->js_baseurl . 'um-gdpr' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, false ); + wp_register_script('um_conditional', $this->js_baseurl . 'um-conditional' . self::get_suffix() . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); + wp_register_script('um_scripts', $this->js_baseurl . 'um-scripts' . self::get_suffix() . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', /*'um_datetime_legacy',*/ 'select2' ), UM_VERSION, true ); /** * UM hook * @@ -151,13 +151,13 @@ final class Enqueue extends \um\common\Enqueue { ) ); wp_localize_script( 'um_scripts', 'um_scripts', $localize_data ); - wp_register_script('um_dropdown', $this->js_baseurl . 'dropdown' . $this->suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script('um_dropdown', $this->js_baseurl . 'dropdown' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script('um_members', $this->js_baseurl . 'um-members' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'jquery-ui-slider', 'um_dropdown', 'wp-hooks', 'jquery-masonry', 'um_scripts' ), UM_VERSION, true ); - wp_register_script('um_profile', $this->js_baseurl . 'um-profile' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'wp-i18n' ), UM_VERSION, true ); + wp_register_script('um_members', $this->js_baseurl . 'um-members' . self::get_suffix() . '.js', array( 'jquery', 'wp-util', 'jquery-ui-slider', 'um_dropdown', 'wp-hooks', 'jquery-masonry', 'um_scripts' ), UM_VERSION, true ); + wp_register_script('um_profile', $this->js_baseurl . 'um-profile' . self::get_suffix() . '.js', array( 'jquery', 'wp-util', 'wp-i18n' ), UM_VERSION, true ); $account_deps = apply_filters( 'um_account_scripts_dependencies', array( 'jquery', 'wp-hooks' ) ); - wp_register_script('um_account', $this->js_baseurl . 'um-account' . $this->suffix . '.js', $account_deps, UM_VERSION, true ); + wp_register_script('um_account', $this->js_baseurl . 'um-account' . self::get_suffix() . '.js', $account_deps, UM_VERSION, true ); wp_register_script( 'um_gchart', 'https://www.google.com/jsapi', array(), UM_VERSION, true ); } From b8aec5da1055e1fa24cb8a0186cf63aa57f69007 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Fri, 15 Sep 2023 12:30:05 +0300 Subject: [PATCH 21/81] - decrease a count of running UM()->enqueue()::get_suffix(); --- includes/admin/class-enqueue.php | 53 ++++++++++++++++------------- includes/frontend/class-enqueue.php | 33 +++++++++--------- 2 files changed, 46 insertions(+), 40 deletions(-) diff --git a/includes/admin/class-enqueue.php b/includes/admin/class-enqueue.php index b977cbb2..c7b71e36 100644 --- a/includes/admin/class-enqueue.php +++ b/includes/admin/class-enqueue.php @@ -89,6 +89,7 @@ final class Enqueue extends \um\common\Enqueue { * Enqueue Gutenberg Block Editor assets */ public function block_editor() { + $suffix = self::get_suffix(); $this->register_jquery_ui(); wp_register_style( 'um_members', UM_URL . 'assets/css/um-members.css', array( 'um_ui' ), UM_VERSION ); if ( is_rtl() ) { @@ -101,10 +102,10 @@ final class Enqueue extends \um\common\Enqueue { wp_register_style( 'um_account', UM_URL . 'assets/css/um-account.css', array(), UM_VERSION ); wp_register_style( 'um_default_css', UM_URL . 'assets/css/um-old-default.css', array(), UM_VERSION ); wp_register_style( 'um_fonticons_fa', UM_URL . 'assets/css/um-fonticons-fa.css', array(), UM_VERSION ); - wp_register_style( 'select2', UM_URL . 'assets/css/select2/select2' . self::get_suffix() . '.css', array(), UM_VERSION ); + wp_register_style( 'select2', UM_URL . 'assets/css/select2/select2' . $suffix . '.css', array(), UM_VERSION ); wp_register_style( 'um_fonticons_ii', UM_URL . 'assets/css/um-fonticons-ii.css', array(), UM_VERSION ); - wp_register_script( 'um_admin_blocks_shortcodes', UM_URL . 'assets/js/um-blocks' . self::get_suffix() . '.js', array( 'wp-i18n', 'wp-blocks', 'wp-components' ), UM_VERSION, true ); + wp_register_script( 'um_admin_blocks_shortcodes', UM_URL . 'assets/js/um-blocks' . $suffix . '.js', array( 'wp-i18n', 'wp-blocks', 'wp-components' ), UM_VERSION, true ); wp_set_script_translations( 'um_admin_blocks_shortcodes', 'ultimate-member' ); if ( ! empty( UM()->account()->get_tab_fields( 'notifications', array() ) ) ) { @@ -140,12 +141,12 @@ final class Enqueue extends \um\common\Enqueue { wp_enqueue_script( 'um_admin_blocks_shortcodes' ); - wp_register_script( 'select2', UM_URL . 'assets/js/select2/select2.full' . self::get_suffix() . '.js', array( 'jquery', 'jquery-masonry' ), UM_VERSION, true ); + wp_register_script( 'select2', UM_URL . 'assets/js/select2/select2.full' . $suffix . '.js', array( 'jquery', 'jquery-masonry' ), UM_VERSION, true ); wp_register_script( 'um_datetime', UM_URL . 'assets/js/pickadate/picker.js', array( 'jquery' ), UM_VERSION, true ); wp_register_script( 'um_datetime_date', UM_URL . 'assets/js/pickadate/picker.date.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); wp_register_script( 'um_datetime_time', UM_URL . 'assets/js/pickadate/picker.time.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); - wp_register_script( 'um_conditional', UM_URL . 'assets/js/um-conditional' . self::get_suffix() . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); - wp_register_script( 'um_scripts', UM_URL . 'assets/js/um-scripts' . self::get_suffix() . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', 'select2' ), UM_VERSION, true ); + wp_register_script( 'um_conditional', UM_URL . 'assets/js/um-conditional' . $suffix . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); + wp_register_script( 'um_scripts', UM_URL . 'assets/js/um-scripts' . $suffix . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', 'select2' ), UM_VERSION, true ); $max_upload_size = wp_max_upload_size(); if ( ! $max_upload_size ) { $max_upload_size = 0; @@ -160,14 +161,14 @@ final class Enqueue extends \um\common\Enqueue { ); wp_localize_script( 'um_scripts', 'um_scripts', $localize_data ); - wp_register_script( 'um_dropdown', UM_URL . 'assets/js/dropdown' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_members', UM_URL . 'assets/js/um-members' . self::get_suffix() . '.js', array( 'jquery', 'wp-util', 'jquery-ui-slider', 'um_dropdown', 'wp-hooks', 'jquery-masonry', 'um_scripts' ), UM_VERSION, true ); + wp_register_script( 'um_dropdown', UM_URL . 'assets/js/dropdown' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_members', UM_URL . 'assets/js/um-members' . $suffix . '.js', array( 'jquery', 'wp-util', 'jquery-ui-slider', 'um_dropdown', 'wp-hooks', 'jquery-masonry', 'um_scripts' ), UM_VERSION, true ); - wp_register_script( 'um_account', UM_URL . 'assets/js/um-account' . self::get_suffix() . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); - wp_register_script( 'um_scrollbar', UM_URL . 'assets/js/simplebar' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_crop', UM_URL . 'assets/js/um-crop' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_functions', UM_URL . 'assets/js/um-functions' . self::get_suffix() . '.js', array( 'jquery', 'jquery-masonry', 'wp-util', 'um_scrollbar' ), UM_VERSION, true ); - wp_register_script( 'um_responsive', UM_URL . 'assets/js/um-responsive' . self::get_suffix() . '.js', array( 'jquery', 'um_functions', 'um_crop' ), UM_VERSION, true ); + wp_register_script( 'um_account', UM_URL . 'assets/js/um-account' . $suffix . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); + wp_register_script( 'um_scrollbar', UM_URL . 'assets/js/simplebar' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_crop', UM_URL . 'assets/js/um-crop' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_functions', UM_URL . 'assets/js/um-functions' . $suffix . '.js', array( 'jquery', 'jquery-masonry', 'wp-util', 'um_scrollbar' ), UM_VERSION, true ); + wp_register_script( 'um_responsive', UM_URL . 'assets/js/um-responsive' . $suffix . '.js', array( 'jquery', 'um_functions', 'um_crop' ), UM_VERSION, true ); // render blocks wp_enqueue_script( 'um_datetime' ); @@ -220,6 +221,8 @@ final class Enqueue extends \um\common\Enqueue { * */ public function enqueue_frontend_preview_assets() { + $suffix = self::get_suffix(); + //scripts for FRONTEND PREVIEW if ( class_exists( 'WooCommerce' ) ) { wp_dequeue_style( 'select2' ); @@ -229,12 +232,12 @@ final class Enqueue extends \um\common\Enqueue { wp_deregister_script( 'select2' ); } - wp_register_script( 'select2', $this->front_js_baseurl . 'select2/select2.full' . self::get_suffix() . '.js', array( 'jquery', 'jquery-masonry' ), '4.0.13', true ); - wp_register_script( 'um_jquery_form', $this->front_js_baseurl . 'um-jquery-form' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'select2', $this->front_js_baseurl . 'select2/select2.full' . $suffix . '.js', array( 'jquery', 'jquery-masonry' ), '4.0.13', true ); + wp_register_script( 'um_jquery_form', $this->front_js_baseurl . 'um-jquery-form' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); wp_register_script( 'um_fileupload', $this->front_js_baseurl . 'um-fileupload.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_crop', $this->front_js_baseurl . 'um-crop' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_tipsy', $this->front_js_baseurl . 'um-tipsy' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_functions', $this->front_js_baseurl . 'um-functions' . self::get_suffix() . '.js', array( 'jquery', 'um_tipsy', 'um_scrollbar' ), UM_VERSION, true ); + wp_register_script( 'um_crop', $this->front_js_baseurl . 'um-crop' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_tipsy', $this->front_js_baseurl . 'um-tipsy' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_functions', $this->front_js_baseurl . 'um-functions' . $suffix . '.js', array( 'jquery', 'um_tipsy', 'um_scrollbar' ), UM_VERSION, true ); wp_register_script( 'um_datetime', $this->front_js_baseurl . 'pickadate/picker.js', array( 'jquery' ), UM_VERSION, true ); wp_register_script( 'um_datetime_date', $this->front_js_baseurl . 'pickadate/picker.date.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); @@ -250,11 +253,11 @@ final class Enqueue extends \um\common\Enqueue { } } - wp_register_script( 'um_scripts', $this->front_js_baseurl . 'um-scripts' . self::get_suffix() . '.js', array( 'um_functions', 'um_crop', 'um_raty', 'select2', 'um_jquery_form', 'um_fileupload', 'um_datetime', 'um_datetime_date', 'um_datetime_time'/*, 'um_datetime_legacy'*/ ), UM_VERSION, true ); - wp_register_script( 'um_responsive', $this->front_js_baseurl . 'um-responsive' . self::get_suffix() . '.js', array( 'um_scripts' ), UM_VERSION, true ); - wp_register_script( 'um_modal', $this->front_js_baseurl . 'um-modal' . self::get_suffix() . '.js', array( 'um_responsive' ), UM_VERSION, true ); + wp_register_script( 'um_scripts', $this->front_js_baseurl . 'um-scripts' . $suffix . '.js', array( 'um_functions', 'um_crop', 'um_raty', 'select2', 'um_jquery_form', 'um_fileupload', 'um_datetime', 'um_datetime_date', 'um_datetime_time'/*, 'um_datetime_legacy'*/ ), UM_VERSION, true ); + wp_register_script( 'um_responsive', $this->front_js_baseurl . 'um-responsive' . $suffix . '.js', array( 'um_scripts' ), UM_VERSION, true ); + wp_register_script( 'um_modal', $this->front_js_baseurl . 'um-modal' . $suffix . '.js', array( 'um_responsive' ), UM_VERSION, true ); - wp_register_style( 'select2', $this->front_css_baseurl . 'select2/select2' . self::get_suffix() . '.css', array(), '4.0.13' ); + wp_register_style( 'select2', $this->front_css_baseurl . 'select2/select2' . $suffix . '.css', array(), '4.0.13' ); wp_register_style( 'um_datetime', $this->front_css_baseurl . 'pickadate/default.css', array(), UM_VERSION ); wp_register_style( 'um_datetime_date', $this->front_css_baseurl . 'pickadate/default.date.css', array( 'um_datetime' ), UM_VERSION ); wp_register_style( 'um_datetime_time', $this->front_css_baseurl . 'pickadate/default.time.css', array( 'um_datetime' ), ultimatemember_version ); @@ -337,6 +340,7 @@ final class Enqueue extends \um\common\Enqueue { * Load Forms */ public function load_forms() { + $suffix = self::get_suffix(); if ( class_exists( 'WooCommerce' ) ) { wp_dequeue_style( 'select2' ); wp_deregister_style( 'select2' ); @@ -345,8 +349,8 @@ final class Enqueue extends \um\common\Enqueue { wp_deregister_script( 'select2' ); } - wp_register_script( 'select2', $this->front_js_baseurl . 'select2/select2.full' . self::get_suffix() . '.js', array( 'jquery', 'jquery-masonry' ), '4.0.13', true ); - wp_register_style( 'select2', $this->front_css_baseurl . 'select2/select2' . self::get_suffix() . '.css', array(), '4.0.13' ); + wp_register_script( 'select2', $this->front_js_baseurl . 'select2/select2.full' . $suffix . '.js', array( 'jquery', 'jquery-masonry' ), '4.0.13', true ); + wp_register_style( 'select2', $this->front_css_baseurl . 'select2/select2' . $suffix . '.css', array(), '4.0.13' ); wp_register_style( 'um_admin_forms', $this->css_url . 'um-admin-forms.css', array( 'wp-color-picker', 'um_ui', 'select2' ), UM_VERSION ); wp_enqueue_style( 'um_admin_forms' ); @@ -650,6 +654,7 @@ final class Enqueue extends \um\common\Enqueue { */ public function admin_enqueue_scripts() { if ( UM()->admin()->is_um_screen() ) { + $suffix = self::get_suffix(); /*if ( get_post_type() != 'shop_order' ) { UM()->enqueue()->wp_enqueue_scripts(); @@ -684,7 +689,7 @@ final class Enqueue extends \um\common\Enqueue { UM()->enqueue()->load_modal(); UM()->enqueue()->load_responsive(); - wp_register_script( 'um_raty', UM_URL . 'assets/js/um-raty' . self::get_suffix() . '.js', array( 'jquery', 'wp-i18n' ), ultimatemember_version, true ); + wp_register_script( 'um_raty', UM_URL . 'assets/js/um-raty' . $suffix . '.js', array( 'jquery', 'wp-i18n' ), ultimatemember_version, true ); wp_register_style( 'um_raty', UM_URL . 'assets/css/um-raty.css', array(), ultimatemember_version ); wp_register_style( 'um_default_css', UM_URL . 'assets/css/um-old-default.css', '', ultimatemember_version, 'all' ); diff --git a/includes/frontend/class-enqueue.php b/includes/frontend/class-enqueue.php index 5c52b421..5c2f6b00 100644 --- a/includes/frontend/class-enqueue.php +++ b/includes/frontend/class-enqueue.php @@ -77,6 +77,7 @@ final class Enqueue extends \um\common\Enqueue { * */ function register_scripts() { + $suffix = self::get_suffix(); $dequeue_select2 = apply_filters( 'um_dequeue_select2_scripts', false ); if ( class_exists( 'WooCommerce' ) || $dequeue_select2 ) { wp_dequeue_style( 'select2' ); @@ -85,11 +86,11 @@ final class Enqueue extends \um\common\Enqueue { wp_dequeue_script( 'select2'); wp_deregister_script('select2'); } - wp_register_script( 'select2', $this->js_baseurl . 'select2/select2.full' . self::get_suffix() . '.js', array( 'jquery' ), '4.0.13', true ); + wp_register_script( 'select2', $this->js_baseurl . 'select2/select2.full' . $suffix . '.js', array( 'jquery' ), '4.0.13', true ); - wp_register_script( 'um_scrollbar', $this->js_baseurl . 'simplebar' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_scrollbar', $this->js_baseurl . 'simplebar' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_jquery_form', $this->js_baseurl . 'um-jquery-form' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_jquery_form', $this->js_baseurl . 'um-jquery-form' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); wp_register_script( 'um_fileupload', $this->js_baseurl . 'um-fileupload.js', array( 'jquery', 'um_jquery_form' ), UM_VERSION, true ); wp_register_script( 'um_datetime', $this->js_baseurl . 'pickadate/picker.js', array( 'jquery' ), UM_VERSION, true ); @@ -106,18 +107,18 @@ final class Enqueue extends \um\common\Enqueue { } } - wp_register_script( 'um_tipsy', $this->js_baseurl . 'um-tipsy' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_raty', $this->js_baseurl . 'um-raty' . self::get_suffix() . '.js', array( 'jquery', 'wp-i18n' ), UM_VERSION, true ); - wp_register_script( 'um_crop', $this->js_baseurl . 'um-crop' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_tipsy', $this->js_baseurl . 'um-tipsy' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script( 'um_raty', $this->js_baseurl . 'um-raty' . $suffix . '.js', array( 'jquery', 'wp-i18n' ), UM_VERSION, true ); + wp_register_script( 'um_crop', $this->js_baseurl . 'um-crop' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_modal', $this->js_baseurl . 'um-modal' . self::get_suffix() . '.js', array( 'jquery', 'wp-util', 'um_crop' ), UM_VERSION, true ); + wp_register_script( 'um_modal', $this->js_baseurl . 'um-modal' . $suffix . '.js', array( 'jquery', 'wp-util', 'um_crop' ), UM_VERSION, true ); - wp_register_script('um_functions', $this->js_baseurl . 'um-functions' . self::get_suffix() . '.js', array( 'jquery', 'jquery-masonry', 'wp-util', 'um_scrollbar' ), UM_VERSION, true ); - wp_register_script( 'um_responsive', $this->js_baseurl . 'um-responsive' . self::get_suffix() . '.js', array( 'jquery', 'um_functions', 'um_crop' ), UM_VERSION, true ); + wp_register_script('um_functions', $this->js_baseurl . 'um-functions' . $suffix . '.js', array( 'jquery', 'jquery-masonry', 'wp-util', 'um_scrollbar' ), UM_VERSION, true ); + wp_register_script( 'um_responsive', $this->js_baseurl . 'um-responsive' . $suffix . '.js', array( 'jquery', 'um_functions', 'um_crop' ), UM_VERSION, true ); - wp_register_script( 'um-gdpr', $this->js_baseurl . 'um-gdpr' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, false ); - wp_register_script('um_conditional', $this->js_baseurl . 'um-conditional' . self::get_suffix() . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); - wp_register_script('um_scripts', $this->js_baseurl . 'um-scripts' . self::get_suffix() . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', /*'um_datetime_legacy',*/ 'select2' ), UM_VERSION, true ); + wp_register_script( 'um-gdpr', $this->js_baseurl . 'um-gdpr' . $suffix . '.js', array( 'jquery' ), UM_VERSION, false ); + wp_register_script('um_conditional', $this->js_baseurl . 'um-conditional' . $suffix . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); + wp_register_script('um_scripts', $this->js_baseurl . 'um-scripts' . $suffix . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', /*'um_datetime_legacy',*/ 'select2' ), UM_VERSION, true ); /** * UM hook * @@ -151,13 +152,13 @@ final class Enqueue extends \um\common\Enqueue { ) ); wp_localize_script( 'um_scripts', 'um_scripts', $localize_data ); - wp_register_script('um_dropdown', $this->js_baseurl . 'dropdown' . self::get_suffix() . '.js', array( 'jquery' ), UM_VERSION, true ); + wp_register_script('um_dropdown', $this->js_baseurl . 'dropdown' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script('um_members', $this->js_baseurl . 'um-members' . self::get_suffix() . '.js', array( 'jquery', 'wp-util', 'jquery-ui-slider', 'um_dropdown', 'wp-hooks', 'jquery-masonry', 'um_scripts' ), UM_VERSION, true ); - wp_register_script('um_profile', $this->js_baseurl . 'um-profile' . self::get_suffix() . '.js', array( 'jquery', 'wp-util', 'wp-i18n' ), UM_VERSION, true ); + wp_register_script('um_members', $this->js_baseurl . 'um-members' . $suffix . '.js', array( 'jquery', 'wp-util', 'jquery-ui-slider', 'um_dropdown', 'wp-hooks', 'jquery-masonry', 'um_scripts' ), UM_VERSION, true ); + wp_register_script('um_profile', $this->js_baseurl . 'um-profile' . $suffix . '.js', array( 'jquery', 'wp-util', 'wp-i18n' ), UM_VERSION, true ); $account_deps = apply_filters( 'um_account_scripts_dependencies', array( 'jquery', 'wp-hooks' ) ); - wp_register_script('um_account', $this->js_baseurl . 'um-account' . self::get_suffix() . '.js', $account_deps, UM_VERSION, true ); + wp_register_script('um_account', $this->js_baseurl . 'um-account' . $suffix . '.js', $account_deps, UM_VERSION, true ); wp_register_script( 'um_gchart', 'https://www.google.com/jsapi', array(), UM_VERSION, true ); } From 35d84366c2539459135d93d5513e56d6cb40cfd2 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Fri, 15 Sep 2023 12:40:14 +0300 Subject: [PATCH 22/81] - changed UM()->enqueue()::get_suffix() to UM()->frontend()->enqueue()::get_suffix(); --- includes/class-init.php | 1 + 1 file changed, 1 insertion(+) diff --git a/includes/class-init.php b/includes/class-init.php index c7959316..7d3f2d79 100644 --- a/includes/class-init.php +++ b/includes/class-init.php @@ -1151,6 +1151,7 @@ if ( ! class_exists( 'UM' ) ) { * @return um\frontend\Enqueue */ public function enqueue() { + _deprecated_function( __METHOD__, '2.6.12', 'UM()->frontend()->enqueue()' ); return $this->frontend()->enqueue(); } From 543c5d1ab33987bfeb2006c73072ca58287ea9ae Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Fri, 15 Sep 2023 12:45:09 +0300 Subject: [PATCH 23/81] - updated phpdocs; --- includes/common/class-enqueue.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/includes/common/class-enqueue.php b/includes/common/class-enqueue.php index c16477eb..fdf2ff95 100644 --- a/includes/common/class-enqueue.php +++ b/includes/common/class-enqueue.php @@ -14,14 +14,14 @@ class Enqueue { /** * @var string scripts' Standard or Minified versions. * - * @since 2.7.0 + * @since 2.6.12 */ public static $suffix = ''; /** * @var array URLs for easy using. * - * @since 2.7.0 + * @since 2.6.12 */ public static $urls = array( 'js' => UM_URL . 'assets/js/', @@ -32,7 +32,7 @@ class Enqueue { /** * Enqueue constructor. * - * @since 2.7.0 + * @since 2.6.12 */ public function __construct() { add_action( 'admin_enqueue_scripts', array( &$this, 'common_libs' ), 9 ); @@ -57,7 +57,7 @@ class Enqueue { /** * Register jQuery-UI styles. * - * @since 2.7.0 + * @since 2.6.12 */ protected function register_jquery_ui() { wp_register_style( 'um_ui', self::get_url( 'libs' ) . 'jquery-ui/jquery-ui' . self::get_suffix() . '.css', array(), '1.12.1' ); @@ -66,7 +66,7 @@ class Enqueue { /** * Register common JS/CSS libraries. * - * @since 2.7.0 + * @since 2.6.12 */ public function common_libs() { $this->register_jquery_ui(); From 90de5d0d2c8706be8956d65863d70dfa59880680 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Fri, 15 Sep 2023 14:38:04 +0300 Subject: [PATCH 24/81] - changed UM()->enqueue() to UM()->frontend()->enqueue(); --- includes/admin/class-enqueue.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/includes/admin/class-enqueue.php b/includes/admin/class-enqueue.php index c7b71e36..5ca8c902 100644 --- a/includes/admin/class-enqueue.php +++ b/includes/admin/class-enqueue.php @@ -683,11 +683,11 @@ final class Enqueue extends \um\common\Enqueue { $this->load_localize_scripts(); //scripts for frontend preview - UM()->enqueue()->load_imagecrop(); - UM()->enqueue()->load_css(); - UM()->enqueue()->load_tipsy(); - UM()->enqueue()->load_modal(); - UM()->enqueue()->load_responsive(); + UM()->frontend()->enqueue()->load_imagecrop(); + UM()->frontend()->enqueue()->load_css(); + UM()->frontend()->enqueue()->load_tipsy(); + UM()->frontend()->enqueue()->load_modal(); + UM()->frontend()->enqueue()->load_responsive(); wp_register_script( 'um_raty', UM_URL . 'assets/js/um-raty' . $suffix . '.js', array( 'jquery', 'wp-i18n' ), ultimatemember_version, true ); wp_register_style( 'um_raty', UM_URL . 'assets/css/um-raty.css', array(), ultimatemember_version ); From 92be23d00c38e78e9a0b0ad19ce0575739e5c90e Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Wed, 20 Sep 2023 19:58:45 +0300 Subject: [PATCH 25/81] - changed class for enqueue tipsy and raty assets; --- assets/{css => libs/raty}/um-raty.css | 0 assets/{js => libs/raty}/um-raty.js | 0 assets/{js => libs/raty}/um-raty.min.js | 0 .../um-tipsy.css => libs/tipsy/tipsy.css} | 0 .../{js/um-tipsy.js => libs/tipsy/tipsy.js} | 0 .../tipsy/tipsy.min.js} | 0 includes/admin/class-enqueue.php | 10 +++--- includes/common/class-enqueue.php | 16 +++++---- includes/frontend/class-enqueue.php | 34 ++++++++++--------- 9 files changed, 33 insertions(+), 27 deletions(-) rename assets/{css => libs/raty}/um-raty.css (100%) rename assets/{js => libs/raty}/um-raty.js (100%) rename assets/{js => libs/raty}/um-raty.min.js (100%) rename assets/{css/um-tipsy.css => libs/tipsy/tipsy.css} (100%) rename assets/{js/um-tipsy.js => libs/tipsy/tipsy.js} (100%) rename assets/{js/um-tipsy.min.js => libs/tipsy/tipsy.min.js} (100%) diff --git a/assets/css/um-raty.css b/assets/libs/raty/um-raty.css similarity index 100% rename from assets/css/um-raty.css rename to assets/libs/raty/um-raty.css diff --git a/assets/js/um-raty.js b/assets/libs/raty/um-raty.js similarity index 100% rename from assets/js/um-raty.js rename to assets/libs/raty/um-raty.js diff --git a/assets/js/um-raty.min.js b/assets/libs/raty/um-raty.min.js similarity index 100% rename from assets/js/um-raty.min.js rename to assets/libs/raty/um-raty.min.js diff --git a/assets/css/um-tipsy.css b/assets/libs/tipsy/tipsy.css similarity index 100% rename from assets/css/um-tipsy.css rename to assets/libs/tipsy/tipsy.css diff --git a/assets/js/um-tipsy.js b/assets/libs/tipsy/tipsy.js similarity index 100% rename from assets/js/um-tipsy.js rename to assets/libs/tipsy/tipsy.js diff --git a/assets/js/um-tipsy.min.js b/assets/libs/tipsy/tipsy.min.js similarity index 100% rename from assets/js/um-tipsy.min.js rename to assets/libs/tipsy/tipsy.min.js diff --git a/includes/admin/class-enqueue.php b/includes/admin/class-enqueue.php index 5ca8c902..da02809e 100644 --- a/includes/admin/class-enqueue.php +++ b/includes/admin/class-enqueue.php @@ -236,7 +236,7 @@ final class Enqueue extends \um\common\Enqueue { wp_register_script( 'um_jquery_form', $this->front_js_baseurl . 'um-jquery-form' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); wp_register_script( 'um_fileupload', $this->front_js_baseurl . 'um-fileupload.js', array( 'jquery' ), UM_VERSION, true ); wp_register_script( 'um_crop', $this->front_js_baseurl . 'um-crop' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_tipsy', $this->front_js_baseurl . 'um-tipsy' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + //wp_register_script( 'um_tipsy', $this->front_js_baseurl . 'um-tipsy' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); wp_register_script( 'um_functions', $this->front_js_baseurl . 'um-functions' . $suffix . '.js', array( 'jquery', 'um_tipsy', 'um_scrollbar' ), UM_VERSION, true ); wp_register_script( 'um_datetime', $this->front_js_baseurl . 'pickadate/picker.js', array( 'jquery' ), UM_VERSION, true ); @@ -264,7 +264,7 @@ final class Enqueue extends \um\common\Enqueue { wp_register_style( 'um_scrollbar', $this->front_css_baseurl . 'simplebar.css', array(), ultimatemember_version ); wp_register_style( 'um_crop', $this->front_css_baseurl . 'um-crop.css', array(), ultimatemember_version ); - wp_register_style( 'um_tipsy', $this->front_css_baseurl . 'um-tipsy.css', array(), ultimatemember_version ); + //wp_register_style( 'um_tipsy', $this->front_css_baseurl . 'um-tipsy.css', array(), ultimatemember_version ); wp_register_style( 'um_responsive', $this->front_css_baseurl . 'um-responsive.css', array(), ultimatemember_version ); wp_register_style( 'um_modal', $this->front_css_baseurl . 'um-modal.css', array(), ultimatemember_version ); wp_register_style( 'um_styles', $this->front_css_baseurl . 'um-styles.css', array(), ultimatemember_version ); @@ -685,12 +685,12 @@ final class Enqueue extends \um\common\Enqueue { //scripts for frontend preview UM()->frontend()->enqueue()->load_imagecrop(); UM()->frontend()->enqueue()->load_css(); - UM()->frontend()->enqueue()->load_tipsy(); + // UM()->frontend()->enqueue()->load_tipsy(); UM()->frontend()->enqueue()->load_modal(); UM()->frontend()->enqueue()->load_responsive(); - wp_register_script( 'um_raty', UM_URL . 'assets/js/um-raty' . $suffix . '.js', array( 'jquery', 'wp-i18n' ), ultimatemember_version, true ); - wp_register_style( 'um_raty', UM_URL . 'assets/css/um-raty.css', array(), ultimatemember_version ); + //wp_register_script( 'um_raty', UM_URL . 'assets/js/um-raty' . $suffix . '.js', array( 'jquery', 'wp-i18n' ), ultimatemember_version, true ); + //wp_register_style( 'um_raty', UM_URL . 'assets/css/um-raty.css', array(), ultimatemember_version ); wp_register_style( 'um_default_css', UM_URL . 'assets/css/um-old-default.css', '', ultimatemember_version, 'all' ); wp_enqueue_style( 'um_default_css' ); diff --git a/includes/common/class-enqueue.php b/includes/common/class-enqueue.php index fdf2ff95..a429415f 100644 --- a/includes/common/class-enqueue.php +++ b/includes/common/class-enqueue.php @@ -71,9 +71,15 @@ class Enqueue { public function common_libs() { $this->register_jquery_ui(); -// wp_register_script( 'um-tipsy', $this->urls['libs'] . 'tipsy/um-tipsy' . $this->suffix . '.js', array( 'jquery' ), '1.0.0a', true ); -// wp_register_style( 'um-tipsy', $this->urls['libs'] . 'tipsy/um-tipsy' . $this->suffix . '.css', array(), '1.0.0a' ); -// + $suffix = self::get_suffix(); + + wp_register_script( 'um_tipsy', self::get_url( 'libs' ) . 'tipsy/tipsy' . $suffix . '.js', array( 'jquery' ), '1.0.0a', true ); + wp_register_style( 'um_tipsy', self::get_url( 'libs' ) . 'tipsy/tipsy' . $suffix . '.css', array(), '1.0.0a' ); + + // Raty JS for rating field-type + wp_register_script( 'um_raty', self::get_url( 'libs' ) . 'raty/um-raty' . $suffix . '.js', array( 'jquery', 'wp-i18n' ), '2.6.0', true ); + wp_register_style( 'um_raty', self::get_url( 'libs' ) . 'raty/um-raty' . $suffix . '.css', array(), '2.6.0' ); + // wp_register_script( 'um-helptip', $this->urls['libs'] . 'helptip/helptip' . $this->suffix . '.js', array( 'jquery', 'jquery-ui-tooltip' ), '1.0.0', true ); // wp_register_style( 'um-helptip', $this->urls['libs'] . 'helptip/helptip' . $this->suffix . '.css', array( 'dashicons', 'um_ui' ), '1.0.0' ); // @@ -93,9 +99,7 @@ class Enqueue { // wp_register_script( 'select2', $this->urls['libs'] . 'select2/select2.full' . $this->suffix . '.js', array( 'jquery' ), '4.0.13', true ); // wp_register_style( 'select2', $this->urls['libs'] . 'select2/select2' . $this->suffix . '.css', array(), '4.0.13' ); // -// // Raty JS for rating field-type -// wp_register_script( 'um-raty', $this->urls['libs'] . 'raty/um-raty' . $this->suffix . '.js', array( 'jquery', 'wp-i18n' ), '2.6.0', true ); -// wp_register_style( 'um-raty', $this->urls['libs'] . 'raty/um-raty' . $this->suffix . '.css', array(), '2.6.0' ); + // // // Modal // wp_register_script( 'um-modal', $this->urls['libs'] . 'modal/um-modal' . $this->suffix . '.js', array( 'jquery', 'wp-i18n', 'wp-hooks' ), UM_VERSION, true ); diff --git a/includes/frontend/class-enqueue.php b/includes/frontend/class-enqueue.php index 5c2f6b00..0384c31e 100644 --- a/includes/frontend/class-enqueue.php +++ b/includes/frontend/class-enqueue.php @@ -107,8 +107,8 @@ final class Enqueue extends \um\common\Enqueue { } } - wp_register_script( 'um_tipsy', $this->js_baseurl . 'um-tipsy' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - wp_register_script( 'um_raty', $this->js_baseurl . 'um-raty' . $suffix . '.js', array( 'jquery', 'wp-i18n' ), UM_VERSION, true ); + //wp_register_script( 'um_tipsy', $this->js_baseurl . 'um-tipsy' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); + // wp_register_script( 'um_raty', $this->js_baseurl . 'um-raty' . $suffix . '.js', array( 'jquery', 'wp-i18n' ), UM_VERSION, true ); wp_register_script( 'um_crop', $this->js_baseurl . 'um-crop' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); wp_register_script( 'um_modal', $this->js_baseurl . 'um-modal' . $suffix . '.js', array( 'jquery', 'wp-util', 'um_crop' ), UM_VERSION, true ); @@ -173,8 +173,8 @@ final class Enqueue extends \um\common\Enqueue { wp_register_style( 'um_fonticons_ii', $this->css_baseurl . 'um-fonticons-ii.css', array(), UM_VERSION ); wp_register_style( 'um_fonticons_fa', $this->css_baseurl . 'um-fonticons-fa.css', array(), UM_VERSION ); wp_register_style( 'um_crop', $this->css_baseurl . 'um-crop.css', array(), UM_VERSION ); - wp_register_style( 'um_tipsy', $this->css_baseurl . 'um-tipsy.css', array(), UM_VERSION ); - wp_register_style( 'um_raty', $this->css_baseurl . 'um-raty.css', array(), UM_VERSION ); + //wp_register_style( 'um_tipsy', $this->css_baseurl . 'um-tipsy.css', array(), UM_VERSION ); + //wp_register_style( 'um_raty', $this->css_baseurl . 'um-raty.css', array(), UM_VERSION ); wp_register_style( 'select2', $this->css_baseurl . 'select2/select2.min.css', array(), '4.0.13' ); wp_register_style( 'um_fileupload', $this->css_baseurl . 'um-fileupload.css', array(), UM_VERSION ); wp_register_style( 'um_datetime', $this->css_baseurl . 'pickadate/default.css', array(), UM_VERSION ); @@ -261,7 +261,7 @@ final class Enqueue extends \um\common\Enqueue { $this->load_datetimepicker(); - $this->load_raty(); + //$this->load_raty(); //$this->load_scrollto(); @@ -269,7 +269,7 @@ final class Enqueue extends \um\common\Enqueue { $this->load_imagecrop(); - $this->load_tipsy(); + //$this->load_tipsy(); $this->load_functions(); @@ -381,16 +381,6 @@ final class Enqueue extends \um\common\Enqueue { wp_enqueue_style('um_scrollbar'); } - - /** - * Load rating - */ - function load_raty() { - wp_enqueue_script('um_raty'); - wp_enqueue_style('um_raty'); - } - - /** * Load crop script */ @@ -402,12 +392,24 @@ final class Enqueue extends \um\common\Enqueue { /** * Load tipsy + * + * @depecated 2.6.12 */ function load_tipsy() { wp_enqueue_script( 'um_tipsy' ); wp_enqueue_style( 'um_tipsy' ); } + /** + * Load rating + * + * @depecated 2.6.12 + */ + function load_raty() { + wp_enqueue_script('um_raty'); + wp_enqueue_style('um_raty'); + } + /** * Load modal From bacf66c2b4fa7d3ea4ac70e45746e48f03e937c0 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Wed, 20 Sep 2023 21:31:50 +0300 Subject: [PATCH 26/81] - probably fix with another way for this PR #1304; --- includes/core/class-member-directory-meta.php | 33 +++---- includes/core/class-member-directory.php | 89 ++++++++++++------- 2 files changed, 75 insertions(+), 47 deletions(-) diff --git a/includes/core/class-member-directory-meta.php b/includes/core/class-member-directory-meta.php index 75378531..7de32645 100644 --- a/includes/core/class-member-directory-meta.php +++ b/includes/core/class-member-directory-meta.php @@ -587,24 +587,25 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) { } if ( ! empty( $_POST['search'] ) ) { - $search_line = trim( stripslashes( sanitize_text_field( $_POST['search'] ) ) ); + $search_line = $this->prepare_search( $_POST['search'] ); + if ( ! empty( $search_line ) ) { + $searches = array(); + foreach ( $this->core_search_fields as $field ) { + $searches[] = $wpdb->prepare( "u.{$field} LIKE %s", '%' . $search_line . '%' ); + } - $searches = array(); - foreach ( $this->core_search_fields as $field ) { - $searches[] = $wpdb->prepare( "u.{$field} LIKE %s", '%' . $search_line . '%' ); + $core_search = implode( ' OR ', $searches ); + + $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm_search ON umm_search.user_id = u.ID"; + + $additional_search = apply_filters( 'um_member_directory_meta_general_search_meta_query', '',$search_line ); + + $search_like_string = apply_filters( 'um_member_directory_meta_search_like_type', '%' . $search_line . '%', $search_line ); + + $this->where_clauses[] = $wpdb->prepare( "( umm_search.um_value = %s OR umm_search.um_value LIKE %s OR umm_search.um_value LIKE %s OR {$core_search}{$additional_search})", $search_line, $search_like_string, '%' . serialize( (string) $search_line ) . '%' ); + + $this->is_search = true; } - - $core_search = implode( ' OR ', $searches ); - - $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm_search ON umm_search.user_id = u.ID"; - - $additional_search = apply_filters( 'um_member_directory_meta_general_search_meta_query', '', stripslashes( sanitize_text_field( $_POST['search'] ) ) ); - - $search_like_string = apply_filters( 'um_member_directory_meta_search_like_type', '%' . $search_line . '%', $search_line ); - - $this->where_clauses[] = $wpdb->prepare( "( umm_search.um_value = %s OR umm_search.um_value LIKE %s OR umm_search.um_value LIKE %s OR {$core_search}{$additional_search})", $search_line, $search_like_string, '%' . serialize( (string) $search_line ) . '%' ); - - $this->is_search = true; } //filters diff --git a/includes/core/class-member-directory.php b/includes/core/class-member-directory.php index dc37cee8..3ceeb1e3 100644 --- a/includes/core/class-member-directory.php +++ b/includes/core/class-member-directory.php @@ -1614,43 +1614,72 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { return $query; } + /** + * Prepare the search line. Avoid the using mySQL statement. + * + * @param string $search + * + * @return string + */ + protected function prepare_search( $search ) { + // unslash, sanitize, trim - necessary prepare. + $search = trim( sanitize_text_field( wp_unslash( $search ) ) ); + if ( empty( $search ) ) { + return ''; + } + // Make the search line empty if it contains the mySQL query statements. + $regexp_map = array( + '/select(.*?)from/im', + '/update(.*?)set/im', + '/delete(.*?)from/im', + ); + + foreach ( $regexp_map as $regexp ) { + preg_match( $regexp, $search, $matches ); + if ( ! empty( $matches ) ) { + $search = ''; + break; + } + } + + return $search; + } /** * Handle general search line request */ - function general_search() { + public function general_search() { //general search if ( ! empty( $_POST['search'] ) ) { // complex using with change_meta_sql function + $search = $this->prepare_search( $_POST['search'] ); + if ( ! empty( $search ) ) { + $meta_query = array( + 'relation' => 'OR', + array( + 'value' => $search, + 'compare' => '=', + ), + array( + 'value' => $search, + 'compare' => 'LIKE', + ), + array( + 'value' => serialize( (string) $search ), + 'compare' => 'LIKE', + ), + ); - $search = trim( sanitize_text_field( wp_unslash( $_POST['search'] ) ) ); + $meta_query = apply_filters( 'um_member_directory_general_search_meta_query', $meta_query, $search ); - $meta_query = array( - 'relation' => 'OR', - array( - 'value' => $search, - 'compare' => '=', - ), - array( - 'value' => $search, - 'compare' => 'LIKE', - ), - array( - 'value' => serialize( (string) $search ), - 'compare' => 'LIKE', - ), - ); + $this->query_args['meta_query'][] = $meta_query; - $meta_query = apply_filters( 'um_member_directory_general_search_meta_query', $meta_query, $search ); - - $this->query_args['meta_query'][] = $meta_query; - - $this->is_search = true; + $this->is_search = true; + } } } - /** * Change mySQL meta query join attribute * for search only by UM user meta fields and WP core fields in WP Users table @@ -1662,17 +1691,16 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { * @param $primary_id_column * @param \WP_User_Query $context * - * @return mixed + * @return array */ - function change_meta_sql( $sql, $queries, $type, $primary_table, $primary_id_column, $context ) { + public function change_meta_sql( $sql, $queries, $type, $primary_table, $primary_id_column, $context ) { if ( ! empty( $_POST['search'] ) ) { - global $wpdb; - - $search = trim( sanitize_text_field( wp_unslash( $_POST['search'] ) ) ); + $search = $this->prepare_search( $_POST['search'] ); if ( ! empty( $search ) ) { + global $wpdb; - $meta_value = '%' . $wpdb->esc_like( $search ) . '%'; - $search_meta = $wpdb->prepare( '%s', $meta_value ); + $meta_value = '%' . $wpdb->esc_like( $search ) . '%'; + $search_meta = $wpdb->prepare( '%s', $meta_value ); preg_match( '~(?<=\{)(.*?)(?=\})~', $search_meta, $matches, PREG_OFFSET_CAPTURE, 0 ); @@ -1740,7 +1768,6 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { return $sql; } - /** * Handle filters request */ From c31a8dabd98b5b918255b9a070e39b0e56378603 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Thu, 21 Sep 2023 01:47:53 +0300 Subject: [PATCH 27/81] - reviewed PR #1281; --- includes/core/class-fields.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/includes/core/class-fields.php b/includes/core/class-fields.php index 5bfce945..24b54400 100644 --- a/includes/core/class-fields.php +++ b/includes/core/class-fields.php @@ -111,32 +111,32 @@ if ( ! class_exists( 'um\core\Fields' ) ) { builtin()->get_all_user_fields(); foreach ( $fields as $field => $args ) { - if ( isset( $args['advanced'] ) && $args['advanced'] == 'social' ) { + if ( array_key_exists( 'advanced', $args ) && 'social' === $args['advanced'] ) { $social[ $field ] = $args; } } foreach ( $social as $k => $arr ) { if ( um_profile( $k ) ) { - if ( array_key_exists( 'match' , $arr ) ) { + if ( array_key_exists( 'match', $arr ) ) { $match = is_array( $arr['match'] ) ? $arr['match'][0] : $arr['match']; } else { $match = null; } + $arr['url_target'] = isset( $arr['url_target'] ) ? $arr['url_target'] : '_blank'; ?> + style="background: ;" target="" class="um-tip-n" + title=""> Date: Thu, 21 Sep 2023 02:01:03 +0300 Subject: [PATCH 28/81] - added ability to search users by user_login slug when custom meta permalink set in the settings but not isset for the user; --- includes/core/class-rewrite.php | 104 ++++++++++++++++++++------------ 1 file changed, 65 insertions(+), 39 deletions(-) diff --git a/includes/core/class-rewrite.php b/includes/core/class-rewrite.php index 2b8d11b8..5f68e751 100644 --- a/includes/core/class-rewrite.php +++ b/includes/core/class-rewrite.php @@ -148,6 +148,66 @@ if ( ! class_exists( 'um\core\Rewrite' ) ) { } } + /** + * Getting the user_id based on the User Profile slug like when Base Permalink setting equals 'user_login'. + * + * @since 2.6.12 + * + * @return bool|int|mixed + */ + private function get_user_id_by_user_login_slug() { + $permalink_base = UM()->options()->get( 'permalink_base' ); + if ( 'custom_meta' === $permalink_base ) { + $custom_meta = UM()->options()->get( 'permalink_base_custom_meta' ); + if ( empty( $custom_meta ) ) { + // Set default permalink base if custom meta is empty. + $permalink_base = 'user_login'; + } + } + + $user_id = username_exists( um_queried_user() ); + //Try + if ( ! $user_id ) { + // Search by Profile Slug + $args = array( + 'fields' => 'ids', + 'meta_query' => array( + array( + 'key' => 'um_user_profile_url_slug_' . $permalink_base, + 'value' => strtolower( um_queried_user() ), + 'compare' => '=', + ), + ), + 'number' => 1, + ); + + $ids = new \WP_User_Query( $args ); + if ( $ids->total_users > 0 ) { + $user_id = current( $ids->get_results() ); + } + } + + // Try nice name + if ( ! $user_id ) { + $slug = um_queried_user(); + $slug = str_replace( '.', '-', $slug ); + $the_user = get_user_by( 'slug', $slug ); + if ( isset( $the_user->ID ) ) { + $user_id = $the_user->ID; + } + + if ( ! $user_id ) { + $user_id = UM()->user()->user_exists_by_email_as_username( um_queried_user() ); + } + + if ( ! $user_id ) { + $user_id = UM()->user()->user_exists_by_email_as_username( $slug ); + } + } + + return $user_id; + } + /** * Locate/display a profile. */ @@ -163,45 +223,7 @@ if ( ! class_exists( 'um\core\Rewrite' ) ) { if ( um_queried_user() && um_is_core_page( 'user' ) ) { if ( 'user_login' === $permalink_base ) { - $user_id = username_exists( um_queried_user() ); - //Try - if ( ! $user_id ) { - // Search by Profile Slug - $args = array( - 'fields' => 'ids', - 'meta_query' => array( - array( - 'key' => 'um_user_profile_url_slug_' . $permalink_base, - 'value' => strtolower( um_queried_user() ), - 'compare' => '=', - ), - ), - 'number' => 1, - ); - - $ids = new \WP_User_Query( $args ); - if ( $ids->total_users > 0 ) { - $user_id = current( $ids->get_results() ); - } - } - - // Try nice name - if ( ! $user_id ) { - $slug = um_queried_user(); - $slug = str_replace( '.', '-', $slug ); - $the_user = get_user_by( 'slug', $slug ); - if ( isset( $the_user->ID ) ) { - $user_id = $the_user->ID; - } - - if ( ! $user_id ) { - $user_id = UM()->user()->user_exists_by_email_as_username( um_queried_user() ); - } - - if ( ! $user_id ) { - $user_id = UM()->user()->user_exists_by_email_as_username( $slug ); - } - } + $user_id = $this->get_user_id_by_user_login_slug(); } if ( 'user_id' === $permalink_base ) { @@ -214,6 +236,10 @@ if ( ! class_exists( 'um\core\Rewrite' ) ) { if ( 'custom_meta' === $permalink_base ) { $user_id = UM()->user()->user_exists_by_custom_meta( um_queried_user() ); + if ( ! $user_id ) { + // Try user_login by default. + $user_id = $this->get_user_id_by_user_login_slug(); + } } if ( in_array( $permalink_base, array( 'name', 'name_dash', 'name_dot', 'name_plus' ), true ) ) { From 8abd17acf2e152e1f96ee7dc0d8633e37e3820bd Mon Sep 17 00:00:00 2001 From: ashubawork Date: Thu, 21 Sep 2023 13:56:11 +0300 Subject: [PATCH 29/81] - add the ability to add youtube shorts --- includes/um-short-functions.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/includes/um-short-functions.php b/includes/um-short-functions.php index 139fd66e..cebfc9e0 100644 --- a/includes/um-short-functions.php +++ b/includes/um-short-functions.php @@ -1915,6 +1915,9 @@ function um_profile( $key ) { * @return bool */ function um_youtube_id_from_url( $url ) { + $url = preg_replace( '/&ab_channel=.*/', '', $url ); + $url = preg_replace( '/\?si=.*/', '', $url ); + $pattern = '%^# Match any youtube URL (?:https?://)? # Optional scheme. Either http or https @@ -1926,10 +1929,12 @@ function um_youtube_id_from_url( $url ) { /embed/ # Either /embed/ | /v/ # or /v/ | /watch\?v= # or /watch\?v= + | /shorts/ # or /shorts/ for short videos ) # 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 && isset( $matches[1] ) ) { return $matches[1]; From 200bc9c51f0cbb7704b3bac513fba56b91049303 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Fri, 22 Sep 2023 11:42:42 +0300 Subject: [PATCH 30/81] - reviewed #1298; - temporarily removed Stripe from extensions; - wpcs for extensions.php; --- includes/admin/templates/extensions.php | 179 +++++++++++------------- includes/core/class-fields.php | 171 ++++++++++++---------- includes/core/um-actions-profile.php | 11 +- 3 files changed, 190 insertions(+), 171 deletions(-) diff --git a/includes/admin/templates/extensions.php b/includes/admin/templates/extensions.php index d392c867..fb388111 100644 --- a/includes/admin/templates/extensions.php +++ b/includes/admin/templates/extensions.php @@ -1,84 +1,87 @@ - 'https://ultimatemember.com/extensions/bbpress/', + 'url' => 'https://ultimatemember.com/extensions/bbpress/', 'img' => 'bbpress.svg', 'name' => 'bbPress', 'desc' => 'With the bbPress extension you can integrate Ultimate Member with bbPress', ); $premium['profile-completeness'] = array( - 'url' => 'https://ultimatemember.com/extensions/profile-completeness/', + 'url' => 'https://ultimatemember.com/extensions/profile-completeness/', 'img' => 'profile-completeness.svg', 'name' => 'Profile Completeness', 'desc' => 'Encourage or force users to complete their profile on your site', ); $premium['verified-users'] = array( - 'url' => 'https://ultimatemember.com/extensions/verified-users/', + 'url' => 'https://ultimatemember.com/extensions/verified-users/', 'img' => 'verified-users.svg', 'name' => 'Verified Users', 'desc' => 'Add a user verficiation system to your site so user accounts can be verified', ); $premium['friends'] = array( - 'url' => 'https://ultimatemember.com/extensions/friends/', + 'url' => 'https://ultimatemember.com/extensions/friends/', 'img' => 'friends.svg', 'name' => 'Friends', 'desc' => 'Increase user interaction on your site by allowing users to become friends', ); $premium['woocommerce'] = array( - 'url' => 'https://ultimatemember.com/extensions/woocommerce/', + 'url' => 'https://ultimatemember.com/extensions/woocommerce/', 'img' => 'woocommerce.png', 'name' => 'WooCommerce', 'desc' => 'Integrates the popular e-commerce plugin WooCommerce with Ultimate Member', ); $premium['notices'] = array( - 'url' => 'https://ultimatemember.com/extensions/notices/', + 'url' => 'https://ultimatemember.com/extensions/notices/', 'img' => 'notices.svg', 'name' => 'Notices', 'desc' => 'Alert users to important information using conditional notices', ); $premium['followers'] = array( - 'url' => 'https://ultimatemember.com/extensions/followers/', + 'url' => 'https://ultimatemember.com/extensions/followers/', 'img' => 'followers.svg', 'name' => 'Followers', 'desc' => 'Increase user interaction on your site by allowing users to follow each other', ); $premium['mycred'] = array( - 'url' => 'https://ultimatemember.com/extensions/mycred/', + 'url' => 'https://ultimatemember.com/extensions/mycred/', 'img' => 'mycred.png', 'name' => 'myCRED', 'desc' => 'With the myCRED extension you can integrate Ultimate Member with myCRED', ); $premium['private-messages'] = array( - 'url' => 'https://ultimatemember.com/extensions/private-messages/', + 'url' => 'https://ultimatemember.com/extensions/private-messages/', 'img' => 'private-messages.svg', 'name' => 'Private Messages', 'desc' => 'Add a private messaging system to your site & allow users to message each other', ); $premium['social-activity'] = array( - 'url' => 'https://ultimatemember.com/extensions/social-activity/', + 'url' => 'https://ultimatemember.com/extensions/social-activity/', 'img' => 'social-activity.svg', 'name' => 'Social Activity', 'desc' => 'Let users create public wall posts & see the activity of other users', ); $premium['social-login'] = array( - 'url' => 'https://ultimatemember.com/extensions/social-login/', + 'url' => 'https://ultimatemember.com/extensions/social-login/', 'img' => 'social-login.svg', 'name' => 'Social Login', 'desc' => 'Let users register & login to your site via Facebook, Twitter, G+, LinkedIn, and more', ); $premium['user-tags'] = array( - 'url' => 'https://ultimatemember.com/extensions/user-tags/', + 'url' => 'https://ultimatemember.com/extensions/user-tags/', 'img' => 'user-tags.svg', 'name' => 'User Tags', 'desc' => 'With this extension you can add a user tag system to your website', @@ -86,7 +89,7 @@ $premium['user-tags'] = array( $premium['mailchimp'] = array( - 'url' => 'https://ultimatemember.com/extensions/mailchimp/', + 'url' => 'https://ultimatemember.com/extensions/mailchimp/', 'img' => 'mailchimp.png', 'name' => 'MailChimp', 'desc' => 'Allow users to subscribe to your mailchimp lists when they signup on your site', @@ -94,105 +97,105 @@ $premium['mailchimp'] = array( $premium['user-reviews'] = array( - 'url' => 'https://ultimatemember.com/extensions/user-reviews/', + 'url' => 'https://ultimatemember.com/extensions/user-reviews/', 'img' => 'user-reviews.svg', 'name' => 'User Reviews', 'desc' => 'Allow users to rate & review each other using a 5 star rate/review system', ); $premium['real-time-notifications'] = array( - 'url' => 'https://ultimatemember.com/extensions/real-time-notifications/', + 'url' => 'https://ultimatemember.com/extensions/real-time-notifications/', 'img' => 'real-time-notifications.svg', 'name' => 'Real-time Notifications', 'desc' => 'Add a notifications system to your site so users can receive real-time notifications', ); $premium['private-content'] = array( - 'url' => 'https://ultimatemember.com/extensions/private-content/', + 'url' => 'https://ultimatemember.com/extensions/private-content/', 'img' => 'private-content.svg', 'name' => 'Private Content', 'desc' => 'Display private content to logged in users that only they can access', ); $premium['groups'] = array( - 'url' => 'https://ultimatemember.com/extensions/groups/', + 'url' => 'https://ultimatemember.com/extensions/groups/', 'img' => 'groups.svg', 'name' => 'Groups', 'desc' => 'Allow users to create and join groups around shared topics, interests etc.', ); $premium['user-photos'] = array( - 'url' => 'https://ultimatemember.com/extensions/user-photos/', + 'url' => 'https://ultimatemember.com/extensions/user-photos/', 'name' => 'User Photos', 'img' => 'user-photos.svg', 'desc' => 'Allow users to upload photos to their profile', ); $premium['user-bookmarks'] = array( - 'url' => 'https://ultimatemember.com/extensions/user-bookmarks/', + 'url' => 'https://ultimatemember.com/extensions/user-bookmarks/', 'img' => 'user-bookmarks.svg', 'name' => 'User Bookmarks', 'desc' => 'Allow users to bookmark content from your website', ); $premium['unsplash'] = array( - 'url' => 'https://ultimatemember.com/extensions/unsplash/', + 'url' => 'https://ultimatemember.com/extensions/unsplash/', 'img' => 'unsplash.png', 'name' => 'Unsplash', 'desc' => 'Allow users to select a profile cover photo from Unsplash from their profile', ); $premium['user-locations'] = array( - 'url' => 'https://ultimatemember.com/extensions/user-locations/', + 'url' => 'https://ultimatemember.com/extensions/user-locations/', 'img' => 'user-locations.svg', 'name' => 'User Locations', 'desc' => 'Using the Google Maps API, display users on a map on the member directory page and allow users to add their location via their profile', ); $premium['user-notes'] = array( - 'url' => 'https://ultimatemember.com/extensions/user-notes/', + 'url' => 'https://ultimatemember.com/extensions/user-notes/', 'img' => 'user-notes.svg', 'name' => 'User Notes', 'desc' => 'Allow users to create public and private notes from their profile', ); $premium['profile-tabs'] = array( - 'url' => 'https://ultimatemember.com/extensions/profile-tabs/', + 'url' => 'https://ultimatemember.com/extensions/profile-tabs/', 'img' => 'profile-tabs.svg', 'name' => 'Profile Tabs', 'desc' => 'Add custom tabs to profiles', ); -$premium['stripe'] = array( - 'url' => 'https://ultimatemember.com/extensions/stripe/', - 'img' => 'stripe.png', - 'name' => 'Stripe', - 'desc' => 'Sell paid memberships to access your website via Stripe subscriptions', -); +//$premium['stripe'] = array( +// 'url' => 'https://ultimatemember.com/extensions/stripe/', +// 'img' => 'stripe.png', +// 'name' => 'Stripe', +// 'desc' => 'Sell paid memberships to access your website via Stripe subscriptions', +//); $free['jobboardwp'] = array( - 'url' => 'https://wordpress.org/plugins/um-jobboardwp', + 'url' => 'https://wordpress.org/plugins/um-jobboardwp', 'img' => 'jobboardwp.png', 'name' => 'JobBoardWP', 'desc' => 'Integrates Ultimate Member with the job board plugin JobBoardWP', ); $free['forumwp'] = array( - 'url' => 'https://ultimatemember.com/extensions/forumwp/', + 'url' => 'https://ultimatemember.com/extensions/forumwp/', 'img' => 'forumwp.png', 'name' => 'ForumWP', 'desc' => 'Integrates Ultimate Member with the forum plugin ForumWP', ); $free['online-users'] = array( - 'url' => 'https://ultimatemember.com/extensions/online-users/', + 'url' => 'https://ultimatemember.com/extensions/online-users/', 'img' => 'online-users.svg', 'name' => 'Online Users', - 'desc' => 'Display online users on your site so users can see who is online' + 'desc' => 'Display online users on your site so users can see who is online', ); $free['google-recaptcha'] = array( - 'url' => 'https://ultimatemember.com/extensions/google-recaptcha/', + 'url' => 'https://ultimatemember.com/extensions/google-recaptcha/', 'img' => 'google-recaptcha.png', 'name' => 'Google reCAPTCHA', 'desc' => 'Stop bots on your registration & login forms with Google reCAPTCHA', @@ -203,7 +206,23 @@ $free['terms-conditions'] = array( 'img' => 'terms-conditions.svg', 'name' => 'Terms & Conditions', 'desc' => 'Add terms & conditions to your registration form', -); ?> +); + +$classes = array( + 'free' => '', + 'premium' => '', +); +$loop = $premium; +// phpcs:disable WordPress.Security.NonceVerification -- Don't need nonce for the filter. +if ( ! isset( $_REQUEST['filter'] ) || 'premium' === sanitize_key( $_REQUEST['filter'] ) ) { + $loop = $premium; + $classes['premium'] = 'current'; +} elseif ( 'free' === sanitize_key( $_REQUEST['filter'] ) ) { + $loop = $free; + $classes['free'] = 'current'; +} +// phpcs:enable WordPress.Security.NonceVerification -- Don't need nonce for the filter. +?>

@@ -212,13 +231,13 @@ $free['terms-conditions'] = array(
@@ -226,64 +245,36 @@ $free['terms-conditions'] = array(
- $info ) { ?> + $info ) { ?> +
+
+ + + <?php echo esc_attr( $info['name'] ); ?> + +
+
+

-
-
- - <?php echo esc_attr( $info['name'] ) ?> - -
-
-

- -
- get_allowed_html( 'admin_notice' ) ); ?> -
-
- - - $info ) { ?> - -
-
- - <?php echo esc_attr( $info['name'] ) ?> - -
-
-

- -
- get_allowed_html( 'admin_notice' ) ); ?> -
-
- + - - - +
+
diff --git a/includes/core/class-fields.php b/includes/core/class-fields.php index 24b54400..8554b9cd 100644 --- a/includes/core/class-fields.php +++ b/includes/core/class-fields.php @@ -499,73 +499,100 @@ if ( ! class_exists( 'um\core\Fields' ) ) { update_option( 'um_fields', $all_fields ); } + /** + * Generate aria errors attributes. + * + * @param bool $is_error + * @param string $field_id + * + * @return string + */ + public function aria_valid_attributes( $is_error, $field_id, $context = 'error' ) { + //$context + $attr = ' aria-invalid="false" '; + if ( $is_error ) { + if ( 'notice' === $context ) { + $errormessage_id = 'um-notice-for-' . $field_id; + } else { + $errormessage_id = 'um-error-for-' . $field_id; + } + $attr = ' aria-invalid="true" aria-errormessage="' . esc_attr( $errormessage_id ) . '" '; + } + return $attr; + } /** - * Print field error + * Print field error. + * + * @since 2.6.12 Added $input_id attribute. * * @param string $text + * @param string $input_id * @param bool $force_show * * @return string */ - public function field_error( $text, $force_show = false ) { - + public function field_error( $text, $input_id, $force_show = false ) { if ( empty( $text ) ) { return ''; } + $error_id = 'um-error-for-' . $input_id; + if ( $force_show ) { - $output = '
' . wp_kses( $text, UM()->get_allowed_html( 'templates' ) ) . '
'; + $output = '
' . wp_kses( $text, UM()->get_allowed_html( 'templates' ) ) . '
'; return $output; } if ( isset( $this->set_id ) && UM()->form()->processing === $this->set_id ) { - $output = '
' . wp_kses( $text, UM()->get_allowed_html( 'templates' ) ) . '
'; + $output = '
' . wp_kses( $text, UM()->get_allowed_html( 'templates' ) ) . '
'; } else { $output = ''; } if ( ! UM()->form()->processing ) { - $output = '
' . wp_kses( $text, UM()->get_allowed_html( 'templates' ) ) . '
'; + $output = '
' . wp_kses( $text, UM()->get_allowed_html( 'templates' ) ) . '
'; } return $output; } - /** - * Print field notice + * Print field notice. + * + * @since 2.6.12 Added $input_id attribute. * * @param string $text + * @param string $input_id * @param bool $force_show * * @return string */ - public function field_notice( $text, $force_show = false ) { - + public function field_notice( $text, $input_id, $force_show = false ) { if ( empty( $text ) ) { return ''; } + $notice_id = 'um-notice-for-' . $input_id; + if ( $force_show ) { - $output = '
' . wp_kses( $text, UM()->get_allowed_html( 'templates' ) ) . '
'; + $output = '
' . wp_kses( $text, UM()->get_allowed_html( 'templates' ) ) . '
'; return $output; } if ( isset( $this->set_id ) && UM()->form()->processing === $this->set_id ) { - $output = '
' . wp_kses( $text, UM()->get_allowed_html( 'templates' ) ) . '
'; + $output = '
' . wp_kses( $text, UM()->get_allowed_html( 'templates' ) ) . '
'; } else { $output = ''; } if ( ! UM()->form()->processing ) { - $output = '
' . wp_kses( $text, UM()->get_allowed_html( 'templates' ) ) . '
'; + $output = '
' . wp_kses( $text, UM()->get_allowed_html( 'templates' ) ) . '
'; } return $output; } - /** * Checks if field has a server-side error * @@ -2353,7 +2380,7 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $field_name = $key . $form_suffix; $field_value = $this->field_value( $key, $default, $data ); - $output .= ' + $output .= 'aria_valid_attributes( $this->is_error( $key ), $field_name ) . '/>
'; @@ -2362,9 +2389,9 @@ if ( ! class_exists( 'um\core\Fields' ) ) { } if ( $this->is_error( $key ) ) { - $output .= $this->field_error( $this->show_error( $key ) ); + $output .= $this->field_error( $this->show_error( $key ), $field_name ); } elseif ( $this->is_notice( $key ) ) { - $output .= $this->field_notice( $this->show_notice( $key ) ); + $output .= $this->field_notice( $this->show_notice( $key ), $field_name ); } $output .= '
'; @@ -2387,7 +2414,7 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $field_name = $key . $form_suffix; $field_value = $this->field_value( $key, $default, $data ); - $output .= ' + $output .= 'aria_valid_attributes( $this->is_error( $key ), $field_name ) . '/>
'; @@ -2396,9 +2423,9 @@ if ( ! class_exists( 'um\core\Fields' ) ) { } if ( $this->is_error( $key ) ) { - $output .= $this->field_error( $this->show_error( $key ) ); + $output .= $this->field_error( $this->show_error( $key ), $field_name ); } elseif ( $this->is_notice( $key ) ) { - $output .= $this->field_notice( $this->show_notice( $key ) ); + $output .= $this->field_notice( $this->show_notice( $key ), $field_name ); } $output .= '
'; @@ -2428,14 +2455,14 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $field_name = $key . $form_suffix; $field_value = $this->field_value( $key, $default, $data ); - $output .= ' + $output .= 'aria_valid_attributes( $this->is_error( $key ), $field_name ) . '/>
'; if ( $this->is_error( $key ) ) { - $output .= $this->field_error( $this->show_error( $key ) ); + $output .= $this->field_error( $this->show_error( $key ), $field_name ); } elseif ( $this->is_notice( $key ) ) { - $output .= $this->field_notice( $this->show_notice( $key ) ); + $output .= $this->field_notice( $this->show_notice( $key ), $field_name ); } $output .= '
'; @@ -2464,20 +2491,20 @@ if ( ! class_exists( 'um\core\Fields' ) ) { if ( UM()->options()->get( 'toggle_password' ) ) { $output .= '
- + aria_valid_attributes( $this->is_error( $key ), $field_name ) . '/>
'; } else { - $output .= ' + $output .= 'aria_valid_attributes( $this->is_error( $key ), $field_name ) . '/>
'; } if ( $this->is_error( $key ) ) { - $output .= $this->field_error( $this->show_error( $key ) ); + $output .= $this->field_error( $this->show_error( $key ), $field_name ); } elseif ( $this->is_notice( $key ) ) { - $output .= $this->field_notice( $this->show_notice( $key ) ); + $output .= $this->field_notice( $this->show_notice( $key ), $field_name ); } $output .= '
'; @@ -2502,20 +2529,20 @@ if ( ! class_exists( 'um\core\Fields' ) ) { if ( UM()->options()->get( 'toggle_password' ) ) { $output .= '
- + aria_valid_attributes( $this->is_error( $key ), $field_name ) . '/>
'; } else { - $output .= ' + $output .= 'aria_valid_attributes( $this->is_error( $key ), $field_name ) . '/> '; } if ( $this->is_error( $key ) ) { - $output .= $this->field_error( $this->show_error( $key ) ); + $output .= $this->field_error( $this->show_error( $key ), $field_name ); } elseif ( $this->is_notice( $key ) ) { - $output .= $this->field_notice( $this->show_notice( $key ) ); + $output .= $this->field_notice( $this->show_notice( $key ), $field_name ); } $output .= ''; @@ -2550,20 +2577,20 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $field_value = $this->field_value( $key, $default, $data ); if ( UM()->options()->get( 'toggle_password' ) ) { $output .= '
- + aria_valid_attributes( $this->is_error( $key ), $name ) . '/>
'; } else { - $output .= ' + $output .= 'aria_valid_attributes( $this->is_error( $key ), $name ) . '/> '; } if ( $this->is_error( $key ) ) { - $output .= $this->field_error( $this->show_error( $key ) ); + $output .= $this->field_error( $this->show_error( $key ), $name ); } elseif ( $this->is_notice( $key ) ) { - $output .= $this->field_notice( $this->show_notice( $key ) ); + $output .= $this->field_notice( $this->show_notice( $key ), $name ); } $output .= ''; @@ -2604,17 +2631,17 @@ if ( ! class_exists( 'um\core\Fields' ) ) { } if ( UM()->options()->get( 'toggle_password' ) ) { - $output .= '
'; + $output .= '
aria_valid_attributes( $this->is_error( $key ), $name ) . '/>
'; } else { - $output .= ''; + $output .= 'aria_valid_attributes( $this->is_error( $key ), $name ) . '/>'; } $output .= ''; if ( $this->is_error( $key ) ) { - $output .= $this->field_error( $this->show_error( $key ) ); + $output .= $this->field_error( $this->show_error( $key ), $name ); } elseif ( $this->is_notice( $key ) ) { - $output .= $this->field_notice( $this->show_notice( $key ) ); + $output .= $this->field_notice( $this->show_notice( $key ), $name ); } $output .= ''; @@ -2638,14 +2665,14 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $field_name = $key . $form_suffix; $field_value = $this->field_value( $key, $default, $data ); - $output .= ' + $output .= 'aria_valid_attributes( $this->is_error( $key ), $field_name ) . '/> '; if ( $this->is_error( $key ) ) { - $output .= $this->field_error( $this->show_error( $key ) ); + $output .= $this->field_error( $this->show_error( $key ), $field_name ); } elseif ( $this->is_notice( $key ) ) { - $output .= $this->field_notice( $this->show_notice( $key ) ); + $output .= $this->field_notice( $this->show_notice( $key ), $field_name ); } $output .= ''; @@ -2684,14 +2711,14 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $disabled_weekdays = '[' . implode( ',', $data['disabled_weekdays'] ) . ']'; } - $output .= ' + $output .= 'aria_valid_attributes( $this->is_error( $key ), $field_name ) . '/> '; if ( $this->is_error( $key ) ) { - $output .= $this->field_error( $this->show_error( $key ) ); + $output .= $this->field_error( $this->show_error( $key ), $field_name ); } elseif ( $this->is_notice( $key ) ) { - $output .= $this->field_notice( $this->show_notice( $key ) ); + $output .= $this->field_notice( $this->show_notice( $key ), $field_name ); } $output .= ''; @@ -2713,14 +2740,14 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $field_name = $key . $form_suffix; $field_value = $this->field_value( $key, $default, $data ); - $output .= ' + $output .= 'aria_valid_attributes( $this->is_error( $key ), $field_name ) . '/> '; if ( $this->is_error( $key ) ) { - $output .= $this->field_error( $this->show_error( $key ) ); + $output .= $this->field_error( $this->show_error( $key ), $field_name ); } elseif ( $this->is_notice( $key ) ) { - $output .= $this->field_notice( $this->show_notice( $key ) ); + $output .= $this->field_notice( $this->show_notice( $key ), $field_name ); } $output .= ''; @@ -2826,7 +2853,7 @@ if ( ! class_exists( 'um\core\Fields' ) ) { } } } - $output .= ''; + $output .= ''; } $output .= ''; @@ -2836,9 +2863,9 @@ if ( ! class_exists( 'um\core\Fields' ) ) { } if ( $this->is_error( $key ) ) { - $output .= $this->field_error( $this->show_error( $key ) ); + $output .= $this->field_error( $this->show_error( $key ), $field_name ); } elseif ( $this->is_notice( $key ) ) { - $output .= $this->field_notice( $this->show_notice( $key ) ); + $output .= $this->field_notice( $this->show_notice( $key ), $field_name ); } $output .= ''; @@ -2853,13 +2880,13 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $output .= '
'; - $output .= '
'; + $output .= '
aria_valid_attributes( $this->is_error( $key ), $key ) . '>
'; $output .= '
'; if ( $this->is_error( $key ) ) { - $output .= $this->field_error( $this->show_error( $key ) ); + $output .= $this->field_error( $this->show_error( $key ), $key ); } elseif ( $this->is_notice( $key ) ) { - $output .= $this->field_notice( $this->show_notice( $key ) ); + $output .= $this->field_notice( $this->show_notice( $key ), $key ); } $output .= ''; @@ -2906,7 +2933,7 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $field_name = $key . $form_suffix; - $output .= ''; + $output .= 'aria_valid_attributes( $this->is_error( $key ), $field_name ) . '/>'; if ( isset( $data['label'] ) ) { $output .= $this->field_label( $data['label'], $key, $data ); } @@ -2991,9 +3018,9 @@ if ( ! class_exists( 'um\core\Fields' ) ) { } /* end */ if ( $this->is_error( $key ) ) { - $output .= $this->field_error( $this->show_error( $key ) ); + $output .= $this->field_error( $this->show_error( $key ), $field_name ); } elseif ( $this->is_notice( $key ) ) { - $output .= $this->field_notice( $this->show_notice( $key ) ); + $output .= $this->field_notice( $this->show_notice( $key ), $field_name ); } $output .= ''; @@ -3005,7 +3032,7 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $field_name = $key . $form_suffix; $file_field_value = $this->field_value( $key, $default, $data ); - $output .= ''; + $output .= 'aria_valid_attributes( $this->is_error( $key ), $field_name ) . '/>'; if ( isset( $data['label'] ) ) { $output .= $this->field_label( $data['label'], $key, $data ); } @@ -3116,9 +3143,9 @@ if ( ! class_exists( 'um\core\Fields' ) ) { } /* end */ if ( $this->is_error( $key ) ) { - $output .= $this->field_error( $this->show_error( $key ) ); + $output .= $this->field_error( $this->show_error( $key ), $field_name ); } elseif ( $this->is_notice( $key ) ) { - $output .= $this->field_notice( $this->show_notice( $key ) ); + $output .= $this->field_notice( $this->show_notice( $key ), $field_name ); } $output .= ''; @@ -3335,7 +3362,7 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $field_value = ''; - $output .= 'aria_valid_attributes( $this->is_error( $form_key ), $form_key ) . '>'; $output .= ''; // add options @@ -3380,9 +3407,9 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $output .= ''; if ( $this->is_error( $form_key ) ) { - $output .= $this->field_error( $this->show_error( $form_key ) ); + $output .= $this->field_error( $this->show_error( $form_key ), $form_key ); } elseif ( $this->is_notice( $form_key ) ) { - $output .= $this->field_notice( $this->show_notice( $form_key ) ); + $output .= $this->field_notice( $this->show_notice( $form_key ), $form_key ); } $output .= ''; @@ -3417,7 +3444,7 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $output .= '
'; } - $output .= 'aria_valid_attributes( $this->is_error( $key ), $field_name ) . '>'; if ( isset( $options ) && 'builtin' === $options ) { $options = UM()->builtin()->get( $data['filter'] ); @@ -3536,9 +3563,9 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $output .= ''; if ( $this->is_error( $key ) ) { - $output .= $this->field_error( $this->show_error( $key ) ); + $output .= $this->field_error( $this->show_error( $key ), $field_name ); } elseif ( $this->is_notice( $key ) ) { - $output .= $this->field_notice( $this->show_notice( $key ) ); + $output .= $this->field_notice( $this->show_notice( $key ), $field_name ); } $output .= ''; @@ -3591,7 +3618,7 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $options = apply_filters( "um_radio_field_options_{$key}", $options ); $options = $this->get_available_roles( $form_key, $options ); - $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; + $output .= '
get_atts( $key, $classes, $conditional, $data ) . ' ' . $this->aria_valid_attributes( $this->is_error( $key ), $form_key ) . '>'; if ( isset( $data['label'] ) ) { $output .= $this->field_label( $data['label'], $key, $data ); @@ -3693,9 +3720,9 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $output .= '
'; if ( $this->is_error( $key ) ) { - $output .= $this->field_error( $this->show_error( $key ) ); + $output .= $this->field_error( $this->show_error( $key ), $form_key ); } elseif ( $this->is_notice( $key ) ) { - $output .= $this->field_notice( $this->show_notice( $key ) ); + $output .= $this->field_notice( $this->show_notice( $key ), $form_key ); } $output .= '
'; @@ -3745,7 +3772,7 @@ if ( ! class_exists( 'um\core\Fields' ) ) { */ $options = apply_filters( "um_checkbox_field_options_{$key}", $options ); - $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; + $output .= '
get_atts( $key, $classes, $conditional, $data ) . ' ' . $this->aria_valid_attributes( $this->is_error( $key ), $key ) . '>'; if ( isset( $data['label'] ) ) { $output .= $this->field_label( $data['label'], $key, $data ); @@ -3834,9 +3861,9 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $output .= '
'; if ( $this->is_error( $key ) ) { - $output .= $this->field_error( $this->show_error( $key ) ); + $output .= $this->field_error( $this->show_error( $key ), $key ); } elseif ( $this->is_notice( $key ) ) { - $output .= $this->field_notice( $this->show_notice( $key ) ); + $output .= $this->field_notice( $this->show_notice( $key ), $key ); } $output .= '
'; diff --git a/includes/core/um-actions-profile.php b/includes/core/um-actions-profile.php index 50851661..fca61a37 100644 --- a/includes/core/um-actions-profile.php +++ b/includes/core/um-actions-profile.php @@ -1021,7 +1021,7 @@ function um_profile_header( $args ) { */ do_action( 'um_pre_header_editprofile', $args ); ?> -
- fields()->is_error( 'profile_photo' ) ) { - echo UM()->fields()->field_error( UM()->fields()->show_error( 'profile_photo' ), 'force_show' ); + fields()->is_error( 'profile_photo' ) ) { + echo wp_kses( UM()->fields()->field_error( UM()->fields()->show_error( 'profile_photo' ), 'profile_photo', true ), UM()->get_allowed_html( 'templates' ) ); } /** From 079c8caeb5128e59d6f3fd89e46b0e12e7ee4dd1 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Fri, 22 Sep 2023 11:47:56 +0300 Subject: [PATCH 31/81] - changed version to 2.6.12; --- ultimate-member.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ultimate-member.php b/ultimate-member.php index d34df4bc..412b65df 100644 --- a/ultimate-member.php +++ b/ultimate-member.php @@ -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: 2.6.12-alpha + * Version: 2.6.12 * Author: Ultimate Member * Author URI: http://ultimatemember.com/ * Text Domain: ultimate-member From 86afc2523a54a81f49815e33fb2f5df42ca2ad41 Mon Sep 17 00:00:00 2001 From: ashubawork Date: Fri, 22 Sep 2023 14:52:12 +0300 Subject: [PATCH 32/81] - init commit --- includes/core/class-builtin.php | 15 +++++++++++++++ includes/core/class-fields.php | 7 +++++++ 2 files changed, 22 insertions(+) diff --git a/includes/core/class-builtin.php b/includes/core/class-builtin.php index 44956c60..bbe8249d 100644 --- a/includes/core/class-builtin.php +++ b/includes/core/class-builtin.php @@ -665,6 +665,21 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { ), ), ), + 'oembed' => array( + 'name' => __( 'oEmbed', 'ultimate-member' ), + 'col1' => array( '_title', '_metakey', '_help', '_default', '_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', 'ultimate-member' ), + ), + '_metakey' => array( + 'mode' => 'unique', + ), + ), + ), /*'group' => array( 'name' => 'Field Group', diff --git a/includes/core/class-fields.php b/includes/core/class-fields.php index 8554b9cd..cb30c3a3 100644 --- a/includes/core/class-fields.php +++ b/includes/core/class-fields.php @@ -1711,6 +1711,12 @@ if ( ! class_exists( 'um\core\Fields' ) ) { break; + case 'oembed': + + $array['input'] = 'url'; + + break; + case 'date': $array['input'] = 'text'; @@ -2649,6 +2655,7 @@ if ( ! class_exists( 'um\core\Fields' ) ) { } break; /* URL */ + case 'oembed': case 'url': $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; From 45a22f371eae68d9ad2a2e910c8338494618fe1f Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Fri, 22 Sep 2023 16:50:51 +0300 Subject: [PATCH 33/81] - updated comments; --- includes/um-short-functions.php | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/includes/um-short-functions.php b/includes/um-short-functions.php index cebfc9e0..442151be 100644 --- a/includes/um-short-functions.php +++ b/includes/um-short-functions.php @@ -1906,17 +1906,16 @@ function um_profile( $key ) { return $value; } - /** - * Get youtube video ID from url + * Get YouTube video ID from URL. * - * @param $url + * @param string $url * - * @return bool + * @return bool|string */ function um_youtube_id_from_url( $url ) { - $url = preg_replace( '/&ab_channel=.*/', '', $url ); - $url = preg_replace( '/\?si=.*/', '', $url ); + $url = preg_replace( '/&ab_channel=.*/', '', $url ); // ADBlock argument. + $url = preg_replace( '/\?si=.*/', '', $url ); // referral attribute. $pattern = '%^# Match any youtube URL @@ -1943,7 +1942,6 @@ function um_youtube_id_from_url( $url ) { return false; } - /** * Find closest number in an array * From 01ee8305a2406847c305c40cbb53ae6d607f58df Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Fri, 22 Sep 2023 20:29:40 +0300 Subject: [PATCH 34/81] - reduced using `get_the_time( 'U', $post_id );` and `current_time( 'timestamp' );` --- includes/core/class-uploader.php | 2 +- includes/core/class-user.php | 1 - includes/um-short-functions.php | 2 +- templates/profile/posts-single.php | 47 +++++++++++++++++------------- 4 files changed, 28 insertions(+), 24 deletions(-) diff --git a/includes/core/class-uploader.php b/includes/core/class-uploader.php index 892ff986..0706002e 100644 --- a/includes/core/class-uploader.php +++ b/includes/core/class-uploader.php @@ -1280,7 +1280,7 @@ if ( ! class_exists( 'um\core\Uploader' ) ) { //move temporary file from temp directory to the correct user directory $temp_file_path = UM()->uploader()->get_core_temp_dir() . DIRECTORY_SEPARATOR . $filename; if ( file_exists( $temp_file_path ) ) { - $extra_hash = hash( 'crc32b', current_time('timestamp') ); + $extra_hash = hash( 'crc32b', current_time( 'timestamp' ) ); if ( strpos( $filename , 'stream_photo_' ) !== false ) { $new_filename = str_replace("stream_photo_","stream_photo_{$extra_hash}_", $filename ); diff --git a/includes/core/class-user.php b/includes/core/class-user.php index 3bf706f1..f0dd02cc 100644 --- a/includes/core/class-user.php +++ b/includes/core/class-user.php @@ -1523,7 +1523,6 @@ if ( ! class_exists( 'um\core\User' ) ) { update_user_meta( $this->id, '_um_last_login', current_time( 'timestamp' ) ); } - /** * Set user's account status * diff --git a/includes/um-short-functions.php b/includes/um-short-functions.php index 442151be..0e92a89a 100644 --- a/includes/um-short-functions.php +++ b/includes/um-short-functions.php @@ -838,7 +838,7 @@ function um_user_submited_display( $k, $title, $data = array(), $style = true ) $v = um_user( $k ); } - if ( strstr( $k, 'user_pass' ) || in_array( $k, array( 'g-recaptcha-response', 'request', '_wpnonce', '_wp_http_referer' ) ) ) { + if ( strstr( $k, 'user_pass' ) || in_array( $k, array( 'g-recaptcha-response', 'request', '_wpnonce', '_wp_http_referer' ), true ) ) { return ''; } diff --git a/templates/profile/posts-single.php b/templates/profile/posts-single.php index 37dc2d1b..4b597df6 100644 --- a/templates/profile/posts-single.php +++ b/templates/profile/posts-single.php @@ -6,7 +6,7 @@ * * Page: "Profile" * - * @version 2.6.1 + * @version 2.6.12 * * @var object $post */ @@ -17,44 +17,49 @@ if ( ! defined( 'ABSPATH' ) ) {
- ID ) ) { - $image_id = get_post_thumbnail_id( $post->ID ); - $image_url = wp_get_attachment_image_src( $image_id, 'full', true ); ?> - + ID ) ) { + $image_id = get_post_thumbnail_id( $post->ID ); + $image_url = wp_get_attachment_image_src( $image_id, 'full', true ); + ?> + + $unix_published_date = get_post_datetime( $post, 'date', 'gmt' ); + ?>
ID ), current_time( 'timestamp' ) ) ); + // translators: %s: human time diff. + echo esc_html( sprintf( __( '%s ago', 'ultimate-member' ), human_time_diff( $unix_published_date->getTimestamp() ) ) ); ?> - : ID ); ?> + ID ) ), UM()->get_allowed_html( 'templates' ) ); + ?> - ID ); - - if ( $num_comments == 0 ) { - $comments = __( 'no comments', 'ultimate-member' ); - } elseif ( $num_comments > 1 ) { - // translators: %s: coments number. - $comments = sprintf( __( '%s comments', 'ultimate-member' ), $num_comments ); + - - + // translators: %s: comments number. + $comments_html = sprintf( _n( '%s comment', '%s comments', $num_comments, 'ultimate-member' ), $num_comments ); + } + ?> +
From d4b7a9c5656f4cea9ffa59ffe291931dd67831a3 Mon Sep 17 00:00:00 2001 From: ashubawork Date: Mon, 25 Sep 2023 15:36:51 +0300 Subject: [PATCH 35/81] - frontend field oembed --- includes/core/class-fields.php | 15 +++++ includes/core/um-filters-fields.php | 87 +++++++++++++++++++---------- 2 files changed, 72 insertions(+), 30 deletions(-) diff --git a/includes/core/class-fields.php b/includes/core/class-fields.php index cb30c3a3..4009c041 100644 --- a/includes/core/class-fields.php +++ b/includes/core/class-fields.php @@ -4444,6 +4444,21 @@ if ( ! class_exists( 'um\core\Fields' ) ) { } } + break; + /* HTML */ + case 'oembed': + $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; + + if ( isset( $data['label'] ) || ! empty( $data['icon'] ) ) { + $output .= $this->field_label( $data['label'], $key, $data ); + } + $response = wp_oembed_get( $_field_value ); + if ( empty( $response ) ) { + $response = $_field_value; + } + $output .= '
'; + $output .= '
' . $response . '
'; + $output .= '
'; break; /* HTML */ case 'block': diff --git a/includes/core/um-filters-fields.php b/includes/core/um-filters-fields.php index 1727b234..e6446382 100644 --- a/includes/core/um-filters-fields.php +++ b/includes/core/um-filters-fields.php @@ -436,49 +436,76 @@ function um_profile_field_filter_hook__( $value, $data, $type = '' ) { } if ( isset( $data['type'] ) && 'text' === $data['type'] && isset( $data['validate'] ) && 'skype' === $data['validate'] ) { - $alt = ! empty( $data['url_text'] ) ? $data['url_text'] : $value; - $url_rel = ( isset( $data['url_rel'] ) && $data['url_rel'] == 'nofollow' ) ? 'rel="nofollow"' : ''; + $alt = ! empty( $data['url_text'] ) ? $data['url_text'] : $value; + $url_rel = ( isset( $data['url_rel'] ) && 'nofollow' === $data['url_rel'] ) ? 'rel="nofollow"' : ''; $data['url_target'] = ( isset( $data['url_target'] ) ) ? $data['url_target'] : '_blank'; if ( false === strstr( $value, 'join.skype.com' ) ) { $value = 'skype:' . $value . '?chat'; } - $value = '' . esc_html( $alt ) . ''; + $value = '' . esc_html( $alt ) . ''; } else { - if ( ( isset( $data['validate'] ) && $data['validate'] !== '' && $data['type'] !== 'spotify' && strstr( $data['validate'], 'url' ) ) || ( isset( $data['type'] ) && $data['type'] == 'url' ) ) { - $alt = ( isset( $data['url_text'] ) && !empty( $data['url_text'] ) ) ? $data['url_text'] : $value; - $url_rel = ( isset( $data['url_rel'] ) && $data['url_rel'] == 'nofollow' ) ? 'rel="nofollow"' : ''; + // check $value is oEmbed + if ( 'oembed' === $data['type'] ) { + return $value; + } + + if ( ( isset( $data['validate'] ) && '' !== $data['validate'] && 'spotify' !== $data['type'] && strstr( $data['validate'], 'url' ) ) || ( isset( $data['type'] ) && 'url' === $data['type'] && 'oembed' !== $data['type'] ) ) { + $alt = ( isset( $data['url_text'] ) && ! empty( $data['url_text'] ) ) ? $data['url_text'] : $value; + $url_rel = ( isset( $data['url_rel'] ) && 'nofollow' === $data['url_rel'] ) ? 'rel="nofollow"' : ''; if ( ! strstr( $value, 'http' ) - && !strstr( $value, '://' ) - && !strstr( $value, 'www.' ) - && !strstr( $value, '.com' ) - && !strstr( $value, '.net' ) - && !strstr( $value, '.org' ) - && !strstr( $value, '.me' ) + && ! strstr( $value, '://' ) + && ! strstr( $value, 'www.' ) + && ! strstr( $value, '.com' ) + && ! strstr( $value, '.net' ) + && ! strstr( $value, '.org' ) + && ! strstr( $value, '.me' ) ) { - if ( $data['validate'] == 'soundcloud_url' ) $value = 'https://soundcloud.com/' . $value; - if ( $data['validate'] == 'youtube_url' ) $value = 'https://youtube.com/user/' . $value; - if ( $data['validate'] == 'telegram_url' ) $value = 'https://t.me/' . $value; - if ( $data['validate'] == 'facebook_url' ) $value = 'https://facebook.com/' . $value; - if ( $data['validate'] == 'twitter_url' ) $value = 'https://twitter.com/' . $value; - if ( $data['validate'] == 'linkedin_url' ) $value = 'https://linkedin.com/' . $value; - if ( $data['validate'] == 'instagram_url' ) $value = 'https://instagram.com/' . $value; - if ( $data['validate'] == 'tiktok_url' ) $value = 'https://tiktok.com/' . $value; - if ( $data['validate'] == 'twitch_url' ) $value = 'https://twitch.tv/' . $value; - if ( $data['validate'] == 'reddit_url' ) $value = 'https://www.reddit.com/user/' . $value; - if ( $data['validate'] == 'spotify_url' ) $value = 'https://open.spotify.com/' . $value; + if ( 'soundcloud_url' === $data['validate'] ) { + $value = 'https://soundcloud.com/' . $value; + } + if ( 'youtube_url' === $data['validate'] ) { + $value = 'https://youtube.com/user/' . $value; + } + if ( 'telegram_url' === $data['validate'] ) { + $value = 'https://t.me/' . $value; + } + if ( 'facebook_url' === $data['validate'] ) { + $value = 'https://facebook.com/' . $value; + } + if ( 'twitter_url' === $data['validate'] ) { + $value = 'https://twitter.com/' . $value; + } + if ( 'linkedin_url' === $data['validate'] ) { + $value = 'https://linkedin.com/' . $value; + } + if ( 'instagram_url' === $data['validate'] ) { + $value = 'https://instagram.com/' . $value; + } + if ( 'tiktok_url' === $data['validate'] ) { + $value = 'https://tiktok.com/' . $value; + } + if ( 'twitch_url' === $data['validate'] ) { + $value = 'https://twitch.tv/' . $value; + } + if ( 'reddit_url' === $data['validate'] ) { + $value = 'https://www.reddit.com/user/' . $value; + } + if ( 'spotify_url' === $data['validate'] ) { + $value = 'https://open.spotify.com/' . $value; + } } if ( strpos( $value, 'http://' ) !== 0 ) { $value = 'http://' . $value; } - $value = str_replace('https://https://','https://',$value); - $value = str_replace('http://https://','https://',$value); + $value = str_replace( 'https://https://', 'https://', $value ); + $value = str_replace( 'http://https://', 'https://', $value ); $onclick_alert = ''; - if ( UM()->options()->get( 'allow_url_redirect_confirm' ) && $value !== wp_validate_redirect( $value ) ) { + if ( UM()->options()->get( 'allow_url_redirect_confirm' ) && wp_validate_redirect( $value ) !== $value ) { $onclick_alert = sprintf( ' onclick="' . esc_attr( 'return confirm( "%s" );' ) . '"', // translators: %s: link. @@ -487,20 +514,20 @@ function um_profile_field_filter_hook__( $value, $data, $type = '' ) { } $data['url_target'] = ( isset( $data['url_target'] ) ) ? $data['url_target'] : '_blank'; - $value = '' . esc_html( $alt ) . ''; + $value = '' . esc_html( $alt ) . ''; } } if ( ! is_array( $value ) ) { if ( is_email( $value ) ) { - $value = ''.$value.''; + $value = '' . $value . ''; } } else { $value = implode( ', ', $value ); } - $value = str_replace('https://https://','https://',$value); - $value = str_replace('http://https://','https://',$value); + $value = str_replace( 'https://https://', 'https://', $value ); + $value = str_replace( 'http://https://', 'https://', $value ); //$value = UM()->shortcodes()->emotize( $value ); return $value; From e971d1e6b31133ae2adec166da5597ae5bba85aa Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Mon, 25 Sep 2023 21:08:35 +0300 Subject: [PATCH 36/81] - updated dependencies versions; - fixed permalinks generate function for getting raw base permalink from the user meta; --- includes/admin/core/class-admin-settings.php | 1 - includes/class-dependencies.php | 4 ++-- includes/class-init.php | 6 ++++-- includes/core/class-user.php | 15 ++++++++------- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/includes/admin/core/class-admin-settings.php b/includes/admin/core/class-admin-settings.php index 65e0bc92..0928738a 100644 --- a/includes/admin/core/class-admin-settings.php +++ b/includes/admin/core/class-admin-settings.php @@ -2458,7 +2458,6 @@ 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 ) { diff --git a/includes/class-dependencies.php b/includes/class-dependencies.php index 4fbc8f61..90a5f789 100644 --- a/includes/class-dependencies.php +++ b/includes/class-dependencies.php @@ -32,10 +32,10 @@ if ( ! class_exists( 'um\Dependencies' ) ) { public $ext_required_version = array( 'bbpress' => '2.0.7', 'followers' => '2.1.6', - 'forumwp' => '2.0.4', + 'forumwp' => '2.1.5', 'friends' => '2.1.4', 'groups' => '2.1.7', - 'jobboardwp' => '1.0.0', + 'jobboardwp' => '1.0.7', 'mailchimp' => '2.2.0', 'messaging' => '2.2.5', 'mycred' => '2.1.6', diff --git a/includes/class-init.php b/includes/class-init.php index 7d3f2d79..23dec48b 100644 --- a/includes/class-init.php +++ b/includes/class-init.php @@ -1,5 +1,7 @@ -options()->get( 'permalink_base' ); if ( 'custom_meta' === $permalink_base ) { @@ -720,6 +721,10 @@ if ( ! class_exists( 'um\core\User' ) ) { } $profile_slug = get_user_meta( $user_id, $meta_key, true ); + if ( $raw ) { + return $profile_slug; + } + //get default username permalink if it's empty then return false if ( empty( $profile_slug ) ) { if ( 'user_login' !== $permalink_base ) { @@ -779,7 +784,7 @@ if ( ! class_exists( 'um\core\User' ) ) { delete_option( "um_cache_userdata_{$user_id}" ); - $current_profile_slug = $this->get_profile_slug( $user_id ); + $current_profile_slug = $this->get_profile_slug( $user_id, true ); $user_in_url = ''; $permalink_base = UM()->options()->get( 'permalink_base' ); @@ -847,9 +852,7 @@ if ( ! class_exists( 'um\core\User' ) ) { update_user_meta( $user_id, "um_email_as_username_{$user_in_url}", $user_email ); } else { - $user_in_url = urlencode( $user_in_url ); - } } @@ -897,9 +900,7 @@ if ( ! class_exists( 'um\core\User' ) ) { update_user_meta( $user_id, "um_email_as_username_{$user_in_url}", $user_email ); } else { - $user_in_url = sanitize_title( $user_in_url ); - } } From 8e098ef9ee72d10a109c02b97dd4200c0bf43671 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Mon, 25 Sep 2023 21:14:36 +0300 Subject: [PATCH 37/81] - updated dependencies versions based on the recent changes for `UM()->frontend()->enqueue()::get_suffix();` --- includes/class-dependencies.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/includes/class-dependencies.php b/includes/class-dependencies.php index 90a5f789..977505ab 100644 --- a/includes/class-dependencies.php +++ b/includes/class-dependencies.php @@ -38,23 +38,23 @@ if ( ! class_exists( 'um\Dependencies' ) ) { 'jobboardwp' => '1.0.7', 'mailchimp' => '2.2.0', 'messaging' => '2.2.5', - 'mycred' => '2.1.6', + 'mycred' => '2.2.4', 'notices' => '2.0.5', 'notifications' => '2.1.3', 'online' => '2.1.1', 'private-content' => '2.0.5', 'profile-completeness' => '2.1.2', 'profile-tabs' => '1.0.0', - 'recaptcha' => '2.1.2', + 'recaptcha' => '2.3.4', 'reviews' => '2.1.5', 'social-activity' => '2.2.0', 'social-login' => '2.2.0', 'stripe' => '1.0.0', 'terms-conditions' => '2.1.1', 'unsplash' => '2.0.2', - 'user-bookmarks' => '2.0.2', + 'user-bookmarks' => '2.1.4', 'user-locations' => '1.0.0', - 'user-notes' => '1.0.0', + 'user-notes' => '1.1.0', 'user-photos' => '2.0.4', 'user-tags' => '2.1.0', 'verified-users' => '2.0.5', From 2cf7387b69421936cee61e970e34960d69374041 Mon Sep 17 00:00:00 2001 From: ashubawork Date: Tue, 26 Sep 2023 09:05:22 +0300 Subject: [PATCH 38/81] - for member directory --- includes/core/class-form.php | 1 + includes/core/um-filters-fields.php | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/includes/core/class-form.php b/includes/core/class-form.php index 6a3b74d4..beb43872 100644 --- a/includes/core/class-form.php +++ b/includes/core/class-form.php @@ -775,6 +775,7 @@ if ( ! class_exists( 'um\core\Form' ) ) { $form[ $k ] = sanitize_textarea_field( $form[ $k ] ); } break; + case 'oembed': case 'url': $f = UM()->builtin()->get_a_field( $k ); diff --git a/includes/core/um-filters-fields.php b/includes/core/um-filters-fields.php index e6446382..78211b89 100644 --- a/includes/core/um-filters-fields.php +++ b/includes/core/um-filters-fields.php @@ -22,6 +22,30 @@ function um_edit_label_all_fields( $label, $data ) { add_filter( 'um_edit_label_all_fields', 'um_edit_label_all_fields', 10, 2 ); +/** + * Outputs a oEmbed field + * + * @param string $value + * @param array $data + * + * @return string + */ +function um_profile_field_filter_hook__oembed( $value, $data ) { + if ( empty( $value ) ) { + return ''; + } + $responce = wp_oembed_get( $value ); + if ( empty( $responce ) ) { + $value = '' . esc_html( $value ) . ''; + } else { + $value = $responce; + } + + return $value; +} +add_filter( 'um_profile_field_filter_hook__oembed', 'um_profile_field_filter_hook__oembed', 99, 2 ); + + /** * Outputs a SoundCloud track * From 95a6643b2ebdce9a7655440b9259a5bab70fc2f8 Mon Sep 17 00:00:00 2001 From: ashubawork Date: Tue, 26 Sep 2023 09:17:34 +0300 Subject: [PATCH 39/81] - fix soundcloud field --- includes/core/um-filters-fields.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/includes/core/um-filters-fields.php b/includes/core/um-filters-fields.php index 1727b234..4ad47e88 100644 --- a/includes/core/um-filters-fields.php +++ b/includes/core/um-filters-fields.php @@ -31,12 +31,14 @@ add_filter( 'um_edit_label_all_fields', 'um_edit_label_all_fields', 10, 2 ); * @return string */ function um_profile_field_filter_hook__soundcloud_track( $value, $data ) { - + if ( empty( $value ) ) { + return ''; + } if ( ! is_numeric( $value ) ) { # if we're passed a track url: if ( preg_match( '/https:\/\/soundcloud.com\/.*/', $value ) ) { $value = '
- +
'; return $value; } else { From dc0ea197701196ef8ff80974d4c387003714279b Mon Sep 17 00:00:00 2001 From: ashubawork Date: Tue, 26 Sep 2023 09:19:25 +0300 Subject: [PATCH 40/81] - fix code comment --- includes/core/class-fields.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/core/class-fields.php b/includes/core/class-fields.php index 4009c041..074e17ff 100644 --- a/includes/core/class-fields.php +++ b/includes/core/class-fields.php @@ -4445,7 +4445,7 @@ if ( ! class_exists( 'um\core\Fields' ) ) { } break; - /* HTML */ + /* oEmbed */ case 'oembed': $output .= '
get_atts( $key, $classes, $conditional, $data ) . '>'; From bd2cc5a69d90a2562bd6176236c2db5039767ad6 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Tue, 26 Sep 2023 12:25:49 +0300 Subject: [PATCH 41/81] - FontIcons libraries moving to legacy; - changed FontIcons libraries enqueue place (moved to common); --- .../fonticons}/font/fontawesome-webfont.eot | Bin .../fonticons}/font/fontawesome-webfont.svg | 0 .../fonticons}/font/fontawesome-webfont.ttf | Bin .../fonticons}/font/fontawesome-webfont.woff | Bin .../legacy/fonticons}/font/ionicons.eot | Bin .../legacy/fonticons}/font/ionicons.svg | 0 .../legacy/fonticons}/font/ionicons.ttf | Bin .../legacy/fonticons}/font/ionicons.woff | Bin .../legacy/fonticons/fonticons-fa.css} | 10 +++---- .../legacy/fonticons/fonticons-ii.css} | 12 ++++---- includes/admin/class-enqueue.php | 28 +++++++++--------- includes/common/class-enqueue.php | 13 ++++---- includes/core/class-fonticons.php | 4 +-- includes/frontend/class-enqueue.php | 24 +++++++-------- 14 files changed, 46 insertions(+), 45 deletions(-) rename assets/{ => libs/legacy/fonticons}/font/fontawesome-webfont.eot (100%) rename assets/{ => libs/legacy/fonticons}/font/fontawesome-webfont.svg (100%) rename assets/{ => libs/legacy/fonticons}/font/fontawesome-webfont.ttf (100%) rename assets/{ => libs/legacy/fonticons}/font/fontawesome-webfont.woff (100%) rename assets/{ => libs/legacy/fonticons}/font/ionicons.eot (100%) rename assets/{ => libs/legacy/fonticons}/font/ionicons.svg (100%) rename assets/{ => libs/legacy/fonticons}/font/ionicons.ttf (100%) rename assets/{ => libs/legacy/fonticons}/font/ionicons.woff (100%) rename assets/{css/um-fonticons-fa.css => libs/legacy/fonticons/fonticons-fa.css} (98%) rename assets/{css/um-fonticons-ii.css => libs/legacy/fonticons/fonticons-ii.css} (99%) diff --git a/assets/font/fontawesome-webfont.eot b/assets/libs/legacy/fonticons/font/fontawesome-webfont.eot similarity index 100% rename from assets/font/fontawesome-webfont.eot rename to assets/libs/legacy/fonticons/font/fontawesome-webfont.eot diff --git a/assets/font/fontawesome-webfont.svg b/assets/libs/legacy/fonticons/font/fontawesome-webfont.svg similarity index 100% rename from assets/font/fontawesome-webfont.svg rename to assets/libs/legacy/fonticons/font/fontawesome-webfont.svg diff --git a/assets/font/fontawesome-webfont.ttf b/assets/libs/legacy/fonticons/font/fontawesome-webfont.ttf similarity index 100% rename from assets/font/fontawesome-webfont.ttf rename to assets/libs/legacy/fonticons/font/fontawesome-webfont.ttf diff --git a/assets/font/fontawesome-webfont.woff b/assets/libs/legacy/fonticons/font/fontawesome-webfont.woff similarity index 100% rename from assets/font/fontawesome-webfont.woff rename to assets/libs/legacy/fonticons/font/fontawesome-webfont.woff diff --git a/assets/font/ionicons.eot b/assets/libs/legacy/fonticons/font/ionicons.eot similarity index 100% rename from assets/font/ionicons.eot rename to assets/libs/legacy/fonticons/font/ionicons.eot diff --git a/assets/font/ionicons.svg b/assets/libs/legacy/fonticons/font/ionicons.svg similarity index 100% rename from assets/font/ionicons.svg rename to assets/libs/legacy/fonticons/font/ionicons.svg diff --git a/assets/font/ionicons.ttf b/assets/libs/legacy/fonticons/font/ionicons.ttf similarity index 100% rename from assets/font/ionicons.ttf rename to assets/libs/legacy/fonticons/font/ionicons.ttf diff --git a/assets/font/ionicons.woff b/assets/libs/legacy/fonticons/font/ionicons.woff similarity index 100% rename from assets/font/ionicons.woff rename to assets/libs/legacy/fonticons/font/ionicons.woff diff --git a/assets/css/um-fonticons-fa.css b/assets/libs/legacy/fonticons/fonticons-fa.css similarity index 98% rename from assets/css/um-fonticons-fa.css rename to assets/libs/legacy/fonticons/fonticons-fa.css index 3b585c0e..786a89de 100644 --- a/assets/css/um-fonticons-fa.css +++ b/assets/libs/legacy/fonticons/fonticons-fa.css @@ -2,11 +2,11 @@ @font-face { font-family: "FontAwesome"; - src:url("../font/fontawesome-webfont.eot?v=4.2.0"); - src:url("../font/fontawesome-webfont.eot?v=4.2.0#iefix") format("embedded-opentype"), - url("../font/fontawesome-webfont.woff?v=4.2.0") format("woff"), - url("../font/fontawesome-webfont.ttf?v=4.2.0") format("truetype"), - url("../font/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular") format("svg"); + src:url("font/fontawesome-webfont.eot?v=4.2.0"); + src:url("font/fontawesome-webfont.eot?v=4.2.0#iefix") format("embedded-opentype"), + url("font/fontawesome-webfont.woff?v=4.2.0") format("woff"), + url("font/fontawesome-webfont.ttf?v=4.2.0") format("truetype"), + url("font/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular") format("svg"); font-display: swap; font-weight: normal; font-style: normal; diff --git a/assets/css/um-fonticons-ii.css b/assets/libs/legacy/fonticons/fonticons-ii.css similarity index 99% rename from assets/css/um-fonticons-ii.css rename to assets/libs/legacy/fonticons/fonticons-ii.css index c8fad3f5..7d418c52 100644 --- a/assets/css/um-fonticons-ii.css +++ b/assets/libs/legacy/fonticons/fonticons-ii.css @@ -2,11 +2,11 @@ @font-face { font-family: "Ionicons"; - src:url("../font/ionicons.eot?v=2.0.0"); - src:url("../font/ionicons.eot?v=2.0.0#iefix") format("embedded-opentype"), - url("../font/ionicons.woff?v=2.0.0") format("woff"), - url("../font/ionicons.ttf?v=2.0.0") format("truetype"), - url("../font/ionicons.svg?v=2.0.0#Ionicons") format("svg"); + src:url("font/ionicons.eot?v=2.0.0"); + src:url("font/ionicons.eot?v=2.0.0#iefix") format("embedded-opentype"), + url("font/ionicons.woff?v=2.0.0") format("woff"), + url("font/ionicons.ttf?v=2.0.0") format("truetype"), + url("font/ionicons.svg?v=2.0.0#Ionicons") format("svg"); font-display: swap; font-weight: normal; font-style: normal; @@ -1489,4 +1489,4 @@ .um-icon-wrench:before { content: "\f2ba"; } -.um-icon-xbox:before { content: "\f30c"; } \ No newline at end of file +.um-icon-xbox:before { content: "\f30c"; } diff --git a/includes/admin/class-enqueue.php b/includes/admin/class-enqueue.php index da02809e..2bfd0ff4 100644 --- a/includes/admin/class-enqueue.php +++ b/includes/admin/class-enqueue.php @@ -95,15 +95,15 @@ final class Enqueue extends \um\common\Enqueue { if ( is_rtl() ) { wp_register_style( 'um_members_rtl', UM_URL . 'assets/css/um-members-rtl.css', array( 'um_members' ), UM_VERSION ); } - wp_register_style( 'um_styles', UM_URL . 'assets/css/um-styles.css', array(), UM_VERSION ); + wp_register_style( 'um_styles', UM_URL . 'assets/css/um-styles.css', array( 'um_ui', 'um_tipsy', 'um_raty', 'um_fonticons_ii', 'um_fonticons_fa' ), UM_VERSION ); wp_register_style( 'um_profile', UM_URL . 'assets/css/um-profile.css', array(), UM_VERSION ); wp_register_style( 'um_crop', UM_URL . 'assets/css/um-crop.css', array(), UM_VERSION ); wp_register_style( 'um_responsive', UM_URL . 'assets/css/um-responsive.css', array( 'um_profile', 'um_crop' ), UM_VERSION ); wp_register_style( 'um_account', UM_URL . 'assets/css/um-account.css', array(), UM_VERSION ); wp_register_style( 'um_default_css', UM_URL . 'assets/css/um-old-default.css', array(), UM_VERSION ); - wp_register_style( 'um_fonticons_fa', UM_URL . 'assets/css/um-fonticons-fa.css', array(), UM_VERSION ); + //wp_register_style( 'um_fonticons_fa', UM_URL . 'assets/css/um-fonticons-fa.css', array(), UM_VERSION ); wp_register_style( 'select2', UM_URL . 'assets/css/select2/select2' . $suffix . '.css', array(), UM_VERSION ); - wp_register_style( 'um_fonticons_ii', UM_URL . 'assets/css/um-fonticons-ii.css', array(), UM_VERSION ); + //wp_register_style( 'um_fonticons_ii', UM_URL . 'assets/css/um-fonticons-ii.css', array(), UM_VERSION ); wp_register_script( 'um_admin_blocks_shortcodes', UM_URL . 'assets/js/um-blocks' . $suffix . '.js', array( 'wp-i18n', 'wp-blocks', 'wp-components' ), UM_VERSION, true ); wp_set_script_translations( 'um_admin_blocks_shortcodes', 'ultimate-member' ); @@ -183,10 +183,10 @@ final class Enqueue extends \um\common\Enqueue { wp_enqueue_script( 'um_functions' ); wp_enqueue_script( 'um_responsive' ); - wp_enqueue_style( 'um_fonticons_ii' ); + //wp_enqueue_style( 'um_fonticons_ii' ); wp_enqueue_style( 'select2' ); wp_enqueue_style( 'um_default_css' ); - wp_enqueue_style( 'um_fonticons_fa' ); + // wp_enqueue_style( 'um_fonticons_fa' ); wp_enqueue_style( 'um_members' ); wp_enqueue_style( 'um_styles' ); wp_enqueue_style( 'um_profile' ); @@ -236,7 +236,6 @@ final class Enqueue extends \um\common\Enqueue { wp_register_script( 'um_jquery_form', $this->front_js_baseurl . 'um-jquery-form' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); wp_register_script( 'um_fileupload', $this->front_js_baseurl . 'um-fileupload.js', array( 'jquery' ), UM_VERSION, true ); wp_register_script( 'um_crop', $this->front_js_baseurl . 'um-crop' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); - //wp_register_script( 'um_tipsy', $this->front_js_baseurl . 'um-tipsy' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); wp_register_script( 'um_functions', $this->front_js_baseurl . 'um-functions' . $suffix . '.js', array( 'jquery', 'um_tipsy', 'um_scrollbar' ), UM_VERSION, true ); wp_register_script( 'um_datetime', $this->front_js_baseurl . 'pickadate/picker.js', array( 'jquery' ), UM_VERSION, true ); @@ -264,10 +263,9 @@ final class Enqueue extends \um\common\Enqueue { wp_register_style( 'um_scrollbar', $this->front_css_baseurl . 'simplebar.css', array(), ultimatemember_version ); wp_register_style( 'um_crop', $this->front_css_baseurl . 'um-crop.css', array(), ultimatemember_version ); - //wp_register_style( 'um_tipsy', $this->front_css_baseurl . 'um-tipsy.css', array(), ultimatemember_version ); wp_register_style( 'um_responsive', $this->front_css_baseurl . 'um-responsive.css', array(), ultimatemember_version ); wp_register_style( 'um_modal', $this->front_css_baseurl . 'um-modal.css', array(), ultimatemember_version ); - wp_register_style( 'um_styles', $this->front_css_baseurl . 'um-styles.css', array(), ultimatemember_version ); + wp_register_style( 'um_styles', $this->front_css_baseurl . 'um-styles.css', array( 'um_ui', 'um_tipsy', 'um_raty', 'um_fonticons_ii', 'um_fonticons_fa' ), ultimatemember_version ); wp_register_style( 'um_members', $this->front_css_baseurl . 'um-members.css', array(), ultimatemember_version ); wp_register_style( 'um_profile', $this->front_css_baseurl . 'um-profile.css', array(), ultimatemember_version ); wp_register_style( 'um_account', $this->front_css_baseurl . 'um-account.css', array(), ultimatemember_version ); @@ -487,13 +485,15 @@ final class Enqueue extends \um\common\Enqueue { /** * Load Fonticons + * + * @depecated 2.6.12 */ public function load_fonticons() { - wp_register_style( 'um_fonticons_ii', UM_URL . 'assets/css/um-fonticons-ii.css', array(), ultimatemember_version ); - wp_enqueue_style( 'um_fonticons_ii' ); - - wp_register_style( 'um_fonticons_fa', UM_URL . 'assets/css/um-fonticons-fa.css', array(), ultimatemember_version ); - wp_enqueue_style( 'um_fonticons_fa' ); +// wp_register_style( 'um_fonticons_ii', UM_URL . 'assets/css/um-fonticons-ii.css', array(), ultimatemember_version ); +// wp_enqueue_style( 'um_fonticons_ii' ); +// +// wp_register_style( 'um_fonticons_fa', UM_URL . 'assets/css/um-fonticons-fa.css', array(), ultimatemember_version ); +// wp_enqueue_style( 'um_fonticons_fa' ); } @@ -679,7 +679,7 @@ final class Enqueue extends \um\common\Enqueue { $this->load_css(); $this->load_core_wp(); $this->load_ajax_js(); - $this->load_fonticons(); + //$this->load_fonticons(); $this->load_localize_scripts(); //scripts for frontend preview diff --git a/includes/common/class-enqueue.php b/includes/common/class-enqueue.php index a429415f..a85d3bc0 100644 --- a/includes/common/class-enqueue.php +++ b/includes/common/class-enqueue.php @@ -37,6 +37,7 @@ class Enqueue { public function __construct() { add_action( 'admin_enqueue_scripts', array( &$this, 'common_libs' ), 9 ); add_action( 'wp_enqueue_scripts', array( &$this, 'common_libs' ), 9 ); + add_action( 'enqueue_block_assets', array( &$this, 'common_libs' ), 9 ); } public static function get_url( $type ) { @@ -76,17 +77,17 @@ class Enqueue { wp_register_script( 'um_tipsy', self::get_url( 'libs' ) . 'tipsy/tipsy' . $suffix . '.js', array( 'jquery' ), '1.0.0a', true ); wp_register_style( 'um_tipsy', self::get_url( 'libs' ) . 'tipsy/tipsy' . $suffix . '.css', array(), '1.0.0a' ); - // Raty JS for rating field-type + // Raty JS for rating field-type. wp_register_script( 'um_raty', self::get_url( 'libs' ) . 'raty/um-raty' . $suffix . '.js', array( 'jquery', 'wp-i18n' ), '2.6.0', true ); wp_register_style( 'um_raty', self::get_url( 'libs' ) . 'raty/um-raty' . $suffix . '.css', array(), '2.6.0' ); + // Legacy FontIcons. + wp_register_style( 'um_fonticons_ii', self::get_url( 'libs' ) . 'legacy/fonticons/fonticons-ii' . $suffix . '.css', array(), UM_VERSION ); // Ionicons + wp_register_style( 'um_fonticons_fa', self::get_url( 'libs' ) . 'legacy/fonticons/fonticons-fa' . $suffix . '.css', array(), UM_VERSION ); // FontAwesome + // wp_register_script( 'um-helptip', $this->urls['libs'] . 'helptip/helptip' . $this->suffix . '.js', array( 'jquery', 'jquery-ui-tooltip' ), '1.0.0', true ); // wp_register_style( 'um-helptip', $this->urls['libs'] . 'helptip/helptip' . $this->suffix . '.css', array( 'dashicons', 'um_ui' ), '1.0.0' ); -// -// // Legacy Fonticons -// wp_register_style( 'um-fonticons-ii', $this->urls['libs'] . 'fonticons/um-fonticons-ii' . $this->suffix . '.css', array(), UM_VERSION ); -// wp_register_style( 'um-fonticons-fa', $this->urls['libs'] . 'fonticons/um-fonticons-fa' . $this->suffix . '.css', array(), UM_VERSION ); -// + // // Select2 // $dequeue_select2 = apply_filters( 'um_dequeue_select2_scripts', false ); // if ( class_exists( 'WooCommerce' ) || $dequeue_select2 ) { diff --git a/includes/core/class-fonticons.php b/includes/core/class-fonticons.php index e86762a1..d17953cb 100644 --- a/includes/core/class-fonticons.php +++ b/includes/core/class-fonticons.php @@ -27,8 +27,8 @@ if ( ! class_exists( 'um\core\FontIcons' ) ) { $cached_option = get_option( 'um_cache_fonticons', array() ); if ( empty( $cached_option ) ) { - $files['ii'] = UM_PATH . 'assets/css/um-fonticons-ii.css'; - $files['fa'] = UM_PATH . 'assets/css/um-fonticons-fa.css'; + $files['ii'] = UM_PATH . 'assets/libs/legacy/fonticons/fonticons-ii.css'; + $files['fa'] = UM_PATH . 'assets/libs/legacy/fonticons/fonticons-fa.css'; $array = array(); foreach ( $files as $c => $file ) { diff --git a/includes/frontend/class-enqueue.php b/includes/frontend/class-enqueue.php index 0384c31e..5879061b 100644 --- a/includes/frontend/class-enqueue.php +++ b/includes/frontend/class-enqueue.php @@ -118,7 +118,7 @@ final class Enqueue extends \um\common\Enqueue { wp_register_script( 'um-gdpr', $this->js_baseurl . 'um-gdpr' . $suffix . '.js', array( 'jquery' ), UM_VERSION, false ); wp_register_script('um_conditional', $this->js_baseurl . 'um-conditional' . $suffix . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); - wp_register_script('um_scripts', $this->js_baseurl . 'um-scripts' . $suffix . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', /*'um_datetime_legacy',*/ 'select2' ), UM_VERSION, true ); + wp_register_script('um_scripts', $this->js_baseurl . 'um-scripts' . $suffix . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', /*'um_datetime_legacy',*/ 'select2', 'um_tipsy', 'um_raty' ), UM_VERSION, true ); /** * UM hook * @@ -167,11 +167,10 @@ final class Enqueue extends \um\common\Enqueue { /** * Register styles */ - function register_styles() { - + public function register_styles() { //FontAwesome and FontIcons styles - wp_register_style( 'um_fonticons_ii', $this->css_baseurl . 'um-fonticons-ii.css', array(), UM_VERSION ); - wp_register_style( 'um_fonticons_fa', $this->css_baseurl . 'um-fonticons-fa.css', array(), UM_VERSION ); + //wp_register_style( 'um_fonticons_ii', $this->css_baseurl . 'um-fonticons-ii.css', array(), UM_VERSION ); + //wp_register_style( 'um_fonticons_fa', $this->css_baseurl . 'um-fonticons-fa.css', array(), UM_VERSION ); wp_register_style( 'um_crop', $this->css_baseurl . 'um-crop.css', array(), UM_VERSION ); //wp_register_style( 'um_tipsy', $this->css_baseurl . 'um-tipsy.css', array(), UM_VERSION ); //wp_register_style( 'um_raty', $this->css_baseurl . 'um-raty.css', array(), UM_VERSION ); @@ -187,17 +186,16 @@ final class Enqueue extends \um\common\Enqueue { wp_register_style( 'um_modal', $this->css_baseurl . 'um-modal.css', array( 'um_crop' ), UM_VERSION ); wp_register_style( 'um_responsive', $this->css_baseurl . 'um-responsive.css', array( 'um_profile', 'um_crop' ), UM_VERSION ); - wp_register_style( 'um_styles', $this->css_baseurl . 'um-styles.css', array(), UM_VERSION ); + wp_register_style( 'um_styles', $this->css_baseurl . 'um-styles.css', array( 'um_ui', 'um_tipsy', 'um_raty', 'um_fonticons_ii', 'um_fonticons_fa' ), UM_VERSION ); - wp_register_style( 'um_members', $this->css_baseurl . 'um-members.css', array( 'um_ui' ), UM_VERSION ); + wp_register_style( 'um_members', $this->css_baseurl . 'um-members.css', array( 'um_styles' ), UM_VERSION ); if ( is_rtl() ) { wp_register_style( 'um_members_rtl', $this->css_baseurl . 'um-members-rtl.css', array( 'um_members' ), UM_VERSION ); } - wp_register_style( 'um_profile', $this->css_baseurl . 'um-profile.css', array(), UM_VERSION ); - wp_register_style( 'um_account', $this->css_baseurl . 'um-account.css', array(), UM_VERSION ); - wp_register_style( 'um_misc', $this->css_baseurl . 'um-misc.css', array(), UM_VERSION ); - + wp_register_style( 'um_profile', $this->css_baseurl . 'um-profile.css', array( 'um_styles' ), UM_VERSION ); + wp_register_style( 'um_account', $this->css_baseurl . 'um-account.css', array( 'um_styles' ), UM_VERSION ); + wp_register_style( 'um_misc', $this->css_baseurl . 'um-misc.css', array( 'um_styles' ), UM_VERSION ); } @@ -249,7 +247,7 @@ final class Enqueue extends \um\common\Enqueue { //maybe deprecated //$this->load_google_charts(); - $this->load_fonticons(); + //$this->load_fonticons(); $this->load_selectjs(); @@ -316,6 +314,8 @@ final class Enqueue extends \um\common\Enqueue { /** * Load Fonticons + * + * @depecated 2.6.12 */ function load_fonticons() { wp_enqueue_style( 'um_fonticons_ii' ); From fe52c731d7d6713872b9d75c147fa639d38b567f Mon Sep 17 00:00:00 2001 From: ashubawork Date: Tue, 26 Sep 2023 13:10:47 +0300 Subject: [PATCH 42/81] - pages --- .../admin/core/class-admin-site-health.php | 81 +++++++++++++++++++ includes/class-init.php | 13 +++ 2 files changed, 94 insertions(+) create mode 100644 includes/admin/core/class-admin-site-health.php diff --git a/includes/admin/core/class-admin-site-health.php b/includes/admin/core/class-admin-site-health.php new file mode 100644 index 00000000..f9cfca4b --- /dev/null +++ b/includes/admin/core/class-admin-site-health.php @@ -0,0 +1,81 @@ + __( 'Yes', 'ultimate-member' ), + 'no' => __( 'No', 'ultimate-member' ), + 'all' => __( 'All', 'ultimate-member' ), + 'default' => __( 'Default', 'ultimate-member' ), + 'nopages' => __( 'No predefined page', 'ultimate-member' ), + ); + + $info['ultimate-member'] = array( + 'label' => __( 'Ultimate Member', 'ultimate-member' ), + 'description' => __( 'This debug information for your Ultimate Member installation can assist you in getting support.', 'ultimate-member' ), + 'fields' => array(), + ); + + // Pages settings + $pages = apply_filters( + 'um_debug_information_pages', + array( + 'User' => null !== UM()->options()->get( 'core_user' ) ? get_the_title( UM()->options()->get( 'core_user' ) ) . ' (ID#' . UM()->options()->get( 'core_user' ) . ') | ' . get_permalink( UM()->options()->get( 'core_user' ) ) : $labels['nopages'], + 'Login' => null !== UM()->options()->get( 'core_login' ) ? get_the_title( UM()->options()->get( 'core_login' ) ) . ' (ID#' . UM()->options()->get( 'core_login' ) . ') | ' . get_permalink( UM()->options()->get( 'core_login' ) ) : $labels['nopages'], + 'Register' => null !== UM()->options()->get( 'core_register' ) ? get_the_title( UM()->options()->get( 'core_register' ) ) . ' (ID#' . UM()->options()->get( 'core_register' ) . ') | ' . get_permalink( UM()->options()->get( 'core_register' ) ) : $labels['nopages'], + 'Members' => null !== UM()->options()->get( 'core_members' ) ? get_the_title( UM()->options()->get( 'core_members' ) ) . ' (ID#' . UM()->options()->get( 'core_members' ) . ') | ' . get_permalink( UM()->options()->get( 'core_members' ) ) : $labels['nopages'], + 'Logout' => null !== UM()->options()->get( 'core_logout' ) ? get_the_title( UM()->options()->get( 'core_logout' ) ) . ' (ID#' . UM()->options()->get( 'core_logout' ) . ') | ' . get_permalink( UM()->options()->get( 'core_logout' ) ) : $labels['nopages'], + 'Account' => null !== UM()->options()->get( 'core_account' ) ? get_the_title( UM()->options()->get( 'core_account' ) ) . ' (ID#' . UM()->options()->get( 'core_account' ) . ') | ' . get_permalink( UM()->options()->get( 'core_account' ) ) : $labels['nopages'], + 'Password reset' => null !== UM()->options()->get( 'core_password' ) ? get_the_title( UM()->options()->get( 'core_password-reset' ) ) . ' (ID#' . UM()->options()->get( 'core_password-reset' ) . ') | ' . get_permalink( UM()->options()->get( 'core_password-reset' ) ) : $labels['nopages'], + ) + ); + + $pages_settings = array( + 'um-pages' => array( + 'label' => __( 'Pages', 'ultimate-member' ), + 'value' => $pages, + ), + ); + + $user_settings = array(); + $account_settings = array(); + $uploads_settings = array(); + $restrict_settings = array(); + $access_other_settings = array(); + $email_settings = array(); + $misc_settings = array(); + + $info['ultimate-member']['fields'] = array_merge( $info['ultimate-member']['fields'], $pages_settings, $user_settings, $account_settings, $uploads_settings, $restrict_settings, $access_other_settings, $email_settings, $misc_settings ); + + return $info; + } + } +} diff --git a/includes/class-init.php b/includes/class-init.php index 23dec48b..e60d3852 100644 --- a/includes/class-init.php +++ b/includes/class-init.php @@ -583,6 +583,7 @@ if ( ! class_exists( 'UM' ) ) { $this->admin_navmenu(); $this->plugin_updater(); $this->theme_updater(); + $this->site_health(); } elseif ( $this->is_request( 'frontend' ) ) { $this->frontend()->includes(); $this->account(); @@ -781,6 +782,18 @@ if ( ! class_exists( 'UM' ) ) { } + /** + * @since 2.0.45 + * @return um\admin\core\Admin_Site_Health() + */ + public function site_health() { + if ( empty( $this->classes['site_health'] ) ) { + $this->classes['site_health'] = new um\admin\core\Admin_Site_Health(); + } + return $this->classes['site_health']; + } + + /** * @since 2.0 */ From 40bbf7cd00ae5b3682d89c10136d708d5748caff Mon Sep 17 00:00:00 2001 From: ashubawork Date: Tue, 26 Sep 2023 13:36:38 +0300 Subject: [PATCH 43/81] - users settings --- .../admin/core/class-admin-site-health.php | 93 ++++++++++++++++++- 1 file changed, 92 insertions(+), 1 deletion(-) diff --git a/includes/admin/core/class-admin-site-health.php b/includes/admin/core/class-admin-site-health.php index f9cfca4b..b11a951d 100644 --- a/includes/admin/core/class-admin-site-health.php +++ b/includes/admin/core/class-admin-site-health.php @@ -65,7 +65,98 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { ), ); - $user_settings = array(); + // User settings + $permalink_base = array( + 'user_login' => __( 'Username', 'ultimate-member' ), + 'name' => __( 'First and Last Name with \'.\'', 'ultimate-member' ), + 'name_dash' => __( 'First and Last Name with \'-\'', 'ultimate-member' ), + 'name_plus' => __( 'First and Last Name with \'+\'', 'ultimate-member' ), + 'user_id' => __( 'User ID', 'ultimate-member' ), + ); + $display_name = 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' ), + ); + + $user_settings = array( + 'um-permalink_base' => array( + 'label' => __( 'Profile Permalink Base', 'ultimate-member' ), + 'value' => isset( $permalink_base[ UM()->options()->get( 'permalink_base' ) ] ) ? $permalink_base[ UM()->options()->get( 'permalink_base' ) ] : $labels['no'], + ), + 'um-display_name' => array( + 'label' => __( 'User Display Name', 'ultimate-member' ), + 'value' => isset( $display_name[ UM()->options()->get( 'display_name' ) ] ) ? $display_name[ UM()->options()->get( 'display_name' ) ] : $labels['no'], + ), + 'um-author_redirect' => array( + 'label' => __( 'Automatically redirect author page to their profile?', 'ultimate-member' ), + 'value' => UM()->options()->get( 'author_redirect' ) ? $labels['yes'] : $labels['no'], + ), + 'um-members_page' => array( + 'label' => __( 'Enable Members Directory', 'ultimate-member' ), + 'value' => UM()->options()->get( 'members_page' ) ? $labels['yes'] : $labels['no'], + ), + 'um-toggle_password' => array( + 'label' => __( 'Show/hide password button', 'ultimate-member' ), + 'value' => UM()->options()->get( 'toggle_password' ) ? $labels['yes'] : $labels['no'], + ), + 'um-require_strongpass' => array( + 'label' => __( 'Require Strong Passwords', 'ultimate-member' ), + 'value' => UM()->options()->get( 'require_strongpass' ) ? $labels['yes'] : $labels['no'], + ), + 'um-password_min_chars' => array( + 'label' => __( 'Require Strong Passwords', 'ultimate-member' ), + 'value' => UM()->options()->get( 'password_min_chars' ), + ), + 'um-password_max_chars' => array( + 'label' => __( 'Require Strong Passwords', 'ultimate-member' ), + 'value' => UM()->options()->get( 'password_max_chars' ), + ), + 'um-profile_noindex' => array( + 'label' => __( 'Avoid indexing profile by search engines', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_noindex' ) ? $labels['yes'] : $labels['no'], + ), + 'um-activation_link_expiry_time' => array( + 'label' => __( 'Activation link lifetime', 'ultimate-member' ), + 'value' => UM()->options()->get( 'activation_link_expiry_time' ), + ), + 'um-use_gravatars' => array( + 'label' => __( 'Use Gravatars?', 'ultimate-member' ), + 'value' => UM()->options()->get( 'use_gravatars' ) ? $labels['yes'] : $labels['no'], + ), + ); + + if ( 1 === absint( UM()->options()->get( 'use_gravatars' ) ) ) { + $gravatar_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' ), + ); + + $user_settings['um-use_um_gravatar_default_builtin_image'] = array( + 'label' => __( 'Use Gravatar builtin image', 'ultimate-member' ), + 'value' => $gravatar_options[ UM()->options()->get( 'use_um_gravatar_default_builtin_image' ) ], + ); + if ( 'default' === UM()->options()->get( 'use_um_gravatar_default_builtin_image' ) ) { + $user_settings['um-use_um_gravatar_default_image'] = array( + 'label' => __( 'Use Default plugin avatar as Gravatar\'s Default avatar', 'ultimate-member' ), + 'value' => UM()->options()->get( 'use_um_gravatar_default_image' ) ? $labels['yes'] : $labels['no'], + ); + } + } + + $account_settings = array(); $uploads_settings = array(); $restrict_settings = array(); From a8523e10a2bd40c1fe66056d77d3f8fd9761ebfc Mon Sep 17 00:00:00 2001 From: ashubawork Date: Tue, 26 Sep 2023 14:33:02 +0300 Subject: [PATCH 44/81] - account settings --- .../admin/core/class-admin-site-health.php | 56 ++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/includes/admin/core/class-admin-site-health.php b/includes/admin/core/class-admin-site-health.php index b11a951d..aad23418 100644 --- a/includes/admin/core/class-admin-site-health.php +++ b/includes/admin/core/class-admin-site-health.php @@ -156,8 +156,62 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { } } + // Account settings + $account_settings = array( + 'um-account_tab_password' => array( + 'label' => __( 'Password Account Tab', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_tab_password' ) ? $labels['yes'] : $labels['no'], + ), + 'um-account_tab_privacy' => array( + 'label' => __( 'Privacy Account Tab', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_tab_privacy' ) ? $labels['yes'] : $labels['no'], + ), + 'um-account_tab_notifications' => array( + 'label' => __( 'Notifications Account Tab', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_tab_notifications' ) ? $labels['yes'] : $labels['no'], + ), + 'um-account_tab_delete' => array( + 'label' => __( 'Delete Account Tab', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_tab_delete' ) ? $labels['yes'] : $labels['no'], + ), + 'um-delete_account_text' => array( + 'label' => __( 'Account Deletion Custom Text', 'ultimate-member' ), + 'value' => UM()->options()->get( 'delete_account_text' ), + ), + 'um-delete_account_no_pass_required_text' => array( + 'label' => __( 'Account Deletion without password Custom Text', 'ultimate-member' ), + 'value' => UM()->options()->get( 'delete_account_no_pass_required_text' ), + ), + 'um-account_name' => array( + 'label' => __( 'Add a First & Last Name fields', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_name' ) ? $labels['yes'] : $labels['no'], + ), + ); + + if ( 1 === absint( UM()->options()->get( 'account_name' ) ) ) { + $account_settings['um-account_name_disable'] = array( + 'label' => __( 'Disable First & Last name field editing', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_name_disable' ) ? $labels['yes'] : $labels['no'], + ); + $account_settings['um-account_name_require'] = array( + 'label' => __( 'Require First & Last Name', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_name_require' ) ? $labels['yes'] : $labels['no'], + ); + } + + $account_settings['um-account_hide_in_directory'] = array( + 'label' => __( 'Allow users to hide their profiles from directory', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_hide_in_directory' ) ? $labels['yes'] : $labels['no'], + ); + + if ( 1 === absint( UM()->options()->get( 'account_name' ) ) ) { + $account_settings['um-account_hide_in_directory_default'] = array( + 'label' => __( 'Hide profiles from directory by default', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_hide_in_directory_default' ), + ); + } + - $account_settings = array(); $uploads_settings = array(); $restrict_settings = array(); $access_other_settings = array(); From 4ec604ad4a93bd51a3d2c76c5f37b17ce2728a41 Mon Sep 17 00:00:00 2001 From: ashubawork Date: Wed, 27 Sep 2023 12:58:12 +0300 Subject: [PATCH 45/81] - upload settings --- .../admin/core/class-admin-site-health.php | 51 ++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/includes/admin/core/class-admin-site-health.php b/includes/admin/core/class-admin-site-health.php index aad23418..12d03c90 100644 --- a/includes/admin/core/class-admin-site-health.php +++ b/includes/admin/core/class-admin-site-health.php @@ -211,8 +211,57 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { ); } + // Uploads settings + $profile_sizes_list = ''; + $profile_sizes = UM()->options()->get( 'photo_thumb_sizes' ); + if ( ! empty( $profile_sizes ) ) { + foreach ( $profile_sizes as $size ) { + $profile_sizes_list = empty( $profile_sizes_list ) ? $size : $profile_sizes_list . ', ' . $size; + } + } + $cover_sizes_list = ''; + $cover_sizes = UM()->options()->get( 'cover_thumb_sizes' ); + if ( ! empty( $cover_sizes ) ) { + foreach ( $cover_sizes as $size ) { + $cover_sizes_list = empty( $cover_sizes_list ) ? $size : $cover_sizes_list . ', ' . $size; + } + } + $uploads_settings = array( + 'um-profile_photo_max_size' => array( + 'label' => __( 'Profile Photo Maximum File Size (bytes)', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_photo_max_size' ), + ), + 'um-cover_photo_max_size' => array( + 'label' => __( 'Cover Photo Maximum File Size (bytes)', 'ultimate-member' ), + 'value' => UM()->options()->get( 'cover_photo_max_size' ), + ), + 'um-photo_thumb_sizes' => array( + 'label' => __( 'Profile Photo Thumbnail Sizes (px)', 'ultimate-member' ), + 'value' => $profile_sizes_list, + ), + 'um-cover_thumb_sizes' => array( + 'label' => __( 'Cover Photo Thumbnail Sizes (px)', 'ultimate-member' ), + 'value' => $cover_sizes_list, + ), + 'um-image_orientation_by_exif' => array( + 'label' => __( 'Change image orientation', 'ultimate-member' ), + 'value' => UM()->options()->get( 'image_orientation_by_exif' ) ? $labels['yes'] : $labels['no'], + ), + 'um-image_compression' => array( + 'label' => __( 'Image Quality', 'ultimate-member' ), + 'value' => UM()->options()->get( 'image_compression' ), + ), + 'um-image_max_width' => array( + 'label' => __( 'Image Upload Maximum Width (px)', 'ultimate-member' ), + 'value' => UM()->options()->get( 'image_max_width' ), + ), + 'um-cover_min_width' => array( + 'label' => __( 'Cover Photo Minimum Width (px)', 'ultimate-member' ), + 'value' => UM()->options()->get( 'cover_min_width' ), + ), + ); + - $uploads_settings = array(); $restrict_settings = array(); $access_other_settings = array(); $email_settings = array(); From b135f883a1232827d6c2376182e9df0e993cc39f Mon Sep 17 00:00:00 2001 From: ashubawork Date: Wed, 27 Sep 2023 13:43:28 +0300 Subject: [PATCH 46/81] - access settings --- .../admin/core/class-admin-site-health.php | 124 +++++++++++++++++- 1 file changed, 122 insertions(+), 2 deletions(-) diff --git a/includes/admin/core/class-admin-site-health.php b/includes/admin/core/class-admin-site-health.php index 12d03c90..0c687660 100644 --- a/includes/admin/core/class-admin-site-health.php +++ b/includes/admin/core/class-admin-site-health.php @@ -261,9 +261,129 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { ), ); + // Content Restriction settings + $restricted_posts = UM()->options()->get( 'restricted_access_post_metabox' ); + $restricted_posts_list = ''; + if ( ! empty( $restricted_posts ) ) { + foreach ( $restricted_posts as $key => $posts ) { + $restricted_posts_list = empty ( $restricted_posts_list ) ? $key : $restricted_posts_list . ', ' . $key; + } + } + $restricted_taxonomy = UM()->options()->get( 'restricted_access_taxonomy_metabox' ); + $restricted_taxonomy_list = ''; + if ( ! empty( $restricted_taxonomy ) ) { + foreach ( $restricted_taxonomy as $key => $posts ) { + $restricted_taxonomy_list = empty ( $restricted_taxonomy_list ) ? $key : $restricted_taxonomy_list . ', ' . $key; + } + } + + $restrict_settings = array( + 'um-accessible' => array( + 'label' => __( 'Global Site Access', 'ultimate-member' ), + 'value' => 0 === UM()->options()->get( 'accessible' ) ? __( 'Site accessible to Everyone', 'ultimate-member' ) : __( 'Site accessible to Logged In Users', 'ultimate-member' ), + ), + ); + + if ( 2 === absint( UM()->options()->get( 'accessible' ) ) ) { + $exclude_uris = UM()->options()->get( 'access_exclude_uris' ); + $exclude_uris_list = ''; + if ( ! empty( $exclude_uris ) ) { + foreach ( $exclude_uris as $key => $url ) { + $exclude_uris_list = empty( $exclude_uris_list ) ? $url : $exclude_uris_list . ', ' . $url; + } + } + $restrict_settings['um-access_redirect'] = array( + 'label' => __( 'Custom Redirect URL', 'ultimate-member' ), + 'value' => UM()->options()->get( 'access_redirect' ), + ); + $restrict_settings['um-access_exclude_uris'] = array( + 'label' => __( 'Account Deletion Text', 'ultimate-member' ), + 'value' => $exclude_uris_list, + ); + $restrict_settings['um-home_page_accessible'] = array( + 'label' => __( 'Allow Homepage to be accessible', 'ultimate-member' ), + 'value' => UM()->options()->get( 'home_page_accessible' ) ? $labels['yes'] : $labels['no'], + ); + $restrict_settings['um-category_page_accessible'] = array( + 'label' => __( 'Allow Category pages to be accessible', 'ultimate-member' ), + 'value' => UM()->options()->get( 'category_page_accessible' ) ? $labels['yes'] : $labels['no'], + ); + } + + $restrict_settings['um-restricted_post_title_replace'] = array( + 'label' => __( 'Restricted Content Titles', 'ultimate-member' ), + 'value' => UM()->options()->get( 'restricted_post_title_replace' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'restricted_post_title_replace' ) ) ) { + $restrict_settings['um-restricted_access_post_title'] = array( + 'label' => __( 'Restricted Content Title Text', 'ultimate-member' ), + 'value' => stripslashes( UM()->options()->get( 'restricted_access_post_title' ) ), + ); + } + + $restrict_settings['um-restricted_access_message'] = array( + 'label' => __( 'Restricted Access Message', 'ultimate-member' ), + 'value' => stripslashes( UM()->options()->get( 'restricted_access_message' ) ), + ); + $restrict_settings['um-restricted_blocks'] = array( + 'label' => __( 'Enable the "Content Restriction" settings for the Gutenberg Blocks', 'ultimate-member' ), + 'value' => UM()->options()->get( 'restricted_blocks' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'restricted_blocks' ) ) ) { + $restrict_settings['um-restricted_block_message'] = array( + 'label' => __( 'Restricted Access Block Message', 'ultimate-member' ), + 'value' => stripslashes( UM()->options()->get( 'restricted_block_message' ) ), + ); + } + $restrict_settings['um-restricted_access_post_metabox'] = array( + 'label' => __( 'Enable the "Content Restriction" settings for post types', 'ultimate-member' ), + 'value' => $restricted_posts_list, + ); + $restrict_settings['um-restricted_access_taxonomy_metabox'] = array( + 'label' => __( 'Enable the "Content Restriction" settings for taxonomies', 'ultimate-member' ), + 'value' => $restricted_taxonomy_list, + ); + + // Access other settings + $blocked_emails = str_replace( '
', ', ', nl2br( UM()->options()->get( 'blocked_emails' ) ) ); + $blocked_words = str_replace( '
', ', ', nl2br( UM()->options()->get( 'blocked_words' ) ) ); + $allowed_callbacks = str_replace( '
', ', ', nl2br( UM()->options()->get( 'allowed_choice_callbacks' ) ) ); + + $access_other_settings = array( + 'um-enable_reset_password_limit' => array( + 'label' => __( 'Enable the Reset Password Limit?', 'ultimate-member' ), + 'value' => UM()->options()->get( 'enable_reset_password_limit' ) ? $labels['yes'] : $labels['no'], + ), + ); + if ( 1 === absint( UM()->options()->get( 'enable_reset_password_limit' ) ) ) { + $access_other_settings['um-reset_password_limit_number'] = array( + 'label' => __( 'Reset Password Limit ', 'ultimate-member' ), + 'value' => UM()->options()->get( 'reset_password_limit_number' ), + ); + } + $access_other_settings['um-change_password_request_limit'] = array( + 'label' => __( 'Change Password request limit ', 'ultimate-member' ), + 'value' => UM()->options()->get( 'change_password_request_limit' ), + ); + $access_other_settings['um-blocked_emails'] = array( + 'label' => __( 'Blocked Email Addresses', 'ultimate-member' ), + 'value' => stripslashes( $blocked_emails ), + ); + $access_other_settings['um-blocked_words'] = array( + 'label' => __( 'Banned Usernames', 'ultimate-member' ), + 'value' => stripslashes( $blocked_words ), + ); + $access_other_settings['um-allowed_choice_callbacks'] = array( + 'label' => __( 'Allowed Choice Callbacks', 'ultimate-member' ), + 'value' => stripslashes( $allowed_callbacks ), + ); + $access_other_settings['um-allow_url_redirect_confirm'] = array( + 'label' => __( 'Allow external link redirect confirm ', 'ultimate-member' ), + 'value' => UM()->options()->get( 'allow_url_redirect_confirm' ), + ); + + - $restrict_settings = array(); - $access_other_settings = array(); $email_settings = array(); $misc_settings = array(); From 5737a42c5e247c352f1133eab269bffd76deb6ad Mon Sep 17 00:00:00 2001 From: ashubawork Date: Wed, 27 Sep 2023 14:02:23 +0300 Subject: [PATCH 47/81] - email settings --- .../admin/core/class-admin-site-health.php | 37 ++++++++++++++++++- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/includes/admin/core/class-admin-site-health.php b/includes/admin/core/class-admin-site-health.php index 0c687660..5887e1a9 100644 --- a/includes/admin/core/class-admin-site-health.php +++ b/includes/admin/core/class-admin-site-health.php @@ -379,12 +379,45 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { ); $access_other_settings['um-allow_url_redirect_confirm'] = array( 'label' => __( 'Allow external link redirect confirm ', 'ultimate-member' ), - 'value' => UM()->options()->get( 'allow_url_redirect_confirm' ), + 'value' => UM()->options()->get( 'allow_url_redirect_confirm' ) ? $labels['yes'] : $labels['no'], ); + // Email settings + $email_settings = array( + 'um-admin_email' => array( + 'label' => __( 'Admin E-mail Address', 'ultimate-member' ), + 'value' => UM()->options()->get( 'admin_email' ), + ), + 'um-mail_from' => array( + 'label' => __( 'Mail appears from', 'ultimate-member' ), + 'value' => UM()->options()->get( 'mail_from' ), + ), + 'um-mail_from_addr' => array( + 'label' => __( 'Mail appears from address', 'ultimate-member' ), + 'value' => UM()->options()->get( 'mail_from_addr' ), + ), + 'um-email_html' => array( + 'label' => __( 'Use HTML for E-mails?', 'ultimate-member' ), + 'value' => UM()->options()->get( 'email_html' ) ? $labels['yes'] : $labels['no'], + ), + ); + + $emails = UM()->config()->email_notifications; + foreach ( $emails as $key => $email ) { + if ( 1 == UM()->options()->get( $key . '_on' ) ) { + $email_settings['um-' . $key ] = array( + 'label' => $email['title'] . __( ' Subject', 'ultimate-member' ), + 'value' => UM()->options()->get( $key . '_sub'), + ); + + $email_settings[ 'um-theme_' . $key ] = array( + 'label' => __( 'Template ', 'ultimate-member' ) . $email['title'] . __( ' in theme?', 'ultimate-member' ), + 'value' => '' !== locate_template( array( 'ultimate-member/emails/' . $key . '.php' ) ) ? $labels['yes'] : $labels['no'], + ); + } + } - $email_settings = array(); $misc_settings = array(); $info['ultimate-member']['fields'] = array_merge( $info['ultimate-member']['fields'], $pages_settings, $user_settings, $account_settings, $uploads_settings, $restrict_settings, $access_other_settings, $email_settings, $misc_settings ); From 45dbfffb0ff982103c5e0597279f5d896d585a4b Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Wed, 27 Sep 2023 14:50:43 +0300 Subject: [PATCH 48/81] - updated minified scripts; - fixed not-minified files; --- .../legacy/fonticons/fonticons-fa.min.css | 1 + .../legacy/fonticons/fonticons-ii.min.css | 1 + assets/{ => libs/raty}/font/raty.eot | Bin assets/{ => libs/raty}/font/raty.svg | 0 assets/{ => libs/raty}/font/raty.ttf | Bin assets/{ => libs/raty}/font/raty.woff | Bin assets/libs/raty/um-raty.css | 12 ++++---- assets/libs/raty/um-raty.min.css | 1 + assets/libs/tipsy/tipsy.min.css | 1 + gulpfile.js | 28 +++++++++++++++++- includes/admin/class-enqueue.php | 11 +------ includes/frontend/class-enqueue.php | 6 ---- 12 files changed, 38 insertions(+), 23 deletions(-) create mode 100644 assets/libs/legacy/fonticons/fonticons-fa.min.css create mode 100644 assets/libs/legacy/fonticons/fonticons-ii.min.css rename assets/{ => libs/raty}/font/raty.eot (100%) rename assets/{ => libs/raty}/font/raty.svg (100%) rename assets/{ => libs/raty}/font/raty.ttf (100%) rename assets/{ => libs/raty}/font/raty.woff (100%) create mode 100644 assets/libs/raty/um-raty.min.css create mode 100644 assets/libs/tipsy/tipsy.min.css diff --git a/assets/libs/legacy/fonticons/fonticons-fa.min.css b/assets/libs/legacy/fonticons/fonticons-fa.min.css new file mode 100644 index 00000000..691f060c --- /dev/null +++ b/assets/libs/legacy/fonticons/fonticons-fa.min.css @@ -0,0 +1 @@ +@charset "UTF-8";@font-face{font-family:FontAwesome;src:url(font/fontawesome-webfont.eot?v=4.2.0);src:url(font/fontawesome-webfont.eot?v=4.2.0#iefix) format("embedded-opentype"),url(font/fontawesome-webfont.woff?v=4.2.0) format("woff"),url(font/fontawesome-webfont.ttf?v=4.2.0) format("truetype"),url(font/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular) format("svg");font-display:swap;font-weight:400;font-style:normal}[class*=" um-faicon-"]:before,[class^=um-faicon-]:before{font-family:FontAwesome!important;font-style:normal!important;font-weight:400!important;font-variant:normal!important;text-transform:none!important;speak:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.um-faicon-sticky-note:before{content:"\f249"}.um-faicon-glass:before{content:"\f000"}.um-faicon-music:before{content:"\f001"}.um-faicon-search:before{content:"\f002"}.um-faicon-envelope-o:before{content:"\f003"}.um-faicon-heart:before{content:"\f004"}.um-faicon-star:before{content:"\f005"}.um-faicon-star-o:before{content:"\f006"}.um-faicon-user:before{content:"\f007"}.um-faicon-film:before{content:"\f008"}.um-faicon-th-large:before{content:"\f009"}.um-faicon-th:before{content:"\f00a"}.um-faicon-th-list:before{content:"\f00b"}.um-faicon-check:before{content:"\f00c"}.um-faicon-close:before,.um-faicon-remove:before,.um-faicon-times:before{content:"\f00d"}.um-faicon-search-plus:before{content:"\f00e"}.um-faicon-search-minus:before{content:"\f010"}.um-faicon-power-off:before{content:"\f011"}.um-faicon-signal:before{content:"\f012"}.um-faicon-cog:before,.um-faicon-gear:before{content:"\f013"}.um-faicon-trash-o:before{content:"\f014"}.um-faicon-home:before{content:"\f015"}.um-faicon-file-o:before{content:"\f016"}.um-faicon-clock-o:before{content:"\f017"}.um-faicon-road:before{content:"\f018"}.um-faicon-download:before{content:"\f019"}.um-faicon-arrow-circle-o-down:before{content:"\f01a"}.um-faicon-arrow-circle-o-up:before{content:"\f01b"}.um-faicon-inbox:before{content:"\f01c"}.um-faicon-play-circle-o:before{content:"\f01d"}.um-faicon-repeat:before,.um-faicon-rotate-right:before{content:"\f01e"}.um-faicon-refresh:before{content:"\f021"}.um-faicon-list-alt:before{content:"\f022"}.um-faicon-lock:before{content:"\f023"}.um-faicon-flag:before{content:"\f024"}.um-faicon-headphones:before{content:"\f025"}.um-faicon-volume-off:before{content:"\f026"}.um-faicon-volume-down:before{content:"\f027"}.um-faicon-volume-up:before{content:"\f028"}.um-faicon-qrcode:before{content:"\f029"}.um-faicon-barcode:before{content:"\f02a"}.um-faicon-tag:before{content:"\f02b"}.um-faicon-tags:before{content:"\f02c"}.um-faicon-book:before{content:"\f02d"}.um-faicon-bookmark:before{content:"\f02e"}.um-faicon-print:before{content:"\f02f"}.um-faicon-camera:before{content:"\f030"}.um-faicon-font:before{content:"\f031"}.um-faicon-bold:before{content:"\f032"}.um-faicon-italic:before{content:"\f033"}.um-faicon-text-height:before{content:"\f034"}.um-faicon-text-width:before{content:"\f035"}.um-faicon-align-left:before{content:"\f036"}.um-faicon-align-center:before{content:"\f037"}.um-faicon-align-right:before{content:"\f038"}.um-faicon-align-justify:before{content:"\f039"}.um-faicon-list:before{content:"\f03a"}.um-faicon-dedent:before,.um-faicon-outdent:before{content:"\f03b"}.um-faicon-indent:before{content:"\f03c"}.um-faicon-video-camera:before{content:"\f03d"}.um-faicon-image:before,.um-faicon-photo:before,.um-faicon-picture-o:before{content:"\f03e"}.um-faicon-pencil:before{content:"\f040"}.um-faicon-map-marker:before{content:"\f041"}.um-faicon-adjust:before{content:"\f042"}.um-faicon-tint:before{content:"\f043"}.um-faicon-edit:before,.um-faicon-pencil-square-o:before{content:"\f044"}.um-faicon-share-square-o:before{content:"\f045"}.um-faicon-check-square-o:before{content:"\f046"}.um-faicon-arrows:before{content:"\f047"}.um-faicon-step-backward:before{content:"\f048"}.um-faicon-fast-backward:before{content:"\f049"}.um-faicon-backward:before{content:"\f04a"}.um-faicon-play:before{content:"\f04b"}.um-faicon-pause:before{content:"\f04c"}.um-faicon-stop:before{content:"\f04d"}.um-faicon-forward:before{content:"\f04e"}.um-faicon-fast-forward:before{content:"\f050"}.um-faicon-step-forward:before{content:"\f051"}.um-faicon-eject:before{content:"\f052"}.um-faicon-chevron-left:before{content:"\f053"}.um-faicon-chevron-right:before{content:"\f054"}.um-faicon-plus-circle:before{content:"\f055"}.um-faicon-minus-circle:before{content:"\f056"}.um-faicon-times-circle:before{content:"\f057"}.um-faicon-check-circle:before{content:"\f058"}.um-faicon-question-circle:before{content:"\f059"}.um-faicon-info-circle:before{content:"\f05a"}.um-faicon-crosshairs:before{content:"\f05b"}.um-faicon-times-circle-o:before{content:"\f05c"}.um-faicon-check-circle-o:before{content:"\f05d"}.um-faicon-ban:before{content:"\f05e"}.um-faicon-arrow-left:before{content:"\f060"}.um-faicon-arrow-right:before{content:"\f061"}.um-faicon-arrow-up:before{content:"\f062"}.um-faicon-arrow-down:before{content:"\f063"}.um-faicon-mail-forward:before,.um-faicon-share:before{content:"\f064"}.um-faicon-expand:before{content:"\f065"}.um-faicon-compress:before{content:"\f066"}.um-faicon-plus:before{content:"\f067"}.um-faicon-minus:before{content:"\f068"}.um-faicon-asterisk:before{content:"\f069"}.um-faicon-exclamation-circle:before{content:"\f06a"}.um-faicon-gift:before{content:"\f06b"}.um-faicon-leaf:before{content:"\f06c"}.um-faicon-fire:before{content:"\f06d"}.um-faicon-eye:before{content:"\f06e"}.um-faicon-eye-slash:before{content:"\f070"}.um-faicon-exclamation-triangle:before,.um-faicon-warning:before{content:"\f071"}.um-faicon-plane:before{content:"\f072"}.um-faicon-calendar:before{content:"\f073"}.um-faicon-random:before{content:"\f074"}.um-faicon-comment:before{content:"\f075"}.um-faicon-magnet:before{content:"\f076"}.um-faicon-chevron-up:before{content:"\f077"}.um-faicon-chevron-down:before{content:"\f078"}.um-faicon-retweet:before{content:"\f079"}.um-faicon-shopping-cart:before{content:"\f07a"}.um-faicon-folder:before{content:"\f07b"}.um-faicon-folder-open:before{content:"\f07c"}.um-faicon-arrows-v:before{content:"\f07d"}.um-faicon-arrows-h:before{content:"\f07e"}.um-faicon-bar-chart-o:before,.um-faicon-bar-chart:before{content:"\f080"}.um-faicon-twitter-square:before{content:"\f081"}.um-faicon-facebook-square:before{content:"\f082"}.um-faicon-camera-retro:before{content:"\f083"}.um-faicon-key:before{content:"\f084"}.um-faicon-cogs:before,.um-faicon-gears:before{content:"\f085"}.um-faicon-comments:before{content:"\f086"}.um-faicon-thumbs-o-up:before{content:"\f087"}.um-faicon-thumbs-o-down:before{content:"\f088"}.um-faicon-star-half:before{content:"\f089"}.um-faicon-heart-o:before{content:"\f08a"}.um-faicon-sign-out:before{content:"\f08b"}.um-faicon-linkedin-square:before{content:"\f08c"}.um-faicon-thumb-tack:before{content:"\f08d"}.um-faicon-external-link:before{content:"\f08e"}.um-faicon-sign-in:before{content:"\f090"}.um-faicon-trophy:before{content:"\f091"}.um-faicon-github-square:before{content:"\f092"}.um-faicon-upload:before{content:"\f093"}.um-faicon-lemon-o:before{content:"\f094"}.um-faicon-phone:before{content:"\f095"}.um-faicon-square-o:before{content:"\f096"}.um-faicon-bookmark-o:before{content:"\f097"}.um-faicon-phone-square:before{content:"\f098"}.um-faicon-twitter:before{content:"\f099"}.um-faicon-facebook:before{content:"\f09a"}.um-faicon-github:before{content:"\f09b"}.um-faicon-unlock:before{content:"\f09c"}.um-faicon-credit-card:before{content:"\f09d"}.um-faicon-rss:before{content:"\f09e"}.um-faicon-hdd-o:before{content:"\f0a0"}.um-faicon-bullhorn:before{content:"\f0a1"}.um-faicon-bell:before{content:"\f0f3"}.um-faicon-certificate:before{content:"\f0a3"}.um-faicon-hand-o-right:before{content:"\f0a4"}.um-faicon-hand-o-left:before{content:"\f0a5"}.um-faicon-hand-o-up:before{content:"\f0a6"}.um-faicon-hand-o-down:before{content:"\f0a7"}.um-faicon-arrow-circle-left:before{content:"\f0a8"}.um-faicon-arrow-circle-right:before{content:"\f0a9"}.um-faicon-arrow-circle-up:before{content:"\f0aa"}.um-faicon-arrow-circle-down:before{content:"\f0ab"}.um-faicon-globe:before{content:"\f0ac"}.um-faicon-wrench:before{content:"\f0ad"}.um-faicon-tasks:before{content:"\f0ae"}.um-faicon-filter:before{content:"\f0b0"}.um-faicon-briefcase:before{content:"\f0b1"}.um-faicon-arrows-alt:before{content:"\f0b2"}.um-faicon-group:before,.um-faicon-users:before{content:"\f0c0"}.um-faicon-chain:before,.um-faicon-link:before{content:"\f0c1"}.um-faicon-cloud:before{content:"\f0c2"}.um-faicon-flask:before{content:"\f0c3"}.um-faicon-cut:before,.um-faicon-scissors:before{content:"\f0c4"}.um-faicon-copy:before,.um-faicon-files-o:before{content:"\f0c5"}.um-faicon-paperclip:before{content:"\f0c6"}.um-faicon-floppy-o:before,.um-faicon-save:before{content:"\f0c7"}.um-faicon-square:before{content:"\f0c8"}.um-faicon-bars:before,.um-faicon-navicon:before,.um-faicon-reorder:before{content:"\f0c9"}.um-faicon-list-ul:before{content:"\f0ca"}.um-faicon-list-ol:before{content:"\f0cb"}.um-faicon-strikethrough:before{content:"\f0cc"}.um-faicon-underline:before{content:"\f0cd"}.um-faicon-table:before{content:"\f0ce"}.um-faicon-magic:before{content:"\f0d0"}.um-faicon-truck:before{content:"\f0d1"}.um-faicon-pinterest:before{content:"\f0d2"}.um-faicon-pinterest-square:before{content:"\f0d3"}.um-faicon-google-plus-square:before{content:"\f0d4"}.um-faicon-google-plus:before{content:"\f0d5"}.um-faicon-money:before{content:"\f0d6"}.um-faicon-caret-down:before{content:"\f0d7"}.um-faicon-caret-up:before{content:"\f0d8"}.um-faicon-caret-left:before{content:"\f0d9"}.um-faicon-caret-right:before{content:"\f0da"}.um-faicon-columns:before{content:"\f0db"}.um-faicon-sort:before,.um-faicon-unsorted:before{content:"\f0dc"}.um-faicon-sort-desc:before,.um-faicon-sort-down:before{content:"\f0dd"}.um-faicon-sort-asc:before,.um-faicon-sort-up:before{content:"\f0de"}.um-faicon-envelope:before{content:"\f0e0"}.um-faicon-linkedin:before{content:"\f0e1"}.um-faicon-rotate-left:before,.um-faicon-undo:before{content:"\f0e2"}.um-faicon-gavel:before,.um-faicon-legal:before{content:"\f0e3"}.um-faicon-dashboard:before,.um-faicon-tachometer:before{content:"\f0e4"}.um-faicon-comment-o:before{content:"\f0e5"}.um-faicon-comments-o:before{content:"\f0e6"}.um-faicon-bolt:before,.um-faicon-flash:before{content:"\f0e7"}.um-faicon-sitemap:before{content:"\f0e8"}.um-faicon-umbrella:before{content:"\f0e9"}.um-faicon-clipboard:before,.um-faicon-paste:before{content:"\f0ea"}.um-faicon-lightbulb-o:before{content:"\f0eb"}.um-faicon-exchange:before{content:"\f0ec"}.um-faicon-cloud-download:before{content:"\f0ed"}.um-faicon-cloud-upload:before{content:"\f0ee"}.um-faicon-user-md:before{content:"\f0f0"}.um-faicon-stethoscope:before{content:"\f0f1"}.um-faicon-suitcase:before{content:"\f0f2"}.um-faicon-bell-o:before{content:"\f0a2"}.um-faicon-coffee:before{content:"\f0f4"}.um-faicon-cutlery:before{content:"\f0f5"}.um-faicon-file-text-o:before{content:"\f0f6"}.um-faicon-building-o:before{content:"\f0f7"}.um-faicon-hospital-o:before{content:"\f0f8"}.um-faicon-ambulance:before{content:"\f0f9"}.um-faicon-medkit:before{content:"\f0fa"}.um-faicon-fighter-jet:before{content:"\f0fb"}.um-faicon-beer:before{content:"\f0fc"}.um-faicon-h-square:before{content:"\f0fd"}.um-faicon-plus-square:before{content:"\f0fe"}.um-faicon-angle-double-left:before{content:"\f100"}.um-faicon-angle-double-right:before{content:"\f101"}.um-faicon-angle-double-up:before{content:"\f102"}.um-faicon-angle-double-down:before{content:"\f103"}.um-faicon-angle-left:before{content:"\f104"}.um-faicon-angle-right:before{content:"\f105"}.um-faicon-angle-up:before{content:"\f106"}.um-faicon-angle-down:before{content:"\f107"}.um-faicon-desktop:before{content:"\f108"}.um-faicon-laptop:before{content:"\f109"}.um-faicon-tablet:before{content:"\f10a"}.um-faicon-mobile-phone:before,.um-faicon-mobile:before{content:"\f10b"}.um-faicon-circle-o:before{content:"\f10c"}.um-faicon-quote-left:before{content:"\f10d"}.um-faicon-quote-right:before{content:"\f10e"}.um-faicon-spinner:before{content:"\f110"}.um-faicon-spin{-webkit-animation:um-faicon-spin 2s infinite linear;animation:um-faicon-spin 2s infinite linear}.um-faicon-circle:before{content:"\f111"}.um-faicon-mail-reply:before,.um-faicon-reply:before{content:"\f112"}.um-faicon-github-alt:before{content:"\f113"}.um-faicon-folder-o:before{content:"\f114"}.um-faicon-folder-open-o:before{content:"\f115"}.um-faicon-smile-o:before{content:"\f118"}.um-faicon-frown-o:before{content:"\f119"}.um-faicon-meh-o:before{content:"\f11a"}.um-faicon-gamepad:before{content:"\f11b"}.um-faicon-keyboard-o:before{content:"\f11c"}.um-faicon-flag-o:before{content:"\f11d"}.um-faicon-flag-checkered:before{content:"\f11e"}.um-faicon-terminal:before{content:"\f120"}.um-faicon-code:before{content:"\f121"}.um-faicon-mail-reply-all:before,.um-faicon-reply-all:before{content:"\f122"}.um-faicon-star-half-empty:before,.um-faicon-star-half-full:before,.um-faicon-star-half-o:before{content:"\f123"}.um-faicon-location-arrow:before{content:"\f124"}.um-faicon-crop:before{content:"\f125"}.um-faicon-code-fork:before{content:"\f126"}.um-faicon-chain-broken:before,.um-faicon-unlink:before{content:"\f127"}.um-faicon-question:before{content:"\f128"}.um-faicon-info:before{content:"\f129"}.um-faicon-exclamation:before{content:"\f12a"}.um-faicon-superscript:before{content:"\f12b"}.um-faicon-subscript:before{content:"\f12c"}.um-faicon-eraser:before{content:"\f12d"}.um-faicon-puzzle-piece:before{content:"\f12e"}.um-faicon-microphone:before{content:"\f130"}.um-faicon-microphone-slash:before{content:"\f131"}.um-faicon-shield:before{content:"\f132"}.um-faicon-calendar-o:before{content:"\f133"}.um-faicon-fire-extinguisher:before{content:"\f134"}.um-faicon-rocket:before{content:"\f135"}.um-faicon-maxcdn:before{content:"\f136"}.um-faicon-chevron-circle-left:before{content:"\f137"}.um-faicon-chevron-circle-right:before{content:"\f138"}.um-faicon-chevron-circle-up:before{content:"\f139"}.um-faicon-chevron-circle-down:before{content:"\f13a"}.um-faicon-html5:before{content:"\f13b"}.um-faicon-css3:before{content:"\f13c"}.um-faicon-anchor:before{content:"\f13d"}.um-faicon-unlock-alt:before{content:"\f13e"}.um-faicon-bullseye:before{content:"\f140"}.um-faicon-ellipsis-h:before{content:"\f141"}.um-faicon-ellipsis-v:before{content:"\f142"}.um-faicon-rss-square:before{content:"\f143"}.um-faicon-play-circle:before{content:"\f144"}.um-faicon-ticket:before{content:"\f145"}.um-faicon-minus-square:before{content:"\f146"}.um-faicon-minus-square-o:before{content:"\f147"}.um-faicon-level-up:before{content:"\f148"}.um-faicon-level-down:before{content:"\f149"}.um-faicon-check-square:before{content:"\f14a"}.um-faicon-pencil-square:before{content:"\f14b"}.um-faicon-external-link-square:before{content:"\f14c"}.um-faicon-share-square:before{content:"\f14d"}.um-faicon-compass:before{content:"\f14e"}.um-faicon-caret-square-o-down:before,.um-faicon-toggle-down:before{content:"\f150"}.um-faicon-caret-square-o-up:before,.um-faicon-toggle-up:before{content:"\f151"}.um-faicon-caret-square-o-right:before,.um-faicon-toggle-right:before{content:"\f152"}.um-faicon-eur:before,.um-faicon-euro:before{content:"\f153"}.um-faicon-gbp:before{content:"\f154"}.um-faicon-dollar:before,.um-faicon-usd:before{content:"\f155"}.um-faicon-inr:before,.um-faicon-rupee:before{content:"\f156"}.um-faicon-cny:before,.um-faicon-jpy:before,.um-faicon-rmb:before,.um-faicon-yen:before{content:"\f157"}.um-faicon-rouble:before,.um-faicon-rub:before,.um-faicon-ruble:before{content:"\f158"}.um-faicon-krw:before,.um-faicon-won:before{content:"\f159"}.um-faicon-bitcoin:before,.um-faicon-btc:before{content:"\f15a"}.um-faicon-file:before{content:"\f15b"}.um-faicon-file-text:before{content:"\f15c"}.um-faicon-sort-alpha-asc:before{content:"\f15d"}.um-faicon-sort-alpha-desc:before{content:"\f15e"}.um-faicon-sort-amount-asc:before{content:"\f160"}.um-faicon-sort-amount-desc:before{content:"\f161"}.um-faicon-sort-numeric-asc:before{content:"\f162"}.um-faicon-sort-numeric-desc:before{content:"\f163"}.um-faicon-thumbs-up:before{content:"\f164"}.um-faicon-thumbs-down:before{content:"\f165"}.um-faicon-youtube-square:before{content:"\f166"}.um-faicon-youtube:before{content:"\f167"}.um-faicon-xing:before{content:"\f168"}.um-faicon-xing-square:before{content:"\f169"}.um-faicon-youtube-play:before{content:"\f16a"}.um-faicon-dropbox:before{content:"\f16b"}.um-faicon-stack-overflow:before{content:"\f16c"}.um-faicon-instagram:before{content:"\f16d"}.um-faicon-flickr:before{content:"\f16e"}.um-faicon-adn:before{content:"\f170"}.um-faicon-bitbucket:before{content:"\f171"}.um-faicon-bitbucket-square:before{content:"\f172"}.um-faicon-tumblr:before{content:"\f173"}.um-faicon-tumblr-square:before{content:"\f174"}.um-faicon-long-arrow-down:before{content:"\f175"}.um-faicon-long-arrow-up:before{content:"\f176"}.um-faicon-long-arrow-left:before{content:"\f177"}.um-faicon-long-arrow-right:before{content:"\f178"}.um-faicon-apple:before{content:"\f179"}.um-faicon-windows:before{content:"\f17a"}.um-faicon-android:before{content:"\f17b"}.um-faicon-linux:before{content:"\f17c"}.um-faicon-dribbble:before{content:"\f17d"}.um-faicon-skype:before{content:"\f17e"}.um-faicon-foursquare:before{content:"\f180"}.um-faicon-trello:before{content:"\f181"}.um-faicon-female:before{content:"\f182"}.um-faicon-male:before{content:"\f183"}.um-faicon-gittip:before{content:"\f184"}.um-faicon-sun-o:before{content:"\f185"}.um-faicon-moon-o:before{content:"\f186"}.um-faicon-archive:before{content:"\f187"}.um-faicon-bug:before{content:"\f188"}.um-faicon-vk:before{content:"\f189"}.um-faicon-weibo:before{content:"\f18a"}.um-faicon-renren:before{content:"\f18b"}.um-faicon-pagelines:before{content:"\f18c"}.um-faicon-stack-exchange:before{content:"\f18d"}.um-faicon-arrow-circle-o-right:before{content:"\f18e"}.um-faicon-arrow-circle-o-left:before{content:"\f190"}.um-faicon-caret-square-o-left:before,.um-faicon-toggle-left:before{content:"\f191"}.um-faicon-dot-circle-o:before{content:"\f192"}.um-faicon-wheelchair:before{content:"\f193"}.um-faicon-vimeo-square:before{content:"\f194"}.um-faicon-try:before,.um-faicon-turkish-lira:before{content:"\f195"}.um-faicon-plus-square-o:before{content:"\f196"}.um-faicon-space-shuttle:before{content:"\f197"}.um-faicon-slack:before{content:"\f198"}.um-faicon-envelope-square:before{content:"\f199"}.um-faicon-wordpress:before{content:"\f19a"}.um-faicon-openid:before{content:"\f19b"}.um-faicon-bank:before,.um-faicon-institution:before,.um-faicon-university:before{content:"\f19c"}.um-faicon-graduation-cap:before,.um-faicon-mortar-board:before{content:"\f19d"}.um-faicon-yahoo:before{content:"\f19e"}.um-faicon-google:before{content:"\f1a0"}.um-faicon-reddit:before{content:"\f1a1"}.um-faicon-reddit-square:before{content:"\f1a2"}.um-faicon-stumbleupon-circle:before{content:"\f1a3"}.um-faicon-stumbleupon:before{content:"\f1a4"}.um-faicon-delicious:before{content:"\f1a5"}.um-faicon-digg:before{content:"\f1a6"}.um-faicon-pied-piper:before{content:"\f1a7"}.um-faicon-pied-piper-alt:before{content:"\f1a8"}.um-faicon-drupal:before{content:"\f1a9"}.um-faicon-joomla:before{content:"\f1aa"}.um-faicon-language:before{content:"\f1ab"}.um-faicon-fax:before{content:"\f1ac"}.um-faicon-building:before{content:"\f1ad"}.um-faicon-child:before{content:"\f1ae"}.um-faicon-paw:before{content:"\f1b0"}.um-faicon-spoon:before{content:"\f1b1"}.um-faicon-cube:before{content:"\f1b2"}.um-faicon-cubes:before{content:"\f1b3"}.um-faicon-behance:before{content:"\f1b4"}.um-faicon-behance-square:before{content:"\f1b5"}.um-faicon-steam:before{content:"\f1b6"}.um-faicon-steam-square:before{content:"\f1b7"}.um-faicon-recycle:before{content:"\f1b8"}.um-faicon-automobile:before,.um-faicon-car:before{content:"\f1b9"}.um-faicon-cab:before,.um-faicon-taxi:before{content:"\f1ba"}.um-faicon-tree:before{content:"\f1bb"}.um-faicon-spotify:before{content:"\f1bc"}.um-faicon-deviantart:before{content:"\f1bd"}.um-faicon-soundcloud:before{content:"\f1be"}.um-faicon-database:before{content:"\f1c0"}.um-faicon-file-pdf-o:before{content:"\f1c1"}.um-faicon-file-word-o:before{content:"\f1c2"}.um-faicon-file-excel-o:before{content:"\f1c3"}.um-faicon-file-powerpoint-o:before{content:"\f1c4"}.um-faicon-file-image-o:before,.um-faicon-file-photo-o:before,.um-faicon-file-picture-o:before{content:"\f1c5"}.um-faicon-file-archive-o:before,.um-faicon-file-zip-o:before{content:"\f1c6"}.um-faicon-file-audio-o:before,.um-faicon-file-sound-o:before{content:"\f1c7"}.um-faicon-file-movie-o:before,.um-faicon-file-video-o:before{content:"\f1c8"}.um-faicon-file-code-o:before{content:"\f1c9"}.um-faicon-vine:before{content:"\f1ca"}.um-faicon-codepen:before{content:"\f1cb"}.um-faicon-jsfiddle:before{content:"\f1cc"}.um-faicon-life-bouy:before,.um-faicon-life-buoy:before,.um-faicon-life-ring:before,.um-faicon-life-saver:before,.um-faicon-support:before{content:"\f1cd"}.um-faicon-circle-o-notch:before{content:"\f1ce"}.um-faicon-ra:before,.um-faicon-rebel:before{content:"\f1d0"}.um-faicon-empire:before,.um-faicon-ge:before{content:"\f1d1"}.um-faicon-git-square:before{content:"\f1d2"}.um-faicon-git:before{content:"\f1d3"}.um-faicon-hacker-news:before{content:"\f1d4"}.um-faicon-tencent-weibo:before{content:"\f1d5"}.um-faicon-qq:before{content:"\f1d6"}.um-faicon-wechat:before,.um-faicon-weixin:before{content:"\f1d7"}.um-faicon-paper-plane:before,.um-faicon-send:before{content:"\f1d8"}.um-faicon-paper-plane-o:before,.um-faicon-send-o:before{content:"\f1d9"}.um-faicon-history:before{content:"\f1da"}.um-faicon-circle-thin:before{content:"\f1db"}.um-faicon-header:before{content:"\f1dc"}.um-faicon-paragraph:before{content:"\f1dd"}.um-faicon-sliders:before{content:"\f1de"}.um-faicon-share-alt:before{content:"\f1e0"}.um-faicon-share-alt-square:before{content:"\f1e1"}.um-faicon-bomb:before{content:"\f1e2"}.um-faicon-futbol-o:before,.um-faicon-soccer-ball-o:before{content:"\f1e3"}.um-faicon-tty:before{content:"\f1e4"}.um-faicon-binoculars:before{content:"\f1e5"}.um-faicon-plug:before{content:"\f1e6"}.um-faicon-slideshare:before{content:"\f1e7"}.um-faicon-twitch:before{content:"\f1e8"}.um-faicon-yelp:before{content:"\f1e9"}.um-faicon-newspaper-o:before{content:"\f1ea"}.um-faicon-wifi:before{content:"\f1eb"}.um-faicon-calculator:before{content:"\f1ec"}.um-faicon-paypal:before{content:"\f1ed"}.um-faicon-google-wallet:before{content:"\f1ee"}.um-faicon-cc-visa:before{content:"\f1f0"}.um-faicon-cc-mastercard:before{content:"\f1f1"}.um-faicon-cc-discover:before{content:"\f1f2"}.um-faicon-cc-amex:before{content:"\f1f3"}.um-faicon-cc-paypal:before{content:"\f1f4"}.um-faicon-cc-stripe:before{content:"\f1f5"}.um-faicon-bell-slash:before{content:"\f1f6"}.um-faicon-bell-slash-o:before{content:"\f1f7"}.um-faicon-trash:before{content:"\f1f8"}.um-faicon-copyright:before{content:"\f1f9"}.um-faicon-at:before{content:"\f1fa"}.um-faicon-eyedropper:before{content:"\f1fb"}.um-faicon-paint-brush:before{content:"\f1fc"}.um-faicon-birthday-cake:before{content:"\f1fd"}.um-faicon-area-chart:before{content:"\f1fe"}.um-faicon-pie-chart:before{content:"\f200"}.um-faicon-line-chart:before{content:"\f201"}.um-faicon-lastfm:before{content:"\f202"}.um-faicon-lastfm-square:before{content:"\f203"}.um-faicon-toggle-off:before{content:"\f204"}.um-faicon-toggle-on:before{content:"\f205"}.um-faicon-bicycle:before{content:"\f206"}.um-faicon-bus:before{content:"\f207"}.um-faicon-ioxhost:before{content:"\f208"}.um-faicon-angellist:before{content:"\f209"}.um-faicon-cc:before{content:"\f20a"}.um-faicon-ils:before,.um-faicon-shekel:before,.um-faicon-sheqel:before{content:"\f20b"}.um-faicon-meanpath:before{content:"\f20c"}@-moz-keyframes um-faicon-spin{0%{-moz-transform:rotate(0)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes um-faicon-spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes um-faicon-spin{0%{-o-transform:rotate(0)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes um-faicon-spin{0%{-ms-transform:rotate(0)}100%{-ms-transform:rotate(359deg)}}@keyframes um-faicon-spin{0%{transform:rotate(0)}100%{transform:rotate(359deg)}} \ No newline at end of file diff --git a/assets/libs/legacy/fonticons/fonticons-ii.min.css b/assets/libs/legacy/fonticons/fonticons-ii.min.css new file mode 100644 index 00000000..fc636b95 --- /dev/null +++ b/assets/libs/legacy/fonticons/fonticons-ii.min.css @@ -0,0 +1 @@ +@charset "UTF-8";@font-face{font-family:Ionicons;src:url(font/ionicons.eot?v=2.0.0);src:url(font/ionicons.eot?v=2.0.0#iefix) format("embedded-opentype"),url(font/ionicons.woff?v=2.0.0) format("woff"),url(font/ionicons.ttf?v=2.0.0) format("truetype"),url(font/ionicons.svg?v=2.0.0#Ionicons) format("svg");font-display:swap;font-weight:400;font-style:normal}[class*=" um-icon-"]:before,[class^=um-icon-]:before{font-family:Ionicons!important;font-style:normal!important;font-weight:400!important;font-variant:normal!important;text-transform:none!important;speak:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.um-icon-alert:before{content:"\f101"}.um-icon-alert-circled:before{content:"\f100"}.um-icon-android-add:before{content:"\f2c7"}.um-icon-android-add-circle:before{content:"\f359"}.um-icon-android-alarm-clock:before{content:"\f35a"}.um-icon-android-alert:before{content:"\f35b"}.um-icon-android-apps:before{content:"\f35c"}.um-icon-android-archive:before{content:"\f2c9"}.um-icon-android-arrow-back:before{content:"\f2ca"}.um-icon-android-arrow-down:before{content:"\f35d"}.um-icon-android-arrow-dropdown:before{content:"\f35f"}.um-icon-android-arrow-dropdown-circle:before{content:"\f35e"}.um-icon-android-arrow-dropleft:before{content:"\f361"}.um-icon-android-arrow-dropleft-circle:before{content:"\f360"}.um-icon-android-arrow-dropright:before{content:"\f363"}.um-icon-android-arrow-dropright-circle:before{content:"\f362"}.um-icon-android-arrow-dropup:before{content:"\f365"}.um-icon-android-arrow-dropup-circle:before{content:"\f364"}.um-icon-android-arrow-forward:before{content:"\f30f"}.um-icon-android-arrow-up:before{content:"\f366"}.um-icon-android-attach:before{content:"\f367"}.um-icon-android-bar:before{content:"\f368"}.um-icon-android-bicycle:before{content:"\f369"}.um-icon-android-boat:before{content:"\f36a"}.um-icon-android-bookmark:before{content:"\f36b"}.um-icon-android-bulb:before{content:"\f36c"}.um-icon-android-bus:before{content:"\f36d"}.um-icon-android-calendar:before{content:"\f2d1"}.um-icon-android-call:before{content:"\f2d2"}.um-icon-android-camera:before{content:"\f2d3"}.um-icon-android-cancel:before{content:"\f36e"}.um-icon-android-car:before{content:"\f36f"}.um-icon-android-cart:before{content:"\f370"}.um-icon-android-chat:before{content:"\f2d4"}.um-icon-android-checkbox:before{content:"\f374"}.um-icon-android-checkbox-blank:before{content:"\f371"}.um-icon-android-checkbox-outline:before{content:"\f373"}.um-icon-android-checkbox-outline-blank:before{content:"\f372"}.um-icon-android-checkmark-circle:before{content:"\f375"}.um-icon-android-clipboard:before{content:"\f376"}.um-icon-android-close:before{content:"\f2d7"}.um-icon-android-cloud:before{content:"\f37a"}.um-icon-android-cloud-circle:before{content:"\f377"}.um-icon-android-cloud-done:before{content:"\f378"}.um-icon-android-cloud-outline:before{content:"\f379"}.um-icon-android-color-palette:before{content:"\f37b"}.um-icon-android-compass:before{content:"\f37c"}.um-icon-android-contact:before{content:"\f2d8"}.um-icon-android-contacts:before{content:"\f2d9"}.um-icon-android-contract:before{content:"\f37d"}.um-icon-android-create:before{content:"\f37e"}.um-icon-android-delete:before{content:"\f37f"}.um-icon-android-desktop:before{content:"\f380"}.um-icon-android-document:before{content:"\f381"}.um-icon-android-done:before{content:"\f383"}.um-icon-android-done-all:before{content:"\f382"}.um-icon-android-download:before{content:"\f2dd"}.um-icon-android-drafts:before{content:"\f384"}.um-icon-android-exit:before{content:"\f385"}.um-icon-android-expand:before{content:"\f386"}.um-icon-android-favorite:before{content:"\f388"}.um-icon-android-favorite-outline:before{content:"\f387"}.um-icon-android-film:before{content:"\f389"}.um-icon-android-folder:before{content:"\f2e0"}.um-icon-android-folder-open:before{content:"\f38a"}.um-icon-android-funnel:before{content:"\f38b"}.um-icon-android-globe:before{content:"\f38c"}.um-icon-android-hand:before{content:"\f2e3"}.um-icon-android-hangout:before{content:"\f38d"}.um-icon-android-happy:before{content:"\f38e"}.um-icon-android-home:before{content:"\f38f"}.um-icon-android-image:before{content:"\f2e4"}.um-icon-android-laptop:before{content:"\f390"}.um-icon-android-list:before{content:"\f391"}.um-icon-android-locate:before{content:"\f2e9"}.um-icon-android-lock:before{content:"\f392"}.um-icon-android-mail:before{content:"\f2eb"}.um-icon-android-map:before{content:"\f393"}.um-icon-android-menu:before{content:"\f394"}.um-icon-android-microphone:before{content:"\f2ec"}.um-icon-android-microphone-off:before{content:"\f395"}.um-icon-android-more-horizontal:before{content:"\f396"}.um-icon-android-more-vertical:before{content:"\f397"}.um-icon-android-navigate:before{content:"\f398"}.um-icon-android-notifications:before{content:"\f39b"}.um-icon-android-notifications-none:before{content:"\f399"}.um-icon-android-notifications-off:before{content:"\f39a"}.um-icon-android-open:before{content:"\f39c"}.um-icon-android-options:before{content:"\f39d"}.um-icon-android-people:before{content:"\f39e"}.um-icon-android-person:before{content:"\f3a0"}.um-icon-android-person-add:before{content:"\f39f"}.um-icon-android-phone-landscape:before{content:"\f3a1"}.um-icon-android-phone-portrait:before{content:"\f3a2"}.um-icon-android-pin:before{content:"\f3a3"}.um-icon-android-plane:before{content:"\f3a4"}.um-icon-android-playstore:before{content:"\f2f0"}.um-icon-android-print:before{content:"\f3a5"}.um-icon-android-radio-button-off:before{content:"\f3a6"}.um-icon-android-radio-button-on:before{content:"\f3a7"}.um-icon-android-refresh:before{content:"\f3a8"}.um-icon-android-remove:before{content:"\f2f4"}.um-icon-android-remove-circle:before{content:"\f3a9"}.um-icon-android-restaurant:before{content:"\f3aa"}.um-icon-android-sad:before{content:"\f3ab"}.um-icon-android-search:before{content:"\f2f5"}.um-icon-android-send:before{content:"\f2f6"}.um-icon-android-settings:before{content:"\f2f7"}.um-icon-android-share:before{content:"\f2f8"}.um-icon-android-share-alt:before{content:"\f3ac"}.um-icon-android-star:before{content:"\f2fc"}.um-icon-android-star-half:before{content:"\f3ad"}.um-icon-android-star-outline:before{content:"\f3ae"}.um-icon-android-stopwatch:before{content:"\f2fd"}.um-icon-android-subway:before{content:"\f3af"}.um-icon-android-sunny:before{content:"\f3b0"}.um-icon-android-sync:before{content:"\f3b1"}.um-icon-android-textsms:before{content:"\f3b2"}.um-icon-android-time:before{content:"\f3b3"}.um-icon-android-train:before{content:"\f3b4"}.um-icon-android-unlock:before{content:"\f3b5"}.um-icon-android-upload:before{content:"\f3b6"}.um-icon-android-volume-down:before{content:"\f3b7"}.um-icon-android-volume-mute:before{content:"\f3b8"}.um-icon-android-volume-off:before{content:"\f3b9"}.um-icon-android-volume-up:before{content:"\f3ba"}.um-icon-android-walk:before{content:"\f3bb"}.um-icon-android-warning:before{content:"\f3bc"}.um-icon-android-watch:before{content:"\f3bd"}.um-icon-android-wifi:before{content:"\f305"}.um-icon-aperture:before{content:"\f313"}.um-icon-archive:before{content:"\f102"}.um-icon-arrow-down-a:before{content:"\f103"}.um-icon-arrow-down-b:before{content:"\f104"}.um-icon-arrow-down-c:before{content:"\f105"}.um-icon-arrow-expand:before{content:"\f25e"}.um-icon-arrow-graph-down-left:before{content:"\f25f"}.um-icon-arrow-graph-down-right:before{content:"\f260"}.um-icon-arrow-graph-up-left:before{content:"\f261"}.um-icon-arrow-graph-up-right:before{content:"\f262"}.um-icon-arrow-left-a:before{content:"\f106"}.um-icon-arrow-left-b:before{content:"\f107"}.um-icon-arrow-left-c:before{content:"\f108"}.um-icon-arrow-move:before{content:"\f263"}.um-icon-arrow-resize:before{content:"\f264"}.um-icon-arrow-return-left:before{content:"\f265"}.um-icon-arrow-return-right:before{content:"\f266"}.um-icon-arrow-right-a:before{content:"\f109"}.um-icon-arrow-right-b:before{content:"\f10a"}.um-icon-arrow-right-c:before{content:"\f10b"}.um-icon-arrow-shrink:before{content:"\f267"}.um-icon-arrow-swap:before{content:"\f268"}.um-icon-arrow-up-a:before{content:"\f10c"}.um-icon-arrow-up-b:before{content:"\f10d"}.um-icon-arrow-up-c:before{content:"\f10e"}.um-icon-asterisk:before{content:"\f314"}.um-icon-at:before{content:"\f10f"}.um-icon-backspace:before{content:"\f3bf"}.um-icon-backspace-outline:before{content:"\f3be"}.um-icon-bag:before{content:"\f110"}.um-icon-battery-charging:before{content:"\f111"}.um-icon-battery-empty:before{content:"\f112"}.um-icon-battery-full:before{content:"\f113"}.um-icon-battery-half:before{content:"\f114"}.um-icon-battery-low:before{content:"\f115"}.um-icon-beaker:before{content:"\f269"}.um-icon-beer:before{content:"\f26a"}.um-icon-bluetooth:before{content:"\f116"}.um-icon-bonfire:before{content:"\f315"}.um-icon-bookmark:before{content:"\f26b"}.um-icon-bowtie:before{content:"\f3c0"}.um-icon-briefcase:before{content:"\f26c"}.um-icon-bug:before{content:"\f2be"}.um-icon-calculator:before{content:"\f26d"}.um-icon-calendar:before{content:"\f117"}.um-icon-camera:before{content:"\f118"}.um-icon-card:before{content:"\f119"}.um-icon-cash:before{content:"\f316"}.um-icon-chatbox:before{content:"\f11b"}.um-icon-chatbox-working:before{content:"\f11a"}.um-icon-chatboxes:before{content:"\f11c"}.um-icon-chatbubble:before{content:"\f11e"}.um-icon-chatbubble-working:before{content:"\f11d"}.um-icon-chatbubbles:before{content:"\f11f"}.um-icon-checkmark:before{content:"\f122"}.um-icon-checkmark-circled:before{content:"\f120"}.um-icon-checkmark-round:before{content:"\f121"}.um-icon-chevron-down:before{content:"\f123"}.um-icon-chevron-left:before{content:"\f124"}.um-icon-chevron-right:before{content:"\f125"}.um-icon-chevron-up:before{content:"\f126"}.um-icon-clipboard:before{content:"\f127"}.um-icon-clock:before{content:"\f26e"}.um-icon-close:before{content:"\f12a"}.um-icon-close-circled:before{content:"\f128"}.um-icon-close-round:before{content:"\f129"}.um-icon-closed-captioning:before{content:"\f317"}.um-icon-cloud:before{content:"\f12b"}.um-icon-code:before{content:"\f271"}.um-icon-code-download:before{content:"\f26f"}.um-icon-code-working:before{content:"\f270"}.um-icon-coffee:before{content:"\f272"}.um-icon-compass:before{content:"\f273"}.um-icon-compose:before{content:"\f12c"}.um-icon-connection-bars:before{content:"\f274"}.um-icon-contrast:before{content:"\f275"}.um-icon-crop:before{content:"\f3c1"}.um-icon-cube:before{content:"\f318"}.um-icon-disc:before{content:"\f12d"}.um-icon-document:before{content:"\f12f"}.um-icon-document-text:before{content:"\f12e"}.um-icon-drag:before{content:"\f130"}.um-icon-earth:before{content:"\f276"}.um-icon-easel:before{content:"\f3c2"}.um-icon-edit:before{content:"\f2bf"}.um-icon-egg:before{content:"\f277"}.um-icon-eject:before{content:"\f131"}.um-icon-email:before{content:"\f132"}.um-icon-email-unread:before{content:"\f3c3"}.um-icon-erlenmeyer-flask:before{content:"\f3c5"}.um-icon-erlenmeyer-flask-bubbles:before{content:"\f3c4"}.um-icon-eye:before{content:"\f133"}.um-icon-eye-disabled:before{content:"\f306"}.um-icon-female:before{content:"\f278"}.um-icon-filing:before{content:"\f134"}.um-icon-film-marker:before{content:"\f135"}.um-icon-fireball:before{content:"\f319"}.um-icon-flag:before{content:"\f279"}.um-icon-flame:before{content:"\f31a"}.um-icon-flash:before{content:"\f137"}.um-icon-flash-off:before{content:"\f136"}.um-icon-folder:before{content:"\f139"}.um-icon-fork:before{content:"\f27a"}.um-icon-fork-repo:before{content:"\f2c0"}.um-icon-forward:before{content:"\f13a"}.um-icon-funnel:before{content:"\f31b"}.um-icon-gear-a:before{content:"\f13d"}.um-icon-gear-b:before{content:"\f13e"}.um-icon-grid:before{content:"\f13f"}.um-icon-hammer:before{content:"\f27b"}.um-icon-happy:before{content:"\f31c"}.um-icon-happy-outline:before{content:"\f3c6"}.um-icon-headphone:before{content:"\f140"}.um-icon-heart:before{content:"\f141"}.um-icon-heart-broken:before{content:"\f31d"}.um-icon-help:before{content:"\f143"}.um-icon-help-buoy:before{content:"\f27c"}.um-icon-help-circled:before{content:"\f142"}.um-icon-home:before{content:"\f144"}.um-icon-icecream:before{content:"\f27d"}.um-icon-image:before{content:"\f147"}.um-icon-images:before{content:"\f148"}.um-icon-information:before{content:"\f14a"}.um-icon-information-circled:before{content:"\f149"}.um-icon-ionic:before{content:"\f14b"}.um-icon-ios-alarm:before{content:"\f3c8"}.um-icon-ios-alarm-outline:before{content:"\f3c7"}.um-icon-ios-albums:before{content:"\f3ca"}.um-icon-ios-albums-outline:before{content:"\f3c9"}.um-icon-ios-americanfootball:before{content:"\f3cc"}.um-icon-ios-americanfootball-outline:before{content:"\f3cb"}.um-icon-ios-analytics:before{content:"\f3ce"}.um-icon-ios-analytics-outline:before{content:"\f3cd"}.um-icon-ios-arrow-back:before{content:"\f3cf"}.um-icon-ios-arrow-down:before{content:"\f3d0"}.um-icon-ios-arrow-forward:before{content:"\f3d1"}.um-icon-ios-arrow-left:before{content:"\f3d2"}.um-icon-ios-arrow-right:before{content:"\f3d3"}.um-icon-ios-arrow-thin-down:before{content:"\f3d4"}.um-icon-ios-arrow-thin-left:before{content:"\f3d5"}.um-icon-ios-arrow-thin-right:before{content:"\f3d6"}.um-icon-ios-arrow-thin-up:before{content:"\f3d7"}.um-icon-ios-arrow-up:before{content:"\f3d8"}.um-icon-ios-at:before{content:"\f3da"}.um-icon-ios-at-outline:before{content:"\f3d9"}.um-icon-ios-barcode:before{content:"\f3dc"}.um-icon-ios-barcode-outline:before{content:"\f3db"}.um-icon-ios-baseball:before{content:"\f3de"}.um-icon-ios-baseball-outline:before{content:"\f3dd"}.um-icon-ios-basketball:before{content:"\f3e0"}.um-icon-ios-basketball-outline:before{content:"\f3df"}.um-icon-ios-bell:before{content:"\f3e2"}.um-icon-ios-bell-outline:before{content:"\f3e1"}.um-icon-ios-body:before{content:"\f3e4"}.um-icon-ios-body-outline:before{content:"\f3e3"}.um-icon-ios-bolt:before{content:"\f3e6"}.um-icon-ios-bolt-outline:before{content:"\f3e5"}.um-icon-ios-book:before{content:"\f3e8"}.um-icon-ios-book-outline:before{content:"\f3e7"}.um-icon-ios-bookmarks:before{content:"\f3ea"}.um-icon-ios-bookmarks-outline:before{content:"\f3e9"}.um-icon-ios-box:before{content:"\f3ec"}.um-icon-ios-box-outline:before{content:"\f3eb"}.um-icon-ios-briefcase:before{content:"\f3ee"}.um-icon-ios-briefcase-outline:before{content:"\f3ed"}.um-icon-ios-browsers:before{content:"\f3f0"}.um-icon-ios-browsers-outline:before{content:"\f3ef"}.um-icon-ios-calculator:before{content:"\f3f2"}.um-icon-ios-calculator-outline:before{content:"\f3f1"}.um-icon-ios-calendar:before{content:"\f3f4"}.um-icon-ios-calendar-outline:before{content:"\f3f3"}.um-icon-ios-camera:before{content:"\f3f6"}.um-icon-ios-camera-outline:before{content:"\f3f5"}.um-icon-ios-cart:before{content:"\f3f8"}.um-icon-ios-cart-outline:before{content:"\f3f7"}.um-icon-ios-chatboxes:before{content:"\f3fa"}.um-icon-ios-chatboxes-outline:before{content:"\f3f9"}.um-icon-ios-chatbubble:before{content:"\f3fc"}.um-icon-ios-chatbubble-outline:before{content:"\f3fb"}.um-icon-ios-checkmark:before{content:"\f3ff"}.um-icon-ios-checkmark-empty:before{content:"\f3fd"}.um-icon-ios-checkmark-outline:before{content:"\f3fe"}.um-icon-ios-circle-filled:before{content:"\f400"}.um-icon-ios-circle-outline:before{content:"\f401"}.um-icon-ios-clock:before{content:"\f403"}.um-icon-ios-clock-outline:before{content:"\f402"}.um-icon-ios-close:before{content:"\f406"}.um-icon-ios-close-empty:before{content:"\f404"}.um-icon-ios-close-outline:before{content:"\f405"}.um-icon-ios-cloud:before{content:"\f40c"}.um-icon-ios-cloud-download:before{content:"\f408"}.um-icon-ios-cloud-download-outline:before{content:"\f407"}.um-icon-ios-cloud-outline:before{content:"\f409"}.um-icon-ios-cloud-upload:before{content:"\f40b"}.um-icon-ios-cloud-upload-outline:before{content:"\f40a"}.um-icon-ios-cloudy:before{content:"\f410"}.um-icon-ios-cloudy-night:before{content:"\f40e"}.um-icon-ios-cloudy-night-outline:before{content:"\f40d"}.um-icon-ios-cloudy-outline:before{content:"\f40f"}.um-icon-ios-cog:before{content:"\f412"}.um-icon-ios-cog-outline:before{content:"\f411"}.um-icon-ios-color-filter:before{content:"\f414"}.um-icon-ios-color-filter-outline:before{content:"\f413"}.um-icon-ios-color-wand:before{content:"\f416"}.um-icon-ios-color-wand-outline:before{content:"\f415"}.um-icon-ios-compose:before{content:"\f418"}.um-icon-ios-compose-outline:before{content:"\f417"}.um-icon-ios-contact:before{content:"\f41a"}.um-icon-ios-contact-outline:before{content:"\f419"}.um-icon-ios-copy:before{content:"\f41c"}.um-icon-ios-copy-outline:before{content:"\f41b"}.um-icon-ios-crop:before{content:"\f41e"}.um-icon-ios-crop-strong:before{content:"\f41d"}.um-icon-ios-download:before{content:"\f420"}.um-icon-ios-download-outline:before{content:"\f41f"}.um-icon-ios-drag:before{content:"\f421"}.um-icon-ios-email:before{content:"\f423"}.um-icon-ios-email-outline:before{content:"\f422"}.um-icon-ios-eye:before{content:"\f425"}.um-icon-ios-eye-outline:before{content:"\f424"}.um-icon-ios-fastforward:before{content:"\f427"}.um-icon-ios-fastforward-outline:before{content:"\f426"}.um-icon-ios-filing:before{content:"\f429"}.um-icon-ios-filing-outline:before{content:"\f428"}.um-icon-ios-film:before{content:"\f42b"}.um-icon-ios-film-outline:before{content:"\f42a"}.um-icon-ios-flag:before{content:"\f42d"}.um-icon-ios-flag-outline:before{content:"\f42c"}.um-icon-ios-flame:before{content:"\f42f"}.um-icon-ios-flame-outline:before{content:"\f42e"}.um-icon-ios-flask:before{content:"\f431"}.um-icon-ios-flask-outline:before{content:"\f430"}.um-icon-ios-flower:before{content:"\f433"}.um-icon-ios-flower-outline:before{content:"\f432"}.um-icon-ios-folder:before{content:"\f435"}.um-icon-ios-folder-outline:before{content:"\f434"}.um-icon-ios-football:before{content:"\f437"}.um-icon-ios-football-outline:before{content:"\f436"}.um-icon-ios-game-controller-a:before{content:"\f439"}.um-icon-ios-game-controller-a-outline:before{content:"\f438"}.um-icon-ios-game-controller-b:before{content:"\f43b"}.um-icon-ios-game-controller-b-outline:before{content:"\f43a"}.um-icon-ios-gear:before{content:"\f43d"}.um-icon-ios-gear-outline:before{content:"\f43c"}.um-icon-ios-glasses:before{content:"\f43f"}.um-icon-ios-glasses-outline:before{content:"\f43e"}.um-icon-ios-grid-view:before{content:"\f441"}.um-icon-ios-grid-view-outline:before{content:"\f440"}.um-icon-ios-heart:before{content:"\f443"}.um-icon-ios-heart-outline:before{content:"\f442"}.um-icon-ios-help:before{content:"\f446"}.um-icon-ios-help-empty:before{content:"\f444"}.um-icon-ios-help-outline:before{content:"\f445"}.um-icon-ios-home:before{content:"\f448"}.um-icon-ios-home-outline:before{content:"\f447"}.um-icon-ios-infinite:before{content:"\f44a"}.um-icon-ios-infinite-outline:before{content:"\f449"}.um-icon-ios-information:before{content:"\f44d"}.um-icon-ios-information-empty:before{content:"\f44b"}.um-icon-ios-information-outline:before{content:"\f44c"}.um-icon-ios-ionic-outline:before{content:"\f44e"}.um-icon-ios-keypad:before{content:"\f450"}.um-icon-ios-keypad-outline:before{content:"\f44f"}.um-icon-ios-lightbulb:before{content:"\f452"}.um-icon-ios-lightbulb-outline:before{content:"\f451"}.um-icon-ios-list:before{content:"\f454"}.um-icon-ios-list-outline:before{content:"\f453"}.um-icon-ios-location:before{content:"\f456"}.um-icon-ios-location-outline:before{content:"\f455"}.um-icon-ios-locked:before{content:"\f458"}.um-icon-ios-locked-outline:before{content:"\f457"}.um-icon-ios-loop:before{content:"\f45a"}.um-icon-ios-loop-strong:before{content:"\f459"}.um-icon-ios-medical:before{content:"\f45c"}.um-icon-ios-medical-outline:before{content:"\f45b"}.um-icon-ios-medkit:before{content:"\f45e"}.um-icon-ios-medkit-outline:before{content:"\f45d"}.um-icon-ios-mic:before{content:"\f461"}.um-icon-ios-mic-off:before{content:"\f45f"}.um-icon-ios-mic-outline:before{content:"\f460"}.um-icon-ios-minus:before{content:"\f464"}.um-icon-ios-minus-empty:before{content:"\f462"}.um-icon-ios-minus-outline:before{content:"\f463"}.um-icon-ios-monitor:before{content:"\f466"}.um-icon-ios-monitor-outline:before{content:"\f465"}.um-icon-ios-moon:before{content:"\f468"}.um-icon-ios-moon-outline:before{content:"\f467"}.um-icon-ios-more:before{content:"\f46a"}.um-icon-ios-more-outline:before{content:"\f469"}.um-icon-ios-musical-note:before{content:"\f46b"}.um-icon-ios-musical-notes:before{content:"\f46c"}.um-icon-ios-navigate:before{content:"\f46e"}.um-icon-ios-navigate-outline:before{content:"\f46d"}.um-icon-ios-nutrition:before{content:"\f470"}.um-icon-ios-nutrition-outline:before{content:"\f46f"}.um-icon-ios-paper:before{content:"\f472"}.um-icon-ios-paper-outline:before{content:"\f471"}.um-icon-ios-paperplane:before{content:"\f474"}.um-icon-ios-paperplane-outline:before{content:"\f473"}.um-icon-ios-partlysunny:before{content:"\f476"}.um-icon-ios-partlysunny-outline:before{content:"\f475"}.um-icon-ios-pause:before{content:"\f478"}.um-icon-ios-pause-outline:before{content:"\f477"}.um-icon-ios-paw:before{content:"\f47a"}.um-icon-ios-paw-outline:before{content:"\f479"}.um-icon-ios-people:before{content:"\f47c"}.um-icon-ios-people-outline:before{content:"\f47b"}.um-icon-ios-person:before{content:"\f47e"}.um-icon-ios-person-outline:before{content:"\f47d"}.um-icon-ios-personadd:before{content:"\f480"}.um-icon-ios-personadd-outline:before{content:"\f47f"}.um-icon-ios-photos:before{content:"\f482"}.um-icon-ios-photos-outline:before{content:"\f481"}.um-icon-ios-pie:before{content:"\f484"}.um-icon-ios-pie-outline:before{content:"\f483"}.um-icon-ios-pint:before{content:"\f486"}.um-icon-ios-pint-outline:before{content:"\f485"}.um-icon-ios-play:before{content:"\f488"}.um-icon-ios-play-outline:before{content:"\f487"}.um-icon-ios-plus:before{content:"\f48b"}.um-icon-ios-plus-empty:before{content:"\f489"}.um-icon-ios-plus-outline:before{content:"\f48a"}.um-icon-ios-pricetag:before{content:"\f48d"}.um-icon-ios-pricetag-outline:before{content:"\f48c"}.um-icon-ios-pricetags:before{content:"\f48f"}.um-icon-ios-pricetags-outline:before{content:"\f48e"}.um-icon-ios-printer:before{content:"\f491"}.um-icon-ios-printer-outline:before{content:"\f490"}.um-icon-ios-pulse:before{content:"\f493"}.um-icon-ios-pulse-strong:before{content:"\f492"}.um-icon-ios-rainy:before{content:"\f495"}.um-icon-ios-rainy-outline:before{content:"\f494"}.um-icon-ios-recording:before{content:"\f497"}.um-icon-ios-recording-outline:before{content:"\f496"}.um-icon-ios-redo:before{content:"\f499"}.um-icon-ios-redo-outline:before{content:"\f498"}.um-icon-ios-refresh:before{content:"\f49c"}.um-icon-ios-refresh-empty:before{content:"\f49a"}.um-icon-ios-refresh-outline:before{content:"\f49b"}.um-icon-ios-reload:before{content:"\f49d"}.um-icon-ios-reverse-camera:before{content:"\f49f"}.um-icon-ios-reverse-camera-outline:before{content:"\f49e"}.um-icon-ios-rewind:before{content:"\f4a1"}.um-icon-ios-rewind-outline:before{content:"\f4a0"}.um-icon-ios-rose:before{content:"\f4a3"}.um-icon-ios-rose-outline:before{content:"\f4a2"}.um-icon-ios-search:before{content:"\f4a5"}.um-icon-ios-search-strong:before{content:"\f4a4"}.um-icon-ios-settings:before{content:"\f4a7"}.um-icon-ios-settings-strong:before{content:"\f4a6"}.um-icon-ios-shuffle:before{content:"\f4a9"}.um-icon-ios-shuffle-strong:before{content:"\f4a8"}.um-icon-ios-skipbackward:before{content:"\f4ab"}.um-icon-ios-skipbackward-outline:before{content:"\f4aa"}.um-icon-ios-skipforward:before{content:"\f4ad"}.um-icon-ios-skipforward-outline:before{content:"\f4ac"}.um-icon-ios-snowy:before{content:"\f4ae"}.um-icon-ios-speedometer:before{content:"\f4b0"}.um-icon-ios-speedometer-outline:before{content:"\f4af"}.um-icon-ios-star:before{content:"\f4b3"}.um-icon-ios-star-half:before{content:"\f4b1"}.um-icon-ios-star-outline:before{content:"\f4b2"}.um-icon-ios-stopwatch:before{content:"\f4b5"}.um-icon-ios-stopwatch-outline:before{content:"\f4b4"}.um-icon-ios-sunny:before{content:"\f4b7"}.um-icon-ios-sunny-outline:before{content:"\f4b6"}.um-icon-ios-telephone:before{content:"\f4b9"}.um-icon-ios-telephone-outline:before{content:"\f4b8"}.um-icon-ios-tennisball:before{content:"\f4bb"}.um-icon-ios-tennisball-outline:before{content:"\f4ba"}.um-icon-ios-thunderstorm:before{content:"\f4bd"}.um-icon-ios-thunderstorm-outline:before{content:"\f4bc"}.um-icon-ios-time:before{content:"\f4bf"}.um-icon-ios-time-outline:before{content:"\f4be"}.um-icon-ios-timer:before{content:"\f4c1"}.um-icon-ios-timer-outline:before{content:"\f4c0"}.um-icon-ios-toggle:before{content:"\f4c3"}.um-icon-ios-toggle-outline:before{content:"\f4c2"}.um-icon-ios-trash:before{content:"\f4c5"}.um-icon-ios-trash-outline:before{content:"\f4c4"}.um-icon-ios-undo:before{content:"\f4c7"}.um-icon-ios-undo-outline:before{content:"\f4c6"}.um-icon-ios-unlocked:before{content:"\f4c9"}.um-icon-ios-unlocked-outline:before{content:"\f4c8"}.um-icon-ios-upload:before{content:"\f4cb"}.um-icon-ios-upload-outline:before{content:"\f4ca"}.um-icon-ios-videocam:before{content:"\f4cd"}.um-icon-ios-videocam-outline:before{content:"\f4cc"}.um-icon-ios-volume-high:before{content:"\f4ce"}.um-icon-ios-volume-low:before{content:"\f4cf"}.um-icon-ios-wineglass:before{content:"\f4d1"}.um-icon-ios-wineglass-outline:before{content:"\f4d0"}.um-icon-ios-world:before{content:"\f4d3"}.um-icon-ios-world-outline:before{content:"\f4d2"}.um-icon-ipad:before{content:"\f1f9"}.um-icon-iphone:before{content:"\f1fa"}.um-icon-ipod:before{content:"\f1fb"}.um-icon-jet:before{content:"\f295"}.um-icon-key:before{content:"\f296"}.um-icon-knife:before{content:"\f297"}.um-icon-laptop:before{content:"\f1fc"}.um-icon-leaf:before{content:"\f1fd"}.um-icon-levels:before{content:"\f298"}.um-icon-lightbulb:before{content:"\f299"}.um-icon-link:before{content:"\f1fe"}.um-icon-load-a:before{content:"\f29a"}.um-icon-load-b:before{content:"\f29b"}.um-icon-load-c:before{content:"\f29c"}.um-icon-load-d:before{content:"\f29d"}.um-icon-location:before{content:"\f1ff"}.um-icon-lock-combination:before{content:"\f4d4"}.um-icon-locked:before{content:"\f200"}.um-icon-log-in:before{content:"\f29e"}.um-icon-log-out:before{content:"\f29f"}.um-icon-loop:before{content:"\f201"}.um-icon-magnet:before{content:"\f2a0"}.um-icon-male:before{content:"\f2a1"}.um-icon-man:before{content:"\f202"}.um-icon-map:before{content:"\f203"}.um-icon-medkit:before{content:"\f2a2"}.um-icon-merge:before{content:"\f33f"}.um-icon-mic-a:before{content:"\f204"}.um-icon-mic-b:before{content:"\f205"}.um-icon-mic-c:before{content:"\f206"}.um-icon-minus:before{content:"\f209"}.um-icon-minus-circled:before{content:"\f207"}.um-icon-minus-round:before{content:"\f208"}.um-icon-model-s:before{content:"\f2c1"}.um-icon-monitor:before{content:"\f20a"}.um-icon-more:before{content:"\f20b"}.um-icon-mouse:before{content:"\f340"}.um-icon-music-note:before{content:"\f20c"}.um-icon-navicon:before{content:"\f20e"}.um-icon-navicon-round:before{content:"\f20d"}.um-icon-navigate:before{content:"\f2a3"}.um-icon-network:before{content:"\f341"}.um-icon-no-smoking:before{content:"\f2c2"}.um-icon-nuclear:before{content:"\f2a4"}.um-icon-outlet:before{content:"\f342"}.um-icon-paintbrush:before{content:"\f4d5"}.um-icon-paintbucket:before{content:"\f4d6"}.um-icon-paper-airplane:before{content:"\f2c3"}.um-icon-paperclip:before{content:"\f20f"}.um-icon-pause:before{content:"\f210"}.um-icon-person:before{content:"\f213"}.um-icon-person-add:before{content:"\f211"}.um-icon-person-stalker:before{content:"\f212"}.um-icon-pie-graph:before{content:"\f2a5"}.um-icon-pin:before{content:"\f2a6"}.um-icon-pinpoint:before{content:"\f2a7"}.um-icon-pizza:before{content:"\f2a8"}.um-icon-plane:before{content:"\f214"}.um-icon-planet:before{content:"\f343"}.um-icon-play:before{content:"\f215"}.um-icon-playstation:before{content:"\f30a"}.um-icon-plus:before{content:"\f218"}.um-icon-plus-circled:before{content:"\f216"}.um-icon-plus-round:before{content:"\f217"}.um-icon-podium:before{content:"\f344"}.um-icon-pound:before{content:"\f219"}.um-icon-power:before{content:"\f2a9"}.um-icon-pricetag:before{content:"\f2aa"}.um-icon-pricetags:before{content:"\f2ab"}.um-icon-printer:before{content:"\f21a"}.um-icon-pull-request:before{content:"\f345"}.um-icon-qr-scanner:before{content:"\f346"}.um-icon-quote:before{content:"\f347"}.um-icon-radio-waves:before{content:"\f2ac"}.um-icon-record:before{content:"\f21b"}.um-icon-refresh:before{content:"\f21c"}.um-icon-reply:before{content:"\f21e"}.um-icon-reply-all:before{content:"\f21d"}.um-icon-ribbon-a:before{content:"\f348"}.um-icon-ribbon-b:before{content:"\f349"}.um-icon-sad:before{content:"\f34a"}.um-icon-sad-outline:before{content:"\f4d7"}.um-icon-scissors:before{content:"\f34b"}.um-icon-search:before{content:"\f21f"}.um-icon-settings:before{content:"\f2ad"}.um-icon-share:before{content:"\f220"}.um-icon-shuffle:before{content:"\f221"}.um-icon-skip-backward:before{content:"\f222"}.um-icon-skip-forward:before{content:"\f223"}.um-icon-social-android:before{content:"\f225"}.um-icon-social-android-outline:before{content:"\f224"}.um-icon-social-angular:before{content:"\f4d9"}.um-icon-social-angular-outline:before{content:"\f4d8"}.um-icon-social-apple:before{content:"\f227"}.um-icon-social-apple-outline:before{content:"\f226"}.um-icon-social-bitcoin:before{content:"\f2af"}.um-icon-social-bitcoin-outline:before{content:"\f2ae"}.um-icon-social-buffer:before{content:"\f229"}.um-icon-social-buffer-outline:before{content:"\f228"}.um-icon-social-chrome:before{content:"\f4db"}.um-icon-social-chrome-outline:before{content:"\f4da"}.um-icon-social-codepen:before{content:"\f4dd"}.um-icon-social-codepen-outline:before{content:"\f4dc"}.um-icon-social-css3:before{content:"\f4df"}.um-icon-social-css3-outline:before{content:"\f4de"}.um-icon-social-designernews:before{content:"\f22b"}.um-icon-social-designernews-outline:before{content:"\f22a"}.um-icon-social-dribbble:before{content:"\f22d"}.um-icon-social-dribbble-outline:before{content:"\f22c"}.um-icon-social-dropbox:before{content:"\f22f"}.um-icon-social-dropbox-outline:before{content:"\f22e"}.um-icon-social-euro:before{content:"\f4e1"}.um-icon-social-euro-outline:before{content:"\f4e0"}.um-icon-social-facebook:before{content:"\f231"}.um-icon-social-facebook-outline:before{content:"\f230"}.um-icon-social-foursquare:before{content:"\f34d"}.um-icon-social-foursquare-outline:before{content:"\f34c"}.um-icon-social-freebsd-devil:before{content:"\f2c4"}.um-icon-social-github:before{content:"\f233"}.um-icon-social-github-outline:before{content:"\f232"}.um-icon-social-google:before{content:"\f34f"}.um-icon-social-google-outline:before{content:"\f34e"}.um-icon-social-googleplus:before{content:"\f235"}.um-icon-social-googleplus-outline:before{content:"\f234"}.um-icon-social-hackernews:before{content:"\f237"}.um-icon-social-hackernews-outline:before{content:"\f236"}.um-icon-social-html5:before{content:"\f4e3"}.um-icon-social-html5-outline:before{content:"\f4e2"}.um-icon-social-instagram:before{content:"\f351"}.um-icon-social-instagram-outline:before{content:"\f350"}.um-icon-social-javascript:before{content:"\f4e5"}.um-icon-social-javascript-outline:before{content:"\f4e4"}.um-icon-social-linkedin:before{content:"\f239"}.um-icon-social-linkedin-outline:before{content:"\f238"}.um-icon-social-markdown:before{content:"\f4e6"}.um-icon-social-nodejs:before{content:"\f4e7"}.um-icon-social-octocat:before{content:"\f4e8"}.um-icon-social-pinterest:before{content:"\f2b1"}.um-icon-social-pinterest-outline:before{content:"\f2b0"}.um-icon-social-python:before{content:"\f4e9"}.um-icon-social-reddit:before{content:"\f23b"}.um-icon-social-reddit-outline:before{content:"\f23a"}.um-icon-social-rss:before{content:"\f23d"}.um-icon-social-rss-outline:before{content:"\f23c"}.um-icon-social-sass:before{content:"\f4ea"}.um-icon-social-skype:before{content:"\f23f"}.um-icon-social-skype-outline:before{content:"\f23e"}.um-icon-social-snapchat:before{content:"\f4ec"}.um-icon-social-snapchat-outline:before{content:"\f4eb"}.um-icon-social-tumblr:before{content:"\f241"}.um-icon-social-tumblr-outline:before{content:"\f240"}.um-icon-social-tux:before{content:"\f2c5"}.um-icon-social-twitch:before{content:"\f4ee"}.um-icon-social-twitch-outline:before{content:"\f4ed"}.um-icon-social-twitter:before{content:"\f243"}.um-icon-social-twitter-outline:before{content:"\f242"}.um-icon-social-usd:before{content:"\f353"}.um-icon-social-usd-outline:before{content:"\f352"}.um-icon-social-vimeo:before{content:"\f245"}.um-icon-social-vimeo-outline:before{content:"\f244"}.um-icon-social-whatsapp:before{content:"\f4f0"}.um-icon-social-whatsapp-outline:before{content:"\f4ef"}.um-icon-social-windows:before{content:"\f247"}.um-icon-social-windows-outline:before{content:"\f246"}.um-icon-social-wordpress:before{content:"\f249"}.um-icon-social-wordpress-outline:before{content:"\f248"}.um-icon-social-yahoo:before{content:"\f24b"}.um-icon-social-yahoo-outline:before{content:"\f24a"}.um-icon-social-yen:before{content:"\f4f2"}.um-icon-social-yen-outline:before{content:"\f4f1"}.um-icon-social-youtube:before{content:"\f24d"}.um-icon-social-youtube-outline:before{content:"\f24c"}.um-icon-soup-can:before{content:"\f4f4"}.um-icon-soup-can-outline:before{content:"\f4f3"}.um-icon-speakerphone:before{content:"\f2b2"}.um-icon-speedometer:before{content:"\f2b3"}.um-icon-spoon:before{content:"\f2b4"}.um-icon-star:before{content:"\f24e"}.um-icon-stats-bars:before{content:"\f2b5"}.um-icon-steam:before{content:"\f30b"}.um-icon-stop:before{content:"\f24f"}.um-icon-thermometer:before{content:"\f2b6"}.um-icon-thumbsdown:before{content:"\f250"}.um-icon-thumbsup:before{content:"\f251"}.um-icon-toggle:before{content:"\f355"}.um-icon-toggle-filled:before{content:"\f354"}.um-icon-transgender:before{content:"\f4f5"}.um-icon-trash-a:before{content:"\f252"}.um-icon-trash-b:before{content:"\f253"}.um-icon-trophy:before{content:"\f356"}.um-icon-tshirt:before{content:"\f4f7"}.um-icon-tshirt-outline:before{content:"\f4f6"}.um-icon-umbrella:before{content:"\f2b7"}.um-icon-university:before{content:"\f357"}.um-icon-unlocked:before{content:"\f254"}.um-icon-upload:before{content:"\f255"}.um-icon-usb:before{content:"\f2b8"}.um-icon-videocamera:before{content:"\f256"}.um-icon-volume-high:before{content:"\f257"}.um-icon-volume-low:before{content:"\f258"}.um-icon-volume-medium:before{content:"\f259"}.um-icon-volume-mute:before{content:"\f25a"}.um-icon-wand:before{content:"\f358"}.um-icon-waterdrop:before{content:"\f25b"}.um-icon-wifi:before{content:"\f25c"}.um-icon-wineglass:before{content:"\f2b9"}.um-icon-woman:before{content:"\f25d"}.um-icon-wrench:before{content:"\f2ba"}.um-icon-xbox:before{content:"\f30c"} \ No newline at end of file diff --git a/assets/font/raty.eot b/assets/libs/raty/font/raty.eot similarity index 100% rename from assets/font/raty.eot rename to assets/libs/raty/font/raty.eot diff --git a/assets/font/raty.svg b/assets/libs/raty/font/raty.svg similarity index 100% rename from assets/font/raty.svg rename to assets/libs/raty/font/raty.svg diff --git a/assets/font/raty.ttf b/assets/libs/raty/font/raty.ttf similarity index 100% rename from assets/font/raty.ttf rename to assets/libs/raty/font/raty.ttf diff --git a/assets/font/raty.woff b/assets/libs/raty/font/raty.woff similarity index 100% rename from assets/font/raty.woff rename to assets/libs/raty/font/raty.woff diff --git a/assets/libs/raty/um-raty.css b/assets/libs/raty/um-raty.css index 7545504b..ecaecfa1 100644 --- a/assets/libs/raty/um-raty.css +++ b/assets/libs/raty/um-raty.css @@ -2,11 +2,11 @@ font-family: "raty"; font-style: normal; font-weight: normal; - src: url("../font/raty.eot"); - src: url("../font/raty.eot?#iefix") format("embedded-opentype"); - src: url("../font/raty.svg#raty") format("svg"); - src: url("../font/raty.ttf") format("truetype"); - src: url("../font/raty.woff") format("woff"); + src: url("font/raty.eot"); + src: url("font/raty.eot?#iefix") format("embedded-opentype"); + src: url("font/raty.svg#raty") format("svg"); + src: url("font/raty.ttf") format("truetype"); + src: url("font/raty.woff") format("woff"); font-display: swap; } @@ -38,4 +38,4 @@ .cancel-off-png:before {content: "\e601";} .star-on-png:before {content: "\f005";} .star-off-png:before {content: "\f006";} -.star-half-png:before {content: "\f123";} \ No newline at end of file +.star-half-png:before {content: "\f123";} diff --git a/assets/libs/raty/um-raty.min.css b/assets/libs/raty/um-raty.min.css new file mode 100644 index 00000000..1ff9ab1b --- /dev/null +++ b/assets/libs/raty/um-raty.min.css @@ -0,0 +1 @@ +@font-face{font-family:raty;font-style:normal;font-weight:400;src:url(font/raty.eot);src:url(font/raty.eot?#iefix) format("embedded-opentype");src:url(font/raty.svg#raty) format("svg");src:url(font/raty.ttf) format("truetype");src:url(font/raty.woff) format("woff");font-display:swap}.cancel-off-png,.cancel-on-png,.star-half-png,.star-off-png,.star-on-png{font-family:raty;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:.2em;color:#ccc}.star-half-png,.star-on-png{color:#ffbe32}.cancel-on-png:before{content:"\e600"}.cancel-off-png:before{content:"\e601"}.star-on-png:before{content:"\f005"}.star-off-png:before{content:"\f006"}.star-half-png:before{content:"\f123"} \ No newline at end of file diff --git a/assets/libs/tipsy/tipsy.min.css b/assets/libs/tipsy/tipsy.min.css new file mode 100644 index 00000000..dc8b0b73 --- /dev/null +++ b/assets/libs/tipsy/tipsy.min.css @@ -0,0 +1 @@ +.tipsy{padding:5px;position:absolute;z-index:9999999999!important}.tipsy-inner{font-size:13px!important;line-height:17px!important;background-color:#333!important;color:#fff!important;max-width:250px!important;padding:6px 10px!important;text-align:left!important;word-wrap:break-word!important;-webkit-font-smoothing:antialiased!important;-moz-osx-font-smoothing:grayscale!important}.tipsy-inner{border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px}.tipsy-arrow{position:absolute!important;width:0!important;height:0!important;line-height:0!important;border:5px dashed #333}.tipsy-arrow-n{border-bottom-color:#333!important}.tipsy-arrow-s{border-top-color:#333!important}.tipsy-arrow-e{border-left-color:#333!important}.tipsy-arrow-w{border-right-color:#333!important}.tipsy-n .tipsy-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-nw .tipsy-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-ne .tipsy-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-s .tipsy-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-sw .tipsy-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-se .tipsy-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-e .tipsy-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.tipsy-w .tipsy-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent} \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index d2a90481..b058b6e0 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -5,7 +5,8 @@ var gulp = require('gulp') , uglify = require('gulp-uglify'), sass = require('gulp-sass'), - rename = require("gulp-rename"); + rename = require('gulp-rename'), + cleanCSS = require( 'gulp-clean-css' ); // task gulp.task( 'default', function ( done ) { @@ -18,5 +19,30 @@ gulp.task( 'default', function ( done ) { .pipe( rename({ suffix: '.min' }) ) .pipe( gulp.dest( 'assets/js/' ) ); + gulp.src(['assets/libs/legacy/fonticons/*.css', '!assets/libs/legacy/fonticons/*.min.css',]) + .pipe( cleanCSS() ) + .pipe( rename( { suffix: '.min' } ) ) + .pipe( gulp.dest( 'assets/libs/legacy/fonticons/' ) ); + + // Raty lib + gulp.src(['assets/libs/raty/*.css', '!assets/libs/raty/*.min.css',]) + .pipe( cleanCSS() ) + .pipe( rename( { suffix: '.min' } ) ) + .pipe( gulp.dest( 'assets/libs/raty/' ) ); + gulp.src(['assets/libs/raty/*.js', '!assets/libs/raty/*.min.js',]) + .pipe( uglify() ) + .pipe( rename({ suffix: '.min' }) ) + .pipe( gulp.dest( 'assets/libs/raty/' ) ); + + // Tipsy lib + gulp.src(['assets/libs/tipsy/*.css', '!assets/libs/tipsy/*.min.css',]) + .pipe( cleanCSS() ) + .pipe( rename( { suffix: '.min' } ) ) + .pipe( gulp.dest( 'assets/libs/tipsy/' ) ); + gulp.src(['assets/libs/tipsy/*.js', '!assets/libs/tipsy/*.min.js',]) + .pipe( uglify() ) + .pipe( rename({ suffix: '.min' }) ) + .pipe( gulp.dest( 'assets/libs/tipsy/' ) ); + done(); }); diff --git a/includes/admin/class-enqueue.php b/includes/admin/class-enqueue.php index 2bfd0ff4..9f2db15e 100644 --- a/includes/admin/class-enqueue.php +++ b/includes/admin/class-enqueue.php @@ -101,9 +101,7 @@ final class Enqueue extends \um\common\Enqueue { wp_register_style( 'um_responsive', UM_URL . 'assets/css/um-responsive.css', array( 'um_profile', 'um_crop' ), UM_VERSION ); wp_register_style( 'um_account', UM_URL . 'assets/css/um-account.css', array(), UM_VERSION ); wp_register_style( 'um_default_css', UM_URL . 'assets/css/um-old-default.css', array(), UM_VERSION ); - //wp_register_style( 'um_fonticons_fa', UM_URL . 'assets/css/um-fonticons-fa.css', array(), UM_VERSION ); wp_register_style( 'select2', UM_URL . 'assets/css/select2/select2' . $suffix . '.css', array(), UM_VERSION ); - //wp_register_style( 'um_fonticons_ii', UM_URL . 'assets/css/um-fonticons-ii.css', array(), UM_VERSION ); wp_register_script( 'um_admin_blocks_shortcodes', UM_URL . 'assets/js/um-blocks' . $suffix . '.js', array( 'wp-i18n', 'wp-blocks', 'wp-components' ), UM_VERSION, true ); wp_set_script_translations( 'um_admin_blocks_shortcodes', 'ultimate-member' ); @@ -183,10 +181,8 @@ final class Enqueue extends \um\common\Enqueue { wp_enqueue_script( 'um_functions' ); wp_enqueue_script( 'um_responsive' ); - //wp_enqueue_style( 'um_fonticons_ii' ); wp_enqueue_style( 'select2' ); wp_enqueue_style( 'um_default_css' ); - // wp_enqueue_style( 'um_fonticons_fa' ); wp_enqueue_style( 'um_members' ); wp_enqueue_style( 'um_styles' ); wp_enqueue_style( 'um_profile' ); @@ -489,11 +485,6 @@ final class Enqueue extends \um\common\Enqueue { * @depecated 2.6.12 */ public function load_fonticons() { -// wp_register_style( 'um_fonticons_ii', UM_URL . 'assets/css/um-fonticons-ii.css', array(), ultimatemember_version ); -// wp_enqueue_style( 'um_fonticons_ii' ); -// -// wp_register_style( 'um_fonticons_fa', UM_URL . 'assets/css/um-fonticons-fa.css', array(), ultimatemember_version ); -// wp_enqueue_style( 'um_fonticons_fa' ); } @@ -504,7 +495,7 @@ final class Enqueue extends \um\common\Enqueue { wp_register_script( 'um_admin_global', $this->js_url . 'um-admin-global.js', array( 'jquery' ), ultimatemember_version, true ); wp_enqueue_script( 'um_admin_global' ); - wp_register_style( 'um_admin_global', $this->css_url . 'um-admin-global.css', array(), ultimatemember_version ); + wp_register_style( 'um_admin_global', $this->css_url . 'um-admin-global.css', array( 'um_fonticons_ii', 'um_fonticons_fa' ), ultimatemember_version ); wp_enqueue_style( 'um_admin_global' ); } diff --git a/includes/frontend/class-enqueue.php b/includes/frontend/class-enqueue.php index 5879061b..7f8976ac 100644 --- a/includes/frontend/class-enqueue.php +++ b/includes/frontend/class-enqueue.php @@ -169,11 +169,7 @@ final class Enqueue extends \um\common\Enqueue { */ public function register_styles() { //FontAwesome and FontIcons styles - //wp_register_style( 'um_fonticons_ii', $this->css_baseurl . 'um-fonticons-ii.css', array(), UM_VERSION ); - //wp_register_style( 'um_fonticons_fa', $this->css_baseurl . 'um-fonticons-fa.css', array(), UM_VERSION ); wp_register_style( 'um_crop', $this->css_baseurl . 'um-crop.css', array(), UM_VERSION ); - //wp_register_style( 'um_tipsy', $this->css_baseurl . 'um-tipsy.css', array(), UM_VERSION ); - //wp_register_style( 'um_raty', $this->css_baseurl . 'um-raty.css', array(), UM_VERSION ); wp_register_style( 'select2', $this->css_baseurl . 'select2/select2.min.css', array(), '4.0.13' ); wp_register_style( 'um_fileupload', $this->css_baseurl . 'um-fileupload.css', array(), UM_VERSION ); wp_register_style( 'um_datetime', $this->css_baseurl . 'pickadate/default.css', array(), UM_VERSION ); @@ -318,8 +314,6 @@ final class Enqueue extends \um\common\Enqueue { * @depecated 2.6.12 */ function load_fonticons() { - wp_enqueue_style( 'um_fonticons_ii' ); - wp_enqueue_style( 'um_fonticons_fa' ); } From fb2730b4f3ee5a6f9a5914b9f698fef1c05eb72a Mon Sep 17 00:00:00 2001 From: ashubawork Date: Wed, 27 Sep 2023 15:17:15 +0300 Subject: [PATCH 49/81] - appearance settings --- .../admin/core/class-admin-site-health.php | 354 +++++++++++++++++- 1 file changed, 350 insertions(+), 4 deletions(-) diff --git a/includes/admin/core/class-admin-site-health.php b/includes/admin/core/class-admin-site-health.php index 5887e1a9..18e413a0 100644 --- a/includes/admin/core/class-admin-site-health.php +++ b/includes/admin/core/class-admin-site-health.php @@ -404,10 +404,10 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { $emails = UM()->config()->email_notifications; foreach ( $emails as $key => $email ) { - if ( 1 == UM()->options()->get( $key . '_on' ) ) { - $email_settings['um-' . $key ] = array( + if ( 1 === absint( UM()->options()->get( $key . '_on' ) ) ) { + $email_settings[ 'um-' . $key ] = array( 'label' => $email['title'] . __( ' Subject', 'ultimate-member' ), - 'value' => UM()->options()->get( $key . '_sub'), + 'value' => UM()->options()->get( $key . '_sub' ), ); $email_settings[ 'um-theme_' . $key ] = array( @@ -417,10 +417,356 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { } } + // Appearance settings + $profile_icons_options = array( + 'field' => __( 'Show inside text field', 'ultimate-member' ), + 'label' => __( 'Show with label', 'ultimate-member' ), + 'off' => __( 'Turn off', 'ultimate-member' ), + ); + $profile_header_menu_options = array( + 'bc' => __( 'Bottom of Icon', 'ultimate-member' ), + 'lc' => __( 'Left of Icon (right for RTL)', 'ultimate-member' ), + ); + $register_align_options = array( + 'center' => __( 'Centered', 'ultimate-member' ), + 'left' => __( 'Left aligned', 'ultimate-member' ), + 'right' => __( 'Right aligned', 'ultimate-member' ), + ); + + $appearance_settings = array( + 'um-profile_template' => array( + 'label' => __( 'Profile Default Template', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_template' ), + ), + 'um-profile_max_width' => array( + 'label' => __( 'Profile Maximum Width', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_max_width' ), + ), + 'um-profile_area_max_width' => array( + 'label' => __( 'Profile Area Maximum Width', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_area_max_width' ), + ), + 'um-profile_icons' => array( + 'label' => __( 'Profile Field Icons', 'ultimate-member' ), + 'value' => $profile_icons_options[ UM()->options()->get( 'profile_icons' ) ], + ), + 'um-profile_primary_btn_word' => array( + 'label' => __( 'Profile Primary Button Text', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_primary_btn_word' ), + ), + 'um-profile_secondary_btn' => array( + 'label' => __( 'Profile Secondary Button', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_secondary_btn' ) ? $labels['yes'] : $labels['no'], + ), + ); + if ( 1 === absint( UM()->options()->get( 'profile_secondary_btn' ) ) ) { + $appearance_settings['um-profile_secondary_btn_word'] = array( + 'label' => __( 'Profile Secondary Button Text ', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_secondary_btn_word' ), + ); + } + $appearance_settings['um-default_avatar'] = array( + 'label' => __( 'Default Profile Photo', 'ultimate-member' ), + 'value' => UM()->options()->get( 'default_avatar' )['url'], + ); + $appearance_settings['um-default_cover'] = array( + 'label' => __( 'Default Cover Photo', 'ultimate-member' ), + 'value' => UM()->options()->get( 'default_cover' )['url'], + ); + $appearance_settings['um-disable_profile_photo_upload'] = array( + 'label' => __( 'Disable Profile Photo Upload', 'ultimate-member' ), + 'value' => UM()->options()->get( 'disable_profile_photo_upload' ) ? $labels['yes'] : $labels['no'], + ); + $appearance_settings['um-profile_photosize'] = array( + 'label' => __( 'Profile Photo Size', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_photosize' ) . 'x' . UM()->options()->get( 'profile_photosize' ) . 'px', + ); + $appearance_settings['um-profile_cover_enabled'] = array( + 'label' => __( 'Profile Cover Photos', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_cover_enabled' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'profile_cover_enabled' ) ) ) { + $appearance_settings['um-profile_coversize'] = array( + 'label' => __( 'Profile Cover Size', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_coversize' ) . 'px', + ); + $appearance_settings['um-profile_cover_ratio'] = array( + 'label' => __( 'Profile Cover Ratio', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_cover_ratio' ), + ); + } + $appearance_settings['um-profile_show_metaicon'] = array( + 'label' => __( 'Profile Header Meta Text Icon', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_show_metaicon' ) ? $labels['yes'] : $labels['no'], + ); + $appearance_settings['um-profile_show_name'] = array( + 'label' => __( 'Show display name in profile header', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_show_name' ) ? $labels['yes'] : $labels['no'], + ); + $appearance_settings['um-profile_show_social_links'] = array( + 'label' => __( 'Show social links in profile header', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_show_social_links' ) ? $labels['yes'] : $labels['no'], + ); + $appearance_settings['um-profile_show_bio'] = array( + 'label' => __( 'Show user description in header', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_show_bio' ) ? $labels['yes'] : $labels['no'], + ); + $appearance_settings['um-profile_show_html_bio'] = array( + 'label' => __( 'Enable HTML support for user description', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_show_html_bio' ) ? $labels['yes'] : $labels['no'], + ); + $appearance_settings['um-profile_bio_maxchars'] = array( + 'label' => __( 'User description maximum chars', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_bio_maxchars' ), + ); + $appearance_settings['um-profile_header_menu'] = array( + 'label' => __( 'Profile Header Menu Position', 'ultimate-member' ), + 'value' => $profile_header_menu_options[ UM()->options()->get( 'profile_header_menu' ) ], + ); + $appearance_settings['um-profile_empty_text'] = array( + 'label' => __( 'Show a custom message if profile is empty', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_empty_text' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'profile_empty_text' ) ) ) { + $appearance_settings['um-profile_empty_text_emo'] = array( + 'label' => __( 'Show the emoticon', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_empty_text_emo' ), + ); + } + $appearance_settings['um-profile_menu'] = array( + 'label' => __( 'Enable profile menu', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_menu' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'profile_menu' ) ) ) { + /** + * Filters a privacy list extend. + * + * @since 2.6.13 + * @hook um_profile_tabs_privacy_list + * + * @param {array} $privacy_option Add options for profile tabs' privacy. + * + * @return {array} Options for profile tabs' privacy. + * + * @example Add options for profile tabs' privacy. + * function um_profile_menu_link_attrs( $privacy_option ) { + * // your code here + * return $privacy_option; + * } + * add_filter( 'um_profile_tabs_privacy_list', 'um_profile_tabs_privacy_list', 10, 1 ); + */ + $privacy_option = apply_filters( + 'um_profile_tabs_privacy_list', + array( + 0 => __( 'Anyone', 'ultimate-member' ), + 1 => __( 'Guests only', 'ultimate-member' ), + 2 => __( 'Members only', 'ultimate-member' ), + 3 => __( 'Only the owner', 'ultimate-member' ), + 4 => __( 'Only specific roles', 'ultimate-member' ), + 5 => __( 'Owner and specific roles', 'ultimate-member' ), + ) + ); + + $appearance_settings['um-profile_tab_main'] = array( + 'label' => __( 'About Tab', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_tab_main' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'profile_tab_main' ) ) ) { + $appearance_settings['um-profile_tab_main_privacy'] = array( + 'label' => __( 'Who can see About Tab?', 'ultimate-member' ), + 'value' => $privacy_option[ UM()->options()->get( 'profile_tab_main_privacy' ) ], + ); + } + $appearance_settings['um-profile_tab_posts'] = array( + 'label' => __( 'Posts Tab', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_tab_posts' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'profile_tab_posts' ) ) ) { + $appearance_settings['um-profile_tab_posts_privacy'] = array( + 'label' => __( 'Who can see Posts Tab?', 'ultimate-member' ), + 'value' => $privacy_option[ UM()->options()->get( 'profile_tab_posts_privacy' ) ], + ); + } + $appearance_settings['um-profile_tab_comments'] = array( + 'label' => __( 'Comments Tab', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_tab_comments' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'profile_tab_comments' ) ) ) { + $appearance_settings['um-profile_tab_comments_privacy'] = array( + 'label' => __( 'Who can see Comments Tab?', 'ultimate-member' ), + 'value' => $privacy_option[ UM()->options()->get( 'profile_tab_comments_privacy' ) ], + ); + } + /** + * Filters appearance settings for Site Health extend. + * + * @since 2.6.13 + * @hook um_profile_tabs_site_health + * + * @param {array} $appearance_settings Appearance settings for Site Health. + * + * @return {array} Appearance settings for Site Health. + * + * @example Add options for appearance settings for Site Health. + * function um_profile_tabs_site_health( $appearance_settings ) { + * // your code here + * return $appearance_settings; + * } + * add_filter( 'um_profile_tabs_site_health', 'um_profile_tabs_site_health', 10, 1 ); + */ + $appearance_settings = apply_filters( 'um_profile_tabs_site_health', $appearance_settings ); + + /** + * Filters extend user profile tabs + * + * @since 2.6.13 + * @hook um_profile_tabs + * + * @param {array} $tabs tabs list. + * + * @return {array} tabs list. + * + * @example Add options for profile tabs' privacy. + * function um_profile_tabs( $tabs ) { + * // your code here + * return $tabs; + * } + * add_filter( 'um_profile_tabs', 'um_profile_tabs', 10, 1 ); + */ + $tabs_options = apply_filters( + 'um_profile_tabs', + array( + 'main' => array( + 'name' => __( 'About', 'ultimate-member' ), + 'icon' => 'um-faicon-user', + ), + 'posts' => array( + 'name' => __( 'Posts', 'ultimate-member' ), + 'icon' => 'um-faicon-pencil', + ), + 'comments' => array( + 'name' => __( 'Comments', 'ultimate-member' ), + 'icon' => 'um-faicon-comment', + ), + ) + ); + + $appearance_settings['um-profile_menu_default_tab'] = array( + 'label' => __( 'Profile menu default tab', 'ultimate-member' ), + 'value' => $tabs_options[ UM()->options()->get( 'profile_menu_default_tab' ) ], + ); + $appearance_settings['um-profile_menu_icons'] = array( + 'label' => __( 'Enable menu icons in desktop view', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_menu_icons' ) ? $labels['yes'] : $labels['no'], + ); + } + + $appearance_settings['um-register_template'] = array( + 'label' => __( 'Registration Default Template', 'ultimate-member' ), + 'value' => UM()->options()->get( 'register_template' ), + ); + $appearance_settings['um-register_max_width'] = array( + 'label' => __( 'Registration Maximum Width', 'ultimate-member' ), + 'value' => UM()->options()->get( 'register_max_width' ), + ); + $appearance_settings['um-register_align'] = array( + 'label' => __( 'Registration Shortcode Alignment', 'ultimate-member' ), + 'value' => $register_align_options[ UM()->options()->get( 'register_align' ) ], + ); + $appearance_settings['um-register_icons'] = array( + 'label' => __( 'Registration Field Icons', 'ultimate-member' ), + 'value' => $profile_icons_options[ UM()->options()->get( 'register_icons' ) ], + ); + $appearance_settings['um-register_primary_btn_word'] = array( + 'label' => __( 'Registration Primary Button Text ', 'ultimate-member' ), + 'value' => UM()->options()->get( 'register_primary_btn_word' ), + ); + $appearance_settings['um-register_secondary_btn'] = array( + 'label' => __( 'Registration Secondary Button', 'ultimate-member' ), + 'value' => UM()->options()->get( 'register_secondary_btn' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'register_secondary_btn' ) ) ) { + $appearance_settings['um-register_secondary_btn_word'] = array( + 'label' => __( 'Registration Secondary Button Text', 'ultimate-member' ), + 'value' => UM()->options()->get( 'register_secondary_btn_word' ), + ); + $appearance_settings['um-register_secondary_btn_url'] = array( + 'label' => __( 'Registration Secondary Button URL', 'ultimate-member' ), + 'value' => UM()->options()->get( 'register_secondary_btn_url' ), + ); + } + $appearance_settings['um-register_role'] = array( + 'label' => __( 'Registration Default Role', 'ultimate-member' ), + 'value' => ! empty( UM()->options()->get( 'register_role' ) ) ? UM()->options()->get( 'register_role' ) : __( 'Default', 'ultimate-member' ), + ); + + $appearance_settings['um-login_template'] = array( + 'label' => __( 'Login Default Template', 'ultimate-member' ), + 'value' => UM()->options()->get( 'login_template' ), + ); + $appearance_settings['um-login_max_width'] = array( + 'label' => __( 'Login Maximum Width', 'ultimate-member' ), + 'value' => UM()->options()->get( 'login_max_width' ), + ); + $appearance_settings['um-login_align'] = array( + 'label' => __( 'Login Shortcode Alignment', 'ultimate-member' ), + 'value' => $register_align_options[ UM()->options()->get( 'login_align' ) ], + ); + $appearance_settings['um-login_icons'] = array( + 'label' => __( 'Login Field Icons', 'ultimate-member' ), + 'value' => $profile_icons_options[ UM()->options()->get( 'login_icons' ) ], + ); + $appearance_settings['um-login_primary_btn_word'] = array( + 'label' => __( 'Login Primary Button Text', 'ultimate-member' ), + 'value' => UM()->options()->get( 'login_primary_btn_word' ), + ); + $appearance_settings['um-login_secondary_btn'] = array( + 'label' => __( 'Login Secondary Button', 'ultimate-member' ), + 'value' => UM()->options()->get( 'login_secondary_btn' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'login_secondary_btn' ) ) ) { + $appearance_settings['um-login_secondary_btn_word'] = array( + 'label' => __( 'Login Secondary Button Text', 'ultimate-member' ), + 'value' => UM()->options()->get( 'login_secondary_btn_word' ), + ); + $appearance_settings['um-login_secondary_btn_url'] = array( + 'label' => __( 'Login Secondary Button URL', 'ultimate-member' ), + 'value' => UM()->options()->get( 'login_secondary_btn_url' ), + ); + } + $appearance_settings['um-login_forgot_pass_link'] = array( + 'label' => __( 'Login Forgot Password Link', 'ultimate-member' ), + 'value' => UM()->options()->get( 'login_forgot_pass_link' ) ? $labels['yes'] : $labels['no'], + ); + $appearance_settings['um-login_show_rememberme'] = array( + 'label' => __( 'Show "Remember Me"', 'ultimate-member' ), + 'value' => UM()->options()->get( 'login_show_rememberme' ) ? $labels['yes'] : $labels['no'], + ); + $misc_settings = array(); - $info['ultimate-member']['fields'] = array_merge( $info['ultimate-member']['fields'], $pages_settings, $user_settings, $account_settings, $uploads_settings, $restrict_settings, $access_other_settings, $email_settings, $misc_settings ); + + /** + * Filters licenses settings for Site Health. + * + * @since 2.6.13 + * @hook um_licenses_site_health + * + * @param {array} $license_settings licenses settings for Site Health. + * + * @return {array} licenses settings for Site Health. + * + * @example Extend licenses settings for Site Health. + * function um_licenses_site_health( $license_settings ) { + * // your code here + * return $license_settings; + * } + * add_filter( 'um_licenses_site_health', 'um_licenses_site_health', 10, 1 ); + */ + $license_settings = apply_filters( 'um_licenses_site_health', array() ); + + $info['ultimate-member']['fields'] = array_merge( $info['ultimate-member']['fields'], $pages_settings, $user_settings, $account_settings, $uploads_settings, $restrict_settings, $access_other_settings, $email_settings, $misc_settings, $appearance_settings, $license_settings ); return $info; } From 0e1df8e22e6accfde6ec22a52c9e6be691f3b958 Mon Sep 17 00:00:00 2001 From: ashubawork Date: Wed, 27 Sep 2023 15:34:41 +0300 Subject: [PATCH 50/81] - misc settings --- .../admin/core/class-admin-site-health.php | 52 +++++++++++++++++-- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/includes/admin/core/class-admin-site-health.php b/includes/admin/core/class-admin-site-health.php index 18e413a0..f91bb973 100644 --- a/includes/admin/core/class-admin-site-health.php +++ b/includes/admin/core/class-admin-site-health.php @@ -743,9 +743,53 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { 'value' => UM()->options()->get( 'login_show_rememberme' ) ? $labels['yes'] : $labels['no'], ); + // Misc settings + $misc_settings = array( + 'um-form_asterisk' => array( + 'label' => __( 'Show an asterisk for required fields', 'ultimate-member' ), + 'value' => UM()->options()->get( 'form_asterisk' ) ? $labels['yes'] : $labels['no'], + ), + 'um-profile_title' => array( + 'label' => __( 'User Profile Title', 'ultimate-member' ), + 'value' => stripslashes( UM()->options()->get( 'profile_title' ) ), + ), + 'um-profile_desc' => array( + 'label' => __( 'User Profile Dynamic Meta Description', 'ultimate-member' ), + 'value' => stripslashes( UM()->options()->get( 'profile_desc' ) ), + ), + 'um-um_profile_object_cache_stop' => array( + 'label' => __( 'Disable Cache User Profile', 'ultimate-member' ), + 'value' => UM()->options()->get( 'um_profile_object_cache_stop' ) ? $labels['yes'] : $labels['no'], + ), + 'um-enable_blocks' => array( + 'label' => __( 'Enable Gutenberg Blocks', 'ultimate-member' ), + 'value' => UM()->options()->get( 'enable_blocks' ) ? $labels['yes'] : $labels['no'], + ), + 'um-rest_api_version' => array( + 'label' => __( 'REST API version', 'ultimate-member' ), + 'value' => UM()->options()->get( 'rest_api_version' ), + ), + 'um-disable_restriction_pre_queries' => array( + 'label' => __( 'Disable pre-queries for restriction content logic (advanced)', 'ultimate-member' ), + 'value' => UM()->options()->get( 'disable_restriction_pre_queries' ) ? $labels['yes'] : $labels['no'], + ), + 'um-member_directory_own_table' => array( + 'label' => __( 'Enable custom table for usermeta', 'ultimate-member' ), + 'value' => UM()->options()->get( 'member_directory_own_table' ) ? $labels['yes'] : $labels['no'], + ), + 'um-uninstall_on_delete' => array( + 'label' => __( 'Remove Data on Uninstall?', 'ultimate-member' ), + 'value' => UM()->options()->get( 'uninstall_on_delete' ) ? $labels['yes'] : $labels['no'], + ), + ); - $misc_settings = array(); - + // Licenses settings + $license_settings = array( + 'um-licenses' => array( + 'label' => __( 'Licenses', 'ultimate-member' ), + 'value' => array(), + ), + ); /** * Filters licenses settings for Site Health. @@ -764,9 +808,9 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { * } * add_filter( 'um_licenses_site_health', 'um_licenses_site_health', 10, 1 ); */ - $license_settings = apply_filters( 'um_licenses_site_health', array() ); + $license_settings = apply_filters( 'um_licenses_site_health', $license_settings ); - $info['ultimate-member']['fields'] = array_merge( $info['ultimate-member']['fields'], $pages_settings, $user_settings, $account_settings, $uploads_settings, $restrict_settings, $access_other_settings, $email_settings, $misc_settings, $appearance_settings, $license_settings ); + $info['ultimate-member']['fields'] = array_merge( $info['ultimate-member']['fields'], $pages_settings, $user_settings, $account_settings, $uploads_settings, $restrict_settings, $access_other_settings, $email_settings, $appearance_settings, $license_settings, $misc_settings ); return $info; } From 656081322bac6286639198c693d1e3bd91a956fd Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Thu, 28 Sep 2023 00:51:50 +0300 Subject: [PATCH 51/81] - changes for select2 library; --- assets/{js => libs}/select2/i18n/af.js | 0 assets/{js => libs}/select2/i18n/ar.js | 0 assets/{js => libs}/select2/i18n/az.js | 0 assets/{js => libs}/select2/i18n/bg.js | 0 assets/{js => libs}/select2/i18n/bn.js | 0 assets/{js => libs}/select2/i18n/bs.js | 0 assets/{js => libs}/select2/i18n/ca.js | 0 assets/{js => libs}/select2/i18n/cs.js | 0 assets/{js => libs}/select2/i18n/da.js | 0 assets/{js => libs}/select2/i18n/de.js | 0 assets/{js => libs}/select2/i18n/dsb.js | 0 assets/{js => libs}/select2/i18n/el.js | 0 assets/{js => libs}/select2/i18n/en.js | 0 assets/{js => libs}/select2/i18n/es.js | 0 assets/{js => libs}/select2/i18n/et.js | 0 assets/{js => libs}/select2/i18n/eu.js | 0 assets/{js => libs}/select2/i18n/fa.js | 0 assets/{js => libs}/select2/i18n/fi.js | 0 assets/{js => libs}/select2/i18n/fr.js | 0 assets/{js => libs}/select2/i18n/gl.js | 0 assets/{js => libs}/select2/i18n/he.js | 0 assets/{js => libs}/select2/i18n/hi.js | 0 assets/{js => libs}/select2/i18n/hr.js | 0 assets/{js => libs}/select2/i18n/hsb.js | 0 assets/{js => libs}/select2/i18n/hu.js | 0 assets/{js => libs}/select2/i18n/hy.js | 0 assets/{js => libs}/select2/i18n/id.js | 0 assets/{js => libs}/select2/i18n/is.js | 0 assets/{js => libs}/select2/i18n/it.js | 0 assets/{js => libs}/select2/i18n/ja.js | 0 assets/{js => libs}/select2/i18n/ka.js | 0 assets/{js => libs}/select2/i18n/km.js | 0 assets/{js => libs}/select2/i18n/ko.js | 0 assets/{js => libs}/select2/i18n/lt.js | 0 assets/{js => libs}/select2/i18n/lv.js | 0 assets/{js => libs}/select2/i18n/mk.js | 0 assets/{js => libs}/select2/i18n/ms.js | 0 assets/{js => libs}/select2/i18n/nb.js | 0 assets/{js => libs}/select2/i18n/ne.js | 0 assets/{js => libs}/select2/i18n/nl.js | 0 assets/{js => libs}/select2/i18n/pl.js | 0 assets/{js => libs}/select2/i18n/ps.js | 0 assets/{js => libs}/select2/i18n/pt-BR.js | 0 assets/{js => libs}/select2/i18n/pt.js | 0 assets/{js => libs}/select2/i18n/ro.js | 0 assets/{js => libs}/select2/i18n/ru.js | 0 assets/{js => libs}/select2/i18n/sk.js | 0 assets/{js => libs}/select2/i18n/sl.js | 0 assets/{js => libs}/select2/i18n/sq.js | 0 assets/{js => libs}/select2/i18n/sr-Cyrl.js | 0 assets/{js => libs}/select2/i18n/sr.js | 0 assets/{js => libs}/select2/i18n/sv.js | 0 assets/{js => libs}/select2/i18n/th.js | 0 assets/{js => libs}/select2/i18n/tk.js | 0 assets/{js => libs}/select2/i18n/tr.js | 0 assets/{js => libs}/select2/i18n/uk.js | 0 assets/{js => libs}/select2/i18n/vi.js | 0 assets/{js => libs}/select2/i18n/zh-CN.js | 0 assets/{js => libs}/select2/i18n/zh-TW.js | 0 assets/{css => libs}/select2/select2.css | 0 assets/{js => libs}/select2/select2.full.js | 0 .../{js => libs}/select2/select2.full.min.js | 0 assets/{css => libs}/select2/select2.min.css | 0 includes/admin/class-enqueue.php | 35 +++---------- includes/common/class-enqueue.php | 49 ++++++++++++++----- includes/frontend/class-enqueue.php | 22 ++------- 66 files changed, 48 insertions(+), 58 deletions(-) rename assets/{js => libs}/select2/i18n/af.js (100%) rename assets/{js => libs}/select2/i18n/ar.js (100%) rename assets/{js => libs}/select2/i18n/az.js (100%) rename assets/{js => libs}/select2/i18n/bg.js (100%) rename assets/{js => libs}/select2/i18n/bn.js (100%) rename assets/{js => libs}/select2/i18n/bs.js (100%) rename assets/{js => libs}/select2/i18n/ca.js (100%) rename assets/{js => libs}/select2/i18n/cs.js (100%) rename assets/{js => libs}/select2/i18n/da.js (100%) rename assets/{js => libs}/select2/i18n/de.js (100%) rename assets/{js => libs}/select2/i18n/dsb.js (100%) rename assets/{js => libs}/select2/i18n/el.js (100%) rename assets/{js => libs}/select2/i18n/en.js (100%) rename assets/{js => libs}/select2/i18n/es.js (100%) rename assets/{js => libs}/select2/i18n/et.js (100%) rename assets/{js => libs}/select2/i18n/eu.js (100%) rename assets/{js => libs}/select2/i18n/fa.js (100%) rename assets/{js => libs}/select2/i18n/fi.js (100%) rename assets/{js => libs}/select2/i18n/fr.js (100%) rename assets/{js => libs}/select2/i18n/gl.js (100%) rename assets/{js => libs}/select2/i18n/he.js (100%) rename assets/{js => libs}/select2/i18n/hi.js (100%) rename assets/{js => libs}/select2/i18n/hr.js (100%) rename assets/{js => libs}/select2/i18n/hsb.js (100%) rename assets/{js => libs}/select2/i18n/hu.js (100%) rename assets/{js => libs}/select2/i18n/hy.js (100%) rename assets/{js => libs}/select2/i18n/id.js (100%) rename assets/{js => libs}/select2/i18n/is.js (100%) rename assets/{js => libs}/select2/i18n/it.js (100%) rename assets/{js => libs}/select2/i18n/ja.js (100%) rename assets/{js => libs}/select2/i18n/ka.js (100%) rename assets/{js => libs}/select2/i18n/km.js (100%) rename assets/{js => libs}/select2/i18n/ko.js (100%) rename assets/{js => libs}/select2/i18n/lt.js (100%) rename assets/{js => libs}/select2/i18n/lv.js (100%) rename assets/{js => libs}/select2/i18n/mk.js (100%) rename assets/{js => libs}/select2/i18n/ms.js (100%) rename assets/{js => libs}/select2/i18n/nb.js (100%) rename assets/{js => libs}/select2/i18n/ne.js (100%) rename assets/{js => libs}/select2/i18n/nl.js (100%) rename assets/{js => libs}/select2/i18n/pl.js (100%) rename assets/{js => libs}/select2/i18n/ps.js (100%) rename assets/{js => libs}/select2/i18n/pt-BR.js (100%) rename assets/{js => libs}/select2/i18n/pt.js (100%) rename assets/{js => libs}/select2/i18n/ro.js (100%) rename assets/{js => libs}/select2/i18n/ru.js (100%) rename assets/{js => libs}/select2/i18n/sk.js (100%) rename assets/{js => libs}/select2/i18n/sl.js (100%) rename assets/{js => libs}/select2/i18n/sq.js (100%) rename assets/{js => libs}/select2/i18n/sr-Cyrl.js (100%) rename assets/{js => libs}/select2/i18n/sr.js (100%) rename assets/{js => libs}/select2/i18n/sv.js (100%) rename assets/{js => libs}/select2/i18n/th.js (100%) rename assets/{js => libs}/select2/i18n/tk.js (100%) rename assets/{js => libs}/select2/i18n/tr.js (100%) rename assets/{js => libs}/select2/i18n/uk.js (100%) rename assets/{js => libs}/select2/i18n/vi.js (100%) rename assets/{js => libs}/select2/i18n/zh-CN.js (100%) rename assets/{js => libs}/select2/i18n/zh-TW.js (100%) rename assets/{css => libs}/select2/select2.css (100%) rename assets/{js => libs}/select2/select2.full.js (100%) rename assets/{js => libs}/select2/select2.full.min.js (100%) rename assets/{css => libs}/select2/select2.min.css (100%) diff --git a/assets/js/select2/i18n/af.js b/assets/libs/select2/i18n/af.js similarity index 100% rename from assets/js/select2/i18n/af.js rename to assets/libs/select2/i18n/af.js diff --git a/assets/js/select2/i18n/ar.js b/assets/libs/select2/i18n/ar.js similarity index 100% rename from assets/js/select2/i18n/ar.js rename to assets/libs/select2/i18n/ar.js diff --git a/assets/js/select2/i18n/az.js b/assets/libs/select2/i18n/az.js similarity index 100% rename from assets/js/select2/i18n/az.js rename to assets/libs/select2/i18n/az.js diff --git a/assets/js/select2/i18n/bg.js b/assets/libs/select2/i18n/bg.js similarity index 100% rename from assets/js/select2/i18n/bg.js rename to assets/libs/select2/i18n/bg.js diff --git a/assets/js/select2/i18n/bn.js b/assets/libs/select2/i18n/bn.js similarity index 100% rename from assets/js/select2/i18n/bn.js rename to assets/libs/select2/i18n/bn.js diff --git a/assets/js/select2/i18n/bs.js b/assets/libs/select2/i18n/bs.js similarity index 100% rename from assets/js/select2/i18n/bs.js rename to assets/libs/select2/i18n/bs.js diff --git a/assets/js/select2/i18n/ca.js b/assets/libs/select2/i18n/ca.js similarity index 100% rename from assets/js/select2/i18n/ca.js rename to assets/libs/select2/i18n/ca.js diff --git a/assets/js/select2/i18n/cs.js b/assets/libs/select2/i18n/cs.js similarity index 100% rename from assets/js/select2/i18n/cs.js rename to assets/libs/select2/i18n/cs.js diff --git a/assets/js/select2/i18n/da.js b/assets/libs/select2/i18n/da.js similarity index 100% rename from assets/js/select2/i18n/da.js rename to assets/libs/select2/i18n/da.js diff --git a/assets/js/select2/i18n/de.js b/assets/libs/select2/i18n/de.js similarity index 100% rename from assets/js/select2/i18n/de.js rename to assets/libs/select2/i18n/de.js diff --git a/assets/js/select2/i18n/dsb.js b/assets/libs/select2/i18n/dsb.js similarity index 100% rename from assets/js/select2/i18n/dsb.js rename to assets/libs/select2/i18n/dsb.js diff --git a/assets/js/select2/i18n/el.js b/assets/libs/select2/i18n/el.js similarity index 100% rename from assets/js/select2/i18n/el.js rename to assets/libs/select2/i18n/el.js diff --git a/assets/js/select2/i18n/en.js b/assets/libs/select2/i18n/en.js similarity index 100% rename from assets/js/select2/i18n/en.js rename to assets/libs/select2/i18n/en.js diff --git a/assets/js/select2/i18n/es.js b/assets/libs/select2/i18n/es.js similarity index 100% rename from assets/js/select2/i18n/es.js rename to assets/libs/select2/i18n/es.js diff --git a/assets/js/select2/i18n/et.js b/assets/libs/select2/i18n/et.js similarity index 100% rename from assets/js/select2/i18n/et.js rename to assets/libs/select2/i18n/et.js diff --git a/assets/js/select2/i18n/eu.js b/assets/libs/select2/i18n/eu.js similarity index 100% rename from assets/js/select2/i18n/eu.js rename to assets/libs/select2/i18n/eu.js diff --git a/assets/js/select2/i18n/fa.js b/assets/libs/select2/i18n/fa.js similarity index 100% rename from assets/js/select2/i18n/fa.js rename to assets/libs/select2/i18n/fa.js diff --git a/assets/js/select2/i18n/fi.js b/assets/libs/select2/i18n/fi.js similarity index 100% rename from assets/js/select2/i18n/fi.js rename to assets/libs/select2/i18n/fi.js diff --git a/assets/js/select2/i18n/fr.js b/assets/libs/select2/i18n/fr.js similarity index 100% rename from assets/js/select2/i18n/fr.js rename to assets/libs/select2/i18n/fr.js diff --git a/assets/js/select2/i18n/gl.js b/assets/libs/select2/i18n/gl.js similarity index 100% rename from assets/js/select2/i18n/gl.js rename to assets/libs/select2/i18n/gl.js diff --git a/assets/js/select2/i18n/he.js b/assets/libs/select2/i18n/he.js similarity index 100% rename from assets/js/select2/i18n/he.js rename to assets/libs/select2/i18n/he.js diff --git a/assets/js/select2/i18n/hi.js b/assets/libs/select2/i18n/hi.js similarity index 100% rename from assets/js/select2/i18n/hi.js rename to assets/libs/select2/i18n/hi.js diff --git a/assets/js/select2/i18n/hr.js b/assets/libs/select2/i18n/hr.js similarity index 100% rename from assets/js/select2/i18n/hr.js rename to assets/libs/select2/i18n/hr.js diff --git a/assets/js/select2/i18n/hsb.js b/assets/libs/select2/i18n/hsb.js similarity index 100% rename from assets/js/select2/i18n/hsb.js rename to assets/libs/select2/i18n/hsb.js diff --git a/assets/js/select2/i18n/hu.js b/assets/libs/select2/i18n/hu.js similarity index 100% rename from assets/js/select2/i18n/hu.js rename to assets/libs/select2/i18n/hu.js diff --git a/assets/js/select2/i18n/hy.js b/assets/libs/select2/i18n/hy.js similarity index 100% rename from assets/js/select2/i18n/hy.js rename to assets/libs/select2/i18n/hy.js diff --git a/assets/js/select2/i18n/id.js b/assets/libs/select2/i18n/id.js similarity index 100% rename from assets/js/select2/i18n/id.js rename to assets/libs/select2/i18n/id.js diff --git a/assets/js/select2/i18n/is.js b/assets/libs/select2/i18n/is.js similarity index 100% rename from assets/js/select2/i18n/is.js rename to assets/libs/select2/i18n/is.js diff --git a/assets/js/select2/i18n/it.js b/assets/libs/select2/i18n/it.js similarity index 100% rename from assets/js/select2/i18n/it.js rename to assets/libs/select2/i18n/it.js diff --git a/assets/js/select2/i18n/ja.js b/assets/libs/select2/i18n/ja.js similarity index 100% rename from assets/js/select2/i18n/ja.js rename to assets/libs/select2/i18n/ja.js diff --git a/assets/js/select2/i18n/ka.js b/assets/libs/select2/i18n/ka.js similarity index 100% rename from assets/js/select2/i18n/ka.js rename to assets/libs/select2/i18n/ka.js diff --git a/assets/js/select2/i18n/km.js b/assets/libs/select2/i18n/km.js similarity index 100% rename from assets/js/select2/i18n/km.js rename to assets/libs/select2/i18n/km.js diff --git a/assets/js/select2/i18n/ko.js b/assets/libs/select2/i18n/ko.js similarity index 100% rename from assets/js/select2/i18n/ko.js rename to assets/libs/select2/i18n/ko.js diff --git a/assets/js/select2/i18n/lt.js b/assets/libs/select2/i18n/lt.js similarity index 100% rename from assets/js/select2/i18n/lt.js rename to assets/libs/select2/i18n/lt.js diff --git a/assets/js/select2/i18n/lv.js b/assets/libs/select2/i18n/lv.js similarity index 100% rename from assets/js/select2/i18n/lv.js rename to assets/libs/select2/i18n/lv.js diff --git a/assets/js/select2/i18n/mk.js b/assets/libs/select2/i18n/mk.js similarity index 100% rename from assets/js/select2/i18n/mk.js rename to assets/libs/select2/i18n/mk.js diff --git a/assets/js/select2/i18n/ms.js b/assets/libs/select2/i18n/ms.js similarity index 100% rename from assets/js/select2/i18n/ms.js rename to assets/libs/select2/i18n/ms.js diff --git a/assets/js/select2/i18n/nb.js b/assets/libs/select2/i18n/nb.js similarity index 100% rename from assets/js/select2/i18n/nb.js rename to assets/libs/select2/i18n/nb.js diff --git a/assets/js/select2/i18n/ne.js b/assets/libs/select2/i18n/ne.js similarity index 100% rename from assets/js/select2/i18n/ne.js rename to assets/libs/select2/i18n/ne.js diff --git a/assets/js/select2/i18n/nl.js b/assets/libs/select2/i18n/nl.js similarity index 100% rename from assets/js/select2/i18n/nl.js rename to assets/libs/select2/i18n/nl.js diff --git a/assets/js/select2/i18n/pl.js b/assets/libs/select2/i18n/pl.js similarity index 100% rename from assets/js/select2/i18n/pl.js rename to assets/libs/select2/i18n/pl.js diff --git a/assets/js/select2/i18n/ps.js b/assets/libs/select2/i18n/ps.js similarity index 100% rename from assets/js/select2/i18n/ps.js rename to assets/libs/select2/i18n/ps.js diff --git a/assets/js/select2/i18n/pt-BR.js b/assets/libs/select2/i18n/pt-BR.js similarity index 100% rename from assets/js/select2/i18n/pt-BR.js rename to assets/libs/select2/i18n/pt-BR.js diff --git a/assets/js/select2/i18n/pt.js b/assets/libs/select2/i18n/pt.js similarity index 100% rename from assets/js/select2/i18n/pt.js rename to assets/libs/select2/i18n/pt.js diff --git a/assets/js/select2/i18n/ro.js b/assets/libs/select2/i18n/ro.js similarity index 100% rename from assets/js/select2/i18n/ro.js rename to assets/libs/select2/i18n/ro.js diff --git a/assets/js/select2/i18n/ru.js b/assets/libs/select2/i18n/ru.js similarity index 100% rename from assets/js/select2/i18n/ru.js rename to assets/libs/select2/i18n/ru.js diff --git a/assets/js/select2/i18n/sk.js b/assets/libs/select2/i18n/sk.js similarity index 100% rename from assets/js/select2/i18n/sk.js rename to assets/libs/select2/i18n/sk.js diff --git a/assets/js/select2/i18n/sl.js b/assets/libs/select2/i18n/sl.js similarity index 100% rename from assets/js/select2/i18n/sl.js rename to assets/libs/select2/i18n/sl.js diff --git a/assets/js/select2/i18n/sq.js b/assets/libs/select2/i18n/sq.js similarity index 100% rename from assets/js/select2/i18n/sq.js rename to assets/libs/select2/i18n/sq.js diff --git a/assets/js/select2/i18n/sr-Cyrl.js b/assets/libs/select2/i18n/sr-Cyrl.js similarity index 100% rename from assets/js/select2/i18n/sr-Cyrl.js rename to assets/libs/select2/i18n/sr-Cyrl.js diff --git a/assets/js/select2/i18n/sr.js b/assets/libs/select2/i18n/sr.js similarity index 100% rename from assets/js/select2/i18n/sr.js rename to assets/libs/select2/i18n/sr.js diff --git a/assets/js/select2/i18n/sv.js b/assets/libs/select2/i18n/sv.js similarity index 100% rename from assets/js/select2/i18n/sv.js rename to assets/libs/select2/i18n/sv.js diff --git a/assets/js/select2/i18n/th.js b/assets/libs/select2/i18n/th.js similarity index 100% rename from assets/js/select2/i18n/th.js rename to assets/libs/select2/i18n/th.js diff --git a/assets/js/select2/i18n/tk.js b/assets/libs/select2/i18n/tk.js similarity index 100% rename from assets/js/select2/i18n/tk.js rename to assets/libs/select2/i18n/tk.js diff --git a/assets/js/select2/i18n/tr.js b/assets/libs/select2/i18n/tr.js similarity index 100% rename from assets/js/select2/i18n/tr.js rename to assets/libs/select2/i18n/tr.js diff --git a/assets/js/select2/i18n/uk.js b/assets/libs/select2/i18n/uk.js similarity index 100% rename from assets/js/select2/i18n/uk.js rename to assets/libs/select2/i18n/uk.js diff --git a/assets/js/select2/i18n/vi.js b/assets/libs/select2/i18n/vi.js similarity index 100% rename from assets/js/select2/i18n/vi.js rename to assets/libs/select2/i18n/vi.js diff --git a/assets/js/select2/i18n/zh-CN.js b/assets/libs/select2/i18n/zh-CN.js similarity index 100% rename from assets/js/select2/i18n/zh-CN.js rename to assets/libs/select2/i18n/zh-CN.js diff --git a/assets/js/select2/i18n/zh-TW.js b/assets/libs/select2/i18n/zh-TW.js similarity index 100% rename from assets/js/select2/i18n/zh-TW.js rename to assets/libs/select2/i18n/zh-TW.js diff --git a/assets/css/select2/select2.css b/assets/libs/select2/select2.css similarity index 100% rename from assets/css/select2/select2.css rename to assets/libs/select2/select2.css diff --git a/assets/js/select2/select2.full.js b/assets/libs/select2/select2.full.js similarity index 100% rename from assets/js/select2/select2.full.js rename to assets/libs/select2/select2.full.js diff --git a/assets/js/select2/select2.full.min.js b/assets/libs/select2/select2.full.min.js similarity index 100% rename from assets/js/select2/select2.full.min.js rename to assets/libs/select2/select2.full.min.js diff --git a/assets/css/select2/select2.min.css b/assets/libs/select2/select2.min.css similarity index 100% rename from assets/css/select2/select2.min.css rename to assets/libs/select2/select2.min.css diff --git a/includes/admin/class-enqueue.php b/includes/admin/class-enqueue.php index 9f2db15e..e5bc7bb6 100644 --- a/includes/admin/class-enqueue.php +++ b/includes/admin/class-enqueue.php @@ -95,13 +95,12 @@ final class Enqueue extends \um\common\Enqueue { if ( is_rtl() ) { wp_register_style( 'um_members_rtl', UM_URL . 'assets/css/um-members-rtl.css', array( 'um_members' ), UM_VERSION ); } - wp_register_style( 'um_styles', UM_URL . 'assets/css/um-styles.css', array( 'um_ui', 'um_tipsy', 'um_raty', 'um_fonticons_ii', 'um_fonticons_fa' ), UM_VERSION ); + wp_register_style( 'um_styles', UM_URL . 'assets/css/um-styles.css', array( 'um_ui', 'um_tipsy', 'um_raty', 'um_fonticons_ii', 'um_fonticons_fa', 'select2' ), UM_VERSION ); wp_register_style( 'um_profile', UM_URL . 'assets/css/um-profile.css', array(), UM_VERSION ); wp_register_style( 'um_crop', UM_URL . 'assets/css/um-crop.css', array(), UM_VERSION ); wp_register_style( 'um_responsive', UM_URL . 'assets/css/um-responsive.css', array( 'um_profile', 'um_crop' ), UM_VERSION ); wp_register_style( 'um_account', UM_URL . 'assets/css/um-account.css', array(), UM_VERSION ); wp_register_style( 'um_default_css', UM_URL . 'assets/css/um-old-default.css', array(), UM_VERSION ); - wp_register_style( 'select2', UM_URL . 'assets/css/select2/select2' . $suffix . '.css', array(), UM_VERSION ); wp_register_script( 'um_admin_blocks_shortcodes', UM_URL . 'assets/js/um-blocks' . $suffix . '.js', array( 'wp-i18n', 'wp-blocks', 'wp-components' ), UM_VERSION, true ); wp_set_script_translations( 'um_admin_blocks_shortcodes', 'ultimate-member' ); @@ -139,12 +138,11 @@ final class Enqueue extends \um\common\Enqueue { wp_enqueue_script( 'um_admin_blocks_shortcodes' ); - wp_register_script( 'select2', UM_URL . 'assets/js/select2/select2.full' . $suffix . '.js', array( 'jquery', 'jquery-masonry' ), UM_VERSION, true ); wp_register_script( 'um_datetime', UM_URL . 'assets/js/pickadate/picker.js', array( 'jquery' ), UM_VERSION, true ); wp_register_script( 'um_datetime_date', UM_URL . 'assets/js/pickadate/picker.date.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); wp_register_script( 'um_datetime_time', UM_URL . 'assets/js/pickadate/picker.time.js', array( 'jquery', 'um_datetime' ), UM_VERSION, true ); wp_register_script( 'um_conditional', UM_URL . 'assets/js/um-conditional' . $suffix . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); - wp_register_script( 'um_scripts', UM_URL . 'assets/js/um-scripts' . $suffix . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', 'select2' ), UM_VERSION, true ); + wp_register_script( 'um_scripts', UM_URL . 'assets/js/um-scripts' . $suffix . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', self::$select2_handle ), UM_VERSION, true ); $max_upload_size = wp_max_upload_size(); if ( ! $max_upload_size ) { $max_upload_size = 0; @@ -181,7 +179,6 @@ final class Enqueue extends \um\common\Enqueue { wp_enqueue_script( 'um_functions' ); wp_enqueue_script( 'um_responsive' ); - wp_enqueue_style( 'select2' ); wp_enqueue_style( 'um_default_css' ); wp_enqueue_style( 'um_members' ); wp_enqueue_style( 'um_styles' ); @@ -220,15 +217,6 @@ final class Enqueue extends \um\common\Enqueue { $suffix = self::get_suffix(); //scripts for FRONTEND PREVIEW - if ( class_exists( 'WooCommerce' ) ) { - wp_dequeue_style( 'select2' ); - wp_deregister_style( 'select2' ); - - wp_dequeue_script( 'select2' ); - wp_deregister_script( 'select2' ); - } - - wp_register_script( 'select2', $this->front_js_baseurl . 'select2/select2.full' . $suffix . '.js', array( 'jquery', 'jquery-masonry' ), '4.0.13', true ); wp_register_script( 'um_jquery_form', $this->front_js_baseurl . 'um-jquery-form' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); wp_register_script( 'um_fileupload', $this->front_js_baseurl . 'um-fileupload.js', array( 'jquery' ), UM_VERSION, true ); wp_register_script( 'um_crop', $this->front_js_baseurl . 'um-crop' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); @@ -248,11 +236,10 @@ final class Enqueue extends \um\common\Enqueue { } } - wp_register_script( 'um_scripts', $this->front_js_baseurl . 'um-scripts' . $suffix . '.js', array( 'um_functions', 'um_crop', 'um_raty', 'select2', 'um_jquery_form', 'um_fileupload', 'um_datetime', 'um_datetime_date', 'um_datetime_time'/*, 'um_datetime_legacy'*/ ), UM_VERSION, true ); + wp_register_script( 'um_scripts', $this->front_js_baseurl . 'um-scripts' . $suffix . '.js', array( 'um_functions', 'um_crop', 'um_raty', self::$select2_handle, 'um_jquery_form', 'um_fileupload', 'um_datetime', 'um_datetime_date', 'um_datetime_time'/*, 'um_datetime_legacy'*/ ), UM_VERSION, true ); wp_register_script( 'um_responsive', $this->front_js_baseurl . 'um-responsive' . $suffix . '.js', array( 'um_scripts' ), UM_VERSION, true ); wp_register_script( 'um_modal', $this->front_js_baseurl . 'um-modal' . $suffix . '.js', array( 'um_responsive' ), UM_VERSION, true ); - wp_register_style( 'select2', $this->front_css_baseurl . 'select2/select2' . $suffix . '.css', array(), '4.0.13' ); wp_register_style( 'um_datetime', $this->front_css_baseurl . 'pickadate/default.css', array(), UM_VERSION ); wp_register_style( 'um_datetime_date', $this->front_css_baseurl . 'pickadate/default.date.css', array( 'um_datetime' ), UM_VERSION ); wp_register_style( 'um_datetime_time', $this->front_css_baseurl . 'pickadate/default.time.css', array( 'um_datetime' ), ultimatemember_version ); @@ -261,12 +248,12 @@ final class Enqueue extends \um\common\Enqueue { wp_register_style( 'um_crop', $this->front_css_baseurl . 'um-crop.css', array(), ultimatemember_version ); wp_register_style( 'um_responsive', $this->front_css_baseurl . 'um-responsive.css', array(), ultimatemember_version ); wp_register_style( 'um_modal', $this->front_css_baseurl . 'um-modal.css', array(), ultimatemember_version ); - wp_register_style( 'um_styles', $this->front_css_baseurl . 'um-styles.css', array( 'um_ui', 'um_tipsy', 'um_raty', 'um_fonticons_ii', 'um_fonticons_fa' ), ultimatemember_version ); + wp_register_style( 'um_styles', $this->front_css_baseurl . 'um-styles.css', array( 'um_ui', 'um_tipsy', 'um_raty', 'um_fonticons_ii', 'um_fonticons_fa', 'select2' ), ultimatemember_version ); wp_register_style( 'um_members', $this->front_css_baseurl . 'um-members.css', array(), ultimatemember_version ); wp_register_style( 'um_profile', $this->front_css_baseurl . 'um-profile.css', array(), ultimatemember_version ); wp_register_style( 'um_account', $this->front_css_baseurl . 'um-account.css', array(), ultimatemember_version ); wp_register_style( 'um_misc', $this->front_css_baseurl . 'um-misc.css', array(), ultimatemember_version ); - wp_register_style( 'um_default_css', $this->front_css_baseurl . 'um-old-default.css', array( 'um_crop', 'um_tipsy', 'um_raty', 'um_responsive', 'um_modal', 'um_styles', 'um_members', 'um_profile', 'um_account', 'um_misc', 'um_datetime_date', 'um_datetime_time', 'um_scrollbar', 'select2' ), ultimatemember_version ); + wp_register_style( 'um_default_css', $this->front_css_baseurl . 'um-old-default.css', array( 'um_crop', 'um_tipsy', 'um_raty', 'um_responsive', 'um_modal', 'um_styles', 'um_members', 'um_profile', 'um_account', 'um_misc', 'um_datetime_date', 'um_datetime_time', 'um_scrollbar', 'select2' ), UM_VERSION ); wp_enqueue_script( 'um_modal' ); wp_enqueue_style( 'um_default_css' ); @@ -335,21 +322,11 @@ final class Enqueue extends \um\common\Enqueue { */ public function load_forms() { $suffix = self::get_suffix(); - if ( class_exists( 'WooCommerce' ) ) { - wp_dequeue_style( 'select2' ); - wp_deregister_style( 'select2' ); - - wp_dequeue_script( 'select2' ); - wp_deregister_script( 'select2' ); - } - - wp_register_script( 'select2', $this->front_js_baseurl . 'select2/select2.full' . $suffix . '.js', array( 'jquery', 'jquery-masonry' ), '4.0.13', true ); - wp_register_style( 'select2', $this->front_css_baseurl . 'select2/select2' . $suffix . '.css', array(), '4.0.13' ); wp_register_style( 'um_admin_forms', $this->css_url . 'um-admin-forms.css', array( 'wp-color-picker', 'um_ui', 'select2' ), UM_VERSION ); wp_enqueue_style( 'um_admin_forms' ); - wp_register_script( 'um_admin_forms', $this->js_url . 'um-admin-forms.js', array( 'jquery', 'wp-i18n', 'select2' ), UM_VERSION, true ); + wp_register_script( 'um_admin_forms', $this->js_url . 'um-admin-forms.js', array( 'jquery', 'wp-i18n', self::$select2_handle ), UM_VERSION, true ); wp_localize_script( 'um_admin_forms', diff --git a/includes/common/class-enqueue.php b/includes/common/class-enqueue.php index a85d3bc0..319ad997 100644 --- a/includes/common/class-enqueue.php +++ b/includes/common/class-enqueue.php @@ -29,6 +29,13 @@ class Enqueue { 'libs' => UM_URL . 'assets/libs/', ); + /** + * @var string scripts' Standard or Minified versions. + * + * @since 2.6.12 + */ + public static $select2_handle = 'select2'; + /** * Enqueue constructor. * @@ -88,19 +95,37 @@ class Enqueue { // wp_register_script( 'um-helptip', $this->urls['libs'] . 'helptip/helptip' . $this->suffix . '.js', array( 'jquery', 'jquery-ui-tooltip' ), '1.0.0', true ); // wp_register_style( 'um-helptip', $this->urls['libs'] . 'helptip/helptip' . $this->suffix . '.css', array( 'dashicons', 'um_ui' ), '1.0.0' ); -// // Select2 -// $dequeue_select2 = apply_filters( 'um_dequeue_select2_scripts', false ); -// if ( class_exists( 'WooCommerce' ) || $dequeue_select2 ) { -// wp_dequeue_style( 'select2' ); -// wp_deregister_style( 'select2' ); -// -// wp_dequeue_script( 'select2' ); -// wp_deregister_script( 'select2' ); -// } -// wp_register_script( 'select2', $this->urls['libs'] . 'select2/select2.full' . $this->suffix . '.js', array( 'jquery' ), '4.0.13', true ); -// wp_register_style( 'select2', $this->urls['libs'] . 'select2/select2' . $this->suffix . '.css', array(), '4.0.13' ); -// + // Select2 JS. + $dequeue_select2 = apply_filters( 'um_dequeue_select2_scripts', false ); + if ( class_exists( 'WooCommerce' ) || $dequeue_select2 ) { + wp_dequeue_style( self::$select2_handle ); + wp_deregister_style( self::$select2_handle ); + wp_dequeue_script( self::$select2_handle ); + wp_deregister_script( self::$select2_handle ); + } + wp_register_script( self::$select2_handle, self::get_url( 'libs' ) . 'select2/select2.full' . $suffix . '.js', array( 'jquery' ), '4.0.13', true ); + // Load a localized version for Select2. + $locale = get_locale(); + $base_locale = get_locale(); + if ( $locale ) { + if ( ! file_exists( UM_PATH . 'assets/libs/select2/i18n/' . $locale . '.js' ) ) { + $locale = explode( '_', $base_locale ); + $locale = $locale[0]; + + if ( ! file_exists( UM_PATH . 'assets/libs/select2/i18n/' . $locale . '.js' ) ) { + $locale = explode( '_', $base_locale ); + $locale = implode( '-', $locale ); + } + } + + if ( file_exists( UM_PATH . 'assets/libs/select2/i18n/' . $locale . '.js' ) ) { + wp_register_script( 'um_select2_locale', self::get_url( 'libs' ) . 'select2/i18n/' . $locale . '.js', array( 'jquery', self::$select2_handle ), '4.0.13', true ); + self::$select2_handle = 'um_select2_locale'; + } + } + + wp_register_style( 'select2', self::get_url( 'libs' ) . 'select2/select2' . $suffix . '.css', array(), '4.0.13' ); // // // Modal // wp_register_script( 'um-modal', $this->urls['libs'] . 'modal/um-modal' . $this->suffix . '.js', array( 'jquery', 'wp-i18n', 'wp-hooks' ), UM_VERSION, true ); diff --git a/includes/frontend/class-enqueue.php b/includes/frontend/class-enqueue.php index 7f8976ac..0152cd3c 100644 --- a/includes/frontend/class-enqueue.php +++ b/includes/frontend/class-enqueue.php @@ -77,16 +77,7 @@ final class Enqueue extends \um\common\Enqueue { * */ function register_scripts() { - $suffix = self::get_suffix(); - $dequeue_select2 = apply_filters( 'um_dequeue_select2_scripts', false ); - if ( class_exists( 'WooCommerce' ) || $dequeue_select2 ) { - wp_dequeue_style( 'select2' ); - wp_deregister_style( 'select2' ); - - wp_dequeue_script( 'select2'); - wp_deregister_script('select2'); - } - wp_register_script( 'select2', $this->js_baseurl . 'select2/select2.full' . $suffix . '.js', array( 'jquery' ), '4.0.13', true ); + $suffix = self::get_suffix(); wp_register_script( 'um_scrollbar', $this->js_baseurl . 'simplebar' . $suffix . '.js', array( 'jquery' ), UM_VERSION, true ); @@ -118,7 +109,7 @@ final class Enqueue extends \um\common\Enqueue { wp_register_script( 'um-gdpr', $this->js_baseurl . 'um-gdpr' . $suffix . '.js', array( 'jquery' ), UM_VERSION, false ); wp_register_script('um_conditional', $this->js_baseurl . 'um-conditional' . $suffix . '.js', array( 'jquery', 'wp-hooks' ), UM_VERSION, true ); - wp_register_script('um_scripts', $this->js_baseurl . 'um-scripts' . $suffix . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', /*'um_datetime_legacy',*/ 'select2', 'um_tipsy', 'um_raty' ), UM_VERSION, true ); + wp_register_script('um_scripts', $this->js_baseurl . 'um-scripts' . $suffix . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', /*'um_datetime_legacy',*/ self::$select2_handle, 'um_tipsy', 'um_raty' ), UM_VERSION, true ); /** * UM hook * @@ -140,7 +131,6 @@ final class Enqueue extends \um\common\Enqueue { * ?> */ - $max_upload_size = wp_max_upload_size(); if ( ! $max_upload_size ) { $max_upload_size = 0; @@ -170,7 +160,6 @@ final class Enqueue extends \um\common\Enqueue { public function register_styles() { //FontAwesome and FontIcons styles wp_register_style( 'um_crop', $this->css_baseurl . 'um-crop.css', array(), UM_VERSION ); - wp_register_style( 'select2', $this->css_baseurl . 'select2/select2.min.css', array(), '4.0.13' ); wp_register_style( 'um_fileupload', $this->css_baseurl . 'um-fileupload.css', array(), UM_VERSION ); wp_register_style( 'um_datetime', $this->css_baseurl . 'pickadate/default.css', array(), UM_VERSION ); wp_register_style( 'um_datetime_date', $this->css_baseurl . 'pickadate/default.date.css', array( 'um_datetime' ), UM_VERSION ); @@ -182,7 +171,7 @@ final class Enqueue extends \um\common\Enqueue { wp_register_style( 'um_modal', $this->css_baseurl . 'um-modal.css', array( 'um_crop' ), UM_VERSION ); wp_register_style( 'um_responsive', $this->css_baseurl . 'um-responsive.css', array( 'um_profile', 'um_crop' ), UM_VERSION ); - wp_register_style( 'um_styles', $this->css_baseurl . 'um-styles.css', array( 'um_ui', 'um_tipsy', 'um_raty', 'um_fonticons_ii', 'um_fonticons_fa' ), UM_VERSION ); + wp_register_style( 'um_styles', $this->css_baseurl . 'um-styles.css', array( 'um_ui', 'um_tipsy', 'um_raty', 'um_fonticons_ii', 'um_fonticons_fa', 'select2' ), UM_VERSION ); wp_register_style( 'um_members', $this->css_baseurl . 'um-members.css', array( 'um_styles' ), UM_VERSION ); if ( is_rtl() ) { @@ -245,7 +234,7 @@ final class Enqueue extends \um\common\Enqueue { //$this->load_fonticons(); - $this->load_selectjs(); + // $this->load_selectjs(); $this->load_modal(); @@ -301,10 +290,9 @@ final class Enqueue extends \um\common\Enqueue { /** * Load select-dropdowns JS + * @depecated 2.6.12 */ function load_selectjs() { - wp_enqueue_script( 'select2' ); - wp_enqueue_style( 'select2' ); } From 350e52acfee4f3e2e70c0d7f272c018ff89ece5d Mon Sep 17 00:00:00 2001 From: ashubawork Date: Thu, 28 Sep 2023 10:53:15 +0300 Subject: [PATCH 52/81] - secure settings --- .../admin/core/class-admin-site-health.php | 48 ++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/includes/admin/core/class-admin-site-health.php b/includes/admin/core/class-admin-site-health.php index f91bb973..12e91821 100644 --- a/includes/admin/core/class-admin-site-health.php +++ b/includes/admin/core/class-admin-site-health.php @@ -783,6 +783,52 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { ), ); + // Secure settings + $secure_settings = array( + 'um-banned_capabilities' => array( + 'label' => __( 'Banned Administrative Capabilities', 'ultimate-member' ), + 'value' => implode(', ', UM()->options()->get( 'banned_capabilities' ) ), + ), + 'um-lock_register_forms' => array( + 'label' => __( 'Lock All Register Forms', 'ultimate-member' ), + 'value' => stripslashes( UM()->options()->get( 'lock_register_forms' ) ) ? $labels['yes'] : $labels['no'], + ), + 'um-display_login_form_notice' => array( + 'label' => __( 'Display Login form notice to reset passwords', 'ultimate-member' ), + 'value' => UM()->options()->get( 'display_login_form_notice' ) ? $labels['yes'] : $labels['no'], + ), + 'um-secure_ban_admins_accounts' => array( + 'label' => __( 'Enable ban for administrative capabilities', 'ultimate-member' ), + 'value' => UM()->options()->get( 'secure_ban_admins_accounts' ) ? $labels['yes'] : $labels['no'], + ), + ); + if ( 1 === absint( UM()->options()->get( 'secure_ban_admins_accounts' ) ) ) { + $secure_settings['um-secure_notify_admins_banned_accounts'] = array( + 'label' => __( 'Notify Administrators', 'ultimate-member' ), + 'value' => UM()->options()->get( 'secure_notify_admins_banned_accounts' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'secure_notify_admins_banned_accounts' ) ) ) { + $secure_notify_admins_banned_accounts_options = array( + 'instant' => __( 'Send Immediately', 'ultimate-member' ), + 'hourly' => __( 'Hourly', 'ultimate-member' ), + 'daily' => __( 'Daily', 'ultimate-member' ), + ); + + $secure_settings['um-secure_notify_admins_banned_accounts__interval'] = array( + 'label' => __( 'Notification Schedule', 'ultimate-member' ), + 'value' => $secure_notify_admins_banned_accounts_options[ UM()->options()->get( 'secure_notify_admins_banned_accounts__interval' ) ], + ); + } + } + + $secure_allowed_redirect_hosts = UM()->options()->get( 'secure_allowed_redirect_hosts' ); + $secure_allowed_redirect_hosts = explode(PHP_EOL, $secure_allowed_redirect_hosts ); + + $secure_settings['um-secure_allowed_redirect_hosts'] = array( + 'label' => __( 'Allowed hosts for safe redirect', 'ultimate-member' ), + 'value' => $secure_allowed_redirect_hosts, + ); + // Licenses settings $license_settings = array( 'um-licenses' => array( @@ -810,7 +856,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { */ $license_settings = apply_filters( 'um_licenses_site_health', $license_settings ); - $info['ultimate-member']['fields'] = array_merge( $info['ultimate-member']['fields'], $pages_settings, $user_settings, $account_settings, $uploads_settings, $restrict_settings, $access_other_settings, $email_settings, $appearance_settings, $license_settings, $misc_settings ); + $info['ultimate-member']['fields'] = array_merge( $info['ultimate-member']['fields'], $pages_settings, $user_settings, $account_settings, $uploads_settings, $restrict_settings, $access_other_settings, $email_settings, $appearance_settings, $license_settings, $misc_settings, $secure_settings ); return $info; } From 8c363960433efb9a594466c52a42fd6dbca11f9c Mon Sep 17 00:00:00 2001 From: ashubawork Date: Thu, 28 Sep 2023 11:35:42 +0300 Subject: [PATCH 53/81] - roles --- .../admin/core/class-admin-site-health.php | 556 +++++++++++++++++- 1 file changed, 555 insertions(+), 1 deletion(-) diff --git a/includes/admin/core/class-admin-site-health.php b/includes/admin/core/class-admin-site-health.php index 12e91821..58e1f5e6 100644 --- a/includes/admin/core/class-admin-site-health.php +++ b/includes/admin/core/class-admin-site-health.php @@ -20,6 +20,54 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { add_filter( 'debug_information', array( $this, 'debug_information' ), 20, 1 ); } + private function get_roles() { + return UM()->roles()->get_roles(); + } + + + private function get_forms() { + $forms_data = get_posts( array( 'post_type' => 'um_form', 'posts_per_page' => -1 ) ); + $forms = array(); + foreach ( $forms_data as $form ) { + $forms[ 'ID#' . $form->ID ] = $form->post_title; + } + return $forms; + } + + + private function get_role_meta( $key ) { + return get_option( "um_role_{$key}_meta", false ); + } + + + private function get_active_modules() { + $modules = UM()->modules()->get_list(); + $active_modules = array(); + if ( ! empty( $modules ) ) { + foreach ( $modules as $slug => $data ) { + if ( UM()->modules()->is_active( $slug ) ) { + $active_modules[ $slug ] = $data['title']; + } + } + } + + return apply_filters( 'um_debug_information_active_modules', $active_modules ); + } + + + private function get_field_data( $info, $key, $field_key, $field ) { + $row = isset( $field['metakey'] ) ? false : true; + $title = $row ? __( 'Row: ', 'ultimate-member' ) . $field['id'] : __( 'Field: ', 'ultimate-member' ) . $field['metakey']; + $field_info = array( + 'um-field_'.$field_key => array( + 'label' => $title, + 'value' => $field, + ), + ); + + return $field_info; + } + /** * Add our data to Site Health information. * @@ -822,7 +870,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { } $secure_allowed_redirect_hosts = UM()->options()->get( 'secure_allowed_redirect_hosts' ); - $secure_allowed_redirect_hosts = explode(PHP_EOL, $secure_allowed_redirect_hosts ); + $secure_allowed_redirect_hosts = explode( PHP_EOL, $secure_allowed_redirect_hosts ); $secure_settings['um-secure_allowed_redirect_hosts'] = array( 'label' => __( 'Allowed hosts for safe redirect', 'ultimate-member' ), @@ -858,6 +906,512 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { $info['ultimate-member']['fields'] = array_merge( $info['ultimate-member']['fields'], $pages_settings, $user_settings, $account_settings, $uploads_settings, $restrict_settings, $access_other_settings, $email_settings, $appearance_settings, $license_settings, $misc_settings, $secure_settings ); + + // User roles settings + $roles_array = array(); + foreach ( $this->get_roles() as $key => $role ) { + if ( strpos( $key, 'um_' ) === 0 ) { + $key = substr( $key, 3 ); + } + $rolemeta = $this->get_role_meta( $key ); + if ( false === $rolemeta ) { + continue; + } + $priority = ! empty( $rolemeta['_um_priority'] ) ? $rolemeta['_um_priority'] : 0; + + $k = $priority . '-' . $role; + $roles_array[ $k ] = $role . '(' . $priority . ')'; + } + + krsort($roles_array, SORT_NUMERIC); + + $info['ultimate-member-user-roles'] = array( + 'label' => __( 'User roles', 'ultimate-member' ), + 'description' => __( 'This debug information about user roles.', 'ultimate-member' ), + 'fields' => array( + 'um-roles' => array( + 'label' => __( 'User Roles (priority)', 'ultimate-member' ), + 'value' => implode(', ', $roles_array ), + ), + 'um-register_role' => array( + 'label' => __( 'Default New User Role', 'ultimate-member' ), + 'value' => get_option( 'default_role' ), + ), + ), + ); + + foreach ( $this->get_roles() as $key => $role ) { + if ( strpos( $key, 'um_' ) === 0 ) { + $key = substr( $key, 3 ); + } + + $rolemeta = $this->get_role_meta( $key ); + if ( false === $rolemeta ) { + continue; + } + + $info[ 'ultimate-member-' . $key ] = array( + 'label' => ' - ' . $role . __( ' role settings', 'ultimate-member' ), + 'description' => __( 'This debug information about user role.', 'ultimate-member' ), + 'fields' => array(), + ); + + if ( array_key_exists( '_um_can_access_wpadmin', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_access_wpadmin' => array( + 'label' => __( 'Can access wp-admin?', 'ultimate-member' ), + 'value' => $rolemeta['_um_can_access_wpadmin'] ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + if ( array_key_exists( '_um_can_not_see_adminbar', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_not_see_adminbar' => array( + 'label' => __( 'Force hiding adminbar in frontend?', 'ultimate-member' ), + 'value' => $rolemeta['_um_can_not_see_adminbar'] ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + if ( array_key_exists( '_um_can_edit_everyone', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_edit_everyone' => array( + 'label' => __( 'Can edit other member accounts?', 'ultimate-member' ), + 'value' => $rolemeta['_um_can_edit_everyone'] ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + if ( array_key_exists( '_um_can_edit_everyone', $rolemeta ) && 1 === absint( $rolemeta['_um_can_edit_everyone'] ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_edit_roles' => array( + 'label' => __( 'Can edit these user roles only', 'ultimate-member' ), + 'value' => ! empty( $rolemeta['_um_can_edit_roles'] ) ? implode( ', ', $rolemeta['_um_can_edit_roles'] ) : $labels['all'], + ), + ) + ); + } + + if ( array_key_exists( '_um_can_delete_everyone', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_delete_everyone' => array( + 'label' => __( 'Can delete other member accounts?', 'ultimate-member' ), + 'value' => $rolemeta['_um_can_delete_everyone'] ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + if ( array_key_exists( '_um_can_delete_everyone', $rolemeta ) && 1 === absint( $rolemeta['_um_can_delete_everyone'] ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_delete_roles' => array( + 'label' => __( 'Can delete these user roles only', 'ultimate-member' ), + 'value' => ! empty( $rolemeta['_um_can_delete_roles'] ) ? implode( ', ', $rolemeta['_um_can_delete_roles'] ) : $labels['all'], + ), + ) + ); + } + + if ( array_key_exists( '_um_can_edit_profile', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_edit_profile' => array( + 'label' => __( 'Can edit their profile?', 'ultimate-member' ), + 'value' => $rolemeta['_um_can_edit_profile'] ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + if ( array_key_exists( '_um_can_delete_profile', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_delete_profile' => array( + 'label' => __( 'Can delete their account?', 'ultimate-member' ), + 'value' => $rolemeta['_um_can_delete_profile'] ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + if ( array_key_exists( '_um_can_view_all', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_view_all' => array( + 'label' => __( 'Can view other member profiles?', 'ultimate-member' ), + 'value' => $rolemeta['_um_can_view_all'] ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + if ( array_key_exists( '_um_can_view_all', $rolemeta ) && 1 === absint( $rolemeta['_um_can_view_all'] ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_view_roles' => array( + 'label' => __( 'Can view these user roles only', 'ultimate-member' ), + 'value' => ! empty( $rolemeta['_um_can_view_roles'] ) ? implode( ', ', $rolemeta['_um_can_view_roles'] ) : $labels['all'], + ), + ) + ); + } + + if ( isset( $rolemeta['_um_profile_noindex'] ) && '' !== $rolemeta['_um_profile_noindex'] ) { + $profile_noindex = $rolemeta['_um_profile_noindex'] ? $labels['yes'] : $labels['no']; + } else { + $profile_noindex = __( 'Default', 'ultimate-member' ); + } + if ( isset( $rolemeta['_um_default_homepage'] ) && '' !== $rolemeta['_um_default_homepage'] ) { + $default_homepage = $rolemeta['_um_default_homepage'] ? $labels['yes'] : $labels['no']; + } else { + $default_homepage = __( 'No such option', 'ultimate-member' ); + } + + if ( array_key_exists( '_um_can_make_private_profile', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_make_private_profile' => array( + 'label' => __( 'Can make their profile private?', 'ultimate-member' ), + 'value' => $rolemeta['_um_can_make_private_profile'] ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + if ( array_key_exists( '_um_can_access_private_profile', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_access_private_profile' => array( + 'label' => __( 'Can view/access private profiles?', 'ultimate-member' ), + 'value' => $rolemeta['_um_can_access_private_profile'] ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-profile_noindex' => array( + 'label' => __( 'Avoid indexing profile by search engines', 'ultimate-member' ), + 'value' => $profile_noindex, + ), + 'um-default_homepage' => array( + 'label' => __( 'Can view default homepage?', 'ultimate-member' ), + 'value' => $default_homepage, + ), + ) + ); + + if ( isset( $rolemeta['_um_default_homepage'] ) && 0 === absint( $rolemeta['_um_default_homepage'] ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-redirect_homepage' => array( + 'label' => __( 'Custom Homepage Redirect', 'ultimate-member' ), + 'value' => $rolemeta['_um_redirect_homepage'], + ), + ) + ); + } + + $status_options = array( + 'approved' => __( 'Auto Approve', 'ultimate-member' ), + 'checkmail' => __( 'Require Email Activation', 'ultimate-member' ), + 'pending' => __( 'Require Admin Review', 'ultimate-member' ), + ); + + if ( array_key_exists( '_um_status', $rolemeta ) && isset( $status_options[ $rolemeta['_um_status'] ] ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-status' => array( + 'label' => __( 'Registration Status', 'ultimate-member' ), + 'value' => $status_options[ $rolemeta['_um_status'] ], + ), + ) + ); + } + + if ( array_key_exists( '_um_status', $rolemeta ) && 'approved' === $rolemeta['_um_status'] ) { + $auto_approve_act = array( + 'redirect_profile' => __( 'Redirect to profile', 'ultimate-member' ), + 'redirect_url' => __( 'Redirect to URL', 'ultimate-member' ), + ); + + if ( isset( $auto_approve_act[ $rolemeta['_um_auto_approve_act'] ] ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-auto_approve_act' => array( + 'label' => __( 'Custom Homepage Redirect', 'ultimate-member' ), + 'value' => $auto_approve_act[ $rolemeta['_um_auto_approve_act'] ], + ), + ) + ); + } + + if ( 'redirect_url' === $rolemeta['_um_auto_approve_act'] && array_key_exists( '_um_auto_approve_url', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-auto_approve_url' => array( + 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), + 'value' => $rolemeta['_um_auto_approve_url'], + ), + ) + ); + } + } + + if ( array_key_exists( '_um_status', $rolemeta ) && 'checkmail' === $rolemeta['_um_status'] ) { + $checkmail_action = array( + 'show_message' => __( 'Show custom message', 'ultimate-member' ), + 'redirect_url' => __( 'Redirect to URL', 'ultimate-member' ), + ); + + if ( array_key_exists( '_um_login_email_activate', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-login_email_activate' => array( + 'label' => __( 'Login user after validating the activation link?', 'ultimate-member' ), + 'value' => $rolemeta['_um_login_email_activate'] ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + if ( isset( $checkmail_action[ $rolemeta['_um_checkmail_action'] ] ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-checkmail_action' => array( + 'label' => __( 'Action to be taken after registration', 'ultimate-member' ), + 'value' => $checkmail_action[ $rolemeta['_um_checkmail_action'] ], + ), + ) + ); + } + + if ( 'show_message' === $rolemeta['_um_checkmail_action'] ) { + if ( array_key_exists( '_um_checkmail_message', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-checkmail_message' => array( + 'label' => __( 'Personalize the custom message', 'ultimate-member' ), + 'value' => stripslashes( $rolemeta['_um_checkmail_message'] ), + ), + ) + ); + } + } else { + if ( array_key_exists( '_um_checkmail_url', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-checkmail_url' => array( + 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), + 'value' => $rolemeta['_um_checkmail_url'], + ), + ) + ); + } + } + + if ( array_key_exists( '_um_url_email_activate', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-url_email_activate' => array( + 'label' => __( 'URL redirect after e-mail activation', 'ultimate-member' ), + 'value' => $rolemeta['_um_url_email_activate'], + ), + ) + ); + } + } + + if ( array_key_exists( '_um_status', $rolemeta ) && 'pending' === $rolemeta['_um_status'] ) { + $pending_action = array( + 'show_message' => __( 'Show custom message', 'ultimate-member' ), + 'redirect_url' => __( 'Redirect to URL', 'ultimate-member' ), + ); + + if ( array_key_exists( '_um_pending_action', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-pending_action' => array( + 'label' => __( 'Action to be taken after registration', 'ultimate-member' ), + 'value' => $pending_action[ $rolemeta['_um_pending_action'] ], + ), + ) + ); + } + + if ( 'show_message' === $rolemeta['_um_pending_action'] ) { + if ( array_key_exists( '_um_pending_message', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-pending_message' => array( + 'label' => __( 'Personalize the custom message', 'ultimate-member' ), + 'value' => stripslashes( $rolemeta['_um_pending_message'] ), + ), + ) + ); + } + } else { + if ( array_key_exists( '_um_pending_url', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-pending_url' => array( + 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), + 'value' => $rolemeta['_um_pending_url'], + ), + ) + ); + } + } + } + + $after_login_options = array( + 'redirect_profile' => __( 'Redirect to profile', 'ultimate-member' ), + 'redirect_url' => __( 'Redirect to URL', 'ultimate-member' ), + 'refresh' => __( 'Refresh active page', 'ultimate-member' ), + 'redirect_admin' => __( 'Redirect to WordPress Admin', 'ultimate-member' ), + ); + + if ( array_key_exists( '_um_after_login', $rolemeta ) && isset( $after_login_options[ $rolemeta['_um_after_login'] ] ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-after_login' => array( + 'label' => __( 'Action to be taken after login', 'ultimate-member' ), + 'value' => $after_login_options[ $rolemeta['_um_after_login'] ], + ), + ) + ); + } + + if ( array_key_exists( '_um_login_redirect_url', $rolemeta ) && 'redirect_url' === $rolemeta['_um_login_redirect_url'] ) { + if ( array_key_exists( '_um_pending_url', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-login_redirect_url' => array( + 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), + 'value' => $rolemeta['_um_login_redirect_url'], + ), + ) + ); + } + } + + $redirect_options = array( + 'redirect_home' => __( 'Go to Homepage', 'ultimate-member' ), + 'redirect_url' => __( 'Go to Custom URL', 'ultimate-member' ), + ); + if ( ! isset( $rolemeta['_um_after_logout'] ) ) { + $rolemeta['_um_after_logout'] = 'redirect_home'; + } + if ( array_key_exists( '_um_after_logout', $rolemeta ) && isset( $redirect_options[ $rolemeta['_um_after_logout'] ] ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-after_logout' => array( + 'label' => __( 'Action to be taken after logout', 'ultimate-member' ), + 'value' => $redirect_options[ $rolemeta['_um_after_logout'] ], + ), + ) + ); + } + + if ( 'redirect_url' === $rolemeta['_um_after_logout'] ) { + if ( array_key_exists( '_um_logout_redirect_url', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-logout_redirect_url' => array( + 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), + 'value' => $rolemeta['_um_logout_redirect_url'], + ), + ) + ); + } + } + + if ( ! isset( $rolemeta['_um_after_delete'] ) ) { + $rolemeta['_um_after_delete'] = 'redirect_home'; + } + if ( array_key_exists( '_um_after_delete', $rolemeta ) && isset( $redirect_options[ $rolemeta['_um_after_delete'] ] ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-after_delete' => array( + 'label' => __( 'Action to be taken after account is deleted', 'ultimate-member' ), + 'value' => $redirect_options[ $rolemeta['_um_after_delete'] ], + ), + ) + ); + } + + if ( 'redirect_url' === $rolemeta['_um_after_delete'] ) { + if ( array_key_exists( '_um_delete_redirect_url', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-delete_redirect_url' => array( + 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), + 'value' => $rolemeta['_um_delete_redirect_url'], + ), + ) + ); + } + } + + if ( ! empty( $rolemeta['wp_capabilities'] ) ) { + if ( array_key_exists( 'wp_capabilities', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-wp_capabilities' => array( + 'label' => __( 'WP Capabilities', 'ultimate-member' ), + 'value' => $rolemeta['wp_capabilities'], + ), + ) + ); + } + } + + $info = apply_filters( 'um_debug_information_user_role', $info, $key ); + } + return $info; } } From 9278cb2f4b001116a8c7e97412fc9f652fa240cd Mon Sep 17 00:00:00 2001 From: ashubawork Date: Thu, 28 Sep 2023 11:37:53 +0300 Subject: [PATCH 54/81] - forms --- .../admin/core/class-admin-site-health.php | 336 ++++++++++++++++++ 1 file changed, 336 insertions(+) diff --git a/includes/admin/core/class-admin-site-health.php b/includes/admin/core/class-admin-site-health.php index 58e1f5e6..b12af30f 100644 --- a/includes/admin/core/class-admin-site-health.php +++ b/includes/admin/core/class-admin-site-health.php @@ -1412,6 +1412,342 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { $info = apply_filters( 'um_debug_information_user_role', $info, $key ); } + // Forms settings + if ( ! empty( $this->get_forms() ) ) { + $info['ultimate-member-forms'] = array( + 'label' => __( 'Ultimate Member Forms', 'ultimate-member' ), + 'description' => __( 'This debug information for your Ultimate Member forms.', 'ultimate-member' ), + 'fields' => array( + 'um-forms' => array( + 'label' => __( 'UM Forms', 'ultimate-member' ), + 'value' => $this->get_forms(), + ), + ), + ); + + foreach ( $this->get_forms() as $key => $form ) { + if ( strpos( $key, 'ID#' ) === 0 ) { + $key = substr( $key, 3 ); + } + + $info['ultimate-member-' . $key ] = array( + 'label' => ' - ' . $form . __( ' form settings', 'ultimate-member' ), + 'description' => __( 'This debug information for your Ultimate Member form.', 'ultimate-member' ), + 'fields' => array( + 'um-form-shortcode' => array( + 'label' => __( 'Shortcode', 'ultimate-member' ), + 'value' => '[ultimatemember form_id="' . $key . '"]', + ), + 'um-mode' => array( + 'label' => __( 'Type', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_mode', true ), + ), + ), + ); + + if ( 'register' == get_post_meta( $key, '_um_mode', true ) ) { + $info['ultimate-member-' . $key ]['fields'] = array_merge( + $info['ultimate-member-' . $key ]['fields'], + array( + 'um-register_role' => array( + 'label' => __( 'User registration role', 'ultimate-member' ), + 'value' => 0 == get_post_meta( $key, '_um_register_role', true ) ? $labels['default'] : get_post_meta( $key, '_um_register_role', true ), + ), + 'um-register_template' => array( + 'label' => __( 'Template', 'ultimate-member' ), + 'value' => 0 == get_post_meta( $key, '_um_register_template', true ) ? $labels['default'] : get_post_meta( $key, '_um_register_template', true ), + ), + 'um-register_primary_btn_word' => array( + 'label' => __( 'Primary Button Text', 'ultimate-member' ), + 'value' => ! get_post_meta( $key, '_um_register_primary_btn_word', true ) ? $labels['default'] : get_post_meta( $key, '_um_register_primary_btn_word', true ), + ), + 'um-register_use_gdpr' => array( + 'label' => __( 'Enable privacy policy agreement', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_register_use_gdpr', true ) ? $labels['yes'] : $labels['no'], + ), + ) + ); + + if ( 1 == get_post_meta( $key, '_um_register_use_gdpr', true ) ) { + $gdpr_content_id = get_post_meta( $key, '_um_register_use_gdpr_content_id', true ); + $info['ultimate-member-' . $key ]['fields'] = array_merge( + $info['ultimate-member-' . $key ]['fields'], + array( + 'um-register_use_gdpr_content_id' => array( + 'label' => __( 'Privacy policy content', 'ultimate-member' ), + 'value' => $gdpr_content_id ? get_the_title( $gdpr_content_id ) . '(' . $gdpr_content_id . ')' . get_the_permalink( $gdpr_content_id ) : '', + ), + 'um-register_use_gdpr_toggle_show' => array( + 'label' => __( 'Toggle Show text', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_register_use_gdpr_toggle_show', true ), + ), + 'um-register_use_gdpr_toggle_hide' => array( + 'label' => __( 'Toggle Hide text', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_register_use_gdpr_toggle_hide', true ), + ), + 'um-register_use_gdpr_agreement' => array( + 'label' => __( 'Checkbox agreement description', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_register_use_gdpr_agreement', true ), + ), + 'um-register_use_gdpr_error_text' => array( + 'label' => __( 'Error Text', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_register_use_gdpr_error_text', true ), + ), + ) + ); + } + + $info = apply_filters( 'um_debug_information_register_form', $info, $key ); + + $fields = get_post_meta( $key, '_um_custom_fields', true ); + if ( ! empty( $fields ) ) { + foreach ( $fields as $field_key => $field ) { + $field_info = $this->get_field_data( $info, $key, $field_key, $field ); + + $info['ultimate-member-' . $key ]['fields'] = array_merge( + $info['ultimate-member-' . $key ]['fields'], + $field_info + ); + } + } + } elseif ( 'login' == get_post_meta( $key, '_um_mode', true ) ){ + $login_redirect_options = array( + '0' => __( 'Default', 'ultimate-member' ), + 'redirect_profile' => __( 'Redirect to profile', 'ultimate-member' ), + 'redirect_url' => __( 'Redirect to URL', 'ultimate-member' ), + 'refresh' => __( 'Refresh active page', 'ultimate-member' ), + 'redirect_admin' => __( 'Redirect to WordPress Admin', 'ultimate-member' ), + ); + + $login_after_login = get_post_meta( $key, '_um_login_after_login', true ); + $login_after_login = '' === $login_after_login ? '0' : $login_after_login; + + $info['ultimate-member-' . $key ]['fields'] = array_merge( + $info['ultimate-member-' . $key ]['fields'], + array( + 'um-login_template' => array( + 'label' => __( 'Template', 'ultimate-member' ), + 'value' => 0 == get_post_meta( $key, '_um_login_template', true ) ? $labels['default'] : get_post_meta( $key, '_um_login_template', true ), + ), + 'um-login_primary_btn_word' => array( + 'label' => __( 'Primary Button Text', 'ultimate-member' ), + 'value' => ! get_post_meta( $key, '_um_login_primary_btn_word', true ) ? $labels['default'] : get_post_meta( $key, '_um_login_primary_btn_word', true ), + ), + 'um-login_forgot_pass_link' => array( + 'label' => __( 'Show Forgot Password Link?', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_login_forgot_pass_link', true ) ? $labels['yes'] : $labels['no'], + ), + 'um-login_show_rememberme' => array( + 'label' => __( 'Show "Remember Me"?', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_login_show_rememberme', true ) ? $labels['yes'] : $labels['no'], + ), + 'um-login_after_login' => array( + 'label' => __( 'Redirection after Login', 'ultimate-member' ), + 'value' => $login_redirect_options[ $login_after_login ], + ), + ) + ); + + if ( 'redirect_url' == get_post_meta( $key, '_um_login_after_login', true ) ) { + $info['ultimate-member-' . $key ]['fields'] = array_merge( + $info['ultimate-member-' . $key ]['fields'], + array( + 'um-login_redirect_url' => array( + 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_login_redirect_url', true ), + ), + ) + ); + } + + $info = apply_filters( 'um_debug_information_login_form', $info, $key ); + + $fields = get_post_meta( $key, '_um_custom_fields', true ); + if ( ! empty( $fields ) ) { + foreach ( $fields as $field_key => $field ) { + $field_info = $this->get_field_data( $info, $key, $field_key, $field ); + + $info['ultimate-member-' . $key ]['fields'] = array_merge( + $info['ultimate-member-' . $key ]['fields'], + $field_info + ); + } + } + } elseif ( 'profile' == get_post_meta( $key, '_um_mode', true ) ) { + $info['ultimate-member-' . $key ]['fields'] = array_merge( + $info['ultimate-member-' . $key ]['fields'], + array( + 'um-profile_role' => array( + 'label' => __( 'Make this profile form role-specific', 'ultimate-member' ), + 'value' => ! empty( get_post_meta( $key, '_um_profile_role', true ) ) ? get_post_meta( $key, '_um_profile_role', true ) : $labels['all'], + ), + 'um-profile_template' => array( + 'label' => __( 'Template', 'ultimate-member' ), + 'value' => 0 == get_post_meta( $key, '_um_profile_template', true ) ? $labels['default'] : get_post_meta( $key, '_um_profile_template', true ), + ), + 'um-profile_primary_btn_word' => array( + 'label' => __( 'Primary Button Text', 'ultimate-member' ), + 'value' => ! get_post_meta( $key, '_um_profile_primary_btn_word', true ) ? $labels['default'] : get_post_meta( $key, '_um_profile_primary_btn_word', true ), + ), + 'um-profile_cover_enabled' => array( + 'label' => __( 'Enable Cover Photos', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_profile_cover_enabled', true ) ? $labels['yes'] : $labels['no'], + ), + 'um-profile_disable_photo_upload' => array( + 'label' => __( 'Disable Profile Photo Upload', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_profile_disable_photo_upload', true ) ? $labels['yes'] : $labels['no'], + ), + ) + ); + + if ( 0 == get_post_meta( $key, '_um_profile_disable_photo_upload', true ) ) { + $info['ultimate-member-' . $key ]['fields'] = array_merge( + $info['ultimate-member-' . $key ]['fields'], + array( + 'um-profile_photo_required' => array( + 'label' => __( 'Make Profile Photo Required', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_profile_photo_required', true ) ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + $info['ultimate-member-' . $key ]['fields'] = array_merge( + $info['ultimate-member-' . $key ]['fields'], + array( + 'um-profile_show_name' => array( + 'label' => __( 'Show display name in profile header?', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_profile_show_name', true ) ? $labels['yes'] : $labels['no'], + ), + 'um-profile_show_social_links' => array( + 'label' => __( 'Show social links in profile header?', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_profile_show_social_links', true ) ? $labels['yes'] : $labels['no'], + ), + 'um-profile_show_bio' => array( + 'label' => __( 'Show user description in profile header?', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_profile_show_bio', true ) ? $labels['yes'] : $labels['no'], + ), + 'um-profile_menu' => array( + 'label' => __( 'Enable profile menu', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_profile_menu', true ) ? $labels['yes'] : $labels['no'], + ), + ) + ); + + if ( 1 == get_post_meta( $key, '_um_profile_menu', true ) ) { + $tab_options = array( + 0 => __( 'Anyone', 'ultimate-member' ), + 1 => __( 'Guests only', 'ultimate-member' ), + 2 => __( 'Members only', 'ultimate-member' ), + 3 => __( 'Only the owner', 'ultimate-member' ), + 4 => __( 'Only specific roles', 'ultimate-member' ), + 5 => __( 'Owner and specific roles', 'ultimate-member' ), + ); + + $tabs_for_count = 0; + $tabs = UM()->profile()->tabs(); + + foreach ( $tabs as $k => $tab ) { + $profile_tab = get_post_meta( $key, '_um_profile_tab_' . $k, true ); + $info['ultimate-member-' . $key ]['fields'] = array_merge( + $info['ultimate-member-' . $key ]['fields'], + array( + 'um-profile_tab_' . $k => array( + 'label' => $tab['name'] . __( ' Tab', 'ultimate-member' ), + 'value' => $profile_tab ? $labels['yes'] : $labels['no'], + ), + ) + ); + + if ( isset( $profile_tab ) && 1 == $profile_tab ) { + $tabs_for_count++; + $privacy = '_um_profile_tab_' . $k . '_privacy'; + $tab_privacy = get_post_meta( $key, $privacy, true ); + $info['ultimate-member-' . $key ]['fields'] = array_merge( + $info['ultimate-member-' . $key ]['fields'], + array( + 'um-profile_tab_' . $k . '_privacy' => array( + 'label' => __( 'Who can see ', 'ultimate-member' ) . $tab['name'] . __( ' Tab?', 'ultimate-member' ), + 'value' => $tab_options[ $tab_privacy ], + ), + ) + ); + + if ( 4 == $tab_privacy || 5 == $tab_privacy ) { + $allowed_tab = '_um_profile_tab_' . $k . '_roles'; + if ( ! empty( get_post_meta( $key, $allowed_tab, true ) ) ) { + $allowed_roles = implode(', ', get_post_meta( $key, $allowed_tab, true ) ); + } else { + $allowed_roles = 'All'; + } + $info['ultimate-member-' . $key ]['fields'] = array_merge( + $info['ultimate-member-' . $key ]['fields'], + array( + 'um-profile_tab_' . $k . '_privacy_roles' => array( + 'label' => __( 'Allowed roles for ', 'ultimate-member' ) . $tab['name'] . __( ' Tab', 'ultimate-member' ), + 'value' => $allowed_roles, + ), + ) + ); + } + } + } + + if ( $tabs_for_count > 0 ) { + $info['ultimate-member-' . $key ]['fields'] = array_merge( + $info['ultimate-member-' . $key ]['fields'], + array( + 'um-profile_menu_default_tab' => array( + 'label' => __( 'Profile menu default tab', 'ultimate-member' ), + 'value' => $tabs[ get_post_meta( $key, '_um_profile_menu_default_tab', true ) ]['name'], + ), + ) + ); + } + + $info['ultimate-member-' . $key ]['fields'] = array_merge( + $info['ultimate-member-' . $key ]['fields'], + array( + 'um-profile_menu_icons' => array( + 'label' => __( 'Enable menu icons in desktop view', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_profile_menu_icons', true ) ? $labels['yes'] : $labels['no'], + ), + ) + ); + + $info = apply_filters( 'um_debug_information_tab_form', $info, $key ); + } + + $fields = get_post_meta( $key, '_um_custom_fields', true ); + if ( ! empty( $fields ) ) { + foreach ( $fields as $field_key => $field ) { + $field_info = $this->get_field_data( $info, $key, $field_key, $field ); + + $info['ultimate-member-' . $key ]['fields'] = array_merge( + $info['ultimate-member-' . $key ]['fields'], + $field_info + ); + } + } + + $profile_metafields = get_post_meta( $key, '_um_profile_metafields', true ); + if ( ! empty( $profile_metafields ) ) { + foreach ( $profile_metafields as $k => $field ) { + $info['ultimate-member-' . $key ]['fields'] = array_merge( + $info['ultimate-member-' . $key ]['fields'], + array( + 'um-profile_metafields-' . $k => array( + 'label' => __( 'Field to show in user meta', 'ultimate-member' ), + 'value' => $field, + ), + ) + ); + } + } + } + } + } + return $info; } } From 2e8f79c37506081bf5b6aadbcb62ebcbfde0dc54 Mon Sep 17 00:00:00 2001 From: ashubawork Date: Thu, 28 Sep 2023 12:03:31 +0300 Subject: [PATCH 55/81] - active extensions --- .../admin/core/class-admin-site-health.php | 171 ++++++++++-------- 1 file changed, 92 insertions(+), 79 deletions(-) diff --git a/includes/admin/core/class-admin-site-health.php b/includes/admin/core/class-admin-site-health.php index b12af30f..06439a6c 100644 --- a/includes/admin/core/class-admin-site-health.php +++ b/includes/admin/core/class-admin-site-health.php @@ -39,22 +39,6 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { return get_option( "um_role_{$key}_meta", false ); } - - private function get_active_modules() { - $modules = UM()->modules()->get_list(); - $active_modules = array(); - if ( ! empty( $modules ) ) { - foreach ( $modules as $slug => $data ) { - if ( UM()->modules()->is_active( $slug ) ) { - $active_modules[ $slug ] = $data['title']; - } - } - } - - return apply_filters( 'um_debug_information_active_modules', $active_modules ); - } - - private function get_field_data( $info, $key, $field_key, $field ) { $row = isset( $field['metakey'] ) ? false : true; $title = $row ? __( 'Row: ', 'ultimate-member' ) . $field['id'] : __( 'Field: ', 'ultimate-member' ) . $field['metakey']; @@ -835,7 +819,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { $secure_settings = array( 'um-banned_capabilities' => array( 'label' => __( 'Banned Administrative Capabilities', 'ultimate-member' ), - 'value' => implode(', ', UM()->options()->get( 'banned_capabilities' ) ), + 'value' => implode( ', ', UM()->options()->get( 'banned_capabilities' ) ), ), 'um-lock_register_forms' => array( 'label' => __( 'Lock All Register Forms', 'ultimate-member' ), @@ -906,7 +890,6 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { $info['ultimate-member']['fields'] = array_merge( $info['ultimate-member']['fields'], $pages_settings, $user_settings, $account_settings, $uploads_settings, $restrict_settings, $access_other_settings, $email_settings, $appearance_settings, $license_settings, $misc_settings, $secure_settings ); - // User roles settings $roles_array = array(); foreach ( $this->get_roles() as $key => $role ) { @@ -919,11 +902,11 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { } $priority = ! empty( $rolemeta['_um_priority'] ) ? $rolemeta['_um_priority'] : 0; - $k = $priority . '-' . $role; - $roles_array[ $k ] = $role . '(' . $priority . ')'; + $k = $priority . '-' . $role; + $roles_array[ $k ] = $role . '(' . $priority . ')'; } - krsort($roles_array, SORT_NUMERIC); + krsort( $roles_array, SORT_NUMERIC ); $info['ultimate-member-user-roles'] = array( 'label' => __( 'User roles', 'ultimate-member' ), @@ -931,7 +914,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { 'fields' => array( 'um-roles' => array( 'label' => __( 'User Roles (priority)', 'ultimate-member' ), - 'value' => implode(', ', $roles_array ), + 'value' => implode( ', ', $roles_array ), ), 'um-register_role' => array( 'label' => __( 'Default New User Role', 'ultimate-member' ), @@ -1307,7 +1290,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { 'redirect_admin' => __( 'Redirect to WordPress Admin', 'ultimate-member' ), ); - if ( array_key_exists( '_um_after_login', $rolemeta ) && isset( $after_login_options[ $rolemeta['_um_after_login'] ] ) ) { + if ( array_key_exists( '_um_after_login', $rolemeta ) && isset( $after_login_options[ $rolemeta['_um_after_login'] ] ) ) { $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( $info[ 'ultimate-member-' . $key ]['fields'], array( @@ -1430,7 +1413,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { $key = substr( $key, 3 ); } - $info['ultimate-member-' . $key ] = array( + $info[ 'ultimate-member-' . $key ] = array( 'label' => ' - ' . $form . __( ' form settings', 'ultimate-member' ), 'description' => __( 'This debug information for your Ultimate Member form.', 'ultimate-member' ), 'fields' => array( @@ -1438,24 +1421,24 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { 'label' => __( 'Shortcode', 'ultimate-member' ), 'value' => '[ultimatemember form_id="' . $key . '"]', ), - 'um-mode' => array( + 'um-mode' => array( 'label' => __( 'Type', 'ultimate-member' ), 'value' => get_post_meta( $key, '_um_mode', true ), ), ), ); - if ( 'register' == get_post_meta( $key, '_um_mode', true ) ) { - $info['ultimate-member-' . $key ]['fields'] = array_merge( - $info['ultimate-member-' . $key ]['fields'], + if ( 'register' === get_post_meta( $key, '_um_mode', true ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], array( - 'um-register_role' => array( + 'um-register_role' => array( 'label' => __( 'User registration role', 'ultimate-member' ), - 'value' => 0 == get_post_meta( $key, '_um_register_role', true ) ? $labels['default'] : get_post_meta( $key, '_um_register_role', true ), + 'value' => 0 === absint( get_post_meta( $key, '_um_register_role', true ) ) ? $labels['default'] : get_post_meta( $key, '_um_register_role', true ), ), 'um-register_template' => array( 'label' => __( 'Template', 'ultimate-member' ), - 'value' => 0 == get_post_meta( $key, '_um_register_template', true ) ? $labels['default'] : get_post_meta( $key, '_um_register_template', true ), + 'value' => 0 === absint( get_post_meta( $key, '_um_register_template', true ) ) ? $labels['default'] : get_post_meta( $key, '_um_register_template', true ), ), 'um-register_primary_btn_word' => array( 'label' => __( 'Primary Button Text', 'ultimate-member' ), @@ -1468,10 +1451,11 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { ) ); - if ( 1 == get_post_meta( $key, '_um_register_use_gdpr', true ) ) { + if ( 1 === absint( get_post_meta( $key, '_um_register_use_gdpr', true ) ) ) { $gdpr_content_id = get_post_meta( $key, '_um_register_use_gdpr_content_id', true ); - $info['ultimate-member-' . $key ]['fields'] = array_merge( - $info['ultimate-member-' . $key ]['fields'], + + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], array( 'um-register_use_gdpr_content_id' => array( 'label' => __( 'Privacy policy content', 'ultimate-member' ), @@ -1504,13 +1488,13 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { foreach ( $fields as $field_key => $field ) { $field_info = $this->get_field_data( $info, $key, $field_key, $field ); - $info['ultimate-member-' . $key ]['fields'] = array_merge( - $info['ultimate-member-' . $key ]['fields'], + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], $field_info ); } } - } elseif ( 'login' == get_post_meta( $key, '_um_mode', true ) ){ + } elseif ( 'login' === get_post_meta( $key, '_um_mode', true ) ) { $login_redirect_options = array( '0' => __( 'Default', 'ultimate-member' ), 'redirect_profile' => __( 'Redirect to profile', 'ultimate-member' ), @@ -1522,12 +1506,12 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { $login_after_login = get_post_meta( $key, '_um_login_after_login', true ); $login_after_login = '' === $login_after_login ? '0' : $login_after_login; - $info['ultimate-member-' . $key ]['fields'] = array_merge( - $info['ultimate-member-' . $key ]['fields'], + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], array( - 'um-login_template' => array( + 'um-login_template' => array( 'label' => __( 'Template', 'ultimate-member' ), - 'value' => 0 == get_post_meta( $key, '_um_login_template', true ) ? $labels['default'] : get_post_meta( $key, '_um_login_template', true ), + 'value' => 0 === absint( get_post_meta( $key, '_um_login_template', true ) ) ? $labels['default'] : get_post_meta( $key, '_um_login_template', true ), ), 'um-login_primary_btn_word' => array( 'label' => __( 'Primary Button Text', 'ultimate-member' ), @@ -1541,16 +1525,16 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { 'label' => __( 'Show "Remember Me"?', 'ultimate-member' ), 'value' => get_post_meta( $key, '_um_login_show_rememberme', true ) ? $labels['yes'] : $labels['no'], ), - 'um-login_after_login' => array( + 'um-login_after_login' => array( 'label' => __( 'Redirection after Login', 'ultimate-member' ), 'value' => $login_redirect_options[ $login_after_login ], ), ) ); - if ( 'redirect_url' == get_post_meta( $key, '_um_login_after_login', true ) ) { - $info['ultimate-member-' . $key ]['fields'] = array_merge( - $info['ultimate-member-' . $key ]['fields'], + if ( 'redirect_url' === get_post_meta( $key, '_um_login_after_login', true ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], array( 'um-login_redirect_url' => array( 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), @@ -1567,23 +1551,23 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { foreach ( $fields as $field_key => $field ) { $field_info = $this->get_field_data( $info, $key, $field_key, $field ); - $info['ultimate-member-' . $key ]['fields'] = array_merge( - $info['ultimate-member-' . $key ]['fields'], + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], $field_info ); } } - } elseif ( 'profile' == get_post_meta( $key, '_um_mode', true ) ) { - $info['ultimate-member-' . $key ]['fields'] = array_merge( - $info['ultimate-member-' . $key ]['fields'], + } elseif ( 'profile' === get_post_meta( $key, '_um_mode', true ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], array( - 'um-profile_role' => array( + 'um-profile_role' => array( 'label' => __( 'Make this profile form role-specific', 'ultimate-member' ), 'value' => ! empty( get_post_meta( $key, '_um_profile_role', true ) ) ? get_post_meta( $key, '_um_profile_role', true ) : $labels['all'], ), - 'um-profile_template' => array( + 'um-profile_template' => array( 'label' => __( 'Template', 'ultimate-member' ), - 'value' => 0 == get_post_meta( $key, '_um_profile_template', true ) ? $labels['default'] : get_post_meta( $key, '_um_profile_template', true ), + 'value' => 0 === absint( get_post_meta( $key, '_um_profile_template', true ) ) ? $labels['default'] : get_post_meta( $key, '_um_profile_template', true ), ), 'um-profile_primary_btn_word' => array( 'label' => __( 'Primary Button Text', 'ultimate-member' ), @@ -1600,9 +1584,9 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { ) ); - if ( 0 == get_post_meta( $key, '_um_profile_disable_photo_upload', true ) ) { - $info['ultimate-member-' . $key ]['fields'] = array_merge( - $info['ultimate-member-' . $key ]['fields'], + if ( 0 === absint( get_post_meta( $key, '_um_profile_disable_photo_upload', true ) ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], array( 'um-profile_photo_required' => array( 'label' => __( 'Make Profile Photo Required', 'ultimate-member' ), @@ -1612,8 +1596,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { ); } - $info['ultimate-member-' . $key ]['fields'] = array_merge( - $info['ultimate-member-' . $key ]['fields'], + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], array( 'um-profile_show_name' => array( 'label' => __( 'Show display name in profile header?', 'ultimate-member' ), @@ -1623,18 +1607,18 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { 'label' => __( 'Show social links in profile header?', 'ultimate-member' ), 'value' => get_post_meta( $key, '_um_profile_show_social_links', true ) ? $labels['yes'] : $labels['no'], ), - 'um-profile_show_bio' => array( + 'um-profile_show_bio' => array( 'label' => __( 'Show user description in profile header?', 'ultimate-member' ), 'value' => get_post_meta( $key, '_um_profile_show_bio', true ) ? $labels['yes'] : $labels['no'], ), - 'um-profile_menu' => array( + 'um-profile_menu' => array( 'label' => __( 'Enable profile menu', 'ultimate-member' ), 'value' => get_post_meta( $key, '_um_profile_menu', true ) ? $labels['yes'] : $labels['no'], ), ) ); - if ( 1 == get_post_meta( $key, '_um_profile_menu', true ) ) { + if ( 1 === absint( get_post_meta( $key, '_um_profile_menu', true ) ) ) { $tab_options = array( 0 => __( 'Anyone', 'ultimate-member' ), 1 => __( 'Guests only', 'ultimate-member' ), @@ -1649,8 +1633,9 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { foreach ( $tabs as $k => $tab ) { $profile_tab = get_post_meta( $key, '_um_profile_tab_' . $k, true ); - $info['ultimate-member-' . $key ]['fields'] = array_merge( - $info['ultimate-member-' . $key ]['fields'], + + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], array( 'um-profile_tab_' . $k => array( 'label' => $tab['name'] . __( ' Tab', 'ultimate-member' ), @@ -1659,12 +1644,13 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { ) ); - if ( isset( $profile_tab ) && 1 == $profile_tab ) { + if ( isset( $profile_tab ) && 1 === absint( $profile_tab ) ) { $tabs_for_count++; - $privacy = '_um_profile_tab_' . $k . '_privacy'; + $privacy = '_um_profile_tab_' . $k . '_privacy'; $tab_privacy = get_post_meta( $key, $privacy, true ); - $info['ultimate-member-' . $key ]['fields'] = array_merge( - $info['ultimate-member-' . $key ]['fields'], + + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], array( 'um-profile_tab_' . $k . '_privacy' => array( 'label' => __( 'Who can see ', 'ultimate-member' ) . $tab['name'] . __( ' Tab?', 'ultimate-member' ), @@ -1673,15 +1659,15 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { ) ); - if ( 4 == $tab_privacy || 5 == $tab_privacy ) { + if ( 4 === absint( $tab_privacy ) || 5 === absint( $tab_privacy ) ) { $allowed_tab = '_um_profile_tab_' . $k . '_roles'; if ( ! empty( get_post_meta( $key, $allowed_tab, true ) ) ) { - $allowed_roles = implode(', ', get_post_meta( $key, $allowed_tab, true ) ); + $allowed_roles = implode( ', ', get_post_meta( $key, $allowed_tab, true ) ); } else { $allowed_roles = 'All'; } - $info['ultimate-member-' . $key ]['fields'] = array_merge( - $info['ultimate-member-' . $key ]['fields'], + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], array( 'um-profile_tab_' . $k . '_privacy_roles' => array( 'label' => __( 'Allowed roles for ', 'ultimate-member' ) . $tab['name'] . __( ' Tab', 'ultimate-member' ), @@ -1694,8 +1680,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { } if ( $tabs_for_count > 0 ) { - $info['ultimate-member-' . $key ]['fields'] = array_merge( - $info['ultimate-member-' . $key ]['fields'], + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], array( 'um-profile_menu_default_tab' => array( 'label' => __( 'Profile menu default tab', 'ultimate-member' ), @@ -1705,8 +1691,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { ); } - $info['ultimate-member-' . $key ]['fields'] = array_merge( - $info['ultimate-member-' . $key ]['fields'], + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], array( 'um-profile_menu_icons' => array( 'label' => __( 'Enable menu icons in desktop view', 'ultimate-member' ), @@ -1723,8 +1709,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { foreach ( $fields as $field_key => $field ) { $field_info = $this->get_field_data( $info, $key, $field_key, $field ); - $info['ultimate-member-' . $key ]['fields'] = array_merge( - $info['ultimate-member-' . $key ]['fields'], + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], $field_info ); } @@ -1733,8 +1719,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { $profile_metafields = get_post_meta( $key, '_um_profile_metafields', true ); if ( ! empty( $profile_metafields ) ) { foreach ( $profile_metafields as $k => $field ) { - $info['ultimate-member-' . $key ]['fields'] = array_merge( - $info['ultimate-member-' . $key ]['fields'], + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], array( 'um-profile_metafields-' . $k => array( 'label' => __( 'Field to show in user meta', 'ultimate-member' ), @@ -1748,6 +1734,33 @@ if ( ! class_exists( 'um\admin\core\Admin_Site_Health' ) ) { } } + $plugins = get_plugins(); + $active_plugins = get_option( 'active_plugins', array() ); + $active_exts = array(); + + foreach ( $plugins as $plugin_path => $plugin ) { + if ( strpos( $plugin_path, 'um-' ) === false ) { + + continue; + } + if ( ! in_array( $plugin_path, $active_plugins ) ) { + continue; + } + $name = str_replace('Ultimate Member -', '', $plugin['Name'] ); + $active_exts[] = $name . ': ' . $plugin['Version'] . "\n"; + } + + $info['ultimate-member-extensions'] = array( + 'label' => __( 'Ultimate Member Active Extensions', 'ultimate-member' ), + 'description' => __( 'This debug information about active extensions.', 'ultimate-member' ), + 'fields' => array( + 'um-extensions' => array( + 'label' => __( 'Active extensions', 'ultimate-member' ), + 'value' => $active_exts, + ), + ), + ); + return $info; } } From 97bfe6240705c17adf648a1f553e8ae8879d257e Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Thu, 28 Sep 2023 12:27:54 +0300 Subject: [PATCH 56/81] - reviewed #1313; --- includes/admin/class-admin.php | 13 + includes/admin/class-site-health.php | 1763 ++++++++++++++++ .../admin/core/class-admin-site-health.php | 1767 ----------------- includes/class-init.php | 14 - 4 files changed, 1776 insertions(+), 1781 deletions(-) create mode 100644 includes/admin/class-site-health.php delete mode 100644 includes/admin/core/class-admin-site-health.php diff --git a/includes/admin/class-admin.php b/includes/admin/class-admin.php index cdb76b36..ebe23f01 100644 --- a/includes/admin/class-admin.php +++ b/includes/admin/class-admin.php @@ -89,6 +89,7 @@ if ( ! class_exists( 'um\admin\Admin' ) ) { $this->enqueue(); $this->notices(); $this->secure(); + $this->site_health(); } function init_variables() { @@ -2077,5 +2078,17 @@ if ( ! class_exists( 'um\admin\Admin' ) ) { } return UM()->classes['um\admin\secure']; } + + /** + * @since 2.6.12 + * + * @return Site_Health + */ + public function site_health() { + if ( empty( UM()->classes['um\admin\site_health'] ) ) { + UM()->classes['um\admin\site_health'] = new Site_Health(); + } + return UM()->classes['um\admin\site_health']; + } } } diff --git a/includes/admin/class-site-health.php b/includes/admin/class-site-health.php new file mode 100644 index 00000000..37b44bc0 --- /dev/null +++ b/includes/admin/class-site-health.php @@ -0,0 +1,1763 @@ +roles()->get_roles(); + } + + private function get_forms() { + $forms_data = get_posts( array( 'post_type' => 'um_form', 'posts_per_page' => -1 ) ); + $forms = array(); + foreach ( $forms_data as $form ) { + $forms[ 'ID#' . $form->ID ] = $form->post_title; + } + return $forms; + } + + private function get_role_meta( $key ) { + return get_option( "um_role_{$key}_meta", false ); + } + + private function get_field_data( $info, $key, $field_key, $field ) { + $row = isset( $field['metakey'] ) ? false : true; + $title = $row ? __( 'Row: ', 'ultimate-member' ) . $field['id'] : __( 'Field: ', 'ultimate-member' ) . $field['metakey']; + $field_info = array( + 'um-field_'.$field_key => array( + 'label' => $title, + 'value' => $field, + ), + ); + + return $field_info; + } + + /** + * Add our data to Site Health information. + * + * @since 2.6.12 + * + * @param array $info The Site Health information. + * + * @return array The updated Site Health information. + */ + public function debug_information( $info ) { + $labels = array( + 'yes' => __( 'Yes', 'ultimate-member' ), + 'no' => __( 'No', 'ultimate-member' ), + 'all' => __( 'All', 'ultimate-member' ), + 'default' => __( 'Default', 'ultimate-member' ), + 'nopages' => __( 'No predefined page', 'ultimate-member' ), + ); + + $info['ultimate-member'] = array( + 'label' => __( 'Ultimate Member', 'ultimate-member' ), + 'description' => __( 'This debug information for your Ultimate Member installation can assist you in getting support.', 'ultimate-member' ), + 'fields' => array(), + ); + + // Pages settings + $pages = apply_filters( + 'um_debug_information_pages', + array( + 'User' => null !== UM()->options()->get( 'core_user' ) ? get_the_title( UM()->options()->get( 'core_user' ) ) . ' (ID#' . UM()->options()->get( 'core_user' ) . ') | ' . get_permalink( UM()->options()->get( 'core_user' ) ) : $labels['nopages'], + 'Login' => null !== UM()->options()->get( 'core_login' ) ? get_the_title( UM()->options()->get( 'core_login' ) ) . ' (ID#' . UM()->options()->get( 'core_login' ) . ') | ' . get_permalink( UM()->options()->get( 'core_login' ) ) : $labels['nopages'], + 'Register' => null !== UM()->options()->get( 'core_register' ) ? get_the_title( UM()->options()->get( 'core_register' ) ) . ' (ID#' . UM()->options()->get( 'core_register' ) . ') | ' . get_permalink( UM()->options()->get( 'core_register' ) ) : $labels['nopages'], + 'Members' => null !== UM()->options()->get( 'core_members' ) ? get_the_title( UM()->options()->get( 'core_members' ) ) . ' (ID#' . UM()->options()->get( 'core_members' ) . ') | ' . get_permalink( UM()->options()->get( 'core_members' ) ) : $labels['nopages'], + 'Logout' => null !== UM()->options()->get( 'core_logout' ) ? get_the_title( UM()->options()->get( 'core_logout' ) ) . ' (ID#' . UM()->options()->get( 'core_logout' ) . ') | ' . get_permalink( UM()->options()->get( 'core_logout' ) ) : $labels['nopages'], + 'Account' => null !== UM()->options()->get( 'core_account' ) ? get_the_title( UM()->options()->get( 'core_account' ) ) . ' (ID#' . UM()->options()->get( 'core_account' ) . ') | ' . get_permalink( UM()->options()->get( 'core_account' ) ) : $labels['nopages'], + 'Password reset' => null !== UM()->options()->get( 'core_password' ) ? get_the_title( UM()->options()->get( 'core_password-reset' ) ) . ' (ID#' . UM()->options()->get( 'core_password-reset' ) . ') | ' . get_permalink( UM()->options()->get( 'core_password-reset' ) ) : $labels['nopages'], + ) + ); + + $pages_settings = array( + 'um-pages' => array( + 'label' => __( 'Pages', 'ultimate-member' ), + 'value' => $pages, + ), + ); + + // User settings + $permalink_base = array( + 'user_login' => __( 'Username', 'ultimate-member' ), + 'name' => __( 'First and Last Name with \'.\'', 'ultimate-member' ), + 'name_dash' => __( 'First and Last Name with \'-\'', 'ultimate-member' ), + 'name_plus' => __( 'First and Last Name with \'+\'', 'ultimate-member' ), + 'user_id' => __( 'User ID', 'ultimate-member' ), + ); + $display_name = 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' ), + ); + + $user_settings = array( + 'um-permalink_base' => array( + 'label' => __( 'Profile Permalink Base', 'ultimate-member' ), + 'value' => isset( $permalink_base[ UM()->options()->get( 'permalink_base' ) ] ) ? $permalink_base[ UM()->options()->get( 'permalink_base' ) ] : $labels['no'], + ), + 'um-display_name' => array( + 'label' => __( 'User Display Name', 'ultimate-member' ), + 'value' => isset( $display_name[ UM()->options()->get( 'display_name' ) ] ) ? $display_name[ UM()->options()->get( 'display_name' ) ] : $labels['no'], + ), + 'um-author_redirect' => array( + 'label' => __( 'Automatically redirect author page to their profile?', 'ultimate-member' ), + 'value' => UM()->options()->get( 'author_redirect' ) ? $labels['yes'] : $labels['no'], + ), + 'um-members_page' => array( + 'label' => __( 'Enable Members Directory', 'ultimate-member' ), + 'value' => UM()->options()->get( 'members_page' ) ? $labels['yes'] : $labels['no'], + ), + 'um-toggle_password' => array( + 'label' => __( 'Show/hide password button', 'ultimate-member' ), + 'value' => UM()->options()->get( 'toggle_password' ) ? $labels['yes'] : $labels['no'], + ), + 'um-require_strongpass' => array( + 'label' => __( 'Require Strong Passwords', 'ultimate-member' ), + 'value' => UM()->options()->get( 'require_strongpass' ) ? $labels['yes'] : $labels['no'], + ), + 'um-password_min_chars' => array( + 'label' => __( 'Require Strong Passwords', 'ultimate-member' ), + 'value' => UM()->options()->get( 'password_min_chars' ), + ), + 'um-password_max_chars' => array( + 'label' => __( 'Require Strong Passwords', 'ultimate-member' ), + 'value' => UM()->options()->get( 'password_max_chars' ), + ), + 'um-profile_noindex' => array( + 'label' => __( 'Avoid indexing profile by search engines', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_noindex' ) ? $labels['yes'] : $labels['no'], + ), + 'um-activation_link_expiry_time' => array( + 'label' => __( 'Activation link lifetime', 'ultimate-member' ), + 'value' => UM()->options()->get( 'activation_link_expiry_time' ), + ), + 'um-use_gravatars' => array( + 'label' => __( 'Use Gravatars?', 'ultimate-member' ), + 'value' => UM()->options()->get( 'use_gravatars' ) ? $labels['yes'] : $labels['no'], + ), + ); + + if ( 1 === absint( UM()->options()->get( 'use_gravatars' ) ) ) { + $gravatar_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' ), + ); + + $user_settings['um-use_um_gravatar_default_builtin_image'] = array( + 'label' => __( 'Use Gravatar builtin image', 'ultimate-member' ), + 'value' => $gravatar_options[ UM()->options()->get( 'use_um_gravatar_default_builtin_image' ) ], + ); + if ( 'default' === UM()->options()->get( 'use_um_gravatar_default_builtin_image' ) ) { + $user_settings['um-use_um_gravatar_default_image'] = array( + 'label' => __( 'Use Default plugin avatar as Gravatar\'s Default avatar', 'ultimate-member' ), + 'value' => UM()->options()->get( 'use_um_gravatar_default_image' ) ? $labels['yes'] : $labels['no'], + ); + } + } + + // Account settings + $account_settings = array( + 'um-account_tab_password' => array( + 'label' => __( 'Password Account Tab', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_tab_password' ) ? $labels['yes'] : $labels['no'], + ), + 'um-account_tab_privacy' => array( + 'label' => __( 'Privacy Account Tab', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_tab_privacy' ) ? $labels['yes'] : $labels['no'], + ), + 'um-account_tab_notifications' => array( + 'label' => __( 'Notifications Account Tab', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_tab_notifications' ) ? $labels['yes'] : $labels['no'], + ), + 'um-account_tab_delete' => array( + 'label' => __( 'Delete Account Tab', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_tab_delete' ) ? $labels['yes'] : $labels['no'], + ), + 'um-delete_account_text' => array( + 'label' => __( 'Account Deletion Custom Text', 'ultimate-member' ), + 'value' => UM()->options()->get( 'delete_account_text' ), + ), + 'um-delete_account_no_pass_required_text' => array( + 'label' => __( 'Account Deletion without password Custom Text', 'ultimate-member' ), + 'value' => UM()->options()->get( 'delete_account_no_pass_required_text' ), + ), + 'um-account_name' => array( + 'label' => __( 'Add a First & Last Name fields', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_name' ) ? $labels['yes'] : $labels['no'], + ), + ); + + if ( 1 === absint( UM()->options()->get( 'account_name' ) ) ) { + $account_settings['um-account_name_disable'] = array( + 'label' => __( 'Disable First & Last name field editing', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_name_disable' ) ? $labels['yes'] : $labels['no'], + ); + $account_settings['um-account_name_require'] = array( + 'label' => __( 'Require First & Last Name', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_name_require' ) ? $labels['yes'] : $labels['no'], + ); + } + + $account_settings['um-account_hide_in_directory'] = array( + 'label' => __( 'Allow users to hide their profiles from directory', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_hide_in_directory' ) ? $labels['yes'] : $labels['no'], + ); + + if ( 1 === absint( UM()->options()->get( 'account_name' ) ) ) { + $account_settings['um-account_hide_in_directory_default'] = array( + 'label' => __( 'Hide profiles from directory by default', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_hide_in_directory_default' ), + ); + } + + // Uploads settings + $profile_sizes_list = ''; + $profile_sizes = UM()->options()->get( 'photo_thumb_sizes' ); + if ( ! empty( $profile_sizes ) ) { + foreach ( $profile_sizes as $size ) { + $profile_sizes_list = empty( $profile_sizes_list ) ? $size : $profile_sizes_list . ', ' . $size; + } + } + $cover_sizes_list = ''; + $cover_sizes = UM()->options()->get( 'cover_thumb_sizes' ); + if ( ! empty( $cover_sizes ) ) { + foreach ( $cover_sizes as $size ) { + $cover_sizes_list = empty( $cover_sizes_list ) ? $size : $cover_sizes_list . ', ' . $size; + } + } + $uploads_settings = array( + 'um-profile_photo_max_size' => array( + 'label' => __( 'Profile Photo Maximum File Size (bytes)', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_photo_max_size' ), + ), + 'um-cover_photo_max_size' => array( + 'label' => __( 'Cover Photo Maximum File Size (bytes)', 'ultimate-member' ), + 'value' => UM()->options()->get( 'cover_photo_max_size' ), + ), + 'um-photo_thumb_sizes' => array( + 'label' => __( 'Profile Photo Thumbnail Sizes (px)', 'ultimate-member' ), + 'value' => $profile_sizes_list, + ), + 'um-cover_thumb_sizes' => array( + 'label' => __( 'Cover Photo Thumbnail Sizes (px)', 'ultimate-member' ), + 'value' => $cover_sizes_list, + ), + 'um-image_orientation_by_exif' => array( + 'label' => __( 'Change image orientation', 'ultimate-member' ), + 'value' => UM()->options()->get( 'image_orientation_by_exif' ) ? $labels['yes'] : $labels['no'], + ), + 'um-image_compression' => array( + 'label' => __( 'Image Quality', 'ultimate-member' ), + 'value' => UM()->options()->get( 'image_compression' ), + ), + 'um-image_max_width' => array( + 'label' => __( 'Image Upload Maximum Width (px)', 'ultimate-member' ), + 'value' => UM()->options()->get( 'image_max_width' ), + ), + 'um-cover_min_width' => array( + 'label' => __( 'Cover Photo Minimum Width (px)', 'ultimate-member' ), + 'value' => UM()->options()->get( 'cover_min_width' ), + ), + ); + + // Content Restriction settings + $restricted_posts = UM()->options()->get( 'restricted_access_post_metabox' ); + $restricted_posts_list = ''; + if ( ! empty( $restricted_posts ) ) { + foreach ( $restricted_posts as $key => $posts ) { + $restricted_posts_list = empty ( $restricted_posts_list ) ? $key : $restricted_posts_list . ', ' . $key; + } + } + $restricted_taxonomy = UM()->options()->get( 'restricted_access_taxonomy_metabox' ); + $restricted_taxonomy_list = ''; + if ( ! empty( $restricted_taxonomy ) ) { + foreach ( $restricted_taxonomy as $key => $posts ) { + $restricted_taxonomy_list = empty ( $restricted_taxonomy_list ) ? $key : $restricted_taxonomy_list . ', ' . $key; + } + } + + $restrict_settings = array( + 'um-accessible' => array( + 'label' => __( 'Global Site Access', 'ultimate-member' ), + 'value' => 0 === UM()->options()->get( 'accessible' ) ? __( 'Site accessible to Everyone', 'ultimate-member' ) : __( 'Site accessible to Logged In Users', 'ultimate-member' ), + ), + ); + + if ( 2 === absint( UM()->options()->get( 'accessible' ) ) ) { + $exclude_uris = UM()->options()->get( 'access_exclude_uris' ); + $exclude_uris_list = ''; + if ( ! empty( $exclude_uris ) ) { + foreach ( $exclude_uris as $key => $url ) { + $exclude_uris_list = empty( $exclude_uris_list ) ? $url : $exclude_uris_list . ', ' . $url; + } + } + $restrict_settings['um-access_redirect'] = array( + 'label' => __( 'Custom Redirect URL', 'ultimate-member' ), + 'value' => UM()->options()->get( 'access_redirect' ), + ); + $restrict_settings['um-access_exclude_uris'] = array( + 'label' => __( 'Account Deletion Text', 'ultimate-member' ), + 'value' => $exclude_uris_list, + ); + $restrict_settings['um-home_page_accessible'] = array( + 'label' => __( 'Allow Homepage to be accessible', 'ultimate-member' ), + 'value' => UM()->options()->get( 'home_page_accessible' ) ? $labels['yes'] : $labels['no'], + ); + $restrict_settings['um-category_page_accessible'] = array( + 'label' => __( 'Allow Category pages to be accessible', 'ultimate-member' ), + 'value' => UM()->options()->get( 'category_page_accessible' ) ? $labels['yes'] : $labels['no'], + ); + } + + $restrict_settings['um-restricted_post_title_replace'] = array( + 'label' => __( 'Restricted Content Titles', 'ultimate-member' ), + 'value' => UM()->options()->get( 'restricted_post_title_replace' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'restricted_post_title_replace' ) ) ) { + $restrict_settings['um-restricted_access_post_title'] = array( + 'label' => __( 'Restricted Content Title Text', 'ultimate-member' ), + 'value' => stripslashes( UM()->options()->get( 'restricted_access_post_title' ) ), + ); + } + + $restrict_settings['um-restricted_access_message'] = array( + 'label' => __( 'Restricted Access Message', 'ultimate-member' ), + 'value' => stripslashes( UM()->options()->get( 'restricted_access_message' ) ), + ); + $restrict_settings['um-restricted_blocks'] = array( + 'label' => __( 'Enable the "Content Restriction" settings for the Gutenberg Blocks', 'ultimate-member' ), + 'value' => UM()->options()->get( 'restricted_blocks' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'restricted_blocks' ) ) ) { + $restrict_settings['um-restricted_block_message'] = array( + 'label' => __( 'Restricted Access Block Message', 'ultimate-member' ), + 'value' => stripslashes( UM()->options()->get( 'restricted_block_message' ) ), + ); + } + $restrict_settings['um-restricted_access_post_metabox'] = array( + 'label' => __( 'Enable the "Content Restriction" settings for post types', 'ultimate-member' ), + 'value' => $restricted_posts_list, + ); + $restrict_settings['um-restricted_access_taxonomy_metabox'] = array( + 'label' => __( 'Enable the "Content Restriction" settings for taxonomies', 'ultimate-member' ), + 'value' => $restricted_taxonomy_list, + ); + + // Access other settings + $blocked_emails = str_replace( '
', ', ', nl2br( UM()->options()->get( 'blocked_emails' ) ) ); + $blocked_words = str_replace( '
', ', ', nl2br( UM()->options()->get( 'blocked_words' ) ) ); + $allowed_callbacks = str_replace( '
', ', ', nl2br( UM()->options()->get( 'allowed_choice_callbacks' ) ) ); + + $access_other_settings = array( + 'um-enable_reset_password_limit' => array( + 'label' => __( 'Enable the Reset Password Limit?', 'ultimate-member' ), + 'value' => UM()->options()->get( 'enable_reset_password_limit' ) ? $labels['yes'] : $labels['no'], + ), + ); + if ( 1 === absint( UM()->options()->get( 'enable_reset_password_limit' ) ) ) { + $access_other_settings['um-reset_password_limit_number'] = array( + 'label' => __( 'Reset Password Limit ', 'ultimate-member' ), + 'value' => UM()->options()->get( 'reset_password_limit_number' ), + ); + } + $access_other_settings['um-change_password_request_limit'] = array( + 'label' => __( 'Change Password request limit ', 'ultimate-member' ), + 'value' => UM()->options()->get( 'change_password_request_limit' ), + ); + $access_other_settings['um-blocked_emails'] = array( + 'label' => __( 'Blocked Email Addresses', 'ultimate-member' ), + 'value' => stripslashes( $blocked_emails ), + ); + $access_other_settings['um-blocked_words'] = array( + 'label' => __( 'Banned Usernames', 'ultimate-member' ), + 'value' => stripslashes( $blocked_words ), + ); + $access_other_settings['um-allowed_choice_callbacks'] = array( + 'label' => __( 'Allowed Choice Callbacks', 'ultimate-member' ), + 'value' => stripslashes( $allowed_callbacks ), + ); + $access_other_settings['um-allow_url_redirect_confirm'] = array( + 'label' => __( 'Allow external link redirect confirm ', 'ultimate-member' ), + 'value' => UM()->options()->get( 'allow_url_redirect_confirm' ) ? $labels['yes'] : $labels['no'], + ); + + // Email settings + $email_settings = array( + 'um-admin_email' => array( + 'label' => __( 'Admin E-mail Address', 'ultimate-member' ), + 'value' => UM()->options()->get( 'admin_email' ), + ), + 'um-mail_from' => array( + 'label' => __( 'Mail appears from', 'ultimate-member' ), + 'value' => UM()->options()->get( 'mail_from' ), + ), + 'um-mail_from_addr' => array( + 'label' => __( 'Mail appears from address', 'ultimate-member' ), + 'value' => UM()->options()->get( 'mail_from_addr' ), + ), + 'um-email_html' => array( + 'label' => __( 'Use HTML for E-mails?', 'ultimate-member' ), + 'value' => UM()->options()->get( 'email_html' ) ? $labels['yes'] : $labels['no'], + ), + ); + + $emails = UM()->config()->email_notifications; + foreach ( $emails as $key => $email ) { + if ( 1 === absint( UM()->options()->get( $key . '_on' ) ) ) { + $email_settings[ 'um-' . $key ] = array( + 'label' => $email['title'] . __( ' Subject', 'ultimate-member' ), + 'value' => UM()->options()->get( $key . '_sub' ), + ); + + $email_settings[ 'um-theme_' . $key ] = array( + 'label' => __( 'Template ', 'ultimate-member' ) . $email['title'] . __( ' in theme?', 'ultimate-member' ), + 'value' => '' !== locate_template( array( 'ultimate-member/emails/' . $key . '.php' ) ) ? $labels['yes'] : $labels['no'], + ); + } + } + + // Appearance settings + $profile_icons_options = array( + 'field' => __( 'Show inside text field', 'ultimate-member' ), + 'label' => __( 'Show with label', 'ultimate-member' ), + 'off' => __( 'Turn off', 'ultimate-member' ), + ); + $profile_header_menu_options = array( + 'bc' => __( 'Bottom of Icon', 'ultimate-member' ), + 'lc' => __( 'Left of Icon (right for RTL)', 'ultimate-member' ), + ); + $register_align_options = array( + 'center' => __( 'Centered', 'ultimate-member' ), + 'left' => __( 'Left aligned', 'ultimate-member' ), + 'right' => __( 'Right aligned', 'ultimate-member' ), + ); + + $appearance_settings = array( + 'um-profile_template' => array( + 'label' => __( 'Profile Default Template', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_template' ), + ), + 'um-profile_max_width' => array( + 'label' => __( 'Profile Maximum Width', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_max_width' ), + ), + 'um-profile_area_max_width' => array( + 'label' => __( 'Profile Area Maximum Width', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_area_max_width' ), + ), + 'um-profile_icons' => array( + 'label' => __( 'Profile Field Icons', 'ultimate-member' ), + 'value' => $profile_icons_options[ UM()->options()->get( 'profile_icons' ) ], + ), + 'um-profile_primary_btn_word' => array( + 'label' => __( 'Profile Primary Button Text', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_primary_btn_word' ), + ), + 'um-profile_secondary_btn' => array( + 'label' => __( 'Profile Secondary Button', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_secondary_btn' ) ? $labels['yes'] : $labels['no'], + ), + ); + if ( 1 === absint( UM()->options()->get( 'profile_secondary_btn' ) ) ) { + $appearance_settings['um-profile_secondary_btn_word'] = array( + 'label' => __( 'Profile Secondary Button Text ', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_secondary_btn_word' ), + ); + } + $appearance_settings['um-default_avatar'] = array( + 'label' => __( 'Default Profile Photo', 'ultimate-member' ), + 'value' => UM()->options()->get( 'default_avatar' )['url'], + ); + $appearance_settings['um-default_cover'] = array( + 'label' => __( 'Default Cover Photo', 'ultimate-member' ), + 'value' => UM()->options()->get( 'default_cover' )['url'], + ); + $appearance_settings['um-disable_profile_photo_upload'] = array( + 'label' => __( 'Disable Profile Photo Upload', 'ultimate-member' ), + 'value' => UM()->options()->get( 'disable_profile_photo_upload' ) ? $labels['yes'] : $labels['no'], + ); + $appearance_settings['um-profile_photosize'] = array( + 'label' => __( 'Profile Photo Size', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_photosize' ) . 'x' . UM()->options()->get( 'profile_photosize' ) . 'px', + ); + $appearance_settings['um-profile_cover_enabled'] = array( + 'label' => __( 'Profile Cover Photos', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_cover_enabled' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'profile_cover_enabled' ) ) ) { + $appearance_settings['um-profile_coversize'] = array( + 'label' => __( 'Profile Cover Size', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_coversize' ) . 'px', + ); + $appearance_settings['um-profile_cover_ratio'] = array( + 'label' => __( 'Profile Cover Ratio', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_cover_ratio' ), + ); + } + $appearance_settings['um-profile_show_metaicon'] = array( + 'label' => __( 'Profile Header Meta Text Icon', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_show_metaicon' ) ? $labels['yes'] : $labels['no'], + ); + $appearance_settings['um-profile_show_name'] = array( + 'label' => __( 'Show display name in profile header', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_show_name' ) ? $labels['yes'] : $labels['no'], + ); + $appearance_settings['um-profile_show_social_links'] = array( + 'label' => __( 'Show social links in profile header', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_show_social_links' ) ? $labels['yes'] : $labels['no'], + ); + $appearance_settings['um-profile_show_bio'] = array( + 'label' => __( 'Show user description in header', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_show_bio' ) ? $labels['yes'] : $labels['no'], + ); + $appearance_settings['um-profile_show_html_bio'] = array( + 'label' => __( 'Enable HTML support for user description', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_show_html_bio' ) ? $labels['yes'] : $labels['no'], + ); + $appearance_settings['um-profile_bio_maxchars'] = array( + 'label' => __( 'User description maximum chars', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_bio_maxchars' ), + ); + $appearance_settings['um-profile_header_menu'] = array( + 'label' => __( 'Profile Header Menu Position', 'ultimate-member' ), + 'value' => $profile_header_menu_options[ UM()->options()->get( 'profile_header_menu' ) ], + ); + $appearance_settings['um-profile_empty_text'] = array( + 'label' => __( 'Show a custom message if profile is empty', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_empty_text' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'profile_empty_text' ) ) ) { + $appearance_settings['um-profile_empty_text_emo'] = array( + 'label' => __( 'Show the emoticon', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_empty_text_emo' ), + ); + } + $appearance_settings['um-profile_menu'] = array( + 'label' => __( 'Enable profile menu', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_menu' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'profile_menu' ) ) ) { + /** + * Filters a privacy list extend. + * + * @since 2.6.13 + * @hook um_profile_tabs_privacy_list + * + * @param {array} $privacy_option Add options for profile tabs' privacy. + * + * @return {array} Options for profile tabs' privacy. + * + * @example Add options for profile tabs' privacy. + * function um_profile_menu_link_attrs( $privacy_option ) { + * // your code here + * return $privacy_option; + * } + * add_filter( 'um_profile_tabs_privacy_list', 'um_profile_tabs_privacy_list', 10, 1 ); + */ + $privacy_option = apply_filters( + 'um_profile_tabs_privacy_list', + array( + 0 => __( 'Anyone', 'ultimate-member' ), + 1 => __( 'Guests only', 'ultimate-member' ), + 2 => __( 'Members only', 'ultimate-member' ), + 3 => __( 'Only the owner', 'ultimate-member' ), + 4 => __( 'Only specific roles', 'ultimate-member' ), + 5 => __( 'Owner and specific roles', 'ultimate-member' ), + ) + ); + + $appearance_settings['um-profile_tab_main'] = array( + 'label' => __( 'About Tab', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_tab_main' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'profile_tab_main' ) ) ) { + $appearance_settings['um-profile_tab_main_privacy'] = array( + 'label' => __( 'Who can see About Tab?', 'ultimate-member' ), + 'value' => $privacy_option[ UM()->options()->get( 'profile_tab_main_privacy' ) ], + ); + } + $appearance_settings['um-profile_tab_posts'] = array( + 'label' => __( 'Posts Tab', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_tab_posts' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'profile_tab_posts' ) ) ) { + $appearance_settings['um-profile_tab_posts_privacy'] = array( + 'label' => __( 'Who can see Posts Tab?', 'ultimate-member' ), + 'value' => $privacy_option[ UM()->options()->get( 'profile_tab_posts_privacy' ) ], + ); + } + $appearance_settings['um-profile_tab_comments'] = array( + 'label' => __( 'Comments Tab', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_tab_comments' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'profile_tab_comments' ) ) ) { + $appearance_settings['um-profile_tab_comments_privacy'] = array( + 'label' => __( 'Who can see Comments Tab?', 'ultimate-member' ), + 'value' => $privacy_option[ UM()->options()->get( 'profile_tab_comments_privacy' ) ], + ); + } + /** + * Filters appearance settings for Site Health extend. + * + * @since 2.6.13 + * @hook um_profile_tabs_site_health + * + * @param {array} $appearance_settings Appearance settings for Site Health. + * + * @return {array} Appearance settings for Site Health. + * + * @example Add options for appearance settings for Site Health. + * function um_profile_tabs_site_health( $appearance_settings ) { + * // your code here + * return $appearance_settings; + * } + * add_filter( 'um_profile_tabs_site_health', 'um_profile_tabs_site_health', 10, 1 ); + */ + $appearance_settings = apply_filters( 'um_profile_tabs_site_health', $appearance_settings ); + + /** + * Filters extend user profile tabs + * + * @since 2.6.13 + * @hook um_profile_tabs + * + * @param {array} $tabs tabs list. + * + * @return {array} tabs list. + * + * @example Add options for profile tabs' privacy. + * function um_profile_tabs( $tabs ) { + * // your code here + * return $tabs; + * } + * add_filter( 'um_profile_tabs', 'um_profile_tabs', 10, 1 ); + */ + $tabs_options = apply_filters( + 'um_profile_tabs', + array( + 'main' => array( + 'name' => __( 'About', 'ultimate-member' ), + 'icon' => 'um-faicon-user', + ), + 'posts' => array( + 'name' => __( 'Posts', 'ultimate-member' ), + 'icon' => 'um-faicon-pencil', + ), + 'comments' => array( + 'name' => __( 'Comments', 'ultimate-member' ), + 'icon' => 'um-faicon-comment', + ), + ) + ); + + $appearance_settings['um-profile_menu_default_tab'] = array( + 'label' => __( 'Profile menu default tab', 'ultimate-member' ), + 'value' => $tabs_options[ UM()->options()->get( 'profile_menu_default_tab' ) ], + ); + $appearance_settings['um-profile_menu_icons'] = array( + 'label' => __( 'Enable menu icons in desktop view', 'ultimate-member' ), + 'value' => UM()->options()->get( 'profile_menu_icons' ) ? $labels['yes'] : $labels['no'], + ); + } + + $appearance_settings['um-register_template'] = array( + 'label' => __( 'Registration Default Template', 'ultimate-member' ), + 'value' => UM()->options()->get( 'register_template' ), + ); + $appearance_settings['um-register_max_width'] = array( + 'label' => __( 'Registration Maximum Width', 'ultimate-member' ), + 'value' => UM()->options()->get( 'register_max_width' ), + ); + $appearance_settings['um-register_align'] = array( + 'label' => __( 'Registration Shortcode Alignment', 'ultimate-member' ), + 'value' => $register_align_options[ UM()->options()->get( 'register_align' ) ], + ); + $appearance_settings['um-register_icons'] = array( + 'label' => __( 'Registration Field Icons', 'ultimate-member' ), + 'value' => $profile_icons_options[ UM()->options()->get( 'register_icons' ) ], + ); + $appearance_settings['um-register_primary_btn_word'] = array( + 'label' => __( 'Registration Primary Button Text ', 'ultimate-member' ), + 'value' => UM()->options()->get( 'register_primary_btn_word' ), + ); + $appearance_settings['um-register_secondary_btn'] = array( + 'label' => __( 'Registration Secondary Button', 'ultimate-member' ), + 'value' => UM()->options()->get( 'register_secondary_btn' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'register_secondary_btn' ) ) ) { + $appearance_settings['um-register_secondary_btn_word'] = array( + 'label' => __( 'Registration Secondary Button Text', 'ultimate-member' ), + 'value' => UM()->options()->get( 'register_secondary_btn_word' ), + ); + $appearance_settings['um-register_secondary_btn_url'] = array( + 'label' => __( 'Registration Secondary Button URL', 'ultimate-member' ), + 'value' => UM()->options()->get( 'register_secondary_btn_url' ), + ); + } + $appearance_settings['um-register_role'] = array( + 'label' => __( 'Registration Default Role', 'ultimate-member' ), + 'value' => ! empty( UM()->options()->get( 'register_role' ) ) ? UM()->options()->get( 'register_role' ) : __( 'Default', 'ultimate-member' ), + ); + + $appearance_settings['um-login_template'] = array( + 'label' => __( 'Login Default Template', 'ultimate-member' ), + 'value' => UM()->options()->get( 'login_template' ), + ); + $appearance_settings['um-login_max_width'] = array( + 'label' => __( 'Login Maximum Width', 'ultimate-member' ), + 'value' => UM()->options()->get( 'login_max_width' ), + ); + $appearance_settings['um-login_align'] = array( + 'label' => __( 'Login Shortcode Alignment', 'ultimate-member' ), + 'value' => $register_align_options[ UM()->options()->get( 'login_align' ) ], + ); + $appearance_settings['um-login_icons'] = array( + 'label' => __( 'Login Field Icons', 'ultimate-member' ), + 'value' => $profile_icons_options[ UM()->options()->get( 'login_icons' ) ], + ); + $appearance_settings['um-login_primary_btn_word'] = array( + 'label' => __( 'Login Primary Button Text', 'ultimate-member' ), + 'value' => UM()->options()->get( 'login_primary_btn_word' ), + ); + $appearance_settings['um-login_secondary_btn'] = array( + 'label' => __( 'Login Secondary Button', 'ultimate-member' ), + 'value' => UM()->options()->get( 'login_secondary_btn' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'login_secondary_btn' ) ) ) { + $appearance_settings['um-login_secondary_btn_word'] = array( + 'label' => __( 'Login Secondary Button Text', 'ultimate-member' ), + 'value' => UM()->options()->get( 'login_secondary_btn_word' ), + ); + $appearance_settings['um-login_secondary_btn_url'] = array( + 'label' => __( 'Login Secondary Button URL', 'ultimate-member' ), + 'value' => UM()->options()->get( 'login_secondary_btn_url' ), + ); + } + $appearance_settings['um-login_forgot_pass_link'] = array( + 'label' => __( 'Login Forgot Password Link', 'ultimate-member' ), + 'value' => UM()->options()->get( 'login_forgot_pass_link' ) ? $labels['yes'] : $labels['no'], + ); + $appearance_settings['um-login_show_rememberme'] = array( + 'label' => __( 'Show "Remember Me"', 'ultimate-member' ), + 'value' => UM()->options()->get( 'login_show_rememberme' ) ? $labels['yes'] : $labels['no'], + ); + + // Misc settings + $misc_settings = array( + 'um-form_asterisk' => array( + 'label' => __( 'Show an asterisk for required fields', 'ultimate-member' ), + 'value' => UM()->options()->get( 'form_asterisk' ) ? $labels['yes'] : $labels['no'], + ), + 'um-profile_title' => array( + 'label' => __( 'User Profile Title', 'ultimate-member' ), + 'value' => stripslashes( UM()->options()->get( 'profile_title' ) ), + ), + 'um-profile_desc' => array( + 'label' => __( 'User Profile Dynamic Meta Description', 'ultimate-member' ), + 'value' => stripslashes( UM()->options()->get( 'profile_desc' ) ), + ), + 'um-um_profile_object_cache_stop' => array( + 'label' => __( 'Disable Cache User Profile', 'ultimate-member' ), + 'value' => UM()->options()->get( 'um_profile_object_cache_stop' ) ? $labels['yes'] : $labels['no'], + ), + 'um-enable_blocks' => array( + 'label' => __( 'Enable Gutenberg Blocks', 'ultimate-member' ), + 'value' => UM()->options()->get( 'enable_blocks' ) ? $labels['yes'] : $labels['no'], + ), + 'um-rest_api_version' => array( + 'label' => __( 'REST API version', 'ultimate-member' ), + 'value' => UM()->options()->get( 'rest_api_version' ), + ), + 'um-disable_restriction_pre_queries' => array( + 'label' => __( 'Disable pre-queries for restriction content logic (advanced)', 'ultimate-member' ), + 'value' => UM()->options()->get( 'disable_restriction_pre_queries' ) ? $labels['yes'] : $labels['no'], + ), + 'um-member_directory_own_table' => array( + 'label' => __( 'Enable custom table for usermeta', 'ultimate-member' ), + 'value' => UM()->options()->get( 'member_directory_own_table' ) ? $labels['yes'] : $labels['no'], + ), + 'um-uninstall_on_delete' => array( + 'label' => __( 'Remove Data on Uninstall?', 'ultimate-member' ), + 'value' => UM()->options()->get( 'uninstall_on_delete' ) ? $labels['yes'] : $labels['no'], + ), + ); + + // Secure settings + $secure_settings = array( + 'um-banned_capabilities' => array( + 'label' => __( 'Banned Administrative Capabilities', 'ultimate-member' ), + 'value' => implode( ', ', UM()->options()->get( 'banned_capabilities' ) ), + ), + 'um-lock_register_forms' => array( + 'label' => __( 'Lock All Register Forms', 'ultimate-member' ), + 'value' => stripslashes( UM()->options()->get( 'lock_register_forms' ) ) ? $labels['yes'] : $labels['no'], + ), + 'um-display_login_form_notice' => array( + 'label' => __( 'Display Login form notice to reset passwords', 'ultimate-member' ), + 'value' => UM()->options()->get( 'display_login_form_notice' ) ? $labels['yes'] : $labels['no'], + ), + 'um-secure_ban_admins_accounts' => array( + 'label' => __( 'Enable ban for administrative capabilities', 'ultimate-member' ), + 'value' => UM()->options()->get( 'secure_ban_admins_accounts' ) ? $labels['yes'] : $labels['no'], + ), + ); + if ( 1 === absint( UM()->options()->get( 'secure_ban_admins_accounts' ) ) ) { + $secure_settings['um-secure_notify_admins_banned_accounts'] = array( + 'label' => __( 'Notify Administrators', 'ultimate-member' ), + 'value' => UM()->options()->get( 'secure_notify_admins_banned_accounts' ) ? $labels['yes'] : $labels['no'], + ); + if ( 1 === absint( UM()->options()->get( 'secure_notify_admins_banned_accounts' ) ) ) { + $secure_notify_admins_banned_accounts_options = array( + 'instant' => __( 'Send Immediately', 'ultimate-member' ), + 'hourly' => __( 'Hourly', 'ultimate-member' ), + 'daily' => __( 'Daily', 'ultimate-member' ), + ); + + $secure_settings['um-secure_notify_admins_banned_accounts__interval'] = array( + 'label' => __( 'Notification Schedule', 'ultimate-member' ), + 'value' => $secure_notify_admins_banned_accounts_options[ UM()->options()->get( 'secure_notify_admins_banned_accounts__interval' ) ], + ); + } + } + + $secure_allowed_redirect_hosts = UM()->options()->get( 'secure_allowed_redirect_hosts' ); + $secure_allowed_redirect_hosts = explode( PHP_EOL, $secure_allowed_redirect_hosts ); + + $secure_settings['um-secure_allowed_redirect_hosts'] = array( + 'label' => __( 'Allowed hosts for safe redirect', 'ultimate-member' ), + 'value' => $secure_allowed_redirect_hosts, + ); + + // Licenses settings + $license_settings = array( + 'um-licenses' => array( + 'label' => __( 'Licenses', 'ultimate-member' ), + 'value' => array(), + ), + ); + + /** + * Filters licenses settings for Site Health. + * + * @since 2.6.13 + * @hook um_licenses_site_health + * + * @param {array} $license_settings licenses settings for Site Health. + * + * @return {array} licenses settings for Site Health. + * + * @example Extend licenses settings for Site Health. + * function um_licenses_site_health( $license_settings ) { + * // your code here + * return $license_settings; + * } + * add_filter( 'um_licenses_site_health', 'um_licenses_site_health', 10, 1 ); + */ + $license_settings = apply_filters( 'um_licenses_site_health', $license_settings ); + + $info['ultimate-member']['fields'] = array_merge( $info['ultimate-member']['fields'], $pages_settings, $user_settings, $account_settings, $uploads_settings, $restrict_settings, $access_other_settings, $email_settings, $appearance_settings, $license_settings, $misc_settings, $secure_settings ); + + // User roles settings + $roles_array = array(); + foreach ( $this->get_roles() as $key => $role ) { + if ( strpos( $key, 'um_' ) === 0 ) { + $key = substr( $key, 3 ); + } + $rolemeta = $this->get_role_meta( $key ); + if ( false === $rolemeta ) { + continue; + } + $priority = ! empty( $rolemeta['_um_priority'] ) ? $rolemeta['_um_priority'] : 0; + + $k = $priority . '-' . $role; + $roles_array[ $k ] = $role . '(' . $priority . ')'; + } + + krsort( $roles_array, SORT_NUMERIC ); + + $info['ultimate-member-user-roles'] = array( + 'label' => __( 'User roles', 'ultimate-member' ), + 'description' => __( 'This debug information about user roles.', 'ultimate-member' ), + 'fields' => array( + 'um-roles' => array( + 'label' => __( 'User Roles (priority)', 'ultimate-member' ), + 'value' => implode( ', ', $roles_array ), + ), + 'um-register_role' => array( + 'label' => __( 'Default New User Role', 'ultimate-member' ), + 'value' => get_option( 'default_role' ), + ), + ), + ); + + foreach ( $this->get_roles() as $key => $role ) { + if ( strpos( $key, 'um_' ) === 0 ) { + $key = substr( $key, 3 ); + } + + $rolemeta = $this->get_role_meta( $key ); + if ( false === $rolemeta ) { + continue; + } + + $info[ 'ultimate-member-' . $key ] = array( + 'label' => ' - ' . $role . __( ' role settings', 'ultimate-member' ), + 'description' => __( 'This debug information about user role.', 'ultimate-member' ), + 'fields' => array(), + ); + + if ( array_key_exists( '_um_can_access_wpadmin', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_access_wpadmin' => array( + 'label' => __( 'Can access wp-admin?', 'ultimate-member' ), + 'value' => $rolemeta['_um_can_access_wpadmin'] ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + if ( array_key_exists( '_um_can_not_see_adminbar', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_not_see_adminbar' => array( + 'label' => __( 'Force hiding adminbar in frontend?', 'ultimate-member' ), + 'value' => $rolemeta['_um_can_not_see_adminbar'] ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + if ( array_key_exists( '_um_can_edit_everyone', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_edit_everyone' => array( + 'label' => __( 'Can edit other member accounts?', 'ultimate-member' ), + 'value' => $rolemeta['_um_can_edit_everyone'] ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + if ( array_key_exists( '_um_can_edit_everyone', $rolemeta ) && 1 === absint( $rolemeta['_um_can_edit_everyone'] ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_edit_roles' => array( + 'label' => __( 'Can edit these user roles only', 'ultimate-member' ), + 'value' => ! empty( $rolemeta['_um_can_edit_roles'] ) ? implode( ', ', $rolemeta['_um_can_edit_roles'] ) : $labels['all'], + ), + ) + ); + } + + if ( array_key_exists( '_um_can_delete_everyone', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_delete_everyone' => array( + 'label' => __( 'Can delete other member accounts?', 'ultimate-member' ), + 'value' => $rolemeta['_um_can_delete_everyone'] ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + if ( array_key_exists( '_um_can_delete_everyone', $rolemeta ) && 1 === absint( $rolemeta['_um_can_delete_everyone'] ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_delete_roles' => array( + 'label' => __( 'Can delete these user roles only', 'ultimate-member' ), + 'value' => ! empty( $rolemeta['_um_can_delete_roles'] ) ? implode( ', ', $rolemeta['_um_can_delete_roles'] ) : $labels['all'], + ), + ) + ); + } + + if ( array_key_exists( '_um_can_edit_profile', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_edit_profile' => array( + 'label' => __( 'Can edit their profile?', 'ultimate-member' ), + 'value' => $rolemeta['_um_can_edit_profile'] ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + if ( array_key_exists( '_um_can_delete_profile', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_delete_profile' => array( + 'label' => __( 'Can delete their account?', 'ultimate-member' ), + 'value' => $rolemeta['_um_can_delete_profile'] ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + if ( array_key_exists( '_um_can_view_all', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_view_all' => array( + 'label' => __( 'Can view other member profiles?', 'ultimate-member' ), + 'value' => $rolemeta['_um_can_view_all'] ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + if ( array_key_exists( '_um_can_view_all', $rolemeta ) && 1 === absint( $rolemeta['_um_can_view_all'] ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_view_roles' => array( + 'label' => __( 'Can view these user roles only', 'ultimate-member' ), + 'value' => ! empty( $rolemeta['_um_can_view_roles'] ) ? implode( ', ', $rolemeta['_um_can_view_roles'] ) : $labels['all'], + ), + ) + ); + } + + if ( isset( $rolemeta['_um_profile_noindex'] ) && '' !== $rolemeta['_um_profile_noindex'] ) { + $profile_noindex = $rolemeta['_um_profile_noindex'] ? $labels['yes'] : $labels['no']; + } else { + $profile_noindex = __( 'Default', 'ultimate-member' ); + } + if ( isset( $rolemeta['_um_default_homepage'] ) && '' !== $rolemeta['_um_default_homepage'] ) { + $default_homepage = $rolemeta['_um_default_homepage'] ? $labels['yes'] : $labels['no']; + } else { + $default_homepage = __( 'No such option', 'ultimate-member' ); + } + + if ( array_key_exists( '_um_can_make_private_profile', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_make_private_profile' => array( + 'label' => __( 'Can make their profile private?', 'ultimate-member' ), + 'value' => $rolemeta['_um_can_make_private_profile'] ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + if ( array_key_exists( '_um_can_access_private_profile', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-can_access_private_profile' => array( + 'label' => __( 'Can view/access private profiles?', 'ultimate-member' ), + 'value' => $rolemeta['_um_can_access_private_profile'] ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-profile_noindex' => array( + 'label' => __( 'Avoid indexing profile by search engines', 'ultimate-member' ), + 'value' => $profile_noindex, + ), + 'um-default_homepage' => array( + 'label' => __( 'Can view default homepage?', 'ultimate-member' ), + 'value' => $default_homepage, + ), + ) + ); + + if ( isset( $rolemeta['_um_default_homepage'] ) && 0 === absint( $rolemeta['_um_default_homepage'] ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-redirect_homepage' => array( + 'label' => __( 'Custom Homepage Redirect', 'ultimate-member' ), + 'value' => $rolemeta['_um_redirect_homepage'], + ), + ) + ); + } + + $status_options = array( + 'approved' => __( 'Auto Approve', 'ultimate-member' ), + 'checkmail' => __( 'Require Email Activation', 'ultimate-member' ), + 'pending' => __( 'Require Admin Review', 'ultimate-member' ), + ); + + if ( array_key_exists( '_um_status', $rolemeta ) && isset( $status_options[ $rolemeta['_um_status'] ] ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-status' => array( + 'label' => __( 'Registration Status', 'ultimate-member' ), + 'value' => $status_options[ $rolemeta['_um_status'] ], + ), + ) + ); + } + + if ( array_key_exists( '_um_status', $rolemeta ) && 'approved' === $rolemeta['_um_status'] ) { + $auto_approve_act = array( + 'redirect_profile' => __( 'Redirect to profile', 'ultimate-member' ), + 'redirect_url' => __( 'Redirect to URL', 'ultimate-member' ), + ); + + if ( isset( $auto_approve_act[ $rolemeta['_um_auto_approve_act'] ] ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-auto_approve_act' => array( + 'label' => __( 'Custom Homepage Redirect', 'ultimate-member' ), + 'value' => $auto_approve_act[ $rolemeta['_um_auto_approve_act'] ], + ), + ) + ); + } + + if ( 'redirect_url' === $rolemeta['_um_auto_approve_act'] && array_key_exists( '_um_auto_approve_url', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-auto_approve_url' => array( + 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), + 'value' => $rolemeta['_um_auto_approve_url'], + ), + ) + ); + } + } + + if ( array_key_exists( '_um_status', $rolemeta ) && 'checkmail' === $rolemeta['_um_status'] ) { + $checkmail_action = array( + 'show_message' => __( 'Show custom message', 'ultimate-member' ), + 'redirect_url' => __( 'Redirect to URL', 'ultimate-member' ), + ); + + if ( array_key_exists( '_um_login_email_activate', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-login_email_activate' => array( + 'label' => __( 'Login user after validating the activation link?', 'ultimate-member' ), + 'value' => $rolemeta['_um_login_email_activate'] ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + if ( isset( $checkmail_action[ $rolemeta['_um_checkmail_action'] ] ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-checkmail_action' => array( + 'label' => __( 'Action to be taken after registration', 'ultimate-member' ), + 'value' => $checkmail_action[ $rolemeta['_um_checkmail_action'] ], + ), + ) + ); + } + + if ( 'show_message' === $rolemeta['_um_checkmail_action'] ) { + if ( array_key_exists( '_um_checkmail_message', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-checkmail_message' => array( + 'label' => __( 'Personalize the custom message', 'ultimate-member' ), + 'value' => stripslashes( $rolemeta['_um_checkmail_message'] ), + ), + ) + ); + } + } else { + if ( array_key_exists( '_um_checkmail_url', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-checkmail_url' => array( + 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), + 'value' => $rolemeta['_um_checkmail_url'], + ), + ) + ); + } + } + + if ( array_key_exists( '_um_url_email_activate', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-url_email_activate' => array( + 'label' => __( 'URL redirect after e-mail activation', 'ultimate-member' ), + 'value' => $rolemeta['_um_url_email_activate'], + ), + ) + ); + } + } + + if ( array_key_exists( '_um_status', $rolemeta ) && 'pending' === $rolemeta['_um_status'] ) { + $pending_action = array( + 'show_message' => __( 'Show custom message', 'ultimate-member' ), + 'redirect_url' => __( 'Redirect to URL', 'ultimate-member' ), + ); + + if ( array_key_exists( '_um_pending_action', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-pending_action' => array( + 'label' => __( 'Action to be taken after registration', 'ultimate-member' ), + 'value' => $pending_action[ $rolemeta['_um_pending_action'] ], + ), + ) + ); + } + + if ( 'show_message' === $rolemeta['_um_pending_action'] ) { + if ( array_key_exists( '_um_pending_message', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-pending_message' => array( + 'label' => __( 'Personalize the custom message', 'ultimate-member' ), + 'value' => stripslashes( $rolemeta['_um_pending_message'] ), + ), + ) + ); + } + } else { + if ( array_key_exists( '_um_pending_url', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-pending_url' => array( + 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), + 'value' => $rolemeta['_um_pending_url'], + ), + ) + ); + } + } + } + + $after_login_options = array( + 'redirect_profile' => __( 'Redirect to profile', 'ultimate-member' ), + 'redirect_url' => __( 'Redirect to URL', 'ultimate-member' ), + 'refresh' => __( 'Refresh active page', 'ultimate-member' ), + 'redirect_admin' => __( 'Redirect to WordPress Admin', 'ultimate-member' ), + ); + + if ( array_key_exists( '_um_after_login', $rolemeta ) && isset( $after_login_options[ $rolemeta['_um_after_login'] ] ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-after_login' => array( + 'label' => __( 'Action to be taken after login', 'ultimate-member' ), + 'value' => $after_login_options[ $rolemeta['_um_after_login'] ], + ), + ) + ); + } + + if ( array_key_exists( '_um_login_redirect_url', $rolemeta ) && 'redirect_url' === $rolemeta['_um_login_redirect_url'] ) { + if ( array_key_exists( '_um_pending_url', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-login_redirect_url' => array( + 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), + 'value' => $rolemeta['_um_login_redirect_url'], + ), + ) + ); + } + } + + $redirect_options = array( + 'redirect_home' => __( 'Go to Homepage', 'ultimate-member' ), + 'redirect_url' => __( 'Go to Custom URL', 'ultimate-member' ), + ); + if ( ! isset( $rolemeta['_um_after_logout'] ) ) { + $rolemeta['_um_after_logout'] = 'redirect_home'; + } + if ( array_key_exists( '_um_after_logout', $rolemeta ) && isset( $redirect_options[ $rolemeta['_um_after_logout'] ] ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-after_logout' => array( + 'label' => __( 'Action to be taken after logout', 'ultimate-member' ), + 'value' => $redirect_options[ $rolemeta['_um_after_logout'] ], + ), + ) + ); + } + + if ( 'redirect_url' === $rolemeta['_um_after_logout'] ) { + if ( array_key_exists( '_um_logout_redirect_url', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-logout_redirect_url' => array( + 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), + 'value' => $rolemeta['_um_logout_redirect_url'], + ), + ) + ); + } + } + + if ( ! isset( $rolemeta['_um_after_delete'] ) ) { + $rolemeta['_um_after_delete'] = 'redirect_home'; + } + if ( array_key_exists( '_um_after_delete', $rolemeta ) && isset( $redirect_options[ $rolemeta['_um_after_delete'] ] ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-after_delete' => array( + 'label' => __( 'Action to be taken after account is deleted', 'ultimate-member' ), + 'value' => $redirect_options[ $rolemeta['_um_after_delete'] ], + ), + ) + ); + } + + if ( 'redirect_url' === $rolemeta['_um_after_delete'] ) { + if ( array_key_exists( '_um_delete_redirect_url', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-delete_redirect_url' => array( + 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), + 'value' => $rolemeta['_um_delete_redirect_url'], + ), + ) + ); + } + } + + if ( ! empty( $rolemeta['wp_capabilities'] ) ) { + if ( array_key_exists( 'wp_capabilities', $rolemeta ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-wp_capabilities' => array( + 'label' => __( 'WP Capabilities', 'ultimate-member' ), + 'value' => $rolemeta['wp_capabilities'], + ), + ) + ); + } + } + + $info = apply_filters( 'um_debug_information_user_role', $info, $key ); + } + + // Forms settings + if ( ! empty( $this->get_forms() ) ) { + $info['ultimate-member-forms'] = array( + 'label' => __( 'Ultimate Member Forms', 'ultimate-member' ), + 'description' => __( 'This debug information for your Ultimate Member forms.', 'ultimate-member' ), + 'fields' => array( + 'um-forms' => array( + 'label' => __( 'UM Forms', 'ultimate-member' ), + 'value' => $this->get_forms(), + ), + ), + ); + + foreach ( $this->get_forms() as $key => $form ) { + if ( strpos( $key, 'ID#' ) === 0 ) { + $key = substr( $key, 3 ); + } + + $info[ 'ultimate-member-' . $key ] = array( + 'label' => ' - ' . $form . __( ' form settings', 'ultimate-member' ), + 'description' => __( 'This debug information for your Ultimate Member form.', 'ultimate-member' ), + 'fields' => array( + 'um-form-shortcode' => array( + 'label' => __( 'Shortcode', 'ultimate-member' ), + 'value' => '[ultimatemember form_id="' . $key . '"]', + ), + 'um-mode' => array( + 'label' => __( 'Type', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_mode', true ), + ), + ), + ); + + if ( 'register' === get_post_meta( $key, '_um_mode', true ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-register_role' => array( + 'label' => __( 'User registration role', 'ultimate-member' ), + 'value' => 0 === absint( get_post_meta( $key, '_um_register_role', true ) ) ? $labels['default'] : get_post_meta( $key, '_um_register_role', true ), + ), + 'um-register_template' => array( + 'label' => __( 'Template', 'ultimate-member' ), + 'value' => 0 === absint( get_post_meta( $key, '_um_register_template', true ) ) ? $labels['default'] : get_post_meta( $key, '_um_register_template', true ), + ), + 'um-register_primary_btn_word' => array( + 'label' => __( 'Primary Button Text', 'ultimate-member' ), + 'value' => ! get_post_meta( $key, '_um_register_primary_btn_word', true ) ? $labels['default'] : get_post_meta( $key, '_um_register_primary_btn_word', true ), + ), + 'um-register_use_gdpr' => array( + 'label' => __( 'Enable privacy policy agreement', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_register_use_gdpr', true ) ? $labels['yes'] : $labels['no'], + ), + ) + ); + + if ( 1 === absint( get_post_meta( $key, '_um_register_use_gdpr', true ) ) ) { + $gdpr_content_id = get_post_meta( $key, '_um_register_use_gdpr_content_id', true ); + + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-register_use_gdpr_content_id' => array( + 'label' => __( 'Privacy policy content', 'ultimate-member' ), + 'value' => $gdpr_content_id ? get_the_title( $gdpr_content_id ) . '(' . $gdpr_content_id . ')' . get_the_permalink( $gdpr_content_id ) : '', + ), + 'um-register_use_gdpr_toggle_show' => array( + 'label' => __( 'Toggle Show text', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_register_use_gdpr_toggle_show', true ), + ), + 'um-register_use_gdpr_toggle_hide' => array( + 'label' => __( 'Toggle Hide text', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_register_use_gdpr_toggle_hide', true ), + ), + 'um-register_use_gdpr_agreement' => array( + 'label' => __( 'Checkbox agreement description', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_register_use_gdpr_agreement', true ), + ), + 'um-register_use_gdpr_error_text' => array( + 'label' => __( 'Error Text', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_register_use_gdpr_error_text', true ), + ), + ) + ); + } + + $info = apply_filters( 'um_debug_information_register_form', $info, $key ); + + $fields = get_post_meta( $key, '_um_custom_fields', true ); + if ( ! empty( $fields ) ) { + foreach ( $fields as $field_key => $field ) { + $field_info = $this->get_field_data( $info, $key, $field_key, $field ); + + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + $field_info + ); + } + } + } elseif ( 'login' === get_post_meta( $key, '_um_mode', true ) ) { + $login_redirect_options = array( + '0' => __( 'Default', 'ultimate-member' ), + 'redirect_profile' => __( 'Redirect to profile', 'ultimate-member' ), + 'redirect_url' => __( 'Redirect to URL', 'ultimate-member' ), + 'refresh' => __( 'Refresh active page', 'ultimate-member' ), + 'redirect_admin' => __( 'Redirect to WordPress Admin', 'ultimate-member' ), + ); + + $login_after_login = get_post_meta( $key, '_um_login_after_login', true ); + $login_after_login = '' === $login_after_login ? '0' : $login_after_login; + + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-login_template' => array( + 'label' => __( 'Template', 'ultimate-member' ), + 'value' => 0 === absint( get_post_meta( $key, '_um_login_template', true ) ) ? $labels['default'] : get_post_meta( $key, '_um_login_template', true ), + ), + 'um-login_primary_btn_word' => array( + 'label' => __( 'Primary Button Text', 'ultimate-member' ), + 'value' => ! get_post_meta( $key, '_um_login_primary_btn_word', true ) ? $labels['default'] : get_post_meta( $key, '_um_login_primary_btn_word', true ), + ), + 'um-login_forgot_pass_link' => array( + 'label' => __( 'Show Forgot Password Link?', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_login_forgot_pass_link', true ) ? $labels['yes'] : $labels['no'], + ), + 'um-login_show_rememberme' => array( + 'label' => __( 'Show "Remember Me"?', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_login_show_rememberme', true ) ? $labels['yes'] : $labels['no'], + ), + 'um-login_after_login' => array( + 'label' => __( 'Redirection after Login', 'ultimate-member' ), + 'value' => $login_redirect_options[ $login_after_login ], + ), + ) + ); + + if ( 'redirect_url' === get_post_meta( $key, '_um_login_after_login', true ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-login_redirect_url' => array( + 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_login_redirect_url', true ), + ), + ) + ); + } + + $info = apply_filters( 'um_debug_information_login_form', $info, $key ); + + $fields = get_post_meta( $key, '_um_custom_fields', true ); + if ( ! empty( $fields ) ) { + foreach ( $fields as $field_key => $field ) { + $field_info = $this->get_field_data( $info, $key, $field_key, $field ); + + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + $field_info + ); + } + } + } elseif ( 'profile' === get_post_meta( $key, '_um_mode', true ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-profile_role' => array( + 'label' => __( 'Make this profile form role-specific', 'ultimate-member' ), + 'value' => ! empty( get_post_meta( $key, '_um_profile_role', true ) ) ? get_post_meta( $key, '_um_profile_role', true ) : $labels['all'], + ), + 'um-profile_template' => array( + 'label' => __( 'Template', 'ultimate-member' ), + 'value' => 0 === absint( get_post_meta( $key, '_um_profile_template', true ) ) ? $labels['default'] : get_post_meta( $key, '_um_profile_template', true ), + ), + 'um-profile_primary_btn_word' => array( + 'label' => __( 'Primary Button Text', 'ultimate-member' ), + 'value' => ! get_post_meta( $key, '_um_profile_primary_btn_word', true ) ? $labels['default'] : get_post_meta( $key, '_um_profile_primary_btn_word', true ), + ), + 'um-profile_cover_enabled' => array( + 'label' => __( 'Enable Cover Photos', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_profile_cover_enabled', true ) ? $labels['yes'] : $labels['no'], + ), + 'um-profile_disable_photo_upload' => array( + 'label' => __( 'Disable Profile Photo Upload', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_profile_disable_photo_upload', true ) ? $labels['yes'] : $labels['no'], + ), + ) + ); + + if ( 0 === absint( get_post_meta( $key, '_um_profile_disable_photo_upload', true ) ) ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-profile_photo_required' => array( + 'label' => __( 'Make Profile Photo Required', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_profile_photo_required', true ) ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-profile_show_name' => array( + 'label' => __( 'Show display name in profile header?', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_profile_show_name', true ) ? $labels['yes'] : $labels['no'], + ), + 'um-profile_show_social_links' => array( + 'label' => __( 'Show social links in profile header?', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_profile_show_social_links', true ) ? $labels['yes'] : $labels['no'], + ), + 'um-profile_show_bio' => array( + 'label' => __( 'Show user description in profile header?', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_profile_show_bio', true ) ? $labels['yes'] : $labels['no'], + ), + 'um-profile_menu' => array( + 'label' => __( 'Enable profile menu', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_profile_menu', true ) ? $labels['yes'] : $labels['no'], + ), + ) + ); + + if ( 1 === absint( get_post_meta( $key, '_um_profile_menu', true ) ) ) { + $tab_options = array( + 0 => __( 'Anyone', 'ultimate-member' ), + 1 => __( 'Guests only', 'ultimate-member' ), + 2 => __( 'Members only', 'ultimate-member' ), + 3 => __( 'Only the owner', 'ultimate-member' ), + 4 => __( 'Only specific roles', 'ultimate-member' ), + 5 => __( 'Owner and specific roles', 'ultimate-member' ), + ); + + $tabs_for_count = 0; + $tabs = UM()->profile()->tabs(); + + foreach ( $tabs as $k => $tab ) { + $profile_tab = get_post_meta( $key, '_um_profile_tab_' . $k, true ); + + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-profile_tab_' . $k => array( + 'label' => $tab['name'] . __( ' Tab', 'ultimate-member' ), + 'value' => $profile_tab ? $labels['yes'] : $labels['no'], + ), + ) + ); + + if ( isset( $profile_tab ) && 1 === absint( $profile_tab ) ) { + $tabs_for_count++; + $privacy = '_um_profile_tab_' . $k . '_privacy'; + $tab_privacy = get_post_meta( $key, $privacy, true ); + + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-profile_tab_' . $k . '_privacy' => array( + 'label' => __( 'Who can see ', 'ultimate-member' ) . $tab['name'] . __( ' Tab?', 'ultimate-member' ), + 'value' => $tab_options[ $tab_privacy ], + ), + ) + ); + + if ( 4 === absint( $tab_privacy ) || 5 === absint( $tab_privacy ) ) { + $allowed_tab = '_um_profile_tab_' . $k . '_roles'; + if ( ! empty( get_post_meta( $key, $allowed_tab, true ) ) ) { + $allowed_roles = implode( ', ', get_post_meta( $key, $allowed_tab, true ) ); + } else { + $allowed_roles = 'All'; + } + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-profile_tab_' . $k . '_privacy_roles' => array( + 'label' => __( 'Allowed roles for ', 'ultimate-member' ) . $tab['name'] . __( ' Tab', 'ultimate-member' ), + 'value' => $allowed_roles, + ), + ) + ); + } + } + } + + if ( $tabs_for_count > 0 ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-profile_menu_default_tab' => array( + 'label' => __( 'Profile menu default tab', 'ultimate-member' ), + 'value' => $tabs[ get_post_meta( $key, '_um_profile_menu_default_tab', true ) ]['name'], + ), + ) + ); + } + + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-profile_menu_icons' => array( + 'label' => __( 'Enable menu icons in desktop view', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_profile_menu_icons', true ) ? $labels['yes'] : $labels['no'], + ), + ) + ); + + $info = apply_filters( 'um_debug_information_tab_form', $info, $key ); + } + + $fields = get_post_meta( $key, '_um_custom_fields', true ); + if ( ! empty( $fields ) ) { + foreach ( $fields as $field_key => $field ) { + $field_info = $this->get_field_data( $info, $key, $field_key, $field ); + + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + $field_info + ); + } + } + + $profile_metafields = get_post_meta( $key, '_um_profile_metafields', true ); + if ( ! empty( $profile_metafields ) ) { + foreach ( $profile_metafields as $k => $field ) { + $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-' . $key ]['fields'], + array( + 'um-profile_metafields-' . $k => array( + 'label' => __( 'Field to show in user meta', 'ultimate-member' ), + 'value' => $field, + ), + ) + ); + } + } + } + } + } + + $plugins = get_plugins(); + $active_plugins = get_option( 'active_plugins', array() ); + $active_exts = array(); + + foreach ( $plugins as $plugin_path => $plugin ) { + if ( strpos( $plugin_path, 'um-' ) === false ) { + + continue; + } + if ( ! in_array( $plugin_path, $active_plugins ) ) { + continue; + } + $name = str_replace('Ultimate Member -', '', $plugin['Name'] ); + $active_exts[] = $name . ': ' . $plugin['Version'] . "\n"; + } + + $info['ultimate-member-extensions'] = array( + 'label' => __( 'Ultimate Member Active Extensions', 'ultimate-member' ), + 'description' => __( 'This debug information about active extensions.', 'ultimate-member' ), + 'fields' => array( + 'um-extensions' => array( + 'label' => __( 'Active extensions', 'ultimate-member' ), + 'value' => $active_exts, + ), + ), + ); + + return $info; + } +} diff --git a/includes/admin/core/class-admin-site-health.php b/includes/admin/core/class-admin-site-health.php deleted file mode 100644 index 06439a6c..00000000 --- a/includes/admin/core/class-admin-site-health.php +++ /dev/null @@ -1,1767 +0,0 @@ -roles()->get_roles(); - } - - - private function get_forms() { - $forms_data = get_posts( array( 'post_type' => 'um_form', 'posts_per_page' => -1 ) ); - $forms = array(); - foreach ( $forms_data as $form ) { - $forms[ 'ID#' . $form->ID ] = $form->post_title; - } - return $forms; - } - - - private function get_role_meta( $key ) { - return get_option( "um_role_{$key}_meta", false ); - } - - private function get_field_data( $info, $key, $field_key, $field ) { - $row = isset( $field['metakey'] ) ? false : true; - $title = $row ? __( 'Row: ', 'ultimate-member' ) . $field['id'] : __( 'Field: ', 'ultimate-member' ) . $field['metakey']; - $field_info = array( - 'um-field_'.$field_key => array( - 'label' => $title, - 'value' => $field, - ), - ); - - return $field_info; - } - - /** - * Add our data to Site Health information. - * - * @since 2.6.12 - * - * @param array $info The Site Health information. - * - * @return array The updated Site Health information. - */ - public function debug_information( $info ) { - $labels = array( - 'yes' => __( 'Yes', 'ultimate-member' ), - 'no' => __( 'No', 'ultimate-member' ), - 'all' => __( 'All', 'ultimate-member' ), - 'default' => __( 'Default', 'ultimate-member' ), - 'nopages' => __( 'No predefined page', 'ultimate-member' ), - ); - - $info['ultimate-member'] = array( - 'label' => __( 'Ultimate Member', 'ultimate-member' ), - 'description' => __( 'This debug information for your Ultimate Member installation can assist you in getting support.', 'ultimate-member' ), - 'fields' => array(), - ); - - // Pages settings - $pages = apply_filters( - 'um_debug_information_pages', - array( - 'User' => null !== UM()->options()->get( 'core_user' ) ? get_the_title( UM()->options()->get( 'core_user' ) ) . ' (ID#' . UM()->options()->get( 'core_user' ) . ') | ' . get_permalink( UM()->options()->get( 'core_user' ) ) : $labels['nopages'], - 'Login' => null !== UM()->options()->get( 'core_login' ) ? get_the_title( UM()->options()->get( 'core_login' ) ) . ' (ID#' . UM()->options()->get( 'core_login' ) . ') | ' . get_permalink( UM()->options()->get( 'core_login' ) ) : $labels['nopages'], - 'Register' => null !== UM()->options()->get( 'core_register' ) ? get_the_title( UM()->options()->get( 'core_register' ) ) . ' (ID#' . UM()->options()->get( 'core_register' ) . ') | ' . get_permalink( UM()->options()->get( 'core_register' ) ) : $labels['nopages'], - 'Members' => null !== UM()->options()->get( 'core_members' ) ? get_the_title( UM()->options()->get( 'core_members' ) ) . ' (ID#' . UM()->options()->get( 'core_members' ) . ') | ' . get_permalink( UM()->options()->get( 'core_members' ) ) : $labels['nopages'], - 'Logout' => null !== UM()->options()->get( 'core_logout' ) ? get_the_title( UM()->options()->get( 'core_logout' ) ) . ' (ID#' . UM()->options()->get( 'core_logout' ) . ') | ' . get_permalink( UM()->options()->get( 'core_logout' ) ) : $labels['nopages'], - 'Account' => null !== UM()->options()->get( 'core_account' ) ? get_the_title( UM()->options()->get( 'core_account' ) ) . ' (ID#' . UM()->options()->get( 'core_account' ) . ') | ' . get_permalink( UM()->options()->get( 'core_account' ) ) : $labels['nopages'], - 'Password reset' => null !== UM()->options()->get( 'core_password' ) ? get_the_title( UM()->options()->get( 'core_password-reset' ) ) . ' (ID#' . UM()->options()->get( 'core_password-reset' ) . ') | ' . get_permalink( UM()->options()->get( 'core_password-reset' ) ) : $labels['nopages'], - ) - ); - - $pages_settings = array( - 'um-pages' => array( - 'label' => __( 'Pages', 'ultimate-member' ), - 'value' => $pages, - ), - ); - - // User settings - $permalink_base = array( - 'user_login' => __( 'Username', 'ultimate-member' ), - 'name' => __( 'First and Last Name with \'.\'', 'ultimate-member' ), - 'name_dash' => __( 'First and Last Name with \'-\'', 'ultimate-member' ), - 'name_plus' => __( 'First and Last Name with \'+\'', 'ultimate-member' ), - 'user_id' => __( 'User ID', 'ultimate-member' ), - ); - $display_name = 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' ), - ); - - $user_settings = array( - 'um-permalink_base' => array( - 'label' => __( 'Profile Permalink Base', 'ultimate-member' ), - 'value' => isset( $permalink_base[ UM()->options()->get( 'permalink_base' ) ] ) ? $permalink_base[ UM()->options()->get( 'permalink_base' ) ] : $labels['no'], - ), - 'um-display_name' => array( - 'label' => __( 'User Display Name', 'ultimate-member' ), - 'value' => isset( $display_name[ UM()->options()->get( 'display_name' ) ] ) ? $display_name[ UM()->options()->get( 'display_name' ) ] : $labels['no'], - ), - 'um-author_redirect' => array( - 'label' => __( 'Automatically redirect author page to their profile?', 'ultimate-member' ), - 'value' => UM()->options()->get( 'author_redirect' ) ? $labels['yes'] : $labels['no'], - ), - 'um-members_page' => array( - 'label' => __( 'Enable Members Directory', 'ultimate-member' ), - 'value' => UM()->options()->get( 'members_page' ) ? $labels['yes'] : $labels['no'], - ), - 'um-toggle_password' => array( - 'label' => __( 'Show/hide password button', 'ultimate-member' ), - 'value' => UM()->options()->get( 'toggle_password' ) ? $labels['yes'] : $labels['no'], - ), - 'um-require_strongpass' => array( - 'label' => __( 'Require Strong Passwords', 'ultimate-member' ), - 'value' => UM()->options()->get( 'require_strongpass' ) ? $labels['yes'] : $labels['no'], - ), - 'um-password_min_chars' => array( - 'label' => __( 'Require Strong Passwords', 'ultimate-member' ), - 'value' => UM()->options()->get( 'password_min_chars' ), - ), - 'um-password_max_chars' => array( - 'label' => __( 'Require Strong Passwords', 'ultimate-member' ), - 'value' => UM()->options()->get( 'password_max_chars' ), - ), - 'um-profile_noindex' => array( - 'label' => __( 'Avoid indexing profile by search engines', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_noindex' ) ? $labels['yes'] : $labels['no'], - ), - 'um-activation_link_expiry_time' => array( - 'label' => __( 'Activation link lifetime', 'ultimate-member' ), - 'value' => UM()->options()->get( 'activation_link_expiry_time' ), - ), - 'um-use_gravatars' => array( - 'label' => __( 'Use Gravatars?', 'ultimate-member' ), - 'value' => UM()->options()->get( 'use_gravatars' ) ? $labels['yes'] : $labels['no'], - ), - ); - - if ( 1 === absint( UM()->options()->get( 'use_gravatars' ) ) ) { - $gravatar_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' ), - ); - - $user_settings['um-use_um_gravatar_default_builtin_image'] = array( - 'label' => __( 'Use Gravatar builtin image', 'ultimate-member' ), - 'value' => $gravatar_options[ UM()->options()->get( 'use_um_gravatar_default_builtin_image' ) ], - ); - if ( 'default' === UM()->options()->get( 'use_um_gravatar_default_builtin_image' ) ) { - $user_settings['um-use_um_gravatar_default_image'] = array( - 'label' => __( 'Use Default plugin avatar as Gravatar\'s Default avatar', 'ultimate-member' ), - 'value' => UM()->options()->get( 'use_um_gravatar_default_image' ) ? $labels['yes'] : $labels['no'], - ); - } - } - - // Account settings - $account_settings = array( - 'um-account_tab_password' => array( - 'label' => __( 'Password Account Tab', 'ultimate-member' ), - 'value' => UM()->options()->get( 'account_tab_password' ) ? $labels['yes'] : $labels['no'], - ), - 'um-account_tab_privacy' => array( - 'label' => __( 'Privacy Account Tab', 'ultimate-member' ), - 'value' => UM()->options()->get( 'account_tab_privacy' ) ? $labels['yes'] : $labels['no'], - ), - 'um-account_tab_notifications' => array( - 'label' => __( 'Notifications Account Tab', 'ultimate-member' ), - 'value' => UM()->options()->get( 'account_tab_notifications' ) ? $labels['yes'] : $labels['no'], - ), - 'um-account_tab_delete' => array( - 'label' => __( 'Delete Account Tab', 'ultimate-member' ), - 'value' => UM()->options()->get( 'account_tab_delete' ) ? $labels['yes'] : $labels['no'], - ), - 'um-delete_account_text' => array( - 'label' => __( 'Account Deletion Custom Text', 'ultimate-member' ), - 'value' => UM()->options()->get( 'delete_account_text' ), - ), - 'um-delete_account_no_pass_required_text' => array( - 'label' => __( 'Account Deletion without password Custom Text', 'ultimate-member' ), - 'value' => UM()->options()->get( 'delete_account_no_pass_required_text' ), - ), - 'um-account_name' => array( - 'label' => __( 'Add a First & Last Name fields', 'ultimate-member' ), - 'value' => UM()->options()->get( 'account_name' ) ? $labels['yes'] : $labels['no'], - ), - ); - - if ( 1 === absint( UM()->options()->get( 'account_name' ) ) ) { - $account_settings['um-account_name_disable'] = array( - 'label' => __( 'Disable First & Last name field editing', 'ultimate-member' ), - 'value' => UM()->options()->get( 'account_name_disable' ) ? $labels['yes'] : $labels['no'], - ); - $account_settings['um-account_name_require'] = array( - 'label' => __( 'Require First & Last Name', 'ultimate-member' ), - 'value' => UM()->options()->get( 'account_name_require' ) ? $labels['yes'] : $labels['no'], - ); - } - - $account_settings['um-account_hide_in_directory'] = array( - 'label' => __( 'Allow users to hide their profiles from directory', 'ultimate-member' ), - 'value' => UM()->options()->get( 'account_hide_in_directory' ) ? $labels['yes'] : $labels['no'], - ); - - if ( 1 === absint( UM()->options()->get( 'account_name' ) ) ) { - $account_settings['um-account_hide_in_directory_default'] = array( - 'label' => __( 'Hide profiles from directory by default', 'ultimate-member' ), - 'value' => UM()->options()->get( 'account_hide_in_directory_default' ), - ); - } - - // Uploads settings - $profile_sizes_list = ''; - $profile_sizes = UM()->options()->get( 'photo_thumb_sizes' ); - if ( ! empty( $profile_sizes ) ) { - foreach ( $profile_sizes as $size ) { - $profile_sizes_list = empty( $profile_sizes_list ) ? $size : $profile_sizes_list . ', ' . $size; - } - } - $cover_sizes_list = ''; - $cover_sizes = UM()->options()->get( 'cover_thumb_sizes' ); - if ( ! empty( $cover_sizes ) ) { - foreach ( $cover_sizes as $size ) { - $cover_sizes_list = empty( $cover_sizes_list ) ? $size : $cover_sizes_list . ', ' . $size; - } - } - $uploads_settings = array( - 'um-profile_photo_max_size' => array( - 'label' => __( 'Profile Photo Maximum File Size (bytes)', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_photo_max_size' ), - ), - 'um-cover_photo_max_size' => array( - 'label' => __( 'Cover Photo Maximum File Size (bytes)', 'ultimate-member' ), - 'value' => UM()->options()->get( 'cover_photo_max_size' ), - ), - 'um-photo_thumb_sizes' => array( - 'label' => __( 'Profile Photo Thumbnail Sizes (px)', 'ultimate-member' ), - 'value' => $profile_sizes_list, - ), - 'um-cover_thumb_sizes' => array( - 'label' => __( 'Cover Photo Thumbnail Sizes (px)', 'ultimate-member' ), - 'value' => $cover_sizes_list, - ), - 'um-image_orientation_by_exif' => array( - 'label' => __( 'Change image orientation', 'ultimate-member' ), - 'value' => UM()->options()->get( 'image_orientation_by_exif' ) ? $labels['yes'] : $labels['no'], - ), - 'um-image_compression' => array( - 'label' => __( 'Image Quality', 'ultimate-member' ), - 'value' => UM()->options()->get( 'image_compression' ), - ), - 'um-image_max_width' => array( - 'label' => __( 'Image Upload Maximum Width (px)', 'ultimate-member' ), - 'value' => UM()->options()->get( 'image_max_width' ), - ), - 'um-cover_min_width' => array( - 'label' => __( 'Cover Photo Minimum Width (px)', 'ultimate-member' ), - 'value' => UM()->options()->get( 'cover_min_width' ), - ), - ); - - // Content Restriction settings - $restricted_posts = UM()->options()->get( 'restricted_access_post_metabox' ); - $restricted_posts_list = ''; - if ( ! empty( $restricted_posts ) ) { - foreach ( $restricted_posts as $key => $posts ) { - $restricted_posts_list = empty ( $restricted_posts_list ) ? $key : $restricted_posts_list . ', ' . $key; - } - } - $restricted_taxonomy = UM()->options()->get( 'restricted_access_taxonomy_metabox' ); - $restricted_taxonomy_list = ''; - if ( ! empty( $restricted_taxonomy ) ) { - foreach ( $restricted_taxonomy as $key => $posts ) { - $restricted_taxonomy_list = empty ( $restricted_taxonomy_list ) ? $key : $restricted_taxonomy_list . ', ' . $key; - } - } - - $restrict_settings = array( - 'um-accessible' => array( - 'label' => __( 'Global Site Access', 'ultimate-member' ), - 'value' => 0 === UM()->options()->get( 'accessible' ) ? __( 'Site accessible to Everyone', 'ultimate-member' ) : __( 'Site accessible to Logged In Users', 'ultimate-member' ), - ), - ); - - if ( 2 === absint( UM()->options()->get( 'accessible' ) ) ) { - $exclude_uris = UM()->options()->get( 'access_exclude_uris' ); - $exclude_uris_list = ''; - if ( ! empty( $exclude_uris ) ) { - foreach ( $exclude_uris as $key => $url ) { - $exclude_uris_list = empty( $exclude_uris_list ) ? $url : $exclude_uris_list . ', ' . $url; - } - } - $restrict_settings['um-access_redirect'] = array( - 'label' => __( 'Custom Redirect URL', 'ultimate-member' ), - 'value' => UM()->options()->get( 'access_redirect' ), - ); - $restrict_settings['um-access_exclude_uris'] = array( - 'label' => __( 'Account Deletion Text', 'ultimate-member' ), - 'value' => $exclude_uris_list, - ); - $restrict_settings['um-home_page_accessible'] = array( - 'label' => __( 'Allow Homepage to be accessible', 'ultimate-member' ), - 'value' => UM()->options()->get( 'home_page_accessible' ) ? $labels['yes'] : $labels['no'], - ); - $restrict_settings['um-category_page_accessible'] = array( - 'label' => __( 'Allow Category pages to be accessible', 'ultimate-member' ), - 'value' => UM()->options()->get( 'category_page_accessible' ) ? $labels['yes'] : $labels['no'], - ); - } - - $restrict_settings['um-restricted_post_title_replace'] = array( - 'label' => __( 'Restricted Content Titles', 'ultimate-member' ), - 'value' => UM()->options()->get( 'restricted_post_title_replace' ) ? $labels['yes'] : $labels['no'], - ); - if ( 1 === absint( UM()->options()->get( 'restricted_post_title_replace' ) ) ) { - $restrict_settings['um-restricted_access_post_title'] = array( - 'label' => __( 'Restricted Content Title Text', 'ultimate-member' ), - 'value' => stripslashes( UM()->options()->get( 'restricted_access_post_title' ) ), - ); - } - - $restrict_settings['um-restricted_access_message'] = array( - 'label' => __( 'Restricted Access Message', 'ultimate-member' ), - 'value' => stripslashes( UM()->options()->get( 'restricted_access_message' ) ), - ); - $restrict_settings['um-restricted_blocks'] = array( - 'label' => __( 'Enable the "Content Restriction" settings for the Gutenberg Blocks', 'ultimate-member' ), - 'value' => UM()->options()->get( 'restricted_blocks' ) ? $labels['yes'] : $labels['no'], - ); - if ( 1 === absint( UM()->options()->get( 'restricted_blocks' ) ) ) { - $restrict_settings['um-restricted_block_message'] = array( - 'label' => __( 'Restricted Access Block Message', 'ultimate-member' ), - 'value' => stripslashes( UM()->options()->get( 'restricted_block_message' ) ), - ); - } - $restrict_settings['um-restricted_access_post_metabox'] = array( - 'label' => __( 'Enable the "Content Restriction" settings for post types', 'ultimate-member' ), - 'value' => $restricted_posts_list, - ); - $restrict_settings['um-restricted_access_taxonomy_metabox'] = array( - 'label' => __( 'Enable the "Content Restriction" settings for taxonomies', 'ultimate-member' ), - 'value' => $restricted_taxonomy_list, - ); - - // Access other settings - $blocked_emails = str_replace( '
', ', ', nl2br( UM()->options()->get( 'blocked_emails' ) ) ); - $blocked_words = str_replace( '
', ', ', nl2br( UM()->options()->get( 'blocked_words' ) ) ); - $allowed_callbacks = str_replace( '
', ', ', nl2br( UM()->options()->get( 'allowed_choice_callbacks' ) ) ); - - $access_other_settings = array( - 'um-enable_reset_password_limit' => array( - 'label' => __( 'Enable the Reset Password Limit?', 'ultimate-member' ), - 'value' => UM()->options()->get( 'enable_reset_password_limit' ) ? $labels['yes'] : $labels['no'], - ), - ); - if ( 1 === absint( UM()->options()->get( 'enable_reset_password_limit' ) ) ) { - $access_other_settings['um-reset_password_limit_number'] = array( - 'label' => __( 'Reset Password Limit ', 'ultimate-member' ), - 'value' => UM()->options()->get( 'reset_password_limit_number' ), - ); - } - $access_other_settings['um-change_password_request_limit'] = array( - 'label' => __( 'Change Password request limit ', 'ultimate-member' ), - 'value' => UM()->options()->get( 'change_password_request_limit' ), - ); - $access_other_settings['um-blocked_emails'] = array( - 'label' => __( 'Blocked Email Addresses', 'ultimate-member' ), - 'value' => stripslashes( $blocked_emails ), - ); - $access_other_settings['um-blocked_words'] = array( - 'label' => __( 'Banned Usernames', 'ultimate-member' ), - 'value' => stripslashes( $blocked_words ), - ); - $access_other_settings['um-allowed_choice_callbacks'] = array( - 'label' => __( 'Allowed Choice Callbacks', 'ultimate-member' ), - 'value' => stripslashes( $allowed_callbacks ), - ); - $access_other_settings['um-allow_url_redirect_confirm'] = array( - 'label' => __( 'Allow external link redirect confirm ', 'ultimate-member' ), - 'value' => UM()->options()->get( 'allow_url_redirect_confirm' ) ? $labels['yes'] : $labels['no'], - ); - - // Email settings - $email_settings = array( - 'um-admin_email' => array( - 'label' => __( 'Admin E-mail Address', 'ultimate-member' ), - 'value' => UM()->options()->get( 'admin_email' ), - ), - 'um-mail_from' => array( - 'label' => __( 'Mail appears from', 'ultimate-member' ), - 'value' => UM()->options()->get( 'mail_from' ), - ), - 'um-mail_from_addr' => array( - 'label' => __( 'Mail appears from address', 'ultimate-member' ), - 'value' => UM()->options()->get( 'mail_from_addr' ), - ), - 'um-email_html' => array( - 'label' => __( 'Use HTML for E-mails?', 'ultimate-member' ), - 'value' => UM()->options()->get( 'email_html' ) ? $labels['yes'] : $labels['no'], - ), - ); - - $emails = UM()->config()->email_notifications; - foreach ( $emails as $key => $email ) { - if ( 1 === absint( UM()->options()->get( $key . '_on' ) ) ) { - $email_settings[ 'um-' . $key ] = array( - 'label' => $email['title'] . __( ' Subject', 'ultimate-member' ), - 'value' => UM()->options()->get( $key . '_sub' ), - ); - - $email_settings[ 'um-theme_' . $key ] = array( - 'label' => __( 'Template ', 'ultimate-member' ) . $email['title'] . __( ' in theme?', 'ultimate-member' ), - 'value' => '' !== locate_template( array( 'ultimate-member/emails/' . $key . '.php' ) ) ? $labels['yes'] : $labels['no'], - ); - } - } - - // Appearance settings - $profile_icons_options = array( - 'field' => __( 'Show inside text field', 'ultimate-member' ), - 'label' => __( 'Show with label', 'ultimate-member' ), - 'off' => __( 'Turn off', 'ultimate-member' ), - ); - $profile_header_menu_options = array( - 'bc' => __( 'Bottom of Icon', 'ultimate-member' ), - 'lc' => __( 'Left of Icon (right for RTL)', 'ultimate-member' ), - ); - $register_align_options = array( - 'center' => __( 'Centered', 'ultimate-member' ), - 'left' => __( 'Left aligned', 'ultimate-member' ), - 'right' => __( 'Right aligned', 'ultimate-member' ), - ); - - $appearance_settings = array( - 'um-profile_template' => array( - 'label' => __( 'Profile Default Template', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_template' ), - ), - 'um-profile_max_width' => array( - 'label' => __( 'Profile Maximum Width', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_max_width' ), - ), - 'um-profile_area_max_width' => array( - 'label' => __( 'Profile Area Maximum Width', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_area_max_width' ), - ), - 'um-profile_icons' => array( - 'label' => __( 'Profile Field Icons', 'ultimate-member' ), - 'value' => $profile_icons_options[ UM()->options()->get( 'profile_icons' ) ], - ), - 'um-profile_primary_btn_word' => array( - 'label' => __( 'Profile Primary Button Text', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_primary_btn_word' ), - ), - 'um-profile_secondary_btn' => array( - 'label' => __( 'Profile Secondary Button', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_secondary_btn' ) ? $labels['yes'] : $labels['no'], - ), - ); - if ( 1 === absint( UM()->options()->get( 'profile_secondary_btn' ) ) ) { - $appearance_settings['um-profile_secondary_btn_word'] = array( - 'label' => __( 'Profile Secondary Button Text ', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_secondary_btn_word' ), - ); - } - $appearance_settings['um-default_avatar'] = array( - 'label' => __( 'Default Profile Photo', 'ultimate-member' ), - 'value' => UM()->options()->get( 'default_avatar' )['url'], - ); - $appearance_settings['um-default_cover'] = array( - 'label' => __( 'Default Cover Photo', 'ultimate-member' ), - 'value' => UM()->options()->get( 'default_cover' )['url'], - ); - $appearance_settings['um-disable_profile_photo_upload'] = array( - 'label' => __( 'Disable Profile Photo Upload', 'ultimate-member' ), - 'value' => UM()->options()->get( 'disable_profile_photo_upload' ) ? $labels['yes'] : $labels['no'], - ); - $appearance_settings['um-profile_photosize'] = array( - 'label' => __( 'Profile Photo Size', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_photosize' ) . 'x' . UM()->options()->get( 'profile_photosize' ) . 'px', - ); - $appearance_settings['um-profile_cover_enabled'] = array( - 'label' => __( 'Profile Cover Photos', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_cover_enabled' ) ? $labels['yes'] : $labels['no'], - ); - if ( 1 === absint( UM()->options()->get( 'profile_cover_enabled' ) ) ) { - $appearance_settings['um-profile_coversize'] = array( - 'label' => __( 'Profile Cover Size', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_coversize' ) . 'px', - ); - $appearance_settings['um-profile_cover_ratio'] = array( - 'label' => __( 'Profile Cover Ratio', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_cover_ratio' ), - ); - } - $appearance_settings['um-profile_show_metaicon'] = array( - 'label' => __( 'Profile Header Meta Text Icon', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_show_metaicon' ) ? $labels['yes'] : $labels['no'], - ); - $appearance_settings['um-profile_show_name'] = array( - 'label' => __( 'Show display name in profile header', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_show_name' ) ? $labels['yes'] : $labels['no'], - ); - $appearance_settings['um-profile_show_social_links'] = array( - 'label' => __( 'Show social links in profile header', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_show_social_links' ) ? $labels['yes'] : $labels['no'], - ); - $appearance_settings['um-profile_show_bio'] = array( - 'label' => __( 'Show user description in header', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_show_bio' ) ? $labels['yes'] : $labels['no'], - ); - $appearance_settings['um-profile_show_html_bio'] = array( - 'label' => __( 'Enable HTML support for user description', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_show_html_bio' ) ? $labels['yes'] : $labels['no'], - ); - $appearance_settings['um-profile_bio_maxchars'] = array( - 'label' => __( 'User description maximum chars', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_bio_maxchars' ), - ); - $appearance_settings['um-profile_header_menu'] = array( - 'label' => __( 'Profile Header Menu Position', 'ultimate-member' ), - 'value' => $profile_header_menu_options[ UM()->options()->get( 'profile_header_menu' ) ], - ); - $appearance_settings['um-profile_empty_text'] = array( - 'label' => __( 'Show a custom message if profile is empty', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_empty_text' ) ? $labels['yes'] : $labels['no'], - ); - if ( 1 === absint( UM()->options()->get( 'profile_empty_text' ) ) ) { - $appearance_settings['um-profile_empty_text_emo'] = array( - 'label' => __( 'Show the emoticon', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_empty_text_emo' ), - ); - } - $appearance_settings['um-profile_menu'] = array( - 'label' => __( 'Enable profile menu', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_menu' ) ? $labels['yes'] : $labels['no'], - ); - if ( 1 === absint( UM()->options()->get( 'profile_menu' ) ) ) { - /** - * Filters a privacy list extend. - * - * @since 2.6.13 - * @hook um_profile_tabs_privacy_list - * - * @param {array} $privacy_option Add options for profile tabs' privacy. - * - * @return {array} Options for profile tabs' privacy. - * - * @example Add options for profile tabs' privacy. - * function um_profile_menu_link_attrs( $privacy_option ) { - * // your code here - * return $privacy_option; - * } - * add_filter( 'um_profile_tabs_privacy_list', 'um_profile_tabs_privacy_list', 10, 1 ); - */ - $privacy_option = apply_filters( - 'um_profile_tabs_privacy_list', - array( - 0 => __( 'Anyone', 'ultimate-member' ), - 1 => __( 'Guests only', 'ultimate-member' ), - 2 => __( 'Members only', 'ultimate-member' ), - 3 => __( 'Only the owner', 'ultimate-member' ), - 4 => __( 'Only specific roles', 'ultimate-member' ), - 5 => __( 'Owner and specific roles', 'ultimate-member' ), - ) - ); - - $appearance_settings['um-profile_tab_main'] = array( - 'label' => __( 'About Tab', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_tab_main' ) ? $labels['yes'] : $labels['no'], - ); - if ( 1 === absint( UM()->options()->get( 'profile_tab_main' ) ) ) { - $appearance_settings['um-profile_tab_main_privacy'] = array( - 'label' => __( 'Who can see About Tab?', 'ultimate-member' ), - 'value' => $privacy_option[ UM()->options()->get( 'profile_tab_main_privacy' ) ], - ); - } - $appearance_settings['um-profile_tab_posts'] = array( - 'label' => __( 'Posts Tab', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_tab_posts' ) ? $labels['yes'] : $labels['no'], - ); - if ( 1 === absint( UM()->options()->get( 'profile_tab_posts' ) ) ) { - $appearance_settings['um-profile_tab_posts_privacy'] = array( - 'label' => __( 'Who can see Posts Tab?', 'ultimate-member' ), - 'value' => $privacy_option[ UM()->options()->get( 'profile_tab_posts_privacy' ) ], - ); - } - $appearance_settings['um-profile_tab_comments'] = array( - 'label' => __( 'Comments Tab', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_tab_comments' ) ? $labels['yes'] : $labels['no'], - ); - if ( 1 === absint( UM()->options()->get( 'profile_tab_comments' ) ) ) { - $appearance_settings['um-profile_tab_comments_privacy'] = array( - 'label' => __( 'Who can see Comments Tab?', 'ultimate-member' ), - 'value' => $privacy_option[ UM()->options()->get( 'profile_tab_comments_privacy' ) ], - ); - } - /** - * Filters appearance settings for Site Health extend. - * - * @since 2.6.13 - * @hook um_profile_tabs_site_health - * - * @param {array} $appearance_settings Appearance settings for Site Health. - * - * @return {array} Appearance settings for Site Health. - * - * @example Add options for appearance settings for Site Health. - * function um_profile_tabs_site_health( $appearance_settings ) { - * // your code here - * return $appearance_settings; - * } - * add_filter( 'um_profile_tabs_site_health', 'um_profile_tabs_site_health', 10, 1 ); - */ - $appearance_settings = apply_filters( 'um_profile_tabs_site_health', $appearance_settings ); - - /** - * Filters extend user profile tabs - * - * @since 2.6.13 - * @hook um_profile_tabs - * - * @param {array} $tabs tabs list. - * - * @return {array} tabs list. - * - * @example Add options for profile tabs' privacy. - * function um_profile_tabs( $tabs ) { - * // your code here - * return $tabs; - * } - * add_filter( 'um_profile_tabs', 'um_profile_tabs', 10, 1 ); - */ - $tabs_options = apply_filters( - 'um_profile_tabs', - array( - 'main' => array( - 'name' => __( 'About', 'ultimate-member' ), - 'icon' => 'um-faicon-user', - ), - 'posts' => array( - 'name' => __( 'Posts', 'ultimate-member' ), - 'icon' => 'um-faicon-pencil', - ), - 'comments' => array( - 'name' => __( 'Comments', 'ultimate-member' ), - 'icon' => 'um-faicon-comment', - ), - ) - ); - - $appearance_settings['um-profile_menu_default_tab'] = array( - 'label' => __( 'Profile menu default tab', 'ultimate-member' ), - 'value' => $tabs_options[ UM()->options()->get( 'profile_menu_default_tab' ) ], - ); - $appearance_settings['um-profile_menu_icons'] = array( - 'label' => __( 'Enable menu icons in desktop view', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_menu_icons' ) ? $labels['yes'] : $labels['no'], - ); - } - - $appearance_settings['um-register_template'] = array( - 'label' => __( 'Registration Default Template', 'ultimate-member' ), - 'value' => UM()->options()->get( 'register_template' ), - ); - $appearance_settings['um-register_max_width'] = array( - 'label' => __( 'Registration Maximum Width', 'ultimate-member' ), - 'value' => UM()->options()->get( 'register_max_width' ), - ); - $appearance_settings['um-register_align'] = array( - 'label' => __( 'Registration Shortcode Alignment', 'ultimate-member' ), - 'value' => $register_align_options[ UM()->options()->get( 'register_align' ) ], - ); - $appearance_settings['um-register_icons'] = array( - 'label' => __( 'Registration Field Icons', 'ultimate-member' ), - 'value' => $profile_icons_options[ UM()->options()->get( 'register_icons' ) ], - ); - $appearance_settings['um-register_primary_btn_word'] = array( - 'label' => __( 'Registration Primary Button Text ', 'ultimate-member' ), - 'value' => UM()->options()->get( 'register_primary_btn_word' ), - ); - $appearance_settings['um-register_secondary_btn'] = array( - 'label' => __( 'Registration Secondary Button', 'ultimate-member' ), - 'value' => UM()->options()->get( 'register_secondary_btn' ) ? $labels['yes'] : $labels['no'], - ); - if ( 1 === absint( UM()->options()->get( 'register_secondary_btn' ) ) ) { - $appearance_settings['um-register_secondary_btn_word'] = array( - 'label' => __( 'Registration Secondary Button Text', 'ultimate-member' ), - 'value' => UM()->options()->get( 'register_secondary_btn_word' ), - ); - $appearance_settings['um-register_secondary_btn_url'] = array( - 'label' => __( 'Registration Secondary Button URL', 'ultimate-member' ), - 'value' => UM()->options()->get( 'register_secondary_btn_url' ), - ); - } - $appearance_settings['um-register_role'] = array( - 'label' => __( 'Registration Default Role', 'ultimate-member' ), - 'value' => ! empty( UM()->options()->get( 'register_role' ) ) ? UM()->options()->get( 'register_role' ) : __( 'Default', 'ultimate-member' ), - ); - - $appearance_settings['um-login_template'] = array( - 'label' => __( 'Login Default Template', 'ultimate-member' ), - 'value' => UM()->options()->get( 'login_template' ), - ); - $appearance_settings['um-login_max_width'] = array( - 'label' => __( 'Login Maximum Width', 'ultimate-member' ), - 'value' => UM()->options()->get( 'login_max_width' ), - ); - $appearance_settings['um-login_align'] = array( - 'label' => __( 'Login Shortcode Alignment', 'ultimate-member' ), - 'value' => $register_align_options[ UM()->options()->get( 'login_align' ) ], - ); - $appearance_settings['um-login_icons'] = array( - 'label' => __( 'Login Field Icons', 'ultimate-member' ), - 'value' => $profile_icons_options[ UM()->options()->get( 'login_icons' ) ], - ); - $appearance_settings['um-login_primary_btn_word'] = array( - 'label' => __( 'Login Primary Button Text', 'ultimate-member' ), - 'value' => UM()->options()->get( 'login_primary_btn_word' ), - ); - $appearance_settings['um-login_secondary_btn'] = array( - 'label' => __( 'Login Secondary Button', 'ultimate-member' ), - 'value' => UM()->options()->get( 'login_secondary_btn' ) ? $labels['yes'] : $labels['no'], - ); - if ( 1 === absint( UM()->options()->get( 'login_secondary_btn' ) ) ) { - $appearance_settings['um-login_secondary_btn_word'] = array( - 'label' => __( 'Login Secondary Button Text', 'ultimate-member' ), - 'value' => UM()->options()->get( 'login_secondary_btn_word' ), - ); - $appearance_settings['um-login_secondary_btn_url'] = array( - 'label' => __( 'Login Secondary Button URL', 'ultimate-member' ), - 'value' => UM()->options()->get( 'login_secondary_btn_url' ), - ); - } - $appearance_settings['um-login_forgot_pass_link'] = array( - 'label' => __( 'Login Forgot Password Link', 'ultimate-member' ), - 'value' => UM()->options()->get( 'login_forgot_pass_link' ) ? $labels['yes'] : $labels['no'], - ); - $appearance_settings['um-login_show_rememberme'] = array( - 'label' => __( 'Show "Remember Me"', 'ultimate-member' ), - 'value' => UM()->options()->get( 'login_show_rememberme' ) ? $labels['yes'] : $labels['no'], - ); - - // Misc settings - $misc_settings = array( - 'um-form_asterisk' => array( - 'label' => __( 'Show an asterisk for required fields', 'ultimate-member' ), - 'value' => UM()->options()->get( 'form_asterisk' ) ? $labels['yes'] : $labels['no'], - ), - 'um-profile_title' => array( - 'label' => __( 'User Profile Title', 'ultimate-member' ), - 'value' => stripslashes( UM()->options()->get( 'profile_title' ) ), - ), - 'um-profile_desc' => array( - 'label' => __( 'User Profile Dynamic Meta Description', 'ultimate-member' ), - 'value' => stripslashes( UM()->options()->get( 'profile_desc' ) ), - ), - 'um-um_profile_object_cache_stop' => array( - 'label' => __( 'Disable Cache User Profile', 'ultimate-member' ), - 'value' => UM()->options()->get( 'um_profile_object_cache_stop' ) ? $labels['yes'] : $labels['no'], - ), - 'um-enable_blocks' => array( - 'label' => __( 'Enable Gutenberg Blocks', 'ultimate-member' ), - 'value' => UM()->options()->get( 'enable_blocks' ) ? $labels['yes'] : $labels['no'], - ), - 'um-rest_api_version' => array( - 'label' => __( 'REST API version', 'ultimate-member' ), - 'value' => UM()->options()->get( 'rest_api_version' ), - ), - 'um-disable_restriction_pre_queries' => array( - 'label' => __( 'Disable pre-queries for restriction content logic (advanced)', 'ultimate-member' ), - 'value' => UM()->options()->get( 'disable_restriction_pre_queries' ) ? $labels['yes'] : $labels['no'], - ), - 'um-member_directory_own_table' => array( - 'label' => __( 'Enable custom table for usermeta', 'ultimate-member' ), - 'value' => UM()->options()->get( 'member_directory_own_table' ) ? $labels['yes'] : $labels['no'], - ), - 'um-uninstall_on_delete' => array( - 'label' => __( 'Remove Data on Uninstall?', 'ultimate-member' ), - 'value' => UM()->options()->get( 'uninstall_on_delete' ) ? $labels['yes'] : $labels['no'], - ), - ); - - // Secure settings - $secure_settings = array( - 'um-banned_capabilities' => array( - 'label' => __( 'Banned Administrative Capabilities', 'ultimate-member' ), - 'value' => implode( ', ', UM()->options()->get( 'banned_capabilities' ) ), - ), - 'um-lock_register_forms' => array( - 'label' => __( 'Lock All Register Forms', 'ultimate-member' ), - 'value' => stripslashes( UM()->options()->get( 'lock_register_forms' ) ) ? $labels['yes'] : $labels['no'], - ), - 'um-display_login_form_notice' => array( - 'label' => __( 'Display Login form notice to reset passwords', 'ultimate-member' ), - 'value' => UM()->options()->get( 'display_login_form_notice' ) ? $labels['yes'] : $labels['no'], - ), - 'um-secure_ban_admins_accounts' => array( - 'label' => __( 'Enable ban for administrative capabilities', 'ultimate-member' ), - 'value' => UM()->options()->get( 'secure_ban_admins_accounts' ) ? $labels['yes'] : $labels['no'], - ), - ); - if ( 1 === absint( UM()->options()->get( 'secure_ban_admins_accounts' ) ) ) { - $secure_settings['um-secure_notify_admins_banned_accounts'] = array( - 'label' => __( 'Notify Administrators', 'ultimate-member' ), - 'value' => UM()->options()->get( 'secure_notify_admins_banned_accounts' ) ? $labels['yes'] : $labels['no'], - ); - if ( 1 === absint( UM()->options()->get( 'secure_notify_admins_banned_accounts' ) ) ) { - $secure_notify_admins_banned_accounts_options = array( - 'instant' => __( 'Send Immediately', 'ultimate-member' ), - 'hourly' => __( 'Hourly', 'ultimate-member' ), - 'daily' => __( 'Daily', 'ultimate-member' ), - ); - - $secure_settings['um-secure_notify_admins_banned_accounts__interval'] = array( - 'label' => __( 'Notification Schedule', 'ultimate-member' ), - 'value' => $secure_notify_admins_banned_accounts_options[ UM()->options()->get( 'secure_notify_admins_banned_accounts__interval' ) ], - ); - } - } - - $secure_allowed_redirect_hosts = UM()->options()->get( 'secure_allowed_redirect_hosts' ); - $secure_allowed_redirect_hosts = explode( PHP_EOL, $secure_allowed_redirect_hosts ); - - $secure_settings['um-secure_allowed_redirect_hosts'] = array( - 'label' => __( 'Allowed hosts for safe redirect', 'ultimate-member' ), - 'value' => $secure_allowed_redirect_hosts, - ); - - // Licenses settings - $license_settings = array( - 'um-licenses' => array( - 'label' => __( 'Licenses', 'ultimate-member' ), - 'value' => array(), - ), - ); - - /** - * Filters licenses settings for Site Health. - * - * @since 2.6.13 - * @hook um_licenses_site_health - * - * @param {array} $license_settings licenses settings for Site Health. - * - * @return {array} licenses settings for Site Health. - * - * @example Extend licenses settings for Site Health. - * function um_licenses_site_health( $license_settings ) { - * // your code here - * return $license_settings; - * } - * add_filter( 'um_licenses_site_health', 'um_licenses_site_health', 10, 1 ); - */ - $license_settings = apply_filters( 'um_licenses_site_health', $license_settings ); - - $info['ultimate-member']['fields'] = array_merge( $info['ultimate-member']['fields'], $pages_settings, $user_settings, $account_settings, $uploads_settings, $restrict_settings, $access_other_settings, $email_settings, $appearance_settings, $license_settings, $misc_settings, $secure_settings ); - - // User roles settings - $roles_array = array(); - foreach ( $this->get_roles() as $key => $role ) { - if ( strpos( $key, 'um_' ) === 0 ) { - $key = substr( $key, 3 ); - } - $rolemeta = $this->get_role_meta( $key ); - if ( false === $rolemeta ) { - continue; - } - $priority = ! empty( $rolemeta['_um_priority'] ) ? $rolemeta['_um_priority'] : 0; - - $k = $priority . '-' . $role; - $roles_array[ $k ] = $role . '(' . $priority . ')'; - } - - krsort( $roles_array, SORT_NUMERIC ); - - $info['ultimate-member-user-roles'] = array( - 'label' => __( 'User roles', 'ultimate-member' ), - 'description' => __( 'This debug information about user roles.', 'ultimate-member' ), - 'fields' => array( - 'um-roles' => array( - 'label' => __( 'User Roles (priority)', 'ultimate-member' ), - 'value' => implode( ', ', $roles_array ), - ), - 'um-register_role' => array( - 'label' => __( 'Default New User Role', 'ultimate-member' ), - 'value' => get_option( 'default_role' ), - ), - ), - ); - - foreach ( $this->get_roles() as $key => $role ) { - if ( strpos( $key, 'um_' ) === 0 ) { - $key = substr( $key, 3 ); - } - - $rolemeta = $this->get_role_meta( $key ); - if ( false === $rolemeta ) { - continue; - } - - $info[ 'ultimate-member-' . $key ] = array( - 'label' => ' - ' . $role . __( ' role settings', 'ultimate-member' ), - 'description' => __( 'This debug information about user role.', 'ultimate-member' ), - 'fields' => array(), - ); - - if ( array_key_exists( '_um_can_access_wpadmin', $rolemeta ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-can_access_wpadmin' => array( - 'label' => __( 'Can access wp-admin?', 'ultimate-member' ), - 'value' => $rolemeta['_um_can_access_wpadmin'] ? $labels['yes'] : $labels['no'], - ), - ) - ); - } - - if ( array_key_exists( '_um_can_not_see_adminbar', $rolemeta ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-can_not_see_adminbar' => array( - 'label' => __( 'Force hiding adminbar in frontend?', 'ultimate-member' ), - 'value' => $rolemeta['_um_can_not_see_adminbar'] ? $labels['yes'] : $labels['no'], - ), - ) - ); - } - - if ( array_key_exists( '_um_can_edit_everyone', $rolemeta ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-can_edit_everyone' => array( - 'label' => __( 'Can edit other member accounts?', 'ultimate-member' ), - 'value' => $rolemeta['_um_can_edit_everyone'] ? $labels['yes'] : $labels['no'], - ), - ) - ); - } - - if ( array_key_exists( '_um_can_edit_everyone', $rolemeta ) && 1 === absint( $rolemeta['_um_can_edit_everyone'] ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-can_edit_roles' => array( - 'label' => __( 'Can edit these user roles only', 'ultimate-member' ), - 'value' => ! empty( $rolemeta['_um_can_edit_roles'] ) ? implode( ', ', $rolemeta['_um_can_edit_roles'] ) : $labels['all'], - ), - ) - ); - } - - if ( array_key_exists( '_um_can_delete_everyone', $rolemeta ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-can_delete_everyone' => array( - 'label' => __( 'Can delete other member accounts?', 'ultimate-member' ), - 'value' => $rolemeta['_um_can_delete_everyone'] ? $labels['yes'] : $labels['no'], - ), - ) - ); - } - - if ( array_key_exists( '_um_can_delete_everyone', $rolemeta ) && 1 === absint( $rolemeta['_um_can_delete_everyone'] ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-can_delete_roles' => array( - 'label' => __( 'Can delete these user roles only', 'ultimate-member' ), - 'value' => ! empty( $rolemeta['_um_can_delete_roles'] ) ? implode( ', ', $rolemeta['_um_can_delete_roles'] ) : $labels['all'], - ), - ) - ); - } - - if ( array_key_exists( '_um_can_edit_profile', $rolemeta ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-can_edit_profile' => array( - 'label' => __( 'Can edit their profile?', 'ultimate-member' ), - 'value' => $rolemeta['_um_can_edit_profile'] ? $labels['yes'] : $labels['no'], - ), - ) - ); - } - - if ( array_key_exists( '_um_can_delete_profile', $rolemeta ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-can_delete_profile' => array( - 'label' => __( 'Can delete their account?', 'ultimate-member' ), - 'value' => $rolemeta['_um_can_delete_profile'] ? $labels['yes'] : $labels['no'], - ), - ) - ); - } - - if ( array_key_exists( '_um_can_view_all', $rolemeta ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-can_view_all' => array( - 'label' => __( 'Can view other member profiles?', 'ultimate-member' ), - 'value' => $rolemeta['_um_can_view_all'] ? $labels['yes'] : $labels['no'], - ), - ) - ); - } - - if ( array_key_exists( '_um_can_view_all', $rolemeta ) && 1 === absint( $rolemeta['_um_can_view_all'] ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-can_view_roles' => array( - 'label' => __( 'Can view these user roles only', 'ultimate-member' ), - 'value' => ! empty( $rolemeta['_um_can_view_roles'] ) ? implode( ', ', $rolemeta['_um_can_view_roles'] ) : $labels['all'], - ), - ) - ); - } - - if ( isset( $rolemeta['_um_profile_noindex'] ) && '' !== $rolemeta['_um_profile_noindex'] ) { - $profile_noindex = $rolemeta['_um_profile_noindex'] ? $labels['yes'] : $labels['no']; - } else { - $profile_noindex = __( 'Default', 'ultimate-member' ); - } - if ( isset( $rolemeta['_um_default_homepage'] ) && '' !== $rolemeta['_um_default_homepage'] ) { - $default_homepage = $rolemeta['_um_default_homepage'] ? $labels['yes'] : $labels['no']; - } else { - $default_homepage = __( 'No such option', 'ultimate-member' ); - } - - if ( array_key_exists( '_um_can_make_private_profile', $rolemeta ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-can_make_private_profile' => array( - 'label' => __( 'Can make their profile private?', 'ultimate-member' ), - 'value' => $rolemeta['_um_can_make_private_profile'] ? $labels['yes'] : $labels['no'], - ), - ) - ); - } - - if ( array_key_exists( '_um_can_access_private_profile', $rolemeta ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-can_access_private_profile' => array( - 'label' => __( 'Can view/access private profiles?', 'ultimate-member' ), - 'value' => $rolemeta['_um_can_access_private_profile'] ? $labels['yes'] : $labels['no'], - ), - ) - ); - } - - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-profile_noindex' => array( - 'label' => __( 'Avoid indexing profile by search engines', 'ultimate-member' ), - 'value' => $profile_noindex, - ), - 'um-default_homepage' => array( - 'label' => __( 'Can view default homepage?', 'ultimate-member' ), - 'value' => $default_homepage, - ), - ) - ); - - if ( isset( $rolemeta['_um_default_homepage'] ) && 0 === absint( $rolemeta['_um_default_homepage'] ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-redirect_homepage' => array( - 'label' => __( 'Custom Homepage Redirect', 'ultimate-member' ), - 'value' => $rolemeta['_um_redirect_homepage'], - ), - ) - ); - } - - $status_options = array( - 'approved' => __( 'Auto Approve', 'ultimate-member' ), - 'checkmail' => __( 'Require Email Activation', 'ultimate-member' ), - 'pending' => __( 'Require Admin Review', 'ultimate-member' ), - ); - - if ( array_key_exists( '_um_status', $rolemeta ) && isset( $status_options[ $rolemeta['_um_status'] ] ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-status' => array( - 'label' => __( 'Registration Status', 'ultimate-member' ), - 'value' => $status_options[ $rolemeta['_um_status'] ], - ), - ) - ); - } - - if ( array_key_exists( '_um_status', $rolemeta ) && 'approved' === $rolemeta['_um_status'] ) { - $auto_approve_act = array( - 'redirect_profile' => __( 'Redirect to profile', 'ultimate-member' ), - 'redirect_url' => __( 'Redirect to URL', 'ultimate-member' ), - ); - - if ( isset( $auto_approve_act[ $rolemeta['_um_auto_approve_act'] ] ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-auto_approve_act' => array( - 'label' => __( 'Custom Homepage Redirect', 'ultimate-member' ), - 'value' => $auto_approve_act[ $rolemeta['_um_auto_approve_act'] ], - ), - ) - ); - } - - if ( 'redirect_url' === $rolemeta['_um_auto_approve_act'] && array_key_exists( '_um_auto_approve_url', $rolemeta ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-auto_approve_url' => array( - 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), - 'value' => $rolemeta['_um_auto_approve_url'], - ), - ) - ); - } - } - - if ( array_key_exists( '_um_status', $rolemeta ) && 'checkmail' === $rolemeta['_um_status'] ) { - $checkmail_action = array( - 'show_message' => __( 'Show custom message', 'ultimate-member' ), - 'redirect_url' => __( 'Redirect to URL', 'ultimate-member' ), - ); - - if ( array_key_exists( '_um_login_email_activate', $rolemeta ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-login_email_activate' => array( - 'label' => __( 'Login user after validating the activation link?', 'ultimate-member' ), - 'value' => $rolemeta['_um_login_email_activate'] ? $labels['yes'] : $labels['no'], - ), - ) - ); - } - - if ( isset( $checkmail_action[ $rolemeta['_um_checkmail_action'] ] ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-checkmail_action' => array( - 'label' => __( 'Action to be taken after registration', 'ultimate-member' ), - 'value' => $checkmail_action[ $rolemeta['_um_checkmail_action'] ], - ), - ) - ); - } - - if ( 'show_message' === $rolemeta['_um_checkmail_action'] ) { - if ( array_key_exists( '_um_checkmail_message', $rolemeta ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-checkmail_message' => array( - 'label' => __( 'Personalize the custom message', 'ultimate-member' ), - 'value' => stripslashes( $rolemeta['_um_checkmail_message'] ), - ), - ) - ); - } - } else { - if ( array_key_exists( '_um_checkmail_url', $rolemeta ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-checkmail_url' => array( - 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), - 'value' => $rolemeta['_um_checkmail_url'], - ), - ) - ); - } - } - - if ( array_key_exists( '_um_url_email_activate', $rolemeta ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-url_email_activate' => array( - 'label' => __( 'URL redirect after e-mail activation', 'ultimate-member' ), - 'value' => $rolemeta['_um_url_email_activate'], - ), - ) - ); - } - } - - if ( array_key_exists( '_um_status', $rolemeta ) && 'pending' === $rolemeta['_um_status'] ) { - $pending_action = array( - 'show_message' => __( 'Show custom message', 'ultimate-member' ), - 'redirect_url' => __( 'Redirect to URL', 'ultimate-member' ), - ); - - if ( array_key_exists( '_um_pending_action', $rolemeta ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-pending_action' => array( - 'label' => __( 'Action to be taken after registration', 'ultimate-member' ), - 'value' => $pending_action[ $rolemeta['_um_pending_action'] ], - ), - ) - ); - } - - if ( 'show_message' === $rolemeta['_um_pending_action'] ) { - if ( array_key_exists( '_um_pending_message', $rolemeta ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-pending_message' => array( - 'label' => __( 'Personalize the custom message', 'ultimate-member' ), - 'value' => stripslashes( $rolemeta['_um_pending_message'] ), - ), - ) - ); - } - } else { - if ( array_key_exists( '_um_pending_url', $rolemeta ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-pending_url' => array( - 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), - 'value' => $rolemeta['_um_pending_url'], - ), - ) - ); - } - } - } - - $after_login_options = array( - 'redirect_profile' => __( 'Redirect to profile', 'ultimate-member' ), - 'redirect_url' => __( 'Redirect to URL', 'ultimate-member' ), - 'refresh' => __( 'Refresh active page', 'ultimate-member' ), - 'redirect_admin' => __( 'Redirect to WordPress Admin', 'ultimate-member' ), - ); - - if ( array_key_exists( '_um_after_login', $rolemeta ) && isset( $after_login_options[ $rolemeta['_um_after_login'] ] ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-after_login' => array( - 'label' => __( 'Action to be taken after login', 'ultimate-member' ), - 'value' => $after_login_options[ $rolemeta['_um_after_login'] ], - ), - ) - ); - } - - if ( array_key_exists( '_um_login_redirect_url', $rolemeta ) && 'redirect_url' === $rolemeta['_um_login_redirect_url'] ) { - if ( array_key_exists( '_um_pending_url', $rolemeta ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-login_redirect_url' => array( - 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), - 'value' => $rolemeta['_um_login_redirect_url'], - ), - ) - ); - } - } - - $redirect_options = array( - 'redirect_home' => __( 'Go to Homepage', 'ultimate-member' ), - 'redirect_url' => __( 'Go to Custom URL', 'ultimate-member' ), - ); - if ( ! isset( $rolemeta['_um_after_logout'] ) ) { - $rolemeta['_um_after_logout'] = 'redirect_home'; - } - if ( array_key_exists( '_um_after_logout', $rolemeta ) && isset( $redirect_options[ $rolemeta['_um_after_logout'] ] ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-after_logout' => array( - 'label' => __( 'Action to be taken after logout', 'ultimate-member' ), - 'value' => $redirect_options[ $rolemeta['_um_after_logout'] ], - ), - ) - ); - } - - if ( 'redirect_url' === $rolemeta['_um_after_logout'] ) { - if ( array_key_exists( '_um_logout_redirect_url', $rolemeta ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-logout_redirect_url' => array( - 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), - 'value' => $rolemeta['_um_logout_redirect_url'], - ), - ) - ); - } - } - - if ( ! isset( $rolemeta['_um_after_delete'] ) ) { - $rolemeta['_um_after_delete'] = 'redirect_home'; - } - if ( array_key_exists( '_um_after_delete', $rolemeta ) && isset( $redirect_options[ $rolemeta['_um_after_delete'] ] ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-after_delete' => array( - 'label' => __( 'Action to be taken after account is deleted', 'ultimate-member' ), - 'value' => $redirect_options[ $rolemeta['_um_after_delete'] ], - ), - ) - ); - } - - if ( 'redirect_url' === $rolemeta['_um_after_delete'] ) { - if ( array_key_exists( '_um_delete_redirect_url', $rolemeta ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-delete_redirect_url' => array( - 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), - 'value' => $rolemeta['_um_delete_redirect_url'], - ), - ) - ); - } - } - - if ( ! empty( $rolemeta['wp_capabilities'] ) ) { - if ( array_key_exists( 'wp_capabilities', $rolemeta ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-wp_capabilities' => array( - 'label' => __( 'WP Capabilities', 'ultimate-member' ), - 'value' => $rolemeta['wp_capabilities'], - ), - ) - ); - } - } - - $info = apply_filters( 'um_debug_information_user_role', $info, $key ); - } - - // Forms settings - if ( ! empty( $this->get_forms() ) ) { - $info['ultimate-member-forms'] = array( - 'label' => __( 'Ultimate Member Forms', 'ultimate-member' ), - 'description' => __( 'This debug information for your Ultimate Member forms.', 'ultimate-member' ), - 'fields' => array( - 'um-forms' => array( - 'label' => __( 'UM Forms', 'ultimate-member' ), - 'value' => $this->get_forms(), - ), - ), - ); - - foreach ( $this->get_forms() as $key => $form ) { - if ( strpos( $key, 'ID#' ) === 0 ) { - $key = substr( $key, 3 ); - } - - $info[ 'ultimate-member-' . $key ] = array( - 'label' => ' - ' . $form . __( ' form settings', 'ultimate-member' ), - 'description' => __( 'This debug information for your Ultimate Member form.', 'ultimate-member' ), - 'fields' => array( - 'um-form-shortcode' => array( - 'label' => __( 'Shortcode', 'ultimate-member' ), - 'value' => '[ultimatemember form_id="' . $key . '"]', - ), - 'um-mode' => array( - 'label' => __( 'Type', 'ultimate-member' ), - 'value' => get_post_meta( $key, '_um_mode', true ), - ), - ), - ); - - if ( 'register' === get_post_meta( $key, '_um_mode', true ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-register_role' => array( - 'label' => __( 'User registration role', 'ultimate-member' ), - 'value' => 0 === absint( get_post_meta( $key, '_um_register_role', true ) ) ? $labels['default'] : get_post_meta( $key, '_um_register_role', true ), - ), - 'um-register_template' => array( - 'label' => __( 'Template', 'ultimate-member' ), - 'value' => 0 === absint( get_post_meta( $key, '_um_register_template', true ) ) ? $labels['default'] : get_post_meta( $key, '_um_register_template', true ), - ), - 'um-register_primary_btn_word' => array( - 'label' => __( 'Primary Button Text', 'ultimate-member' ), - 'value' => ! get_post_meta( $key, '_um_register_primary_btn_word', true ) ? $labels['default'] : get_post_meta( $key, '_um_register_primary_btn_word', true ), - ), - 'um-register_use_gdpr' => array( - 'label' => __( 'Enable privacy policy agreement', 'ultimate-member' ), - 'value' => get_post_meta( $key, '_um_register_use_gdpr', true ) ? $labels['yes'] : $labels['no'], - ), - ) - ); - - if ( 1 === absint( get_post_meta( $key, '_um_register_use_gdpr', true ) ) ) { - $gdpr_content_id = get_post_meta( $key, '_um_register_use_gdpr_content_id', true ); - - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-register_use_gdpr_content_id' => array( - 'label' => __( 'Privacy policy content', 'ultimate-member' ), - 'value' => $gdpr_content_id ? get_the_title( $gdpr_content_id ) . '(' . $gdpr_content_id . ')' . get_the_permalink( $gdpr_content_id ) : '', - ), - 'um-register_use_gdpr_toggle_show' => array( - 'label' => __( 'Toggle Show text', 'ultimate-member' ), - 'value' => get_post_meta( $key, '_um_register_use_gdpr_toggle_show', true ), - ), - 'um-register_use_gdpr_toggle_hide' => array( - 'label' => __( 'Toggle Hide text', 'ultimate-member' ), - 'value' => get_post_meta( $key, '_um_register_use_gdpr_toggle_hide', true ), - ), - 'um-register_use_gdpr_agreement' => array( - 'label' => __( 'Checkbox agreement description', 'ultimate-member' ), - 'value' => get_post_meta( $key, '_um_register_use_gdpr_agreement', true ), - ), - 'um-register_use_gdpr_error_text' => array( - 'label' => __( 'Error Text', 'ultimate-member' ), - 'value' => get_post_meta( $key, '_um_register_use_gdpr_error_text', true ), - ), - ) - ); - } - - $info = apply_filters( 'um_debug_information_register_form', $info, $key ); - - $fields = get_post_meta( $key, '_um_custom_fields', true ); - if ( ! empty( $fields ) ) { - foreach ( $fields as $field_key => $field ) { - $field_info = $this->get_field_data( $info, $key, $field_key, $field ); - - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - $field_info - ); - } - } - } elseif ( 'login' === get_post_meta( $key, '_um_mode', true ) ) { - $login_redirect_options = array( - '0' => __( 'Default', 'ultimate-member' ), - 'redirect_profile' => __( 'Redirect to profile', 'ultimate-member' ), - 'redirect_url' => __( 'Redirect to URL', 'ultimate-member' ), - 'refresh' => __( 'Refresh active page', 'ultimate-member' ), - 'redirect_admin' => __( 'Redirect to WordPress Admin', 'ultimate-member' ), - ); - - $login_after_login = get_post_meta( $key, '_um_login_after_login', true ); - $login_after_login = '' === $login_after_login ? '0' : $login_after_login; - - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-login_template' => array( - 'label' => __( 'Template', 'ultimate-member' ), - 'value' => 0 === absint( get_post_meta( $key, '_um_login_template', true ) ) ? $labels['default'] : get_post_meta( $key, '_um_login_template', true ), - ), - 'um-login_primary_btn_word' => array( - 'label' => __( 'Primary Button Text', 'ultimate-member' ), - 'value' => ! get_post_meta( $key, '_um_login_primary_btn_word', true ) ? $labels['default'] : get_post_meta( $key, '_um_login_primary_btn_word', true ), - ), - 'um-login_forgot_pass_link' => array( - 'label' => __( 'Show Forgot Password Link?', 'ultimate-member' ), - 'value' => get_post_meta( $key, '_um_login_forgot_pass_link', true ) ? $labels['yes'] : $labels['no'], - ), - 'um-login_show_rememberme' => array( - 'label' => __( 'Show "Remember Me"?', 'ultimate-member' ), - 'value' => get_post_meta( $key, '_um_login_show_rememberme', true ) ? $labels['yes'] : $labels['no'], - ), - 'um-login_after_login' => array( - 'label' => __( 'Redirection after Login', 'ultimate-member' ), - 'value' => $login_redirect_options[ $login_after_login ], - ), - ) - ); - - if ( 'redirect_url' === get_post_meta( $key, '_um_login_after_login', true ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-login_redirect_url' => array( - 'label' => __( 'Set Custom Redirect URL', 'ultimate-member' ), - 'value' => get_post_meta( $key, '_um_login_redirect_url', true ), - ), - ) - ); - } - - $info = apply_filters( 'um_debug_information_login_form', $info, $key ); - - $fields = get_post_meta( $key, '_um_custom_fields', true ); - if ( ! empty( $fields ) ) { - foreach ( $fields as $field_key => $field ) { - $field_info = $this->get_field_data( $info, $key, $field_key, $field ); - - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - $field_info - ); - } - } - } elseif ( 'profile' === get_post_meta( $key, '_um_mode', true ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-profile_role' => array( - 'label' => __( 'Make this profile form role-specific', 'ultimate-member' ), - 'value' => ! empty( get_post_meta( $key, '_um_profile_role', true ) ) ? get_post_meta( $key, '_um_profile_role', true ) : $labels['all'], - ), - 'um-profile_template' => array( - 'label' => __( 'Template', 'ultimate-member' ), - 'value' => 0 === absint( get_post_meta( $key, '_um_profile_template', true ) ) ? $labels['default'] : get_post_meta( $key, '_um_profile_template', true ), - ), - 'um-profile_primary_btn_word' => array( - 'label' => __( 'Primary Button Text', 'ultimate-member' ), - 'value' => ! get_post_meta( $key, '_um_profile_primary_btn_word', true ) ? $labels['default'] : get_post_meta( $key, '_um_profile_primary_btn_word', true ), - ), - 'um-profile_cover_enabled' => array( - 'label' => __( 'Enable Cover Photos', 'ultimate-member' ), - 'value' => get_post_meta( $key, '_um_profile_cover_enabled', true ) ? $labels['yes'] : $labels['no'], - ), - 'um-profile_disable_photo_upload' => array( - 'label' => __( 'Disable Profile Photo Upload', 'ultimate-member' ), - 'value' => get_post_meta( $key, '_um_profile_disable_photo_upload', true ) ? $labels['yes'] : $labels['no'], - ), - ) - ); - - if ( 0 === absint( get_post_meta( $key, '_um_profile_disable_photo_upload', true ) ) ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-profile_photo_required' => array( - 'label' => __( 'Make Profile Photo Required', 'ultimate-member' ), - 'value' => get_post_meta( $key, '_um_profile_photo_required', true ) ? $labels['yes'] : $labels['no'], - ), - ) - ); - } - - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-profile_show_name' => array( - 'label' => __( 'Show display name in profile header?', 'ultimate-member' ), - 'value' => get_post_meta( $key, '_um_profile_show_name', true ) ? $labels['yes'] : $labels['no'], - ), - 'um-profile_show_social_links' => array( - 'label' => __( 'Show social links in profile header?', 'ultimate-member' ), - 'value' => get_post_meta( $key, '_um_profile_show_social_links', true ) ? $labels['yes'] : $labels['no'], - ), - 'um-profile_show_bio' => array( - 'label' => __( 'Show user description in profile header?', 'ultimate-member' ), - 'value' => get_post_meta( $key, '_um_profile_show_bio', true ) ? $labels['yes'] : $labels['no'], - ), - 'um-profile_menu' => array( - 'label' => __( 'Enable profile menu', 'ultimate-member' ), - 'value' => get_post_meta( $key, '_um_profile_menu', true ) ? $labels['yes'] : $labels['no'], - ), - ) - ); - - if ( 1 === absint( get_post_meta( $key, '_um_profile_menu', true ) ) ) { - $tab_options = array( - 0 => __( 'Anyone', 'ultimate-member' ), - 1 => __( 'Guests only', 'ultimate-member' ), - 2 => __( 'Members only', 'ultimate-member' ), - 3 => __( 'Only the owner', 'ultimate-member' ), - 4 => __( 'Only specific roles', 'ultimate-member' ), - 5 => __( 'Owner and specific roles', 'ultimate-member' ), - ); - - $tabs_for_count = 0; - $tabs = UM()->profile()->tabs(); - - foreach ( $tabs as $k => $tab ) { - $profile_tab = get_post_meta( $key, '_um_profile_tab_' . $k, true ); - - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-profile_tab_' . $k => array( - 'label' => $tab['name'] . __( ' Tab', 'ultimate-member' ), - 'value' => $profile_tab ? $labels['yes'] : $labels['no'], - ), - ) - ); - - if ( isset( $profile_tab ) && 1 === absint( $profile_tab ) ) { - $tabs_for_count++; - $privacy = '_um_profile_tab_' . $k . '_privacy'; - $tab_privacy = get_post_meta( $key, $privacy, true ); - - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-profile_tab_' . $k . '_privacy' => array( - 'label' => __( 'Who can see ', 'ultimate-member' ) . $tab['name'] . __( ' Tab?', 'ultimate-member' ), - 'value' => $tab_options[ $tab_privacy ], - ), - ) - ); - - if ( 4 === absint( $tab_privacy ) || 5 === absint( $tab_privacy ) ) { - $allowed_tab = '_um_profile_tab_' . $k . '_roles'; - if ( ! empty( get_post_meta( $key, $allowed_tab, true ) ) ) { - $allowed_roles = implode( ', ', get_post_meta( $key, $allowed_tab, true ) ); - } else { - $allowed_roles = 'All'; - } - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-profile_tab_' . $k . '_privacy_roles' => array( - 'label' => __( 'Allowed roles for ', 'ultimate-member' ) . $tab['name'] . __( ' Tab', 'ultimate-member' ), - 'value' => $allowed_roles, - ), - ) - ); - } - } - } - - if ( $tabs_for_count > 0 ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-profile_menu_default_tab' => array( - 'label' => __( 'Profile menu default tab', 'ultimate-member' ), - 'value' => $tabs[ get_post_meta( $key, '_um_profile_menu_default_tab', true ) ]['name'], - ), - ) - ); - } - - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-profile_menu_icons' => array( - 'label' => __( 'Enable menu icons in desktop view', 'ultimate-member' ), - 'value' => get_post_meta( $key, '_um_profile_menu_icons', true ) ? $labels['yes'] : $labels['no'], - ), - ) - ); - - $info = apply_filters( 'um_debug_information_tab_form', $info, $key ); - } - - $fields = get_post_meta( $key, '_um_custom_fields', true ); - if ( ! empty( $fields ) ) { - foreach ( $fields as $field_key => $field ) { - $field_info = $this->get_field_data( $info, $key, $field_key, $field ); - - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - $field_info - ); - } - } - - $profile_metafields = get_post_meta( $key, '_um_profile_metafields', true ); - if ( ! empty( $profile_metafields ) ) { - foreach ( $profile_metafields as $k => $field ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-profile_metafields-' . $k => array( - 'label' => __( 'Field to show in user meta', 'ultimate-member' ), - 'value' => $field, - ), - ) - ); - } - } - } - } - } - - $plugins = get_plugins(); - $active_plugins = get_option( 'active_plugins', array() ); - $active_exts = array(); - - foreach ( $plugins as $plugin_path => $plugin ) { - if ( strpos( $plugin_path, 'um-' ) === false ) { - - continue; - } - if ( ! in_array( $plugin_path, $active_plugins ) ) { - continue; - } - $name = str_replace('Ultimate Member -', '', $plugin['Name'] ); - $active_exts[] = $name . ': ' . $plugin['Version'] . "\n"; - } - - $info['ultimate-member-extensions'] = array( - 'label' => __( 'Ultimate Member Active Extensions', 'ultimate-member' ), - 'description' => __( 'This debug information about active extensions.', 'ultimate-member' ), - 'fields' => array( - 'um-extensions' => array( - 'label' => __( 'Active extensions', 'ultimate-member' ), - 'value' => $active_exts, - ), - ), - ); - - return $info; - } - } -} diff --git a/includes/class-init.php b/includes/class-init.php index e60d3852..d03a5a30 100644 --- a/includes/class-init.php +++ b/includes/class-init.php @@ -583,7 +583,6 @@ if ( ! class_exists( 'UM' ) ) { $this->admin_navmenu(); $this->plugin_updater(); $this->theme_updater(); - $this->site_health(); } elseif ( $this->is_request( 'frontend' ) ) { $this->frontend()->includes(); $this->account(); @@ -781,19 +780,6 @@ if ( ! class_exists( 'UM' ) ) { return $this->classes['theme_updater']; } - - /** - * @since 2.0.45 - * @return um\admin\core\Admin_Site_Health() - */ - public function site_health() { - if ( empty( $this->classes['site_health'] ) ) { - $this->classes['site_health'] = new um\admin\core\Admin_Site_Health(); - } - return $this->classes['site_health']; - } - - /** * @since 2.0 */ From 118541c91e2b6dc59d45fbf15bef226625b8afd3 Mon Sep 17 00:00:00 2001 From: ashubawork Date: Thu, 28 Sep 2023 13:00:03 +0300 Subject: [PATCH 57/81] - add member directories to site health --- includes/admin/class-site-health.php | 463 +++++++++++++++++++++++++-- 1 file changed, 441 insertions(+), 22 deletions(-) diff --git a/includes/admin/class-site-health.php b/includes/admin/class-site-health.php index 37b44bc0..3e04df1d 100644 --- a/includes/admin/class-site-health.php +++ b/includes/admin/class-site-health.php @@ -24,7 +24,12 @@ class Site_Health { } private function get_forms() { - $forms_data = get_posts( array( 'post_type' => 'um_form', 'posts_per_page' => -1 ) ); + $forms_data = get_posts( + array( + 'post_type' => 'um_form', + 'posts_per_page' => -1, + ) + ); $forms = array(); foreach ( $forms_data as $form ) { $forms[ 'ID#' . $form->ID ] = $form->post_title; @@ -37,10 +42,10 @@ class Site_Health { } private function get_field_data( $info, $key, $field_key, $field ) { - $row = isset( $field['metakey'] ) ? false : true; - $title = $row ? __( 'Row: ', 'ultimate-member' ) . $field['id'] : __( 'Field: ', 'ultimate-member' ) . $field['metakey']; + $row = isset( $field['metakey'] ) ? false : true; + $title = $row ? __( 'Row: ', 'ultimate-member' ) . $field['id'] : __( 'Field: ', 'ultimate-member' ) . $field['metakey']; $field_info = array( - 'um-field_'.$field_key => array( + 'um-field_' . $field_key => array( 'label' => $title, 'value' => $field, ), @@ -49,6 +54,23 @@ class Site_Health { return $field_info; } + private function get_member_directories() { + $query = new \WP_Query; + $member_directories = $query->query( + array( + 'post_type' => 'um_directory', + 'posts_per_page' => -1, + ) + ); + + $directories = array(); + foreach ( $member_directories as $directory ) { + $directories[ 'ID#' . $directory->ID ] = $directory->post_title; + } + + return $directories; + } + /** * Add our data to Site Health information. * @@ -295,14 +317,14 @@ class Site_Health { $restricted_posts_list = ''; if ( ! empty( $restricted_posts ) ) { foreach ( $restricted_posts as $key => $posts ) { - $restricted_posts_list = empty ( $restricted_posts_list ) ? $key : $restricted_posts_list . ', ' . $key; + $restricted_posts_list = empty( $restricted_posts_list ) ? $key : $restricted_posts_list . ', ' . $key; } } $restricted_taxonomy = UM()->options()->get( 'restricted_access_taxonomy_metabox' ); $restricted_taxonomy_list = ''; if ( ! empty( $restricted_taxonomy ) ) { foreach ( $restricted_taxonomy as $key => $posts ) { - $restricted_taxonomy_list = empty ( $restricted_taxonomy_list ) ? $key : $restricted_taxonomy_list . ', ' . $key; + $restricted_taxonomy_list = empty( $restricted_taxonomy_list ) ? $key : $restricted_taxonomy_list . ', ' . $key; } } @@ -1429,11 +1451,11 @@ class Site_Health { $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( $info[ 'ultimate-member-' . $key ]['fields'], array( - 'um-register_role' => array( + 'um-register_role' => array( 'label' => __( 'User registration role', 'ultimate-member' ), 'value' => 0 === absint( get_post_meta( $key, '_um_register_role', true ) ) ? $labels['default'] : get_post_meta( $key, '_um_register_role', true ), ), - 'um-register_template' => array( + 'um-register_template' => array( 'label' => __( 'Template', 'ultimate-member' ), 'value' => 0 === absint( get_post_meta( $key, '_um_register_template', true ) ) ? $labels['default'] : get_post_meta( $key, '_um_register_template', true ), ), @@ -1441,7 +1463,7 @@ class Site_Health { 'label' => __( 'Primary Button Text', 'ultimate-member' ), 'value' => ! get_post_meta( $key, '_um_register_primary_btn_word', true ) ? $labels['default'] : get_post_meta( $key, '_um_register_primary_btn_word', true ), ), - 'um-register_use_gdpr' => array( + 'um-register_use_gdpr' => array( 'label' => __( 'Enable privacy policy agreement', 'ultimate-member' ), 'value' => get_post_meta( $key, '_um_register_use_gdpr', true ) ? $labels['yes'] : $labels['no'], ), @@ -1506,7 +1528,7 @@ class Site_Health { $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( $info[ 'ultimate-member-' . $key ]['fields'], array( - 'um-login_template' => array( + 'um-login_template' => array( 'label' => __( 'Template', 'ultimate-member' ), 'value' => 0 === absint( get_post_meta( $key, '_um_login_template', true ) ) ? $labels['default'] : get_post_meta( $key, '_um_login_template', true ), ), @@ -1518,11 +1540,11 @@ class Site_Health { 'label' => __( 'Show Forgot Password Link?', 'ultimate-member' ), 'value' => get_post_meta( $key, '_um_login_forgot_pass_link', true ) ? $labels['yes'] : $labels['no'], ), - 'um-login_show_rememberme' => array( + 'um-login_show_rememberme' => array( 'label' => __( 'Show "Remember Me"?', 'ultimate-member' ), 'value' => get_post_meta( $key, '_um_login_show_rememberme', true ) ? $labels['yes'] : $labels['no'], ), - 'um-login_after_login' => array( + 'um-login_after_login' => array( 'label' => __( 'Redirection after Login', 'ultimate-member' ), 'value' => $login_redirect_options[ $login_after_login ], ), @@ -1558,19 +1580,19 @@ class Site_Health { $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( $info[ 'ultimate-member-' . $key ]['fields'], array( - 'um-profile_role' => array( + 'um-profile_role' => array( 'label' => __( 'Make this profile form role-specific', 'ultimate-member' ), 'value' => ! empty( get_post_meta( $key, '_um_profile_role', true ) ) ? get_post_meta( $key, '_um_profile_role', true ) : $labels['all'], ), - 'um-profile_template' => array( + 'um-profile_template' => array( 'label' => __( 'Template', 'ultimate-member' ), 'value' => 0 === absint( get_post_meta( $key, '_um_profile_template', true ) ) ? $labels['default'] : get_post_meta( $key, '_um_profile_template', true ), ), - 'um-profile_primary_btn_word' => array( + 'um-profile_primary_btn_word' => array( 'label' => __( 'Primary Button Text', 'ultimate-member' ), 'value' => ! get_post_meta( $key, '_um_profile_primary_btn_word', true ) ? $labels['default'] : get_post_meta( $key, '_um_profile_primary_btn_word', true ), ), - 'um-profile_cover_enabled' => array( + 'um-profile_cover_enabled' => array( 'label' => __( 'Enable Cover Photos', 'ultimate-member' ), 'value' => get_post_meta( $key, '_um_profile_cover_enabled', true ) ? $labels['yes'] : $labels['no'], ), @@ -1596,7 +1618,7 @@ class Site_Health { $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( $info[ 'ultimate-member-' . $key ]['fields'], array( - 'um-profile_show_name' => array( + 'um-profile_show_name' => array( 'label' => __( 'Show display name in profile header?', 'ultimate-member' ), 'value' => get_post_meta( $key, '_um_profile_show_name', true ) ? $labels['yes'] : $labels['no'], ), @@ -1604,11 +1626,11 @@ class Site_Health { 'label' => __( 'Show social links in profile header?', 'ultimate-member' ), 'value' => get_post_meta( $key, '_um_profile_show_social_links', true ) ? $labels['yes'] : $labels['no'], ), - 'um-profile_show_bio' => array( + 'um-profile_show_bio' => array( 'label' => __( 'Show user description in profile header?', 'ultimate-member' ), 'value' => get_post_meta( $key, '_um_profile_show_bio', true ) ? $labels['yes'] : $labels['no'], ), - 'um-profile_menu' => array( + 'um-profile_menu' => array( 'label' => __( 'Enable profile menu', 'ultimate-member' ), 'value' => get_post_meta( $key, '_um_profile_menu', true ) ? $labels['yes'] : $labels['no'], ), @@ -1731,19 +1753,416 @@ class Site_Health { } } + // Members directory + $options = array( + 'country' => __( 'Country', 'ultimate-member' ), + 'gender' => __( 'Gender', 'ultimate-member' ), + 'languages' => __( 'Languages', 'ultimate-member' ), + 'role' => __( 'Roles', 'ultimate-member' ), + 'birth_date' => __( 'Age', 'ultimate-member' ), + 'last_login' => __( 'Last Login', 'ultimate-member' ), + 'user_registered' => __( 'User Registered', 'ultimate-member' ), + 'first_name' => __( 'First Name', 'ultimate-member' ), + 'last_name' => __( 'Last Name', 'ultimate-member' ), + 'nickname' => __( 'Nickname', 'ultimate-member' ), + 'secondary_user_email' => __( 'Secondary E-mail Address', 'ultimate-member' ), + 'description' => __( 'Biography', 'ultimate-member' ), + 'phone_number' => __( 'Phone Number', 'ultimate-member' ), + 'mobile_number' => __( 'Mobile Number', 'ultimate-member' ), + 'role_select' => __( 'Roles (Dropdown)', 'ultimate-member' ), + 'role_radio' => __( 'Roles (Radio)', 'ultimate-member' ), + 'whatsapp' => __( 'WhatsApp number', 'ultimate-member' ), + 'facebook' => __( 'Facebook', 'ultimate-member' ), + 'twitter' => __( 'Twitter', 'ultimate-member' ), + 'viber' => __( 'Viber number', 'ultimate-member' ), + 'skype' => __( 'Skype ID', 'ultimate-member' ), + 'telegram' => __( 'Telegram', 'ultimate-member' ), + 'discord' => __( 'Discord', 'ultimate-member' ), + 'youtube' => __( 'Youtube', 'ultimate-member' ), + 'soundcloud' => __( 'SoundCloud', 'ultimate-member' ), + 'user_registered_desc' => __( 'New users first', 'ultimate-member' ), + 'user_registered_asc' => __( 'Old users first', 'ultimate-member' ), + 'username' => __( 'Username', 'ultimate-member' ), + 'display_name' => __( 'Display name', 'ultimate-member' ), + 'last_first_name' => __( 'Last & First name', 'ultimate-member' ), + 'random' => __( 'Random', 'ultimate-member' ), + 'other' => __( 'Other (Custom Field)', 'ultimate-member' ), + ); + + $info['ultimate-member-directories'] = array( + 'label' => __( 'Ultimate Member Directories', 'ultimate-member' ), + 'description' => __( 'This debug information about Ultimate Member directories.', 'ultimate-member' ), + 'fields' => array( + 'um-directory' => array( + 'label' => __( 'Member directories', 'ultimate-member' ), + 'value' => ! empty( $this->get_member_directories() ) ? $this->get_member_directories() : $labels['no-dir'], + ), + ), + ); + + if ( ! empty( $this->get_member_directories() ) ) { + foreach ( $this->get_member_directories() as $key => $directory ) { + if ( 0 === strpos( $key, 'ID#' ) ) { + $key = substr( $key, 3 ); + } + + $view_type = get_post_meta( $key, '_um_view_type', true ); + + $info[ 'ultimate-member-directory-' . $key ] = array( + 'label' => ' - ' . $directory . __( ' directory settings', 'ultimate-member' ), + 'description' => __( 'This debug information for your Ultimate Member directory.', 'ultimate-member' ), + 'fields' => array( + 'um-directory-shortcode' => array( + 'label' => __( 'Shortcode', 'ultimate-member' ), + 'value' => '[ultimatemember_directory id="' . $key . '"]', + ), + 'um-directory_template' => array( + 'label' => __( 'Template', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_directory_template', true ) ? get_post_meta( $key, '_um_directory_template', true ) : $labels['default'], + ), + 'um-directory-view_type' => array( + 'label' => __( 'View type', 'ultimate-member' ), + 'value' => $view_type, + ), + ), + ); + + if ( 'grid' === $view_type ) { + $info[ 'ultimate-member-directory-' . $key ]['fields']['um-directory-grid_columns'] = get_post_meta( $key, '_um_grid_columns', true ); + } + + if ( isset( $options[ get_post_meta( $key, '_um_sortby', true ) ] ) ) { + $sortby_label = $options[ get_post_meta( $key, '_um_sortby', true ) ]; + } else { + $sortby_label = get_post_meta( $key, '_um_sortby', true ); + } + + $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-directory-' . $key ]['fields'], + array( + 'um-directory-roles' => array( + 'label' => __( 'Default view type', 'ultimate-member' ), + 'value' => ! empty( get_post_meta( $key, '_um_roles', true ) ) ? implode( ', ', get_post_meta( $key, '_um_roles', true ) ) : $labels['all'], + ), + 'um-directory-has_profile_photo' => array( + 'label' => __( 'Only show members who have uploaded a profile photo', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_has_profile_photo', true ) ? $labels['yes'] : $labels['no'], + ), + 'um-directory-has_cover_photo' => array( + 'label' => __( 'Only show members who have uploaded a profile photo', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_has_cover_photo', true ) ? $labels['yes'] : $labels['no'], + ), + 'um-directory-show_these_users' => array( + 'label' => __( 'Only show specific users (Enter one username per line)', 'ultimate-member' ), + 'value' => ! empty( get_post_meta( $key, '_um_show_these_users', true ) ) ? implode( ', ', get_post_meta( $key, '_um_show_these_users', true ) ) : '', + ), + 'um-directory-exclude_these_users' => array( + 'label' => __( 'Exclude specific users (Enter one username per line)', 'ultimate-member' ), + 'value' => ! empty( get_post_meta( $key, '_um_exclude_these_users', true ) ) ? implode( ', ', get_post_meta( $key, '_um_exclude_these_users', true ) ) : '', + ), + ) + ); + + $info = apply_filters( 'um_debug_member_directory_general_extend', $info, $key ); + + $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-directory-' . $key ]['fields'], + array( + 'um-directory-sortby' => array( + 'label' => __( 'Default sort users by', 'ultimate-member' ), + 'value' => $sortby_label, + ), + ) + ); + + if ( 'other' === get_post_meta( $key, '_um_sortby', true ) ) { + $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-directory-' . $key ]['fields'], + array( + 'um-directory-sortby_custom' => array( + 'label' => __( 'Meta key', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_sortby_custom', true ), + ), + 'um-directory-sortby_custom_label' => array( + 'label' => __( 'Label of custom sort', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_sortby_custom_label', true ), + ), + 'um-directory-enable_sorting' => array( + 'label' => __( 'Enable custom sorting', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_enable_sorting', true ) ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + if ( 1 === absint( get_post_meta( $key, '_um_enable_sorting', true ) ) ) { + $sorting_fields = get_post_meta( $key, '_um_sorting_fields', true ); + if ( ! empty( $sorting_fields ) ) { + foreach ( $sorting_fields as $k => $field ) { + if ( is_array( $field ) ) { + $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-directory-' . $key ]['fields'], + array( + 'um-directory-sorting_fields-' . $k => array( + 'label' => __( 'Field(s) to enable in sorting', 'ultimate-member' ), + 'value' => __( 'Label: ', 'ultimate-member' ) . array_values( $field )[0] . ' | ' . __( 'Meta key: ', 'ultimate-member' ) . stripslashes( array_keys( $field )[0] ), + ), + ) + ); + } else { + if ( isset( $options[ $field ] ) ) { + $sortby_label = $options[ $field ]; + } else { + $sortby_label = $field; + } + $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-directory-' . $key ]['fields'], + array( + 'um-directory-sorting_fields-' . $k => array( + 'label' => __( 'Field to enable in sorting', 'ultimate-member' ), + 'value' => $sortby_label, + ), + ) + ); + } + } + } + } + + $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-directory-' . $key ]['fields'], + array( + 'um-directory-profile_photo' => array( + 'label' => __( 'Enable Profile Photo', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_profile_photo', true ) ? $labels['yes'] : $labels['no'], + ), + 'um-directory-cover_photos' => array( + 'label' => __( 'Enable Cover Photo', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_cover_photos', true ) ? $labels['yes'] : $labels['no'], + ), + 'um-directory-show_name' => array( + 'label' => __( 'Show display name', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_show_name', true ) ? $labels['yes'] : $labels['no'], + ), + ) + ); + + $info = apply_filters( 'um_debug_member_directory_profile_extend', $info, $key ); + + $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-directory-' . $key ]['fields'], + array( + 'um-directory-show_tagline' => array( + 'label' => __( 'Show tagline below profile name', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_show_tagline', true ) ? $labels['yes'] : $labels['no'], + ), + ) + ); + + if ( 1 === absint( get_post_meta( $key, '_um_show_tagline', true ) ) ) { + $tagline_fields = get_post_meta( $key, '_um_tagline_fields', true ); + if ( ! empty( $tagline_fields ) ) { + foreach ( $tagline_fields as $k => $field ) { + $label = isset( $options[ $field ] ) ? $options[ $field ] : $field; + $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-directory-' . $key ]['fields'], + array( + 'um-directory-tagline_fields-' . $k => array( + 'label' => __( 'Field to display in tagline', 'ultimate-member' ), + 'value' => $label, + ), + ) + ); + } + } + } + + $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-directory-' . $key ]['fields'], + array( + 'um-directory-show_userinfo' => array( + 'label' => __( 'Show extra user information below tagline?', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_show_userinfo', true ) ? $labels['yes'] : $labels['no'], + ), + ) + ); + + if ( 1 === absint( get_post_meta( $key, '_um_show_userinfo', true ) ) ) { + $reveal_fields = get_post_meta( $key, '_um_reveal_fields', true ); + if ( ! empty( $reveal_fields ) ) { + foreach ( $reveal_fields as $k => $field ) { + $label = isset( $options[ $field ] ) ? $options[ $field ] : $field; + $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-directory-' . $key ]['fields'], + array( + 'um-directory-reveal_fields-' . $k => array( + 'label' => __( 'Field to display in extra user information section', 'ultimate-member' ), + 'value' => $label, + ), + ) + ); + } + } + } + + $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-directory-' . $key ]['fields'], + array( + 'um-directory-show_social' => array( + 'label' => __( 'Show social connect icons in extra user information section', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_show_social', true ) ? $labels['yes'] : $labels['no'], + ), + 'um-directory-search' => array( + 'label' => __( 'Enable Search feature', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_search', true ) ? $labels['yes'] : $labels['no'], + ), + ) + ); + + if ( 1 === absint( get_post_meta( $key, '_um_search', true ) ) ) { + $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-directory-' . $key ]['fields'], + array( + 'um-directory-roles_can_search' => array( + 'label' => __( 'User Roles that can use search', 'ultimate-member' ), + 'value' => ! empty( get_post_meta( $key, '_um_roles_can_search', true ) ) ? implode( ', ', get_post_meta( $key, '_um_roles_can_search', true ) ) : $labels['all'], + ), + ) + ); + } + + $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-directory-' . $key ]['fields'], + array( + 'um-directory-filters' => array( + 'label' => __( 'Enable Filters feature', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_filters', true ) ? $labels['yes'] : $labels['no'], + ), + ) + ); + + if ( 1 === absint( get_post_meta( $key, '_um_filters', true ) ) ) { + $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-directory-' . $key ]['fields'], + array( + 'um-directory-roles_can_filter' => array( + 'label' => __( 'User Roles that can use filters', 'ultimate-member' ), + 'value' => ! empty( get_post_meta( $key, '_um_roles_can_filter', true ) ) ? implode( ', ', get_post_meta( $key, '_um_roles_can_filter', true ) ) : $labels['all'], + ), + ) + ); + + $search_fields = get_post_meta( $key, '_um_search_fields', true ); + if ( ! empty( $search_fields ) ) { + foreach ( $search_fields as $k => $field ) { + $label = isset( $options[ $field ] ) ? $options[ $field ] : $field; + $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-directory-' . $key ]['fields'], + array( + 'um-directory-search_fields-' . $k => array( + 'label' => __( 'Filter meta to enable', 'ultimate-member' ), + 'value' => $label, + ), + ) + ); + } + } + } + + $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-directory-' . $key ]['fields'], + array( + 'um-directory-filters_expanded' => array( + 'label' => __( 'Expand the filter bar by default', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_filters_expanded', true ) ? $labels['yes'] : $labels['no'], + ), + ) + ); + + if ( 1 === absint( get_post_meta( $key, '_um_filters_expanded', true ) ) ) { + $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-directory-' . $key ]['fields'], + array( + 'um-directory-filters_is_collapsible' => array( + 'label' => __( 'Can filter bar be collapsed', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_filters_is_collapsible', true ) ? $labels['yes'] : $labels['no'], + ), + ) + ); + } + + $search_filters = get_post_meta( $key, '_um_search_filters', true ); + if ( ! empty( $search_filters ) ) { + foreach ( $search_filters as $k => $field ) { + $label = isset( $options[ $k ] ) ? $options[ $k ] : $k; + $value = $field; + if ( is_array( $field ) ) { + $value = __( 'From ', 'ultimate-member' ) . $field[0] . __( ' to ', 'ultimate-member' ) . $field[1]; + } + $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-directory-' . $key ]['fields'], + array( + 'um-directory-search_filters-' . $k => array( + 'label' => __( 'Admin filtering', 'ultimate-member' ), + 'value' => $label . ' - ' . $value, + ), + ) + ); + } + } + + $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( + $info[ 'ultimate-member-directory-' . $key ]['fields'], + array( + 'um-directory-must_search' => array( + 'label' => __( 'Show results only after search/filtration', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_must_search', true ) ? $labels['yes'] : $labels['no'], + ), + 'um-directory-max_users' => array( + 'label' => __( 'Maximum number of profiles', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_max_users', true ), + ), + 'um-directory-profiles_per_page' => array( + 'label' => __( 'Number of profiles per page', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_profiles_per_page', true ), + ), + 'um-directory-profiles_per_page_mobile' => array( + 'label' => __( 'Maximum number of profiles', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_profiles_per_page_mobile', true ), + ), + 'um-directory-directory_header' => array( + 'label' => __( 'Results Text', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_directory_header', true ), + ), + 'um-directory-directory_header_single' => array( + 'label' => __( 'Single Result Text', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_directory_header_single', true ), + ), + 'um-directory-directory_no_users' => array( + 'label' => __( 'Custom text if no users were found', 'ultimate-member' ), + 'value' => get_post_meta( $key, '_um_directory_no_users', true ), + ), + ) + ); + + $info = apply_filters( 'um_debug_member_directory_extend', $info, $key ); + } + } + + // Active extensions $plugins = get_plugins(); $active_plugins = get_option( 'active_plugins', array() ); - $active_exts = array(); + $active_exts = array(); foreach ( $plugins as $plugin_path => $plugin ) { if ( strpos( $plugin_path, 'um-' ) === false ) { continue; } - if ( ! in_array( $plugin_path, $active_plugins ) ) { + if ( ! in_array( $plugin_path, $active_plugins, true ) ) { continue; } - $name = str_replace('Ultimate Member -', '', $plugin['Name'] ); + $name = str_replace( 'Ultimate Member -', '', $plugin['Name'] ); $active_exts[] = $name . ': ' . $plugin['Version'] . "\n"; } From ff80d0edbf1b80da96cabab5bf2ca18e4ba14ebc Mon Sep 17 00:00:00 2001 From: ashubawork Date: Thu, 28 Sep 2023 14:11:35 +0300 Subject: [PATCH 58/81] - add slider filter init to the member directory block --- assets/js/um-members.js | 112 +++++++++--------- .../build/index.asset.php | 2 +- .../um-member-directories/build/index.js | 2 +- .../blocks/um-member-directories/src/index.js | 1 + 4 files changed, 61 insertions(+), 56 deletions(-) diff --git a/assets/js/um-members.js b/assets/js/um-members.js index 9bf7d053..b8c8dd55 100644 --- a/assets/js/um-members.js +++ b/assets/js/um-members.js @@ -637,6 +637,63 @@ function um_run_search( directory ) { } +function um_slider_filter_init( directory ) { + directory.find('.um-slider').each( function() { + var slider = jQuery( this ); + var directory = slider.parents('.um-directory'); + + var filter_name = slider.data('field_name'); + + var min_default_value = um_get_data_for_directory( directory, 'filter_' + filter_name + '_from' ); + var max_default_value = um_get_data_for_directory( directory, 'filter_' + filter_name + '_to' ); + if ( typeof min_default_value == 'undefined' ) { + min_default_value = parseInt( slider.data('min') ); + } + + if ( typeof max_default_value == 'undefined' ) { + max_default_value = parseInt( slider.data('max') ); + } + + var default_value = [ min_default_value, max_default_value ]; + + slider.slider({ + range: true, + min: parseInt( slider.data('min') ), + max: parseInt( slider.data('max') ), + values: default_value, + create: function( event, ui ) { + //console.log( ui ); + }, + step: 1, + slide: function( event, ui ) { + um_set_range_label( jQuery( this ), ui ); + }, + stop: function( event, ui ) { + if ( ! um_is_directory_busy( directory ) ) { + + um_members_show_preloader( directory ); + + um_set_url_from_data( directory, 'filter_' + filter_name + '_from', ui.values[0] ); + um_set_url_from_data( directory, 'filter_' + filter_name + '_to', ui.values[1] ); + + //set 1st page after filtration + directory.data( 'page', 1 ); + um_set_url_from_data( directory, 'page', '' ); + um_ajax_get_members( directory ); + + um_change_tag( directory ); + + directory.data( 'searched', 1 ); + directory.find( '.um-member-directory-sorting-options' ).prop( 'disabled', false ); + directory.find( '.um-member-directory-view-type' ).removeClass( 'um-disabled' ); + } + } + }); + + um_set_range_label( slider ); + }); +} + jQuery(document.body).ready( function() { @@ -1379,60 +1436,7 @@ jQuery(document.body).ready( function() { } //slider filter - directory.find('.um-slider').each( function() { - var slider = jQuery( this ); - var directory = slider.parents('.um-directory'); - - var filter_name = slider.data('field_name'); - - var min_default_value = um_get_data_for_directory( directory, 'filter_' + filter_name + '_from' ); - var max_default_value = um_get_data_for_directory( directory, 'filter_' + filter_name + '_to' ); - if ( typeof min_default_value == 'undefined' ) { - min_default_value = parseInt( slider.data('min') ); - } - - if ( typeof max_default_value == 'undefined' ) { - max_default_value = parseInt( slider.data('max') ); - } - - var default_value = [ min_default_value, max_default_value ]; - - slider.slider({ - range: true, - min: parseInt( slider.data('min') ), - max: parseInt( slider.data('max') ), - values: default_value, - create: function( event, ui ) { - //console.log( ui ); - }, - step: 1, - slide: function( event, ui ) { - um_set_range_label( jQuery( this ), ui ); - }, - stop: function( event, ui ) { - if ( ! um_is_directory_busy( directory ) ) { - - um_members_show_preloader( directory ); - - um_set_url_from_data( directory, 'filter_' + filter_name + '_from', ui.values[0] ); - um_set_url_from_data( directory, 'filter_' + filter_name + '_to', ui.values[1] ); - - //set 1st page after filtration - directory.data( 'page', 1 ); - um_set_url_from_data( directory, 'page', '' ); - um_ajax_get_members( directory ); - - um_change_tag( directory ); - - directory.data( 'searched', 1 ); - directory.find( '.um-member-directory-sorting-options' ).prop( 'disabled', false ); - directory.find( '.um-member-directory-view-type' ).removeClass( 'um-disabled' ); - } - } - }); - - um_set_range_label( slider ); - }); + um_slider_filter_init( directory ); //datepicker filter diff --git a/includes/blocks/um-member-directories/build/index.asset.php b/includes/blocks/um-member-directories/build/index.asset.php index 8e85d2c6..cee9d9ef 100644 --- a/includes/blocks/um-member-directories/build/index.asset.php +++ b/includes/blocks/um-member-directories/build/index.asset.php @@ -1 +1 @@ - array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-element', 'wp-server-side-render'), 'version' => '57ea4f619de4d752a4bb'); + array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-element', 'wp-server-side-render'), 'version' => 'fdd5ad1f74de4e2e94db'); diff --git a/includes/blocks/um-member-directories/build/index.js b/includes/blocks/um-member-directories/build/index.js index 05bc85e3..b3f3a882 100644 --- a/includes/blocks/um-member-directories/build/index.js +++ b/includes/blocks/um-member-directories/build/index.js @@ -1 +1 @@ -(()=>{"use strict";var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.wp.element,r=window.wp.data,n=window.wp.components,i=window.wp.blockEditor,o=window.wp.serverSideRender;var l=e.n(o);(0,window.wp.blocks.registerBlockType)("um-block/um-member-directories",{edit:function(e){let{member_id:o,setAttributes:a}=e.attributes;const c=(0,i.useBlockProps)(),u=(0,r.useSelect)((e=>e("core").getEntityRecords("postType","um_directory",{per_page:-1,_fields:["id","title"]})));if(!u)return(0,t.createElement)("p",null,(0,t.createElement)(n.Spinner,null),wp.i18n.__("Loading...","ultimate-member"));if(0===u.length)return"No posts found.";let d=[{id:"",title:""}].concat(u).map((e=>({label:e.title.rendered,value:e.id})));return(0,t.createElement)("div",c,(0,t.createElement)(l(),{block:"um-block/um-member-directories",attributes:e.attributes}),(0,t.createElement)(i.InspectorControls,null,(0,t.createElement)(n.PanelBody,{title:wp.i18n.__("Select Directories","ultimate-member")},(0,t.createElement)(n.SelectControl,{label:wp.i18n.__("Select Directories","ultimate-member"),className:"um_select_directory",value:o,options:d,style:{height:"35px",lineHeight:"20px",padding:"0 7px"},onChange:t=>{e.setAttributes({member_id:t})}}))))},save:function(e){return null}}),jQuery(window).on("load",(function(e){new MutationObserver((function(e){e.forEach((function(e){jQuery(e.addedNodes).find(".um.um-directory").each((function(){var e=jQuery(this);um_ajax_get_members(e)}))}))})).observe(document,{attributes:!1,childList:!0,characterData:!1,subtree:!0})}))})(); \ No newline at end of file +!function(){"use strict";var e={n:function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(r,{a:r}),r},d:function(t,r){for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},t=window.wp.element,r=window.wp.data,n=window.wp.components,i=window.wp.blockEditor,o=window.wp.serverSideRender,l=e.n(o);(0,window.wp.blocks.registerBlockType)("um-block/um-member-directories",{edit:function(e){let{member_id:o,setAttributes:u}=e.attributes;const c=(0,i.useBlockProps)(),a=(0,r.useSelect)((e=>e("core").getEntityRecords("postType","um_directory",{per_page:-1,_fields:["id","title"]})));if(!a)return(0,t.createElement)("p",null,(0,t.createElement)(n.Spinner,null),wp.i18n.__("Loading...","ultimate-member"));if(0===a.length)return"No posts found.";let d=[{id:"",title:""}].concat(a).map((e=>({label:e.title.rendered,value:e.id})));return(0,t.createElement)("div",{...c},(0,t.createElement)(l(),{block:"um-block/um-member-directories",attributes:e.attributes}),(0,t.createElement)(i.InspectorControls,null,(0,t.createElement)(n.PanelBody,{title:wp.i18n.__("Select Directories","ultimate-member")},(0,t.createElement)(n.SelectControl,{label:wp.i18n.__("Select Directories","ultimate-member"),className:"um_select_directory",value:o,options:d,style:{height:"35px",lineHeight:"20px",padding:"0 7px"},onChange:t=>{e.setAttributes({member_id:t})}}))))},save:function(e){return null}}),jQuery(window).on("load",(function(e){new MutationObserver((function(e){e.forEach((function(e){jQuery(e.addedNodes).find(".um.um-directory").each((function(){var e=jQuery(this);um_ajax_get_members(e),um_slider_filter_init(e)}))}))})).observe(document,{attributes:!1,childList:!0,characterData:!1,subtree:!0})}))}(); \ No newline at end of file diff --git a/includes/blocks/um-member-directories/src/index.js b/includes/blocks/um-member-directories/src/index.js index 12ac4b6a..3bf822f7 100644 --- a/includes/blocks/um-member-directories/src/index.js +++ b/includes/blocks/um-member-directories/src/index.js @@ -97,6 +97,7 @@ jQuery(window).on( 'load', function($) { jQuery(mutation.addedNodes).find('.um.um-directory').each(function() { var directory = jQuery(this); um_ajax_get_members( directory ); + um_slider_filter_init( directory ); }); }); }); From 6511f308474d5d66f012a2f553440f58ec4b658a Mon Sep 17 00:00:00 2001 From: ashubawork Date: Mon, 2 Oct 2023 14:51:23 +0300 Subject: [PATCH 59/81] - fix hooks comments --- includes/core/class-mail.php | 343 ++++++++++++++++------------------- 1 file changed, 156 insertions(+), 187 deletions(-) diff --git a/includes/core/class-mail.php b/includes/core/class-mail.php index b9f2b7c2..65d229fb 100644 --- a/includes/core/class-mail.php +++ b/includes/core/class-mail.php @@ -73,25 +73,21 @@ if ( ! class_exists( 'um\core\Mail' ) ) { */ public function init_paths() { /** - * UM hook + * Filters extend email templates path. * - * @type filter - * @title um_email_templates_path_by_slug - * @description Extend email templates path - * @input_vars - * [{"var":"$paths","type":"array","desc":"Email slug -> Template Path"}] - * @change_log - * ["Since: 2.0"] - * @usage - * - * @example - * Extends extend email templates path. * function my_email_templates_path_by_slug( $paths ) { * // your code here * return $paths; * } - * ?> + * add_filter( 'um_email_templates_path_by_slug', 'my_email_templates_path_by_slug' ); */ $this->path_by_slug = apply_filters( 'um_email_templates_path_by_slug', $this->path_by_slug ); } @@ -145,26 +141,22 @@ if ( ! class_exists( 'um\core\Mail' ) ) { // Return what we found. /** - * UM hook + * Filters change email notification template path. * - * @type filter - * @title um_locate_email_template - * @description Change email notification template path - * @input_vars - * [{"var":"$template","type":"string","desc":"Template Path"}, - * {"var":"$template_name","type":"string","desc":"Template Name"}] - * @change_log - * ["Since: 2.0"] - * @usage - * - * @example - * Change email notification template path. + * function my_locate_email_template( $template, $template_name ) { * // your code here * return $template; * } - * ?> + * add_filter( 'um_locate_email_template', 'my_locate_email_template', 10, 2 ); */ return apply_filters( 'um_locate_email_template', $template, $template_name ); } @@ -178,27 +170,23 @@ if ( ! class_exists( 'um\core\Mail' ) ) { $located = $this->locate_template( $slug ); /** - * UM hook + * Filters change email template location. * - * @type filter - * @title um_email_template_path - * @description Change email template location - * @input_vars - * [{"var":"$located","type":"string","desc":"Template Location"}, - * {"var":"$slug","type":"string","desc":"Template Key"}, - * {"var":"$args","type":"array","desc":"Template settings"}] - * @change_log - * ["Since: 2.0"] - * @usage - * - * @example - * Change email template location. * function my_email_send_subject( $located, $slug, $args ) { * // your code here * return $located; * } - * ?> + * add_filter( 'um_email_template_path', 'my_email_send_subject', 10, 3 ); */ $located = apply_filters( 'um_email_template_path', $located, $slug, $args ); @@ -209,49 +197,40 @@ if ( ! class_exists( 'um\core\Mail' ) ) { ob_start(); /** - * UM hook + * Action before email template loading. * - * @type action - * @title um_before_email_template_part - * @description Action before email template loading - * @input_vars - * [{"var":"$slug","type":"string","desc":"Email template slug"}, - * {"var":"$located","type":"string","desc":"Email template location"}, - * {"var":"$args","type":"array","desc":"Email template arguments"}] - * @change_log - * ["Since: 2.0"] - * @usage add_action( 'um_before_email_template_part', 'function_name', 10, 3 ); - * @example - * Action before email template loading. * function my_before_email_template_part( $slug, $located, $args ) { * // your code here * } - * ?> + * add_filter( 'um_before_email_template_part', 'my_before_email_template_part', 10, 3 ); */ do_action( 'um_before_email_template_part', $slug, $located, $args ); include( $located ); + /** - * UM hook + * Action after email template loading. * - * @type action - * @title um_after_email_template_part - * @description Action after email template loading - * @input_vars - * [{"var":"$slug","type":"string","desc":"Email template slug"}, - * {"var":"$located","type":"string","desc":"Email template location"}, - * {"var":"$args","type":"array","desc":"Email template arguments"}] - * @change_log - * ["Since: 2.0"] - * @usage add_action( 'um_after_email_template_part', 'function_name', 10, 3 ); - * @example - * Action after email template loading. * function my_after_email_template_part( $slug, $located, $args ) { * // your code here * } - * ?> + * add_filter( 'um_after_email_template_part', 'my_after_email_template_part', 10, 3 ); */ do_action( 'um_after_email_template_part', $slug, $located, $args ); @@ -266,80 +245,67 @@ if ( ! class_exists( 'um\core\Mail' ) ) { * @param $args * @return mixed|string */ - function prepare_template( $slug, $args = array() ) { + public function prepare_template( $slug, $args = array() ) { ob_start(); if ( UM()->options()->get( 'email_html' ) ) { /** - * UM hook + * Filters change email notification template header. * - * @type filter - * @title um_email_template_html_formatting - * @description Change email notification template header - * @input_vars - * [{"var":"$header","type":"string","desc":"Email notification header. '' by default"}, - * {"var":"$slug","type":"string","desc":"Template Key"}, - * {"var":"$args","type":"array","desc":"Template settings"}] - * @change_log - * ["Since: 2.0"] - * @usage - * - * @example - * Change email notification template header. * function my_email_template_html_formatting( $header, $slug, $args ) { * // your code here * return $header; * } - * ?> + * add_filter( 'um_email_template_html_formatting', 'my_email_template_html_formatting', 10, 3 ); */ echo apply_filters( 'um_email_template_html_formatting', '', $slug, $args ); /** - * UM hook + * Action before email template body display. * - * @type action - * @title um_before_email_template_body - * @description Action before email template body display - * @input_vars - * [{"var":"$slug","type":"string","desc":"Email template slug"}, - * {"var":"$args","type":"array","desc":"Email template arguments"}] - * @change_log - * ["Since: 2.0"] - * @usage add_action( 'um_before_email_template_body', 'function_name', 10, 2 ); - * @example - * Action before email template body display. * function my_before_email_template_body( $slug, $args ) { * // your code here * } - * ?> + * add_filter( 'um_before_email_template_body', 'my_before_email_template_body', 10, 2 ); */ do_action( 'um_before_email_template_body', $slug, $args ); /** - * UM hook + * Filters change email notification template body additional attributes. * - * @type filter - * @title um_email_template_body_attrs - * @description Change email notification template body additional attributes - * @input_vars - * [{"var":"$body_atts","type":"string","desc":"Email notification body attributes"}, - * {"var":"$slug","type":"string","desc":"Template Key"}, - * {"var":"$args","type":"array","desc":"Template settings"}] - * @change_log - * ["Since: 2.0"] - * @usage - * - * @example - * Change email notification template body additional attributes. + * function my_email_template_body_attrs( $header, $slug, $args ) { * // your code here * return $body_atts; * } - * ?> + * add_filter( 'um_email_template_body_attrs', 'my_email_template_body_attrs', 10, 3 ); */ $body_attrs = apply_filters( 'um_email_template_body_attrs', 'style="background: #f2f2f2;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;"', $slug, $args ); ?> @@ -352,14 +318,15 @@ if ( ! class_exists( 'um\core\Mail' ) ) { - get_email_template( $slug, $args ); + $raw_email_template = $this->get_email_template( $slug, $args ); $plain_email_template = strip_tags( $raw_email_template ); - if( $plain_email_template !== $raw_email_template ){ - $plain_email_template = preg_replace( array('/ /mi', '/^\s+/mi'), array(' ', ''), $plain_email_template ); + if ( $plain_email_template !== $raw_email_template ) { + $plain_email_template = preg_replace( array( '/ /mi', '/^\s+/mi' ), array( ' ', '' ), $plain_email_template ); } echo $plain_email_template; @@ -368,27 +335,23 @@ if ( ! class_exists( 'um\core\Mail' ) ) { $message = ob_get_clean(); /** - * UM hook + * Filters change email notification message content. * - * @type filter - * @title um_email_send_message_content - * @description Change email notification message content - * @input_vars - * [{"var":"$message","type":"string","desc":"Message Content"}, - * {"var":"$template","type":"string","desc":"Template Key"}, - * {"var":"$args","type":"string","desc":"Notification Arguments"}] - * @change_log - * ["Since: 2.0"] - * @usage - * - * @example - * Change email notification message content. + * function my_email_template_body_attrs( $message, $slug, $args ) { * // your code here * return $message; * } - * ?> + * add_filter( 'um_email_template_body_attrs', 'my_email_template_body_attrs', 10, 3 ); */ $message = apply_filters( 'um_email_send_message_content', $message, $slug, $args ); @@ -415,10 +378,7 @@ if ( ! class_exists( 'um\core\Mail' ) ) { return; } /** - * Filters for disabling email notifications programmatically. - * - * @since 2.6.1 - * @hook um_disable_email_notification_sending + * Filters disabling email notifications programmatically. * * @param {bool} $disabled Does an email is disabled programmatically. By default it is false. * @param {string} $email Email address for sending. @@ -426,6 +386,16 @@ if ( ! class_exists( 'um\core\Mail' ) ) { * @param {array} $args Arguments for sending email. * * @return {bool} `true` if email is disabled programmatically. + * + * @since 2.6.1 + * @hook um_disable_email_notification_sending + * + * @example Disabling email notifications programmatically. + * function my_um_disable_email_notification_sending( $disabled, $email, $template, $args ) { + * // your code here + * return $disabled; + * } + * add_filter( 'um_disable_email_notification_sending', 'my_um_disable_email_notification_sending', 10, 4 ); */ $hook_disabled = apply_filters( 'um_disable_email_notification_sending', false, $email, $template, $args ); if ( false !== $hook_disabled ) { @@ -443,26 +413,22 @@ if ( ! class_exists( 'um\core\Mail' ) ) { add_filter( 'um_template_tags_replaces_hook', array( UM()->mail(), 'add_replace_placeholder' ), 10, 1 ); /** - * UM hook + * Filters email notification subject. * - * @type filter - * @title um_email_send_subject - * @description Change email notification subject - * @input_vars - * [{"var":"$subject","type":"string","desc":"Subject"}, - * {"var":"$key","type":"string","desc":"Template Key"}] - * @change_log - * ["Since: 2.0"] - * @usage - * - * @example - * Change email notification subject. * function my_email_send_subject( $subject, $key ) { * // your code here - * return $paths; + * return $subject; * } - * ?> + * add_filter( 'um_email_send_subject', 'my_email_send_subject', 10, 2 ); */ $subject = apply_filters( 'um_email_send_subject', UM()->options()->get( $template . '_sub' ), $template ); $subject = wp_unslash( um_convert_tags( $subject, $args ) ); @@ -490,25 +456,21 @@ if ( ! class_exists( 'um\core\Mail' ) ) { */ public function get_template_filename( $template_name ) { /** - * UM hook + * Filters email notification template name. * - * @type filter - * @title um_change_email_template_file - * @description Change email notification template path - * @input_vars - * [{"var":"$template_name","type":"string","desc":"Template Name"}] - * @change_log - * ["Since: 2.0"] - * @usage - * - * @example - * Change email notification template path. + * function my_change_email_template_file( $template_name ) { * // your code here - * return $template; + * return $template_name; * } - * ?> + * add_filter( 'um_change_email_template_file', 'my_change_email_template_file' ); */ return apply_filters( 'um_change_email_template_file', $template_name ); } @@ -568,16 +530,23 @@ if ( ! class_exists( 'um\core\Mail' ) ) { } /** - * Filters an expected path for email template in theme or plugin. + * Filters expected path for email template in theme or plugin. + * + * @param {string} $template_path Expected template path. + * @param {string} $location Where to search 'theme||plugin. + * @param {string} $template_name_file Expected filename. + * + * @return {string} Email template path. * * @since 2.6.1 * @hook um_email_get_template_file_path * - * @param {string} $template_path Expected template path. - * @param {string} $location Where to search 'theme||plugin'. - * @param {string} $template_name_file Expected filename. - * - * @return {string} Expected template path. + * @example Change expected path for email template in theme or plugin. + * function my_um_email_get_template_file_path( $template_path, $location, $template_name_file ) { + * // your code here + * return $template_path; + * } + * add_filter( 'um_email_get_template_file_path', 'my_um_email_get_template_file_path' ); */ return apply_filters( 'um_email_get_template_file_path', $template_path, $location, $template_name_file ); } From 8457c277632e101b1bb26a1f8c76e462fef08c90 Mon Sep 17 00:00:00 2001 From: ashubawork Date: Mon, 2 Oct 2023 14:54:45 +0300 Subject: [PATCH 60/81] - fix functions name --- includes/core/class-mail.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/includes/core/class-mail.php b/includes/core/class-mail.php index 65d229fb..e16f025a 100644 --- a/includes/core/class-mail.php +++ b/includes/core/class-mail.php @@ -182,11 +182,11 @@ if ( ! class_exists( 'um\core\Mail' ) ) { * @hook um_email_template_path * * @example Change email template location. - * function my_email_send_subject( $located, $slug, $args ) { + * function my_email_template_path( $located, $slug, $args ) { * // your code here * return $located; * } - * add_filter( 'um_email_template_path', 'my_email_send_subject', 10, 3 ); + * add_filter( 'um_email_template_path', 'my_email_template_path', 10, 3 ); */ $located = apply_filters( 'um_email_template_path', $located, $slug, $args ); @@ -347,11 +347,11 @@ if ( ! class_exists( 'um\core\Mail' ) ) { * @hook um_email_template_body_attrs * * @example Change email notification message content. - * function my_email_template_body_attrs( $message, $slug, $args ) { + * function my_um_email_send_message_content( $message, $slug, $args ) { * // your code here * return $message; * } - * add_filter( 'um_email_template_body_attrs', 'my_email_template_body_attrs', 10, 3 ); + * add_filter( 'um_email_send_message_content', 'my_um_email_send_message_content', 10, 3 ); */ $message = apply_filters( 'um_email_send_message_content', $message, $slug, $args ); From 6c4381baf6e5007aad8d44cbc177d9b992e4732e Mon Sep 17 00:00:00 2001 From: ashubawork Date: Mon, 2 Oct 2023 15:20:26 +0300 Subject: [PATCH 61/81] - fix typos --- includes/core/class-mail.php | 50 ++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/includes/core/class-mail.php b/includes/core/class-mail.php index e16f025a..278a658a 100644 --- a/includes/core/class-mail.php +++ b/includes/core/class-mail.php @@ -82,7 +82,7 @@ if ( ! class_exists( 'um\core\Mail' ) ) { * @since 2.0 * @hook um_email_templates_path_by_slug * - * @example Extends extend email templates path. + * @example Extends email templates path. * function my_email_templates_path_by_slug( $paths ) { * // your code here * return $paths; @@ -172,9 +172,9 @@ if ( ! class_exists( 'um\core\Mail' ) ) { /** * Filters change email template location. * - * @param {string} $located Template Location. - * @param {string} $slug Template Key. - * @param {array} $args Template settings. + * @param {string} $located Email template location. + * @param {string} $slug Email template slug. + * @param {array} $args Email template settings. * * @return {string} email template location. * @@ -254,10 +254,10 @@ if ( ! class_exists( 'um\core\Mail' ) ) { * Filters change email notification template header. * * @param {string} $header Email notification header. - * @param {string} $slug Email Template Key. - * @param {array} $args Email Template settings. + * @param {string} $slug Email template slug. + * @param {array} $args Email template settings. * - * @return {bool} Email notification header. + * @return {string} Email notification header. * * @since 2.0 * @hook um_email_template_html_formatting @@ -274,8 +274,8 @@ if ( ! class_exists( 'um\core\Mail' ) ) { /** * Action before email template body display. * - * @param {string} $slug Email Template Key. - * @param {array} $args Email Template settings. + * @param {string} $slug Email template slug. + * @param {array} $args Email template settings. * * @since 2.0 * @hook um_email_template_html_formatting @@ -292,16 +292,16 @@ if ( ! class_exists( 'um\core\Mail' ) ) { * Filters change email notification template body additional attributes. * * @param {string} $body_atts Email notification body attributes. - * @param {string} $slug Email Template Key. - * @param {array} $args Email Template settings. + * @param {string} $slug Email template slug. + * @param {array} $args Email template settings. * - * @return {bool} Email notification body attributes. + * @return {string} Email notification body attributes. * * @since 2.0 * @hook um_email_template_body_attrs * * @example Change email notification template body additional attributes. - * function my_email_template_body_attrs( $header, $slug, $args ) { + * function my_email_template_body_attrs( $body_atts, $slug, $args ) { * // your code here * return $body_atts; * } @@ -337,21 +337,21 @@ if ( ! class_exists( 'um\core\Mail' ) ) { /** * Filters change email notification message content. * - * @param {string} $message Message Content. - * @param {string} $slug Template Key. - * @param {array} $args Notification Arguments. + * @param {string} $message Message content. + * @param {string} $slug Template slug. + * @param {array} $args Notification arguments. * - * @return {bool} Message Content. + * @return {string} Message Content. * * @since 2.0 * @hook um_email_template_body_attrs * * @example Change email notification message content. - * function my_um_email_send_message_content( $message, $slug, $args ) { + * function my_email_send_message_content( $message, $slug, $args ) { * // your code here * return $message; * } - * add_filter( 'um_email_send_message_content', 'my_um_email_send_message_content', 10, 3 ); + * add_filter( 'um_email_send_message_content', 'my_email_send_message_content', 10, 3 ); */ $message = apply_filters( 'um_email_send_message_content', $message, $slug, $args ); @@ -391,11 +391,11 @@ if ( ! class_exists( 'um\core\Mail' ) ) { * @hook um_disable_email_notification_sending * * @example Disabling email notifications programmatically. - * function my_um_disable_email_notification_sending( $disabled, $email, $template, $args ) { + * function my_disable_email_notification_sending( $disabled, $email, $template, $args ) { * // your code here * return $disabled; * } - * add_filter( 'um_disable_email_notification_sending', 'my_um_disable_email_notification_sending', 10, 4 ); + * add_filter( 'um_disable_email_notification_sending', 'my_disable_email_notification_sending', 10, 4 ); */ $hook_disabled = apply_filters( 'um_disable_email_notification_sending', false, $email, $template, $args ); if ( false !== $hook_disabled ) { @@ -415,10 +415,10 @@ if ( ! class_exists( 'um\core\Mail' ) ) { /** * Filters email notification subject. * - * @param {string} $subject Email Subject. + * @param {string} $subject Email subject. * @param {string} $key Email template key. * - * @return {string} Email Subject. + * @return {string} Email subject. * * @since 2.6.1 * @hook um_email_send_subject @@ -542,11 +542,11 @@ if ( ! class_exists( 'um\core\Mail' ) ) { * @hook um_email_get_template_file_path * * @example Change expected path for email template in theme or plugin. - * function my_um_email_get_template_file_path( $template_path, $location, $template_name_file ) { + * function my_email_get_template_file_path( $template_path, $location, $template_name_file ) { * // your code here * return $template_path; * } - * add_filter( 'um_email_get_template_file_path', 'my_um_email_get_template_file_path' ); + * add_filter( 'um_email_get_template_file_path', 'my_email_get_template_file_path' ); */ return apply_filters( 'um_email_get_template_file_path', $template_path, $location, $template_name_file ); } From 5942a2828e7c22f9b2a3cd4899c57870fc310ba0 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Tue, 3 Oct 2023 01:29:19 +0300 Subject: [PATCH 62/81] - reviewed #1319; --- includes/core/class-mail.php | 164 ++++++++++++++++++++--------------- 1 file changed, 96 insertions(+), 68 deletions(-) diff --git a/includes/core/class-mail.php b/includes/core/class-mail.php index 278a658a..8bd1acd7 100644 --- a/includes/core/class-mail.php +++ b/includes/core/class-mail.php @@ -69,15 +69,15 @@ if ( ! class_exists( 'um\core\Mail' ) ) { } /** - * Init paths for email notifications + * Init paths for email notifications. */ public function init_paths() { /** * Filters extend email templates path. * - * @param {string} $paths email templates path. + * @param {array} $paths Email templates paths. * - * @return {string} email templates path. + * @return {array} Email templates paths. * * @since 2.0 * @hook um_email_templates_path_by_slug @@ -85,6 +85,7 @@ if ( ! class_exists( 'um\core\Mail' ) ) { * @example Extends email templates path. * function my_email_templates_path_by_slug( $paths ) { * // your code here + * $paths['{template_name}'] = '{template_path}'; * return $paths; * } * add_filter( 'um_email_templates_path_by_slug', 'my_email_templates_path_by_slug' ); @@ -93,7 +94,7 @@ if ( ! class_exists( 'um\core\Mail' ) ) { } /** - * Check blog ID on multisite, return '' if single site + * Check blog ID on multisite, return '' if single site. * * @return string */ @@ -133,20 +134,18 @@ if ( ! class_exists( 'um\core\Mail' ) ) { ); } - // If there isn't template at theme folder, get template file from plugin dir + // If there isn't template at theme folder, get template file from plugin dir. if ( ! $template ) { $path = ! empty( $this->path_by_slug[ $template_name ] ) ? $this->path_by_slug[ $template_name ] : UM_PATH . 'templates/email'; $template = trailingslashit( $path ) . $template_name . '.php'; } - - // Return what we found. /** - * Filters change email notification template path. + * Filters email notification template path. * - * @param {string} $template email notification template path. - * @param {string} $template_name email notification template name. + * @param {string} $template Email notification template path. + * @param {string} $template_name Email notification template name. * - * @return {string} email notification template path. + * @return {string} Email notification template path. * * @since 2.0 * @hook um_locate_email_template @@ -170,15 +169,15 @@ if ( ! class_exists( 'um\core\Mail' ) ) { $located = $this->locate_template( $slug ); /** - * Filters change email template location. + * Filters email template location. * * @param {string} $located Email template location. * @param {string} $slug Email template slug. * @param {array} $args Email template settings. * - * @return {string} email template location. + * @return {string} Email template location. * - * @since 2.0 + * @since 1.3.x * @hook um_email_template_path * * @example Change email template location. @@ -197,7 +196,7 @@ if ( ! class_exists( 'um\core\Mail' ) ) { ob_start(); /** - * Action before email template loading. + * Fires before email template loading. * * @param {string} $slug Email template slug. * @param {string} $located Email template location. @@ -210,14 +209,14 @@ if ( ! class_exists( 'um\core\Mail' ) ) { * function my_before_email_template_part( $slug, $located, $args ) { * // your code here * } - * add_filter( 'um_before_email_template_part', 'my_before_email_template_part', 10, 3 ); + * add_action( 'um_before_email_template_part', 'my_before_email_template_part', 10, 3 ); */ do_action( 'um_before_email_template_part', $slug, $located, $args ); - include( $located ); + include $located; /** - * Action after email template loading. + * Fires after email template loading. * * @param {string} $slug Email template slug. * @param {string} $located Email template location. @@ -230,19 +229,18 @@ if ( ! class_exists( 'um\core\Mail' ) ) { * function my_after_email_template_part( $slug, $located, $args ) { * // your code here * } - * add_filter( 'um_after_email_template_part', 'my_after_email_template_part', 10, 3 ); + * add_action( 'um_after_email_template_part', 'my_after_email_template_part', 10, 3 ); */ do_action( 'um_after_email_template_part', $slug, $located, $args ); return ob_get_clean(); } - /** - * Prepare email template to send + * Prepare email template to send. * - * @param $slug - * @param $args + * @param string $slug + * @param array $args * @return mixed|string */ public function prepare_template( $slug, $args = array() ) { @@ -251,11 +249,11 @@ if ( ! class_exists( 'um\core\Mail' ) ) { if ( UM()->options()->get( 'email_html' ) ) { /** - * Filters change email notification template header. + * Filters email notification template header. * - * @param {string} $header Email notification header. - * @param {string} $slug Email template slug. - * @param {array} $args Email template settings. + * @param {string} $header Email notification header. It equals `` by default. + * @param {string} $slug Email template slug. + * @param {array} $args Email template settings. * * @return {string} Email notification header. * @@ -272,26 +270,26 @@ if ( ! class_exists( 'um\core\Mail' ) ) { echo apply_filters( 'um_email_template_html_formatting', '', $slug, $args ); /** - * Action before email template body display. + * Fires before email template body display. * - * @param {string} $slug Email template slug. - * @param {array} $args Email template settings. + * @param {string} $slug Email template slug. + * @param {array} $args Email template settings. * * @since 2.0 - * @hook um_email_template_html_formatting + * @hook um_before_email_template_body * * @example Action before email template body display. * function my_before_email_template_body( $slug, $args ) { * // your code here * } - * add_filter( 'um_before_email_template_body', 'my_before_email_template_body', 10, 2 ); + * add_action( 'um_before_email_template_body', 'my_before_email_template_body', 10, 2 ); */ do_action( 'um_before_email_template_body', $slug, $args ); /** - * Filters change email notification template body additional attributes. + * Filters email notification template body additional attributes. * - * @param {string} $body_atts Email notification body attributes. + * @param {string} $body_attrs Email notification body attributes. * @param {string} $slug Email template slug. * @param {array} $args Email template settings. * @@ -301,17 +299,16 @@ if ( ! class_exists( 'um\core\Mail' ) ) { * @hook um_email_template_body_attrs * * @example Change email notification template body additional attributes. - * function my_email_template_body_attrs( $body_atts, $slug, $args ) { + * function my_email_template_body_attrs( $body_attrs, $slug, $args ) { * // your code here - * return $body_atts; + * return $body_attrs; * } * add_filter( 'um_email_template_body_attrs', 'my_email_template_body_attrs', 10, 3 ); */ $body_attrs = apply_filters( 'um_email_template_body_attrs', 'style="background: #f2f2f2;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;"', $slug, $args ); ?> - - > + > get_email_template( $slug, $args ); ?> @@ -321,10 +318,10 @@ if ( ! class_exists( 'um\core\Mail' ) ) { get_email_template( $slug, $args ); - $plain_email_template = strip_tags( $raw_email_template ); + $plain_email_template = wp_strip_all_tags( $raw_email_template ); if ( $plain_email_template !== $raw_email_template ) { $plain_email_template = preg_replace( array( '/ /mi', '/^\s+/mi' ), array( ' ', '' ), $plain_email_template ); } @@ -333,18 +330,17 @@ if ( ! class_exists( 'um\core\Mail' ) ) { } $message = ob_get_clean(); - /** - * Filters change email notification message content. + * Filters email notification message content. * - * @param {string} $message Message content. - * @param {string} $slug Template slug. - * @param {array} $args Notification arguments. + * @param {string} $message Message content. + * @param {string} $slug Template slug. + * @param {array} $args Notification arguments. * * @return {string} Message Content. * * @since 2.0 - * @hook um_email_template_body_attrs + * @hook um_email_send_message_content * * @example Change email notification message content. * function my_email_send_message_content( $message, $slug, $args ) { @@ -355,10 +351,10 @@ if ( ! class_exists( 'um\core\Mail' ) ) { */ $message = apply_filters( 'um_email_send_message_content', $message, $slug, $args ); - add_filter( 'um_template_tags_patterns_hook', array( &$this, 'add_placeholder' ), 10, 1 ); - add_filter( 'um_template_tags_replaces_hook', array( &$this, 'add_replace_placeholder' ), 10, 1 ); + add_filter( 'um_template_tags_patterns_hook', array( &$this, 'add_placeholder' ) ); + add_filter( 'um_template_tags_replaces_hook', array( &$this, 'add_replace_placeholder' ) ); - // Convert tags in email template + // Convert tags in email template. return um_convert_tags( $message, $args ); } @@ -402,6 +398,22 @@ if ( ! class_exists( 'um\core\Mail' ) ) { return; } + /** + * Fires before email notification sending. + * + * @param {string} $email Email template slug. + * @param {string} $template Email template settings. + * @param {array} $args Arguments for sending email. + * + * @since 2.0 + * @hook um_before_email_notification_sending + * + * @example Action before email notification sending. + * function my_before_email_notification_sending( $email, $template, $args ) { + * // your code here + * } + * add_action( 'um_before_email_notification_sending', 'my_before_email_notification_sending', 10, 3 ); + */ do_action( 'um_before_email_notification_sending', $email, $template, $args ); $this->attachments = array(); @@ -409,14 +421,14 @@ if ( ! class_exists( 'um\core\Mail' ) ) { $mail_from_addr = UM()->options()->get( 'mail_from_addr' ) ? UM()->options()->get( 'mail_from_addr' ) : get_bloginfo( 'admin_email' ); $this->headers = 'From: ' . stripslashes( $mail_from ) . ' <' . $mail_from_addr . '>' . "\r\n"; - add_filter( 'um_template_tags_patterns_hook', array( UM()->mail(), 'add_placeholder' ), 10, 1 ); - add_filter( 'um_template_tags_replaces_hook', array( UM()->mail(), 'add_replace_placeholder' ), 10, 1 ); + add_filter( 'um_template_tags_patterns_hook', array( UM()->mail(), 'add_placeholder' ) ); + add_filter( 'um_template_tags_replaces_hook', array( UM()->mail(), 'add_replace_placeholder' ) ); /** * Filters email notification subject. * - * @param {string} $subject Email subject. - * @param {string} $key Email template key. + * @param {string} $subject Email subject. + * @param {string} $key Email template key. * * @return {string} Email subject. * @@ -443,9 +455,25 @@ if ( ! class_exists( 'um\core\Mail' ) ) { $this->headers .= "Content-Type: text/plain\r\n"; } - // Send mail + // Send mail. wp_mail( $email, $this->subject, $this->message, $this->headers, $this->attachments ); + /** + * Fires after email notification sending. + * + * @param {string} $email Email template slug. + * @param {string} $template Email template settings. + * @param {array} $args Arguments for sending email. + * + * @since 2.0 + * @hook um_after_email_notification_sending + * + * @example Action after email notification sending. + * function my_after_email_notification_sending( $email, $template, $args ) { + * // your code here + * } + * add_action( 'um_after_email_notification_sending', 'my_after_email_notification_sending', 10, 3 ); + */ do_action( 'um_after_email_notification_sending', $email, $template, $args ); } @@ -458,7 +486,7 @@ if ( ! class_exists( 'um\core\Mail' ) ) { /** * Filters email notification template name. * - * @param {string} $template_name Email template Name. + * @param {string} $template_name Email template Name. * * @return {string} Email template Name. * @@ -497,9 +525,9 @@ if ( ! class_exists( 'um\core\Mail' ) ) { // Return what we found. if ( get_template_directory() === get_stylesheet_directory() ) { return ! $template ? false : true; - } else { - return strstr( $template, get_stylesheet_directory() ); } + + return strstr( $template, get_stylesheet_directory() ); } /** @@ -532,9 +560,9 @@ if ( ! class_exists( 'um\core\Mail' ) ) { /** * Filters expected path for email template in theme or plugin. * - * @param {string} $template_path Expected template path. - * @param {string} $location Where to search 'theme||plugin. - * @param {string} $template_name_file Expected filename. + * @param {string} $template_path Expected template path. + * @param {string} $location Where to search 'theme||plugin'. + * @param {string} $template_name_file Expected filename. * * @return {string} Email template path. * @@ -552,7 +580,7 @@ if ( ! class_exists( 'um\core\Mail' ) ) { } /** - * Copy template to the theme + * Copy template to the theme. * * @param string $template * @return bool @@ -575,15 +603,15 @@ if ( ! class_exists( 'um\core\Mail' ) ) { if ( file_exists( $plugin_template_path ) && copy( $plugin_template_path, $theme_template_path ) ) { return true; - } else { - return false; } + + return false; } /** - * UM Placeholders for site url, admin email, submit registration + * UM Placeholders for site url, admin email, submit registration. * - * @param $placeholders + * @param array $placeholders * * @return array */ @@ -599,9 +627,9 @@ if ( ! class_exists( 'um\core\Mail' ) ) { } /** - * UM Replace Placeholders for site url, admin email, submit registration + * UM Replace Placeholders for site url, admin email, submit registration. * - * @param $replace_placeholders + * @param array $replace_placeholders * * @return array */ From 47e97ceb5958e5d73912653c835a2512e7c36a55 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Tue, 3 Oct 2023 13:30:02 +0300 Subject: [PATCH 63/81] - updated hookdocs; - partially reviewed site health functionality; - hide notifications tab setting when there aren't any possible notifications for disabling in User Account (#1318) --- includes/admin/class-site-health.php | 212 +++++++++-------- includes/admin/core/class-admin-settings.php | 231 +++++++++---------- includes/class-config.php | 27 +++ includes/core/class-account.php | 88 ++++--- includes/core/um-actions-account.php | 14 +- templates/account.php | 68 +++--- templates/login.php | 139 +---------- templates/password-change.php | 29 +-- templates/password-reset.php | 29 +-- templates/register.php | 143 ++---------- 10 files changed, 365 insertions(+), 615 deletions(-) diff --git a/includes/admin/class-site-health.php b/includes/admin/class-site-health.php index 3e04df1d..4e4c13cf 100644 --- a/includes/admin/class-site-health.php +++ b/includes/admin/class-site-health.php @@ -55,7 +55,7 @@ class Site_Health { } private function get_member_directories() { - $query = new \WP_Query; + $query = new \WP_Query(); $member_directories = $query->query( array( 'post_type' => 'um_directory', @@ -95,19 +95,27 @@ class Site_Health { 'fields' => array(), ); - // Pages settings - $pages = apply_filters( - 'um_debug_information_pages', - array( - 'User' => null !== UM()->options()->get( 'core_user' ) ? get_the_title( UM()->options()->get( 'core_user' ) ) . ' (ID#' . UM()->options()->get( 'core_user' ) . ') | ' . get_permalink( UM()->options()->get( 'core_user' ) ) : $labels['nopages'], - 'Login' => null !== UM()->options()->get( 'core_login' ) ? get_the_title( UM()->options()->get( 'core_login' ) ) . ' (ID#' . UM()->options()->get( 'core_login' ) . ') | ' . get_permalink( UM()->options()->get( 'core_login' ) ) : $labels['nopages'], - 'Register' => null !== UM()->options()->get( 'core_register' ) ? get_the_title( UM()->options()->get( 'core_register' ) ) . ' (ID#' . UM()->options()->get( 'core_register' ) . ') | ' . get_permalink( UM()->options()->get( 'core_register' ) ) : $labels['nopages'], - 'Members' => null !== UM()->options()->get( 'core_members' ) ? get_the_title( UM()->options()->get( 'core_members' ) ) . ' (ID#' . UM()->options()->get( 'core_members' ) . ') | ' . get_permalink( UM()->options()->get( 'core_members' ) ) : $labels['nopages'], - 'Logout' => null !== UM()->options()->get( 'core_logout' ) ? get_the_title( UM()->options()->get( 'core_logout' ) ) . ' (ID#' . UM()->options()->get( 'core_logout' ) . ') | ' . get_permalink( UM()->options()->get( 'core_logout' ) ) : $labels['nopages'], - 'Account' => null !== UM()->options()->get( 'core_account' ) ? get_the_title( UM()->options()->get( 'core_account' ) ) . ' (ID#' . UM()->options()->get( 'core_account' ) . ') | ' . get_permalink( UM()->options()->get( 'core_account' ) ) : $labels['nopages'], - 'Password reset' => null !== UM()->options()->get( 'core_password' ) ? get_the_title( UM()->options()->get( 'core_password-reset' ) ) . ' (ID#' . UM()->options()->get( 'core_password-reset' ) . ') | ' . get_permalink( UM()->options()->get( 'core_password-reset' ) ) : $labels['nopages'], - ) - ); + // Pages settings. + $pages = array(); + $predefined_pages = UM()->config()->core_pages; + foreach ( $predefined_pages as $page_s => $page ) { + $page_id = UM()->options()->get_core_page_id( $page_s ); + $page_title = ! empty( $page['title'] ) ? $page['title'] : ''; + if ( empty( $page_title ) ) { + continue; + } + + $predefined_page_id = UM()->options()->get( $page_id ); + + if ( empty( $predefined_page_id ) ) { + $pages[ $page_title ] = $labels['nopages']; + continue; + } + // translators: %1$s is a predefined page title; %2$d is a predefined page ID; %3$s is a predefined page permalink. + $pages[ $page_title ] = sprintf( __( '%1$s (ID#%2$d) | %3$s', 'ultimate-member' ), get_the_title( $predefined_page_id ), $predefined_page_id, get_permalink( $predefined_page_id ) ); + } + + $pages = apply_filters( 'um_debug_information_pages', $pages ); $pages_settings = array( 'um-pages' => array( @@ -117,24 +125,8 @@ class Site_Health { ); // User settings - $permalink_base = array( - 'user_login' => __( 'Username', 'ultimate-member' ), - 'name' => __( 'First and Last Name with \'.\'', 'ultimate-member' ), - 'name_dash' => __( 'First and Last Name with \'-\'', 'ultimate-member' ), - 'name_plus' => __( 'First and Last Name with \'+\'', 'ultimate-member' ), - 'user_id' => __( 'User ID', 'ultimate-member' ), - ); - $display_name = 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' ), - ); + $permalink_base = UM()->config()->permalink_base_options; + $display_name = UM()->config()->display_name_options; $user_settings = array( 'um-permalink_base' => array( @@ -183,7 +175,33 @@ class Site_Health { ), ); - if ( 1 === absint( UM()->options()->get( 'use_gravatars' ) ) ) { + if ( 'custom_meta' === UM()->options()->get( 'permalink_base' ) ) { + $user_settings = UM()->array_insert_before( + $user_settings, + 'um-display_name', + array( + 'um-permalink_base_custom_meta' => array( + 'label' => __( 'Profile Permalink Base Custom Meta Key', 'ultimate-member' ), + 'value' => UM()->options()->get( 'permalink_base_custom_meta' ), + ), + ) + ); + } + + if ( 'field' === UM()->options()->get( 'display_name' ) ) { + $user_settings = UM()->array_insert_before( + $user_settings, + 'um-author_redirect', + array( + 'um-display_name_field' => array( + 'label' => __( 'Display Name Custom Field(s)', 'ultimate-member' ), + 'value' => UM()->options()->get( 'display_name_field' ), + ), + ) + ); + } + + if ( UM()->options()->get( 'use_gravatars' ) ) { $gravatar_options = array( 'default' => __( 'Default', 'ultimate-member' ), '404' => __( '404 ( File Not Found response )', 'ultimate-member' ), @@ -209,37 +227,46 @@ class Site_Health { // Account settings $account_settings = array( - 'um-account_tab_password' => array( + 'um-account_tab_password' => array( 'label' => __( 'Password Account Tab', 'ultimate-member' ), 'value' => UM()->options()->get( 'account_tab_password' ) ? $labels['yes'] : $labels['no'], ), - 'um-account_tab_privacy' => array( + 'um-account_tab_privacy' => array( 'label' => __( 'Privacy Account Tab', 'ultimate-member' ), 'value' => UM()->options()->get( 'account_tab_privacy' ) ? $labels['yes'] : $labels['no'], ), - 'um-account_tab_notifications' => array( - 'label' => __( 'Notifications Account Tab', 'ultimate-member' ), - 'value' => UM()->options()->get( 'account_tab_notifications' ) ? $labels['yes'] : $labels['no'], - ), - 'um-account_tab_delete' => array( - 'label' => __( 'Delete Account Tab', 'ultimate-member' ), - 'value' => UM()->options()->get( 'account_tab_delete' ) ? $labels['yes'] : $labels['no'], - ), - 'um-delete_account_text' => array( - 'label' => __( 'Account Deletion Custom Text', 'ultimate-member' ), - 'value' => UM()->options()->get( 'delete_account_text' ), - ), - 'um-delete_account_no_pass_required_text' => array( - 'label' => __( 'Account Deletion without password Custom Text', 'ultimate-member' ), - 'value' => UM()->options()->get( 'delete_account_no_pass_required_text' ), - ), - 'um-account_name' => array( - 'label' => __( 'Add a First & Last Name fields', 'ultimate-member' ), - 'value' => UM()->options()->get( 'account_name' ) ? $labels['yes'] : $labels['no'], - ), ); - if ( 1 === absint( UM()->options()->get( 'account_name' ) ) ) { + if ( false !== UM()->account()->is_notifications_tab_visible() ) { + $account_settings['um-account_tab_notifications'] = array( + 'label' => __( 'Notifications Account Tab', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_tab_notifications' ) ? $labels['yes'] : $labels['no'], + ); + } + + $account_settings = array_merge( + $account_settings, + array( + 'um-account_tab_delete' => array( + 'label' => __( 'Delete Account Tab', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_tab_delete' ) ? $labels['yes'] : $labels['no'], + ), + 'um-delete_account_text' => array( + 'label' => __( 'Account Deletion Custom Text', 'ultimate-member' ), + 'value' => UM()->options()->get( 'delete_account_text' ), + ), + 'um-delete_account_no_pass_required_text' => array( + 'label' => __( 'Account Deletion without password Custom Text', 'ultimate-member' ), + 'value' => UM()->options()->get( 'delete_account_no_pass_required_text' ), + ), + 'um-account_name' => array( + 'label' => __( 'Add a First & Last Name fields', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_name' ) ? $labels['yes'] : $labels['no'], + ), + ) + ); + + if ( UM()->options()->get( 'account_name' ) ) { $account_settings['um-account_name_disable'] = array( 'label' => __( 'Disable First & Last name field editing', 'ultimate-member' ), 'value' => UM()->options()->get( 'account_name_disable' ) ? $labels['yes'] : $labels['no'], @@ -250,12 +277,22 @@ class Site_Health { ); } + $account_settings['um-account_email'] = array( + 'label' => __( 'Allow users to change e-mail', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_email' ) ? $labels['yes'] : $labels['no'], + ); + + $account_settings['um-account_general_password'] = array( + 'label' => __( 'Password is required?', 'ultimate-member' ), + 'value' => UM()->options()->get( 'account_general_password' ) ? $labels['yes'] : $labels['no'], + ); + $account_settings['um-account_hide_in_directory'] = array( 'label' => __( 'Allow users to hide their profiles from directory', 'ultimate-member' ), 'value' => UM()->options()->get( 'account_hide_in_directory' ) ? $labels['yes'] : $labels['no'], ); - if ( 1 === absint( UM()->options()->get( 'account_name' ) ) ) { + if ( UM()->options()->get( 'account_hide_in_directory' ) ) { $account_settings['um-account_hide_in_directory_default'] = array( 'label' => __( 'Hide profiles from directory by default', 'ultimate-member' ), 'value' => UM()->options()->get( 'account_hide_in_directory_default' ), @@ -328,27 +365,27 @@ class Site_Health { } } + $accessible = absint( UM()->options()->get( 'accessible' ) ); + $restrict_settings = array( 'um-accessible' => array( 'label' => __( 'Global Site Access', 'ultimate-member' ), - 'value' => 0 === UM()->options()->get( 'accessible' ) ? __( 'Site accessible to Everyone', 'ultimate-member' ) : __( 'Site accessible to Logged In Users', 'ultimate-member' ), + 'value' => 0 === $accessible ? __( 'Site accessible to Everyone', 'ultimate-member' ) : __( 'Site accessible to Logged In Users', 'ultimate-member' ), ), ); - if ( 2 === absint( UM()->options()->get( 'accessible' ) ) ) { + if ( 2 === $accessible ) { $exclude_uris = UM()->options()->get( 'access_exclude_uris' ); $exclude_uris_list = ''; if ( ! empty( $exclude_uris ) ) { - foreach ( $exclude_uris as $key => $url ) { - $exclude_uris_list = empty( $exclude_uris_list ) ? $url : $exclude_uris_list . ', ' . $url; - } + $exclude_uris_list = implode( ', ', $exclude_uris ); } $restrict_settings['um-access_redirect'] = array( 'label' => __( 'Custom Redirect URL', 'ultimate-member' ), 'value' => UM()->options()->get( 'access_redirect' ), ); $restrict_settings['um-access_exclude_uris'] = array( - 'label' => __( 'Account Deletion Text', 'ultimate-member' ), + 'label' => __( 'Exclude the following URLs', 'ultimate-member' ), 'value' => $exclude_uris_list, ); $restrict_settings['um-home_page_accessible'] = array( @@ -365,7 +402,7 @@ class Site_Health { 'label' => __( 'Restricted Content Titles', 'ultimate-member' ), 'value' => UM()->options()->get( 'restricted_post_title_replace' ) ? $labels['yes'] : $labels['no'], ); - if ( 1 === absint( UM()->options()->get( 'restricted_post_title_replace' ) ) ) { + if ( UM()->options()->get( 'restricted_post_title_replace' ) ) { $restrict_settings['um-restricted_access_post_title'] = array( 'label' => __( 'Restricted Content Title Text', 'ultimate-member' ), 'value' => stripslashes( UM()->options()->get( 'restricted_access_post_title' ) ), @@ -380,7 +417,7 @@ class Site_Health { 'label' => __( 'Enable the "Content Restriction" settings for the Gutenberg Blocks', 'ultimate-member' ), 'value' => UM()->options()->get( 'restricted_blocks' ) ? $labels['yes'] : $labels['no'], ); - if ( 1 === absint( UM()->options()->get( 'restricted_blocks' ) ) ) { + if ( UM()->options()->get( 'restricted_blocks' ) ) { $restrict_settings['um-restricted_block_message'] = array( 'label' => __( 'Restricted Access Block Message', 'ultimate-member' ), 'value' => stripslashes( UM()->options()->get( 'restricted_block_message' ) ), @@ -421,7 +458,7 @@ class Site_Health { 'value' => stripslashes( $blocked_emails ), ); $access_other_settings['um-blocked_words'] = array( - 'label' => __( 'Banned Usernames', 'ultimate-member' ), + 'label' => __( 'Blacklist Words', 'ultimate-member' ), 'value' => stripslashes( $blocked_words ), ); $access_other_settings['um-allowed_choice_callbacks'] = array( @@ -455,14 +492,16 @@ class Site_Health { $emails = UM()->config()->email_notifications; foreach ( $emails as $key => $email ) { - if ( 1 === absint( UM()->options()->get( $key . '_on' ) ) ) { + if ( UM()->options()->get( $key . '_on' ) ) { $email_settings[ 'um-' . $key ] = array( - 'label' => $email['title'] . __( ' Subject', 'ultimate-member' ), + // translators: %s is email template title. + 'label' => sprintf( __( '"%s" Subject', 'ultimate-member' ), $email['title'] ), 'value' => UM()->options()->get( $key . '_sub' ), ); $email_settings[ 'um-theme_' . $key ] = array( - 'label' => __( 'Template ', 'ultimate-member' ) . $email['title'] . __( ' in theme?', 'ultimate-member' ), + // translators: %s is email template title. + 'label' => sprintf( __( 'Template "%s" in theme?', 'ultimate-member' ), $email['title'] ), 'value' => '' !== locate_template( array( 'ultimate-member/emails/' . $key . '.php' ) ) ? $labels['yes'] : $labels['no'], ); } @@ -484,10 +523,15 @@ class Site_Health { 'right' => __( 'Right aligned', 'ultimate-member' ), ); + $profile_templates = UM()->shortcodes()->get_templates( 'profile' ); + $profile_template_key = UM()->options()->get( 'profile_template' ); + $profile_template_title = array_key_exists( $profile_template_key, $profile_templates ) ? $profile_templates[ $profile_template_key ] : __( 'No template name', 'ultimate-member' ); + $appearance_settings = array( 'um-profile_template' => array( 'label' => __( 'Profile Default Template', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_template' ), + // translators: %1$s - profile template name, %2$s - profile template filename + 'value' => sprintf( __( '%1$s (filename: %2$s.php)', 'ultimate-member' ), $profile_template_title, $profile_template_key ), ), 'um-profile_max_width' => array( 'label' => __( 'Profile Maximum Width', 'ultimate-member' ), @@ -2149,34 +2193,6 @@ class Site_Health { } } - // Active extensions - $plugins = get_plugins(); - $active_plugins = get_option( 'active_plugins', array() ); - $active_exts = array(); - - foreach ( $plugins as $plugin_path => $plugin ) { - if ( strpos( $plugin_path, 'um-' ) === false ) { - - continue; - } - if ( ! in_array( $plugin_path, $active_plugins, true ) ) { - continue; - } - $name = str_replace( 'Ultimate Member -', '', $plugin['Name'] ); - $active_exts[] = $name . ': ' . $plugin['Version'] . "\n"; - } - - $info['ultimate-member-extensions'] = array( - 'label' => __( 'Ultimate Member Active Extensions', 'ultimate-member' ), - 'description' => __( 'This debug information about active extensions.', 'ultimate-member' ), - 'fields' => array( - 'um-extensions' => array( - 'label' => __( 'Active extensions', 'ultimate-member' ), - 'value' => $active_exts, - ), - ), - ); - return $info; } } diff --git a/includes/admin/core/class-admin-settings.php b/includes/admin/core/class-admin-settings.php index 0928738a..0f4bb2bd 100644 --- a/includes/admin/core/class-admin-settings.php +++ b/includes/admin/core/class-admin-settings.php @@ -293,7 +293,6 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { ); } - $settings_map[ $page_id ] = array( 'sanitize' => 'absint', ); @@ -709,9 +708,6 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { 'account_tab_privacy' => array( 'sanitize' => 'bool', ), - 'account_tab_notifications' => array( - 'sanitize' => 'bool', - ), 'account_tab_delete' => array( 'sanitize' => 'bool', ), @@ -967,6 +963,115 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { ) ); + $account_fields = array( + array( + 'id' => 'account_tab_password', + 'type' => 'checkbox', + 'label' => __( 'Password Account Tab', 'ultimate-member' ), + 'tooltip' => __( 'Enable/disable the Password account tab in account page', 'ultimate-member' ), + ), + array( + 'id' => 'account_tab_privacy', + 'type' => 'checkbox', + 'label' => __( 'Privacy Account Tab', 'ultimate-member' ), + 'tooltip' => __( 'Enable/disable the Privacy account tab in account page', 'ultimate-member' ), + ), + ); + + if ( false !== UM()->account()->is_notifications_tab_visible() ) { + $account_fields[] = array( + 'id' => 'account_tab_notifications', + 'type' => 'checkbox', + 'label' => __( 'Notifications Account Tab', 'ultimate-member' ), + 'tooltip' => __( 'Enable/disable the Notifications account tab in account page', 'ultimate-member' ), + ); + + $settings_map['account_tab_notifications'] = array( + 'sanitize' => 'bool', + ); + } + + $account_fields = array_merge( + $account_fields, + array( + array( + 'id' => 'account_tab_delete', + 'type' => 'checkbox', + 'label' => __( 'Delete Account Tab', 'ultimate-member' ), + 'tooltip' => __( 'Enable/disable the Delete account tab in account page', 'ultimate-member' ), + ), + array( + 'id' => 'delete_account_text', + 'type' => 'textarea', // bug with wp 4.4? should be editor + 'label' => __( 'Account Deletion Custom Text', 'ultimate-member' ), + 'tooltip' => __( 'This is custom text that will be displayed to users before they delete their accounts from your site when password is required.', 'ultimate-member' ), + 'args' => array( + 'textarea_rows' => 6, + ), + ), + array( + 'id' => 'delete_account_no_pass_required_text', + 'type' => 'textarea', + 'label' => __( 'Account Deletion without password Custom Text', 'ultimate-member' ), + 'tooltip' => __( 'This is custom text that will be displayed to users before they delete their accounts from your site when password isn\'t required.', 'ultimate-member' ), + 'args' => array( + 'textarea_rows' => 6, + ), + ), + array( + 'id' => 'account_name', + 'type' => 'checkbox', + 'label' => __( 'Add a First & Last Name fields', 'ultimate-member' ), + 'tooltip' => __( 'Whether to enable these fields on the user account page by default or hide them.', 'ultimate-member' ), + ), + array( + 'id' => 'account_name_disable', + 'type' => 'checkbox', + 'label' => __( 'Disable First & Last Name fields', 'ultimate-member' ), + 'tooltip' => __( 'Whether to allow users changing their first and last name in account page.', 'ultimate-member' ), + 'conditional' => array( 'account_name', '=', '1' ), + ), + array( + 'id' => 'account_name_require', + 'type' => 'checkbox', + 'label' => __( 'Require First & Last Name', 'ultimate-member' ), + 'tooltip' => __( 'Require first and last name?', 'ultimate-member' ), + 'conditional' => array( 'account_name', '=', '1' ), + ), + array( + 'id' => 'account_email', + 'type' => 'checkbox', + 'label' => __( 'Allow users to change e-mail', 'ultimate-member' ), + 'tooltip' => __( 'Whether to allow users changing their email in account page.', 'ultimate-member' ), + ), + array( + 'id' => 'account_general_password', + 'type' => 'checkbox', + 'label' => __( 'Password is required?', 'ultimate-member' ), + 'tooltip' => __( 'Password is required to save account data.', 'ultimate-member' ), + ), + array( + 'id' => 'account_hide_in_directory', + 'type' => 'checkbox', + 'label' => __( 'Allow users to hide their profiles from directory', 'ultimate-member' ), + 'tooltip' => __( 'Whether to allow users changing their profile visibility from member directory in account page.', 'ultimate-member' ), + 'conditional' => array( 'account_tab_privacy', '=', '1' ), + ), + array( + 'id' => 'account_hide_in_directory_default', + 'type' => 'select', + 'label' => __( 'Hide profiles from directory by default', 'ultimate-member' ), + 'tooltip' => __( 'Set default value for the "Hide my profile from directory" option', 'ultimate-member' ), + 'options' => array( + 'No' => __( 'No', 'ultimate-member' ), + 'Yes' => __( 'Yes', 'ultimate-member' ), + ), + 'size' => 'small', + 'conditional' => array( 'account_hide_in_directory', '=', '1' ), + ), + ) + ); + $this->settings_map = apply_filters( 'um_settings_map', $settings_map ); /** @@ -1009,15 +1114,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { 'label' => __( 'Profile Permalink Base', 'ultimate-member' ), // translators: %s: Profile page URL 'tooltip' => sprintf( __( 'Here you can control the permalink structure of the user profile URL globally e.g. %susername/', 'ultimate-member' ), trailingslashit( um_get_core_page( 'user' ) ) ), - 'options' => array( - 'user_login' => __( 'Username', 'ultimate-member' ), - 'name' => __( 'First and Last Name with \'.\'', 'ultimate-member' ), - 'name_dash' => __( 'First and Last Name with \'-\'', 'ultimate-member' ), - 'name_plus' => __( 'First and Last Name with \'+\'', 'ultimate-member' ), - 'user_id' => __( 'User ID', 'ultimate-member' ), - 'hash' => __( 'Unique hash string', 'ultimate-member' ), - 'custom_meta' => __( 'Custom usermeta', 'ultimate-member' ), - ), + 'options' => UM()->config()->permalink_base_options, 'placeholder' => __( 'Select...', 'ultimate-member' ), ), array( @@ -1034,17 +1131,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { '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' ), - ), + 'options' => UM()->config()->display_name_options, 'placeholder' => __( 'Select...', 'ultimate-member' ), ), array( @@ -1146,101 +1233,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { ), 'account' => array( 'title' => __( 'Account', 'ultimate-member' ), - 'fields' => array( - array( - 'id' => 'account_tab_password', - 'type' => 'checkbox', - 'label' => __( 'Password Account Tab', 'ultimate-member' ), - 'tooltip' => __( 'Enable/disable the Password account tab in account page', 'ultimate-member' ), - ), - array( - 'id' => 'account_tab_privacy', - 'type' => 'checkbox', - 'label' => __( 'Privacy Account Tab', 'ultimate-member' ), - 'tooltip' => __( 'Enable/disable the Privacy account tab in account page', 'ultimate-member' ), - ), - array( - 'id' => 'account_tab_notifications', - 'type' => 'checkbox', - 'label' => __( 'Notifications Account Tab', 'ultimate-member' ), - 'tooltip' => __( 'Enable/disable the Notifications account tab in account page', 'ultimate-member' ), - ), - array( - 'id' => 'account_tab_delete', - 'type' => 'checkbox', - 'label' => __( 'Delete Account Tab', 'ultimate-member' ), - 'tooltip' => __( 'Enable/disable the Delete account tab in account page', 'ultimate-member' ), - ), - array( - 'id' => 'delete_account_text', - 'type' => 'textarea', // bug with wp 4.4? should be editor - 'label' => __( 'Account Deletion Custom Text', 'ultimate-member' ), - 'tooltip' => __( 'This is custom text that will be displayed to users before they delete their accounts from your site when password is required.', 'ultimate-member' ), - 'args' => array( - 'textarea_rows' => 6, - ), - ), - array( - 'id' => 'delete_account_no_pass_required_text', - 'type' => 'textarea', - 'label' => __( 'Account Deletion without password Custom Text', 'ultimate-member' ), - 'tooltip' => __( 'This is custom text that will be displayed to users before they delete their accounts from your site when password isn\'t required.', 'ultimate-member' ), - 'args' => array( - 'textarea_rows' => 6, - ), - ), - array( - 'id' => 'account_name', - 'type' => 'checkbox', - 'label' => __( 'Add a First & Last Name fields', 'ultimate-member' ), - 'tooltip' => __( 'Whether to enable these fields on the user account page by default or hide them.', 'ultimate-member' ), - ), - array( - 'id' => 'account_name_disable', - 'type' => 'checkbox', - 'label' => __( 'Disable First & Last Name fields', 'ultimate-member' ), - 'tooltip' => __( 'Whether to allow users changing their first and last name in account page.', 'ultimate-member' ), - 'conditional' => array( 'account_name', '=', '1' ), - ), - array( - 'id' => 'account_name_require', - 'type' => 'checkbox', - 'label' => __( 'Require First & Last Name', 'ultimate-member' ), - 'tooltip' => __( 'Require first and last name?', 'ultimate-member' ), - 'conditional' => array( 'account_name', '=', '1' ), - ), - array( - 'id' => 'account_email', - 'type' => 'checkbox', - 'label' => __( 'Allow users to change e-mail', 'ultimate-member' ), - 'tooltip' => __( 'Whether to allow users changing their email in account page.', 'ultimate-member' ), - ), - array( - 'id' => 'account_general_password', - 'type' => 'checkbox', - 'label' => __( 'Password is required?', 'ultimate-member' ), - 'tooltip' => __( 'Password is required to save account data.', 'ultimate-member' ), - ), - array( - 'id' => 'account_hide_in_directory', - 'type' => 'checkbox', - 'label' => __( 'Allow users to hide their profiles from directory', 'ultimate-member' ), - 'tooltip' => __( 'Whether to allow users changing their profile visibility from member directory in account page.', 'ultimate-member' ), - 'conditional' => array( 'account_tab_privacy', '=', '1' ), - ), - array( - 'id' => 'account_hide_in_directory_default', - 'type' => 'select', - 'label' => __( 'Hide profiles from directory by default', 'ultimate-member' ), - 'tooltip' => __( 'Set default value for the "Hide my profile from directory" option', 'ultimate-member' ), - 'options' => array( - 'No' => __( 'No', 'ultimate-member' ), - 'Yes' => __( 'Yes', 'ultimate-member' ), - ), - 'size' => 'small', - 'conditional' => array( 'account_hide_in_directory', '=', '1' ), - ), - ), + 'fields' => $account_fields, ), 'uploads' => array( 'title' => __( 'Uploads', 'ultimate-member' ), diff --git a/includes/class-config.php b/includes/class-config.php index 6390cb93..c246004b 100644 --- a/includes/class-config.php +++ b/includes/class-config.php @@ -81,6 +81,10 @@ if ( ! class_exists( 'um\Config' ) ) { */ public $default_roles_metadata = array(); + public $permalink_base_options = array(); + + public $display_name_options = array(); + /** * Config constructor. */ @@ -775,6 +779,29 @@ if ( ! class_exists( 'um\Config' ) ) { '_um_auto_approve_act' => 'redirect_profile', ), ); + + $this->permalink_base_options = array( + 'user_login' => __( 'Username', 'ultimate-member' ), + 'name' => __( 'First and Last Name with \'.\'', 'ultimate-member' ), + 'name_dash' => __( 'First and Last Name with \'-\'', 'ultimate-member' ), + 'name_plus' => __( 'First and Last Name with \'+\'', 'ultimate-member' ), + 'user_id' => __( 'User ID', 'ultimate-member' ), + 'hash' => __( 'Unique hash string', 'ultimate-member' ), + 'custom_meta' => __( 'Custom usermeta', 'ultimate-member' ), + ); + $this->permalink_base_options = apply_filters( 'um_config_permalink_base_options', $this->permalink_base_options ); + + $this->display_name_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' ), + ); } diff --git a/includes/core/class-account.php b/includes/core/class-account.php index d48e08d1..dd685573 100644 --- a/includes/core/class-account.php +++ b/includes/core/class-account.php @@ -49,80 +49,75 @@ if ( ! class_exists( 'um\core\Account' ) ) { } /** - * Init AllTabs for user account + * Init AllTabs for user account. * - * @param $args + * @param array $args * * @throws \Exception */ - function init_tabs( $args ) { - + public function init_tabs( $args ) { $this->tabs = $this->get_tabs(); ksort( $this->tabs ); - $tabs_structed = array(); + $tabs_structured = array(); foreach ( $this->tabs as $k => $arr ) { - foreach ( $arr as $id => $info ) { - - if ( ! empty( $args['tab'] ) && $id != $args['tab'] ) { + if ( ! empty( $args['tab'] ) && $id !== $args['tab'] ) { continue; } $output = $this->get_tab_fields( $id, $args ); if ( ! empty( $output ) ) { - $tabs_structed[ $id ] = $info; + $tabs_structured[ $id ] = $info; } - } - } - $this->tabs = $tabs_structed; + $this->tabs = $tabs_structured; } - /** - * Get all Account tabs + * Get all Account tabs. * * @return array */ - function get_tabs() { - $tabs = array(); + public function get_tabs() { + $tabs = array(); $tabs[100]['general'] = array( - 'icon' => 'um-faicon-user', - 'title' => __( 'Account', 'ultimate-member' ), - 'submit_title' => __( 'Update Account', 'ultimate-member' ), + 'icon' => 'um-faicon-user', + 'title' => __( 'Account', 'ultimate-member' ), + 'submit_title' => __( 'Update Account', 'ultimate-member' ), ); $tabs[200]['password'] = array( - 'icon' => 'um-faicon-asterisk', - 'title' => __( 'Change Password', 'ultimate-member' ), - 'submit_title' => __( 'Update Password', 'ultimate-member' ), + 'icon' => 'um-faicon-asterisk', + 'title' => __( 'Change Password', 'ultimate-member' ), + 'submit_title' => __( 'Update Password', 'ultimate-member' ), ); $tabs[300]['privacy'] = array( - 'icon' => 'um-faicon-lock', - 'title' => __( 'Privacy', 'ultimate-member' ), - 'submit_title' => __( 'Update Privacy', 'ultimate-member' ), + 'icon' => 'um-faicon-lock', + 'title' => __( 'Privacy', 'ultimate-member' ), + 'submit_title' => __( 'Update Privacy', 'ultimate-member' ), ); + // Init here, but default account tab content is empty, so it's hidden. + // Init required here for the using inside the extensions where is possible to disable email notification. + // Default Ultimate Member core notifications cannot be disabled on the user's side. $tabs[400]['notifications'] = array( - 'icon' => 'um-faicon-envelope', - 'title' => __( 'Notifications', 'ultimate-member' ), - 'submit_title' => __( 'Update Notifications', 'ultimate-member' ), + 'icon' => 'um-faicon-envelope', + 'title' => __( 'Notifications', 'ultimate-member' ), + 'submit_title' => __( 'Update Notifications', 'ultimate-member' ), ); - //if user cannot delete profile hide delete tab + // If user cannot delete profile hide delete tab. if ( um_user( 'can_delete_profile' ) || um_user( 'can_delete_everyone' ) ) { - $tabs[99999]['delete'] = array( - 'icon' => 'um-faicon-trash-o', - 'title' => __( 'Delete Account', 'ultimate-member' ), - 'submit_title' => __( 'Delete Account', 'ultimate-member' ), + 'icon' => 'um-faicon-trash-o', + 'title' => __( 'Delete Account', 'ultimate-member' ), + 'submit_title' => __( 'Delete Account', 'ultimate-member' ), ); - } /** @@ -567,9 +562,9 @@ if ( ! class_exists( 'um\core\Account' ) ) { function get_tab_fields( $id, $shortcode_args ) { $output = null; - UM()->fields()->set_id = absint( $id ); + UM()->fields()->set_id = absint( $id ); UM()->fields()->set_mode = 'account'; - UM()->fields()->editing = true; + UM()->fields()->editing = true; if ( ! empty( $this->tab_output[ $id ]['content'] ) && ! empty( $this->tab_output[ $id ]['hash'] ) && $this->tab_output[ $id ]['hash'] == md5( json_encode( $shortcode_args ) ) ) { @@ -784,7 +779,6 @@ if ( ! class_exists( 'um\core\Account' ) ) { */ $output = apply_filters( "um_account_content_hook_{$id}", $output, $shortcode_args ); break; - } $this->tab_output[ $id ] = array( 'content' => $output, 'hash' => md5( json_encode( $shortcode_args ) ) ); @@ -940,15 +934,14 @@ if ( ! class_exists( 'um\core\Account' ) ) { return $classes; } - /** - * Checks account actions require current password + * Checks account actions require current password. * - * @param $tab_key + * @param string $tab_key * * @return bool */ - function current_password_is_required( $tab_key ) { + public function current_password_is_required( $tab_key ) { $is_required = true; switch ( $tab_key ) { @@ -956,17 +949,22 @@ if ( ! class_exists( 'um\core\Account' ) ) { $is_required = UM()->options()->get( 'account_general_password' ); break; case 'delete': - break; case 'password': - break; case 'privacy_erase_data': case 'privacy_download_data': break; } - $is_required = apply_filters( "um_account_{$tab_key}_require_current", $is_required ); + return apply_filters( "um_account_{$tab_key}_require_current", $is_required ); + } - return $is_required; + /** + * Check the conditional hook for getting notifications tab data. + * + * @return bool + */ + public function is_notifications_tab_visible() { + return apply_filters( 'um_account_notifications_tab_enabled', false ); } } } diff --git a/includes/core/um-actions-account.php b/includes/core/um-actions-account.php index 9d4c4e02..41e520dc 100644 --- a/includes/core/um-actions-account.php +++ b/includes/core/um-actions-account.php @@ -511,9 +511,8 @@ function um_before_account_delete() { } add_action( 'um_before_account_delete', 'um_before_account_delete' ); - /** - * Before notifications account tab content + * Before notifications account tab content. * * @param array $args * @@ -521,15 +520,14 @@ add_action( 'um_before_account_delete', 'um_before_account_delete' ); */ function um_before_account_notifications( $args = array() ) { $output = UM()->account()->get_tab_fields( 'notifications', $args ); - if ( substr_count( $output, '_enable_new_' ) ) { ?> - -

- - +

+ +} +?>
@@ -42,7 +43,8 @@ if ( ! defined( 'ABSPATH' ) ) { * } * ?> */ - do_action( 'um_account_page_hidden_fields', $args ); ?> + do_action( 'um_account_page_hidden_fields', $args ); + ?> @@ -97,7 +99,7 @@ if ( ! defined( 'ABSPATH' ) ) {
@@ -105,9 +107,11 @@ if ( ! defined( 'ABSPATH' ) ) {
    - account()->tabs as $id => $info ) { - if ( isset( $info['custom'] ) || UM()->options()->get( "account_tab_{$id}" ) == 1 || $id == 'general' ) { ?> - + account()->tabs as $id => $info ) { + $tab_enabled = UM()->options()->get( 'account_tab_' . $id ); + if ( isset( $info['custom'] ) || ! empty( $tab_enabled ) || 'general' === $id ) { + ?>
  • - - +
@@ -203,8 +190,7 @@ if ( ! defined( 'ABSPATH' ) ) { * } * ?> */ - do_action( 'um_after_account_page_load' ); ?> - + do_action( 'um_after_account_page_load' ); + ?>
- diff --git a/templates/login.php b/templates/login.php index 8423ee92..8ca04fb8 100644 --- a/templates/login.php +++ b/templates/login.php @@ -6,7 +6,7 @@ * * Page: "Login" * - * @version 2.6.1 + * @version 2.6.12 * * @var string $mode * @var int $form_id @@ -14,143 +14,26 @@ */ if ( ! defined( 'ABSPATH' ) ) { exit; -} ?> +} +?>
-
-
- - */ + /** This action is documented in includes/core/um-actions-profile.php */ do_action( 'um_before_form', $args ); - - /** - * UM hook - * - * @type action - * @title um_before_{$mode}_fields - * @description Some actions before login form fields - * @input_vars - * [{"var":"$args","type":"array","desc":"Login form shortcode arguments"}] - * @change_log - * ["Since: 2.0"] - * @usage add_action( 'um_before_{$mode}_fields', 'function_name', 10, 1 ); - * @example - * - */ + /** This action is documented in includes/core/um-actions-profile.php */ do_action( "um_before_{$mode}_fields", $args ); - - /** - * UM hook - * - * @type action - * @title um_main_{$mode}_fields - * @description Some actions before login form fields - * @input_vars - * [{"var":"$args","type":"array","desc":"Login form shortcode arguments"}] - * @change_log - * ["Since: 2.0"] - * @usage add_action( 'um_before_{$mode}_fields', 'function_name', 10, 1 ); - * @example - * - */ + /** This action is documented in includes/core/um-actions-profile.php */ do_action( "um_main_{$mode}_fields", $args ); - - /** - * UM hook - * - * @type action - * @title um_after_form_fields - * @description Some actions after login form fields - * @input_vars - * [{"var":"$args","type":"array","desc":"Login form shortcode arguments"}] - * @change_log - * ["Since: 2.0"] - * @usage add_action( 'um_after_form_fields', 'function_name', 10, 1 ); - * @example - * - */ + /** This action is documented in includes/core/um-actions-profile.php */ do_action( 'um_after_form_fields', $args ); - - /** - * UM hook - * - * @type action - * @title um_after_{$mode}_fields - * @description Some actions after login form fields - * @input_vars - * [{"var":"$args","type":"array","desc":"Login form shortcode arguments"}] - * @change_log - * ["Since: 2.0"] - * @usage add_action( 'um_after_{$mode}_fields', 'function_name', 10, 1 ); - * @example - * - */ + /** This action is documented in includes/core/um-actions-profile.php */ do_action( "um_after_{$mode}_fields", $args ); - - /** - * UM hook - * - * @type action - * @title um_after_form - * @description Some actions after login form fields - * @input_vars - * [{"var":"$args","type":"array","desc":"Login form shortcode arguments"}] - * @change_log - * ["Since: 2.0"] - * @usage add_action( 'um_after_form', 'function_name', 10, 1 ); - * @example - * - */ - do_action( 'um_after_form', $args ); ?> - + /** This action is documented in includes/core/um-actions-profile.php */ + do_action( 'um_after_form', $args ); + ?>
-
-
diff --git a/templates/password-change.php b/templates/password-change.php index 0ecc4f03..89d4e361 100644 --- a/templates/password-change.php +++ b/templates/password-change.php @@ -6,7 +6,7 @@ * * Call: function ultimatemember_password() * - * @version 2.6.1 + * @version 2.6.12 * * @var string $mode * @var string $rp_key @@ -15,7 +15,8 @@ */ if ( ! defined( 'ABSPATH' ) ) { exit; -} ?> +} +?>
@@ -90,27 +91,9 @@ if ( ! defined( 'ABSPATH' ) ) { * ?> */ do_action( 'um_change_password_form', $args ); - - /** - * UM hook - * - * @type action - * @title um_after_form_fields - * @description Password change after form content - * @input_vars - * [{"var":"$args","type":"array","desc":"Password change shortcode arguments"}] - * @change_log - * ["Since: 2.0"] - * @usage add_action( 'um_after_form_fields', 'function_name', 10, 1 ); - * @example - * - */ - do_action( 'um_after_form_fields', $args ); ?> + /** This action is documented in includes/core/um-actions-profile.php */ + do_action( 'um_after_form_fields', $args ); + ?>
diff --git a/templates/password-reset.php b/templates/password-reset.php index e9ec2251..d0d0bcc9 100644 --- a/templates/password-reset.php +++ b/templates/password-reset.php @@ -6,7 +6,7 @@ * * Call: function ultimatemember_password() * - * @version 2.6.1 + * @version 2.6.12 * * @var string $mode * @var int $form_id @@ -14,7 +14,8 @@ */ if ( ! defined( 'ABSPATH' ) ) { exit; -} ?> +} +?>
@@ -143,28 +144,10 @@ if ( ! defined( 'ABSPATH' ) ) { * ?> */ do_action( 'um_reset_password_form', $args ); - - /** - * UM hook - * - * @type action - * @title um_after_form_fields - * @description Password reset after display form - * @input_vars - * [{"var":"$args","type":"array","desc":"Password reset shortcode arguments"}] - * @change_log - * ["Since: 2.0"] - * @usage add_action( 'um_after_form_fields', 'function_name', 10, 1 ); - * @example - * - */ + /** This action is documented in includes/core/um-actions-profile.php */ do_action( 'um_after_form_fields', $args ); - } ?> + } + ?>
diff --git a/templates/register.php b/templates/register.php index 255b8a1a..d2b1fc72 100644 --- a/templates/register.php +++ b/templates/register.php @@ -6,7 +6,7 @@ * * Page: "Register" * - * @version 2.6.1 + * @version 2.6.12 * * @var string $mode * @var int $form_id @@ -18,143 +18,26 @@ if ( ! defined( 'ABSPATH' ) ) { if ( ! is_user_logged_in() ) { um_reset_user(); -} ?> +} +?>
- -
- +
- - */ - do_action( "um_before_form", $args ); - - /** - * UM hook - * - * @type action - * @title um_before_{$mode}_fields - * @description Some actions before register form fields - * @input_vars - * [{"var":"$args","type":"array","desc":"Register form shortcode arguments"}] - * @change_log - * ["Since: 2.0"] - * @usage add_action( 'um_before_{$mode}_fields', 'function_name', 10, 1 ); - * @example - * - */ + /** This action is documented in includes/core/um-actions-profile.php */ + do_action( 'um_before_form', $args ); + /** This action is documented in includes/core/um-actions-profile.php */ do_action( "um_before_{$mode}_fields", $args ); - - /** - * UM hook - * - * @type action - * @title um_before_{$mode}_fields - * @description Some actions before register form fields - * @input_vars - * [{"var":"$args","type":"array","desc":"Register form shortcode arguments"}] - * @change_log - * ["Since: 2.0"] - * @usage add_action( 'um_before_{$mode}_fields', 'function_name', 10, 1 ); - * @example - * - */ + /** This action is documented in includes/core/um-actions-profile.php */ do_action( "um_main_{$mode}_fields", $args ); - - /** - * UM hook - * - * @type action - * @title um_after_form_fields - * @description Some actions after register form fields - * @input_vars - * [{"var":"$args","type":"array","desc":"Register form shortcode arguments"}] - * @change_log - * ["Since: 2.0"] - * @usage add_action( 'um_after_form_fields', 'function_name', 10, 1 ); - * @example - * - */ + /** This action is documented in includes/core/um-actions-profile.php */ do_action( 'um_after_form_fields', $args ); - - /** - * UM hook - * - * @type action - * @title um_after_{$mode}_fields - * @description Some actions after register form fields - * @input_vars - * [{"var":"$args","type":"array","desc":"Register form shortcode arguments"}] - * @change_log - * ["Since: 2.0"] - * @usage add_action( 'um_after_{$mode}_fields', 'function_name', 10, 1 ); - * @example - * - */ + /** This action is documented in includes/core/um-actions-profile.php */ do_action( "um_after_{$mode}_fields", $args ); - - /** - * UM hook - * - * @type action - * @title um_after_form - * @description Some actions after register form fields - * @input_vars - * [{"var":"$args","type":"array","desc":"Register form shortcode arguments"}] - * @change_log - * ["Since: 2.0"] - * @usage add_action( 'um_after_form', 'function_name', 10, 1 ); - * @example - * - */ - do_action( 'um_after_form', $args ); ?> - + /** This action is documented in includes/core/um-actions-profile.php */ + do_action( 'um_after_form', $args ); + ?>
-
-
From 30c4ba215bf59490a8658eb4d063778d71d9191c Mon Sep 17 00:00:00 2001 From: ashubawork Date: Tue, 3 Oct 2023 14:34:59 +0300 Subject: [PATCH 64/81] - delete comments after user deleting --- includes/admin/core/class-admin-settings.php | 6 ++++++ includes/class-config.php | 1 + includes/core/class-user.php | 12 +++++++++++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/includes/admin/core/class-admin-settings.php b/includes/admin/core/class-admin-settings.php index 0f4bb2bd..4dcbb88e 100644 --- a/includes/admin/core/class-admin-settings.php +++ b/includes/admin/core/class-admin-settings.php @@ -1229,6 +1229,12 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { 'tooltip' => __( 'How long does an activation link live in seconds? Leave empty for endless links.', 'ultimate-member' ), 'size' => 'small', ), + array( + 'id' => 'delete_comments', + 'type' => 'checkbox', + 'label' => __( 'Deleting user comments after deleting a user', 'ultimate-member' ), + 'tooltip' => __( 'Do you want to delete a user\'s comments when that user deletes themself or is removed from the admin dashboard from the site?', 'ultimate-member' ), + ), ), ), 'account' => array( diff --git a/includes/class-config.php b/includes/class-config.php index c246004b..2b570c3b 100644 --- a/includes/class-config.php +++ b/includes/class-config.php @@ -596,6 +596,7 @@ if ( ! class_exists( 'um\Config' ) ) { 'secure_notify_admins_banned_accounts' => false, 'secure_notify_admins_banned_accounts__interval' => 'instant', 'secure_allowed_redirect_hosts' => '', + 'delete_comments' => 0, ); add_filter( 'um_get_tabs_from_config', '__return_true' ); diff --git a/includes/core/class-user.php b/includes/core/class-user.php index 737dabdd..3c97e305 100644 --- a/includes/core/class-user.php +++ b/includes/core/class-user.php @@ -569,7 +569,7 @@ if ( ! class_exists( 'um\core\User' ) ) { /** * @param $user_id */ - function delete_user_handler( $user_id ) { + public function delete_user_handler( $user_id ) { um_fetch_user( $user_id ); $this->deleted_user_id = $user_id; @@ -613,6 +613,16 @@ if ( ! class_exists( 'um\core\User' ) ) { */ do_action( 'um_delete_user', um_user( 'ID' ) ); + // remove user's comments + if ( UM()->options()->get( 'delete_comments' ) ) { + $user = get_user_by( 'id', um_user( 'ID' ) ); + + $comments = array_merge( get_comments( 'author_email=' . $user->user_email ), get_comments( 'user_id=' . um_user( 'ID' ) ) ); + foreach ( $comments as $comment ) { + wp_delete_comment( $comment->comment_ID, true ); + } + } + // send email notifications if ( $this->send_mail_on_delete ) { UM()->mail()->send( um_user( 'user_email' ), 'deletion_email' ); From 31ef4924f380de8a5f20a8a69dc043c669b0336d Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Tue, 3 Oct 2023 15:40:10 +0300 Subject: [PATCH 65/81] - fixed #1316; --- includes/core/class-account.php | 21 +++++++++++---------- includes/core/class-fields.php | 2 +- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/includes/core/class-account.php b/includes/core/class-account.php index dd685573..1128a08e 100644 --- a/includes/core/class-account.php +++ b/includes/core/class-account.php @@ -312,30 +312,31 @@ if ( ! class_exists( 'um\core\Account' ) ) { /** * Restrict access to Account page */ - function account_page_restrict() { - + public function account_page_restrict() { if ( um_is_core_page( 'account' ) ) { - //redirect to login for not logged in users + // Redirect to the login page for not logged-in users. if ( ! is_user_logged_in() ) { $redirect_to = add_query_arg( 'redirect_to', - urlencode_deep( um_get_core_page( 'account' ) ) , + urlencode_deep( um_get_core_page( 'account' ) ), um_get_core_page( 'login' ) ); - exit( wp_redirect( $redirect_to ) ); + wp_safe_redirect( $redirect_to ); + exit; } - - //set data for fields - UM()->fields()->set_mode = 'account'; - UM()->fields()->editing = true; + // Set data for fields. + UM()->fields()->set_mode = 'account'; + UM()->fields()->editing = true; + UM()->fields()->global_args = array( + 'mode' => 'account', + ); if ( get_query_var( 'um_tab' ) ) { $this->current_tab = get_query_var( 'um_tab' ); } - } } diff --git a/includes/core/class-fields.php b/includes/core/class-fields.php index 074e17ff..0b148a19 100644 --- a/includes/core/class-fields.php +++ b/includes/core/class-fields.php @@ -4354,7 +4354,7 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $show_bio = false; $bio_html = false; $global_setting = UM()->options()->get( 'profile_show_html_bio' ); - if ( 'profile' === $this->global_args['mode'] ) { + if ( isset( $this->global_args['mode'] ) && 'profile' === $this->global_args['mode'] ) { if ( ! empty( $this->global_args['use_custom_settings'] ) ) { if ( ! empty( $this->global_args['show_bio'] ) ) { $show_bio = true; From 65922e576c7fcb47f3c9ae512e94b944acfc02fb Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Tue, 3 Oct 2023 16:06:36 +0300 Subject: [PATCH 66/81] - Site Health review; --- includes/admin/class-site-health.php | 92 +++++++++++++--------------- 1 file changed, 43 insertions(+), 49 deletions(-) diff --git a/includes/admin/class-site-health.php b/includes/admin/class-site-health.php index 4e4c13cf..fb36defa 100644 --- a/includes/admin/class-site-health.php +++ b/includes/admin/class-site-health.php @@ -507,7 +507,8 @@ class Site_Health { } } - // Appearance settings + // Appearance settings. + // > Profile section. $profile_icons_options = array( 'field' => __( 'Show inside text field', 'ultimate-member' ), 'label' => __( 'Show with label', 'ultimate-member' ), @@ -526,6 +527,9 @@ class Site_Health { $profile_templates = UM()->shortcodes()->get_templates( 'profile' ); $profile_template_key = UM()->options()->get( 'profile_template' ); $profile_template_title = array_key_exists( $profile_template_key, $profile_templates ) ? $profile_templates[ $profile_template_key ] : __( 'No template name', 'ultimate-member' ); + $profile_secondary_btn = UM()->options()->get( 'profile_secondary_btn' ); + $profile_cover_enabled = UM()->options()->get( 'profile_cover_enabled' ); + $profile_empty_text = UM()->options()->get( 'profile_empty_text' ); $appearance_settings = array( 'um-profile_template' => array( @@ -551,10 +555,10 @@ class Site_Health { ), 'um-profile_secondary_btn' => array( 'label' => __( 'Profile Secondary Button', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_secondary_btn' ) ? $labels['yes'] : $labels['no'], + 'value' => $profile_secondary_btn ? $labels['yes'] : $labels['no'], ), ); - if ( 1 === absint( UM()->options()->get( 'profile_secondary_btn' ) ) ) { + if ( ! empty( $profile_secondary_btn ) ) { $appearance_settings['um-profile_secondary_btn_word'] = array( 'label' => __( 'Profile Secondary Button Text ', 'ultimate-member' ), 'value' => UM()->options()->get( 'profile_secondary_btn_word' ), @@ -578,9 +582,9 @@ class Site_Health { ); $appearance_settings['um-profile_cover_enabled'] = array( 'label' => __( 'Profile Cover Photos', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_cover_enabled' ) ? $labels['yes'] : $labels['no'], + 'value' => $profile_cover_enabled ? $labels['yes'] : $labels['no'], ); - if ( 1 === absint( UM()->options()->get( 'profile_cover_enabled' ) ) ) { + if ( ! empty( $profile_cover_enabled ) ) { $appearance_settings['um-profile_coversize'] = array( 'label' => __( 'Profile Cover Size', 'ultimate-member' ), 'value' => UM()->options()->get( 'profile_coversize' ) . 'px', @@ -620,19 +624,24 @@ class Site_Health { ); $appearance_settings['um-profile_empty_text'] = array( 'label' => __( 'Show a custom message if profile is empty', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_empty_text' ) ? $labels['yes'] : $labels['no'], + 'value' => $profile_empty_text ? $labels['yes'] : $labels['no'], ); - if ( 1 === absint( UM()->options()->get( 'profile_empty_text' ) ) ) { + if ( ! empty( $profile_empty_text ) ) { $appearance_settings['um-profile_empty_text_emo'] = array( 'label' => __( 'Show the emoticon', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_empty_text_emo' ), + 'value' => UM()->options()->get( 'profile_empty_text_emo' ) ? $labels['yes'] : $labels['no'], ); } + + // > Profile Menu section. + $profile_menu = UM()->options()->get( 'profile_menu' ); + $appearance_settings['um-profile_menu'] = array( 'label' => __( 'Enable profile menu', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_menu' ) ? $labels['yes'] : $labels['no'], + 'value' => $profile_menu ? $labels['yes'] : $labels['no'], ); - if ( 1 === absint( UM()->options()->get( 'profile_menu' ) ) ) { + + if ( ! empty( $profile_menu ) ) { /** * Filters a privacy list extend. * @@ -650,47 +659,31 @@ class Site_Health { * } * add_filter( 'um_profile_tabs_privacy_list', 'um_profile_tabs_privacy_list', 10, 1 ); */ - $privacy_option = apply_filters( - 'um_profile_tabs_privacy_list', - array( - 0 => __( 'Anyone', 'ultimate-member' ), - 1 => __( 'Guests only', 'ultimate-member' ), - 2 => __( 'Members only', 'ultimate-member' ), - 3 => __( 'Only the owner', 'ultimate-member' ), - 4 => __( 'Only specific roles', 'ultimate-member' ), - 5 => __( 'Owner and specific roles', 'ultimate-member' ), - ) - ); + $privacy_option = UM()->profile()->tabs_privacy(); - $appearance_settings['um-profile_tab_main'] = array( - 'label' => __( 'About Tab', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_tab_main' ) ? $labels['yes'] : $labels['no'], - ); - if ( 1 === absint( UM()->options()->get( 'profile_tab_main' ) ) ) { - $appearance_settings['um-profile_tab_main_privacy'] = array( - 'label' => __( 'Who can see About Tab?', 'ultimate-member' ), - 'value' => $privacy_option[ UM()->options()->get( 'profile_tab_main_privacy' ) ], - ); - } - $appearance_settings['um-profile_tab_posts'] = array( - 'label' => __( 'Posts Tab', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_tab_posts' ) ? $labels['yes'] : $labels['no'], - ); - if ( 1 === absint( UM()->options()->get( 'profile_tab_posts' ) ) ) { - $appearance_settings['um-profile_tab_posts_privacy'] = array( - 'label' => __( 'Who can see Posts Tab?', 'ultimate-member' ), - 'value' => $privacy_option[ UM()->options()->get( 'profile_tab_posts_privacy' ) ], - ); - } - $appearance_settings['um-profile_tab_comments'] = array( - 'label' => __( 'Comments Tab', 'ultimate-member' ), - 'value' => UM()->options()->get( 'profile_tab_comments' ) ? $labels['yes'] : $labels['no'], - ); - if ( 1 === absint( UM()->options()->get( 'profile_tab_comments' ) ) ) { - $appearance_settings['um-profile_tab_comments_privacy'] = array( - 'label' => __( 'Who can see Comments Tab?', 'ultimate-member' ), - 'value' => $privacy_option[ UM()->options()->get( 'profile_tab_comments_privacy' ) ], + $tabs = UM()->profile()->tabs(); + foreach ( $tabs as $id => $tab ) { + if ( ! empty( $tab['hidden'] ) ) { + continue; + } + + $tab_enabled = UM()->options()->get( 'profile_tab_' . $id ); + + $appearance_settings[ 'um-profile_tab_' . $id ] = array( + // translators: %s Profile Tab Title + 'label' => sprintf( __( '%s Tab', 'ultimate-member' ), $tab['name'] ), + 'value' => $tab_enabled ? $labels['yes'] : $labels['no'], ); + + if ( ! isset( $tab['default_privacy'] ) ) { + if ( ! empty( $tab_enabled ) ) { + $appearance_settings[ 'um-profile_tab_' . $id . '_privacy' ] = array( + // translators: %s Profile Tab Title + 'label' => sprintf( __( 'Who can see %s Tab?', 'ultimate-member' ), $tab['name'] ), + 'value' => $privacy_option[ UM()->options()->get( 'profile_tab_' . $id . '_privacy' ) ], + ); + } + } } /** * Filters appearance settings for Site Health extend. @@ -756,6 +749,7 @@ class Site_Health { ); } + // > Registration Form section. $appearance_settings['um-register_template'] = array( 'label' => __( 'Registration Default Template', 'ultimate-member' ), 'value' => UM()->options()->get( 'register_template' ), From 951410a744d85c89da5be1790829d40c25f9cbf3 Mon Sep 17 00:00:00 2001 From: ashubawork Date: Tue, 3 Oct 2023 16:19:42 +0300 Subject: [PATCH 67/81] - add delete comments option to the site health --- includes/admin/class-site-health.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/includes/admin/class-site-health.php b/includes/admin/class-site-health.php index fb36defa..48efdbe6 100644 --- a/includes/admin/class-site-health.php +++ b/includes/admin/class-site-health.php @@ -173,6 +173,10 @@ class Site_Health { 'label' => __( 'Use Gravatars?', 'ultimate-member' ), 'value' => UM()->options()->get( 'use_gravatars' ) ? $labels['yes'] : $labels['no'], ), + 'um-delete_comments' => array( + 'label' => __( 'Deleting user comments after deleting a user', 'ultimate-member' ), + 'value' => UM()->options()->get( 'delete_comments' ) ? $labels['yes'] : $labels['no'], + ), ); if ( 'custom_meta' === UM()->options()->get( 'permalink_base' ) ) { From 3ff9637a43f811b241cd843c0b8ee426f5f117e8 Mon Sep 17 00:00:00 2001 From: ashubawork Date: Tue, 3 Oct 2023 16:24:44 +0300 Subject: [PATCH 68/81] - fix checking $this->global_args['mode'] --- includes/core/class-fields.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/core/class-fields.php b/includes/core/class-fields.php index 0b148a19..17483027 100644 --- a/includes/core/class-fields.php +++ b/includes/core/class-fields.php @@ -2831,7 +2831,7 @@ if ( ! class_exists( 'um\core\Fields' ) ) { $show_bio = false; $bio_html = false; $global_setting = UM()->options()->get( 'profile_show_html_bio' ); - if ( 'profile' === $this->global_args['mode'] ) { + if ( isset( $this->global_args['mode'] ) && 'profile' === $this->global_args['mode'] ) { if ( ! empty( $this->global_args['use_custom_settings'] ) ) { if ( ! empty( $this->global_args['show_bio'] ) ) { $show_bio = true; From ae1f66f594580a9246a53094173c416ca27f7006 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Wed, 4 Oct 2023 00:30:08 +0300 Subject: [PATCH 69/81] - Site Health review; --- includes/admin/class-site-health.php | 70 +++++++++++++++++----------- 1 file changed, 44 insertions(+), 26 deletions(-) diff --git a/includes/admin/class-site-health.php b/includes/admin/class-site-health.php index fb36defa..9874bffd 100644 --- a/includes/admin/class-site-health.php +++ b/includes/admin/class-site-health.php @@ -509,7 +509,7 @@ class Site_Health { // Appearance settings. // > Profile section. - $profile_icons_options = array( + $icons_display_options = array( 'field' => __( 'Show inside text field', 'ultimate-member' ), 'label' => __( 'Show with label', 'ultimate-member' ), 'off' => __( 'Turn off', 'ultimate-member' ), @@ -518,11 +518,6 @@ class Site_Health { 'bc' => __( 'Bottom of Icon', 'ultimate-member' ), 'lc' => __( 'Left of Icon (right for RTL)', 'ultimate-member' ), ); - $register_align_options = array( - 'center' => __( 'Centered', 'ultimate-member' ), - 'left' => __( 'Left aligned', 'ultimate-member' ), - 'right' => __( 'Right aligned', 'ultimate-member' ), - ); $profile_templates = UM()->shortcodes()->get_templates( 'profile' ); $profile_template_key = UM()->options()->get( 'profile_template' ); @@ -547,7 +542,7 @@ class Site_Health { ), 'um-profile_icons' => array( 'label' => __( 'Profile Field Icons', 'ultimate-member' ), - 'value' => $profile_icons_options[ UM()->options()->get( 'profile_icons' ) ], + 'value' => $icons_display_options[ UM()->options()->get( 'profile_icons' ) ], ), 'um-profile_primary_btn_word' => array( 'label' => __( 'Profile Primary Button Text', 'ultimate-member' ), @@ -750,9 +745,21 @@ class Site_Health { } // > Registration Form section. + $register_templates = UM()->shortcodes()->get_templates( 'register' ); + $register_template_key = UM()->options()->get( 'register_template' ); + $register_template_title = array_key_exists( $register_template_key, $register_templates ) ? $register_templates[ $register_template_key ] : __( 'No template name', 'ultimate-member' ); + $register_secondary_btn = UM()->options()->get( 'register_secondary_btn' ); + + $form_align_options = array( + 'center' => __( 'Centered', 'ultimate-member' ), + 'left' => __( 'Left aligned', 'ultimate-member' ), + 'right' => __( 'Right aligned', 'ultimate-member' ), + ); + $appearance_settings['um-register_template'] = array( 'label' => __( 'Registration Default Template', 'ultimate-member' ), - 'value' => UM()->options()->get( 'register_template' ), + // translators: %1$s - register template name, %2$s - register template filename + 'value' => sprintf( __( '%1$s (filename: %2$s.php)', 'ultimate-member' ), $register_template_title, $register_template_key ), ); $appearance_settings['um-register_max_width'] = array( 'label' => __( 'Registration Maximum Width', 'ultimate-member' ), @@ -760,11 +767,11 @@ class Site_Health { ); $appearance_settings['um-register_align'] = array( 'label' => __( 'Registration Shortcode Alignment', 'ultimate-member' ), - 'value' => $register_align_options[ UM()->options()->get( 'register_align' ) ], + 'value' => $form_align_options[ UM()->options()->get( 'register_align' ) ], ); $appearance_settings['um-register_icons'] = array( 'label' => __( 'Registration Field Icons', 'ultimate-member' ), - 'value' => $profile_icons_options[ UM()->options()->get( 'register_icons' ) ], + 'value' => $icons_display_options[ UM()->options()->get( 'register_icons' ) ], ); $appearance_settings['um-register_primary_btn_word'] = array( 'label' => __( 'Registration Primary Button Text ', 'ultimate-member' ), @@ -772,9 +779,9 @@ class Site_Health { ); $appearance_settings['um-register_secondary_btn'] = array( 'label' => __( 'Registration Secondary Button', 'ultimate-member' ), - 'value' => UM()->options()->get( 'register_secondary_btn' ) ? $labels['yes'] : $labels['no'], + 'value' => $register_secondary_btn ? $labels['yes'] : $labels['no'], ); - if ( 1 === absint( UM()->options()->get( 'register_secondary_btn' ) ) ) { + if ( ! empty( $register_secondary_btn ) ) { $appearance_settings['um-register_secondary_btn_word'] = array( 'label' => __( 'Registration Secondary Button Text', 'ultimate-member' ), 'value' => UM()->options()->get( 'register_secondary_btn_word' ), @@ -789,9 +796,16 @@ class Site_Health { 'value' => ! empty( UM()->options()->get( 'register_role' ) ) ? UM()->options()->get( 'register_role' ) : __( 'Default', 'ultimate-member' ), ); + // > Login Form section. + $login_templates = UM()->shortcodes()->get_templates( 'login' ); + $login_template_key = UM()->options()->get( 'login_template' ); + $login_template_title = array_key_exists( $login_template_key, $login_templates ) ? $login_templates[ $login_template_key ] : __( 'No template name', 'ultimate-member' ); + $login_secondary_btn = UM()->options()->get( 'login_secondary_btn' ); + $appearance_settings['um-login_template'] = array( 'label' => __( 'Login Default Template', 'ultimate-member' ), - 'value' => UM()->options()->get( 'login_template' ), + // translators: %1$s - login template name, %2$s - login template filename + 'value' => sprintf( __( '%1$s (filename: %2$s.php)', 'ultimate-member' ), $login_template_title, $login_template_key ), ); $appearance_settings['um-login_max_width'] = array( 'label' => __( 'Login Maximum Width', 'ultimate-member' ), @@ -799,11 +813,11 @@ class Site_Health { ); $appearance_settings['um-login_align'] = array( 'label' => __( 'Login Shortcode Alignment', 'ultimate-member' ), - 'value' => $register_align_options[ UM()->options()->get( 'login_align' ) ], + 'value' => $form_align_options[ UM()->options()->get( 'login_align' ) ], ); $appearance_settings['um-login_icons'] = array( 'label' => __( 'Login Field Icons', 'ultimate-member' ), - 'value' => $profile_icons_options[ UM()->options()->get( 'login_icons' ) ], + 'value' => $icons_display_options[ UM()->options()->get( 'login_icons' ) ], ); $appearance_settings['um-login_primary_btn_word'] = array( 'label' => __( 'Login Primary Button Text', 'ultimate-member' ), @@ -811,9 +825,9 @@ class Site_Health { ); $appearance_settings['um-login_secondary_btn'] = array( 'label' => __( 'Login Secondary Button', 'ultimate-member' ), - 'value' => UM()->options()->get( 'login_secondary_btn' ) ? $labels['yes'] : $labels['no'], + 'value' => $login_secondary_btn ? $labels['yes'] : $labels['no'], ); - if ( 1 === absint( UM()->options()->get( 'login_secondary_btn' ) ) ) { + if ( ! empty( $login_secondary_btn ) ) { $appearance_settings['um-login_secondary_btn_word'] = array( 'label' => __( 'Login Secondary Button Text', 'ultimate-member' ), 'value' => UM()->options()->get( 'login_secondary_btn_word' ), @@ -832,7 +846,7 @@ class Site_Health { 'value' => UM()->options()->get( 'login_show_rememberme' ) ? $labels['yes'] : $labels['no'], ); - // Misc settings + // Misc settings. $misc_settings = array( 'um-form_asterisk' => array( 'label' => __( 'Show an asterisk for required fields', 'ultimate-member' ), @@ -873,6 +887,8 @@ class Site_Health { ); // Secure settings + $secure_ban_admins_accounts = UM()->options()->get( 'secure_ban_admins_accounts' ); + $secure_settings = array( 'um-banned_capabilities' => array( 'label' => __( 'Banned Administrative Capabilities', 'ultimate-member' ), @@ -880,7 +896,7 @@ class Site_Health { ), 'um-lock_register_forms' => array( 'label' => __( 'Lock All Register Forms', 'ultimate-member' ), - 'value' => stripslashes( UM()->options()->get( 'lock_register_forms' ) ) ? $labels['yes'] : $labels['no'], + 'value' => UM()->options()->get( 'lock_register_forms' ) ? $labels['yes'] : $labels['no'], ), 'um-display_login_form_notice' => array( 'label' => __( 'Display Login form notice to reset passwords', 'ultimate-member' ), @@ -888,15 +904,17 @@ class Site_Health { ), 'um-secure_ban_admins_accounts' => array( 'label' => __( 'Enable ban for administrative capabilities', 'ultimate-member' ), - 'value' => UM()->options()->get( 'secure_ban_admins_accounts' ) ? $labels['yes'] : $labels['no'], + 'value' => $secure_ban_admins_accounts ? $labels['yes'] : $labels['no'], ), ); - if ( 1 === absint( UM()->options()->get( 'secure_ban_admins_accounts' ) ) ) { + if ( ! empty( $secure_ban_admins_accounts ) ) { + $secure_notify_admins_banned_accounts = UM()->options()->get( 'secure_notify_admins_banned_accounts' ); + $secure_settings['um-secure_notify_admins_banned_accounts'] = array( 'label' => __( 'Notify Administrators', 'ultimate-member' ), - 'value' => UM()->options()->get( 'secure_notify_admins_banned_accounts' ) ? $labels['yes'] : $labels['no'], + 'value' => $secure_notify_admins_banned_accounts ? $labels['yes'] : $labels['no'], ); - if ( 1 === absint( UM()->options()->get( 'secure_notify_admins_banned_accounts' ) ) ) { + if ( ! empty( $secure_notify_admins_banned_accounts ) ) { $secure_notify_admins_banned_accounts_options = array( 'instant' => __( 'Send Immediately', 'ultimate-member' ), 'hourly' => __( 'Hourly', 'ultimate-member' ), @@ -918,7 +936,7 @@ class Site_Health { 'value' => $secure_allowed_redirect_hosts, ); - // Licenses settings + // Licenses settings. $license_settings = array( 'um-licenses' => array( 'label' => __( 'Licenses', 'ultimate-member' ), @@ -945,7 +963,7 @@ class Site_Health { */ $license_settings = apply_filters( 'um_licenses_site_health', $license_settings ); - $info['ultimate-member']['fields'] = array_merge( $info['ultimate-member']['fields'], $pages_settings, $user_settings, $account_settings, $uploads_settings, $restrict_settings, $access_other_settings, $email_settings, $appearance_settings, $license_settings, $misc_settings, $secure_settings ); + $info['ultimate-member']['fields'] = array_merge( $info['ultimate-member']['fields'], $pages_settings, $user_settings, $account_settings, $uploads_settings, $restrict_settings, $access_other_settings, $email_settings, $appearance_settings, $misc_settings, $secure_settings, $license_settings ); // User roles settings $roles_array = array(); @@ -974,7 +992,7 @@ class Site_Health { 'value' => implode( ', ', $roles_array ), ), 'um-register_role' => array( - 'label' => __( 'Default New User Role', 'ultimate-member' ), + 'label' => __( 'WordPress Default New User Role', 'ultimate-member' ), 'value' => get_option( 'default_role' ), ), ), From ee780d14995f3e3f2490df4117fba38b89d91fce Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Wed, 4 Oct 2023 12:12:17 +0300 Subject: [PATCH 70/81] - updated minified scripts; - updated readme files; --- README.md | 2 +- assets/js/um-members.min.js | 2 +- readme.txt | 41 +++++++++++++++++++++++++++++++++++-- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 46cc9bc0..b1658571 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ GNU Version 2 or Any Later Version ### IMPORTANT: PLEASE UPDATE THE PLUGIN TO AT LEAST VERSION 2.6.7 IMMEDIATELY. VERSION 2.6.7 PATCHES SECURITY PRIVILEGE ESCALATION VULNERABILITY. PLEASE SEE [THIS ARTICLE](https://docs.ultimatemember.com/article/1866-security-incident-update-and-recommended-actions) FOR MORE INFORMATION -[Official Release Version: 2.6.11](https://github.com/ultimatemember/ultimatemember/releases/tag/2.6.11). +[Official Release Version: 2.6.12](https://github.com/ultimatemember/ultimatemember/releases/tag/2.6.12). ## Changelog diff --git a/assets/js/um-members.min.js b/assets/js/um-members.min.js index 8bfc0c26..3afcc174 100644 --- a/assets/js/um-members.min.js +++ b/assets/js/um-members.min.js @@ -1 +1 @@ -var um_members_directory_busy=[],um_member_directories=[],um_member_directory_last_data=[];function um_parse_current_url(){var r={},t=window.location.search.substring(1).split("&");return jQuery.each(t,function(e){e=t[e].split("=");r[e[0]]=e[1]}),r}function um_get_data_for_directory(e,r){var t=um_members_get_hash(e),a={},i=um_parse_current_url();if(jQuery.each(i,function(e){-1!==e.indexOf("_"+t)&&""!==i[e]&&(a[e.replace("_"+t,"")]=i[e])}),r){if(void 0!==a[r])try{a[r]=decodeURIComponent(a[r])}catch(e){console.error(e)}return a[r]}return a}function um_set_url_from_data(e,r,t){var a=um_members_get_hash(e),i=um_get_data_for_directory(e),m={},d=(Array.isArray(t)?(jQuery.each(t,function(e){t[e]=encodeURIComponent(t[e])}),t=t.join("||")):jQuery.isNumeric(t)||(t=t.split("||"),jQuery.each(t,function(e){t[e]=encodeURIComponent(t[e])}),t=t.join("||")),""!==t&&(m[r+"_"+a]=t),jQuery.each(i,function(e){r===e?""!==t&&(m[e+"_"+a]=t):m[e+"_"+a]=i[e]}),jQuery.each(um_member_directories,function(e){var r,t=um_member_directories[e];t!==a&&(r=um_get_data_for_directory(jQuery('.um-directory[data-hash="'+t+'"]')),jQuery.each(r,function(e){m[e+"_"+t]=r[e]}))}),[]),e=(jQuery.each(m,function(e){d.push(e+"="+m[e])}),"?"+(d=wp.hooks.applyFilters("um_member_directory_url_attrs",d)).join("&"));"?"===e&&(e=""),window.history.pushState("string","UM Member Directory",window.location.origin+window.location.pathname+e)}function um_members_get_hash(e){return e.data("hash")}function um_is_directory_busy(e){e=um_members_get_hash(e);return void 0!==um_members_directory_busy[e]&&um_members_directory_busy[e]}function um_members_show_preloader(e){um_members_directory_busy[um_members_get_hash(e)]=!0,e.find(".um-members-overlay").show()}function um_members_hide_preloader(e){um_members_directory_busy[um_members_get_hash(e)]=!1,e.find(".um-members-overlay").hide()}function um_set_range_label(e,r){var t,a="",i=e.siblings(".um-slider-range").data("placeholder-s"),m=e.siblings(".um-slider-range").data("placeholder-p"),r=r?(a=(r.values[0]===r.values[1]?i.replace("{value}",r.values[0]):m.replace("{min_range}",r.values[0]).replace("{max_range}",r.values[1])).replace("{field_label}",e.siblings(".um-slider-range").data("label")),t=r.values[0],r.values[1]):(a=(e.slider("values",0)===e.slider("values",1)?i.replace("{value}",e.slider("values",0)):m.replace("{min_range}",e.slider("values",0)).replace("{max_range}",e.slider("values",1))).replace("{field_label}",e.siblings(".um-slider-range").data("label")),t=e.slider("values",0),e.slider("values",1));e.siblings(".um-slider-range").html(a),e.siblings(".um_range_min").val(t),e.siblings(".um_range_max").val(r)}function um_get_search(e){return e.find(".um-search-line").length?e.find(".um-search-line").val():""}function um_get_sort(e){return e.data("sorting")}function um_get_current_page(e){e=e.data("page");return e=e&&void 0!==e?e:1}function um_time_convert(e,r){var t=Math.floor(e/60),e=e%60;return(t=60<=e&&(e=0,24<=(t+=1))?0:t)+":"+(e=e<10?"0"+e:e)}function um_ajax_get_members(_,e){var r,t,a,i,s,m=um_members_get_hash(_);wp.hooks.applyFilters("um_member_directory_get_members_allow",!0,m,_)?(r=um_get_current_page(_),t=um_get_search(_),a=um_get_sort(_),i=-(new Date).getTimezoneOffset()/60,s={directory_id:m,page:r,search:t,sorting:a,gmt_offset:i,post_refferer:_.data("base-post"),nonce:um_scripts.nonce},_.find(".um-search-filter").length&&_.find(".um-search-filter").each(function(){var e,r,t,a,i,m,d,u=jQuery(this);u.find(".um-slider").length?(m=u.find(".um-slider").data("field_name"),r=um_get_data_for_directory(_,"filter_"+m+"_from"),e=um_get_data_for_directory(_,"filter_"+m+"_to"),void 0===r&&void 0===e||(s[m]=[r,e])):u.find(".um-datepicker-filter").length?(m=u.find(".um-datepicker-filter").data("filter_name"),r=um_get_data_for_directory(_,"filter_"+m+"_from"),e=um_get_data_for_directory(_,"filter_"+m+"_to"),void 0===r&&void 0===e||(s[m]=[r,e])):u.find(".um-timepicker-filter").length?(m=u.find(".um-timepicker-filter").data("filter_name"),r=um_get_data_for_directory(_,"filter_"+m+"_from"),e=um_get_data_for_directory(_,"filter_"+m+"_to"),void 0!==r&&(r=(i=(i=+(r=r.split(":"))[0])<10?"0"+i:i)+":"+(a=(a=+r[1])<10?"0"+a:a)+":00"),void 0!==e&&(a=+(t=e.split(":"))[1],e=(i=(i=+t[0])<10?"0"+i:i)+":"+(a=a<10?"0"+a:a)+":59"),void 0===r&&void 0===e||(s[m]=[r,e])):u.find("select").length?(m=u.find("select").attr("name"),void 0!==(d=um_get_data_for_directory(_,"filter_"+m))&&(d=um_unsanitize_value(d),s[m]=d.split("||"))):u.hasClass("um-text-filter-type")&&u.find('input[type="text"]').length?(m=u.find('input[type="text"]').attr("name"),void 0!==(d=um_get_data_for_directory(_,"filter_"+m))&&(d=um_unsanitize_value(d),s[m]=d)):s=wp.hooks.applyFilters("um_member_directory_custom_filter_handler",s,u,_)}),s=wp.hooks.applyFilters("um_member_directory_filter_request",s),wp.ajax.send("um_get_members",{data:s,success:function(e){um_member_directory_last_data[m]=e,um_build_template(_,e);var r=wp.template("um-members-pagination");_.find(".um-members-pagination-box").html(r(e)),_.data("total_pages",e.pagination.total_pages),e.pagination.total_pages?(_.find(".um-member-directory-sorting-options").prop("disabled",!1),_.find(".um-member-directory-view-type").removeClass("um-disabled")):(_.find(".um-member-directory-sorting-options").prop("disabled",!0),_.find(".um-member-directory-view-type").addClass("um-disabled")),wp.hooks.doAction("um_member_directory_loaded",_,e),um_init_new_dropdown(),um_members_hide_preloader(_)},error:function(e){console.log(e),um_members_hide_preloader(_)}})):setTimeout(um_ajax_get_members,600,_,e)}function um_build_template(e,r){var t=e.data("view_type"),t=wp.template("um-member-"+t+"-"+um_members_get_hash(e)),t=(e.find(".um-members-grid, .um-members-list").remove(),e.find(".um-members-wrapper").prepend(t(r.users)),wp.template("um-members-header")),a=(e.find(".um-members-intro").remove(),wp.hooks.applyFilters("um_member_directory_generate_header",!1,e));(void 0!==r.is_search&&r.is_search||a)&&e.find(".um-members-wrapper").prepend(t(r)),e.addClass("um-loaded"),e.find(".um-members.um-members-grid").length&&UM_Member_Grid(e.find(".um-members.um-members-grid")),jQuery(document).trigger("um_build_template",[e,r]),jQuery(window).trigger("resize"),init_tipsy()}function UM_Member_Grid(r){r.find(".um-member").length&&r.imagesLoaded(function(){var e=wp.hooks.applyFilters("um_member_directory_grid_masonry_attrs",{itemSelector:".um-member",columnWidth:".um-member",gutter:".um-gutter-sizer"},r);r.masonry(e).on("layoutComplete",function(e,r){jQuery(document).trigger("um_grid_initialized",[e,r])})})}function um_get_filters_data(_){var s=[];return _.find(".um-search-filter").each(function(){var d,t,a,i,e,r,m,u=jQuery(this);u.find("input.um-datepicker-filter").length?(d="datepicker",u.find("input.um-datepicker-filter").each(function(){var e,r,t,a,i,m;"to"!==jQuery(this).data("range")&&(e=jQuery(this).data("filter_name"),r=um_get_data_for_directory(_,"filter_"+e+"_from"),t=um_get_data_for_directory(_,"filter_"+e+"_to"),void 0!==r||void 0!==t)&&((a=jQuery(this).val())===(i=_.find('input.um-datepicker-filter[data-range="to"][data-filter_name="'+e+'"]').val())?m=i:""!==a&&""!==i?m=a+" - "+i:""===a?m="before "+i:""===i&&(m="since "+a),s.push({name:e,label:jQuery(this).data("filter-label"),value_label:m,value:[r,t],type:d}))})):u.find("input.um-timepicker-filter").length?(d="timepicker",u.find("input.um-timepicker-filter").each(function(){var e,r,t,a,i,m;"to"!==jQuery(this).data("range")&&(e=jQuery(this).data("filter_name"),r=um_get_data_for_directory(_,"filter_"+e+"_from"),t=um_get_data_for_directory(_,"filter_"+e+"_to"),void 0!==r||void 0!==t)&&((a=jQuery(this).val())===(i=_.find('input.um-timepicker-filter[data-range="to"][data-filter_name="'+e+'"]').val())?m=i:""!==a&&""!==i?m=a+" - "+i:""===a?m="before "+i:""===i&&(m="since "+a),s.push({name:e,label:jQuery(this).data("filter-label"),value_label:m,value:[r,t],type:d}))})):u.find("select").length?(d="select",t=u.find("select").attr("name"),a=u.find("select").data("placeholder"),i=void 0===(i=um_get_data_for_directory(_,"filter_"+t))?[]:(i=um_unsanitize_value(i)).split("||"),jQuery.each(i,function(e){var r=u.find('select option[value="'+i[e]+'"]').data("value_label");s.push({name:t,label:a,value_label:r,value:i[e],type:d})})):u.hasClass("um-text-filter-type")&&u.find('input[type="text"]').length?(d="text",t=u.find('input[type="text"]').attr("name"),a=u.find('input[type="text"]').attr("placeholder"),""!=(i=void 0===(i=um_get_data_for_directory(_,"filter_"+t))?"":i)&&s.push({name:t,label:a,value_label:i,value:i,type:d})):u.find("div.ui-slider").length?(d="slider",t=u.find("div.ui-slider").data("field_name"),e=um_get_data_for_directory(_,"filter_"+t+"_from"),r=um_get_data_for_directory(_,"filter_"+t+"_to"),void 0===e&&void 0===r||(m=(e===r?u.find("div.um-slider-range").data("placeholder-s").replace("{value}",e):u.find("div.um-slider-range").data("placeholder-p").replace("{min_range}",e).replace("{max_range}",r)).replace("{field_label}",u.find("div.um-slider-range").data("label")),a=u.find("div.um-slider-range").data("label"),s.push({name:t,label:a,value_label:m,value:[e,r],type:d}))):s=wp.hooks.applyFilters("um_member_directory_get_filter_data",s,_,u)}),s}function um_change_tag(e){var r,t=um_get_filters_data(e),a=(e.find(".um-members-filter-tag").remove(),e.find(".um-filtered-line"));a.length&&(r=wp.template("um-members-filtered-line"),a.prepend(r({filters:t})),0===e.find(".um-members-filter-remove").length?(e.find(".um-clear-filters").hide(),e.find(".um-clear-filters").parents(".um-member-directory-header-row").addClass("um-header-row-invisible")):(e.find(".um-clear-filters").show(),e.find(".um-clear-filters").parents(".um-member-directory-header-row").removeClass("um-header-row-invisible")))}function um_run_search(e){if(!um_is_directory_busy(e)){um_members_show_preloader(e);var r=um_get_data_for_directory(e,"search"),t=um_sanitize_value(e.find(".um-search-line").val());if(t===r||""===t&&void 0===r)um_members_hide_preloader(e);else{e.data("general_search",t),um_set_url_from_data(e,"search",t),e.data("page",1),um_set_url_from_data(e,"page","");if(!wp.hooks.applyFilters("um_member_directory_ignore_after_search",!1,e)){r=e.data("must-search");if(1===r&&(t=um_get_search(e),0===e.find(".um-members-filter-remove").length)&&!t)return e.data("searched",0),e.find(".um-members-grid, .um-members-list, .um-members-intro").remove(),e.find(".um-member-directory-sorting-options").prop("disabled",!0),e.find(".um-member-directory-view-type").addClass("um-disabled"),wp.hooks.doAction("um_member_directory_clear_not_searched",e),void um_members_hide_preloader(e)}e.data("searched",1),e.find(".um-member-directory-sorting-options").prop("disabled",!1),e.find(".um-member-directory-view-type").removeClass("um-disabled"),um_ajax_get_members(e)}}}jQuery(document.body).ready(function(){jQuery(".um-directory .um-search-filter select").each(function(){1===jQuery(this).find("option:not(:disabled)").length&&jQuery(this).prop("disabled",!0);var e=jQuery(this);e.select2("destroy").select2({dropdownParent:e.parent()})}),jQuery(document.body).on("mouseover",".um-directory .um-member-directory-view-type",function(){var e;jQuery(this).hasClass("um-disabled")||((e=jQuery(this).find(".um-member-directory-view-type-a:visible")).hide(),(e.next().length?e.next():jQuery(this).find(".um-member-directory-view-type-a:first")).show().tipsy("show"))}).on("mouseout",".um-directory .um-member-directory-view-type",function(){jQuery(this).hasClass("um-disabled")||(jQuery(this).find(".um-member-directory-view-type-a").hide().tipsy("hide"),jQuery(this).find('.um-member-directory-view-type-a[data-type="'+jQuery(this).parents(".um-directory").data("view_type")+'"]').show())}),jQuery(document.body).on("click",".um-directory .um-member-directory-view-type-a",function(){var e=jQuery(this).parents(".um-directory");if(um_is_directory_busy(e))return!1;var r,t=jQuery(this),a=t.parents(".um-member-directory-view-type");a.hasClass("um-disabled")||(um_members_show_preloader(e),(r=a.find(".um-member-directory-view-type-a:visible")).hide(),(r.next().length?r.next():a.find(".um-member-directory-view-type-a:first")).show().tipsy("show"),null!==(r=um_member_directory_last_data[um_members_get_hash(e)])&&(um_set_url_from_data(e,"view_type",a=t.data("type")),e.data("view_type",a),um_build_template(e,r),um_init_new_dropdown()),um_members_hide_preloader(e))}),jQuery(document.body).on("click",".um-directory .um-do-search",function(){um_run_search(jQuery(this).parents(".um-directory"))}),jQuery(document.body).on("keypress",".um-directory .um-search-line",function(e){13===e.which&&um_run_search(jQuery(this).parents(".um-directory"))}),jQuery(document.body).on("click",'.um-new-dropdown[data-element=".um-member-directory-sorting-a"] li a',function(){var e,r,t;1===jQuery(this).data("selected")||(e=jQuery(this).data("directory-hash"),um_is_directory_busy(e=jQuery('.um-directory[data-hash="'+e+'"]')))||(um_members_show_preloader(e),r=jQuery(this).html(),t=jQuery(this).data("value"),e.data("sorting",t),um_set_url_from_data(e,"sort",t),um_ajax_get_members(e),e.find('.um-new-dropdown[data-element=".um-member-directory-sorting-a"]').find("a").data("selected",0).prop("data-selected",0).attr("data-selected",0),e.find('.um-new-dropdown[data-element=".um-member-directory-sorting-a"] a[data-value="'+t+'"]').data("selected",1).prop("data-selected",1).attr("data-selected",1),e.find(".um-member-directory-sorting-a").find("> a").html(r))}),jQuery(document.body).on("click",".um-directory .pagi:not(.current)",function(){var e,r;jQuery(this).hasClass("disabled")||um_is_directory_busy(e=jQuery(this).parents(".um-directory"))||(um_members_show_preloader(e),(1===(r="first"===jQuery(this).data("page")?1:"prev"===jQuery(this).data("page")?+e.data("page")-1:"next"===jQuery(this).data("page")?+e.data("page")+1:"last"===jQuery(this).data("page")?parseInt(e.data("total_pages")):parseInt(jQuery(this).data("page")))?(e.find('.pagi[data-page="first"], .pagi[data-page="prev"]').addClass("disabled"),e.find('.pagi[data-page="prev"], .pagi[data-page="last"]')):(r===parseInt(e.data("total_pages"))?e.find('.pagi[data-page="prev"], .pagi[data-page="last"]').addClass("disabled"):e.find('.pagi[data-page="prev"], .pagi[data-page="last"]').removeClass("disabled"),e.find('.pagi[data-page="first"], .pagi[data-page="prev"]'))).removeClass("disabled"),e.find(".pagi").removeClass("current"),e.find('.pagi[data-page="'+r+'"]').addClass("current"),e.data("page",r),um_set_url_from_data(e,"page",1===r?"":r),um_ajax_get_members(e))}),jQuery(document.body).on("change",".um-directory .um-members-pagi-dropdown",function(){var e,r=jQuery(this).parents(".um-directory");um_is_directory_busy(r)||(um_members_show_preloader(r),e=jQuery(this).val(),r.find(".pagi").removeClass("current"),r.find('.pagi[data-page="'+e+'"]').addClass("current"),r.data("page",e),um_set_url_from_data(r,"page",1===e?"":e),um_ajax_get_members(r))}),jQuery(document.body).on("click",".um-directory .um-members.um-members-list .um-member-more a",function(e){e.preventDefault();e=jQuery(this).parents(".um-member");return e.find(".um-member-more").hide(),e.find(".um-member-meta-main").slideDown(),e.find(".um-member-less").fadeIn(),!1}),jQuery(document.body).on("click",".um-directory .um-members.um-members-list .um-member-less a",function(e){e.preventDefault();e=jQuery(this).parents(".um-member");return e.find(".um-member-less").hide(),e.find(".um-member-meta-main").slideUp(),e.find(".um-member-more").fadeIn(),!1}),jQuery(document.body).on("click",".um-directory .um-members.um-members-grid .um-member-more a",function(e){e.preventDefault();var e=jQuery(this).parents(".um-member"),r=jQuery(this).parents(".um-members");return e.find(".um-member-more").hide(),e.find(".um-member-meta").slideDown(function(){UM_Member_Grid(r)}),e.find(".um-member-less").fadeIn(),setTimeout(function(){UM_Member_Grid(r)},100),!1}),jQuery(document.body).on("click",".um-directory .um-members.um-members-grid .um-member-less a",function(e){e.preventDefault();var r=jQuery(this).parents(".um-member"),t=jQuery(this).parents(".um-members");return r.find(".um-member-less").hide(),r.find(".um-member-meta").slideUp(function(){r.find(".um-member-more").fadeIn(),UM_Member_Grid(t)}),!1}),jQuery(".um-member-directory-filters-a").on("click",function(){var e=jQuery(this),r=e.parents(".um-directory").find(".um-search");r.is(":visible")?r.slideUp(250,function(){e.toggleClass("um-member-directory-filters-visible"),r.parents(".um-member-directory-header-row").toggleClass("um-header-row-invisible")}):r.slideDown({duration:250,start:function(){jQuery(this).css({display:"grid"}),e.toggleClass("um-member-directory-filters-visible"),r.parents(".um-member-directory-header-row").toggleClass("um-header-row-invisible")}})}),jQuery(document.body).on("change",".um-directory .um-search-filter select",function(){var e,r,t,a=jQuery(this).val(),i=um_sanitize_value(a);""===i||um_is_directory_busy(e=jQuery(this).parents(".um-directory"))||(um_members_show_preloader(e),t=void 0===(t=um_get_data_for_directory(e,"filter_"+(r=jQuery(this).prop("name"))))?[]:t.split("||"),-1===jQuery.inArray(i,t)&&(t.push(i),um_set_url_from_data(e,"filter_"+r,t=t.join("||")),e.data("page",1),um_set_url_from_data(e,"page","")),jQuery(this).find('option[value="'+a+'"]').prop("disabled",!0).hide(),1===jQuery(this).find("option:not(:disabled)").length&&jQuery(this).prop("disabled",!0),(i=jQuery(this)).select2("destroy").select2({dropdownParent:i.parent()}),i.val("").trigger("change"),um_ajax_get_members(e),um_change_tag(e),e.data("searched",1),e.find(".um-member-directory-sorting-options").prop("disabled",!1),e.find(".um-member-directory-view-type").removeClass("um-disabled"))}),jQuery(document.body).on("blur",'.um-directory .um-search-filter.um-text-filter-type input[type="text"]',function(){var e,r,t,a=jQuery(this).parents(".um-directory");um_is_directory_busy(a)||(e=um_sanitize_value(jQuery(this).val()))!==(t=void 0===(t=um_get_data_for_directory(a,"filter_"+(r=jQuery(this).prop("name"))))?"":t)&&(um_members_show_preloader(a),um_set_url_from_data(a,"filter_"+r,e),a.data("page",1),um_set_url_from_data(a,"page",""),um_ajax_get_members(a),um_change_tag(a),a.data("searched",1),a.find(".um-member-directory-sorting-options").prop("disabled",!1),a.find(".um-member-directory-view-type").removeClass("um-disabled"))}),jQuery(document.body).on("keypress",'.um-directory .um-search-filter.um-text-filter-type input[type="text"]',function(e){var r,t,a;13!==e.which||um_is_directory_busy(e=jQuery(this).parents(".um-directory"))||(r=um_sanitize_value(jQuery(this).val()))!==(a=void 0===(a=um_get_data_for_directory(e,"filter_"+(t=jQuery(this).prop("name"))))?"":a)&&(um_members_show_preloader(e),um_set_url_from_data(e,"filter_"+t,r),e.data("page",1),um_set_url_from_data(e,"page",""),um_ajax_get_members(e),um_change_tag(e),e.data("searched",1),e.find(".um-member-directory-sorting-options").prop("disabled",!1),e.find(".um-member-directory-view-type").removeClass("um-disabled"))}),jQuery(document.body).on("click",".um-directory .um-members-filter-remove",function(){var e=jQuery(this).parents(".um-directory");if(!um_is_directory_busy(e)&&e){um_members_show_preloader(e);var r=jQuery(this).data("value"),t=jQuery(this).data("name"),a=jQuery(this).data("type"),i=("text"===a?(um_set_url_from_data(e,"filter_"+t,""),jQuery('.um-search-filter input[name="'+t+'"]').val("")):"select"===a?(m=void 0===(m=um_get_data_for_directory(e,"filter_"+t))?[]:(m=um_unsanitize_value(m)).split("||"),um_set_url_from_data(e,"filter_"+t,m=(m=-1!==jQuery.inArray(r.toString(),m)?jQuery.grep(m,function(e){return e!==r.toString()}):m).length?m:""),(m=jQuery('.um-search-filter select[name="'+t+'"]')).find('option[value="'+r+'"]').prop("disabled",!1).show(),1a.data("total_pages")&&(t=a.data("total_pages")),a.data("page",t).attr("data-page",t),a.find(".um-member-directory-sorting").length&&(void 0===(t=um_get_data_for_directory(a,"sort"))&&(t=a.find('.um-new-dropdown[data-element=".um-member-directory-sorting-a"]').find('a[data-default="1"]').data("value")),a.data("sorting",t),(e=a.find('.um-new-dropdown[data-element=".um-member-directory-sorting-a"]')).find("a").data("selected",0).prop("data-selected",0).attr("data-selected",0),e.find('a[data-value="'+t+'"]').data("selected",1).prop("data-selected",1).attr("data-selected",1),a.find(".um-member-directory-sorting-a").find("> a").html(e.find('a[data-value="'+t+'"]').html())),a.find(".um-member-directory-view-type").length&&(void 0===(e=um_get_data_for_directory(a,"view_type"))&&(e=a.find('.um-member-directory-view-type-a[data-default="1"]').data("type")),a.data("view_type",e),a.find(".um-member-directory-view-type .um-member-directory-view-type-a").hide(),a.find('.um-member-directory-view-type .um-member-directory-view-type-a[data-type="'+e+'"]').show()),a.find(".um-datepicker-filter").each(function(){var e=jQuery(this),r=e.pickadate("picker"),t=e.data("filter_name"),e=e.data("range"),t=um_get_data_for_directory(a,"filter_"+t+"_"+e);void 0!==t?r.set("select",1e3*t):r.clear()}),a.find(".um-slider").each(function(){var e=jQuery(this),r=e.data("field_name"),t=um_get_data_for_directory(a,"filter_"+r+"_from"),r=um_get_data_for_directory(a,"filter_"+r+"_to");void 0===t&&(t=e.data("min")),t=parseInt(t),void 0===r&&(r=e.data("max")),r=parseInt(r),e.slider("values",[t,r]),um_set_range_label(e)}),a.find(".um-timepicker-filter").each(function(){var e=jQuery(this),r=e.pickatime("picker"),t=e.data("filter_name"),e=e.data("range"),t=um_get_data_for_directory(a,"filter_"+t+"_"+e);void 0!==t?(e=t.split(":"),r.set("select",60*e[0])):r.clear()}),wp.hooks.applyFilters("um_member_directory_ignore_after_search",!1,a));if(!t&&1===a.data("must-search")){var i=um_get_search(a);if(!um_get_filters_data(a).length&&!i)return a.data("searched",0),void um_members_hide_preloader(a);a.data("searched",1)}wp.hooks.applyFilters("um_member_directory_prevent_default_first_loading",!1,a,r)||(um_ajax_get_members(a),um_change_tag(a))})})}); \ No newline at end of file +var um_members_directory_busy=[],um_member_directories=[],um_member_directory_last_data=[];function um_parse_current_url(){var r={},t=window.location.search.substring(1).split("&");return jQuery.each(t,function(e){e=t[e].split("=");r[e[0]]=e[1]}),r}function um_get_data_for_directory(e,r){var t=um_members_get_hash(e),a={},i=um_parse_current_url();if(jQuery.each(i,function(e){-1!==e.indexOf("_"+t)&&""!==i[e]&&(a[e.replace("_"+t,"")]=i[e])}),r){if(void 0!==a[r])try{a[r]=decodeURIComponent(a[r])}catch(e){console.error(e)}return a[r]}return a}function um_set_url_from_data(e,r,t){var a=um_members_get_hash(e),i=um_get_data_for_directory(e),m={},d=(Array.isArray(t)?(jQuery.each(t,function(e){t[e]=encodeURIComponent(t[e])}),t=t.join("||")):jQuery.isNumeric(t)||(t=t.split("||"),jQuery.each(t,function(e){t[e]=encodeURIComponent(t[e])}),t=t.join("||")),""!==t&&(m[r+"_"+a]=t),jQuery.each(i,function(e){r===e?""!==t&&(m[e+"_"+a]=t):m[e+"_"+a]=i[e]}),jQuery.each(um_member_directories,function(e){var r,t=um_member_directories[e];t!==a&&(r=um_get_data_for_directory(jQuery('.um-directory[data-hash="'+t+'"]')),jQuery.each(r,function(e){m[e+"_"+t]=r[e]}))}),[]),e=(jQuery.each(m,function(e){d.push(e+"="+m[e])}),"?"+(d=wp.hooks.applyFilters("um_member_directory_url_attrs",d)).join("&"));"?"===e&&(e=""),window.history.pushState("string","UM Member Directory",window.location.origin+window.location.pathname+e)}function um_members_get_hash(e){return e.data("hash")}function um_is_directory_busy(e){e=um_members_get_hash(e);return void 0!==um_members_directory_busy[e]&&um_members_directory_busy[e]}function um_members_show_preloader(e){um_members_directory_busy[um_members_get_hash(e)]=!0,e.find(".um-members-overlay").show()}function um_members_hide_preloader(e){um_members_directory_busy[um_members_get_hash(e)]=!1,e.find(".um-members-overlay").hide()}function um_set_range_label(e,r){var t,a="",i=e.siblings(".um-slider-range").data("placeholder-s"),m=e.siblings(".um-slider-range").data("placeholder-p"),r=r?(a=(r.values[0]===r.values[1]?i.replace("{value}",r.values[0]):m.replace("{min_range}",r.values[0]).replace("{max_range}",r.values[1])).replace("{field_label}",e.siblings(".um-slider-range").data("label")),t=r.values[0],r.values[1]):(a=(e.slider("values",0)===e.slider("values",1)?i.replace("{value}",e.slider("values",0)):m.replace("{min_range}",e.slider("values",0)).replace("{max_range}",e.slider("values",1))).replace("{field_label}",e.siblings(".um-slider-range").data("label")),t=e.slider("values",0),e.slider("values",1));e.siblings(".um-slider-range").html(a),e.siblings(".um_range_min").val(t),e.siblings(".um_range_max").val(r)}function um_get_search(e){return e.find(".um-search-line").length?e.find(".um-search-line").val():""}function um_get_sort(e){return e.data("sorting")}function um_get_current_page(e){e=e.data("page");return e=e&&void 0!==e?e:1}function um_time_convert(e,r){var t=Math.floor(e/60),e=e%60;return(t=60<=e&&(e=0,24<=(t+=1))?0:t)+":"+(e=e<10?"0"+e:e)}function um_ajax_get_members(_,e){var r,t,a,i,s,m=um_members_get_hash(_);wp.hooks.applyFilters("um_member_directory_get_members_allow",!0,m,_)?(r=um_get_current_page(_),t=um_get_search(_),a=um_get_sort(_),i=-(new Date).getTimezoneOffset()/60,s={directory_id:m,page:r,search:t,sorting:a,gmt_offset:i,post_refferer:_.data("base-post"),nonce:um_scripts.nonce},_.find(".um-search-filter").length&&_.find(".um-search-filter").each(function(){var e,r,t,a,i,m,d,u=jQuery(this);u.find(".um-slider").length?(m=u.find(".um-slider").data("field_name"),r=um_get_data_for_directory(_,"filter_"+m+"_from"),e=um_get_data_for_directory(_,"filter_"+m+"_to"),void 0===r&&void 0===e||(s[m]=[r,e])):u.find(".um-datepicker-filter").length?(m=u.find(".um-datepicker-filter").data("filter_name"),r=um_get_data_for_directory(_,"filter_"+m+"_from"),e=um_get_data_for_directory(_,"filter_"+m+"_to"),void 0===r&&void 0===e||(s[m]=[r,e])):u.find(".um-timepicker-filter").length?(m=u.find(".um-timepicker-filter").data("filter_name"),r=um_get_data_for_directory(_,"filter_"+m+"_from"),e=um_get_data_for_directory(_,"filter_"+m+"_to"),void 0!==r&&(r=(i=(i=+(r=r.split(":"))[0])<10?"0"+i:i)+":"+(a=(a=+r[1])<10?"0"+a:a)+":00"),void 0!==e&&(a=+(t=e.split(":"))[1],e=(i=(i=+t[0])<10?"0"+i:i)+":"+(a=a<10?"0"+a:a)+":59"),void 0===r&&void 0===e||(s[m]=[r,e])):u.find("select").length?(m=u.find("select").attr("name"),void 0!==(d=um_get_data_for_directory(_,"filter_"+m))&&(d=um_unsanitize_value(d),s[m]=d.split("||"))):u.hasClass("um-text-filter-type")&&u.find('input[type="text"]').length?(m=u.find('input[type="text"]').attr("name"),void 0!==(d=um_get_data_for_directory(_,"filter_"+m))&&(d=um_unsanitize_value(d),s[m]=d)):s=wp.hooks.applyFilters("um_member_directory_custom_filter_handler",s,u,_)}),s=wp.hooks.applyFilters("um_member_directory_filter_request",s),wp.ajax.send("um_get_members",{data:s,success:function(e){um_member_directory_last_data[m]=e,um_build_template(_,e);var r=wp.template("um-members-pagination");_.find(".um-members-pagination-box").html(r(e)),_.data("total_pages",e.pagination.total_pages),e.pagination.total_pages?(_.find(".um-member-directory-sorting-options").prop("disabled",!1),_.find(".um-member-directory-view-type").removeClass("um-disabled")):(_.find(".um-member-directory-sorting-options").prop("disabled",!0),_.find(".um-member-directory-view-type").addClass("um-disabled")),wp.hooks.doAction("um_member_directory_loaded",_,e),um_init_new_dropdown(),um_members_hide_preloader(_)},error:function(e){console.log(e),um_members_hide_preloader(_)}})):setTimeout(um_ajax_get_members,600,_,e)}function um_build_template(e,r){var t=e.data("view_type"),t=wp.template("um-member-"+t+"-"+um_members_get_hash(e)),t=(e.find(".um-members-grid, .um-members-list").remove(),e.find(".um-members-wrapper").prepend(t(r.users)),wp.template("um-members-header")),a=(e.find(".um-members-intro").remove(),wp.hooks.applyFilters("um_member_directory_generate_header",!1,e));(void 0!==r.is_search&&r.is_search||a)&&e.find(".um-members-wrapper").prepend(t(r)),e.addClass("um-loaded"),e.find(".um-members.um-members-grid").length&&UM_Member_Grid(e.find(".um-members.um-members-grid")),jQuery(document).trigger("um_build_template",[e,r]),jQuery(window).trigger("resize"),init_tipsy()}function UM_Member_Grid(r){r.find(".um-member").length&&r.imagesLoaded(function(){var e=wp.hooks.applyFilters("um_member_directory_grid_masonry_attrs",{itemSelector:".um-member",columnWidth:".um-member",gutter:".um-gutter-sizer"},r);r.masonry(e).on("layoutComplete",function(e,r){jQuery(document).trigger("um_grid_initialized",[e,r])})})}function um_get_filters_data(_){var s=[];return _.find(".um-search-filter").each(function(){var d,t,a,i,e,r,m,u=jQuery(this);u.find("input.um-datepicker-filter").length?(d="datepicker",u.find("input.um-datepicker-filter").each(function(){var e,r,t,a,i,m;"to"!==jQuery(this).data("range")&&(e=jQuery(this).data("filter_name"),r=um_get_data_for_directory(_,"filter_"+e+"_from"),t=um_get_data_for_directory(_,"filter_"+e+"_to"),void 0!==r||void 0!==t)&&((a=jQuery(this).val())===(i=_.find('input.um-datepicker-filter[data-range="to"][data-filter_name="'+e+'"]').val())?m=i:""!==a&&""!==i?m=a+" - "+i:""===a?m="before "+i:""===i&&(m="since "+a),s.push({name:e,label:jQuery(this).data("filter-label"),value_label:m,value:[r,t],type:d}))})):u.find("input.um-timepicker-filter").length?(d="timepicker",u.find("input.um-timepicker-filter").each(function(){var e,r,t,a,i,m;"to"!==jQuery(this).data("range")&&(e=jQuery(this).data("filter_name"),r=um_get_data_for_directory(_,"filter_"+e+"_from"),t=um_get_data_for_directory(_,"filter_"+e+"_to"),void 0!==r||void 0!==t)&&((a=jQuery(this).val())===(i=_.find('input.um-timepicker-filter[data-range="to"][data-filter_name="'+e+'"]').val())?m=i:""!==a&&""!==i?m=a+" - "+i:""===a?m="before "+i:""===i&&(m="since "+a),s.push({name:e,label:jQuery(this).data("filter-label"),value_label:m,value:[r,t],type:d}))})):u.find("select").length?(d="select",t=u.find("select").attr("name"),a=u.find("select").data("placeholder"),i=void 0===(i=um_get_data_for_directory(_,"filter_"+t))?[]:(i=um_unsanitize_value(i)).split("||"),jQuery.each(i,function(e){var r=u.find('select option[value="'+i[e]+'"]').data("value_label");s.push({name:t,label:a,value_label:r,value:i[e],type:d})})):u.hasClass("um-text-filter-type")&&u.find('input[type="text"]').length?(d="text",t=u.find('input[type="text"]').attr("name"),a=u.find('input[type="text"]').attr("placeholder"),""!=(i=void 0===(i=um_get_data_for_directory(_,"filter_"+t))?"":i)&&s.push({name:t,label:a,value_label:i,value:i,type:d})):u.find("div.ui-slider").length?(d="slider",t=u.find("div.ui-slider").data("field_name"),e=um_get_data_for_directory(_,"filter_"+t+"_from"),r=um_get_data_for_directory(_,"filter_"+t+"_to"),void 0===e&&void 0===r||(m=(e===r?u.find("div.um-slider-range").data("placeholder-s").replace("{value}",e):u.find("div.um-slider-range").data("placeholder-p").replace("{min_range}",e).replace("{max_range}",r)).replace("{field_label}",u.find("div.um-slider-range").data("label")),a=u.find("div.um-slider-range").data("label"),s.push({name:t,label:a,value_label:m,value:[e,r],type:d}))):s=wp.hooks.applyFilters("um_member_directory_get_filter_data",s,_,u)}),s}function um_change_tag(e){var r,t=um_get_filters_data(e),a=(e.find(".um-members-filter-tag").remove(),e.find(".um-filtered-line"));a.length&&(r=wp.template("um-members-filtered-line"),a.prepend(r({filters:t})),0===e.find(".um-members-filter-remove").length?(e.find(".um-clear-filters").hide(),e.find(".um-clear-filters").parents(".um-member-directory-header-row").addClass("um-header-row-invisible")):(e.find(".um-clear-filters").show(),e.find(".um-clear-filters").parents(".um-member-directory-header-row").removeClass("um-header-row-invisible")))}function um_run_search(e){if(!um_is_directory_busy(e)){um_members_show_preloader(e);var r=um_get_data_for_directory(e,"search"),t=um_sanitize_value(e.find(".um-search-line").val());if(t===r||""===t&&void 0===r)um_members_hide_preloader(e);else{e.data("general_search",t),um_set_url_from_data(e,"search",t),e.data("page",1),um_set_url_from_data(e,"page","");if(!wp.hooks.applyFilters("um_member_directory_ignore_after_search",!1,e)){r=e.data("must-search");if(1===r&&(t=um_get_search(e),0===e.find(".um-members-filter-remove").length)&&!t)return e.data("searched",0),e.find(".um-members-grid, .um-members-list, .um-members-intro").remove(),e.find(".um-member-directory-sorting-options").prop("disabled",!0),e.find(".um-member-directory-view-type").addClass("um-disabled"),wp.hooks.doAction("um_member_directory_clear_not_searched",e),void um_members_hide_preloader(e)}e.data("searched",1),e.find(".um-member-directory-sorting-options").prop("disabled",!1),e.find(".um-member-directory-view-type").removeClass("um-disabled"),um_ajax_get_members(e)}}}function um_slider_filter_init(e){e.find(".um-slider").each(function(){var e=jQuery(this),t=e.parents(".um-directory"),a=e.data("field_name"),r=um_get_data_for_directory(t,"filter_"+a+"_from"),i=um_get_data_for_directory(t,"filter_"+a+"_to"),r=[r=void 0===r?parseInt(e.data("min")):r,i=void 0===i?parseInt(e.data("max")):i];e.slider({range:!0,min:parseInt(e.data("min")),max:parseInt(e.data("max")),values:r,create:function(e,r){},step:1,slide:function(e,r){um_set_range_label(jQuery(this),r)},stop:function(e,r){um_is_directory_busy(t)||(um_members_show_preloader(t),um_set_url_from_data(t,"filter_"+a+"_from",r.values[0]),um_set_url_from_data(t,"filter_"+a+"_to",r.values[1]),t.data("page",1),um_set_url_from_data(t,"page",""),um_ajax_get_members(t),um_change_tag(t),t.data("searched",1),t.find(".um-member-directory-sorting-options").prop("disabled",!1),t.find(".um-member-directory-view-type").removeClass("um-disabled"))}}),um_set_range_label(e)})}jQuery(document.body).ready(function(){jQuery(".um-directory .um-search-filter select").each(function(){1===jQuery(this).find("option:not(:disabled)").length&&jQuery(this).prop("disabled",!0);var e=jQuery(this);e.select2("destroy").select2({dropdownParent:e.parent()})}),jQuery(document.body).on("mouseover",".um-directory .um-member-directory-view-type",function(){var e;jQuery(this).hasClass("um-disabled")||((e=jQuery(this).find(".um-member-directory-view-type-a:visible")).hide(),(e.next().length?e.next():jQuery(this).find(".um-member-directory-view-type-a:first")).show().tipsy("show"))}).on("mouseout",".um-directory .um-member-directory-view-type",function(){jQuery(this).hasClass("um-disabled")||(jQuery(this).find(".um-member-directory-view-type-a").hide().tipsy("hide"),jQuery(this).find('.um-member-directory-view-type-a[data-type="'+jQuery(this).parents(".um-directory").data("view_type")+'"]').show())}),jQuery(document.body).on("click",".um-directory .um-member-directory-view-type-a",function(){var e=jQuery(this).parents(".um-directory");if(um_is_directory_busy(e))return!1;var r,t=jQuery(this),a=t.parents(".um-member-directory-view-type");a.hasClass("um-disabled")||(um_members_show_preloader(e),(r=a.find(".um-member-directory-view-type-a:visible")).hide(),(r.next().length?r.next():a.find(".um-member-directory-view-type-a:first")).show().tipsy("show"),null!==(r=um_member_directory_last_data[um_members_get_hash(e)])&&(um_set_url_from_data(e,"view_type",a=t.data("type")),e.data("view_type",a),um_build_template(e,r),um_init_new_dropdown()),um_members_hide_preloader(e))}),jQuery(document.body).on("click",".um-directory .um-do-search",function(){um_run_search(jQuery(this).parents(".um-directory"))}),jQuery(document.body).on("keypress",".um-directory .um-search-line",function(e){13===e.which&&um_run_search(jQuery(this).parents(".um-directory"))}),jQuery(document.body).on("click",'.um-new-dropdown[data-element=".um-member-directory-sorting-a"] li a',function(){var e,r,t;1===jQuery(this).data("selected")||(e=jQuery(this).data("directory-hash"),um_is_directory_busy(e=jQuery('.um-directory[data-hash="'+e+'"]')))||(um_members_show_preloader(e),r=jQuery(this).html(),t=jQuery(this).data("value"),e.data("sorting",t),um_set_url_from_data(e,"sort",t),um_ajax_get_members(e),e.find('.um-new-dropdown[data-element=".um-member-directory-sorting-a"]').find("a").data("selected",0).prop("data-selected",0).attr("data-selected",0),e.find('.um-new-dropdown[data-element=".um-member-directory-sorting-a"] a[data-value="'+t+'"]').data("selected",1).prop("data-selected",1).attr("data-selected",1),e.find(".um-member-directory-sorting-a").find("> a").html(r))}),jQuery(document.body).on("click",".um-directory .pagi:not(.current)",function(){var e,r;jQuery(this).hasClass("disabled")||um_is_directory_busy(e=jQuery(this).parents(".um-directory"))||(um_members_show_preloader(e),(1===(r="first"===jQuery(this).data("page")?1:"prev"===jQuery(this).data("page")?+e.data("page")-1:"next"===jQuery(this).data("page")?+e.data("page")+1:"last"===jQuery(this).data("page")?parseInt(e.data("total_pages")):parseInt(jQuery(this).data("page")))?(e.find('.pagi[data-page="first"], .pagi[data-page="prev"]').addClass("disabled"),e.find('.pagi[data-page="prev"], .pagi[data-page="last"]')):(r===parseInt(e.data("total_pages"))?e.find('.pagi[data-page="prev"], .pagi[data-page="last"]').addClass("disabled"):e.find('.pagi[data-page="prev"], .pagi[data-page="last"]').removeClass("disabled"),e.find('.pagi[data-page="first"], .pagi[data-page="prev"]'))).removeClass("disabled"),e.find(".pagi").removeClass("current"),e.find('.pagi[data-page="'+r+'"]').addClass("current"),e.data("page",r),um_set_url_from_data(e,"page",1===r?"":r),um_ajax_get_members(e))}),jQuery(document.body).on("change",".um-directory .um-members-pagi-dropdown",function(){var e,r=jQuery(this).parents(".um-directory");um_is_directory_busy(r)||(um_members_show_preloader(r),e=jQuery(this).val(),r.find(".pagi").removeClass("current"),r.find('.pagi[data-page="'+e+'"]').addClass("current"),r.data("page",e),um_set_url_from_data(r,"page",1===e?"":e),um_ajax_get_members(r))}),jQuery(document.body).on("click",".um-directory .um-members.um-members-list .um-member-more a",function(e){e.preventDefault();e=jQuery(this).parents(".um-member");return e.find(".um-member-more").hide(),e.find(".um-member-meta-main").slideDown(),e.find(".um-member-less").fadeIn(),!1}),jQuery(document.body).on("click",".um-directory .um-members.um-members-list .um-member-less a",function(e){e.preventDefault();e=jQuery(this).parents(".um-member");return e.find(".um-member-less").hide(),e.find(".um-member-meta-main").slideUp(),e.find(".um-member-more").fadeIn(),!1}),jQuery(document.body).on("click",".um-directory .um-members.um-members-grid .um-member-more a",function(e){e.preventDefault();var e=jQuery(this).parents(".um-member"),r=jQuery(this).parents(".um-members");return e.find(".um-member-more").hide(),e.find(".um-member-meta").slideDown(function(){UM_Member_Grid(r)}),e.find(".um-member-less").fadeIn(),setTimeout(function(){UM_Member_Grid(r)},100),!1}),jQuery(document.body).on("click",".um-directory .um-members.um-members-grid .um-member-less a",function(e){e.preventDefault();var r=jQuery(this).parents(".um-member"),t=jQuery(this).parents(".um-members");return r.find(".um-member-less").hide(),r.find(".um-member-meta").slideUp(function(){r.find(".um-member-more").fadeIn(),UM_Member_Grid(t)}),!1}),jQuery(".um-member-directory-filters-a").on("click",function(){var e=jQuery(this),r=e.parents(".um-directory").find(".um-search");r.is(":visible")?r.slideUp(250,function(){e.toggleClass("um-member-directory-filters-visible"),r.parents(".um-member-directory-header-row").toggleClass("um-header-row-invisible")}):r.slideDown({duration:250,start:function(){jQuery(this).css({display:"grid"}),e.toggleClass("um-member-directory-filters-visible"),r.parents(".um-member-directory-header-row").toggleClass("um-header-row-invisible")}})}),jQuery(document.body).on("change",".um-directory .um-search-filter select",function(){var e,r,t,a=jQuery(this).val(),i=um_sanitize_value(a);""===i||um_is_directory_busy(e=jQuery(this).parents(".um-directory"))||(um_members_show_preloader(e),t=void 0===(t=um_get_data_for_directory(e,"filter_"+(r=jQuery(this).prop("name"))))?[]:t.split("||"),-1===jQuery.inArray(i,t)&&(t.push(i),um_set_url_from_data(e,"filter_"+r,t=t.join("||")),e.data("page",1),um_set_url_from_data(e,"page","")),jQuery(this).find('option[value="'+a+'"]').prop("disabled",!0).hide(),1===jQuery(this).find("option:not(:disabled)").length&&jQuery(this).prop("disabled",!0),(i=jQuery(this)).select2("destroy").select2({dropdownParent:i.parent()}),i.val("").trigger("change"),um_ajax_get_members(e),um_change_tag(e),e.data("searched",1),e.find(".um-member-directory-sorting-options").prop("disabled",!1),e.find(".um-member-directory-view-type").removeClass("um-disabled"))}),jQuery(document.body).on("blur",'.um-directory .um-search-filter.um-text-filter-type input[type="text"]',function(){var e,r,t,a=jQuery(this).parents(".um-directory");um_is_directory_busy(a)||(e=um_sanitize_value(jQuery(this).val()))!==(t=void 0===(t=um_get_data_for_directory(a,"filter_"+(r=jQuery(this).prop("name"))))?"":t)&&(um_members_show_preloader(a),um_set_url_from_data(a,"filter_"+r,e),a.data("page",1),um_set_url_from_data(a,"page",""),um_ajax_get_members(a),um_change_tag(a),a.data("searched",1),a.find(".um-member-directory-sorting-options").prop("disabled",!1),a.find(".um-member-directory-view-type").removeClass("um-disabled"))}),jQuery(document.body).on("keypress",'.um-directory .um-search-filter.um-text-filter-type input[type="text"]',function(e){var r,t,a;13!==e.which||um_is_directory_busy(e=jQuery(this).parents(".um-directory"))||(r=um_sanitize_value(jQuery(this).val()))!==(a=void 0===(a=um_get_data_for_directory(e,"filter_"+(t=jQuery(this).prop("name"))))?"":a)&&(um_members_show_preloader(e),um_set_url_from_data(e,"filter_"+t,r),e.data("page",1),um_set_url_from_data(e,"page",""),um_ajax_get_members(e),um_change_tag(e),e.data("searched",1),e.find(".um-member-directory-sorting-options").prop("disabled",!1),e.find(".um-member-directory-view-type").removeClass("um-disabled"))}),jQuery(document.body).on("click",".um-directory .um-members-filter-remove",function(){var e=jQuery(this).parents(".um-directory");if(!um_is_directory_busy(e)&&e){um_members_show_preloader(e);var r=jQuery(this).data("value"),t=jQuery(this).data("name"),a=jQuery(this).data("type"),i=("text"===a?(um_set_url_from_data(e,"filter_"+t,""),jQuery('.um-search-filter input[name="'+t+'"]').val("")):"select"===a?(m=void 0===(m=um_get_data_for_directory(e,"filter_"+t))?[]:(m=um_unsanitize_value(m)).split("||"),um_set_url_from_data(e,"filter_"+t,m=(m=-1!==jQuery.inArray(r.toString(),m)?jQuery.grep(m,function(e){return e!==r.toString()}):m).length?m:""),(m=jQuery('.um-search-filter select[name="'+t+'"]')).find('option[value="'+r+'"]').prop("disabled",!1).show(),1a.data("total_pages")&&(t=a.data("total_pages")),a.data("page",t).attr("data-page",t),a.find(".um-member-directory-sorting").length&&(void 0===(t=um_get_data_for_directory(a,"sort"))&&(t=a.find('.um-new-dropdown[data-element=".um-member-directory-sorting-a"]').find('a[data-default="1"]').data("value")),a.data("sorting",t),(e=a.find('.um-new-dropdown[data-element=".um-member-directory-sorting-a"]')).find("a").data("selected",0).prop("data-selected",0).attr("data-selected",0),e.find('a[data-value="'+t+'"]').data("selected",1).prop("data-selected",1).attr("data-selected",1),a.find(".um-member-directory-sorting-a").find("> a").html(e.find('a[data-value="'+t+'"]').html())),a.find(".um-member-directory-view-type").length&&(void 0===(e=um_get_data_for_directory(a,"view_type"))&&(e=a.find('.um-member-directory-view-type-a[data-default="1"]').data("type")),a.data("view_type",e),a.find(".um-member-directory-view-type .um-member-directory-view-type-a").hide(),a.find('.um-member-directory-view-type .um-member-directory-view-type-a[data-type="'+e+'"]').show()),a.find(".um-datepicker-filter").each(function(){var e=jQuery(this),r=e.pickadate("picker"),t=e.data("filter_name"),e=e.data("range"),t=um_get_data_for_directory(a,"filter_"+t+"_"+e);void 0!==t?r.set("select",1e3*t):r.clear()}),a.find(".um-slider").each(function(){var e=jQuery(this),r=e.data("field_name"),t=um_get_data_for_directory(a,"filter_"+r+"_from"),r=um_get_data_for_directory(a,"filter_"+r+"_to");void 0===t&&(t=e.data("min")),t=parseInt(t),void 0===r&&(r=e.data("max")),r=parseInt(r),e.slider("values",[t,r]),um_set_range_label(e)}),a.find(".um-timepicker-filter").each(function(){var e=jQuery(this),r=e.pickatime("picker"),t=e.data("filter_name"),e=e.data("range"),t=um_get_data_for_directory(a,"filter_"+t+"_"+e);void 0!==t?(e=t.split(":"),r.set("select",60*e[0])):r.clear()}),wp.hooks.applyFilters("um_member_directory_ignore_after_search",!1,a));if(!t&&1===a.data("must-search")){var i=um_get_search(a);if(!um_get_filters_data(a).length&&!i)return a.data("searched",0),void um_members_hide_preloader(a);a.data("searched",1)}wp.hooks.applyFilters("um_member_directory_prevent_default_first_loading",!1,a,r)||(um_ajax_get_members(a),um_change_tag(a))})})}); \ No newline at end of file diff --git a/readme.txt b/readme.txt index fbf8212f..ba298e4d 100644 --- a/readme.txt +++ b/readme.txt @@ -7,7 +7,7 @@ Tags: community, member, membership, user-profile, user-registration Requires PHP: 5.6 Requires at least: 5.5 Tested up to: 6.3 -Stable tag: 2.6.11 +Stable tag: 2.6.12 License: GNU Version 2 or Any Later Version License URI: http://www.gnu.org/licenses/gpl-3.0.txt @@ -166,9 +166,46 @@ No specific extensions are needed. But we highly recommended keep active these P IMPORTANT: PLEASE UPDATE THE PLUGIN TO AT LEAST VERSION 2.6.7 IMMEDIATELY. VERSION 2.6.7 PATCHES SECURITY PRIVILEGE ESCALATION VULNERABILITY. PLEASE SEE [THIS ARTICLE](https://docs.ultimatemember.com/article/1866-security-incident-update-and-recommended-actions) FOR MORE INFORMATION -= 2.6.12: September xx, 2023 = += 2.6.12: October 09, 2023 = +* Enhancements: + - Added: Site Health sections + - Added: oEmbed field type + - Added: YouTube field type supports YouTube Shorts links + - Added: Profile permalink base options: Unique hash, Custom usermeta + - Added: UM Form meta `um_form_version` for legacy support in the future + - Added: Setting "Deleting user comments after deleting a user" for WordPress native logic workaround + - Updated: Structure for enqueue assets PHP classes + - Updated: [Hooks Documentation v2](https://ultimatemember.github.io/ultimatemember/hooks/) + +* Bugfixes: + + - Fixed: Added 'ID' metakey to the blacklist. It's not possible to create field with 'ID' metakey to avoid the conflict + - Fixed: Add/Edit Field metabox and "Field Icon", "Conditional logic" fields + - Fixed: Init `jquery-slider-ui` script/style on the block editor page + - Fixed: Displaying "Notifications Account Tab" setting + - Fixed: Displaying Post Date on the User Profile > Posts tab based on this [article](https://make.wordpress.org/core/2019/09/23/date-time-improvements-wp-5-3/) + - Fixed: Small PHP warning, notices and typos + +* Deprecated: + + - `UM()->enqueue()` use `UM()->frontend()->enqueue()` method + - `UM()->admin_enqueue()` use `UM()->admin()->enqueue()` method + - `UM()->admin_enqueue()->suffix` property use `UM()->frontend()->enqueue()::get_suffix()` + - `UM()->admin()->enqueue()->suffix` property use `UM()->frontend()->enqueue()::get_suffix()` + - Changed directories for the fonts (fonticons + raty), and JS/CSS files related to libs `jquery-ui`, `raty`, `select2`, `tipsy`, `fonticons (FontAwesome + Ionicons)` + +* Templates required update: + + - account.php + - login.php + - password-change.php + - password-reset.php + - register.php + - profile/posts-single.php + +* Cached and optimized/minified assets(JS/CSS) must be flushed/re-generated after upgrade = 2.6.11: September 06, 2023 = From 64fe55a2165b4ecd44ec9d62910b5f13226722e8 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Wed, 4 Oct 2023 14:53:19 +0300 Subject: [PATCH 71/81] - updated readme file; --- readme.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/readme.txt b/readme.txt index ba298e4d..173cd639 100644 --- a/readme.txt +++ b/readme.txt @@ -181,6 +181,7 @@ IMPORTANT: PLEASE UPDATE THE PLUGIN TO AT LEAST VERSION 2.6.7 IMMEDIATELY. VERSI * Bugfixes: + - Fixed: Member directory search query escaping process - Fixed: Added 'ID' metakey to the blacklist. It's not possible to create field with 'ID' metakey to avoid the conflict - Fixed: Add/Edit Field metabox and "Field Icon", "Conditional logic" fields - Fixed: Init `jquery-slider-ui` script/style on the block editor page From a83d546c38cb46af053a82ce3315fa325b19dbef Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Wed, 4 Oct 2023 17:18:34 +0300 Subject: [PATCH 72/81] - updated readme file; --- readme.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/readme.txt b/readme.txt index 173cd639..4fefbc27 100644 --- a/readme.txt +++ b/readme.txt @@ -176,6 +176,7 @@ IMPORTANT: PLEASE UPDATE THE PLUGIN TO AT LEAST VERSION 2.6.7 IMMEDIATELY. VERSI - Added: Profile permalink base options: Unique hash, Custom usermeta - Added: UM Form meta `um_form_version` for legacy support in the future - Added: Setting "Deleting user comments after deleting a user" for WordPress native logic workaround + - Added: `aria-invalid` and `aria-errormessage` attributes to the fields on UM Forms - Updated: Structure for enqueue assets PHP classes - Updated: [Hooks Documentation v2](https://ultimatemember.github.io/ultimatemember/hooks/) From 2cd5cb0be7e9256727db12945b371a78e1e331ab Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Thu, 5 Oct 2023 15:01:37 +0300 Subject: [PATCH 73/81] - required asterisk styling for wp-admin; --- includes/admin/assets/css/um-admin-forms.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/includes/admin/assets/css/um-admin-forms.css b/includes/admin/assets/css/um-admin-forms.css index 6beb8ecf..cb38c6a5 100644 --- a/includes/admin/assets/css/um-admin-forms.css +++ b/includes/admin/assets/css/um-admin-forms.css @@ -410,3 +410,8 @@ textarea.um-forms-field.um-small-field { text-align: left; margin: 0 10px 0 0; } + +.um-form-table span.um-req { + margin: 0 0 0 4px; + color: #a00; +} From a6466f01b4f0f4b32cb4474c9239cc54580c8b2f Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Thu, 5 Oct 2023 23:17:14 +0300 Subject: [PATCH 74/81] - small PHP fix; --- includes/admin/class-site-health.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/includes/admin/class-site-health.php b/includes/admin/class-site-health.php index 93726e6e..79926164 100644 --- a/includes/admin/class-site-health.php +++ b/includes/admin/class-site-health.php @@ -563,13 +563,17 @@ class Site_Health { 'value' => UM()->options()->get( 'profile_secondary_btn_word' ), ); } + + $default_avatar = UM()->options()->get( 'default_avatar' ); + $default_cover = UM()->options()->get( 'default_cover' ); + $appearance_settings['um-default_avatar'] = array( 'label' => __( 'Default Profile Photo', 'ultimate-member' ), - 'value' => UM()->options()->get( 'default_avatar' )['url'], + 'value' => ! empty( $default_avatar['url'] ) ? $default_avatar['url'] : '', ); $appearance_settings['um-default_cover'] = array( 'label' => __( 'Default Cover Photo', 'ultimate-member' ), - 'value' => UM()->options()->get( 'default_cover' )['url'], + 'value' => ! empty( $default_cover['url'] ) ? $default_cover['url'] : '', ); $appearance_settings['um-disable_profile_photo_upload'] = array( 'label' => __( 'Disable Profile Photo Upload', 'ultimate-member' ), From 90bc49d298362815e140b65f14a0c4156ce40cce Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Fri, 6 Oct 2023 17:30:03 +0300 Subject: [PATCH 75/81] - fixed PHP notices in Site Health; --- includes/admin/class-site-health.php | 114 ++++----------------------- 1 file changed, 16 insertions(+), 98 deletions(-) diff --git a/includes/admin/class-site-health.php b/includes/admin/class-site-health.php index 79926164..a035dfa8 100644 --- a/includes/admin/class-site-health.php +++ b/includes/admin/class-site-health.php @@ -41,9 +41,17 @@ class Site_Health { return get_option( "um_role_{$key}_meta", false ); } + public function array_map( $item ) { + if ( is_array( $item ) ) { + $item = maybe_serialize( $item ); + } + return $item; + } + private function get_field_data( $info, $key, $field_key, $field ) { $row = isset( $field['metakey'] ) ? false : true; $title = $row ? __( 'Row: ', 'ultimate-member' ) . $field['id'] : __( 'Field: ', 'ultimate-member' ) . $field['metakey']; + $field = array_map( array( &$this, 'array_map' ), $field ); $field_info = array( 'um-field_' . $field_key => array( 'label' => $title, @@ -1567,7 +1575,7 @@ class Site_Health { $info = apply_filters( 'um_debug_information_register_form', $info, $key ); $fields = get_post_meta( $key, '_um_custom_fields', true ); - if ( ! empty( $fields ) ) { + if ( ! empty( $fields ) && is_array( $fields ) ) { foreach ( $fields as $field_key => $field ) { $field_info = $this->get_field_data( $info, $key, $field_key, $field ); @@ -1630,7 +1638,7 @@ class Site_Health { $info = apply_filters( 'um_debug_information_login_form', $info, $key ); $fields = get_post_meta( $key, '_um_custom_fields', true ); - if ( ! empty( $fields ) ) { + if ( ! empty( $fields ) && is_array( $fields ) ) { foreach ( $fields as $field_key => $field ) { $field_info = $this->get_field_data( $info, $key, $field_key, $field ); @@ -1694,101 +1702,11 @@ class Site_Health { 'label' => __( 'Show user description in profile header?', 'ultimate-member' ), 'value' => get_post_meta( $key, '_um_profile_show_bio', true ) ? $labels['yes'] : $labels['no'], ), - 'um-profile_menu' => array( - 'label' => __( 'Enable profile menu', 'ultimate-member' ), - 'value' => get_post_meta( $key, '_um_profile_menu', true ) ? $labels['yes'] : $labels['no'], - ), ) ); - if ( 1 === absint( get_post_meta( $key, '_um_profile_menu', true ) ) ) { - $tab_options = array( - 0 => __( 'Anyone', 'ultimate-member' ), - 1 => __( 'Guests only', 'ultimate-member' ), - 2 => __( 'Members only', 'ultimate-member' ), - 3 => __( 'Only the owner', 'ultimate-member' ), - 4 => __( 'Only specific roles', 'ultimate-member' ), - 5 => __( 'Owner and specific roles', 'ultimate-member' ), - ); - - $tabs_for_count = 0; - $tabs = UM()->profile()->tabs(); - - foreach ( $tabs as $k => $tab ) { - $profile_tab = get_post_meta( $key, '_um_profile_tab_' . $k, true ); - - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-profile_tab_' . $k => array( - 'label' => $tab['name'] . __( ' Tab', 'ultimate-member' ), - 'value' => $profile_tab ? $labels['yes'] : $labels['no'], - ), - ) - ); - - if ( isset( $profile_tab ) && 1 === absint( $profile_tab ) ) { - $tabs_for_count++; - $privacy = '_um_profile_tab_' . $k . '_privacy'; - $tab_privacy = get_post_meta( $key, $privacy, true ); - - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-profile_tab_' . $k . '_privacy' => array( - 'label' => __( 'Who can see ', 'ultimate-member' ) . $tab['name'] . __( ' Tab?', 'ultimate-member' ), - 'value' => $tab_options[ $tab_privacy ], - ), - ) - ); - - if ( 4 === absint( $tab_privacy ) || 5 === absint( $tab_privacy ) ) { - $allowed_tab = '_um_profile_tab_' . $k . '_roles'; - if ( ! empty( get_post_meta( $key, $allowed_tab, true ) ) ) { - $allowed_roles = implode( ', ', get_post_meta( $key, $allowed_tab, true ) ); - } else { - $allowed_roles = 'All'; - } - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-profile_tab_' . $k . '_privacy_roles' => array( - 'label' => __( 'Allowed roles for ', 'ultimate-member' ) . $tab['name'] . __( ' Tab', 'ultimate-member' ), - 'value' => $allowed_roles, - ), - ) - ); - } - } - } - - if ( $tabs_for_count > 0 ) { - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-profile_menu_default_tab' => array( - 'label' => __( 'Profile menu default tab', 'ultimate-member' ), - 'value' => $tabs[ get_post_meta( $key, '_um_profile_menu_default_tab', true ) ]['name'], - ), - ) - ); - } - - $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( - $info[ 'ultimate-member-' . $key ]['fields'], - array( - 'um-profile_menu_icons' => array( - 'label' => __( 'Enable menu icons in desktop view', 'ultimate-member' ), - 'value' => get_post_meta( $key, '_um_profile_menu_icons', true ) ? $labels['yes'] : $labels['no'], - ), - ) - ); - - $info = apply_filters( 'um_debug_information_tab_form', $info, $key ); - } - $fields = get_post_meta( $key, '_um_custom_fields', true ); - if ( ! empty( $fields ) ) { + if ( ! empty( $fields ) && is_array( $fields ) ) { foreach ( $fields as $field_key => $field ) { $field_info = $this->get_field_data( $info, $key, $field_key, $field ); @@ -1800,7 +1718,7 @@ class Site_Health { } $profile_metafields = get_post_meta( $key, '_um_profile_metafields', true ); - if ( ! empty( $profile_metafields ) ) { + if ( ! empty( $profile_metafields ) && is_array( $profile_metafields ) ) { foreach ( $profile_metafields as $k => $field ) { $info[ 'ultimate-member-' . $key ]['fields'] = array_merge( $info[ 'ultimate-member-' . $key ]['fields'], @@ -2025,7 +1943,7 @@ class Site_Health { if ( 1 === absint( get_post_meta( $key, '_um_show_tagline', true ) ) ) { $tagline_fields = get_post_meta( $key, '_um_tagline_fields', true ); - if ( ! empty( $tagline_fields ) ) { + if ( ! empty( $tagline_fields ) && is_array( $tagline_fields ) ) { foreach ( $tagline_fields as $k => $field ) { $label = isset( $options[ $field ] ) ? $options[ $field ] : $field; $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( @@ -2053,7 +1971,7 @@ class Site_Health { if ( 1 === absint( get_post_meta( $key, '_um_show_userinfo', true ) ) ) { $reveal_fields = get_post_meta( $key, '_um_reveal_fields', true ); - if ( ! empty( $reveal_fields ) ) { + if ( ! empty( $reveal_fields ) && is_array( $reveal_fields ) ) { foreach ( $reveal_fields as $k => $field ) { $label = isset( $options[ $field ] ) ? $options[ $field ] : $field; $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( @@ -2117,7 +2035,7 @@ class Site_Health { ); $search_fields = get_post_meta( $key, '_um_search_fields', true ); - if ( ! empty( $search_fields ) ) { + if ( ! empty( $search_fields ) && is_array( $search_fields ) ) { foreach ( $search_fields as $k => $field ) { $label = isset( $options[ $field ] ) ? $options[ $field ] : $field; $info[ 'ultimate-member-directory-' . $key ]['fields'] = array_merge( @@ -2156,7 +2074,7 @@ class Site_Health { } $search_filters = get_post_meta( $key, '_um_search_filters', true ); - if ( ! empty( $search_filters ) ) { + if ( ! empty( $search_filters ) && is_array( $search_filters ) ) { foreach ( $search_filters as $k => $field ) { $label = isset( $options[ $k ] ) ? $options[ $k ] : $k; $value = $field; From cd6ed757ff37c17e77125d07910fbc995d055d3f Mon Sep 17 00:00:00 2001 From: Champ Camba Date: Mon, 9 Oct 2023 21:32:12 +0800 Subject: [PATCH 76/81] Add a space between '> version.' and 'please update ... ' --- includes/class-dependencies.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/class-dependencies.php b/includes/class-dependencies.php index 977505ab..e61c6993 100644 --- a/includes/class-dependencies.php +++ b/includes/class-dependencies.php @@ -201,7 +201,7 @@ if ( ! class_exists( 'um\Dependencies' ) ) { } elseif ( empty( $this->ext_required_version[ $ext_key ] ) || version_compare( $this->ext_required_version[ $ext_key ], $ext_ver, '>' ) ) { // translators: %1$s is a plugin name; %2$s is a extension name; %3$s is a extension version. $message = sprintf( __( 'Sorry, but this version of %1$s does not work with extension "%2$s" %3$s version.', 'ultimate-member' ), UM_PLUGIN_NAME, $ext_title, $ext_ver ) . - '
' . + '
' . // translators: %s: extension name. sprintf( __( 'Please update extension "%s" to the latest version.', 'ultimate-member' ), $ext_title ); } From b88ddf881ff59cde669cb0ca7063767cf820b015 Mon Sep 17 00:00:00 2001 From: ashubawork Date: Mon, 9 Oct 2023 18:53:34 +0300 Subject: [PATCH 77/81] - add a youtube video validatation --- includes/core/class-builtin.php | 1 + includes/core/um-actions-form.php | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/includes/core/class-builtin.php b/includes/core/class-builtin.php index bbe8249d..424a5ebc 100644 --- a/includes/core/class-builtin.php +++ b/includes/core/class-builtin.php @@ -1565,6 +1565,7 @@ if ( ! class_exists( 'um\core\Builtin' ) ) { $array['unique_username_or_email'] = __('Unique Username/E-mail','ultimate-member'); $array['url'] = __('Website URL','ultimate-member'); $array['youtube_url'] = __('YouTube Profile','ultimate-member'); + $array['youtube_video'] = __('YouTube Video','ultimate-member'); $array['spotify_url'] = __('Spotify URL','ultimate-member'); $array['telegram_url'] = __('Telegram URL','ultimate-member'); $array['discord'] = __('Discord ID','ultimate-member'); diff --git a/includes/core/um-actions-form.php b/includes/core/um-actions-form.php index cc5d9526..643f8f68 100644 --- a/includes/core/um-actions-form.php +++ b/includes/core/um-actions-form.php @@ -791,6 +791,13 @@ function um_submit_form_errors_hook_( $submitted_data, $form_data ) { } break; + case 'youtube_video': + if ( ! UM()->validation()->is_url( $submitted_data[ $key ], 'youtube.com/watch?v=' ) && ! UM()->validation()->is_url( $submitted_data[ $key ], 'youtu.be' ) && ! UM()->validation()->is_url( $submitted_data[ $key ], 'youtube.com/shorts/' ) ) { + // translators: %s: label. + UM()->form()->add_error( $key, sprintf( __( 'Please enter a valid %s URL', 'ultimate-member' ), $array['label'] ) ); + } + break; + case 'spotify_url': if ( ! UM()->validation()->is_url( $submitted_data[ $key ], 'open.spotify.com' ) ) { // translators: %s: label. From 57ef818cec90bd36c95ed5a241e2fdaf1ea96a21 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Mon, 9 Oct 2023 19:50:44 +0300 Subject: [PATCH 78/81] - use `user_login` by default while generating slug if custom user meta is empty; --- includes/core/class-user.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/includes/core/class-user.php b/includes/core/class-user.php index 3c97e305..4935e463 100644 --- a/includes/core/class-user.php +++ b/includes/core/class-user.php @@ -842,6 +842,25 @@ if ( ! class_exists( 'um\core\User' ) ) { * add_filter( 'um_custom_meta_permalink_base_generate_user_slug', 'my_custom_meta_permalink_base_generate_user_slug', 10, 3 ); */ $user_in_url = apply_filters( 'um_custom_meta_permalink_base_generate_user_slug', $user_in_url, $user_id, $custom_meta ); + + if ( empty( $user_in_url ) ) { + $user_in_url = $userdata->user_login; + if ( is_email( $user_in_url ) ) { + + $user_email = $user_in_url; + $user_in_url = str_replace( '@', '', $user_in_url ); + + if ( ( $pos = strrpos( $user_in_url, '.' ) ) !== false ) { + $search_length = strlen( '.' ); + $user_in_url = substr_replace( $user_in_url, '-', $pos, $search_length ); + } + update_user_meta( $user_id, "um_email_as_username_{$user_in_url}", $user_email ); + + } else { + $user_in_url = urlencode( $user_in_url ); + } + update_user_meta( $user_id, "um_user_profile_url_slug_user_login", $user_in_url ); + } } } From bfe4c436f234c2c15458061506abb5778d8209be Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Tue, 10 Oct 2023 00:55:23 +0300 Subject: [PATCH 79/81] - fixed select2 JS errors for the user dropdown field; --- includes/admin/assets/js/um-admin-forms.js | 10 ++++++---- includes/admin/core/class-admin-forms.php | 4 +++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/includes/admin/assets/js/um-admin-forms.js b/includes/admin/assets/js/um-admin-forms.js index 531919f4..196f58ec 100644 --- a/includes/admin/assets/js/um-admin-forms.js +++ b/includes/admin/assets/js/um-admin-forms.js @@ -1,5 +1,5 @@ function um_admin_init_users_select() { - if ( jQuery('.um-user-select-field:visible').length ) { + if ( jQuery('.um-user-select-field:visible:not(.um-select2-inited)').length ) { function avatarformat( data ) { var option; if ( ! data.id ) { @@ -84,13 +84,15 @@ function um_admin_init_users_select() { templateResult: avatarformat }; - jQuery('.um-user-select-field:visible').each( function() { + let selector = jQuery('.um-user-select-field:visible:not(.um-select2-inited)'); + + selector.each( function() { if ( jQuery(this).hasClass('select2-hidden-accessible') ) { - jQuery(this).select2( 'destroy' ); + jQuery(this).removeClass('um-select2-inited').select2( 'destroy' ); } }); - jQuery('.um-user-select-field:visible').select2( select2_atts ); + selector.addClass('um-select2-inited').select2( select2_atts ); } } diff --git a/includes/admin/core/class-admin-forms.php b/includes/admin/core/class-admin-forms.php index 21bb22d9..01cb7b8c 100644 --- a/includes/admin/core/class-admin-forms.php +++ b/includes/admin/core/class-admin-forms.php @@ -644,8 +644,10 @@ if ( ! class_exists( 'um\admin\core\Admin_Forms' ) ) { $hidden = ''; if ( ! empty( $multiple ) ) { $hidden = ""; + } else { + $options = '' . $options; } - $html = "$hidden"; + $html = "$hidden"; return $html; } From 4bd992f228055270bed572752bdec1218ab73f66 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Tue, 10 Oct 2023 11:47:30 +0300 Subject: [PATCH 80/81] - updated dependencies; --- includes/class-dependencies.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/includes/class-dependencies.php b/includes/class-dependencies.php index e61c6993..898fb426 100644 --- a/includes/class-dependencies.php +++ b/includes/class-dependencies.php @@ -34,7 +34,7 @@ if ( ! class_exists( 'um\Dependencies' ) ) { 'followers' => '2.1.6', 'forumwp' => '2.1.5', 'friends' => '2.1.4', - 'groups' => '2.1.7', + 'groups' => '2.4.2', 'jobboardwp' => '1.0.7', 'mailchimp' => '2.2.0', 'messaging' => '2.2.5', @@ -43,22 +43,22 @@ if ( ! class_exists( 'um\Dependencies' ) ) { 'notifications' => '2.1.3', 'online' => '2.1.1', 'private-content' => '2.0.5', - 'profile-completeness' => '2.1.2', + 'profile-completeness' => '2.2.7', 'profile-tabs' => '1.0.0', 'recaptcha' => '2.3.4', 'reviews' => '2.1.5', 'social-activity' => '2.2.0', 'social-login' => '2.2.0', 'stripe' => '1.0.0', - 'terms-conditions' => '2.1.1', + 'terms-conditions' => '2.1.6', 'unsplash' => '2.0.2', 'user-bookmarks' => '2.1.4', 'user-locations' => '1.0.0', 'user-notes' => '1.1.0', 'user-photos' => '2.0.4', - 'user-tags' => '2.1.0', + 'user-tags' => '2.2.6', 'verified-users' => '2.0.5', - 'woocommerce' => '2.1.9', + 'woocommerce' => '2.3.7', /*????*/ 'restrict-content' => '2.0', From e84ab0b677f036e3ef278b844239cad8a22b177e Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Tue, 10 Oct 2023 12:34:19 +0300 Subject: [PATCH 81/81] - updated phpdocs; --- includes/core/class-form.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/core/class-form.php b/includes/core/class-form.php index beb43872..d1dbf837 100644 --- a/includes/core/class-form.php +++ b/includes/core/class-form.php @@ -41,7 +41,7 @@ if ( ! class_exists( 'um\core\Form' ) ) { public $nonce = null; /** - * @var null + * @var null|array */ public $errors = null;