Hooks.php
1.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php
namespace WPML\PB\Gutenberg\ConvertIdsInBlock;
use WPML\FP\Obj;
use WPML\LIB\WP\Hooks as WpHooks;
use WPML\PB\Gutenberg\Integration;
use function WPML\FP\spreadArgs;
class Hooks implements Integration {
/** @var \WPML_Gutenberg_Config_Option $config */
private $config;
public function __construct( \WPML_Gutenberg_Config_Option $config ) {
$this->config = $config;
}
public function add_hooks() {
if ( $this->config->get_ids_in_blocks() ) {
WpHooks::onFilter( 'render_block_data', - PHP_INT_MAX )
->then( spreadArgs( [ $this, 'filterIdsInBlock' ] ) );
}
}
/**
* @param array $block
*
* @return array
*/
public function filterIdsInBlock( array $block ) {
$blockConfig = $this->getBlockConfig( $block );
if ( $blockConfig ) {
return (
new Composite(
array_merge(
$this->getBlockAttributesConverter( $blockConfig ),
$this->getTagAttributesConverter( $blockConfig )
)
)
)->convert( $block );
}
return $block;
}
/**
* @param array $block
*
* @return null|array
*/
private function getBlockConfig( $block ) {
return Obj::prop( Obj::prop( 'blockName', $block ), $this->config->get_ids_in_blocks() );
}
/**
* @param array $blockConfig
*
* @return BlockAttributes[]
*/
private function getBlockAttributesConverter( $blockConfig ) {
$keyConfig = wpml_collect( (array) Obj::prop( 'key', $blockConfig ) )
->map( function( $slug, $path ) {
return [
'path' => $path,
'slug' => $slug,
];
} )
->toArray();
return $keyConfig ? [ new BlockAttributes( $keyConfig ) ] : [];
}
/**
* @param array $blockConfig
*
* @return TagAttributes[]
*/
private function getTagAttributesConverter( $blockConfig ) {
$xpathConfig = wpml_collect( (array) Obj::prop( 'xpath', $blockConfig ) )
->map( function( $slug, $xpath ) {
return [
'xpath' => $xpath,
'slug' => $slug,
];
} )
->toArray();
return $xpathConfig ? [ new TagAttributes( $xpathConfig ) ] : [];
}
}