From f158909339aaa1f53eae03e5cf4e99b6f93054cc Mon Sep 17 00:00:00 2001 From: nikitozzzzzzz Date: Wed, 6 Sep 2017 17:11:14 +0300 Subject: [PATCH] - beta1 released; - fixed restriction post categories; - fixed 2.0 upgrade; - optimized and added backward compatibility to dependencies class; --- includes/admin/core/packages/2.0.php | 2 +- includes/class-dependencies.php | 70 ++++++++++---- includes/core/um-actions-access.php | 138 +++++++++++++++++++++++++-- ultimate-member.php | 2 +- 4 files changed, 186 insertions(+), 26 deletions(-) diff --git a/includes/admin/core/packages/2.0.php b/includes/admin/core/packages/2.0.php index 0e018095..06fb4770 100644 --- a/includes/admin/core/packages/2.0.php +++ b/includes/admin/core/packages/2.0.php @@ -1168,7 +1168,7 @@ foreach ( $member_directories as $directory_id ) { return 'um_' . $item; }, $um_roles_can_search ); - update_post_meta( $directory_id, '_um_roles', $um_roles_can_search ); + update_post_meta( $directory_id, '_um_roles_can_search', $um_roles_can_search ); } } diff --git a/includes/class-dependencies.php b/includes/class-dependencies.php index c09853a2..af13a5c1 100644 --- a/includes/class-dependencies.php +++ b/includes/class-dependencies.php @@ -14,6 +14,34 @@ if ( ! class_exists( 'um\Dependencies' ) ) { private static $active_plugins; + /** + * For backward compatibility checking + * + * @var array + */ + public $ext_required_version = array( + 'bbpress' => '2.0-beta1', + 'followers' => '2.0-beta1', + 'friends' => '2.0-beta1', + 'groups' => '2.0-beta1', + 'instagram' => '2.0-beta1', + 'invitations' => '2.0-beta1', + 'mailchimp' => '2.0-beta1', + 'messaging' => '2.0-beta1', + 'mycred' => '2.0-beta1', + 'notices' => '2.0-beta1', + 'notifications' => '2.0-beta1', + 'online' => '2.0-beta1', + 'profile-completeness' => '2.0-beta1', + 'recaptcha' => '2.0-beta1', + 'reviews' => '2.0-beta1', + 'social-activity' => '2.0-beta1', + 'social-login' => '2.0-beta1', + 'terms-conditions' => '2.0-beta1', + 'user-tags' => '2.0-beta1', + 'verified-users' => '2.0-beta1', + 'woocommerce' => '2.0-beta1', + ); /** * Get all active plugins @@ -84,13 +112,35 @@ if ( ! class_exists( 'um\Dependencies' ) ) { /** - * @param string $extension_version Extension version - * @return mixed + * Compare UM core and extension versions + * + * @param string $um_required_ver + * @param string $ext_ver + * @param string $ext_key + * @param string $ext_title + * @return bool */ - public static function ultimatemember_version_check( $extension_version ) { + public function compare_versions( $um_required_ver, $ext_ver, $ext_key, $ext_title ) { - return version_compare( ultimatemember_version, $extension_version, '>=' ); + if ( version_compare( ultimatemember_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, '<' ) ) { + $message = sprintf( __( 'Sorry, but for this version of extension "%s" is required version of the %s core not lower than %s.', 'ultimate-member' ), $ext_title, ultimatemember_plugin_name, $um_required_ver ) . + '
' . + sprintf( __( 'Please update %s core to latest version or install previous versions of this extension.', 'ultimate-member' ), ultimatemember_plugin_name ); + } elseif ( empty( $this->ext_required_version[$ext_key] ) || version_compare( $this->ext_required_version[$ext_key], $ext_ver, '>' ) ) { + $message = sprintf( __( 'Sorry, but this version of %s does not work with extension "%s" %s version.', 'ultimate-member' ), ultimatemember_plugin_name, $ext_title, $ext_ver ) . + '
' . + sprintf( __( 'Please update extension "%s" to the latest version, or install previous versions of %s.', 'ultimate-member' ), $ext_title, ultimatemember_plugin_name ); + } + + return $message; + } + + return true; } @@ -117,16 +167,4 @@ if ( ! function_exists( 'is_um_active' ) ) { function is_um_active() { return Dependencies::ultimatemember_active_check(); } -} - - -if ( ! function_exists( 'is_um_version_required' ) ) { - /** - * Check UltimateMember core required version - * - * @return bool Larger then required - true | Less than necessary - false - */ - function is_um_version_required( $version ) { - return Dependencies::ultimatemember_version_check( $version ); - } } \ No newline at end of file diff --git a/includes/core/um-actions-access.php b/includes/core/um-actions-access.php index 424e5185..e68715a3 100644 --- a/includes/core/um-actions-access.php +++ b/includes/core/um-actions-access.php @@ -4,7 +4,7 @@ */ add_action('um_access_global_settings','um_access_global_settings'); function um_access_global_settings() { - global $post; + global $post, $wp_query; $access = um_get_option('accessible'); @@ -45,13 +45,135 @@ } // Disallow access in category pages - if ( is_category() ){ - $category_page_accessible = um_get_option("category_page_accessible"); - if ( $category_page_accessible == 0 ) { - UM()->access()->redirect_handler = UM()->access()->set_referer( $redirect, "global" ); - wp_redirect( UM()->access()->redirect_handler ); exit; - } else { - UM()->access()->allow_access = true; + if ( is_category() ) { + $cat_obj = $wp_query->get_queried_object(); + $restriction = get_term_meta( $cat_obj->term_id, 'um_content_restriction', true ); + + if ( ! empty( $restriction['_um_custom_access_settings'] ) ) { + + if ( ! isset( $restriction['_um_accessible'] ) || '0' == $restriction['_um_accessible'] ) { + + UM()->access()->allow_access = true; + + } else { + //post is private + if ( '1' == $restriction['_um_accessible'] ) { + //if post for not logged in users and user is not logged in + if ( ! is_user_logged_in() || current_user_can( 'administrator' ) ) { + UM()->access()->allow_access = true; + } else { + if ( ! isset( $restriction['_um_noaccess_action'] ) || '0' == $restriction['_um_noaccess_action'] ) { + UM()->access()->redirect_handler = UM()->access()->set_referer( $redirect, "global" ); + wp_redirect( UM()->access()->redirect_handler ); exit; + } elseif ( '1' == $restriction['_um_noaccess_action'] ) { + $curr = UM()->permalinks()->get_current_url(); + + if ( ! isset( $restriction['_um_access_redirect'] ) || '0' == $restriction['_um_access_redirect'] ) { + + UM()->access()->redirect_handler = UM()->access()->set_referer( $redirect, "global" ); + wp_redirect( UM()->access()->redirect_handler ); exit; + + } elseif ( '1' == $restriction['_um_access_redirect'] ) { + + if ( ! empty( $restriction['_um_access_redirect_url'] ) ) { + $redirect = $restriction['_um_access_redirect_url']; + } else { + $redirect = esc_url( add_query_arg( 'redirect_to', urlencode_deep( $curr ), um_get_core_page( 'login' ) ) ); + } + + UM()->access()->redirect_handler = UM()->access()->set_referer( $redirect, "global" ); + wp_redirect( UM()->access()->redirect_handler ); exit; + } + + } + } + } elseif ( '2' == $restriction['_um_accessible'] ) { + //if post for logged in users and user is not logged in + if ( is_user_logged_in() ) { + + if ( current_user_can( 'administrator' ) ) { + UM()->access()->allow_access = true; + } + + $user_can = $this->user_can( get_current_user_id(), $restriction['_um_access_roles'] ); + + if ( $user_can ) { + UM()->access()->allow_access = true; + } + + + //if single post query + if ( ! isset( $restriction['_um_noaccess_action'] ) || '0' == $restriction['_um_noaccess_action'] ) { + UM()->access()->redirect_handler = UM()->access()->set_referer( $redirect, "global" ); + wp_redirect( UM()->access()->redirect_handler ); exit; + } elseif ( '1' == $restriction['_um_noaccess_action'] ) { + + $curr = UM()->permalinks()->get_current_url(); + + if ( ! isset( $restriction['_um_access_redirect'] ) || '0' == $restriction['_um_access_redirect'] ) { + + UM()->access()->redirect_handler = UM()->access()->set_referer( $redirect, "global" ); + wp_redirect( UM()->access()->redirect_handler ); exit; + + } elseif ( '1' == $restriction['_um_access_redirect'] ) { + + if ( ! empty( $restriction['_um_access_redirect_url'] ) ) { + $redirect = $restriction['_um_access_redirect_url']; + } else { + $redirect = esc_url( add_query_arg( 'redirect_to', urlencode_deep( $curr ), um_get_core_page( 'login' ) ) ); + } + + UM()->access()->redirect_handler = UM()->access()->set_referer( $redirect, "global" ); + wp_redirect( UM()->access()->redirect_handler ); exit; + } + + } + } else { + + //if single post query + if ( ! isset( $restriction['_um_noaccess_action'] ) || '0' == $restriction['_um_noaccess_action'] ) { + UM()->access()->redirect_handler = UM()->access()->set_referer( $redirect, "global" ); + wp_redirect( UM()->access()->redirect_handler ); exit; + } elseif ( '1' == $restriction['_um_noaccess_action'] ) { + + $curr = UM()->permalinks()->get_current_url(); + + if ( ! isset( $restriction['_um_access_redirect'] ) || '0' == $restriction['_um_access_redirect'] ) { + UM()->access()->redirect_handler = UM()->access()->set_referer( $redirect, "global" ); + wp_redirect( UM()->access()->redirect_handler ); exit; + } elseif ( '1' == $restriction['_um_access_redirect'] ) { + + if ( ! empty( $restriction['_um_access_redirect_url'] ) ) { + $redirect = $restriction['_um_access_redirect_url']; + } else { + $redirect = esc_url( add_query_arg( 'redirect_to', urlencode_deep( $curr ), um_get_core_page( 'login' ) ) ); + } + + UM()->access()->redirect_handler = UM()->access()->set_referer( $redirect, "global" ); + wp_redirect( UM()->access()->redirect_handler ); exit; + } + } + } + } + } + } else { + + if ( is_user_logged_in() && current_user_can( 'administrator' ) ) { + UM()->access()->allow_access = true; + } else { + $category_page_accessible = um_get_option( "category_page_accessible" ); + if ( $category_page_accessible == 0 ) { + + UM()->access()->redirect_handler = UM()->access()->set_referer( $redirect, "global" ); + wp_redirect( UM()->access()->redirect_handler ); exit; + + } else { + + UM()->access()->allow_access = true; + + } + } + } } } diff --git a/ultimate-member.php b/ultimate-member.php index 05406cbb..797c2d7b 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.0.0-alpha1 +Version: 2.0-beta1 Author: Ultimate Member Author URI: http://ultimatemember.com/ Text Domain: ultimate-member