Files
doitinpoland.com/wp-content/plugins/wpml-translation-management/classes/jobs-deadline/wpml-tm-jobs-deadline-estimate-ajax-action.php
2023-09-12 21:41:04 +02:00

75 lines
1.9 KiB
PHP

<?php
class WPML_TM_Jobs_Deadline_Estimate_AJAX_Action implements IWPML_Action {
/** @var WPML_TM_Jobs_Deadline_Estimate $deadline_estimate */
private $deadline_estimate;
/** @var array $translation_basket */
private $translation_basket;
/** @var array $post_data */
private $post_data;
public function __construct(
WPML_TM_Jobs_Deadline_Estimate $deadline_estimate,
array $translation_basket,
array $post_data
) {
$this->deadline_estimate = $deadline_estimate;
$this->translation_basket = $translation_basket;
$this->post_data = $post_data;
}
public function add_hooks() {
add_action(
'wp_ajax_' . 'wpml-tm-jobs-deadline-estimate-ajax-action',
array( $this, 'refresh' )
);
}
public function refresh() {
if ( isset( $this->post_data['translators'] ) ) {
$deadline_per_lang = array();
foreach ( $this->post_data['translators'] as $lang_to => $translator_data ) {
list( $translator_id, $service ) = $this->parse_translator_data( $translator_data );
$translator_args = array(
'translator_id' => $translator_id,
'service' => $service,
'to' => $lang_to,
);
$deadline_per_lang[ $lang_to ] = $this->deadline_estimate->get( $this->translation_basket, $translator_args );
}
$response_data = array(
'deadline' => max( $deadline_per_lang ),
);
wp_send_json_success( $response_data );
}
}
/**
* The translator data for a remote service will be like "ts-7" with 7 the ID of the remote service
* For a local translator, the translation data will be the ID
*
* @param string $translator_data
*
* @return array
*/
private function parse_translator_data( $translator_data ) {
$translator_id = $translator_data;
$service = 'local';
if ( false !== strpos( $translator_data, 'ts-' ) ) {
$translator_id = 0;
$service = (int) preg_replace( '/^ts-/', '', $translator_data );
}
return array( $translator_id, $service );
}
}