wip trying to get the options working in class

This commit is contained in:
asus
2024-03-31 01:45:25 +01:00
parent 1268dc56e3
commit 0f554444dd
2 changed files with 134 additions and 44 deletions

View File

@@ -60,38 +60,78 @@ class Plgntls_xtx {
private static $_instance_count = 0;
private static $_adding_count = 0;
private static $_init_count = 0;
private $_first_script = null;
private $_first_style = null;
private $_prefix = 'PLGNTLS_XTX';
private $_js_dependencies = array();
private $_css_dependencies = array();
private $_scripts_attributes = array();
private static $_prefix = null;
private static $_options_action = null;
private static $_options_list = null;
/*
*/
public function __construct() {
++self::$_instance_count;
self::init_class();
}
public static function debug_infos($level = null) {
self::_debug_infos($level);
public static function init_class() {
if (self::$_init_count > 0) {
return;
}
++self::$_init_count;
self::$_prefix = strtoupper(__CLASS__);
/*
* 'set paths and urls' init
*
*/
self::_init_root_dir();
/*
* 'debug logs' init
*
*/
/*
* 'add to front' init
*
*/
/*
* 'add menu' init
*
*/
/*
* 'handle options' init
*
*/
self::$_options_action = 'action_for_admin_post_options_'.self::$_prefix;
self::$_options_list = 'list_of_options_for_this_plugin_'.self::$_prefix;
if (false === get_option(self::$_options_list)) {
add_option(self::$_options_list, '', '', 'no');
}
add_action('admin_post_'.self::$_options_action, array(__CLASS__, '_handle_admin_post_option'));
}
public static function add_to_front($srcs_arr = array(), $vars = array()) {
$instance = new self();
return $instance->_add_to_front($srcs_arr, $vars);
}
@@ -102,7 +142,7 @@ class Plgntls_xtx {
/*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* (
* PRIVATE FUNCTIONS
* ACTIONS FUNCTIONS
*
* 1. set paths and urls
* 2. debug logs
@@ -165,6 +205,7 @@ class Plgntls_xtx {
private static $_root_path;
private static $_root_url;
/*
* ex:
* /home/www-data/cipf_plugin/php/test/test2/test3/test.php
@@ -184,7 +225,7 @@ class Plgntls_xtx {
* _main_file main_file,php
*
*/
private static function set_root_dir() {
private static function _init_root_dir() {
if (isset(self::$_plugin_dir, self::$_file_name, self::$_file_dir_path, self::$_plugin_dir_path))
return ;
/*
@@ -211,11 +252,11 @@ class Plgntls_xtx {
self::$_root_url = plugins_url(self::$_plugin_dir.'/');
}
public static function root_path() {
self::set_root_dir();
self::init_class();
return(self::$_root_path);
}
public static function root_url() {
self::set_root_dir();
self::init_class();
return(self::$_root_url);
}
@@ -272,7 +313,7 @@ class Plgntls_xtx {
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
private static function _debug_infos($level) {
public static function debug_infos($level = null) {
if (self::$_DEBUG_INFOS === 0) {
return;
}
@@ -342,6 +383,11 @@ class Plgntls_xtx {
public static function add_to_front($srcs_arr = array(), $vars = array()) {
$instance = new self();
return $instance->_add_to_front($srcs_arr, $vars);
}
private function _add_to_front($srcs_arr, $vars) {
/*
* even if the function is called with no srcs
@@ -836,6 +882,7 @@ class Plgntls_xtx {
const ACTION_TOOGLE_ADMIN_MENU = "toggle_admin_menu_url_xtxpatch";
const OPTION_TOGGLE_MENU = [
'_name'=>'toggle_admin_menu_option_xtxpatch',
'_callback'=>'',
'_default'=>'hide',
'show'=>'show',
'hide'=>'hide',
@@ -843,21 +890,21 @@ class Plgntls_xtx {
/*
* options is the options needed to set a new menu
* see _create_menu below for more informations
*
*/
public static function add_menu($options) {
self::init_class();
if (empty($options)) {
return;
}
else if (is_string($options)) {
$options = array('callback'=>$options);
}
add_action('admin_menu', function() use ($options) {
return self::_create_menu($options);
});
self::set_root_dir();
add_filter("plugin_action_links_".self::$_plugin_dir."/".self::$_main_file, array(__CLASS__, '_add_link_to_plugin'));
add_action('template_redirect', array(__CLASS__, '_toggle_plugin_menu'));
add_action('admin_post_'.self::ACTION_TOOGLE_ADMIN_MENU, array(__CLASS__, '_toggle_plugin_menu_action'));
self::_create_menu($options);
}
/*
@@ -933,11 +980,6 @@ class Plgntls_xtx {
}
public static function _toggle_plugin_menu_action() {
error_log("_POST" . json_encode($_POST));
error_log("_GET" . json_encode($_GET));
error_log("_REQUEST" . json_encode($_REQUEST));
}
/*
@@ -945,7 +987,7 @@ error_log("_REQUEST" . json_encode($_REQUEST));
* triggered by template_redirect hook
*
*/
public static function _toggle_plugin_menu() {
public static function toggle_plugin_menu() {
$slug_toggle = self::SLUG_TOOGLE_ADMIN_MENU;
$toggle_menu = self::OPTION_TOGGLE_MENU;
@@ -1039,12 +1081,10 @@ error_log("_REQUEST" . json_encode($_REQUEST));
*/
private static $_options = array();
public static function get_option_safe($option) {
/*
* first init option, in case it was not already
* then get it
*
*/
if (false === self::_init_option($option)) {
@@ -1054,12 +1094,21 @@ error_log("_REQUEST" . json_encode($_REQUEST));
}
public static function get_option_link_href($option) {
$option_data = self::_get_option_data($option);
/*
* first init option, in case it was not already
*
*/
if (false === self::_init_option($option)) {
return null;
}
$option_data = self::_get_option_data($option['_name']);
if (false === $option_data) {
return null;
}
$href = admin_url('admin-post.php');
$href .= "?action=" . $option_data['_action'];
$href .= "&" . $option_data['_nonce_name'] . "=" . wp_create_nonce($option_data['_nonce_action']);
$href .= "&option_name=" . $option_data['_name'];
return $href;
}
@@ -1077,20 +1126,28 @@ error_log("_REQUEST" . json_encode($_REQUEST));
}
$form = '<form method="'.$method.'" action="'.admin_menu('admin-post.php').'">';
$form .= '<input type="hidden" name="action" value="'.$option_data['_action'].'">';
$form .= '<input type="hidden" name="option_name" value="'.$option_data['_name'].'">';
$form .= wp_nonce_field($option_data["_nonce_action"], $option_data["_nonce_name"]);
return $fields;
}
private static function _get_option_data($option) {
if (false === self::_init_option($option)) {
private static function _get_option_data($option_name) {
if (!is_string($option_name)) {
return false;
}
return self::$_options[$option['_name']];
$options_serialized = get_option(self::$_options_list);
$options_unserialized = unserialize($options_serialized);
if (!isset($options_unserialized[$option_name])) {
return false;
}
return $options_unserialized[$option_name];
}
/*
* a valid option must contains '_name' and '_default' at least
* a valid option_data must contains '_name' and '_default' at least
*
*/
private static function _init_option($option) {
@@ -1114,14 +1171,17 @@ error_log("_REQUEST" . json_encode($_REQUEST));
/*
* if self::_options does not contains the option yet, add it
* also check that it contains every fields
* - _action
* - _action, default 'action_for_admin_post_options_'.self::_prefix
* if you use another action, it will not trigger the class handler function
* - _nonce_action
* - _nonce_name
*
*/
$to_set = false;
if (isset(self::$_options[$name])) {
$tmp_option = self::$_options[$name];
$options_serialized = get_option(self::$_options_list);
$options_unserialized = unserialize($options_serialized);
if (isset($options_unserialized[$name])) {
$tmp_option = $options_unserialized[$name];
}
else {
$to_set = true;
@@ -1130,7 +1190,7 @@ error_log("_REQUEST" . json_encode($_REQUEST));
// checks all the fields
if (!isset($tmp_option['_action'])) {
$to_set = true;
$tmp_option['_action'] = 'action_' . $name;
$tmp_option['_action'] = self::$_options_action;
}
if (!isset($tmp_option['_nonce_action'])) {
$to_set = true;
@@ -1140,15 +1200,42 @@ error_log("_REQUEST" . json_encode($_REQUEST));
$to_set = true;
$tmp_option['_nonce_name'] = 'nonce_name_' . $name;
}
// if needed, assigns the new value to options
// if needed, assigns the new value to the options_list
if ($to_set === true) {
self::$_options[$name] = $tmp_option;
$options_unserialized[$name] = $tmp_option;
update_option(self::$_options_list, serialize($options_unserialized), '', 'no');
}
return true;
}
public static function _handle_admin_post_option() {
if (!isset($_REQUEST)) {
return;
}
$request = $_REQUEST;
unset($request['action']);
$option_name = $request['option_name'];
unset($request['option_name']);
$option_data = self::_get_option_data($option_name);
$nonce_name = $option_data['_nonce_name'];
$nonce_action = $option_data['_nonce_action'];
$nonce = $request[$nonce_name];
unset($request[$nonce_name]);
if (!wp_verify_nonce($nonce, $nonce_action)) {
// redirect to referer
exit;
}
error_log("request: " . json_encode($request));
}