63 lines
1.6 KiB
PHP
63 lines
1.6 KiB
PHP
<?php
|
|
|
|
class WPML_TP_Apply_Translation_String_Strategy implements WPML_TP_Apply_Translation_Strategy {
|
|
/** @var WPML_TP_Jobs_API */
|
|
private $jobs_api;
|
|
|
|
/** @var wpdb */
|
|
private $wpdb;
|
|
|
|
/**
|
|
* @param WPML_TP_Jobs_API $jobs_api
|
|
* @param wpdb $wpdb
|
|
*/
|
|
public function __construct( WPML_TP_Jobs_API $jobs_api, wpdb $wpdb ) {
|
|
$this->jobs_api = $jobs_api;
|
|
$this->wpdb = $wpdb;
|
|
}
|
|
|
|
/**
|
|
* @param WPML_TM_Job_Entity $job
|
|
* @param WPML_TP_Translation_Collection $translations
|
|
*
|
|
* @return void
|
|
* @throws WPML_TP_API_Exception
|
|
*/
|
|
public function apply( WPML_TM_Job_Entity $job, WPML_TP_Translation_Collection $translations ) {
|
|
if ( ! icl_translation_add_string_translation(
|
|
$job->get_tp_id(),
|
|
$this->map_translations_to_legacy_array( $translations ),
|
|
$translations->get_target_language()
|
|
)
|
|
) {
|
|
throw new WPML_TP_API_Exception( 'Could not apply string translation!' );
|
|
}
|
|
|
|
$this->update_local_job_status( $job, ICL_TM_COMPLETE );
|
|
$this->jobs_api->update_job_state( $job, 'delivered' );
|
|
}
|
|
|
|
/**
|
|
* @param WPML_TM_Job_Entity $job
|
|
* @param int $status
|
|
*/
|
|
private function update_local_job_status( WPML_TM_Job_Entity $job, $status ) {
|
|
$this->wpdb->update(
|
|
$this->wpdb->prefix . 'icl_core_status',
|
|
array( 'status' => $status ),
|
|
array( 'id' => $job->get_id() )
|
|
);
|
|
}
|
|
|
|
private function map_translations_to_legacy_array( WPML_TP_Translation_Collection $translations ) {
|
|
$result = array();
|
|
|
|
/** @var WPML_TP_Translation $translation */
|
|
foreach ( $translations as $translation ) {
|
|
$result[ $translation->get_field() ] = $translation->get_target();
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
}
|