register_routes(); } function register_routes() { parent::register_route( self::ENDPOINT_JOBS_RECEIVE . '(?P\d+)', array( 'methods' => 'GET', 'callback' => array( $this, 'receive_ate_job' ), 'args' => array( 'wpmlJobId' => array( 'required' => true, 'type' => 'int', 'validate_callback' => array( 'WPML_REST_Arguments_Validation', 'integer' ), 'sanitize_callback' => array( 'WPML_REST_Arguments_Sanitation', 'integer' ), ), ), 'permission_callback' => '__return_true', ) ); } public function get_allowed_capabilities( \WP_REST_Request $request ) { return []; } /** * @param \WP_REST_Request $request * * @return true|\WP_Error */ public function receive_ate_job( \WP_REST_Request $request ) { $wpmlJobId = $request->get_param( 'wpmlJobId' ); $ateAPI = make( ATE::class ); $getXLIFF = pipe( Obj::prop( 'job_id' ), Fns::safe( [ $ateAPI, 'checkJobStatus' ] ), Fns::map( Obj::prop( 'translated_xliff' ) ) ); $applyTranslations = Fns::converge( Fns::liftA3( curryN( 3, [ $ateAPI, 'applyTranslation' ] ) ), [ Fns::safe( Obj::prop( 'job_id' ) ), Fns::safe( Obj::prop( 'original_doc_id' ) ), $getXLIFF ] ); return Maybe::of( $wpmlJobId ) ->map( Jobs::get() ) ->chain( $applyTranslations ) ->map( Fns::always( new \WP_REST_Response( null, self::CODE_OK ) ) ) ->getOrElse( new \WP_Error( self::CODE_UNPROCESSABLE_ENTITY ) ); } /** * @param int $wpml_job_id * * @return string */ public static function get_receive_ate_job_url( $wpml_job_id ) { return self::get_url( self::ENDPOINT_JOBS_RECEIVE . $wpml_job_id ); } }