Create New Item
×
Item Type
File
Folder
Item Name
×
Search file in folder and subfolders...
File Manager
/
wp-content
/
plugins
/
redirection
/
database
/
schema
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php class Red_Latest_Database extends Red_Database_Upgrader { public function get_stages() { return ['create_tables' => __('Install Redirection tables', 'redirection'), 'create_groups' => __('Create basic data', 'redirection')]; } public function install() { global $wpdb; foreach ($this->get_stages() as $stage => $info) { $result = $this->{$stage}($wpdb); if (is_wp_error($result)) { if ($wpdb->last_error) { $result->add_data($wpdb->last_error); } return $result; } } red_set_options(array('database' => REDIRECTION_DB_VERSION)); return true; } public function remove() { global $wpdb; $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}redirection_items"); $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}redirection_logs"); $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}redirection_groups"); $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}redirection_modules"); $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}redirection_404"); delete_option('redirection_lookup'); delete_option('redirection_post'); delete_option('redirection_root'); delete_option('redirection_index'); delete_option('redirection_options'); delete_option(Red_Database_Status::OLD_DB_VERSION); } public function get_missing_tables() { global $wpdb; $tables = array_keys($this->get_all_tables()); $missing = []; foreach ($tables as $table) { $result = $wpdb->query($wpdb->prepare('SHOW TABLES LIKE %s', $table)); if (intval($result, 10) !== 1) { $missing[] = $table; } } return $missing; } public function get_table_schema() { global $wpdb; $tables = array_keys($this->get_all_tables()); $show = array(); foreach ($tables as $table) { $row = $wpdb->get_row('SHOW CREATE TABLE ' . $table, ARRAY_N); if ($row) { $show = array_merge($show, explode("\n", $row[1])); $show[] = ''; } else { $show[] = sprintf(__('Table "%s" is missing', 'redirection'), $table); } } return $show; } public function get_all_tables() { global $wpdb; $charset_collate = $this->get_charset(); return array("{$wpdb->prefix}redirection_items" => $this->create_items_sql($wpdb->prefix, $charset_collate), "{$wpdb->prefix}redirection_groups" => $this->create_groups_sql($wpdb->prefix, $charset_collate), "{$wpdb->prefix}redirection_logs" => $this->create_log_sql($wpdb->prefix, $charset_collate), "{$wpdb->prefix}redirection_404" => $this->create_404_sql($wpdb->prefix, $charset_collate)); } public function create_groups($wpdb, $is_live = true) { if (!$is_live) { return true; } $defaults = [['name' => __('Redirections', 'redirection'), 'module_id' => 1, 'position' => 0], ['name' => __('Modified Posts', 'redirection'), 'module_id' => 1, 'position' => 1]]; $existing_groups = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->prefix}redirection_groups"); if (intval($existing_groups, 10) === 0) { $wpdb->insert($wpdb->prefix . 'redirection_groups', $defaults[0]); $wpdb->insert($wpdb->prefix . 'redirection_groups', $defaults[1]); } $group = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}redirection_groups LIMIT 1"); if ($group) { red_set_options(array('last_group_id' => $group->id)); } return true; } public function create_tables($wpdb) { global $wpdb; foreach ($this->get_all_tables() as $table => $sql) { $sql = preg_replace('/[ \\t]{2,}/', '', $sql); $this->do_query($wpdb, $sql); } return true; } private function create_items_sql($prefix, $charset_collate) { return "CREATE TABLE IF NOT EXISTS `{$prefix}redirection_items` (\n\t\t\t`id` int(11) unsigned NOT NULL AUTO_INCREMENT,\n\t\t\t`url` mediumtext NOT NULL,\n\t\t\t`match_url` VARCHAR(2000) DEFAULT NULL,\n \t\t\t`match_data` TEXT,\n\t\t\t`regex` INT(11) unsigned NOT NULL DEFAULT '0',\n\t\t\t`position` INT(11) unsigned NOT NULL DEFAULT '0',\n\t\t\t`last_count` INT(10) unsigned NOT NULL DEFAULT '0',\n\t\t\t`last_access` datetime NOT NULL DEFAULT '1970-01-01 00:00:00',\n\t\t\t`group_id` INT(11) NOT NULL DEFAULT '0',\n\t\t\t`status` enum('enabled','disabled') NOT NULL DEFAULT 'enabled',\n\t\t\t`action_type` VARCHAR(20) NOT NULL,\n\t\t\t`action_code` INT(11) unsigned NOT NULL,\n\t\t\t`action_data` MEDIUMTEXT,\n\t\t\t`match_type` VARCHAR(20) NOT NULL,\n\t\t\t`title` TEXT,\n\t\t\tPRIMARY KEY (`id`),\n\t\t\tKEY `url` (`url`(191)),\n\t\t\tKEY `status` (`status`),\n\t\t\tKEY `regex` (`regex`),\n\t\t\tKEY `group_idpos` (`group_id`,`position`),\n\t\t\tKEY `group` (`group_id`),\n\t\t\tKEY `match_url` (`match_url`(191))\n\t ) {$charset_collate}"; } private function create_groups_sql($prefix, $charset_collate) { return "CREATE TABLE IF NOT EXISTS `{$prefix}redirection_groups` (\n\t\t\t`id` int(11) unsigned NOT NULL AUTO_INCREMENT,\n\t\t\t`name` VARCHAR(50) NOT NULL,\n\t\t\t`tracking` INT(11) NOT NULL DEFAULT '1',\n\t\t\t`module_id` INT(11) unsigned NOT NULL DEFAULT '0',\n\t\t\t`status` enum('enabled','disabled') NOT NULL DEFAULT 'enabled',\n\t\t\t`position` INT(11) unsigned NOT NULL DEFAULT '0',\n\t\t\tPRIMARY KEY (`id`),\n\t\t\tKEY `module_id` (`module_id`),\n\t\t\tKEY `status` (`status`)\n\t\t) {$charset_collate}"; } private function create_log_sql($prefix, $charset_collate) { return "CREATE TABLE IF NOT EXISTS `{$prefix}redirection_logs` (\n\t\t\t`id` int(11) unsigned NOT NULL AUTO_INCREMENT,\n\t\t\t`created` datetime NOT NULL,\n\t\t\t`url` MEDIUMTEXT NOT NULL,\n\t\t\t`domain` VARCHAR(255) DEFAULT NULL,\n\t\t\t`sent_to` MEDIUMTEXT,\n\t\t\t`agent` MEDIUMTEXT,\n\t\t\t`referrer` MEDIUMTEXT,\n\t\t\t`http_code` INT(11) unsigned NOT NULL DEFAULT '0',\n\t\t\t`request_method` VARCHAR(10) DEFAULT NULL,\n\t\t\t`request_data` MEDIUMTEXT,\n\t\t\t`redirect_by` VARCHAR(50) DEFAULT NULL,\n\t\t\t`redirection_id` INT(11) unsigned DEFAULT NULL,\n\t\t\t`ip` VARCHAR(45) DEFAULT NULL,\n\t\t\tPRIMARY KEY (`id`),\n\t\t\tKEY `created` (`created`),\n\t\t\tKEY `redirection_id` (`redirection_id`),\n\t\t\tKEY `ip` (`ip`)\n\t \t) {$charset_collate}"; } private function create_404_sql($prefix, $charset_collate) { return "CREATE TABLE IF NOT EXISTS `{$prefix}redirection_404` (\n\t\t\t`id` int(11) unsigned NOT NULL AUTO_INCREMENT,\n\t\t\t`created` datetime NOT NULL,\n\t\t\t`url` MEDIUMTEXT NOT NULL,\n\t\t\t`domain` VARCHAR(255) DEFAULT NULL,\n\t\t\t`agent` VARCHAR(255) DEFAULT NULL,\n\t\t\t`referrer` VARCHAR(255) DEFAULT NULL,\n\t\t\t`http_code` INT(11) unsigned NOT NULL DEFAULT '0',\n\t\t\t`request_method` VARCHAR(10) DEFAULT NULL,\n\t\t\t`request_data` MEDIUMTEXT,\n\t\t\t`ip` VARCHAR(45) DEFAULT NULL,\n\t\t\tPRIMARY KEY (`id`),\n\t\t\tKEY `created` (`created`),\n\t\t\tKEY `referrer` (`referrer`(191)),\n\t\t\tKEY `ip` (`ip`)\n\t \t) {$charset_collate}"; } }