'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 * --------------------------------------------------------------------------- */ } ?>