PluginProbe ʕ •ᴥ•ʔ
WPML Multilingual & Multicurrency for WooCommerce / trunk
WPML Multilingual & Multicurrency for WooCommerce vtrunk
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 month 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