class-wpml-tp-sync-jobs-status.php
1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
class WPML_TM_Sync_Jobs_Status {
/** @var WPML_TM_Jobs_Repository */
private $jobs_repository;
/** @var WPML_TP_Jobs_API */
private $tp_api;
/**
* WPML_TM_Sync_Jobs_Status constructor.
*
* @param WPML_TM_Jobs_Repository $jobs_repository
* @param WPML_TP_Jobs_API $tp_api
*/
public function __construct( WPML_TM_Jobs_Repository $jobs_repository, WPML_TP_Jobs_API $tp_api ) {
$this->jobs_repository = $jobs_repository;
$this->tp_api = $tp_api;
}
/**
* @return WPML_TM_Jobs_Collection
* @throws WPML_TP_API_Exception
*/
public function sync() {
return $this->update_tp_state_of_jobs(
$this->jobs_repository->get_collection(
new WPML_TM_Jobs_Search_Params(
array(
'status' => array( ICL_TM_WAITING_FOR_TRANSLATOR, ICL_TM_IN_PROGRESS ),
'scope' => WPML_TM_Jobs_Search_Params::SCOPE_REMOTE,
)
)
)
);
}
/**
* @param WPML_TM_Jobs_Collection $jobs
*
* @return WPML_TM_Jobs_Collection
* @throws WPML_TP_API_Exception
*/
private function update_tp_state_of_jobs( WPML_TM_Jobs_Collection $jobs ) {
$tp_ids = $this->extract_tp_id_from_jobs( $jobs );
if ( $tp_ids ) {
$tp_statuses = $this->tp_api->get_jobs_statuses( $tp_ids );
foreach ( $tp_statuses as $job_status ) {
$job = $jobs->get_by_tp_id( $job_status->get_tp_id() );
if ( $job ) {
$job->set_status( WPML_TP_Job_States::map_tp_state_to_local( $job_status->get_status() ) );
$job->set_ts_status( $job_status->get_ts_status() );
if ( WPML_TP_Job_States::CANCELLED === $job_status->get_status() ) {
do_action( 'wpml_tm_canceled_job_notification', $job );
}
}
}
}
return $jobs;
}
/**
* @param WPML_TM_Jobs_Collection $jobs
*
* @return array
*/
private function extract_tp_id_from_jobs( WPML_TM_Jobs_Collection $jobs ) {
$tp_ids = array();
foreach ( $jobs as $job ) {
$tp_ids[] = $job->get_tp_id();
}
return $tp_ids;
}
}