/**
  * Finishes clone operation
  *
  * @subcommand finish-restore-site
  *
  * @when before_wp_load
  *
  */
 public function finishRestore($args, $assoc_args)
 {
     define('SHORTINIT', true);
     $wpConfigPath = \WP_CLI\Utils\locate_wp_config();
     require_once $wpConfigPath;
     require ABSPATH . WPINC . '/formatting.php';
     require ABSPATH . WPINC . '/link-template.php';
     require ABSPATH . WPINC . '/shortcodes.php';
     require ABSPATH . WPINC . '/taxonomy.php';
     wp_plugin_directory_constants();
     require_once WP_PLUGIN_DIR . '/versionpress/bootstrap.php';
     $versionPressContainer = DIContainer::getConfiguredInstance();
     /** @var ActionsDefinitionRepository $actionsDefinitionRepository */
     $actionsDefinitionRepository = $versionPressContainer->resolve(VersionPressServices::ACTIONS_DEFINITION_REPOSITORY);
     $actionsDefinitionRepository->restoreAllDefinitionFilesFromHistory();
     // Truncate tables
     /** @var Database $database */
     $database = $versionPressContainer->resolve(VersionPressServices::DATABASE);
     /** @var DbSchemaInfo $dbSchema */
     $dbSchema = $versionPressContainer->resolve(VersionPressServices::DB_SCHEMA);
     $tables = array_map(function ($entityName) use($dbSchema) {
         return $dbSchema->getPrefixedTableName($entityName);
     }, array_merge($dbSchema->getAllEntityNames(), array_map(function ($referenceDetails) {
         return $referenceDetails['junction-table'];
     }, $dbSchema->getAllMnReferences())));
     $tables = array_filter($tables, function ($table) use($database) {
         return $table !== $database->options;
     });
     foreach ($tables as $table) {
         $truncateCmd = "TRUNCATE TABLE `{$table}`";
         @$database->query($truncateCmd);
         // Intentional @ - not existing table is ok for us but TRUNCATE ends with error
     }
     // Create VersionPress tables
     /** @var \VersionPress\Initialization\Initializer $initializer */
     $initializer = $versionPressContainer->resolve(VersionPressServices::INITIALIZER);
     $initializer->createVersionPressTables();
     WP_CLI::success("VersionPress tables created");
     // Install Custom merge driver
     MergeDriverInstaller::installMergeDriver(VP_PROJECT_ROOT, VERSIONPRESS_PLUGIN_DIR, VP_VPDB_DIR);
     WP_CLI::success("Git merge driver added");
     // Run synchronization
     /** @var SynchronizationProcess $syncProcess */
     $syncProcess = $versionPressContainer->resolve(VersionPressServices::SYNCHRONIZATION_PROCESS);
     $syncProcess->synchronizeAll();
     WP_CLI::success("Database synchronized");
     VPCommandUtils::runWpCliCommand('vp-internal', 'flush-regenerable-values', ['require' => __FILE__]);
 }
Beispiel #2
0
<?php

use Nette\Caching\Storages\FileStorage;
use Nette\Loaders\RobotLoader;
use Tracy\Debugger;
use VersionPress\DI\DIContainer;
use VersionPress\DI\VersionPressServices;
define('VERSIONPRESS_PLUGIN_DIR', __DIR__);
define('VERSIONPRESS_MIRRORING_DIR', WP_CONTENT_DIR . '/vpdb');
define('VERSIONPRESS_TEMP_DIR', VERSIONPRESS_PLUGIN_DIR . '/temp');
define('VERSIONPRESS_ACTIVATION_FILE', VERSIONPRESS_MIRRORING_DIR . '/.active');
require_once VERSIONPRESS_PLUGIN_DIR . '/versionpress-functions.php';
if (defined('DOING_AJAX')) {
    header("Content-Type: application/json");
}
Debugger::enable(Debugger::DEVELOPMENT, VERSIONPRESS_PLUGIN_DIR . '/log');
$robotLoader = new RobotLoader();
$robotLoader->addDirectory(VERSIONPRESS_PLUGIN_DIR . '/src');
$robotLoader->setCacheStorage(new FileStorage(VERSIONPRESS_PLUGIN_DIR . '/temp'));
$robotLoader->register();
global $versionPressContainer;
$versionPressContainer = DIContainer::getConfiguredInstance();
 /**
  * @return DIContainer
  */
 public static function getConfiguredInstance()
 {
     if (self::$instance != null) {
         return self::$instance;
     }
     self::$instance = $dic = new DIContainer();
     $dic->register(VersionPressServices::WPDB, function () {
         global $wpdb;
         return $wpdb;
     });
     $dic->register(VersionPressServices::DATABASE, function () use($dic) {
         return new Database($dic->resolve(VersionPressServices::WPDB));
     });
     $dic->register(VersionPressServices::STORAGE_FACTORY, function () use($dic) {
         global $wp_taxonomies;
         return new StorageFactory(VP_VPDB_DIR, $dic->resolve(VersionPressServices::DB_SCHEMA), $dic->resolve(VersionPressServices::DATABASE), array_keys((array) $wp_taxonomies), $dic->resolve(VersionPressServices::CHANGEINFO_FACTORY), $dic->resolve(VersionPressServices::TABLE_SCHEMA_STORAGE));
     });
     $dic->register(VersionPressServices::MIRROR, function () use($dic) {
         return new Mirror($dic->resolve(VersionPressServices::STORAGE_FACTORY), $dic->resolve(VersionPressServices::URL_REPLACER));
     });
     $dic->register(VersionPressServices::DB_SCHEMA, function () {
         global $table_prefix, $wp_db_version;
         return new DbSchemaInfo(new ActivePluginsVPFilesIterator('schema.yml'), $table_prefix, $wp_db_version);
     });
     $dic->register(VersionPressServices::ACTIONS_DEFINITION_REPOSITORY, function () use($dic) {
         return new ActionsDefinitionRepository(VERSIONPRESS_TEMP_DIR . '/actions', $dic->resolve(VersionPressServices::GIT_REPOSITORY));
     });
     $dic->register(VersionPressServices::ACTIONSINFO_PROVIDER_ALL_PLUGINS, function () use($dic) {
         return new ActionsInfoProvider($dic->resolve(VersionPressServices::ACTIONS_DEFINITION_REPOSITORY)->getAllDefinitionFiles());
     });
     $dic->register(VersionPressServices::ACTIONSINFO_PROVIDER_ACTIVE_PLUGINS, function () {
         return new ActionsInfoProvider(new ActivePluginsVPFilesIterator('actions.yml'));
     });
     $dic->register(VersionPressServices::CHANGEINFO_FACTORY, function () use($dic) {
         return new ChangeInfoFactory($dic->resolve(VersionPressServices::DB_SCHEMA), $dic->resolve(VersionPressServices::ACTIONSINFO_PROVIDER_ACTIVE_PLUGINS));
     });
     $dic->register(VersionPressServices::COMMIT_MESSAGE_PARSER, function () use($dic) {
         return new CommitMessageParser($dic->resolve(VersionPressServices::DB_SCHEMA), $dic->resolve(VersionPressServices::ACTIONSINFO_PROVIDER_ALL_PLUGINS));
     });
     $dic->register(VersionPressServices::WPDB_MIRROR_BRIDGE, function () use($dic) {
         return new WpdbMirrorBridge($dic->resolve(VersionPressServices::DATABASE), $dic->resolve(VersionPressServices::MIRROR), $dic->resolve(VersionPressServices::DB_SCHEMA), $dic->resolve(VersionPressServices::VPID_REPOSITORY), $dic->resolve(VersionPressServices::SHORTCODES_REPLACER));
     });
     $dic->register(VersionPressServices::COMMITTER, function () use($dic) {
         return new Committer($dic->resolve(VersionPressServices::MIRROR), $dic->resolve(VersionPressServices::GIT_REPOSITORY), $dic->resolve(VersionPressServices::STORAGE_FACTORY));
     });
     $dic->register(VersionPressServices::INITIALIZER, function () use($dic) {
         return new Initializer($dic->resolve(VersionPressServices::DATABASE), $dic->resolve(VersionPressServices::DB_SCHEMA), $dic->resolve(VersionPressServices::STORAGE_FACTORY), $dic->resolve(VersionPressServices::SYNCHRONIZER_FACTORY), $dic->resolve(VersionPressServices::GIT_REPOSITORY), $dic->resolve(VersionPressServices::URL_REPLACER), $dic->resolve(VersionPressServices::VPID_REPOSITORY), $dic->resolve(VersionPressServices::SHORTCODES_REPLACER), $dic->resolve(VersionPressServices::CHANGEINFO_FACTORY), $dic->resolve(VersionPressServices::ACTIONS_DEFINITION_REPOSITORY));
     });
     $dic->register(VersionPressServices::SYNCHRONIZER_FACTORY, function () use($dic) {
         return new SynchronizerFactory($dic->resolve(VersionPressServices::STORAGE_FACTORY), $dic->resolve(VersionPressServices::DATABASE), $dic->resolve(VersionPressServices::DB_SCHEMA), $dic->resolve(VersionPressServices::VPID_REPOSITORY), $dic->resolve(VersionPressServices::URL_REPLACER), $dic->resolve(VersionPressServices::SHORTCODES_REPLACER), $dic->resolve(VersionPressServices::TABLE_SCHEMA_STORAGE));
     });
     $dic->register(VersionPressServices::SYNCHRONIZATION_PROCESS, function () use($dic) {
         return new SynchronizationProcess($dic->resolve(VersionPressServices::SYNCHRONIZER_FACTORY));
     });
     $dic->register(VersionPressServices::REVERTER, function () use($dic) {
         return new Reverter($dic->resolve(VersionPressServices::SYNCHRONIZATION_PROCESS), $dic->resolve(VersionPressServices::DATABASE), $dic->resolve(VersionPressServices::COMMITTER), $dic->resolve(VersionPressServices::GIT_REPOSITORY), $dic->resolve(VersionPressServices::DB_SCHEMA), $dic->resolve(VersionPressServices::STORAGE_FACTORY), $dic->resolve(VersionPressServices::COMMIT_MESSAGE_PARSER));
     });
     $dic->register(VersionPressServices::GIT_REPOSITORY, function () {
         return new GitRepository(VP_PROJECT_ROOT, VERSIONPRESS_TEMP_DIR, VERSIONPRESS_COMMIT_MESSAGE_PREFIX, VP_GIT_BINARY);
     });
     $dic->register(VersionPressServices::VPID_REPOSITORY, function () use($dic) {
         return new VpidRepository($dic->resolve(VersionPressServices::DATABASE), $dic->resolve(VersionPressServices::DB_SCHEMA));
     });
     $dic->register(VersionPressServices::URL_REPLACER, function () {
         return new AbsoluteUrlReplacer(get_home_url());
     });
     $dic->register(VersionPressServices::SHORTCODES_REPLACER, function () use($dic) {
         return new ShortcodesReplacer($dic->resolve(VersionPressServices::SHORTCODES_INFO), $dic->resolve(VersionPressServices::VPID_REPOSITORY));
     });
     $dic->register(VersionPressServices::SHORTCODES_INFO, function () {
         return new ShortcodesInfo(new ActivePluginsVPFilesIterator('shortcodes.yml'));
     });
     $dic->register(VersionPressServices::SQL_QUERY_PARSER, function () use($dic) {
         return new SqlQueryParser($dic->resolve(VersionPressServices::DB_SCHEMA), $dic->resolve(VersionPressServices::DATABASE));
     });
     $dic->register(VersionPressServices::TABLE_SCHEMA_STORAGE, function () use($dic) {
         return new TableSchemaStorage($dic->resolve(VersionPressServices::DATABASE), VP_VPDB_DIR . '/.schema');
     });
     return self::$instance;
 }
Beispiel #4
0
 /**
  * @return DIContainer
  */
 public static function getConfiguredInstance()
 {
     if (self::$instance != null) {
         return self::$instance;
     }
     self::$instance = $dic = new DIContainer();
     $dic->register(VersionPressServices::VP_CONFIGURATION, function () {
         return new VersionPressConfig();
     });
     $dic->register(VersionPressServices::WPDB, function () {
         global $wpdb;
         return $wpdb;
     });
     $dic->register(VersionPressServices::STORAGE_FACTORY, function () use($dic) {
         global $wp_taxonomies;
         return new StorageFactory(VERSIONPRESS_MIRRORING_DIR, $dic->resolve(VersionPressServices::DB_SCHEMA), $dic->resolve(VersionPressServices::WPDB), array_keys((array) $wp_taxonomies));
     });
     $dic->register(VersionPressServices::MIRROR, function () use($dic) {
         return new Mirror($dic->resolve(VersionPressServices::STORAGE_FACTORY), $dic->resolve(VersionPressServices::URL_REPLACER));
     });
     $dic->register(VersionPressServices::DB_SCHEMA, function () {
         global $table_prefix, $wp_db_version;
         return new DbSchemaInfo(VERSIONPRESS_PLUGIN_DIR . '/src/Database/wordpress-schema.neon', $table_prefix, $wp_db_version);
     });
     $dic->register(VersionPressServices::WPDB_MIRROR_BRIDGE, function () use($dic) {
         return new WpdbMirrorBridge($dic->resolve(VersionPressServices::WPDB), $dic->resolve(VersionPressServices::MIRROR), $dic->resolve(VersionPressServices::DB_SCHEMA), $dic->resolve(VersionPressServices::VPID_REPOSITORY));
     });
     $dic->register(VersionPressServices::COMMITTER, function () use($dic) {
         return new Committer($dic->resolve(VersionPressServices::MIRROR), $dic->resolve(VersionPressServices::REPOSITORY), $dic->resolve(VersionPressServices::STORAGE_FACTORY));
     });
     $dic->register(VersionPressServices::INITIALIZER, function () use($dic) {
         return new Initializer($dic->resolve(VersionPressServices::WPDB), $dic->resolve(VersionPressServices::DB_SCHEMA), $dic->resolve(VersionPressServices::STORAGE_FACTORY), $dic->resolve(VersionPressServices::SYNCHRONIZER_FACTORY), $dic->resolve(VersionPressServices::REPOSITORY), $dic->resolve(VersionPressServices::URL_REPLACER), $dic->resolve(VersionPressServices::VPID_REPOSITORY));
     });
     $dic->register(VersionPressServices::SYNCHRONIZER_FACTORY, function () use($dic) {
         return new SynchronizerFactory($dic->resolve(VersionPressServices::STORAGE_FACTORY), $dic->resolve(VersionPressServices::WPDB), $dic->resolve(VersionPressServices::DB_SCHEMA), $dic->resolve(VersionPressServices::URL_REPLACER));
     });
     $dic->register(VersionPressServices::SYNCHRONIZATION_PROCESS, function () use($dic) {
         return new SynchronizationProcess($dic->resolve(VersionPressServices::SYNCHRONIZER_FACTORY));
     });
     $dic->register(VersionPressServices::REVERTER, function () use($dic) {
         return new Reverter($dic->resolve(VersionPressServices::SYNCHRONIZATION_PROCESS), $dic->resolve(VersionPressServices::WPDB), $dic->resolve(VersionPressServices::COMMITTER), $dic->resolve(VersionPressServices::REPOSITORY), $dic->resolve(VersionPressServices::DB_SCHEMA), $dic->resolve(VersionPressServices::STORAGE_FACTORY));
     });
     $dic->register(VersionPressServices::REPOSITORY, function () use($dic) {
         /** @var VersionPressConfig $vpConfig */
         $vpConfig = $dic->resolve(VersionPressServices::VP_CONFIGURATION);
         return new GitRepository(ABSPATH, VERSIONPRESS_TEMP_DIR, "[VP] ", $vpConfig->gitBinary);
     });
     $dic->register(VersionPressServices::VPID_REPOSITORY, function () use($dic) {
         return new VpidRepository($dic->resolve(VersionPressServices::WPDB), $dic->resolve(VersionPressServices::DB_SCHEMA));
     });
     $dic->register(VersionPressServices::URL_REPLACER, function () {
         return new AbsoluteUrlReplacer(get_site_url());
     });
     return self::$instance;
 }
 /**
  * Defines global constants, container and wpdb dynamic mapping of value references.
  * It's not pretty, but makes the mapping functions very flexible (they can have various dependecies).
  */
 private static function defineGlobalVariables()
 {
     global $versionPressContainer, $wpdb, $wp_taxonomies;
     defined('VERSIONPRESS_PLUGIN_DIR') || define('VERSIONPRESS_PLUGIN_DIR', self::$testConfig->testSite->path . '/wp-content/plugins/versionpress');
     defined('VP_VPDB_DIR') || define('VP_VPDB_DIR', self::$testConfig->testSite->path . '/wp-content/vpdb');
     $versionPressContainer = DIContainer::getConfiguredInstance();
     $wpdb = self::$wpdb;
     $rawTaxonomies = self::$wpAutomation->runWpCliCommand('taxonomy', 'list', ['format' => 'json', 'fields' => 'name']);
     $taxonomies = array_column(json_decode($rawTaxonomies, true), 'name');
     $wp_taxonomies = array_combine($taxonomies, $taxonomies);
 }