arm_get_default_access_rules();
if (isset($wp_query) && !empty($wp_query) && $wp_query != NULL) {
if (!is_admin() && !$wp_query->is_singular() && !current_user_can('administrator')) {
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;
if (!function_exists('wp_get_current_user')) {
include(ABSPATH . "wp-includes/pluggable.php");
}
$arm_default_access_rules = $arm_access_rules->arm_get_default_access_rules();
if (isset($wp_query) && !empty($wp_query) && $wp_query != NULL) {
if (!is_admin() && !$wp_query->is_singular() && !current_user_can('administrator')) {
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_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 = (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 . " ) )";
$where .= ")";
} else {
$where .= " AND ( myarmjoin.post_id IS NULL )";
}
}
}
else if (!is_admin() && !current_user_can('administrator') && !$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(MEMBERSHIPLITE_DEBUG_LOG == true) {
if (MEMBERSHIPLITE_DEBUG_LOG_TYPE == "ARM_ALL" || MEMBERSHIPLITE_DEBUG_LOG_TYPE == "ARM_ADMIN_PANEL") {
$arm_case_types['admin_panel']['protected'] = true;
$arm_case_types['admin_panel']['message'] = __('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;
if (!function_exists('wp_get_current_user')) {
include(ABSPATH . "wp-includes/pluggable.php");
}
$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;
if (!function_exists('wp_get_current_user')) {
include(ABSPATH . "wp-includes/pluggable.php");
}
$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)) {
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 (MEMBERSHIPLITE_DEBUG_LOG == true) {
$arm_case_types['admin_panel']['protected'] = true;
$arm_case_types['admin_panel']['message'] = __($current_user->user_login . ' is inactive', 'ARMember');
$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;
$currentr_ip = $ARMember->arm_get_ip_address();
/* Redirect User if requested url is in restricted 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)) {
if (isset($_GET['arm-key']) || isset($_GET['key']) || (isset($_GET['action']) && in_array($_GET['action'], array('logout', 'rp', 'resetpass', 'lostpassword', '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;
$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 = ARMLITE_HOME_URL;
}
if (MEMBERSHIPLITE_DEBUG_LOG == true) {
if (MEMBERSHIPLITE_DEBUG_LOG_TYPE == "ARM_ALL" || MEMBERSHIPLITE_DEBUG_LOG_TYPE == "ARM_ADMIN_PANEL") {
$arm_case_types['admin_panel']['protected'] = true;
$arm_case_types['admin_panel']['message'] = __('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 = $arm_default_redirection_settings['default_access_rules'];
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'])) {
$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;
if (!function_exists('wp_get_current_user')) {
include(ABSPATH . "wp-includes/pluggable.php");
}
$current_path = wp_get_current_page_url();
if (!empty($_SERVER['QUERY_STRING'])) {
$current_path .= "?" . $_SERVER['QUERY_STRING'];
}
$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;
$post = get_post($arm_access_page_for_restrict_site);
if(isset($post->post_name))
{
$allow_page_ids[] = $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. */
}
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;
$post = get_post($arm_access_page_for_restrict_site);
if(isset($post->post_name))
{
$allow_page_ids[] = $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()) {
$extraVars = array(
'current_user_id' => get_current_user_id(),
'current_plan_id' => get_user_meta(get_current_user_id(), 'arm_user_plan_ids', true),
);
}
$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"];
return $pageURL;
}
function arm_wp_head_redirect() {
global $wp, $wpdb, $current_user, $arm_errors, $ARMember, $arm_global_settings, $arm_subscription_plans, $arm_access_rules, $arm_case_types, $arm_member_forms;
$arm_multisite_restriction = '0';
if (!function_exists('wp_get_current_user')) {
include(ABSPATH . "wp-includes/pluggable.php");
}
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 = (!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 = (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 = $arm_default_redirection_settings['default_access_rules'];
$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 = ARMLITE_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;
}
}
}
} 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($_GET['arm-key']);
$user_email = stripslashes_deep($_GET['email']);
$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($_GET['arm-key']), $redirect_permalink);
$redirect_permalink = $arm_global_settings->add_query_arg('email', urlencode($_GET['email']), $redirect_permalink);
}
$redirect_url = $redirect_permalink;
}
}
} else {
if (!is_front_page()) {
$home_page_url = ARMLITE_HOME_URL;
if ($send_key_email == 1) {
$home_page_url = $arm_global_settings->add_query_arg('arm-key', urlencode($_GET['arm-key']), $home_page_url);
$home_page_url = $arm_global_settings->add_query_arg('email', urlencode($_GET['email']), $home_page_url);
}
$redirect_url = $home_page_url;
}
}
} else {
if (!is_front_page()) {
$home_page_url = ARMLITE_HOME_URL;
if ($send_key_email == 1) {
$home_page_url = $arm_global_settings->add_query_arg('arm-key', urlencode($_GET['arm-key']), $home_page_url);
$home_page_url = $arm_global_settings->add_query_arg('email', urlencode($_GET['email']), $home_page_url);
}
$redirect_url = $home_page_url;
}
}
} 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;
}
}
}
}
$queried_object = get_queried_object();
if (!empty($queried_object->ID) && $redirect_page_id == $queried_object->ID) {
$redirect_url = ARMLITE_HOME_URL;
}
if (!function_exists('is_plugin_active')) {
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
}
/* 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(MEMBERSHIPLITE_DEBUG_LOG_TYPE, array('ARM_ALL', 'ARM_SPECIAL_PAGE'))) ? true : false;
/* wp_die(__("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 = !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 = (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(MEMBERSHIPLITE_DEBUG_LOG_TYPE, array("ARM_ALL", "ARM_PAGE"))) ? true : false;
$arm_case_types['page']['message'] = __("Page is protected", 'ARMember');
}
if ($queried_object->post_type == 'post' && $allowed == false) {
$arm_case_types['post']['protected'] = (in_array(MEMBERSHIPLITE_DEBUG_LOG_TYPE, array("ARM_ALL", "ARM_POST"))) ? true : false;
$arm_case_types['post']['message'] = __("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(MEMBERSHIPLITE_DEBUG_LOG_TYPE, array("ARM_ALL", "ARM_CUSTOM"))) ? true : false;
$arm_case_types['custom']['message'] = __('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(MEMBERSHIPLITE_DEBUG_LOG_TYPE, array("ARM_ALL", "ARM_TAXONOMY"))) ? true : false;
$arm_case_types['taxonomy']['message'] = __("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) {
if (MEMBERSHIPLITE_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);
if (!isset($_SESSION['arm_restricted_page_url'])) {
$_SESSION['arm_restricted_page_url'] = $this->curPageURL();
}
wp_redirect($redirect_url, $redirect_code);
die;
}
}/* 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;
if (!function_exists('wp_get_current_user')) {
include(ABSPATH . "wp-includes/pluggable.php");
}
$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;
if (!function_exists('wp_get_current_user')) {
include(ABSPATH . "wp-includes/pluggable.php");
}
/* 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));
// 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;
$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 t.term_id IN (" . $arm_blocked_term_ids . ")");
}
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 = !empty($user_plans) ? $user_plans : array(-2);
$suspended_plan_ids = get_user_meta($user_id, 'arm_user_suspended_plan_ids', true);
$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();
$arm_term_access_plans = $wpdb->get_results("SELECT `arm_term_id`, `meta_key`, `meta_value` FROM " . $arm_term_meta_tbl . " WHERE meta_key = 'arm_access_plan' AND arm_term_id IN (" . $arm_blocked_term_ids . ") ORDER BY arm_term_id ASC");
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', __('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 = $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)",
);
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);
$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);
$_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("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 tr.object_id IN ($object_ids) AND tt.taxonomy IN ($taxonomies) $orderby $order");
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;
if (!function_exists('wp_get_current_user')) {
include(ABSPATH . "wp-includes/pluggable.php");
}
$arm_default_access_rules = $arm_access_rules->arm_get_default_access_rules();
if (isset($query) && !empty($query) && $query != NULL) {
if (!is_admin() && !$query->is_singular() && !current_user_can('administrator')) {
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'
);
}
$query->tax_query->queries[] = $tax_query;
$query->query_vars['tax_query'] = $query->tax_query->queries;
}
}
}
if (MEMBERSHIPLITE_DEBUG_LOG == TRUE) {
if (MEMBERSHIPLITE_DEBUG_LOG_TYPE == 'ARM_ALL' || MEMBERSHIPLITE_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;
if (!function_exists('wp_get_current_user')) {
include(ABSPATH . "wp-includes/pluggable.php");
}
$arm_default_access_rules = $arm_access_rules->arm_get_default_access_rules();
if (!is_admin() && !current_user_can('administrator')) {
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 = '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="'.$args['slug'].'" AND taxonomy ="'.$arm_args_texonomy.'"';
$get_current_page_term_id = $wpdb->get_row($arm_qur_term_id, ARRAY_A);
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(MEMBERSHIPLITE_DEBUG_LOG == true) {
if (MEMBERSHIPLITE_DEBUG_LOG_TYPE == "ARM_ALL" || MEMBERSHIPLITE_DEBUG_LOG_TYPE == "ARM_ADMIN_PANEL") {
$arm_case_types['admin_panel']['protected'] = true;
$arm_case_types['admin_panel']['message'] = __('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);
} else {
if (empty($excluded_array)) {
$excluded_array = array();
$args['exclude'] = array_merge($excluded_array, $hide_terms);
} 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 (MEMBERSHIPLITE_DEBUG_LOG == true) {
if (MEMBERSHIPLITE_DEBUG_LOG_TYPE == 'ARM_ALL' || MEMBERSHIPLITE_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;
$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;
if (!function_exists('wp_get_current_user')) {
include(ABSPATH . "wp-includes/pluggable.php");
}
$items = $arm_nav_menu;
$arm_default_access_rules = $arm_access_rules->arm_get_default_access_rules();
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 = !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 = (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;
if (!function_exists('wp_get_current_user')) {
include(ABSPATH . "wp-includes/pluggable.php");
}
$arm_default_access_rules = $arm_access_rules->arm_get_default_access_rules();
if (!is_admin() && !current_user_can('administrator')) {
$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 = !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 = (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 = "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 = 'arm_access_plan' AND arm_wpm.meta_value = '0' AND arm_wp.post_status='publish' ORDER BY arm_wp.ID DESC";
$result_pages = $wpdb->get_results($sel_result_pages);
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;
}
}
}
$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;
if (!function_exists('wp_get_current_user')) {
include(ABSPATH . "wp-includes/pluggable.php");
}
$arm_default_access_rules = $arm_access_rules->arm_get_default_access_rules();
if (!is_admin() && !current_user_can('administrator')) {
$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 = !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 = (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;
}
}
}
$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;
if (!function_exists('wp_get_current_user')) {
include(ABSPATH . "wp-includes/pluggable.php");
}
if (is_user_logged_in()) {
$current_user_plan = get_user_meta($current_user->ID, 'arm_user_plan_ids', true);
$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 = (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("SELECT `user_id` FROM `" . $wpdb->usermeta . "` WHERE `meta_key`='_arm_feed_key' AND `meta_value`='$key' LIMIT 0,1");
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 "' . ARMLITE_HOME_URL . '";'));
$post->guid = site_url();
$post->post_title = __('No Feed Access', 'ARMember');
$post->post_content = __('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;
if (!function_exists('wp_get_current_user')) {
include(ABSPATH . "wp-includes/pluggable.php");
}
$global_settings = $arm_global_settings->global_settings;
$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 = $_GET['k'];
$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 = (!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') . '://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']);
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($_SERVER['PHP_SELF'], '/wp-admin/');
$expectedPosition = strlen($_SERVER['PHP_SELF']) - strlen('.php');
if ($pos_php_self === false && strrpos($_SERVER['PHP_SELF'], '.php', 0) === $expectedPosition) {
wp_redirect(home_url('/404_Not_Found'));
} else {
if (get_404_template())
require_once(get_404_template());
else
require_once(get_single_template());
}
die();
}
}
}
global $arm_restriction;
$arm_restriction = new ARM_restriction();
if (!class_exists('ARM_fail_attempts')) {
class ARM_fail_attempts {
function __construct() {
}
function logFailAttempts($username = "", $password = "", $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,
'password' => $password,
'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' => date('Y-m-d H:i:s')
);
$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();
$where = "WHERE `arm_fail_attempts_datetime` + INTERVAL $lock_duration MINUTE > '" . date('Y-m-d H:i:s') . "' AND `arm_user_id` = '$user_id' ";
$ip = $ARMember->arm_get_ip_address();
$where .= " AND `arm_fail_attempts_ip` LIKE '$ip'";
if ($is_temporary) {
$where .= " AND `arm_is_block`='0' ";
}
$numFails = $wpdb->get_var("SELECT COUNT(arm_fail_attempts_id) FROM `" . $ARMember->tbl_arm_fail_attempts . "` $where ");
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'];
}
$now = date('Y-m-d H:i:s');
$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("UPDATE `" . $ARMember->tbl_arm_fail_attempts . "` SET `arm_is_block`='1', `arm_fail_attempts_release_datetime`='$relase_lock' WHERE `arm_fail_attempts_datetime` + INTERVAL $lock_minutes MINUTE > '" . $now . "' AND `arm_fail_attempts_ip` LIKE '$ip' AND `arm_user_id`='$user_id' AND `arm_is_block`='0'");
}
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) {
$where = "WHERE `arm_release_date` > '" . date('Y-m-d H:i:s') . "' AND `arm_user_id`='$user_id'";
$where .= " AND `arm_lockdown_IP` LIKE '$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 ");
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 */
$current_url = $arm_global_settings->add_query_arg($_SERVER['QUERY_STRING'], '', $requested_url);
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();
}
}
/*
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 = '') {
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') {
/* New Member Signup Verification Mail */
armEmailVerificationMail($user);
} else {
/* New Member Signup Complete Notification */
armMemberSignUpCompleteMail($user, $plaintext_pass);
}
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') {
$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 = '') {
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') {
$subject_admin = $arm_global_settings->arm_filter_email_with_user_detail($temp_detail->arm_template_subject, $user_id, $planID);
$message_admin = $arm_global_settings->arm_filter_email_with_user_detail($temp_detail->arm_template_content, $user_id, $planID);
$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') {
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 = '';
}
}
$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);
$user_send_mail = $arm_global_settings->arm_wp_mail('', $user_email, $subject, $message);
}
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') {
$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_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_message = $arm_global_settings->arm_filter_email_with_user_detail($admin_template->arm_template_content, $user_id, 0);
$admin_subject = $arm_global_settings->arm_filter_email_with_user_detail($admin_template->arm_template_subject, $user_id, 0);
$admin_send_mail = $arm_global_settings->arm_send_message_to_armember_admin_users('', $admin_subject, $admin_message);
}
}
}
}
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 = __('Password Lost and Changed for user', 'ARMember') . ': ' . $user->user_login . "\r\n";
$message = __('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 . ' ' . __('Password Lost/Changed', 'ARMember'), $message);
}
}
} else {
if ($admin_email) {
$send_mail = $arm_global_settings->arm_wp_mail('', $admin_email, $blogname . ' ' . __('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);
$login_failed_msg = (!empty($arm_global_settings->common_message['arm_attempts_many_login_failed'])) ? $arm_global_settings->common_message['arm_attempts_many_login_failed'] : '' . __("ERROR", 'ARMember') . ': ' . __("We're sorry, but this IP range has been blocked due to too many recent failed login attempts. Please try again.", 'ARMember');
$invalid_login_deatil_msg = (!empty($arm_global_settings->common_message['arm_no_registered_email'])) ? $arm_global_settings->common_message['arm_no_registered_email'] : '' . __("ERROR", 'ARMember') . ': ' . __('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;
$ARM_fail_attempts = new ARM_fail_attempts();
if ($ARM_fail_attempts->isLockedDown($user_id)) {
$arm_errors->add('incorrect_password', $login_failed_msg);
if (!isset($_POST['isAdmin'])) {
if (function_exists('login_header')) {
login_header('', '', $arm_errors);
echo '';
do_action('login_footer');
echo '