Languages.php
83 lines
| 1 | <?php |
| 2 | |
| 3 | namespace WCML\Rest\Wrapper\Orders; |
| 4 | |
| 5 | use WCML\Rest\Wrapper\Handler; |
| 6 | use WCML\Rest\Exceptions\InvalidLanguage; |
| 7 | use WPML\FP\Obj; |
| 8 | |
| 9 | use function WCML\functions\getId; |
| 10 | |
| 11 | class Languages extends Handler { |
| 12 | |
| 13 | public function query( $args, $request ) { |
| 14 | $lang = $request->get_param( 'lang' ); |
| 15 | |
| 16 | if ( ! is_null( $lang ) && 'all' !== $lang ) { |
| 17 | $args['meta_query'][] = [ |
| 18 | 'key' => \WCML_Orders::KEY_LANGUAGE, |
| 19 | 'value' => strval( $lang ), |
| 20 | ]; |
| 21 | } |
| 22 | |
| 23 | return $args; |
| 24 | } |
| 25 | |
| 26 | |
| 27 | public function prepare( $response, $object, $request ) { |
| 28 | $language = $request->get_param( 'lang' ); |
| 29 | if ( empty( $language ) ) { |
| 30 | $language = apply_filters( 'wpml_default_language', null ); |
| 31 | } |
| 32 | |
| 33 | $orderLanguage = \WCML_Orders::getLanguage( $this->get_id( $object ) ); |
| 34 | |
| 35 | if ( $orderLanguage !== $language ) { |
| 36 | $lineItems = Obj::propOr( [], 'line_items', $response->data ); |
| 37 | foreach ( $lineItems as $k => $item ) { |
| 38 | $translatedProductId = wpml_object_id_filter( $item['product_id'], 'product', false, $language ); |
| 39 | $translatedVariationId = ( empty( $item['variation_id'] ) ) ? 0 : wpml_object_id_filter( $item['variation_id'], 'product_variation', false, $language ); |
| 40 | |
| 41 | if ( $translatedProductId ) { |
| 42 | $response->data['line_items'][ $k ]['product_id'] = $translatedProductId; |
| 43 | |
| 44 | $translatedProduct = get_post( $translatedProductId ); |
| 45 | $postName = $translatedProduct->post_title; |
| 46 | |
| 47 | if ( $translatedVariationId ) { |
| 48 | $response->data['line_items'][ $k ]['variation_id'] = $translatedVariationId; |
| 49 | |
| 50 | $translatedVariation = get_post( $translatedVariationId ); |
| 51 | $postName = $translatedVariation->post_title; |
| 52 | } |
| 53 | |
| 54 | $response->data['line_items'][ $k ]['name'] = $postName; |
| 55 | } |
| 56 | } |
| 57 | } |
| 58 | |
| 59 | return $response; |
| 60 | } |
| 61 | |
| 62 | private function get_id( $object ) { |
| 63 | try { |
| 64 | return getId( $object ); |
| 65 | } catch ( \Exception $err ) { |
| 66 | throw new \Exception( 'Order has no ID set.' ); |
| 67 | } |
| 68 | } |
| 69 | |
| 70 | |
| 71 | public function insert( $object, $request, $creating ) { |
| 72 | $data = $request->get_params(); |
| 73 | if ( isset( $data['lang'] ) ) { |
| 74 | |
| 75 | if ( ! apply_filters( 'wpml_language_is_active', false, $data['lang'] ) ) { |
| 76 | throw new InvalidLanguage( $data['lang'] ); |
| 77 | } |
| 78 | |
| 79 | \WCML_Orders::setLanguage( $object->get_id(), $data['lang'] ); |
| 80 | } |
| 81 | } |
| 82 | } |
| 83 |