File "Migrations.php"
Full Path: /home/attunedd/public_html/wp-content/plugins/wpide/App/Classes/Migrations.php
File size: 3.13 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace WPIDE\App\Classes;
use WPIDE\App\App;
use const WPIDE\Constants\DIR;
use const WPIDE\Constants\VERSION;
class Migrations
{
public static $version_key;
public static $installed_time_key;
public static $changelog_viewed_key;
public static $new_version;
public static $old_version;
public static $installed_time;
public static $changelog_viewed;
public static $migrations = array();
public static function init()
{
self::$version_key = self::get_version_key();
self::$installed_time_key = self::get_installed_time_key();
self::$changelog_viewed_key = self::get_changelog_viewed_key();
self::$new_version = VERSION;
self::$changelog_viewed = (bool)get_option(self::$changelog_viewed_key);
self::$old_version = get_option(self::$version_key);
if(defined('WPIDE_DEBUG_MIGRATION_OLD_VERSION')) {
self::$old_version = WPIDE_DEBUG_MIGRATION_OLD_VERSION;
}
self::$installed_time = intval(get_option(self::$installed_time_key));
if (empty(self::$installed_time)) {
self::$installed_time = time();
update_option(self::$installed_time_key, self::$installed_time);
}
add_action('init', [ __CLASS__, 'upgrade'], 10);
}
public static function get_version_key(): string
{
return App::instance()->prefix('version');
}
public static function get_installed_time_key(): string
{
return App::instance()->prefix('installed_time');
}
public static function get_changelog_viewed_key(): string
{
return App::instance()->prefix('changelog_viewed');
}
public static function get_migrations(): array
{
$files = glob(DIR.'migrations/migration-*.php');
$migrations = array();
foreach ($files as $file) {
preg_match('/migration\-(.+?)\.php/', $file, $matches);
$migrations[] = $matches[1];
}
return $migrations;
}
public static function upgrade()
{
if (self::$new_version !== self::$old_version) {
$migrations = self::get_migrations();
foreach ($migrations as $migration) {
if (self::$old_version < $migration) {
self::migrate($migration);
}
}
// End Migrations
update_option(self::$version_key, self::$new_version);
self::after_upgrade();
}
}
public static function migrate($version)
{
$path = DIR.'migrations/migration-' . $version . '.php';
if (file_exists($path)) {
require_once $path;
}
}
public static function after_upgrade()
{
self::set_changelog_viewed(false);
do_action(App::instance()->prefix('migration_complete'));
}
public static function has_unviewed_changelog(): bool
{
return !self::$changelog_viewed;
}
public static function set_changelog_viewed($viewed = true)
{
self::$changelog_viewed = $viewed;
update_option(self::$changelog_viewed_key, intval($viewed));
}
}