@param string $block_name
*
* @return array
*/
public function updateStringsRecursively( array $attrs, array $config_keys, array $translations, $lang, $block_name ) {
foreach ( $attrs as $attr_key => $attr_value ) {
$matching_key = $this->getMatchingConfigKey( $attr_key, $config_keys );
if ( ! $matching_key ) {
continue;
}
if ( $this->hasJsonEncoding( $attr_key, $config_keys ) ) {
$attr_value = json_decode( urldecode( $attr_value ), true );
}
if ( is_array( $attr_value ) ) {
$children_config_keys = $this->getChildrenConfigKeys( $config_keys, $matching_key );
$attrs[ $attr_key ] = $this->updateStringsRecursively( $attr_value, $children_config_keys, $translations, $lang, $block_name );
} else {
$string_id = $this->get_string_id( $block_name, $attr_value );
if (
isset( $translations[ $string_id ][ $lang ] ) &&
ICL_TM_COMPLETE === (int) $translations[ $string_id ][ $lang ]['status']
) {
$attrs[ $attr_key ] = $translations[ $string_id ][ $lang ]['value'];
}
}
if ( $this->hasJsonEncoding( $attr_key, $config_keys ) ) {
$attrs[ $attr_key ] = rawurlencode( wp_json_encode( $attrs[ $attr_key ] ) );
}
}
return $attrs;
}
/**
* @param array $attr_key
* @param array $config_keys
*
* @retrun bool
*/
private function hasJsonEncoding( $attr_key, $config_keys ) {
return 'json' === Obj::path( [ $attr_key, 'encoding' ], $config_keys );
}
/**
* @param \WP_Block_Parser_Block $block
*
* @return array
*/
private function getAttributes( \WP_Block_Parser_Block $block ) {
return is_array( $block->attrs ) && $block->blockName ? $block->attrs : [];
}
/**
* @param \WP_Block_Parser_Block $block
*
* @return array
*/
private function getKeyConfig( \WP_Block_Parser_Block $block ) {
$config = $this->get_block_config( $block, 'key' );
return $config ? $config : [];
}
/**
* @return array
*/
private function getMatchAllKey() {
return [
'*' => [
'search-method' => \WPML_Gutenberg_Config_Option::SEARCH_METHOD_WILDCARD,
],
];
}
}