id); $showAnimalTargetField = $goalForm->goal_type === DonationGoal::TYPE_ANIMAL; $hostInfo = Yii::$app->request->hostInfo; $stripeWebhookUrl = $hostInfo . $providerForm->contentContainer->createUrl('/donations/donations/stripe-webhook'); $paypalWebhookUrl = $hostInfo . $providerForm->contentContainer->createUrl('/donations/donations/paypal-webhook'); $tabs = [ 'general' => Yii::t('DonationsModule.base', 'General'), 'goals' => Yii::t('DonationsModule.base', 'Goals'), 'payment-providers' => Yii::t('DonationsModule.base', 'Payment Providers'), 'donation-history' => Yii::t('DonationsModule.base', 'Donation History'), 'advanced' => Yii::t('DonationsModule.base', 'Advanced'), ]; if (!array_key_exists($activeTab, $tabs)) { $activeTab = 'general'; } $tabUrl = static function (string $tab) use ($providerForm): string { return $providerForm->contentContainer->createUrl('/donations/settings', ['tab' => $tab]); }; ?>
Donations Settings') ?>
errorSummary($providerForm, ['class' => 'alert alert-danger']) ?>
field($providerForm, 'default_currency')->textInput(['maxlength' => 8]) ?>
field($providerForm, 'animal_tile_extra_height_px')->input('number', [ 'min' => 0, 'max' => 600, 'step' => 1, ])->hint(Yii::t('DonationsModule.base', 'Adds extra height to animal cards in pixels to accommodate donation overlays.')) ?>
field($providerForm, 'animal_donation_form_header')->textInput(['maxlength' => 255]) ->hint(Yii::t('DonationsModule.base', 'Use [animal-name] to insert the animal name, e.g. "Your Donation directly supports [animal-name]".')) ?>
'btn btn-primary']) ?>
'btn btn-xs btn-default', 'style' => 'margin-left:8px;'] ) ?>
['enctype' => 'multipart/form-data'], ]); ?> errorSummary($goalForm, ['class' => 'alert alert-danger']) ?> field($goalForm, 'id')->hiddenInput()->label(false) ?>
field($goalForm, 'goal_type')->dropDownList($goalTypeOptions) ?>
field($goalForm, 'target_animal_id')->dropDownList($animalOptions, ['prompt' => Yii::t('DonationsModule.base', 'Select animal')]) ?>
field($goalForm, 'title') ?>
field($goalForm, 'target_amount')->input('number', ['step' => '0.01', 'min' => '0']) ?>
field($goalForm, 'description')->textarea(['rows' => 3]) ?>
field($goalForm, 'imageGalleryPath')->hiddenInput()->label(false) ?>
field($goalForm, 'imageFile')->fileInput(['accept' => 'image/*']) ?>
field($goalForm, 'is_active')->checkbox() ?> 'btn btn-primary'] ) ?>
title) ?> goal_type] ?? $goal->goal_type) ?> current_amount, 2) ?> / target_amount, 2) ?> currency) ?> is_active === 1): ?> contentContainer->createUrl('/donations/settings', [ 'tab' => 'goals', 'goalId' => (int)$goal->id, ]), ['class' => 'btn btn-xs btn-primary'] ) ?> contentContainer->createUrl('/donations/settings/delete-goal', ['id' => (int)$goal->id]), [ 'class' => 'btn btn-xs btn-danger', 'data-method' => 'post', 'data-confirm' => Yii::t('DonationsModule.base', 'Delete this donation goal?'), ] ) ?>
errorSummary($providerForm, ['class' => 'alert alert-danger']) ?>
field($providerForm, 'sandbox_mode')->checkbox() ?>
field($providerForm, 'paypal_enabled')->checkbox() ?>
field($providerForm, 'paypal_recurring_enabled')->checkbox() ?>
field($providerForm, 'paypal_sandbox_client_id') ?> field($providerForm, 'paypal_sandbox_client_secret') ?> field($providerForm, 'paypal_sandbox_webhook_id') ?>
field($providerForm, 'paypal_live_client_id') ?> field($providerForm, 'paypal_live_client_secret') ?> field($providerForm, 'paypal_live_webhook_id') ?>
field($providerForm, 'stripe_enabled')->checkbox() ?>
field($providerForm, 'stripe_recurring_enabled')->checkbox() ?>
field($providerForm, 'stripe_sandbox_publishable_key') ?> field($providerForm, 'stripe_sandbox_secret_key') ?> field($providerForm, 'stripe_sandbox_webhook_secret') ?>
field($providerForm, 'stripe_live_publishable_key') ?> field($providerForm, 'stripe_live_secret_key') ?> field($providerForm, 'stripe_live_webhook_secret') ?>
'btn btn-primary']) ?>
ID
id ?> provider) ?> mode) ?> status) ?> amount, 2) ?> currency) ?> #goal_id ?> provider_checkout_id) ?> provider_payment_id) ?> created_at) ?>
ID
id ?> provider) ?> status) ?> amount, 2) ?> currency) ?> interval_count) ?> interval_unit) ?> provider_subscription_id) ?> created_at) ?>
ID
id ?> provider) ?> event_type) ?> provider_event_id) ?> is_processed === 1 ? Yii::t('DonationsModule.base', 'Yes') : Yii::t('DonationsModule.base', 'No') ?> created_at) ?>
contentContainer->createUrl('/donations/settings/setup'), [ 'class' => 'btn btn-primary btn-sm', 'data-method' => 'post', 'data-confirm' => Yii::t('DonationsModule.base', 'Run Donations setup now for this space?'), ] ) ?>
:
:

contentContainer->createUrl('/donations/settings/simulate-stripe-webhook'), 'post', ['style' => 'display:inline-block;']) ?> 'btn btn-default btn-sm']) ?> contentContainer->createUrl('/donations/settings/simulate-paypal-webhook'), 'post', ['style' => 'display:inline-block;']) ?> 'btn btn-default btn-sm']) ?>
contentContainer->createUrl('/donations/settings/reconcile-pending'), 'post', ['style' => 'display:inline-block;margin-bottom:0;']) ?> 'btn btn-primary btn-sm', 'data-confirm' => Yii::t('DonationsModule.base', 'Attempt reconciliation for pending transactions in this space now?'), ] ) ?>
imageGalleryPath) !== '' ? trim((string)$goalForm->imageGalleryPath) : trim((string)$goalForm->image_path); $selectedImageUrlJson = Json::htmlEncode($selectedImageUrl); $this->registerCss(<<registerJs(<<No image selected.'); return; } var image = $('').attr('src', selectedImageUrl); wrapper.append(image); } function renderGalleryOptions() { var goalType = $('#donationgoalform-goal_type').val(); var animalId = $('#donationgoalform-target_animal_id').val(); var wrapper = $('#donation-goal-gallery-options'); var emptyState = $('#donation-goal-gallery-empty'); wrapper.empty(); if (goalType !== 'animal' || !animalId || !galleryMap[animalId] || !galleryMap[animalId].length) { emptyState.show(); return; } emptyState.hide(); galleryMap[animalId].forEach(function(url) { var button = $(''); button.attr('data-url', url); if (selectedImageUrl === url) { button.addClass('is-active'); } button.append($('').attr('src', url).css({ width: '72px', height: '72px', objectFit: 'cover' })); wrapper.append(button); }); } function toggleAnimalField() { var goalType = $('#donationgoalform-goal_type').val(); var wrapper = $('#donation-goal-animal-field'); if (goalType === 'animal') { wrapper.show(); } else { wrapper.hide(); $('#donationgoalform-target_animal_id').val(''); } renderGalleryOptions(); } $(document).on('change', '#donationgoalform-goal_type', toggleAnimalField); $(document).on('change', '#donationgoalform-target_animal_id', renderGalleryOptions); $(document).on('click', '.donation-gallery-item', function() { var url = $(this).data('url') || ''; setSelectedImage(url); }); $(document).on('change', '#donationgoalform-imagefile', function() { if (this.files && this.files.length > 0) { setSelectedImage(''); } }); toggleAnimalField(); renderCurrentPreview(); })(); JS );