Products.php
96 lines
| 1 | <?php |
| 2 | |
| 3 | namespace WCML\Rest\Wrapper\Products; |
| 4 | |
| 5 | use WCML\Rest\Exceptions\Generic; |
| 6 | use WCML\Rest\Exceptions\InvalidLanguage; |
| 7 | use WCML\Rest\Exceptions\InvalidProduct; |
| 8 | use WCML\Rest\ProductSaveActions; |
| 9 | use WCML\Rest\Wrapper\Handler; |
| 10 | use WCML\Utilities\Suspend\PostsQueryFiltersFactory as SuspendPostsQueryFiltersFactory; |
| 11 | use WPML\FP\Fns; |
| 12 | use WPML\FP\Obj; |
| 13 | |
| 14 | class Products extends Handler { |
| 15 | |
| 16 | private $sitepress; |
| 17 | private $wpmlPostTranslations; |
| 18 | private $productSaveActions; |
| 19 | private $strings; |
| 20 | |
| 21 | public function __construct( |
| 22 | \SitePress $sitepress, |
| 23 | \WPML_Post_Translation $wpmlPostTranslations, |
| 24 | ProductSaveActions $productSaveActions, |
| 25 | \WCML_WC_Strings $strings |
| 26 | ) { |
| 27 | $this->sitepress = $sitepress; |
| 28 | $this->wpmlPostTranslations = $wpmlPostTranslations; |
| 29 | $this->productSaveActions = $productSaveActions; |
| 30 | $this->strings = $strings; |
| 31 | } |
| 32 | |
| 33 | public function query( $args, $request ) { |
| 34 | $data = $request->get_params(); |
| 35 | if ( isset( $data['lang'] ) && $data['lang'] === 'all' ) { |
| 36 | SuspendPostsQueryFiltersFactory::create(); |
| 37 | } |
| 38 | |
| 39 | return $args; |
| 40 | } |
| 41 | |
| 42 | |
| 43 | public function prepare( $response, $object, $request ) { |
| 44 | $response->data['translations'] = []; |
| 45 | |
| 46 | $langCode = Obj::prop( 'lang', $request->get_params() ); |
| 47 | |
| 48 | if ( array_key_exists( 'attributes', $response->data ) ) { |
| 49 | foreach ( $response->data['attributes'] as &$attribute ) { |
| 50 | $attribute['name'] = $this->strings->get_translated_string_by_name_and_context( \WCML_WC_Strings::DOMAIN_WORDPRESS, \WCML_WC_Strings::TAXONOMY_SINGULAR_NAME_PREFIX . $attribute['name'], $langCode, $attribute['name'] ); |
| 51 | } |
| 52 | } |
| 53 | |
| 54 | $trid = $this->wpmlPostTranslations->get_element_trid( $response->data['id'] ); |
| 55 | |
| 56 | if ( $trid ) { |
| 57 | $translations = $this->wpmlPostTranslations->get_element_translations( $response->data['id'], $trid ); |
| 58 | foreach ( $translations as $translation ) { |
| 59 | $response->data['translations'][ $this->wpmlPostTranslations->get_element_lang_code( $translation ) ] = $translation; |
| 60 | } |
| 61 | $response->data['lang'] = $this->wpmlPostTranslations->get_element_lang_code( $response->data['id'] ); |
| 62 | } |
| 63 | |
| 64 | return $response; |
| 65 | } |
| 66 | |
| 67 | |
| 68 | public function insert( $object, $request, $creating ) { |
| 69 | $getParam = Obj::prop( Fns::__, $request->get_params() ); |
| 70 | |
| 71 | $langCode = $getParam( 'lang' ); |
| 72 | $translationOf = $getParam( 'translation_of' ); |
| 73 | $trid = null; |
| 74 | |
| 75 | if ( $langCode ) { |
| 76 | |
| 77 | if ( ! $this->sitepress->is_active_language( $langCode ) ) { |
| 78 | throw new InvalidLanguage( $langCode ); |
| 79 | } |
| 80 | |
| 81 | if ( $translationOf ) { |
| 82 | $trid = $this->wpmlPostTranslations->get_element_trid( $translationOf ); |
| 83 | |
| 84 | if ( ! $trid ) { |
| 85 | throw new InvalidProduct( $translationOf ); |
| 86 | } |
| 87 | } |
| 88 | |
| 89 | } elseif ( $translationOf ) { |
| 90 | throw new Generic( __( 'Using "translation_of" requires providing a "lang" parameter too', 'woocommerce-multilingual' ) ); |
| 91 | } |
| 92 | |
| 93 | $this->productSaveActions->run( $object, $trid, $langCode, $translationOf, $request ); |
| 94 | } |
| 95 | } |
| 96 |