Files
doitinpoland.com/wp-content/plugins/sitepress-multilingual-cms/classes/ICL-20-migration/class-wpml-tm-icl20-migrate.php
2023-09-12 21:41:04 +02:00

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;
}
}