<?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_or_gradient( kadence()->sub_option( 'buttons_background', 'color' ) ) );
$css->add_property( '--global-palette-btn-bg-hover', $css->render_color_or_gradient( 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() );
}
}