| Server IP : 46.105.57.169 / Your IP : 216.73.216.67 Web Server : Apache System : Linux webm002.cluster120.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64 User : verseaumee ( 152031) PHP Version : 8.5.7 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/verseaumee/middletvnew/wp-content/plugins/armember/core/classes/ |
Upload File : |
<?php
if (!class_exists('ARM_restriction')) {
class ARM_restriction {
function __construct() {
global $wp, $wpdb, $ARMember, $arm_slugs, $arm_global_settings;
//add_action('init', array($this, 'arm_set_current_user'), 11);
//add_action('init', array($this, 'arm_restriction_init'), 12);
add_action('parse_request', array($this, 'arm_restrict_all_access'), 1);
add_filter('the_content', array($this, 'arm_the_content_filter'), 11);
add_filter('arm_restricted_site_access_allow_pages', array($this, 'arm_filter_allow_page_ids'), 10, 1);
//add_action('wp', array($this, 'arm_wp_head_redirect'), 6);
add_filter( 'rest_pre_echo_response', array( $this, 'arm_rest_api_pre_echo_response_func' ), 10, 3);
add_action('pre_get_posts', array($this, 'arm_pre_get_posts'), 11);
add_filter('get_terms_args', array($this, 'arm_get_terms_args'), 20, 2);
add_filter('wp_get_nav_menu_items', array($this, 'arm_wp_get_nav_menu_items'), 50, 3);
add_action('wp_nav_menu_objects', array($this, 'arm_wp_nav_menu_items'), 10, 2);
add_filter('widget_posts_args', array($this, 'arm_widget_posts_args'));
add_filter('widget_pages_args', array($this, 'arm_widget_pages_args'));
/* * ******************./Begin Feeds Protection/.******************** */
add_filter('feed_link', array($this, 'arm_feed_link'), 99, 2);
/* * ******************./End Feeds Protection./******************** */
add_filter('posts_join', array($this, 'arm_custom_posts_join'), 11);
add_filter('posts_where', array($this, 'arm_filter_where'), 11, 2);
add_filter('posts_distinct', array($this, 'arm_search_distinct'));
}
function arm_search_distinct() {
return "DISTINCT";
}
function arm_posts_clauses($pieces, $query) {
global $wpdb;
$relation = isset($query->meta_query->relation) ? $query->meta_query->relation : 'AND';
if ($relation != 'OR')
return $pieces; // Only makes sense if OR.
$prepare_args = array();
$key_value_compares = array();
foreach ($query->meta_query->queries as $key => $meta_query) {
if (!is_array($meta_query))
continue;
// Doesn't work for IN, NOT IN, BETWEEN, NOT BETWEEN, NOT EXISTS.
if ($meta_query['compare'] === 'EXISTS') {
$key_value_compares[] = '(pm.meta_key = %s)';
$prepare_args[] = $meta_query['key'];
} else {
if (!isset($meta_query['value']) || is_array($meta_query['value']))
return $pieces; // Bail if no value or is array.
$key_value_compares[] = '(pm.meta_key = %s AND pm.meta_value ' . $meta_query['compare'] . ' %s)';
$prepare_args[] = $meta_query['key'];
$prepare_args[] = $meta_query['value'];
}
}
$sql = ' JOIN ' . $wpdb->postmeta . ' pm on pm.post_id = ' . $wpdb->posts . '.ID'
. ' AND (' . implode(' ' . $relation . ' ', $key_value_compares) . ')';
array_unshift($prepare_args, $sql);
$pieces['join'] = call_user_func_array(array($wpdb, 'prepare'), $prepare_args);
// Zap postmeta clauses.
$wheres = explode("\n", $pieces['where']);
foreach ($wheres as &$where) {
$where = preg_replace(array(
'/ +\( +' . $wpdb->postmeta . '\.meta_key .+\) *$/',
'/ +\( +mt[0-9]+\.meta_key .+\) *$/',
'/ +mt[0-9]+.meta_key = \'[^\']*\'/',
), '(1=1)', $where);
}
$pieces['where'] = implode('', $wheres);
$pieces['orderby'] = str_replace($wpdb->postmeta, 'pm', $pieces['orderby']); // Sorting won't really work but at least make it not crap out.
return $pieces;
}
function arm_custom_posts_join($join) {
global $wpdb, $current_user, $wp_query, $arm_access_rules;
$this->arm_add_required_core_file();
$arm_default_access_rules = $arm_access_rules->arm_get_default_access_rules();
$arm_allow_content_listing = isset($arm_default_access_rules['arm_allow_content_listing']) ? $arm_default_access_rules['arm_allow_content_listing'] : 0;
if (isset($wp_query) && !empty($wp_query) && $wp_query != NULL) {
if (!is_admin() && !$wp_query->is_singular() && !current_user_can('administrator') && $arm_allow_content_listing != 1) {
if ($wp_query->get('post_type') != 'nav_menu_item' && $wp_query->get('post_type') != 'page' && $wp_query->get('post_type') != 'attachment') {
$join .= " LEFT JOIN $wpdb->postmeta AS myarmjoin ON ($wpdb->posts.ID = myarmjoin.post_id AND myarmjoin.meta_key = 'arm_access_plan' ) ";
}
}
}
return $join;
}
function arm_filter_where($where, $obj) {
global $wpdb, $current_user, $wp_query, $arm_access_rules, $arm_drip_rules, $ARMember;
do_action('arm_default_access_rules_restriction_specific_user', $obj);
$this->arm_add_required_core_file();
$arm_default_access_rules = $arm_access_rules->arm_get_default_access_rules();
$arm_allow_content_listing = isset($arm_default_access_rules['arm_allow_content_listing']) ? $arm_default_access_rules['arm_allow_content_listing'] : 0;
if (isset($wp_query) && !empty($wp_query) && $wp_query != NULL) {
if (!is_admin() && !$wp_query->is_singular() && !current_user_can('administrator') && $arm_allow_content_listing != 1) {
if ($wp_query->get('post_type') != 'nav_menu_item' && $wp_query->get('post_type') != 'page' && $wp_query->get('post_type') != 'attachment') {
if (is_user_logged_in()) {
$current_user_plan = $current_user->get('arm_user_plan_ids');
$current_user_plan = apply_filters('arm_allow_specific_user_restricted_access', $current_user_plan, $current_user->ID);
$current_user_plan_array = !empty($current_user_plan) ? $current_user_plan : array(-2);
$suspended_plan_ids = get_user_meta($current_user->ID, 'arm_user_suspended_plan_ids', true);
$suspended_plan_ids = apply_filters('arm_assign_suspended_plan_data', $suspended_plan_ids, $current_user->ID);
$suspended_plan_ids = (isset($suspended_plan_ids) && !empty($suspended_plan_ids)) ? $suspended_plan_ids : array();
if (!empty($current_user_plan_array) && is_array($current_user_plan_array)) {
foreach ($current_user_plan_array as $cp) {
if (in_array($cp, $suspended_plan_ids)) {
unset($current_user_plan_array[array_search($cp, $current_user_plan_array)]);
}
}
}
$current_user_plan_array = !empty($current_user_plan_array) ? $current_user_plan_array : array(-2);
$arm_primary_status = arm_get_member_status($current_user->ID);
if($arm_primary_status == 3){
$current_user_plan_array = array(-5);
}
$current_user_plan = implode(',', $current_user_plan_array);
$where .= " AND ( ( myarmjoin.post_id IS NULL ) OR ( myarmjoin.meta_key = 'arm_access_plan' AND myarmjoin.meta_value IN ( " . $current_user_plan . " ) )";
if ($arm_drip_rules->isDripFeature && !$obj->is_singular) {
$suspended_plan_ids = get_user_meta($current_user->ID, 'arm_user_suspended_plan_ids', true);
$suspended_plan_ids = apply_filters('arm_assign_suspended_plan_data', $suspended_plan_ids, $current_user->ID);
$suspended_plan_ids = (isset($suspended_plan_ids) && !empty($suspended_plan_ids)) ? $suspended_plan_ids : array();
if (!empty($current_user_plan_array) && is_array($current_user_plan_array)) {
foreach ($current_user_plan_array as $cp) {
if (in_array($cp, $suspended_plan_ids)) {
unset($current_user_plan_array[array_search($cp, $current_user_plan_array)]);
}
}
}
// no need to plas -2 in blank array because in arm_restriction post where condition allready passed
if (!empty($current_user_plan_array)) {
$openPosts = array();
$post_type = (isset($obj->post_type) && !empty($obj->post_type)) ? $obj->post_type : '';
if (empty($post_type) && isset($obj->query_vars['post_type']) && !empty($obj->query_vars['post_type'])) {
$post_type = $obj->query_vars['post_type'];
}
if (!empty($post_type)) {
$openPosts = $arm_drip_rules->arm_get_user_dripped_post_ids($current_user->ID, $current_user_plan_array, $post_type);
} else {
$openPosts = $arm_drip_rules->arm_get_user_dripped_post_ids($current_user->ID, $current_user_plan_array, 'post');
}
if (!empty($openPosts)) {
$wherePost = implode(',', $openPosts);
$where .= " OR {$wpdb->posts}.ID IN ({$wherePost}) ";
}
}
}
$where .= ")";
} else {
$where .= " AND ( myarmjoin.post_id IS NULL )";
}
}
}
else if (!is_admin() && !current_user_can('administrator') && $arm_allow_content_listing != 1 && !$obj->is_singular() ) {
$arm_posts = $this->arm_widget_posts_args(array());
if(is_array($arm_posts) && count($arm_posts)>0)
{
$arm_posts_filter = isset($arm_posts["post__not_in"]) ? $arm_posts["post__not_in"] : '';
if(!empty($arm_posts_filter) && is_array($arm_posts_filter))
{
if(MEMBERSHIP_DEBUG_LOG == true) {
if (MEMBERSHIP_DEBUG_LOG_TYPE == "ARM_ALL" || MEMBERSHIP_DEBUG_LOG_TYPE == "ARM_ADMIN_PANEL") {
$arm_case_types['admin_panel']['protected'] = true;
$arm_case_types['admin_panel']['message'] = esc_html__('Wordpress Page/Post is restricted by admin', 'ARMember');
$ARMember->arm_debug_response_log('arm_filter_where', $arm_case_types, array(), $wpdb->last_query);
}
}
$arm_posts_filter_implode = implode(',', $arm_posts_filter);
$where = $where . ' AND '.$wpdb->posts.'.ID NOT IN ('.$arm_posts_filter_implode.') ';
}
}
}
}
return $where;
}
function arm_set_current_user() {
global $wp, $wpdb, $current_user, $arm_errors, $ARMember;
$this->arm_add_required_core_file();
$current_user_plan = $current_user->get('arm_user_plan_ids');
$current_user->arm_user_plan_ids = $current_user_plan;
if (!is_admin() && !empty($current_user->ID) && !current_user_can('administrator')) {
$current_user->arm_primary_status = arm_get_member_status($current_user->ID);
$current_user->arm_secondary_status = arm_get_member_status($current_user->ID, 'secondary');
}
$this->arm_posts_meta_rules();
}
function arm_restriction_init() {
global $wp, $wpdb, $pagenow, $current_user, $arm_errors, $ARMember, $arm_global_settings, $arm_case_types;
$this->arm_add_required_core_file();
$all_settings = $arm_global_settings->global_settings;
/* Restrict `admin panel` for non-admin users */
$current_user = wp_get_current_user();
if (!(0 == $current_user->ID)) {
$restrict_admin_panel = isset($all_settings['restrict_admin_panel']) ? $all_settings['restrict_admin_panel'] : 0;
$allow_access_admin_roles = isset($all_settings['arm_exclude_role_for_restrict_admin']) ? explode(',', $all_settings['arm_exclude_role_for_restrict_admin']) : array();
$user_match_role = array_intersect($current_user->roles, $allow_access_admin_roles);
if ($restrict_admin_panel == 1 && empty($user_match_role)) {
if (is_admin() && !current_user_can('administrator') && !( defined('DOING_AJAX') && DOING_AJAX )) {
if (MEMBERSHIP_DEBUG_LOG == true) {
if (MEMBERSHIP_DEBUG_LOG_TYPE == "ARM_ALL" || MEMBERSHIP_DEBUG_LOG_TYPE == "ARM_ADMIN_PANEL") {
$arm_case_types['admin_panel']['protected'] = true;
$arm_case_types['admin_panel']['message'] = esc_html__('Admin Panel is restricted by admin', 'ARMember');
$ARMember->arm_debug_response_log('arm_restriction_init', $arm_case_types, array(), $wpdb->last_query);
}
}
// echo ARM_HOME_URL; die;
wp_redirect(ARM_HOME_URL);
exit;
}
}/* End `($restrict_admin_panel == 1)` */
if (!current_user_can('administrator')) {
/* Get Visitor's IP Address. */
if (is_user_logged_in()) {
if (is_super_admin($current_user->ID)) {
return;
}
/**
* Logout Member when User is not active
*/
$userstatus = arm_get_member_status($current_user->ID);
$isInactive = ($userstatus == '1') ? false : true;
if ($isInactive) {
if (MEMBERSHIP_DEBUG_LOG == true) {
$arm_case_types['admin_panel']['protected'] = true;
$arm_case_types['admin_panel']['message'] = $current_user->user_login . ' ' .esc_html__( 'is inactive', 'ARMember'); //phpcs:ignore
$ARMember->arm_debug_response_log('arm_restriction_init', $arm_case_types, array(), $wpdb->last_query);
}
}
}/* End `(is_user_logged_in())` */
}
}
$block_settings = $arm_global_settings->block_settings;
$block_settings = apply_filters('arm_modify_block_settings_externally', $block_settings);
$currentr_ip = $ARMember->arm_get_ip_address();
/* Redirect User if requested url is in restricted urls. */
$block_ips = isset($block_settings['arm_block_ips']) ? $block_settings['arm_block_ips'] : '';
if (!empty($block_ips) && in_array($currentr_ip, $block_ips)) {
if (is_user_logged_in()) {
if (is_super_admin($current_user->ID)) {
return;
}
if (current_user_can('administrator')) {
return;
}
}
$block_ips_msg = (!empty($block_settings['arm_block_ips_msg'])) ? $block_settings['arm_block_ips_msg'] : '<strong>' . esc_html__('Blocked', 'ARMember') . ': </strong>' . esc_html__('Your IP address has been blocked, Please contact system administrator.', 'ARMember');
if (MEMBERSHIP_DEBUG_LOG == true) {
$arm_case_types['admin_panel']['protected'] = true;
$arm_case_types['admin_panel']['message'] = esc_html__('IP', 'ARMember') . ' ' . $currentr_ip . ' ' . esc_html__('is Blocked by admin', 'ARMember');
$arm_case_types['admin_panel']['type'] = "restriction";
$ARMember->arm_debug_response_log('arm_restriction_init', $arm_case_types, array(), $wpdb->last_query);
}
wp_die($block_ips_msg, 403); //phpcs:ignore
}
$block_urls = isset($block_settings['arm_block_urls']) ? $block_settings['arm_block_urls'] : array();
if (isset($block_settings['arm_conditionally_block_urls']) && $block_settings['arm_conditionally_block_urls'] == 1 && is_user_logged_in()) {
$current_user_plan = $current_user->get('arm_user_plan_ids');
$current_user_plan = apply_filters('arm_allow_specific_user_restricted_access', $current_user_plan, $current_user->ID);
$current_user_plan = (!empty($current_user_plan)) ? $current_user_plan : array(-2);
$suspended_plan_ids = get_user_meta($current_user->ID, 'arm_user_suspended_plan_ids', true);
$suspended_plan_ids = apply_filters('arm_assign_suspended_plan_data', $suspended_plan_ids, $current_user->ID);
$suspended_plan_ids = (isset($suspended_plan_ids) && !empty($suspended_plan_ids)) ? $suspended_plan_ids : array();
if (!empty($current_user_plan) && is_array($current_user_plan)) {
foreach ($current_user_plan as $cp) {
if (in_array($cp, $suspended_plan_ids)) {
unset($current_user_plan[array_search($cp, $current_user_plan)]);
}
}
}
$current_user_plan = (!empty($current_user_plan)) ? $current_user_plan : array(-2);
$arm_primary_status = arm_get_member_status($current_user->ID);
if($arm_primary_status == 3){
$current_user_plan = array();
}
if (!empty($block_settings['arm_conditionally_block_urls_options']) && is_array($block_settings['arm_conditionally_block_urls_options']) && !empty($current_user_plan)) {
$arm_conditionally_block_urls = array();
foreach ($block_settings['arm_conditionally_block_urls_options'] as $arm_block_url_condition) {
if (in_array($arm_block_url_condition['plan_id'], $current_user_plan)) {
$arm_plan_block_urls = array_map('strtolower', array_map('trim', explode("\n", $arm_block_url_condition['arm_block_urls'])));
$arm_conditionally_block_urls = array_merge($arm_conditionally_block_urls, $arm_plan_block_urls);
}
}
$block_urls = empty($block_urls) ? $arm_conditionally_block_urls : array_merge_recursive($block_urls, $arm_conditionally_block_urls);
}
}
$block_urls = apply_filters('arm_restricted_urls', $block_urls);
$block_urls_action = isset($block_settings['arm_block_urls_option']) ? $block_settings['arm_block_urls_option'] : 'redirect';
if (!empty($block_urls)) {
if (is_user_logged_in()) {
if (is_super_admin($current_user->ID)) {
return;
}
if (current_user_can('administrator')) {
return;
}
}
$ARM_HOST_REQUEST_SECURED = 'http';
if (isset($_SERVER["HTTPS"]))
if ($_SERVER["HTTPS"] == "on") {
$ARM_HOST_REQUEST_SECURED .= "s";
}
$ARM_HOST_REQUEST_SECURED .= "://";
$SERVER_HTTP_HOST = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '';
$SERVER_REQUEST_URI = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
$request_url = $ARM_HOST_REQUEST_SECURED . $SERVER_HTTP_HOST . $SERVER_REQUEST_URI;//phpcs:ignore
if ( !empty( $SERVER_HTTP_HOST ) && $arm_global_settings->arm_find_url_match($request_url, $block_urls)) {
if ($block_urls_action == 'message') {
$block_url_msg = (!empty($block_settings['arm_block_urls_option_message'])) ? $block_settings['arm_block_urls_option_message'] : '<strong>' . esc_html__('Blocked', 'ARMember') . ': </strong>' . esc_html__('Requested url is blocked, Please contact system administrator.', 'ARMember');
$block_url_msg .= '<br/><a href="' . ARM_HOME_URL . '">' . esc_html__('Go back to home page', 'ARMember') . '</a>';
if (MEMBERSHIP_DEBUG_LOG == true) {
$arm_case_types['admin_panel']['protected'] = true;
$arm_case_types['admin_panel']['message'] = esc_html__('Requested URL is Blocked By Admin', 'ARMember');
$arm_case_types['admin_panel']['type'] = "restriction";
$ARMember->arm_debug_response_log('arm_restriction_init', $arm_case_types, array(), $wpdb->last_query);
}
wp_die($block_url_msg, 403); //phpcs:ignore
} else {
$redirect_url = (!empty($block_settings['arm_block_urls_option_redirect'])) ? $block_settings['arm_block_urls_option_redirect'] : ARM_HOME_URL;
$redirect_url = apply_filters('arm_restricted_url_redirect_url', $redirect_url, $wp);
$redirect_code = apply_filters('arm_restricted_url_head', 302, $wp);
if (MEMBERSHIP_DEBUG_LOG == true) {
$arm_case_types['admin_panel']['protected'] = true;
$arm_case_types['admin_panel']['message'] = esc_html__('Requested URL is Blocked By Admin', 'ARMember');
$ARMember->arm_debug_response_log('arm_restriction_init', $arm_case_types, array(), $wpdb->last_query);
}
wp_redirect($redirect_url, $redirect_code);
die;
}
}
}/* End `(!empty($block_urls))` */
/* Restrict `wp-login.php` & `wp-signup.php` page. */
$hide_wp_login = isset($all_settings['hide_wp_login']) ? $all_settings['hide_wp_login'] : 0;
if ($hide_wp_login == 1) {
$GLOBALS['pagenow'] = (isset($GLOBALS['pagenow'])) ? $GLOBALS['pagenow'] : $pagenow;
$hide_pages = array('wp-login.php', 'wp-signup.php', 'wp-register.php');
if (in_array($GLOBALS['pagenow'], $hide_pages) || in_array($pagenow, $hide_pages)) {
$arm_action_login = isset($_GET['action']) ? sanitize_text_field( $_GET['action'] ) : '';
if (isset($_GET['arm-key']) || isset($_GET['key']) || ( in_array($arm_action_login, array('logout', 'armrp', 'resetpass', 'retrievepassword', 'postpass')))) {
return;
} else {
$interim_login = (isset($_REQUEST['interim-login']) && $_REQUEST['interim-login'] == 1) ? true : false;
if ($interim_login) {
return;
} else {
$arm_all_global_settings = $arm_global_settings->arm_get_all_global_settings();
$globalSettings = $arm_global_settings->global_settings;
if( 'lostpassword' == $arm_action_login )
{
$arm_login_page = isset($globalSettings['forgot_password_page_id']) ? $globalSettings['forgot_password_page_id'] : 0;
}
else
{
$arm_login_page = isset($globalSettings['login_page_id']) ? $globalSettings['login_page_id'] : 0;
}
if (!empty($arm_login_page) && $arm_login_page != 0) {
$redirect_to = $arm_global_settings->arm_get_permalink('', $arm_login_page);
} else {
$redirect_to = ARM_HOME_URL;
}
$redirect_to = apply_filters('arm_modify_redirection_page_external', $redirect_to,0,$arm_login_page);
if (MEMBERSHIP_DEBUG_LOG == true) {
if (MEMBERSHIP_DEBUG_LOG_TYPE == "ARM_ALL" || MEMBERSHIP_DEBUG_LOG_TYPE == "ARM_ADMIN_PANEL") {
$arm_case_types['admin_panel']['protected'] = true;
$arm_case_types['admin_panel']['message'] = esc_html__('Admin Login Page is restricted by admin', 'ARMember');
$ARMember->arm_debug_response_log('arm_restriction_init', $arm_case_types, array(), $wpdb->last_query);
}
}
wp_redirect($redirect_to);
exit;
}
}
}/* End `(in_array($GLOBALS['pagenow'], $hide_pages) || in_array($pagenow, $hide_pages))` */
}/* End `($hide_wp_login == 1)` */
}
function arm_filter_allow_page_ids($pageIDs = array()) {
global $wp, $wpdb, $ARMember, $arm_global_settings, $arm_access_rules;
$allowIDs = array();
if (isset($pageIDs['register_page_id'])) {
$allowIDs[] = $pageIDs['register_page_id'];
}
if (isset($pageIDs['login_page_id'])) {
$allowIDs[] = $pageIDs['login_page_id'];
}
if (isset($pageIDs['forgot_password_page_id'])) {
$allowIDs[] = $pageIDs['forgot_password_page_id'];
}
if (isset($pageIDs['change_password_page_id'])) {
$allowIDs[] = $pageIDs['change_password_page_id'];
}
if (isset($pageIDs['guest_page_id'])) {
$allowIDs[] = $pageIDs['guest_page_id'];
}
if (isset($pageIDs['thank_you_page_id'])) {
$allowIDs[] = $pageIDs['thank_you_page_id'];
}
if (isset($pageIDs['cancel_payment_page_id'])) {
$allowIDs[] = $pageIDs['cancel_payment_page_id'];
}
$arm_default_redirection_settings = get_option('arm_redirection_settings');
$arm_default_redirection_settings = maybe_unserialize($arm_default_redirection_settings);
$access_rules_options = (!empty($arm_default_redirection_settings['default_access_rules']) && is_array($arm_default_redirection_settings['default_access_rules'])) ? $arm_default_redirection_settings['default_access_rules'] : array();
if (!empty($access_rules_options['non_logged_in'])) {
if (!empty($access_rules_options['non_logged_in']['redirect_to']) && $access_rules_options['non_logged_in']['type'] == 'specific') {
$allowIDs[] = $access_rules_options['non_logged_in']['redirect_to'];
}
}
$allowIDs = $ARMember->arm_array_trim($allowIDs);
if (!empty($allowIDs)) {
$args = array('post_type' => 'page', 'include' => $allowIDs);
/* Query Monitor Change */
if( isset($GLOBALS['arm_all_posts']) && count($GLOBALS['arm_all_posts']) > 0 ){
$all_posts = $GLOBALS['arm_all_posts'];
} else {
$all_posts = get_posts($args);
$GLOBALS['arm_all_posts'] = $all_posts;
}
$post_id_slug_array = array();
if (!empty($all_posts)) {
foreach ($all_posts as $posts_array) {
$post_id_slug_array[$posts_array->ID] = $posts_array->post_name;
}
}
foreach ($allowIDs as $ID) {
if (!empty($ID)) {
$postSlug = isset($post_id_slug_array[$ID]) ? $post_id_slug_array[$ID] : '';
if (!empty($postSlug)) {
$allowIDs[] = $postSlug;
}
}
}
}
return $allowIDs;
}
function arm_restrict_all_access($wp) {
global $current_user;
remove_action('parse_request', array($this, 'arm_restrict_all_access'), 1); /* only need it the first time */
global $wp, $wpdb, $current_user, $arm_errors, $ARMember, $arm_global_settings, $arm_subscription_plans;
$this->arm_add_required_core_file();
$current_path = wp_get_current_page_url();
if (!empty($_SERVER['QUERY_STRING'])) {
$current_path .= "?" . $_SERVER['QUERY_STRING']; //phpcs:ignore
}
$restrict_site_access = $arm_global_settings->arm_get_single_global_settings('restrict_site_access', 0);
$page_settings = $arm_global_settings->arm_get_single_global_settings('page_settings');
$page_settings['guest_page_id'] = isset($page_settings['guest_page_id']) ? $page_settings['guest_page_id'] : 0;
$restrict_site_redirect_guest_pageid = $page_settings['guest_page_id'];
$allow_page_ids = apply_filters('arm_restricted_site_access_allow_pages', $page_settings);
$arm_access_page_for_restrict_site = $arm_global_settings->arm_get_single_global_settings('arm_access_page_for_restrict_site', 0);
if (isset($arm_access_page_for_restrict_site) && $arm_access_page_for_restrict_site != '' && $arm_access_page_for_restrict_site != '0') {
if (!is_array($arm_access_page_for_restrict_site)) {
$arm_access_page_for_restrict_site = explode(',', $arm_access_page_for_restrict_site);
}
if (is_array($arm_access_page_for_restrict_site) && !empty($arm_access_page_for_restrict_site)) {
foreach ($arm_access_page_for_restrict_site as $arm_access_page_for_restrict_site) {
$allow_page_ids[] = $arm_access_page_for_restrict_site;
$get_arm_post = get_post($arm_access_page_for_restrict_site);
if(isset($get_arm_post->post_name))
{
if(!empty($get_arm_post->post_parent))
{
$child_post_name = $get_arm_post->post_name;
$parent_post_id = $get_arm_post->post_parent;
while($parent_post_id != '')
{
$parent_post = get_post($parent_post_id);
$parent_post_id = $parent_post->post_parent;
$parent_post_name = $parent_post->post_name;
$child_post_name = $parent_post_name.'/'.$child_post_name;
}
$allow_page_ids[] = $child_post_name;
}
else
{
$allow_page_ids[] = $get_arm_post->post_name;
}
}
}
}
}
/* Check Feed Access Rules */
if (!empty($wp->query_vars['feed'])) {
$is_feed_access = $this->arm_check_feed_rules();
if ($is_feed_access) {
return;
} else {
add_filter('the_posts', array($this, 'show_noaccess_feed'), 1);
}
}
if (TRUE === (is_admin() || is_user_logged_in() || current_user_can('administrator') || (defined('WP_INSTALLING') && isset($_GET['key'])))) {
return;
}
/* Check if Restrict Site Access is enable. */
if ($restrict_site_access == '1') {
/* * *****************./Begin Disable XML-RPC/.******************** */
add_filter('xmlrpc_enabled', '__return_false');
/* * *****************./End Disable XML-RPC/.******************** */
do_action('arm_restrict_site_access_handling', $wp); /* allow users to hook handling */
$redirect_url = ARM_HOME_URL;
$redirect_url2 = $redirect_url.'/';
$redirect_code = 302;
/* Check if current page is in allow page ids */
//if(!isset($wp->query_vars['page_id']) && !isset($wp->query_vars['pagename']))
if(!isset($wp->query_vars['page_id']) && !isset($wp->query_vars['pagename']) && ( $current_path==$redirect_url || $current_path==$redirect_url2 ) )
{
$page_on_front = get_option('page_on_front');
$post_on_front = get_option('page_for_posts');
if(!empty($page_on_front))
{
$wp->query_vars['page_id'] = $page_on_front;
}
else if(!empty($post_on_front))
{
$wp->query_vars['page_id'] = $post_on_front;
}
}
$allow_page_ids = apply_filters('arm_restrict_entire_website_exclude_pages_external',$allow_page_ids);
if ((isset($wp->request) && in_array($wp->request, $allow_page_ids))) {
return;
}
else if (!empty($restrict_site_redirect_guest_pageid) && $restrict_site_redirect_guest_pageid != 0) {
/* Set Guest page content */
if ($page_id = get_post_field('ID', $restrict_site_redirect_guest_pageid)) {
if(!isset($wp->query_vars['rest_route']))
{
unset($wp->query_vars);
}
$wp->query_vars['page_id'] = $page_id;
return;
}
} else {
/* Redirect to login page */
$redirect_url = wp_login_url($current_path);
}
$extraVars = array();
if (is_user_logged_in()) {
$current_user_plan = $current_user->get('arm_user_plan_ids');
$current_user_plan = apply_filters('arm_allow_specific_user_restricted_access', $current_user_plan, $current_user->ID);
$current_user_plan = (!empty($current_user_plan)) ? $current_user_plan : array(-2);
$suspended_plan_ids = get_user_meta($current_user->ID, 'arm_user_suspended_plan_ids', true);
$suspended_plan_ids = apply_filters('arm_assign_suspended_plan_data', $suspended_plan_ids, $current_user->ID);
$suspended_plan_ids = (isset($suspended_plan_ids) && !empty($suspended_plan_ids)) ? $suspended_plan_ids : array();
if (!empty($current_user_plan) && is_array($current_user_plan)) {
foreach ($current_user_plan as $cp) {
if (in_array($cp, $suspended_plan_ids)) {
unset($current_user_plan[array_search($cp, $current_user_plan)]);
}
}
}
$current_user_plan = (!empty($current_user_plan)) ? $current_user_plan : array(-2);
$arm_primary_status = arm_get_member_status($current_user->ID);
if($arm_primary_status == 3){
$current_user_plan = array();
}
$extraVars = array(
'current_user_id' => get_current_user_id(),
'current_plan_id' => $current_user_plan,
);
}
$redirect_url = apply_filters('arm_restricted_site_access_redirect_url', $redirect_url, $wp, $extraVars);
$redirect_code = apply_filters('arm_restricted_site_access_head', $redirect_code, $wp);
wp_redirect($redirect_url, $redirect_code);
die;
}
}
function arm_the_content_filter($content){
global $arm_global_settings, $wp, $post;
if (TRUE === (is_admin() || is_user_logged_in() || current_user_can('administrator') || (defined('WP_INSTALLING') && isset($_GET['key'])))) {
return $content;
}
$current_page_id = get_the_ID();
$restrict_site_access = $arm_global_settings->arm_get_single_global_settings('restrict_site_access', 0);
$page_settings = $arm_global_settings->arm_get_single_global_settings('page_settings');
$page_settings['guest_page_id'] = isset($page_settings['guest_page_id']) ? $page_settings['guest_page_id'] : 0;
$restrict_site_redirect_guest_pageid = $page_settings['guest_page_id'];
$allow_page_ids = apply_filters('arm_restricted_site_access_allow_pages', $page_settings);
$arm_access_page_for_restrict_site = $arm_global_settings->arm_get_single_global_settings('arm_access_page_for_restrict_site', 0);
if (isset($arm_access_page_for_restrict_site) && $arm_access_page_for_restrict_site != '' && $arm_access_page_for_restrict_site != '0') {
if (!is_array($arm_access_page_for_restrict_site)) {
$arm_access_page_for_restrict_site = explode(',', $arm_access_page_for_restrict_site);
}
if (is_array($arm_access_page_for_restrict_site) && !empty($arm_access_page_for_restrict_site)) {
foreach ($arm_access_page_for_restrict_site as $arm_access_page_for_restrict_site) {
$allow_page_ids[] = $arm_access_page_for_restrict_site;
$arm_post = get_post($arm_access_page_for_restrict_site);
if(isset($arm_post->post_name))
{
$allow_page_ids[] = $arm_post->post_name;
}
}
}
}
if ($restrict_site_access == '1') {
$redirect_url = home_url();
$redirect_code = 302;
if ( (!empty($current_page_id) && in_array($current_page_id, $allow_page_ids)) || (isset($wp->query_vars['pagename']) && in_array($wp->query_vars['pagename'], $allow_page_ids)) ) {
return $content;
}
if (!empty($restrict_site_redirect_guest_pageid) && $restrict_site_redirect_guest_pageid != 0) {
if ($page_id = get_post_field('ID', $restrict_site_redirect_guest_pageid)) {
$get_post = get_post($page_id);
$content = $get_post->post_content;
return $content;
}
} else {
/* Redirect to login page */
$redirect_url = wp_login_url($current_path);
}
$extraVars = array();
if (is_user_logged_in()) {
$arm_get_current_user_id = get_current_user_id();
$current_user_plan = get_user_meta($arm_get_current_user_id, 'arm_user_plan_ids', true);
$current_user_plan = apply_filters('arm_allow_specific_user_restricted_access', $current_user_plan, $arm_get_current_user_id);
$current_user_plan = (!empty($current_user_plan)) ? $current_user_plan : array(-2);
$extraVars = array(
'current_user_id' => $arm_get_current_user_id,
'current_plan_id' => $current_user_plan,
);
}
$redirect_url = apply_filters('arm_restricted_site_access_redirect_url', $redirect_url, $wp, $extraVars);
$redirect_code = apply_filters('arm_restricted_site_access_head', $redirect_code, $wp);
wp_redirect($redirect_url, $redirect_code);
die;
}
return $content;
}
function curPageURL() {
$pageURL = 'http';
if (isset($_SERVER["HTTPS"]))
if ($_SERVER["HTTPS"] == "on") {
$pageURL .= "s";
}
$pageURL .= "://";
/*
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
}
*/
$pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]; //phpcs:ignore
return $pageURL;
}
function arm_wp_head_redirect($arm_get_post_arr=array(), $arm_return_data=0) {
global $wp, $wpdb, $current_user, $arm_errors, $ARMember, $arm_global_settings, $arm_subscription_plans, $arm_access_rules, $arm_case_types, $arm_drip_rules, $arm_member_forms, $arm_pay_per_post_feature;
$arm_multisite_restriction = '0';
$this->arm_add_required_core_file();
if (current_user_can('administrator')) {
return;
}
$show_on_front = get_option('show_on_front');
$page_on_front = get_option('page_on_front');
if ('posts' == $show_on_front && is_home()) {
return;
} elseif ('page' == $show_on_front && $page_on_front && is_page($page_on_front)) {
return;
} else {
$current_user_plan = $current_user->get('arm_user_plan_ids');
$current_user_plan = apply_filters('arm_allow_specific_user_restricted_access', $current_user_plan, $current_user->ID);
$current_user_plan = (!empty($current_user_plan)) ? $current_user_plan : array(-2);
if($arm_pay_per_post_feature->isPayPerPostFeature) {
$current_user_post = get_user_meta($current_user->ID, 'arm_user_post_ids', true);
$current_user_post = apply_filters('arm_allow_specific_user_restricted_access', $current_user_post, $current_user->ID, 'arm_user_post_ids');
if(!empty($current_user_plan) && !empty($current_user_post))
{
foreach ($current_user_plan as $arm_user_plans_key => $arm_user_plans_val) {
if(!empty($current_user_post)){
foreach ($current_user_post as $user_post_key => $user_post_val) {
if($user_post_key==$arm_user_plans_val){
unset($current_user_plan[$arm_user_plans_key]);
}
}
}
}
}
}
$suspended_plan_ids = get_user_meta($current_user->ID, 'arm_user_suspended_plan_ids', true);
$suspended_plan_ids = apply_filters('arm_assign_suspended_plan_data', $suspended_plan_ids, $current_user->ID);
$suspended_plan_ids = (isset($suspended_plan_ids) && !empty($suspended_plan_ids)) ? $suspended_plan_ids : array();
if (!empty($current_user_plan) && is_array($current_user_plan)) {
foreach ($current_user_plan as $cp) {
if (in_array($cp, $suspended_plan_ids)) {
unset($current_user_plan[array_search($cp, $current_user_plan)]);
}
}
}
$current_user_plan = (!empty($current_user_plan)) ? $current_user_plan : array(-2);
$arm_primary_status = arm_get_member_status($current_user->ID);
if($arm_primary_status == 3){
$current_user_plan = array();
}
$arm_default_redirection_settings = get_option('arm_redirection_settings');
$arm_default_redirection_settings = maybe_unserialize($arm_default_redirection_settings);
$access_rules_options = !empty($arm_default_redirection_settings['default_access_rules']) ? $arm_default_redirection_settings['default_access_rules'] : array();
$page_settings = $arm_global_settings->arm_get_single_global_settings('page_settings');
/* Remove Member Directory Page */
unset($page_settings['member_profile_page_id']);
unset($page_settings['thank_you_page_id']);
unset($page_settings['cancel_payment_page_id']);
$page_settings = array_filter($page_settings);
$arm_pages = apply_filters('arm_restricted_site_access_allow_pages', $page_settings);
$redirect_url = ARM_HOME_URL;
$redirect_code = 302;
$redirect_page_id = 0;
if (!is_user_logged_in()) {
if (!empty($access_rules_options['non_logged_in'])) {
if ($access_rules_options['non_logged_in']['type'] == 'specific' && !empty($access_rules_options['non_logged_in']['redirect_to'])) {
$redirect_page_id = $access_rules_options['non_logged_in']['redirect_to'];
$redirect_permalink = get_permalink($access_rules_options['non_logged_in']['redirect_to']);
if (!empty($redirect_permalink)) {
$redirect_url = $redirect_permalink;
$redirect_url = apply_filters('arm_modify_redirection_page_external', $redirect_url,$current_user->ID,$redirect_page_id);
}
}
}
} else if (is_user_logged_in()) {
$user_id = get_current_user_id();
$user_status = arm_get_member_status($user_id);
if ($user_status == 3) {
$send_key_email = 0;
if (isset($_GET['arm-key']) && !empty($_GET['arm-key'])) {
$chk_key = stripslashes_deep( sanitize_text_field( $_GET['arm-key'] ) ); //phpcs:ignore
$user_email = stripslashes_deep( sanitize_email( $_GET['email'] ) ); //phpcs:ignore
$arm_message = $arm_member_forms->arm_verify_user_activation_for_front($user_email, $chk_key);
if ($arm_message['status'] == 'success') {
return;
} else if ($arm_message['status'] == 'error') {
$send_key_email = 1;
}
}
if (!empty($access_rules_options['pending'])) {
$pending_red_type = isset($access_rules_options['pending']['type']) ? $access_rules_options['pending']['type'] : 'home';
$redirect_page_id = $pending_page_id = isset($access_rules_options['pending']['redirect_to']) ? $access_rules_options['pending']['redirect_to'] : '';
if ($pending_red_type == 'specific' && !empty($pending_page_id)) {
$redirect_permalink = get_permalink($pending_page_id);
if (!empty($redirect_permalink)) {
$current_page_url = get_permalink();
if ($redirect_permalink != $current_page_url) {
if ($send_key_email == 1) {
$redirect_permalink = $arm_global_settings->add_query_arg('arm-key', urlencode(sanitize_text_field( $_GET['arm-key'] ) ), $redirect_permalink);//phpcs:ignore
$redirect_permalink = $arm_global_settings->add_query_arg('email', urlencode(sanitize_email( $_GET['email'] ) ), $redirect_permalink); //phpcs:ignore
}
$redirect_url = $redirect_permalink;
$redirect_url = apply_filters('arm_modify_redirection_page_external', $redirect_url,$user_id,$redirect_page_id);
}
}
} else {
if (!is_front_page()) {
$home_page_url = ARM_HOME_URL;
if ($send_key_email == 1) {
$home_page_url = $arm_global_settings->add_query_arg('arm-key', urlencode( sanitize_text_field( $_GET['arm-key'] ) ), $home_page_url); //phpcs:ignore
$home_page_url = $arm_global_settings->add_query_arg('email', urlencode( sanitize_email( $_GET['email'] ) ), $home_page_url); //phpcs:ignore
}
$redirect_url = $home_page_url;
$redirect_url = apply_filters('arm_modify_redirection_page_external', $redirect_url,$user_id,$redirect_page_id);
}
}
} else {
if (!is_front_page()) {
$home_page_url = ARM_HOME_URL;
if ($send_key_email == 1) {
$home_page_url = $arm_global_settings->add_query_arg('arm-key', urlencode( sanitize_text_field( $_GET['arm-key'] ) ), $home_page_url); //phpcs:ignore
$home_page_url = $arm_global_settings->add_query_arg('email', urlencode( sanitize_email( $_GET['email'] ) ), $home_page_url); //phpcs:ignore
}
$redirect_url = $home_page_url;
$redirect_url = apply_filters('arm_modify_redirection_page_external', $redirect_url,$user_id,0);
}
}
} else if (!empty($access_rules_options['logged_in'])) {
if ($access_rules_options['logged_in']['type'] == 'specific' && !empty($access_rules_options['logged_in']['redirect_to'])) {
$redirect_permalink = get_permalink($access_rules_options['logged_in']['redirect_to']);
$redirect_page_id = $access_rules_options['logged_in']['redirect_to'];
if (!empty($redirect_permalink)) {
$redirect_url = $redirect_permalink;
$redirect_url = apply_filters('arm_modify_redirection_page_external', $redirect_url,$user_id,$redirect_page_id);
}
}
}
if (!empty($access_rules_options['drip'])) {
if ($access_rules_options['drip']['type'] == 'specific' && !empty($access_rules_options['drip']['redirect_to'])) {
$redirect_permalink = get_permalink($access_rules_options['drip']['redirect_to']);
$redirect_page_id = $access_rules_options['drip']['redirect_to'];
if (!empty($redirect_permalink)) {
$redirect_drip_url = $redirect_permalink;
}
} else {
$redirect_drip_url = ARM_HOME_URL;
}
}
}
if(empty($arm_return_data))
{
$queried_object = get_queried_object();
}
else
{
$queried_object = $arm_get_post_arr;
}
if (!empty($queried_object->ID) && $redirect_page_id == $queried_object->ID) {
$redirect_url = ARM_HOME_URL;
}
if (!function_exists('is_plugin_active')) {
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
}
if (is_plugin_active('bbpress/bbpress.php') || is_plugin_active('woocommerce/woocommerce.php')) {
$request_uri = "";
if (isset($queried_object->has_archive))
$request_uri = $queried_object->has_archive;
if ($request_uri != "") {
$page = get_page_by_path($request_uri);
$page_id = 0;
if (is_object($page)) {
$page_id = $page->ID;
}
if ($page_id > 0) {
$allowed = true;
$obj_plans = get_post_meta($page_id, 'arm_access_plan');
$extraVars = array(
'current_user_id' => get_current_user_id(),
'current_plan_id' => $current_user_plan,
);
$extraVars['post_type'] = 'page';
$extraVars['post_id'] = $page_id;
$redirect_url = $arm_global_settings->add_query_arg('restricted', 'page', $redirect_url);
$obj_plans = !empty($obj_plans) ? $obj_plans : array();
if (count($obj_plans) == 0)
$obj_protection = 0;
else
$obj_protection = 1;
if (!empty($obj_protection) && $obj_protection == '1') {
$allowed = false;
$return_array = array_intersect($current_user_plan, $obj_plans);
if (!empty($obj_plans) && !empty($return_array)) {
$allowed = true;
}
}
if ($allowed == false) {
$arm_case_types['page']['protected'] = (in_array(MEMBERSHIP_DEBUG_LOG_TYPE, array("ARM_ALL", "ARM_PAGE"))) ? true : false;
$arm_case_types['page']['message'] = esc_html__("Page is protected", 'ARMember');
}
$allowed = apply_filters('arm_is_allow_access', $allowed, $extraVars);
/* Redirect if user has no access */
if (!$allowed) {
if (MEMBERSHIP_DEBUG_LOG == true) {
$ARMember->arm_debug_response_log('arm_wp_head_redirect', $arm_case_types, (array) $queried_object, $wpdb->last_query);
}
do_action('arm_before_restricted_site_access_redirect', $redirect_url, $wp);
$redirect_url = apply_filters('arm_restricted_site_access_redirect_url', $redirect_url, $wp, $extraVars);
$redirect_code = apply_filters('arm_restricted_site_access_head', $redirect_code, $wp);
$ARMember->arm_session_start(true);
$_SESSION['arm_restricted_page_url'] = $this->curPageURL();
if(empty($arm_return_data))
{
wp_redirect($redirect_url, $redirect_code);
die;
}
else
{
return 2;
}
}
}
}
}
/* Allow user to access plugin pages. */
if (isset($queried_object->post_type) && $queried_object->post_type == 'page') {
if (in_array($queried_object->ID, $arm_pages)) {
return;
}
}
$allowed = true;
$extraVars = array(
'current_user_id' => get_current_user_id(),
'current_plan_id' => $current_user_plan,
);
/* Check Special Pages Access. */
$check_sp_access = $this->arm_current_special_page_access();
if (!$check_sp_access) {
$allowed = false;
$extraVars['special-page'] = true;
$redirect_url = $arm_global_settings->add_query_arg('restricted', 'special-page', $redirect_url);
$arm_case_types['special']['protected'] = (in_array(MEMBERSHIP_DEBUG_LOG_TYPE, array('ARM_ALL', 'ARM_SPECIAL_PAGE'))) ? true : false;
/* wp_die(esc_html__("Sorry, You Don't have permission to access this page.", 'ARMember')); */
} elseif (!empty($queried_object)) {
if (is_user_logged_in()) {
$user_id = get_current_user_id();
$current_user_plan = get_user_meta($user_id, 'arm_user_plan_ids', true);
$current_user_plan = apply_filters('arm_allow_specific_user_restricted_access', $current_user_plan, $user_id);
if($arm_pay_per_post_feature->isPayPerPostFeature) {
$current_user_post = get_user_meta($user_id, 'arm_user_post_ids', true);
$current_user_post = apply_filters('arm_allow_specific_user_restricted_access', $current_user_post, $user_id, 'arm_user_post_ids');
if(!empty($current_user_plan) && !empty($current_user_post))
{
foreach ($current_user_plan as $arm_user_plans_key => $arm_user_plans_val) {
if(!empty($current_user_post)){
foreach ($current_user_post as $user_post_key => $user_post_val) {
if($user_post_key==$arm_user_plans_val){
unset($current_user_plan[$arm_user_plans_key]);
}
}
}
}
}
}
$current_user_plan = !empty($current_user_plan) ? $current_user_plan : array(-2);
$suspended_plan_ids = get_user_meta($user_id, 'arm_user_suspended_plan_ids', true);
$suspended_plan_ids = apply_filters('arm_assign_suspended_plan_data', $suspended_plan_ids, $user_id);
$suspended_plan_ids = (isset($suspended_plan_ids) && !empty($suspended_plan_ids)) ? $suspended_plan_ids : array();
if (!empty($current_user_plan) && is_array($current_user_plan)) {
foreach ($current_user_plan as $cp) {
if (in_array($cp, $suspended_plan_ids)) {
unset($current_user_plan[array_search($cp, $current_user_plan)]);
}
}
}
$current_user_plan = !empty($current_user_plan) ? $current_user_plan : array(-2);
$arm_primary_status = arm_get_member_status($user_id);
if($arm_primary_status == 3){
$current_user_plan = array();
}
} else {
$current_user_plan = array();
}
/* Set Param for hook */
$extraVars['post_type'] = (isset($queried_object->post_type) && !empty($queried_object->post_type)) ? $queried_object->post_type : '';
$extraVars['taxonomy'] = (isset($queried_object->taxonomy) && !empty($queried_object->taxonomy)) ? $queried_object->taxonomy : '';
$obj_terms = array();
$extraVars['post_id'] = 0;
if (isset($queried_object->post_type) && !empty($queried_object->post_type)) {
$extraVars['post_id'] = $queried_object->ID;
$redirect_url = $arm_global_settings->add_query_arg('restricted', $queried_object->post_type, $redirect_url);
$obj_plans = get_post_meta($queried_object->ID, 'arm_access_plan');
$obj_plans = !empty($obj_plans) ? $obj_plans : array();
if (count($obj_plans) == 0) {
$obj_protection = 0;
} else {
$obj_protection = 1;
}
if (!empty($obj_protection) && $obj_protection == 1) {
$allowed = false;
$return_array = array_intersect($current_user_plan, $obj_plans);
if (!empty($obj_plans) && !empty($return_array)) {
$allowed = true;
}
// for multisite
if ( is_multisite() && $arm_multisite_restriction == 1 ) {
$arm_current_blog_id = get_current_blog_id();
$arm_cur_user_blog_id = get_user_meta($user_id, 'primary_blog', true);
if( $arm_current_blog_id != $arm_cur_user_blog_id && !empty($obj_plans) ) {
$allowed = false;
}
}
}
if ($queried_object->post_type == 'page' && $allowed == false) {
$arm_case_types['page']['protected'] = (in_array(MEMBERSHIP_DEBUG_LOG_TYPE, array("ARM_ALL", "ARM_PAGE"))) ? true : false;
$arm_case_types['page']['message'] = esc_html__("Page is protected", 'ARMember');
}
if ($queried_object->post_type == 'post' && $allowed == false) {
$arm_case_types['post']['protected'] = (in_array(MEMBERSHIP_DEBUG_LOG_TYPE, array("ARM_ALL", "ARM_POST"))) ? true : false;
$arm_case_types['post']['message'] = esc_html__("Post is protected", 'ARMember');
}
if ($queried_object->post_type != '' && !in_array($extraVars['post_type'], array('post', 'page')) && $allowed == false) {
$arm_case_types['custom']['protected'] = (in_array(MEMBERSHIP_DEBUG_LOG_TYPE, array("ARM_ALL", "ARM_CUSTOM"))) ? true : false;
$arm_case_types['custom']['message'] = esc_html__('Custom Post is protected', 'ARMember');
}
$obj_terms = $this->arm_get_post_taxonomy_terms($queried_object->post_type, $queried_object->ID);
}
if (isset($queried_object->taxonomy) && !empty($queried_object->taxonomy)) {
$redirect_url = $arm_global_settings->add_query_arg('restricted', $queried_object->taxonomy, $redirect_url);
$obj_terms = $this->arm_get_term_with_parents($queried_object->term_id, $queried_object->taxonomy);
}/* END `Taxonomy Checking` */
/**
* Check Patent taxonomy term access rules
*/
if ($allowed && !empty($obj_terms)) {
foreach ($obj_terms as $term) {
if ($allowed) {
$obj_protection = get_arm_term_meta($term->term_id, 'arm_protection', true);
$obj_plans = get_arm_term_meta($term->term_id, 'arm_access_plan');
$obj_plans = !empty($obj_plans) ? $obj_plans : array();
if (!empty($obj_protection) && $obj_protection == '1') {
$allowed = false;
$redirect_url = $arm_global_settings->add_query_arg('restricted', $term->taxonomy, $redirect_url);
$obj_plans_array = array_intersect($current_user_plan, $obj_plans);
if (!empty($obj_plans) && !empty($obj_plans_array)) {
$allowed = true;
}
// for multisite
if ( is_multisite() && $arm_multisite_restriction == 1 ) {
$arm_current_blog_id = get_current_blog_id();
$arm_cur_user_blog_id = get_user_meta($user_id, 'primary_blog', true);
if( $arm_current_blog_id != $arm_cur_user_blog_id && !empty($obj_plans) ) {
$allowed = false;
}
}
}
if ($allowed == false) {
$arm_case_types['taxonomy']['protected'] = (in_array(MEMBERSHIP_DEBUG_LOG_TYPE, array("ARM_ALL", "ARM_TAXONOMY"))) ? true : false;
$arm_case_types['taxonomy']['message'] = esc_html__("Taxonomy is protected", 'ARMember');
}
}
}
}
}/* END `!empty($queried_object)` */
$allowed = apply_filters('arm_is_allow_access', $allowed, $extraVars);
/* Redirect if user has no access */
if (!$allowed) {
$ARMember->arm_session_start(true);
if (MEMBERSHIP_DEBUG_LOG == true) {
$ARMember->arm_debug_response_log('arm_wp_head_redirect', $arm_case_types, (array) $queried_object, $wpdb->last_query);
}
do_action('arm_before_restricted_site_access_redirect', $redirect_url, $wp);
$redirect_url = apply_filters('arm_restricted_site_access_redirect_url', $redirect_url, $wp, $extraVars);
$redirect_url = apply_filters('arm_modify_redirection_page_external', $redirect_url,0,$redirect_page_id);
$redirect_code = apply_filters('arm_restricted_site_access_head', $redirect_code, $wp);
$_SESSION['arm_restricted_page_url'] = $this->curPageURL();
// $extraVars_post_id = isset($extraVars['post_id']) ? $extraVars['post_id'] : '';
// $extraVars_post_type = isset($extraVars['post_type']) ? $extraVars['post_type'] : '';
$extraVars = is_array($extraVars) ? $extraVars : array();
$allowed_checked_drip = $arm_drip_rules->arm_check_post_have_drip_rule($extraVars);
if ($allowed_checked_drip==1 && isset($redirect_drip_url) && $arm_drip_rules->isDripFeature) {
if ($redirect_page_id == $queried_object->ID) {
if(empty($arm_return_data)){
wp_redirect(ARM_HOME_URL, $redirect_code);
die;
}
else
{
return 2;
}
} else {
if(empty($arm_return_data)){
wp_redirect($redirect_drip_url, $redirect_code);
die;
}
else
{
return 2;
}
}
} else if($allowed_checked_drip!=2) {
if(empty($arm_return_data)){
wp_redirect($redirect_url, $redirect_code);
die;
}
else
{
return 2;
}
}
}
}/* END `!is_home()` */
}
function arm_get_post_taxonomy_terms($post_type = 'post', $post_id = 0) {
global $wp, $wpdb, $current_user, $ARMember, $arm_global_settings, $arm_subscription_plans, $arm_access_rules;
$this->arm_add_required_core_file();
$terms = array();
if (!empty($post_type) && !empty($post_id) && $post_id != 0) {
$taxo_args = array(
'show_ui' => true,
'public' => true
);
$taxonomies = get_taxonomies($taxo_args, 'object');
$post_terms = array();
if (!empty($taxonomies)) {
foreach ($taxonomies as $tax) {
$post_terms = $this->arm_get_object_terms($post_id, $tax->name);
foreach ($post_terms as $term) {
$terms += $this->arm_get_term_with_parents($term->term_id, $term->taxonomy);
}
}
}
}
return $terms;
}
function arm_get_term_with_parents($term_id = 0, $taxonomy = '') {
global $wp, $wpdb, $current_user, $ARMember, $arm_global_settings, $arm_subscription_plans, $arm_access_rules;
$terms = array();
$term = get_term($term_id, $taxonomy);
if (!empty($term)) {
$terms[$term_id] = $term;
if (!empty($term->parent) && $term->parent != 0) {
$terms += $this->arm_get_term_with_parents($term->parent, $taxonomy);
}
}
return $terms;
}
function arm_posts_meta_rules() {
global $wp, $wpdb, $current_user, $arm_errors, $ARMember;
$this->arm_add_required_core_file();
/* Check Logged In User Has Access */
$post_meta_rules = $post_drip_rules = $deny_terms = array();
$denied_terms = array();
if (!is_admin() && !current_user_can('administrator')) {
$all_blocked_terms = $wpdb->get_results($wpdb->prepare("SELECT * FROM `" . $ARMember->tbl_arm_termmeta . "` WHERE `meta_key` = %s AND `meta_value` = %d", 'arm_protection', 1)); //phpcs:ignore --Reason $ARMember->tbl_arm_termmeta is a table name
// during query monitor
$arm_blocked_terms = array();
if ($all_blocked_terms) {
foreach ($all_blocked_terms as $blocked_term) {
$arm_blocked_terms[] = $blocked_term->arm_term_id;
}
}
if (!empty($arm_blocked_terms)) {
// $arm_blocked_term_ids = implode(',', $arm_blocked_terms);
$arm_terms = $wpdb->terms;
$arm_term_taxonomy = $wpdb->term_taxonomy;
$where =' WHERE ';
$admin_placeholders = ' t.term_id IN (';
$admin_placeholders .= rtrim( str_repeat( '%s,', count( $arm_blocked_terms ) ), ',' );
$admin_placeholders .= ')';
array_unshift( $arm_blocked_terms, $admin_placeholders );
$where .= call_user_func_array(array( $wpdb, 'prepare' ), $arm_blocked_terms );//phpcs:ignore
$all_blocked_terms = $wpdb->get_results( "SELECT t.*, tt.* FROM `" . $arm_terms . "` AS t INNER JOIN `" . $arm_term_taxonomy . "` AS tt ON t.term_id = tt.term_id ".$where);//phpcs:ignore --Reason $arm_terms and $arm_term_taxonomy those are tables
}
if (!is_user_logged_in()) {
if (count($all_blocked_terms) > 0) {
foreach ($all_blocked_terms as $blocked_terms) {
if (isset($blocked_terms->taxonomy) && taxonomy_exists($blocked_terms->taxonomy)) {
$denied_terms[$blocked_terms->taxonomy][] = $blocked_terms->term_id;
$term_children = get_term_children($blocked_terms->term_id, $blocked_terms->taxonomy);
if (!empty($term_children) && !is_wp_error($term_children)) {
$denied_terms[$blocked_terms->taxonomy] = array_merge($denied_terms[$blocked_terms->taxonomy], $term_children);
}
}
}
}
} else {
$user_id = $current_user->ID;
$user_plans = get_user_meta($user_id, 'arm_user_plan_ids', true);
$user_plans = apply_filters('arm_allow_specific_user_restricted_access', $user_plans, $user_id);
$user_plans = !empty($user_plans) ? $user_plans : array(-2);
$suspended_plan_ids = get_user_meta($user_id, 'arm_user_suspended_plan_ids', true);
$suspended_plan_ids = apply_filters('arm_assign_suspended_plan_data', $suspended_plan_ids, $user_id);
$suspended_plan_ids = (isset($suspended_plan_ids) && !empty($suspended_plan_ids)) ? $suspended_plan_ids : array();
if (!empty($user_plans) && is_array($user_plans)) {
foreach ($user_plans as $cp) {
if (in_array($cp, $suspended_plan_ids)) {
unset($user_plans[array_search($cp, $user_plans)]);
}
}
}
$user_plans = !empty($user_plans) ? $user_plans : array(-2);
$arm_primary_status = arm_get_member_status($user_id);
if($arm_primary_status == 3){
$user_plans = array();
}
if (count($all_blocked_terms) > 0) {
// during query monitor
$arm_term_meta_tbl = $ARMember->tbl_arm_termmeta;
$arm_term_plan_ids = array();
$admin_placeholders = ' AND arm_term_id IN (';
$admin_placeholders .= rtrim( str_repeat( '%s,', count( $arm_blocked_terms ) ), ',' );
$admin_placeholders .= ')';
array_unshift( $arm_blocked_terms, $admin_placeholders );
$where = $wpdb->prepare("WHERE meta_key = %s",'arm_access_plan');
$where .= call_user_func_array(array( $wpdb, 'prepare' ), $arm_blocked_terms );
$arm_term_access_plans = $wpdb->get_results("SELECT `arm_term_id`, `meta_key`, `meta_value` FROM " . $arm_term_meta_tbl . " ".$where." ORDER BY arm_term_id ASC" ); //phpcs:ignore --Reason $arm_term_meta_tbl is a table name
if ($arm_term_access_plans) {
foreach ($arm_term_access_plans as $arm_term_access_plan) {
$arm_term_plan_ids[$arm_term_access_plan->arm_term_id][] = $arm_term_access_plan->meta_value;
}
}
foreach ($all_blocked_terms as $blocked_terms) {
$blocked_term_id = $blocked_terms->term_id;
$termmeta = isset($arm_term_plan_ids[$blocked_term_id]) ? $arm_term_plan_ids[$blocked_term_id] : array();
$termmeta_array = array_intersect($user_plans, $termmeta);
if (empty($termmeta_array)) {
if (isset($blocked_terms->taxonomy) && taxonomy_exists($blocked_terms->taxonomy)) {
$denied_terms[$blocked_terms->taxonomy][] = $blocked_terms->term_id;
$term_children = get_term_children($blocked_terms->term_id, $blocked_terms->taxonomy);
if (!empty($term_children) && !is_wp_error($term_children)) {
$denied_terms[$blocked_terms->taxonomy] = array_merge($denied_terms[$blocked_terms->taxonomy], $term_children);
}
}
}
}
}
}
}
$current_user->post_meta_rules = $post_meta_rules;
$current_user->post_drip_rules = $post_drip_rules;
$current_user->deny_term = $denied_terms;
return $post_meta_rules;
}
function arm_get_object_terms($object_ids, $taxonomies, $args = array()) {
global $wpdb;
if (empty($object_ids) || empty($taxonomies))
return array();
if (!is_array($taxonomies))
$taxonomies = array($taxonomies);
foreach ($taxonomies as $taxonomy) {
if (!taxonomy_exists($taxonomy))
return new WP_Error('invalid_taxonomy', esc_html__('Invalid taxonomy.', 'ARMember'));
}
if (!is_array($object_ids))
$object_ids = array($object_ids);
$object_ids = array_map('intval', $object_ids);
$defaults = array(
'orderby' => 'name',
'order' => 'ASC',
'fields' => 'all',
'parent' => '',
'update_term_meta_cache' => true,
'meta_query' => '',
);
$args = wp_parse_args($args, $defaults);
$terms = array();
if (count($taxonomies) > 1) {
foreach ($taxonomies as $index => $taxonomy) {
$t = get_taxonomy($taxonomy);
if (isset($t->args) && is_array($t->args) && $args != array_merge($args, $t->args)) {
unset($taxonomies[$index]);
$terms = array_merge($terms, wp_get_object_terms($object_ids, $taxonomy, array_merge($args, $t->args)));
}
}
} else {
$t = get_taxonomy($taxonomies[0]);
if (isset($t->args) && is_array($t->args))
$args = array_merge($args, $t->args);
}
$orderby = $args['orderby'];
$order = $args['order'];
$fields = $args['fields'];
if (in_array($orderby, array('term_id', 'name', 'slug', 'term_group'))) {
$orderby = "t.$orderby";
} elseif (in_array($orderby, array('count', 'parent', 'taxonomy', 'term_taxonomy_id'))) {
$orderby = "tt.$orderby";
} elseif ('term_order' === $orderby) {
$orderby = 'tr.term_order';
} elseif ('none' === $orderby) {
$orderby = '';
$order = '';
} else {
$orderby = 't.term_id';
}
// tt_ids queries can only be none or tr.term_taxonomy_id
if (('tt_ids' == $fields) && !empty($orderby))
$orderby = 'tr.term_taxonomy_id';
if (!empty($orderby))
$orderby = "ORDER BY $orderby";
$order = strtoupper($order);
if ('' !== $order && !in_array($order, array('ASC', 'DESC')))
$order = 'ASC';
$taxonomy_array = array_map( 'esc_sql',$taxonomies);
$object_id_array = $object_ids;
//$taxonomies = "'" . implode("', '", array_map('esc_sql', $taxonomies)) . "'";
//$object_ids = implode(', ', $object_ids);
$select_this = '';
if ('all' == $fields) {
$select_this = 't.*, tt.*';
} elseif ('ids' == $fields) {
$select_this = 't.term_id';
} elseif ('names' == $fields) {
$select_this = 't.name';
} elseif ('slugs' == $fields) {
$select_this = 't.slug';
} elseif ('all_with_object_id' == $fields) {
$select_this = 't.*, tt.*, tr.object_id';
}
/*$where = array(
"tt.taxonomy IN ($taxonomies)",
"tr.object_id IN ($object_ids)",
);*/
$admin_placeholders = 'tt.taxonomy IN (';
$admin_placeholders .= rtrim( str_repeat( '%s,', count( $taxonomy_array ) ), ',' );
$admin_placeholders .= ')';
array_unshift( $taxonomy_array, $admin_placeholders );
$where = array();
$where[] = call_user_func_array(array( $wpdb, 'prepare' ), $taxonomy_array );
$admin_placeholders = 'tr.object_id IN (';
$admin_placeholders .= rtrim( str_repeat( '%s,', count( $object_id_array ) ), ',' );
$admin_placeholders .= ')';
array_unshift( $object_id_array, $admin_placeholders );
$where[] = call_user_func_array(array( $wpdb, 'prepare' ), $object_id_array );
if ('' !== $args['parent']) {
$where[] = $wpdb->prepare('tt.parent = %d', $args['parent']);
}
// Meta query support.
$meta_query_join = '';
if (!empty($args['meta_query'])) {
$mquery = new WP_Meta_Query($args['meta_query']);
$mq_sql = $mquery->get_sql('term', 't', 'term_id');
$meta_query_join .= $mq_sql['join'];
// Strip leading AND.
$where[] = preg_replace('/^\s*AND/', '', $mq_sql['where']);
}
$where = implode(' AND ', $where);
$query = "SELECT $select_this FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON tt.term_id = t.term_id INNER JOIN $wpdb->term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id $meta_query_join WHERE $where $orderby $order";
$objects = false;
if ('all' == $fields || 'all_with_object_id' == $fields) {
$_terms = $wpdb->get_results($query); //phpcs:ignore --Reason $query is a predefined query
$object_id_index = array();
foreach ($_terms as $key => $term) {
$term = sanitize_term($term, $taxonomy, 'raw');
$_terms[$key] = $term;
if (isset($term->object_id)) {
$object_id_index[$key] = $term->object_id;
}
}
update_term_cache($_terms);
$_terms = array_map('get_term', $_terms);
// Re-add the object_id data, which is lost when fetching terms from cache.
if ('all_with_object_id' === $fields) {
foreach ($_terms as $key => $_term) {
if (isset($object_id_index[$key])) {
$_term->object_id = $object_id_index[$key];
}
}
}
$terms = array_merge($terms, $_terms);
$objects = true;
} elseif ('ids' == $fields || 'names' == $fields || 'slugs' == $fields) {
$_terms = $wpdb->get_col($query); //phpcs:ignore --Reason $query is a predefined query
$_field = ( 'ids' == $fields ) ? 'term_id' : 'name';
foreach ($_terms as $key => $term) {
$_terms[$key] = sanitize_term_field($_field, $term, $term, $taxonomy, 'raw');
}
$terms = array_merge($terms, $_terms);
} elseif ('tt_ids' == $fields) {
$terms = $wpdb->get_col( $wpdb->prepare("SELECT tr.term_taxonomy_id FROM $wpdb->term_relationships AS tr INNER JOIN $wpdb->term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE $where $orderby $order") );//phpcs:ignore --Reason: $wpdb->term is a table name
foreach ($terms as $key => $tt_id) {
$terms[$key] = sanitize_term_field('term_taxonomy_id', $tt_id, 0, $taxonomy, 'raw'); // 0 should be the term id, however is not needed when using raw context.
}
}
// Update termmeta cache, if necessary.
if ($args['update_term_meta_cache'] && ( 'all' === $fields || 'all_with_object_id' === $fields || 'ids' === $fields )) {
if ('ids' === $fields) {
$term_ids = $terms;
} else {
$term_ids = wp_list_pluck($terms, 'term_id');
}
if (!function_exists('update_termmeta_cache')) {
include(ABSPATH . "wp-includes/taxonomy.php");
}
if (function_exists('update_termmeta_cache')) {
update_termmeta_cache($term_ids);
}
}
if (!$terms) {
$terms = array();
} elseif ($objects && 'all_with_object_id' !== $fields) {
$_tt_ids = array();
$_terms = array();
foreach ($terms as $term) {
if (in_array($term->term_taxonomy_id, $_tt_ids)) {
continue;
}
$_tt_ids[] = $term->term_taxonomy_id;
$_terms[] = $term;
}
$terms = $_terms;
} elseif (!$objects) {
$terms = array_values(array_unique($terms));
}
/**
* Filters the terms for a given object or objects.
*
* @since 4.2.0
*
* @param array $terms An array of terms for the given object or objects.
* @param array $object_id_array Array of object IDs for which `$terms` were retrieved.
* @param array $taxonomy_array Array of taxonomies from which `$terms` were retrieved.
* @param array $args An array of arguments for retrieving terms for the given
* object(s). See wp_get_object_terms() for details.
*/
$terms = apply_filters('get_object_terms', $terms, $object_id_array, $taxonomy_array, $args);
/**
* Filters the terms for a given object or objects.
*
* The `$taxonomies` parameter passed to this filter is formatted as a SQL fragment. The
* {@see 'get_object_terms'} filter is recommended as an alternative.
*
* @since 2.8.0
*
* @param array $terms An array of terms for the given object or objects.
* @param int|array $object_ids Object ID or array of IDs.
* @param string $taxonomies SQL-formatted (comma-separated and quoted) list of taxonomy names.
* @param array $args An array of arguments for retrieving terms for the given object(s).
* See wp_get_object_terms() for details.
*/
return apply_filters('wp_get_object_terms', $terms, $object_ids, $taxonomies, $args);
}
/**
* Remove restricted posts from THE-LOOP
*/
function arm_pre_get_posts($query) {
global $wp, $wpdb, $current_user, $arm_errors, $ARMember, $arm_is_access_rule_applied, $arm_access_rules;
$this->arm_add_required_core_file();
$arm_default_access_rules = $arm_access_rules->arm_get_default_access_rules();
$arm_allow_content_listing = isset($arm_default_access_rules['arm_allow_content_listing']) ? $arm_default_access_rules['arm_allow_content_listing'] : 0;
if (isset($query) && !empty($query) && $query != NULL) {
if (!is_admin() && !$query->is_singular() && !current_user_can('administrator') && $arm_allow_content_listing != 1) {
if ($query->get('post_type') != 'nav_menu_item' && $query->get('post_type') != 'page' && $query->get('post_type') != 'attachment') {
$post_meta_rules = $current_user->post_meta_rules;
if (isset($post_meta_rules['meta_key'])) {
$query->set('meta_key', $post_meta_rules['meta_key']);
$query->set('meta_value', $post_meta_rules['meta_value']);
$query->set('meta_compare', $post_meta_rules['meta_compare']);
}
/* For Restricted Taxonomy Terms */
if ($query->get('post_type') != 'page' && !empty($current_user->deny_term)) {
$tax_query = array('relation' => 'AND');
foreach ($current_user->deny_term as $taxonomy => $terms) {
$tax_query[] = array(
'taxonomy' => $taxonomy,
'field' => 'id',
'terms' => $terms,
'operator' => 'NOT IN'
);
}
if(isset($query->tax_query))
{
$query->tax_query->queries[] = $tax_query;
$query->query_vars['tax_query'] = $query->tax_query->queries;
}
}
}
}
if (MEMBERSHIP_DEBUG_LOG == TRUE) {
if (MEMBERSHIP_DEBUG_LOG_TYPE == 'ARM_ALL' || MEMBERSHIP_DEBUG_LOG_TYPE == 'ARM_SPECIAL_PAGE') {
$ARMember->arm_debug_response_log("arm_pre_get_posts", array(), $query, $wpdb->last_query);
}
}
}
}
/**
* Remove restricted taxonomies from listing
*/
function arm_get_terms_args($args, $taxonomies) {
global $wp, $wpdb, $current_user, $arm_errors, $ARMember, $arm_access_rules;
$this->arm_add_required_core_file();
$arm_default_access_rules = $arm_access_rules->arm_get_default_access_rules();
$arm_allow_content_listing = isset($arm_default_access_rules['arm_allow_content_listing']) ? $arm_default_access_rules['arm_allow_content_listing'] : 0;
if (!is_admin() && !current_user_can('administrator') && $arm_allow_content_listing != 1) {
if (!empty($current_user->deny_term)) {
$hide_terms = array();
foreach ($current_user->deny_term as $term) {
$hide_terms = array_merge($hide_terms, $term);
}
$excluded_array = (isset($args['exclude']) && !empty($args['exclude'])) ? $args['exclude'] : array();
if(!empty($hide_terms))
{
if(!is_array($args['slug']) && !empty($args['taxonomy']))
{
$arm_args_texonomies = $args['taxonomy'];
if(is_array($arm_args_texonomies) && count($arm_args_texonomies)>0)
{
foreach($arm_args_texonomies as $arm_args_texonomy)
{
$arm_qur_term_id = $wpdb->prepare('SELECT arm_t.term_id FROM `'.$wpdb->terms.'` as arm_t LEFT JOIN `'.$wpdb->term_taxonomy.'` as arm_tt ON arm_t.term_id=arm_tt.term_id WHERE slug=%s AND taxonomy =%s',$args['slug'],$arm_args_texonomy); //phpcs:ignore --Reason $wpdb->term_taxonomy is a table name
$get_current_page_term_id = $wpdb->get_row($arm_qur_term_id, ARRAY_A);//phpcs:ignore --Reason $arm_qur_term_id is a predefined query
if(!empty($get_current_page_term_id))
{
if(($arm_check_cat_key = array_search($get_current_page_term_id['term_id'], $hide_terms)) !== false) {
if(MEMBERSHIP_DEBUG_LOG == true) {
if (MEMBERSHIP_DEBUG_LOG_TYPE == "ARM_ALL" || MEMBERSHIP_DEBUG_LOG_TYPE == "ARM_ADMIN_PANEL") {
$arm_case_types['admin_panel']['protected'] = true;
$arm_case_types['admin_panel']['message'] = esc_html__('category is restricted by admin', 'ARMember');
$ARMember->arm_debug_response_log('arm_get_terms_args', $arm_case_types, $args, $wpdb->last_query);
}
}
unset($hide_terms[$arm_check_cat_key]);
}
}
}
}
}
}
if (is_array($excluded_array)) {
$args['exclude'] = array_merge($excluded_array, $hide_terms);
if(!empty($args['include']) && is_array($args['include']) && !empty($hide_terms) ){
foreach($args['include'] as $key => $include_id)
{
if(in_array($include_id,$hide_terms))
{
unset($args['include'][$key]);
}
}
}
} else {
if (empty($excluded_array)) {
$excluded_array = array();
$args['exclude'] = array_merge($excluded_array, $hide_terms);
if(!empty($args['include']) && is_array($args['include']) && !empty($hide_terms) ){
foreach($args['include'] as $key => $include_id)
{
if(in_array($include_id,$hide_terms))
{
unset($args['include'][$key]);
}
}
}
} else {
$exploded_excluded_terms = explode(",", $excluded_array);
$exploded_new_excluded_terms = array_merge($exploded_excluded_terms, $hide_terms);
$args['exclude'] = implode(",", $exploded_new_excluded_terms);
if(!empty($args['include']) && is_array($args['include']) && !empty($hide_terms) ){
foreach($args['include'] as $key => $include_id)
{
if(in_array($include_id,$hide_terms))
{
unset($args['include'][$key]);
}
}
}
}
}
}
}
if (MEMBERSHIP_DEBUG_LOG == true) {
if (MEMBERSHIP_DEBUG_LOG_TYPE == 'ARM_ALL' || MEMBERSHIP_DEBUG_LOG_TYPE == 'ARM_TAXONOMY') {
$ARMember->arm_debug_response_log("arm_get_terms_args", array(), $args, $wpdb->last_query);
}
}
return $args;
}
/**
* Remove restricted navigation menus
*/
function arm_wp_get_nav_menu_items($items, $menu, $args) {
global $arm_nav_menu, $ARMember;
$items = apply_filters('arm_restrict_page_for_user', $items);
$arm_nav_menu = $items;
return $items;
}
function arm_wp_nav_menu_items($items, $args) {
global $wp, $wpdb, $current_user, $arm_errors, $ARMember, $arm_modal_view_in_menu, $arm_access_rules, $arm_nav_menu,$arm_pay_per_post_feature;
$this->arm_add_required_core_file();
$items = $arm_nav_menu;
$arm_default_access_rules = $arm_access_rules->arm_get_default_access_rules();
//$arm_allow_content_listing = isset($arm_default_access_rules['arm_allow_content_listing']) ? $arm_default_access_rules['arm_allow_content_listing'] : 0;
//if (!is_admin() && !current_user_can('administrator') && $arm_allow_content_listing != 1) {
if (!is_admin() && !current_user_can('administrator')) {
if (is_user_logged_in()) {
$current_user_plan = get_user_meta($current_user->ID, 'arm_user_plan_ids', true);
$current_user_plan = apply_filters('arm_allow_specific_user_restricted_access', $current_user_plan, $current_user->ID);
if($arm_pay_per_post_feature->isPayPerPostFeature && !empty($current_user_plan))
{
$arm_paid_postIDs = get_user_meta($current_user->ID, 'arm_user_post_ids', true);
$arm_paid_postIDs = apply_filters('arm_allow_specific_user_restricted_access', $arm_paid_postIDs, $current_user->ID, 'arm_user_post_ids');
foreach($current_user_plan as $armPlanKey => $armPlanVal)
{
if(!empty($arm_paid_postIDs[$armPlanVal]))
{
unset($current_user_plan[$armPlanKey]);
}
}
}
$current_user_plan = !empty($current_user_plan) ? $current_user_plan : array(-2);
$suspended_plan_ids = get_user_meta($current_user->ID, 'arm_user_suspended_plan_ids', true);
$suspended_plan_ids = apply_filters('arm_assign_suspended_plan_data', $suspended_plan_ids, $current_user->ID);
$suspended_plan_ids = (isset($suspended_plan_ids) && !empty($suspended_plan_ids)) ? $suspended_plan_ids : array();
if (!empty($current_user_plan) && is_array($current_user_plan)) {
foreach ($current_user_plan as $cp) {
if (in_array($cp, $suspended_plan_ids)) {
unset($current_user_plan[array_search($cp, $current_user_plan)]);
}
}
}
$current_user_plan = !empty($current_user_plan) ? $current_user_plan : array(-2);
} else {
$current_user_plan = array();
}
$arm_primary_status = arm_get_member_status($current_user->ID);
if($arm_primary_status == 3){
$current_user_plan = array();
}
$protected_nav_menu = array();
foreach ($items as $k => $item) {
$item_plans = get_post_meta($item->ID, 'arm_access_plan');
$item_plans = !empty($item_plans) ? $item_plans : array();
$item_protection = 0;
if (count($item_plans) == 0)
$item_protection = 0;
else
$item_protection = 1;
if ($item_protection == 1) {
/* Check Logged In User Has Access */
$item_plans_array = array_intersect($current_user_plan, $item_plans);
if (empty($item_plans_array)) {
$protected_nav_menu[$k] = $item;
unset($items[$k]);
}
}
}
/* Restrict Sub menu */
foreach ($protected_nav_menu as $k => $item) {
$item_plans = get_post_meta($item->ID, 'arm_access_plan');
$item_plans = !empty($item_plans) ? $item_plans : array();
$item_protection = 0;
if (count($item_plans) == 0)
$item_protection = 0;
else
$item_protection = 1;
$children = $arm_modal_view_in_menu->get_nav_menu_item_children($item->ID, $items, true);
if (!empty($children)) {
foreach ($children as $key => $child_nav) {
$child_id = $child_nav->ID;
$indexChild = $this->arm_get_child_navigation_index_from_menu($items, $child_id);
unset($items[$indexChild]);
}
}
}
}
return $items;
}
function arm_get_child_navigation_index_from_menu($menu, $child_id) {
if (!empty($menu)) {
foreach ($menu as $index => $menu_item) {
if ($menu_item->ID == $child_id) {
return $index;
}
}
}
return false;
}
/**
* Remove restricted posts from widgets
*/
function arm_widget_posts_args($args) {
global $wp, $wpdb, $current_user, $arm_errors, $ARMember, $arm_drip_rules, $arm_access_rules;
$this->arm_add_required_core_file();
$arm_default_access_rules = $arm_access_rules->arm_get_default_access_rules();
$arm_allow_content_listing = isset($arm_default_access_rules['arm_allow_content_listing']) ? $arm_default_access_rules['arm_allow_content_listing'] : 0;
if (!is_admin() && !current_user_can('administrator') && $arm_allow_content_listing != 1) {
$restrict_posts = array();
$result_pages = array();
if (is_user_logged_in()) {
$current_user_plan = get_user_meta($current_user->ID, 'arm_user_plan_ids', true);
$current_user_plan = apply_filters('arm_allow_specific_user_restricted_access', $current_user_plan, $current_user->ID);
$current_user_plan = !empty($current_user_plan) ? $current_user_plan : array(-2);
$suspended_plan_ids = get_user_meta($current_user->ID, 'arm_user_suspended_plan_ids', true);
$suspended_plan_ids = apply_filters('arm_assign_suspended_plan_data', $suspended_plan_ids, $current_user->ID);
$suspended_plan_ids = (isset($suspended_plan_ids) && !empty($suspended_plan_ids)) ? $suspended_plan_ids : array();
if (!empty($current_user_plan) && is_array($current_user_plan)) {
foreach ($current_user_plan as $cp) {
if (in_array($cp, $suspended_plan_ids)) {
unset($current_user_plan[array_search($cp, $current_user_plan)]);
}
}
}
$current_user_plan = !empty($current_user_plan) ? $current_user_plan : array(-2);
$arm_primary_status = arm_get_member_status($current_user->ID);
if($arm_primary_status == 3){
$current_user_plan = array(-5);
}
} else {
$current_user_plan = array();
}
/*$rargs = array(
'post_type' => 'any',
'meta_key' => 'arm_access_plan',
'meta_value' => '0',
'post_status' => 'publish',
'posts_per_page' => -1
);*/
//$result_pages = get_posts($rargs);
$sel_result_pages = $wpdb->prepare("SELECT ID from $wpdb->posts arm_wp LEFT JOIN $wpdb->postmeta AS arm_wpm ON arm_wp.ID = arm_wpm.post_id WHERE arm_wpm.meta_key = %s AND arm_wpm.meta_value = %s AND arm_wp.post_status=%s ORDER BY arm_wp.ID DESC",'arm_access_plan',0,'publish'); //phpcs:ignore --Reason $wpdb->posts is a table name
$result_pages = $wpdb->get_results($sel_result_pages); //phpcs:ignore --Reason $sel_result_pages is a prepared queries
if (!empty($result_pages)) {
foreach ($result_pages as $rp) {
$obj_plans = get_post_meta($rp->ID, 'arm_access_plan');
$obj_plans = !empty($obj_plans) ? $obj_plans : array();
$obj_plans_array = array_intersect($current_user_plan, $obj_plans);
if (empty($obj_plans_array)) {
$restrict_posts[] = $rp->ID;
}
}
}
if ($arm_drip_rules->isDripFeature && is_user_logged_in()) {
foreach ($restrict_posts as $key => $pageID) {
if (!empty($current_user_plan) && is_array($current_user_plan)) {
foreach ($current_user_plan as $user_plan) {
$post_drip_rule = $arm_drip_rules->arm_get_post_drip_rule($current_user->ID, $user_plan, $pageID);
if ($post_drip_rule) {
$is_dripped = $arm_drip_rules->arm_is_dripped($post_drip_rule, $current_user->ID, $user_plan);
if (!$is_dripped) {
unset($restrict_posts[$key]);
}
}
}
}
}
}
$args['post__not_in'] = $restrict_posts;
}
return $args;
}
/**
* Remove restricted pages from widgets
*/
function arm_widget_pages_args($args) {
global $wp, $wpdb, $current_user, $arm_errors, $ARMember, $arm_access_rules, $arm_drip_rules;
$this->arm_add_required_core_file();
$arm_default_access_rules = $arm_access_rules->arm_get_default_access_rules();
$arm_allow_content_listing = isset($arm_default_access_rules['arm_allow_content_listing']) ? $arm_default_access_rules['arm_allow_content_listing'] : 0;
if (!is_admin() && !current_user_can('administrator') && $arm_allow_content_listing != 1) {
$restrict_pages = array();
$result_pages = array();
if (is_user_logged_in()) {
$current_user_plan = get_user_meta($current_user->ID, 'arm_user_plan_ids', true);
$current_user_plan = apply_filters('arm_allow_specific_user_restricted_access', $current_user_plan, $current_user->ID);
$current_user_plan = !empty($current_user_plan) ? $current_user_plan : array(-2);
$suspended_plan_ids = get_user_meta($current_user->ID, 'arm_user_suspended_plan_ids', true);
$suspended_plan_ids = apply_filters('arm_assign_suspended_plan_data', $suspended_plan_ids, $current_user->ID);
$suspended_plan_ids = (isset($suspended_plan_ids) && !empty($suspended_plan_ids)) ? $suspended_plan_ids : array();
if (!empty($current_user_plan) && is_array($current_user_plan)) {
foreach ($current_user_plan as $cp) {
if (in_array($cp, $suspended_plan_ids)) {
unset($current_user_plan[array_search($cp, $current_user_plan)]);
}
}
}
$current_user_plan = !empty($current_user_plan) ? $current_user_plan : array(-2);
$arm_primary_status = arm_get_member_status($current_user->ID);
if($arm_primary_status == 3){
$current_user_plan = array(-5);
}
} else {
$current_user_plan = array();
}
$rargs = array(
'post_type' => 'page',
'meta_key' => 'arm_access_plan',
'meta_value' => '0',
);
$result_pages = get_pages($rargs);
if (!empty($result_pages)) {
foreach ($result_pages as $rp) {
$obj_plans = get_post_meta($rp->ID, 'arm_access_plan');
$obj_plans = !empty($obj_plans) ? $obj_plans : array();
$obj_plans_array = array_intersect($current_user_plan, $obj_plans);
if (empty($obj_plans_array)) {
$restrict_pages[] = $rp->ID;
}
}
}
if ($arm_drip_rules->isDripFeature && is_user_logged_in()) {
if (!empty($restrict_pages)) {
foreach ($restrict_pages as $key => $pageID) {
if (!empty($current_user_plan) && is_array($current_user_plan)) {
foreach ($current_user_plan as $user_plan) {
$post_drip_rule = $arm_drip_rules->arm_get_post_drip_rule($current_user->ID, $user_plan, $pageID);
if ($post_drip_rule) {
$is_dripped = $arm_drip_rules->arm_is_dripped($post_drip_rule, $current_user->ID, $user_plan);
if (!$is_dripped) {
unset($restrict_pages[$key]);
}
}
}
}
}
}
}
$args['exclude'] = implode(',', $restrict_pages);
}
return $args;
}
function arm_current_special_page_access() {
global $wp, $wpdb, $current_user, $ARMember, $arm_global_settings, $arm_subscription_plans, $arm_access_rules;
$this->arm_add_required_core_file();
if (is_user_logged_in()) {
$current_user_plan = get_user_meta($current_user->ID, 'arm_user_plan_ids', true);
$current_user_plan = apply_filters('arm_allow_specific_user_restricted_access', $current_user_plan, $current_user->ID);
$current_user_plan = !empty($current_user_plan) ? $current_user_plan : array(-2);
$suspended_plan_ids = get_user_meta($current_user->ID, 'arm_user_suspended_plan_ids', true);
$suspended_plan_ids = apply_filters('arm_assign_suspended_plan_data', $suspended_plan_ids, $current_user->ID);
$suspended_plan_ids = (isset($suspended_plan_ids) && !empty($suspended_plan_ids)) ? $suspended_plan_ids : array();
if (!empty($current_user_plan) && is_array($current_user_plan)) {
foreach ($current_user_plan as $cp) {
if (in_array($cp, $suspended_plan_ids)) {
unset($current_user_plan[array_search($cp, $current_user_plan)]);
}
}
}
$current_user_plan = !empty($current_user_plan) ? $current_user_plan : array(-2);
$arm_primary_status = arm_get_member_status($current_user->ID);
if($arm_primary_status == 3){
$current_user_plan = array();
}
} else {
$current_user_plan = array();
}
$sp_access = $arm_access_rules->arm_get_custom_access_rules('special_pages');
$current_page = array();
if (!empty($sp_access)) {
$sp_slugs = array(
'home', 'notfound', 'search', 'attachment',
'single', 'archive', 'author',
'date', 'year', 'month', 'day', 'time'
);
$page_status = false;
$page_status_new = false;
foreach ($sp_slugs as $sp_key) {
/*
* The item order is critical, in case a page has multiple flags
* like "Front" and "Home" and "Archive".
* In this example "Archive" might be denied but "Front" allowed,
* so we have to define a hierarchy which flag is actually used.
*/
switch ($sp_key) {
case 'home': $page_status = is_home();
break;
case 'notfound': $page_status = is_404();
break;
case 'search': $page_status = is_search();
break;
case 'attachment': $page_status = is_attachment();
break;
case 'single': $page_status = is_single();
break;
case 'archive': $page_status = is_archive();
break;
case 'author': $page_status = is_author();
break;
case 'date': $page_status = is_date();
break;
case 'year': $page_status = is_year();
break;
case 'month': $page_status = is_month();
break;
case 'day': $page_status = is_day();
break;
case 'time': $page_status = is_time();
break;
}
if ($page_status) {
$page_status_new = true;
$current_page[] = $sp_key;
}
}
if ($page_status_new && !empty($current_page)) {
foreach ($current_page as $cur_page) {
if ($sp_access[$cur_page]['protection'] == '1') {
$page_access_cur_page = $cur_page;
$page_access_protection = $sp_access[$cur_page]['protection'];
$page_access_plans = $sp_access[$cur_page]['plans'];
break;
}
}
if (!empty($page_access_protection) && $page_access_protection == '1') {
$sp_plans = (!empty($page_access_plans)) ? $page_access_plans : array();
$sp_plans_array = array_intersect($current_user_plan, $sp_plans);
if (!empty($sp_plans_array)) {
return apply_filters('arm_special_page_access', true, $current_page, $sp_access);
}
return apply_filters('arm_special_page_access', false, $current_page, $sp_access);
}
}
}
return apply_filters('arm_special_page_access', true, $current_page, $sp_access);
}
/* * *************************\.Begin Feed Restrictions.\****************************** */
function arm_feed_link($feed_link, $feed) {
global $current_user, $wp, $wpdb, $ARMember, $arm_global_settings;
if (empty($arm_user) || !method_exists($arm_user, 'has_cap')) {
$arm_user = wp_get_current_user();
}
if ($current_user->ID > 0) {
$feed_key = get_user_meta($current_user->ID, '_arm_feed_key', true);
if (empty($feed_key)) {
$feed_key = md5($current_user->ID . $current_user->user_pass . time());
update_user_meta($current_user->ID, '_arm_feed_key', $feed_key);
}
if (!empty($feed_key)) {
$feed_link = $arm_global_settings->add_query_arg('k', $feed_key, untrailingslashit($feed_link));
}
}
$feed_link = apply_filters('arm_feed_link', $feed_link);
return $feed_link;
}
function find_user_by_feed_key($key = false) {
global $wpdb;
$user_id = $wpdb->get_var( $wpdb->prepare("SELECT `user_id` FROM `" . $wpdb->usermeta . "` WHERE `meta_key`=%s AND `meta_value`=%s LIMIT 0,1",'_arm_feed_key',$key) ); //phpcs:ignore --Reason $wpdb->usermeta is a table name
return $user_id;
}
function show_noaccess_feed($wp_query) {
$post = new stdClass;
$post->post_author = 1;
$post->post_name = '';
//add_filter('the_permalink', create_function('$permalink', 'return "' . ARM_HOME_URL . '";'));
add_filter('the_permalink', function($permalink) {return ARM_HOME_URL;} );
$post->guid = site_url();
$post->post_title = esc_html__('No Feed Access', 'ARMember');
$post->post_content = esc_html__('Sorry, You Don\'t Have Feed Access', 'ARMember');
$post->ID = -1;
$post->post_status = 'publish';
$post->post_type = 'post';
$post->comment_status = 'closed';
$post->ping_status = 'open';
$post->comment_count = 0;
$post->post_date = current_time('mysql');
$post->post_date_gmt = current_time('mysql', 1);
$posts = array($post);
$posts = apply_filters('arm_restricted_feed_content_posts', $posts);
return $posts;
}
function arm_check_feed_rules() {
global $wp, $wpdb, $current_user, $arm_errors, $ARMember, $arm_global_settings, $arm_access_rules;
$this->arm_add_required_core_file();
$global_settings = $arm_global_settings->global_settings;
$hide_feed = $global_settings['hide_feed'];
if ($hide_feed == '1') {
return false;
}
$rules_opts = $arm_access_rules->arm_get_custom_access_rules('special_pages');
if (!empty($rules_opts) && !empty($rules_opts['feed'])) {
$feed_protection = $rules_opts['feed']['protection'];
$feed_plans = (!empty($rules_opts['feed']['plans'])) ? $rules_opts['feed']['plans'] : array();
if ($feed_protection == '1') {
if (isset($_GET['k'])) {
$key = sanitize_text_field( $_GET['k'] ); //phpcs:ignore
$user_id = $this->find_user_by_feed_key($key);
$user_id = (int) $user_id;
if ($user_id > 0) {
$user_plan = get_user_meta($user_id, 'arm_user_plan_ids', true);
$user_plan = apply_filters('arm_allow_specific_user_restricted_access', $user_plan, $user_id);
$user_plan = (!empty($user_plan)) ? $user_plan : array(-2);
$arm_primary_status = arm_get_member_status($user_id);
if($arm_primary_status == 3){
$user_plan = array();
}
$feed_plans_array = array_intersect($user_plan, $feed_plans);
if (!empty($feed_plans_array)) {
wp_set_current_user($user_id);
return true;
}
}
}
return false;
}
}
return true;
}
/* * ***************************\.End Feed Restrictions.\****************************** */
function arm_block_access() {
global $wp, $wpdb, $ARMember, $current_user;
$url = esc_url('http' . (empty($_SERVER['HTTPS']) ? '' : 's') . '://' . sanitize_text_field( $_SERVER['SERVER_NAME'] ) . sanitize_text_field( $_SERVER['REQUEST_URI'] ) );//phpcs:ignore
status_header(404);
nocache_headers();
$headers = array('X-Pingback' => get_bloginfo('pingback_url'));
$headers['Content-Type'] = get_option('html_type') . '; charset=' . get_option('blog_charset');
foreach ((array) $headers as $name => $field_value) {
@header("{$name}: {$field_value}");
}
$pos_php_self = strpos(sanitize_text_field( $_SERVER['PHP_SELF'] ), '/wp-admin/'); //phpcs:ignore
$expectedPosition = strlen( sanitize_text_field($_SERVER['PHP_SELF'] ) ) - strlen('.php'); //phpcs:ignore
if ($pos_php_self === false && strrpos( sanitize_text_field( $_SERVER['PHP_SELF'] ) , '.php', 0) === $expectedPosition) { //phpcs:ignore
wp_redirect(home_url('/404_Not_Found'));
} else {
if (get_404_template())
require_once(get_404_template()); //phpcs:ignore
else
require_once(get_single_template()); //phpcs:ignore
}
die();
}
function arm_add_required_core_file() {
if (!function_exists('wp_get_current_user')) {
include(ABSPATH . "wp-includes/pluggable.php");
}
}
function arm_elementor_templates_content_check_access_rules($elementor_content,$ele_temp_post_id){
global $arm_access_rules,$current_user, $arm_drip_rules;
if (!current_user_can('administrator') && is_singular() && in_the_loop() && is_main_query() )
{
if ($ele_temp_post_id > 0) {
$ele_temp_post_plans = get_post_meta($ele_temp_post_id, 'arm_access_plan');
if(empty($ele_temp_post_plans)){
return $elementor_content;
}else{
if (is_user_logged_in()){
$current_user_plan = $current_user->get('arm_user_plan_ids');
$current_user_plan = apply_filters('arm_allow_specific_user_restricted_access', $current_user_plan, $current_user->ID);
$current_user_plan = (!empty($current_user_plan)) ? $current_user_plan : array(-2);
$suspended_plan_ids = get_user_meta($current_user->ID, 'arm_user_suspended_plan_ids', true);
$suspended_plan_ids = apply_filters('arm_assign_suspended_plan_data', $suspended_plan_ids, $current_user->ID);
$suspended_plan_ids = (isset($suspended_plan_ids) && !empty($suspended_plan_ids)) ? $suspended_plan_ids : array();
if (!empty($current_user_plan) && is_array($current_user_plan)) {
foreach ($current_user_plan as $cp) {
if (in_array($cp, $suspended_plan_ids)) {
unset($current_user_plan[array_search($cp, $current_user_plan)]);
}
}
}
$current_user_plan_all = (!empty($current_user_plan)) ? $current_user_plan : array(-2);
$return_current_user_plan_array = array_intersect($current_user_plan_all, $ele_temp_post_plans);
if (!empty($ele_temp_post_plans) && !empty($return_current_user_plan_array)) {
return $elementor_content;
}
else if(!empty($current_user_plan) && $arm_drip_rules->isDripFeature) {
$extraVars = array(
'post_type' => '1', //get_post_type($ele_temp_post_id)
'post_id' => $ele_temp_post_id,
);
$allow_access = false;
$allow_access = $arm_drip_rules->arm_filter_drip_access($allow_access, $extraVars);
if($allow_access)
{
return $elementor_content;
}
}
}
return '';
}
}
}
return $elementor_content;
}
function arm_check_content_hasaccess( $membership_plans = array(), $type = "" ) {
global $arm_pay_per_post_feature;
/* Always Display Content For Admins */
if (current_user_can('administrator')) {
return TRUE;
}
$hasaccess = FALSE;
$isLoggedIn = is_user_logged_in();
$current_user_id = get_current_user_id();
$arm_user_plan = get_user_meta($current_user_id, 'arm_user_plan_ids', true);
$arm_user_plan = apply_filters('arm_allow_specific_user_restricted_access', $arm_user_plan, $current_user_id);
$arm_user_plan = !empty($arm_user_plan) ? $arm_user_plan : array();
if( !empty( $arm_pay_per_post_feature->isPayPerPostFeature ) ){
// unset membership plan ID which has a paid post
foreach($arm_user_plan as $plan_id)
{
$paid_post_data = $arm_pay_per_post_feature->arm_get_post_from_plan_id( $plan_id );
if( !empty( $paid_post_data[0]['arm_subscription_plan_post_id'] ) ){
unset($arm_user_plan[array_search($plan_id, $arm_user_plan)]);
}
}
}
if(!empty($arm_user_plan)){
$suspended_plan_ids = get_user_meta($current_user_id, 'arm_user_suspended_plan_ids', true);
$suspended_plan_ids = apply_filters('arm_assign_suspended_plan_data', $suspended_plan_ids, $current_user_id);
$suspended_plan_ids = (isset($suspended_plan_ids) && !empty($suspended_plan_ids)) ? $suspended_plan_ids : array();
if( ! empty($suspended_plan_ids)) {
foreach ($suspended_plan_ids as $suspended_plan_id) {
if(in_array($suspended_plan_id, $arm_user_plan)) {
unset($arm_user_plan[array_search($suspended_plan_id, $arm_user_plan)]);
}
}
}
}
$plan = ( isset($membership_plans) && !empty($membership_plans))? $membership_plans : array() ;
$type = isset($type) && !empty($type) ? $type : 'show' ;
$plans = array();
if (!empty($plan)) {
if(!is_array($plan)) {
if (strpos($plan, ",")) {
$plans = explode(",", $plan);
}
} else {
$plans = $plan;
}
$plans = array_filter($plans);
$registered = FALSE;
if (in_array('registered', $plans)) {
$registered = TRUE;
$rkey = array_search('registered', $plans);
unset($plans[$rkey]);
}
$unregistered = FALSE;
if (in_array('unregistered', $plans)) {
$unregistered = TRUE;
$ukey = array_search('unregistered', $plans);
unset($plans[$ukey]);
}
$return_array = array_intersect($arm_user_plan, $plans);
if ($type == 'show') {
if ($isLoggedIn) {
if ($registered) {
$hasaccess = TRUE;
}
if (!empty($plans) && !empty($return_array)) {
$hasaccess = TRUE;
}
if(empty($arm_user_plan) && in_array("-2",$plans))
{
$hasaccess = TRUE;
}
if(!empty($arm_user_plan) && in_array("any_plan", $plans)) {
$hasaccess = TRUE;
}
} else {
/* Show Content To Non LoggedIn Members */
if ($unregistered) {
$hasaccess = TRUE;
}
}
} else {
if ($isLoggedIn) {
/* Need to check this condition and confirm */
if ($unregistered) {
$hasaccess = TRUE;
}
/* Need to check this condition and confirm */
if (!empty($plans) && empty($return_array)) {
$hasaccess = TRUE;
}
if(!empty($arm_user_plan) && in_array('any_plan', $plans)) {
$hasaccess = FALSE;
}
} else {
/* Hide Content From Non LoggedIn Members */
if (!$unregistered) {
$hasaccess = TRUE;
}
}
}
} else {
if ($type == 'show') {
$hasaccess = TRUE;
}
}
return $hasaccess;
}
function arm_rest_api_pre_echo_response_func( $response, $object, $request )
{
$response_custom_array = array();
if(is_array($response))
{
$response_custom_array['id'] = !empty( $response['id'] ) ? $response['id'] : 0;
$response_custom_array['type'] = !empty( $response['type'] ) ? $response['type'] : '';
$response_custom_array['guid'] = !empty( $response['guid'] ) ? $response['guid'] : '';
}
else {
$response_custom_array['id'] = !empty( $response->id ) ? $response->id : 0;
$response_custom_array['type'] = !empty( $response->type ) ? $response->type : '';
$response_custom_array['guid'] = !empty( $response->guid ) ? $response->guid : '';
}
if( !empty( $response_custom_array['id'] ) && !empty( $response_custom_array['type'] ) && !empty( $response_custom_array['guid'] ) )
{
global $post, $arm_restriction;
if(empty( $post) )
{
$arm_get_post_arr = get_post( $response_custom_array['id'] );
}
else {
if( !empty($post->ID) && $post->ID==$response_custom_array['id'] )
{
$arm_get_post_arr = $post;
}
else {
$arm_get_post_arr = get_post( $response_custom_array['id'] );
}
}
$arm_return_data = 1;
$allow_access = $arm_restriction->arm_wp_head_redirect($arm_get_post_arr, $arm_return_data);
if($allow_access==2){
$response = new WP_Error( 'rest_restricted', esc_html__('You are not allowed to access the content.','ARMember'), array( 'status' => 403 ) );
}
}
return $response;
}
}
}
global $arm_restriction;
$arm_restriction = new ARM_restriction();
if (!class_exists('ARM_fail_attempts')) {
class ARM_fail_attempts {
function __construct() {
}
function logFailAttempts($username = "", $user_id = 0) {
global $wp, $wpdb, $current_user, $arm_errors, $ARMember, $arm_global_settings;
$arm_all_block_settings = $arm_global_settings->block_settings;
$ip = $ARMember->arm_get_ip_address();
$failed_login_lockdown = $arm_all_block_settings['failed_login_lockdown'];
if ($failed_login_lockdown == 1) {
$user_detail_uns = array(
'username' => $username,
'server' => $_SERVER
);
$user_detail = maybe_serialize($user_detail_uns);
$ins_data = array(
'arm_user_id' => $user_id,
'arm_fail_attempts_detail' => $user_detail,
'arm_fail_attempts_ip' => $ip,
'arm_fail_attempts_datetime' => current_time( 'mysql' ),
);
$wpdb->insert($ARMember->tbl_arm_fail_attempts, $ins_data);
}
}
function countFails($username = "", $lock_duration = 0, $user_id = 0, $is_temporary = TRUE) {
global $wp, $wpdb, $current_user, $arm_errors, $ARMember, $arm_global_settings;
$arm_all_block_settings = $arm_global_settings->block_settings;
if (empty($lock_duration)) {
$lock_duration = $arm_all_block_settings['temporary_lockdown_duration'];
}
$ip = $ARMember->arm_get_ip_address();
$arm_current_time = current_time('timestamp');
$where = $wpdb->prepare("WHERE `arm_fail_attempts_datetime` + INTERVAL %d MINUTE > %s AND `arm_user_id` = %d ",$lock_duration,current_time( 'mysql' ),$user_id);
$ip = $ARMember->arm_get_ip_address();
$where .= $wpdb->prepare(" AND `arm_fail_attempts_ip` LIKE %s",$ip);
if ($is_temporary) {
$where .= $wpdb->prepare(" AND `arm_is_block`=%d ",0);
}
$numFails = $wpdb->get_var("SELECT COUNT(arm_fail_attempts_id) FROM `" . $ARMember->tbl_arm_fail_attempts . "` $where "); //phpcs:ignore --Reason: $ARMember->tbl_arm_fail_attempts is a table name
return $numFails;
}
function lockDown($username = "", $lock_minutes = 0, $user_id = 0) {
global $wp, $wpdb, $current_user, $arm_errors, $ARMember, $arm_global_settings;
$arm_all_block_settings = $arm_global_settings->block_settings;
$ip = $ARMember->arm_get_ip_address();
if (empty($lock_minutes)) {
$lock_minutes = $arm_all_block_settings['temporary_lockdown_duration'];
}
$arm_current_time = current_time('timestamp');
$now = current_time( 'mysql' );
$relase_lock = date('Y-m-d H:i:s', strtotime($now . ' + ' . $lock_minutes . ' minute'));
$ins_data = array(
'arm_user_id' => $user_id,
'arm_lockdown_date' => $now,
'arm_release_date' => $relase_lock,
'arm_lockdown_IP' => $ip
);
$wpdb->insert($ARMember->tbl_arm_lockdown, $ins_data);
$updateFails = $wpdb->get_results( $wpdb->prepare("UPDATE `" . $ARMember->tbl_arm_fail_attempts . "` SET `arm_is_block`='1', `arm_fail_attempts_release_datetime`=%s WHERE `arm_fail_attempts_datetime` + INTERVAL %d MINUTE > %s AND `arm_fail_attempts_ip` LIKE %s AND `arm_user_id`=%d AND `arm_is_block`='0'",$relase_lock,$lock_minutes,$now,$ip,$user_id ) ); //phpcs:ignore --Reason $ARMember->tbl_arm_fail_attempts is a table name
}
function isLockedDown($user_id = 0) {
global $wp, $wpdb, $current_user, $arm_errors, $ARMember, $arm_global_settings;
$arm_all_block_settings = $arm_global_settings->block_settings;
$failed_login_lockdown = isset($arm_all_block_settings['failed_login_lockdown']) ? $arm_all_block_settings['failed_login_lockdown'] : 0;
$stillLocked = false;
$ip = $ARMember->arm_get_ip_address();
if ($failed_login_lockdown == 1) {
$arm_current_time = current_time('timestamp');
$where = $wpdb->prepare("WHERE `arm_release_date` > %s AND `arm_user_id`=%d",current_time( 'mysql' ),$user_id);
$where .= $wpdb->prepare(" AND `arm_lockdown_IP` LIKE %s",$ip);
$lockedResults = $wpdb->get_results("SELECT `arm_user_id`, `arm_lockdown_date`, `arm_release_date`, `arm_lockdown_IP` FROM `" . $ARMember->tbl_arm_lockdown . "` $where ORDER BY `arm_lockdown_ID` DESC "); //phpcs:ignore --Reason $ARMember->tbl_arm_lockdown is a table name
if (!empty($lockedResults))
{
$stillLocked = true;
}
}
return $stillLocked;
}
}
}
global $arm_fail_attempts;
$arm_fail_attempts = new ARM_fail_attempts();
if (!function_exists('get_post_slug')) {
function get_post_slug($pid = null) {
$pslug = '';
if (!empty($pid) && $pid != 0) {
$post = get_post($pid);
if (!empty($post)) {
$pslug = $post->post_name;
}
}
return $pslug;
}
}
if (!function_exists('wp_get_current_page_url')) {
/**
* Get Current Page URL
*/
function wp_get_current_page_url() {
global $wp, $wpdb, $current_user, $arm_errors, $ARMember, $arm_member_forms, $arm_global_settings, $arm_email_settings;
/* get requested url */
$requested_url = home_url($wp->request . '/');
/* Add query string in requested url */
$arm_query_string = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : ''; //phpcs:ignore
$current_url = $arm_global_settings->add_query_arg($arm_query_string, '', $requested_url); //phpcs:ignore
return $current_url;
}
}
if (!function_exists('the_current_page_url')) {
/**
* Print Current Page URL
*/
function the_current_page_url() {
echo wp_get_current_page_url(); //phpcs:ignore
}
}
/*
if (!function_exists('wp_new_user_notification')) {
function wp_new_user_notification() {
return;
}
}*/
if (!function_exists('arm_new_user_notification')) {
/**
* New User Notification Mail.
* @param integer $user_id Registered User's ID
* @param string $plaintext_pass User's Password
* @return type
*/
function arm_new_user_notification($user_id, $plaintext_pass = '', $user_notification_status = '',$is_allow_send = true) {
global $wp, $wpdb, $current_user, $arm_errors, $ARMember, $arm_member_forms, $arm_global_settings, $arm_email_settings;
$user = new WP_User($user_id);
do_action('arm_before_new_user_notification', $user);
/* Send Activation link if `user_register_verification` option is set to `email`. */
$user_register_verification = $arm_global_settings->arm_get_single_global_settings('user_register_verification', 'auto');
if ($user_register_verification == 'email' && $is_allow_send) {
/* New Member Signup Verification Mail */
armEmailVerificationMail($user);
} else {
/* New Member Signup Complete Notification */
armMemberSignUpCompleteMail($user, $plaintext_pass, $user_notification_status);
}
do_action('arm_after_new_user_notification', $user);
}
}
if (!function_exists('armEmailVerificationMail')) {
function armEmailVerificationMail($user = null) {
global $wp, $wpdb, $current_user, $arm_errors, $ARMember, $arm_member_forms, $arm_global_settings, $arm_email_settings;
$user_verify_send_mail = false;
if (!empty($user)) {
$user_id = $user->ID;
$user_login = stripslashes($user->user_login);
$user_email = $user->user_email;
$activation_key = get_user_meta($user->ID, 'arm_user_activation_key', true);
$temp_detail_verify = $arm_email_settings->arm_get_email_template($arm_email_settings->templates->email_verify_user);
/* New Member Signup Verification Mail */
if ($temp_detail_verify->arm_template_status == '1') {
$temp_detail_verify = apply_filters('arm_get_modify_mail_template_object_for_send_mail', $temp_detail_verify,$user_id);
$subject_verify = $arm_global_settings->arm_filter_email_with_user_detail($temp_detail_verify->arm_template_subject, $user_id, 0);
$subject_verify = apply_filters('arm_user_verify_message_subject', $subject_verify, $user_login, $user_email, '', $activation_key);
$msg_verify = $arm_global_settings->arm_filter_email_with_user_detail($temp_detail_verify->arm_template_content, $user_id, 0);
$msg_verify = apply_filters('arm_change_verification_email_notification', $msg_verify, $user_login, $user_email, '', $activation_key);
$user_verify_send_mail = $arm_global_settings->arm_wp_mail('', $user_email, $subject_verify, $msg_verify);
}
}
return $user_verify_send_mail;
}
}
if (!function_exists('armMemberSignUpCompleteMail')) {
/**
* Admin & User notification when successful registration
* @param type $user User Object
* @param type $plaintext_pass User's Password
*/
function armMemberSignUpCompleteMail($user, $plaintext_pass = '', $user_notification_status = '') {
global $wp, $wpdb, $arm_errors, $ARMember, $arm_global_settings, $arm_email_settings, $wp_hasher;
$user_id = $user->ID;
do_action('arm_before_signup_complete_notification', $user);
$user_login = stripslashes($user->user_login);
$user_email = $user->user_email;
$activation_key = get_user_meta($user->ID, 'arm_user_activation_key', true);
$arm_last_user_plan = get_user_meta($user_id, 'arm_user_last_plan', true);
$planID = !empty($arm_last_user_plan) ? $arm_last_user_plan : 0;
$plan_detail = array();
if (!empty($planID)) {
$planData = get_user_meta($user_id, 'arm_user_plan_' . $planID, true);
$plan_detail = $planData['arm_current_plan_detail'];
}
if (!empty($plan_detail)) {
$planObj = new ARM_Plan(0);
$planObj->init((object) $plan_detail);
} else {
$planObj = new ARM_Plan($planID);
}
$temp_detail = $arm_email_settings->arm_get_email_template($arm_email_settings->templates->new_reg_user_admin);
if ($temp_detail->arm_template_status == '1') {
$temp_detail = apply_filters('arm_get_modify_admin_mail_template_object_for_send_mail', $temp_detail,$user_id,$planID);
$subject_admin = !empty($temp_detail->arm_template_subject)? $temp_detail->arm_template_subject : '';
$message_admin = !empty($temp_detail->arm_template_content)? $temp_detail->arm_template_content : '';
$subject_admin = apply_filters('arm_admin_message_subject', $subject_admin, $user_login, $user_email, $plaintext_pass, $activation_key);
$message_admin = apply_filters('arm_change_registration_email_notification_to_admin', $message_admin, $user_login, $user_email, $plaintext_pass, $activation_key);
$admin_send_mail = $arm_global_settings->arm_send_message_to_armember_admin_users($user_email, $subject_admin, $message_admin);
}
if ($planObj->is_paid()) {
$temp_detail_user = $arm_email_settings->arm_get_email_template($arm_email_settings->templates->new_reg_user_with_payment);
} else {
$temp_detail_user = $arm_email_settings->arm_get_email_template($arm_email_settings->templates->new_reg_user_without_payment);
}
if ($temp_detail_user->arm_template_status == '1' && ($user_notification_status == '1' || $user_notification_status == ''))
{
if (function_exists('get_password_reset_key')) {
remove_all_filters('allow_password_reset');
$key = get_password_reset_key($user);
} else {
do_action('retreive_password', $user_login); /* Misspelled and deprecated */
do_action('retrieve_password', $user_login);
$allow = apply_filters('allow_password_reset', true, $user_id);
if (!$allow) {
$key = "";
} else if (is_wp_error($allow)) {
$key = "";
}
/* Generate something random for a key... */
$key = wp_generate_password(20, false);
do_action('retrieve_password_key', $user_login, $key);
/* Now insert the new md5 key into the db */
if (empty($wp_hasher)) {
require_once ABSPATH . WPINC . '/class-phpass.php';
$wp_hasher = new PasswordHash(8, true);
}
$hashed = $wp_hasher->HashPassword($key);
$key_saved = $wpdb->update($wpdb->users, array('user_activation_key' => $hashed), array('user_login' => $user_login));
if (false === $key_saved) {
$key = '';
}
}
$temp_detail_user = apply_filters('arm_get_modify_mail_template_object_for_send_mail', $temp_detail_user,$user_id);
$subject = $arm_global_settings->arm_filter_email_with_user_detail($temp_detail_user->arm_template_subject, $user_id, $planID);
$message = $arm_global_settings->arm_filter_email_with_user_detail($temp_detail_user->arm_template_content, $user_id, $planID, 0, $key);
$message = apply_filters('arm_change_registration_email_notification_to_user', $message, $user_login, $user_email, $plaintext_pass, $activation_key);
$subject = apply_filters('arm_user_message_subject', $subject, $user_login, $user_email, $plaintext_pass, $activation_key);
$attachment_arr=array();
$attachments=apply_filters('arm_standard_message_email_attachment', $attachment_arr,$user_id,$temp_detail_user,$planID);
$user_send_mail = $arm_global_settings->arm_wp_mail('', $user_email, $subject, $message, $attachments);
}
return;
}
}
if (!function_exists('armMemberAccountVerifyMail')) {
function armMemberAccountVerifyMail($user) {
global $wp, $wpdb, $arm_errors, $ARMember, $arm_global_settings, $arm_email_settings;
$user_register_verification = $arm_global_settings->arm_get_single_global_settings('user_register_verification', 'auto');
if ($user_register_verification == 'email' && !empty($user)) {
$user_id = $user->ID;
$user_email = $user->user_email;
$temp_detail_user = $arm_email_settings->arm_get_email_template($arm_email_settings->templates->account_verified_user);
if ($temp_detail_user->arm_template_status == '1') {
$temp_detail_user = apply_filters('arm_get_modify_mail_template_object_for_send_mail', $temp_detail_user,$user_id);
$subject = $arm_global_settings->arm_filter_email_with_user_detail($temp_detail_user->arm_template_subject, $user_id, 0);
$message = $arm_global_settings->arm_filter_email_with_user_detail($temp_detail_user->arm_template_content, $user_id, 0);
$user_send_mail = $arm_global_settings->arm_wp_mail('', $user_email, $subject, $message);
}
}
return;
}
}
if (!function_exists('wp_update_user_notification')) {
function wp_update_user_notification($user_id, $posted_data) {
global $wp, $wpdb, $current_user, $arm_errors, $ARMember, $arm_global_settings, $arm_email_settings;
$user = new WP_User($user_id);
if ($user->exists() && 0 !== strcasecmp($user->user_email, get_option('admin_email'))) {
$arm_get_email_option = get_option('arm_email_settings');
$arm_email_settings_array = maybe_unserialize($arm_get_email_option);
$user_email = $user->user_email;
$user_template = $arm_email_settings->arm_get_email_template($arm_email_settings->templates->profile_updated_user);
if ($user_template->arm_template_status == '1') {
$user_template = apply_filters('arm_get_modify_mail_template_object_for_send_mail', $user_template,$user_id);
$user_message = $arm_global_settings->arm_filter_email_with_user_detail($user_template->arm_template_content, $user_id, 0);
$user_subject = $arm_global_settings->arm_filter_email_with_user_detail($user_template->arm_template_subject, $user_id, 0);
$user_send_mail = $arm_global_settings->arm_wp_mail('', $user_email, $user_subject, $user_message);
}
$admin_template = $arm_email_settings->arm_get_email_template($arm_email_settings->templates->profile_updated_notification_to_admin);
if ($admin_template->arm_template_status == '1') {
$admin_template = apply_filters('arm_get_modify_admin_mail_template_object_for_send_mail', $admin_template,$user_id);
$admin_send_mail = $arm_global_settings->arm_send_message_to_armember_admin_users('', $admin_template->arm_template_subject, $admin_template->arm_template_content);
}
}
}
}
if (!function_exists('wp_password_change_notification')) {
/**
* Notify the blog admin of a user changing password, normally via email.
* @param object $user User Object
*/
function wp_password_change_notification($user) {
global $arm_global_settings, $arm_email_settings;
if (empty($user)) {
return;
}
/**
* send a copy of password change notification to the admin
* but check to see if it's the admin whose password we're changing, and skip this
*/
if (0 !== strcasecmp($user->user_email, get_option('admin_email'))) {
$message = esc_html__('Password Lost and Changed for user', 'ARMember') . ': ' . $user->user_login . "\r\n";
/**
* The blogname option is escaped with esc_html on the way into the database in sanitize_option
* we want to reverse this for the plain text arena of emails.
*/
$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
$all_email_settings = $arm_email_settings->arm_get_all_email_settings();
$admin_email = (!empty($all_email_settings['arm_email_admin_email'])) ? $all_email_settings['arm_email_admin_email'] : get_option('admin_email');
$exploded_admin_email = array();
if (strpos($admin_email, ',') !== false) {
$exploded_admin_email = explode(",", trim($admin_email));
}
if (isset($exploded_admin_email) && !empty($exploded_admin_email)) {
foreach ($exploded_admin_email as $admin_email) {
if ($admin_email != '') {
$admin_email = trim($admin_email);
$send_mail = $arm_global_settings->arm_wp_mail('', $admin_email, $blogname . ' ' . esc_html__('Password Lost/Changed', 'ARMember'), $message);
}
}
} else {
if ($admin_email) {
$send_mail = $arm_global_settings->arm_wp_mail('', $admin_email, $blogname . ' ' . esc_html__('Password Lost/Changed', 'ARMember'), $message);
}
}
}
}
}
if (!function_exists('wp_authenticate')) {
/**
* Checks a user's login information and logs them in if it checks out.
* @param string $username User's username
* @param string $password User's password
* @return WP_User|WP_Error WP_User object if login successful, otherwise WP_Error object.
*/
function wp_authenticate($username, $password) {
global $arm_global_settings, $arm_errors, $ARMember, $wpdb;
$username = sanitize_user($username);
$password = trim($password);
$arm_global_settings->common_message = $arm_global_settings->arm_get_all_common_message_settings();
$arm_all_block_settings = isset($arm_global_settings->block_settings) ? $arm_global_settings->block_settings : array();
$temporary_lockdown_duration = isset($arm_all_block_settings['temporary_lockdown_duration']) ? $arm_all_block_settings['temporary_lockdown_duration'] : '';
$permanent_lockdown_duration = isset($arm_all_block_settings['permanent_lockdown_duration']) ? $arm_all_block_settings['permanent_lockdown_duration'] : '';
$login_failed_msg = (!empty($arm_global_settings->common_message['arm_attempts_many_login_failed'])) ? $arm_global_settings->common_message['arm_attempts_many_login_failed'] : esc_html__('Your Account is locked for', 'ARMember').' [LOCKDURATION] '.esc_html__('minutes.', 'ARMember');
$permanent_locked_msg = (!empty($arm_global_settings->common_message['arm_permanent_locked_message'])) ? $arm_global_settings->common_message['arm_permanent_locked_message'] : esc_html__('Your Account is locked for', 'ARMember').' [LOCKDURATION] '.esc_html__('hours.', 'ARMember');
$login_failed_msg = str_replace("[LOCKDURATION]", $temporary_lockdown_duration, $login_failed_msg);
$permanent_locked_msg = str_replace("[LOCKDURATION]", $permanent_lockdown_duration, $permanent_locked_msg);
$invalid_login_deatil_msg = (!empty($arm_global_settings->common_message['arm_no_registered_email'])) ? $arm_global_settings->common_message['arm_no_registered_email'] : '<strong>' . esc_html__("ERROR", 'ARMember') . ': </strong>' . esc_html__('Invalid username or incorrect password.', 'ARMember');
$user_info = get_user_by('login', $username);
if ($user_info === false) {
/* Allow User to login with Email Address */
$user_info = get_user_by('email', $username);
$username = ($user_info === false) ? $username : $user_info->user_login;
}
$user_id = ($user_info === false) ? 0 : $user_info->ID;
$max_retries = isset($arm_all_block_settings['max_login_retries']) ? $arm_all_block_settings['max_login_retries'] : '';
$temp_lock_duration = isset($arm_all_block_settings['temporary_lockdown_duration']) ? $arm_all_block_settings['temporary_lockdown_duration'] : '';
$max_permenent_retries = isset($arm_all_block_settings['permanent_login_retries']) ? $arm_all_block_settings['permanent_login_retries'] : '';
$permanent_lock_duration = isset($arm_all_block_settings['permanent_lockdown_duration']) ? $arm_all_block_settings['permanent_lockdown_duration'] : '';
$ARM_fail_attempts = new ARM_fail_attempts();
if ($ARM_fail_attempts->isLockedDown($user_id)) {
if($max_permenent_retries <= $ARM_fail_attempts->countFails($username, $permanent_lock_duration * 60, $user_id, FALSE)) {
$arm_errors->add('incorrect_password', $permanent_locked_msg);
} else {
$arm_errors->add('incorrect_password', $login_failed_msg);
}
if (!isset($_POST['isAdmin'])) {//phpcs:ignore
if (function_exists('login_header')) {
login_header('', '', $arm_errors);
echo '</div>';
do_action('login_footer');
echo '</body></html>';
} else {
return $arm_errors;
}
} else {
return $arm_errors;
}
exit;
}
/**
* Filter the user to authenticate.
*
* If a non-null value is passed, the filter will effectively short-circuit authentication, returning an error instead.
* @param null|WP_User $user User to authenticate.
* @param string $username User login.
* @param string $password User password
*/
$user = apply_filters('authenticate', null, $username, $password);
if ($user == null) {
/**
* TODO what should the error message be? (Or would these even happen?)
* Only needed if all authentication handlers fail to return anything.
*/
$user = new WP_Error('authentication_failed', $invalid_login_deatil_msg);
}
$ignore_codes = array('empty_username', 'empty_password');
if (is_wp_error($user) && !in_array($user->get_error_code(), $ignore_codes)) {
$global_settings = $arm_global_settings->arm_get_all_global_settings();
$general_settings = $global_settings['general_settings'];
$arm_all_block_settings = $arm_global_settings->block_settings;
$failed_login_lockdown = $arm_all_block_settings['failed_login_lockdown'];
if ($failed_login_lockdown == 1) {
$ARM_fail_attempts->logFailAttempts($username, $user_id);
if ($max_permenent_retries <= $ARM_fail_attempts->countFails($username, $permanent_lock_duration * 60, $user_id, FALSE)) {
$ARM_fail_attempts->lockDown($username, $permanent_lock_duration * 60, $user_id);
return new WP_Error('incorrect_password', $permanent_locked_msg);
} elseif ($max_retries <= $ARM_fail_attempts->countFails($username, $temp_lock_duration, $user_id)) {
$ARM_fail_attempts->lockDown($username, $temp_lock_duration, $user_id);
return new WP_Error('incorrect_password', $login_failed_msg);
}
}
/**
* Display Error Messages For Incorrect Details.
*/
if ($user->get_error_code() == 'incorrect_password') {
$arm_all_block_settings = $arm_global_settings->block_settings;
$incorrect_password_msg = (!empty($arm_global_settings->common_message['arm_invalid_password_login'])) ? $arm_global_settings->common_message['arm_invalid_password_login'] : '<strong>' . esc_html__("ERROR", 'ARMember') . ': </strong>' . esc_html__("The password you entered is invalid.", 'ARMember');
if ($arm_all_block_settings['remained_login_attempts'] == 1 && $arm_all_block_settings['failed_login_lockdown'] == 1) {
$failed_login_lockdown = isset($arm_all_block_settings['failed_login_lockdown']) ? $arm_all_block_settings['failed_login_lockdown'] : '';
$max_retries = isset($arm_all_block_settings['max_login_retries']) ? $arm_all_block_settings['max_login_retries'] : '';
$temp_lock_duration = isset($arm_all_block_settings['temporary_lockdown_duration']) ? $arm_all_block_settings['temporary_lockdown_duration'] : '';
$total_fail_attempts = $ARM_fail_attempts->countFails($username, $temp_lock_duration, $user_id);
$max_permenent_retries = isset($arm_all_block_settings['permanent_login_retries']) ? $arm_all_block_settings['permanent_login_retries'] : '';
$permanent_lock_duration = isset($arm_all_block_settings['permanent_lockdown_duration']) ? $arm_all_block_settings['permanent_lockdown_duration'] : '';
$total_attempts = $ARM_fail_attempts->countFails($username, $permanent_lock_duration * 60, $user_id, FALSE);
if (($max_permenent_retries - $total_attempts ) < ($max_retries - $total_fail_attempts )) {
$total_remained_attempts = ($max_permenent_retries - $total_attempts );
} else {
$total_remained_attempts = $max_retries - $total_fail_attempts;
}
if (!empty($arm_global_settings->common_message['arm_attempts_login_failed'])) {
$arm_attempts_login_failed = str_replace("[ATTEMPTS]", $total_remained_attempts, $arm_global_settings->common_message['arm_attempts_login_failed']);
} else {
$arm_attempts_login_failed = esc_html__("Remaining Login Attempts :", 'ARMember') . ' ' . $total_remained_attempts;
}
$incorrect_password_msg .= "<br/>" . $arm_attempts_login_failed;
$user = new WP_Error('incorrect_password', $incorrect_password_msg);
} else {
$user = new WP_Error('incorrect_password', $incorrect_password_msg);
}
} elseif ($user->get_error_code() == 'invalid_username' || $user->get_error_code() == 'invalid_email') {
$invalid_username_msg = (!empty($arm_global_settings->common_message['arm_user_not_exist'])) ? $arm_global_settings->common_message['arm_user_not_exist'] : '<strong>' . esc_html__("ERROR", 'ARMember') . ': </strong>' . esc_html__("Invalid username or e-mail.", 'ARMember');
$arm_all_block_settings = $arm_global_settings->block_settings;
if ($arm_all_block_settings['remained_login_attempts'] == 1 && $arm_all_block_settings['failed_login_lockdown'] == 1) {
$failed_login_lockdown = $arm_all_block_settings['failed_login_lockdown'];
$max_retries = $arm_all_block_settings['max_login_retries'];
$temp_lock_duration = $arm_all_block_settings['temporary_lockdown_duration'];
$total_fail_attempts = $ARM_fail_attempts->countFails($username, $temp_lock_duration, $user_id);
$permanent_lock_duration = $arm_all_block_settings['permanent_lockdown_duration'];
$total_attempts = $ARM_fail_attempts->countFails($username, $permanent_lock_duration * 60, $user_id, FALSE);
$max_permenent_retries = $arm_all_block_settings['permanent_login_retries'];
if (($max_permenent_retries - $total_attempts ) < ($max_retries - $total_fail_attempts )) {
$total_remained_attempts = ($max_permenent_retries - $total_attempts );
} else {
$total_remained_attempts = $max_retries - $total_fail_attempts;
}
if (!empty($arm_global_settings->common_message['arm_attempts_login_failed'])) {
$arm_attempts_login_failed = str_replace("[ATTEMPTS]", $total_remained_attempts, $arm_global_settings->common_message['arm_attempts_login_failed']);
} else {
$arm_attempts_login_failed = esc_html__("Remaining Login Attempts :", 'ARMember') . ' ' . $total_remained_attempts;
}
$invalid_username_msg .= "<br/>" . $arm_attempts_login_failed;
$user = new WP_Error('incorrect_password', $invalid_username_msg);
} else {
$user = new WP_Error('incorrect_password', $invalid_username_msg);
}
}
/**
* Fires after a user login has failed.
* @param string $username User login.
*/
do_action('wp_login_failed', $username, $user);
} else {
if (!is_wp_error($user)) {
$statuses = $wpdb->get_row( $wpdb->prepare("SELECT `arm_primary_status`, `arm_secondary_status` FROM `" . $ARMember->tbl_arm_members . "` WHERE `arm_user_id`=%d ", $user->ID) ); //phpcs:ignore --Reason $ARMember->tbl_arm_members is a table name
if ($statuses != null) {
$userstatus = $statuses->arm_primary_status;
$secondary_status = $statuses->arm_secondary_status;
}
if (($userstatus == '2' && in_array($secondary_status, array(0, 1))) || $userstatus == 4) {
$invalid_username_msg = (!empty($arm_global_settings->common_message['arm_account_inactive'])) ? $arm_global_settings->common_message['arm_account_inactive'] : '<strong>' . esc_html__('Account Inactive', 'ARMember') . '</strong>: ' . esc_html__('Your account is currently not active. Please contact system administrator.', 'ARMember');
$user = new WP_Error('inactive_user', $invalid_username_msg);
} elseif ($userstatus == '3') {
$invalid_username_msg = (!empty($arm_global_settings->common_message['arm_account_pending'])) ? $arm_global_settings->common_message['arm_account_pending'] : '<strong>' . esc_html__('Account Pending', 'ARMember') . '</strong>: ' . esc_html__('Your account is currently not active. An administrator needs to activate your account before you can login.', 'ARMember');
$user = new WP_Error('pending_user', $invalid_username_msg);
} else {
/* * ******************Update Last Login Info For Successfull Login******************** */
update_user_meta($user->ID, 'arm_last_login_date', current_time( 'mysql' ));
$ip_address = $ARMember->arm_get_ip_address();
update_user_meta($user->ID, 'arm_last_login_ip', $ip_address);
}
}
}
return $user;
}
}
if (!function_exists('arm_pattern_json_encode')) {
function arm_pattern_json_encode($arm_ajax_response = array()) {
$arm_return = '';
global $arm_ajax_pattern_start,$arm_ajax_pattern_end;
if (!empty($arm_ajax_response) ) {
$arm_return = $arm_ajax_pattern_start.''.json_encode($arm_ajax_response).''.$arm_ajax_pattern_end;
}
return $arm_return;
}
}