'renouvellement' * */ set_account_valid_CIPF($user_id); update_card_date_expiration_CIPF($user_id); set_card_number_CIPF($user_id); set_card_renew_CIPF($user_id); reset_emails_reminders_choices_CIPF($user_id); send_emails_CIPF('transfert_success', $user_id); } /* * if card expire, makes some changes * */ function handle_card_expire_CIPF($user_id) { Plgntls::debug_infos(); if (false === isset_acf_card_expiration_CIPF($user_id)) { return; } if (is_card_date_expired_CIPF($user_id)) { if (is_account_waiting_transfert_CIPF($user_id)) { set_account_waiting_invalid_CIPF($user_id); } else { set_account_expired_CIPF($user_id); } send_emails_CIPF('account_expired', $user_id); } else { if (is_account_waiting_transfert_CIPF($user_id)) { set_account_waiting_valid_CIPF($user_id); } else { set_account_valid_CIPF($user_id); } reset_emails_reminders_deletion_account_CIPF($user_id); } } /* * this function will delete the account if the deletion date is expired * it is called both by e scheduled event, and every time a prof go on its page * */ function handle_prof_account_deletion_CIPF($user_id) { Plgntls::debug_infos(); /* * check if account still exists * */ if (false === get_user_by('id', $user_id)) { return; } /* * check if account should be deleted * */ if (!is_prof_account_deletion_date_exceeded_CIPF($user_id)) { return; } send_emails_CIPF('account_deleted', $user_id); include_once(ABSPATH.'wp-admin/includes/user.php'); wp_delete_user($user_id); } /* * this function will check if users should be sent an email * to remind them of their card expiration date * */ function handle_reminders_before_card_expire_CIPF($user_id) { Plgntls::debug_infos(); $emails_reminders = Cipf:: ACF_EMAILS_REMINDERS; if (!isset_acf_card_expiration_CIPF($user_id)) { return; } if (is_card_date_expired_CIPF($user_id)) { return; } $date_limit = get_card_date_expiration_CIPF($user_id); if (false === $date_limit) { return; } $is_before_reminders = true; $reminders_choices = get_emails_reminders_choices_CIPF($user_id); foreach ($reminders_choices as $reminder_key => $value) { $duration = get_duration_CIPF($reminder_key, 'card_expiration'); if (false === $duration) { continue; } $diff = compare_diff_with_today_CIPF($date_limit, $duration); if ($diff > 0) { continue; } $is_before_reminders = false; if (is_email_reminder_choice_CIPF($reminder_key, $user_id)) { continue; } set_email_reminder_choice_CIPF($reminder_key, $user_id); send_emails_CIPF('card_will_expire', $user_id); return; // don't send multiple emails } /* * if didnt return, it either means that : * - today is before any reminder * - today is after all reminders * use 'is_before_reminders' to know * */ if ($is_before_reminders) { reset_emails_reminders_expiration_card_CIPF($user_id); } } /* * this function will check if users should be sent an email * to remind them of their account beeing soon deleted * */ function handle_reminders_before_account_deleted_CIPF($user_id) { Plgntls::debug_infos(); $duration_deletion = Cipf::DURATION_ACCOUNT_DELETE_AFTER_EXPIRE; if (!isset_acf_card_expiration_CIPF($user_id)) { return; } if (!is_card_date_expired_CIPF($user_id)) { reset_emails_reminders_deletion_account_CIPF($user_id); return; } $date_limit = get_card_date_expiration_CIPF($user_id); if (false === $date_limit) { return; } $date_deletion = $date_limit->modify($duration_deletion); $is_before_reminders = true; /* * get the acf reminders, * - continue the ones not for account deletion * - continue if date is not yet soon enough * - continue if email was already sent * */ $reminders_choices = get_emails_reminders_choices_CIPF($user_id); foreach ($reminders_choices as $reminder_key => $value) { $duration = get_duration_CIPF($reminder_key, 'account_deletion'); if (false === $duration) { continue; } $diff = compare_diff_with_today_CIPF($date_deletion, $duration); if ($diff > 0) { continue; } $is_before_reminders = false; if (is_email_reminder_choice_CIPF($reminder_key, $user_id)) { continue; } /* unset_email_reminder_choice_CIPF($reminder_key, $user_id); */ set_email_reminder_choice_CIPF($reminder_key, $user_id); send_emails_CIPF('account_will_be_deleted', $user_id); return; // don't send multiple emails } /* * if didnt return, it either means that : * - today is before any reminder * - today is after all reminders * use 'is_before_reminders' to know * */ if ($is_before_reminders) { reset_emails_reminders_deletion_account_CIPF($user_id); } } /* * extract the duration * returns false if not for the right type * */ function get_duration_CIPF($reminder, $type) { Plgntls::debug_infos(); $explode_reminder = explode('/', $reminder); $explode_reminder = array_map('trim', $explode_reminder); if ($explode_reminder[0] !== $type) { return false; } $duration = $explode_reminder[1]; return $duration; } /* * find the diffs : * - the intended diff between the deletion date and the reminder * - the diff between the deletion date and today * and return the difference * */ function compare_diff_with_today_CIPF($date, $duration) { Plgntls::debug_infos(); $date_reminder = $date->modify($duration); $date_diff = date_diff($date, $date_reminder); $date_diff = (int)$date_diff->format('%R%a'); $date_now = date_create('now'); $current_date_diff = date_diff($date, $date_now); $current_date_diff = (int)$current_date_diff->format('%R%a'); return ($date_diff - $current_date_diff); } ?>