elementor
/
modules
/
atomic-widgets
/
props-resolver
/
transformers
/
styles
/
background-overlay-transformer.php
background-overlay-transformer.php in Elementor Website Builder – more than just a page builder 3.32.2, at modules/atomic-widgets/props-resolver/transformers/styles/background-overlay-transformer.php
| 1 | <?php |
| 2 | |
| 3 | namespace Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Styles; |
| 4 | |
| 5 | use Elementor\Modules\AtomicWidgets\PropsResolver\Multi_Props; |
| 6 | use Elementor\Modules\AtomicWidgets\PropsResolver\Props_Resolver_Context; |
| 7 | use Elementor\Modules\AtomicWidgets\PropsResolver\Transformer_Base; |
| 8 | |
| 9 | if ( ! defined( 'ABSPATH' ) ) { |
| 10 | exit; // Exit if accessed directly. |
| 11 | } |
| 12 | |
| 13 | class Background_Overlay_Transformer extends Transformer_Base { |
| 14 | public function transform( $value, Props_Resolver_Context $context ) { |
| 15 | $normalized_values = $this->normalize_overlay_values( $value ); |
| 16 | |
| 17 | if ( empty( $normalized_values ) ) { |
| 18 | return null; |
| 19 | } |
| 20 | |
| 21 | return [ |
| 22 | 'background-image' => $this->get_values_string( $normalized_values, 'src', Background_Image_Overlay_Transformer::DEFAULT_IMAGE, true ), |
| 23 | 'background-repeat' => $this->get_values_string( $normalized_values, 'repeat', Background_Image_Overlay_Transformer::DEFAULT_REPEAT ), |
| 24 | 'background-attachment' => $this->get_values_string( $normalized_values, 'attachment', Background_Image_Overlay_Transformer::DEFAULT_ATTACHMENT ), |
| 25 | 'background-size' => $this->get_values_string( $normalized_values, 'size', Background_Image_Overlay_Transformer::DEFAULT_SIZE ), |
| 26 | 'background-position' => $this->get_values_string( $normalized_values, 'position', Background_Image_Overlay_Transformer::DEFAULT_POSITION ), |
| 27 | ]; |
| 28 | } |
| 29 | |
| 30 | private function normalize_overlay_values( $overlays ): array { |
| 31 | $mapped_values = array_map( function( $value ) { |
| 32 | if ( is_string( $value ) ) { |
| 33 | return [ |
| 34 | 'src' => $value, |
| 35 | 'repeat' => null, |
| 36 | 'attachment' => null, |
| 37 | 'size' => null, |
| 38 | 'position' => null, |
| 39 | ]; |
| 40 | } |
| 41 | |
| 42 | return $value; |
| 43 | }, $overlays ); |
| 44 | |
| 45 | return array_filter( $mapped_values, function( $value ) { |
| 46 | return is_array( $value ) && ! empty( $value['src'] ); |
| 47 | } ); |
| 48 | } |
| 49 | |
| 50 | private function get_values_string( $value, string $prop, string $default_value, bool $prevent_unification = false ) { |
| 51 | $is_empty = empty( array_filter( $value, function ( array $item ) use ( $prop ) { |
| 52 | return isset( $item[ $prop ] ) && ! is_null( $item[ $prop ] ); |
| 53 | } ) ); |
| 54 | |
| 55 | if ( $is_empty ) { |
| 56 | return $default_value; |
| 57 | } |
| 58 | |
| 59 | $formatted_values = array_map( function ( $item ) use ( $prop, $default_value ) { |
| 60 | if ( is_string( $item ) ) { |
| 61 | return $default_value; |
| 62 | } |
| 63 | |
| 64 | if ( ! is_array( $item ) ) { |
| 65 | return $default_value; |
| 66 | } |
| 67 | |
| 68 | return $item[ $prop ] ?? $default_value; |
| 69 | }, $value ); |
| 70 | |
| 71 | if ( ! $prevent_unification ) { |
| 72 | $all_same = count( array_unique( $formatted_values ) ) === 1; |
| 73 | |
| 74 | if ( $all_same ) { |
| 75 | return $formatted_values[0]; |
| 76 | } |
| 77 | } |
| 78 | |
| 79 | return implode( ',', $formatted_values ); |
| 80 | } |
| 81 | } |
| 82 |