_real_escape( $string ); $sql = "SELECT option_name, option_value FROM $wpdb->options WHERE option_name LIKE '%$search%'"; $results = $wpdb->get_results( $sql, ARRAY_A ); return $results; } } if( !function_exists('WP_Improved_Settings\wpimpsettings_find_option_like') ){ function wpimpsettings_find_option_like( $string ) { // ugly hack to fetch plugin_name_index options global $wpdb; $search = $wpdb->_real_escape( $string ); $sql = "SELECT option_name, option_value FROM $wpdb->options WHERE option_name LIKE '$search%'"; $results = $wpdb->get_results( $sql, ARRAY_A ); $return = array(); if( $results ) foreach ( $results as $result ) { $name = str_replace($string .'_', '', $result['option_name'] ); $explode = explode('_', $name ); $value = $result['option_value']; $return[$explode[0]][$explode[1]] = $value; } return $return; } } if ( !class_exists( 'WP_Improved_Settings\WP_Improved_Settings' ) ) { class WP_Improved_Settings { // loosely based on wc-dynamic-pricing-and-discounts/classes/rp-wcdpd-settings.class.php public $settingsStructure = array(); public $extendedActions = array(); public $plugins_paths = array(); public $WC_Improved_Settings_API; public $isMainMenu = false; public $plugin_id; public $menu_order = 20; public $minimum_capability = 'manage_options'; public $option_page = ''; public $defaultSettingsTab = ''; public $parent_menu = ''; public $post_type = false; /*Dashboard: 'index.php' Posts: 'edit.php' Media: 'upload.php' Pages: 'edit.php?post_type=page' Comments: 'edit-comments.php' Custom Post Types: 'edit.php?post_type=your_post_type' Appearance: 'themes.php' Plugins: 'plugins.php' Users: 'users.php' Tools: 'tools.php' Settings: 'options-general.php' Network Settings: 'settings.php' WooCommerce : 'woocommerce' */ public function __construct() { // Register settings add_action( 'admin_init', array( $this, 'loadSettings' ) ); add_action( 'admin_init', array( $this, 'registerSettings' ) ); $this->plugins_paths = apply_filters('zebench_plugins_paths', array() ); // Add link to menu global $wp_filter; $real_order = $this->menu_order; while( isset( $wp_filter['admin_menu']->callbacks[$real_order] ) ) { $real_order++; } add_action( 'admin_menu', array( $this, 'addToMenu' ), $real_order ); // Pass configuration to Javascript //add_action( 'admin_enqueue_scripts', array( $this, 'configuration_to_javascript' ), 999 ); // Enqueue templates to be rendered in footer //add_action( 'admin_footer', array( $this, 'render_templates_in_footer' ) ); // Settings export call if ( !empty( $_REQUEST['export_settings'] ) ) { add_action( 'wp_loaded', array( $this, 'export' ) ); } // Settings import call if ( !empty( $_FILES[$this->option_page]['name']['import'] ) ) { add_action( 'wp_loaded', array( $this, 'import' ) ); } // Print settings import notice if ( isset( $_REQUEST[$this->option_page .'_imported'] ) ) { add_action( 'admin_notices', array( $this, 'print_import_notice' ) ); } if ( !class_exists( 'WP_Improved_Settings\WC_Improved_Settings_API' )) { require_once( dirname( __FILE__ ) . '/wp-improved-settings-api.class.php' ); } $this->WC_Improved_Settings_API = new WC_Improved_Settings_API( $this->getPluginID(), $this->getSettingsStructure() ); $key_name = $this->plugin_id . '_options_save'; if ( isset( $_REQUEST['save'] ) && isset( $_REQUEST[$key_name] ) && $_REQUEST[$key_name] ) { $this->saveSettings(); // echo " saving"; if ( method_exists( $this, 'on_save' ) ) { // echo "on save update"; $this->on_save(); } add_action( 'admin_notices', array( $this, 'print_saved_notice' ) ); } add_action( 'admin_notices', array( $this, 'maybe_print_notices' ) ); // Migration notices //add_action( 'admin_notices', array( $this, 'maybe_display_migration_notice' ), 1 ); // Delete migration notice //$this->hide_migration_notice(); } function getPluginID() { return $this->plugin_id; } function getOptionPage() { return $this->option_page; } function getMinimumCapability() { return $this->minimum_capability; } function saveSettings() { $nonce = isset( $_REQUEST['_zenonce'] ) ? $_REQUEST['_zenonce'] : false; if ( ! wp_verify_nonce( $nonce, 'zesave_settings' ) ) { $error_msg = __( 'Unable to submit this form, please refresh and try again.' ); return; } $this->WC_Improved_Settings_API->process_admin_options(); //$this->process_admin_options(); } /* function me() { $this->loadSettings(); $this->WC_Improved_Settings_API = WC_Improved_Settings_API( $this->getPluginID(), $this->getSettingsStructure() ); return $this->WC_Improved_Settings_API->process_admin_options(); }*/ function maybe_print_notices() { } function print_saved_notice() { ?>

settingsStructure = $this->getSettingsStructure(); //plouf( $this->settingsStructure ); die( 'oka6z4e4z64ze4' ); } /** * Add Settings link to menu * * @access public * @return voidaddToMenu */ public function addToMenu() { //die( 'menu to '.$this->parent_menu . ' page title = ' . $this->getPageTitle() .' menu = ' . $this->getMenuTitle() . ' cap ' . 'manage_options' . ' option page = ' . $this->getOptionPage() ); add_submenu_page( $this->parent_menu, $this->getPageTitle(), $this->getMenuTitle(), $this->getMinimumCapability(), $this->getOptionPage(), array( $this, 'settingsPage' ) ); } /** * Print settings page * * @access public * @return void */ public function settingsPage() { // Get current tab $current_tab = ( isset( $_GET['tab'] ) ) ? htmlspecialchars( $_GET['tab'] ) : $this->defaultSettingsTab; // plouf( $_POST ); // Print header $this->printHeader(); $this->printFields(); if ( count( $this->extendedActions ) ) foreach ( $this->extendedActions as $action => $function ) { if ( isset( $_REQUEST[$action] ) ) { if ( function_exists( $function) ) { $function(); } else { printf( __( 'Attention, fonction non définie %s' ), $function ); } } } $this->printFooter(); } public function registerSettings() { // Check if current user can manage plugin settings if ( !is_admin() ) { return; } // Iterate over tabs foreach ( $this->settingsStructure as $tab_key => $tab ) { // Register tab register_setting( $this->option_page .'_group_' . $tab_key, $this->option_page, array( $this, 'validateSettings' ) ); // Iterate over sections foreach ( $tab['sections'] as $section_key => $section ) { $settings_page_id = $this->plugin_id . '-admin-' . str_replace( '_', '-', $tab_key ); // Register section add_settings_section( $section_key, $section['title'], array( $this, 'print_section_info' ), $settings_page_id ); // Iterate over fields if( isset( $section['fields'] ) ) foreach ( $section['fields'] as $field_key => $field ) { // Register field add_settings_field( $this->plugin_id . '_' . $field_key, $field['title'], array( $this, 'print_field_' . $field['type'] ), $settings_page_id, $section_key, array( 'field_key' => $field_key, 'field' => $field, 'data-' . $this->plugin_id . '-setting-hint' => !empty( $field['hint'] ) ? $field['hint'] : null, ) ); } } } } function validateSettings() { return true; } function getActiveTab() { if ( isset( $_GET[ 'tab' ] ) ) { $active_tab = htmlspecialchars( $_GET[ 'tab' ] ); } elseif ( $this->defaultSettingsTab != '' ) { $active_tab = $this->defaultSettingsTab; } if ( !isset( $this->settingsStructure[$active_tab] ) ) { return false; } return $active_tab; } function printHeader() { $tabs = array(); foreach ( $this->settingsStructure as $setting_tab_slug => $setting_data ) { $tabs[$setting_tab_slug] = $setting_data['title']; } //echo '
'; ?>

getPageTitle() ); ?>

getActiveTab(); $parent_menu = $this->parent_menu; $parsed_url = parse_url( $parent_menu ); $extended_url = ''; if ( isset( $parsed_url['query'] ) && strlen( $parsed_url['query'] ) ) { $extended_url = '&' . $parsed_url['query']; } if ( property_exists($this, 'post_type' ) && $this->post_type ) { $action = 'edit.php'; } else { $action = 'admin.php'; } $action .= '?'; if ( $this->post_type ) { $action .= 'post_type=' . $this->post_type .'&'; } $action .= 'page=' . $this->getOptionPage(); if ($active_tab) { $action .= '&tab=' . $active_tab; } $page_link = '?'; if ( $this->post_type ) { $page_link .= 'post_type=' . $this->post_type .'&'; } $page_link .= 'page=' . $this->getOptionPage(); ?> getActiveTab() ) { return false; } /* $tab_data = $this->settingsStructure[$active_tab]; $defaults = array( 'title' => '', 'class' => '', 'description' => '', 'sections' => array(), ); $tab_data = wp_parse_args( $tab_data, $defaults ); $this->displayTabTitle( $active_tab, $tab_data ); */ } function printFields() { if (!$this->getActiveTab()) { return false; } $active_tab = $this->getActiveTab(); $tab_data = $this->settingsStructure[$active_tab]; //plouf($tab_data, " T AB DATA"); foreach ( $tab_data['sections'] as $section_id => $section ) { $defaults = array( 'title' => '', 'class' => '', 'description' => '', 'fields' => array(), 'html' => false, ); $section_data = wp_parse_args( $section, $defaults ); //plouf( $section ); ?>

WC_Improved_Settings_API->id = $active_tab; $section_fields = $section_data['fields']; $fields = array(); foreach ( $section_fields as $field ) { $fields[] = $field; } //plouf($fields, "on a fields"); $this->WC_Improved_Settings_API->generate_settings_html( $fields ); ?>

'; foreach ( $tab_data['footer']['actions'] as $action ) { // echo " ACTION = $action"; $param = false; if ( is_array( $action ) ) { list($object, $method) = $action; if ( method_exists( $object, $method ) ) { $object->$method(); } } elseif ( function_exists( $action ) ) { $action( $param ); } else { printf( __( 'Attention, fonction non définie %s' ), $action ); } //plouf($action, "action"); } } } } function printFooter() { ?> getActiveTab(); if ( $active_tab ) { $tab_data = $this->settingsStructure[$active_tab]; $this->tabFooter( $active_tab, $tab_data ); } ?>
' . __('Server information', '' ) . ''; if( function_exists('ini_get_all' ) ) { $ini_values = ini_get_all(); $timeout = $ini_values['max_execution_time']['local_value']; } else { $timeout = ''; } $bytes = memory_get_usage(); $s = array('o', 'Ko', 'Mo', 'Go', 'To', 'Po'); $e = floor(log($bytes)/log(1024)); $memory_usage = sprintf('%.2f '.$s[$e], ($bytes/pow(1024, floor($e)))); if ($timeout > 1000 ) { $timeout = round($timeout /1000,1); } $informations = array( 'Server time' => date('d/m/Y H:i:s'), 'Real path' => get_home_path(), 'PHP version' => phpversion(), 'Timeout' => $timeout .' s', 'Memory usage' => $memory_usage, ); if ( function_exists( 'sys_getloadavg') ) { $sys_getloadavg = sys_getloadavg(); if( is_array( $sys_getloadavg ) ){ $informations['Load'] = implode(', ', $sys_getloadavg ); } else { $informations['Load'] = $sys_getloadavg; } } foreach ($informations as $label => $value) { printf( "

%s %s

", $label, $value ); } } public function showLogs() { if ( !is_admin() ) { return false; } /*$current_plugin_page = $_REQUEST['page']; plouf($this->plugin_paths); if ( !isset( $this->plugin_paths[$current_plugin_page] ) ) { echo "no path"; return false; } $path = $this->plugin_paths[$current_plugin_page];*/ $path = $this->log_folder; $logs = glob( trailingslashit( $path ) . '*.log'); //plouf($logs, "LOGS"); if ($logs) foreach ($logs as $log_file) { $file_name = basename( $log_file ); $contents = file_get_contents( $log_file ); if (preg_match('#(\d+)-(\d+)-(\w+)\.log#', $file_name, $match)) { $date = $match[2] . '/' . $match[1]; echo '

'; printf( __("Fichier '%s' pour %s" ), $match[3], $date ); echo '

'; $lines = explode( "\n", $contents); foreach ( $lines as $line ) { //$line = preg_replace('#\{"body":".*?"},#ism', '-body-', $line); //$line = preg_replace( '#"raw":".*?","headers#ism', 'headers', $line ); $line = preg_replace( '#"body":"' ) ) { continue; } // not escaped echo "

" . ( $line ) . "\n"; } //plouf($contents); } } } } }