375 lines
9.6 KiB
PHP
375 lines
9.6 KiB
PHP
<?php
|
|
namespace FBPATCH;
|
|
|
|
/*
|
|
* it means someone outside wp is accessing the file, in this case kill it.
|
|
*/
|
|
if (!defined('ABSPATH')) {
|
|
die('You can not access this file!');
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
*
|
|
*/
|
|
class Fbpatch {
|
|
const SLUG_TOOGLE_ADMIN_MENU = ['_name'=>'toogle_admin_menu_url_fbpatch', 'toggle'=>'toggle', 'show'=>'show', 'hide'=>'hide'];
|
|
const OPTION_TOGGLE_MENU = ['_name'=>'toggle_admin_menu_option_fbpatch', 'show'=>'show', 'hide'=>'hide'];
|
|
const NONCE = ['_name'=>'nonce_name', '_action'=>'action_name'];
|
|
const ADMIN_POST_PATCH_CHOICE = 'add_patches';
|
|
|
|
/*
|
|
* get path an url from plugin root
|
|
*
|
|
*/
|
|
public static function root_path() {
|
|
return plugin_dir_path(__DIR__);
|
|
}
|
|
public static function root_url() {
|
|
return plugin_dir_url(__DIR__);
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
* ---------------------------------------------------------------------------
|
|
* OPTIONS
|
|
* these functions are used to select which patch is applied
|
|
*
|
|
*/
|
|
|
|
private static $_patches = [
|
|
'_name'=>'fbpatch_list_of_patches',
|
|
'calculations'=>['checked'=>true, 'title'=>'calculations title', 'description'=>'calculation description'],
|
|
'hide_show' =>['checked'=>true, 'title'=>'hide/show title', 'description'=>'hide/show description'],
|
|
'modals' =>['checked'=>false, 'title'=>'modals title', 'description'=>'modals description'],
|
|
'urls' =>['checked'=>false, 'title'=>'urls title', 'description'=>'urls description'],
|
|
];
|
|
|
|
private static function set_option_patches() {
|
|
/*
|
|
* get the list of patches in option
|
|
* create option if needed
|
|
*
|
|
*/
|
|
$raw_patches_option = get_option(self::$_patches['_name']);
|
|
if (false === $raw_patches_option) {
|
|
add_option(self::$_patches['_name']);
|
|
}
|
|
$patches_option = unserialize($raw_patches_option);
|
|
if (empty($patches_option)) {
|
|
$patches_option = array();
|
|
}
|
|
|
|
/*
|
|
* if the option miss patches, add them
|
|
*
|
|
*/
|
|
foreach (self::$_patches as $patch => $data) {
|
|
if ($patch === '_name') {
|
|
continue;
|
|
}
|
|
if (isset($patches_option[$patch])) {
|
|
continue;
|
|
}
|
|
$patches_option[$patch] = $data;
|
|
}
|
|
|
|
/*
|
|
* if the option has additional patches, delete them
|
|
*
|
|
*/
|
|
foreach ($patches_option as $patch => $data) {
|
|
if (isset(self::$_patches[$patch])) {
|
|
continue;
|
|
}
|
|
unset($patches_option[$patch]);
|
|
}
|
|
|
|
/*
|
|
* change the option list with the update patches
|
|
*
|
|
*/
|
|
ksort($patches_option);
|
|
$serialize_patches_option = serialize($patches_option);
|
|
update_option(self::$_patches['_name'], $serialize_patches_option);
|
|
}
|
|
public static function get_patches() {
|
|
self::set_option_patches();
|
|
$patches = get_option(self::$_patches['_name']);
|
|
return unserialize($patches);
|
|
}
|
|
public static function set_patches($patches_on) {
|
|
/*
|
|
* loop through the option list and update occording to the received list
|
|
*
|
|
*/
|
|
$raw_patches = get_option(self::$_patches['_name']);
|
|
$patches_option = unserialize($raw_patches);
|
|
foreach($patches_option as $patch => $data) {
|
|
if (in_array($patch, $patches_on)) {
|
|
$patches_option[$patch]['checked'] = true;
|
|
}
|
|
else {
|
|
$patches_option[$patch]['checked'] = false;
|
|
}
|
|
}
|
|
|
|
/*
|
|
* change the option list with the update patches
|
|
*
|
|
*/
|
|
ksort($patches_option);
|
|
$serialize_patches_option = serialize($patches_option);
|
|
update_option(self::$_patches['_name'], $serialize_patches_option);
|
|
}
|
|
|
|
/*
|
|
* this function will include the files of the different patches if they are set in the options
|
|
*
|
|
*/
|
|
public static function init_hook() {
|
|
$patches = Fbpatch::get_patches();
|
|
foreach($patches as $patch => $data) {
|
|
if ($data['checked'] === true) {
|
|
include_once(self::root_path() . '/php/patches/'.$patch.'.php');
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
*
|
|
* OPTIONS END
|
|
* ---------------------------------------------------------------------------
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* ---------------------------------------------------------------------------
|
|
* HIDE SHOW
|
|
* to hide the chosen elements of the form without deleting the data in acf fields
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* STRATEGY 2
|
|
*
|
|
*/
|
|
|
|
private static $_post_id = 0;
|
|
private static $_has_elements_to_skip = false;
|
|
private static $_skip_elements = array();
|
|
|
|
public static function is_post_id($id) {
|
|
return self::$_post_id == $id;
|
|
}
|
|
public static function is_to_skip($key) {
|
|
return in_array($key, self::$_skip_elements);
|
|
}
|
|
|
|
/*
|
|
* create an array of the elements to forget
|
|
*
|
|
*/
|
|
public static function set_post_elements_to_forget($id, $is_to_skip, $skip_array) {
|
|
self::$_post_id = $id;
|
|
self::$_has_elements_to_skip = $is_to_skip;
|
|
self::$_skip_elements = $skip_array;
|
|
|
|
error_log("self::_post_id: " . json_encode(self::$_post_id));
|
|
error_log("self::_skip_elements: " . json_encode(self::$_skip_elements));
|
|
}
|
|
|
|
/*
|
|
* if there is elements to skip, add the filter, otherwise removes it (to be sure)
|
|
*
|
|
*/
|
|
public static function init_skip_hook() {
|
|
if (false === self::$_has_elements_to_skip) {
|
|
remove_filter("update_post_metadata", __NAMESPACE__.'\filter_elements_to_skip');
|
|
return;
|
|
}
|
|
|
|
add_filter("update_post_metadata", __NAMESPACE__.'\filter_elements_to_skip', 10, 5);
|
|
}
|
|
|
|
/*
|
|
* after insertion finished, removes filter
|
|
*
|
|
*/
|
|
public static function end_skip_hook() {
|
|
remove_filter("update_post_metadata", __NAMESPACE__.'\filter_elements_to_skip');
|
|
}
|
|
|
|
/*
|
|
{
|
|
"post_status":"publish",
|
|
"field_title":["Nom commercial","Votre site Internet","Dans quelle rubrique devez-vous para\u00eetre ? ","L\\'accroche en t\u00eate de page","Pr\u00e9sentez-vous","Votre logo ","Image principale","Voulez-vous afficher cette offre ?","Dur\u00e9e de l\\'offre","Validit\u00e9 de l\\'offre","Titre","Texte de l\\'offre","Image (facultatif)","Voulez-vous afficher cette offre ?","Dur\u00e9e de l\\'offre","Validit\u00e9 de l\\'offre","Titre","Texte de l\\'offre","Image (facultatif)","Voulez-vous afficher cette offre ?","Dur\u00e9e de l\\'offre","Validit\u00e9 de l\\'offre","Titre","Texte de l\\'offre","Image (facultatif)","slug"],
|
|
"post_title":"test_hugo",
|
|
"meta_input":[
|
|
"de_fb_url_partenaire",
|
|
"de_fb_logo_partenaire",
|
|
"de_fb_afficher_offre_1",
|
|
"de_fb_duree_offre_1",
|
|
"de_fb_fin_offre_1",
|
|
"de_fb_offre_1_titre",
|
|
"de_fb_offre_1_txt",
|
|
"de_fb_offre_1_image",
|
|
"de_fb_afficher_offre_2",
|
|
"de_fb_duree_offre_2",
|
|
"de_fb_fin_offre_2",
|
|
"de_fb_offre_2_titre",
|
|
"de_fb_offre_2_txt",
|
|
"de_fb_offre_2_image",
|
|
"de_fb_afficher_offre_3",
|
|
"de_fb_duree_offre_3",
|
|
"de_fb_fin_offre_3",
|
|
"de_fb_offre_3_titre",
|
|
"de_fb_offre_3_txt",
|
|
"de_fb_offre_3_image"
|
|
],
|
|
"url_partenaire":"",
|
|
"tax_input":["de_fb_category"],
|
|
"category":"autres",
|
|
"post_excerpt":"accroche",
|
|
"post_content":"presentation",
|
|
"_ajax_linking_nonce":"9e6b4bfea2",
|
|
"logo_partenaire":"41585",
|
|
"post_thumbnail":"41584",
|
|
"afficher_offre_1":"Masquer",
|
|
"offre_1_image":"41587",
|
|
"afficher_offre_2":"Afficher",
|
|
"duree_offre_2":"Permanente",
|
|
"offre_2_titre":"titre 2",
|
|
"offre_2_txt":"offre 2",
|
|
"offre_2_image":"41588",
|
|
"afficher_offre_3":"Afficher",
|
|
"duree_offre_3":"Permanente",
|
|
"offre_3_titre":"titre 3",
|
|
"offre_3_txt":"offre 3",
|
|
"offre_3_image":"41589",
|
|
"post_name":"test_hugo",
|
|
"ID":"41586",
|
|
"form_type_confirm":""
|
|
}
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* STRATEGY 1
|
|
*
|
|
*/
|
|
|
|
//private static $_identification_fields = array("post_title", "ID", "_ajax_linking_nonce");
|
|
//private static $_post_array_begin = array();
|
|
//private static $_post_identification = array();
|
|
//private static $_has_post_to_overwrite = false;
|
|
//private static $_was_inserted_once = false;
|
|
|
|
//public static function set_post_array($array) {
|
|
// self::$_post_array_begin = $array;
|
|
// self::$_post_identification = array();
|
|
// self::$_has_post_to_overwrite = true;
|
|
// self::$_was_inserted_once = false;
|
|
//}
|
|
|
|
//public static function set_post_identification($array) {
|
|
// error_log("-in set_post_identification");
|
|
// foreach(self::$_identification_fields as $field) {
|
|
// if (!isset($array[$field])) {
|
|
// continue;
|
|
// }
|
|
// self::$_post_identification[$field] = $array[$field];
|
|
// }
|
|
|
|
// error_log("_post_identification: " . json_encode(self::$_post_identification));
|
|
//}
|
|
|
|
/*
|
|
* check if should insert post :
|
|
* only prevent insert if the post was already inserted with divi_form_builder hook
|
|
* so we must let the post be inserted a first time, then prevent it
|
|
* 1. checks if there is a post to overwrite
|
|
* 2. checks if it has the same identifications than the form_builder post
|
|
*
|
|
*/
|
|
//public static function should_prevent_insert($array) {
|
|
// error_log("-in should_prevent_insert");
|
|
// $is_same = false;
|
|
// if (self::$_has_post_to_overwrite === false) {
|
|
// error_log("_has_post_to_overwrite === false");
|
|
// self::$_post_identification = array();
|
|
// self::$_post_array_begin = array();;
|
|
// return false;
|
|
// }
|
|
|
|
// /*
|
|
// * check if the post identifications matches the post to overwrite
|
|
// *
|
|
// */
|
|
// foreach(self::$_post_identification as $key => $value) {
|
|
// if (!isset($array[$key])) {
|
|
// error_log("!isset array[key]");
|
|
// return false;
|
|
// }
|
|
// // some identifications are number, but might be in string format, hence '!=' instead of '!=='
|
|
// if ($array[$key] != $value) {
|
|
// error_log("array[key] != value");
|
|
// return false;
|
|
// }
|
|
// }
|
|
|
|
// /*
|
|
// * the post identify to the post to overwrite
|
|
// * so we should insert it a first time
|
|
// * then prevent it to be inserted a second time
|
|
// *
|
|
// */
|
|
// if (self::$_was_inserted_once === false) {
|
|
// error_log("_was_inserted_once === true");
|
|
// self::$_was_inserted_once = true;
|
|
// return false;
|
|
// }
|
|
|
|
// self::$_post_array_begin = array();;
|
|
// self::$_post_identification = array();
|
|
// self::$_has_post_to_overwrite = false;
|
|
// self::$_was_inserted_once = false;
|
|
// return true;
|
|
//}
|
|
|
|
/*
|
|
"post_title":"test_hugo",
|
|
"ID":41586,
|
|
"_ajax_linking_nonce":"9e6b4bfea2",
|
|
*/
|
|
|
|
|
|
/*
|
|
*
|
|
* HIDE SHOW
|
|
* ---------------------------------------------------------------------------
|
|
*/
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
?>
|