69 lines
1.6 KiB
PHP
69 lines
1.6 KiB
PHP
<?php
|
|
|
|
class WPML_Translation_Jobs_Migration_Ajax {
|
|
|
|
const ACTION = 'wpml_translation_jobs_migration';
|
|
|
|
const JOBS_MIGRATED_PER_REQUEST = 100;
|
|
|
|
/** @var WPML_Translation_Jobs_Migration */
|
|
private $jobs_migration;
|
|
|
|
/** @var WPML_Translation_Jobs_Migration_Repository */
|
|
private $jobs_repository;
|
|
|
|
/** @var WPML_TM_Jobs_Migration_State */
|
|
private $migration_state;
|
|
|
|
public function __construct(
|
|
WPML_Translation_Jobs_Migration $jobs_migration,
|
|
WPML_Translation_Jobs_Migration_Repository $jobs_repository,
|
|
WPML_TM_Jobs_Migration_State $migration_state
|
|
) {
|
|
$this->jobs_migration = $jobs_migration;
|
|
$this->jobs_repository = $jobs_repository;
|
|
$this->migration_state = $migration_state;
|
|
}
|
|
|
|
public function run_migration() {
|
|
if ( ! $this->is_valid_request() ) {
|
|
wp_send_json_error();
|
|
return;
|
|
}
|
|
|
|
$jobs = $this->jobs_repository->get();
|
|
|
|
$jobs_chunk = array_slice( $jobs, 0, self::JOBS_MIGRATED_PER_REQUEST );
|
|
try {
|
|
$this->jobs_migration->migrate_jobs( $jobs_chunk );
|
|
} catch ( Exception $e ) {
|
|
wp_send_json_error( $e->getMessage(), 500 );
|
|
|
|
return;
|
|
}
|
|
|
|
$done = count( $jobs ) === count( $jobs_chunk );
|
|
$total_jobs = count( $jobs );
|
|
$jobs_chunk_total = count( $jobs_chunk );
|
|
|
|
$result = array(
|
|
'totalJobs' => $total_jobs,
|
|
'jobsMigrated' => $jobs_chunk_total,
|
|
'done' => $done,
|
|
);
|
|
|
|
if ( $jobs_chunk_total === $total_jobs ) {
|
|
$this->migration_state->mark_migration_as_done();
|
|
}
|
|
|
|
wp_send_json_success( $result );
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
*/
|
|
private function is_valid_request() {
|
|
return wp_verify_nonce( $_POST['nonce'], self::ACTION );
|
|
}
|
|
}
|