add_inline_css = apply_filters( 'advanced-ads-output-inline-css', true ); if ( ! $this->add_inline_css ) { return; } // Add inline css to the tcf container. $this->check_tcf_option(); } /** * Adds inline css. * * @param array $wrapper Add wrapper array. * @param string $css Custom inline css. * @param bool|null $global_output Whether this ad is using cache-busting. * * @return array */ public function add_css( $wrapper, $css, $global_output ) { $this->add_inline_css = $this->add_inline_css && $global_output !== false; if ( ! $this->add_inline_css ) { return $wrapper; } $styles = $this->get_styles_by_string( $css ); $wrapper['style'] = empty( $wrapper['style'] ) ? $styles : array_merge( $wrapper['style'], $styles ); $this->add_inline_css = false; return $wrapper; } /** * Extend TCF output with a container containing inline css. * * @param string $output The output string. * @param Advanced_Ads_Ad $ad The ad object. * * @return string */ public function add_tcf_container( $output, Advanced_Ads_Ad $ad ) { $inline_css = $ad->options( 'inline-css' ); if ( ! $ad->global_output || empty( $inline_css ) || strpos( $output, '
%s
', $output ); } /** * Reformat css styles string to array. * * @param string $string CSS-Style. * * @return array */ private function get_styles_by_string( $string ) { $chunks = array_chunk( preg_split( '/[:;]/', $string ), 2 ); array_walk_recursive( $chunks, function( &$value ) { $value = trim( $value ); } ); return array_combine( array_filter( array_column( $chunks, 0 ) ), array_filter( array_column( $chunks, 1 ) ) ); } /** * If TCF is active, i.e. there is a TCF container, add the options to this container. */ private function check_tcf_option() { static $privacy_options; if ( $privacy_options === null ) { $privacy_options = Advanced_Ads_Privacy::get_instance()->options(); } if ( ! empty( $privacy_options['enabled'] ) && $privacy_options['enabled'] === 'on' && $privacy_options['consent-method'] === 'iab_tcf_20' ) { add_filter( 'advanced-ads-output-final', array( $this, 'add_tcf_container' ), 20, 2 ); $this->add_inline_css = false; } } }