Current Path : /var/www/ooareogundevinitiative/wp-content/plugins/give/src/Form/ |
Current File : /var/www/ooareogundevinitiative/wp-content/plugins/give/src/Form/LoadTemplate.php |
<?php /** * Handle Template Loading Handler * * @package Give * @since 2.7.0 */ namespace Give\Form; use _WP_Dependency; use Give\Form\Template\Hookable; use Give\Form\Template\Scriptable; use Give\Helpers\Form\Utils; use Give\Helpers\Form\Utils as FormUtils; use Give\Helpers\Form\Template as FormTemplateUtils; use Give\Helpers\Form\Template\Utils\Frontend as FrontendFormTemplateUtils; defined( 'ABSPATH' ) || exit; /** * LoadTemplate class. * This class is responsible to load necessary hooks and run required functions which help to render form template (in different style). * * @since 2.7.0 */ class LoadTemplate { /** * Default form template ID. * * @var string */ private $defaultTemplateID = 'legacy'; /** * Form template config. * * @var Template */ private $template; /** * setup form template * * @since 2.7.0 * @param int $formId Form Id. Default value: check explanation in src/Helpers/Form/Utils.php:103 */ private function setUpTemplate( $formId = null ) { $formId = (int) ( $formId ?: FrontendFormTemplateUtils::getFormId() ); $templateID = FormTemplateUtils::getActiveID( $formId ) ?: $this->defaultTemplateID; $this->template = Give()->templates->getTemplate( $templateID ); } /** * Initialize form template */ public function init() { $this->setUpTemplate(); // Exit is template is not valid. if ( ! ( $this->template instanceof Template ) ) { return; } // Load template hooks. if ( $this->template instanceof Hookable ) { $this->template->loadHooks(); } // Load template scripts. if ( $this->template instanceof Scriptable ) { add_action( 'wp_enqueue_scripts', [ $this->template, 'loadScripts' ] ); } $this->setUpFrontendHooks(); } /** * Setup frontend hooks * * @since 2.7.0 */ private function setUpFrontendHooks() { add_action( 'give_embed_head', [ $this, 'noRobots' ] ); add_action( 'give_embed_head', 'wp_enqueue_scripts', 1 ); add_action( 'give_embed_head', [ $this, 'handleEnqueueScripts' ], 2 ); add_action( 'give_embed_head', 'wp_print_styles', 8 ); add_action( 'give_embed_head', 'wp_print_head_scripts', 9 ); add_action( 'give_embed_footer', 'wp_print_footer_scripts', 20 ); add_filter( 'give_form_wrap_classes', [ $this, 'editClassList' ], 999 ); add_action( 'give_hidden_fields_after', [ $this, 'addHiddenField' ] ); add_filter( 'give_donation_form_submit_button', [ $this, 'disableDonationButtonInPreviewMode' ], 999, 2 ); // Handle receipt screen template add_action( 'wp_ajax_get_receipt', [ $this, 'handleReceiptAjax' ], 9 ); add_action( 'wp_ajax_nopriv_get_receipt', [ $this, 'handleReceiptAjax' ], 9 ); } /** * Display a noindex meta tag. * * Outputs a noindex meta tag that tells web robots not to index and follow content. * * @since 2.7.0 */ public function noRobots() { echo "<meta name='robots' content='noindex,nofollow'/>\n"; } /** * Render sequoia receipt by ajax * * @since 2.7.0 */ public function handleReceiptAjax() { // Let core handle receipt for legacy form. if ( FormUtils::isLegacyForm() ) { return; } // Remove protocol before url comparision. $referer = preg_replace( '/^https?:\/\//i', '', untrailingslashit( wp_get_referer() ) ); $successPageUrl = preg_replace( '/^https?:\/\//i', '', untrailingslashit( FormUtils::getSuccessPageURL() ) ); // Show new receipt view only on donation confirmation page. if ( false === strpos( $referer, $successPageUrl ) ) { return; } ob_start(); include_once $this->template->getReceiptView(); $data = ob_get_clean(); wp_send_json( $data ); wp_die(); // All ajax handlers die when finished } /** * Handle enqueue script * * @since 2.7.0 */ public function handleEnqueueScripts() { global $wp_scripts, $wp_styles; wp_enqueue_scripts(); $wp_styles->dequeue( $this->getListOfScriptsToDequeue( $wp_styles->registered ) ); $wp_scripts->dequeue( $this->getListOfScriptsToDequeue( $wp_scripts->registered ) ); } /** * Edit donation form wrapper class list. * * @param array $classes * * @return array * @since 2.7.0 */ public function editClassList( $classes ) { // Remove display_style related classes because they (except onpage ) creates style conflict with form template. $classes = array_filter( $classes, static function ( $class ) { return false === strpos( $class, 'give-display-' ); } ); $classes[] = 'give-embed-form'; if ( FormUtils::inIframe() ) { $classes[] = 'give-viewing-form-in-iframe'; } return $classes; } /** * Add hidden field * * @since 2.7.0 */ public function addHiddenField() { printf( '<input type="hidden" name="%1$s" value="%2$s">', 'give_embed_form', '1' ); } /** * Disable donation submit in donation form preview mode. * * @param string $buttonHtml * @param int $formId * @return string * @since 2.7.0 */ public function disableDonationButtonInPreviewMode( $buttonHtml, $formId ) { if ( Utils::canDisableDonationNowButton() ) { $search = 'input type="submit"'; $buttonHtml = str_replace( $search, "{$search} onclick=\"return false;\"", $buttonHtml ); } return $buttonHtml; } /** * Get filter list to dequeue scripts and style * * @param array $scripts * * @return array * @since 2.7.0 */ private function getListOfScriptsToDequeue( $scripts ) { $list = []; $skip = [ 'babel-polyfill' ]; $themeDir = get_template_directory_uri(); /* @var _WP_Dependency $data */ foreach ( $scripts as $handle => $data ) { // Do not unset dependency. if ( in_array( $handle, $skip, true ) ) { continue; } // Do not allow styles and scripts from theme. if ( false !== strpos( (string) $data->src, $themeDir ) ) { $list[] = $handle; continue; } if ( 0 === strpos( $handle, 'give' ) || false !== strpos( $data->src, '\give' ) ) { // Store dependencies to skip. $skip = array_merge( $skip, $data->deps ); continue; } $list[] = $handle; } return $list; } /** * Get template. * * @return Template * @since 2.7.0 */ public function getTheme() { return $this->template; } }