update acf field handling to centerize every call

This commit is contained in:
asus
2024-04-08 21:43:08 +02:00
parent 1e291d16ba
commit 4c0e4c001f
12 changed files with 538 additions and 126 deletions

View File

@@ -40,7 +40,7 @@ include_once(Plgntls::root_path() . 'php/partners_register.php');
include_once(Plgntls::root_path() . 'php/partners_page.php');
include_once(Plgntls::root_path() . 'php/partners_form.php');
// utils
include_once(Plgntls::root_path() . 'php/_utils_states.php');
include_once(Plgntls::root_path() . 'php/_utils_acf_fields.php');
include_once(Plgntls::root_path() . 'php/_utils_redirections.php');
include_once(Plgntls::root_path() . 'php/_utils_display_css.php');
include_once(Plgntls::root_path() . 'php/_utils_checks_roles.php');
@@ -81,6 +81,7 @@ class Cipf {
const ACF_ACCOUNT_STATE = ['_name'=>'etat_compte', 'new'=>'nouveau prof', 'to_pay'=>'doit payer', 'valid'=>'carte valide', 'waiting_invalid'=>'en attente invalide', 'waiting_valid'=>'en attente valide', 'expired'=>'carte expiree'];
const ACF_TRANSFERT_STATE = ['_name'=>'etat_virement', 'success'=>'virement validé'];
const ACF_PAGE_STATE = ['_name'=>'etat_page_partenaire', 'publish'=>'Publiee', 'draft'=>'Brouillon'];
const ACF_CARD_ORDER_ID = ['_name'=>'order_id'];
// META
const META_PAYEMENT_STATUS = 'cipf_payement_status';
@@ -129,6 +130,15 @@ class Cipf {
// SHORTCODES
// SCHEDULED EVENTS
const DURATION_OLD_ORDER_ID = '3 days';
const DURATION_ACCOUNT_DELETE_AFTER_EXPIRE = '6 months';
const DURATION_REMINDER_BEFORE_ACCOUNT_EXPIRE_FIRST = '1 month';
const DURATION_REMINDER_BEFORE_ACCOUNT_EXPIRE_LAST = '7 days';
const DURATION_REMINDER_BEFORE_ACCOUNT_DELETE_FIRST = '1 month';
const DURATION_REMINDER_BEFORE_ACCOUNT_DELETE_LAST = '7 days';
const DURATION_REMINDER_BEFORE_OFFER_EXPIRE = '7 days';
// OPTIONS
const OPTION_PAYPAL = [
'_name'=>'cipf_paypal_credentials',

View File

@@ -33,33 +33,15 @@ if (!defined('ABSPATH')) {
/*
* events and emails :
*
* - payments : : suppress old order_ids
* - partners : email : offres temporaires -> gerer qu'elles disparaissent apres la date de validite -> la passer en masquer
* - partners : email : la gestion des offres à échéance
* - payments : email : schedule event pour supprimer le compte xx temps (6 mois ?) apres fin de validite de la carte
* - payments : email : schedule event pour supprimer les codes
* - payments : email : schedule event pour desactiver la carte
* - payments : email : faire rappels emails
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
* 1. [/] payments : TIME_OLD_ORDER_ID - suppress old order_ids
* 2. [ ] prof (email) : TIME_ACCOUNT_DELETE_AFTER_EXPIRE - schedule event to suppress the account xx time (6 month ?) after end of validity of the card, and supress the codes
* 3. [ ] prof (email) : - schedule event to deactivate the card
* 4. [ ] prof (email) : TIME_REMINDER_BEFORE_ACCOUNT_EXPIRE_FIRST - send emails reminder before account deactivate
* 5. [ ] prof (email) : TIME_REMINDER_BEFORE_ACCOUNT_EXPIRE_LAST - send emails reminder before account deactivate
* 6. [ ] prof (email) : TIME_REMINDER_BEFORE_ACCOUNT_DELETE_FIRST - send emails reminder before account delete
* 7. [ ] prof (email) : TIME_REMINDER_BEFORE_ACCOUNT_DELETE_LAST - send emails reminder before account delete
* 8. [ ] partner (email) : TIME_REMINDER_BEFORE_OFFER_EXPIRE - send emails reminder before offer ends
* 9. [ ] partners (email) : - temp offers -> make them disappeay after end card validity -> put them in hidden
*
*/
@@ -67,7 +49,7 @@ if (!defined('ABSPATH')) {
/*
* add a schedule event to delete this order_id
* 1. prof, add a schedule event to delete this order_id
* after 3 days ?
*
*/
@@ -85,6 +67,135 @@ add_action('orderid_deletion_event_CIPF', 'delete_order_id_later_CIPF', 10, 2);
/*
* 2. prof, suppress account XX time after expiration, also email
*
*/
function schedule_prof_account_suppression_CIPF($user_id) {
Plgntls::debug_infos();
$duration_deletion = Cipf::DURATION_ACCOUNT_DELETE_AFTER_EXPIRE;
$date_limit = get_date_limit_CIPF($user_id);
$time_limit = $date_limit->getTimestamp();
//$date_interval = date_interval_create_from_date_string($duration_deletion);
//$date_deletion = $date_limit->add($date_interval);
$date_deletion = $date_limit->modify('+'.$duration_deletion);
$time_deletion = $date_deletion->getTimestamp();
//error_log("duration_deletion: " . json_encode($duration_deletion));
//error_log("date_limit : " . json_encode($date_limit));
//error_log("time_limit : " . json_encode($time_limit));
////error_log("date_interval: " . json_encode($date_interval));
//error_log("date_deletion: " . json_encode($date_deletion));
//error_log("time_deletion: " . json_encode($time_deletion));
/*
duration_deletion: "6 months"
date_limit : {"date":"2094-09-19 15:33:35.000000","timezone_type":3,"timezone":"UTC"}
time_limit : 3919851215
date_deletion: {"date":"2094-09-19 15:33:35.000000","timezone_type":3,"timezone":"UTC"}
time_deletion: 3935748815
duration_deletion: "6 months"
date_limit : {"date":"2094-09-19 15:32:03.000000","timezone_type":3,"timezone":"UTC"}
time_limit : 3919851123
date_deletion: {"date":"2094-09-19 15:32:03.000000","timezone_type":3,"timezone":"UTC"}
time_deletion: 3935748723
*/
//$delay = strtotime('+3 days');
// wp_schedule_single_event($delay, 'scedule_event_CIPF', array($user_id));
}
//function event_CIPF($user_id) {
// Plgntls::debug_infos();
//}
//add_action('schedule_event_CIPF', 'event_CIPF', 10, 2);
/*
* 3. prof, deactivate card at expiration time, also email
*
function schedule__CIPF($user_id) {
Plgntls::debug_infos();
$delay = strtotime('+3 days');
wp_schedule_single_event($delay, 'scedule_event_CIPF', array($user_id));
}
function event_CIPF($user_id) {
Plgntls::debug_infos();
}
add_action('schedule_event_CIPF', 'event_CIPF', 10, 2);
*/
/*
* 4. && 5. prof, send email reminder before account expire
*
function schedule__CIPF($user_id) {
Plgntls::debug_infos();
$delay = strtotime('+3 days');
wp_schedule_single_event($delay, 'scedule_event_CIPF', array($user_id));
}
function event_CIPF($user_id) {
Plgntls::debug_infos();
}
add_action('schedule_event_CIPF', 'event_CIPF', 10, 2);
*/
/*
* 6. && 7. prof, send email reminder account deletion
*
function schedule__CIPF($user_id) {
Plgntls::debug_infos();
$delay = strtotime('+3 days');
wp_schedule_single_event($delay, 'scedule_event_CIPF', array($user_id));
}
function event_CIPF($user_id) {
Plgntls::debug_infos();
}
add_action('schedule_event_CIPF', 'event_CIPF', 10, 2);
*/
/*
* 8. partner, send email before offer expire
*
function schedule__CIPF($user_id) {
Plgntls::debug_infos();
$delay = strtotime('+3 days');
wp_schedule_single_event($delay, 'scedule_event_CIPF', array($user_id));
}
function event_CIPF($user_id) {
Plgntls::debug_infos();
}
add_action('schedule_event_CIPF', 'event_CIPF', 10, 2);
*/
/*
* 9. partner, handle offer expire, also sens email
*
function schedule__CIPF($user_id) {
Plgntls::debug_infos();
$delay = strtotime('+3 days');
wp_schedule_single_event($delay, 'scedule_event_CIPF', array($user_id));
}
function event_CIPF($user_id) {
Plgntls::debug_infos();
}
add_action('schedule_event_CIPF', 'event_CIPF', 10, 2);
*/

View File

@@ -42,6 +42,8 @@ if (!defined('ABSPATH')) {
*
* [/] cgv
*
* [/] order_id
*
*
*/
@@ -83,7 +85,7 @@ function get_field_init_CIPF($acf_field_name, $acf_id) {
* global 'setter' and 'izzer' for this file
*
*/
function is_acf_state_CIPF($acf_field, $state_name, $acf_id) {
function is_acf_field_CIPF($acf_field, $acf_value, $acf_id) {
Plgntls::debug_infos();
/*
@@ -101,14 +103,49 @@ function is_acf_state_CIPF($acf_field, $state_name, $acf_id) {
*/
$acf_state = get_field_init_CIPF($acf_field['_name'], $acf_id);;
if ($acf_state === $acf_field[$state_name]) {
if ($acf_state === $acf_field[$acf_value]) {
return true;
}
return false;
}
function set_acf_state_CIPF($acf_field, $state_name, $acf_id) {
/*
* some values are predefined in the plugin class for acf fields
*
*/
function is_predefined_acf_state($acf_field, $acf_value) {
Plgntls::debug_infos();
update_field($acf_field['_name'], $acf_field[$state_name], $acf_id);
if (empty($acf_value)) {
return false;
}
if (!is_string($acf_value)) {
return false;
}
if(isset($acf_field[$acf_value])) {
return true;
}
return false;
}
function set_acf_field_CIPF($acf_field, $acf_value, $acf_id) {
Plgntls::debug_infos();
/*
* if acf_value is the name of a key in const acf_field,
* then we want to get its value from there,
* otherwise we just use it's value directly
*
*/
if (is_predefined_acf_state($acf_field, $acf_value)) {
$value = $acf_field[$acf_value];
}
else {
$value = $acf_value;
}
error_log("acf_field: " . json_encode($acf_field));
update_field($acf_field['_name'], $value, $acf_id);
}
function get_acf_field_CIPF($acf_field, $state_name, $acf_id) {
Plgntls::debug_infos();
return get_field_init_CIPF($acf_field, $acf_id);
}
@@ -136,7 +173,7 @@ function is_account_state_CIPF($state_name, $user_id = null) {
$user_id = get_current_user_id();
}
$acf_id = 'user_'.$user_id;
return is_acf_state_CIPF($acf_account_state, $state_name, $acf_id);
return is_acf_field_CIPF($acf_account_state, $state_name, $acf_id);
}
function is_account_new_CIPF($user_id = null) {
Plgntls::debug_infos();
@@ -183,7 +220,7 @@ function set_account_state_CIPF($state_name, $user_id = null) {
$user_id = get_current_user_id();
}
$acf_id = 'user_'.$user_id;
set_acf_state_CIPF($acf_account_state, $state_name, $acf_id);
set_acf_field_CIPF($acf_account_state, $state_name, $acf_id);
}
function set_account_new_CIPF($user_id = null) {
Plgntls::debug_infos();
@@ -228,7 +265,7 @@ function is_card_state_CIPF($state, $user_id = null) {
$user_id = get_current_user_id();
}
$acf_id = 'user_'.$user_id;
return is_acf_state_CIPF($acf_card_state, $state, $acf_id);
return is_acf_field_CIPF($acf_card_state, $state, $acf_id);
}
function is_card_new_CIPF($user_id = null) {
Plgntls::debug_infos();
@@ -248,7 +285,7 @@ function set_card_state_CIPF($state, $user_id = null) {
$user_id = get_current_user_id();
}
$acf_id = 'user_'.$user_id;
set_acf_state_CIPF($acf_card_state, $state, $acf_id);
set_acf_field_CIPF($acf_card_state, $state, $acf_id);
}
function set_card_new_CIPF($user_id = null) {
Plgntls::debug_infos();
@@ -277,7 +314,7 @@ function is_page_state_CIPF($state, $post_id = null) {
$post_id = get_the_ID();
}
$acf_id = $post_id;
return is_acf_state_CIPF($acf_page_state, $state, $acf_id);
return is_acf_field_CIPF($acf_page_state, $state, $acf_id);
}
function is_page_publish_CIPF($post_id = null) {
Plgntls::debug_infos();
@@ -297,7 +334,7 @@ function set_page_state_CIPF($state, $post_id = null) {
$post_id = get_the_ID();
}
$acf_id = $post_id;
set_acf_state_CIPF($acf_page_state, $state, $acf_id);
set_acf_field_CIPF($acf_page_state, $state, $acf_id);
}
function set_page_publish_CIPF($post_id = null) {
Plgntls::debug_infos();
@@ -326,7 +363,7 @@ function is_card_method_CIPF($state, $user_id = null) {
$user_id = get_current_user_id();
}
$acf_id = 'user_'.$user_id;
return is_acf_state_CIPF($acf_card_payment_method, $state, $acf_id);
return is_acf_field_CIPF($acf_card_payment_method, $state, $acf_id);
}
function is_payment_method_paypal_CIPF($user_id = null) {
Plgntls::debug_infos();
@@ -359,7 +396,7 @@ function is_payment_state_CIPF($type, $user_id = null) {
$user_id = get_current_user_id();
}
$acf_id = 'user_'.$user_id;
return is_acf_state_CIPF($acf_card_payment_state, $type, $acf_id);
return is_acf_field_CIPF($acf_card_payment_state, $type, $acf_id);
}
function is_payment_started_CIPF($user_id = null) {
Plgntls::debug_infos();
@@ -387,7 +424,7 @@ function set_payment_state_CIPF($type, $user_id = null) {
$user_id = get_current_user_id();
}
$acf_id = 'user_'.$user_id;
set_acf_state_CIPF($acf_card_payment_state, $type, $acf_id);
set_acf_field_CIPF($acf_card_payment_state, $type, $acf_id);
}
function set_payment_started_CIPF($user_id = null) {
Plgntls::debug_infos();
@@ -425,7 +462,7 @@ function set_card_number_CIPF($user_id = null) {
$date_now = date_create('today');
$card_id = $date_now->format('Ymd') . $user_id;
update_field($acf_card_number['_name'], $card_id, $acf_id);
set_acf_field_CIPF($acf_card_number, $card_id, $acf_id);
}
@@ -444,7 +481,46 @@ function reset_acf_cgv_CIPF($user_id = null) {
$user_id = get_current_user_id();
}
$acf_id = 'user_'.$user_id;
update_field($acf_cgv['_name'], array(""), $acf_id);
set_acf_field_CIPF($acf_cgv, array(""), $acf_id);
}
/*
* order_id
*
*/
function reset_acf_order_id_CIPF($user_id = null) {
Plgntls::debug_infos();
$acf_order_id = Cipf::ACF_CARD_ORDER_ID;
if (is_null($user_id)) {
$user_id = get_current_user_id();
}
$acf_id = 'user_'.$user_id;
set_acf_field_CIPF($acf_order_id, "", $acf_id);
}
function get_acf_order_id_CIPF($user_id = null) {
Plgntls::debug_infos();
$acf_order_id = Cipf::ACF_CARD_ORDER_ID;
if (is_null($user_id)) {
$user_id = get_current_user_id();
}
$acf_id = 'user_'.$user_id;
return get_acf_field_CIPF($acf_order_id, $acf_id);
}
function set_acf_order_id_CIPF($order_id, $user_id = null) {
Plgntls::debug_infos();
$acf_order_id = Cipf::ACF_CARD_ORDER_ID;
if (is_null($user_id)) {
$user_id = get_current_user_id();
}
$acf_id = 'user_'.$user_id;
set_acf_field_CIPF($acf_order_id, $order_id, $acf_id);
}
@@ -463,6 +539,7 @@ function is_transfert_success_CIPF($user_id = null) {
$user_id = get_current_user_id();
}
$acf_id = 'user_'.$user_id;
// we dont use the utility function 'get_acf_field_CIPF()' because we want to know if it was never init. Do we ?
$transfert_state = get_field($acf_transfert_state['_name'], $acf_id);
@@ -489,7 +566,7 @@ function reset_acf_transfert_CIPF($user_id = null) {
$user_id = get_current_user_id();
}
$acf_id = 'user_'.$user_id;
update_field($acf_transfert_state['_name'], array(""), $acf_id);
set_acf_field_CIPF($acf_transfert_state, array(""), $acf_id);
}

View File

@@ -226,7 +226,7 @@ function toggle_partner_page_CIPF() {
}
add_action('template_redirect', 'toggle_partner_page_CIPF');
add_action('template_redirect', 'toggle_partner_page_CIPF', 5);

View File

@@ -38,20 +38,17 @@ if (!defined('ABSPATH')) {
function update_user_pre_order_CIPF($message) {
Plgntls::debug_infos();
$acf_payment_status = Cipf::ACF_CARD_PAYMENT_STATE;
$meta_order_id = Cipf::META_ORDER_ID;
$order_id = $message->id;
$user_id = get_current_user_id();
$acf_id = 'user_'.$user_id;
/*
* - delete previous order ids
* ->if we are here it's because a new order will try to be created
* - addind order_id to cipf_order_id meta field
* set new order_id
* -> it will delete the previous one
* -> if we are here it's because a new order will try to be created
*
*/
delete_user_meta($user_id, $meta_order_id);
add_user_meta($user_id, $meta_order_id, $order_id);
set_acf_order_id_CIPF($order_id, $user_id);
/*
* create a meta field to check states of payements on prof author page :
@@ -77,8 +74,9 @@ function update_user_post_capture_CIPF($message) {
$order_id = $message->id;
$user_id = get_current_user_id();
$status = null;
if (is_object($message) && isset($message->status))
if (is_object($message) && isset($message->status)) {
$status = $message->status;
}
/*
* capture status : https://developer.paypal.com/docs/api/orders/v2/#definition-order_status
@@ -96,18 +94,14 @@ function update_user_post_capture_CIPF($message) {
* -> it is at least necessary to find the user who did the purchase
*
*/
// find the user containing the order_id and delete this order_id
$user_id_to_update = find_user_with_order_id_CIPF($user_id, $order_id);
if ($user_id_to_update === false)
if ($user_id_to_update === false) {
throw new HttpException('cannot find user with this order_id', 502);
}
if ($status === 'COMPLETED') {
// proceed to validate payment for user
success_payment_for_user_CIPF($user_id_to_update, $order_id);
}
else if ($status === 'PENDING') {
// i don't know what to do yet, maybe make more checks and output a message to contact diego ?
// https://developer.paypal.com/docs/api/orders/v2/#definition-capture_status_details
}
else {
failure_payment_for_user_CIPF($user_id_to_update, $order_id, $status);
}
@@ -129,17 +123,10 @@ function update_user_post_capture_CIPF($message) {
*/
function failure_payment_for_user_CIPF($user_id, $order_id, $status) {
Plgntls::debug_infos();
$meta_order_id = Cipf::META_ORDER_ID;
$acf_id = 'user_'.$user_id;
/*
* remove the order_id from user meta
*
*/
delete_user_meta($user_id, $meta_order_id, $order_id);
// schedule_delete_orderid_CIPF($user_id, $order_id)
set_payment_failure_CIPF($user_id);
set_account_to_pay_CIPF($user_id);
send_emails_CIPF('payment_echec', $user_id);
@@ -152,18 +139,11 @@ function failure_payment_for_user_CIPF($user_id, $order_id, $status) {
*/
function success_payment_for_user_CIPF($user_id, $order_id) {
Plgntls::debug_infos();
$meta_order_id = Cipf::META_ORDER_ID;
$acf_id = 'user_'.$user_id;
/*
* remove the order_id from user meta
*
*/
delete_user_meta($user_id, $meta_order_id, $order_id);
// schedule_delete_orderid_CIPF($user_id, $order_id)
update_card_expiration_CIPF($user_id);
if (is_card_new_CIPF()) {
@@ -188,10 +168,10 @@ function success_payment_for_user_CIPF($user_id, $order_id) {
*/
function find_user_with_order_id_CIPF($current_user_id, $order_id) {
Plgntls::debug_infos();
$meta_order_id = Cipf::META_ORDER_ID;
$acf_order_id = Cipf::ACF_CARD_ORDER_ID;
$role_prof = Cipf::ROLE_PROF;
$user_metas = get_user_meta($current_user_id, $meta_order_id, false);
$user_metas = get_user_meta($current_user_id, $acf_order_id['_name'], false);
if (in_array($order_id, $user_metas)) {
return $current_user_id;
}
@@ -202,16 +182,18 @@ function find_user_with_order_id_CIPF($current_user_id, $order_id) {
* https://developer.wordpress.org/reference/classes/WP_User_Query/prepare_query/
*
*/
$users = get_users(array(
$user = get_users(array(
'role' => $role_prof,
'meta_key' => $meta_order_id,
'meta_key' => $acf_order_id,
'meta_value' => $order_id,
'fields' => 'ID',
));
if (count($users) > 1)
if (count($user) > 1) {
throw new HttpException('multiple users with same order_id', 502);
else if (count($users) === 1)
return reset($users);
}
else if (count($user) === 1) {
return reset($user);
}
return false;
}

View File

@@ -54,6 +54,10 @@ function check_can_pay_CIPF() {
$user_id = get_current_user_id();
$acf_id = 'user_' . $user_id;
schedule_prof_account_suppression_CIPF($user_id);
/*
* check if payment is virement or immediat
*

View File

@@ -148,6 +148,7 @@ function card_date_exists_CIPF($user_id = null) {
*
*/
$date_now = date_create('today');
// we dont use utility fonction 'get_acf_field_CIPF' because we want to know if it was not init. Do we ?
$current_date = get_field($acf_card_expiration['_name'], $acf_id);
if (empty($current_date)) {
@@ -196,7 +197,7 @@ function update_card_expiration_CIPF($user_id = null) {
*
*/
$date_plus_one_year = $current_date_limit->add(date_interval_create_from_date_string('+'.$card_duration));
update_field($acf_card_expiration['_name'], $date_plus_one_year->format($acf_date_format), $acf_id);
set_acf_field_CIPF($acf_card_expiration, $date_plus_one_year->format($acf_date_format), $acf_id);
}

View File

@@ -13,11 +13,11 @@
details:not([open]) {
summary {
margin: 0px;
cursor: grab;
}
}
details {
summary {
cursor: grab;
h2 {
display: inline;
}

View File

@@ -30,8 +30,6 @@ function menu_content() {
//delete_option($option_notice_object['_name']);
$option_notice = \Plgntls_custer::get_option_safe($option_notice_object, true);
//error_log("option_notice[style]: " . $option_notice['style']);
//error_log("option_notice[html]: " . $option_notice['html']);
ob_start();
include(\Plgntls_custer::root_path() . 'admin_menu.html');
@@ -39,7 +37,6 @@ function menu_content() {
}
//function update_payment_messages_option_CIPF($request, $option_name, $option_data, $option_default) {

View File

@@ -4,7 +4,7 @@ Plugin Name: hggg_custer
Plugin URI:
Description: customize user : output infos on page, on email, and change current user id momentarly
Author: hugogogo
Version: 0.2.3
Version: 0.2.3.1
Author URI:
*/

View File

@@ -72,6 +72,15 @@ div.example {
border-left: 1px solid black;
margin-left: 20px;
padding-left: 10px;
}
.flex {
display: flex;
}
.margin-right-10 {
margin-right: 10px;
}
.margin-top-20 {
margin-top: 20px;
}',
'html'=>
'<h1>mode d\'emplois de custer</h1>
@@ -79,22 +88,22 @@ div.example {
<details>
<summary><h2>1. emails : <mark>$$mot-clé$$</mark></h2></summary>
<h3>1.1. mots clés custer</h3>
<h3>1.1. mots-clés custer</h3>
<section>
<p>dans les emails, aussi bien dans le message, que dans le sujet ou la personne destinataire, vous pouvez utiliser un mot-clé custer.</p>
<p>dans les emails, aussi bien dans le message, que dans le sujet ou la personne destinataire, on peut utiliser un mot-clé custer.</p>
<p>Qu\'est-ce que c\'est que ça ;) ?</p>
<p>
C\'est simplement un mot clé écrit entre doubles dollars : <mark>$$mot-clé$$</mark><br>
Lorsque un email contient ce schéma de mot entouré par des doubles dollars, il essaye de trouver la valeur associée a ce mot-clé.<br>
Ces mots clés correspondent en fait aux données que wordpress enregistre sur chaque personne.
C\'est simplement un mot-clé écrit entre doubles dollars : <mark>$$mot-clé$$</mark><br>
Lorsque un email contient ce schéma de mot entouré par des doubles dollars, il essaye de trouver la valeur associée à ce mot-clé.<br>
Ces mots-clés correspondent en fait aux données que wordpress enregistre sur chaque personne.
</p>
</section>
<h3>1.2. trouver les mots clés</h3>
<h3>1.2. trouver les mots-clés</h3>
<section>
<p>Ce n\'est pas toujours facile de savoir les mots clés qui sont disponibles, sans aller voir le code directement, donc voici un exemple de liste de mots clés pour une utilisatrice fictive :</p>
<p>Ce n\'est pas toujours facile de savoir les mots-clés qui sont disponibles, sans aller voir le code directement, donc voici un exemple de liste de mots-clés pour une utilisatrice fictive :</p>
<details class=\"border\">
<summary>exemples de mots-clés et leur valeurs (la liste exacte peut dépendre de la personne, mais cet exemple contient les valeurs les plus communes)</summary>
@@ -173,37 +182,16 @@ div.example {
</details>
<p>
Vous pouvez remarquer que certains mot clés sont sous la forme <strong>\'__mot_clé__\'</strong><br>
Ce sont des mot clés qui ne sont pas définis par worpdress de base, mais rajoutés par ce plugin (custer), plus d\'explication plus bas, dans la section 1.3.
On peut remarquer que certains mot-clés sont sous la forme <strong>\'__mot_clé__\'</strong> avec deux doubles underscores avant et apres : "__"moit-clé"__"<br>
Ce sont des mot-clés qui ne sont pas définis par worpdress de base, mais rajoutés par ce plugin (custer), plus d\'explication plus bas, dans la section suivante 1.3.
</p>
<p>Une méthode pour voir tous les mots clés disponibles pour une personne connectée, c\'est d\'utiliser le shortcode <strong>[custer_user_info]</strong>, comme expliqué dans la partie 2 de ce mode d\'emplois</p>
<p>Une méthode pour voir tous les mots-clés disponibles pour une personne connectée, c\'est d\'utiliser le shortcode <strong>[custer_user_info]</strong>, comme expliqué dans la partie 2 de ce mode d\'emplois.</p>
</section>
<h3>1.3. exemple dans un email</h3>
<h3>1.3. mots-clés speciaux \'__mot_clé__\'</h3>
<section>
<p>Un exemple d\'utilisation dans un email, avec les données de l\'exemple precedent :</p>
<div>
<ul>
<li><strong>destinataire : </strong><mark>$$user_email$$</mark></li>
<li><strong>sujet : </strong>compte de <mark>$$nickname$$</mark></li>
<li><strong>message : </strong>Bonjour <mark>$$first_name$$</mark> <mark>$$last_name$$</mark>, votre carte numero <mark>$$numero_de_la_carte$$</mark> va bientot arriver a expiration, connectez-vous a votre compte pour la renouveler : <mark>$$__author_page_url__$$</mark></li>
</ul>
</div>
<p>et une fois les mot clés convertis, cet email devient :</p>
<div>
<ul>
<li><strong>destinataire : </strong>temlevorku@gufum.com</li>
<li><strong>sujet : </strong>compte de AnneM</li>
<li><strong>message : </strong>Bonjour Anne Martin, votre carte numero 20240403154 va bientot arriver a expiration, connectez-vous a votre compte pour la renouveler : https://local-cipf-plugin.com/author/annem/</li>
</ul>
</div>
</section>
<h3>1.4. mots clés speciaux \'__mot_clé__\'</h3>
<section>
<p>certains mot clés sont entourés par des doubles underscore : <strong>__mot_clé__</strong>, ce sont des mot clés definis par custer, voici leur signification :</p>
<p>Certains mot-clés sont entourés par des doubles underscore : <strong>__mot_clé__</strong>, ce sont des mot-clés definis par custer, voici leur signification :</p>
<ul>
<li><strong>__admin_email__</strong> : l\'adresse email définie dans le menu \'Réglages\' > \'Général\' > \'Adresse e-mail dadministration\'</li>
<li><strong>__author_page_url__</strong> : la page de profil de la personne connectée, appellée \'page auteur\' par wordpress (c\'est une page un peu speciale, qui ne peut pas être construite comme les autres pages, mais par le theme directement) -> ici elle sert pour les profs, c\'est leur page de profile</li>
@@ -212,6 +200,27 @@ div.example {
</ul>
<p></p>
</section>
<h3>1.4. exemple dans un email</h3>
<section>
<p>Un exemple d\'utilisation dans un email, avec les données de l\'exemple précédent :</p>
<div>
<ul>
<li><strong>destinataire : </strong><mark>$$user_email$$</mark></li>
<li><strong>sujet : </strong>compte de <mark>$$nickname$$</mark></li>
<li><strong>message : </strong>Bonjour <mark>$$first_name$$</mark> <mark>$$last_name$$</mark>, votre carte numero <mark>$$numero_de_la_carte$$</mark> va bientot arriver a expiration, connectez-vous a votre compte pour la renouveler : <mark>$$__author_page_url__$$</mark></li>
</ul>
</div>
<p>et une fois les mot-clés convertis, cet email devient :</p>
<div>
<ul>
<li><strong>destinataire : </strong>temlevorku@gufum.com</li>
<li><strong>sujet : </strong>compte de AnneM</li>
<li><strong>message : </strong>Bonjour Anne Martin, votre carte numero 20240403154 va bientot arriver a expiration, connectez-vous a votre compte pour la renouveler : https://local-cipf-plugin.com/author/annem/</li>
</ul>
</div>
</section>
</details>
@@ -223,7 +232,7 @@ div.example {
<section>
<p>Les shortcodes sont des \'petits codes\' qu\'on peut ecrire sur les pages front de wordpress, et qui vont executer un code côté serveur, et souvent être remplacés par le resultat de ce code.</p>
<p>C\'est à dire, plus concretement, qu\'on peut écrire une shortcode [mon-shortcode], et qu\'il se transformera en autre chose, par exemple \'salut\'.</p>
<p>C\'est à dire, plus concretement, qu\'on peut écrire un shortcode [mon-shortcode], et qu\'il se transformera en autre chose, par exemple \'salut\'.</p>
<p>
Le shortcode de custer s\'appelle \'custer_user_info\', et il permet de retrouver la valeur du mot-clé qu\'on lui donne, les mêmes mots-clés que décrits dans la partie 1 de ce mode d\'emplois, à propos des emails.<br>
Cette fois-ci, au lieu d\'ecrire le mot-clé entre double dollars <mark>$$mot_clé$$</mark>, on l\'écrit dans le shortcode : <mark>[custer_user_info mot-clé]</mark>.
@@ -238,7 +247,20 @@ Mais pourquoi utiliser un shortcode ET une version avec les doubles dollars ? To
<section>
<p>En utilisant le shortcode seul, c\'est à dire uniquement avec son nom et sans aucun autre argument : <mark>[custer_user_info]</mark>, on obtient une liste de tous les mots-clés et leur valeur de quelqu\'un. De qui ? He bien, soit de la personne connectée, soit de la personne qui à ecrit la page, mais ce point est expliqué dans la section 2.4.</p>
<p>C\'est cette méthode, le shortcode de base, qui a été utilisée pour obtenir la liste montrée plus haut dans la section email.</p>
<p>C\'est cette méthode, le shortcode de base, qui a été utilisée pour obtenir la liste montrée plus haut dans la section email, et qui donne quelque chose comme :</p>
<div class="flex">
<p class="margin-right-10"><mark>[custer_user_info]</mark> --></p>
<pre class="margin-top-20">
display_name : AnneM
etat_compte : carte valide
fin_de_validite : 19/03/2094
first_name : Anne
fonction : Prof
ID : 154
nickname : AnneM
...
</pre>
</div>
<p>Ce n\'est pas prévu pour être vraiment utilisé sur le site finale, uniquement comme un outil pour voir les valeurs disponibles.</p>
</section>
@@ -247,6 +269,12 @@ Mais pourquoi utiliser un shortcode ET une version avec les doubles dollars ? To
<section>
<p>C\'est sous cette forme de base que le shortcode va fonctionner : afficher la valeur d\'un mot-clé.</p>
<p>Par exemple, si la prof connectée s\'appelle AnneM sur le site, on peut obtenir ce surnom en ecrivant <mark>[custer_user_info nickname]</mark></p>
<p>exemples :</p>
<ul>
<li><mark>[custer_user_info nickname]</mark> --> AnneM</li>
<li><mark>[custer_user_info first-name]</mark> --> Anne</li>
<li><mark>[custer_user_info fonction]</mark> --> Prof</li>
</ul>
<p>C\'est assez simple, cependant il y à un point important qui est expliqué dans la section suivante, c\'est de choisir de qui on affiche les infos.</p>
</section>
@@ -284,7 +312,8 @@ Généralement les pages de profils ne sont pas visibles publiquement, mais une
<p>Il y a un autre argument qu\'on peut rajouter à ce shortcode, c\'est la valeur qu\'on veut voir si le mot-clé ne trouve aucune valeur correspondante.</p>
<p>En effet, si on demande la description d\'une personne par exemple, et qu\'elle n\'est pas remplie, le shortcode va juste retourner rien du tout, par defaut.</p>
<p>Mais peut-etre qu\'on prefèrerait qu\'il affiche quelque chose comme \'description non-fournie\' ?</p>
<p>Dans ce cas c\'est très simple, il suffit de le préciser dans l\'arguement <mark>if_empty=\'description non-fournie\'</marks> (ça fonctionne avec id=\'\' aussi) :</p>
<p>Dans ce cas c\'est très simple, il suffit de le préciser dans l\'arguement <mark>if_empty=\'description non-fournie\'</marks> (ça fonctionne avec id=\'\' aussi)</p>
<p>Exemples si Hugo visite la page d\'une personne qui n\'a pas de description, et la description de Hugo est "hugogogo est un rigolo" :</p>
<ul>
<li><mark>[custer_user_info description]</mark> -> </li>
<li><mark>[custer_user_info description if_empty=\'pas de description\']</mark> -> pas de description</li>
@@ -305,6 +334,7 @@ Généralement les pages de profils ne sont pas visibles publiquement, mais une
<section>
<p>Celui-ci est très simple, il permet de changer momentanément la valeur de la personne connectée par celle de la personne autrice de la page.</p>
<p>Pour bien comprendre, il faut d\'abord voir un exemple :</p>
<p><strong>--> connecté en tant que hugogogo, visite la page de AnneM :</strong></p>
<div class=\"example\">
<p>vous êtes connecté-e en tant que : [custer_user_info nickname id=\'logged_in\']</p>
<p>[custer_author_id]</p>
@@ -327,18 +357,21 @@ Généralement les pages de profils ne sont pas visibles publiquement, mais une
<section>
<p>Et ce n\'est pas tout :p Si par hasard, vous avez besoin d\'utiliser ce shortcode sur une portion de la page, et que dans cette portion vous avez quand-même besoin de récupérer une info sur la personne connectée avec le shortcode <mark>[custer_user_info mot-clé]</mark>, la vraie personne connectée, comment faire ? Il y a une solution, en ajoutant l\'argument <strong>important</strong> au shortcode. Exemple :</p>
<p><strong>--> connecté en tant que hugogogo, visite la page de AnneM :</strong></p>
<div class=\"example\">
<p>vous êtes connecté-e en tant que : [custer_user_info nickname id=\'logged_in\']</p>
<p>[custer_author_id]</p>
<p>vous êtes connecté-e en tant que : [custer_user_info nickname id=\'logged_in\']</p>
<p>vous êtes connecté-e en tant que : [custer_user_info nickname id=\'logged_in\' important]</p>
<p>[custer_author_id off]</p>
<p>vous êtes connecté-e en tant que : [custer_user_info nickname id=\'logged_in\']</p>
</div>
<p>ce code va donner le resultat suivant :</p>
<div class=\"example\">
<p>vous êtes connecté-e en tant que : AnneM</p>
<p>vous êtes connecté-e en tant que : hugogogo</p>
<p>vous êtes connecté-e en tant que : AnneM</p>
<p>vous êtes connecté-e en tant que : hugogogo</p>
<p>vous êtes connecté-e en tant que : hugogogo</p>
</div>
<p>On voit qu\'avec l\'argument <strong>important</strong> on retrouve la valeur de la vraie personne connectée</p>
<p>À noter que cet argument <strong>important</strong> n\'a pas d\'impact utilisé avec l\'autre <strong>id</strong>, ou en dehors du shortcode <strong>custer_author_id</strong>.</p>

197
ç Normal file
View File

@@ -0,0 +1,197 @@
<?php
/*
* it means someone outside wp is accessing the file, in this case kill it.
*/
if (!defined('ABSPATH')) {
die('You can not access this file!');
}
/*
* schedule events :
* - first use a function to add the event :
* - function launch_schedule_my_evet() {
* wp_schedule_single_event($delay, 'hook_event_name');
* }
* - this will enqueue an action hook when the time will come, that you must define :
* - add_action('hook_event_name', 'callback_function');
* - and finally, define the function 'callback_function()'
*
* to define the delay, you can use the strtotime notation
* - strtotime('+1 month');
* -> https://www.php.net/manual/en/function.strtotime.php
* or the time constants in seconds :
* - time() + 3 * MINUTE_IN_SECONDS
* -> https://codex.wordpress.org/Easier_Expression_of_Time_Constants
*
*/
/*
* events and emails :
*
* 1. [/] payments : TIME_OLD_ORDER_ID - suppress old order_ids
* 2. [ ] prof (email) : TIME_ACCOUNT_DELETE_AFTER_EXPIRE - schedule event to suppress the account xx time (6 month ?) after end of validity of the card, and supress the codes
* 3. [ ] prof (email) : - schedule event to deactivate the card
* 4. [ ] prof (email) : TIME_REMINDER_BEFORE_ACCOUNT_EXPIRE_FIRST - send emails reminder before account deactivate
* 5. [ ] prof (email) : TIME_REMINDER_BEFORE_ACCOUNT_EXPIRE_LAST - send emails reminder before account deactivate
* 6. [ ] prof (email) : TIME_REMINDER_BEFORE_ACCOUNT_DELETE_FIRST - send emails reminder before account delete
* 7. [ ] prof (email) : TIME_REMINDER_BEFORE_ACCOUNT_DELETE_LAST - send emails reminder before account delete
* 8. [ ] partner (email) : TIME_REMINDER_BEFORE_OFFER_EXPIRE - send emails reminder before offer ends
* 9. [ ] partners (email) : - temp offers -> make them disappeay after end card validity -> put them in hidden
*
*/
/*
* 1. prof, add a schedule event to delete this order_id
* after 3 days ?
*
*/
function schedule_delete_orderid_CIPF($user_id, $order_id) {
Plgntls::debug_infos();
$delay = strtotime('+3 days');
wp_schedule_single_event($delay, 'orderid_deletion_event_CIPF', array($user_id, $order_id));
}
function delete_order_id_later_CIPF($user_id, $order_id) {
Plgntls::debug_infos();
delete_user_meta($user_id, 'cipf_order_id', $order_id);
}
add_action('orderid_deletion_event_CIPF', 'delete_order_id_later_CIPF', 10, 2);
/*
* 2. prof, suppress account XX time after expiration, also email
*
*/
function schedule_prof_account_suppression_CIPF($user_id) {
Plgntls::debug_infos();
$duration_deletion = Cipf::DURATION_ACCOUNT_DELETE_AFTER_EXPIRE;
$date_limit = get_date_limit_CIPF($user_id);
$time_limit = $date_limit->getTimestamp();
//$date_interval = date_interval_create_from_date_string($duration_deletion);
//$date_deletion = $date_limit->add($date_interval);
$date_deletion = $date_limit->modify($duration_deletion);
$time_deletion = $date_deletion->getTimestamp();
error_log("duration_deletion: " . json_encode($duration_deletion));
error_log("date_limit : " . json_encode($date_limit));
//error_log("date_interval: " . json_encode($date_interval));
error_log("date_deletion: " . json_encode($date_deletion));
error_log("time_deletion: " . json_encode($time_deletion));
/*
duration_deletion: "6 months"
date_limit : {"date":"2094-09-19 15:30:29.000000","timezone_type":3,"timezone":"UTC"}
date_deletion: {"date":"2094-09-19 15:30:29.000000","timezone_type":3,"timezone":"UTC"}
time_deletion: 3935748629
*/
//$delay = strtotime('+3 days');
// wp_schedule_single_event($delay, 'scedule_event_CIPF', array($user_id));
}
//function event_CIPF($user_id) {
// Plgntls::debug_infos();
//}
//add_action('schedule_event_CIPF', 'event_CIPF', 10, 2);
/*
* 3. prof, deactivate card at expiration time, also email
*
function schedule__CIPF($user_id) {
Plgntls::debug_infos();
$delay = strtotime('+3 days');
wp_schedule_single_event($delay, 'scedule_event_CIPF', array($user_id));
}
function event_CIPF($user_id) {
Plgntls::debug_infos();
}
add_action('schedule_event_CIPF', 'event_CIPF', 10, 2);
*/
/*
* 4. && 5. prof, send email reminder before account expire
*
function schedule__CIPF($user_id) {
Plgntls::debug_infos();
$delay = strtotime('+3 days');
wp_schedule_single_event($delay, 'scedule_event_CIPF', array($user_id));
}
function event_CIPF($user_id) {
Plgntls::debug_infos();
}
add_action('schedule_event_CIPF', 'event_CIPF', 10, 2);
*/
/*
* 6. && 7. prof, send email reminder account deletion
*
function schedule__CIPF($user_id) {
Plgntls::debug_infos();
$delay = strtotime('+3 days');
wp_schedule_single_event($delay, 'scedule_event_CIPF', array($user_id));
}
function event_CIPF($user_id) {
Plgntls::debug_infos();
}
add_action('schedule_event_CIPF', 'event_CIPF', 10, 2);
*/
/*
* 8. partner, send email before offer expire
*
function schedule__CIPF($user_id) {
Plgntls::debug_infos();
$delay = strtotime('+3 days');
wp_schedule_single_event($delay, 'scedule_event_CIPF', array($user_id));
}
function event_CIPF($user_id) {
Plgntls::debug_infos();
}
add_action('schedule_event_CIPF', 'event_CIPF', 10, 2);
*/
/*
* 9. partner, handle offer expire, also sens email
*
function schedule__CIPF($user_id) {
Plgntls::debug_infos();
$delay = strtotime('+3 days');
wp_schedule_single_event($delay, 'scedule_event_CIPF', array($user_id));
}
function event_CIPF($user_id) {
Plgntls::debug_infos();
}
add_action('schedule_event_CIPF', 'event_CIPF', 10, 2);
*/
?>