resetter = new DB_Resetter(); $this->version = $version; $this->set_request($_REQUEST); $this->set_view_variables(); } private function set_request(array $request) { $this->request = $request; } private function set_view_variables() { $this->set_code(); $this->set_user(); $this->set_wp_tables(); } private function set_code() { $this->code = $this->generate_code(); } private function set_user() { $this->user = $this->resetter->get_user(); } private function set_wp_tables() { $this->wp_tables = $this->resetter->get_wp_tables(); } private function generate_code($length = 5) { return strtoupper(substr(md5(time()), 1, $length)); } public function run() { add_action('admin_init', array($this, 'reset')); add_action('admin_menu', array($this, 'add_tools_menu')); add_action('admin_action_install_wpr', array($this, 'install_wpr')); add_filter('plugin_action_links_' . plugin_basename(DB_RESET_FILE), array($this, 'plugin_action_links')); add_filter('plugin_row_meta', array($this, 'plugin_meta_links'), 10, 2); add_filter('admin_footer_text', array($this, 'admin_footer_text')); add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts')); } public function admin_enqueue_scripts() { $current_screen = get_current_screen(); if ($current_screen->id != 'plugins') { return; } wp_enqueue_script('db-reset', plugins_url('assets/js/database-reset-plugins.js', __FILE__), array('jquery'), $this->version, true); $vars = array(); $vars['info_link'] = admin_url('plugin-install.php?tab=plugin-information&plugin=wp-reset&TB_iframe=true&width=600&height=800'); $vars['install_link'] = wp_nonce_url(add_query_arg(array('action' => 'install-plugin', 'plugin' => 'wp-reset'), admin_url('update.php')), 'install-plugin_wp-reset'); wp_localize_script('db-reset', 'db_reset', $vars); } // admin_enqueue // additional powered by text in admin footer; only on plugin's page static function admin_footer_text($text) { $current_screen = get_current_screen(); if ($current_screen->id != 'tools_page_database-reset') { return $text; } $text = 'WP Database Reset v' . DB_RESET_VERSION . ' by ' . __('WebFactory Ltd', 'wordpress-database-reset') . '. Please rate the plugin ★★★★★. Thank you! ' . $text; return $text; } // admin_footer_text // add settings link to plugins page function plugin_action_links($links) { $settings_link = '' . __('Reset Database', 'wordpress-database-reset') . ''; array_unshift($links, $settings_link); return $links; } // plugin_action_links // add links to plugin's description in plugins table function plugin_meta_links($links, $file) { $support_link = '' . __('Support', 'wordpress-database-reset') . ''; if ($file == plugin_basename(DB_RESET_FILE)) { $links[] = $support_link; } return $links; } // plugin_meta_links // auto download / install / activate WPR plugin function install_wpr() { if (false === current_user_can('administrator')) { wp_die('Sorry, you have to be an admin to run this action.'); } $plugin_slug = 'wp-reset/wp-reset.php'; $plugin_zip = 'https://downloads.wordpress.org/plugin/wp-reset.latest-stable.zip'; @include_once ABSPATH . 'wp-admin/includes/plugin.php'; @include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; @include_once ABSPATH . 'wp-admin/includes/plugin-install.php'; @include_once ABSPATH . 'wp-admin/includes/file.php'; @include_once ABSPATH . 'wp-admin/includes/misc.php'; echo ''; echo '
'; echo 'If things are not done in a minute install the plugin manually via Plugins page

'; echo 'Starting ...

'; wp_cache_flush(); $upgrader = new Plugin_Upgrader(); echo 'Check if WP Reset is already installed ...
'; if ($this->is_plugin_installed($plugin_slug)) { echo 'WP Reset is already installed!

Making sure it\'s the latest version.
'; $upgrader->upgrade($plugin_slug); $installed = true; } else { echo 'Installing WP Reset.
'; $installed = $upgrader->install($plugin_zip); } wp_cache_flush(); if (!is_wp_error($installed) && $installed) { echo 'Activating WP Reset.
'; $activate = activate_plugin($plugin_slug); if (is_null($activate)) { echo 'WP Reset Activated.
'; echo ''; echo '
If you are not redirected in a few seconds - click here.'; } } else { echo 'Could not install WP Reset. You\'ll have to download and install manually.'; } echo '
'; } // install_wpr function is_plugin_installed($slug) { if (!function_exists('get_plugins')) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $all_plugins = get_plugins(); if (!empty($all_plugins[$slug])) { return true; } else { return false; } } // is_plugin_installed public function reset() { if ($this->form_is_safe_to_submit()) { try { $this->resetter->set_reactivate($this->request['db-reset-reactivate-theme-data']); $this->resetter->reset($this->request['db-reset-tables']); $this->handle_after_reset(); } catch (Exception $e) { $this->notice_error = $e->getMessage(); } } } private function form_is_safe_to_submit() { return isset($this->request['db-reset-code-confirm']) && $this->assert_request_variables_not_empty() && $this->assert_correct_code(); } private function handle_after_reset() { if (empty($this->request['db-reset-reactivate-theme-data'])) { wp_redirect(admin_url()); exit; } $this->notice_success = __('The selected tables were reset', 'wordpress-database-reset'); } private function assert_request_variables_not_empty() { $this->set_empty_request_key('db-reset-tables', array()); $this->set_empty_request_key('db-reset-reactivate-theme-data', false); return true; } private function set_empty_request_key($key, $default) { if (!array_key_exists($key, $this->request)) { $this->request[$key] = $default; } } private function assert_correct_code() { if ( $this->request['db-reset-code'] !== $this->request['db-reset-code-confirm'] ) { $this->notice_error = __('You entered the wrong security code', 'wordpress-database-reset'); return false; } return true; } public function add_tools_menu() { $plugin_page = add_management_page( __('Database Reset', 'wordpress-database-reset'), __('Database Reset', 'wordpress-database-reset'), 'manage_options', 'database-reset', array($this, 'render') ); add_action('load-' . $plugin_page, array($this, 'load_assets')); } public function render() { require_once(DB_RESET_PATH . '/views/index.php'); } public function load_assets() { $this->load_stylesheets(); $this->load_javascript(); } private function load_stylesheets() { wp_enqueue_style( 'bsmselect', plugins_url('assets/css/bsmselect.css', __FILE__), array(), $this->version ); wp_enqueue_style( 'database-reset', plugins_url('assets/css/database-reset.css', __FILE__), array('bsmselect'), $this->version ); } private function load_javascript() { wp_enqueue_script('jquery-ui-dialog'); wp_enqueue_script( 'bsmselect', plugins_url('assets/js/bsmselect.js', __FILE__), array('jquery'), $this->version, true ); wp_enqueue_script( 'bsmselect-compatibility', plugins_url('assets/js/bsmselect.compatibility.js', __FILE__), array('bsmselect'), $this->version, true ); wp_enqueue_script( 'database-reset', plugins_url('assets/js/database-reset.js', __FILE__), array('bsmselect', 'bsmselect-compatibility'), $this->version, true ); wp_enqueue_style('wp-jquery-ui-dialog'); wp_localize_script( 'database-reset', 'dbReset', $this->load_javascript_vars() ); } private function load_javascript_vars() { return array( 'confirmAlert' => __('Are you sure you want to continue? There is NO UNDO!', 'wordpress-database-reset'), 'selectTable' => __('Select Tables', 'wordpress-database-reset'), 'selectOneTable' => __('Please select at least one table to reset.', 'wordpress-database-reset'), 'wprInstallUrl' => add_query_arg(array('action' => 'install_wpr'), admin_url('admin.php')), 'wprDialogTitle' => 'WP Reset', ); } } endif;