File "database.php"

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

Download   Open   Edit   Advanced Editor   Back

<?php

require_once __DIR__ . '/database-status.php';
require_once __DIR__ . '/database-upgrader.php';
class Red_Database
{
    public function get_upgrades_for_version($current_version, $current_stage)
    {
        if (empty($current_version)) {
            return [['version' => REDIRECTION_DB_VERSION, 'file' => 'latest.php', 'class' => 'Red_Latest_Database']];
        }
        $upgraders = [];
        $found = false;
        foreach ($this->get_upgrades() as $upgrade) {
            if (!$found) {
                $upgrader = Red_Database_Upgrader::get($upgrade);
                $stage_present = in_array($current_stage, array_keys($upgrader->get_stages()), true);
                $same_version = $current_stage === false && version_compare($upgrade['version'], $current_version, 'gt');
                if ($stage_present || $same_version) {
                    $found = true;
                }
            }
            if ($found) {
                $upgraders[] = $upgrade;
            }
        }
        return $upgraders;
    }
    public function apply_upgrade(Red_Database_Status $status)
    {
        $upgraders = $this->get_upgrades_for_version($status->get_current_version(), $status->get_current_stage());
        if (count($upgraders) === 0) {
            $status->set_error('No upgrades found for version ' . $status->get_current_version());
            return;
        }
        if ($status->get_current_stage() === false) {
            if ($status->needs_installing()) {
                $status->start_install($upgraders);
            } else {
                $status->start_upgrade($upgraders);
            }
        }
        $upgrader = Red_Database_Upgrader::get($upgraders[0]);
        $upgrader->perform_stage($status);
        if (!$status->is_error()) {
            $status->set_next_stage();
        }
    }
    public static function apply_to_sites($callback)
    {
        if (is_multisite() && (is_network_admin() || defined('WP_CLI') && WP_CLI)) {
            $total = get_sites(['count' => true]);
            $per_page = 100;
            for ($offset = 0; $offset < $total; $offset += $per_page) {
                array_map(function ($site) use($callback) {
                    switch_to_blog($site->blog_id);
                    $callback();
                    restore_current_blog();
                }, get_sites(['number' => $per_page, 'offset' => $offset]));
            }
            return;
        }
        $callback();
    }
    public static function get_latest_database()
    {
        include_once dirname(__FILE__) . '/schema/latest.php';
        return new Red_Latest_Database();
    }
    public function get_upgrades()
    {
        return [['version' => '2.0.1', 'file' => '201.php', 'class' => 'Red_Database_201'], ['version' => '2.1.16', 'file' => '216.php', 'class' => 'Red_Database_216'], ['version' => '2.2', 'file' => '220.php', 'class' => 'Red_Database_220'], ['version' => '2.3.1', 'file' => '231.php', 'class' => 'Red_Database_231'], ['version' => '2.3.2', 'file' => '232.php', 'class' => 'Red_Database_232'], ['version' => '2.3.3', 'file' => '233.php', 'class' => 'Red_Database_233'], ['version' => '2.4', 'file' => '240.php', 'class' => 'Red_Database_240'], ['version' => '4.0', 'file' => '400.php', 'class' => 'Red_Database_400'], ['version' => '4.1', 'file' => '410.php', 'class' => 'Red_Database_410'], ['version' => '4.2', 'file' => '420.php', 'class' => 'Red_Database_420']];
    }
}