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_members')) {
class ARM_members {
function __construct() {
global $wpdb, $ARMember, $arm_slugs, $arm_pay_per_post_feature;
add_action('wp_ajax_arm_member_ajax_action', array($this, 'arm_member_ajax_action'));
add_action('wp_ajax_arm_member_bulk_action', array($this, 'arm_member_bulk_action'));
add_action('wp_ajax_arm_members_hide_column', array($this, 'arm_members_hide_column'));
add_action('wp_ajax_arm_filter_members_list', array($this, 'arm_filter_members_list'));
add_action('wp_ajax_arm_change_user_status', array($this, 'arm_change_user_status'), 10, 1);
add_action('wp_ajax_arm_get_user_all_pan_details_for_grid', array($this, 'arm_get_user_all_plan_details_for_grid'));
add_action('wp_ajax_arm_get_user_all_plan_details', array($this, 'arm_get_user_all_plan_details'));
add_action('wp_ajax_arm_manage_plan_get_cycle', array($this, 'arm_manage_plan_get_cycle'));
add_action('wp_ajax_get_user_plan_failed_payment_details', array($this, 'arm_get_user_plan_failed_payment_details'));
add_action('wp_ajax_arm_resend_verification_email', array($this, 'arm_resend_verification_email_func'));
add_action('arm_handle_import_export', array($this, 'arm_handle_import_export'));
add_action('wp_ajax_arm_handle_import_user', array($this, 'arm_handle_import_user'));
add_action('wp_ajax_arm_handle_import_user_meta', array($this, 'arm_handle_import_user_meta'));
add_action('wp_ajax_arm_add_import_user', array($this, 'arm_add_import_user'));
add_action('wp_ajax_arm_download_sample_csv', array($this, 'arm_download_sample_csv'));
/* Member Iterations */
//add_action('user_register', array($this, 'arm_user_register_hook_func'));
//add_action('profile_update', array($this, 'arm_profile_update_hook_func'), 20, 2);
//add_action('delete_user', array($this, 'arm_before_delete_user_action'), 10, 2);
//add_action('deleted_user', array($this, 'arm_after_deleted_user_action'), 10, 2);
/* Filter User Columns For Search */
add_filter('user_search_columns', array($this, 'arm_user_search_columns'), 10, 3);
/* Action for progressbar data for import user from csv or xml file */
add_action('wp_ajax_arm_import_member_progress', array($this, 'arm_import_member_progress'));
add_action('wp_ajax_arm_get_member_details', array($this, 'arm_get_member_grid_data'));
/* Action for multisite, when user assign to site from admin menu */
add_action('add_user_to_blog', array($this, 'arm_assign_user_to_blog'), 10, 3);
//add_action('wp_ajax_arm_login_history_pagination', array($this, 'arm_login_history_pagination'));
add_action('wp_ajax_arm_user_login_history_paging_action', array($this, 'arm_user_login_history_paging_action'));
add_action('wp_ajax_arm_all_user_login_history_paging_action', array($this, 'arm_all_user_login_history_paging_action'));
add_action('wp_ajax_arm_login_history_search_action', array($this, 'arm_all_user_login_history_paging_action'));
/* Action for adding user to ARMember with plan */
add_action('arm_add_user_to_armember', array($this, 'arm_add_user_to_armember_func'), 10, 3);
//add_action('user_register', array($this, 'arm_add_capabilities_to_new_user'));
//add_action('set_user_role', array($this,'arm_add_capabilities_to_change_user_role'), 10, 3);
add_action('wp_ajax_arm_failed_attempt_login_history_paging_action', array($this, 'arm_failed_attempt_login_history_paging_action'));
add_action('wp_ajax_arm_user_plan_action', array($this, 'arm_user_plan_action'));
add_action('wp_ajax_get_arm_member_list', array($this, 'get_arm_member_list_func'));
add_action('wp_ajax_arm_member_view_detail', array($this, 'arm_member_view_detail_func'));
add_filter('arm_members_view_profile_data',array($this,'arm_members_view_profile_func'),10,2);
add_action('wp_ajax_arm_member_view_paid_plan_detail', array($this, 'arm_member_view_paid_plan_detail'));
add_filter('arm_gateway_cancel_subscription_data', array($this, 'arm_gateway_cancel_subscription_data'), 10, 7);
add_action('arm_cancel_subscription_payment_log_entry', array($this, 'arm_cancel_subscription_payment_log'), 10, 7);
add_action('wp_ajax_arm_save_debug_logs', array($this, 'arm_save_debug_logs_settings'));
add_action('wp_ajax_arm_clear_debug_logs_data', array($this, 'arm_clear_debug_logs_data'));
add_action('arm_after_add_new_user', array($this, 'arm_update_entries_data_after_user_add'), 10, 2);
add_filter('arm_members_grid_columns',array($this,'arm_members_grid_columns_func'));
add_filter('arm_pro_get_grid_exlcuded_colvis',array($this,'arm_pro_get_grid_exlcuded_colvis_func'),10,2);
add_filter('arm_pro_get_grid_arm_colvis',array($this,'arm_pro_get_grid_arm_colvis_func'),10,2);
add_filter('arm_pro_get_grid_sortable_columns',array($this,'arm_pro_get_grid_sortable_columns_func'),10,2);
add_filter('arm_pro_get_default_grid_sort_columns',array($this,'arm_pro_get_default_grid_sort_columns_func'),10,1);
add_filter('arm_pro_bulk_actions_filter_data',array($this,'arm_pro_bulk_actions_filter_data_func'),10,1);
add_filter('arm_pro_actions_filter_data',array($this,'arm_pro_actions_filter_data_func'));
add_filter('grid_column_paid_with_arm_pro',array($this,'grid_column_paid_with_func'));
add_filter('arm_member_grid_meta_fields_filter',array($this,'arm_member_grid_meta_fields_filter_func'),10,2);
add_filter('arm_member_grid_membership_plans_fields_filter',array($this,'arm_member_grid_membership_plans_fields_filter_func'),10,3);
add_filter('arm_admin_right_box_panel_section',array($this,'arm_admin_right_box_panel_section_func'),10,2);
add_filter('arm_admin_right_box_panel_btn_section',array($this,'arm_admin_right_box_panel_btn_section_func'),10,2);
add_filter('arm_admin_view_member_get_social_profile_data',array($this,'arm_admin_view_member_get_social_profile_data_func'),10,2);
add_filter('arm_view_members_memberships_details',array($this,'arm_view_members_memberships_details_func'),10,3);
add_filter('arm_get_member_forms_filter',array($this,'arm_get_member_forms_filter_func'));
add_filter('arm_pro_modify_plan_ids_externally',array($this,'arm_pro_modify_plan_ids_externally_func'),10,2);
add_filter('arm_pro_modify_future_plan_ids_externally',array($this,'arm_pro_modify_future_plan_ids_externally_func'),10,2);
add_filter('arm_manage_members_plan_list_filters',array($this,'arm_manage_members_plan_list_filters_func'),10,4);
add_filter('arm_pro_paid_conditional',array($this,'arm_pro_paid_conditional_func'),10,2);
add_filter('arm_pro_paid_finite_plan_renewal_section',array($this,'arm_pro_paid_finite_plan_renewal_section_func'),10,2);
add_filter('arm_multiple_membership_plan_renewal',array($this,'arm_multiple_membership_plan_renewal_func'),10,4);
add_filter('arm_add_edit_member_additional_data',array($this,'arm_add_edit_member_additional_data_func'),10,4);
add_filter('arm_paid_post_plan_lists',array($this,'arm_paid_post_plan_lists_func'),10,2);
add_action('wp_ajax_arm_member_edit_detail',array($this,'arm_member_edit_detail_func'));
add_filter('arm_member_edit_plan_details',array($this,'arm_member_edit_plan_details_func'),10,4);
}
function arm_member_edit_plan_details_func($response_plans_data,$user_id,$planIDs,$futurePlanIDs)
{
global $arm_global_settings,$arm_subscription_plans,$arm_pay_per_post_feature,$is_multiple_membership_feature;
if (!empty($planIDs) || !empty($futurePlanIDs)) {
$arm_common_date_format = $arm_global_settings->arm_check_common_date_format(get_option('date_format'));
$response_plans_data .= '<tr class="arm_member_subs_plans"><td colspan="2" class="arm_padding_left_32 arm_padding_right_32">
<div class="arm_add_member_plans_div">
<table class="arm_user_plan_table">
<tr class="odd">
<th class="arm_user_plan_text_th arm_user_plan_no">'. esc_html__('No', 'ARMember').'</th>
<th class="arm_user_plan_text_th arm_user_plan_name">'. esc_html__('Membership Plan', 'ARMember') .'</th>
<th class="arm_user_plan_text_th arm_user_plan_type">'. esc_html__('Plan Type', 'ARMember').'</th>
<th class="arm_user_plan_text_th arm_user_plan_start">'. esc_html__('Starts On', 'ARMember').'</th>
<th class="arm_user_plan_text_th arm_user_plan_end">'. esc_html__('Expires On', 'ARMember').'</th>
<th class="arm_user_plan_text_th arm_user_plan_cycle_date">'. esc_html__('Cycle Date', 'ARMember').'</th>
<th class="arm_user_plan_text_th arm_user_plan_action">'. esc_html__('Action', 'ARMember').'</th>
</tr>';
$date_format = $arm_global_settings->arm_get_wp_date_format();
$defaultPlanData = $arm_subscription_plans->arm_default_plan_array();
$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();
$count_plans = 0;
if (!empty($planIDs)) {
foreach ($planIDs as $pID) {
if (!empty($pID)) {
$planData = get_user_meta($user_id, 'arm_user_plan_' . $pID, true);
$planData = !empty($planData) ? $planData : array();
$arm_paid_condition = "";
if($arm_pay_per_post_feature->isPayPerPostFeature)
{
$arm_paid_condition = (!empty($planData) && !empty($planData['arm_current_plan_detail']) && empty($planData['arm_current_plan_detail']['arm_subscription_plan_post_id']) );
}
else
{
$arm_paid_condition = !empty($planData);
}
if ($arm_paid_condition) {
$planDetail = $planData['arm_current_plan_detail'];
if (!empty($planDetail)) {
$planObj = new ARM_Plan(0);
$planObj->init((object) $planDetail);
} else {
$planObj = new ARM_Plan($pID);
}
$no = $count_plans;
$odd_even_last_class ='';
$planName = $planObj->name;
$grace_message = '';
$starts_date = !empty($planData['arm_start_plan']) ? $planData['arm_start_plan'] : '';
$started_date = !empty($planData['arm_started_plan_date']) ? $planData['arm_started_plan_date'] : '';
$starts_on = !empty($starts_date) ? date_i18n($date_format, $starts_date) : '-';
if($started_date != '' && $started_date <= $starts_date) {
$starts_on = date_i18n($date_format, $started_date);
}
$expires_on = !empty($planData['arm_expire_plan']) ? '<span id="arm_user_expiry_date_' . $pID . '" style="display: inline;"> ' . date_i18n($date_format, $planData['arm_expire_plan']) . ' <img src="' . MEMBERSHIPLITE_IMAGES_URL . '/grid_edit_hover_trns.png" width="26" style="position: absolute; margin: -4px 0 0 5px; cursor: pointer;" title="' . esc_attr__('Change Expiry Date', 'ARMember') . '" data-plan_id="' . $pID . '" class="arm_edit_user_expiry_date"></span><span class="arm_width_155 arm_position_relative" id="arm_user_expiry_date_box_' . $pID . '" style="display: none;"><input type="text" value="' . date($arm_common_date_format, $planData['arm_expire_plan']) . '" data-date_format="'.$arm_common_date_format.'" name="arm_subscription_expiry_date_' . $pID . '" class="arm_member_form_input arm_user_plan_expiry_date_picker arm_width_120 arm_min_width_120" /><img src="' . MEMBERSHIPLITE_IMAGES_URL . '/cancel_date_icon.png" width="11" height="11" title="' . esc_attr__('Cancel', 'ARMember') . '" data-plan_id="' . $pID . '" data-plan-expire-date="' . date('m/d/Y', $planData['arm_expire_plan']) . '" class="arm_cancel_edit_user_expiry_date"></span>' : esc_attr__('Never Expires', 'ARMember');
$renewal_on = !empty($planData['arm_next_due_payment']) ? date_i18n($date_format, $planData['arm_next_due_payment']) : '-';
$trial_starts = !empty($planData['arm_trial_start']) ? $planData['arm_trial_start'] : '';
$trial_ends = !empty($planData['arm_trial_end']) ? $planData['arm_trial_end'] : '';
$arm_payment_mode = ( $planData['arm_payment_mode'] == 'auto_debit_subscription') ? '<br/>(' . esc_html__('Auto Debit','ARMember') . ')' : '';
$arm_payment_cycle = !empty($planData['arm_payment_cycle']) ? $planData['arm_payment_cycle'] : '';
if ($planObj->is_recurring()) {
$recurring_plan_options = $planObj->prepare_recurring_data($arm_payment_cycle);
$recurring_time = $recurring_plan_options['rec_time'];
$completed = $planData['arm_completed_recurring'];
if ($recurring_time == 'infinite' || empty($planData['arm_expire_plan'])) {
$remaining_occurence = esc_html__('Never Expires', 'ARMember');
} else {
$remaining_occurence = $recurring_time - $completed;
}
if (!empty($planData['arm_expire_plan'])) {
if ($remaining_occurence == 0) {
$renewal_on = esc_html__('No cycles due', 'ARMember');
} else {
$renewal_on .= "<br/>( " . $remaining_occurence . esc_html__(' cycles due', 'ARMember') . " )";
}
}
}
$arm_is_user_in_grace = $planData['arm_is_user_in_grace'];
$arm_grace_period_end = $planData['arm_grace_period_end'];
if ($arm_is_user_in_grace == "1" || $arm_is_user_in_grace == 1) {
$arm_grace_period_end = date_i18n($date_format, $arm_grace_period_end);
$grace_message .= "<br/>( " . esc_html__('grace period expires on', 'ARMember') ." ". $arm_grace_period_end . " )";
}
$arm_plan_is_suspended = '';
if (!empty($suspended_plan_ids)) {
if (in_array($pID, $suspended_plan_ids)) {
$arm_plan_is_suspended = '<div class="arm_user_plan_status_div arm_position_relative" ><span class="armhelptip tipso_style arm_color_red" id="arm_user_suspend_plan_' . $pID . '" style=" cursor:pointer;" onclick="arm_show_failed_payment_history(' . $user_id . ',' . $pID . ',\'' . $planName . '\',\'' . $planData['arm_start_plan'] . '\')" title="' . esc_attr__('Click here to Show failed payment history', 'ARMember') . '">(' . esc_attr__('Suspended', 'ARMember') . ')</span><img src="' . MEMBERSHIPLITE_IMAGES_URL . '/grid_edit_hover_trns.png" width="26" style="position: absolute; margin: -4px 0 0 5px; cursor: pointer;" title="' . esc_attr__('Activate Plan', 'ARMember') . '" data-plan_id="' . $pID . '" onclick="showConfirmBoxCallback(\'change_user_plan_' . $pID . '\');" class="arm_change_user_plan_img_' . $pID . '">
<div class="arm_confirm_box arm_member_edit_confirm_box" id="arm_confirm_box_change_user_plan_' . $pID . '" style="top:25px; left: 0; ">
<div class="arm_confirm_box_body">
<div class="arm_confirm_box_arrow arm_float_right" ></div>
<div class="arm_confirm_box_text_title">'.esc_html__( 'Activate Plan', 'ARMember' ).'</div>
<div class="arm_confirm_box_text arm_padding_top_15" ">' .
esc_html__('Are you sure you want to active this plan?', 'ARMember') . '
</div>
<div class="arm_confirm_box_btn_container arm_display_flex">
<button type="button" class="arm_confirm_box_btn armcancel" onclick="hideConfirmBoxCallback();">' . esc_html__('Cancel', 'ARMember') . '</button>
<button type="button" class="arm_confirm_box_btn armemailaddbtn arm_margin_left_12" id="arm_change_user_plan_status" data-index="' . $pID . '" >' . esc_html__('Ok', 'ARMember') . '</button>
</div>
</div>
</div>
</div>';
}
}
$trial_active = '';
if (!empty($trial_starts)) {
if ($planData['arm_is_trial_plan'] == 1 || $planData['arm_is_trial_plan'] == '1') {
if ($trial_starts < $planData['arm_start_plan']) {
$trial_active = "<div class='arm_user_plan_status_div'><span class='arm_current_membership_trial_active'>(" . esc_html__('trial active', 'ARMember') . ")</span></div>";
}
}
}
$odd_even_class = ($count_plans % 2 == 0) ? 'even' : 'odd';
$get_last_plan_id_key = array_key_last($planIDs);
if($pID == $planIDs[$get_last_plan_id_key])
{
$odd_even_last_class = 'arm_no_border';
}
$response_plans_data .= '<tr class="arm_user_plan_table_tr '. $odd_even_class .' '.$odd_even_last_class.'" id="arm_user_plan_div_'. esc_attr($count_plans).'">
<td class="arm_user_plan_no" data-label="'.esc_html__('No', 'ARMember').'">'. esc_html($count_plans + 1).'</td>';
$plan_access = $planData['arm_current_plan_detail']['arm_subscription_plan_type'];
if($plan_access == 'paid_finite')
{
$expires_on = $expires_on . $grace_message;
}
if($plan_access == 'recurring')
{
$renewal_on = $renewal_on . $grace_message;
}
$response_plans_data .= '<td class="arm_user_plan_name" data-label="'.esc_html__('Membership Plan', 'ARMember').'">'. $planName . $arm_plan_is_suspended .'</td>
<td class="arm_user_plan_type" data-label="'.esc_html__('Plan Type', 'ARMember').'">'. $planObj->new_user_plan_text(false, $arm_payment_cycle).'</td>
<td class="arm_user_plan_start" data-label="'.esc_html__('Starts On', 'ARMember').'">'. $starts_on . $trial_active .'</td>
<td class="arm_user_plan_end" data-label="'.esc_html__('Expires On', 'ARMember').'">'. $expires_on .'</td>
<td class="arm_user_plan_cycle_date" data-label="'.esc_html__('Cycle Date', 'ARMember').'">'. $renewal_on . $arm_payment_mode .'</td>
<td class="arm_user_plan_action" data-label="'.esc_html__('Action', 'ARMember').'">';
if ($planObj->is_recurring() && $planData['arm_payment_mode'] == 'manual_subscription' && !in_array($pID, $futurePlanIDs)) {
$recurringData = $planObj->prepare_recurring_data($arm_payment_cycle);
$total_recurrence = $recurringData['rec_time'];
$completed_rec = $planData['arm_completed_recurring'];
$response_plans_data .= '<div class="arm_position_relative arm_float_left">';
if (!in_array($pID, $suspended_plan_ids) && $total_recurrence != $completed_rec) {
$response_plans_data .= '<a href="javascript:void(0)" id="arm_extend_cycle_days" class="arm_user_extend_renewal_date_action_btn" onclick="showConfirmBoxCallback(\'extend_renewal_date_'. esc_attr($pID) .'\');">'. esc_html__('Extend Days', 'ARMember') .'</a>
<div class="arm_confirm_box arm_member_edit_confirm_box arm_confirm_box_extend_renewal_date" id="arm_confirm_box_extend_renewal_date_'. esc_attr($pID) .'">
<div class="arm_confirm_box_body">
<div class="arm_confirm_box_arrow"></div>
<div class="arm_confirm_box_text_title">'.esc_html__( 'Extend days', 'ARMember' ).'</div>
<div class="arm_confirm_box_text arm_padding_top_0">
<span class="arm_font_size_15 arm_margin_bottom_5"> '. esc_html__('Select how many days you want to extend in current cycle?', 'ARMember') .'</span><div class="arm_margin_top_10">
<input type="hidden" id="arm_user_grace_plus_'. esc_attr($pID).'" name="arm_user_grace_plus_'. esc_attr($pID) .'" value="0" class="arm-selectpicker-input-control arm_user_grace_plus"/>
<dl class="arm_selectbox column_level_dd arm_member_form_dropdown arm_width_83">
<dt><span>0</span><input type="text" style="display:none;" value="" class="arm_autocomplete"/><i class="armfa armfa-angle-down armfa-lg"></i></dt>
<dd>
<ul data-id="arm_user_grace_plus_'. esc_attr($pID).'">';
for ($i = 0; $i <= 30; $i++) {
$response_plans_data .= '<li data-label="'. esc_attr($i) .'" data-value="'. esc_attr($i) .'">'. esc_html($i).'</li>';
}
$response_plans_data .= '</ul>
</dd>
</dl> '. esc_html__('Days', 'ARMember') .'</div>
</div>
<div class="arm_confirm_box_btn_container arm_display_flex">
<button type="button" class="arm_confirm_box_btn armcancel arm_user_extend_renewal_date_cancel_btn" onclick="hideUserExtendRenewalDateBoxCallback('. esc_attr($pID) .');">'. esc_html__('Cancel', 'ARMember') .'</button>
<button type="button" class="arm_confirm_box_btn armemailaddbtn arm_margin_left_12" onclick="hideConfirmBoxCallback();">'. esc_html__('Ok', 'ARMember').'</button>
</div>
</div>
</div>';
}
if ($total_recurrence != $completed_rec) {
$response_plans_data .= '<a href="javascript:void(0)" class="arm_user_renew_next_cycle_action_btn" id="arm_skip_next_cycle" onclick="showConfirmBoxCallback(\'renew_next_cycle_'. esc_attr($pID) .'\');">'. esc_html__('Renew Cycle', 'ARMember') .'</a>
<div class="arm_confirm_box arm_member_edit_confirm_box arm_confirm_box_renew_next_cycle" id="arm_confirm_box_renew_next_cycle_'. esc_attr($pID) .'" style="top:25px; right:45px; ">
<div class="arm_confirm_box_body">
<div class="arm_confirm_box_arrow arm_float_right" ></div>
<div class="arm_confirm_box_text_title">'.esc_html__( 'Renew plan', 'ARMember' ).'</div>
<div class="arm_confirm_box_text arm_padding_top_0" >
<input type="hidden" id="arm_skip_next_renewal_'. esc_attr($pID).'" name="arm_skip_next_renewal_'. esc_attr($pID) .'" value="0" class="arm_skip_next_renewal"/>
'. esc_html__('Are you sure you want to renew next cycle?', 'ARMember').'
</div>
<div class="arm_confirm_box_btn_container arm_display_flex">
<button type="button" class="arm_confirm_box_btn armcancel arm_user_renew_next_cycle_cancel_btn" onclick="hideUserRenewNextCycleBoxCallback('. esc_attr($pID) .');">'. esc_html__('Cancel', 'ARMember') .'</button>
<button type="button" class="arm_confirm_box_btn armemailaddbtn arm_margin_left_12" onclick="RenewNextCycleOkCallback('. esc_attr($pID) .')" >'. esc_html__('Ok', 'ARMember').'</button>
</div>
</div>
</div>';
}
$response_plans_data .= '<div class="arm_position_relative arm_float_left">
<a class="arm_remove_user_plan_div armhelptip tipso_style" href="javascript:void(0)" title="'. esc_html__('Remove Plan', 'ARMember').'" onclick="showConfirmBoxCallback(\'delete_user_plan_'. esc_attr($pID).'\');"></a>
<div class="arm_confirm_box arm_member_edit_confirm_box" id="arm_confirm_box_delete_user_plan_'. esc_attr($pID).'" style="top:25px; right: -20px; ">
<div class="arm_confirm_box_body">
<div class="arm_confirm_box_arrow arm_float_right"></div>
<div class="arm_confirm_box_text_title">'.esc_html__( 'Remove Plan', 'ARMember' ).'</div>
<div class="arm_confirm_box_text arm_padding_top_0" >
'. esc_html__('Are you sure you want to remove this plan?', 'ARMember').'
</div>
<div class="arm_confirm_box_btn_container arm_display_flex">
<button type="button" class="arm_confirm_box_btn armcancel" onclick="hideConfirmBoxCallback();">'. esc_html__('Cancel', 'ARMember').'</button>
<button type="button" class="arm_confirm_box_btn armemailaddbtn arm_remove_user_plan_div_box arm_margin_left_12" data-index="'. esc_attr($count_plans) .'" >'. esc_html__('Ok', 'ARMember') .'</button>
</div>
</div>
</div></div>';
}
else if(isset($planData['arm_current_plan_detail']['arm_subscription_plan_type']) && $planData['arm_current_plan_detail']['arm_subscription_plan_type']=='paid_finite')
{
$response_plans_data .= '<div class="arm_position_relative arm_float_left">
<a href="javascript:void(0)" class="arm_user_renew_next_cycle_action_btn" id="arm_skip_next_cycle" onclick="showConfirmBoxCallback(\'renew_next_cycle_'. esc_attr($pID) .'\');">'. esc_html__('Renew', 'ARMember').'</a>
<div class="arm_confirm_box arm_member_edit_confirm_box arm_confirm_box_renew_next_cycle" id="arm_confirm_box_renew_next_cycle_'. esc_attr($pID).'" style="top:25px; right:45px; ">
<div class="arm_confirm_box_body">
<div class="arm_confirm_box_arrow" style="float: right"></div>
<div class="arm_confirm_box_text_title" >
'. esc_html__('Renew Plan', 'ARMember').'
</div>
<div class="arm_confirm_box_text arm_padding_top_0">
<input type="hidden" id="arm_skip_next_renewal_'. esc_attr($pID) .'" name="arm_skip_next_renewal_'. esc_attr($pID).'" value="0" class="arm_skip_next_renewal"/>
'. esc_html__('Are you sure you want to renew plan?', 'ARMember') .'
</div>
<div class="arm_confirm_box_btn_container arm_display_flex">
<button type="button" class="arm_confirm_box_btn armcancel arm_user_renew_next_cycle_cancel_btn" onclick="hideUserRenewNextCycleBoxCallback('. esc_attr($pID).');">'.esc_html__('Cancel', 'ARMember').'</button>
<button type="button" class="arm_confirm_box_btn armemailaddbtn arm_margin_left_12" onclick="RenewNextCycleOkCallback('. esc_attr($pID) .')" >'. esc_html__('Ok', 'ARMember') .'</button>
</div>
</div>
</div>';
}
if (in_array($pID, $suspended_plan_ids)) {
$response_plans_data .= '<input type="hidden" name="arm_user_suspended_plan[]" value="'. esc_attr($pID).'" id="arm_user_suspended_plan_'. esc_attr($pID).'"/>';
}
$additional_plan_action = "";
$additional_plan_action = apply_filters('arm_add_edit_member_member_plan_additional_actions', $additional_plan_action, $user_id, $pID, $planData, $count_plans, $planObj); //phpcs:ignore
$response_plans_data .= $additional_plan_action;
if ($is_multiple_membership_feature->isMultipleMembershipFeature) {
$response_plans_data .= '<input type="hidden" name="arm_user_plan[]" value="'. esc_attr($pID) .'"/>
<input type="hidden" name="arm_subscription_start_date[]" value="'. date('m/d/Y', $planData['arm_start_plan']) .'"/>';
}
$response_plans_data .= '</td>
</tr>';
$count_plans++;
}
}
}
}
if (!empty($futurePlanIDs)) {
foreach ($futurePlanIDs as $pID) {
if (!empty($pID)) {
$userPlanDatameta = get_user_meta($user_id, 'arm_user_plan_' . $pID, true);
$userPlanDatameta = !empty($userPlanDatameta) ? $userPlanDatameta : array();
$planData = shortcode_atts($defaultPlanData, $userPlanDatameta);
if (!empty($planData)) {
$planDetail = $planData['arm_current_plan_detail'];
if (!empty($planDetail)) {
$planObj = new ARM_Plan(0);
$planObj->init((object) $planDetail);
} else {
$planObj = new ARM_Plan($pID);
}
}
$no = $count_plans;
$planName = $planObj->name;
$grace_message = '';
$starts_date = !empty($planData['arm_start_plan']) ? $planData['arm_start_plan'] : '';
$started_date = !empty($planData['arm_started_plan_date']) ? $planData['arm_started_plan_date'] : '';
$starts_on = !empty($starts_date) ? date_i18n($date_format, $starts_date) : '-';
if($started_date != '' && $started_date <= $starts_date) {
$starts_on = date_i18n($date_format, $started_date);
}
$expires_on = !empty($planData['arm_expire_plan']) ? '<span id="arm_user_expiry_date_' . $pID . '" style="display: inline;">' . date_i18n($date_format, $planData['arm_expire_plan']) . ' <img src="' . MEMBERSHIPLITE_IMAGES_URL . '/grid_edit_hover_trns.png" width="26" style="position: absolute; margin: -4px 0 0 5px; cursor: pointer;" title="' . esc_html__('Change Expiry Date', 'ARMember') . '" data-plan_id="' . $pID . '" class="arm_edit_user_expiry_date"></span><span id="arm_user_expiry_date_box_' . $pID . '" class="arm_position_relative" style="display: none; width: 155px;"><input type="text" value="' . date($arm_common_date_format, $planData['arm_expire_plan']) . '" data-date_format="'.$arm_common_date_format.'" name="arm_subscription_expiry_date_' . $pID . '" class="arm_member_form_input arm_user_plan_expiry_date_picker arm_width_120 arm_min_width_120" /><img src="' . MEMBERSHIP_IMAGES_URL . '/cancel_date_icon.png" width="11" height="11" title="' . esc_html__('Cancel', 'ARMember') . '" data-plan_id="' . $pID . '" data-plan-expire-date="' . date('m/d/Y', $planData['arm_expire_plan']) . '" class="arm_cancel_edit_user_expiry_date"></span>' : esc_html__('Never Expires', 'ARMember');
$renewal_on = !empty($planData['arm_next_due_payment']) ? date_i18n($date_format, $planData['arm_next_due_payment']) : '-';
$trial_starts = !empty($planData['arm_trial_start']) ? $planData['arm_trial_start'] : '';
$trial_ends = !empty($planData['arm_trial_end']) ? $planData['arm_trial_end'] : '';
$arm_payment_mode = ( $planData['arm_payment_mode'] == 'auto_debit_subscription') ? '<br/>(' . esc_html__('Auto Debit','ARMember') . ')' : '';
$arm_payment_cycle = !empty($planData['arm_payment_cycle']) ? $planData['arm_payment_cycle'] : '';
if ($planObj->is_recurring()) {
$recurring_plan_options = $planObj->prepare_recurring_data($arm_payment_cycle);
$recurring_time = $recurring_plan_options['rec_time'];
$completed = $planData['arm_completed_recurring'];
if ($recurring_time == 'infinite' || empty($planData['arm_expire_plan'])) {
$remaining_occurence = esc_html__('Never Expires', 'ARMember');
} else {
$remaining_occurence = $recurring_time - $completed;
}
if (!empty($planData['arm_expire_plan'])) {
if ($remaining_occurence == 0) {
$renewal_on = esc_html__('No cycles due', 'ARMember');
} else {
$renewal_on .= "<br/>( " . $remaining_occurence . esc_html__(' cycles due', 'ARMember') . " )";
}
}
$arm_is_user_in_grace = $planData['arm_is_user_in_grace'];
$arm_grace_period_end = $planData['arm_grace_period_end'];
if ($arm_is_user_in_grace == "1") {
$arm_grace_period_end = date_i18n($date_format, $arm_grace_period_end);
$grace_message .= "<br/>( " . esc_html__('grace period expires on', 'ARMember') ." ". $arm_grace_period_end . " )";
}
}
$arm_plan_is_suspended = "";
$trial_active = "";
$arm_future_plan_odd_even = ($count_plans % 2 == 0) ? 'even' : 'odd';
$get_last_plan_id_key = array_key_last($planIDs);
if($pID == $planIDs[$get_last_plan_id_key])
{
$arm_future_plan_odd_even .= ' arm_no_border';
}
$response_plans_data .= '<tr class="arm_user_plan_table_tr '.$arm_future_plan_odd_even.'" id="arm_user_future_plan_div_'. esc_attr($count_plans).'">
<td class="arm_user_plan_no" data-label="'.esc_html__('No', 'ARMember').'">'. (intval($no) + 1) .'</td>
<td class="arm_user_plan_name" data-label="'.esc_html__('Membership Plan', 'ARMember').'">'. esc_html($planName) .' '. esc_html($arm_plan_is_suspended).'</td>
<td class="arm_user_plan_type" data-label="'.esc_html__('Plan Type', 'ARMember').'">'. $planObj->new_user_plan_text(false, $arm_payment_cycle).'</td>
<td class="arm_user_plan_start" data-label="'.esc_html__('Starts On', 'ARMember').'">'. esc_html($starts_on) . esc_html($trial_active) .'</td>
<td class="arm_user_plan_end" data-label="'.esc_html__('Expires On', 'ARMember').'">'. $expires_on.'</td>
<td class="arm_user_plan_cycle_date" data-label="'.esc_html__('Cycle Date', 'ARMember').'">'. esc_html($renewal_on) . esc_html($grace_message) . esc_html($arm_payment_mode).'</td>
<td class="arm_user_plan_action" data-label="'.esc_html__('Action', 'ARMember').'">
<input name="arm_user_future_plan[]" value="'. esc_attr($pID).'" type="hidden" id="arm_user_future_plan_'. esc_attr($pID).'">';
if ($is_multiple_membership_feature->isMultipleMembershipFeature) {
$response_plans_data .= '<div class="arm_position_relative arm_float_left">
<a class="arm_remove_user_plan_div armhelptip tipso_style" href="javascript:void(0)" title="'. esc_html__('Remove Plan', 'ARMember').'" onclick="showConfirmBoxCallback(\'delete_user_plan_'. esc_attr($pID) .'\');"></a>
<div class="arm_confirm_box arm_member_edit_confirm_box" id="arm_confirm_box_delete_user_plan_'. esc_attr($pID).'" style="top:25px; right: -20px; ">
<div class="arm_confirm_box_body">
<div class="arm_confirm_box_arrow arm_float_right" ></div>
<div class="arm_confirm_box_text arm_padding_top_0" >
'. esc_html__('Are you sure you want to remove this plan?', 'ARMember').'
</div>
<div class="arm_confirm_box_btn_container">
<button type="button" class="arm_confirm_box_btn armemailaddbtn arm_margin_right_5" id="arm_remove_user_future_plan_div" data-index="'. esc_attr($count_plans).'" >'. esc_html__('Ok', 'ARMember').'</button>
<button type="button" class="arm_confirm_box_btn armcancel" onclick="hideConfirmBoxCallback();">'. esc_html__('Cancel', 'ARMember').'</button>
</div>
</div>
</div></div>';
}
$response_plans_data .= '</td>
</tr>';
$count_plans++;
}
}
}
$response_plans_data .= '</table>
</div>
</td></tr>';
}
return $response_plans_data;
}
function arm_member_edit_detail_func(){
global $wpdb, $armPrimaryStatus, $ARMember, $arm_slugs, $arm_members_class, $arm_member_forms, $arm_global_settings, $arm_subscription_plans, $arm_social_feature, $is_multiple_membership_feature, $arm_email_settings, $arm_pay_per_post_feature, $arm_members_activity,$arm_capabilities_global,$arm_ajax_pattern_start,$arm_ajax_pattern_end;
$ARMember->arm_check_user_cap( $arm_capabilities_global['arm_manage_members'], '1',1); //phpcs:ignore --Reason:Verifying nonce
$response = array();
if (isset($_REQUEST['arm_action']) && $_REQUEST['arm_action'] == 'edit_member' && !empty($_REQUEST['id'])) {
$armform = new ARM_Form();
$formHiddenFields = '';
$arm_default_form_id = 101;
$all_active_plans = $arm_subscription_plans->arm_get_all_active_subscription_plans();
$dbFormFields = $arm_member_forms->arm_get_db_form_fields(true);
$arm_suffix_icon_pass = '<span class="arm_visible_password_admin arm-df__fc-icon --arm-suffix-icon" id="" style=""><i class="armfa armfa-eye"></i></span>';
$response['form_title'] = esc_html__('Update Member', 'ARMember');
$response['form_action'] = 'update_member';
$user_id = abs(intval($_REQUEST['id']));
$response['user_id'] = $user_id;
$user = $arm_members_class->arm_get_member_detail($user_id);
$user_info = get_userdata($user_id);
$response['user_name'] = $user->data->user_login;
$response['user_email'] = $user->data->user_email;
$response['user_role'] = $user->roles;
$response['display_name'] = $user->data->display_name;
$response['avatar'] = !empty($user->data->user_meta['avatar']) ? $user->data->user_meta['avatar'] : '';
$response['profile_cover'] = !empty($user->data->user_meta['profile_cover']) ? $user->data->user_meta['profile_cover'] : '';
foreach($dbFormFields as $meta => $field_data)
{
if(!in_array($meta,array('user_login','user_name','user_email','user_pass','user_role','display_name')))
{
$response[$meta] = !empty($user->data->user_meta[$meta]) ? $user->data->user_meta[$meta] : '';
}
}
$arm_form_id = isset($user->arm_form_id) ? $user->arm_form_id : 0;
if(empty($arm_form_id)){
$arm_form_id=$arm_default_form_id;
}
$response['user_form_id'] = $arm_form_id;
if($arm_form_id != 0 && $arm_form_id != ''){
$arm_member_form_fields = $arm_member_forms->arm_get_member_forms_fields($arm_form_id, 'all');
if(empty($arm_member_form_fields)){
$arm_form_id=$arm_default_form_id;
$arm_member_form_fields = $arm_member_forms->arm_get_member_forms_fields($arm_form_id, 'all');
}
if(!empty($arm_member_form_fields)){
foreach ($arm_member_form_fields as $fields_key => $fields_value) {
$arm_member_form_field_slug = $fields_value['arm_form_field_option']['meta_key'];
if(in_array($fields_value['arm_form_field_option']['type'], array('file','avatar','profile_cover'))){
$file_meta_key = !empty($fields_value['arm_form_field_option']['meta_key'])?$fields_value['arm_form_field_option']['meta_key']:"";
$file_name = explode(",",$user->$file_meta_key);
foreach ($file_name as $fname) {
$fname = $ARMember->arm_get_basename($fname);
if($fields_value['arm_form_field_option']['type']=="file"){
$arm_members_activity->session_for_file_handle($file_meta_key,$fname,1);
}else{
$arm_members_activity->session_for_file_handle($file_meta_key,$fname);
}
}
}
else{
if(!in_array($fields_value['arm_form_field_option']['type'], array('section','html', 'hidden', 'submit','social_fields'))){
$arm_member_include_fields_keys[$arm_member_form_field_slug]=$arm_member_form_field_slug;
$dbFormFields[$arm_member_form_field_slug]['label'] = $fields_value['arm_form_field_option']['label'];
if(isset($dbFormFields[$arm_member_form_field_slug]['options']) && isset($fields_value['arm_form_field_option']['options'])){
$dbFormFields[$arm_member_form_field_slug]['options'] = $fields_value['arm_form_field_option']['options'];
}
if( !empty( isset($fields_value['arm_form_field_option']['default_val']) ) && !empty($fields_value['arm_form_field_option']['type']) && ($fields_value['arm_form_field_option']['type']=='radio' || $fields_value['arm_form_field_option']['type']=='checkbox'))
{
$dbFormFields[$arm_member_form_field_slug]['default_val'] = $fields_value['arm_form_field_option']['default_val'];
}
$dbFormFields['display_member_fields'][$arm_member_form_field_slug]=$arm_member_form_field_slug;
}
}
}
}
if(isset($dbFormFields['display_member_fields']) && count($dbFormFields['display_member_fields'])){
$dbFormFields = array_merge(array_flip($dbFormFields['display_member_fields']), $dbFormFields);
unset($dbFormFields['display_member_fields']);
}
if(isset($dbFormFields['user_pass']) && isset($dbFormFields['user_pass']['required'])){
$dbFormFields['user_pass']['required']=0;
}
}
$required_class = 1;
if (!empty($user)) {
$arm_all_user_status = arm_get_all_member_status($user_id);
$primary_status = $arm_all_user_status['arm_primary_status'];
$secondary_status = $arm_all_user_status['arm_secondary_status'];
$response['primary_status'] = $primary_status;
$response['secondary_status'] = $secondary_status;
$response['status_label'] = $arm_members_class->armGetMemberStatusTextForAdmin($user_id, $primary_status, $secondary_status);
}
$planIDs = get_user_meta($user_id, 'arm_user_plan_ids', true);
$planIDs = !empty($planIDs) ? $planIDs : array();
$planID = isset($planIDs[0]) ? $planIDs[0] : 0;
$postIDs = get_user_meta($user_id, 'arm_user_post_ids', true);
$postIDs = !empty($postIDs) ? $postIDs : array();
foreach($planIDs as $plan_key => $planVal)
{
if(!empty($postIDs[$planVal]))
{
unset($planIDs[$plan_key]);
}
}
$planIDs = apply_filters('arm_modify_plan_ids_externally', $planIDs, $user_id);
$planData = get_user_meta($user_id, 'arm_user_plan_' . $planID, true);
$plan_start_date = (isset($planData['arm_start_plan']) && !empty($planData['arm_start_plan'])) ? date('m/d/Y', $planData['arm_start_plan']) : date('m/d/Y');
$futurePlanIDs = get_user_meta($user_id, 'arm_user_future_plan_ids', true);
$futurePlanIDs = !empty($futurePlanIDs) ? $futurePlanIDs : array();
if( !empty( $futurePlanIDs ) ){
$response['futurePlanIDs'] = $futurePlanIDs;
foreach( $futurePlanIDs as $f_plan_key => $f_plan_id ){
$paid_post_id = $arm_pay_per_post_feature->arm_get_post_from_plan_id( $f_plan_id );
if( !empty( $paid_post_id[0]['arm_subscription_plan_id'] && !empty( $paid_post_id[0]['arm_subscription_plan_post_id'] ) ) ){
unset( $futurePlanIDs[$f_plan_key] );
}
}
}
$all_plan_ids = array();
if (!empty($all_active_plans)) {
foreach ($all_active_plans as $p) {
$all_plan_ids[] = $p['arm_subscription_plan_id'];
}
}
$response_plans_data = '';
$response_plans_data = apply_filters('arm_member_edit_plan_details',$response_plans_data,$user_id,$planIDs,$futurePlanIDs);
if(!$is_multiple_membership_feature->isMultipleMembershipFeature && !empty($planIDs)){
$arr_key_first = array_key_first($planIDs);
$response['planIDs'] = $planIDs[$arr_key_first];
}
$response['response_plans_data'] = $response_plans_data;
if($arm_pay_per_post_feature->isPayPerPostFeature){
$member_paid_post_plans = $arm_pay_per_post_feature->arm_get_paid_post_plans_paging($user_id, 1, 5);
$response['response_paid_post_data'] = "<tr class='arm_user_paid_post_list'><td colspan='2'>".$member_paid_post_plans."</td></tr>";
}
$arm_is_social_feature=0;
$arm_is_social_fields='';
if($arm_social_feature->isSocialFeature)
{
$socialProfileFields = $arm_member_forms->arm_social_profile_field_types();
if (!empty($socialProfileFields) ) {
$arm_is_social_feature = 1;
foreach ($socialProfileFields as $spfKey => $spfLabel) {
$spfMetaKey = 'arm_social_field_' . $spfKey;
$spfMetaValue = get_user_meta($user_id, $spfMetaKey, true);
if(!empty($spfMetaValue)){
$arm_is_social_fields .='<div class="form-field">
<div class="arm_social_field_lbl">
<label>'. esc_html($spfLabel) .'</label>
</div>
<div>
<input id="arm_social_'. esc_attr($spfKey) .'" class="arm_member_form_input" name="'. esc_attr($spfMetaKey) .'" type="text" value="'. esc_attr($spfMetaValue) .'"/>
</div>
</div>';
}
}
}
}
$response_form_fields_data = '';
$response_form_fields_data = apply_filters('arm_member_member_forms_fields_details',$response_form_fields_data,$user_id,$arm_form_id);
$response['arm_form_fields_section'] = $response_form_fields_data;
$response['is_social_field_active'] = $arm_is_social_feature;
$response['response_social_button_val'] = esc_html__('Add','ARMember');
$response['response_social_fields'] = $arm_is_social_fields;
$response['user_url'] = $user_info->data->user_url;
$response = apply_filters( 'arm_get_member_addon_data',$response,$user_id );
}
echo $arm_ajax_pattern_start.''.json_encode($response).''.$arm_ajax_pattern_end;
die();
}
function arm_paid_post_plan_lists_func($paidPlansLists, $planIDs){
global $arm_subscription_plans,$is_multiple_membership_feature,$arm_pay_per_post_feature,$arm_global_settings;
$all_subscription_plans = $arm_subscription_plans->arm_get_plans_data();
$paidPlansLists = '<li data-label="' . addslashes( esc_attr__('Select Paid Post', 'ARMember')) . '" data-value="">' . addslashes( esc_html__('Select Paid Post', 'ARMember') ) . '</li>';
if (!empty($all_subscription_plans)) {
foreach ($all_subscription_plans as $p) {
if($p['arm_subscription_plan_post_id'] != 0 && (!in_array($p['arm_subscription_plan_id'], $planIDs)))
{
$p_id = $p['arm_subscription_plan_id'];
if ($is_multiple_membership_feature->isMultipleMembershipFeature) {
//if (in_array($p_id, $plan_to_show)) {
$paidPlansLists .= '<li data-label="' . esc_attr($p['arm_subscription_plan_name']) . '" data-value="' . $p_id . '">' . esc_attr($p['arm_subscription_plan_name']) . '</li>';
//}
} else {
$paidPlansLists .= '<li data-label="' . esc_attr($p['arm_subscription_plan_name']) . '" data-value="' . $p_id . '">' . esc_attr($p['arm_subscription_plan_name']) . '</li>';
}
}
}
}
return $paidPlansLists;
}
function arm_add_edit_member_additional_data_func($arm_add_edit_member_additional_data,$planID,$planIDs,$user_id){
global $arm_subscription_plans,$is_multiple_membership_feature,$arm_pay_per_post_feature,$arm_global_settings;
$all_subscription_plans = $arm_subscription_plans->arm_get_plans_data();
$arm_common_date_format = $arm_global_settings->arm_check_common_date_format(get_option('date_format'));
$paidPlansLists = '';
$paidPlansLists = $this->arm_paid_post_plan_lists_func($paidPlansLists,$planIDs);
if($arm_pay_per_post_feature->isPayPerPostFeature==true)
{
$is_rtl_css = (is_rtl())? 'margin-right:24px;': 'margin-left:24px;';
$arm_add_edit_member_additional_data = '<table class="form-table arm_subscription_plan_table">
<input type="hidden" id="arm_total_user_posts" value="1">
<tr><td colspan="2"><div class="arm_form_header_label">'. esc_html__('Paid Post', 'ARMember').'</div></td></tr>
<tr class="form-field arm_paid_post_form_fields">
<td class="arm_position_relative arm_padding_bottom_14 arm_margin_0">
<div class="arm_setup_forms_container">
<ul class="arm_user_plan_ul2" id="arm_user_plan_ul2">
<li class="arm_user_plan_li_0 arm_margin_bottom_10">
<div class="arm_user_plns_box arm_subscription_label">
<div class="arm_subscription_paid_post_wrapper">
<span class="arm_subscription_paid_post_label">'. esc_html__('Paid Post', 'ARMember').'</span>
</div>
<div class="arm_subscription_plan_wrapper arm_subscription_plan_cycle_wrapper"></div>
<div class="arm_subscription_start_date_wrapper arm_subscription_label_wrapper">
<span>'. esc_html__('Post Start Date', 'ARMember').'</span>
</div>
</div>
<div class="arm_user_plns_box">
<div class="arm_subscription_paid_post_wrapper">
<input type="hidden" class="arm_user_plan_change_input arm_mm_user_post_change_input_get_cycle arm-selectpicker-input-control" name="arm_user_plan2[]" id="arm_user_post_0" value="" data-arm-plan-count="0"/>
<dl class="arm_selectbox column_level_dd arm_member_form_dropdown">
<dt><span></span><input type="text" style="display:none;" value="" class="arm_autocomplete"/><i class="armfa armfa-angle-down armfa-lg"></i></dt>
<dd><ul data-id="arm_user_post_0">'. $paidPlansLists.'</ul></dd>
</dl>
</div>
<div class="arm_selected_plan_cycle_0" id="arm_arm_sub_plan_cycle" style=" display: none; width:40%;'.$is_rtl_css.' min-width:0;">
</div>
<div class="arm_subscription_start_date_wrapper">
<input type="text" value="'. date($arm_common_date_format, strtotime(date('Y-m-d'))).'" data-date_format="'. esc_attr($arm_common_date_format).'" name="arm_subscription_start_date2[]" class="arm_member_form_input arm_user_plan_date_picker" />
</div>
<div class="arm_subscription_plan_action_btn">
<img src="'. MEMBERSHIPLITE_IMAGES_URL . '/add_plan.svg" id="arm_add_new_user_plan_link2" title="'. esc_html__('Add New Post', 'ARMember').'" onmouseover="this.src = \''. MEMBERSHIPLITE_IMAGES_URL.'/add_plan_hover.svg\';" onmouseout="this.src = \''. MEMBERSHIPLITE_IMAGES_URL.'/add_plan.svg\';" class="arm_helptip_icon tipso_style arm_add_plan_icon">
<img src="'. MEMBERSHIPLITE_IMAGES_URL . '/remove_plan.svg" id="arm_remove_user_plan2" title="'. esc_html__('Remove Post', 'ARMember').'" onmouseover="this.src = \''. MEMBERSHIPLITE_IMAGES_URL.'/remove_plan_hover.svg\';" onmouseout="this.src = \''.MEMBERSHIPLITE_IMAGES_URL.'/remove_plan.svg\';" class="arm_helptip_icon tipso_style arm_add_plan_icon arm_remove_user_plan_icon">
</div>
</div>
</li>
</ul>
</div>
<input type="hidden" id="arm_total_user_paid_posts" value="1"/>
</td>
</tr>';
if($arm_pay_per_post_feature->isPayPerPostFeature){
$member_paid_post_plans = $arm_pay_per_post_feature->arm_get_paid_post_plans_paging($user_id, 1, 5);
if( !empty($member_paid_post_plans) )
{
$arm_add_edit_member_additional_data .= '<tr><td colspan="2">';
$arm_add_edit_member_additional_data .= $member_paid_post_plans; //phpcs:ignore
$arm_add_edit_member_additional_data .= '</td></tr>';
}
}
$arm_add_edit_member_additional_data .= '<tr>
<td colspan="2">
<div class="arm-note-message --alert">
<p>'.esc_html__('Note:', 'ARMember').'</p>
<span>'. esc_html__('All the actions like add new post, renew cycle, extend days, delete post will be applied only after save button is clicked at the bottom of this page.', 'ARMember').'</span>
</div>
</td>
</tr>
</table>';
}
return $arm_add_edit_member_additional_data;
}
function arm_multiple_membership_plan_renewal_func( $arm_multiple_membership_plan_renewal, $pID, $planData, $count_plans){
global $is_multiple_membership_feature;
if ($is_multiple_membership_feature->isMultipleMembershipFeature) {
$arm_multiple_membership_plan_renewal = '<input type="hidden" name="arm_user_plan[]" value="'. esc_attr($pID).'"/>
<input type="hidden" name="arm_subscription_start_date[]" value="'. date('m/d/Y', $planData['arm_start_plan']).'"/>
<div class="arm_position_relative arm_float_left">
<a class="arm_remove_user_plan_div armhelptip tipso_style" href="javascript:void(0)" title="'. esc_html__('Remove Plan', 'ARMember').'" onclick="showConfirmBoxCallback(\'delete_user_plan_'. esc_attr($pID).'\');"></a>
<div class="arm_confirm_box arm_member_edit_confirm_box" id="arm_confirm_box_delete_user_plan_'. esc_attr($pID).'" style="top:25px; right: -20px; ">
<div class="arm_confirm_box_body">
<div class="arm_confirm_box_arrow arm_float_right"></div>
<div class="arm_confirm_box_text arm_padding_top_0" >
'. esc_html__('Are you sure you want to remove this plan?', 'ARMember').'
</div>
<div class="arm_confirm_box_btn_container">
<button type="button" class="arm_confirm_box_btn armemailaddbtn arm_remove_user_plan_div_box arm_margin_right_5" data-index="'. esc_attr($count_plans).'" >'. esc_html__('Ok', 'ARMember').'</button>
<button type="button" class="arm_confirm_box_btn armcancel" onclick="hideConfirmBoxCallback();">'. esc_html__('Cancel', 'ARMember').'</button>
</div>
</div>
</div>
</div>';
}
return $arm_multiple_membership_plan_renewal;
}
function arm_pro_paid_finite_plan_renewal_section_func($arm_renewal_button_section,$pID){
$arm_renewal_button_section = '<div class="arm_position_relative arm_float_left">
<a href="javascript:void(0)" class="arm_user_renew_next_cycle_action_btn" id="arm_skip_next_cycle" onclick="showConfirmBoxCallback(\'renew_next_cycle_'. esc_attr($pID).'\');">'. esc_html__('Renew', 'ARMember').'</a>
<div class="arm_confirm_box arm_member_edit_confirm_box arm_confirm_box_renew_next_cycle arm_width_280" id="arm_confirm_box_renew_next_cycle_'. esc_attr($pID).'" style="top:25px; right:45px; ">
<div class="arm_confirm_box_body">
<div class="arm_confirm_box_arrow" style="float: right"></div>
<div class="arm_confirm_box_text arm_padding_top_0">
<input type="hidden" id="arm_skip_next_renewal_'. esc_attr($pID).'" name="arm_skip_next_renewal_'. esc_attr($pID).'" value="0" class="arm_skip_next_renewal"/>
'. esc_html__('Are you sure you want to renew plan?', 'ARMember').'
</div>
<div class="arm_confirm_box_btn_container">
<button type="button" class="arm_confirm_box_btn armemailaddbtn arm_margin_right_5" onclick="RenewNextCycleOkCallback('. esc_attr($pID).')" >'. esc_html__('Ok', 'ARMember').'</button>
<button type="button" class="arm_confirm_box_btn armcancel arm_user_renew_next_cycle_cancel_btn" onclick="hideUserRenewNextCycleBoxCallback('. esc_attr($pID).');">'. esc_html__('Cancel', 'ARMember').'</button>
</div>
</div>
</div>';
return $arm_renewal_button_section;
}
function arm_pro_paid_conditional_func($arm_paid_condition,$planData){
$arm_paid_condition = (!empty($planData) && !empty($planData['arm_current_plan_detail']) && empty($planData['arm_current_plan_detail']['arm_subscription_plan_post_id']) );
return $arm_paid_condition;
}
function arm_manage_members_plan_list_filters_func($arm_membership_plan_list_filter,$planIDs,$plansLists,$planData){
global $arm_global_settings,$is_multiple_membership_feature,$arm_subscription_plans;
$arm_common_date_format = $arm_global_settings->arm_check_common_date_format(get_option('date_format'));
$plan_start_date = ( isset( $planData['arm_start_plan'] ) && ! empty( $planData['arm_start_plan'] ) ) ? date( $arm_common_date_format, $planData['arm_start_plan'] ) : date( $arm_common_date_format );
$arm_membership_plan_list_filter ='<td class="arm_position_relative arm_padding_bottom_14 arm_margin_0">';
$is_rtl_css = (is_rtl())? 'margin-right:24px;': 'margin-left:24px;';
if ($is_multiple_membership_feature->isMultipleMembershipFeature) {
// $arm_membership_plan_list_filter .= '';
$arm_membership_plan_list_filter .= '<ul class="arm_user_plan_ul" id="arm_user_plan_ul">
<li class="arm_user_plan_li_0 arm_margin_bottom_10">
<div class="arm_user_plns_box arm_subscription_label">
<div class="arm_subscription_plan_wrapper">
<span class="arm_subscription_paid_post_label">'.esc_html__('Select plan','ARMember').'</span>
</div>
<div class="arm_subscription_plan_wrapper arm_subscription_plan_cycle_wrapper"></div>
<div class="arm_subscription_start_date_wrapper arm_subscription_label_wrapper arm_margin_left_18">
<span>'.esc_html__('Plan Start Date','ARMember').'</span>
</div>
</div>
<div class="arm_user_plns_box">
<div class="arm_subscription_plan_selection">
<input type="hidden" class="arm_user_plan_change_input arm_mm_user_plan_change_input_get_cycle" name="arm_user_plan[]" id="arm_user_plan_0" value="" data-arm-plan-count="0"/>
<dl class="arm_selectbox column_level_dd arm_member_form_dropdown arm_margin_right_5">
<dt><span></span><input type="text" style="display:none;" value="" class="arm_autocomplete"/><i class="armfa armfa-caret-down armfa-lg"></i></dt>
<dd><ul data-id="arm_user_plan_0">'. $plansLists.'</ul></dd>
</dl>
</div>
<div class="arm_selected_plan_cycle_0" style="display: none; width:40%;'.$is_rtl_css.' min-width:0;">
</div>
<div class="arm_subscription_start_date_wrapper">
<input type="text" value="'. date($arm_common_date_format, strtotime(date('Y-m-d'))).'" data-date_format="'. esc_attr($arm_common_date_format).'" name="arm_subscription_start_date[]" class="arm_member_form_input arm_user_plan_date_picker" />
</div>
<div class="arm_subscription_plan_action_btn">
<img src="'. MEMBERSHIPLITE_IMAGES_URL . '/add_plan.svg" id="arm_add_new_user_plan_link" title="'. esc_html__('Add New Plan', 'ARMember').'" onmouseover="this.src = \''. MEMBERSHIPLITE_IMAGES_URL.'/add_plan_hover.svg\';" onmouseout="this.src = \''. MEMBERSHIPLITE_IMAGES_URL .'/add_plan.svg\';" class="arm_helptip_icon tipso_style arm_add_plan_icon">
<img src="'. MEMBERSHIPLITE_IMAGES_URL . '/remove_plan.svg" id="arm_remove_user_plan" title="'. esc_html__('Remove Plan', 'ARMember').'" onmouseover="this.src = \''. MEMBERSHIPLITE_IMAGES_URL.'/remove_plan_hover.svg\';" onmouseout="this.src = \''. MEMBERSHIPLITE_IMAGES_URL.'/remove_plan.svg\';" class="arm_helptip_icon tipso_style arm_add_plan_icon arm_remove_user_plan_icon">
</div>
</div>
</li>
</ul>
<input type="hidden" id="arm_total_user_plans" value="1"/>';
} else {
$arm_field_plan_label = esc_html__('Select plan','ARMember');
if(!empty($planIDs))
{
$arm_plan_first = array_key_first($planIDs);
$plan_name = $arm_subscription_plans->arm_get_plan_name_by_id($planIDs[$arm_plan_first]);
$arm_membership_plan_list_filter .= (!empty($plan_name)) ? esc_html($plan_name) : '-';
$plan_id = ($planIDs[$arm_plan_first] > 0) ? $planIDs[$arm_plan_first] : '';
$arm_field_plan_label = esc_html__('Change plan','ARMember');
}
else
{
$plan_id = '';
}
$arm_membership_plan_list_filter .= '
<ul class="arm_user_plan_ul" id="arm_user_plan_ul">
<li class="arm_user_plan_li_0 arm_margin_bottom_10">
<div class="arm_user_plns_box arm_subscription_label">
<div class="arm_subscription_plan_wrapper">
<span class="arm_subscription_paid_post_label">'.$arm_field_plan_label.'</span>
</div>
<div class="arm_subscription_plan_wrapper arm_subscription_plan_cycle_wrapper"></div>
<div class="arm_subscription_start_date_wrapper arm_subscription_label_wrapper arm_margin_left_18">
<span>'.esc_html__('Plan Start Date','ARMember').'</span>
</div>
</div>
<div class="arm_user_plns_box">
<div class="arm_subscription_plan_selection">
<input type="hidden" id="arm_user_plan" class="arm_user_plan_change_input arm_add_edit_user_plan_change_input arm_user_plan_change_input_get_cycle" name="arm_user_plan" value="" data-manage-plan-grid="2"/>
<dl class="arm_selectbox column_level_dd arm_member_form_dropdown">
<dt><span></span><input type="text" style="display:none;" value="" class="arm_autocomplete"/><i class="armfa armfa-caret-down armfa-lg"></i></dt>
<dd><ul data-id="arm_user_plan">'. $plansLists.'</ul></dd>
</dl>
</div>
<div class="arm_selected_plan_cycle" style="display: none;'.$is_rtl_css.' width:40%;min-width:0;">
</div>
<div class="arm_subscription_start_date_wrapper">
<input type="text" value="'. date($arm_common_date_format, strtotime(date('Y-m-d'))).'" data-date_format="'. esc_attr($arm_common_date_format).'" name="arm_subscription_start_date" class="arm_member_form_input arm_user_plan_date_picker" />
</div>
<div class="arm_subscription_plan_action_btn">
<img src="'. MEMBERSHIPLITE_IMAGES_URL . '/add_plan.svg" id="arm_add_new_user_plan_link" title="'. esc_html__('Add New Plan', 'ARMember').'" onmouseover="this.src = \''. MEMBERSHIPLITE_IMAGES_URL.'/add_plan_hover.svg\';" onmouseout="this.src = \''. MEMBERSHIPLITE_IMAGES_URL .'/add_plan.svg\';" class="arm_helptip_icon tipso_style arm_add_plan_icon arm_visible_hidden">
<img src="'. MEMBERSHIPLITE_IMAGES_URL . '/remove_plan.svg" id="arm_remove_user_plan" title="'. esc_html__('Remove Plan', 'ARMember').'" onmouseover="this.src = \''. MEMBERSHIPLITE_IMAGES_URL.'/remove_plan_hover.svg\';" onmouseout="this.src = \''. MEMBERSHIPLITE_IMAGES_URL.'/remove_plan.svg\';" class="arm_helptip_icon tipso_style arm_add_plan_icon arm_remove_user_plan_icon arm_visible_hidden">
</div>
</div>
</li>
</ul>';
}
$arm_membership_plan_list_filter .='</td>';
return $arm_membership_plan_list_filter;
}
function arm_pro_modify_future_plan_ids_externally_func($futurePlanIDs, $user_id){
global $arm_pay_per_post_feature;
if( !empty( $futurePlanIDs ) ){
foreach( $futurePlanIDs as $f_plan_key => $f_plan_id ){
$paid_post_id = $arm_pay_per_post_feature->arm_get_post_from_plan_id( $f_plan_id );
if( !empty( $paid_post_id[0]['arm_subscription_plan_id'] && !empty( $paid_post_id[0]['arm_subscription_plan_post_id'] ) ) ){
unset( $futurePlanIDs[$f_plan_key] );
}
}
}
return $futurePlanIDs;
}
function arm_pro_modify_plan_ids_externally_func($planIDs, $user_id){
$postIDs = get_user_meta($user_id, 'arm_user_post_ids', true);
$postIDs = !empty($postIDs) ? $postIDs : array();
foreach($planIDs as $plan_key => $planVal)
{
if(!empty($postIDs[$planVal]))
{
unset($planIDs[$plan_key]);
}
}
return $planIDs;
}
function arm_get_member_forms_filter_func($armform)
{
$armform = new ARM_Form();
return $armform;
}
function arm_view_members_memberships_details_func($arm_member_plans_details,$user_id,$plan_id_name_array){
global $arm_pay_per_post_feature,$arm_subscription_plans,$arm_transaction;
$is_paid_post = 1;
if($arm_pay_per_post_feature->isPayPerPostFeature){
$paid_post_membership_history = $arm_subscription_plans->arm_get_user_membership_history( $user_id, 1, 5, $plan_id_name_array,$is_paid_post);
if(!empty($paid_post_membership_history)){
$arm_member_plans_details .= '
<div class="arm_view_member_sub_title arm_padding_0 arm_padding_top_32">'. esc_html__('Paid Post History','ARMember').'</div>
<div class="arm_view_member_left_box arm_no_border">
<div class="arm_view_member_sub_content arm_membership_history_list armPageContainer arm_padding_0">'. $paid_post_membership_history.'
</div>
</div>
<div class="armclear"></div>
';
}
$user_logs = $arm_transaction->arm_get_user_transactions_with_pagging($user_id, 1, 5, $plan_id_name_array,$is_paid_post);
if(!empty($user_logs)){
$arm_member_plans_details .= '
<div class="arm_view_member_sub_title arm_padding_0 arm_margin_top_32">'. esc_html__('Paid Post Payment History','ARMember').'</div>
<div class="arm_view_member_left_box arm_no_border">
<div class="arm_view_member_sub_content arm_membership_history_list armPageContainer arm_padding_0">'. $user_logs.'
</div>
<div class="armclear"></div>
</div>
<div class="armclear"></div>';
}
}
$arm_member_plans_details .= '<div class="armclear"></div>';
$login_history = $this->arm_get_user_login_history($user_id, 1, 10);
if(isset($login_history) && !empty($login_history)):
$arm_member_plans_details .= '
<div class="arm_view_member_sub_title arm_padding_0 arm_padding_top_32">'. esc_html__('Login History','ARMember').'</div>
<div class="arm_view_member_left_box arm_no_border">
<div class="arm_view_member_sub_content arm_membership_history_list armPageContainer arm_padding_0">
'. $login_history.'
</div>
<div class="armclear"></div>
</div>';
endif;
$arm_member_plans_details .= '<div class="armclear"></div>';
return $arm_member_plans_details;
}
function arm_admin_view_member_get_social_profile_data_func($arm_social_profiles_field_data, $user_id){
global $arm_social_feature,$arm_member_forms;
if ($arm_social_feature->isSocialFeature) {
$socialProfileFields = $arm_member_forms->arm_social_profile_field_types();
if (!empty($socialProfileFields)) {
foreach ($socialProfileFields as $spfKey => $spfLabel) {
$spfMetaKey = 'arm_social_field_'.$spfKey;
$spfMetaValue = get_user_meta($user_id, $spfMetaKey, true);
if( !empty( $spfMetaValue ) ) {
$field_meta_val = (!empty($spfMetaValue)) ? esc_html($spfMetaValue) : '--';
$arm_social_profiles_field_data .= '<tr class="form-field">
<th class="arm-form-table-label">'. esc_html($spfLabel).':</th>
<td class="arm-form-table-content">'. $field_meta_val .'</td>
</tr>';
}
}
}
}
$coupon_codes = "";
$user_plan_ids = get_user_meta($user_id, 'arm_user_plan_ids', true);
if(!empty($user_plan_ids)) {
foreach ($user_plan_ids as $key => $plan_ids) {
$coupon_lbl = get_user_meta($user_id, 'arm_used_invite_coupon_'.$plan_ids, true);
if(!empty($coupon_lbl))
{
$coupon_codes .= $coupon_lbl.",";
}
}
}
if(!empty($coupon_codes)) {
$arm_social_profiles_field_data .= '<tr class="form-field">
<th class="arm-form-table-label">'. esc_html__("Used Coupon as Invitation", "ARMember").':</th>
<td class="arm-form-table-content">'. trim($coupon_codes, ",") .'</td>
</tr>';
}
return $arm_social_profiles_field_data;
}
function arm_admin_right_box_panel_section_func($arm_admin_view_member_additional_data,$user_id)
{
global $arm_global_settings,$arm_social_feature,$arm_members_badges;
if ($arm_social_feature->isSocialFeature) {
$user_achievements_detail = $arm_members_badges->arm_get_user_achievements_detail($user_id);
$global_settings = $arm_global_settings->global_settings;
$badge_width = !empty($global_settings['badge_width']) ? $global_settings['badge_width'] : 30;
$badge_height = !empty($global_settings['badge_height']) ? $global_settings['badge_height'] : 30;
$badge_css = "width:".$badge_width."px; height:".$badge_height."px;";
if (!empty($user_achievements_detail)) {
$arm_admin_view_member_additional_data .= '<div class="arm_member_detail_badges">';
foreach($user_achievements_detail as $user_achieve) {
$arm_admin_view_member_additional_data .= '<span class="arm-user-badge armhelptip_front" title="'. esc_html($user_achieve['badge_title']).'"><img src="'. strstr($user_achieve['badge_icon'],"//").'" style="'. esc_html($badge_css).'" /></span>';
}
$arm_admin_view_member_additional_data .= '</div>';
}
}
return $arm_admin_view_member_additional_data;
}
function arm_admin_right_box_panel_btn_section_func($arm_admin_view_member_additional_btn_data,$user_id)
{
global $arm_social_feature;
if($arm_social_feature->isSocialFeature) {
$arm_admin_view_member_additional_btn_data = '<a href="javascript:void(0)" class="arm_view_membership_card_btn" data-id="'. esc_html( $user_id ).'">'. esc_html__('View Membership Card', 'ARMember').'</a>';
}
return $arm_admin_view_member_additional_btn_data;
}
function arm_member_grid_membership_plans_fields_filter_func($arm_others_field_filters,$all_plans,$filter_member_status){
global $arm_pay_per_post_feature,$armPrimaryStatus,$is_multiple_membership_feature;
$arm_others_field_filters ='
<tr class="arm_child_user_row">
<th>'.esc_html__('Member status','ARMember').'</th>
<td>
<div class="arm_filter_status_box arm_datatable_filter_item">
<input type="hidden" id="arm_status_filter" class="arm_status_filter" value="'. esc_attr($filter_member_status).'" />
<dl class="arm_selectbox arm_width_250">
<dt><span></span><input type="text" style="display:none;" value="" class="arm_autocomplete"/><i class="armfa armfa-caret-down armfa-lg"></i></dt>
<dd>
<ul data-id="arm_status_filter" data-placeholder="'. esc_html__('Select Status', 'ARMember').'">
<li data-label="'. esc_html__('Select Status', 'ARMember').'" data-value="0">'. esc_html__('Select Status', 'ARMember').'</li>';
foreach ($armPrimaryStatus as $key => $value) {
$arm_others_field_filters .='<li data-label="'. esc_attr($value).' '. esc_html__('User', 'ARMember').'" data-value="'. esc_attr($key) .'">'. esc_html($value) .' '. esc_html__('User', 'ARMember').'</li>';
}
if($arm_pay_per_post_feature->isPayPerPostFeature)
{
$suspended_plan_user_txt = esc_html__('Suspended Plan/Post User', 'ARMember');
$active_plan_user_txt = esc_html__('Active Plan/Post User', 'ARMember');
}
else{
$suspended_plan_user_txt = esc_html__('Suspended Plan User', 'ARMember');
$active_plan_user_txt = esc_html__('Active Plan User', 'ARMember');
}
$arm_others_field_filters .='<li data-label="'. esc_attr($suspended_plan_user_txt).'" data-value="5">'. esc_html($suspended_plan_user_txt).'</li>
<li data-label="'. esc_attr($active_plan_user_txt).'" data-value="6">'. esc_attr($active_plan_user_txt).'</li>
</ul>
</dd>
</dl>
</div>
</td>
</tr>';
if($is_multiple_membership_feature->isMultipleMembershipFeature) {
$arm_others_field_filters .='
<tr class="arm_child_user_row">
<th>'.esc_html__('Membership Type','ARMember').'</th>
<td>
<div class="arm_datatable_filter_item arm_filter_membership_type_label">
<input type="hidden" id="arm_filter_membership_type" class="arm_filter_membership_type" value="0" />
<dl class="arm_selectbox arm_width_250">
<dt><span></span><input type="text" style="display:none;" value="" class="arm_autocomplete"/><i class="armfa armfa-caret-down armfa-lg"></i></dt>
<dd>
<ul data-id="arm_filter_membership_type" data-placeholder="'. esc_html__('All Members', 'ARMember').'">
<li data-label="'. esc_html__('All Members', 'ARMember').'" data-value="0">'. esc_html__('All Members', 'ARMember').'</li>
<li data-label="'. esc_html__('Single Membership', 'ARMember').'" data-value="1">'. esc_html__('Single Membership', 'ARMember').'</li>
<li data-label="'. esc_html__('Multiple Membership', 'ARMember').'" data-value="2">'. esc_html__('Multiple Membership', 'ARMember').'</li>
</ul>
</dd>
</dl>
</div>
</td>
</tr>';
}
return $arm_others_field_filters;
}
function arm_member_grid_meta_fields_filter_func($arm_meta_field_filters,$user_meta_keys){
$arm_formfields = $user_meta_keys;
if (!empty($arm_formfields)) {
$arm_meta_field_filters = '<tr class="arm_child_user_row">
<th>
'. esc_html__('Select field','ARMember').'
</th><td>';
$arm_meta_field_filters .= '
<div class="arm_filter_fields_box arm_datatable_filter_item">
<input type="hidden" id="arm_meta_field_filter" class="arm_meta_field_filter" value="0" />
<dl class="arm_selectbox arm_width_250">
<dt><span></span><input type="text" style="display:none;" value="" class="arm_autocomplete"/><i class="armfa armfa-caret-down armfa-lg"></i></dt>
<dd>
<ul data-id="arm_meta_field_filter" data-placeholder="'. esc_html__('Select field', 'ARMember').'">
<li data-label="'. esc_html__('Select field', 'ARMember').'" data-value="0">'. esc_html__('Select field', 'ARMember').'</li>';
foreach ($arm_formfields as $field_meta_key => $field_meta_value) {
$field_options = maybe_unserialize($field_meta_value);
$field_options = apply_filters('arm_change_field_options', $field_options);
$exclude_field_keys = array('user_pass','repeat_pass','arm_user_plan', 'arm_last_login_ip', 'arm_last_login_date', 'roles', 'section','repeat_pass', 'repeat_email', 'social_fields', 'avatar', 'profile_cover');
$field_meta_key = isset($field_options['meta_key']) ? $field_options['meta_key'] : $field_options['id'];
$field_meta_label = isset($field_options['label']) ? $field_options['label'] : '';
$field_type = isset($field_options['type']) ? $field_options['type'] : array();
if (!in_array($field_meta_key, $exclude_field_keys) && !in_array($field_type, array('section', 'roles', 'html', 'hidden', 'submit', 'repeat_pass', 'repeat_email'))) {
$arm_meta_field_filters .= '<li data-label="'. esc_attr($field_meta_label) .'" data-value="'. esc_attr($field_meta_key) .'">'. esc_html($field_meta_label) .'</li>';
}
}
$arm_meta_field_filters .= '</ul>
</dd>
</dl>
</div></td></tr>';
}
return $arm_meta_field_filters;
}
function arm_pro_bulk_actions_filter_data_func($filter_data){
global $armPrimaryStatus,$is_multiple_membership_feature;
$filter_data = '<ol>'. esc_html__('Change Status To','ARMember').'</ol>';
foreach($armPrimaryStatus as $armPrimaryStatus_key => $armPrimaryStatus_value)
{
$filter_data .= '<li data-label="'. esc_attr($armPrimaryStatus_value).' '. esc_attr__('User', 'ARMember').'" data-value="arm_user_status-'. esc_html($armPrimaryStatus_key) .'">'. esc_html($armPrimaryStatus_value) .' '. esc_html__('User', 'ARMember').'</li>';
}
if(!$is_multiple_membership_feature->isMultipleMembershipFeature)
{
$filter_data .= '<ol>'. esc_html__('Change Plan To', 'ARMember').'</ol>';
}
else {
$filter_data .= '<ol>'. esc_html__('Add Plan To', 'ARMember').'</ol>';
}
return $filter_data;
}
function arm_pro_actions_filter_data_func($filters_data){
global $arm_pay_per_post_feature,$armPrimaryStatus,$is_multiple_membership_feature;
$filters_data = '
<div class="arm_membership_plan_filters arm_members_field_filter">
'.esc_html__('Fields','ARMember').' <span class="arm_fields_filter_value"></span>
</div>
<div class="arm_membership_plan_filters arm_members_plan_filter">
'.esc_html__('Plan','ARMember').' <span class="arm_plan_filter_value"></span>
<div class="arm_tooltip arm_plan_tp hidden_section">
<div class="arm_tooltip_arrow"></div>
<span class="arm_plan_filter_value_tooltip"></span>
</div>
</div>
<div class="arm_membership_plan_filters arm_members_status_filter">
'.esc_html__('Status','ARMember').' <span class="arm_status_filter_value"></span>
</div>';
if($is_multiple_membership_feature->isMultipleMembershipFeature) {
$filters_data .= '
<div class="arm_membership_plan_filters arm_members_plan_type_filters">
'.esc_html__('Membership Types','ARMember').' <span class="arm_plan_type_filter_value arm-black-600"></span>
</div>';
}
return $filters_data;
}
function grid_column_paid_with_func($grid_column_paid_with)
{
global $is_multiple_membership_feature,$arm_pay_per_post_feature;
if($is_multiple_membership_feature->isMultipleMembershipFeature){
$grid_column_paid_with = false;
}
return $grid_column_paid_with;
}
function arm_pro_get_grid_arm_colvis_func($arm_colvis,$total_grid_column)
{
global $is_multiple_membership_feature,$arm_pay_per_post_feature;
if($is_multiple_membership_feature->isMultipleMembershipFeature){
$arm_colvis = ' 1, '.$total_grid_column;
}
return $arm_colvis;
}
function arm_pro_get_grid_exlcuded_colvis_func($arm_exclude_colvis,$total_grid_column)
{
global $is_multiple_membership_feature,$arm_pay_per_post_feature;
if($is_multiple_membership_feature->isMultipleMembershipFeature){
$arm_exclude_colvis = '0 , 1';
}
return $arm_exclude_colvis;
}
function arm_pro_get_grid_sortable_columns_func($grid_clmn,$total_grid_column){
global $is_multiple_membership_feature,$arm_pay_per_post_feature;
$grid_clmn = '';
if($is_multiple_membership_feature->isMultipleMembershipFeature){
$grid_column_paid_with = false;
$arm_colvis = ' 1, '.$total_grid_column;
$arm_exclude_colvis='0 , 1';
for( $i=0; $i < $total_grid_column; $i++ ) {
//if( $i == 3 || $i == 4 || $i ==5 || $i ==7 || $i == 8 || $i == 9 ) {
if( $i>=3 && $i<=12 ) {
if($arm_pay_per_post_feature->isPayPerPostFeature && $i!=6 && $i!=7){
continue;
}
else if($arm_pay_per_post_feature->isPayPerPostFeature && $i==7)
{
//need to skip i == 7 when the pay per post is enabled.
}
else if( $i == 3 || $i == 4 || $i ==5 || $i == 7 || $i == 8 || $i == 9 || $i == 10 || $i == 11) {
continue;
}
}
$grid_clmn .= $i . ",";
}
}
else{
for( $i=0; $i < $total_grid_column; $i++ ) {
if( $i>=2 && $i<=13 ) {
if($arm_pay_per_post_feature->isPayPerPostFeature && $i!=5 && $i!=6 && $i!=7 && $i!=9 ){
continue;
}
else if( $i == 2 || $i == 3 || $i == 4 || $i == 8 || $i == 9 || $i == 10 || $i == 11 || $i == 12 ) {
continue;
}
}
$grid_clmn .= $i . ",";
}
}
return $grid_clmn;
}
function arm_pro_get_default_grid_sort_columns_func($sort_clmn)
{
global $is_multiple_membership_feature,$arm_pay_per_post_feature;
if($is_multiple_membership_feature->isMultipleMembershipFeature){
$sort_clmn = 3;
}
return $sort_clmn;
}
function arm_members_grid_columns_func($grid_columns){
global $arm_pay_per_post_feature, $is_multiple_membership_feature;
$grid_columns = array(
'avatar' => esc_html__('Avatar', 'ARMember'),
'ID' => esc_html__('User ID', 'ARMember'),
'user_login' => esc_html__('Username', 'ARMember'),
'user_email' => esc_html__('Email Address', 'ARMember'),
'arm_user_plan_ids' => esc_html__('Member Plan', 'ARMember'),
);
if($arm_pay_per_post_feature->isPayPerPostFeature)
{
$grid_columns['arm_user_paid_plans'] = esc_html__('Paid Post(s)', 'ARMember');
}
$grid_columns['arm_primary_status'] = esc_html__('Status', 'ARMember');
if(!$is_multiple_membership_feature->isMultipleMembershipFeature){
$grid_columns['roles'] = esc_html__('User Role', 'ARMember');
}
$grid_columns['first_name'] = esc_html__('First Name', 'ARMember');
$grid_columns['last_name'] = esc_html__('Last Name', 'ARMember');
$grid_columns['display_name'] = esc_html__('Display Name', 'ARMember');
$grid_columns['user_registered'] = esc_html__('Joined Date', 'ARMember');
return $grid_columns;
}
function arm_update_entries_data_after_user_add($user_id, $posted_data){
global $wpdb, $ARMember, $arm_payment_gateways;
if(!empty($user_id) && !empty($posted_data) && is_array($posted_data)){
$arm_entry_id = !empty($posted_data['arm_entry_id']) ? $posted_data['arm_entry_id'] : 0;
if(!empty($arm_entry_id)){
$updt_qur_flag = 0;
$entry_data = $arm_payment_gateways->arm_get_entry_data_by_id($arm_entry_id);
$entry_values = !empty($entry_data['arm_entry_value']) ? maybe_unserialize($entry_data['arm_entry_value']) : array();
if(!empty($entry_values) && isset($entry_values['user_pass'])){
unset($entry_values['user_pass']);
$updt_qur_flag = 1;
}
if(!empty($entry_values) && isset($entry_values['repeat_pass'])){
unset($entry_values['repeat_pass']);
$updt_qur_flag = 1;
}
if(!empty($updt_qur_flag))
{
$arm_updated_entry_values = maybe_serialize($entry_values);
$wpdb->update($ARMember->tbl_arm_entries, array('arm_user_id' => $user_id, 'arm_entry_value' => $arm_updated_entry_values), array('arm_entry_id' => $arm_entry_id));
}
}
}
}
function arm_clear_debug_logs_data()
{
if(!empty($_POST) && !empty($_POST['arm_clear_debug_log_item']))//phpcs:ignore
{
global $wpdb, $ARMember, $arm_capabilities_global;
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_manage_general_settings'], '1',1);
$arm_clear_debug_log_item = sanitize_text_field( $_POST['arm_clear_debug_log_item'] );//phpcs:ignore
$arm_general_debug_log_selector_arr = array('cron','email');
$arm_general_debug_log_selector_arr = apply_filters('arm_debug_general_log_selector_external', $arm_general_debug_log_selector_arr);
if($arm_clear_debug_log_item=='optins' || in_array( $arm_clear_debug_log_item, $arm_general_debug_log_selector_arr ) )
{
$arm_clear_debu_log_where_qur = "";
if($arm_clear_debug_log_item=='optins')
{
foreach($arm_general_debug_log_selector_arr as $arm_general_debug_log_selector_val)
{
if( empty( $arm_clear_debu_log_where_qur ) )
{
$arm_clear_debu_log_where_qur = $wpdb->prepare(" `arm_general_log_event`!=%s ",$arm_general_debug_log_selector_val);
}
else
{
$arm_clear_debu_log_where_qur .= $wpdb->prepare(" AND `arm_general_log_event`!=%s ",$arm_general_debug_log_selector_val);
}
}
}
else {
$arm_clear_debu_log_where_qur = $wpdb->prepare(" arm_general_log_event=%s ",$arm_clear_debug_log_item);
}
$tbl_arm_debug_general_log = $ARMember->tbl_arm_debug_general_log;
//If data exists into general debug log table then delete from that table.
$wpdb->query( $wpdb->prepare( "DELETE FROM {$tbl_arm_debug_general_log} WHERE {$arm_clear_debu_log_where_qur} " ) );//phpcs:ignore --Reason $tbl_arm_debug_general_log is a table name
}
else
{
$tbl_arm_debug_payment_log = $ARMember->tbl_arm_debug_payment_log;
//If data exists into payment debug log table then delete from that table.
$arm_payment_log_gateway_where_qur = $wpdb->prepare(" arm_payment_log_gateway=%s ",$arm_clear_debug_log_item);
$wpdb->query( $wpdb->prepare( "DELETE FROM {$tbl_arm_debug_payment_log} WHERE {$arm_payment_log_gateway_where_qur} " ) );//phpcs:ignore --Reason $tbl_arm_debug_payment_log is a table name
}
$response = array('type' => 'success', 'msg' => esc_html__('Debug Logs cleared successfully', 'ARMember'));
echo arm_pattern_json_encode($response);
die();
}
}
function arm_save_debug_logs_settings()
{
global $wpdb, $ARMember, $arm_payment_gateways, $arm_email_settings, $arm_capabilities_global;
if(!empty($_POST))//phpcs:ignore
{
/*
* Update payment gateway settings for debug log
*/
$ARMember->arm_check_user_cap( $arm_capabilities_global['arm_manage_general_settings'], '1',1); //phpcs:ignore --Reason:Verifying nonce
$arm_payment_gateways = get_option('arm_payment_gateway_settings');
$posted_data = array_map( array( $ARMember, 'arm_recursive_sanitize_data'), $_POST ); //phpcs:ignore
$arm_posted_payment_gateway_data = !empty($posted_data['payment_gateway_settings']) ? $posted_data['payment_gateway_settings'] : array();
foreach($arm_payment_gateways as $arm_payment_gateway_key => $arm_payment_gateway_val)
{
if(!empty($arm_posted_payment_gateway_data[$arm_payment_gateway_key]['debug_log']))
{
$arm_payment_gateways[$arm_payment_gateway_key]['payment_debug_logs'] = 1;
}
else
{
$arm_payment_gateways[$arm_payment_gateway_key]['payment_debug_logs'] = 0;
}
}
$arm_payment_gateways = arm_array_map($arm_payment_gateways);
update_option('arm_payment_gateway_settings', $arm_payment_gateways);
/*
* Update Integrations settings for debug log
*/
$arm_get_integrations = apply_filters('arm_add_integration_debug_log_section',array());
if (!empty($arm_get_integrations)) {
$arm_integrations = array();
$arm_posted_integration_data = !empty($posted_data['arm_integration_settings']) ? $posted_data['arm_integration_settings'] : array();
$arm_integrations = arm_array_map($arm_posted_integration_data);
update_option('arm_integration_settings', $arm_integrations);
}
/*
* Update optins settings for debug log
*/
if($arm_email_settings->isOptInsFeature)
{
$arm_optins_debug_log = !empty($posted_data['arm_optins_debug_log']) ? 1 : 0;
update_option('arm_optins_debug_log', $arm_optins_debug_log);
}
/*
* Update cron log option
*/
$arm_is_cron_log_enabled = !empty($posted_data['arm_cron_debug_log']) ? 1 : 0;
update_option('arm_cron_debug_log', $arm_is_cron_log_enabled);
/*
* Update email log option
*/
$arm_is_email_log_enabled = !empty($posted_data['arm_email_debug_log']) ? 1 : 0;
update_option('arm_email_debug_log', $arm_is_email_log_enabled);
$response = array('type' => 'success', 'msg' => esc_html__('Debug Settings Saved Successfully', 'ARMember'));
echo arm_pattern_json_encode($response);
die();
}
}
function arm_user_plan_action($post_data=array(),$arm_return_data=false) {
global $wpdb, $ARMember, $arm_member_forms, $arm_manage_communication, $is_multiple_membership_feature, $arm_subscription_plans, $arm_members_class, $arm_global_settings, $arm_capabilities_global, $arm_pay_per_post_feature, $arm_subscription_cancel_msg;
if(empty($post_data)){
$post_data = $_POST;//phpcs:ignore
}
$response = array('type' => 'error', 'msg' => esc_html__("Sorry, Something went wrong. Please try again.", 'ARMember'));
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_manage_members'], '1',1);
$date_format = $arm_global_settings->arm_get_wp_date_format();
$defaultPlanData = $arm_subscription_plans->arm_default_plan_array();
if ($post_data['arm_action'] == 'add') {
$user_ID = isset($post_data['user_id']) ? intval($post_data['user_id']) : 0;
do_action('arm_modify_content_on_plan_change', $post_data, $user_ID);
if (!empty($user_ID)) {
if (!isset($post_data['arm_user_plan'])) {
$post_data['arm_user_plan'] = 0;
} else {
if (is_array($post_data['arm_user_plan'])) {
foreach ($post_data['arm_user_plan'] as $key => $mpid) {
if (empty($mpid)) {
unset($post_data['arm_user_plan'][$key]);
} else {
$post_data['arm_subscription_start_' . $mpid] = isset($post_data['arm_subscription_start_date'][$key]) ? $post_data['arm_subscription_start_date'][$key] : '';
}
}
unset($post_data['arm_subscription_start_date']);
$post_data['arm_user_plan'] = array_values($post_data['arm_user_plan']);
}
}
unset($post_data['arm_action']);
$post_data['arm_action'] = 'update_member';
$old_plan_ids = get_user_meta($user_ID, 'arm_user_plan_ids', true);
$old_plan_ids = !empty($old_plan_ids) ? $old_plan_ids : array();
$old_plan_id = isset($old_plan_ids[0]) ? $old_plan_ids[0] : 0;
if (!empty($old_plan_ids)) {
foreach ($old_plan_ids as $plan_id) {
$field_name = "arm_subscription_expiry_date_" . $plan_id . "_" . $user_ID;
if (isset($post_data[$field_name])) {
unset($post_data[$field_name]);
}
}
}
unset($post_data['user_id']);
$arm_old_suscribed_plans = "";
$is_paid_post = (!empty($_POST['arm_paid_post_request']) && ($_POST['arm_paid_post_request'] == 1)) ? 1 : 0; //phpcs:ignore
$is_gift_plan = (!empty($_POST['arm_gift_plan_request']) && ($_POST['arm_gift_plan_request'] == 1)) ? 1 : 0; //phpcs:ignore
if($is_gift_plan || $is_paid_post || $is_multiple_membership_feature->isMultipleMembershipFeature)
{
if(array_key_exists('arm_user_plan', $_POST))//phpcs:ignore
{
//Get Old Data Of Subscribed Plans
$arm_old_suscribed_plans = get_user_meta($user_ID, 'arm_user_plan_ids', true);
$arm_new_subscribed_data = array();
array_push($arm_new_subscribed_data, $post_data['arm_user_plan'][0]);
if(!empty($arm_old_suscribed_plans))
{
foreach($arm_old_suscribed_plans as $value)
{
if(!in_array($value, $arm_new_subscribed_data))
{
array_push($arm_new_subscribed_data, $value);
}
}
}
$post_data['arm_user_plan'] = $arm_new_subscribed_data;
}
}
$admin_save_flag = 1;
do_action('arm_member_update_meta', $user_ID, $post_data, $admin_save_flag);
if (isset($post_data['arm_user_plan']) && !empty($post_data['arm_user_plan'])) {
if ((is_array($post_data['arm_user_plan']) && $is_multiple_membership_feature->isMultipleMembershipFeature) || ($is_paid_post) || ($is_gift_plan)) {
$old_plan_ids = array_intersect($post_data['arm_user_plan'], $old_plan_ids);
foreach ($post_data['arm_user_plan'] as $plan_id) {
if (!in_array($plan_id, $old_plan_ids)) {
$arm_manage_communication->membership_communication_mail('on_new_subscription', $user_ID, $plan_id);
do_action('arm_after_user_plan_change_by_admin', $user_ID, $plan_id);
}
}
} else {
if ($old_plan_id != 0 && $old_plan_id != '') {
if ($old_plan_id != $post_data['arm_user_plan']) {
$arm_manage_communication->membership_communication_mail('on_change_subscription_by_admin', $user_ID, $post_data['arm_user_plan']);
}
} else {
$arm_manage_communication->membership_communication_mail('on_new_subscription', $user_ID, $post_data['arm_user_plan']);
}
do_action('arm_after_user_plan_change_by_admin', $user_ID, $post_data['arm_user_plan']);
}
}
$popup_plan_content = "";
if($is_paid_post)
{
$popup_plan_content = $arm_pay_per_post_feature->arm_get_paid_post_modal_plans($user_ID, 1, 5);
$response = array('type' => 'success', 'msg' => esc_html__("Paid Post added successfully.", 'ARMember'), 'content' => $popup_plan_content);
}
else
{
$popup_plan_content = $this->arm_get_user_all_plan_details($user_ID, false, $is_paid_post, $is_gift_plan);
$response = array('type' => 'success', 'msg' => esc_html__("Plan added successfully.", 'ARMember'), 'content' => $popup_plan_content);
}
$response = apply_filters('arm_modify_admin_plan_add_response', $response, $user_ID, $popup_plan_content, $post_data);
$response['arm_is_pro'] = 1;
}
} else if ($post_data['arm_action'] == 'delete') {
$user_ID = intval($post_data['user_id']);
$user = get_userdata($user_ID);
$plan_id = intval($post_data['plan_id']);
$planData = get_user_meta($user_ID, 'arm_user_plan_' . $plan_id, true);
$userPlanDatameta = !empty($planData) ? $planData : array();
$planData = shortcode_atts($defaultPlanData, $userPlanDatameta);
$plan_detail = $planData['arm_current_plan_detail'];
$planData['arm_cencelled_plan'] = 'yes';
update_user_meta($user_ID, 'arm_user_plan_' . $plan_id, $planData);
update_user_meta($user_ID, 'arm_user_old_plan_id', array($plan_id));
$is_paid_post = (!empty($_POST['arm_paid_post_request']) && ($_POST['arm_paid_post_request'] == 1)) ? 1 : 0; //phpcs:ignore
$is_gift_plan = (!empty($_POST['arm_gift_plan_request']) && ($_POST['arm_gift_plan_request'] == 1)) ? 1 : 0; //phpcs:ignore
if($is_paid_post)
{
//Update Post IDs Meta
$arm_user_post_ids = get_user_meta($user_ID, 'arm_user_post_ids', true);
unset($arm_user_post_ids[$plan_id]);
update_user_meta($user_ID, 'arm_user_post_ids', $arm_user_post_ids);
}
if (!empty($plan_detail)) {
$planObj = new ARM_Plan(0);
$planObj->init((object) $plan_detail);
} else {
$planObj = new ARM_Plan($plan_id);
}
if ($planObj->exists() && $planObj->is_recurring()) {
do_action('arm_cancel_subscription_gateway_action', $user_ID, $plan_id);
}
if(!empty($arm_subscription_cancel_msg))
{
$common_messages = isset($arm_global_settings->common_message) ? $arm_global_settings->common_message : array();
$arm_subscription_error = isset($common_messages['arm_payment_gateway_subscription_failed_error_msg']) ? $common_messages['arm_payment_gateway_subscription_failed_error_msg'] : esc_html__("Membership plan couldn't cancel due to not canceled subscription from payment gateway.", 'ARMember');
$response = array('type' => 'error', 'msg' => $arm_subscription_error, 'content' => '');
}
else
{
$arm_subscription_plans->arm_add_membership_history($user_ID, $plan_id, 'cancel_subscription', array(), 'admin');
do_action('arm_cancel_subscription', $user_ID, $plan_id);
$arm_subscription_plans->arm_clear_user_plan_detail($user_ID, $plan_id, $is_paid_post);
$cancel_plan_action = isset($planObj->options['cancel_plan_action']) ? $planObj->options['cancel_plan_action'] : 'immediate';
$user_future_plans = get_user_meta($user_ID, 'arm_user_future_plan_ids', true);
$user_future_plans = !empty($user_future_plans) ? $user_future_plans : array();
if (!empty($user_future_plans)) {
if (in_array($plan_id, $user_future_plans)) {
unset($user_future_plans[array_search($plan_id, $user_future_plans)]);
update_user_meta($user_ID, 'arm_user_future_plan_ids', array_values($user_future_plans));
}
}
$popup_plan_content = "";
if($is_paid_post)
{
$popup_plan_content = $arm_pay_per_post_feature->arm_get_paid_post_modal_plans($user_ID, 1, 5);
$response = array('type' => 'success', 'msg' => esc_html__("Paid Post deleted successfully.", 'ARMember'), 'content' => $popup_plan_content);
}
else
{
$popup_plan_content = $this->arm_get_user_all_plan_details($user_ID, false, $is_paid_post, $is_gift_plan);
$response = array('type' => 'success', 'msg' => esc_html__("Plan deleted successfully.", 'ARMember'), 'content' => $popup_plan_content);
}
$response = apply_filters('arm_modify_admin_plan_delete_response', $response, $user_ID, $popup_plan_content, $post_data);
}
} else if ($post_data['arm_action'] == 'status') {
$user_ID = intval($post_data['user_id']);
$user = get_userdata($user_ID);
$plan_id = intval($post_data['plan_id']);
$user_suspended_plans = get_user_meta($user_ID, 'arm_user_suspended_plan_ids', true);
$user_suspended_plans = !empty($user_suspended_plans) ? $user_suspended_plans : array();
if (!empty($user_suspended_plans)) {
if (in_array($plan_id, $user_suspended_plans)) {
unset($user_suspended_plans[array_search($plan_id, $user_suspended_plans)]);
update_user_meta($user_ID, 'arm_user_suspended_plan_ids', array_values($user_suspended_plans));
//update user meta for the keep record for admin has removed suspended plan.
update_user_meta($user_ID, 'arm_admin_user_remove_suspended_plan_'.$plan_id, current_time('mysql'));
$userPlanDatameta = get_user_meta($user_ID, 'arm_user_plan_' . $plan_id, true);
$planDataCheck = !empty($userPlanDatameta) ? $userPlanDatameta : array();
if(!empty($planDataCheck) && !empty($planDataCheck['arm_payment_mode']) && $planDataCheck['arm_payment_mode'] != 'manual_subscription' )
{
$payment_cycle = isset($planDataCheck['arm_payment_cycle']) ? $planDataCheck['arm_payment_cycle'] : 0;
$completed_recurrence = $planDataCheck['arm_completed_recurring'];
$completed_recurrence++;
$planDataCheck['arm_completed_recurring'] = $completed_recurrence;
update_user_meta($user_ID, 'arm_user_plan_' . $plan_id, $planDataCheck); //necessary to update this meta.
$arm_next_payment_date = $arm_members_class->arm_get_next_due_date($user_ID, $plan_id, false, $payment_cycle);
$planDataCheck['arm_next_due_payment'] = $arm_next_payment_date;
update_user_meta($user_ID, 'arm_user_plan_' . $plan_id, $planDataCheck);
}
//Hook for plan activation by admin
do_action('arm_after_user_plan_change_by_admin', $user_ID, $plan_id);
}
}
$is_paid_post = (!empty($_POST['arm_paid_post_request']) && ($_POST['arm_paid_post_request'] == 1)) ? 1 : 0; //phpcs:ignore
$popup_plan_content = "";
if($is_paid_post)
{
$popup_plan_content = $arm_pay_per_post_feature->arm_get_paid_post_modal_plans($user_ID, 1, 5);
$response = array('type' => 'success', 'msg' => esc_html__("Paid Post status changed successfully.", 'ARMember'), 'content' => $popup_plan_content);
}
else
{
$is_gift_plan = (!empty($_POST['arm_gift_plan_request']) && ($_POST['arm_gift_plan_request'] == 1)) ? 1 : 0;//phpcs:ignore
$popup_plan_content = $this->arm_get_user_all_plan_details($user_ID, false, $is_paid_post, $is_gift_plan);
$response = array('type' => 'success', 'msg' => esc_html__("Plan status changed successfully.", 'ARMember'), 'content' => $popup_plan_content);
}
$response = apply_filters('arm_modify_admin_plan_add_response', $response, $user_ID, $popup_plan_content, $post_data);
} else if ($post_data['arm_action'] == 'edit') {
$is_paid_post = (!empty($_POST['arm_paid_post_request']) && ($_POST['arm_paid_post_request'] == 1)) ? 1 : 0; //phpcs:ignore
$user_ID = intval($post_data['user_id']);
do_action('arm_plan_change_check_group_membership', $post_data, $user_ID);
$arm_changed_expiry_date_plan = get_user_meta($user_ID, 'arm_changed_expiry_date_plans', true);
$arm_changed_expiry_date_plan = !empty($arm_changed_expiry_date_plan) ? $arm_changed_expiry_date_plan : array();
if (isset($post_data['expiry_date']) && !empty($post_data['expiry_date'])) {
$user_plan_data = get_user_meta($user_ID, 'arm_user_plan_' . $post_data['plan_id'], true);
if ($user_plan_data['arm_expire_plan'] != strtotime($post_data['expiry_date'])) {
if (!in_array($post_data['plan_id'], $arm_changed_expiry_date_plan)) {
$arm_changed_expiry_date_plan[] = intval($post_data['plan_id']);
}
}
update_user_meta($user_ID, 'arm_changed_expiry_date_plans', $arm_changed_expiry_date_plan);
$user_plan_data['arm_expire_plan'] = strtotime(sanitize_text_field($post_data['expiry_date']));
update_user_meta($user_ID, 'arm_user_plan_' . $post_data['plan_id'], $user_plan_data);
$popup_plan_content = "";
if($is_paid_post)
{
$popup_plan_content = $arm_pay_per_post_feature->arm_get_paid_post_modal_plans($user_ID, 1, 5);
}
else
{
$is_gift_plan = (!empty($_POST['arm_gift_plan_request']) && ($_POST['arm_gift_plan_request'] == 1)) ? 1 : 0;//phpcs:ignore
$popup_plan_content = $this->arm_get_user_all_plan_details($user_ID, false, $is_paid_post, $is_gift_plan);
}
$popup_plan_content = apply_filters('arm_modify_admin_edit_popup_plan_content', $popup_plan_content, $user_ID, $post_data);
$response = array('type' => 'success', 'msg' => esc_html__("Expiry date updated successfully.", 'ARMember'), 'content' => $popup_plan_content);
}
}
if (isset($response['type']) && $response['type'] == 'success' && $user_ID > 0)
{
$userPlanIDs = get_user_meta($user_ID, 'arm_user_plan_ids', true);
if(!empty($userPlanIDs))
{
$userPostIDs = get_user_meta($user_ID, 'arm_user_post_ids', true);
foreach($userPlanIDs as $arm_plan_key => $arm_plan_val)
{
if(isset($userPostIDs[$arm_plan_val]) && in_array($userPostIDs[$arm_plan_val], $userPostIDs))
{
unset($userPlanIDs[$arm_plan_key]);
}
}
$userPlanIDs = apply_filters('arm_modify_plan_ids_externally',$userPlanIDs,$user_ID);
}
$arm_all_user_plans = $userPlanIDs;
$arm_future_user_plans = get_user_meta($user_ID, 'arm_user_future_plan_ids', true);
if (!empty($arm_future_user_plans) && is_array($arm_future_user_plans) && is_array($userPlanIDs)) {
$arm_all_user_plans = array_merge($userPlanIDs, $arm_future_user_plans);
}
$arm_user_plans = '';
$plan_names = array();
$subscription_effective_from = array();
if (!empty($arm_all_user_plans) && is_array($arm_all_user_plans)) {
foreach ($arm_all_user_plans as $userPlanID) {
$plan_data = get_user_meta($user_ID, 'arm_user_plan_' . $userPlanID, true);
$userPlanDatameta = !empty($plan_data) ? $plan_data : array();
$plan_data = shortcode_atts($defaultPlanData, $userPlanDatameta);
$subscription_effective_from_date = $plan_data['arm_subscr_effective'];
$change_plan_to = $plan_data['arm_change_plan_to'];
$plan_names[$userPlanID] = $arm_subscription_plans->arm_get_plan_name_by_id($userPlanID);
$subscription_effective_from[] = array('arm_subscr_effective' => $subscription_effective_from_date, 'arm_change_plan_to' => $change_plan_to);
}
}
if ($arm_pay_per_post_feature->isPayPerPostFeature) {
$response['paid_post'] = '1';
}
else
{
$response['paid_post'] = '0';
}
if ($is_multiple_membership_feature->isMultipleMembershipFeature) {
$response['multiple_membership'] = '1';
$arm_user_plans = '<div class="arm_min_width_120">';
$arm_user_plans .= "<a href='javascript:void(0)' id='arm_show_user_more_plans_" . esc_attr($user_ID) . "' class='arm_show_user_more_plans' data-id='" . esc_attr($user_ID) . "'>";
if (!empty($arm_all_user_plans) && is_array($arm_all_user_plans)) {
foreach ($arm_all_user_plans as $plan_id) {
$plan_color_id = ($plan_id > 10) ? intval($plan_id / 10) : $plan_id;
$plan_color_id = ($plan_color_id > 10) ? intval($plan_color_id / 10) : $plan_color_id;
$arm_user_plans .= "<span class='armhelptip arm_user_plan_circle arm_user_plan_" . $plan_color_id . "' title='" . stripslashes_deep($plan_names[$plan_id]) . "' >";
$plan_name = str_replace('-', '', stripslashes_deep($plan_names[$plan_id]));
$words = explode(" ", $plan_name);
$plan_name = '';
foreach ($words as $w) {
$w = preg_replace('/[^A-Za-z0-9\-]/', '', $w);
$plan_name .= mb_substr($w, 0, 1, 'utf-8');
}
$plan_name = strtoupper($plan_name);
$arm_user_plans .= substr($plan_name, 0, 2);
$arm_user_plans .= "</span>";
}
}
$arm_user_plans .= "</a></div>";
$response['membership_plan'] = $arm_user_plans;
} else {
$response['multiple_membership'] = '0';
$auser = new WP_User($user_ID);
$u_role = array_shift($auser->roles);
$user_roles = get_editable_roles();
if (!empty($user_roles[$u_role]['name'])) {
$arm_user_role = $user_roles[$u_role]['name'];
} else {
$arm_user_role = '-';
}
$response['user_role'] = $arm_user_role;
$memberTypeText = $arm_members_class->arm_get_member_type_text($user_ID);
$response['membership_type'] = $memberTypeText;
$plan_name = (!empty($plan_names)) ? implode(',', $plan_names) : '-';
$response['membership_plan'] = '<span class="arm_user_plan_' . esc_attr($user_ID) . '">' . esc_html($plan_name) . '</span>';
if (!empty($subscription_effective_from)) {
foreach ($subscription_effective_from as $subscription_effective) {
$subscr_effective = $subscription_effective['arm_subscr_effective'];
$change_plan = $subscription_effective['arm_change_plan_to'];
$change_plan_name = $arm_subscription_plans->arm_get_plan_name_by_id($change_plan);
if (!empty($change_plan) && $subscr_effective > strtotime($nowDate)) {
$response['membership_plan'] .= '<div>' . esc_html($change_plan_name) . '<br/> (' . esc_html__('Effective from', 'ARMember') . ' ' . date_i18n($date_format, $subscr_effective) . ')</div>';
}
}
}
}
if (isset($post_data['arm_action']) && $post_data['arm_action'] == 'delete') {
do_action('arm_after_cancel_subscription', $user_ID, $planObj, $cancel_plan_action, $planData);
}
}
if(!empty($arm_return_data)){
return $response;
}
else{
echo arm_pattern_json_encode($response);
exit;
}
}
function arm_get_user_plan_failed_payment_details() {
global $ARMember, $wpdb, $arm_global_settings, $arm_payment_gateways,$ARMember,$arm_capabilities_global,$arm_ajax_pattern_start,$arm_ajax_pattern_end;
if (isset($_POST['user_id']) && !empty($_POST['user_id']) && isset($_POST['plan_id']) && !empty($_POST['plan_id'])) {//phpcs:ignore
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_manage_members'], '1',1); //phpcs:ignore --Reason:Verifying nonce
$user_id = intval( $_POST['user_id'] );//phpcs:ignore
$plan_id = intval( $_POST['plan_id'] );//phpcs:ignore
$plan_name = sanitize_text_field( $_POST['plan_name'] );//phpcs:ignore
$global_currency = $arm_payment_gateways->arm_get_global_currency();
$start = sanitize_text_field( $_POST['start'] );//phpcs:ignore
$date_format = $arm_global_settings->arm_get_wp_date_format();
if (!empty($start)) {
$start = date('Y-m-d H:i:s', $start);
}
$arm_failed_transaction = $wpdb->get_results($wpdb->prepare("SELECT `arm_payment_date`, `arm_amount`, `arm_currency`, `arm_payment_gateway`, `arm_payment_mode` FROM `" . $ARMember->tbl_arm_payment_log . "` WHERE `arm_user_id`=%d AND `arm_plan_id`=%d AND `arm_payment_date`>=%s AND `arm_transaction_status` =%s", $user_id, $plan_id, $start, 'failed')); //phpcs:ignore --Reason $ARMember->tbl_arm_payment_log is a table name
$return = '';
$return .= '<table class="form-table arm_failed_login_history_table">';
$return .= '<tr>';
$return .= '<td>' . esc_html__('Payment Date', 'ARMember') . '</td>';
$return .= '<td>' . esc_html__('Amount', 'ARMember') . '</td>';
$return .= '<td>' . esc_html__('Payment Mode', 'ARMember') . '</td>';
$return .= '<td>' . esc_html__('Payment Gateway', 'ARMember') . '</td>';
$return .= '</tr>';
if (!empty($arm_failed_transaction)) {
foreach ($arm_failed_transaction as $arm_failed_transaction_data) {
$return .= '<tr class="arm_failed_login_history_data">';
$return .= '<td>' . date_i18n($date_format, strtotime($arm_failed_transaction_data->arm_payment_date)) . '</td>';
$return .= '<td>' . $arm_payment_gateways->arm_amount_set_separator($arm_failed_transaction_data->arm_currency, $arm_failed_transaction_data->arm_amount) . ' ' . strtoupper($arm_failed_transaction_data->arm_currency) . '</td>';
if ($arm_failed_transaction_data->arm_payment_gateway == '') {
$payment_gateway = esc_html__('Manual', 'ARMember');
} else {
$payment_gateway = $arm_payment_gateways->arm_gateway_name_by_key($arm_failed_transaction_data->arm_payment_gateway);
}
if ($arm_failed_transaction_data->arm_payment_mode == 'manual_subscription') {
$arm_payment_mode = esc_html__('Manual', 'ARMember');
} else {
$arm_payment_mode = esc_html__('Auto Debit', 'ARMember');
}
$return .= '<td>' . $arm_payment_mode . '</td>';
$return .= '<td>' . $payment_gateway . '</td>';
$return .= '</tr>';
}
}
$return .= '<table>';
echo $arm_ajax_pattern_start.''.$return . '^|^' . $plan_name.''.$arm_ajax_pattern_end; //phpcs:ignore
die;
}
}
function arm_get_user_all_plan_details($user_id = 0, $is_ajax = true, $is_paid_post = false, $is_gift_plan = false) {
global $arm_global_settings, $ARMember, $arm_capabilities_global, $arm_pay_per_post_feature,$arm_ajax_pattern_start,$arm_ajax_pattern_end,$arm_common_lite;
$arm_common_date_format = $arm_global_settings->arm_check_common_date_format(get_option('date_format'));
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_manage_members'], '1',1);//phpcs:ignore --Reason:Verifying nonce
$date_format = $arm_global_settings->arm_get_wp_date_format();
$user_name = '';
if (isset($_POST['user_id']) && $_POST['user_id'] != '') {//phpcs:ignore
$user_id = intval($_POST['user_id']);//phpcs:ignore
$arm_user_info = get_userdata($user_id);
$user_name = $arm_user_info->user_login;
$u_roles = $arm_user_info->roles;
}
global $arm_global_settings, $arm_subscription_plans, $is_multiple_membership_feature;
$return = '';
if (!empty($user_id)) {
$planIDs = get_user_meta($user_id, 'arm_user_plan_ids', true);
$planIDs = !empty($planIDs) ? $planIDs : array();
$user_future_plan_ids = get_user_meta($user_id, 'arm_user_future_plan_ids', true);
$user_future_plan_ids = !empty($user_future_plan_ids) ? $user_future_plan_ids : array();
$futurePlanIDs = get_user_meta($user_id, 'arm_user_future_plan_ids', true);
$futurePlanIDs = !empty($futurePlanIDs) ? $futurePlanIDs : array();
$plansLists = "";
$all_plan_ids = array();
if($is_paid_post)
{
$all_subscription_plans = $arm_subscription_plans->arm_get_plans_data();
if (!empty($all_subscription_plans)) {
foreach ($all_subscription_plans as $p) {
if($p['arm_subscription_plan_post_id'] != 0)
{
$all_plan_ids[] = $p['arm_subscription_plan_id'];
}
}
}
$plansLists = '<li data-label="' . esc_attr__('Select Post', 'ARMember') . '" data-value="">' . esc_html__('Select Post', 'ARMember') . '</li>';
if (!empty($all_subscription_plans)) {
foreach ($all_subscription_plans as $p) {
if($p['arm_subscription_plan_post_id'] != 0 && (!in_array($p['arm_subscription_plan_id'], $planIDs)))
{
$p_id = $p['arm_subscription_plan_id'];
$plansLists .= '<li data-label="' . stripslashes(esc_attr($p['arm_subscription_plan_name'])) . '" data-value="' . $p_id . '">' . stripslashes(esc_attr($p['arm_subscription_plan_name'])) . '</li>';
}
}
}
}
else
{
$all_active_plans = $arm_subscription_plans->arm_get_all_active_subscription_plans();
if (!empty($all_active_plans)) {
foreach ($all_active_plans as $p) {
$all_plan_ids[] = $p['arm_subscription_plan_id'];
}
}
$plan_to_show = array_diff($all_plan_ids, $planIDs);
$plan_to_show = array_diff($plan_to_show, $futurePlanIDs);
$plansLists = '<li data-label="' . esc_attr__('Select Plan', 'ARMember') . '" data-value="">' . esc_html__('Select Plan', 'ARMember') . '</li>';
if (!empty($all_active_plans)) {
foreach ($all_active_plans as $p) {
$p_id = $p['arm_subscription_plan_id'];
if (in_array($p_id, $plan_to_show)) {
$plansLists .= '<li data-label="' . stripslashes(esc_attr($p['arm_subscription_plan_name'])) . '" data-value="' . $p_id . '">' . stripslashes(esc_attr($p['arm_subscription_plan_name'])) . '</li>';
}
}
}
}
if ($is_multiple_membership_feature->isMultipleMembershipFeature || $is_paid_post) {
$return .= ($is_paid_post) ? '<div class="arm_add_new_item_box arm_add_new_plan arm_margin_right_0"><a id="arm_add_plan_to_user" class="greensavebtn arm_save_btn arm_margin_right_12" href="javascript:void(0)" ><img align="absmiddle" src="' . MEMBERSHIPLITE_IMAGES_URL . '/add_new_icon.svg"><span> ' . esc_html__('Add Post', 'ARMember') . '</span></a></div>' : '<div class="arm_add_new_item_box arm_add_new_plan arm_margin_right_0"><a id="arm_add_plan_to_user" class="greensavebtn arm_save_btn arm_margin_right_12" href="javascript:void(0)" ><img align="absmiddle" src="' . MEMBERSHIPLITE_IMAGES_URL . '/add_new_icon.svg"><span> ' . esc_html__('Add Plan', 'ARMember') . '</span></a></div>';
} else {
$return .= ($is_paid_post) ? '<div class="arm_add_new_item_box arm_add_new_plan"><a id="arm_change_plan_to_user" class="greensavebtn arm_save_btn arm_margin_right_0" href="javascript:void(0)" ><img align="absmiddle" src="' . MEMBERSHIPLITE_IMAGES_URL . '/add_new_icon.svg"><span> ' . esc_html__('Add Post', 'ARMember') . '</span></a></div>' : '<div class="arm_add_new_item_box arm_add_new_plan"><a id="arm_change_plan_to_user" class="greensavebtn arm_save_btn arm_margin_right_10" href="javascript:void(0)" ><img align="absmiddle" src="' . MEMBERSHIPLITE_IMAGES_URL . '/add_new_icon.svg"><span> ' . esc_html__('Change Plan', 'ARMember') . '</span></a></div>';
}
$return .= '<div class="popup_content_text arm_add_plan arm_text_align_center" style="display:none;">';
$return .= '<div class="arm_edit_plan_wrapper arm_margin_top_15 arm_position_relative" >';
$return .= ($is_paid_post) ? '<span class="arm_edit_plan_lbl">' . esc_html__('Select Post', 'ARMember') . '*</span> ' : '<span class="arm_edit_plan_lbl arm_margin_bottom_12">' . esc_html__('Select Plan', 'ARMember') . '*</span> ';
$return .= '<div class="arm_edit_field arm_max_width_100_pct">';
if ($is_multiple_membership_feature->isMultipleMembershipFeature || $is_paid_post) {
$return .= '<input type="hidden" class="arm_user_plan_change_input arm_user_plan_change_input_get_cycle" name="arm_user_plan[]" id="arm_user_popup_plan" value="" data-manage-plan-grid="1"/>';
} else {
$return .= '<input type="hidden" class="arm_user_plan_change_input arm_user_plan_change_input_get_cycle" name="arm_user_plan" id="arm_user_popup_plan" value="" data-manage-plan-grid="1"/>';
}
$return .= '<dl class="arm_selectbox column_level_dd arm_member_form_dropdown arm_float_left arm_width_100_pct" >';
$return .= '<dt class="arm_width_100_pct arm_max_width_100_pct"><span></span><input type="text" style="display:none;" value="" class="arm_autocomplete"/><i class="armfa armfa-caret-down armfa-lg"></i></dt>';
$return .= '<dd><ul data-id="arm_user_popup_plan">' . $plansLists . '</ul></dd>';
$return .= '</dl>';
$return .= ($is_paid_post) ? '<br/><span class="arm_error_select_plan error arm_invalid arm_text_align_left" style="display:none; ">' . esc_html__('Please select Post.', 'ARMember') . '</span>' : '<br/><span class="arm_error_select_plan error arm_invalid arm_text_align_left" style="display:none; ">' . esc_html__('Please select Plan.', 'ARMember') . '</span>';
$return .= '</div>';
$return .= '</div>';
$return .= '<div class="arm_selected_plan_cycle arm_position_relative">';
$return .= '</div>';
$return .= '<div class="arm_position_relative">';
$return .= ($is_paid_post) ? '<span class="arm_edit_plan_lbl">' . esc_html__('Post Start Date', 'ARMember') . '</span>' : '<span class="arm_edit_plan_lbl arm_margin_top_28 arm_margin_bottom_12">' . esc_html__('Plan Start Date', 'ARMember') . '</span>';
$return .= '<div class="arm_edit_field">';
if ($is_multiple_membership_feature->isMultipleMembershipFeature || $is_paid_post) {
$return .= '<input type="text" value="' . date($arm_common_date_format, strtotime(date('Y-m-d'))) . '" data-date_format="'.$arm_common_date_format.'" name="arm_subscription_start_date[]" class="arm_datepicker arm_member_form_input arm_user_add_plan_date_picker arm_width_100_pct arm_min_width_500" />';
} else {
$return .= '<input type="text" value="' . date($arm_common_date_format, strtotime(date('Y-m-d'))) . '" data-date_format="'.$arm_common_date_format.'" name="arm_subscription_start_date" class="arm_datepicker arm_member_form_input arm_user_add_plan_date_picker arm_width_100_pct arm_min_width_500" />';
}
$return .= '</div>';
$return .= '</div>';
$return .= '<div class="arm_position_relative arm_margin_top_28 arm_display_block arm_float_right
">';
$return .= '<span class="arm_edit_plan_lbl"> </span>';
$return .= '<div class="arm_edit_field">';
$arm_btn_save_class = ($is_paid_post) ? 'arm_member_add_paid_plan_save_btn arm_margin_right_10' : 'arm_member_add_plan_save_btn arm_margin_right_10';
if ($is_multiple_membership_feature->isMultipleMembershipFeature || $is_paid_post) {
$return .= '<button class="arm_add_plan_cancel_btn arm_cancel_btn" type="button">' . esc_html__('Close', 'ARMember') . '</button>';
} else {
$return .= '<button class="arm_add_plan_cancel_single_btn arm_cancel_btn" type="button">' . esc_html__('Close', 'ARMember') . '</button>';
}
$return .= '<button class="'.$arm_btn_save_class.' arm_save_btn arm_margin_right_0">' . esc_html__('Save', 'ARMember') . '</button>';
$return .= '<img src="' . MEMBERSHIPLITE_IMAGES_URL . '/arm_loader.gif" class="arm_loader_img_user_add_plan arm_submit_btn_loader" style="position:absolute;top:8px;display:none;left:-30px;" width="24" height="24" />';
$return .= '</div>';
$return .= '</div>';
$return .= '</div>';
$user_plans = $planIDs;
if ((!empty($u_roles) && $is_multiple_membership_feature->isMultipleMembershipFeature) || ($is_paid_post)) {
foreach ($u_roles as $ur) {
$return .= '<input type="hidden" name="roles[]" value="' . esc_attr($ur) . '"/>';
}
}
$return .= '<div class="arm_loading_grid arm_plan_loading_grid" style="display: none;">'.$arm_common_lite->arm_loader_img_func().'</div>';
$return .= '<table class="arm_user_edit_plan_table arm_text_align_center" cellspacing="1">';
$return .= '<tr class="arm_user_plan_row arm_user_plan_head odd">';
$return .= ($is_paid_post) ? '<th class="arm_edit_plan_name">' . esc_html__('Post', 'ARMember') . '</th>' : '<th class="arm_edit_plan_name">' . esc_html__('Plan', 'ARMember') . '</th>';
$return .= '<th class="arm_edit_plan_type">' . esc_html__('Post Type', 'ARMember') . '</th>';
$return .= '<th class="arm_edit_plan_start">' . esc_html__('Starts Date', 'ARMember') . '</th>';
$return .= '<th class="arm_edit_plan_expire">' . esc_html__('Expire Date', 'ARMember') . '</th>';
$return .= '<th class="arm_edit_plan_cycle_date">' . esc_html__('Cycle Date', 'ARMember') . '</th>';
$return .= '<th class="arm_edit_plan_action"></th>';
$return .= '</tr>';
if (!empty($user_future_plan_ids)) {
$all_user_plans = array_merge($user_plans, $user_future_plan_ids);
} else {
$all_user_plans = $user_plans;
}
$all_user_plans = apply_filters('arm_modify_plan_ids_externally', $all_user_plans, $user_id);
$arm_all_user_plans = array();
foreach ($all_user_plans as $uplans) {
if(in_array( $uplans,$all_plan_ids))
{
$arm_all_user_plans[] = $uplans;
}
}
$all_user_plans = $arm_all_user_plans;
if (!empty($all_user_plans)) {
$count_plan = 0;
foreach ($all_user_plans as $uplans) {
$count_plan++;
$planData = get_user_meta($user_id, 'arm_user_plan_' . $uplans, true);
$arm_plan_condition = "";
if($arm_pay_per_post_feature->isPayPerPostFeature)
{
if($is_paid_post)
{
$arm_plan_condition = (!empty($planData) && (isset($planData['arm_current_plan_detail']) && !empty($planData['arm_current_plan_detail']) && ($planData['arm_current_plan_detail']['arm_subscription_plan_post_id'] != 0)));
}
else
{
$arm_plan_condition = (!empty($planData) && (isset($planData['arm_current_plan_detail']) && !empty($planData['arm_current_plan_detail']) && ($planData['arm_current_plan_detail']['arm_subscription_plan_post_id'] == 0)));
if($arm_plan_condition && $is_gift_plan)
{
$arm_plan_condition = (!empty($planData) && (isset($planData['arm_current_plan_detail']) && !empty($planData['arm_current_plan_detail']) && ($planData['arm_current_plan_detail']['arm_subscription_plan_gift_status'] == 0)));
}
}
}
else
{
$arm_plan_condition = !empty($planData);
if($is_gift_plan)
{
$arm_plan_condition = (!empty($planData) && (isset($planData['arm_current_plan_detail']) && !empty($planData['arm_current_plan_detail']) && ($planData['arm_current_plan_detail']['arm_subscription_plan_gift_status'] == 0)));
}
}
if($arm_plan_condition)
{
$planDetail = $planData['arm_current_plan_detail'];
$payment_cycle = $planData['arm_payment_cycle'];
$plan_start_date = (isset($planData['arm_start_plan']) && !empty($planData['arm_start_plan'])) ? date('m/d/Y', $planData['arm_start_plan']) : date('m/d/Y');
if (!empty($planDetail)) {
$planObj = new ARM_Plan(0);
$planObj->init((object) $planDetail);
} else {
$planObj = new ARM_Plan($uplans);
}
$plan_name = isset($planDetail['arm_subscription_plan_name']) ? $planDetail['arm_subscription_plan_name'] : '';
$recurring_profile = $planObj->new_user_plan_text(false, $payment_cycle);
$arm_plan_is_suspended = '';
$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($suspended_plan_ids)) {
if (in_array($uplans, $suspended_plan_ids)) {
$arm_plan_is_suspended = '<div class="arm_manage_plan_status_div arm_position_relative">';
$arm_plan_is_suspended .= '<span style="color: #ec4444;">(' . esc_html__('Suspended', 'ARMember') . ')</span>';
$arm_plan_is_suspended .= '<img src="' . MEMBERSHIPLITE_IMAGES_URL . '/grid_edit_hover_trns.png" title="' . esc_attr__('Activate Plan', 'ARMember') . '" class="armhelptip tipso_style" width="26" data-plan_id="' . esc_attr($uplans) . '" data-user_id="' . esc_attr($user_id) . '" onclick="showConfirmBoxCallback_plan(\'status_' . $uplans . '\');" style="margin: -5px 0; position: absolute; "/>';
$arm_plan_is_suspended .= "<div class='arm_confirm_box arm_confirm_box_status_".esc_attr($uplans)."' id='arm_confirm_box_plan_status_".esc_attr($uplans)."' style='right: 0;'>";
$arm_plan_is_suspended .= "<div class='arm_confirm_box_body'>";
$arm_plan_is_suspended .= "<div class='arm_confirm_box_arrow'></div>";
$arm_plan_is_suspended .= "<div class='arm_confirm_box_text_title'>". esc_html__("Activate Plan", 'ARMember')."</div>";
$arm_plan_is_suspended .= "<div class='arm_confirm_box_text'>" . esc_html__("Are you sure you want to activate", 'ARMember') . ' ' . esc_html($plan_name) . ' ' . esc_html__("plan for this user?", 'ARMember') . "</div>";
$arm_plan_is_suspended .= "<div class='arm_confirm_box_btn_container'>";
$arm_plan_is_suspended .= "<button type='button' class='arm_confirm_box_btn armcancel' onclick='hideConfirmBoxCallback();'>" . esc_html__('Cancel', 'ARMember') . "</button>";
$arm_plan_is_suspended .= "<button type='button' class='arm_confirm_box_btn armok arm_plan_status_change arm_margin_right_0' data-item_id='".esc_attr($uplans)."'>" . esc_html__('Activate', 'ARMember') . "</button>";
$arm_plan_is_suspended .= "</div>";
$arm_plan_is_suspended .= "</div>";
$arm_plan_is_suspended .= "</div></div>";
}
}
$arm_next_due_date = (isset($planData['arm_next_due_payment']) && !empty($planData['arm_next_due_payment']) ) ? date_i18n($date_format, $planData['arm_next_due_payment']) : '-';
if ($planObj->is_recurring()) {
$recurring_plan_options = $planObj->prepare_recurring_data($payment_cycle);
$recurring_time = $recurring_plan_options['rec_time'];
$completed = $planData['arm_completed_recurring'];
if ($recurring_time == 'infinite' || empty($planData['arm_expire_plan'])) {
$remaining_occurence = esc_html__('Never Expires', 'ARMember');
} else {
$remaining_occurence = $recurring_time - $completed;
}
if (!empty($planData['arm_expire_plan'])) {
if ($remaining_occurence == 0) {
$arm_next_due_date = esc_html__('No cycles due', 'ARMember');
} else {
$arm_next_due_date .= "<br/>( " . $remaining_occurence . esc_html__(' cycles due', 'ARMember') . " )";
}
}
}
$expiry_date = (isset($planData['arm_expire_plan']) && !empty($planData['arm_expire_plan'])) ? $planData['arm_expire_plan'] : '';
$arm_edit_plan = '';
$arm_delete_plan = $future_plan_label = '';
if ($is_multiple_membership_feature->isMultipleMembershipFeature || ($is_paid_post)) {
if (in_array($uplans, $user_future_plan_ids)) {
$arm_delete_plan .= '<input type="hidden" name="arm_user_future_plan[]" value="' . esc_attr($uplans) . '"/>';
} else {
$arm_delete_plan .= '<input type="hidden" name="arm_subscription_start_date[]" value="' . esc_attr($plan_start_date) . '"/>';
$arm_delete_plan .= '<input type="hidden" name="arm_user_plan[]" value="' . esc_attr($uplans) . '"/>';
}
}
if (in_array($uplans, $user_future_plan_ids)) {
$future_plan_label = '<br/><span class="arm_future_plan_label">('. esc_html__('Future Membership','ARMember') . ')</span>';
}
$arm_delete_plan .= '<div class="arm_position_relative">';
$arm_delete_plan .= '<img src="' . MEMBERSHIPLITE_IMAGES_URL . '/grid_delete_icon_trans.svg" title="' . esc_attr__('Delete Plan', 'ARMember') . '" class="arm_edit_plan_action_button armhelptip tipso_style" id="arm_member_delete_plan" data-plan_id="' . esc_attr($uplans) . '" data-user_id="' . esc_attr($user_id) . '" onclick="showConfirmBoxCallback_plan(' . $uplans . ');"/>';
$confirmBoxStyle = 'right: -5px;';
$confirmBox = "<div class='arm_confirm_box arm_confirm_box_".esc_attr($uplans)."' id='arm_confirm_box_plan_".esc_attr($uplans)."' style='".$confirmBoxStyle."'>";
$confirmBox .= "<div class='arm_confirm_box_body'>";
$confirmBox .= "<div class='arm_confirm_box_arrow'></div>";
$confirmBox .= "<div class='arm_confirm_box_text_title'>".esc_html__( 'Delete', 'ARMember' )."</div>";
$confirmBox .= "<div class='arm_confirm_box_text'>" . esc_html__("Are you sure you want to delete this plan from user?", 'ARMember') . "</div>";
$confirmBox .= "<div class='arm_confirm_box_btn_container'>";
$arm_member_delete_btn_class = ($is_paid_post) ? 'arm_member_paid_plan_delete_btn' : 'arm_member_plan_delete_btn' ;
$confirmBox .= "<button type='button' class='arm_confirm_box_btn armcancel' onclick='hideConfirmBoxCallback();'>" . esc_html__('Cancel', 'ARMember') . "</button>";
$confirmBox .= "<button type='button' class='arm_confirm_box_btn armok ".esc_attr($arm_member_delete_btn_class)."' data-item_id='".esc_attr($uplans)."'>" . esc_html__('Delete', 'ARMember') . "</button>";
$confirmBox .= "</div>";
$confirmBox .= "</div>";
$confirmBox .= "</div>";
$confirmBox .= "</div>";
$arm_delete_plan .= $confirmBox;
$arm_edit_plan_text_box = '';
if ($expiry_date != '') {
$arm_edit_plan_text_box = '<input value="' . esc_attr( date('m/d/Y', $expiry_date) ) . '" name="arm_subscription_expiry_date_' . esc_attr($uplans) . '_' . esc_attr($user_id) . '" id="arm_subscription_expiry_date_' . esc_attr($uplans) . '_' . esc_attr($user_id) . '" class="arm_datepicker arm_expire_date arm_edit_plan_expire_date arm_width_100 arm_min_width_100" aria-invalid="false" type="text">';
$arm_edit_plan .= "<a class='arm_member_edit_plan' >"
. "<img src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_edit_hover_trns.png' style='position: absolute; margin: -4px 0 0 5px; cursor: pointer;' width='26' title='" . esc_attr__('Change Expiry Date', 'ARMember') . "' class='armhelptip tipso_style'/>"
. "</a>";
$arm_edit_plan .= "<img src='" . MEMBERSHIPLITE_IMAGES_URL . "/arm_save_icon.png' style='display:none;' width='14' height='16' title='" . esc_attr__('Save Expiry Date', 'ARMember') . "' class='arm_edit_plan_action_button arm_member_save_plan armhelptip tipso_style arm_vertical_align_middle' data-plan_id='" . esc_attr($uplans) . "' data-user_id='" . esc_attr($user_id) . "' /> ";
$arm_edit_plan .= "<img src='" . MEMBERSHIPLITE_IMAGES_URL . "/cancel_date_icon.png' style='display:none;' width='14' height='16' title='" . esc_attr__('Cancel', 'ARMember') . "' class='arm_edit_plan_action_button arm_member_cancel_save_plan armhelptip tipso_style' data-plan_id='" . esc_attr($uplans) . "' data-user_id='" . esc_attr($user_id) . "' data-plan-expire-date='" . date('m/d/Y', $expiry_date) . "' /> ";
$arm_edit_plan .= '<img src="' . MEMBERSHIPLITE_IMAGES_URL . '/arm_loader.gif" class="arm_edit_user_plan_loader arm_vertical_align_middle arm_margin_left_10" style="display:none;" width="17" height="18" />';
}
$additional_plan_label = '';
$additional_plan_label = apply_filters('arm_content_after_membership_plan_name_external', $additional_plan_label, $user_id, $uplans, $planData);
$expire_date = ($expiry_date != '') ? date_i18n($date_format, $expiry_date) : esc_html__('Never Expires', 'ARMember');
$row_class = ($count_plan % 2 == 0) ? 'odd' : 'even';
$return .= '<tr class="arm_user_plan_row ' . esc_attr($row_class) . '">';
$return .= '<td class="arm_edit_plan_name" >' . esc_html($plan_name) . ' ' . $future_plan_label. ' ' . $arm_plan_is_suspended . ' ' . $additional_plan_label . '</td>';
$return .= '<td class="arm_edit_plan_type" >' . $recurring_profile;
$return .= '</td>';
$return .= '<td class="arm_edit_plan_start" >' . date_i18n($date_format, $planData['arm_start_plan']);
$nowTime = strtotime(current_time('mysql'));
if (!empty($planData['arm_is_trial_plan'])) {
if ($planData['arm_trial_start'] < $planData['arm_start_plan'] && $nowTime < $planData['arm_trial_end']) {
$return .= "<br/><span style='color: green;'>(" . esc_html__('trial active', 'ARMember') . ")</span>";
}
}
$return .= '</td>';
$return .= '<td class="arm_edit_plan_expiry" >'
. '<span id="arm_expiry_date_lbl">' . esc_attr($expire_date) . '</span>'
. '<span id="arm_expiry_date_input" style="display:none;">' . $arm_edit_plan_text_box . '</span>'
. $arm_edit_plan
. '</td>';
$return .= '<td class="arm_edit_plan_cycle_date" >' . $arm_next_due_date;
if ($planObj->is_recurring() && $planData['arm_payment_mode'] == 'auto_debit_subscription') {
$return .= '<br/>(' . esc_html__('Auto Debit', 'ARMember') . ')';
}
$return .= '</td>';
$additional_plan_actions = '';
$additional_plan_actions = apply_filters('arm_content_after_membership_action_btn_external', $additional_plan_actions, $user_id, $uplans, $planData,$planObj);
$return .= '<td class="arm_edit_plan_action">' . $arm_delete_plan . $additional_plan_actions . '</td>';
$return .= '</tr>';
}
}
} else {
if($is_paid_post)
{
$return .= '<tr class="arm_user_edit_plan_table" ><td colspan="6" class="arm_text_align_center" >' . esc_html__("This user don't have any post.", 'ARMember') . '</td></tr>';
}
else{
$return .='<tr class="arm_user_edit_plan_table" ><td colspan="6" class="arm_text_align_center">' . esc_html__("This user don't have any plans.", 'ARMember') . '</td></tr>';
}
}
$return .= '</table>';
$bulk_member_change_plan_popup_content = '<span class="arm_confirm_text">' . esc_html__("Are you sure you want to remove this plan from this user?", 'ARMember') . '</span>';
$bulk_member_change_plan_popup_content .= '<input type="hidden" value="false" id="bulk_change_plan_flag"/>';
$bulk_member_change_plan_popup_arg = array(
'id' => 'change_plan_bulk_message',
'class' => 'change_plan_bulk_message',
'title' => esc_html__('Change Plan', 'ARMember'),
'content' => $bulk_member_change_plan_popup_content,
'button_id' => 'arm_bulk_member_change_plan_ok_btn',
'button_onclick' => "apply_member_bulk_action('bulk_change_plan_flag');",
);
$return .= $arm_global_settings->arm_get_bpopup_html($bulk_member_change_plan_popup_arg);
}
if (!$is_ajax) {
return $return . '^|^' . $user_name; //phpcs:ignore
} else {
echo $arm_ajax_pattern_start.''.$return . '^|^' . $user_name.''.$arm_ajax_pattern_end;
die;
}
}
function arm_manage_plan_get_cycle() {
global $ARMember, $wpdb, $arm_global_settings, $arm_payment_gateways, $is_multiple_membership_feature, $arm_capabilities_global;
$type = 'failed';
$content = '';
if (!empty($_REQUEST['action']) && !empty($_REQUEST['plan_id'])) {//phpcs:ignore
$plan = new ARM_Plan(intval($_REQUEST['plan_id']));//phpcs:ignore
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_manage_members'], '1',1); //phpcs:ignore --Reason:Verifying nonce
$plansCycleLabel = '';
if (!$plan->is_lifetime() && $plan->is_recurring()) {
$type = 'success';
$arm_dropdown_width = '';
$arm_dropdown_style = '';
$arm_plan_cycle_dropdown = '';
$plansCycleLabel = '<span class="arm_subscription_paid_post_label arm_margin_left_12">' . esc_attr__('Select Payment Cycle', 'ARMember') . '</span>';
$plansCycleLists = '<li data-label="' . esc_attr__('Select Payment Cycle', 'ARMember') . '" data-value="">' . esc_html__('Select Payment Cycle', 'ARMember') . '</li>';
$plan_options['payment_cycles'] = (isset($plan->options['payment_cycles']) && !empty($plan->options['payment_cycles'])) ? $plan->options['payment_cycles'] : array();
if (!empty($plan_options['payment_cycles'])) {
$plan_amount = !empty($plan_options['arm_subscription_plan_amount']) ? $plan_options['arm_subscription_plan_amount'] : 0;
$recurring_time = isset($plan_options['recurring']['time']) ? $plan_options['recurring']['time'] : 'infinite';
$recurring_type = isset($plan_options['recurring']['type']) ? $plan_options['recurring']['type'] : 'D';
switch ($recurring_type) {
case 'D':
$billing_cycle = isset($plan_options['recurring']['days']) ? $plan_options['recurring']['days'] : '1';
break;
case 'M':
$billing_cycle = isset($plan_options['recurring']['months']) ? $plan_options['recurring']['months'] : '1';
break;
case 'Y':
$billing_cycle = isset($plan_options['recurring']['years']) ? $plan_options['recurring']['years'] : '1';
break;
default:
$billing_cycle = '1';
break;
}
if(count($plan_options['payment_cycles']) == 1)
{
$plan_options['payment_cycles'] = array(array(
'cycle_key' => 'arm0',
'cycle_label' => $plan->plan_text(false, false),
'cycle_amount' => $plan_amount,
'billing_cycle' => $billing_cycle,
'billing_type' => $recurring_type,
'recurring_time' => $recurring_time,
'payment_cycle_order' => 1,
));
}
if (is_array($plan_options['payment_cycles']) && !empty($plan_options['payment_cycles'])) {
foreach ($plan_options['payment_cycles'] as $cycle_key => $p) {
$plansCycleLists .= '<li data-label="' . stripslashes(esc_attr($p['cycle_label'])) . '" data-value="' . $cycle_key . '">' . stripslashes(esc_attr($p['cycle_label'])) . '</li>';
}
}
$arm_user_plan_cycle_data_id = "arm_user_plan_cycle_input";
$arm_user_plan_cycle_name = "arm_selected_payment_cycle";
if (!empty($_REQUEST['arm_manage_plan_grid']) && ($_REQUEST['arm_manage_plan_grid'] == 0 || $_REQUEST['arm_manage_plan_grid'] == 2)) {//phpcs:ignore
$arm_dropdown_style = '';
$arm_dropdown_style = 'style="float: left;'.$arm_dropdown_style.'"';
if ($is_multiple_membership_feature->isMultipleMembershipFeature || $plan->isPaidPost || $plan->isGiftPlan) {
$arm_user_plan_cycle_data_id = "arm_user_plan_cycle_input_" . intval($_REQUEST['plan_id']);//phpcs:ignore
$arm_user_plan_cycle_name = "arm_selected_payment_cycle[arm_plan_cycle_" . intval( $_REQUEST['plan_id']) . "]";//phpcs:ignore
$arm_dropdown_width = '';
}
}
$arm_plan_cycle_dropdown = '<input type="hidden" class="' . esc_attr($arm_user_plan_cycle_data_id) . '" name="' . esc_attr($arm_user_plan_cycle_name) . '" id="' . esc_attr($arm_user_plan_cycle_data_id) . '" value=""/>';
$arm_plan_cycle_dropdown .= '<dl class="arm_selectbox column_level_dd arm_member_form_dropdown arm_width_100_pct arm_max_width_100_pct arm_display_grid" ' . $arm_dropdown_style . '>';
$arm_plan_cycle_dropdown .= '<dt class="arm_width_100_pct arm_max_width_100_pct" ' . $arm_dropdown_width . '><span></span><input type="text" style="display:none;" value="" class="arm_autocomplete"/><i class="armfa armfa-caret-down armfa-lg"></i></dt>';
$arm_plan_cycle_dropdown .= '<dd><ul data-id="' . esc_attr($arm_user_plan_cycle_data_id) . '">' . $plansCycleLists . '</ul></dd>';
$arm_plan_cycle_dropdown .= '</dl>';
$arm_plan_cycle_dropdown .= '<span class="arm_error_select_plan_cycle error arm_invalid arm_text_align_left" style="display:none; ">' . esc_html__('Please select payment cycle.', 'ARMember') . '</span>';
if (!empty($_REQUEST['arm_manage_plan_grid']) && $_REQUEST['arm_manage_plan_grid'] == 1) {//phpcs:ignore
$content .= '<span class="arm_edit_plan_lbl arm_margin_top_28 arm_margin_bottom_12">' . esc_html__('Choose Payment Cycle', 'ARMember') . '*</span> ';
$content .= '<div class="arm_edit_field">';
$content .= $arm_plan_cycle_dropdown;
$content .= '</div>';
} else{
$content .= $arm_plan_cycle_dropdown;
}
}
}
}
$plansCycleLabel = apply_filters('arm_add_membership_plan_option_label', $plansCycleLabel, intval($_REQUEST['plan_id']));
$content = apply_filters('arm_add_membership_plan_option', $content, intval($_REQUEST['plan_id']));//phpcs:ignore
$type = (!empty($content)) ? 'success' : 'failed';
echo arm_pattern_json_encode(array('type' => $type, 'content' => $content,'cycle_label_html'=>$plansCycleLabel));
die();
}
function arm_get_user_all_plan_details_for_grid() {
global $arm_global_settings, $arm_payment_gateways, $ARMember, $arm_capabilities_global, $arm_pay_per_post_feature;
$date_format = $arm_global_settings->arm_get_wp_date_format();
$user_id = intval($_POST['user_id']);//phpcs:ignore
$return = '';
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_manage_members'], '1'); //phpcs:ignore --Reason:Verifying nonce
if (!empty($user_id)) {
$user_plans = get_user_meta($user_id, 'arm_user_plan_ids', true);
$user_plans = apply_filters('arm_modify_plan_ids_externally', $user_plans, $user_id);
$user_future_plans = get_user_meta($user_id, 'arm_user_future_plan_ids', true);
$return .= '<div class="arm_child_row_div"><table class="arm_user_child_row_table arm_text_align_center" cellspacing="1" >';
$return .= '<tr class="arm_child_user_row">';
$return .= '<th class="arm_width_180">' . esc_html__('Membership Plan', 'ARMember') . '</th>';
$return .= '<th>' . esc_html__('Plan Type', 'ARMember') . '</th>';
$return .= '<th>' . esc_html__('Starts On', 'ARMember') . '</th>';
$return .= '<th>' . esc_html__('Expires On', 'ARMember') . '</th>';
$return .= '<th>' . esc_html__('Cycle Date', 'ARMember') . '</th>';
$return .= '<th>' . esc_html__('Plan Role', 'ARMember') . '</th>';
$return .= '<th>' . esc_html__('Paid With', 'ARMember') . '</th>';
$return .= '</tr>';
if (!empty($user_future_plans)) {
$arm_user_plans = array_merge($user_plans, $user_future_plans);
} else {
$arm_user_plans = $user_plans;
}
if (!empty($arm_user_plans)) {
foreach ($arm_user_plans as $uplans) {
$planData = get_user_meta($user_id, 'arm_user_plan_' . $uplans, true);
$planDetail = $planData['arm_current_plan_detail'];
$payment_cycle = $planData['arm_payment_cycle'];
$arm_plan_condition = "";
if($arm_pay_per_post_feature->isPayPerPostFeature)
{
$arm_plan_condition = (!empty($planData) && (isset($planData['arm_current_plan_detail']) && !empty($planDetail) && empty($planDetail['arm_subscription_plan_post_id'])));
}
else
{
$arm_plan_condition = !empty($planData);
}
if($arm_plan_condition)
{
if (!empty($planDetail)) {
$planObj = new ARM_Plan(0);
$planObj->init((object) $planDetail);
} else {
$planObj = new ARM_Plan($uplans);
}
$planRecurringData = $planObj->prepare_recurring_data($payment_cycle);
$recurring_profile = $planObj->new_user_plan_text(false, $payment_cycle);
$payment_mode = '';
if ($planData['arm_payment_mode'] == 'auto_debit_subscription') {
$payment_mode = "<br/>(" . esc_html__('Auto Debit', 'ARMember') . ")";
}
$arm_plan_is_suspended = '';
$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($suspended_plan_ids)) {
if (in_array($uplans, $suspended_plan_ids)) {
$arm_plan_is_suspended = '<br/><span style="color: #ec4444;font-size:12px;">(' . esc_html__('Suspended', 'ARMember') . ')</span>';
}
}
$arm_is_cancelled = (!empty($planData['arm_cencelled_plan']) && $planData['arm_cencelled_plan'] == "yes") ? '<span style="color: red;font-size:12px;">( '.esc_html__('Cancelled', 'ARMember').' )</span>' : '';
$plan_name = $planDetail['arm_subscription_plan_name'] . " " . $arm_plan_is_suspended." ".$arm_is_cancelled;
$plan_role = $planDetail['arm_subscription_plan_role'];
$start_date = (isset($planData['arm_start_plan']) && !empty($planData['arm_start_plan'])) ? date_i18n($date_format, $planData['arm_start_plan']) : '-';
$expiry_date = (isset($planData['arm_expire_plan']) && !empty($planData['arm_expire_plan'])) ? date_i18n($date_format, $planData['arm_expire_plan']) : esc_html__('Never Expires', 'ARMember');
$renew_date = (isset($planData['arm_next_due_payment']) && !empty($planData['arm_next_due_payment'])) ? date_i18n($date_format, $planData['arm_next_due_payment']) : '-';
$paidwith = (isset($planData['arm_user_gateway']) && !empty($planData['arm_user_gateway'])) ? $arm_payment_gateways->arm_gateway_name_by_key($planData['arm_user_gateway']) : '-';
$arm_membership_cycle = isset($planRecurringData['cycle_label']) ? $planRecurringData['cycle_label'] : '-';
$total_payments = isset($planRecurringData['rec_time']) ? $planRecurringData['rec_time'] : 0;
$arm_trial_start = $planData['arm_trial_start'];
$arm_trial_active = '';
if (!empty($arm_trial_start) && !empty($planData['arm_start_plan'])) {
if ($arm_trial_start < $planData['arm_start_plan']) {
$arm_trial_active = "<br/><span style='color: green;'>( " . esc_html__('trial active', 'ARMember') . " ) </span>";
}
}
$arm_installments_text = '';
$done_payments = $planData['arm_completed_recurring'];
if ($total_payments > 0 && $done_payments >= 0) {
$arm_installments = (int)$total_payments - $done_payments;
if (!empty($planData['arm_expire_plan'])) {
if ($arm_installments == 0) {
$renew_date = '';
$arm_installments_text = esc_html__('No cycles due', 'ARMember');
} else {
$arm_installments_text = "<br/>( " . $arm_installments . " " . esc_html__('cycles due', 'ARMember') . ")";
}
}
}
$arm_plan_is_suspended = '';
$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($suspended_plan_ids)) {
if (in_array($uplans, $suspended_plan_ids)) {
$arm_plan_is_suspended = '<span style="color: #ec4444;">(' . esc_html__('Suspended', 'ARMember') . ')</span>';
}
}
$return .= '<tr class="arm_child_user_row">';
$return .= '<td>' . esc_html($plan_name) . '</td>';
$return .= '<td>' . esc_html($recurring_profile);
$return .= '</td>';
$return .= '<td>' . esc_html($start_date) . esc_html($arm_trial_active) . '</td>';
$return .= '<td>' . esc_html($expiry_date) . '</td>';
$return .= '<td>' . esc_html($renew_date) . esc_html($arm_installments_text) . esc_html($payment_mode) . '</td>';
$return .= '<td>' . esc_html(ucfirst($plan_role)) . '</td>';
$return .= '<td>' . esc_html(ucfirst($paidwith)) . '</td>';
$return .= '</tr>';
}
}
}
$return .= '</table></div>';
}
echo $return; //phpcs:ignore
die;
}
function arm_add_capabilities_to_new_user($user_id) {
global $ARMember;
if ($user_id == '') {
return;
}
if (user_can($user_id, 'administrator')) {
$armroles = $ARMember->arm_capabilities();
$userObj = new WP_User($user_id);
foreach ($armroles as $armrole => $armroledescription) {
$userObj->add_cap($armrole);
}
unset($armrole);
unset($armroles);
unset($armroledescription);
}
}
function arm_add_capabilities_to_change_user_role($user_id, $role, $old_roles) {
global $ARMember;
if ($user_id == '') {
return;
}
if ($role=='administrator' && $user_id) {
$armroles = $ARMember->arm_capabilities();
$userObj = new WP_User($user_id);
foreach ($armroles as $armrole => $armroledescription) {
if (!user_can($user_id, $armrole)) {
$userObj->add_cap($armrole);
}
}
unset($armrole);
unset($armroles);
unset($armroledescription);
}
}
/**
* Filter User Columns For Search In WP User Query
*/
function arm_add_user_to_armember_func($user_id = 0, $blog_id = 0, $plan_id = 0) {
$this->arm_add_update_member_profile($user_id, $blog_id);
do_action('arm_apply_plan_to_member', $plan_id, $user_id);
}
function arm_get_user_login_history($user_id = 0, $current_page = 1, $perPage = 10) {
global $wp, $wpdb, $ARMember, $arm_global_settings;
$arm_all_block_settings = $arm_global_settings->block_settings;
if (isset($arm_all_block_settings['track_login_history']) && $arm_all_block_settings['track_login_history'] != 1)
return;
$historyHtml = '';
if (!empty($user_id) && $user_id != 0) {
$perPage = (!empty($perPage) && is_numeric($perPage)) ? $perPage : 10;
$offset = 0;
if (is_multisite()) {
$wp_date_time_format = get_option('date_format') . " " . get_option('time_format');
} else {
$wp_date_time_format = get_site_option('date_format') . " " . get_site_option('time_format');
}
if (!empty($current_page) && $current_page > 1) {
$offset = ($current_page - 1) * $perPage;
}
$historyLimit = (!empty($perPage)) ? " LIMIT $offset, $perPage " : "";
$totalRecord = $wpdb->get_var( $wpdb->prepare("SELECT COUNT(`arm_history_id`) FROM `" . $ARMember->tbl_arm_login_history . "` WHERE `arm_user_id`=%d",$user_id)); //phpcs:ignore --Reason $ARMember->tbl_arm_login_history is a table name
$historyRecords = $wpdb->get_results( $wpdb->prepare("SELECT `arm_logged_in_ip`, `arm_user_current_status`, `arm_logged_in_date`, `arm_logout_date`, `arm_history_browser`, `arm_login_country` FROM `" . $ARMember->tbl_arm_login_history . "` WHERE `arm_user_id`=%d ORDER BY `arm_history_id` DESC {$historyLimit}",$user_id), ARRAY_A); //phpcs:ignore --Reason $ARMember->tbl_arm_login_history is a table name
$historyHtml .= '<div class="arm_loginhistory_wrapper" data-user_id="' . esc_attr($user_id) . '">';
$historyHtml .= '<table class="form-table arm_member_last_subscriptions_table" width="100%">';
$historyHtml .= '<tr>';
$historyHtml .= '<td>' . esc_html__('Logged In Date', 'ARMember') . '</td>';
$historyHtml .= '<td>' . esc_html__('Logged In IP', 'ARMember') . '</td>';
$historyHtml .= '<td>' . esc_html__('Browser Name', 'ARMember') . '</td>';
$historyHtml .= '<td>' . esc_html__('Country Name', 'ARMember') . '</td>';
$historyHtml .= '<td>' . esc_html__('Logged Out Date', 'ARMember') . '</td>';
$historyHtml .= '</tr>';
if (!empty($historyRecords)) {
$i = 0;
foreach ($historyRecords as $mh) {
$logout_date = date_create($mh['arm_logout_date']);
$login_date = date_create($mh['arm_logged_in_date']);
if (isset($mh['arm_user_current_status']) && $mh['arm_user_current_status'] == 1 && $mh['arm_logout_date'] == "0000-00-00 00:00:00") {
$arm_logged_out_date = esc_html__('Currently Logged In', 'ARMember');
} else {
if ($mh['arm_user_current_status'] == 0 && $mh['arm_logout_date'] == "0000-00-00 00:00:00") {
$arm_logged_out_date = "-";
} else {
$arm_logged_out_date = date_i18n($wp_date_time_format, strtotime($mh['arm_logout_date']));
}
}
$i++;
//$arm_login_date = date_i18n(date_format($login_date, $wp_date_time_format));
$arm_login_date = date_i18n($wp_date_time_format, strtotime($mh['arm_logged_in_date']));
$historyHtml .= '<tr class="arm_member_last_subscriptions_data">';
$historyHtml .= '<td>' . $arm_login_date . '</td>';
$historyHtml .= '<td>' . $mh['arm_logged_in_ip'] . '</td>';
$historyHtml .= '<td>' . $mh['arm_history_browser'] . '</td>';
$historyHtml .= '<td>' . $mh['arm_login_country'] . '</td>';
$historyHtml .= '<td>' . $arm_logged_out_date . '</td>';
$historyHtml .= '</tr>';
}
} else {
$historyHtml .= '<tr class="arm_member_last_subscriptions_data">';
$historyHtml .= '<td colspan="5" class="arm_text_align_center">' . esc_html__('No Login History Found.', 'ARMember') . '</td>';
$historyHtml .= '</tr>';
}
}
$historyHtml .= '</table>';
$historyPaging = $arm_global_settings->arm_get_paging_links($current_page, $totalRecord, $perPage, '');
$historyHtml .= '<div class="arm_membership_history_pagination_block ">';
$historyHtml .= '<div class="arm_membership_history_paging_container">' . $historyPaging . '</div>';
$historyHtml .= '</div>';
$historyHtml .= '</div>';
return $historyHtml;
}
function arm_get_all_user_login_history($current_page = 1, $perPage = 10, $arm_log_history_search_user = '') {
global $wp, $wpdb, $ARMember, $arm_global_settings;
$arm_all_block_settings = $arm_global_settings->block_settings;
$user_table = $wpdb->users;
$arm_log_history_search_user = !empty($arm_log_history_search_user) ? $arm_log_history_search_user : '';
$historyHtml = '';
$perPage = (!empty($perPage) && is_numeric($perPage)) ? $perPage : 10;
$offset = 0;
if (is_multisite()) {
$wp_date_time_format = get_option('date_format') . " " . get_option('time_format');
} else {
$wp_date_time_format = get_site_option('date_format') . " " . get_site_option('time_format');
}
if (!empty($current_page) && $current_page > 1) {
$offset = ($current_page - 1) * $perPage;
}
$history_where = "";
if(!empty($arm_log_history_search_user))
{
$history_where .= $wpdb->prepare(' AND u.user_login LIKE %s ','%'.$arm_log_history_search_user.'%');
}
$historyLimit = (!empty($perPage)) ? " LIMIT $offset, $perPage " : "";
$historyRecords1 = "SELECT u.user_login, l.arm_user_current_status, l.arm_user_id,l.arm_logged_in_ip, l.arm_logged_in_date, l.arm_logout_date, l.arm_history_browser, l.arm_login_country FROM `{$user_table}` u INNER JOIN `" . $ARMember->tbl_arm_login_history . "` l ON u.ID = l.arm_user_id where 1 = 1 $history_where ORDER BY l.arm_history_id DESC ";
$historyRecords2 = $historyRecords1." {$historyLimit}";
$historyRecords = $wpdb->get_results($historyRecords2, ARRAY_A); //phpcs:ignore --Reason $historyRecords2 is a query variable
$totalRecord = $wpdb->get_results($historyRecords1);//phpcs:ignore --Reason $historyRecords1 is a query variable
$totalRecord = count($totalRecord);
$historyHtml .= '<div class="arm_all_loginhistory_main_wrapper">';
$historyHtml .= '<div class="arm_all_loginhistory_filter_wrapper arm_datatable_searchbox">';
$historyHtml .= '<table class="form-table arm_member_last_subscriptions_table arm_member_login_history_filter_table" width="100%">';
$historyHtml .= '<tr>';
$historyHtml .= '<td>';
$historyHtml .= '<label class="arm_log_history_search_lbl_user"><input type="text" placeholder="'.esc_attr__('Search by username', 'ARMember'). '" id="arm_log_history_search_user" name="arm_log_history_search_user" value="'.esc_attr($arm_log_history_search_user).'" tabindex="-1" ></label>';
$historyHtml .= '<div>
<button id="arm_login_history_search_btn" class="armemailaddbtn arm_login_history_search_btn" type="button">'. esc_html__('Apply', 'ARMember').'</button>
</div>';
$historyHtml .= '</td>';
$historyHtml .= '</tr>';
$historyHtml .= '</table>';
$historyHtml .= '</div>';
$historyHtml .= '<div class="arm_all_loginhistory_wrapper">';
$historyHtml .= '<table class="form-table arm_member_last_subscriptions_table" width="100%">';
$historyHtml .= '<tr>';
$historyHtml .= '<td>' . esc_html__('Username', 'ARMember') . '</td>';
$historyHtml .= '<td>' . esc_html__('Logged In Date', 'ARMember') . '</td>';
$historyHtml .= '<td>' . esc_html__('Logged In IP', 'ARMember') . '</td>';
$historyHtml .= '<td>' . esc_html__('Browser Name', 'ARMember') . '</td>';
$historyHtml .= '<td>' . esc_html__('Country', 'ARMember') . '</td>';
$historyHtml .= '<td>' . esc_html__('Logged Out Date', 'ARMember') . '</td>';
$historyHtml .= '</tr>';
if (!empty($historyRecords)) {
$i = 0;
foreach ($historyRecords as $mh) {
$i++;
$logout_date = date_create($mh['arm_logout_date']);
$login_date = date_create($mh['arm_logged_in_date']);
if (isset($mh['arm_user_current_status']) && $mh['arm_user_current_status'] == 1 && $mh['arm_logout_date'] == "0000-00-00 00:00:00") {
$arm_logged_out_date = esc_html__('Currently Logged In', 'ARMember');
} else {
if ($mh['arm_user_current_status'] == 0 && $mh['arm_logout_date'] == "0000-00-00 00:00:00") {
$arm_logged_out_date = "-";
} else {
$arm_logged_out_date = date_i18n($wp_date_time_format, strtotime($mh['arm_logout_date']));
}
}
$historyHtml .= '<tr class="arm_member_last_subscriptions_data all_user_login_history_tr">';
$historyHtml .= '<td>' . $mh['user_login'] . '</td>';
$historyHtml .= '<td>' . date_i18n($wp_date_time_format, strtotime($mh['arm_logged_in_date'])) . '</td>';
$historyHtml .= '<td>' . $mh['arm_logged_in_ip'] . '</td>';
$historyHtml .= '<td>' . $mh['arm_history_browser'] . '</td>';
$historyHtml .= '<td>' . $mh['arm_login_country'] . '</td>';
$historyHtml .= '<td>' . $arm_logged_out_date . '</td>';
$historyHtml .= '</tr>';
}
} else {
$historyHtml .= '<tr class="arm_member_last_subscriptions_data">';
$historyHtml .= '<td colspan="6" class="arm_text_align_center">' . esc_html__('No Login History Found.', 'ARMember') . '</td>';
$historyHtml .= '</tr>';
}
$historyHtml .= '</table>';
$historyHtml .= '<div class="arm_membership_history_pagination_block">';
$historyPaging = $arm_global_settings->arm_get_paging_links($current_page, $totalRecord, $perPage, '');
$historyHtml .= '<div class="arm_membership_history_paging_container">' . $historyPaging . '</div>';
$historyHtml .= '</div>';
$historyHtml .= '</div>';
$historyHtml .= '</div>';
return $historyHtml;
}
function arm_user_login_history_paging_action() {
global $wp, $wpdb, $ARMember, $arm_global_settings, $arm_payment_gateways,$arm_capabilities_global;
if (isset($_POST['action']) && $_POST['action'] == 'arm_user_login_history_paging_action') {//phpcs:ignore
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_manage_members'], '1',1); //phpcs:ignore --Reason:Verifying nonce
$user_id = isset($_POST['user_id']) ? intval($_POST['user_id']) : 0;//phpcs:ignore
$current_page = isset($_POST['page']) ? intval($_POST['page']) : 1;//phpcs:ignore
$per_page = isset($_POST['per_page']) ? intval($_POST['per_page']) : 10;//phpcs:ignore
echo $this->arm_get_user_login_history($user_id, $current_page, $per_page); //phpcs:ignore
}
exit;
}
function arm_all_user_login_history_paging_action() {
global $wp, $wpdb, $ARMember, $arm_global_settings, $arm_payment_gateways,$arm_capabilities_global,$arm_ajax_pattern_start,$arm_ajax_pattern_end;
if (isset($_POST['action']) && ($_POST['action'] == 'arm_all_user_login_history_paging_action' || $_POST['action'] == 'arm_login_history_search_action')) {//phpcs:ignore
$current_page = isset($_POST['page']) ? intval($_POST['page']) : 1;//phpcs:ignore
$per_page = isset($_POST['per_page']) ? intval($_POST['per_page']) : 10;//phpcs:ignore
$arm_log_history_search_user = isset($_POST['arm_log_history_search_user']) ? sanitize_text_field($_POST['arm_log_history_search_user']) : '';//phpcs:ignore
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_manage_block_settings'], '1');
echo $arm_ajax_pattern_start;
echo $this->arm_get_all_user_login_history($current_page, $per_page, $arm_log_history_search_user); //phpcs:ignore
echo $arm_ajax_pattern_end;
}
exit;
}
function arm_login_history_pagination() {
global $ARMember, $wpdb, $arm_capabilities_global,$arm_ajax_pattern_start,$arm_ajax_pattern_end;
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_manage_block_settings'], '1'); //phpcs:ignore
$table_name = $ARMember->tbl_arm_login_history;
$content = '';
$page_num = intval($_POST['page']);//phpcs:ignore
$limit = intval($_POST['limit']);//phpcs:ignore
$start_from = ($page_num - 1) * $limit;
$user_id = intval($_POST['user_id']);//phpcs:ignore
$get_login_history = $wpdb->get_results( $wpdb->prepare("SELECT * FROM `{$table_name}` WHERE `arm_user_id` = %d ORDER BY `arm_history_id` ASC limit {$start_from},{$limit}",$user_id)); //phpcs:ignore --Reason $table_name is a table name
if (!empty($get_login_history)) {
foreach ($get_login_history as $key => $login_history) {
$arm_logout_date = ($login_history->arm_logout_date == '0000-00-00 00:00:00') ? esc_html__('User is currently logged in', 'ARMember') : $login_history->arm_logout_date;
$arm_login_duration = ($login_history->arm_login_duration == '00:00:00') ? '-' : $login_history->arm_login_duration;
$class = (($key + 1) % 2 == 0) ? 'even' : 'odd';
$content .= '<tr class="' . $class . '" >';
$content .= '<td align="center">' . (($limit * $page_num) - ($limit - ($key + 1))) . '</td>';
$content .= '<td align="center">' . ($login_history->arm_logged_in_date) . '</td>';
$content .= '<td align="center">' . ($login_history->arm_logged_in_ip) . '</td>';
$content .= '<td align="center">' . ($login_history->arm_history_browser) . '</td>';
$content .= '<td align="center">' . $arm_logout_date . '</td>';
$content .= '<td align="center">' . $arm_login_duration . '</td>';
$content .= '</tr>';
}
}
echo $arm_ajax_pattern_start.''.$content.''.$arm_ajax_pattern_end; //phpcs:ignore
exit;
}
function arm_user_search_columns($search_columns, $search, $WPUserQuery) {
$search_columns[] = 'display_name';
return $search_columns;
}
function arm_before_delete_user_action($id, $reassign = 1) {
global $wp, $wpdb, $arm_errors, $ARMember, $arm_global_settings, $arm_subscription_plans;
$plan_ids = get_user_meta($id, 'arm_user_plan_ids', true);
do_action('arm_delete_users_external', $id);
if (!empty($plan_ids) && is_array($plan_ids)) {
foreach ($plan_ids as $plan_id) {
if (!empty($plan_id) && $plan_id != 0) {
$defaultPlanData = $arm_subscription_plans->arm_default_plan_array();
$userPlanDatameta = get_user_meta($id, 'arm_user_plan_' . $plan_id, true);
$userPlanDatameta = !empty($userPlanDatameta) ? $userPlanDatameta : array();
$planData = shortcode_atts($defaultPlanData, $userPlanDatameta);
$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($plan_id);
}
if ($planObj->exists() && $planObj->is_recurring()) {
do_action('arm_cancel_subscription_gateway_action', $id, $plan_id);
}
else {
do_action('arm_cancel_except_recurring_subscription_action', $id, $plan_id);
}
}
}
delete_user_meta($id, 'arm_user_suspended_plan_ids', true);
delete_user_meta($id, 'arm_changed_expiry_date_plans', true);
}
}
function arm_after_deleted_user_action($id, $reassign = 1) {
global $wp, $wpdb, $arm_errors, $ARMember, $arm_global_settings;
/* delete user login-logout history starts */
$delete_login_history = $wpdb->query( $wpdb->prepare("DELETE FROM `$ARMember->tbl_arm_login_history` where arm_user_id = %d" , $id)); //phpcs:ignore --Reason $ARMember->tbl_arm_login_history is a table name
/* delete user login-logout history ends */
/* delete user activity history starts */
$delete_user_activity = $wpdb->query( $wpdb->prepare("DELETE FROM `$ARMember->tbl_arm_activity` where arm_user_id = %d" , $id));//phpcs:ignore --Reason $ARMember->tbl_arm_activity is a table name
/* delete user activity history ends */
/* delete user arm members table starts */
$delete_user_members = $wpdb->query( $wpdb->prepare("DELETE FROM `$ARMember->tbl_arm_members` where arm_user_id = %d" , $id));//phpcs:ignore --Reason $ARMember->tbl_arm_members is a table name
/* delete user arm members table ends */
/* delete members entries table starts */
$delete_user_entries = $wpdb->query( $wpdb->prepare("DELETE FROM `$ARMember->tbl_arm_entries` where arm_user_id = %d" , $id));//phpcs:ignore --Reason $ARMember->tbl_arm_entries is a table name
/* delete members entries table ends */
/* delete members fail attempts table starts */
$delete_user_fail_attempts = $wpdb->query( $wpdb->prepare("DELETE FROM `$ARMember->tbl_arm_fail_attempts` where arm_user_id = %d" , $id));//phpcs:ignore --Reason $ARMember->tbl_arm_fail_attempts is a table name
/* delete members fail attempts table ends */
/* delete members lockdown table starts */
$delete_user_lockdown = $wpdb->query($wpdb->prepare("DELETE FROM `$ARMember->tbl_arm_lockdown` where arm_user_id = %d" , $id));//phpcs:ignore --Reason $ARMember->tbl_arm_lockdown is a table name
/* delete members lockdown table ends */
/* update member id payment log table starts */
$update_user_payment_log = $wpdb->query( $wpdb->prepare("UPDATE `$ARMember->tbl_arm_payment_log` SET arm_user_id='0', arm_payer_email='', arm_first_name='', arm_last_name='', arm_bank_name='', arm_account_name='', arm_additional_info='' where arm_user_id = %d" , $id)); //phpcs:ignore --Reason $ARMember->tbl_arm_payment_log is a table name
/* update member id payment log table ends */
}
function arm_get_all_members($type = 0, $only_total = 0, $recent_data = 0,$inactive_array=array()) {
global $wp, $wpdb, $arm_errors, $ARMember, $arm_members_class, $arm_member_forms, $arm_global_settings;
$user_table = $wpdb->users;
$usermeta_table = $wpdb->usermeta;
$capability_column = $wpdb->get_blog_prefix($GLOBALS['blog_id']) . 'capabilities';
$super_admin_ids = array();
if (is_multisite()) {
$super_admin = get_super_admins();
if (!empty($super_admin)) {
foreach ($super_admin as $skey => $sadmin) {
if ($sadmin != '') {
$user_obj = get_user_by('login', $sadmin);
if ($user_obj->ID != '') {
$super_admin_ids[] = $user_obj->ID;
}
}
}
}
}
$user_where = " WHERE 1=1";
if (!empty($super_admin_ids)) {
$super_admin_placeholders = ' AND u.ID NOT IN (';
$super_admin_placeholders .= rtrim( str_repeat( '%s,', count( $super_admin_ids ) ), ',' );
$super_admin_placeholders .= ')';
array_unshift( $super_admin_ids, $super_admin_placeholders );
// $user_where .= ' AND u.ID NOT IN (' . implode( ',', $super_admin_ids ) . ')';
$user_where .= call_user_func_array(array( $wpdb, 'prepare' ), $super_admin_ids );
}
$user_where .= " AND um.meta_key = '{$capability_column}' AND um.meta_value NOT LIKE '%administrator%' "; //phpcs:ignore
$user_join = "";
if(!empty($inactive_array)){
$admin_placeholders = 'AND arm1.arm_primary_status IN (';
$admin_placeholders .= rtrim( str_repeat( '%s,', count( $inactive_array ) ), ',' );
$admin_placeholders .= ')';
// $admin_users = implode( ',', $admin_users );
array_unshift( $inactive_array, $admin_placeholders );
// $user_where .= " AND arm1.arm_primary_status IN (" . implode(',', $inactive_array) . ") ";
$user_where .= call_user_func_array(array( $wpdb, 'prepare' ), $inactive_array );
$user_join = " INNER JOIN {$ARMember->tbl_arm_members} arm1 ON u.ID = arm1.arm_user_id";
}else{
if (!empty($type) && in_array($type, array(1, 2, 3))) {
$user_join = " INNER JOIN {$ARMember->tbl_arm_members} arm1 ON u.ID = arm1.arm_user_id";
$user_where .= $wpdb->prepare(" AND arm1.arm_primary_status=%s ",$type);
}
}
$user_fields = "u.ID,u.user_registered,u.user_login";
$user_group_by = " GROUP BY u.ID ";
$user_order_by = " ORDER BY u.user_registered DESC";
if ($only_total > 0) {
$user_fields = " COUNT(*) as total ";
$user_group_by = "";
$user_order_by = "";
}
if($recent_data == 1) {
$before_week = strtotime('-6 days', strtotime(current_time('mysql')));
$before_week = date('Y-m-d 00:00:00', $before_week);
$current_date = date('Y-m-d 23:59:00', strtotime(current_time('mysql')));
$user_where .= $wpdb->prepare(" AND (u.user_registered >= %s AND u.user_registered <= %s) ",$before_week,$current_date);
}
$user_query = "SELECT {$user_fields} FROM `{$user_table}` u LEFT JOIN `{$usermeta_table}` um ON u.ID = um.user_id {$user_join} {$user_where} {$user_group_by} {$user_order_by} ";
$users_details = $wpdb->get_results($user_query);//phpcs:ignore --Reason: $user_query is query
if ($only_total > 0) {
$all_members = $users_details[0]->total;
} else {
$all_members = $users_details;
}
return $all_members;
}
function arm_get_all_members_with_administrators($type = 0, $only_total = 0) {
global $wp, $wpdb, $arm_errors, $ARMember, $arm_members_class, $arm_member_forms, $arm_global_settings;
$user_table = $wpdb->users;
$usermeta_table = $wpdb->usermeta;
$capability_column = $wpdb->get_blog_prefix($GLOBALS['blog_id']) . 'capabilities';
$user_where = " WHERE 1=1";
$user_join = "";
if (!empty($type) && in_array($type, array(1, 2, 3))) {
$user_join = " INNER JOIN {$ARMember->tbl_arm_members} arm1 ON u.ID = arm1.arm_user_id";
$user_where .= $wpdb->prepare(" AND arm1.arm_primary_status=%d ",$type);
}
$user_fields = "u.ID,u.user_registered,u.user_login";
$user_group_by = " GROUP BY u.ID ";
$user_order_by = " ORDER BY u.user_registered DESC";
if ($only_total > 0) {
$user_fields = " COUNT(*) as total ";
$user_group_by = "";
$user_order_by = "";
}
$user_query = "SELECT {$user_fields} FROM `{$user_table}` u LEFT JOIN `{$usermeta_table}` um ON u.ID = um.user_id {$user_join} {$user_where} {$user_group_by} {$user_order_by} ";
$users_details = $wpdb->get_results($user_query); //phpcs:ignore --Reason $user_query is a query
if ($only_total > 0) {
$all_members = $users_details[0]->total;
} else {
$all_members = $users_details;
}
return $all_members;
}
function arm_get_all_members_without_administrator($type = 0, $only_total = 0, $recent_data = 0,$inactive_type = array()) {
global $wp, $wpdb, $arm_errors, $ARMember, $armPrimaryStatus, $arm_members_class, $arm_member_forms, $arm_global_settings;
$all_members = $this->arm_get_all_members($type, $only_total, $recent_data,$inactive_type);
if ($only_total == 0) {
return $all_members;
} else {
return $all_members;
}
}
function arm_get_member_detail($user_id = 0) {
global $wp, $wpdb, $arm_errors, $ARMember, $arm_member_forms, $arm_global_settings;
if (!empty($user_id) && $user_id != 0) {
$user_info = get_user_by('id', $user_id);
$user_meta_info = $this->arm_get_user_metas($user_id);
if (!empty($user_meta_info)) {
$user_info->user_meta = $user_meta_info;
}
return $user_info;
}
return false;
}
function arm_get_user_metas($user_id = 0) {
global $wp, $wpdb, $arm_errors, $ARMember, $arm_member_forms, $arm_global_settings, $arm_subscription_plans;
if (!empty($user_id) && $user_id != 0) {
$user_meta_info = get_user_meta($user_id);
if (!empty($user_meta_info)) {
foreach ($user_meta_info as $key => $val) {
if ($key == "country") {
$user_meta_info[$key] = get_user_meta($user_id, "country", true);
} else {
$user_meta_info[$key] = maybe_unserialize($val[0]);
}
}
}
return $user_meta_info;
}
return false;
}
function arm_member_ajax_action() {
global $wpdb, $ARMember, $arm_members_class, $arm_global_settings, $arm_case_types, $arm_capabilities_global,$arm_ajax_pattern_start,$arm_ajax_pattern_end;
if (!isset($_POST)) { //phpcs:ignore
return;
}
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_manage_members'], '1',1); //phpcs:ignore --Reason:Verifying nonce
$action = sanitize_text_field( $_POST['act'] );//phpcs:ignore
$id = intval($_POST['id']);//phpcs:ignore
if ($action == 'delete') {
if (empty($id)) {
$errors[] = esc_html__('Invalid action.', 'ARMember');
} else {
if (!current_user_can('arm_manage_members')) {
if (MEMBERSHIP_DEBUG_LOG == true) {
$arm_case_types['shortcode']['protected'] = true;
$arm_case_types['shortcode']['type'] = 'delete_user';
$arm_case_types['shortcode']['message'] = esc_html__('Current user doesn\'t have permission to delete users', 'ARMember');
$ARMember->arm_debug_response_log('arm_member_ajax_action', $arm_case_types, $_POST, $wpdb->last_query, false); //phpcs:ignore
}
$errors[] = esc_html__('Sorry, You do not have permission to perform this action', 'ARMember');
} else {
if (file_exists(ABSPATH . 'wp-admin/includes/user.php')) {
require_once(ABSPATH . 'wp-admin/includes/user.php');
}
//do_action('arm_delete_users_external', $id);
if (is_multisite()) {
$res_var = remove_user_from_blog($id, $GLOBALS['blog_id']);
$blog_id = $GLOBALS['blog_id'];
$meta_key = "arm_site_" . $blog_id . "_deleted";
$meta_value = true;
update_user_meta($id, $meta_key, $meta_value);
} else {
$res_var = wp_delete_user($id, 1);
/* delete user login-logout history starts */
$delete_login_history = $wpdb->query( $wpdb->prepare("DELETE FROM `$ARMember->tbl_arm_login_history` where arm_user_id = %d" , $id)); //phpcs:ignore --Reason $ARMember->tbl_arm_login_history is a table name
/* delete user login-logout history ends */
}
if ($res_var) {
$message = esc_html__('Record is deleted successfully.', 'ARMember');
}
}
}
}
$return_array = $arm_global_settings->handle_return_messages(@$errors, @$message);
echo $arm_ajax_pattern_start.''. json_encode($return_array) .''.$arm_ajax_pattern_end;
exit;
}
function arm_member_bulk_action() {
global $wpdb, $ARMember, $arm_members_class, $arm_global_settings, $arm_subscription_plans, $arm_case_types, $arm_capabilities_global;
if (!isset($_POST)) { //phpcs:ignore
return;
}
$response = array('type'=>'error',esc_html__( 'Something went wrong please try again.', 'ARMember' ));
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_manage_members'], '1',1); //phpcs:ignore --Reason:Verifying nonce
$bulkaction = $arm_global_settings->get_param('action1');
$ids = $arm_global_settings->get_param('item-action', '');
$errors = '';
if (empty($ids)) {
$errors = esc_html__('Please select one or more records.', 'ARMember');
} else {
if ($bulkaction == '' || $bulkaction == '-1') {
$errors = esc_html__('Please select valid action.', 'ARMember');
} else {
if (!is_array($ids)) {
$ids = explode(',', $ids);
}
if ($bulkaction == 'delete_member') {
if (!current_user_can('arm_manage_members')) {
if (MEMBERSHIP_DEBUG_LOG == true) {
$arm_case_types['shortcode']['protected'] = true;
$arm_case_types['shortcode']['type'] = 'delete_user_bulk_action';
$arm_case_types['shortcode']['message'] = esc_html__('Current user doesn\'t have permission to delete users', 'ARMember');
$ARMember->arm_debug_response_log('arm_member_bulk_action', $arm_case_types, $_POST, $wpdb->last_query, false); //phpcs:ignore
}
$errors = esc_html__('Sorry, You do not have permission to perform this action', 'ARMember');
$response = array('type' => 'error','msg'=>$errors);
} else {
if (is_array($ids)) {
if (file_exists(ABSPATH . 'wp-admin/includes/user.php')) {
require_once(ABSPATH . 'wp-admin/includes/user.php');
}
foreach ($ids as $id) {
if (is_multisite()) {
$res_var = remove_user_from_blog($id, $GLOBALS['blog_id']);
$blog_id = $GLOBALS['blog_id'];
$meta_key = "arm_site_" . $blog_id . "_deleted";
$meta_value = true;
update_user_meta($id, $meta_key, $meta_value);
if (MEMBERSHIP_DEBUG_LOG == true) {
$arm_case_types['shortcode']['protected'] = true;
$arm_case_types['shortcode']['type'] = 'user_removed';
$arm_case_types['shortcode']['message'] = esc_html__('User is removed from current blog', 'ARMember');
$ARMember->arm_debug_response_log('arm_member_bulk_action', $arm_case_types, $_POST, $wpdb->last_query, false); //phpcs:ignore
}
$message = esc_html__('Member(s) has been deleted successfully.', 'ARMember');
} else {
$res_var = wp_delete_user($id, 1);
$delete_login_history = $wpdb->query( $wpdb->prepare("DELETE FROM `$ARMember->tbl_arm_login_history` where arm_user_id = %d" , $id) ); //phpcs:ignore --Reason $ARMember->tbl_arm_login_history is a table name
if($res_var)
{
$message = esc_html__('Member(s) has been deleted successfully.', 'ARMember');
}
}
}
$response = array('type' => 'success','msg'=>$message);
}
}
} elseif($bulkaction == 'arm_user_status-1' || $bulkaction == 'arm_user_status-2' || $bulkaction == 'arm_user_status-3' || $bulkaction == 'arm_user_status-4') {
if (!current_user_can('arm_manage_members')) {
if (MEMBERSHIP_DEBUG_LOG == true) {
$arm_case_types['shortcode']['protected'] = true;
$arm_case_types['shortcode']['type'] = 'delete_user_bulk_action';
$arm_case_types['shortcode']['message'] = esc_html__('Current user doesn\'t have permission to delete users', 'ARMember');
$ARMember->arm_debug_response_log('arm_member_bulk_action', $arm_case_types, $_POST, $wpdb->last_query, false); //phpcs:ignore
}
$errors = esc_html__('Sorry, You do not have permission to perform this action', 'ARMember');
$response = array('type' => 'error','msg'=>$errors);
} else {
if (is_array($ids)) {
if ($bulkaction == 'arm_user_status-1') {
$bulkaction = '1';
} else if ($bulkaction == 'arm_user_status-2') {
$bulkaction = '2';
} else if ($bulkaction == 'arm_user_status-3') {
$bulkaction = '3';
} else if ($bulkaction == 'arm_user_status-4') {
$bulkaction = '4';
}
foreach ($ids as $id) {
$post = array(
'user_id' => $id,
'bulkaction' => $bulkaction
);
$this->arm_change_user_status($post);
}
$message = esc_html__('Member(s) status has been changed successfully.', 'ARMember');
$response = array('type' => 'success','msg'=>$message);
}
}
} else {
if (is_array($ids) && is_numeric($bulkaction)) {
$plan = new ARM_Plan($bulkaction);
if ($plan->exists() && $plan->is_active()) {
foreach ($ids as $id) {
do_action('arm_before_update_user_subscription', $id, $bulkaction);
$this->arm_manual_update_user_data($id, $bulkaction);
$arm_subscription_plans->arm_update_user_subscription($id, $bulkaction, 'admin', false);
}
$message = esc_html__('Member(s) plan has been changed successfully.', 'ARMember');
$response = array('type' => 'success','msg'=>$message);
} else {
$errors = esc_html__('Selected plan is invalid.', 'ARMember');
$response = array('type' => 'error','msg'=>$errors);
}
}
}
}
}
echo arm_pattern_json_encode($response);
exit;
}
function arm_validate_username($user_login, $invalid_username = '') {
global $wpdb, $ARMember, $arm_members_class, $arm_global_settings;
$sanitized_user_login = sanitize_user($user_login);
$err = "";
// Check the username
if ($sanitized_user_login == '') {
$err = esc_html__('Please enter a username.', 'ARMember');
} elseif (!validate_username($user_login)) {
if ($invalid_username == '') {
$err_msg = esc_html__('This username is invalid because it uses illegal characters. Please enter a valid username.', 'ARMember');
} else {
$err_msg = $invalid_username;
}
$err = (!empty($err_msg)) ? $err_msg : esc_html__('This username is invalid because it uses illegal characters. Please enter a valid username.', 'ARMember');
} elseif (username_exists($sanitized_user_login)) {
$err_msg = $arm_global_settings->common_message['arm_username_exist'];
$err = (!empty($err_msg)) ? $err_msg : esc_html__('This username is already registered, please choose another one.', 'ARMember');
}
return $err;
}
function arm_validate_email($user_email, $invalid_email = '') {
global $wpdb, $ARMember, $arm_members_class, $arm_global_settings;
$err = "";
// Check the username
if ('' == $user_email) {
$err = esc_html__("Please type your e-mail address.", 'ARMember');
} elseif (!is_email($user_email)) {
if ($invalid_email == '') {
$err_msg = esc_html__('Please enter valid email address.', 'ARMember');
} else {
$err_msg = $invalid_email;
}
$err = (!empty($err_msg)) ? $err_msg : esc_html__('Please enter valid email address.', 'ARMember');
} elseif (email_exists($user_email)) {
$err_msg = $arm_global_settings->common_message['arm_email_exist'];
$err = (!empty($err_msg)) ? $err_msg : esc_html__("This email is already registered, please choose another one.", 'ARMember');
}
return $err;
}
function arm_user_register_hook_func($user_id) {
global $wp, $wpdb, $current_user, $ARMember, $arm_global_settings, $arm_members_badges;
$this->arm_add_update_member_profile($user_id);
}
function arm_profile_update_hook_func($user_id, $old_user_data) {
global $wp, $wpdb, $current_user, $ARMember, $arm_global_settings, $arm_members_badges;
/* is_admin() is not giving right result here please make sure with isAdmin Condition */
if (is_admin() && !isset($_POST['isAdmin'])) { //phpcs:ignore
if (is_plugin_active('bbpress/bbpress.php')) {
if (isset($_POST['bbp-forums-role']) && $_POST['bbp-forums-role'] != '') { //phpcs:ignore
$arm_members_badges->arm_add_user_achieve_by_type($user_id, 0, 'roles', sanitize_text_field($_POST['bbp-forums-role'])); //phpcs:ignore
}
}
if (isset($_POST['role'])) { //phpcs:ignore
$arm_members_badges->arm_add_user_achieve_by_type($user_id, 0, 'roles', sanitize_text_field($_POST['role'])); //phpcs:ignore
}
}
$this->arm_add_update_member_profile($user_id);
}
/* Add member to plugin table when assign user to site from network site menu */
function arm_assign_user_to_blog($user_id, $role, $blog_id) {
if (!is_multisite()) {
return;
}
global $wp, $wpdb, $current_user, $ARMember, $arm_global_settings;
/* Check if user is already deleted from current blog */
$deleted_user = get_user_meta($user_id, "arm_site_" . $blog_id . "_deleted", true);
if ($deleted_user == 1) {
delete_user_meta($user_id, "arm_site_" . $blog_id . "_deleted");
}
$this->arm_add_update_member_profile($user_id, $blog_id);
}
function arm_add_update_member_profile($user_id, $blog_id = 0) {
global $wp, $wpdb, $current_user, $ARMember, $arm_global_settings;
if (!empty($user_id) && $user_id != 0) {
$arm_member_table = $ARMember->tbl_arm_members;
if (is_multisite() && $blog_id > 0) {
$arm_member_table = $wpdb->get_blog_prefix($blog_id) . 'arm_members';
}
$member = $wpdb->get_row( $wpdb->prepare("SELECT * FROM {$wpdb->users} WHERE `ID`=%d",$user_id), ARRAY_A); //phpcs:ignore --Reason $wpdb->users is a table name
/* Add WP Members into Plugin's Member Table */
$args = array(
'arm_user_id' => $user_id,
'arm_user_login' => $member['user_login'],
'arm_user_nicename' => $member['user_nicename'],
'arm_user_email' => $member['user_email'],
'arm_user_url' => $member['user_url'],
'arm_user_registered' => $member['user_registered'],
'arm_user_activation_key' => $member['user_activation_key'],
'arm_user_status' => $member['user_status'],
'arm_display_name' => $member['display_name'],
);
$old_record = $wpdb->get_var( $wpdb->prepare("SELECT `arm_member_id` FROM `" . $arm_member_table . "` WHERE `arm_user_id`=%d",$user_id)); //phpcs:ignore --Reason $arm_member_table is a table name
if ($old_record != null) {
$wpdb->update($arm_member_table, $args, array('arm_user_id' => $user_id));
} else {
$wpdb->insert($arm_member_table, $args);
}
}
return;
}
public function arm_activate_member($user_id = 0) {
global $wp, $wpdb, $arm_errors, $ARMember, $arm_members_class, $arm_member_forms, $arm_case_types;
if (!empty($user_id) && $user_id != 0) {
do_action('arm_before_activate_member', $user_id);
arm_set_member_status($user_id, 1);
return true;
}
if (MEMBERSHIP_DEBUG_LOG == true) {
$arm_case_types['shortcode']['protected'] = true;
$arm_case_types['shortcode']['type'] = 'member_activation';
$arm_case_types['shortcode']['message'] = esc_html__('Member couldn\'t be activate', 'ARMember');
$ARMember->arm_debug_response_log('arm_activate_member', $arm_case_types, $arm_errors, $wpdb->last_query, false);
}
return false;
}
public function arm_deactivate_member($user_id = 0) {
global $wp, $wpdb, $arm_errors, $ARMember, $arm_members_class, $arm_member_forms, $arm_global_settings, $arm_case_types;
if (!empty($user_id) && $user_id != 0) {
$this->arm_add_member_activation_key($user_id);
return true;
}
if (MEMBERSHIP_DEBUG_LOG == true) {
$arm_case_types['shortcode']['protected'] = true;
$arm_case_types['shortcode']['type'] = 'member_activation';
$arm_case_types['shortcode']['message'] = esc_html__('Member couldn\'t be deactivate', 'ARMember');
$ARMember->arm_debug_response_log('arm_deactivate_member', $arm_case_types, $arm_errors, $wpdb->last_query, false);
}
return false;
}
//Insert Activation Key.
public function arm_add_member_activation_key($user_id) {
global $wp, $wpdb, $arm_errors, $ARMember, $arm_members_class, $arm_member_forms, $arm_global_settings;
if (!empty($user_id) && $user_id != 0) {
//Generate activation key
$activation_key = wp_generate_password(10);
//Add key to the user meta
update_user_meta($user_id, 'arm_user_activation_key', $activation_key);
}
}
//Validate User Activation Key
public function arm_verify_user_activation($user_email, $key) {
global $wp, $wpdb, $arm_errors, $ARMember, $arm_global_settings;
if (!isset($user_email) || empty($user_email)) {
$err_msg = $arm_global_settings->common_message['arm_user_not_exist'];
$err_msg = (!empty($err_msg)) ? $err_msg : esc_html__('User does not exist.', 'ARMember');
$arm_errors->add('empty_username', $err_msg);
return $arm_errors;
}
//Get user data.
$user_data = get_user_by('email', $user_email);
$activation_key = get_user_meta($user_data->ID, 'arm_user_activation_key', true);
if (!empty($user_data) && (empty($activation_key) || $activation_key == '')) {
$err_msg = $arm_global_settings->common_message['arm_already_active_account'];
$message = (!empty($err_msg)) ? $err_msg : esc_html__('Your account has been activated.', 'ARMember');
$arm_errors->add('empty_username', $message, 'message');
} else if ($activation_key == $key) {
/* Update Activation Status */
arm_set_member_status($user_data->ID, 1);
/* Send New User Notification Mail */
armMemberSignUpCompleteMail($user_data);
/* Send Account Verify Notification Mail */
armMemberAccountVerifyMail($user_data);
/* Activation Success Message */
$message = (!empty($arm_global_settings->common_message['arm_already_active_account'])) ? $arm_global_settings->common_message['arm_already_active_account'] : esc_html__('Your account has been activated, please login to view your profile.', 'ARMember');
$arm_errors->add('empty_username', $message, 'message');
} else {
$err_msg = (!empty($arm_global_settings->common_message['arm_expire_activation_link'])) ? $arm_global_settings->common_message['arm_expire_activation_link'] : esc_html__('Activation link is expired or invalid.', 'ARMember');
$arm_errors->add('empty_username', $err_msg);
}
return $arm_errors;
}
/**
* Verify User Before Login.
*/
public function arm_user_register_verification($user, $user_login, $password) {
global $wp, $wpdb, $arm_errors, $ARMember, $arm_members_class, $arm_member_forms, $arm_global_settings, $arm_subscription_plans;
$activation_key = '';
//Check For Activation Key.
if (isset($_GET['arm-key']) && !empty($_GET['arm-key'])) {
$chk_key = stripslashes_deep(sanitize_text_field($_GET['arm-key']));
$user_email = stripslashes_deep(sanitize_email($_GET['email'])); //phpcs:ignore
return $this->arm_verify_user_activation($user_email, $chk_key);
}
//Check if blank form submited.
if (empty($user_login) || empty($password)) {
// figure out which one
if (empty($user_login)) {
$arm_errors->add('empty_username', esc_html__('The username field is empty.', 'ARMember'));
}
if (empty($password)) {
$arm_errors->add('empty_password', esc_html__('The password field is empty.', 'ARMember'));
}
// remove the ability to authenticate
remove_action('authenticate', 'wp_authenticate_username_password', 20);
// return appropriate error
return $arm_errors;
}
$user_info = get_user_by('login', $user_login);
if ($user_info == false) {
/* Allow User to login with Email Address */
$user_info = get_user_by('email', $user_login);
$user_login = ($user_info == false) ? $user_login : $user_info->user_login;
$err_msg = $arm_global_settings->common_message['arm_user_not_exist'];
$err_msg = (!empty($err_msg)) ? $err_msg : esc_html__('User does not exist.', 'ARMember');
$arm_errors->add('invalid_username', $err_msg);
// remove the ability to authenticate
remove_action('authenticate', 'wp_authenticate_username_password', 20);
return $arm_errors;
} else {
//Allow Super Admin be Logged-In without checking any conditions.
if (is_super_admin($user_info->ID)) {
return $user;
exit;
}
/* ----------------------/.Begin User's Subscription Expire Process./---------------------- */
//Check if User's plan is expired or not
$plan_ids = get_user_meta($user_info->ID, 'arm_user_plan_ids', true);
if (!empty($plan_ids) && is_array($plan_ids)) {
foreach ($plan_ids as $plan_id) {
if (!empty($plan_id) && $plan_id != 0) {
$now_time = strtotime(current_time('mysql'));
$plaData = get_user_meta($user_info->ID, 'arm_user_plan_' . $plan_id, true);
$expire_time = !empty($plaData['arm_expire_plan']) ? $plaData['arm_expire_plan'] : '' ;
if (!empty($expire_time) && $now_time >= $expire_time) {
$arm_subscription_plans->arm_user_plan_status_action(array('plan_id' => $plan_id, 'user_id' => $user_info->ID, 'action' => 'eot'));
}
}
}
}
/* ----------------------/.End User's Subscription Expire Process./---------------------- */
$activation_key = get_user_meta($user_info->ID, 'arm_user_activation_key', true);
}
$user_register_verification = $arm_global_settings->arm_get_single_global_settings('user_register_verification', 'auto');
if (empty($activation_key) || in_array($user_register_verification, array('auto', 'email', 'manual'))) {
$user_status = apply_filters('arm_check_member_status_before_login', TRUE, $user_info->ID); //Check Member Status Before Login.
if ($user_status == TRUE) {
return $user;
exit;
} else {
if ($user_status == FALSE) {
$err_msg = $arm_global_settings->common_message['arm_not_authorized_login'];
$err_msg = (!empty($err_msg)) ? $err_msg : esc_html__('You are not authorized to login.', 'ARMember');
$arm_errors->add('access_denied', $err_msg);
} else {
$arm_errors = $user_status;
}
remove_action('authenticate', 'wp_authenticate_username_password', 20);
return $arm_errors;
exit;
}
}
}
function arm_members_hide_column() {
global $ARMember, $arm_capabilities_global;
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_manage_members'], '1',1); //phpcs:ignore --Reason:Verifying nonce
$column_list = isset($_POST['column_list']) ? sanitize_text_field($_POST['column_list']) : ''; //phpcs:ignore
$form_id = isset($_POST['form_id']) ? intval($_POST['form_id']) : '0'; //phpcs:ignore
if ($column_list != "") {
$user_id = get_current_user_id();
$members_column_list = explode(',', $column_list);
$members_show_hide_serialize = maybe_serialize($members_column_list);
//update_option('arm_members_hide_show_columns', $members_show_hide_serialize);
$prev_value = maybe_unserialize(get_user_meta($user_id, 'arm_members_hide_show_columns_' . $form_id, true));
update_user_meta($user_id, 'arm_members_hide_show_columns_' . $form_id, $members_show_hide_serialize);
}
die();
}
function arm_filter_members_list() {
global $ARMember, $arm_capabilities_global;
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_manage_members'], '1',1); //phpcs:ignore --Reason:Verifying nonce.
if (file_exists(MEMBERSHIP_VIEWS_DIR . '/arm_members_list_records.php')) {
include( MEMBERSHIP_VIEWS_DIR . '/arm_members_list_records.php');
}
die();
}
function arm_handle_import_export($request) {
global $wp, $wpdb, $ARMember, $arm_global_settings, $arm_subscription_plans, $arm_capabilities_global;
if (isset($request['arm_action']) && !empty($request['arm_action'])) {
$ARMember->arm_check_user_cap( $arm_capabilities_global['arm_import_export'], '1',1); //phpcs:ignore --Reason:Verifying nonce
switch ($request['arm_action']) {
case 'user_export_csv':
case 'user_export_xls':
case 'user_export_xml':
self::arm_user_export_handle($request);
break;
case 'settings_export':
self::arm_settings_export_handle($request);
break;
case 'settings_import':
self::arm_settings_import_handle($request);
break;
case 'download_sample':
self::arm_download_sample_csv($request);
break;
default:
break;
}
}
}
function arm_get_user_import_default_fields() {
global $wp, $wpdb, $ARMember;
$userdata_fields = array(
'userdata' => array(
'ID' => 'ID', 'id' => 'ID',
'user_login' => 'user_login', 'username' => 'user_login', 'login' => 'user_login',
'user_pass' => 'user_pass', 'password' => 'user_pass',
'user_email' => 'user_email', 'email' => 'user_email',
'user_url' => 'user_url', 'website' => 'user_url', 'url' => 'user_url',
'user_nicename' => 'user_nicename', 'nicename' => 'user_nicename',
'display_name' => 'display_name', 'name' => 'display_name',
'user_registered' => 'user_registered', 'registered' => 'user_registered', 'joined' => 'user_registered',
'role' => 'role', 'user_role' => 'role',
'first_name' => 'first_name', 'firstname' => 'first_name',
'last_name' => 'last_name', 'lastname' => 'last_name',
'nickname' => 'nickname',
'description' => 'description', 'biographical_info' => 'description',
'rich_editing' => 'rich_editing',
'show_admin_bar_front' => 'show_admin_bar_front',
'admin_color' => 'admin_color',
'use_ssl' => 'use_ssl',
'comment_shortcuts' => 'comment_shortcuts'
),
'usermeta' => array(
'subscription_plan' => 'arm_user_plan_ids', 'plan' => 'arm_user_plan_ids',
'status' => 'status', 'member_status' => 'status', 'user_status' => 'status',
/* import time manually start plan */
'arm_subscription_start_date' => 'arm_subscription_start_date'
)
);
$userdata_fields = apply_filters('arm_user_import_default_fields', $userdata_fields);
return $userdata_fields;
}
function arm_handle_import_user_meta() {
global $wp, $wpdb, $ARMember, $arm_global_settings, $arm_subscription_plans, $arm_case_types, $arm_member_forms, $arm_capabilities_global,$arm_ajax_pattern_start,$arm_ajax_pattern_end;
$ARMember->arm_session_start();
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_import_export'], '1',1); //phpcs:ignore --Reason:Verifying nonce
set_time_limit(0);
$file_data_array = $errors = array();
$request = $_POST;//phpcs:ignore
$_SESSION['imported_users'] = 0;
$action = sanitize_text_field($request['arm_action']);
$up_file = sanitize_text_field($request['import_user']);
if (isset($up_file)) {
$up_file_ext = strtolower(pathinfo($up_file, PATHINFO_EXTENSION));
echo $arm_ajax_pattern_start;
if (in_array($up_file_ext, array('csv', 'xls', 'xlsx', 'xml'))) {
if ($up_file_ext == 'xml') {
if(file_exists(ABSPATH . 'wp-admin/includes/file.php')){
require_once(ABSPATH . 'wp-admin/includes/file.php');
}
WP_Filesystem();
global $wp_filesystem;
$arm_loader_url = MEMBERSHIP_UPLOAD_DIR . '/' . basename($up_file);
$fileContent = $wp_filesystem->get_contents($arm_loader_url);
$xmlData = armXML_to_Array($fileContent);
if (isset($xmlData['members']['member']) && !empty($xmlData['members']['member'])) {
$file_data_array = $xmlData['members']['member'];
} else {
if (MEMBERSHIP_DEBUG_LOG == true) {
$arm_case_types['shortcode']['protected'] = true;
$arm_case_types['shortcode']['type'] = 'import_user_xml';
$arm_case_types['shortcode']['message'] = esc_html__('Error during file upload', 'ARMember');
$ARMember->arm_debug_response_log('arm_handle_import_user', $arm_case_types, $xmlData, $wpdb->last_query, false);
}
$errors[] = esc_html__('Error during file upload.', 'ARMember');
}
} else {
//Read CSV, XLS Files
if (file_exists(MEMBERSHIP_LIBRARY_DIR . '/class-readcsv.php')) {
require_once(MEMBERSHIP_LIBRARY_DIR . '/class-readcsv.php');
}
$csv_reader = new ReadCSV(MEMBERSHIP_UPLOAD_DIR . '/' . basename($up_file));
if ($csv_reader->is_file == TRUE) {
$file_data_array = $csv_reader->get_data();
} else {
if (MEMBERSHIP_DEBUG_LOG == true) {
$arm_case_types['shortcode']['protected'] = true;
$arm_case_types['shortcode']['type'] = 'import_user_CSV';
$arm_case_types['shortcode']['message'] = esc_html__('Error during file upload', 'ARMember');
$ARMember->arm_debug_response_log('arm_handle_import_user', $arm_case_types, $csv_reader, $wpdb->last_query, false);
}
$errors[] = esc_html__('Error during file upload.', 'ARMember');
}
}
$allready_exists = array('username', 'email', 'website', 'joined', 'user_nicename', 'display_name', 'user_pass', 'biographical_info');
$allready_exists_meta = $arm_member_forms->arm_get_db_form_fields(true);
$select_user_meta = array();
foreach ($allready_exists_meta as $exist_meta) {
array_push($select_user_meta, $exist_meta['id']);
array_push($select_user_meta, $exist_meta['label']);
array_push($select_user_meta, $exist_meta['meta_key']);
}
$exists_user_meta = array_merge_recursive($allready_exists, $select_user_meta);
$dbProfileFields = $arm_member_forms->arm_get_db_form_fields();
if (!empty($file_data_array[0])):
?><label class = "account_detail_radio arm_account_detail_options">
<input type="checkbox" class="arm_icheckbox arm_import_all_user_meta" name="arm_import_all_user_meta" id="arm_import_all_user_meta" />
<label for="arm_import_all_user_meta"><?php esc_html_e('Select All Meta', 'ARMember'); ?></label>
<div class="arm_list_sortable_icon"></div>
</label><?php
foreach ($file_data_array[0] as $key => $title):
$title = '';
switch ($key):
case 'id':
$title = esc_html__('User ID', 'ARMember');
break;
case 'username':
$title = esc_html__('Username', 'ARMember');
break;
case 'email':
$title = esc_html__('Email Address', 'ARMember');
break;
case 'first_name':
$title = esc_html__('First Name', 'ARMember');
break;
case 'last_name':
$title = esc_html__('Last Name', 'ARMember');
break;
case 'nickname':
$title = esc_html__('Nick Name', 'ARMember');
break;
case 'display_name':
$title = esc_html__('Display Name', 'ARMember');
break;
case 'biographical_info':
$title = esc_html__('Info', 'ARMember');
break;
case 'website':
$title = esc_html__('Website', 'ARMember');
break;
case 'joined':
$title = esc_html__('Joined Date', 'ARMember');
break;
case 'arm_subscription_start_date':
$title = esc_html__('Subscription Start Date', 'ARMember');
break;
default:
if (!in_array($key, array('role', 'status', 'subscription_plan'))) {
$title = $key;
if (!empty($dbProfileFields['default'])) {
foreach ($dbProfileFields['default'] as $fieldMetaKey => $fieldOpt) {
if (empty($fieldMetaKey) || in_array($fieldOpt['type'], array('hidden', 'html', 'section', 'rememberme','arm_captcha'))) {
continue;
}
if ($fieldMetaKey == $key) {
$title = $fieldOpt['label'];
}
}
}
if (!empty($dbProfileFields['other'])) {
foreach ($dbProfileFields['other'] as $fieldMetaKey => $fieldOpt) {
if (empty($fieldMetaKey) || in_array($fieldOpt['type'], array('hidden', 'html', 'section', 'rememberme','arm_captcha'))) {
continue;
}
if ($fieldMetaKey == $key) {
$title = $fieldOpt['label'];
}
}
}
}
break;
endswitch;
if ($key == 'id' || $title == ''):
continue;
endif;
$checkedDefault = " checked='checked' disabled='disabled' ";
if (!in_array($key, array('username', 'email'))) {
$checkedDefault = "";
}
$user_meta = (in_array($key, $exists_user_meta) || in_array(str_replace(' ', '_', $key), $exists_user_meta)) ? esc_html__('Existing', 'ARMember') : esc_html__('New', 'ARMember');
?>
<label class = "account_detail_radio arm_account_detail_options">
<input type = "checkbox" value = "<?php echo esc_attr($key); ?>" class = "arm_icheckbox arm_import_user_meta" name = "import_user_meta[<?php echo esc_attr($key); ?>]" id = "arm_profile_field_input_<?php echo esc_attr($key); ?>" <?php echo esc_html($checkedDefault); ?> />
<label for="arm_profile_field_input_<?php echo esc_attr($key); ?>"><?php echo esc_html($title); ?></label>
<div class="arm_list_sortable_icon"></div>
<span class="arm_user_meta_<?php echo esc_attr($user_meta); ?> arm_user_meta_existing_meta_txt" style="color: gray;font-size: 11px; font-style: italic; text-align: center; width: 100%; margin: 0 0 0 34px;"><?php echo '(' . esc_html($user_meta) . esc_html__(' Meta', 'ARMember') . ')'; ?> </span>
</label>
<?php
endforeach;
endif;
}
echo $arm_ajax_pattern_end;
}
exit;
}
function arm_handle_import_user() {
global $wp, $wpdb, $ARMember, $arm_global_settings, $arm_subscription_plans, $arm_case_types, $arm_member_forms, $arm_capabilities_global,$arm_ajax_pattern_start,$arm_ajax_pattern_end;
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_import_export'], '1',1); //phpcs:ignore --Reason: Verifying nonce
set_time_limit(0);
$file_data_array = $user_ids = $u_errors = $errors = array();
$request = $_POST;//phpcs:ignore
$action = sanitize_text_field($request['arm_action']);
$up_file = sanitize_text_field($request['import_user']);
$dbProfileFields = $arm_member_forms->arm_get_db_form_fields();
$grid_columns = array();
$arm_grid_columns = explode(',', $request['arm_user_metas_to_import']);
foreach ($arm_grid_columns as $key => $val) {
switch ($val):
case 'id':
$grid_columns[$val] = esc_html__('User ID', 'ARMember');
break;
case 'username':
$grid_columns[$val] = esc_html__('Username', 'ARMember');
break;
case 'email':
$grid_columns[$val] = esc_html__('Email Address', 'ARMember');
break;
case 'first_name':
$grid_columns[$val] = esc_html__('First Name', 'ARMember');
break;
case 'last_name':
$grid_columns[$val] = esc_html__('Last Name', 'ARMember');
break;
case 'nickname':
$grid_columns[$val] = esc_html__('Nick Name', 'ARMember');
break;
case 'display_name':
$grid_columns[$val] = esc_html__('Display Name', 'ARMember');
break;
case 'biographical_info':
$grid_columns[$val] = esc_html__('Info', 'ARMember');
break;
case 'website':
$grid_columns[$val] = esc_html__('Website', 'ARMember');
break;
case 'joined':
$grid_columns[$val] = esc_html__('Joined Date', 'ARMember');
break;
case 'arm_subscription_start_date':
$grid_columns[$val] = esc_html__('Subscription Start Date', 'ARMember');
break;
default:
if (!in_array($val, array('role', 'status', 'subscription_plan'))) {
$grid_columns[$val] = $val;
if (!empty($dbProfileFields['default'])) {
foreach ($dbProfileFields['default'] as $fieldMetaKey => $fieldOpt) {
if (empty($fieldMetaKey) || in_array($fieldOpt['type'], array('hidden', 'html', 'section', 'rememberme'))) {
continue;
}
if ($fieldMetaKey == $val) {
$grid_columns[$val] = $fieldOpt['label'];
}
}
}
if (!empty($dbProfileFields['other'])) {
foreach ($dbProfileFields['other'] as $fieldMetaKey => $fieldOpt) {
if (empty($fieldMetaKey) || in_array($fieldOpt['type'], array('hidden', 'html', 'section', 'rememberme'))) {
continue;
}
if ($fieldMetaKey == $val) {
$grid_columns[$val] = $fieldOpt['label'];
}
}
}
}
break;
endswitch;
}
$up_plan_id = !empty($request['plan_id']) ? intval($request['plan_id']) : 0;
$users_data = array();
if (isset($up_file)) {
$up_file_ext = pathinfo($up_file, PATHINFO_EXTENSION);
echo $arm_ajax_pattern_start;
if (in_array($up_file_ext, array('csv', 'xls', 'xlsx', 'xml'))) {
if ($up_file_ext == 'xml') {
if(file_exists(ABSPATH . 'wp-admin/includes/file.php')){
require_once(ABSPATH . 'wp-admin/includes/file.php');
}
WP_Filesystem();
global $wp_filesystem;
$arm_loader_url = MEMBERSHIP_UPLOAD_DIR . '/' . basename($up_file);
$fileContent = $wp_filesystem->get_contents($arm_loader_url);
$xmlData = armXML_to_Array($fileContent);
if (isset($xmlData['members']['member']) && !empty($xmlData['members']['member'])) {
$file_data_array = $xmlData['members']['member'];
} else {
if (MEMBERSHIP_DEBUG_LOG == true) {
$arm_case_types['shortcode']['protected'] = true;
$arm_case_types['shortcode']['type'] = 'import_user_xml';
$arm_case_types['shortcode']['message'] = esc_html__('Error during file upload', 'ARMember');
$ARMember->arm_debug_response_log('arm_handle_import_user', $arm_case_types, $xmlData, $wpdb->last_query, false);
}
$errors[] = esc_html__('Error during file upload.', 'ARMember');
}
} else {
//Read CSV, XLS Files
if (file_exists(MEMBERSHIP_LIBRARY_DIR . '/class-readcsv.php')) {
require_once(MEMBERSHIP_LIBRARY_DIR . '/class-readcsv.php');
}
$csv_reader = new ReadCSV(MEMBERSHIP_UPLOAD_DIR . '/' . basename($up_file));
if ($csv_reader->is_file == TRUE) {
$file_data_array = $csv_reader->get_data();
} else {
if (MEMBERSHIP_DEBUG_LOG == true) {
$arm_case_types['shortcode']['protected'] = true;
$arm_case_types['shortcode']['type'] = 'import_user_CSV';
$arm_case_types['shortcode']['message'] = esc_html__('Error during file upload', 'ARMember');
$ARMember->arm_debug_response_log('arm_handle_import_user', $arm_case_types, $csv_reader, $wpdb->last_query, false);
}
$errors[] = esc_html__('Error during file upload.', 'ARMember');
}
}
$users_array = array();
$arm_uniqe_user = array();
if (!empty($file_data_array)) {
$is_password_column = 0;
$count_row = 0;
foreach ($file_data_array as $fdaVal) {
if (isset($fdaVal['user_pass'])) {
$is_password_column = 1;
}
$fdaVal['username'] = isset($fdaVal['username']) ? $fdaVal['username'] : '';
$fdaVal['email'] = isset($fdaVal['email']) ? $fdaVal['email'] : '';
if (!empty($arm_uniqe_user) && ( in_array($fdaVal['username'], $arm_uniqe_user) || in_array($fdaVal['email'], $arm_uniqe_user) )) {
continue;
}
array_push($arm_uniqe_user, $fdaVal['username']);
array_push($arm_uniqe_user, $fdaVal['email']);
if (isset($fdaVal['username']) && !empty($fdaVal['username'])) {
//$users_array[] = $fdaVal;
foreach ($grid_columns as $key => $val) {
//$users_array[$count_row][$key] = htmlspecialchars(utf8_encode($fdaVal[$key]), ENT_NOQUOTES);
$users_array[$count_row][$key] = htmlspecialchars($fdaVal[$key], ENT_NOQUOTES);
}
$count_row++;
}
}
}
unset($arm_uniqe_user);
if (!empty($users_array))
{
?>
<div class="">
<span class="arm_warning_text arm_info_text arm-note-message --notice arm_margin_0"><?php esc_html_e(" Note that importing user's data will", 'ARMember'); ?><strong> <?php esc_html_e('Skip', 'ARMember'); ?> </strong><?php esc_html_e("existing user(s), if any duplicate user found.", 'ARMember'); ?>
<br/>
( <?php esc_html_e('Cosidering duplicate', 'ARMember'); ?> <strong><?php esc_html_e('Username', 'ARMember'); ?> </strong><?php esc_html_e('and', 'ARMember'); ?><strong> <?php esc_html_e('Email', 'ARMember'); ?></strong> )
</span>
<table width="100%" cellspacing="0" class="arm_margin_top_32 arm_margin_0 arm_import_user_details_table">
<tr>
<th class="center cb-select-all-th arm_max_width_60 arm_text_align_center" ><input id="cb-select-all-1" type="checkbox" class="chkstanard arm_all_import_user_chks"></th>
<?php
if (!empty($grid_columns)):
foreach ($grid_columns as $key => $title):
if ($key == 'id'):
continue;
endif;
?>
<th data-key="<?php echo esc_attr($key); ?>" class="arm_grid_th_<?php echo esc_attr($key); ?>" style="min-width: 100px;"><?php echo esc_html($title); ?></th>
<?php
endforeach;
endif;
?>
</tr>
<?php
foreach ($users_array as $value) {
?>
<tr>
<td>
<?php
/* Check User's `username` or `email` If user exist AND if `Update User` Set to true */
if (isset($value['username'])) {
$user = get_user_by('login', $value['username']);
}
if (!$user && isset($value['email'])) {
$user = get_user_by('email', $value['email']);
}
$user_disable = '';
if ($user || empty($value['email']) || !is_email($value['email'])) {
$user_disable = 'disabled=disabled';
} else {
$users_data[$value['username']] = $value;
}
?>
<input id="cb-item-action-<?php echo esc_attr($value['username']); ?>" <?php echo esc_attr($user_disable); ?> class="chkstanard arm_import_user_chks" type="checkbox" value="<?php echo esc_attr($value['username']); ?>" name="item-action[]">
</td>
<?php
foreach ($grid_columns as $key => $val) {
//echo isset($value[$key]) ? (!empty($value[$key])) ? '<td>' . utf8_encode($value[$key]) . '</td>' : '<td>-</td>' : ''; //phpcs:ignore
echo isset($value[$key]) ? (!empty($value[$key])) ? '<td>' . $value[$key] . '</td>' : '<td>-</td>' : '';
}
?>
</tr>
<?php
}
?>
</table>
<input type="hidden" id="arm_import_file_url" name="file_url" value="<?php echo esc_url($up_file); ?>" />
<input type="hidden" id="arm_import_plan_id" name="plan_id" value="<?php echo intval( $up_plan_id ); ?>" />
<input type="hidden" id="is_arm_password_column" name="is_arm_password_column" value="<?php echo esc_attr($is_password_column); ?>"/>
<?php
$arm_add_other_input_outside = "";
echo apply_filters('arm_add_other_input_for_import_outside', $arm_add_other_input_outside, $request); //phpcs:ignore
?>
<textarea id="arm_import_users_data" name="users_data" style="display:none;"><?php echo json_encode($users_data); ?></textarea>
</div>
<?php
}
}
echo $arm_ajax_pattern_end;
}
exit;
}
function arm_add_import_user() {
global $wpdb, $ARMember, $arm_members_class, $arm_global_settings, $arm_subscription_plans, $arm_case_types, $arm_members_badges, $arm_member_forms, $arm_email_settings, $arm_capabilities_global;
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_import_export'], '1',1); //phpcs:ignore --Reason:Verifying nonce
if (!isset($_POST)) { //phpcs:ignore
return;
}
$ARMember->arm_session_start();
$arm_global_settings->arm_set_ini_for_importing_users();
$message = '';
$file_data_array = $user_ids = $u_errors = $errors = array();
$ip_address = $ARMember->arm_get_ip_address();
$user_default_fields = self::arm_get_user_import_default_fields();
$send_notification = isset($_REQUEST['send_email']) ? sanitize_text_field( $_REQUEST['send_email'] ) : 'false';
$password_type = isset($_REQUEST['password_type']) ? sanitize_text_field($_REQUEST['password_type']) : "hashed";
$user_password_type = isset($_REQUEST['generate_password_type']) ? sanitize_text_field($_REQUEST['generate_password_type']) : false; //phpcs:ignore
$new_password = isset($_REQUEST['fixed_password']) ? $_REQUEST['fixed_password'] : ''; //phpcs:ignore
$postedFormData = json_decode(stripslashes_deep($_POST['filtered_form']), true);//phpcs:ignore
$posted_user_data = htmlspecialchars($postedFormData['users_data'], ENT_NOQUOTES);
$file_data_array = json_decode($posted_user_data, true);
if (json_last_error() != JSON_ERROR_NONE) {
$file_data_array = maybe_unserialize($posted_user_data);
}
$plan_id = isset($postedFormData['plan_id']) ? $postedFormData['plan_id'] : 0;
$ids = isset($postedFormData['item-action']) ? $postedFormData['item-action'] : array();
$mail_count = 0;
$imp_count = 0;
if( empty( $_REQUEST['arm_import_export_continue_flag'] ) )
{
$_SESSION['imported_users'] = 0;
}
if (empty($ids)) {
$errors[] = esc_html__('Please select one or more records.', 'ARMember');
} else {
if (!is_array($ids)) {
$ids = explode(',', $ids);
}
if (is_array($ids)) {
if (!empty($file_data_array)) {
$users_data = array();
foreach ($file_data_array as $k1 => $val1) {
if (!in_array($k1, $ids)) {
continue;
}
foreach ($val1 as $k2 => $val2) {
if (in_array($k2, array_keys($user_default_fields['userdata']))) {
if ($user_default_fields['userdata'][$k2] == 'role') {
}
if ($user_default_fields['userdata'][$k2] == 'user_registered') {
if (empty($val2)) {
$val2 = date("Y-m-d H:i:s");
}
$val2 = date("Y-m-d H:i:s", strtotime($val2));
}
unset($file_data_array[$k1][$k2]);
if (!empty($val2)) {
$users_data[$k1]['userdata'][$user_default_fields['userdata'][$k2]] = $val2; /* Set Matched Key Value */
}
} elseif (in_array($k2, array_keys($user_default_fields['usermeta']))) {
unset($file_data_array[$k1][$k2]); /* Remove Old Key From Array */
if (in_array($user_default_fields['usermeta'][$k2], array('arm_user_plan_ids', 'status'))) {
unset($users_data[$k1]['usermeta'][$k2]);
} else {
$users_data[$k1]['usermeta'][$user_default_fields['usermeta'][$k2]] = $val2; /* Set Matched Key Value */
}
} else {
$users_data[$k1]['usermeta'][$k2] = $val2;
}
}
}
if (!empty($users_data)) {
$allready_exists = array('username', 'email', 'website', 'joined', 'user_nicename', 'display_name', 'user_pass', 'biographical_info');
$allready_exists_meta = $arm_member_forms->arm_get_db_form_fields(true);
$select_user_meta = array();
foreach ($allready_exists_meta as $exist_meta) {
array_push($select_user_meta, $exist_meta['id']);
array_push($select_user_meta, $exist_meta['label']);
array_push($select_user_meta, $exist_meta['meta_key']);
}
$exists_user_meta = array_merge_recursive($allready_exists, $select_user_meta);
if (count($users_data) > 50) {
$chunked_user_data = array_chunk($users_data, 50, false);
$total_chunked_data = count($chunked_user_data);
$change_password_page_id = isset($arm_global_settings->global_settings['change_password_page_id']) ? $arm_global_settings->global_settings['change_password_page_id'] : 0;
$arm_change_password_page_url = $arm_global_settings->arm_get_permalink('', $change_password_page_id);
$arm_change_password_page_url = apply_filters('arm_modify_redirection_page_external', $arm_change_password_page_url,0,$change_password_page_id);
$temp_detail = $arm_email_settings->arm_get_email_template($arm_email_settings->templates->forgot_passowrd_user);
for ($ch_data = 0; $ch_data < $total_chunked_data; $ch_data++) {
$chunked_data = null;
$chunked_data = $chunked_user_data[$ch_data];
foreach ($chunked_data as $rkey => $udata) {
$user_main_data = $udata['userdata'];
$user_meta_data = isset($udata['usermeta']) ? $udata['usermeta'] : array();
/* Get User If `ID` is available */
if (isset($user_main_data['ID'])) {
unset($user_main_data['ID']);
}
/* Check User's `username` or `email` If user exist AND if `Update User` Set to true */
if (isset($user_main_data['user_login'])) {
$user = get_user_by('login', $user_main_data['user_login']);
}
if (!$user && isset($user_main_data['user_email'])) {
$user = get_user_by('email', $user_main_data['user_email']);
}
/* Skip existing users */
if ($user) {
continue;
}
if (!empty($user_main_data['user_email'])) {
$update = FALSE;
if ($user) {
$user_main_data['ID'] = $user->ID;
$update = TRUE;
}
/* Set Password For new users */
//$user_main_data['user_pass'] = wp_generate_password(8, false);
// $user_main_data['user_pass'] = 'adminconnect';
$generate_from_csv = 0;
if ($user_password_type == 'generate_dynamic') {
$user_main_data['user_pass'] = wp_generate_password(8, false);
} else if ($user_password_type == 'generate_fixed') {
$user_main_data['user_pass'] = $new_password;
} else if ($user_password_type == 'generate_from_csv') {
$generate_from_csv = 1;
}
$plaintext_pass = $user_main_data['user_pass'];
$user_role = (!empty($user_main_data['role'])) ? $user_main_data['role'] : '';
unset($user_main_data['role']);
if (isset($user_main_data['nickname'])) {
$user_main_data['user_nicename'] = $user_main_data['nickname'];
}
if (isset($user_main_data['joined'])) {
$user_main_data['user_registered'] = $user_main_data['joined'];
}
if ($generate_from_csv == 0) {
if ($update) {
$user_id = wp_update_user($user_main_data);
} else {
// $user_main_data['user_registered'] = date("Y-m-d H:i:s");
$user_id = wp_insert_user($user_main_data);
$arm_members_badges->arm_add_user_achieve_by_type($user_id, 0, 'defaultbadge');
}
} else {
if ($password_type == 'plain') {
if ($update) {
$user_id = wp_update_user($user_main_data);
} else {
// $user_main_data['user_registered'] = date("Y-m-d H:i:s");
$user_id = wp_insert_user($user_main_data);
$arm_members_badges->arm_add_user_achieve_by_type($user_id, 0, 'defaultbadge');
}
} else {
global $wpdb;
if ($update) {
$user_id = wp_update_user($user_main_data);
$wpdb->query( $wpdb->prepare("UPDATE " . $wpdb->users . " set `user_pass`=%s where `ID`= %d",$user_main_data['user_pass'] , $user_id)); //phpcs:ignore --Reason $wpdb->users is a table name
} else {
$user_id = wp_insert_user($user_main_data);
$arm_members_badges->arm_add_user_achieve_by_type($user_id, 0, 'defaultbadge');
$wpdb->query( $wpdb->prepare("UPDATE " . $wpdb->users . " set `user_pass`=%s where `ID`=%d",$user_main_data['user_pass'] , $user_id)); //phpcs:ignore --Reason $wpdb->users is a table name
}
}
}
/* Is there an error o_O? */
if (is_wp_error($user_id)) {
$u_errors[$rkey] = $user_id;
} else {
/* If no error, let's update the user meta too! */
if (!empty($user_meta_data)) {
foreach ($user_meta_data as $metakey => $metavalue) {
if ($metakey != 'arm_subscription_start_date')
{
if (!in_array($metakey, $exists_user_meta))
{
$fields = array('label' => $metakey);
$metakey = str_replace(' ', '_', $metakey);
$arm_member_forms->arm_db_add_preset_form_field($fields, $metakey);
}
else if(!empty($allready_exists_meta) && is_array($allready_exists_meta))
{
if(!empty($allready_exists_meta[$metakey]) && !empty($allready_exists_meta[$metakey]['type']) && $allready_exists_meta[$metakey]['type'] == 'checkbox')
{
$metavalue = explode(',',$metavalue);
}
}
$metavalue = maybe_unserialize($metavalue);
update_user_meta($user_id, $metakey, $metavalue);
}
}
}
update_user_meta($user_id, 'arm_last_login_date', date('Y-m-d H:i:s'));
/* add user to plan */
if(empty($planObj))
{
$planObj = new ARM_Plan($plan_id);
}
$posted_data = array(
'arm_user_plan' => $plan_id,
'payment_gateway' => 'manual',
'arm_selected_payment_mode' => 'manual_subscription',
'arm_primary_status' => 1,
'arm_secondary_status' => 0,
'arm_subscription_start_date' => isset($user_meta_data['arm_subscription_start_date']) ? $user_meta_data['arm_subscription_start_date'] : '',
'arm_user_import' => true,
// 'action' => 'add_member'
);
$admin_save_flag = 1;
do_action('arm_member_update_meta', $user_id, $posted_data, $admin_save_flag);
do_action('arm_action_outside_after_assign_import_user_plan', $user_id, $plan_id, $postedFormData);
if (!$planObj->is_free()) {
$this->arm_manual_update_user_data($user_id, $plan_id, $posted_data);
}
/* Some plugins may need to do things after one user has been imported. Who know? */
if ($send_notification == 'true') {
$message = '';
$user = new WP_User($user_id);
armMemberSignUpCompleteMail($user, $plaintext_pass);
if ($mail_count == 100) {
sleep(10);
$mail_count = 0;
}
if (isset($user_main_data['user_email']) && $user_main_data['user_email'] != '') {
if (function_exists('get_password_reset_key')) {
$user_data = get_user_by('email', trim($user_main_data['user_email']));
$key = get_password_reset_key($user_data);
} else {
do_action('retreive_password', $user_main_data['user_login']); /* Misspelled and deprecated */
do_action('retrieve_password', $user_main_data['user_login']);
/* Generate something random for a key... */
$key = wp_generate_password(20, false);
do_action('retrieve_password_key', $user_main_data['user_login'], $key);
global $wp_hasher;
/* 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_main_data['user_login']));
}
update_user_meta($user_id, 'arm_reset_password_key', $key);
if ($change_password_page_id == 0) {
$rp_link = network_site_url("wp-login.php?action=armrp&key=" . rawurlencode($key) . "&login=" . rawurlencode($user_main_data['user_login']), 'login');
} else {
$arm_change_password_page_url = $arm_global_settings->add_query_arg('action', 'armrp', $arm_change_password_page_url);
$arm_change_password_page_url = $arm_global_settings->add_query_arg('key', rawurlencode($key), $arm_change_password_page_url);
$arm_change_password_page_url = $arm_global_settings->add_query_arg('login', rawurlencode($user_main_data['user_login']), $arm_change_password_page_url);
$rp_link = $arm_change_password_page_url;
$rp_link = apply_filters('arm_modify_redirection_page_external', $rp_link,0,$change_password_page_id);
}
if ($temp_detail->arm_template_status == '1') {
$temp_detail = apply_filters('arm_get_modify_mail_template_object_for_send_mail', $temp_detail,$user_id);
$title = $arm_global_settings->arm_filter_email_with_user_detail($temp_detail->arm_template_subject, $user_id, 0);
$message = $arm_global_settings->arm_filter_email_with_user_detail($temp_detail->arm_template_content, $user_id, 0, 0, $key);
$message = str_replace('{ARM_RESET_PASSWORD_LINK}', '<a href="' . $rp_link . '">' . $rp_link . '</a>', $message);
$message = str_replace('{VAR1}', '<a href="' . $rp_link . '">' . $rp_link . '</a>', $message);
} else {
$title = $blogname . ' ' . esc_html__('Password Reset', 'ARMember');
$message = esc_html__('Someone requested that the password be reset for the following account:', 'ARMember') . "\r\n\r\n";
$message .= network_home_url('/') . "\r\n\r\n";
$message .= esc_html__('Username', 'ARMember') . ": " . $user_login . "\r\n\r\n";
$message .= esc_html__('If this was a mistake, just ignore this email and nothing will happen.', 'ARMember') . "\r\n\r\n";
$message .= esc_html__('To reset your password, visit the following address:', 'ARMember') . " " . $rp_link . "\r\n\r\n";
}
$title = apply_filters('retrieve_password_title', $title, $user_data->ID);
$message = apply_filters('retrieve_password_message', $message, $key, $user_data->user_login, $user_data);
$send_mail = $arm_global_settings->arm_wp_mail('', $user_main_data['user_email'], $title, $message);
// $user_send_mail = $arm_global_settings->arm_wp_mail('', $user_main_data['user_email'], $subject, $message);
}
}
do_action('arm_after_user_import', $user_id);
$user_ids[] = $user_id;
if (is_multisite()) {
add_user_to_blog($GLOBALS['blog_id'], $user_id, 'ARMember');
}
$_SESSION['imported_users']++;
@session_write_close();
$ARMember->arm_session_start(true);
$mail_count++;
$imp_count++;
}
}
}
}
} else {
$change_password_page_id = isset($arm_global_settings->global_settings['change_password_page_id']) ? $arm_global_settings->global_settings['change_password_page_id'] : 0;
$arm_change_password_page_url = $arm_global_settings->arm_get_permalink('', $change_password_page_id);
$arm_change_password_page_url = apply_filters('arm_modify_redirection_page_external', $arm_change_password_page_url,0,$change_password_page_id);
$temp_detail = $arm_email_settings->arm_get_email_template($arm_email_settings->templates->forgot_passowrd_user);
foreach ($users_data as $rkey => $udata) {
$user_main_data = $udata['userdata'];
$user_meta_data = isset($udata['usermeta']) ? $udata['usermeta'] : array();
/* Get User If `ID` is available */
if (isset($user_main_data['ID'])) {
unset($user_main_data['ID']);
}
/* Check User's `username` or `email` If user exist AND if `Update User` Set to true */
if (isset($user_main_data['user_login'])) {
$user = get_user_by('login', $user_main_data['user_login']);
}
if (!$user && isset($user_main_data['user_email'])) {
$user = get_user_by('email', $user_main_data['user_email']);
}
/* Skip existing users */
if ($user) {
continue;
}
if (!empty($user_main_data['user_email'])) {
$update = FALSE;
if ($user) {
$user_main_data['ID'] = $user->ID;
$update = TRUE;
}
$generate_from_csv = 0;
if ($user_password_type == 'generate_dynamic') {
$user_main_data['user_pass'] = wp_generate_password(8, false);
} else if ($user_password_type == 'generate_fixed') {
$user_main_data['user_pass'] = $new_password;
} else if ($user_password_type == 'generate_from_csv') {
$generate_from_csv = 1;
}
$plaintext_pass = $user_main_data['user_pass'];
$user_role = (!empty($user_main_data['role'])) ? $user_main_data['role'] : '';
unset($user_main_data['role']);
if (isset($user_main_data['nickname'])) {
$user_main_data['user_nicename'] = $user_main_data['nickname'];
}
if (isset($user_main_data['joined'])) {
$user_main_data['user_registered'] = $user_main_data['joined'];
}
if ($generate_from_csv == 0) {
if ($update) {
$user_id = wp_update_user($user_main_data);
} else {
// $user_main_data['user_registered'] = date("Y-m-d H:i:s");
$user_id = wp_insert_user($user_main_data);
$arm_members_badges->arm_add_user_achieve_by_type($user_id, 0, 'defaultbadge');
}
} else {
if ($password_type == 'plain') {
if ($update) {
$user_id = wp_update_user($user_main_data);
} else {
// $user_main_data['user_registered'] = date("Y-m-d H:i:s");
$user_id = wp_insert_user($user_main_data);
$arm_members_badges->arm_add_user_achieve_by_type($user_id, 0, 'defaultbadge');
}
} else {
global $wpdb;
if ($update) {
$user_id = wp_update_user($user_main_data);
$wpdb->query( $wpdb->prepare("UPDATE " . $wpdb->users . " set `user_pass`='" . $user_main_data['user_pass'] . "' where `ID`=%d" , $user_id)); //phpcs:ignore --Reason $wpdb->users is a table name
} else {
$user_id = wp_insert_user($user_main_data);
$arm_members_badges->arm_add_user_achieve_by_type($user_id, 0, 'defaultbadge');
$wpdb->query( $wpdb->prepare("UPDATE " . $wpdb->users . " set `user_pass`='" . $user_main_data['user_pass'] . "' where `ID`=%d" , $user_id) ); //phpcs:ignore --Reason $wpdb->users is a table name
}
}
}
/* Is there an error o_O? */
if (is_wp_error($user_id)) {
$u_errors[$rkey] = $user_id;
} else {
/* If no error, let's update the user meta too! */
if (!empty($user_meta_data)) {
foreach ($user_meta_data as $metakey => $metavalue) {
if ($metakey != 'arm_subscription_start_date') {
if (!in_array($metakey, $exists_user_meta)) {
$fields = array('label' => $metakey);
$metakey = str_replace(' ', '_', $metakey);
$arm_member_forms->arm_db_add_preset_form_field($fields, $metakey);
}
else if(!empty($allready_exists_meta) && is_array($allready_exists_meta))
{
if(!empty($allready_exists_meta[$metakey]) && !empty($allready_exists_meta[$metakey]['type']) && $allready_exists_meta[$metakey]['type'] == 'checkbox')
{
$metavalue = explode(',',$metavalue);
}
}
$metavalue = maybe_unserialize($metavalue);
update_user_meta($user_id, $metakey, $metavalue);
}
}
}
update_user_meta($user_id, 'arm_last_login_date', date('Y-m-d H:i:s'));
/* add user to plan */
if(empty($planObj))
{
$planObj = new ARM_Plan($plan_id);
}
$posted_data = array(
'arm_user_plan' => $plan_id,
'payment_gateway' => 'manual',
'arm_selected_payment_mode' => 'manual_subscription',
'arm_primary_status' => 1,
'arm_secondary_status' => 0,
'arm_subscription_start_date' => isset($user_meta_data['arm_subscription_start_date']) ? $user_meta_data['arm_subscription_start_date'] : '',
'arm_user_import' => true,
// 'action' => 'add_member'
);
$admin_save_flag = 1;
do_action('arm_member_update_meta', $user_id, $posted_data, $admin_save_flag);
do_action('arm_action_outside_after_assign_import_user_plan', $user_id, $plan_id, $postedFormData);
if (!$planObj->is_free()) {
$this->arm_manual_update_user_data($user_id, $plan_id, $posted_data);
}
/* Some plugins may need to do things after one user has been imported. Who know? */
if ($send_notification == 'true') {
$message = '';
$user = new WP_User($user_id);
armMemberSignUpCompleteMail($user, $plaintext_pass);
if ($mail_count == 100) {
sleep(10);
$mail_count = 0;
}
if (isset($user_main_data['user_email'])) {
if (isset($user_main_data['user_email']) && $user_main_data['user_email'] != '') {
if (function_exists('get_password_reset_key')) {
$user_data = get_user_by('email', trim($user_main_data['user_email']));
$key = get_password_reset_key($user_data);
} else {
do_action('retreive_password', $user_main_data['user_login']); /* Misspelled and deprecated */
do_action('retrieve_password', $user_main_data['user_login']);
/* Generate something random for a key... */
$key = wp_generate_password(20, false);
do_action('retrieve_password_key', $user_main_data['user_login'], $key);
global $wp_hasher;
/* 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_main_data['user_login']));
}
update_user_meta($user_id, 'arm_reset_password_key', $key);
if ($change_password_page_id == 0) {
$rp_link = network_site_url("wp-login.php?action=armrp&key=" . rawurlencode($key) . "&login=" . rawurlencode($user_main_data['user_login']), 'login');
} else {
$arm_change_password_page_url = $arm_global_settings->add_query_arg('action', 'armrp', $arm_change_password_page_url);
$arm_change_password_page_url = $arm_global_settings->add_query_arg('key', rawurlencode($key), $arm_change_password_page_url);
$arm_change_password_page_url = $arm_global_settings->add_query_arg('login', rawurlencode($user_main_data['user_login']), $arm_change_password_page_url);
$rp_link = $arm_change_password_page_url;
$rp_link = apply_filters('arm_modify_redirection_page_external', $rp_link,0,$change_password_page_id);
}
if ($temp_detail->arm_template_status == '1') {
$temp_detail = apply_filters('arm_get_modify_mail_template_object_for_send_mail', $temp_detail,$user_id);
$title = $arm_global_settings->arm_filter_email_with_user_detail($temp_detail->arm_template_subject, $user_id, 0);
$message = $arm_global_settings->arm_filter_email_with_user_detail($temp_detail->arm_template_content, $user_id, 0, 0, $key);
$message = str_replace('{ARM_RESET_PASSWORD_LINK}', '<a href="' . $rp_link . '">' . $rp_link . '</a>', $message);
$message = str_replace('{VAR1}', '<a href="' . $rp_link . '">' . $rp_link . '</a>', $message);
} else {
$title = $blogname . ' ' . esc_html__('Password Reset', 'ARMember');
$message = esc_html__('Someone requested that the password be reset for the following account:', 'ARMember') . "\r\n\r\n";
$message .= network_home_url('/') . "\r\n\r\n";
$message .= esc_html__('Username', 'ARMember') . ": " . $user_login . "\r\n\r\n";
$message .= esc_html__('If this was a mistake, just ignore this email and nothing will happen.', 'ARMember') . "\r\n\r\n";
$message .= esc_html__('To reset your password, visit the following address:', 'ARMember') . " " . $rp_link . "\r\n\r\n";
}
$title = apply_filters('retrieve_password_title', $title, $user_data->ID);
$message = apply_filters('retrieve_password_message', $message, $key, $user_data->user_login, $user_data);
$send_mail = $arm_global_settings->arm_wp_mail('', $user_main_data['user_email'], $title, $message);
}
}
}
do_action('arm_after_user_import', $user_id);
$user_ids[] = $user_id;
if (is_multisite()) {
add_user_to_blog($GLOBALS['blog_id'], $user_id, 'ARMember');
}
$_SESSION['imported_users'] ++;
$wpdb->flush();
@session_write_close();
$ARMember->arm_session_start(true);
$mail_count++;
$imp_count++;
}
}
}
}
if (!empty($planObj)) {
if(!$planObj->is_free() && $planObj->type!='paid_infinite')
{
do_action('arm_handle_expire_subscription');
}
}
} else {
$errors[] = esc_html__('No user was imported, please check the file.', 'ARMember');
}
}
}
}
/* One more thing to do after all imports? */
do_action('arm_after_all_users_import', $user_ids, $errors);
if (!empty($user_ids)) {
$message = esc_html__('User(s) has been imported successfully', 'ARMember');
$ARMember->arm_set_message('success', $message);
if (!empty($postedFormData['file_url'])) {
$arm_up_file_name = basename($postedFormData['file_url']);
$file_path = MEMBERSHIP_UPLOAD_DIR . '/' . $arm_up_file_name;
$file_name_arm = substr($arm_up_file_name, 0,3);
$checkext = explode(".", $arm_up_file_name);
$ext = strtolower( $checkext[count($checkext) - 1] );
if(!empty($ext) && ($ext=='csv' || $ext=='xml') && file_exists($file_path) && $file_name_arm=='arm' ) {
unlink($file_path);
}
}
}
if (!empty($u_errors)) {
$errors[] = esc_html__('Error during user import.', 'ARMember');
}
if (empty($user_ids) && empty($errors) && empty($u_errors)) {
$errors[] = esc_html__('No user was imported.', 'ARMember');
}
if (MEMBERSHIP_DEBUG_LOG == true) {
$arm_case_types['shortcode']['protected'] = true;
$arm_case_types['shortcode']['type'] = 'after_import_users';
$arm_case_types['shortcode']['message'] = esc_html__('Log after users are imported using xml or csv file.', 'ARMember');
$ARMember->arm_debug_response_log('arm_add_import_user', $arm_case_types, $csv_reader, $wpdb->last_query, false);
}
$return_array = $arm_global_settings->handle_return_messages(@$errors, @$message);
echo json_encode($return_array);
exit;
}
/*
function arm_user_import_handle($request) {
global $wp, $wpdb, $ARMember, $arm_global_settings, $arm_subscription_plans, $arm_case_types, $arm_members_badges, $arm_capabilities_global;
$ARMember->arm_check_user_cap( $arm_capabilities_global['arm_import_export'], '1' );
$file_data_array = $user_ids = $u_errors = $errors = array();
$action = $request['arm_action'];
// $update_users = ($request['update_users']) ? TRUE : FALSE;
$up_file = $_FILES['import_user']; //phpcs:ignore
if (isset($up_file) && $up_file['error'] == UPLOAD_ERR_OK && is_uploaded_file($up_file['tmp_name'])) {
$up_file_name = $up_file['name'];
$up_file_ext = pathinfo($up_file_name, PATHINFO_EXTENSION);
$tmp_name = $up_file['tmp_name'];
if (in_array($up_file_ext, array('csv', 'xls', 'xlsx', 'xml'))) {
$user_default_fields = self::arm_get_user_import_default_fields();
if ($up_file_ext == 'xml') {
if(file_exists(ABSPATH . 'wp-admin/includes/file.php')){
require_once(ABSPATH . 'wp-admin/includes/file.php');
}
WP_Filesystem();
global $wp_filesystem;
$fileContent = $wp_filesystem->get_contents($tmp_name);
$xmlData = armXML_to_Array($fileContent);
if (isset($xmlData['members']['member']) && !empty($xmlData['members']['member'])) {
$file_data_array = $xmlData['members']['member'];
} else {
if (MEMBERSHIP_DEBUG_LOG == true) {
$arm_case_types['shortcode']['protected'] = true;
$arm_case_types['shortcode']['type'] = 'import_user_xml';
$arm_case_types['shortcode']['message'] = esc_html__('Error during file upload', 'ARMember');
$ARMember->arm_debug_response_log('arm_user_import_handle', $arm_case_types, $xmlData, $wpdb->last_query, false);
}
$errors[] = esc_html__('Error during file upload.', 'ARMember');
}
} else {
//Read CSV, XLS Files
if (file_exists(MEMBERSHIP_LIBRARY_DIR . '/class-readcsv.php')) {
require_once(MEMBERSHIP_LIBRARY_DIR . '/class-readcsv.php');
}
$csv_reader = new ReadCSV($tmp_name);
if ($csv_reader->is_file == TRUE) {
$file_data_array = $csv_reader->get_data();
} else {
if (MEMBERSHIP_DEBUG_LOG == true) {
$arm_case_types['shortcode']['protected'] = true;
$arm_case_types['shortcode']['type'] = 'import_user_csv';
$arm_case_types['shortcode']['message'] = esc_html__('Error during file upload', 'ARMember');
$ARMember->arm_debug_response_log('arm_user_import_handle', $arm_case_types, $csv_reader, $wpdb->last_query, false);
}
$errors[] = esc_html__('Error during file upload.', 'ARMember');
}
}
if (!empty($file_data_array)) {
$users_data = array();
foreach ($file_data_array as $k1 => $val1) {
foreach ($val1 as $k2 => $val2) {
if (in_array($k2, array_keys($user_default_fields['userdata']))) {
if ($user_default_fields['userdata'][$k2] == 'role') {
$val2 = ''; // Remove Role to add user into site default role
}
if ($user_default_fields['userdata'][$k2] == 'user_registered') {
if (empty($val2)) {
$val2 = date("Y-m-d H:i:s");
}
$val2 = date("Y-m-d H:i:s", strtotime($val2));
}
unset($file_data_array[$k1][$k2]); // Remove Old Key From Array
if (!empty($val2)) {
$users_data[$k1]['userdata'][$user_default_fields['userdata'][$k2]] = $val2; // Set Matched Key Value
}
} elseif (in_array($k2, array_keys($user_default_fields['usermeta']))) {
unset($file_data_array[$k1][$k2]); // Remove Old Key From Array
if (in_array($user_default_fields['usermeta'][$k2], array('arm_user_plan', 'status'))) {
unset($users_data[$k1]['usermeta'][$k2]);
} else {
$users_data[$k1]['usermeta'][$user_default_fields['usermeta'][$k2]] = $val2; // Set Matched Key Value
}
} else {
$users_data[$k1]['usermeta'][$k2] = $val2;
}
}
}
$users_data = apply_filters('arm_filter_users_before_import', $users_data);
// Insert Or Update User Details.
if (!empty($users_data)) {
foreach ($users_data as $rkey => $udata) {
$user_main_data = $udata['userdata'];
$user_meta_data = isset($udata['usermeta']) ? $udata['usermeta'] : array();
// Get User If `ID` is available
if (isset($user_main_data['ID'])) {
// $user = get_user_by('ID', $user_main_data['ID']);
unset($user_main_data['ID']);
}
// Check User's `username` or `email` If user exist AND if `Update User` Set to true
if (isset($user_main_data['user_login'])) {
$user = get_user_by('login', $user_main_data['user_login']);
}
if (!$user && isset($user_main_data['user_email'])) {
$user = get_user_by('email', $user_main_data['user_email']);
}
// Skip existing users
if ($user) {
continue;
}
$update = FALSE;
if ($user) {
$user_main_data['ID'] = $user->ID;
$update = TRUE;
}
// Set Password For new users
if (!$update && empty($user_main_data['user_pass'])) {
$user_main_data['user_pass'] = wp_generate_password(8, false);
}
$user_role = (!empty($user_main_data['role'])) ? $user_main_data['role'] : '';
unset($user_main_data['role']);
if ($update) {
$user_id = wp_update_user($user_main_data);
} else {
$user_id = wp_insert_user($user_main_data);
}
// Is there an error o_O?
if (is_wp_error($user_id)) {
$u_errors[$rkey] = $user_id;
} else {
if ($update && user_can($user_id, 'administrator')) {
} else {
$added_user = new WP_User($user_id);
$blog_role = get_option('default_role');
if (!empty($user_role)) {
$role_obj = get_role($user_role);
if (!empty($role_obj)) {
$added_user->set_role($user_role);
$blog_role = $user_role;
}
}
// User to current blog.
if (function_exists('add_user_to_blog')) {
$blog_id = get_current_blog_id();
add_user_to_blog($blog_id, $user_id, $blog_role);
}
}
// If no error, let's update the user meta too!
if (!empty($user_meta_data)) {
foreach ($user_meta_data as $metakey => $metavalue) {
$metavalue = maybe_unserialize($metavalue);
update_user_meta($user_id, $metakey, $metavalue);
}
}
// If we created a new user, maybe set password nag and send new user notification?
if (!$update) {
if ($password_nag)
update_user_option($user_id, 'default_password_nag', true, true);
if ($new_user_notification)
arm_new_user_notification($user_id, $user_main_data['user_pass']);
}
// Some plugins may need to do things after one user has been imported. Who know?
do_action('arm_after_user_import', $user_id);
$user_ids[] = $user_id;
}
}
} else {
$errors[] = esc_html__('No user was imported, please check the file.', 'ARMember');
}
} else {
$errors[] = esc_html__('Cannot extract data from uploaded file or no file was uploaded.', 'ARMember');
}
} else {
$errors[] = esc_html__('Invalid file uploaded.', 'ARMember');
}
} else {
$errors[] = esc_html__('Error during file upload.', 'ARMember');
}
// One more thing to do after all imports?
do_action('arm_after_all_users_import', $user_ids, $errors);
//Print Import Process Messages.
if (!empty($user_ids)) {
$msg[] = esc_html__('User(s) has been imported successfully', 'ARMember');
self::arm_user_import_export_messages('', $msg);
}
if (!empty($u_errors)) {
$errors[] = esc_html__('Error during user import.', 'ARMember');
}
if (empty($user_ids) && empty($errors) && empty($u_errors)) {
$errors[] = esc_html__('No user was imported.', 'ARMember');
}
if (!empty($errors)) {
self::arm_user_import_export_messages($errors);
}
//Unset Uploaded File.
unset($_FILES);
}
*/
function arm_user_export_handle($request) {
global $wp, $wpdb, $ARMember, $armPrimaryStatus, $arm_global_settings, $arm_subscription_plans, $arm_case_types,$is_multiple_membership_feature, $arm_pay_per_post_feature, $arm_capabilities_global;
$ARMember->arm_check_user_cap( $arm_capabilities_global['arm_import_export'], '1',1); //phpcs:ignore --Reason:Verifying nonce
$action = $request['arm_action'];
if (isset($action) && in_array($action, array('user_export_csv', 'user_export_xls', 'user_export_xml'))) {
$join = '';
$where = "WHERE 1=1 ";
$subscription_plan = (isset($request['subscription_plan'])) ? $request['subscription_plan'] : '';
$primary_status = $request['primary_status'];
$start_date = $request['start_date'];
$end_date = $request['end_date'];
if (!empty($start_date) && strtotime($start_date) > current_time('timestamp')) {
$err = esc_html__('There is no any Member(s) found', 'ARMember');
self::arm_user_import_export_messages($err);
} else {
$user_table = $wpdb->users;
$usermeta_table = $wpdb->usermeta;
$capability_column = $wpdb->get_blog_prefix($GLOBALS['blog_id']) . 'capabilities';
$super_admin_ids = array();
if (is_multisite()) {
$super_admin = get_super_admins();
if (!empty($super_admin)) {
foreach ($super_admin as $skey => $sadmin) {
if ($sadmin != '') {
$user_obj = get_user_by('login', $sadmin);
if ($user_obj->ID != '') {
$super_admin_ids[] = $user_obj->ID;
}
}
}
}
}
$user_where = " WHERE 1=1";
$admin_where = " WHERE 1=1 ";
if (!empty($super_admin_ids)) {
$super_admin_placeholders = ' AND u.ID IN (';
$super_admin_placeholders .= rtrim( str_repeat( '%s,', count( $super_admin_ids ) ), ',' );
$super_admin_placeholders .= ')';
array_unshift( $super_admin_ids, $super_admin_placeholders );
$admin_where .= call_user_func_array(array( $wpdb, 'prepare' ), $super_admin_ids );
//$admin_where .= " AND u.ID IN (" . implode(',', $super_admin_ids) . ")";
}
$operator = " AND ";
if (!empty($super_admin_ids)) {
$operator = " OR ";
}
$admin_where .= $operator;
$admin_where .= $wpdb->prepare(" um.meta_key = %s AND um.meta_value LIKE %s ",$capability_column,'%administrator%');
$admin_user_query = " SELECT u.ID FROM `{$user_table}` u LEFT JOIN `{$usermeta_table}` um ON u.ID = um.user_id {$admin_where} ";
$admin_users = $wpdb->get_results($admin_user_query); //phpcs:ignore --Reason $admin_user_query is a query name
$admin_user_ids = array();
if (!empty($admin_users)) {
foreach ($admin_users as $key => $admin_user) {
array_push($admin_user_ids, $admin_user->ID);
}
}
if (!empty($admin_user_ids)){
//$where .= " AND U.ID NOT IN (" . implode(',', $admin_user_ids) . ") ";
$admin_placeholders = 'AND U.ID NOT IN (';
$admin_placeholders .= rtrim( str_repeat( '%s,', count( $admin_user_ids ) ), ',' );
$admin_placeholders .= ')';
// $admin_users = implode( ',', $admin_users );
array_unshift( $admin_user_ids, $admin_placeholders );
$where .= call_user_func_array(array( $wpdb, 'prepare' ), $admin_user_ids );
}
if (!empty($start_date)) {
$start_datetime = date('Y-m-d 00:00:00', strtotime($start_date));
if (!empty($end_date)) {
$end_datetime = date('Y-m-d 23:59:59', strtotime($end_date));
if (strtotime($start_date) > strtotime($end_datetime)) {
$end_datetime = date('Y-m-d 00:00:00', strtotime($start_date));
$start_datetime = date('Y-m-d 23:59:59', strtotime($end_date));
}
$where .= $wpdb->prepare(" AND (`user_registered` BETWEEN %s AND %s) ",$start_datetime,$end_datetime);
} else {
$where .= $wpdb->prepare(" AND (`user_registered` > %s) ",$start_datetime);
}
} else {
if (!empty($end_date)) {
$end_datetime = date('Y-m-d 23:59:59', strtotime($end_date));
$where .= $wpdb->prepare(" AND (`user_registered` < %s) ",$end_datetime);
}
}
if (!empty($primary_status)) {
$where .= $wpdb->prepare(" AND (U.ID IN (SELECT AM.arm_user_id FROM `" . $ARMember->tbl_arm_members . "` AS AM WHERE AM.arm_primary_status=%s))",$primary_status); //phpcs:ignore --Reason $ARMember->tbl_arm_members is a table name
}
$user_sql = "SELECT U.ID FROM `" . $wpdb->users . "` U $join $where ORDER BY U.ID ASC";
$users = $wpdb->get_results($user_sql); //phpcs:ignore --Reason $user_sql is a predefined query
if (!empty($subscription_plan) && is_array($subscription_plan)) {
if (!empty($users)) {
foreach ($users as $key => $u) {
$user_id = $u->ID;
$planIds = get_user_meta($user_id, 'arm_user_plan_ids', true);
if (!empty($planIds) && is_array($planIds))
{
if($arm_pay_per_post_feature->isPayPerPostFeature)
{
$postIDs = get_user_meta($user_id, 'arm_user_post_ids', true);
foreach($planIds as $armPlanKey => $armPlanVal)
{
if(!empty($postIDs[$armPlanVal]))
{
unset($planIds[$armPlanKey]);
}
}
}
$plan_intersect_array = array_intersect($planIds, $subscription_plan);
if (empty($plan_intersect_array)) {
unset($users[$key]);
}
} else {
unset($users[$key]);
}
}
}
}
if (!empty($users)) {
$users_data = array();
foreach ($users as $key => $u) {
$user_id = $u->ID;
if (is_user_member_of_blog($user_id)) {
$user_info = get_userdata($user_id);
$roles = '';
$arm_user_plan = array();
$arm_subscription_start_date = "";
$u_roles = array();
$plan_ids = get_user_meta($user_id, 'arm_user_plan_ids', true);
if (!empty($user_info->roles) && is_array($user_info->roles)) {
//$u_roles = array_shift($user_info->roles);
$u_roles = implode(', ', $user_info->roles);
$roles = $u_roles;
}
if($arm_pay_per_post_feature->isPayPerPostFeature)
{
$postIDs = get_user_meta($user_id, 'arm_user_post_ids', true);
foreach($plan_ids as $armPlanKey => $armPlanVal)
{
if(!empty($postIDs[$armPlanVal]))
{
unset($plan_ids[$armPlanKey]);
}
}
}
if (!empty($plan_ids) && is_array($plan_ids)) {
foreach ($plan_ids as $plan_id) {
if (!empty($plan_id)) {
$arm_user_plan[] = $arm_subscription_plans->arm_get_plan_name_by_id($plan_id);
if(!$is_multiple_membership_feature->isMultipleMembershipFeature)
{
$arm_current_plan_detail = get_user_meta($user_id, 'arm_user_plan_'.$plan_id, true);
if(!empty($arm_current_plan_detail['arm_start_plan']))
{
$arm_subscription_start_date = date('Y-m-d',$arm_current_plan_detail['arm_start_plan']);
}
}
}
}
}
$status = arm_get_member_status($user_id);
$statusText = $armPrimaryStatus[$status];
$users_data[$user_id] = array(
'id' => $user_id,
'username' => $user_info->user_login,
'email' => $user_info->user_email,
'status' => $statusText,
'role' => $roles,
'subscription_plan' => implode(",", $arm_user_plan),
'joined' => $user_info->user_registered,
);
if(!$is_multiple_membership_feature->isMultipleMembershipFeature)
{
$users_data[$user_id]['arm_subscription_start_date'] = $arm_subscription_start_date;
}
if (isset($request['arm_user_metas_to_export']) && $request['arm_user_metas_to_export'] != '') {
$user_meta = explode(',', $request['arm_user_metas_to_export']);
if (in_array('first_name', $user_meta)) {
$users_data[$user_id]['first_name'] = $user_info->first_name;
}
if (in_array('last_name', $user_meta)) {
$users_data[$user_id]['last_name'] = $user_info->last_name;
}
if (in_array('nickname', $user_meta)) {
$users_data[$user_id]['nickname'] = get_user_meta($user_id, 'nickname', true);
}
if (in_array('display_name', $user_meta)) {
$users_data[$user_id]['display_name'] = $user_info->display_name;
}
if (in_array('description', $user_meta)) {
$users_data[$user_id]['biographical_info'] = get_user_meta($user_id, 'description', true);
}
if (in_array('user_url', $user_meta)) {
$users_data[$user_id]['website'] = $user_info->user_url;
}
if (in_array('user_pass', $user_meta)) {
$users_data[$user_id]['user_pass'] = $user_info->user_pass;
}
$exclude_meta = array('user_login', 'user_email', 'user_url', 'description');
foreach ($user_meta as $key => $meta) {
if (!array_key_exists($meta, $users_data[$user_id]) && !in_array($meta, $exclude_meta)) {
$meta_value = get_user_meta($user_id, $meta, true);
if (is_array($meta_value)) {
$metaValues = '';
foreach ($meta_value as $_meta_value) {
if ($_meta_value != '') {
$metaValues .= $_meta_value . ',';
}
}
$meta_value = rtrim($metaValues, ',');
}
$users_data[$user_id][$meta] = $meta_value;
}
}
}
}
}
$users_data = apply_filters('arm_filter_users_before_export', $users_data, $request);
switch ($action) {
case 'user_export_csv':
self::arm_export_to_csv($users_data);
break;
case 'user_export_xls':
self::arm_export_to_xls($users_data);
break;
case 'user_export_xml':
self::arm_export_to_xml($users_data);
break;
default:
break;
}
} else {
if (MEMBERSHIP_DEBUG_LOG == true) {
$arm_case_types['shortcode']['protected'] = true;
$arm_case_types['shortcode']['type'] = 'export_user';
$arm_case_types['shortcode']['message'] = esc_html__('No any Member(s) fount', 'ARMember');
$ARMember->arm_debug_response_log('arm_user_export_handle', $arm_case_types, $csv_reader, $wpdb->last_query, false);
}
$err = esc_html__('There is no any Member(s) found', 'ARMember');
self::arm_user_import_export_messages($err);
}
}
}
}
function arm_download_sample_csv() {
global $wp, $wpdb, $ARMember, $arm_global_settings,$ARMember,$arm_capabilities_global;
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_import_export'], '1',1); //phpcs:ignore --Reason:Verifying nonce
$sample_data[1] = array(
"id" => 1,
"username" => "reputeinfosystems",
"email" => "reputeinfosystems@example.com",
"first_name" => "Repute",
"last_name" => "InfoSystems",
"nickname" => "reputeinfo",
"display_name" => "Repute InfoSystems",
"joined" => "2024-08-20 00:00:00",
"biographical_info" => " ",
"website" => " ",
);
self::arm_export_to_csv($sample_data, 'ARMember-sample-export-members.csv');
exit;
}
function arm_export_to_csv($array, $output_file_name = '', $delimiter = ',') {
global $wp, $wpdb, $ARMember, $arm_global_settings;
if (count($array) == 0) {
return null;
}
if (empty($output_file_name)) {
$output_file_name = "ARMember-export-members.csv";
}
ob_clean();
ob_start();
//Set Headers
$this->download_send_headers($output_file_name);
//Open File For Write Data
$df = fopen("php://output", 'w');
fputcsv($df, array_keys(reset($array)));
foreach ($array as $row) {
fputcsv($df, $row);
}
fclose($df);
exit;
}
function arm_export_to_xls($array, $output_file_name = '') {
global $wp, $wpdb, $ARMember, $arm_global_settings;
if (count($array) == 0) {
return null;
}
if (empty($output_file_name)) {
$output_file_name = "ARMember-export-members.xls";
}
ob_clean();
ob_start();
//Set Headers
$this->download_send_headers($output_file_name);
header("Content-type: application/vnd.ms-excel;");
$flag = false;
foreach ($array as $row) {
if (!$flag) {
// display field/column names as first row
echo implode("\t", array_keys($row)) . "\r\n"; //phpcs:ignore
$flag = true;
}
echo implode("\t", array_values($row)) . "\r\n"; //phpcs:ignore
}
exit;
}
function arm_export_to_xml($array, $output_file_name = '') {
global $wp, $wpdb, $ARMember, $arm_global_settings;
if (count($array) == 0) {
return null;
}
if (empty($output_file_name)) {
$output_file_name = "ARMember-export-members.xml";
}
ob_clean();
ob_start();
//Set Headers
$this->download_send_headers($output_file_name);
header('Content-type: text/xml');
$xmlContent = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
$xmlContent .= "<members>\n";
foreach ($array as $row) {
if (is_array($row)) {
$xmlContent .= "<member>\n";
foreach ($row as $key => $value) {
$xmlContent .= "<{$key}>";
$xmlContent .= "{$value}";
$xmlContent .= "</{$key}>\n";
}
$xmlContent .= "</member>\n";
}
}
$xmlContent .= "</members>";
echo $xmlContent; //phpcs:ignore
exit;
}
function download_send_headers($filename) {
// disable caching
$now = gmdate("D, d M Y H:i:s");
header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
header("Last-Modified: {$now} GMT");
// force download
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
// disposition / encoding on response body
header("Content-Disposition: attachment;filename={$filename}");
header("Content-Transfer-Encoding: binary");
}
function arm_settings_import_handle($request) {
global $wp, $wpdb, $ARMember, $arm_global_settings, $arm_email_settings, $arm_member_forms, $arm_capabilities_global;
$ARMember->arm_check_user_cap( $arm_capabilities_global['arm_import_export'], '1',1); //phpcs:ignore --Reason:Verifying nonce
set_time_limit(0);
$action = $request['arm_action'];
if ($action == 'settings_import') {
$encoded_data = $request['settings_import_text'];
$all_settings = maybe_unserialize(base64_decode($encoded_data));
if (!empty($all_settings) && is_array($all_settings)) {
$arm_default_global_settings = $arm_global_settings->arm_default_global_settings();
$all_settings = shortcode_atts( $all_settings, $arm_default_global_settings );
$all_settings = array_map( array( $ARMember, 'arm_recursive_sanitize_data_extend_only_kses'), $all_settings ); //phpcs:ignore
/* For Global Settings */
if (isset($all_settings['global_options']) && !empty($all_settings['global_options'])) {
$all_global_settings = $arm_global_settings->arm_get_all_global_settings();
$all_settings['global_options']['restrict_site_access'] = $all_global_settings['general_settings']['restrict_site_access'];
$all_settings['global_options'] = apply_filters('arm_general_settings_before_import_additional_settings', $all_settings['global_options']);
$all_global_settings['general_settings'] = $all_settings['global_options'];
/* Update new General Options */
update_option('arm_global_settings', $all_global_settings);
}
if (isset($all_settings['email_options']) && !empty($all_settings['email_options'])) {
$old_email_settings = $arm_email_settings->arm_get_all_email_settings();
$old_email_tools = (isset($old_email_settings['arm_email_tools'])) ? $old_email_settings['arm_email_tools'] : array();
$arm_mail_authentication = isset($all_settings['email_options']['arm_mail_authentication']) ? intval( $all_settings['email_options']['arm_mail_authentication'] ) : 1;
$email_settings = array(
'arm_email_from_name' => sanitize_text_field( $all_settings['email_options']['arm_email_from_name'] ),
'arm_email_from_email' => sanitize_email( $all_settings['email_options']['arm_email_from_email'] ),
'arm_email_server' => sanitize_text_field( $all_settings['email_options']['arm_email_server'] ),
'arm_mail_server' => sanitize_text_field( $all_settings['email_options']['arm_mail_server'] ),
'arm_mail_port' => sanitize_text_field( $all_settings['email_options']['arm_mail_port'] ),
'arm_mail_login_name' => sanitize_text_field( $all_settings['email_options']['arm_mail_login_name'] ),
'arm_mail_password' => $all_settings['email_options']['arm_mail_password'], //phpcs:ignore
'arm_smtp_enc' => sanitize_text_field( $all_settings['email_options']['arm_smtp_enc'] ),
'arm_email_tools' => $old_email_tools,
'arm_mail_authentication' => $arm_mail_authentication,
);
update_option('arm_email_settings', $email_settings);
}
/* For Block Settings. */
if (isset($all_settings['block_options']) && !empty($all_settings['block_options'])) {
$new_block_optioins = $all_settings['block_options'];
$old_block_settings = $arm_global_settings->arm_get_parsed_block_settings();
/* Merge imported settings with old settings */
$all_block_settings = array_merge_recursive($old_block_settings, $new_block_optioins);
$all_block_settings = $ARMember->arm_array_unique($all_block_settings);
/* Set new messages */
$all_block_settings['failed_login_lockdown'] = intval( $new_block_optioins['failed_login_lockdown'] );
$all_block_settings['remained_login_attempts'] = intval( $new_block_optioins['remained_login_attempts'] );
$all_block_settings['max_login_retries'] = intval( $new_block_optioins['max_login_retries'] );
$all_block_settings['temporary_lockdown_duration'] = intval( $new_block_optioins['temporary_lockdown_duration'] );
$all_block_settings['permanent_login_retries'] = intval( $new_block_optioins['permanent_login_retries'] );
$all_block_settings['permanent_lockdown_duration'] = intval( $new_block_optioins['permanent_lockdown_duration'] );
$all_block_settings['arm_block_ips_msg'] = !empty($new_block_optioins['arm_block_ips_msg']) ? sanitize_text_field( $new_block_optioins['arm_block_ips_msg'] ) : '';
$all_block_settings['arm_block_usernames_msg'] = sanitize_text_field( $new_block_optioins['arm_block_usernames_msg'] );
$all_block_settings['arm_block_emails_msg'] = sanitize_text_field( $new_block_optioins['arm_block_emails_msg'] );
$all_block_settings['arm_block_urls_option'] = !empty($new_block_optioins['arm_block_urls_option']) ? $new_block_optioins['arm_block_urls_option'] : '' ;
$all_block_settings['arm_block_urls_option_message'] = !empty($new_block_optioins['arm_block_urls_option_message']) ? $new_block_optioins['arm_block_urls_option_message'] : '';
$all_block_settings['arm_block_urls_option_redirect'] = !empty($new_block_optioins['arm_block_urls_option_redirect']) ? $new_block_optioins['arm_block_urls_option_redirect'] : '';
if (isset($all_block_settings['arm_block_ips'])) {
$all_block_settings['arm_block_ips'] = is_array($all_block_settings['arm_block_ips']) ? implode(PHP_EOL, array_filter(array_map('trim', $all_block_settings['arm_block_ips']))) : '';
}
if (isset($all_block_settings['arm_block_usernames'])) {
$all_block_settings['arm_block_usernames'] = is_array($all_block_settings['arm_block_usernames']) ? implode(PHP_EOL, array_filter(array_map('trim', $all_block_settings['arm_block_usernames']))) : '';
}
if (isset($all_block_settings['arm_block_emails'])) {
$all_block_settings['arm_block_emails'] = is_array($all_block_settings['arm_block_emails']) ? implode(PHP_EOL, array_filter(array_map('trim', $all_block_settings['arm_block_emails']))) : '';
}
if (isset($all_block_settings['arm_block_urls'])) {
$all_block_settings['arm_block_urls'] = is_array($all_block_settings['arm_block_urls']) ? implode(PHP_EOL, array_filter(array_map('trim', $all_block_settings['arm_block_urls']))) : '';
}
$all_block_settings['arm_conditionally_block_urls'] = isset($new_block_optioins['arm_conditionally_block_urls']) ? $new_block_optioins['arm_conditionally_block_urls'] : 0;
if (isset($all_block_settings['arm_conditionally_block_urls_options']) && is_array($all_block_settings['arm_conditionally_block_urls_options'])) {
$conditionally_block_urls_options = array();
$condition_count = 0;
foreach ($all_block_settings['arm_conditionally_block_urls_options'] as $condition) {
if (isset($condition['arm_block_urls']) && $condition['plan_id'] != '') {
$conditionally_block_urls_options[$condition_count]['plan_id'] = $condition['plan_id'];
//$conditionally_block_urls_options[$condition_count]['arm_block_urls'] = $condition['arm_block_urls'];
$arm_block_url = implode(PHP_EOL, array_filter(array_map('trim', explode(PHP_EOL, $condition['arm_block_urls']))));
$conditionally_block_urls_options[$condition_count]['arm_block_urls'] = $arm_block_url;
$condition_count++;
}
}
$all_block_settings['arm_conditionally_block_urls_options'] = $conditionally_block_urls_options;
}
$all_block_settings = apply_filters('arm_block_settings_before_import_additional_settings', $all_block_settings);
/* Update New Block Options */
update_option('arm_block_settings', $all_block_settings);
}
/* For Common Messages */
if (isset($all_settings['common_messages']) && !empty($all_settings['common_messages'])) {
$all_common_messages = $all_settings['common_messages'];
$all_common_messages = apply_filters('arm_common_messages_before_import_additional_settings', $all_common_messages);
update_option('arm_common_message_settings', $all_common_messages);
}
//Print Success Message.
$msg[] = esc_html__('Setting(s) has been imported successfully', 'ARMember');
self::arm_user_import_export_messages('', $msg);
return;
}
}
$errors[] = esc_html__('This is not a valid import file data.', 'ARMember');
self::arm_user_import_export_messages($errors);
}
function arm_settings_export_handle($request) {
global $wp, $wpdb, $ARMember, $arm_global_settings, $arm_email_settings, $arm_member_forms, $arm_capabilities_global;
$ARMember->arm_check_user_cap( $arm_capabilities_global['arm_import_export'], '1',1); //phpcs:ignore --Reason:Verifying nonce
$action = $request['arm_action'];
$all_settings = array();
if ($action == 'settings_export') {
if (!isset($request['global_options']) && !isset($request['block_options']) && !isset($request['common_messages'])) {
$errors[] = esc_html__('Please select one or more setting.', 'ARMember');
self::arm_user_import_export_messages($errors);
}
if (isset($request['global_options'])) {
$all_global_settings = $arm_global_settings->arm_get_all_global_settings();
$arm_email_settings_data = $arm_email_settings->arm_get_all_email_settings();
if (!empty($all_global_settings['general_settings'])) {
$all_global_settings['general_settings'] = apply_filters('arm_general_settings_additional_export_data_externally', $all_global_settings['general_settings']);
$all_settings['global_options'] = $all_global_settings['general_settings'];
}
if (!empty($arm_email_settings_data)) {
$arm_email_settings_data['arm_email_tools'] = array();
$all_settings['email_options'] = $arm_email_settings_data;
}
}
if (isset($request['block_options'])) {
$block_options = $arm_global_settings->arm_get_parsed_block_settings();
$block_options = apply_filters('arm_block_settings_additional_export_data_externally', $block_options);
if (!empty($block_options)) {
$all_settings['block_options'] = $block_options;
}
}
if (isset($request['common_messages'])) {
$common_messages = $arm_global_settings->arm_get_all_common_message_settings();
$common_messages = apply_filters('arm_common_messages_additional_export_data_externally', $common_messages);
if (!empty($common_messages)) {
$all_settings['common_messages'] = $common_messages;
}
}
if (!empty($all_settings)) {
//Encode All Settings Array
$encode_all_settings = base64_encode(maybe_serialize($all_settings));
$file_name = 'ARMember-export-settings.txt';
ob_clean();
ob_start();
header("Content-Type: plain/text");
header('Content-Disposition: attachment; filename="' . $file_name . '"');
header("Pragma: no-cache");
print($encode_all_settings); //phpcs:ignore
exit;
}
}
}
function arm_user_import_export_messages($errors = '', $messages = '') {
if (!empty($messages)) {
if (!is_array($messages)) {
$msgs[] = $messages;
} else {
$msgs = $messages;
}
foreach ($msgs as $msg) {
?>
<div class="arm_message arm_success_message arm_import_export_msg">
<div class="arm_message_text"><?php echo esc_html($msg); ?></div>
<script type="text/javascript">
jQuery(window).on("load", function(){armToast('<?php echo $msg; //phpcs:ignore ?>', 'success'); });</script>
</div>
<?php
}
}
if (!empty($errors)) {
if (!is_array($errors)) {
$errs[] = $errors;
} else {
$errs = $errors;
}
foreach ($errs as $msg) {
?><script type="text/javascript">jQuery(window).on("load", function(){armToast('<?php echo $msg; //phpcs:ignore?>', 'error'); });</script><?php
}
}
}
function arm_chartPlanMembers($all_plans = array()) {
global $wpdb, $ARMember, $arm_global_settings, $arm_subscription_plans;
$plans_info = $wpdb->get_results( $wpdb->prepare("SELECT `arm_subscription_plan_id` as id, `arm_subscription_plan_name` as name FROM `" . $ARMember->tbl_arm_subscription_plans . "` WHERE `arm_subscription_plan_is_delete`=%d AND `arm_subscription_plan_post_id`=%d",0,0)); //phpcs:ignore --Reason $ARMember->tbl_arm_subscription_plans is a table name
if (!empty($plans_info)) {
$plan_name = $plan_users = "[";
$plan_name .= "' ', ";
$plan_users .= "0, ";
foreach ($plans_info as $plan) {
$user_arg = array(
'meta_key' => 'arm_user_plan_ids',
'meta_value' => '',
'meta_compare' => '!=',
'role__not_in' => array('administrator'),
'date_query' => array(
'after' => '1 month ago',
)
);
$users = get_users($user_arg);
$total_users = 0;
if (!empty($users)) {
foreach ($users as $user) {
$plan_ids = get_user_meta($user->ID, 'arm_user_plan_ids', true);
if (!empty($plan_ids) && is_array($plan_ids)) {
if (in_array($plan->id, $plan_ids)) {
$total_users++;
}
}
}
}
if ($total_users > 0) {
$plan_name .= "'".$plan->name."', ";
$plan_users .= "{$total_users}, ";
}
}
$plan_name .= "]";
$plan_users .= "]";
if (!empty($plan_name) && !empty($plan_users)) { ?>
<div id="arm_chart_wrapper_plan_members" class="arm_chart_wrapper_plan_members arm_chart_wrapper"></div>
<script type="text/javascript">
jQuery(document).ready(function ($) {
var plan_users = <?php echo $plan_users; //phpcs:ignore ?>;
var plan_names = <?php echo $plan_name; //phpcs:ignore ?>;
jQuery('#arm_chart_wrapper_plan_members').highcharts({
chart: {type: 'areaspline'},
title: {text: "<?php echo esc_html__('Recent Members By Plans', 'ARMember');?>"},
credits : {
enabled : false
},
xAxis: {
categories: plan_names,
crosshair: true,
labels: {rotation: - 60},
min : 0.5
},
yAxis: {
min: 0,
allowDecimals: false,
title: {text: ''}
},
legend: {enabled: false},
plotOptions: {
areaspline: {
fillOpacity: 0.05,
dataLabels: {enabled: false, format: '{point.y}'},
lineColor: '#0077ff',
}
},
tooltip: {
formatter: function() {
var tooltip = "";
var index = this.point.index;
var name = plan_names[index];
if (index == 0) {
name = '0';
}
tooltip = '<span style="font-size:12px">' + name + ':</span>';
tooltip += '<div style="color:' + this.series.color + '">(</div><b>' + this.y + '</b><div style="color:' + this.series.color + '">)</div>';
return tooltip;
}
},
colors: ['#766ed2;', '#fbc32b', '#fc6458', '#a7db1b', '#20d381', '#0077ff', '#4da4fe'],
series: [{
name: "Membership",
color: 'rgb(0,90,238)',
colorByPoint: true,
lineWidth: 2,
data: plan_users,
}],
});
});
</script>
<?php
}
}
}
function arm_chartRecentMembers() {
global $wpdb, $ARMember, $arm_global_settings, $arm_subscription_plans;
$user_table = $wpdb->users;
$usermeta_table = $wpdb->usermeta;
$capability_column = $wpdb->get_blog_prefix($GLOBALS['blog_id']) . 'capabilities';
$super_admin_ids = array();
if (is_multisite()) {
$super_admin = get_super_admins();
if (!empty($super_admin)) {
foreach ($super_admin as $skey => $sadmin) {
if ($sadmin != '') {
$user_obj = get_user_by('login', $sadmin);
if ($user_obj->ID != '') {
$super_admin_ids[] = $user_obj->ID;
}
}
}
}
}
$user_where = " WHERE 1=1";
if (!empty($super_admin_ids)) {
//$user_where .= " AND u.ID NOT IN (" . implode(',', $super_admin_ids) . ")";
$admin_placeholders = ' AND u.ID NOT IN (';
$admin_placeholders .= rtrim( str_repeat( '%s,', count( $super_admin_ids ) ), ',' );
$admin_placeholders .= ')';
array_unshift( $super_admin_ids, $admin_placeholders );
$user_where .= call_user_func_array(array( $wpdb, 'prepare' ), $super_admin_ids );
}
$user_where .= " AND (um.meta_key = '{$capability_column}' AND um.meta_value NOT LIKE '%administrator%')"; //phpcs:ignore
$operator = " AND ";
$user_where .= $operator;
$user_where .= " u.user_registered >= DATE_SUB(DATE(NOW()), INTERVAL 1 MONTH)";
$users_details = $wpdb->get_results("SELECT u.ID,u.user_registered FROM `{$user_table}` u LEFT JOIN `{$usermeta_table}` um ON u.ID = um.user_id {$user_where} GROUP BY u.ID ORDER BY u.user_registered ASC"); //phpcs:ignore --Reason $usertable na d $usermeta_table are table names
$day_records = array();
foreach ($users_details as $users_det) {
$users_registered = date('d-M', strtotime($users_det->user_registered));
$day_records[$users_registered][] = $users_det;
}
if (!empty($day_records)) {
for ($i = 0; $i <=31; $i++) {
$date = date('d-M', strtotime("-{$i} days"));;
$keys[$date] = $date;
}
$keys = array_reverse($keys);
$disCnt = 0;
$day_var = $val_var = $custom_key = "[";
foreach ($keys as $day) {
$custom_key .= "'{$day}', ";
if (!array_key_exists($day, $day_records)) {
if ($disCnt == 0) {
$disCnt++;
$day_var .= "'{$day}', ";
$val_var .= '0, ';
} else {
$disCnt = 0;
$day_var .= "' ', ";
$val_var .= '0, ';
}
} else {
$total_users = count($day_records[$day]);
if ($disCnt == 0) {
$disCnt++;
$day_var .= "'{$day}', ";
$val_var .= $total_users. ', ';
} else {
$disCnt = 0;
$day_var .= "' ', ";
$val_var .= $total_users. ', ';
}
}
}
$day_var .= "]";
$val_var .= ']';
$custom_key .= ']';
unset($disCnt); ?>
<div id="arm_chart_wrapper_recent_members" class="arm_chart_wrapper_recent_members arm_chart_wrapper"></div>
<script type="text/javascript">
jQuery(document).ready(function ($) {
var line1 = <?php echo $val_var;//phpcs:ignore ?>;
var line2 = <?php echo $custom_key;//phpcs:ignore ?>;
jQuery('#arm_chart_wrapper_recent_members').highcharts({
chart: {type: 'areaspline'},
title: {text: "<?php echo esc_html__('Recent Members', 'ARMember');?>"},
xAxis: {
categories: <?php echo $day_var;//phpcs:ignore ?>,
crosshair: true
},
credits : {
enabled : false
},
yAxis: {
min: 0,
allowDecimals: false,
title: {text: ''}
},
legend: {enabled: false},
plotOptions: {
areaspline: {
fillOpacity: 0.05,
dataLabels: {enabled: false, format: '{point.y}'},
lineColor: '#0077ff',
}
},
tooltip: {
formatter: function() {
var tooltip = "";
var index = this.point.index;
var name = line2[index];
tooltip = '<span style="font-size:12px"></span>';
tooltip += '<div style="color:' + this.series.color + '">' + name + ': <b>' + this.y + '</b> <?php esc_html_e("Members", 'ARMember'); ?></div>';
return tooltip;
}
},
colors: ['#766ed2;', '#fbc32b', '#fc6458', '#a7db1b', '#20d381', '#0077ff', '#4da4fe'],
series: [{
name: "Members",
color: 'rgb(0,90,238)',
colorByPoint: true,
lineWidth: 2,
data: line1,
}],
});
});
</script>
<?php
}
}
function armGetMemberStatusText_print($primary_status,$secondary_status) {
global $armPrimaryStatus, $armSecondaryStatus;
if ($primary_status == '1') {
$statusClass = 'active';
$memberStatusText = $armPrimaryStatus[1];
} elseif ($primary_status == '3') {
$statusClass = 'pending';
$memberStatusText = $armPrimaryStatus[3];
} elseif ($primary_status == '4') {
$statusClass = 'inactive banned';
//$secondaryStatusClass = 'banned';
$memberStatusText = $armPrimaryStatus[4];
} else {
$memberStatusText = $armPrimaryStatus[2];
$statusClass = 'inactive';
$memberSecondaryStatusText = $armSecondaryStatus[$secondary_status];
if (isset($armSecondaryStatus[$secondary_status]) && !empty($armSecondaryStatus[$secondary_status])) {
switch ($secondary_status) {
case '0':
$secondaryStatusClass = "banned";
break;
case '1':
case '4':
case '6':
$secondaryStatusClass = "cancelled";
break;
case '2':
case '3':
$secondaryStatusClass = "expired";
break;
case '5':
$secondaryStatusClass = "failed";
break;
default:
$secondaryStatusClass = "cancelled";
break;
}
$statusClass .= " " . $secondaryStatusClass;
$memberStatusText .= ' <span class="' . $secondaryStatusClass . '"> (' . $memberSecondaryStatusText . ')</span>';
}
}
return '<span class="arm_item_status_text ' . $statusClass . '">' . $memberStatusText . '</span>';
}
function armGetMemberStatusText($user_id = 0, $default_status = '1') {
global $armPrimaryStatus, $armSecondaryStatus;
$memberStatusText = $armPrimaryStatus[$default_status];
if (in_array($default_status, array(2, 4))) {
$statusClass = 'inactive';
} else {
$statusClass = 'active';
}
if (!empty($user_id) && $user_id != 0) {
//$primary_status = $default_status;
$user_all_status = arm_get_all_member_status($user_id);
$primary_status = $user_all_status['arm_primary_status'];
$secondary_status = $user_all_status['arm_secondary_status'];
if ($primary_status == '1') {
$statusClass = 'active';
$memberStatusText = $armPrimaryStatus[1];
} elseif ($primary_status == '3') {
$statusClass = 'pending';
$memberStatusText = $armPrimaryStatus[3];
} elseif ($primary_status == '4') {
$statusClass = 'inactive banned';
//$secondaryStatusClass = 'banned';
$memberStatusText = $armPrimaryStatus[4];
} else {
$memberStatusText = $armPrimaryStatus[2];
$statusClass = 'inactive';
$memberSecondaryStatusText = $armSecondaryStatus[$secondary_status];
if (isset($armSecondaryStatus[$secondary_status]) && !empty($armSecondaryStatus[$secondary_status])) {
switch ($secondary_status) {
case '0':
$secondaryStatusClass = "banned";
break;
case '1':
case '4':
case '6':
$secondaryStatusClass = "cancelled";
break;
case '2':
case '3':
$secondaryStatusClass = "expired";
break;
case '5':
$secondaryStatusClass = "failed";
break;
default:
$secondaryStatusClass = "cancelled";
break;
}
$statusClass .= " " . $secondaryStatusClass;
$memberStatusText .= ' <span class="' . esc_attr($secondaryStatusClass) . '"> (' . esc_html($memberSecondaryStatusText) . ')</span>';
}
}
}
return '<span class="arm_item_status_text ' . esc_attr($statusClass) . '">' . $memberStatusText . '</span>';
}
function armGetMemberStatusTextForAdmin($user_id = 0, $default_status = '1', $secondary_status='') {
global $armPrimaryStatus, $armSecondaryStatus;
$memberStatusText = $armPrimaryStatus[$default_status];
if ($default_status == '2') {
$statusClass = 'inactive';
} else {
$statusClass = 'active';
}
if (!empty($user_id) && $user_id != 0) {
$primary_status = $default_status;
//$primary_status = arm_get_member_status($user_id);
if ($primary_status == '1') {
$statusClass = 'active';
$memberStatusText = $armPrimaryStatus[1];
} elseif ($primary_status == '3') {
$statusClass = 'pending';
$memberStatusText = $armPrimaryStatus[3];
} else {
$memberStatusText = $armPrimaryStatus[2];
$statusClass = 'inactive';
if (isset($armSecondaryStatus[$secondary_status]) && !empty($armSecondaryStatus[$secondary_status])) {
$memberSecondaryStatusText = $armSecondaryStatus[$secondary_status];
switch ($secondary_status) {
case '0':
$secondaryStatusClass = "banned";
break;
case '1':
case '4':
case '6':
$secondaryStatusClass = "cancelled";
break;
case '2':
case '3':
$secondaryStatusClass = "expired";
break;
case '5':
$secondaryStatusClass = "failed";
break;
default:
$secondaryStatusClass = "cancelled";
break;
}
$statusClass .= " " . $secondaryStatusClass;
$memberStatusText .= ' <span class="' . esc_attr($secondaryStatusClass) . '"> (' . esc_html($memberSecondaryStatusText) . ')</span>';
}
}
}
return '<span class="arm_item_status_text ' . esc_attr($statusClass) . '">' . $memberStatusText . '</span>';
}
function arm_change_user_status($user_data_action = array()) {
global $wpdb, $arm_email_settings, $ARMember, $arm_global_settings, $arm_subscription_plans, $arm_members_class, $arm_subscription_plans, $arm_manage_communication, $arm_slugs, $arm_payment_gateways, $is_multiple_membership_feature, $arm_capabilities_global,$arm_pay_per_post_feature;
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_manage_members'], '1',1);//phpcs:ignore --Reason:Verifying nonce
$date_format = $arm_global_settings->arm_get_wp_date_format();
$user_id = isset($_POST['user_id']) ? intval($_POST['user_id']) : '';//phpcs:ignore
if(empty($user_id))
{
$user_id = isset($user_data_action['user_id']) ? $user_data_action['user_id'] : '';//phpcs:ignore
}
$new_status = isset($_POST['new_status']) ? intval($_POST['new_status']) : '';//phpcs:ignore
if(empty($new_status))
{
$new_status = isset($user_data_action['bulkaction']) ? $user_data_action['bulkaction'] : '';//phpcs:ignore
}
$nowDate = current_time('mysql');
$send_user_notification = isset($_POST['send_user_notification']) ? intval($_POST['send_user_notification']) : '';//phpcs:ignore
$all_plans = $arm_subscription_plans->arm_get_all_subscription_plans();
$plansLists = '<li data-label="' . esc_attr__('Select Plan', 'ARMember') . '" data-value="">' . esc_html__('Select Plan', 'ARMember') . '</li>';
if (!empty($all_plans)) {
foreach ($all_plans as $p) {
$p_id = $p['arm_subscription_plan_id'];
if ($p['arm_subscription_plan_status'] == '1') {
$plansLists .= '<li data-label="' . stripslashes(esc_attr($p['arm_subscription_plan_name'])) . '" data-value="' . esc_attr($p_id) . '">' . stripslashes(esc_attr($p['arm_subscription_plan_name'])) . '</li>';
}
}
}
$response = array('type' => 'error', 'msg' => esc_html__('Sorry, Something went wrong. Please try again.', 'ARMember'));
$is_changed = false;
if (!empty($user_id) && $user_id != 0) {
if ($new_status == '1') {
arm_set_member_status($user_id, 1);
if (!empty($send_user_notification) && $send_user_notification == 1) {
$user_data = get_user_by('ID', $user_id);
$arm_global_settings->arm_mailer($arm_email_settings->templates->on_menual_activation, $user_id);
}
} else if ($new_status == '2') {
arm_set_member_status($user_id, 2, 0);
} else if ($new_status == '3') {
arm_set_member_status($user_id, 3, 0);
} else if ($new_status == '4') {
arm_set_member_status($user_id, 4);
$defaultPlanData = $arm_subscription_plans->arm_default_plan_array();
$stop_plan_ids = get_user_meta($user_id, 'arm_user_plan_ids', true);
$stop_future_plan_ids = get_user_meta($user_id, 'arm_user_future_plan_ids', true);
if (!empty($stop_future_plan_ids) && is_array($stop_future_plan_ids)) {
foreach ($stop_future_plan_ids as $stop_future_plan_id) {
$arm_subscription_plans->arm_add_membership_history($user_id, $stop_future_plan_id, 'cancel_subscription', array(), 'terminate');
delete_user_meta($user_id, 'arm_user_plan_' . $stop_future_plan_id);
}
delete_user_meta($user_id, 'arm_user_future_plan_ids');
}
if (!empty($stop_plan_ids) && is_array($stop_plan_ids)) {
foreach ($stop_plan_ids as $stop_plan_id) {
$old_plan = new ARM_Plan($stop_plan_id);
$userPlanDatameta = get_user_meta($user_id, 'arm_user_plan_' . $stop_plan_id, true);
$userPlanDatameta = !empty($userPlanDatameta) ? $userPlanDatameta : array();
$planData = shortcode_atts($defaultPlanData, $userPlanDatameta);
$plan_detail = $planData['arm_current_plan_detail'];
$planData['arm_cencelled_plan'] = 'yes';
update_user_meta($user_id, 'arm_user_plan_' . $stop_plan_id, $planData);
if (!empty($plan_detail)) {
$planObj = new ARM_Plan(0);
$planObj->init((object) $plan_detail);
} else {
$planObj = new ARM_Plan($stop_plan_id);
}
if ($planObj->exists() && $planObj->is_recurring()) {
do_action('arm_cancel_subscription_gateway_action', $user_id, $stop_plan_id);
}
$arm_subscription_plans->arm_add_membership_history($user_id, $stop_plan_id, 'cancel_subscription', array(), 'terminate');
do_action('arm_cancel_subscription', $user_id, $stop_plan_id);
$arm_subscription_plans->arm_clear_user_plan_detail($user_id, $stop_plan_id);
}
}
$sessions = WP_Session_Tokens::get_instance($user_id);
$sessions->destroy_all();
}
$arm_status = $arm_members_class->armGetMemberStatusText($user_id);
$userID = $user_id;
$primary_status = arm_get_member_status($userID);
$auser = new WP_User($user_id);
$u_role = array_shift($auser->roles);
$user_roles = get_editable_roles();
if (!empty($user_roles[$u_role]['name'])) {
$arm_user_role = $user_roles[$u_role]['name'];
} else {
$arm_user_role = '-';
}
$userPlanIDS = get_user_meta($userID, 'arm_user_plan_ids', true);
if($arm_pay_per_post_feature->isPayPerPostFeature)
{
$postIDs = get_user_meta($user_id, 'arm_user_post_ids', true);
if(!empty($postIDs))
{
foreach($userPlanIDS as $arm_plan_keys => $arm_plan_vals)
{
if(!empty($postIDs[$arm_plan_vals]))
{
unset($userPlanIDS[$arm_plan_keys]);
}
}
}
}
$arm_paid_withs = array();
$effective_from_plans = array();
if (!empty($userPlanIDS) && is_array($userPlanIDS)) {
foreach ($userPlanIDS as $userPlanID) {
$planData = get_user_meta($userID, 'arm_user_plan_' . $userPlanID, true);
$using_gateway = $planData['arm_user_gateway'];
$subscription_effective = $planData['arm_subscr_effective'];
$change_plan_to = $planData['arm_change_plan_to'];
if (!empty($using_gateway)) {
$arm_paid_withs[] = $arm_payment_gateways->arm_gateway_name_by_key($using_gateway);
}
if (!empty($subscription_effective)) {
$effective_from_plans[] = array('subscription_effective_from' => $subscription_effective, 'change_plan_to' => $change_plan_to);
}
}
}
if (!empty($arm_paid_withs)) {
$arm_paid_with = implode(",", $arm_paid_withs);
} else {
$arm_paid_with = "-";
}
$gridAction = "<div class='arm_grid_action_btn_container'>";
if ((get_current_user_id() != $userID) && !is_super_admin($userID)) {
if ($primary_status == '3') {
$activation_key = get_user_meta($userID, 'arm_user_activation_key', true);
if (!empty($activation_key) && $activation_key != '') {
$gridAction .= "<a href='javascript:void(0)' class='arm_resend_user_confirmation_link' onclick='showResendVerifyBoxCallback(".esc_attr($userID).");'><img src='" . MEMBERSHIPLITE_IMAGES_URL . "/resend_mail_icon.svg' class='armhelptip' title='" . esc_attr__('Resend Verification Email', 'ARMember') . "' onmouseover=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/resend_mail_icon_hover.svg';\" onmouseout=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/resend_mail_icon.svg';\" /></a>";
$gridAction .= "<div class='arm_confirm_box arm_resend_verify_box arm_resend_verify_box_".esc_attr($userID)."' id='arm_resend_verify_box_".esc_attr($userID)."'>";
$gridAction .= "<div class='arm_confirm_box_body'>";
$gridAction .= "<div class='arm_confirm_box_arrow'></div>";
$gridAction .= "<div class='arm_confirm_box_text_title'>".esc_html__( 'Resend Email', 'ARMember' )."</div>";
$gridAction .= "<div class='arm_confirm_box_text'>";
$gridAction .= esc_html__('Are you sure you want to resend verification email?', 'ARMember');
$gridAction .= "</div>";
$gridAction .= "<div class='arm_confirm_box_btn_container'>";
$gridAction .= "<button type='button' class='arm_confirm_box_btn armcancel' onclick='hideConfirmBoxCallback();'>" . esc_html__('Cancel', 'ARMember') . "</button>";
$gridAction .= "<button type='button' class='arm_confirm_box_btn armemailaddbtn arm_resend_verify_email_ok_btn arm_margin_right_0' data-item_id='".esc_attr($userID)."'>" . esc_html__('Ok', 'ARMember') . "</button>";
$gridAction .= "</div>";
$gridAction .= "</div>";
$gridAction .= "</div>";
}
}
}
$view_link = admin_url('admin.php?page=' . $arm_slugs->manage_members . '&action=view_member&id=' . $userID);
$gridAction .= "<a class='arm_openpreview arm_openpreview_popup armhelptip' href='javascript:void(0)' data-id='" . esc_attr($userID) . "' title='" . esc_attr__('View Detail', 'ARMember') . "'><img src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_preview.svg' onmouseover=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_preview_hover.svg';\" onmouseout=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_preview.svg';\" /></a>";
if (current_user_can('arm_manage_members')) {
$edit_link = admin_url('admin.php?page=' . $arm_slugs->manage_members . '&action=edit_member&id=' . $userID);
$gridAction .= "<a href='" . esc_url($edit_link) . "' class='armhelptip' title='" . esc_attr__('Edit Member', 'ARMember') . "' ><img src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_edit.svg' onmouseover=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_edit_hover.svg';\" onmouseout=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_edit.svg';\" /></a>";
}
if ((get_current_user_id() != $userID) && !is_super_admin($userID)) {
$gridAction .= "<a href='javascript:void(0)' onclick='showChangeStatusBoxCallback(".esc_attr($userID).");'><img src='" . MEMBERSHIPLITE_IMAGES_URL . "/change_status_icon.svg' class='armhelptip' title='" . esc_attr__('Change Status', 'ARMember') . "' onmouseover=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/change_status_icon_hover.svg';\" onmouseout=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/change_status_icon.svg';\" /></a>";
$gridAction .= "<div class='arm_confirm_box arm_change_status_box arm_change_status_box_".esc_attr($userID)."' id='arm_change_status_box_".esc_attr($userID)."'>";
$gridAction .= "<div class='arm_confirm_box_body'>";
$gridAction .= "<div class='arm_confirm_box_arrow'></div>";
$gridAction .= "<div class='arm_confirm_box_text_title'>".esc_html__('Change status', 'ARMember' )."</div>";
$gridAction .= "<div class='arm_confirm_box_text'>";
$gridAction .= esc_html__('Select user status', 'ARMember');
if ($primary_status == '1') {
$gridAction .= "<input type='hidden' id='arm_new_assigned_status_".esc_attr($userID)."' data-id='".esc_attr($userID)."' value=''>";
$gridAction .= "<dl class='arm_selectbox column_level_dd arm_member_form_dropdown arm_margin_top_10'>";
$gridAction .= "<dt><span> " . esc_html__('Select Status', 'ARMember') . " </span><input type='text' style='display:none;' value='' class='arm_autocomplete'/><i class='armfa armfa-caret-down armfa-lg'></i></dt>";
$gridAction .= "<dd><ul data-id='arm_new_assigned_status_".esc_attr($userID)."'>";
$gridAction .= '<li data-label="' . esc_attr__('Select Status', 'ARMember') . '" data-value="">' . esc_html__('Select Status', 'ARMember') . '</li>';
if ($primary_status != 1) {
$gridAction .= '<li data-label="' . esc_attr__('Activate', 'ARMember') . '" data-value="1">' . esc_html__('Activate', 'ARMember') . '</li>';
}
if (!in_array($primary_status, array(2, 4))) {
$gridAction .= '<li data-label="' . esc_attr__('Inactivate', 'ARMember') . '" data-value="2">' . esc_html__('Inactivate', 'ARMember') . '</li>';
}
if ($primary_status != 4) {
$gridAction .= '<li data-label="' . esc_attr__('Terminate', 'ARMember') . '" data-value="4">' . esc_html__('Terminate', 'ARMember') . '</li>';
}$gridAction .= "</ul></dd>";
$gridAction .= "</dl>";
} else {
// $gridAction .= esc_html__('Are you sure you want to active this member?', 'ARMember');
$gridAction .= "<input type='hidden' id='arm_new_assigned_status_".esc_attr($userID)."' data-id='".esc_attr($userID)."' value='' class='arm_new_assigned_status' data-status='".esc_attr($primary_status)."'>";
$gridAction .= "<dl class='arm_selectbox column_level_dd arm_member_form_dropdown arm_margin_top_10' >";
$gridAction .= "<dt><span> " . esc_html__('Select Status', 'ARMember') . " </span><input type='text' style='display:none;' value='' class='arm_autocomplete'/><i class='armfa armfa-caret-down armfa-lg'></i></dt>";
$gridAction .= "<dd><ul data-id='arm_new_assigned_status_".esc_attr($userID)."'>";
$gridAction .= '<li data-label="' . esc_attr__('Select Status', 'ARMember') . '" data-value="">' . esc_html__('Select Status', 'ARMember') . '</li>';
if ($primary_status != 1) {
$gridAction .= '<li data-label="' . esc_attr__('Activate', 'ARMember') . '" data-value="1">' . esc_html__('Activate', 'ARMember') . '</li>';
}
if (!in_array($primary_status, array(2, 4))) {
$gridAction .= '<li data-label="' . esc_attr__('Inactivate', 'ARMember') . '" data-value="2">' . esc_html__('Inactivate', 'ARMember') . '</li>';
}
if ($primary_status != 4) {
$gridAction .= '<li data-label="' . esc_attr__('Terminate', 'ARMember') . '" data-value="4">' . esc_html__('Terminate', 'ARMember') . '</li>';
}
$gridAction .= "</ul></dd>";
$gridAction .= "</dl>";
if ($primary_status == '3') {
$gridAction .= "<label style='display: none;' class='arm_notify_user_via_email arm_margin_top_12'>";
$gridAction .= "<input type='checkbox' class='arm_icheckbox' id='arm_user_activate_check_".esc_attr($userID)."' value='1' checked='checked'> ";
$gridAction .= esc_html__('Notify user via email', 'ARMember');
$gridAction .= "</label>";
}
}
$gridAction .= "</div>";
$gridAction .= "<div class='arm_confirm_box_btn_container'>";
$gridAction .= "<button type='button' class='arm_confirm_box_btn armcancel' onclick='hideConfirmBoxCallback();'>" . esc_html__('Cancel', 'ARMember') . "</button>";
$gridAction .= "<button type='button' class='arm_confirm_box_btn armemailaddbtn arm_change_user_status_ok_btn pro' data-item_id='".esc_attr($userID)."' data-status='".esc_attr($primary_status)."'>" . esc_html__('Ok', 'ARMember') . "</button>";
$gridAction .= "</div>";
$gridAction .= "</div>";
$gridAction .= "</div>";
}
$gridAction .= "<a href='javascript:void(0)' class='arm_view_manage_plan_btn' id='arm_manage_plan_" . esc_attr($userID) . "' data-user_id='" . esc_attr($userID) . "'><img src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_manage_plan_icon.svg' class='armhelptip' title='" . esc_attr__('Manage Plans', 'ARMember') . "' onmouseover=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_manage_plan_icon_hover.svg';\" onmouseout=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_manage_plan_icon.svg';\" /></a>";
if (current_user_can('arm_manage_members') && (get_current_user_id() != $userID)) {
if (is_multisite() && is_super_admin($userID)) {
/* Hide delete button for Super Admins */
} else {
$gridAction .= "<a href='javascript:void(0)' onclick='showConfirmBoxCallback(".esc_attr($userID).");'><img src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_delete.svg' class='armhelptip' title='" . esc_attr__('Delete', 'ARMember') . "' onmouseover=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_delete_hover.svg';\" onmouseout=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_delete.svg';\" /></a>";
$gridAction .= $arm_global_settings->arm_get_confirm_box($userID, esc_html__("Are you sure you want to delete this member?", 'ARMember'), 'arm_member_delete_btn','',esc_html__("Delete", 'ARMember'),esc_html__("Cancel", 'ARMember'),esc_html__("Delete", 'ARMember'));
}
}
$gridAction .= "</div>";
$memberTypeText = $arm_members_class->arm_get_member_type_text($userID);
$arm_all_user_plans = $userPlanIDS;
$arm_future_user_plans = get_user_meta($userID, 'arm_user_future_plan_ids', true);
if (!empty($arm_future_user_plans)) {
$arm_all_user_plans = array_merge($userPlanIDS, $arm_future_user_plans);
}
$plan_names = array();
$subscription_effective_from = array();
if (!empty($arm_all_user_plans) && is_array($arm_all_user_plans)) {
foreach ($arm_all_user_plans as $userPlanID) {
$plan_data = get_user_meta($userID, 'arm_user_plan_' . $userPlanID, true);
$subscription_effective_from_date = $plan_data['arm_subscr_effective'];
$change_plan_to = $plan_data['arm_change_plan_to'];
$plan_names[$userPlanID] = $arm_subscription_plans->arm_get_plan_name_by_id($userPlanID);
$subscription_effective_from[] = array('arm_subscr_effective' => $subscription_effective_from_date, 'arm_change_plan_to' => $change_plan_to);
}
}
$memberPlanText = '';
if ($is_multiple_membership_feature->isMultipleMembershipFeature) {
$multiple_membership = 1;
$arm_user_plans = '<div class="arm_min_width_120">';
$arm_user_plans .= "<a href='javascript:void(0)' id='arm_show_user_more_plans_" . esc_attr($userID) . "' class='arm_show_user_more_plans' data-id='" . esc_attr($userID) . "'>";
if (!empty($arm_all_user_plans) && is_array($arm_all_user_plans)) {
foreach ($arm_all_user_plans as $plan_id) {
$plan_color_id = ($plan_id > 10) ? intval($plan_id / 10) : $plan_id;
$plan_color_id = ($plan_color_id > 10) ? intval($plan_color_id / 10) : $plan_color_id;
$arm_user_plans .= "<span class='armhelptip arm_user_plan_circle arm_user_plan_" . esc_attr($plan_color_id) . "' title='" . stripslashes_deep( esc_attr($plan_names[$plan_id]) ) . "' >";
$plan_name = str_replace('-', '', stripslashes_deep($plan_names[$plan_id]));
$words = explode(" ", $plan_name);
$plan_name = '';
foreach ($words as $w) {
$w = preg_replace('/[^A-Za-z0-9\-]/', '', $w);
$plan_name .= mb_substr($w, 0, 1, 'utf-8');
}
$plan_name = strtoupper($plan_name);
$arm_user_plans .= substr($plan_name, 0, 2);
$arm_user_plans .= "</span>";
}
}
$arm_user_plans .= "</a></div>";
$memberPlanText = $arm_user_plans;
} else {
$multiple_membership = 0;
$plan_name = (!empty($plan_names)) ? implode(',', $plan_names) : '-';
$memberPlanText = '<span class="arm_user_plan_' . esc_attr($userID) . '">' . esc_html($plan_name) . '</span>';
if (!empty($subscription_effective_from)) {
foreach ($subscription_effective_from as $subscription_effective) {
$subscr_effective = $subscription_effective['arm_subscr_effective'];
$change_plan = $subscription_effective['arm_change_plan_to'];
$change_plan_name = $arm_subscription_plans->arm_get_plan_name_by_id($change_plan);
if (!empty($change_plan) && $subscr_effective > strtotime($nowDate)) {
$memberPlanText .= '<div>' . $change_plan_name . '<br/> (' . esc_html__('Effective from', 'ARMember') . ' ' . date_i18n($date_format, $subscr_effective) . ')</div>';
}
}
}
}
$is_changed = true;
$response = array('type' => 'success', 'msg' => esc_html__('User status has been changed successfully.', 'ARMember'), 'status' => $arm_status, 'grid_action' => $gridAction, 'user_role' => $arm_user_role, 'paid_with' => $arm_paid_with, 'membership_type' => $memberTypeText, 'membership_plan' => $memberPlanText, 'multiple_membership' => $multiple_membership,'paid_post'=>$arm_pay_per_post_feature->isPayPerPostFeature);
}
if (empty($user_data_action)) {
echo arm_pattern_json_encode($response);
die();
} else {
return $is_changed;
}
}
function arm_resend_verification_email_func($user_id = 0) {
global $wpdb, $ARMember, $arm_global_settings, $arm_subscription_plans, $arm_capabilities_global;
$response = array('type' => 'error', 'msg' => esc_html__('Sorry, Something went wrong. Please try again.', 'ARMember'));
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_manage_members'], '1',1);//phpcs:ignore --Reason:Verifying nonce
if (isset($_POST['action']) && $_POST['action'] == 'arm_resend_verification_email') { //phpcs:ignore
$user_id = isset($_POST['user_id']) ? intval($_POST['user_id']) : 0; //phpcs:ignore
}
if (!empty($user_id) && $user_id != 0) {
$user = new WP_User($user_id);
$activation_key = get_user_meta($user->ID, 'arm_user_activation_key', true);
if ($user->exists() && !empty($activation_key)) {
$rve = armEmailVerificationMail($user);
if ($rve) {
$response = array('type' => 'success', 'msg' => esc_html__('User verification email has been sent successfully.', 'ARMember'));
}
}
}
if (isset($_POST['action']) && $_POST['action'] == 'arm_resend_verification_email') { //phpcs:ignore
echo arm_pattern_json_encode($response);
die();
}
return $response;
}
function arm_get_next_due_date_by_start_date($user_id,$plan_id,$planStart,$payment_cycle,$num_rec)
{
global $wpdb, $ARMember, $arm_global_settings, $arm_subscription_plans;
$memberTypeText = '';
$planID = $plan_id;
$defaultPlanData = $arm_subscription_plans->arm_default_plan_array();
$userPlanDatameta = get_user_meta($user_id, 'arm_user_plan_' . $planID, true);
$userPlanDatameta = !empty($userPlanDatameta) ? $userPlanDatameta : array();
$planData = shortcode_atts($defaultPlanData, $userPlanDatameta);
$plan_detail = $planData['arm_current_plan_detail'];
$expire_time = '';
if (!empty($plan_detail)) {
$planObj = new ARM_Plan(0);
$planObj->init((object) $plan_detail);
} else {
$planObj = new ARM_Plan($planID);
}
$plan_options = $planObj->options;
if (!$planObj->is_free()) {
if ($planObj->is_recurring()) {
if (isset($plan_options['payment_cycles']) && !empty($plan_options['payment_cycles'])) {
if ($payment_cycle == '') {
$payment_cycle = 0;
}
$arm_user_payment_cycle = $plan_options['payment_cycles'][$payment_cycle];
$planRecurringOpts = array();
$planRecurringOpts['type'] = !empty($arm_user_payment_cycle['billing_type']) ? $arm_user_payment_cycle['billing_type'] : 'M';
$billing_cycle = !empty($arm_user_payment_cycle['billing_cycle']) ? $arm_user_payment_cycle['billing_cycle'] : '1';
$intervalDate = '';
switch ($planRecurringOpts['type']) {
case 'D':
$intervalDate = "+$num_rec day";
break;
case 'M':
$intervalDate = "+$num_rec month";
break;
case 'Y':
$intervalDate = "+$num_rec year";
break;
default:
$intervalDate = "+$num_rec day";
break;
}
}
$expire_time = strtotime(date('Y-m-d', strtotime($intervalDate, intval($planStart))));
}
}
return $expire_time;
}
function arm_get_next_due_date($user_id = 0, $plan_id = 0, $allow_trial = true, $payment_cycle = 0, $planStart = '') {
global $wpdb, $ARMember, $arm_global_settings, $arm_subscription_plans;
$memberTypeText = '';
$planID = $plan_id;
$defaultPlanData = $arm_subscription_plans->arm_default_plan_array();
$userPlanDatameta = get_user_meta($user_id, 'arm_user_plan_' . $planID, true);
$userPlanDatameta = !empty($userPlanDatameta) ? $userPlanDatameta : array();
$planData = shortcode_atts($defaultPlanData, $userPlanDatameta);
$plan_detail = $planData['arm_current_plan_detail'];
$expire_time = '';
if (!empty($plan_detail)) {
$planObj = new ARM_Plan(0);
$planObj->init((object) $plan_detail);
} else {
$planObj = new ARM_Plan($planID);
}
if (!empty($user_id) && $user_id != 0 && !empty($planID) && $planObj->exists()) {
$planStart = !empty($planStart) ? $planStart : $planData['arm_start_plan'];
$planExpire = $planData['arm_expire_plan'];
$paymentMode = $planData['arm_payment_mode'];
$planType = esc_html__('Free', 'ARMember');
$planExpireText = '';
if (!$planObj->is_free()) {
if ($planObj->is_recurring()) {
$plan_options = $planObj->options;
if (isset($plan_options['payment_cycles']) && !empty($plan_options['payment_cycles'])) {
if ($payment_cycle == '') {
$payment_cycle = 0;
}
$arm_user_payment_cycle = $plan_options['payment_cycles'][$payment_cycle];
$planRecurringOpts = array();
$planRecurringOpts['type'] = !empty($arm_user_payment_cycle['billing_type']) ? $arm_user_payment_cycle['billing_type'] : 'M';
$billing_cycle = !empty($arm_user_payment_cycle['billing_cycle']) ? $arm_user_payment_cycle['billing_cycle'] : '1';
switch ($planRecurringOpts['type']) {
case 'D':
$planRecurringOpts['days'] = $billing_cycle;
break;
case 'M':
$planRecurringOpts['months'] = $billing_cycle;
break;
case 'Y':
$planRecurringOpts['years'] = $billing_cycle;
break;
default:
$planRecurringOpts['days'] = $billing_cycle;
break;
}
$planRecurringOpts['time'] = (!empty($arm_user_payment_cycle['recurring_time'])) ? $arm_user_payment_cycle['recurring_time'] : 'infinite';
} else {
$planRecurringOpts = isset($planObj->options['recurring']) ? $planObj->options['recurring'] : array();
}
$planType = esc_html__('Subscription', 'ARMember');
$planTrialOpts = isset($planObj->options['trial']) ? $planObj->options['trial'] : array();
if (!empty($planRecurringOpts)) {
$period = !empty($planRecurringOpts['type']) ? $planRecurringOpts['type'] : 'M';
$start_type = $planObj->options['recurring']['manual_billing_start'];
$total_payments = $planRecurringOpts['time'];
$done_payments = $planData['arm_completed_recurring'];
$current_day = date('Y-m-d', intval($planStart));
$billing_type = $period;
/* if plan has trial and first time plan start day will be the next due date o_0 */
if (($done_payments === '' || $done_payments === 0) && $planObj->has_trial_period() && $allow_trial == true) {
$intervalDate = date('Y-m-d', $planStart);
} else {
$done_payments = ($done_payments != '' && $done_payments != 0) ? $done_payments : 1;
if ($start_type == 'transaction_day' || $paymentMode=='auto_debit_subscription') {
$billing_type = $period;
if ($billing_type == 'D') {
$days = $planRecurringOpts['days'];
$days = $done_payments * $days;
$intervalDate = "+$days day";
} else if ($billing_type == 'M') {
$months = $planRecurringOpts['months'];
$months = $done_payments * $months;
$intervalDate = "+$months month";
} else if ($billing_type == 'Y') {
$years = $planRecurringOpts['years'];
$years = $done_payments * $years;
$intervalDate = "+$years year";
}
} else {
$billing_type = $period;
if ($billing_type == 'D') {
$days = $planRecurringOpts['days'];
$days = $done_payments * $days;
$intervalDate = "+$days day";
} else {
if (date('d', strtotime($current_day)) < $start_type) {
if ($billing_type == 'M') {
$months = $planRecurringOpts['months'];
$months = $done_payments * $months;
if ($months > 0) {
$tmonths = ($months >= 1) ? $months : $months - 1;
} else {
$tmonths = $months;
}
$intervalDate = date('Y-m-' . $start_type, strtotime("$current_day+$tmonths month"));
} else if ($billing_type == 'Y') {
$years = $planRecurringOpts['years'];
$years = $done_payments * $years;
if ($years > 0) {
$tyears = ($years >= 1) ? $years : $years - 1;
} else {
$tyears = $years;
}
$intervalDate = date('Y-m-' . $start_type, strtotime("$current_day+$tyears year"));
}
} else if (date('d', strtotime($current_day)) >= $start_type) {
if ($billing_type == 'M') {
$months = $planRecurringOpts['months'];
$months = $done_payments * $months;
$intervalDate = date('Y-m-d', strtotime(date('Y-m-' . $start_type, strtotime("$current_day+$months month"))));
} else if ($billing_type == 'Y') {
$years = $planRecurringOpts['years'];
$years = $done_payments * $years;
$intervalDate = date('Y-m-d', strtotime(date('Y-m-' . $start_type, strtotime("$current_day+$years year"))));
}
}
}
}
}
$expire_time = strtotime(date('Y-m-d', strtotime($intervalDate, intval($planStart))));
}
} /* End `ELSE - ($planObj->is_recurring())` */
//}/* End `ELSE - ($planObj->is_lifetime())` */
}/* End `(!$planObj->is_free())` */
$memberTypeText .= $expire_time;
}
return $memberTypeText;
}
function arm_get_next_due_date_old($user_id = 0, $plan_id = 0, $allow_trial = true, $payment_cycle = 0, $planStart = '') {
global $wpdb, $ARMember, $arm_global_settings, $arm_subscription_plans;
$memberTypeText = '';
$planID = $plan_id;
$plan_detail = get_user_meta($user_id, 'arm_current_plan_detail', true);
$expire_time = '';
if (!empty($plan_detail)) {
$planObj = new ARM_Plan(0);
$planObj->init((object) $plan_detail);
} else {
$planObj = new ARM_Plan($planID);
}
if (!empty($user_id) && $user_id != 0 && !empty($planID) && $planObj->exists()) {
$planStart = get_user_meta($user_id, 'arm_start_plan_' . $planID, true);
$planExpire = get_user_meta($user_id, 'arm_expire_plan_' . $planID, true);
$paymentMode = get_user_meta($user_id, 'arm_selected_payment_mode', true);
$planType = esc_html__('Free', 'ARMember');
$planExpireText = '';
if (!$planObj->is_free()) {
if ($planObj->is_recurring()) {
$plan_options = $planObj->options;
if (isset($plan_options['payment_cycles']) && !empty($plan_options['payment_cycles'])) {
if ($payment_cycle == '') {
$payment_cycle = 0;
}
$arm_user_payment_cycle = $plan_options['payment_cycles'][$payment_cycle];
$planRecurringOpts = array();
$planRecurringOpts['type'] = !empty($arm_user_payment_cycle['billing_type']) ? $arm_user_payment_cycle['billing_type'] : 'M';
$billing_cycle = !empty($arm_user_payment_cycle['billing_cycle']) ? $arm_user_payment_cycle['billing_cycle'] : '1';
switch ($planRecurringOpts['type']) {
case 'D':
$planRecurringOpts['days'] = $billing_cycle;
break;
case 'M':
$planRecurringOpts['months'] = $billing_cycle;
break;
case 'Y':
$planRecurringOpts['years'] = $billing_cycle;
break;
default:
$planRecurringOpts['days'] = $billing_cycle;
break;
}
$planRecurringOpts['time'] = (!empty($arm_user_payment_cycle['recurring_time'])) ? $arm_user_payment_cycle['recurring_time'] : 'infinite';
} else {
$planRecurringOpts = isset($planObj->options['recurring']) ? $planObj->options['recurring'] : array();
}
$planType = esc_html__('Subscription', 'ARMember');
$planTrialOpts = isset($planObj->options['trial']) ? $planObj->options['trial'] : array();
if (!empty($planRecurringOpts)) {
$period = !empty($planRecurringOpts['type']) ? $planRecurringOpts['type'] : 'M';
$start_type = $planObj->options['recurring']['manual_billing_start'];
$total_payments = $planRecurringOpts['time'];
$done_payments = get_user_meta($user_id, 'arm_completed_recurring_' . $planID, true);
$current_day = date('Y-m-d', $planStart);
$billing_type = $period;
/* if plan has trial and first time plan start day will be the next due date o_0 */
if (($done_payments === '' || $done_payments === 0) && $planObj->has_trial_period() && $allow_trial == true) {
$intervalDate = date('Y-m-d', $planStart);
} else {
$done_payments = ($done_payments != '' && $done_payments != 0) ? $done_payments : 1;
if ($start_type == 'transaction_day' || $paymentMode=='auto_debit_subscription') {
$billing_type = $period;
if ($billing_type == 'D') {
$days = $planRecurringOpts['days'];
$days = $done_payments * $days;
$intervalDate = "+$days day";
} else if ($billing_type == 'M') {
$months = $planRecurringOpts['months'];
$months = $done_payments * $months;
$intervalDate = "+$months month";
} else if ($billing_type == 'Y') {
$years = $planRecurringOpts['years'];
$years = $done_payments * $years;
$intervalDate = "+$years year";
}
} else {
$billing_type = $period;
if ($billing_type == 'D') {
$days = $planRecurringOpts['days'];
$days = $done_payments * $days;
$intervalDate = "+$days day";
} else {
if (date('d', strtotime($current_day)) < $start_type) {
if ($billing_type == 'M') {
$months = $planRecurringOpts['months'];
$months = $done_payments * $months;
if ($months > 0) {
$tmonths = ($months >= 1) ? $months : $months - 1;
} else {
$tmonths = $months;
}
$intervalDate = date('Y-m-' . $start_type, strtotime("$current_day+$tmonths month"));
} else if ($billing_type == 'Y') {
$years = $planRecurringOpts['years'];
$years = $done_payments * $years;
if ($years > 0) {
$tyears = ($years >= 1) ? $years : $years - 1;
} else {
$tyears = $years;
}
$intervalDate = date('Y-m-' . $start_type, strtotime("$current_day+$tyears year"));
}
} else if (date('d', strtotime($current_day)) >= $start_type) {
if ($billing_type == 'M') {
$months = $planRecurringOpts['months'];
$months = $done_payments * $months;
$intervalDate = date('Y-m-d', strtotime(date('Y-m-' . $start_type, strtotime("$current_day+$months month"))));
} else if ($billing_type == 'Y') {
$years = $planRecurringOpts['years'];
$years = $done_payments * $years;
$intervalDate = date('Y-m-d', strtotime(date('Y-m-' . $start_type, strtotime("$current_day+$years year"))));
}
}
}
}
}
$expire_time = strtotime(date('Y-m-d', strtotime($intervalDate, $planStart)));
}
} /* End `ELSE - ($planObj->is_recurring())` */
//}/* End `ELSE - ($planObj->is_lifetime())` */
}/* End `(!$planObj->is_free())` */
$memberTypeText .= $expire_time;
}
return $memberTypeText;
}
function arm_get_start_date_for_auto_debit_plan($plan_id = 0, $trial = true, $payment_cycle = 0, $plan_action = '', $user_id = 0) {
$planObj = new ARM_Plan($plan_id);
$plan_options = $planObj->options;
if (isset($plan_options['payment_cycles']) && !empty($plan_options['payment_cycles'])) {
$arm_user_payment_cycle = $plan_options['payment_cycles'][$payment_cycle];
$planRecurringOpts = array();
$planRecurringOpts['type'] = !empty($arm_user_payment_cycle['billing_type']) ? $arm_user_payment_cycle['billing_type'] : 'M';
$billing_cycle = !empty($arm_user_payment_cycle['billing_cycle']) ? $arm_user_payment_cycle['billing_cycle'] : '1';
switch ($planRecurringOpts['type']) {
case 'D':
$planRecurringOpts['days'] = $billing_cycle;
break;
case 'M':
$planRecurringOpts['months'] = $billing_cycle;
break;
case 'Y':
$planRecurringOpts['years'] = $billing_cycle;
break;
default:
$planRecurringOpts['days'] = $billing_cycle;
break;
}
$planRecurringOpts['time'] = (!empty($arm_user_payment_cycle['recurring_time'])) ? $arm_user_payment_cycle['recurring_time'] : 'infinite';
} else {
$planRecurringOpts = isset($planObj->options['recurring']) ? $planObj->options['recurring'] : array();
}
$planTrialOpts = isset($planObj->options['trial']) ? $planObj->options['trial'] : array();
$startDate = strtotime(date('Y-m-d'));
if (!empty($planRecurringOpts)) {
$period = !empty($planRecurringOpts['type']) ? $planRecurringOpts['type'] : 'M';
$total_payments = $planRecurringOpts['time'];
$current_day = strtotime(date('Y-m-d'));
if (!empty($user_id)) {
if ($plan_action == 'renew_subscription') {
$user_plan_data = get_user_meta($user_id, 'arm_user_plan_' . $plan_id, true);
$user_plan_data = !empty($user_plan_data) ? $user_plan_data : array();
$plan_expiry_date = isset($user_plan_data['arm_expire_plan']) && !empty($user_plan_data['arm_expire_plan']) ? $user_plan_data['arm_expire_plan'] : strtotime(date('Y-m-d'));
$current_day = $plan_expiry_date;
} else {
$current_day = strtotime(date('Y-m-d'));
}
}
if ($planObj->has_trial_period() && !empty($planTrialOpts) && $trial) {
$trial_type = $planTrialOpts['type'];
switch ($trial_type) {
case 'D':
$days = $planTrialOpts['days'];
$intervalDate = "+$days day";
break;
case 'M':
$months = $planTrialOpts['months'];
$intervalDate = "+$months month";
break;
case 'Y':
$years = $planTrialOpts['years'];
$intervalDate = "+$years year";
break;
default:
break;
}
} else {
$billing_type = $period;
switch ($billing_type) {
case 'D':
$days = $planRecurringOpts['days'];
$intervalDate = "+$days day";
break;
case 'M':
$months = $planRecurringOpts['months'];
$intervalDate = "+$months month";
break;
case 'Y':
$years = $planRecurringOpts['years'];
$intervalDate = "+$years year";
break;
default:
break;
}
}
$startDate = strtotime(date('Y-m-d', strtotime($intervalDate, $current_day)));
}
return $startDate;
}
function arm_get_member_type_text($user_id = 0) {
global $wpdb, $ARMember, $arm_global_settings, $arm_subscription_plans, $arm_global_settings, $arm_pay_per_post_feature;
$memberTypeText = '';
$planIDs = get_user_meta($user_id, 'arm_user_plan_ids', true);
if($arm_pay_per_post_feature->isPayPerPostFeature)
{
$postIDs = get_user_meta($user_id, 'arm_user_post_ids', true);
if(!empty($postIDs))
{
foreach($planIDs as $arm_plan_keys => $arm_plan_vals)
{
if(!empty($postIDs[$arm_plan_vals]))
{
unset($planIDs[$arm_plan_keys]);
}
}
}
}
$planIDs = apply_filters('arm_modify_plan_ids_externally', $planIDs, $user_id);
$date_format = $arm_global_settings->arm_get_wp_date_format();
if (!empty($planIDs) && is_array($planIDs)) {
$morePlans = '<ul>';
$defaultPlanData = $arm_subscription_plans->arm_default_plan_array();
foreach ($planIDs as $planID) {
$userPlanDatameta = get_user_meta($user_id, 'arm_user_plan_' . $planID, true);
$userPlanDatameta = !empty($userPlanDatameta) ? $userPlanDatameta : array();
$planData = shortcode_atts($defaultPlanData, $userPlanDatameta);
$plan_detail = $planData['arm_current_plan_detail'];
$payment_cycle = $planData['arm_payment_cycle'];
if (!empty($plan_detail)) {
$planObj = new ARM_Plan(0);
$planObj->init((object) $plan_detail);
} else {
$planObj = new ARM_Plan($planID);
}
if (!empty($user_id) && $user_id != 0 && !empty($planID) && $planObj->exists() && empty($plan_detail['arm_subscription_plan_post_id']) ) {
$userPlanCurrencymeta = "";
$userPlanCurrencymeta = apply_filters('arm_get_member_currency_outside', $userPlanCurrencymeta, $user_id, $planID);
$planStart = $planData['arm_start_plan'];
$planExpire = $planData['arm_expire_plan'];
$paymentMode = $planData['arm_payment_mode'];
$planType = esc_html__('Free', 'ARMember');
$payment_mode_text = '';
$planExpireText = '';
if (!$planObj->is_free()) {
if ($planObj->is_lifetime()) {
$planType = esc_html__('Life Time', 'ARMember');
} else {
if ($planObj->is_recurring()) {
$planType = esc_html__('Subscription', 'ARMember');
$plan_options = $planObj->options;
$planRecurringData = $planObj->prepare_recurring_data($payment_cycle);
$arm_membership_cycle = $planObj->new_user_plan_text(false, $payment_cycle, false, $userPlanCurrencymeta);
$arm_installments_text = '';
if ($paymentMode == 'auto_debit_subscription') {
$payment_mode_text = "<span>(" . esc_html__('Automatic', 'ARMember') . ")</span>";
}
$planTrialOpts = isset($planObj->options['trial']) ? $planObj->options['trial'] : array();
if (!empty($planRecurringData)) {
$total_payments = !empty($planRecurringData['rec_time']) ? $planRecurringData['rec_time'] : 0;
$done_payments = !empty($planData['arm_completed_recurring']) ? $planData['arm_completed_recurring'] : 0;
if (isset($planRecurringData['rec_time']) && isset($planData['arm_completed_recurring']) && $total_payments!='infinite' ) {
if (!empty($planData['arm_expire_plan'])) {
if ($total_payments - $done_payments > 0) {
$arm_installments_text = ($total_payments - $done_payments) . ' / ' . $total_payments . ' ' . esc_html__('cycles due', 'ARMember');
} else {
$arm_installments_text = esc_html__('No cycles due', 'ARMember');
}
}
}
}
if ($arm_membership_cycle != '') {
$planExpireText .= "<span class='arm_user_plan_type arm_plan_cycle'> " . esc_html($arm_membership_cycle) . " </span>";
}
$planExpireText .= '<span class="arm_user_plan_expire_text" style="margin-bottom: 3px;">';
if ($done_payments < $total_payments || $total_payments == 'infinite') {
$planExpireText .= esc_html__('Renewal On', 'ARMember');
$expire_time = $planData['arm_next_due_payment'];
$planExpireText .= '<span>(' . esc_html( date_i18n($date_format, $expire_time) ) . ')</span>';
} else if ($done_payments >= $total_payments) {
$planExpireText .= esc_html__('Expires On', 'ARMember');
$expire_time = $planData['arm_expire_plan'];
$planExpireText .= '<span>(' . esc_html(date_i18n($date_format, $expire_time)) . ')</span>';
}
$planExpireText .= '</span>';
if ($arm_installments_text != '') {
$planExpireText .= "<span class='arm_user_plan_type arm_user_installments' style='margin-bottom: 3px;'>" . esc_html($arm_installments_text) . "</span>";
}
$planExpireText .= $payment_mode_text;
} else {
$planType = esc_html__('One Time', 'ARMember');
$planExpireText .= '<span class="arm_user_plan_expire_text">';
$planExpireText .= esc_html__('Expires On', 'ARMember');
$planExpireText .= '<span>(' . esc_html(date_i18n($date_format, $planExpire) ) . ')</span>';
$planExpireText .= '</span>';
}/* End `ELSE - ($planObj->is_recurring())` */
}/* End `ELSE - ($planObj->is_lifetime())` */
}/* End `(!$planObj->is_free())` */
$morePlans .= '<span class="arm_user_plan_type_text">' . esc_html($planType) . '</span>';
$morePlans .= $planExpireText;
$morePlans .= '</li>';
}
}
$morePlans .= '</ul>';
$memberTypeText .= $morePlans;
}
return $memberTypeText;
}
function arm_import_member_progress() {
global $ARMember,$arm_capabilities_global;
$ARMember->arm_session_start();
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_import_export'], '1',1); //phpcs:ignore --Reason:Verifying nonce
$total_members = isset($_REQUEST['total_members']) ? (int) $_REQUEST['total_members'] : 0;
$imported_users = isset($_SESSION['imported_users']) ? (int) $_SESSION['imported_users'] : 0;
$response = array();
$response['total_members'] = $total_members;
$response['currently_imported'] = $imported_users;
if ($response['total_members'] == 0) {
$response['error'] = true;
$response['continue'] = false;
} else {
if ($response['currently_imported'] > 0) {
if ($response['currently_imported'] == $response['total_members']) {
$percentage = 100;
$response['continue'] = false;
unset($_SESSION['imported_users']);
} else {
$percentage = (100 * $response['currently_imported']) / $response['total_members'];
$percentage = round($percentage);
$response['continue'] = true;
}
$response['percentage'] = $percentage;
} else {
$response['percentage'] = 0;
$response['continue'] = true;
}
$response['error'] = false;
}
@session_write_close();
$ARMember->arm_session_start(true);
echo arm_pattern_json_encode(stripslashes_deep($response));
die();
}
function arm_get_member_grid_data() {
global $wpdb, $ARMember, $arm_slugs, $arm_members_class, $arm_member_forms, $arm_global_settings, $arm_subscription_plans, $arm_payment_gateways, $is_multiple_membership_feature, $arm_capabilities_global, $arm_pay_per_post_feature;
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_manage_members'], '1',1);//phpcs:ignore --Reason:Verifying nonce
$date_format = $arm_global_settings->arm_get_wp_date_format();
$user_roles = get_editable_roles();
$nowDate = current_time('mysql');
$all_plans = $arm_subscription_plans->arm_get_all_subscription_plans();
if(!empty($_POST['data'])) //phpcs:ignore
{
$_REQUEST = $_POST = json_decode(stripslashes_deep($_REQUEST['data']),true); //phpcs:ignore
}
$grid_columns = array(
'avatar' => esc_html__('Avatar', 'ARMember'),
'ID' => esc_html__('User ID', 'ARMember'),
'user_login' => esc_html__('Username', 'ARMember'),
'user_email' => esc_html__('Email Address', 'ARMember'),
'arm_user_plan_ids' => esc_html__('Member Plan', 'ARMember'),
);
if($arm_pay_per_post_feature->isPayPerPostFeature)
{
$grid_columns['arm_user_paid_plans'] = esc_html__('Paid Post(s)', 'ARMember');
}
$grid_columns['arm_primary_status'] = esc_html__('Status', 'ARMember');
if(!$is_multiple_membership_feature->isMultipleMembershipFeature)
{
$grid_columns['roles'] = esc_html__('User Role', 'ARMember');
}
$grid_columns['first_name'] = esc_html__('First Name', 'ARMember');
$grid_columns['last_name'] = esc_html__('Last Name', 'ARMember');
$grid_columns['display_name'] = esc_html__('Display Name', 'ARMember');
$grid_columns['user_registered'] = esc_html__('Joined Date', 'ARMember');
$plansLists = '<li data-label="' . esc_attr__('Select Plan', 'ARMember') . '" data-value="">' . esc_html__('Select Plan', 'ARMember') . '</li>';
if (!empty($all_plans)) {
foreach ($all_plans as $p) {
$p_id = $p['arm_subscription_plan_id'];
if ($p['arm_subscription_plan_status'] == '1') {
$plansLists .= '<li data-label="' . stripslashes(esc_attr($p['arm_subscription_plan_name'])) . '" data-value="' . esc_attr($p_id) . '">' . stripslashes(esc_attr($p['arm_subscription_plan_name'])) . '</li>';
}
}
}
$displayed_grid_columns = $grid_columns;
$filter_plan_id = (!empty($_REQUEST['filter_plan_id']) && $_REQUEST['filter_plan_id'] != '0') ? sanitize_text_field($_REQUEST['filter_plan_id']) : '';
$payment_mode_id = (!empty($_REQUEST['filter_mode_id']) && $_REQUEST['filter_mode_id'] != '') ? sanitize_text_field($_REQUEST['filter_mode_id']) : '';
$filter_status_id = (!empty($_REQUEST['filter_status_id']) && $_REQUEST['filter_status_id'] != 0) ? sanitize_text_field($_REQUEST['filter_status_id']) : '';
$filter_meta_field_key = (!empty($_REQUEST['filter_meta_field_key']) && $_REQUEST['filter_meta_field_key'] != '0') ? sanitize_text_field($_REQUEST['filter_meta_field_key']) : '';
$user_meta_keys = $arm_member_forms->arm_get_db_form_fields(true);
if (!empty($user_meta_keys)) {
$exclude_keys = array('user_pass', 'repeat_pass', 'rememberme', 'remember_me', 'section', 'html','arm_captcha');
$exclude_keys = array_merge($exclude_keys, array_keys($grid_columns));
foreach ($user_meta_keys as $umkey => $val) {
if (!in_array($umkey, $exclude_keys)) {
$grid_columns[$umkey] = $val['label'];
}
}
}
if(!$is_multiple_membership_feature->isMultipleMembershipFeature)
{
$grid_columns['paid_with'] = esc_html__('Paid With', 'ARMember');
}
$grid_columns['action_btn'] = '';
$user_args = array(
'orderby' => 'ID',
'order' => 'DESC',
);
$data_columns = array();
$n = 0;
foreach ($grid_columns as $key => $value) {
$data_columns[$n]['data'] = $key;
$n++;
}
unset($n);
$user_offset = isset($_REQUEST['iDisplayStart']) ? intval($_REQUEST['iDisplayStart']) : 0;
$user_number = isset($_REQUEST['iDisplayLength']) ? intval($_REQUEST['iDisplayLength']) : 10;
$super_admin_ids = array();
if (is_multisite()) {
$super_admin = get_super_admins();
if (!empty($super_admin)) {
foreach ($super_admin as $skey => $sadmin) {
if ($sadmin != '') {
$user_obj = get_user_by('login', $sadmin);
if ($user_obj->ID != '') {
$super_admin_ids[] = $user_obj->ID;
}
}
}
}
}
$user_where = " WHERE 1=1";
if (!empty($super_admin_ids)) {
$users_admin_placeholders = ' AND u.ID IN (';
$users_admin_placeholders .= rtrim( str_repeat( '%s,', count( $super_admin_ids ) ), ',' );
$users_admin_placeholders .= ')';
array_unshift( $super_admin_ids, $users_admin_placeholders );
$user_where .= call_user_func_array(array( $wpdb, 'prepare' ), $super_admin_ids );
//$user_where .= ' AND u.ID IN (' . implode( ',', $super_admin_ids ) . ')';
}
$user_table = $wpdb->users;
$usermeta_table = $wpdb->usermeta;
$arm_user_table = $ARMember->tbl_arm_members;
$capability_column = $wpdb->get_blog_prefix($GLOBALS['blog_id']) . 'capabilities';
$operator = " AND ";
if (!empty($super_admin_ids)) {
$operator = " OR ";
}
$user_where .= $operator;
$user_where .= $wpdb->prepare(" um.meta_key = %s AND um.meta_value LIKE %s ",$capability_column,'%administrator%');
$sSearch = isset($_REQUEST['sSearch']) ? trim(sanitize_text_field($_REQUEST['sSearch'])) : '';
$filter_plan_left_join_qur = "";
if(!empty($sSearch) && !empty($filter_plan_id))
{
$filter_plan_left_join_qur = " LEFT JOIN `{$usermeta_table}` ump ON ump.user_id = u.ID ";
}
$sel_administrator = "SELECT u.ID FROM `{$user_table}` u LEFT JOIN `{$usermeta_table}` um ON um.user_id = u.ID $filter_plan_left_join_qur $user_where GROUP BY u.ID";
$row = $wpdb->get_results($sel_administrator); //phpcs:ignore --Reason $sel_administrator is a table name
$admin_users = array();
if (!empty($row)) {
foreach ($row as $key => $admin) {
array_push($admin_users, $admin->ID);
}
}
$admin_user_where = ' WHERE 1=1 ';
//$admin_user_where .= " AND u.ID NOT IN({$admin_users}) ";
$admin_users = $exclude_admins = array_unique( $admin_users );
$user_args['exclude'] = $admin_users; //phpcs:ignore
if(!empty($admin_users))
{
$admin_placeholders = ' AND u.ID NOT IN (';
$admin_placeholders .= rtrim( str_repeat( '%s,', count( $admin_users ) ), ',' );
$admin_placeholders .= ')';
array_unshift( $admin_users, $admin_placeholders );
$admin_user_where .= call_user_func_array(array( $wpdb, 'prepare' ), $admin_users );
}
$admin_user_join = "";
if (is_multisite()) {
$admin_user_join = " LEFT JOIN `{$usermeta_table}` um ON u.ID = um.user_id ";
$admin_user_where .= $wpdb->prepare(" AND um.meta_key = %s ",$capability_column);
}
$exclude_admin = "SELECT COUNT(*) as total_users FROM `{$user_table}` u {$admin_user_join} {$admin_user_where} ";
$excluded_admin = $wpdb->get_results($exclude_admin); //phpcs:ignore --Reason $exclude_admin is a predefined query
$user_args['exclude'] = $admin_users;
$total_before_filter = (isset($excluded_admin[0]->total_users) && $excluded_admin[0]->total_users != '') ? $excluded_admin[0]->total_users : 0; //phpcs:ignore
$filterPlanArr = array();
$meta_query_args = array();
$mq = 0;
if (!empty($filter_plan_id)) {
$filterPlanArr = explode(',', $filter_plan_id);
if (!empty($filterPlanArr) && !in_array('0', $filterPlanArr) && !in_array('no_plan', $filterPlanArr)) {
}
}
$sOrder = "";
$sorting_ord = isset($_REQUEST['sSortDir_0']) ? sanitize_text_field($_REQUEST['sSortDir_0']) : 'desc';
$sorting_ord = strtolower($sorting_ord);
$sorting_col = (isset($_REQUEST['iSortCol_0']) && $_REQUEST['iSortCol_0'] > 0) ? intval($_REQUEST['iSortCol_0']) : 2;
if ( ( isset($_REQUEST['iSortCol_0']) && $_REQUEST['iSortCol_0'] == 0 ) || ( 'asc'!=$sorting_ord && 'desc'!=$sorting_ord ) ) {
$sorting_ord = 'desc';
}
$arm_multiple_membership_list_show = (!empty($_REQUEST['arm_multiple_membership_list_show']) && $_REQUEST['arm_multiple_membership_list_show'] != '0') ? sanitize_text_field( $_REQUEST['arm_multiple_membership_list_show'] ) : '';
if(intval($sorting_col) == 13) {
$orderby = "user_registered";
}
else {
if($is_multiple_membership_feature->isMultipleMembershipFeature){
if(intval($sorting_col)<=6)
{
$orderby = $data_columns[(intval($sorting_col) - 2 )]['data'];
}
if(intval($sorting_col)>6 && intval($sorting_col)<=8)
{
$orderby = $data_columns[(intval($sorting_col) - 1 )]['data'];
}
if(intval($sorting_col) >8 && intval($sorting_col)>=9)
{
$orderby = $data_columns[(intval($sorting_col) )]['data'];
}
}
else
{
$orderby = $data_columns[(intval($sorting_col) - 1)]['data'];
}
}
$org_orderby = "";
if(in_array($orderby, array("first_name", "last_name"))) {
$org_orderby = $orderby;
}
$user_args['orderby'] = $orderby;
$user_args['order'] = $sorting_ord;
$ordered_by_query = false;
$user_table_columns = array("ID", "user_login", "user_email", "user_url", "user_registered", "display_name", "arm_primary_status");
if (in_array($orderby, $user_table_columns)) {
$ordered_by_query = true;
}
else {
$orderby = 'um.meta_value';
$ordered_by_query = true;
}
// GET ALL PLANS IDS AND NAMES
$plan_query = $wpdb->prepare("SELECT arm_subscription_plan_id as plan_id,`arm_subscription_plan_name` as plan_name FROM " . $ARMember->tbl_arm_subscription_plans . " WHERE `arm_subscription_plan_is_delete`=%d ORDER BY arm_subscription_plan_id",'0'); //phpcs:ignore --Reason $ARMember->tbl_arm_subscription_plans is a table name
$plan_result = $wpdb->get_results($plan_query);//phpcs:ignore --Reason $plan_query is a predefined query
$plan_total = !empty($plan_result) ? count($plan_result) : 0;
$filter_plan_search = "";
$filter_ids = array();
$filter_payment_mode_search = "";
$arm_multiple_plan_id_condition = "";
$join_arm_user_table = "";
if (!empty($filter_plan_id)) {
$arm_meta_search_alias_val = "armp";
$join_arm_user_table .= " LEFT JOIN `{$arm_user_table}` armp ON armp.arm_user_id = u.ID ";
$filter_ids = explode(',', $filter_plan_id);
$filter_new_ids = implode("','", $filter_ids);
if($is_multiple_membership_feature->isMultipleMembershipFeature || !empty( $arm_pay_per_post_feature->isPayPerPostFeature ) )
{
if($plan_total>1)
{
$arm_multiple_plan_id_condition .= " OR ";
for($plan_i=1; $plan_i<=$plan_total; $plan_i++)
{
$arm_multiple_plan_id_condition .= " ({$arm_meta_search_alias_val}.arm_user_plan_ids LIKE '%i:".$plan_i.";i:" . implode("%' OR {$arm_meta_search_alias_val}.arm_user_plan_ids LIKE '%i:".$plan_i.";i:", $filter_ids) . ";%') ";
if($plan_i!=$plan_total)
{
$arm_multiple_plan_id_condition .= " OR ";
}
}
}
//$arm_multiple_plan_id_condition = " OR ({$arm_meta_search_alias_val}.arm_user_plan_ids LIKE '%i:1;i:" . implode("%' OR {$arm_meta_search_alias_val}.arm_user_plan_ids LIKE '%i:1;i:", $filter_ids) . ";%') OR ({$arm_meta_search_alias_val}.arm_user_plan_ids LIKE '%i:2;i:" . implode("%' OR {$arm_meta_search_alias_val}.arm_user_plan_ids LIKE '%i:2;i:", $filter_ids) . ";%') OR ({$arm_meta_search_alias_val}.arm_user_plan_ids LIKE '%i:3;i:" . implode("%' OR {$arm_meta_search_alias_val}.arm_user_plan_ids LIKE '%i:3;i:", $filter_ids) . ";%') OR ({$arm_meta_search_alias_val}.arm_user_plan_ids LIKE '%i:4;i:" . implode("%' OR {$arm_meta_search_alias_val}.arm_user_plan_ids LIKE '%i:4;i:", $filter_ids) . ";%') OR ({$arm_meta_search_alias_val}.arm_user_plan_ids LIKE '%i:5;i:" . implode("%' OR {$arm_meta_search_alias_val}.arm_user_plan_ids LIKE '%i:5;i:", $filter_ids) . ";%')";
}
$arm_plan_id_condition = " ( ({$arm_meta_search_alias_val}.arm_user_plan_ids LIKE '%\"" . implode("\"%' OR {$arm_meta_search_alias_val}.arm_user_plan_ids LIKE '%\"", $filter_ids) . "\"%' ) OR (({$arm_meta_search_alias_val}.arm_user_plan_ids LIKE '%i:0;i:" . implode("%' OR {$arm_meta_search_alias_val}.arm_user_plan_ids LIKE '%i:0;i:", $filter_ids) . ";%') {$arm_multiple_plan_id_condition} ) ) ";
$filter_plan_search = " AND ({$arm_plan_id_condition})";
}
$search_params = '';
if ($sSearch != '')
{
$arm_search_user_meta_key_where = '';
if(!empty($filter_meta_field_key)){
$arm_user_keys = array('user_login', 'user_email', 'display_name', 'user_url');
if(in_array($filter_meta_field_key, $arm_user_keys)){
$arm_search_user_meta_key_where .= " (u.".$filter_meta_field_key." LIKE '%{$sSearch}%') ";
}else{
$arm_search_user_meta_key_where .= $wpdb->prepare(" (um.meta_key = %s AND um.meta_value LIKE %s) ",$filter_meta_field_key,'%'.$sSearch.'%');
}
$search_params = " AND ($arm_search_user_meta_key_where )";
}else{
foreach ($user_meta_keys as $arm_um_key => $arm_um_val)
{
$arm_user_keys = array('user_login', 'user_email', 'display_name', 'user_url');
if(!in_array($arm_um_key, $arm_user_keys))
{
$arm_search_user_meta_key_where .= " (um.meta_key = '".$arm_um_key."' AND um.meta_value LIKE '%{$sSearch}%') OR ";
}
}
$search_params = $wpdb->prepare(" AND ( u.user_login LIKE %s OR u.user_email LIKE %s OR u.display_name LIKE %s OR (um.meta_key = %s AND um.meta_value LIKE %s) OR (um.meta_key = %s AND um.meta_value LIKE %s) OR (um.meta_key = %s AND um.meta_value LIKE %s) )",'%'.$sSearch.'%','%'.$sSearch.'%','%'.$sSearch.'%','first_name','%'.$sSearch.'%','last_name','%'.$sSearch.'%',$capability_column,'%'.$sSearch.'%');
}
}
$admin_placeholders = 'u.ID NOT IN (';
$admin_placeholders .= rtrim( str_repeat( '%s,', count( $exclude_admins ) ), ',' );
$admin_placeholders .= ')';
array_unshift( $exclude_admins, $admin_placeholders );
$search_where = "";
if ($filter_plan_search == '' && $search_params == '' && $filter_payment_mode_search == '') {
$exclude_admins = call_user_func_array(array( $wpdb, 'prepare' ), $exclude_admins );
$search_where = " WHERE ".$exclude_admins;
} else {
$exclude_admins = call_user_func_array(array( $wpdb, 'prepare' ), $exclude_admins );
$search_where = " WHERE ".$exclude_admins." ".$filter_plan_search." ".$filter_payment_mode_search." ".$search_params;
}
if (is_multisite()) {
if ($sSearch == '' && $filter_plan_search == '' && $filter_payment_mode_search == '') {
$search_where .= $wpdb->prepare(" AND um.meta_key = %s",$capability_column);
} else {
$search_where .= $wpdb->prepare("AND um.user_id IN (SELECT `user_id` FROM `".$usermeta_table."` WHERE 1=1 AND `meta_key` = %s)",$capability_column); //phpcs:ignore --Reason $usermeta_table is a table name
}
}
if ($orderby == 'arm_primary_status') {
$join_arm_user_table .= " LEFT JOIN `{$arm_user_table}` armu ON armu.arm_user_id = u.ID ";
}
$join_on = "um.user_id = u.ID";
if($org_orderby != "") {
$join_on = "(um.user_id = u.ID AND um.meta_key = '{$org_orderby}')";
}
else {
$join_on = "um.user_id = u.ID";
}
$join_arm_usermeta_table = "";
$join_for_status = "";
if($filter_status_id != '') {
$is_suspended = false;
$search_where .= " AND (";
if(strpos($filter_status_id, "5") !== false) {
$is_suspended = true;
$filter_status_id = substr($filter_status_id, 0, -2);
$join_for_status = " LEFT JOIN `{$usermeta_table}` um1 ON um1.user_id = u.ID ";
$search_where .= $wpdb->prepare(" (armu.arm_user_suspended_plan_ids != %s AND armu.arm_user_suspended_plan_ids != %s)",'a:0:{}','');
}
if(strpos($filter_status_id, "6") !== false) {
$is_suspended = false;
$filter_status_id = substr($filter_status_id, 0, -2);
$search_where .= $wpdb->prepare("( (armu.arm_user_plan_ids != %s AND armu.arm_user_plan_ids IS NOT NULL AND armu.arm_user_plan_ids !=%s) AND (armu.arm_user_suspended_plan_ids = %s OR armu.arm_user_suspended_plan_ids = %s or armu.arm_user_suspended_plan_ids IS NULL) ) ",'a:0:{}','','','a:0:{}');
}
if($filter_status_id != '')
{
$search_where .= "(armu.arm_primary_status IN ({$filter_status_id}))";
}
$search_where .= " ) ";
if ($orderby != 'arm_primary_status') {
$join_arm_user_table .= " LEFT JOIN `{$arm_user_table}` armu ON armu.arm_user_id = u.ID ";
}
}
$search_query1 = "SELECT u.ID FROM `{$user_table}` u LEFT JOIN `{$usermeta_table}` um ON {$join_on} {$join_for_status} {$filter_plan_left_join_qur} {$join_arm_user_table} {$join_arm_usermeta_table} {$search_where}";
$mycounterquery = "SELECT count(DISTINCT(u.ID)) as total_users FROM `{$user_table}` u LEFT JOIN `{$usermeta_table}` um ON {$join_on} {$join_for_status} {$filter_plan_left_join_qur} {$join_arm_user_table} {$join_arm_usermeta_table} {$search_where}";
if($search_params == '' && (!empty($orderby) && $orderby == 'arm_primary_status'))
{
$search_query1 = "SELECT u.ID FROM `{$user_table}` u {$join_for_status} {$filter_plan_left_join_qur} {$join_arm_user_table} {$join_arm_usermeta_table} {$search_where}";
$mycounterquery = "SELECT count(DISTINCT(u.ID)) as total_users FROM `{$user_table}` u {$join_for_status} {$filter_plan_left_join_qur} {$join_arm_user_table} {$join_arm_usermeta_table} {$search_where}";
}
$search_query = $search_query1." GROUP BY u.ID";
$tmp_user_query1 = $wpdb->get_results($search_query); //phpcs:ignore --Reason $search_query is a table name
$tmp_user_query = $wpdb->get_row($mycounterquery);//phpcs:ignore --Reason $search_query is a predefined query
$total_after_filter = (!empty($tmp_user_query->total_users)) ? $tmp_user_query->total_users : 0;
$after_filter_args = $user_args;
$user_args['offset'] = intval($user_offset);
$user_args['number'] = intval($user_number);
$order_by_qry = "";
if ($ordered_by_query) {
if($orderby == "arm_primary_status")
{
$orderby = "armu.".$orderby;
}
$order_by_qry = " ORDER BY " . $orderby . " " . $sorting_ord;
}
if (!empty($arm_multiple_membership_list_show))
{
$arm_multiple_membership_user_ids = '';
foreach ($tmp_user_query1 as $gusers) {
$plan_ids = get_user_meta($gusers->ID, 'arm_user_plan_ids', true);
$post_ids = get_user_meta($gusers->ID, 'arm_user_post_ids', true);
if (!empty($plan_ids) && is_array($plan_ids))
{
$arm_plan_ids_count = count($plan_ids);
if($arm_pay_per_post_feature->isPayPerPostFeature)
{
$arm_plan_counter = 0;
foreach($plan_ids as $key => $value)
{
if(is_array( $post_ids ) && !array_key_exists($value, $post_ids))
{
$arm_plan_counter++;
}
}
if($arm_plan_counter > 1 && $arm_multiple_membership_list_show=='2')
{
$arm_multiple_membership_user_ids .= $gusers->ID.',';
}
else if($arm_plan_counter == 1 && $arm_multiple_membership_list_show=='1')
{
$arm_multiple_membership_user_ids .= $gusers->ID.',';
}
}
else
{
if($arm_plan_ids_count > 1 && $arm_multiple_membership_list_show=='2'){
$arm_multiple_membership_user_ids .= $gusers->ID.',';
}
else if($arm_plan_ids_count==1 && $arm_multiple_membership_list_show=='1')
{
$arm_multiple_membership_user_ids .= $gusers->ID.',';
}
}
}
}
if(!empty($arm_multiple_membership_user_ids))
{
$arm_multiple_membership_user_ids = rtrim($arm_multiple_membership_user_ids,',');
}
else
{
$arm_multiple_membership_user_ids = 0;
}
$mm_user_id = explode(',',$arm_multiple_membership_user_ids);
$mm_user_id_admin_placeholders = 'AND u.ID IN (';
$mm_user_id_admin_placeholders .= rtrim( str_repeat( '%s,', count( $mm_user_id ) ), ',' );
$mm_user_id_admin_placeholders .= ')';
array_unshift( $mm_user_id, $mm_user_id_admin_placeholders );
// $user_where .= ' AND u.ID NOT IN (' . implode( ',', $super_admin_ids ) . ')';
$user_where = call_user_func_array(array( $wpdb, 'prepare' ), $mm_user_id );
// $search_query = $search_query1." AND u.ID IN($arm_multiple_membership_user_ids) GROUP BY u.ID";
$search_query = $search_query1." ".$user_where." GROUP BY u.ID";
$tmp_query = $search_query." {$order_by_qry} ";
$form_result = $wpdb->get_results($tmp_query); //phpcs:ignore --Reason $tmp_query is a query name
$total_after_filter = (!empty($form_result)) ? count($form_result) : 0;
$tmp_query = $search_query." {$order_by_qry} LIMIT {$user_offset},{$user_number}";
$form_result = $wpdb->get_results($tmp_query);//phpcs:ignore --Reason $tmp_query is a query name
}
else
{
$tmp_query = $search_query . "{$order_by_qry} LIMIT {$user_offset},{$user_number}";
$form_result = $wpdb->get_results($tmp_query);//phpcs:ignore --Reason $tmp_query is a query name
$total_after_filter = (!empty($tmp_user_query1)) ? count($tmp_user_query1) : 0;
}
$plan_array = array();
foreach ($plan_result as $key => $plan)
{
$plan_array[$plan->plan_id] = $plan->plan_name;
}
if (!empty($form_result)) {
if (!empty($payment_mode_ids)) {
if (!empty($filter_ids)) {
foreach ($form_result as $key => $gusers) {
$plan_ids = get_user_meta($gusers->ID, 'arm_user_plan_ids', true);
if (!empty($plan_ids) && is_array($plan_ids)) {
$user_array = array_intersect($plan_ids, $filter_ids);
if (empty($user_array)) {
unset($form_result[$key]);
} else {
$user_payment_mode = array();
foreach ($plan_ids as $pid) {
$planData = get_user_meta($gusers->ID, 'arm_user_plan_' . $pid, true);
if (!empty($planData)) {
$user_payment_mode[] = isset($planData['arm_payment_mode']) ? $planData['arm_payment_mode'] : '';
}
}
$user_payment_mode_intersect = array_intersect($payment_mode_ids, $user_payment_mode);
if (empty($user_payment_mode_intersect)) {
unset($form_result[$key]);
}
}
} else {
unset($form_result[$key]);
}
}
} else {
foreach ($form_result as $key => $gusers) {
$plan_ids = get_user_meta($gusers->ID, 'arm_user_plan_ids', true);
if (!empty($plan_ids) && is_array($plan_ids)) {
$user_payment_mode = array();
foreach ($plan_ids as $pid) {
$planData = get_user_meta($gusers->ID, 'arm_user_plan_' . $pid, true);
if (!empty($planData)) {
$user_payment_mode[] = isset($planData['arm_payment_mode']) ? $planData['arm_payment_mode'] : '';
}
}
$user_payment_mode_intersect = array_intersect($payment_mode_ids, $user_payment_mode);
if (empty($user_payment_mode_intersect)) {
unset($form_result[$key]);
}
} else {
unset($form_result[$key]);
}
}
}
} else {
if (!empty($filter_ids)) {
foreach ($form_result as $key => $gusers) {
$plan_ids = get_user_meta($gusers->ID, 'arm_user_plan_ids', true);
if (!empty($plan_ids) && is_array($plan_ids)) {
$user_array = array_intersect($plan_ids, $filter_ids);
if (empty($user_array)) {
unset($form_result[$key]);
}
} else {
unset($form_result[$key]);
}
}
}
}
}
$grid_data = array();
$ai = 0;
foreach ($form_result as $gusers) {
$auser = new WP_User($gusers->ID);
$userID = $auser->ID;
$userPlanID = get_user_meta($userID, 'arm_user_plan_ids', true);
$userFormID = get_user_meta($userID, 'arm_form_id', true);
$user_all_status = arm_get_all_member_status($userID);
$primary_status = $user_all_status['arm_primary_status'];
$secondary_status = $user_all_status['arm_secondary_status'];
if (in_array('no_plan', $filterPlanArr) && !empty($userPlanID)) {
continue;
}
if (user_can($userID, 'administrator')) {
//continue;
}
$userPlanIDs = get_user_meta($userID, 'arm_user_plan_ids', true);
$userPlanIDs = (isset($userPlanIDs) && !empty($userPlanIDs)) ? $userPlanIDs : array();
$arm_all_user_plans = $userPlanIDs;
$arm_future_user_plans = get_user_meta($userID, 'arm_user_future_plan_ids', true);
if (!empty($arm_future_user_plans)) {
$arm_all_user_plans = array_merge($userPlanIDs, $arm_future_user_plans);
}
if($arm_pay_per_post_feature->isPayPerPostFeature)
{
$postIDs = get_user_meta($userID, 'arm_user_post_ids', true);
if(!empty($postIDs))
{
foreach($arm_all_user_plans as $arm_plan_keys => $arm_plan_vals)
{
if(!empty($postIDs[$arm_plan_vals]))
{
unset($arm_all_user_plans[$arm_plan_keys]);
}
}
}
}
$arm_all_user_plans = apply_filters('arm_modify_plan_ids_externally', $arm_all_user_plans, $userID);
$userSuspendedPlanIDs = get_user_meta($userID, 'arm_user_suspended_plan_ids', true);
$userSuspendedPlanIDs = (isset($userSuspendedPlanIDs) && !empty($userSuspendedPlanIDs)) ? $userSuspendedPlanIDs : array();
/* if ($is_multiple_membership_feature->isMultipleMembershipFeature) {
if (!empty($arm_all_user_plans)) {
$grid_data[$ai][0] = "<div class='arm_show_user_more_plans' id='arm_show_user_more_plans_" . esc_attr($userID) . "' data-id='" . esc_attr($userID) . "'></div>";
} else {
$grid_data[$ai][0] = "";
}
} */
$grid_data[$ai][0] = "";
$edit_link = admin_url('admin.php?page=' . $arm_slugs->manage_members . '&action=edit_member&id=' . $userID);
$view_link = admin_url('admin.php?page=' . $arm_slugs->manage_members . '&action=view_member&id=' . $userID);
if ((get_current_user_id() != $userID)) {
$grid_data[$ai][0] = "<input id=\"cb-item-action-".esc_attr($userID)."\" class=\"chkstanard\" type=\"checkbox\" value=\"".esc_attr($userID)."\" name=\"item-action[]\">";
} else {
$grid_data[$ai][0] = "<input id=\"cb-item-action-".esc_attr($userID)."\" class=\"chkstanard\" type=\"checkbox\" disabled=\"disabled\">";
}
if (!empty($grid_columns)) {
$n = 1;
foreach($grid_columns as $key => $title) {
switch ($key) {
case 'ID':
$grid_data[$ai][$n] = $userID;
break;
case 'user_login':
$grid_data[$ai][$n] = $auser->user_login;
break;
case 'user_email':
$grid_data[$ai][$n] = '<a class="arm_openpreview_popup" href="javascript:void(0)" data-id="' . esc_attr($userID) . '">' . stripslashes($auser->user_email) . '</a>';
break;
case 'display_name':
$grid_data[$ai][$n] = $auser->display_name;
break;
case 'first_name':
case 'last_name':
$grid_data[$ai][$n] = get_user_meta($userID, $key, true);
break;
case 'roles':
if (!empty($auser->roles)) {
$role_name = array();
if (is_array($auser->roles)) {
foreach ($auser->roles as $role) {
if (isset($user_roles[$role])) {
$role_name[] = $user_roles[$role]['name'];
}
}
} else {
$u_role = array_shift($auser->roles);
if (isset($user_roles[$u_role])) {
$role_name[] = $user_roles[$u_role]['name'];
}
}
}
reset($auser->roles);
if (!empty($role_name)) {
$grid_data[$ai][$n] = implode(', ', $role_name);
} else {
$grid_data[$ai][$n] = '-';
}
break;
/* case 'arm_member_type':
$memberTypeText = $arm_members_class->arm_get_member_type_text($userID);
$grid_data[$ai][$n] = $memberTypeText;
break; */
case 'arm_user_plan_ids':
$plan_names = array();
$subscription_effective_from = array();
$arm_user_plans = '';
if (!empty($arm_all_user_plans) && is_array($arm_all_user_plans)) {
$defaultPlanData = $arm_subscription_plans->arm_default_plan_array();
foreach ($arm_all_user_plans as $userPlanID) {
$userPlanDatameta = get_user_meta($userID, 'arm_user_plan_' . $userPlanID, true);
$arm_paid_plan_condition = "";
if($arm_pay_per_post_feature->isPayPerPostFeature)
{
$arm_paid_plan_condition = (!empty($userPlanDatameta) && empty($userPlanDatameta['arm_current_plan_detail']['arm_subscription_plan_post_id']) );
if(!empty($userPlanDatameta['arm_current_plan_detail']['arm_subscription_plan_post_id']) && $userPlanDatameta['arm_current_plan_detail']['arm_subscription_plan_post_id'] != 0)
{
//Code for delete user plan id which is associated with paid post.
if (($key = array_search($userPlanID, $arm_all_user_plans)) !== false)
{
unset($arm_all_user_plans[$key]);
}
}
}
else
{
$arm_paid_plan_condition = (!empty($userPlanDatameta));
}
if($arm_paid_plan_condition)
{
$userPlanDatameta = !empty($userPlanDatameta) ? $userPlanDatameta : array();
$plan_data = shortcode_atts($defaultPlanData, $userPlanDatameta);
//$plan_data = get_user_meta($userID, 'arm_user_plan_'.$userPlanID, true);
$subscription_effective_from_date = $plan_data['arm_subscr_effective'];
$change_plan_to = $plan_data['arm_change_plan_to'];
//$plan_names[$userPlanID] = $arm_subscription_plans->arm_get_plan_name_by_id($userPlanID);
$plan_names[$userPlanID] = isset($plan_array[$userPlanID]) ? $plan_array[$userPlanID] : '';
if($plan_data['arm_cencelled_plan'] == "yes" && !$is_multiple_membership_feature->isMultipleMembershipFeature)
{
$plan_names[$userPlanID] .= " <span style='color: red;'>( ".esc_html__('Cancelled', 'ARMember')." )</span>";
}
$subscription_effective_from[] = array('arm_subscr_effective' => $subscription_effective_from_date, 'arm_change_plan_to' => $change_plan_to);
}
}
}
//if(count($userPlanIDs) > 1){
if ($is_multiple_membership_feature->isMultipleMembershipFeature) {
$arm_user_plans = '<div class="arm_min_width_120">';
$arm_user_plans .= "<a href='javascript:void(0)' id='arm_show_user_more_plans_" . $userID . "' data-id='" . $userID . "'>";
if (!empty($arm_all_user_plans) && is_array($arm_all_user_plans) ) {
foreach ($arm_all_user_plans as $plan_id) {
$plan_color_id = ($plan_id > 10) ? intval($plan_id / 10) : $plan_id;
$plan_color_id = ($plan_color_id > 10) ? intval($plan_color_id / 10) : $plan_color_id;
if( !empty( $plan_names[$plan_id] ) ) {
$arm_plan_title = $plan_names[$plan_id];
if($plan_data['arm_cencelled_plan'] == "yes" && $is_multiple_membership_feature->isMultipleMembershipFeature)
{
$arm_plan_title .= '<span style="color: red;">('.esc_html__('Cancelled', 'ARMember').' )</span>';
}
$arm_user_plans .= "<span class='armhelptip arm_user_plan_circle arm_user_plan_" . $plan_color_id . "' title='" . stripslashes_deep($arm_plan_title) . "' >";
$plan_name = str_replace('-', '', stripslashes_deep($plan_names[$plan_id]));
$words = explode(" ", $plan_name);
$plan_name = '';
foreach ($words as $w) {
$w = preg_replace('/[^A-Za-z0-9\-]/', '', $w);
$plan_name .= mb_substr($w, 0, 1, 'utf-8');
}
$plan_name = strtoupper($plan_name);
$arm_user_plans .= substr($plan_name, 0, 2);
$arm_user_plans .= "</span>";
}
}
}
$arm_user_plans .= "</a></div>";
$grid_data[$ai][$n] = $arm_user_plans;
} else {
$plan_name = (!empty($plan_names)) ? implode(',', $plan_names) : '';
$grid_data[$ai][$n] = '<span class="arm_user_plan_' . $userID . '">' . stripslashes_deep($plan_name) . '</span>';
if(!empty($arm_all_user_plans) && is_array($arm_all_user_plans)) {
foreach($arm_all_user_plans as $arm_all_user_plan)
{
if (in_array($arm_all_user_plan, $userSuspendedPlanIDs)) {
$grid_data[$ai][$n] .= '<br/><span style="color: red;">(' . esc_html__('Suspended', 'ARMember') . ')</span>';
}
}
}
if (!empty($subscription_effective_from)) {
foreach ($subscription_effective_from as $subscription_effective) {
$subscr_effective = $subscription_effective['arm_subscr_effective'];
$change_plan = $subscription_effective['arm_change_plan_to'];
//$change_plan_name = $arm_subscription_plans->arm_get_plan_name_by_id($change_plan);
$change_plan_name = isset($plan_array[$change_plan]) ? $plan_array[$change_plan] : array();
if (!empty($change_plan) && $subscr_effective > strtotime($nowDate)) {
$grid_data[$ai][$n] .= '<div>' . esc_html($change_plan_name) . '<br/> (' . esc_html__('Effective from', 'ARMember') . ' ' . date_i18n($date_format, $subscr_effective) . ')</div>';
}
}
}
}
break;
case 'arm_user_paid_plans':
if($arm_pay_per_post_feature->isPayPerPostFeature)
{
$arm_paid_post_counter = 0;
$arm_user_post_ids = get_user_meta($userID, 'arm_user_post_ids', true);
if(empty($arm_user_post_ids) )
{
$arm_user_post_ids = array();
}
$arm_user_plan_ids = get_user_meta($userID, 'arm_user_plan_ids', true);
if(empty($arm_user_plan_ids) )
{
$arm_user_plan_ids = array();
}
if(!empty( $arm_user_post_ids ))
{
foreach($arm_user_plan_ids as $arm_user_plan_id_val)
{
if(array_key_exists($arm_user_plan_id_val, $arm_user_post_ids))
{
$arm_paid_post_counter++;
}
}
}
$grid_data[$ai][$n] = '<a class="arm_open_paid_plan_popup" href="javascript:void(0)" data-id="' . esc_attr($userID) . '">' . esc_html($arm_paid_post_counter) . '</a>';
}
break;
case 'arm_primary_status':
//$grid_data[$ai][$n] = $arm_members_class->armGetMemberStatusText($userID);
$grid_data[$ai][$n] = $arm_members_class->armGetMemberStatusText_print($primary_status,$secondary_status);
break;
case 'user_registered':
$grid_data[$ai][$n] = date_i18n($date_format, strtotime($auser->$key));
break;
case 'avatar':
$user_avatar = get_user_meta($userID, $key, true);
$grid_data[$ai][$n] = get_avatar($userID, 43);
break;
case 'user_url':
$grid_data[$ai][$n] = $auser->user_url;
break;
case 'paid_with':
$arm_paid_withs = array();
if (!empty($userPlanIDs) && is_array($userPlanIDs)) {
foreach ($userPlanIDs as $userPlanID) {
$planData = get_user_meta($userID, 'arm_user_plan_' . $userPlanID, true);
if( empty($planData['arm_current_plan_detail']['arm_subscription_plan_post_id']) )
{
$using_gateway = isset($planData['arm_user_gateway']) ? $planData['arm_user_gateway'] : '' ;
if (!empty($using_gateway)) {
$arm_paid_withs[] = $arm_payment_gateways->arm_gateway_name_by_key($using_gateway);
}
}
}
}
if (!empty($arm_paid_withs)) {
$arm_paid_with = implode(",", $arm_paid_withs);
} else {
$arm_paid_with = "-";
}
$grid_data[$ai][$n] = $arm_paid_with;
break;
case 'action_btn':
$gridAction = "<div class='arm_grid_action_btn_container'>";
if ((get_current_user_id() != $userID) && !is_super_admin($userID)) {
if ($primary_status == '3') {
$activation_key = get_user_meta($userID, 'arm_user_activation_key', true);
if (!empty($activation_key)) {
$gridAction .= "<a href='javascript:void(0)' class='arm_resend_user_confirmation_link' onclick='showResendVerifyBoxCallback(".esc_attr($userID).");'><img src='" . MEMBERSHIPLITE_IMAGES_URL . "/resend_mail_icon.svg' class='armhelptip' title='" . esc_attr__('Resend Verification Email', 'ARMember') . "' onmouseover=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/resend_mail_icon_hover.svg';\" onmouseout=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/resend_mail_icon.svg';\" /></a>";
$gridAction .= "<div class='arm_confirm_box arm_resend_verify_box arm_resend_verify_box_".esc_attr($userID)."' id='arm_resend_verify_box_".esc_attr($userID)."'>";
$gridAction .= "<div class='arm_confirm_box_body'>";
$gridAction .= "<div class='arm_confirm_box_arrow'></div>";
$gridAction .= "<div class='arm_confirm_box_text_title'>".esc_html__( 'Resend Email', 'ARMember' )."</div>";
$gridAction .= "<div class='arm_confirm_box_text'>";
$gridAction .= esc_html__('Are you sure you want to resend verification email?', 'ARMember');
$gridAction .= "</div>";
$gridAction .= "<div class='arm_confirm_box_btn_container'>";
$gridAction .= "<button type='button' class='arm_confirm_box_btn armcancel' onclick='hideConfirmBoxCallback();'>" . esc_html__('Cancel', 'ARMember') . "</button>";
$gridAction .= "<button type='button' class='arm_confirm_box_btn armemailaddbtn arm_resend_verify_email_ok_btn arm_margin_right_0' data-item_id='".esc_attr($userID)."'>" . esc_html__('Ok', 'ARMember') . "</button>";
$gridAction .= "</div>";
$gridAction .= "</div>";
$gridAction .= "</div>";
}
}
}
$gridAction .= "<a class='arm_openpreview arm_openpreview_popup armhelptip' href='javascript:void(0)' data-id='" . esc_attr($userID) . "' title='" . esc_attr__('View Detail', 'ARMember') . "'><img src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_preview.svg' onmouseover=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_preview_hover.svg';\" onmouseout=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_preview.svg';\" /></a>";
if (current_user_can('arm_manage_members')) {
//$edit_link = admin_url('admin.php?page=' . $arm_slugs->manage_members . '&action=edit_member&id=' . $userID);
$gridAction .= "<a href='javascript:void(0)' class='arm_edit_member_data pro armhelptip' title='" . esc_attr__('Edit Member', 'ARMember') . "' data-id='".$userID."'><img src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_edit.svg' onmouseover=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_edit_hover.svg';\" onmouseout=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_edit.svg';\" /></a>";
}
if ((get_current_user_id() != $userID) && !is_super_admin($userID)) {
$gridAction .= "<a href='javascript:void(0)' onclick='showChangeStatusBoxCallback(".esc_attr($userID).");'><img src='" . MEMBERSHIPLITE_IMAGES_URL . "/change_status_icon.svg' class='armhelptip' title='" . esc_attr__('Change Status', 'ARMember') . "' onmouseover=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/change_status_icon_hover.svg';\" onmouseout=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/change_status_icon.svg';\" /></a>";
$gridAction .= "<div class='arm_confirm_box arm_change_status_box arm_change_status_box_".esc_attr($userID)."' id='arm_change_status_box_".esc_attr($userID)."' >";
$gridAction .= "<div class='arm_confirm_box_body'>";
$gridAction .= "<div class='arm_confirm_box_arrow'></div>";
$gridAction .= "<div class='arm_confirm_box_text_title'>".esc_html__('Change status', 'ARMember' )."</div>";
$gridAction .= "<div class='arm_confirm_box_text'>";
$gridAction .= esc_html__('Select user status', 'ARMember');
if ($primary_status == '1') {
$gridAction .= "<input type='hidden' id='arm_new_assigned_status_".esc_attr($userID)."' data-id='".esc_attr($userID)."' value=''>";
$gridAction .= "<dl class='arm_selectbox column_level_dd arm_member_form_dropdown arm_margin_top_10' >";
$gridAction .= "<dt><span> " . esc_html__('Select Status', 'ARMember') . " </span><input type='text' style='display:none;' value='' class='arm_autocomplete'/><i class='armfa armfa-caret-down armfa-lg'></i></dt>";
$gridAction .= "<dd><ul data-id='arm_new_assigned_status_".esc_attr($userID)."'>";
$gridAction .= '<li data-label="' . esc_attr__('Select Status', 'ARMember') . '" data-value="">' . esc_html__('Select Status', 'ARMember') . '</li>';
if ($primary_status != 1) {
$gridAction .= '<li data-label="' . esc_attr__('Activate', 'ARMember') . '" data-value="1">' . esc_html__('Activate', 'ARMember') . '</li>';
}
if (!in_array($primary_status, array(2, 4))) {
$gridAction .= '<li data-label="' . esc_attr__('Inactivate', 'ARMember') . '" data-value="2">' . esc_html__('Inactivate', 'ARMember') . '</li>';
}
if ($primary_status != 4) {
$gridAction .= '<li data-label="' . esc_attr__('Terminate', 'ARMember') . '" data-value="4">' . esc_html__('Terminate', 'ARMember') . '</li>';
}$gridAction .= "</ul></dd>";
$gridAction .= "</dl>";
} else {
// $gridAction .= esc_html__('Are you sure you want to active this member?', 'ARMember');
$gridAction .= "<input type='hidden' id='arm_new_assigned_status_".esc_attr($userID)."' data-id='".esc_attr($userID)."' value='' class='arm_new_assigned_status' data-status='".esc_attr($primary_status)."'>";
$gridAction .= "<dl class='arm_selectbox column_level_dd arm_member_form_dropdown arm_margin_top_10' >";
$gridAction .= "<dt><span> " . esc_html__('Select Status', 'ARMember') . " </span><input type='text' style='display:none;' value='' class='arm_autocomplete'/><i class='armfa armfa-caret-down armfa-lg'></i></dt>";
$gridAction .= "<dd><ul data-id='arm_new_assigned_status_".esc_attr($userID)."'>";
$gridAction .= '<li data-label="' . esc_attr__('Select Status', 'ARMember') . '" data-value="">' . esc_html__('Select Status', 'ARMember') . '</li>';
if ($primary_status != 1) {
$gridAction .= '<li data-label="' . esc_attr__('Activate', 'ARMember') . '" data-value="1">' . esc_html__('Activate', 'ARMember') . '</li>';
}
if (!in_array($primary_status, array(2, 4))) {
$gridAction .= '<li data-label="' . esc_attr__('Inactivate', 'ARMember') . '" data-value="2">' . esc_html__('Inactivate', 'ARMember') . '</li>';
}
if ($primary_status != 4) {
$gridAction .= '<li data-label="' . esc_attr__('Terminate', 'ARMember') . '" data-value="4">' . esc_html__('Terminate', 'ARMember') . '</li>';
}
$gridAction .= "</ul></dd>";
$gridAction .= "</dl>";
if ($primary_status == '3') {
$gridAction .= "<label style='display: none;' class='arm_notify_user_via_email arm_margin_top_12'>";
$gridAction .= "<input type='checkbox' class='arm_icheckbox' id='arm_user_activate_check_".esc_attr($userID)."' value='1' checked='checked'> ";
$gridAction .= esc_html__('Notify user via email', 'ARMember');
$gridAction .= "</label>";
}
}
$gridAction .= "</div>";
$gridAction .= "<div class='arm_confirm_box_btn_container'>";
$gridAction .= "<button type='button' class='arm_confirm_box_btn armcancel' onclick='hideConfirmBoxCallback();'>" . esc_html__('Cancel', 'ARMember') . "</button>";
$gridAction .= "<button type='button' class='arm_confirm_box_btn armemailaddbtn arm_change_user_status_ok_btn pro' data-item_id='".esc_attr($userID)."' data-status='".esc_attr($primary_status)."'>" . esc_html__('Ok', 'ARMember') . "</button>";
$gridAction .= "</div>";
$gridAction .= "</div>";
$gridAction .= "</div>";
}
$gridAction .= "<a href='javascript:void(0)' class='arm_view_manage_plan_btn' data-user_id ='".esc_attr($userID)."' id='arm_manage_plan_" . esc_attr($userID) . "'><img src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_manage_plan_icon.svg' class='armhelptip' title='" . esc_attr__('Manage Plans', 'ARMember') . "' onmouseover=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_manage_plan_icon_hover.svg';\" onmouseout=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_manage_plan_icon.svg';\" /></a>";
if (current_user_can('arm_manage_members') && (get_current_user_id() != $userID)) {
if (is_multisite() && is_super_admin($userID)) {
/* Hide delete button for Super Admins */
} else {
$gridAction .= "<a href='javascript:void(0)' onclick='showConfirmBoxCallback({$userID});'><img src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_delete.svg' class='armhelptip' title='" . esc_attr__('Delete', 'ARMember') . "' onmouseover=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_delete_hover.svg';\" onmouseout=\"this.src='" . MEMBERSHIPLITE_IMAGES_URL . "/grid_delete.svg';\" /></a>";
$gridAction .= $arm_global_settings->arm_get_confirm_box($userID, esc_html__("Are you sure you want to delete this member?", 'ARMember'), 'arm_member_delete_btn','',esc_html__('Delete', 'ARMember'),esc_attr__('Cancel', 'ARMember'),esc_attr__('Delete', 'ARMember'));
}
}
$gridAction .= "</div>";
$grid_data[$ai][$n] = $gridAction;
break;
case 'profile_cover':
$grid_data[$ai][$n] = '';
$user_meta_detail = get_user_meta($userID, $key, true);
if($user_meta_detail !='')
{
// $grid_data[$ai][$n] = $user_meta_detail;
$upload_dir = wp_upload_dir();
$upload_dirname = $upload_dir['basedir'];
$exp_val = explode("/", $user_meta_detail);
$filename = $exp_val[count($exp_val) - 1];
if (file_exists($upload_dirname . "/armember/" . $filename)) {
$file_extension = explode('.', $filename);
$file_ext = $file_extension[count($file_extension) - 1];
if (in_array($file_ext, array('jpg', 'jpeg', 'jpe', 'gif', 'png', 'bmp', 'tif', 'tiff'))) {
$grid_data[$ai][$n] = '<img src="' . $user_meta_detail . '" width="100px" height="auto">';
} else if (in_array($file_ext, array('pdf', 'exe'))) {
$grid_data[$ai][$n] = '<img src="' . MEMBERSHIPLITE_IMAGES_URL . '/document.png" >';
} else if (in_array($file_ext, array('zip'))) {
$grid_data[$ai][$n] = '<img src="' . MEMBERSHIPLITE_IMAGES_URL . '/archive.png" >';
} else {
$grid_data[$ai][$n] = '<img src="' . MEMBERSHIPLITE_IMAGES_URL . '/text.png" >';
}
}
}
break;
default:
$user_meta_detail = get_user_meta($userID, $key, true);
$arm_form_id = get_user_meta($userID, 'arm_form_id', true);
$grid_data[$ai][$n] = '';
$data = isset($user_meta_keys[$key]) ? $user_meta_keys[$key] : '';
/* though we have again query for $data if $data is null than not display value */
if ($data != '') {
$arm_form_field_option = maybe_unserialize($data);
$arm_form_field_type = $arm_form_field_option['type'];
if ($arm_form_field_type == 'file') {
if($user_meta_detail != '')
{
$files_urls = explode(',',$user_meta_detail);
if($files_urls > 0)
{
$grid_data[$ai][$n] = '';
$upload_dir = wp_upload_dir();
$upload_dirname = $upload_dir['basedir'];
foreach($files_urls as $file_url)
{
if ($file_url != '') {
$exp_val = explode("/", $file_url);
$filename = $exp_val[count($exp_val) - 1];
if (file_exists($upload_dirname . "/armember/" . $filename)) {
$file_extension = explode('.', $filename);
$file_ext = $file_extension[count($file_extension) - 1];
if (in_array($file_ext, array('jpg', 'jpeg', 'jpe', 'gif', 'png', 'bmp', 'tif', 'tiff'))) {
$grid_data[$ai][$n] .= '<img src="' . $file_url . '" width="100px" height="auto">';
} else if (in_array($file_ext, array('pdf', 'exe'))) {
$grid_data[$ai][$n] .= '<img src="' . MEMBERSHIPLITE_IMAGES_URL . '/document.png" >';
} else if (in_array($file_ext, array('zip'))) {
$grid_data[$ai][$n] .= '<img src="' . MEMBERSHIPLITE_IMAGES_URL . '/archive.png" >';
} else {
$grid_data[$ai][$n] .= '<img src="' . MEMBERSHIPLITE_IMAGES_URL . '/text.png" >';
}
}
}
}
}
}
} else if ($arm_form_field_type == 'textarea') {
$str = explode("\n", wordwrap($user_meta_detail, 70));
$user_meta_detail = $str[0] . '...';
$grid_data[$ai][$n] = $user_meta_detail;
} else if (in_array($arm_form_field_type, array('radio', 'checkbox', 'select'))) {
$main_array = array();
$options = $arm_form_field_option['options'];
$value_array = array();
foreach ($options as $arm_key => $arm_val) {
if (strpos($arm_val, ":") != false) {
$exp_val = explode(":", $arm_val);
$exp_val1 = $exp_val[1];
$value_array[$exp_val[0]] = $exp_val[1];
} else {
$value_array[$arm_val] = $arm_val;
}
}
$user_meta_detail = $ARMember->arm_array_trim($user_meta_detail);
if (!empty($value_array)) {
if (is_array($user_meta_detail)) {
foreach ($user_meta_detail as $u) {
foreach ($value_array as $arm_key => $arm_val) {
if ($u == $arm_val) {
array_push($main_array, $arm_key);
}
}
}
$user_meta_detail = @implode(', ', $main_array);
$grid_data[$ai][$n] = $user_meta_detail;
} else {
$exp_val = array();
/*if (strpos($user_meta_detail, ",") != false) {
$exp_val = explode(",", $user_meta_detail);
}*/
if (!empty($exp_val)) {
foreach ($exp_val as $u) {
if (in_array($u, $value_array)) {
array_push($main_array, array_search($u, $value_array));
}
}
$user_meta_detail = @implode(', ', $main_array);
$grid_data[$ai][$n] = $user_meta_detail;
} else {
if (in_array($user_meta_detail, $value_array)) {
$grid_data[$ai][$n] = array_search($user_meta_detail, $value_array);
} else {
$grid_data[$ai][$n] = $user_meta_detail;
}
}
}
} else {
if (is_array($user_meta_detail)) {
$user_meta_detail = $ARMember->arm_array_trim($user_meta_detail);
$user_meta_detail = @implode(', ', $user_meta_detail);
$grid_data[$ai][$n] = $user_meta_detail;
} else {
$grid_data[$ai][$n] = $user_meta_detail;
}
}
} else {
if (is_array($user_meta_detail)) {
$user_meta_detail = $ARMember->arm_array_trim($user_meta_detail);
$user_meta_detail = @implode(', ', $user_meta_detail);
$grid_data[$ai][$n] = $user_meta_detail;
} else {
$grid_data[$ai][$n] = $user_meta_detail;
}
}
}
break;
}
$n++;
}
}
$ai++;
}
$sEcho = isset($_REQUEST['sEcho']) ? intval($_REQUEST['sEcho']) : intval(10);
$response = array(
'sColumns' => implode(',', $grid_columns),
'sEcho' => $sEcho,
'iTotalRecords' => $total_before_filter, // Before Filtered Records
'iTotalDisplayRecords' => $total_after_filter, // After Filter Records
'aaData' => $grid_data,
);
echo json_encode($response);
die();
}
function arm_new_plan_assigned_by_system($new_plan_id, $old_plan_id, $user_id, $is_plan_assigned = 0) {
global $arm_subscription_plans, $arm_payment_gateways;
$new_plan = new ARM_Plan($new_plan_id);
if ($new_plan->is_recurring()) {
$payment_mode = 'manual_subscription';
$defaultPlanData = $arm_subscription_plans->arm_default_plan_array();
$userPlanDatameta = get_user_meta($user_id, 'arm_user_plan_' . $new_plan_id, true);
$userPlanDatameta = !empty($userPlanDatameta) ? $userPlanDatameta : array();
$newPlanData = shortcode_atts($defaultPlanData, $userPlanDatameta);
$newPlanData['arm_payment_mode'] = 'manual_subscription';
update_user_meta($user_id, 'arm_user_plan_' . $new_plan_id, $newPlanData);
}
$start_date='';
$entry_id='';
$arm_last_payment_status = 'success';
$arm_subscription_plans->arm_update_user_subscription($user_id, $new_plan_id, 'system', false, $arm_last_payment_status, $start_date, $entry_id, $is_plan_assigned);
//delete_user_meta($user_id, 'arm_using_gateway_' . $old_plan_id);
if (!($new_plan->is_free())) {
$payment_mode = '';
$new_plan_amount = 0;
$currency = $arm_payment_gateways->arm_get_global_currency();
$currency = !empty($currency) ? $currency : 'USD';
$user_info = get_user_by('id', $user_id);
$extraParam = array();
$extraParam['plan_amount'] = $new_plan_amount;
$extraParam['manual_by'] = 'Paid By system';
$return_array = array();
$return_array['arm_plan_id'] = $new_plan_id;
$return_array['arm_payment_gateway'] = '';
$return_array['arm_user_id'] = $user_id;
$return_array['arm_first_name']= $user_info->first_name;
$return_array['arm_last_name']=$user_info->last_name;
$return_array['arm_payment_type'] = $new_plan->payment_type;
$return_array['arm_token'] = '-';
$return_array['payment_gateway'] = 'manual';
$return_array['arm_payer_email'] = '';
$return_array['arm_receiver_email'] = '';
$return_array['arm_transaction_id'] = '-';
$return_array['arm_transaction_payment_type'] = $new_plan->payment_type;
$return_array['arm_transaction_status'] = 'completed';
$return_array['arm_payment_mode'] = $payment_mode;
$return_array['arm_payment_date'] = current_time( 'mysql' );
$return_array['arm_amount'] = $new_plan_amount;
$return_array['arm_currency'] = $currency;
$return_array['arm_extra_vars'] = maybe_serialize($extraParam);
$return_array['arm_is_trial'] = 0;
$return_array['arm_created_date'] = current_time('mysql');
$payment_log_id = $arm_payment_gateways->arm_save_payment_log($return_array);
}
}
function arm_manual_update_user_data($user_id = 0, $plan_id = 0, $posted_data = array(), $plan_cycle = 0) {
global $arm_payment_gateways, $ARMember, $arm_members_class, $arm_subscription_plans, $arm_global_settings, $arm_membership_setup, $arm_pay_per_post_feature;
$general_settings = isset($arm_global_settings->global_settings) ? $arm_global_settings->global_settings : array();
$arm_currency_decimal = isset($general_settings['arm_currency_decimal_digit']) ? $general_settings['arm_currency_decimal_digit'] : 0;
$is_paid_post = (isset($posted_data['arm_paid_post_request']) && !empty($posted_data['arm_paid_post_request']) && ($posted_data['arm_paid_post_request'] == (bool)"1")) ? 1 : 0 ;
$is_arm_gift_plan = (isset($posted_data['arm_gift_request']) && !empty($posted_data['arm_gift_request']) && ($posted_data['arm_gift_request'] == (bool)"1")) ? 1 : 0 ;
// $plan_id = $posted_data['arm_user_plan'];
// $planData = get_user_meta($user_id, 'arm_user_plan_'.$plan_id, true);
$defaultPlanData = $arm_subscription_plans->arm_default_plan_array();
$planData = get_user_meta($user_id, 'arm_user_plan_' . $plan_id, true);
$userPlanDatameta = !empty($planData) ? $planData : array();
$planData = shortcode_atts($defaultPlanData, $userPlanDatameta);
$payment_mode = isset($posted_data['arm_selected_payment_mode']) ? $posted_data['arm_selected_payment_mode'] : 'manual_subscription';
$payment_gateway = isset($posted_data['payment_gateway']) ? $posted_data['payment_gateway'] : 'manual';
$start_time = $planData['arm_start_plan'];
if ($start_time == '') {
$start_time = strtotime(current_time('mysql'));
}
$current_time = strtotime(current_time('mysql'));
//$plan = new ARM_Plan($plan_id);
if ($start_time > $current_time) {
$current_time = $start_time;
}
$planDetail = $planData['arm_current_plan_detail'];
if (!empty($planDetail)) {
$plan = new ARM_Plan(0);
$plan->init((object) $planDetail);
} else {
$plan = new ARM_Plan($plan_id);
}
$total_occurence = isset($plan->options['recurring']['time']) ? $plan->options['recurring']['time'] : '';
if ($total_occurence == 'infinite') {
$total_occurence_actual = 1;
$planData['arm_expire_plan'] = "";
} else {
$total_occurence_actual = $total_occurence;
}
$currency = $arm_payment_gateways->arm_get_global_currency();
$currency = !empty($currency) ? $currency : 'USD';
/*to check that tax is enable or not*/
$all_global_settings = $arm_global_settings->arm_get_all_global_settings();
$general_settings = isset($all_global_settings['general_settings']) ? $all_global_settings['general_settings'] : array();
$enable_tax = isset($general_settings['enable_tax']) ? $general_settings['enable_tax'] : 0;
$tax_display_type = !empty($general_settings['arm_tax_include_exclude_flag']) ? $general_settings['arm_tax_include_exclude_flag'] : 0;
$total_cycle_performed = 0;
if ($plan->is_recurring()) {
$is_trail_added = 0;
while ($total_occurence_actual > 0) {
if ($start_time <= $current_time) {
$total_cycle_performed++;
$next_recurring_date = $arm_members_class->arm_get_next_due_date($user_id, $plan_id, false, $plan_cycle, $start_time);
$arm_plan_amount = 0;
$arm_extra_vars = array('manual_by'=>esc_html__('Paid By admin', 'ARMember'));
$plan_cycle_data = $plan->prepare_recurring_data($plan_cycle);
/*rpt_log : changes for trial period amount while recurring transaction done by admin.*/
$old_plan_ids = get_user_meta($user_id, 'arm_user_old_plan_id', true);
$old_plan = (isset($old_plan_ids) && !empty($old_plan_ids)) ? $old_plan_ids : array();
$arm_is_trial = '0';
if ($plan->has_trial_period()) {
if ( !empty($old_plan) && !in_array($plan_id, $old_plan) ) {
$total_cycle_performed = 1;
} else if( isset($posted_data['arm_plan_ids']) && $posted_data['arm_plan_ids'] != '' && $posted_data['arm_plan_ids'] != $plan_id ) {
$total_cycle_performed = 1;
} else {
if( isset($plan_cycle_data['trial']) && !empty($plan_cycle_data['trial']) && empty($is_trail_added)) {
$is_trail_added = 1;
$arm_plan_amount = isset($plan_cycle_data['trial']['amount']) ? $plan_cycle_data['trial']['amount'] : 0;
$arm_is_trial = '1';
$arm_extra_vars['trial'] = $plan_cycle_data['trial'];
$arm_extra_vars['arm_is_trial'] = $arm_is_trial;
$arm_extra_vars['paid_amount'] = sprintf("%.2f", $arm_plan_amount);
$arm_extra_vars['plan_amount'] = $plan_cycle_data['amount'];
$plan_start_date = empty($planData['arm_start_plan']) ? current_time('mysql') : date('Y-m-d H:i:s', $planData['arm_start_plan']);
$start_date = "";
if ( "D" == $plan->recurring_data['trial']['period'] ) {
$start_date = date('Y-m-d H:i:s', strtotime($plan_start_date . " + ".$plan->recurring_data['trial']['interval']." days"));
} else if ( "M" == $plan->recurring_data['trial']['period'] ) {
$start_date = date('Y-m-d H:i:s', strtotime($plan_start_date . " + ".$plan->recurring_data['trial']['interval']." months"));
} else if ( "Y" == $plan->recurring_data['trial']['period'] ) {
$start_date = date('Y-m-d H:i:s', strtotime($plan_start_date . " + ".$plan->recurring_data['trial']['interval']." years"));
}
$start_date = strtotime($start_date);
$planData['arm_is_trial_plan'] = $arm_is_trial;
$planData['arm_trial_start'] = strtotime($plan_start_date);
$planData['arm_start_plan'] = $start_date;
$planData['arm_trial_end'] = $start_date;
$total_cycle_performed = 0;
$next_recurring_date = $start_date;
} else {
$arm_plan_amount = $plan_cycle_data['amount'];
}
}
} else{
$total_cycle_performed = 1;
$arm_plan_amount = $plan_cycle_data['amount'];
}
$return_array = array();
$plan_cycle_data_amount = str_replace(",", "", $plan_cycle_data['amount']);
/*applying tax if paid by admin*/
if(1 == $enable_tax) {
$tax_amount = 0;
if(isset($plan_cycle_data['trial']['amount'])) {
$plan_cycle_data_amount = $plan_cycle_data['trial']['amount'];
}
$tax_type = $general_settings['tax_type'];
$country_tax_field = isset($general_settings['country_tax_field']) ? $general_settings['country_tax_field'] : '';
if('common_tax' == $tax_type) {
$tax_percentage = $general_settings['tax_amount'];
} else if('country_tax' == $tax_type) {
$country_tax_arr = (!empty($general_settings['arm_tax_country_name'])) ? maybe_unserialize($general_settings['arm_tax_country_name']) : array();
$country_tax_val_arr = (!empty($general_settings['arm_country_tax_val'])) ? maybe_unserialize($general_settings['arm_country_tax_val']) : array();
$country_default_tax = (!empty($general_settings['arm_country_tax_default_val'])) ? $general_settings['arm_country_tax_default_val'] : 0;
if(!empty($posted_data) && isset($posted_data[$country_tax_field]) && in_array($posted_data[$country_tax_field], $country_tax_arr)) {
$opt_index = array_search($posted_data[$country_tax_field], $country_tax_arr);
$tax_percentage = $country_tax_val_arr[$opt_index];
} else {
$tax_percentage = $country_default_tax;
}
}
$plan_cycle_data_amount = str_replace(",", "", $plan_cycle_data_amount);
if($tax_percentage > 0){
if( empty($tax_display_type))
{
$tax_amount = ($plan_cycle_data_amount * $tax_percentage) / 100;
$tax_amount = number_format((float)$tax_amount, $arm_currency_decimal, '.', '');
$arm_extra_vars['plan_amount'] = number_format((float)$plan_cycle_data_amount,$arm_currency_decimal, '.', '');
$plan_cycle_data_amount = $plan_cycle_data_amount+$tax_amount;
}
else
{
$tax_amount = $plan_cycle_data_amount - ( $plan_cycle_data_amount / ( ( $tax_percentage /100 )+ 1) ) ;
}
$arm_extra_vars['paid_amount'] = number_format((float)$plan_cycle_data_amount,$arm_currency_decimal, '.', '');
}
$arm_extra_vars['tax_amount'] = number_format((float)$tax_amount,$arm_currency_decimal, '.', '');
$arm_extra_vars['tax_percentage'] = number_format((float)$tax_percentage,$arm_currency_decimal, '.', '');
}
$user_info = get_user_by('id', $user_id);
$return_array['arm_user_id'] = $user_id;
$return_array['arm_first_name']= $user_info->first_name;
$return_array['arm_last_name']=$user_info->last_name;
$return_array['arm_plan_id'] = $plan->ID;
$return_array['arm_payment_gateway'] = 'manual';
$return_array['arm_payment_type'] = $plan->payment_type;
$return_array['arm_token'] = '-';
$return_array['arm_payer_email'] = '';
$return_array['arm_receiver_email'] = '';
$return_array['arm_transaction_id'] = '-';
$return_array['arm_transaction_payment_type'] = $plan->payment_type;
$return_array['arm_transaction_status'] = 'completed';
$return_array['arm_payment_mode'] = 'manual_subscription';
$return_array['arm_payment_date'] = date('Y-m-d H:i:s', $start_time);
$return_array['arm_amount'] = number_format((float)$plan_cycle_data_amount,$arm_currency_decimal, '.', '');
$return_array['arm_currency'] = $currency;
$return_array['arm_coupon_code'] = '';
$return_array['arm_extra_vars'] = maybe_serialize($arm_extra_vars);
if($is_paid_post)
{
$is_post_plan = $arm_pay_per_post_feature->arm_get_post_from_plan_id($plan->ID);
if(!empty($is_post_plan) && !empty($is_post_plan[0]['arm_subscription_plan_post_id']))
{
$return_array['arm_is_post_payment'] = 1;
//Count `arm_user_plan` array and get last element from array
$arm_user_post_id = end($posted_data['arm_user_plan']);
$return_array['arm_paid_post_id'] = $arm_user_post_id;
}
}
$return_array = apply_filters('arm_modify_return_data_for_manual_update_user_data', $return_array, $plan->ID);
$return_array['arm_created_date'] = date('Y-m-d H:i:s', $start_time);
$payment_log_id = $arm_payment_gateways->arm_save_payment_log($return_array);
if (!isset($next_recurring_date) || $next_recurring_date == '') {
break;
}
$start_time = $next_recurring_date;
} else {
break;
}
if ($total_occurence == 'infinite') {
$total_occurence_actual++;
} else {
$total_occurence_actual--;
}
}
$planData['arm_completed_recurring'] = $total_cycle_performed;
$planData['arm_next_due_payment'] = $start_time;
if( !isset($planData['arm_payment_cycle']) )
{
$planData['arm_payment_cycle'] = 0;
}
update_user_meta($user_id, 'arm_user_plan_' . $plan_id, $planData);
} else if ($plan->is_lifetime() || $plan->type == 'paid_finite') {
$plan_cycle_data_amount = str_replace(",", "", $plan->amount);
$arm_extra_vars = array();
$arm_extra_vars['manual_by'] = esc_html__('Paid By admin', 'ARMember');
/*applying tax if paid by admin*/
$tax_amount = 0;
if(1 == $enable_tax) {
$tax_type = isset($general_settings['tax_type']) ? $general_settings['tax_type'] : '';
$country_tax_field = isset($general_settings['country_tax_field']) ? $general_settings['country_tax_field'] : '';
if('common_tax' == $tax_type) {
$tax_percentage = $general_settings['tax_amount'];
} else if('country_tax' == $tax_type) {
$country_tax_arr = (!empty($general_settings['arm_tax_country_name'])) ? maybe_unserialize($general_settings['arm_tax_country_name']) : array();
$country_tax_val_arr = (!empty($general_settings['arm_country_tax_val'])) ? maybe_unserialize($general_settings['arm_country_tax_val']) : array();
$country_default_tax = (!empty($general_settings['arm_country_tax_default_val'])) ? $general_settings['arm_country_tax_default_val'] : 0;
if(!empty($posted_data) && isset($posted_data[$country_tax_field]) && in_array($posted_data[$country_tax_field], $country_tax_arr)) {
$opt_index = array_search($posted_data[$country_tax_field], $country_tax_arr);
$tax_percentage = $country_tax_val_arr[$opt_index];
} else {
$tax_percentage = $country_default_tax;
}
}
if($tax_percentage > 0){
if( empty($tax_display_type))
{
$tax_amount = ($plan_cycle_data_amount * $tax_percentage) / 100;
$tax_amount = number_format((float)$tax_amount, $arm_currency_decimal, '.', '');
$arm_extra_vars['plan_amount'] = number_format((float)$plan_cycle_data_amount,$arm_currency_decimal, '.', '');
$plan_cycle_data_amount = $plan_cycle_data_amount+$tax_amount;
}
else
{
$tax_amount = $plan_cycle_data_amount - ($plan_cycle_data_amount / ( ( $tax_percentage /100 )+ 1)) ;
}
$arm_extra_vars['paid_amount'] = number_format((float)$plan_cycle_data_amount,$arm_currency_decimal, '.', '');
}
$arm_extra_vars['tax_amount'] = number_format((float)$tax_amount, $arm_currency_decimal, '.', '');
$arm_extra_vars['tax_percentage'] = $tax_percentage;
}
$return_array = array();
$user_info = get_user_by('id', $user_id);
$return_array['arm_user_id'] = $user_id;
$return_array['arm_first_name']= $user_info->first_name;
$return_array['arm_last_name']=$user_info->last_name;
$return_array['arm_plan_id'] = $plan->ID;
$return_array['arm_payment_gateway'] = 'manual';
$return_array['arm_payment_type'] = $plan->payment_type;
$return_array['arm_token'] = '-';
$return_array['arm_payer_email'] = '';
$return_array['arm_receiver_email'] = '';
$return_array['arm_transaction_id'] = '-';
$return_array['arm_transaction_payment_type'] = $plan->payment_type;
$return_array['arm_transaction_status'] = 'completed';
$return_array['arm_payment_mode'] = '';
$return_array['arm_payment_date'] = date('Y-m-d H:i:s', $start_time);
$return_array['arm_amount'] = number_format((float)$plan_cycle_data_amount,$arm_currency_decimal, '.', '');
$return_array['arm_currency'] = $currency;
$return_array['arm_coupon_code'] = '';
if($is_paid_post)
{
$is_post_plan = $arm_pay_per_post_feature->arm_get_post_from_plan_id($plan->ID);
if(!empty($is_post_plan) && !empty($is_post_plan[0]['arm_subscription_plan_post_id']))
{
$return_array['arm_is_post_payment'] = 1;
//Count `arm_user_plan` array and get last element from array
$arm_user_post_id = end($posted_data['arm_user_plan']);
$return_array['arm_paid_post_id'] = $arm_user_post_id;
}
}
$return_array = apply_filters('arm_modify_return_data_for_manual_update_user_data', $return_array, $plan->ID);
$return_array['arm_extra_vars'] = maybe_serialize($arm_extra_vars);
$return_array['arm_created_date'] = date('Y-m-d H:i:s', $start_time);
$payment_log_id = $arm_payment_gateways->arm_save_payment_log($return_array);
}
if(!empty($arm_pay_per_post_feature->isPayPerPostFeature))
{
$arm_pay_per_post_feature->arm_assign_paid_post_to_user($user_id,$plan->ID);
}
}
function arm_add_manual_user_payment($user_id = 0, $plan_id = 0, $member_data=array()) {
global $arm_payment_gateways, $arm_global_settings;
$currency = $arm_payment_gateways->arm_get_global_currency();
$currency = !empty($currency) ? $currency : 'USD';
$general_settings = isset($arm_global_settings->global_settings) ? $arm_global_settings->global_settings : array();
$arm_currency_decimal = isset($general_settings['arm_currency_decimal_digit']) ? $general_settings['arm_currency_decimal_digit'] : 0;
$plan_amount = $tax_amount = $tax_percentage = $plan_cycle_data_amount = 0;
$tax_display_type = !empty($general_settings['arm_tax_include_exclude_flag']) ? $general_settings['arm_tax_include_exclude_flag'] : 0;
if($user_id > 0 && $plan_id > 0) {
$user_plan_detail = get_user_meta($user_id, 'arm_user_plan_'.$plan_id);
$user_plan_detail = !empty($user_plan_detail) ? maybe_unserialize($user_plan_detail) : array();
if(!empty($user_plan_detail)) {
foreach ($user_plan_detail as $key => $user_plan) {
$plan_amount = $user_plan['arm_current_plan_detail']['arm_subscription_plan_amount'];
}
}
}
$all_global_settings = $arm_global_settings->arm_get_all_global_settings();
$general_settings = isset($all_global_settings['general_settings']) ? $all_global_settings['general_settings'] : array();
$enable_tax = isset($general_settings['enable_tax']) ? $general_settings['enable_tax'] : 0;
$arm_extra_vars = array();
$arm_extra_vars['manual_by'] = esc_html__('Paid By admin', 'ARMember');
$plan_cycle_data_amount = $plan_amount;
if(1 == $enable_tax) {
$tax_percentage = 0;
$tax_type = isset($general_settings['tax_type']) ? $general_settings['tax_type'] : '';
$country_tax_field = isset($general_settings['country_tax_field']) ? $general_settings['country_tax_field'] : '';
if('common_tax' == $tax_type) {
$tax_percentage = $general_settings['tax_amount'];
} else if('country_tax' == $tax_type) {
$country_tax_arr = (!empty($general_settings['arm_tax_country_name'])) ? maybe_unserialize($general_settings['arm_tax_country_name']) : array();
$country_tax_val_arr = (!empty($general_settings['arm_country_tax_val'])) ? maybe_unserialize($general_settings['arm_country_tax_val']) : array();
$country_default_tax = (!empty($general_settings['arm_country_tax_default_val'])) ? $general_settings['arm_country_tax_default_val'] : 0;
$member_data_country = isset($member_data['country']) ? $member_data['country'] : 0;
if(!empty($member_data_country) && in_array($member_data_country, $country_tax_arr)) {
$opt_index = array_search($member_data_country, $country_tax_arr);
$tax_percentage = $country_tax_val_arr[$opt_index];
} else {
$tax_percentage = $country_default_tax;
}
}
if($tax_percentage > 0){
$tax_amount = ($plan_amount * $tax_percentage) / 100;
$tax_amount = number_format((float)$tax_amount, $arm_currency_decimal, '.', '');
$arm_extra_vars['plan_amount'] = number_format((float)$plan_amount,$arm_currency_decimal);
$plan_cycle_data_amount = $plan_amount + $tax_amount;
$arm_extra_vars['paid_amount'] = number_format((float)$plan_cycle_data_amount,$arm_currency_decimal);
}
if($tax_percentage > 0){
if( empty($tax_display_type))
{
$tax_amount = ($plan_amount * $tax_percentage) / 100;
$tax_amount = number_format((float)$tax_amount, $arm_currency_decimal, '.', '');
$arm_extra_vars['plan_amount'] = number_format((float)$plan_cycle_data_amount,$arm_currency_decimal, '.', '');
$plan_cycle_data_amount = $plan_amount + $tax_amount;
}
else
{
$tax_amount = $plan_amount - ($plan_amount / ( ( $tax_percentage /100 ) + 1)) ;
}
$arm_extra_vars['paid_amount'] = number_format((float)$plan_amount,$arm_currency_decimal, '.', '');
}
$arm_extra_vars['tax_amount'] = number_format((float)$tax_amount,$arm_currency_decimal);
$arm_extra_vars['tax_percentage'] = number_format((float)$tax_percentage,$arm_currency_decimal);
}
$payment_type = 'subscription';
$transaction_status = 'completed';
$payment_mode = 'manual_subscription';
if(isset($member_data['payment_type']) && "manual" == $member_data['payment_type']){
$payment_type = 'one_time';
$transaction_status = 'success';
$payment_mode = '';
}
//$planData = get_user_meta($user_id, 'arm_user_plan_' . $plan_id, true);
$return_array = array();
$return_array['arm_user_id'] = $user_id;
$return_array['arm_plan_id'] = $plan_id;
$return_array['arm_first_name'] = isset($member_data['first_name']) ? $member_data['first_name'] : '';
$return_array['arm_last_name'] = isset($member_data['last_name']) ? $member_data['last_name'] : '';
$return_array['arm_payment_gateway'] = 'manual';
$return_array['arm_payment_type'] = $payment_type;
$return_array['arm_token'] = '-';
$return_array['arm_payer_email'] = '';
$return_array['arm_receiver_email'] = '';
$return_array['arm_transaction_id'] = '-';
$return_array['arm_transaction_payment_type'] = $payment_type;
$return_array['arm_transaction_status'] = $transaction_status;
$return_array['arm_payment_mode'] = 'manual_subscription';
$return_array['arm_payment_date'] = current_time( 'mysql' );
$return_array['arm_amount'] = $plan_cycle_data_amount;
$return_array['arm_currency'] = $currency;
$return_array['arm_coupon_code'] = '';
$return_array['arm_extra_vars'] = maybe_serialize($arm_extra_vars);
$return_array['arm_created_date'] = current_time('mysql');
$payment_log_id = $arm_payment_gateways->arm_save_payment_log($return_array);
}
function arm_get_failed_login_users() {
global $wp, $wpdb, $ARMember, $arm_global_settings;
$user_table = $wpdb->users;
$historyRecords = $wpdb->get_results("SELECT u.ID, u.user_login, l.arm_user_id FROM `{$user_table}` u RIGHT JOIN `" . $ARMember->tbl_arm_fail_attempts . "` l ON u.ID = l.arm_user_id group by u.ID ORDER BY u.ID DESC", ARRAY_A);//phpcs:ignore --Reason $user_table and $ARMember->tbl_arm_fail_attempts are table names. No need to prepare there is no where clause in query
if (!empty($historyRecords)) {
return $historyRecords;
}
}
function arm_get_failed_login_attempts_history($current_page = 1, $perPage = 10) {
global $wp, $wpdb, $ARMember, $arm_global_settings;
$user_table = $wpdb->users;
$historyHtml = '';
$perPage = (!empty($perPage) && is_numeric($perPage)) ? $perPage : 10;
$offset = 0;
$wp_date_time_format = $arm_global_settings->arm_get_wp_date_time_format();
if (!empty($current_page) && $current_page > 1) {
$offset = ($current_page - 1) * $perPage;
}
$historyLimit = (!empty($perPage)) ? " LIMIT $offset, $perPage " : "";
$totalRecord = $wpdb->get_var("SELECT COUNT(`arm_fail_attempts_ip`) FROM `" . $ARMember->tbl_arm_fail_attempts . "`"); //phpcs:ignore --Reason $ARMember->tbl_arm_fail_attempts is a table name. No need to Prepare bcz no WHERE Clause in Query
$historyRecords = $wpdb->get_results("SELECT u.user_login, l.arm_user_id, l.arm_fail_attempts_ip, l.arm_fail_attempts_datetime FROM `{$user_table}` u RIGHT JOIN `" . $ARMember->tbl_arm_fail_attempts . "` l ON u.ID = l.arm_user_id ORDER BY l.arm_fail_attempts_datetime DESC {$historyLimit}", ARRAY_A); //phpcs:ignore --Reason $ARMember->tbl_arm_fail_attempts is a table name. No need to Prepare bcz no WHERE Clause in Query
$historyHtml .= '<div class="popup_content_text arm_failed_login_history_table arm_failed_attempt_loginhistory_wrapper arm_padding_top_32 arm_padding_left_32 arm_padding_right_32">';
$historyHtml .= '<table class="arm_failed_login_history_table arm_margin_0" width="100%" >';
$historyHtml .= '<tr class="arm_user_plan_row odd">';
$historyHtml .= '<td class="arm_username">' . esc_html__('Username', 'ARMember') . '</td>';
$historyHtml .= '<td class="arm_logged_date">' . esc_html__('Logged In Date', 'ARMember') . '</td>';
$historyHtml .= '<td class="arm_logged_ip">' . esc_html__('Logged In IP', 'ARMember') . '</td>';
$historyHtml .= '</tr>';
if (!empty($historyRecords)) {
$i = 0;
foreach ($historyRecords as $mh) {
$i++;
$arm_failed_attempt_user_login = ($mh['user_login'] != '') ? $mh['user_login'] : '-';
$arm_failed_attempt_login_date = date_create($mh['arm_fail_attempts_datetime']);
$historyHtml .= '<tr class="arm_failed_login_history_data all_user_login_history_tr ">';
$historyHtml .= '<td class="arm_username">' . esc_html($arm_failed_attempt_user_login) . '</td>';
$historyHtml .= '<td class="arm_logged_date">' . esc_html(date_i18n($wp_date_time_format, strtotime($mh['arm_fail_attempts_datetime']))). '</td>';
$historyHtml .= '<td class="arm_logged_ip">' . $mh['arm_fail_attempts_ip'] . '</td>';
$historyHtml .= '</tr>';
}
} else {
$historyHtml .= '<tr class="arm_failed_login_history_data">';
$historyHtml .= '<td colspan="6" class="arm_text_align_center">' . esc_html__('No Failed Attempt Login History Found.', 'ARMember') . '</td>';
$historyHtml .= '</tr>';
}
$historyHtml .= '</table>';
$historyHtml .= '<div class="arm_failed_attempt_loginhistory_pagination_block arm_padding_left_0 arm_padding_right_0 arm_padding_bottom_0">';
$historyPaging = $arm_global_settings->arm_get_paging_links($current_page, $totalRecord, $perPage, '');
$historyHtml .= '<div class="arm_failed_attempt_loginhistory_paging_container">' . $historyPaging . '</div>'; //phpcs:ignore
$historyHtml .= '</div>';
$historyHtml .= '</div>';
return $historyHtml;
}
function arm_failed_attempt_login_history_paging_action() {
global $wp, $wpdb, $ARMember, $arm_global_settings, $arm_payment_gateways, $arm_capabilities_global,$arm_ajax_pattern_start,$arm_ajax_pattern_end;
if (isset($_POST['action']) && $_POST['action'] == 'arm_failed_attempt_login_history_paging_action') { //phpcs:ignore
$current_page = isset($_POST['page']) ? intval( $_POST['page'] ) : 1; //phpcs:ignore
$per_page = isset($_POST['per_page']) ? intval( $_POST['per_page'] ) : 10; //phpcs:ignore
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_manage_block_settings'], '1',1); //phpcs:ignore --Reason:Verifying nonce
echo $arm_ajax_pattern_start.''.$this->arm_get_failed_login_attempts_history($current_page, $per_page).''.$arm_ajax_pattern_end; //phpcs:ignore
}
exit;
}
function get_arm_member_list_func(){
if(isset($_REQUEST['action']) && $_REQUEST['action']=='get_arm_member_list') {
$text = sanitize_text_field($_REQUEST['txt']); //phpcs:ignore
$type = !empty($_REQUEST['type'])? intval($_REQUEST['type']):0;
$arm_display_admin_user=!empty($_REQUEST['arm_display_admin_user']) ? intval($_REQUEST['arm_display_admin_user']) : 0;
global $wp, $wpdb, $arm_errors, $ARMember, $arm_members_class, $arm_member_forms, $arm_global_settings;
$ARMember->arm_check_user_cap('',0,1);
$user_table = $wpdb->users;
$usermeta_table = $wpdb->usermeta;
$capability_column = $wpdb->get_blog_prefix($GLOBALS['blog_id']) . 'capabilities';
if($arm_display_admin_user==1){
$super_admin_ids = array();
if (is_multisite()) {
$super_admin = get_super_admins();
if (!empty($super_admin)) {
foreach ($super_admin as $skey => $sadmin) {
if ($sadmin != '') {
$user_obj = get_user_by('login', $sadmin);
if ($user_obj->ID != '') {
$super_admin_ids[] = $user_obj->ID;
}
}
}
}
}
}
$user_where = " WHERE ";
$user_where .= " (user_login LIKE '".$text."%' OR `user_email` LIKE '".$text."%')";
if($arm_display_admin_user==1){
if (!empty($super_admin_ids)) {
$super_admin_placeholders = 'AND u.ID NOT IN (';
$super_admin_placeholders .= rtrim( str_repeat( '%s,', count( $super_admin_ids ) ), ',' );
$super_admin_placeholders .= ')';
array_unshift( $super_admin_ids, $super_admin_placeholders );
// $user_where .= ' AND u.ID NOT IN (' . implode( ',', $super_admin_ids ) . ')';
$user_where .= call_user_func_array(array( $wpdb, 'prepare' ), $super_admin_ids );
}
}
$admin_user_where = $wpdb->prepare(" um.meta_key = %s AND um.meta_value LIKE %s ",$capability_column,"%administrator%");
$row = $wpdb->get_results( "SELECT u.ID FROM `".$user_table."` u LEFT JOIN `".$usermeta_table."` um ON um.user_id = u.ID WHERE ".$admin_user_where." GROUP BY u.ID" );//phpcs:ignore --Reason $user_table and $usermeta_table are table name
$admin_users = array();
if ( ! empty( $row ) ) {
foreach ( $row as $key => $admin ) {
array_push( $admin_users, $admin->ID );
}
}
$admin_users = array_unique( $admin_users );
// $admin_users = implode( ',', $admin_users );
$admin_placeholders = ' AND u.ID NOT IN (';
$admin_placeholders .= rtrim( str_repeat( '%s,', count( $admin_users ) ), ',' );
$admin_placeholders .= ')';
// $admin_users = implode( ',', $admin_users );
array_unshift( $admin_users, $admin_placeholders );
$user_where .= call_user_func_array(array( $wpdb, 'prepare' ), $admin_users );
$user_join = "";
if (!empty($type) && in_array($type, array(1, 2, 3))) {
$user_join = " INNER JOIN {$ARMember->tbl_arm_members} arm1 ON u.ID = arm1.arm_user_id";
$user_where .= $wpdb->prepare(" AND arm1.arm_primary_status=%s ",$type);
}
$user_fields = "u.ID,u.user_email,u.user_registered,u.user_login";
$user_group_by = " GROUP BY u.ID ";
$user_order_by = " ORDER BY u.user_registered DESC limit 0,10";
$user_query = "SELECT {$user_fields} FROM `{$user_table}` u LEFT JOIN `{$usermeta_table}` um ON u.ID = um.user_id {$user_join} {$user_where} {$user_group_by} {$user_order_by} ";
$users_details = $wpdb->get_results($user_query); //phpcs:ignore --Reason $user_query is a prepared Query
$all_members = $users_details;
$user_list_html = "";
$drData = array();
if(!empty($all_members)) {
foreach ( $all_members as $user ) {
$user_list_html .= '<li data-id="'.esc_attr($user->ID).'">' . $user->user_login . '</li>';
$drData[] = array(
'id' => $user->ID,
'value' => $user->user_login,
'label' => $user->user_login . ' ('.$user->user_email.')',
);
}
$response = array('status' => 'success', 'data' => $drData);
}
else{
$user_list_msg= esc_html__('No Such user was found','ARMember') ;
$response = array('status' => 'error', 'msg' => $user_list_msg);
}
echo arm_pattern_json_encode($response);
die;
}
}
function arm_member_view_paid_plan_detail()
{
global $arm_ajax_pattern_end,$arm_ajax_pattern_start;
$user_id = intval($_REQUEST['member_id']); //phpcs:ignore
$response = array('type'=>'error','msg'=>esc_html__('Something went Wrong! Please try again','ARMember'));
if (!empty($user_id) && $user_id != 0) {
global $arm_global_settings, $ARMember, $arm_capabilities_global, $arm_pay_per_post_feature;
$arm_common_date_format = $arm_global_settings->arm_check_common_date_format(get_option('date_format'));
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_manage_pay_per_post'], '1',1);
$date_format = $arm_global_settings->arm_get_wp_date_format();
$user_name = '';
$arm_user_info = get_userdata($user_id);
$user_name = $arm_user_info->user_login;
$u_roles = $arm_user_info->roles;
global $arm_global_settings, $arm_subscription_plans, $is_multiple_membership_feature;
$return = '';
if (!empty($user_id)) {
$response['type'] = 'success';
$response['username'] = $user_name;
$return .= '<div>';
$return .= '<div>';
$member_paid_post_plans = $arm_pay_per_post_feature->arm_get_paid_post_modal_plans($user_id, 1, 5);
$return .= $member_paid_post_plans;
$return .= '</div></div>';
$bulk_member_change_plan_popup_content = '<span class="arm_confirm_text">' . esc_html__("Are you sure you want to remove this plan from this user??", 'ARMember') . '</span>';
$bulk_member_change_plan_popup_content .= '<input type="hidden" value="false" id="bulk_change_plan_flag"/>';
$bulk_member_change_plan_popup_arg = array(
'id' => 'change_plan_bulk_message',
'class' => 'change_plan_bulk_message',
'title' => esc_html__('Change Plan', 'ARMember'),
'content' => $bulk_member_change_plan_popup_content,
'button_id' => 'arm_bulk_member_change_plan_ok_btn',
'button_onclick' => "apply_member_bulk_action('bulk_change_plan_flag');",
);
$return .= $arm_global_settings->arm_get_bpopup_html($bulk_member_change_plan_popup_arg);
$response['html'] = $return;
}
}
echo arm_pattern_json_encode($response);
die;
}
function arm_member_view_detail_func() {
$member_id = !empty($_REQUEST['member_id']) ? intval($_REQUEST['member_id']) : '';//phpcs:ignore
if (!empty($member_id) && $member_id != 0) {
global $arm_slugs, $ARMember, $arm_capabilities_global,$arm_ajax_pattern_start,$arm_ajax_pattern_end;
/*$view_type = (!empty($_REQUEST['view_type']) && $_REQUEST['view_type'] == 'popup') ? 'popup' : ''; //phpcs:ignore
$link_param = "";
if($view_type == 'popup') {
$link_param = "&view_type=popup";
}*/
$ARMember->arm_check_user_cap($arm_capabilities_global['arm_manage_members'], '1',1);
//$view_link = admin_url('admin.php?page=' . $arm_slugs->manage_members . '&action=view_member&id=' . $member_id.$link_param);
$member_view_data = '';
$member_view_data = apply_filters('arm_members_view_profile_data',$member_view_data,$member_id);
$response = $member_view_data;
$resonse_data = array('status'=>'success','response_data'=>$response);
echo arm_pattern_json_encode($resonse_data);
die;
}
}
function arm_gateway_cancel_subscription_data($arm_cancel_data = array(), $user_id = 0, $plan_id = 0, $arm_payment_gateway = "", $arm_subscription_id_field_name = "", $arm_transaction_id_field_name = "", $arm_customer_id_field_name = ""){
global $wpdb, $ARMember, $arm_global_settings, $arm_subscription_plans, $arm_member_forms, $arm_payment_gateways, $arm_manage_communication, $arm_subscription_cancel_msg;
if(!empty($user_id) && !empty($plan_id) && !empty($arm_payment_gateway)){
$all_payment_gateways = $arm_payment_gateways->arm_get_active_payment_gateways();
if(!empty($all_payment_gateways[$arm_payment_gateway])){
$defaultPlanData = $arm_subscription_plans->arm_default_plan_array();
$userPlanDatameta = get_user_meta($user_id, 'arm_user_plan_' . $plan_id, true);
$planData = !empty($userPlanDatameta) ? $userPlanDatameta : array();
//$planData = shortcode_atts($defaultPlanData, $userPlanDatameta);
$user_payment_gateway = !empty($planData['arm_user_gateway']) ? $planData['arm_user_gateway'] : '';
if(strtolower($user_payment_gateway) == $arm_payment_gateway){
$user_payment_gateway_data = !empty($planData['arm_'.$arm_payment_gateway]) ? $planData['arm_'.$arm_payment_gateway] : array();
$arm_payment_mode = $planData['arm_payment_mode'];
$arm_plan_details = $planData['arm_current_plan_detail'];
if(!empty($arm_plan_details)){
$plan = new ARM_Plan(0);
$plan->init((object) $arm_plan_details);
}else{
$plan = new ARM_Plan($plan_id);
}
$arm_payment_cycle = $planData['arm_payment_cycle'];
$recurring_data = $plan->prepare_recurring_data($arm_payment_cycle);
$amount = isset($recurring_data['amount']) ? $recurring_data['amount'] : 0;
$arm_customer_id = $arm_subscr_id = $arm_transaction_id = "";
if(!empty($arm_customer_id_field_name)){
$arm_customer_id = isset($user_payment_gateway_data[$arm_customer_id_field_name]) ? $user_payment_gateway_data[$arm_customer_id_field_name] : '';
}
if(!empty($arm_subscription_id_field_name)){
$arm_subscr_id = isset($user_payment_gateway_data[$arm_subscription_id_field_name]) ? $user_payment_gateway_data[$arm_subscription_id_field_name] : '';
if(empty($arm_subscr_id))
{
$arm_subscription_id_field_name_old = str_replace('arm_', '', $arm_subscription_id_field_name);
$arm_subscr_id = isset($user_payment_gateway_data[$arm_subscription_id_field_name_old]) ? $user_payment_gateway_data[$arm_subscription_id_field_name_old] : '';
}
}
if(!empty($arm_transaction_id_field_name)){
$arm_transaction_id = isset($user_payment_gateway_data[$arm_transaction_id_field_name]) ? $user_payment_gateway_data[$arm_transaction_id_field_name] : '';
if(empty($arm_transaction_id))
{
$arm_transaction_id_field_name_old = str_replace('arm_', '', $arm_transaction_id_field_name);
$arm_transaction_id = isset($user_payment_gateway_data[$arm_transaction_id_field_name_old]) ? $user_payment_gateway_data[$arm_transaction_id_field_name_old] : '';
}
}
$arm_payment_gateway_options = $all_payment_gateways[$arm_payment_gateway];
$arm_payment_log_table = $ARMember->tbl_arm_payment_log;
$arm_transaction_payment_log_data = $wpdb->get_row($wpdb->prepare("SELECT * FROM `{$arm_payment_log_table}` WHERE arm_user_id = %d AND arm_plan_id = %d AND arm_payment_type = %s AND arm_payment_gateway = %s AND arm_token != %s AND arm_transaction_id != '' ORDER BY arm_created_date DESC LIMIT 0,1", $user_id, $plan_id, 'subscription', $arm_payment_gateway, '')); //phpcs:ignore --Reason $arm_payment_log_table is a table name
if(empty($arm_subscr_id))
{
$arm_subscr_id = !empty($arm_transaction_payment_log_data->arm_token) ? $arm_transaction_payment_log_data->arm_token : '';
}
$arm_cancel_data = array(
'user_id' => $user_id,
'plan_id' => $plan_id,
'arm_cancel_amount' => $amount,
'arm_plan_data' => $planData,
'payment_gateway_options' => $arm_payment_gateway_options,
'arm_payment_mode' => $arm_payment_mode,
'arm_subscr_id' => $arm_subscr_id,
'arm_customer_id' => $arm_customer_id,
'arm_transaction_id' => $arm_transaction_id,
'arm_payment_log_data' => $arm_transaction_payment_log_data
);
}
}
}
return $arm_cancel_data;
}
function arm_cancel_subscription_payment_log($user_id = 0, $plan_id = 0, $arm_payment_gateway = "", $arm_subscription_id = "", $arm_transaction_id = "", $arm_customer_id = "", $payment_mode = "manual_subscription", $arm_cancel_amount = 0, $arm_payer_email = ""){
global $wpdb, $ARMember, $arm_payment_gateways, $arm_manage_communication;
if(!empty($user_id) && !empty($plan_id)){
//Check plan cancel entry already exist or not.
$armCancelLogData = $wpdb->get_row( $wpdb->prepare("SELECT `arm_log_id` FROM `" . $ARMember->tbl_arm_payment_log . "` WHERE `arm_token`= %s AND arm_transaction_status = %s AND arm_user_id = %d AND arm_plan_id = %d ORDER BY `arm_log_id` DESC",$arm_subscription_id,'canceled',$user_id,$plan_id) ); //phpcs:ignore --Reason $ARMember->tbl_arm_payment_log is a table name
if(empty($armCancelLogData))
{
$user_detail = get_userdata($user_id);
$payer_email = !empty($arm_payer_email) ? $arm_payer_email : $user_detail->user_email;
$arm_manage_communication->arm_user_plan_status_action_mail(array('plan_id' => $plan_id, 'user_id' => $user_id, 'action' => 'on_cancel_subscription'));
$payment_data = array(
'arm_user_id' => $user_id,
'arm_first_name'=> $user_detail->first_name,
'arm_last_name'=> $user_detail->last_name,
'arm_plan_id' => $plan_id,
'arm_payment_gateway' => $arm_payment_gateway,
'arm_payment_type' => 'subscription',
'arm_token' => $arm_subscription_id,
'arm_payer_email' => $payer_email,
'arm_receiver_email' => '',
'arm_transaction_id' => $arm_transaction_id,
'arm_transaction_payment_type' => 'subscription',
'arm_payment_mode' => $payment_mode,
'arm_transaction_status' => 'canceled',
'arm_payment_date' => current_time('mysql'),
'arm_amount' => $arm_cancel_amount,
'arm_coupon_code' => '',
'arm_is_trial' => '0',
'arm_created_date' => current_time('mysql')
);
$payment_log_id = $arm_payment_gateways->arm_save_payment_log($payment_data);
}
}
}
function arm_members_view_profile_func($popup_content,$member_id)
{
$user_id = $member_id;
if (file_exists( MEMBERSHIPLITE_VIEWS_DIR . '/arm_view_member.php' ) ) {
require_once( MEMBERSHIPLITE_VIEWS_DIR . '/arm_view_member.php' );
}
return $popup_content;
}
}
}
global $arm_members_class;
$arm_members_class = new ARM_members();
if (!function_exists('arm_set_member_status')) {
/**
* Set Member Status
* @param int $user_id Member's ID
* @param int $primary_status `Active->1, Inactive->2, Pending->3`
* @param int $secondary_status `Admin->0, Account Closed->1, Suspended->2, Expired->3, User Cancelled->4, Payment Failed->5, Cancelled->6`
*
*/
function arm_set_member_status($user_id, $primary_status = 1, $secondary_status = 0) {
global $wp, $wpdb, $ARMember;
$primary_status = (!empty($primary_status)) ? $primary_status : 1;
$secondary_status = (!empty($secondary_status)) ? $secondary_status : 0;
if (!empty($user_id) && $user_id != 0) {
if ($primary_status == 3) {
$secondary_status = 0;
}
$updateStatusArgs = array(
'arm_primary_status' => $primary_status,
'arm_secondary_status' => $secondary_status,
);
$wpdb->update($ARMember->tbl_arm_members, $updateStatusArgs, array('arm_user_id' => $user_id));
if ($primary_status == 1) {
delete_user_meta($user_id, 'arm_user_activation_key');
}
update_user_meta($user_id, 'arm_primary_status', $primary_status);
update_user_meta($user_id, 'arm_secondary_status', $secondary_status);
}
return;
}
}
if (!function_exists('arm_get_member_status')) {
function arm_get_member_status($user_id, $type = "primary") {
global $wp, $wpdb, $ARMember;
$memberStatus = false;
$selectedColumn = 'arm_primary_status';
if ($type == 'secondary') {
$selectedColumn = 'arm_secondary_status';
}
if (!empty($user_id) && $user_id != 0) {
$statuses = $wpdb->get_row( $wpdb->prepare("SELECT `$selectedColumn` FROM `" . $ARMember->tbl_arm_members . "` WHERE `arm_user_id`=%d ",$user_id)); //phpcs:ignore --Reason $ARMember->tbl_arm_members is a table name
if ($statuses != null) {
if ($type == 'secondary' && isset($statuses->arm_secondary_status)) {
$memberStatus = $statuses->arm_secondary_status;
} else {
$memberStatus = $statuses->arm_primary_status;
}
}
}
return $memberStatus;
}
}
if (!function_exists('arm_get_all_member_status')) {
function arm_get_all_member_status($user_id) {
global $wp, $wpdb, $ARMember;
$memberStatus = array();
if (!empty($user_id) && $user_id != 0) {
$statuses = $wpdb->get_row( $wpdb->prepare("SELECT `arm_primary_status`, `arm_secondary_status` FROM `" . $ARMember->tbl_arm_members . "` WHERE `arm_user_id`=%d ",$user_id)); //phpcs:ignore --Reason $ARMember->tbl_arm_members is a table name
if ($statuses != null) {
$memberStatus['arm_primary_status'] = $statuses->arm_primary_status;
$memberStatus['arm_secondary_status'] = $statuses->arm_secondary_status;
}
}
return $memberStatus;
}
}
if (!function_exists('arm_is_member_active')) {
function arm_is_member_active($user_id) {
global $wp, $wpdb, $ARMember;
$memberStatus = arm_get_member_status($user_id);
if ($memberStatus == '1') {
return true;
}
return false;
}
}