323 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			323 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Kadence\GiveWP\Component class
 | |
|  *
 | |
|  * @package kadence
 | |
|  */
 | |
| 
 | |
| namespace Kadence\Give;
 | |
| 
 | |
| use Kadence\Component_Interface;
 | |
| use Kadence\Kadence_CSS;
 | |
| use function Kadence\kadence;
 | |
| use function Kadence\print_webfont_preload;
 | |
| use function Kadence\get_webfont_url;
 | |
| use function add_action;
 | |
| use function have_posts;
 | |
| use function the_post;
 | |
| use function is_search;
 | |
| use function get_template_part;
 | |
| use function get_post_type;
 | |
| 
 | |
| /**
 | |
|  * Class for adding Woocommerce plugin support.
 | |
|  */
 | |
| class Component implements Component_Interface {
 | |
| 	/**
 | |
| 	 * Associative array of Google Fonts to load.
 | |
| 	 *
 | |
| 	 * Do not access this property directly, instead use the `get_google_fonts()` method.
 | |
| 	 *
 | |
| 	 * @var array
 | |
| 	 */
 | |
| 	protected static $google_fonts = array();
 | |
| 	/**
 | |
| 	 * Gets the unique identifier for the theme component.
 | |
| 	 *
 | |
| 	 * @return string Component slug.
 | |
| 	 */
 | |
| 	public function get_slug() : string {
 | |
| 		return 'give';
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Adds the action and filter hooks to integrate with WordPress.
 | |
| 	 */
 | |
| 	public function initialize() {
 | |
| 		add_action( 'wp_print_styles', array( $this, 'override_iframe_template_styles' ), 10 );
 | |
| 		add_action( 'wp_print_styles', array( $this, 'add_iframe_fonts' ), 20 );
 | |
| 		add_action( 'give_default_wrapper_start', array( $this, 'output_content_wrapper' ) );
 | |
| 		add_action( 'give_default_wrapper_end', array( $this, 'output_content_wrapper_end' ) );
 | |
| 		add_action( 'wp_enqueue_scripts', array( $this, 'give_styles' ), 60 );
 | |
| 		add_filter( 'post_class', array( $this, 'set_give_entry_class' ), 10, 3 );
 | |
| 		add_action( 'give_before_single_form_summary', array( $this, 'output_inner_content_wrapper' ), 2 );
 | |
| 		add_action( 'give_after_single_form_summary', array( $this, 'output_inner_content_wrapper_end' ) );
 | |
| 		add_action( 'give_single_form_summary', array( $this, 'maybe_add_title' ), 1 );
 | |
| 		remove_action( 'give_single_form_summary', 'give_template_single_title', 5 );
 | |
| 	}
 | |
| 	/**
 | |
| 	 * Adds theme output Wrapper.
 | |
| 	 */
 | |
| 	public function maybe_add_title() {
 | |
| 		if ( function_exists( 'give_get_meta' ) ) {
 | |
| 			$form_template = give_get_meta( get_the_ID(), '_give_form_template', true );
 | |
| 			if ( ( ! $form_template || 'legacy' === $form_template ) && kadence()->show_in_content_title() ) {
 | |
| 				get_template_part( 'template-parts/content/entry_header', get_post_type() );
 | |
| 			}
 | |
| 		} elseif ( kadence()->show_in_content_title() ) {
 | |
| 			get_template_part( 'template-parts/content/entry_header', get_post_type() );
 | |
| 		}
 | |
| 	}
 | |
| 	/**
 | |
| 	 * Adds entry class to loop items.
 | |
| 	 *
 | |
| 	 * @param array  $classes the classes.
 | |
| 	 * @param string $class the class.
 | |
| 	 * @param int    $post_id the post id.
 | |
| 	 */
 | |
| 	public function set_give_entry_class( $classes, $class, $post_id ) {
 | |
| 		if ( is_singular() && in_array( 'type-give_forms', $classes, true ) ) {
 | |
| 			$classes[] = 'entry';
 | |
| 			$classes[] = 'content-bg';
 | |
| 			$classes[] = 'single-entry';
 | |
| 		}
 | |
| 		return $classes;
 | |
| 	}
 | |
| 	/**
 | |
| 	 * Add some css styles for zoom_recipe_card
 | |
| 	 */
 | |
| 	public function give_styles() {
 | |
| 		wp_enqueue_style( 'kadence-givewp', get_theme_file_uri( '/assets/css/givewp.min.css' ), array(), KADENCE_VERSION );
 | |
| 	}
 | |
| 	/**
 | |
| 	 * Adds theme output Wrapper.
 | |
| 	 */
 | |
| 	public function output_inner_content_wrapper() {
 | |
| 		?>
 | |
| 		<div class="entry-content-wrap">
 | |
| 		<?php
 | |
| 	}
 | |
| 	/**
 | |
| 	 * Adds theme output Wrapper.
 | |
| 	 */
 | |
| 	public function output_inner_content_wrapper_end() {
 | |
| 		?>
 | |
| 		</div>
 | |
| 		<?php
 | |
| 	}
 | |
| 	/**
 | |
| 	 * Adds theme output Wrapper.
 | |
| 	 */
 | |
| 	public function output_content_wrapper() {
 | |
| 		kadence()->print_styles( 'kadence-content' );
 | |
| 		/**
 | |
| 		 * Hook for Hero Section
 | |
| 		 */
 | |
| 		do_action( 'kadence_hero_header' );
 | |
| 		?>
 | |
| 		<div id="primary" class="content-area">
 | |
| 			<div class="content-container site-container">
 | |
| 				<main id="main" class="site-main" role="main">
 | |
| 					<?php
 | |
| 					/**
 | |
| 					 * Hook for anything before main content
 | |
| 					 */
 | |
| 					do_action( 'kadence_before_main_content' );
 | |
| 					?>
 | |
| 					<div class="content-wrap">
 | |
| 					<?php
 | |
| 	}
 | |
| 	/**
 | |
| 	 * Adds theme end output Wrapper.
 | |
| 	 */
 | |
| 	public function output_content_wrapper_end() {
 | |
| 					?>
 | |
| 					</div>
 | |
| 					<?php
 | |
| 					/**
 | |
| 					 * Hook for anything after main content
 | |
| 					 */
 | |
| 					do_action( 'kadence_after_main_content' );
 | |
| 					?>
 | |
| 				</main><!-- #main -->
 | |
| 				<?php
 | |
| 				get_sidebar();
 | |
| 				?>
 | |
| 			</div>
 | |
| 		</div><!-- #primary -->
 | |
| 		<?php
 | |
| 	}
 | |
| 	/**
 | |
| 	 * Registers or enqueues google fonts.
 | |
| 	 */
 | |
| 	public function add_iframe_fonts() {
 | |
| 		// Enqueue Google Fonts.
 | |
| 		$google_fonts = apply_filters( 'kadence_theme_givewp_google_fonts_array', self::$google_fonts );
 | |
| 		if ( empty( $google_fonts ) ) {
 | |
| 			return '';
 | |
| 		}
 | |
| 		$link    = '';
 | |
| 		$sub_add = array();
 | |
| 		$subsets = kadence()->option( 'google_subsets' );
 | |
| 		foreach ( $google_fonts as $key => $gfont_values ) {
 | |
| 			if ( ! empty( $link ) ) {
 | |
| 				$link .= '%7C'; // Append a new font to the string.
 | |
| 			}
 | |
| 			$link .= $gfont_values['fontfamily'];
 | |
| 			if ( ! empty( $gfont_values['fontvariants'] ) ) {
 | |
| 				$link .= ':';
 | |
| 				$link .= implode( ',', $gfont_values['fontvariants'] );
 | |
| 			}
 | |
| 			if ( ! empty( $gfont_values['fontsubsets'] ) && is_array( $gfont_values['fontsubsets'] ) ) {
 | |
| 				foreach ( $gfont_values['fontsubsets'] as $subkey ) {
 | |
| 					if ( ! empty( $subkey ) && ! isset( $sub_add[ $subkey ] ) ) {
 | |
| 						$sub_add[] = $subkey;
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		$args = array(
 | |
| 			'family' => $link,
 | |
| 		);
 | |
| 		if ( ! empty( $subsets ) ) {
 | |
| 			$available = array( 'latin-ext', 'cyrillic', 'cyrillic-ext', 'greek', 'greek-ext', 'vietnamese', 'arabic', 'khmer', 'chinese', 'chinese-simplified', 'tamil', 'bengali', 'devanagari', 'hebrew', 'korean', 'thai', 'telugu' );
 | |
| 			foreach ( $subsets as $key => $enabled ) {
 | |
| 				if ( $enabled && in_array( $key, $available, true ) ) {
 | |
| 					if ( 'chinese' === $key ) {
 | |
| 						$key = 'chinese-traditional';
 | |
| 					}
 | |
| 					if ( ! isset( $sub_add[ $key ] ) ) {
 | |
| 						$sub_add[] = $key;
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 			if ( $sub_add ) {
 | |
| 				$args['subset'] = implode( ',', $sub_add );
 | |
| 			}
 | |
| 		}
 | |
| 		if ( apply_filters( 'kadence_givewp_display_swap_google_fonts', true ) ) {
 | |
| 			$args['display'] = 'swap';
 | |
| 		}
 | |
| 		$google_fonts_url = add_query_arg( apply_filters( 'kadence_theme_givewp_google_fonts_query_args', $args ), 'https://fonts.googleapis.com/css' );
 | |
| 		if ( ! empty( $google_fonts_url ) ) {
 | |
| 			if ( kadence()->option( 'load_fonts_local' ) ) {
 | |
| 				if ( kadence()->option( 'preload_fonts_local' ) && apply_filters( 'kadence_local_fonts_preload', true ) ) {
 | |
| 					print_webfont_preload( $google_fonts_url );
 | |
| 				}
 | |
| 				wp_enqueue_style(
 | |
| 					'kadence-givewp-iframe-fonts',
 | |
| 					get_webfont_url( $google_fonts_url ),
 | |
| 					'give-sequoia-template-css',
 | |
| 					KADENCE_VERSION
 | |
| 				);
 | |
| 			} else {
 | |
| 				wp_enqueue_style( 'kadence-givewp-iframe-fonts', $google_fonts_url, 'give-sequoia-template-css', KADENCE_VERSION ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	/**
 | |
| 	 * Add basic theme styling to iframe.
 | |
| 	 */
 | |
| 	public function override_iframe_template_styles() {
 | |
| 		$css                    = new Kadence_CSS();
 | |
| 		$media_query            = array();
 | |
| 		$media_query['mobile']  = apply_filters( 'kadence_mobile_media_query', '(max-width: 767px)' );
 | |
| 		$media_query['tablet']  = apply_filters( 'kadence_tablet_media_query', '(max-width: 1024px)' );
 | |
| 		$media_query['desktop'] = apply_filters( 'kadence_desktop_media_query', '(min-width: 1025px)' );
 | |
| 		// Globals.
 | |
| 		$css->set_selector( ':root' );
 | |
| 		$css->add_property( '--global-palette1', kadence()->palette_option( 'palette1' ) );
 | |
| 		$css->add_property( '--global-palette2', kadence()->palette_option( 'palette2' ) );
 | |
| 		$css->add_property( '--global-palette3', kadence()->palette_option( 'palette3' ) );
 | |
| 		$css->add_property( '--global-palette4', kadence()->palette_option( 'palette4' ) );
 | |
| 		$css->add_property( '--global-palette5', kadence()->palette_option( 'palette5' ) );
 | |
| 		$css->add_property( '--global-palette6', kadence()->palette_option( 'palette6' ) );
 | |
| 		$css->add_property( '--global-palette7', kadence()->palette_option( 'palette7' ) );
 | |
| 		$css->add_property( '--global-palette8', kadence()->palette_option( 'palette8' ) );
 | |
| 		$css->add_property( '--global-palette9', kadence()->palette_option( 'palette9' ) );
 | |
| 		$css->add_property( '--global-palette-highlight', $css->render_color( kadence()->sub_option( 'link_color', 'highlight' ) ) );
 | |
| 		$css->add_property( '--global-palette-highlight-alt', $css->render_color( kadence()->sub_option( 'link_color', 'highlight-alt' ) ) );
 | |
| 		$css->add_property( '--global-palette-highlight-alt2', $css->render_color( kadence()->sub_option( 'link_color', 'highlight-alt2' ) ) );
 | |
| 		$css->add_property( '--global-palette-btn-bg', $css->render_color( kadence()->sub_option( 'buttons_background', 'color' ) ) );
 | |
| 		$css->add_property( '--global-palette-btn-bg-hover', $css->render_color( kadence()->sub_option( 'buttons_background', 'hover' ) ) );
 | |
| 		$css->add_property( '--global-palette-btn', $css->render_color( kadence()->sub_option( 'buttons_color', 'color' ) ) );
 | |
| 		$css->add_property( '--global-palette-btn-hover', $css->render_color( kadence()->sub_option( 'buttons_color', 'hover' ) ) );
 | |
| 		$css->add_property( '--global-body-font-family', $css->render_font_family( kadence()->option( 'base_font' ), '' ) );
 | |
| 		$css->add_property( '--global-heading-font-family', $css->render_font_family( kadence()->option( 'heading_font' ) ) );
 | |
| 		$css->add_property( '--global-fallback-font', apply_filters( 'kadence_theme_global_typography_fallback', 'sans-serif' ) );
 | |
| 		$css->add_property( '--global-display-fallback-font', apply_filters( 'kadence_theme_global_display_typography_fallback', 'sans-serif' ) );
 | |
| 
 | |
| 		$css->set_selector( 'body' );
 | |
| 		$css->add_property( 'margin', '10px' );
 | |
| 		$css->add_property( 'font-family', 'var( --global-body-font-family )' );
 | |
| 		$css->add_property( 'color', 'var(--global-palette4 )' );
 | |
| 
 | |
| 		$css->set_selector( '.give-embed-form, .give-embed-receipt' );
 | |
| 		$css->add_property( 'color', 'var(--global-palette5 )' );
 | |
| 		$css->add_property( 'background-color', 'var(--global-palette9 )' );
 | |
| 		$css->add_property( 'box-shadow', '0px 15px 25px -10px rgb(0 0 0 / 5%)' );
 | |
| 		$css->add_property( 'border-radius', '.25rem' );
 | |
| 		$css->add_property( 'border', '1px solid var( --global-palette7 )' );
 | |
| 
 | |
| 		$css->set_selector( 'body.give-form-templates .give-form-navigator' );
 | |
| 		$css->add_property( 'border', '1px solid transparent' );
 | |
| 		$css->add_property( 'background', 'var(--global-palette8 )' );
 | |
| 		$css->set_selector( '.form-footer .secure-notice' );
 | |
| 		$css->add_property( 'background', 'var(--global-palette8 )' );
 | |
| 		$css->add_property( 'border-top', '1px solid var( --global-palette7 )' );
 | |
| 		$css->add_property( 'color', 'var(--global-palette6 )' );
 | |
| 		$css->set_selector( 'body.give-form-templates .give-form-navigator.nav-visible' );
 | |
| 		$css->add_property( 'border', '1px solid var( --global-palette7 )' );
 | |
| 		$css->set_selector( '.form-footer .navigator-tracker .step-tracker' );
 | |
| 		$css->add_property( 'background', 'var(--global-palette7 )' );
 | |
| 		$css->set_selector( '.form-footer .navigator-tracker .step-tracker.current' );
 | |
| 		$css->add_property( 'background', 'var(--global-palette6 )' );
 | |
| 		$css->set_selector( '.payment #give_purchase_form_wrap');
 | |
| 		$css->add_property( 'background', 'var(--global-palette8 )' );
 | |
| 		$css->set_selector(
 | |
| 			'body.give-form-templates,
 | |
| 			body.give-form-templates .give-btn,
 | |
| 			body.give-form-templates .choose-amount .give-donation-amount .give-amount-top,
 | |
| 			body.give-form-templates #give-recurring-form .form-row input[type=email],
 | |
| 			body.give-form-templates #give-recurring-form .form-row input[type=password],
 | |
| 			body.give-form-templates #give-recurring-form .form-row input[type=tel],
 | |
| 			body.give-form-templates #give-recurring-form .form-row input[type=text],
 | |
| 			body.give-form-templates #give-recurring-form .form-row input[type=url],
 | |
| 			body.give-form-templates #give-recurring-form .form-row textarea, .give-input-field-wrapper,
 | |
| 			body.give-form-templates .give-square-cc-fields,
 | |
| 			body.give-form-templates .give-stripe-cc-field,
 | |
| 			body.give-form-templates .give-stripe-single-cc-field-wrap,
 | |
| 			body.give-form-templates form.give-form .form-row input[type=email],
 | |
| 			body.give-form-templates form.give-form .form-row input[type=password],
 | |
| 			body.give-form-templates form.give-form .form-row input[type=tel],
 | |
| 			body.give-form-templates form.give-form .form-row input[type=text],
 | |
| 			body.give-form-templates form.give-form .form-row input[type=url],
 | |
| 			body.give-form-templates form.give-form .form-row textarea,
 | |
| 			body.give-form-templates form[id*=give-form] .form-row input[type=email],
 | |
| 			body.give-form-templates form[id*=give-form] .form-row input[type=email].required,
 | |
| 			body.give-form-templates form[id*=give-form] .form-row input[type=password],
 | |
| 			body.give-form-templates form[id*=give-form] .form-row input[type=password].required,
 | |
| 			body.give-form-templates form[id*=give-form] .form-row input[type=tel],
 | |
| 			body.give-form-templates form[id*=give-form] .form-row input[type=tel].required,
 | |
| 			body.give-form-templates form[id*=give-form] .form-row input[type=text],
 | |
| 			body.give-form-templates form[id*=give-form] .form-row input[type=text].required,
 | |
| 			body.give-form-templates form[id*=give-form] .form-row input[type=url],
 | |
| 			body.give-form-templates form[id*=give-form] .form-row input[type=url].required,
 | |
| 			body.give-form-templates form[id*=give-form] .form-row textarea,
 | |
| 			body.give-form-templates form[id*=give-form] .form-row textarea.required'
 | |
| 		);
 | |
| 		$css->add_property( 'font-family', 'var( --global-body-font-family )' );
 | |
| 		$css->set_selector( '.give-stripe-becs-mandate-acceptance-text, .give-stripe-sepa-mandate-acceptance-text, p, .give-form-navigator>.title, .give-form-navigator>.back-btn,.payment .subheading' );
 | |
| 		$css->add_property( 'color', 'var(--global-palette5 )' );
 | |
| 		$css->set_selector( 'h1,h2,h3,h4,h5,h6, .payment .heading' );
 | |
| 		$css->add_property( 'color', 'var(--global-palette3 )' );
 | |
| 		$css->set_selector( '.advance-btn, .download-btn, .give-submit' );
 | |
| 		$css->add_property( 'text-transform', 'uppercase' );
 | |
| 		$css->add_property( 'font-weight', '600' );
 | |
| 		$css->add_property( 'font-size', '16px' );
 | |
| 		$css->add_property( 'padding', '14px 30px !important' );
 | |
| 		self::$google_fonts = $css->fonts_output();
 | |
| 		wp_add_inline_style( 'give-sequoia-template-css', $css->css_output() );
 | |
| 	}
 | |
| }
 |