File "FinalizeComplete.php"
Full Path: /home/naijiwfb/sabisentinel.com/wp-content/plugins/wp-migrate-db-pro/class/Pro/Migration/FinalizeComplete.php
File size: 7.1 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace DeliciousBrains\WPMDB\Pro\Migration;
use DeliciousBrains\WPMDB\Common\Error\ErrorLog;
use DeliciousBrains\WPMDB\Common\FormData\FormData;
use DeliciousBrains\WPMDB\Common\Http\Helper;
use DeliciousBrains\WPMDB\Common\Http\Http;
use DeliciousBrains\WPMDB\Common\Http\Scramble;
use DeliciousBrains\WPMDB\Common\Http\WPMDBRestAPIServer;
use DeliciousBrains\WPMDB\Common\Migration\FinalizeMigration;
use DeliciousBrains\WPMDB\Common\Migration\Flush as Migration_Flush;
use DeliciousBrains\WPMDB\Common\Migration\MigrationManager;
use DeliciousBrains\WPMDB\Common\MigrationPersistence\Persistence;
use DeliciousBrains\WPMDB\Common\MigrationState\MigrationStateManager;
use DeliciousBrains\WPMDB\Common\Properties\Properties;
use DeliciousBrains\WPMDB\Common\Settings\Settings;
class FinalizeComplete
{
/**
* @var Scramble
*/
private $scrambler;
/**
* @var MigrationStateManager
*/
private $migration_state_manager;
/**
* @var Http
*/
private $http;
/**
* @var Helper
*/
private $http_helper;
/**
* @var Properties
*/
private $props;
/**
* @var ErrorLog
*/
private $error_log;
/**
* @var MigrationManager
*/
private $migration_manager;
/**
* @var FormData
*/
private $form_data;
/**
* @var FinalizeMigration
*/
private $finalize;
/**
* @var Settings
*/
private $settings;
/**
* @var WPMDBRestAPIServer
*/
private $rest_API_server;
/**
* @var Migration_Flush
*/
private $flush;
public function __construct(
Scramble $scrambler,
MigrationStateManager $migration_state_manager,
Http $http,
Helper $http_helper,
Properties $props,
ErrorLog $error_log,
MigrationManager $migration_manager,
FormData $form_data,
FinalizeMigration $finalize,
Settings $settings,
WPMDBRestAPIServer $rest_API_server,
Migration_Flush $flush
) {
$this->scrambler = $scrambler;
$this->migration_state_manager = $migration_state_manager;
$this->http = $http;
$this->http_helper = $http_helper;
$this->props = $props;
$this->error_log = $error_log;
$this->migration_manager = $migration_manager;
$this->form_data = $form_data;
$this->finalize = $finalize;
$this->settings = $settings->get_settings();
$this->rest_API_server = $rest_API_server;
$this->flush = $flush;
}
public function register()
{
add_action('rest_api_init', [$this, 'register_rest_routes']);
add_action('wp_ajax_nopriv_wpmdb_remote_finalize_migration', [$this, 'respond_to_remote_finalize_migration']);
add_action('wp_ajax_nopriv_wpmdb_remote_flush', [$this, 'respond_to_remote_flush']);
add_action('wp_ajax_nopriv_wpmdb_fire_migration_complete', [$this, 'fire_migration_complete']);
}
public function register_rest_routes()
{
$this->rest_API_server->registerRestRoute('/migration-complete', [
'methods' => 'POST',
'callback' => [$this, 'fire_migration_complete'],
]);
}
public function respond_to_remote_flush()
{
add_filter('wpmdb_before_response', array($this->scrambler, 'scramble'));
$key_rules = array(
'action' => 'key',
'sig' => 'string',
);
$state_data = $this->migration_state_manager->set_post_data($key_rules);
$filtered_post = $this->http_helper->filter_post_elements($state_data, array('action'));
if (!$this->http_helper->verify_signature($filtered_post, $this->settings['key'])) {
$error_msg = $this->props->invalid_content_verification_error . ' (#123)';
$result = $this->http->end_ajax(new \WP_Error('wpmdb_invalid_content_verification_error', $error_msg));
return $result;
}
$return = $this->flush->flush();
$result = $this->http->end_ajax($return);
return $result;
}
/**
* The remote's handler for a request to finalize a migration.
*
* @return bool|null
*/
function respond_to_remote_finalize_migration()
{
add_filter('wpmdb_before_response', array($this->scrambler, 'scramble'));
$key_rules = array(
'action' => 'key',
'intent' => 'key',
'url' => 'url',
'form_data' => 'string',
'tables' => 'string',
'temp_prefix' => 'string',
'site_details' => 'string',
'prefix' => 'string',
'stage' => 'string',
'type' => 'key',
'location' => 'url',
'sig' => 'string',
);
$state_data = Persistence::setRemotePostData($key_rules, __METHOD__);
$filtered_post = $this->http_helper->filter_post_elements(
$state_data,
array(
'action',
'intent',
'url',
'form_data',
'site_details',
'tables',
'temp_prefix',
'prefix',
'type',
'location',
)
);
if (!$this->http_helper->verify_signature($filtered_post, $this->settings['key'])) {
$error_msg = $this->props->invalid_content_verification_error . ' (#123)';
$result = $this->http->end_ajax(new \WP_Error('wpmdb_invalid_content_verification_error', $error_msg));
return $result;
}
$this->form_data = base64_decode($filtered_post['form_data']);
$state_data['site_details'] = json_decode(base64_decode($state_data['site_details']), true);
do_action('wpmdb_remote_finalize', $state_data);
$return = $this->finalize->finalize_migration($state_data);
$result = $this->http->end_ajax($return);
return $result;
}
/**
* Triggers the wpmdb_migration_complete action once the migration is complete.
*
* @return bool|null
*/
public function fire_migration_complete()
{
$state_data = Persistence::setPostData(
[
'action' => 'string',
'url' => 'string',
'sig' => 'string',
],
__METHOD__
);
$filtered_post = $this->http_helper->filter_post_elements($state_data, array('action', 'url'));
if (!$this->http_helper->verify_signature($filtered_post, $this->settings['key'])) {
$error_msg = $this->props->invalid_content_verification_error . ' (#138)';
$result = $this->http->end_ajax(new \WP_Error('wpmdb_invalid_content_verification_error', $error_msg));
return $result;
}
do_action('wpmdb_migration_complete', 'pull', $state_data['url'], '');
$result = $this->http->end_ajax(true);
return $result;
}
}