160 lines
4.5 KiB
PHP
160 lines
4.5 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @author OnTheGo Systems
|
|
*/
|
|
class WPML_TM_ICL20_Migrate {
|
|
private $local_migration;
|
|
private $progress;
|
|
private $remote_migration;
|
|
private $status;
|
|
|
|
/** @var WPML_TP_Services */
|
|
private $tp_services;
|
|
|
|
public function __construct(
|
|
WPML_TM_ICL20_Migration_Progress $progress,
|
|
WPML_TM_ICL20_Migration_Status $status,
|
|
WPML_TM_ICL20_Migrate_Remote $remote_migration,
|
|
WPML_TM_ICL20_Migrate_Local $local_migration,
|
|
WPML_TP_Services $tp_services
|
|
) {
|
|
$this->progress = $progress;
|
|
$this->status = $status;
|
|
$this->remote_migration = $remote_migration;
|
|
$this->local_migration = $local_migration;
|
|
$this->tp_services = $tp_services;
|
|
}
|
|
|
|
public function migrate_project_rollback() {
|
|
if ( ! $this->status->has_active_legacy_icl() ) {
|
|
return false;
|
|
}
|
|
|
|
$project = $this->tp_services->get_current_project();
|
|
$token = $this->get_token( $project );
|
|
if ( $token ) {
|
|
return $this->remote_migration->migrate_project_rollback( $project->id, $project->access_key );
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function run() {
|
|
$this->progress->set_migration_started();
|
|
|
|
$project = $this->tp_services->get_current_project();
|
|
$token = $project ? $this->get_token( $project ) : null;
|
|
|
|
if ( (bool) $token
|
|
&& $this->migrate_project( $project, $token )
|
|
&& $this->acknowledge_icl( $project )
|
|
&& $this->migrate_local_service( $token )
|
|
&& $this->migrate_local_project()
|
|
&& $this->migrate_local_jobs(
|
|
WPML_TM_ICL20_Migrate_Local::JOBS_TYPES_DOCUMENTS,
|
|
WPML_TM_ICL20_Migration_Progress::STEP_MIGRATE_JOBS_DOCUMENTS
|
|
)
|
|
&& $this->migrate_local_jobs(
|
|
WPML_TM_ICL20_Migrate_Local::JOBS_TYPES_STRINGS,
|
|
WPML_TM_ICL20_Migration_Progress::STEP_MIGRATE_JOBS_STRINGS
|
|
) ) {
|
|
|
|
$this->progress->set_migration_done();
|
|
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @param $project
|
|
*
|
|
* @return string
|
|
*/
|
|
private function get_token( $project ) {
|
|
$token = $this->progress->get_completed_step( WPML_TM_ICL20_Migration_Progress::STEP_TOKEN );
|
|
if ( WPML_TM_ICL20_Migration_Progress::STEP_FAILED === $token ) {
|
|
$token = $this->remote_migration->get_token( $project->ts_id, $project->ts_access_key );
|
|
}
|
|
|
|
return $token;
|
|
}
|
|
|
|
/**
|
|
* @param $project
|
|
* @param $token
|
|
*
|
|
* @return bool
|
|
*/
|
|
private function migrate_project( $project, $token ) {
|
|
$project_migrated = $this->progress->get_completed_step( WPML_TM_ICL20_Migration_Progress::STEP_MIGRATE_REMOTE_PROJECT );
|
|
if ( WPML_TM_ICL20_Migration_Progress::STEP_FAILED === $project_migrated ) {
|
|
$project_migrated = $this->remote_migration->migrate_project( $project->id, $project->access_key, $token );
|
|
}
|
|
|
|
return (bool) $project_migrated;
|
|
}
|
|
|
|
/**
|
|
* @param $project
|
|
*
|
|
* @return bool
|
|
*/
|
|
private function acknowledge_icl( $project ) {
|
|
$icl_acknowledged = $this->progress->get_completed_step( WPML_TM_ICL20_Migration_Progress::STEP_ICL_ACK );
|
|
if ( WPML_TM_ICL20_Migration_Progress::STEP_FAILED === $icl_acknowledged ) {
|
|
$icl_acknowledged = $this->remote_migration->acknowledge_icl( $project->ts_id, $project->ts_access_key );
|
|
}
|
|
|
|
return (bool) $icl_acknowledged;
|
|
}
|
|
|
|
/**
|
|
* @param $token
|
|
*
|
|
* @return bool
|
|
*/
|
|
private function migrate_local_service( $token ) {
|
|
$service_migrated = $this->progress->get_completed_step( WPML_TM_ICL20_Migration_Progress::STEP_MIGRATE_LOCAL_SERVICE );
|
|
if ( WPML_TM_ICL20_Migration_Progress::STEP_DONE === $service_migrated ) {
|
|
$current_service = $this->tp_services->get_current_service();
|
|
$service_migrated = $current_service && $this->status->get_ICL_20_TS_ID() === $current_service->id;
|
|
}
|
|
if ( WPML_TM_ICL20_Migration_Progress::STEP_FAILED === $service_migrated ) {
|
|
$service_migrated = $this->local_migration->migrate_service( $token );
|
|
}
|
|
|
|
return (bool) $service_migrated;
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
*/
|
|
private function migrate_local_project() {
|
|
$project_migrated = $this->progress->get_completed_step( WPML_TM_ICL20_Migration_Progress::STEP_MIGRATE_LOCAL_PROJECT );
|
|
if ( WPML_TM_ICL20_Migration_Progress::STEP_FAILED === $project_migrated ) {
|
|
$project_migrated = $this->local_migration->migrate_project();
|
|
}
|
|
|
|
return (bool) $project_migrated;
|
|
}
|
|
|
|
/**
|
|
* @param string $table
|
|
* @param string $step
|
|
*
|
|
* @return bool
|
|
*/
|
|
private function migrate_local_jobs( $table, $step ) {
|
|
$job_migrated = $this->progress->get_completed_step( $step );
|
|
|
|
if ( WPML_TM_ICL20_Migration_Progress::STEP_FAILED === $job_migrated ) {
|
|
$job_migrated = $this->local_migration->migrate_jobs( $table );
|
|
}
|
|
|
|
return (bool) $job_migrated;
|
|
}
|
|
}
|