} } } return $value; } private function matching_keys( $tree_key, array $value ) { if ( self::WILDCARD === $tree_key ) { return array_keys( $value ); } if ( false !== strpos( $tree_key, self::WILDCARD ) ) { $regex = '/^' . str_replace( '\*', '\S+', preg_quote( $tree_key, '/' ) ) . '$/'; return array_values( array_filter( array_keys( $value ), function ( $key ) use ( $regex ) { return (bool) preg_match( $regex, (string) $key ); } ) ); } return array_key_exists( $tree_key, $value ) ? array( $tree_key ) : array(); } private function named_keys( array $tree ) { $named = array(); foreach ( array_keys( $tree ) as $tree_key ) { $tree_key = (string) $tree_key; if ( false === strpos( $tree_key, self::WILDCARD ) ) { $named[ $tree_key ] = true; } } return $named; } private function is_leaf_enabled( $flag, array $rules ) { if ( null !== $flag ) { return $flag; } return $rules['state'] && ! $rules['narrow']; } private function convert_blanket( $value, $depth ) { if ( $depth > self::MAX_DEPTH ) { return $value; } if ( is_array( $value ) ) { foreach ( $value as $key => $item ) { $value[ $key ] = $this->convert_blanket( $item, $depth + 1 ); } return $value; } return is_string( $value ) ? $this->convert_leaf( $value, 'auto' ) : $value; } private function convert_leaf( $leaf, $mode ) { if ( ! is_string( $leaf ) || '' === $leaf ) { return $leaf; } if ( 'text' !== $mode ) { $url = trim( $leaf ); if ( $this->is_bare_url( $url ) && ( 'link' === $mode || $this->is_same_site_url( $url ) ) ) { return str_replace( $url, $this->convert_url( $url ), $leaf ); } } if ( ! AbsoluteLinks::has_href_attribute( $leaf ) && ! AbsoluteLinks::has_embed_block( $leaf ) && ! AbsoluteLinks::has_block_attribute_url( $leaf ) ) { return $leaf; } return $this->convert_text( $leaf ); } private function is_bare_url( $url ) { return '' !== $url && ! preg_match( '/[\s<>"\'\\\\]/', $url ); } private function is_same_site_url( $url ) { if ( '/' === substr( $url, 0, 1 ) ) { return '//' !== substr( $url, 0, 2 ); } return WPML_Same_Site_Url_Normalizer::is_same_site( $url ); } private function convert_sub_fields( $sub_fields, $metadata ) { foreach ( $sub_fields as $sub_field ) { if ( isset( $sub_field['value'], $sub_field['attr']['translate_link_target'] ) && $sub_field['attr']['translate_link_target'] ) { $key = trim( $sub_field['value'] ); if ( isset( $metadata[ $key ] ) ) { $metadata[ $key ] = $this->convert_text( $metadata[ $key ] ); } } } return $metadata; } }