Done !
| 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_access_rules'))
{
class ARM_access_rules
{
function __construct()
{
global $wpdb, $ARMember, $arm_slugs;
add_action('wp_ajax_arm_update_access_rules', array($this, 'arm_update_access_rules'));
//add_action('wp_ajax_arm_update_default_access_rules', array($this, 'arm_update_default_access_rules'));
/* Extend post meta query */
add_action('posts_where', array($this, 'arm_posts_where_find_in_set'), 10, 2);
/* Post Meta Box Functions */
add_action('arm_add_meta_boxes', array($this, 'arm_add_meta_boxes_access_rules'), 10, 3);
add_action('wp_insert_post', array($this, 'arm_insert_new_post_action'), 10, 3);
//add_action('save_post', array($this, 'arm_save_post_rules'), 20, 3);
add_action('created_term', array($this, 'arm_created_term_rules'), 10, 3);
add_action('arm_reactivate_plugin',array($this,'arm_install_plugin_data_reactivation'),1000);
add_filter( 'get_post_metadata', array( $this, 'get_post_meta' ), 11, 4 );
}
function get_post_meta( $value, $post_id, $meta_key, $single ){
if($meta_key == 'arm_access_plan') {
if( isset($value[0]) && is_array($value[0]) ) {
$value = !empty($value[0]) ? $value[0] : array();
} else if( isset($value[0]) && empty($value[0]) && $value[0] == '' ) {
$value = array();
}
}
return $value;
}
function arm_install_plugin_data_reactivation()
{
global $ARMember, $arm_access_rules;
$arm_access_rules->add_rule_data_after_reactivation();
$ARMember->check_new_users_after_plugin_reactivation();
}
function arm_get_default_access_rules()
{
global $wpdb, $ARMember, $arm_global_settings;
$default_access_rules = get_option('arm_default_rules');
$default_access_rules = maybe_unserialize($default_access_rules);
return $default_access_rules;
}
function arm_update_default_access_rules()
{
global $wpdb, $ARMember, $arm_global_settings, $arm_access_rules;
$posted_data = array_map( array( $ARMember, 'arm_recursive_sanitize_data'), $_POST ); //phpcs:ignore
$response = array('type' => 'error', 'msg' => esc_html__('There is an error while updating access rules, please try again.', 'ARMember'));
$arm_default_rules = array();
$arm_default_rules['arm_allow_content_listing'] = 0;
if (!empty($posted_data['arm_default_rules'])) {
$arm_default_rules = $posted_data['arm_default_rules'];
}
$defaultRulesTypes = $arm_access_rules->arm_get_access_rule_types();
$ruleTypes = array(
'page' => esc_html__('New Pages', 'ARMember'),
'post' => esc_html__('New Posts', 'ARMember'),
'category' => esc_html__('New Categories', 'ARMember'),
'nav_menu' => esc_html__('New Navigation Menus', 'ARMember'),
);
if (isset($defaultRulesTypes['post_type']) && !empty($defaultRulesTypes['post_type'])) {
foreach ($defaultRulesTypes['post_type'] as $postType => $title) {
if (!in_array($postType, $ruleTypes)) {
$ruleTypes[$postType] = esc_html__('New', 'ARMember'). ' '. $title;
}
}
}
if (isset($defaultRulesTypes['taxonomy']) && !empty($defaultRulesTypes['taxonomy'])) {
foreach ($defaultRulesTypes['taxonomy'] as $taxonomy => $title) {
if ($taxonomy != 'category') {
$ruleTypes[$taxonomy] = esc_html__('New', 'ARMember'). ' '. $title;
}
}
}
foreach ($ruleTypes as $rtype => $rtitle) {
if(isset($posted_data['arm_default_restriction_option'][$rtype]))
{
if($posted_data['arm_default_restriction_option'][$rtype]=='-2')
{
$arm_default_rules[$rtype] = array('-2');
}
else if($posted_data['arm_default_restriction_option'][$rtype]=='1')
{
if(empty($posted_data['arm_default_rules'][$rtype]))
{
$arm_default_rules_rtype = array();
}
else {
$arm_default_rules_rtype = $posted_data['arm_default_rules'][$rtype];
}
$arm_default_rules[ $rtype ] = $arm_default_rules_rtype; //phpcs:ignore
}
else if(empty($posted_data['arm_default_restriction_option'][$rtype]))
{
$arm_default_rules[$rtype] = array();
}
}
}
//$arm_default_rules = maybe_serialize($arm_default_rules);
update_option('arm_default_rules', $arm_default_rules);
$response = array('type' => 'success', 'msg' => esc_html__('Default Rules Saved Successfully.', 'ARMember'));
if (isset($posted_data['action']) && $posted_data['action'] == 'arm_update_default_access_rules') {
echo json_encode($response);
die();
}
}
/** ****************************************************************************************
* Access Rules Data
* @since 10Sep2015
*/
function arm_get_access_rule_types()
{
global $wp, $wpdb, $current_user, $arm_errors, $ARMember, $arm_global_settings, $arm_subscription_plans;
$rule_types['post_type'] = array(
'page' => esc_html__('Pages', 'ARMember'),
'post' => esc_html__('Posts', 'ARMember'),
);
/* Custom Post Types */
$custom_post_types = get_post_types(array('public' => true, '_builtin' => false, 'show_ui' => true), 'objects');
if (!empty($custom_post_types)) {
foreach ($custom_post_types as $cpt) {
$rule_types['post_type'][$cpt->name] = $cpt->label;
}
}
$rule_types['post_type'] = apply_filters('arm_modify_list_post_types_external',$rule_types['post_type']);
/* Tags */
$rule_types['tags'] = array('post_tag' => esc_html__('Tags', 'ARMember'));
/* Taxonomies */
$rule_types['taxonomy'] = array('category' => esc_html__('Category', 'ARMember'));
$taxo_args = array('show_ui' => true, 'public' => true, '_builtin' => false);
$taxonomies = get_taxonomies($taxo_args, 'object');
if (!empty($taxonomies)) {
foreach ($taxonomies as $tax) {
$rule_types['taxonomy'][$tax->name] = $tax->label;
}
}
/* Navigation Menus */
$menus = get_terms('nav_menu', array('hide_empty' => true));
if (!empty($menus)) {
foreach ($menus as $menu) {
$rule_types['nav_menu'][$menu->slug] = $menu->name;
}
}
/* Other / Custom Rules. */
$rule_types['other']['special_pages'] = esc_html__('Special Pages', 'ARMember');
/* Hook to add custom rule type options. */
$custom_rule_types = apply_filters('arm_custom_rule_types', array());
$rule_types['other'] = array_merge($rule_types['other'], $custom_rule_types);
return $rule_types;
}
function arm_get_custom_access_rules($option_name = '')
{
global $wp, $wpdb, $ARMember, $arm_global_settings, $arm_subscription_plans;
$custom_rules = get_option('arm_custom_access_rules');
$custom_rules = maybe_unserialize($custom_rules);
if (!empty($option_name)) {
$custom_rules = isset($custom_rules[$option_name]) ? $custom_rules[$option_name] : array();
}
return $custom_rules;
}
function arm_get_special_pages()
{
global $wp, $wpdb, $ARMember, $arm_global_settings, $arm_subscription_plans;
$front_type = get_option('show_on_front');
$front_url = get_home_url();
if ('page' === $front_type) {
$home_url = get_permalink(get_option('page_for_posts'));
} else {
$home_url = $front_url;
}
$arch_year = get_year_link('');
$arch_month = get_month_link('', '');
$arch_day = get_day_link('', '', '');
$arch_hour = esc_url_raw($arm_global_settings->add_query_arg('hour', '15', $arch_day));
$special_pages = array(
/* Archive pages */
'archive' => array('id' => 'archive', 'title' => esc_html__('Any Archive page', 'ARMember'), 'url' => ''),
'author' => array('id' => 'author', 'title' => esc_html__('Author Archives', 'ARMember'), 'url' => ''),
'date' => array('id' => 'date', 'title' => esc_html__('Any Date or Time Archive', 'ARMember'), 'url' => ''),
'year' => array('id' => 'year', 'title' => esc_html__('Archive: Year', 'ARMember'), 'url' => $arch_year),
'month' => array('id' => 'month', 'title' => esc_html__('Archive: Month', 'ARMember'), 'url' => $arch_month),
'day' => array('id' => 'day', 'title' => esc_html__('Archive: Day', 'ARMember'), 'url' => $arch_day),
'time' => array('id' => 'time', 'title' => esc_html__('Archive: Time', 'ARMember'), 'url' => $arch_hour),
/* Singular pages */
'home' => array('id' => 'home', 'title' => esc_html__('Blog Index', 'ARMember'), 'url' => $home_url),
'notfound' => array('id' => 'notfound', 'title' => esc_html__('404 Not Found', 'ARMember'), 'url' => ''),
'search' => array('id' => 'search', 'title' => esc_html__('Search Results', 'ARMember'), 'url' => ''),
'single' => array('id' => 'single', 'title' => esc_html__('Any single page or post', 'ARMember'), 'url' => ''),
'attachment' => array('id' => 'attachment', 'title' => esc_html__('Any attachment page', 'ARMember'), 'url' => ''),
'feed' => array('id' => 'feed', 'title' => esc_html__('Feeds', 'ARMember'), 'url' => ''),
);
$sp_setings = $this->arm_get_custom_access_rules('special_pages');
foreach ($special_pages as $key => $page) {
$sp_opts = isset($sp_setings[$key]) ? $sp_setings[$key] : array();
$special_pages[$key]['protection'] = (!empty($sp_opts['protection'])) ? $sp_opts['protection'] : '0';
$special_pages[$key]['plans'] = (!empty($sp_opts['plans'])) ? $sp_opts['plans'] : array();
}
return $special_pages;
}
function arm_prepare_rule_data($atts)
{
global $wp, $wpdb, $ARMember, $arm_slugs, $arm_global_settings, $arm_subscription_plans;
$defaults = array(
'type' => 'post_type',
'slug' => 'page',
'plan' => '',
'protection' => 'all',
);
$args = shortcode_atts($defaults, $atts);
extract($args);
$planArr = array();
if (!empty($plan) && $plan != 'all') {
$planArr = explode(',', $plan);
}
$rule_records = array();
switch ($type)
{
case 'post_type':
$post_type_obj = get_post_type_object($slug);
$arm_pages = $arm_global_settings->arm_get_single_global_settings('page_settings');
/* Remove Member Directory Page */
unset($arm_pages['member_profile_page_id']);
unset($arm_pages['thank_you_page_id']);
unset($arm_pages['cancel_payment_page_id']);
if (!empty($post_type_obj))
{
$orderby = "ORDER BY P.`post_date` DESC";
$arm_slugs = (array) $arm_slugs;
$page_placeholders = 'AND P.`ID` NOT IN (';
$page_placeholders .= rtrim( str_repeat( '%s,', count( $arm_pages ) ), ',' );
$page_placeholders .= ')';
array_unshift( $arm_pages, $page_placeholders );
$where = $wpdb->prepare("WHERE P.`post_type`=%s AND P.`post_status`=%s",$slug,'publish');
$where .= call_user_func_array(array( $wpdb, 'prepare' ), $arm_pages );
$slug_placeholders = 'AND P.`post_name` NOT IN (';
$slug_placeholders .= rtrim( str_repeat( '%s,', count( $arm_slugs ) ), ',' );
$slug_placeholders .= ')';
array_unshift( $arm_slugs, $slug_placeholders );
$where .= call_user_func_array(array( $wpdb, 'prepare' ), $arm_slugs );
$join = "";
if (!empty($planArr)) {
$findInSet = array();
foreach ($planArr as $pid) {
if ($protection == '0') {
$findInSet[] = " NOT FIND_IN_SET($pid, PM2.`meta_value`) ";
} else {
$findInSet[] = " FIND_IN_SET($pid, PM2.`meta_value`) ";
}
}
$findInSet = implode(' OR ', $findInSet);
$join .= " INNER JOIN `" . $wpdb->postmeta . "` AS PM2 ON PM2.`post_id` = P.`ID`";
$where .= $wpdb->prepare(" AND (PM2.`meta_key`=%s AND ($findInSet))",'arm_access_plan');//phpcs:ignore --Reason $findInSet is a set query
} else {
if ($protection != 'all') {
if($protection == 1)
{
$join .= " INNER JOIN `" . $wpdb->postmeta . "` AS PM1 ON PM1.`post_id` = P.`ID`";
$where .= $wpdb->prepare(" AND (PM1.`meta_key`=%s AND PM1.`meta_value`=%s)",'arm_access_plan','0');
}
}
}
$posts_sql = "SELECT P.`ID`, P.`post_parent`, P.`post_title` FROM `" . $wpdb->posts . "` AS P $join $where $orderby";
$results = $wpdb->get_results($posts_sql); //phpcs:ignore --Reason $posts_sql is a predefined Query
if (!empty($results)) {
foreach ($results as $p) {
if (is_plugin_active('bbpress/bbpress.php') && class_exists('bbPress')){
if($slug == 'reply'){
$posts_sql1 = $wpdb->get_results( $wpdb->prepare("SELECT `post_title` FROM `" . $wpdb->posts . "` WHERE `ID` = %d",$p->post_parent)); //phpcs:ignore --Reason $wpdb->posts is a table name
$post_result = $wpdb->get_row($posts_sql1); //phpcs:ignore --Reason $posts_sql1 is a query
$post_reply_title = $post_result->post_title;
$post_title = esc_html__('Reply To:','ARMember').$post_reply_title." (<i>#".$p->ID."</i>)";
}
else {
$post_title = $p->post_title;
}
}
else
{
$post_title = $p->post_title;
}
$item_plans = get_post_meta($p->ID, 'arm_access_plan');
$item_plans = (!empty($item_plans)) ? $item_plans : array();
if(count($item_plans) == 0)
$protect = 0;
else
$protect = 1;
$display = true;
if ($protection != 'all' && $protection != $protect) {
$display = false;
}
$planDiff = array_intersect($planArr, $item_plans);
if (!empty($planArr) && empty($planDiff)) {
$display = false;
if ($protection == '0') {
$display = true;
}
}
if ($display) {
$rule_records[$p->ID] = array(
'id' => $p->ID,
'title' => $post_title,
'protection' => $protect,
'plans' => $item_plans,
);
}
}
}
}
break;
case 'tags':
$taxonomy = get_taxonomy($slug);
if (!empty($taxonomy))
{
$terms_args = array(
'hide_empty' => false,
'parent' => 0,
'orderby' => 'name',
'order' => 'ASC',
'taxonomy' => $slug
);
$terms_ = get_categories($terms_args);
if( !empty($terms_) ){
foreach( $terms_ as $key => $pterm ){
$protect = get_arm_term_meta($pterm->term_id, 'arm_protection', true);
$protect = (!empty($protect)) ? $protect : 0;
$item_plans = get_arm_term_meta($pterm->term_id, 'arm_access_plan');
$item_plans = (!empty($item_plans)) ? $item_plans : array();
$display = true;
if ($protection != 'all' && $protection != $protect) {
$display = false;
}
$planDiff = array_intersect($planArr, $item_plans);
if (!empty($planArr) && empty($planDiff)) {
$display = false;
if ($protection == '0') {
$display = true;
}
}
}
}
}
case 'taxonomy':
$taxonomy = get_taxonomy($slug);
if (!empty($taxonomy))
{
$terms_args = array(
'hide_empty' => false,
'parent' => 0,
'orderby' => 'name',
'order' => 'ASC',
'taxonomy' => $slug
);
$terms_ = get_categories($terms_args);
if( !empty($terms_) ){
foreach( $terms_ as $key => $pterm ){
$protect = get_arm_term_meta($pterm->term_id, 'arm_protection', true);
$protect = (!empty($protect)) ? $protect : 0;
$item_plans = get_arm_term_meta($pterm->term_id, 'arm_access_plan');
$item_plans = (!empty($item_plans)) ? $item_plans : array();
$display = true;
if ($protection != 'all' && $protection != $protect) {
$display = false;
}
$planDiff = array_intersect($planArr, $item_plans);
if (!empty($planArr) && empty($planDiff)) {
$display = false;
if ($protection == '0') {
$display = true;
}
}
if ($display) {
$rule_records[$pterm->term_id] = array(
'id' => $pterm->term_id,
'title' => $pterm->name,
'protection' => $protect,
'plans' => $item_plans,
);
$rule_records = $this->arm_get_sub_categories($rule_records,$pterm->term_id,$planArr,$slug,$protection);
}
}
}
}
break;
case 'nav_menu':
$menu = wp_get_nav_menu_object($slug);
if (!empty($menu))
{
$menu_items = wp_get_nav_menu_items($menu->term_id);
if (!empty($menu_items)) {
foreach ($menu_items as $item) {
if ($item->menu_item_parent > 0) {
continue;
}
$item_plans = get_post_meta($item->ID, 'arm_access_plan');
$item_plans = (!empty($item_plans)) ? $item_plans : array();
if(count($item_plans) == 0)
$protect = 0;
else
$protect = 1;
$display = true;
if ($protection != 'all' && $protection != $protect) {
$display = false;
}
$planDiff = array_intersect($planArr, $item_plans);
if (!empty($planArr) && empty($planDiff)) {
$display = false;
if ($protection == '0') {
$display = true;
}
}
if ($display) {
$rule_records[$item->ID] = array(
'id' => $item->ID,
'title' => $item->title,
'protection' => $protect,
'plans' => $item_plans,
);
$rule_records = $this->arm_get_sub_nav_menu($rule_records, $item->ID, $planArr, $slug, $protection);
}
}
}
}
break;
case 'other':
if ($slug == 'special_pages')
{
$special_pages = $this->arm_get_special_pages();
if (!empty($special_pages)) {
foreach ($special_pages as $key => $sp) {
$protect = $sp['protection'];
$protect = (!empty($protect)) ? $protect : 0;
$item_plans = (!empty($sp['plans'])) ? $sp['plans'] : array();
$display = true;
if ($protection != 'all' && $protection != $protect) {
$display = false;
}
$planDiff = array_intersect($planArr, $item_plans);
if (!empty($planArr) && empty($planDiff)) {
$display = false;
if ($protection == '0') {
$display = true;
}
}
if ($display) {
$rule_records[$sp['id']] = $sp;
}
}
}
} else {
$rule_records = apply_filters('arm_prepare_custom_rule_data', $rule_records, $args);
}
break;
default:
break;
}
$rule_records = apply_filters('arm_prepare_rule_data', $rule_records, $args);
return $rule_records;
}
function arm_update_access_rules($posted_data=array())
{
global $wp, $wpdb, $current_user, $arm_errors, $ARMember, $arm_global_settings, $arm_subscription_plans, $arm_capabilities_global;
$insert_plan = array() ; $remove_plan = array(); $remove_all_plan = array(); $remove_all_plan2 = array(); $insert_protection_meta = array(); $update_protection_meta = array(); $all_taxonomies = array(); $update_main_protection_meta = array();
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_manage_access_rules'], '1',1); //phpcs:ignore --Reason:Verifying nonce
$insert_meta_string = "";
$arm_global_settings->arm_set_ini_for_access_rules();
set_time_limit(0);
$arm_posted_data = array_map( array( $ARMember, 'arm_recursive_sanitize_data'), $_POST ); //phpcs:ignore
$posted_data = (isset($_POST) && !empty($_POST)) ? $arm_posted_data : $posted_data;//phpcs:ignore
$response = array('status' => 'error', 'message' => esc_html__('Sorry, Something went wrong. Please try again.', 'ARMember'));
$rule_type = sanitize_text_field($posted_data['type']);
$type_slug = sanitize_text_field($posted_data['slug']);
$arm_rules = json_decode(stripslashes($posted_data['form_data']));
$arm_original_rules = json_decode(stripslashes($posted_data['form_data_original']));
if (!empty($arm_rules))
{
if ($rule_type == 'other')
{
$custom_rules = $this->arm_get_custom_access_rules();
if ($type_slug == 'special_pages')
{
foreach ($arm_rules as $item_id => $item_rule) {
$item_rule = (array) $item_rule;
if (empty($item_rule['protection']) || $item_rule['protection'] == '0') {
unset($item_rule['plans']);
} else {
$item_rule['plans'] = (array) $item_rule['plans'];
$item_rule['plans'] = array_keys($item_rule['plans']);
}
$custom_rules['special_pages'][$item_id] = $item_rule;
}
}
$custom_rules = apply_filters('arm_before_update_custom_access_rules', $custom_rules, $type_slug, $arm_rules);
update_option('arm_custom_access_rules', $custom_rules);
}
else
{
foreach ($arm_rules as $item_id => $item_rule) {
$item_rule = (array) $item_rule;
if($rule_type == 'taxonomy' || $rule_type == 'tags')
{
$all_taxonomies[] = $item_id;
}
if (!empty($item_rule)) {
if($item_rule['protection'] == '0')
{
if ($rule_type == 'post_type' || $rule_type == 'nav_menu')
{
$remove_all_plan[] = $item_id;
$remove_all_plan2[] = $item_id;
}
else if($rule_type == 'taxonomy' || $rule_type == 'tags')
{
$update_main_protection_meta[] = $item_id;
$remove_all_plan[] = $item_id;
$insert_plan[] = "('" . $item_id . "','arm_access_plan','0')";
}
}
else
{
if ($rule_type == 'post_type' || $rule_type == 'nav_menu')
{
$old_record = $wpdb->get_var( $wpdb->prepare("SELECT `meta_id` FROM ".$wpdb->prefix."postmeta WHERE `post_id`=%d AND `meta_key` = %s",$item_id,'arm_access_plan') ); //phpcs:ignore --Reason $wpdb->prepare postmeta is a table name
}
else if($rule_type == 'taxonomy' || $rule_type == 'tags')
{
$old_record = $wpdb->get_var( $wpdb->prepare("SELECT `meta_id` FROM ".$ARMember->tbl_arm_termmeta." WHERE `arm_term_id`=%d AND `meta_key` = %s",$item_id,'arm_protection') ); //phpcs:ignore --Reason $ARMember->tbl_arm_termmeta is a table name
}
if ($old_record != null)
{
if($rule_type == 'taxonomy' || $rule_type == 'tags')
$update_protection_meta[] = $item_id;
}
else
{
if ($rule_type == 'post_type' || $rule_type == 'nav_menu')
{
$insert_protection_meta[] = "('".$item_id."','arm_access_plan','0')";
}
}
$item_rule['plans'] = (array) $item_rule['plans'];
$item_rule['plans'] = array_keys($item_rule['plans']);
$original_plan_arr = array();
$myplans = array();
$original_plan_arr = (array) $arm_original_rules->$item_id->plans;
$original_plan_arr = array_keys($original_plan_arr);
$myplans = $item_rule['plans'];
foreach($item_rule['plans'] as $key=>$value)
{
if($value > 0 || $value == '-2')
{
if(!in_array($value,$original_plan_arr))
{
$insert_plan[] = "('" . $item_id . "','arm_access_plan','" . intval( $value ) . "')";
}
}
}
foreach($original_plan_arr as $key=>$value)
{
if($value > 0 || $value == '-2')
{
if(!in_array($value,$myplans))
{
$remove_plan[] = " $item_id AND meta_key = 'arm_access_plan' AND meta_value = " . intval( $value );
}
}
}
}
}
}
}
if ($rule_type == 'post_type' || $rule_type == 'nav_menu')
{
global $wpdb;
foreach($remove_all_plan as $key=>$value)
{
$del_query = $wpdb->query($wpdb->prepare("Delete From ".$wpdb->prefix."postmeta where post_id = %d AND meta_key = %s",$value,'arm_access_plan')); //phpcs:ignore
$del_query = $wpdb->query($wpdb->prepare("Delete From ".$wpdb->prefix."postmeta where post_id = %d AND meta_key = %s",$remove_all_plan2[$key],'arm_access_plan')); //phpcs:ignore
}
foreach($remove_plan as $key=>$value)
{
$del_query = $wpdb->query("Delete From ".$wpdb->prefix."postmeta where post_id = ".$value); //phpcs:ignore
}
foreach($insert_protection_meta as $key=>$value)
{
$ins_query = $wpdb->query("Insert into ".$wpdb->prefix."postmeta (post_id,meta_key,meta_value) VALUES ".$value);//phpcs:ignore
}
foreach($update_protection_meta as $key=>$value)
{
$ins_query = $wpdb->query($wpdb->prepare("UPDATE ".$wpdb->prefix."postmeta set meta_value = 0 WHERE meta_key = %s AND post_id = %d" ,'arm_access_plan', $value));//phpcs:ignore
}
$total_ins_query = count($insert_plan);
if($total_ins_query > 100)
{
$all_values_string = "";
$i = 1; $j=1;
foreach($insert_plan as $key=>$value)
{
if($i == 100 || $j == $total_ins_query)
$all_values_string.= " ".$value." ";
else
$all_values_string.= " ".$value." ,";
if($i == 100)
{
$ins_query = $wpdb->query("Insert into ".$wpdb->prefix."postmeta (post_id,meta_key,meta_value) VALUES ".$all_values_string);//phpcs:ignore
$i = 0;
$all_values_string = "";
}
$i ++;
$j ++;
}
if($all_values_string != "")
{
$ins_query = $wpdb->query("Insert into ".$wpdb->prefix."postmeta (post_id,meta_key,meta_value) VALUES ".$all_values_string);//phpcs:ignore
}
}
else
{
foreach($insert_plan as $key=>$value)
{
$ins_query = $wpdb->query("Insert into ".$wpdb->prefix."postmeta (post_id,meta_key,meta_value) VALUES ".$value);//phpcs:ignore
}
}
}
else if ($rule_type == 'taxonomy' || $rule_type == 'tags')
{
global $wpdb;
foreach($remove_all_plan as $key=>$value)
{
$del_query = $wpdb->query($wpdb->prepare("Delete From ".$ARMember->tbl_arm_termmeta." where arm_term_id = %d AND meta_key = %s",$value,'arm_access_plan')); //phpcs:ignore --Reason: $ARMember->tbl_arm_termmeta is a table name
}
foreach($remove_plan as $key=>$value)
{
$del_query = $wpdb->query("Delete From ".$ARMember->tbl_arm_termmeta." where arm_term_id = ".$value); //phpcs:ignore --Reason: $ARMember->tbl_arm_termmeta is a table name
}
foreach($update_main_protection_meta as $key=>$value)
{
$ins_query = $wpdb->query($wpdb->prepare("UPDATE ".$ARMember->tbl_arm_termmeta." set meta_value = 0 WHERE meta_key = %s AND arm_term_id = %d",'arm_protection',$value)); //phpcs:ignore --Reason: $ARMember->tbl_arm_termmeta is a table name
}
foreach($insert_protection_meta as $key=>$value)
{
$ins_query = $wpdb->query("Insert into ".$ARMember->tbl_arm_termmeta." (arm_term_id,meta_key,meta_value) VALUES ".$value);//phpcs:ignore --Reason: $ARMember->tbl_arm_termmeta is a table name
}
foreach($update_protection_meta as $key=>$value)
{
$ins_query = $wpdb->query($wpdb->prepare("UPDATE ".$ARMember->tbl_arm_termmeta." set meta_value = 1 WHERE meta_key = %s AND arm_term_id = %d",'arm_protection',$value)); //phpcs:ignore --Reason: $ARMember->tbl_arm_termmeta is a table name
}
$total_ins_query = count($insert_plan);
if($total_ins_query > 100)
{
$all_values_string = "";
$i = 1; $j=1;
foreach($insert_plan as $key=>$value)
{
if($i == 100 || $j == $total_ins_query)
$all_values_string.= " ".$value." ";
else
$all_values_string.= " ".$value." ,";
if($i == 100)
{
$ins_query = $wpdb->query("Insert into ".$ARMember->tbl_arm_termmeta." (arm_term_id,meta_key,meta_value) VALUES ".$all_values_string); //phpcs:ignore
$i = 0;
$all_values_string = "";
}
$i ++;
$j++;
}
if($all_values_string != "")
{
$ins_query = $wpdb->query("Insert into ".$ARMember->tbl_arm_termmeta." (arm_term_id,meta_key,meta_value) VALUES ".$all_values_string); //phpcs:ignore --Reason: $ARMember->tbl_arm_termmeta is a table name
}
}
else
{
foreach($insert_plan as $key=>$value)
{
$ins_query = $wpdb->query("Insert into ".$ARMember->tbl_arm_termmeta." (arm_term_id,meta_key,meta_value) VALUES ".$value);//phpcs:ignore --Reason: $ARMember->tbl_arm_termmeta is a table name
}
}
foreach($all_taxonomies as $key=>$value)
{
$old_record = $wpdb->get_results( $wpdb->prepare("SELECT * FROM ".$ARMember->tbl_arm_termmeta." WHERE `arm_term_id`=%d AND `meta_key` = %s",$value,'arm_access_plan') ); //phpcs:ignore --Reason: $ARMember->tbl_arm_termmeta is a table name
if( count($old_record) > 0 )
{
$meta_val = array();
if(is_array($old_record) && count($old_record) > 1)
{
foreach($old_record as $currrec)
{
$meta_val[] = $currrec->meta_value;
}
}
if(is_array($meta_val) && count($meta_val)>0 && in_array('0',$meta_val))
{
$remove_term_string_meta = $wpdb->query( $wpdb->prepare("Delete From ".$ARMember->tbl_arm_termmeta." where arm_term_id = %d AND `meta_key` = %s AND meta_value = %d",$value,'arm_access_plan',0));//phpcs:ignore --Reason: $ARMember->tbl_arm_termmeta is a table name
}
}
else
{
$insert_blank_meta = "('".$value."','arm_access_plan','0')";
$ins_query = $wpdb->query("Insert into ".$ARMember->tbl_arm_termmeta." (arm_term_id,meta_key,meta_value) VALUES ".$insert_blank_meta);//phpcs:ignore --Reason: $ARMember->tbl_arm_termmeta is a table name
}
}
}
$response = array('type' => 'success', 'msg' => esc_html__('Access Rules Updated Successfully.', 'ARMember'));
do_action( 'arm_update_access_rules_from_outside', $posted_data );
}
if (isset($posted_data['action']) && $posted_data['action'] == 'arm_update_access_rules') {
echo json_encode($response);
exit;
} else {
return $response;
}
}
function install_redirection_settings(){
global $arm_global_settings;
$all_global_settings = $arm_global_settings->arm_get_all_global_settings();
$page_settings = $all_global_settings['page_settings'];
$edit_profile_page_id = isset($page_settings['edit_profile_page_id']) ? $page_settings['edit_profile_page_id'] : 0;
$arm_redirection_settings['signup']['redirect_type'] = 'common';
$arm_redirection_settings['signup']['type'] = 'page';
$arm_redirection_settings['signup']['page_id'] = $edit_profile_page_id;
$arm_redirection_settings['signup']['url'] = ARM_HOME_URL;
$arm_redirection_settings['signup']['refferel'] = ARM_HOME_URL;
$arm_redirection_settings['signup']['redirect_type'] = 'common';
$arm_redirection_settings['signup']['conditional_redirect'][] = array('form_id' => 0,
'url' => ARM_HOME_URL);
$arm_redirection_settings['login']['main_type'] = 'fixed';
$arm_redirection_settings['login']['type'] = 'page';
$arm_redirection_settings['login']['page_id'] = $edit_profile_page_id;
$arm_redirection_settings['login']['url'] = ARM_HOME_URL;
$arm_redirection_settings['login']['refferel'] = ARM_HOME_URL;
$arm_redirection_settings['login']['conditional_redirect'][] = array('plan_id' => 0,
'condition' => '',
'expire' => 0,
'url' => ARM_HOME_URL);
$arm_redirection_settings['login']['conditional_redirect']['default'] = ARM_HOME_URL;
$globalSettings = $arm_global_settings->global_settings;
$ty_pageid = isset($globalSettings['thank_you_page_id']) ? $globalSettings['thank_you_page_id'] : 0;
$arm_redirection_settings['setup_signup']['type'] = $arm_redirection_settings['setup_change']['type'] = $arm_redirection_settings['setup_renew']['type'] = 'page';
$arm_redirection_settings['setup_signup']['page_id']= $arm_redirection_settings['setup_change']['page_id'] = $arm_redirection_settings['setup_renew']['page_id'] = $ty_pageid;
$arm_redirection_settings['setup_signup']['url'] = $arm_redirection_settings['setup_change']['url'] = $arm_redirection_settings['setup_renew']['url'] = ARM_HOME_URL;
$redirection_settings['setup']['default'] = ARM_HOME_URL;
$arm_redirection_settings['social']['type'] = 'page';
$arm_redirection_settings['social']['page_id'] = $edit_profile_page_id;
$arm_redirection_settings['social']['url'] = ARM_HOME_URL;
$arm_redirection_settings['default_access_rules']['logged_in']['type'] = 'home';
$arm_redirection_settings['default_access_rules']['blocked']['type'] = 'home';
//$arm_redirection_settings['default_access_rules']['pending']['type'] = 'home';
$arm_redirection_settings['default_access_rules']['drip']['type'] = 'home';
$arm_redirection_settings['default_access_rules']['non_logged_in']['type'] = 'home';
$arm_redirection_settings['default_access_rules']['non_logged_in']['redirect_to'] = '';
$arm_redirection_settings['default_access_rules']['logged_in']['redirect_to'] = '';
$arm_redirection_settings['default_access_rules']['blocked']['redirect_to'] = '';
//$arm_redirection_settings['default_access_rules']['pending']['redirect_to'] = '';
$arm_redirection_settings['default_access_rules']['drip']['redirect_to'] = '';
//$arm_redirection_settings = maybe_serialize($arm_redirection_settings);
update_option('arm_redirection_settings', $arm_redirection_settings);
}
/**
* Set Access Rule for `post_type`, `taxonomy` & `nav_menu`
*/
function arm_set_item_rule($rule_type = '', $type_slug = '', $item_id = 0, $protect = 1, $item_plans = array())
{
global $wpdb, $ARMember;
if (!empty($item_id) && $item_id != 0)
{
$protect = ($protect == 1) ? true : false;
switch ($rule_type)
{
case 'post_type':
case 'nav_menu':
if ($protect) {
update_post_meta($item_id, 'arm_access_plan', '0');
if( !empty($item_plans) ){
foreach( $item_plans as $key => $new_plan ){
/* Check if post meta already exists with plan */
$check_exists_post_meta = $wpdb->get_results($wpdb->prepare("SELECT COUNT(*) as total FROM `".$wpdb->prefix."postmeta` WHERE post_id = %d AND meta_key = %s AND meta_value = %d",$item_id,'arm_access_plan',$new_plan));
if( $check_exists_post_meta[0]->total > 0 ){
/* Do Nothing */
} else {
delete_post_meta($item_id,'arm_access_plan', '0' );
add_post_meta($item_id, 'arm_access_plan', $new_plan);//phpcs:ignore
}
}
}
}
return true;
break;
case 'taxonomy':
if ($protect) {
update_metadata('arm_term',$item_id,'arm_protection','1');
if( !empty($item_plans) ){
foreach( $item_plans as $key => $plan ){
/* check if texonomy meta deta is already exists */
$check_exists_term_meta = $wpdb->get_results($wpdb->prepare("SELECT COUNT(*) as total FROM `".$ARMember->tbl_arm_termmeta."` WHERE arm_term_id = %d AND meta_key = %s AND meta_value = %d",$item_id,'arm_access_plan',$plan)); //phpcs:ignore --Reason $ARMember->tbl_arm_termmeta is a table name
if( $check_exists_term_meta[0]->total > 0 ){
/* Do Nothing */
} else {
$wpdb->query( $wpdb->prepare( "DELETE FROM `".$ARMember->tbl_arm_termmeta."` WHERE arm_term_id = %d AND meta_key = %s AND meta_value = %s",$item_id,'arm_access_plan','0' ) );//phpcs:ignore --Reason $ARMember->tbl_arm_termmeta is a table name
$insert = $wpdb->query( $wpdb->prepare("INSERT INTO `".$ARMember->tbl_arm_termmeta."` (arm_term_id,meta_key,meta_value) VALUES (%d,%s,%d)",$item_id,'arm_access_plan',$plan ));//phpcs:ignore --Reason $ARMember->tbl_arm_termmeta is a table name
}
}
}
} else {
update_metadata('arm_term',$item_id,'arm_protection','0');
update_metadata('arm_term',$item_id,'arm_access_plan','0');
}
return true;
break;
case 'other':
$custom_rules = $this->arm_get_custom_access_rules();
$item_rule = array();
if ($protect) {
$item_rule['protection'] = '1';
$item_rule['plans'] = (array) $item_plans;
$custom_rules[$type_slug][$item_id] = $item_rule;
update_option('arm_custom_access_rules', $custom_rules);
} else {
$item_rule['protection'] = '0';
$item_rule['plans'] = array();
$custom_rules[$type_slug][$item_id] = $item_rule;
update_option('arm_custom_access_rules', $custom_rules);
}
return true;
break;
default :
break;
}
}
return false;
}
function arm_inherit_plan_rules($plan_id = 0, $inherit_plan_id = 0)
{
global $wp, $wpdb, $ARMember, $arm_global_settings, $arm_subscription_plans;
if (!empty($plan_id) && $plan_id != 0 && !empty($inherit_plan_id) && $inherit_plan_id != 0)
{
$rule_types = $this->arm_get_access_rule_types();
$all_rules_data = array();
if (!empty($rule_types))
{
$i = 0;
foreach ($rule_types as $rule_type => $options) {
if (!empty($options)) {
foreach ($options as $slug => $val) {
$rule_slug_data = $this->arm_prepare_rule_data(array(
'type' => $rule_type,
'slug' => $slug,
'plan' => $inherit_plan_id,
'protection' => '1',
));
if (!empty($rule_slug_data)) {
if ($rule_type == 'other') {
$custom_rules = $this->arm_get_custom_access_rules();
if ($slug == 'special_pages') {
foreach ($rule_slug_data as $item_id => $item) {
$item_rule['protection'] = $item['protection'];
$item_rule['plans'] = (array) $item['plans'];
$item_rule['plans'][] = $plan_id;
$custom_rules['special_pages'][$item_id] = $item_rule;
}
}
$custom_rules = apply_filters('arm_before_update_custom_access_rules', $custom_rules, $slug, array());
update_option('arm_custom_access_rules', $custom_rules);
} else {
foreach ($rule_slug_data as $item) {
$item_plans = (array) $item['plans'];
$item_plans[] = $plan_id;
$this->arm_set_item_rule($rule_type, $slug, $item['id'], $item['protection'], $item_plans);
$i++;
if ($i >= 1000) {
$i = 0; sleep(1);
}
}
}
$all_rules_data[$rule_type][$slug] = $rule_slug_data;
}/* End `if (!empty($rule_slug_data))` */
}/* End `foreach ($options as $slug => $val)` */
}/* End `if (!empty($options))` */
}/* End `foreach ($rule_types as $rule_type => $options)` */
}/* End `if (!empty($rule_types))` */
}
return;
}
function install_rule_data()
{
global $wp, $wpdb, $arm_errors, $ARMember, $arm_global_settings;
$arm_global_settings->arm_set_ini_for_access_rules();
/* For Taxonomies */
$taxo_args = array('show_ui' => true, 'public' => true);
$taxonomies = get_taxonomies($taxo_args, 'object');
if (!empty($taxonomies)) {
foreach ($taxonomies as $tax) {
$terms = get_terms($tax->name, array('hide_empty' => false));
if (!empty($terms)) {
foreach ($terms as $term) {
if (!get_arm_term_meta($term->term_id, 'arm_protection', true)) {
update_metadata('arm_term',$term->term_id,'arm_protection','0');
update_metadata('arm_term',$term->term_id,'arm_access_plan','0');
}
}
}
$terms = null;
}
$taxonomies = $tax = null;
}
}
/** ***************************************************************************************
*Add Posts and Tax access rules after plugin reactivation starts
*/
function add_rule_data_after_reactivation()
{
global $wpdb, $arm_global_settings,$ARMember;
$arm_global_settings->arm_set_ini_for_access_rules();
/**
* Query For Term Taxonomies. */
$allTermsMeta = $wpdb->get_results( $wpdb->prepare("SELECT `arm_term_id` FROM `{$ARMember->tbl_arm_termmeta}` WHERE `meta_key` = %s",'arm_protection'), ARRAY_A);//phpcs:ignore --Reason $ARMember->tbl_arm_termmeta is a table name
$remainigTermsWhere = "";
if (!empty($allTermsMeta)) {
$termIds = array();
foreach ($allTermsMeta as $tMeta) {
$termIds[] = $tMeta['arm_term_id'];
}
$remainigTermsWhere = 'WHERE ';
$admin_placeholders = 'term_id NOT IN (';
$admin_placeholders .= rtrim( str_repeat( '%s,', count( $termIds ) ), ',' );
$admin_placeholders .= ')';
array_unshift( $termIds, $admin_placeholders );
$remainigTermsWhere .= call_user_func_array(array( $wpdb, 'prepare' ), $termIds );
//$remainigTermsWhere = "WHERE `term_id` NOT IN ('" . implode( "','", $termIds ) . "')";
$allTermsMeta = $termIds = $tMeta = null;
}
$remainigTerms = $wpdb->get_results("SELECT * FROM `{$wpdb->term_taxonomy}` {$remainigTermsWhere}", ARRAY_A);//phpcs:ignore
if (!empty($remainigTerms)) {
foreach ($remainigTerms as $termVal) {
$taxonomyInfo = get_taxonomy($termVal['taxonomy']);
update_metadata('arm_term',$termVal['term_id'],'arm_protection','0');
update_metadata('arm_term',$termVal['term_id'],'arm_access_plan','0');
$taxonomyInfo = null;
}
}
$remainigTerms = $remainigTermsWhere = $termVal = null;
/**
* Query For Post Types. */
}
/** ***************************************************************************************
* Add Custom Metaboxes For Access Rules
*/
function arm_add_meta_boxes_access_rules($screen = '', $arm_context = 'side', $arm_priority = 'high')
{
global $wpdb, $pagenow, $ARMember, $arm_global_settings, $arm_access_rules;
if (current_user_can('administrator') || current_user_can('arm_content_access_rules_metabox')) {
if (!empty($screen)) {
$arm_context = (!empty($arm_context)) ? 'side' : '';
$arm_priority = (!empty($arm_priority)) ? 'high' : '';
add_meta_box('arm_membership_access_id', esc_html__('ARMember Access Rules', 'ARMember'), array(&$this, 'arm_rule_plan_metabox_callback'), $screen, $arm_context, $arm_priority);
}
}
return;
}
function arm_rule_plan_metabox_callback($post)
{
global $wpdb, $pagenow, $ARMember, $arm_global_settings, $arm_subscription_plans;
$checked_all = "checked='checked'";
$post_plans = array();
$post_protection = '0';
if (in_array($pagenow, array('post-new.php')) && !empty($post->post_type)) {
$default_rules = $this->arm_get_default_access_rules();
if (isset($default_rules[$post->post_type]) && !empty($default_rules[$post->post_type])) {
$post_protection = '1';
$post_plans = $default_rules[$post->post_type];
}
}
if (in_array($pagenow, array('post.php'))) {
$post_plans = get_post_meta($post->ID, 'arm_access_plan');
$post_plans = !empty($post_plans) ? $post_plans : array();
if(count($post_plans) == 0)
$post_protection = 0;
else
$post_protection = 1;
}
$metabox_content = '<div class="arm_rules_metabox_container arm_post_metabox_container '.(is_rtl() ? 'arm_rtl_wrapper' : '').'">';
$metabox_content .= '<h4 class="arm_metabox_label">' . esc_html__('Default Restriction', 'ARMember') . ':</h4>';
$metabox_content .= '<input type="hiddden" value="' . esc_attr($post_protection) . '" name="arm_rule[protection]" id="rule_protection_checkbox_hidden" style="display:none;"/>';
$metabox_content .= '<div class="armswitch armswitchbig">';
$metabox_content .= '<input type="checkbox" value="1" class="armswitch_input" id="rule_protection_checkbox" ' . checked($post_protection, '1', false) . '/>';
$metabox_content .= '<label for="rule_protection_checkbox" class="armswitch_label"></label>';
$metabox_content .= '<div class="armclear"></div>';
$metabox_content .= '</div>';
$metabox_content .= '<div>'.esc_html__('If Default Restriction is ON then ONLY below selected plan members can access this page.', 'ARMember').'</div>';
$metabox_content .= '<div class="arm_rule_plan_checkboxes">';
$all_plans = $arm_subscription_plans->arm_get_all_subscription_plans('arm_subscription_plan_id, arm_subscription_plan_name');
if (!empty($all_plans)) {
$metabox_content .= '<h4 class="arm_metabox_label">' . esc_html__('Membership Plans', 'ARMember') . ':</h4>';
$plan_id = -2;
$plan_checked = (in_array($plan_id, $post_plans)) ? 'checked="checked"' : '';
$metabox_content .= '<div class="arm_plan_switch">';
$metabox_content .= '<div class="armswitch">';
$metabox_content .= '<input type="checkbox" value="' . esc_attr($plan_id) . '" name="arm_rule[plans][]" class="armswitch_input arm_rule_plan_checkbox" id="arm_rule_plan_checkbox_' . esc_attr($plan_id) . '" ' . $plan_checked . '/>';
$metabox_content .= '<label class="armswitch_label" for="arm_rule_plan_checkbox_' . esc_attr($plan_id) . '"></label>';
$metabox_content .= '</div>';
$metabox_content .= '<label for="arm_rule_plan_checkbox_' . esc_attr($plan_id) . '" class="arm_post_switch_label">'.esc_html__('Users Having No Plan','ARMember').'</label>';
$metabox_content .= '</div>';
foreach ($all_plans as $plan) {
$plan_id = $plan['arm_subscription_plan_id'];
$plan_checked = (in_array($plan_id, $post_plans)) ? 'checked="checked"' : '';
$metabox_content .= '<div class="arm_plan_switch">';
$metabox_content .= '<div class="armswitch">';
$metabox_content .= '<input type="checkbox" value="' . esc_attr($plan_id) . '" name="arm_rule[plans][]" class="armswitch_input arm_rule_plan_checkbox" id="arm_rule_plan_checkbox_' . esc_attr($plan_id) . '" ' . $plan_checked . '/>';
$metabox_content .= '<label class="armswitch_label" for="arm_rule_plan_checkbox_' . esc_attr($plan_id) . '"></label>';
$metabox_content .= '</div>';
$metabox_content .= '<label for="arm_rule_plan_checkbox_' . esc_attr($plan_id) . '" class="arm_post_switch_label">' . stripslashes($plan['arm_subscription_plan_name']) . '</label>';
$metabox_content .= '</div>';
}
}
$metabox_content .= '</div>';
$metabox_content .= '</div>';
echo $metabox_content; //phpcs:ignore
?>
<script type="text/javascript">
jQuery(document).on('change', '#rule_protection_checkbox', function () {
if (jQuery(this).is(':checked')) {
jQuery('#rule_protection_checkbox_hidden').val('1');
} else {
jQuery('#rule_protection_checkbox_hidden').val('0');
jQuery('.arm_rule_plan_checkbox').prop('checked', false);
}
});
jQuery(document).on('click', '.arm_rule_plan_checkbox', function () {
if (jQuery(this).is(':checked')) {
if (!jQuery('#rule_protection_checkbox').is(':checked')) {
jQuery('#rule_protection_checkbox').trigger('click');
}
} else {
if (jQuery('input.arm_rule_plan_checkbox:checked').length == 0) {
if (jQuery('#rule_protection_checkbox').is(':checked')) {
//jQuery('#rule_protection_checkbox').trigger('click');
}
}
}
});
</script>
<?php
}
function arm_insert_new_post_action($post_id, $post, $update=false)
{
global $wpdb, $pagenow, $ARMember, $arm_global_settings, $arm_subscription_plans;
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if (!(current_user_can('administrator'))) {
if (wp_is_post_revision($post_id)) {
return;
}
$post_type = get_post_type($post_id);
if (!$update) {
$default_rules = $this->arm_get_default_access_rules();
if (!empty($post_type) && $post_type != 'nav_menu_item') {
if (!empty($default_rules[$post_type])) {
$access_plans = trim(implode(',', $default_rules[$post_type]), ',');
update_post_meta($post_id, 'arm_access_plan', '0');
foreach( $default_rules[$post_type] as $key => $access_plan ){
add_post_meta($post_id,'arm_access_plan',$access_plan); //phpcs:ignore
}
}
}
}
}
return;
}
function arm_save_post_rules($post_id, $post, $update=false)
{
global $wpdb, $pagenow, $ARMember, $arm_global_settings, $arm_subscription_plans;
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if (current_user_can('administrator') || current_user_can('arm_content_access_rules_metabox')) {
$default_rules = $this->arm_get_default_access_rules();
$posted_data = array_map( array( $ARMember, 'arm_recursive_sanitize_data'), $_POST ); //phpcs:ignore
$post_id = !empty($posted_data['post_ID']) ? $posted_data['post_ID'] : $post_id;
if (!$update) {
if (isset($post->post_type) && $post->post_type == 'nav_menu_item') {
if (!empty($default_rules['nav_menu'])) {
$access_plans = trim(implode(',', $default_rules['nav_menu']), ',');
delete_post_meta($post_id, 'arm_access_plan','0');
update_post_meta($post_id, 'arm_access_plan','0');
foreach( $default_rules['nav_menu'] as $key => $access_plan ){
/*add_post_meta($post_id,'arm_access_plan',$access_plan);*/
$wpdb->query( $wpdb->prepare("INSERT INTO ".$wpdb->prefix."postmeta (`post_id`, `meta_key`, `meta_value`) VALUES (%d,%s,%d)",$post_id, 'arm_access_plan', $access_plan)); //phpcs:ignore --Reason: $wpdb->prefix . "postmeta is a table name. False Positive Alarm
}
} else {
$wpdb->query( $wpdb->prepare("DELETE FROM `".$wpdb->prefix."postmeta` WHERE post_id = %d AND meta_key IN (%s,%s)",$post_id,'arm_protection','arm_access_plan') ); //phpcs:ignore
}
return;
} else {
$wpdb->query( $wpdb->prepare("DELETE FROM `".$wpdb->prefix."postmeta` WHERE post_id = %d AND meta_key IN (%s,%s)",$post_id,'arm_protection','arm_access_plan') ); //phpcs:ignore
}
}
if (!isset($posted_data['arm_rule']) && ( empty($_REQUEST['page']) || (!empty($_REQUEST['page']) && ($_REQUEST['page'] != "pmxi-admin-import")) ) && (empty($posted_data['fetch_attachments']))) {
//Special condition for WP All Import plugin.
return;
}
$protection = isset($posted_data['arm_rule']['protection']) ? $posted_data['arm_rule']['protection'] : 0;
$plans = '';
if ($protection == '1') {
$plans = !empty($posted_data['arm_rule']['plans']) ? trim(implode(',', $posted_data['arm_rule']['plans']), ',') : '';
} else {
/* Delete Post meta if no any plan assigned to post or page */
$wpdb->query( $wpdb->prepare("DELETE FROM `".$wpdb->prefix."postmeta` WHERE post_id = %d AND meta_key IN (%s,%s)",$post_id,'arm_protection','arm_access_plan') ); //phpcs:ignore
}
delete_post_meta($post_id,'arm_access_plan');
if ($protection == '1') {
/*add_post_meta($post_id, 'arm_access_plan','0');*/
$wpdb->query( $wpdb->prepare("INSERT INTO ".$wpdb->prefix."postmeta (`post_id`, `meta_key`, `meta_value`) VALUES (%d,%s,%d)",$post_id, 'arm_access_plan', 0) ); //phpcs:ignore
}
$plans = apply_filters( 'arm_modify_restriction_plans_outside', $plans, $post_id );
if((!empty($_REQUEST['page']) && ($_REQUEST['page'] == "pmxi-admin-import")) || !empty($posted_data['fetch_attachments']))
{
$default_rules_post_post_type = !empty($default_rules[$post->post_type]) ? $default_rules[$post->post_type] : array();
if(!empty($default_rules_post_post_type))
{
foreach($default_rules_post_post_type as $default_rule_key => $default_rule_val)
{
$plans .= ','.$default_rule_val;
}
}
}
if( $plans != '' ){
$all_plans = explode(',',$plans );
foreach( $all_plans as $key => $plan ){
/*add_post_meta($post_id, 'arm_access_plan',$plan);*/
$wpdb->query( $wpdb->prepare("INSERT INTO ".$wpdb->prefix."postmeta (`post_id`, `meta_key`, `meta_value`) VALUES (%d,%s,%s)",$post_id, 'arm_access_plan', $plan)); //phpcs:ignore
}
}
}
return;
}
function arm_created_term_rules($term_id, $tt_id, $taxonomy)
{
global $wpdb, $pagenow, $ARMember, $arm_global_settings, $arm_subscription_plans;
$default_rules = $this->arm_get_default_access_rules();
$taxonomy_info = get_taxonomy($taxonomy);
if (isset($default_rules[$taxonomy]) && !empty($default_rules[$taxonomy])) {
$access_plans = trim(implode(',', $default_rules[$taxonomy]), ',');
update_metadata('arm_term',$term_id,'arm_protection','1');
foreach( $default_rules[$taxonomy] as $key => $new_texonomy_plan ){
/* Check if already term meta is exists */
$check_exists_term_meta = $wpdb->get_results($wpdb->prepare("SELECT COUNT(*) as total FROM `".$ARMember->tbl_arm_termmeta."` WHERE arm_term_id = %d AND meta_key = %s AND meta_value = %d",$term_id,'arm_access_plan',$new_texonomy_plan)); //phpcs:ignore --Reason .$ARMember->tbl_arm_termmeta is a table name
if( $check_exists_term_meta[0]->total > 0 ){
/* Do Nothing */
} else {
$insert = $wpdb->query( $wpdb->prepare("INSERT INTO `".$ARMember->tbl_arm_termmeta."` (arm_term_id,meta_key,meta_value) VALUES (%d,%s,%d)",$term_id,'arm_access_plan',$new_texonomy_plan )); //phpcs:ignore --Reason .$ARMember->tbl_arm_termmeta is a table name
}
}
} else {
update_metadata('arm_term',$term_id,'arm_protection','0');
update_metadata('arm_term',$term_id,'arm_access_plan','0');
}
return;
}
/**
* Add `FIND_IN_SET` for search & compare value in post meta query.
*/
function arm_posts_where_find_in_set($where, $query)
{
global $wp, $wpdb, $current_user, $ARMember;
foreach ($query->meta_query->queries as $index => $meta_query)
{
if (isset($meta_query['compare']) && 'arm_find_in_set' == strtolower($meta_query['compare'])) {
$regex = "#\( ({$wpdb->postmeta}.meta_key = '" . preg_quote($meta_query['key']) . "') AND (CAST\({$wpdb->postmeta}.meta_value AS CHAR\)) = (\'" . preg_quote($meta_query['value']) . "') \)#";
/**
* Replace the compare '=' with compare 'find_in_set'
*/
$where = preg_replace($regex, "($1 AND FIND_IN_SET($3,$2))", $where);
}
if (isset($meta_query['compare']) && 'arm_not_find_in_set' == strtolower($meta_query['compare']))
{
$regex = "#\( ({$wpdb->postmeta}.meta_key = '" . preg_quote($meta_query['key']) . "') AND (CAST\({$wpdb->postmeta}.meta_value AS CHAR\)) = (\'" . preg_quote($meta_query['value']) . "') \)#";
/**
* Replace the compare '=' with compare 'find_in_set'
*/
$where = preg_replace($regex, "($1 AND NOT FIND_IN_SET($3,$2))", $where);
}
}
return $where;
}
function arm_get_sub_categories($rule_records,$term_id,$planArr,$slug,$protection,$lvl = 0){
$sub_cat_args = array(
'hide_empty' => false,
'orderby' => 'name',
'order' => 'ASC',
'parent' => $term_id,
'taxonomy' => $slug,
);
$lvl ++;
$space = "⚊";
$spaces = str_repeat($space,$lvl);
$sub_cat = get_categories($sub_cat_args);
if( !empty($sub_cat) ){
foreach( $sub_cat as $key => $category ){
$protect = get_arm_term_meta($category->term_id, 'arm_protection', true);
$protect = (!empty($protect)) ? $protect : 0;
$item_plans = get_arm_term_meta($category->term_id, 'arm_access_plan');
$item_plans = (!empty($item_plans)) ? $item_plans : array();
$display = true;
if ($protection != 'all' && $protection != $protect) {
$display = false;
}
$planDiff = array_intersect($planArr, $item_plans);
if (!empty($planArr) && empty($planDiff)) {
$display = false;
if ($protection == '0') {
$display = true;
}
}
if ($display) {
$rule_records[$category->term_id] = array(
'id' => $category->term_id,
'title' => $spaces.' '.$category->name,
'protection' => $protect,
'plans' => $item_plans,
);
$sub_cat_args = array(
'hide_empty' => false,
'orderby' => 'name',
'order' => 'ASC',
'parent' => $term_id,
'taxonomy' => $slug,
);
$sub_cat = get_categories($sub_cat_args);
if( !empty($sub_cat) ){
$rule_records = $this->arm_get_sub_categories($rule_records,$category->term_id,$planArr,$slug,$protection,$lvl);
}
}
}
}
return $rule_records;
}
function arm_get_sub_nav_menu($rule_records, $term_id, $planArr, $slug, $protection, $lvl = 0) {
global $arm_modal_view_in_menu;
$menu = wp_get_nav_menu_object($slug);
$menu_items = wp_get_nav_menu_items($menu->term_id);
$children = $arm_modal_view_in_menu->get_nav_menu_item_children($term_id, $menu_items, false);
if (count($children) > 0) {
$lvl ++;
$space = "⚊";
$spaces = str_repeat($space, $lvl);
foreach ($children as $key => $item) {
$protect = 0;
$item_plans = get_post_meta($item->ID, 'arm_access_plan');
$item_plans = (!empty($item_plans)) ? $item_plans : array();
if(count($item_plans) == 0)
$protect = 0;
else
$protect = 1;
$display = true;
if ($protection != 'all' && $protection != $protect) {
$display = false;
}
$planDiff = array_intersect($planArr, $item_plans);
if (!empty($planArr) && empty($planDiff)) {
$display = false;
if ($protection == '0') {
$display = true;
}
}
if ($display) {
$rule_records[$item->ID] = array(
'id' => $item->ID,
'title' => $spaces . ' ' .$item->title,
'protection' => $protect,
'plans' => $item_plans,
);
$children_deep = $arm_modal_view_in_menu->get_nav_menu_item_children($item->ID, $menu_items, false);
if (count($children_deep) > 0) {
$rule_records = $this->arm_get_sub_nav_menu($rule_records, $item->ID, $planArr, $slug, $protection, $lvl);
}
}
}
}
return $rule_records;
}
}
}
global $arm_access_rules;
$arm_access_rules = new ARM_access_rules();