PluginProbe ʕ •ᴥ•ʔ
WPML Multilingual & Multicurrency for WooCommerce / 5.5.7
WPML Multilingual & Multicurrency for WooCommerce v5.5.7
5.5.7 5.3.8 5.3.9 5.4.3 5.4.4 5.4.5 5.5.1 5.5.1.1 5.5.2.2 5.5.2.3 5.5.3 5.5.3.1 5.5.4 5.5.5 5.5.6 trunk 0.9 1.0 1.1 1.2 1.3 1.4 1.5 2.0 2.2 2.3 2.3.1 2.3.2 3.0 3.0.1 3.1 3.2 3.2.1 3.2.2 3.3 3.3.1 3.3.2 3.3.3 3.3.4 3.4 3.4.1 3.4.2 3.4.3 3.5 3.5.1 3.5.2 3.5.3 3.5.4 3.5.5 3.6 3.6.1 3.6.10 3.6.11 3.6.2 3.6.3 3.6.4 3.6.5 3.6.5.1 3.6.6 3.6.7 3.6.8 3.6.9 3.7 3.7.1 3.7.10 3.7.11 3.7.12 3.7.13 3.7.14 3.7.15 3.7.16 3.7.2 3.7.3 3.7.4 3.7.5 3.7.6 3.7.7 3.7.8 3.7.9 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.9.0 3.9.1 3.9.1.1 3.9.2 3.9.3 3.9.4 3.9.5 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.10.2 4.10.3 4.10.4 4.11.2 4.11.3.2 4.11.5 4.11.6 4.12.1 4.12.4 4.12.5 4.12.6 4.2.0 4.2.0.1 4.2.1 4.2.1.1 4.2.10 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.7.1 4.2.8 4.2.8.1 4.2.9 4.3.0 4.3.1 4.3.2 4.3.2.1 4.3.3 4.3.4 4.3.5 4.3.6 4.3.7 4.4.0 4.4.1 4.4.2 4.4.2.1 4.5.0 4.6.0 4.6.1 4.6.2 4.6.2.1 4.6.3 4.6.5 4.6.6 4.6.7 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.7.5 4.7.6 4.7.7 4.7.8 4.7.9 4.8.0 4.9.0 4.9.1 5.0.1 5.0.2 5.1.1 5.1.2 5.1.3 5.2.0 5.2.1 5.3.2 5.3.3.1 5.3.4 5.3.5 5.3.6 5.3.7
woocommerce-multilingual / classes / API / VendorAddon / Hooks.php
woocommerce-multilingual / classes / API / VendorAddon Last commit date
Hooks.php 1 week ago
Hooks.php
98 lines
1 <?php
2
3 namespace WCML\API\VendorAddon;
4
5 use WPML\Element\API\Languages;
6 use WPML\FP\Cast;
7 use WPML\FP\Fns;
8 use WPML\FP\Obj;
9 use WPML\FP\Relation;
10 use WPML\LIB\WP\Hooks as WpHooks;
11 use function WPML\Container\make;
12 use function WPML\FP\invoke;
13 use function WPML\FP\pipe;
14 use function WPML\FP\spreadArgs;
15
16 class Hooks implements \IWPML_Backend_Action {
17
18 const TRANSLATE_CAPABILITY = 'translate';
19
20 const COLUMN_USER_OPTION = 'manageedit-productcolumnshidden';
21
22 public function add_hooks() {
23 $config = apply_filters( 'wcml_vendor_addon_configuration', null );
24
25 if ( $config ) {
26 $getConfig = Obj::prop( Fns::__, $config );
27
28 $isVendor = invoke( 'has_cap' )->with( $getConfig( 'vendor_capability' ) );
29
30 WpHooks::onFilter( 'wpml_override_is_translator', 10, 3 )
31 ->then( spreadArgs( self::allowVendorToTranslateHisProduct( $isVendor ) ) );
32
33 WpHooks::onFilter( 'get_user_metadata', 10, 3 )
34 ->then( spreadArgs( self::forceLanguagesColumnInProductsList( $isVendor ) ) );
35 }
36 }
37
38 private static function allowVendorToTranslateHisProduct( callable $isVendor ) {
39 return function( $isTranslator, $userId, $args ) use ( $isVendor ) {
40 $user = self::getUser( $userId );
41
42 if ( $isVendor( $user ) ) {
43 self::maybeSetTranslatorRequirements( $user );
44
45 $isProductOfVendor = pipe(
46 Obj::prop( 'post_id' ),
47 'get_post',
48 Obj::prop( 'post_author' ),
49 Cast::toInt(),
50 Relation::equals( $userId )
51 );
52
53 return $isProductOfVendor( $args );
54 }
55
56 return $isTranslator;
57 };
58 }
59
60 private static function maybeSetTranslatorRequirements( \WPML_User $user ) {
61 global $wpdb;
62
63 $languagePairsKey = $wpdb->prefix . 'language_pairs';
64
65 if (
66 ! $user->has_cap( self::TRANSLATE_CAPABILITY )
67 || $user->get( $languagePairsKey ) !== self::getAllLanguagePairsInDefault()
68 ) {
69 $user->add_cap( self::TRANSLATE_CAPABILITY );
70 $user->update_meta( $languagePairsKey, self::getAllLanguagePairsInDefault() );
71
72 do_action( 'wpml_tm_ate_synchronize_translators' );
73 do_action( 'wpml_tm_add_translation_role', $user, self::TRANSLATE_CAPABILITY );
74 }
75 }
76
77 private static function getAllLanguagePairsInDefault() {
78 return [ Languages::getDefaultCode() => array_fill_keys( Languages::getSecondaryCodes(), 1 ) ];
79 }
80
81 public static function forceLanguagesColumnInProductsList( callable $isVendor ) {
82 return function ( $value, $userId, $metaKey ) use ( $isVendor ) {
83 if (
84 self::COLUMN_USER_OPTION === $metaKey
85 && $isVendor( self::getUser( $userId ) )
86 ) {
87 return [ [] ];
88 }
89
90 return $value;
91 };
92 }
93
94 private static function getUser( $id ) {
95 return make( \WPML_WP_User_Factory::class )->create( $id );
96 }
97 }
98