donation = $donation; } /** * @since 3.0.0 */ public function getDonationForm(): DonationForm { return DonationForm::find($this->donation->formId); } /** * @since 3.0.0 */ public function getReceipt(): DonationReceipt { return $this->donation->receipt(); } /** * @since 3.0.0 */ public function exports(): array { return [ 'receipt' => $this->getReceipt()->toArray() ]; } /** * @since 3.0.0 */ public function formExports(): array { /** @var DonationFormRepository $donationFormRepository */ $donationFormRepository = give(DonationFormRepository::class); $formDataGateways = $donationFormRepository->getFormDataGateways($this->donation->formId); $formApi = !$donationFormRepository->isLegacyForm( $this->donation->formId ) ? $donationFormRepository->getFormSchemaFromBlocks( $this->donation->formId, $this->getDonationForm()->blocks )->jsonSerialize() : null; return [ 'registeredGateways' => $formDataGateways, 'form' => $formApi, ]; } /** * @since 4.1.0 add campaign colors * @since 3.11.0 Sanitize customCSS property * @since 3.0.0 */ public function render(): string { /** @var DonationFormRepository $donationFormRepository */ $donationFormRepository = give(DonationFormRepository::class); $donationForm = !$donationFormRepository->isLegacyForm( $this->donation->formId ) ? $this->getDonationForm() : null; $formDesignId = $donationForm ? $donationForm->settings->designId : ClassicFormDesign::id(); $customCss = $donationForm && $donationForm->settings->customCss ? $donationForm->settings->customCss : null; $primaryColor = $donationForm ? $donationForm->settings->primaryColor : '#69B868'; $secondaryColor = $donationForm ? $donationForm->settings->secondaryColor : '#000000'; if ($donationForm && $donationForm->settings->inheritCampaignColors){ $campaignColors = $this->getCampaignColors($donationForm->id); if (isset($campaignColors['primaryColor'])) { $primaryColor = $campaignColors['primaryColor']; } if (isset($campaignColors['secondaryColor'])) { $secondaryColor = $campaignColors['secondaryColor']; } } $this->enqueueGlobalStyles($primaryColor, $secondaryColor); $this->enqueueFormScripts($formDesignId); ob_start(); wp_print_styles(); wp_print_head_scripts(); ?>
getScriptAssetDependencies(GIVE_PLUGIN_DIR . 'build/donationFormRegistrars.asset.php'), GIVE_VERSION, true ); Language::setScriptTranslations($handle); wp_add_inline_script( 'givewp-donation-form-registrars', 'window.givewpDonationFormExports = ' . wp_json_encode($this->formExports()) . ';', 'before' ); wp_add_inline_script( 'givewp-donation-form-registrars', 'window.givewpDonationConfirmationReceiptExports = ' . wp_json_encode($this->exports()) . ';', 'before' ); // load template /** @var FormDesignRegistrar $formDesignRegistrar */ $formDesignRegistrar = give(FormDesignRegistrar::class); // silently fail if design is missing for some reason if (!empty($formDesignId) && $formDesignRegistrar->hasDesign($formDesignId)) { $design = $formDesignRegistrar->getDesign($formDesignId); if ($design->css()) { wp_enqueue_style('givewp-form-design-' . $design::id(), $design->css()); } if ($design->js()) { wp_enqueue_script( 'givewp-form-design-' . $design::id(), $design->js(), array_merge( ['givewp-donation-form-registrars'], $design->dependencies() ), false, true ); } } // load receipt app wp_enqueue_script( 'givewp-donation-confirmation-receipt', GIVE_PLUGIN_URL . 'build/donationConfirmationReceiptApp.js', array_merge( $this->getScriptAssetDependencies(GIVE_PLUGIN_DIR . 'build/donationConfirmationReceiptApp.asset.php'), ['givewp-donation-form-registrars'] ), GIVE_VERSION, true ); /** * Load iframeResizer.contentWindow.min.js inside iframe * * @see https://github.com/davidjbradshaw/iframe-resizer */ wp_enqueue_script( 'givewp-donation-form-embed-inside', GIVE_PLUGIN_URL . 'build/donationFormEmbedInside.js', [], GIVE_VERSION, true ); } /** * @since 4.1.0 */ private function getCampaignColors(int $formId): array { /** @var Campaign|null $campaign */ $campaign = give()->campaigns->getByFormId($formId); if ($campaign) { return [ 'primaryColor' => $campaign->primaryColor, 'secondaryColor' => $campaign->secondaryColor, ]; } return [ 'primaryColor' => '', 'secondaryColor' => '', ]; } }