File "latest.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/redirection/database/schema/latest.php
File size: 7.2 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?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}";
    }
}