UpdateTranslation.php
2.8 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
80
81
82
83
84
85
86
<?php
namespace WPML\TM\ATE\Review;
use WPML\Ajax\IHandler;
use WPML\Collect\Support\Collection;
use WPML\FP\Either;
use WPML\FP\Fns;
use WPML\FP\Logic;
use WPML\FP\Lst;
use WPML\FP\Obj;
use WPML\TM\API\ATE;
use WPML\TM\API\Jobs;
use function WPML\Container\make;
use function WPML\FP\partial;
use function WPML\FP\pipe;
class UpdateTranslation implements IHandler {
public function run( Collection $data ) {
$jobId = $data->get( 'jobId' );
$postId = $data->get( 'postId' );
$completedInATE = $data->get( 'completedInATE' );
$clickedBackInATE = $data->get( 'clickedBackInATE' );
if ( $completedInATE === 'COMPLETED_WITHOUT_CHANGED' || $clickedBackInATE ) {
return $this->completeWithoutChanges( $jobId );
}
$ateAPI = make( ATE::class );
$applyTranslation = pipe(
partial( [ $ateAPI, 'applyTranslation' ], $jobId, $postId ),
Logic::ifElse(
Fns::identity(),
Fns::tap( function () use ( $jobId ) {
Jobs::setReviewStatus( $jobId, ReviewStatus::NEEDS_REVIEW );
} ),
Fns::identity()
)
);
$hasStatus = function ( $statuses ) {
return pipe( Obj::prop( 'status_id' ), Lst::includes( Fns::__, $statuses ) );
};
$shouldApplyXLIFF = $hasStatus( [
\WPML_TM_ATE_AMS_Endpoints::ATE_JOB_STATUS_DELIVERING,
\WPML_TM_ATE_AMS_Endpoints::ATE_JOB_STATUS_TRANSLATED,
\WPML_TM_ATE_AMS_Endpoints::ATE_JOB_STATUS_EDITED,
] );
$applyXLIFF = Logic::ifElse(
pipe( Obj::prop( 'translated_xliff' ), $applyTranslation ),
Fns::always( Either::of( 'applied' ) ),
Fns::always( Either::left( 'error' ) )
);
$isDelivered = $hasStatus( [ \WPML_TM_ATE_AMS_Endpoints::ATE_JOB_STATUS_DELIVERED ] );
$isTranslating = $hasStatus( [ \WPML_TM_ATE_AMS_Endpoints::ATE_JOB_STATUS_TRANSLATING ] );
$userClickedCompleteInATE = Fns::always( $completedInATE === 'COMPLETED' );
$otherwise = Fns::always( true );
$handleATEResult = Logic::cond( [
[ $shouldApplyXLIFF, $applyXLIFF ],
[ $isDelivered, Fns::always( Either::of( 'applied-without-changes' ) ) ],
[ $userClickedCompleteInATE, Fns::always( Either::of( 'underway' ) ) ],
[ $isTranslating, Fns::always( Either::of( 'in-progress' ) ) ],
[ Logic::isEmpty(), Fns::always( Either::left( 'error' ) ) ],
[ $otherwise, Fns::always( Either::of( 'in-progress' ) ) ]
] );
return Either::of( $jobId )
->map( [ $ateAPI, 'checkJobStatus' ] )
->chain( $handleATEResult );
}
private function completeWithoutChanges( $jobId ) {
$applyWithoutChanges = pipe(
Fns::tap( Jobs::setStatus( Fns::__, ICL_TM_COMPLETE ) ),
Fns::tap( Jobs::setReviewStatus( Fns::__, ReviewStatus::NEEDS_REVIEW ) )
);
return Either::of( $jobId )
->map( $applyWithoutChanges )
->map( Fns::always( 'applied-without-changes' ) );
}
}