*/ class Wp_Database_Tools_Admin { /** * The ID of this plugin. * * @since 1.0.0 * @access private * @var string $plugin_name The ID of this plugin. */ private $plugin_name; /** * The version of this plugin. * * @since 1.0.0 * @access private * @var string $version The current version of this plugin. */ private $version; /** * Databse object. * * @since 1.0.0 * @access private * @var Wp_Database_Tools_Database $database Class manage database functions. */ private $database; /** * The class responsible for logic of manage license. * * @since 1.0.0 * @access protected * @var Wp_Database_Tools_License $license Manage the license functionalities. */ protected $license; /** * The class responsible for logic of manage cronjobs. * * @since 1.0.0 * @access protected * @var Wp_Database_Tools_Cronjobs $cronjobs Manage the cronjobs functionalities. */ protected $cronjobs; /** * The class responsible for logic of manage scanner. * * @since 1.0.0 * @access protected * @var Wp_Database_Tools_Scanner $scanner Manage the scanner functionalities. */ protected $scanner; /** * The class responsible for logic of manage feedback. * * @since 1.0.0 * @access protected * @var Wp_Database_Tools_Feedback $feedback Manage the feedback functionalities. */ protected $feedback; /** * Initialize the class and set its properties. * * @since 1.0.0 * @param string $plugin_name The name of this plugin. * @param string $version The version of this plugin. * @param Wp_Database_Tools_Database $database Database class. * @param Wp_Database_Tools_License $license Licence class. * @param Wp_Database_Tools_Scanner $scanner Scanner class. * @param Wp_Database_Tools_Cronjobs $cronjobs Cronjobs class. * @param Wp_Database_Tools_Feedback $feedback Feedbacl class. */ public function __construct( $plugin_name, $version, $database, $license, $scanner, $cronjobs, $feedback ) { require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wp-database-tools-logger.php'; $this->plugin_name = $plugin_name; $this->version = $version; $this->database = $database; $this->license = $license; $this->scanner = $scanner; $this->cronjobs = $cronjobs; $this->feedback = $feedback; } /** * Register the stylesheets for the admin area. * * @since 1.0.0 */ public function enqueue_styles() { wp_enqueue_style( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'css/wp-database-tools-admin.css', array(), $this->version, 'all' ); wp_enqueue_style( $this->plugin_name . '-choices.min.css', plugin_dir_url( __FILE__ ) . 'css/choices.min.css', array(), $this->version, 'all' ); } /** * Register the JavaScript for the admin area. * * @since 1.0.0 */ public function enqueue_scripts() { if ( str_contains( get_current_screen()->base, 'wp-db-tools' ) || str_contains( get_current_screen()->base, 'wp-database-tools' ) ) { $settings_page = $this->get_settings_pages(); if ( 'YES' === $settings_page['force_execute_scanner'] ) { // If not is dashboard and license. if ( 'toplevel_page_wp-database-tools' !== get_current_screen()->base && 'wp-db-tools_page_license' !== get_current_screen()->base ) { $name_script = 'wp-database-tools-force-scanner-status.js'; wp_enqueue_script( $this->plugin_name . $name_script, plugin_dir_url( __FILE__ ) . 'js/admin-ajax/' . $name_script, array( 'jquery' ), $this->version, true ); wp_register_script( $this->plugin_name . $name_script, plugin_dir_url( __FILE__ ) . 'js/admin-ajax/' . $name_script, array( 'jquery' ), $this->version, true ); wp_localize_script( $this->plugin_name . $name_script, 'ajax_var_check_force_scanner', array( 'url' => admin_url( 'admin-ajax.php?script=check_force_scanner' ), 'nonce' => wp_create_nonce( 'nonce_check_force_scanner' ), 'action' => 'check_force_scanner', 'image_error' => plugin_dir_url( __DIR__ ) . 'admin/img/eye-scanner-red.jpg', 'translations' => array( 'errors' => array( 'cron' => __( 'There seem to be problems running the cronjobs for this installation', 'wp-database-tools' ), 'attempts' => __( 'The number of attempts has been exceeded', 'wp-database-tools' ), ), 'success' => array( 'scanner' => __( "The scan was successful. Let's refresh your website", 'wp-database-tools' ), ), ), ) ); } } if ( 'toplevel_page_wp-database-tools' !== get_current_screen()->base && 'wp-db-tools_page_license' !== get_current_screen()->base && 'YES' !== $settings_page['force_execute_scanner'] ) { // Vars. wp_enqueue_script( $this->plugin_name . '-admin-vars.js', array(), plugin_dir_url( __FILE__ ) . 'js/wp-database-tools-admin-vars.js', array( 'jquery' ), $this->version, true ); wp_register_script( $this->plugin_name . '-admin-vars.js', plugin_dir_url( __FILE__ ) . 'js/wp-database-tools-admin-vars.js', array( 'jquery' ), $this->version, true ); wp_localize_script( $this->plugin_name . '-admin-vars.js', 'wpdbt_admin_vars', array( 'data' => $this->set_data_wpdbt_admin_vars(), ) ); // Libraries. wp_enqueue_script( $this->plugin_name . '-modal-js', plugin_dir_url( __FILE__ ) . 'js/libraries/micromodal.min.js', array(), $this->version, true ); wp_enqueue_script( $this->plugin_name . '-choices.min.js', plugin_dir_url( __FILE__ ) . 'js/libraries/choices.min.js', array(), '6.5.3', true ); wp_enqueue_script( $this->plugin_name . '-list-js', plugin_dir_url( __FILE__ ) . 'js/libraries/list.min.js', array(), '2.3.1', true ); // Main. wp_enqueue_script( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'js/wp-database-tools-admin.js', array( 'jquery' ), $this->version, true ); // Templates. wp_enqueue_script( $this->plugin_name . '-templates.js', plugin_dir_url( __FILE__ ) . 'js/templates.js', array( 'jquery' ), $this->version, true ); // Admin ajax. wp_enqueue_script( $this->plugin_name . '-scanner-js', array(), plugin_dir_url( __FILE__ ) . 'js/admin-ajax/wp-database-tools-scanner.js', array( $this->plugin_name . '-admin-vars.js' ), $this->version, true ); wp_enqueue_script( $this->plugin_name . '-feedback-js', array(), plugin_dir_url( __FILE__ ) . 'js/admin-ajax/wp-database-tools-feedback.js', array( $this->plugin_name . '-admin-vars.js' ), $this->version, true ); wp_enqueue_script( $this->plugin_name . '-remove-all-transients', array(), plugin_dir_url( __FILE__ ) . 'js/admin-ajax/wp-database-tools-remove-all-transients.js', array( $this->plugin_name . '-admin-vars.js' ), $this->version, true ); // Register admin ajax. wp_register_script( $this->plugin_name . '-scanner-js', plugin_dir_url( __FILE__ ) . 'js/admin-ajax/wp-database-tools-scanner.js', array( 'jquery' ), $this->version, true ); wp_register_script( $this->plugin_name . '-feedback-js', plugin_dir_url( __FILE__ ) . 'js/admin-ajax/wp-database-tools-feedback.js', array( 'jquery' ), $this->version, true ); wp_register_script( $this->plugin_name . '-remove-all-transients', plugin_dir_url( __FILE__ ) . 'js/admin-ajax/wp-database-tools-remove-all-transients.js', array( 'jquery' ), $this->version, true ); // Localiza admin ajax. // Scanner. wp_localize_script( $this->plugin_name . '-scanner-js', 'ajax_var_scanner', array( 'url' => admin_url( 'admin-ajax.php?script=init_scanner' ), 'nonce' => wp_create_nonce( 'nonce_scanner' ), 'action' => 'init_scanner', ) ); // Save feedback. wp_localize_script( $this->plugin_name . '-feedback-js', 'ajax_var', array( 'url' => admin_url( 'admin-ajax.php?script=feedback-user' ), 'nonce' => wp_create_nonce( 'feedback-user' ), 'action' => 'save_feedback_user', ) ); // Remove all transients. wp_localize_script( $this->plugin_name . '-remove-all-transients', 'ajax_var', array( 'url' => admin_url( 'admin-ajax.php?script=remove-all-transients' ), 'nonce' => wp_create_nonce( 'remove-all-transients' ), 'action' => 'remove_all_transients', ) ); // List. if ( 'wp-db-tools_page_general' === get_current_screen()->base ) { wp_enqueue_script( $this->plugin_name . '-main-list-common', plugin_dir_url( __FILE__ ) . 'js/main-list-common.js', array( $this->plugin_name . '-list-js' ), $this->version, true ); wp_enqueue_script( $this->plugin_name . '-main-list-js', plugin_dir_url( __FILE__ ) . 'js/main-list-general.js', array( $this->plugin_name . '-list-js' ), $this->version, true ); } elseif ( 'wp-db-tools_page_license' !== get_current_screen()->base ) { wp_enqueue_script( $this->plugin_name . '-main-list-common', plugin_dir_url( __FILE__ ) . 'js/main-list-common.js', array( $this->plugin_name . '-list-js' ), $this->version, true ); wp_enqueue_script( $this->plugin_name . '-templates-item-list-js', plugin_dir_url( __FILE__ ) . 'js/templates/item-list.js', array( $this->plugin_name . '-list-js' ), $this->version, true ); wp_enqueue_script( $this->plugin_name . '-main-list-js', plugin_dir_url( __FILE__ ) . 'js/main-list.js', array( $this->plugin_name . '-templates-item-list-js' ), $this->version, true ); wp_enqueue_script( $this->plugin_name . '-loading-status.js', plugin_dir_url( __FILE__ ) . 'js/admin-ajax/wp-database-tools-loading-status.js', array( $this->plugin_name . '-loading.js' ), $this->version, true ); wp_enqueue_script( $this->plugin_name . '-loading.js', plugin_dir_url( __FILE__ ) . 'js/admin-ajax/wp-database-tools-loading.js', array( 'jquery' ), $this->version, true ); // Save status. wp_localize_script( $this->plugin_name . '-loading-status.js', 'ajax_var_load_status', array( 'url' => admin_url( 'admin-ajax.php?script=load_data_status' ), 'nonce' => wp_create_nonce( 'load_data_status' ), 'action' => 'load_data_status', ) ); // Loading. wp_localize_script( $this->plugin_name . '-loading.js', 'ajax_var_load_data', array( 'url' => admin_url( 'admin-ajax.php?script=load_data' ), 'nonce' => wp_create_nonce( 'load_data' ), 'action' => 'load_data', ) ); } } } } /** * Return an array with the data to be used in the js files. * * @return array $data */ public function set_data_wpdbt_admin_vars() { $key = WPDBT_PREFIX . 'admin_nonce'; if ( ! isset( $_REQUEST[ $key ] ) ) { Wp_Database_Tools_Logger::error( 'Nonce error' ); wp_die( esc_html( __( 'Missing nonce', 'wp-database-tools' ) ) ); } if ( ! wp_verify_nonce( sanitize_key( $_REQUEST[ $key ] ), $key ) ) { Wp_Database_Tools_Logger::error( 'Nonce error' ); wp_die( esc_html( __( 'Nonce error', 'wp-database-tools' ) ) ); } global $wpdb; $license_key = $this->license->get_license_key_encrypt(); $api_domain = ( WPDBT_ENV === 'DEV' ) ? WPDBT_DEV_DOMAIN : WPDBT_PROD_DOMAIN; $current_page = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; if ( isset( $_GET['details'] ) ) { $current_page = 'details'; } $data = array( 'version' => WPDBT_VERSION, 'current_page' => $current_page, 'license_url' => home_url(), 'license_key' => $license_key, 'api_domain' => $api_domain, 'prefix' => $wpdb->prefix, 'admin_url' => plugin_dir_url( __DIR__ ) . 'admin/', 'pagination' => WPDBT_LIST_PAGINATION[0], 'translations' => array( 'thank_vote' => __( 'Thank you for your cooperation. Your choice has been registered', 'wp-database-tools' ), 'marketplace' => __( 'Marketplace', 'wp-database-tools' ), 'users_feedback' => __( 'Users feedback', 'wp-database-tools' ), 'reliability' => __( 'Reliability', 'wp-database-tools' ), 'votes' => __( 'Votes', 'wp-database-tools' ), 'likes' => __( 'Likes', 'wp-database-tools' ), 'dislikes' => __( 'Dislikes', 'wp-database-tools' ), 'rating' => __( 'Rating', 'wp-database-tools' ), 'website' => __( 'Website', 'wp-database-tools' ), 'download' => __( 'Download', 'wp-database-tools' ), 'remove' => __( 'Remove', 'wp-database-tools' ), 'edit' => __( 'Edit', 'wp-database-tools' ), 'empty' => __( 'Empty', 'wp-database-tools' ), 'optimize' => __( 'Optimize', 'wp-database-tools' ), 'repair' => __( 'Repair', 'wp-database-tools' ), 'details' => __( 'Details', 'wp-database-tools' ), 'refreshing' => __( 'Refreshing page', 'wp-database-tools' ), 'multiple' => __( 'Multiple', 'wp-database-tools' ), 'active' => __( 'Active', 'wp-database-tools' ), 'inactive' => __( 'Inactive', 'wp-database-tools' ), 'uninstalled' => __( 'Uninstalled', 'wp-database-tools' ), 'unknown' => __( 'Unknown', 'wp-database-tools' ), 'uncategorized' => __( 'Uncategorized', 'wp-database-tools' ), ), ); return $data; } /** * Register the menu for the admin area. * * @since 1.0.0 */ public function add_admin_menu() { $this->create_request_nonce(); add_menu_page( $this->plugin_name, 'WP DB Tools', 'manage_options', $this->plugin_name, array( $this, 'display_plugin_admin_page' ), '/wp-content/plugins/' . $this->plugin_name . '/admin/img/wp-database-tools-icon-admin.png' ); add_submenu_page( $this->plugin_name, __( 'Dashboard', 'wp-database-tools' ), __( 'Dashboard', 'wp-database-tools' ), 'manage_options', $this->plugin_name, array( $this, 'display_plugin_admin_page' ) ); add_submenu_page( $this->plugin_name, __( 'General', 'wp-database-tools' ), __( 'General', 'wp-database-tools' ), 'manage_options', 'general', array( $this, 'display_plugin_admin_page_general' ) ); add_submenu_page( $this->plugin_name, __( 'Tables', 'wp-database-tools' ), __( 'Tables', 'wp-database-tools' ), 'manage_options', 'tables', array( $this, 'display_plugin_admin_page_tables' ) ); add_submenu_page( $this->plugin_name, __( 'Options', 'wp-database-tools' ), __( 'Options', 'wp-database-tools' ), 'manage_options', 'options', array( $this, 'display_plugin_admin_page_options' ) ); add_submenu_page( $this->plugin_name, __( 'Transients', 'wp-database-tools' ), __( 'Transients', 'wp-database-tools' ), 'manage_options', 'transients', array( $this, 'display_plugin_admin_page_transients' ) ); add_submenu_page( $this->plugin_name, __( 'Cronjobs', 'wp-database-tools' ), __( 'Cronjobs', 'wp-database-tools' ), 'manage_options', 'cronjobs', array( $this, 'display_plugin_admin_page_cronjobs' ) ); add_submenu_page( $this->plugin_name, __( 'License', 'wp-database-tools' ), __( 'License', 'wp-database-tools' ), 'manage_options', 'license', array( $this, 'display_plugin_admin_page_license' ) ); } /** * Create a nonce for processing data * * @since 1.1.0 */ public function create_request_nonce() { $key = WPDBT_PREFIX . 'admin_nonce'; $_REQUEST[ $key ] = wp_create_nonce( $key ); } /** * Callback to WP Database Tools admin menu. * * @since 1.0.0 */ public function display_plugin_admin_page() { require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/partials/' . $this->plugin_name . '-admin-display.php'; } /** * Callback to General admin menu. * * @since 1.0.0 */ public function display_plugin_admin_page_general() { require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/partials/' . $this->plugin_name . '-admin-display-general.php'; } /** * Callback to Tables admin menu. * * @since 1.0.0 */ public function display_plugin_admin_page_tables() { require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/partials/' . $this->plugin_name . '-admin-display-tables.php'; } /** * Callback to Options admin menu. * * @since 1.0.0 */ public function display_plugin_admin_page_options() { require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/partials/' . $this->plugin_name . '-admin-display-options.php'; } /** * Callback to Transients admin menu. * * @since 1.0.0 */ public function display_plugin_admin_page_transients() { require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/partials/' . $this->plugin_name . '-admin-display-transients.php'; } /** * Callback to License admin menu. * * @since 1.0.0 */ public function display_plugin_admin_page_cronjobs() { require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/partials/' . $this->plugin_name . '-admin-display-cronjobs.php'; } /** * Callback to License admin menu. * * @since 1.0.0 */ public function display_plugin_admin_page_scheduled() { require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/partials/' . $this->plugin_name . '-admin-display-scheduled.php'; } /** * Callback to License admin menu. * * @since 1.0.0 */ public function display_plugin_admin_page_license() { require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/partials/' . $this->plugin_name . '-admin-display-license.php'; } /** * Active form license * * @since 1.0.0 */ public function active_plugin() { $this->license->form_action_license(); } /** * Call action forms * * @since 1.0.0 */ public function process_general() { $this->database->action_form_general(); } /** * Call tables action forms * * @since 1.0.0 */ public function process_tables() { $this->database->action_form_tables(); } /** * Call options action forms * * @since 1.0.0 */ public function process_options() { $this->database->action_form_options(); } /** * Call options action forms * * @since 1.0.0 */ public function process_transients() { $this->database->action_form_transients(); } /** * Call cronjobs action forms * * @since 1.0.0 */ public function process_cronjobs() { $this->database->action_form_cronjobs(); } /** * Register notifications * * @since 1.0.0 */ public function custom_notices() { $key = WPDBT_PREFIX . 'admin_nonce'; if ( ! isset( $_REQUEST[ $key ] ) ) { Wp_Database_Tools_Logger::error( 'Nonce error' ); wp_die( esc_html( __( 'Missing nonce', 'wp-database-tools' ) ) ); } if ( ! wp_verify_nonce( sanitize_key( $_REQUEST[ $key ] ), $key ) ) { Wp_Database_Tools_Logger::error( 'Nonce error' ); wp_die( esc_html( __( 'Nonce error', 'wp-database-tools' ) ) ); } // Pugin activation. $sl_activation = isset( $_GET[ WPDBT_PREFIX . 'sl_activation' ] ) ? sanitize_text_field( wp_unslash( $_GET[ WPDBT_PREFIX . 'sl_activation' ] ) ) : ''; $message = isset( $_GET['message'] ) ? sanitize_text_field( wp_unslash( $_GET['message'] ) ) : ''; $allowed_tags = array( 'br' => array(), 'p' => array(), 'strong' => array(), 'span' => array(), ); if ( ! empty( $sl_activation ) && ! empty( $message ) ) { switch ( $_GET[ WPDBT_PREFIX . 'sl_activation' ] ) { case 'false': $message = urldecode( $message );?>