= Yii::t('DonationsModule.base', 'Donations schema is not initialized for this environment yet. Use the Advanced tab to run setup before configuring providers, goals, or history.') ?>
$tabLabel): ?>
-
= Html::a(Html::encode($tabLabel), $tabUrl($tabKey)) ?>
= Yii::t('DonationsModule.base', 'Default Currency') ?>
= Yii::t('DonationsModule.base', 'Run Donations setup from the Advanced tab to enable General settings.') ?>
= Html::hiddenInput('active_tab', 'general') ?>
= $generalForm->errorSummary($providerForm, ['class' => 'alert alert-danger']) ?>
= $generalForm->field($providerForm, 'default_currency')->textInput(['maxlength' => 8]) ?>
= $generalForm->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.')) ?>
= $generalForm->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]".')) ?>
= Html::submitButton(Yii::t('DonationsModule.base', 'Save General Settings'), ['class' => 'btn btn-primary']) ?>
= Yii::t('DonationsModule.base', 'Donation Goals') ?>
= Yii::t('DonationsModule.base', 'Run Donations setup from the Advanced tab to manage goals.') ?>
= Yii::t('DonationsModule.base', 'You are editing an existing goal.') ?>
= Html::a(
Yii::t('DonationsModule.base', 'Cancel'),
$tabUrl('goals'),
['class' => 'btn btn-xs btn-default', 'style' => 'margin-left:8px;']
) ?>
['enctype' => 'multipart/form-data'],
]); ?>
= $goalActiveForm->errorSummary($goalForm, ['class' => 'alert alert-danger']) ?>
= $goalActiveForm->field($goalForm, 'id')->hiddenInput()->label(false) ?>
= $goalActiveForm->field($goalForm, 'goal_type')->dropDownList($goalTypeOptions) ?>
= $goalActiveForm->field($goalForm, 'target_animal_id')->dropDownList($animalOptions, ['prompt' => Yii::t('DonationsModule.base', 'Select animal')]) ?>
= $goalActiveForm->field($goalForm, 'title') ?>
= $goalActiveForm->field($goalForm, 'target_amount')->input('number', ['step' => '0.01', 'min' => '0']) ?>
= $goalActiveForm->field($goalForm, 'description')->textarea(['rows' => 3]) ?>
= Yii::t('DonationsModule.base', 'Goal Image') ?>
= $goalActiveForm->field($goalForm, 'imageGalleryPath')->hiddenInput()->label(false) ?>
= Yii::t('DonationsModule.base', 'No gallery images found for this animal. You can upload a new image below.') ?>
= $goalActiveForm->field($goalForm, 'imageFile')->fileInput(['accept' => 'image/*']) ?>
= $goalActiveForm->field($goalForm, 'is_active')->checkbox() ?>
= Html::submitButton(
$isEditingGoal ? Yii::t('DonationsModule.base', 'Update Goal') : Yii::t('DonationsModule.base', 'Create Goal'),
['class' => 'btn btn-primary']
) ?>
= Yii::t('DonationsModule.base', 'Existing Goals') ?>
= Yii::t('DonationsModule.base', 'No donation goals configured yet.') ?>
| = Yii::t('DonationsModule.base', 'Title') ?> |
= Yii::t('DonationsModule.base', 'Type') ?> |
= Yii::t('DonationsModule.base', 'Progress') ?> |
= Yii::t('DonationsModule.base', 'Status') ?> |
= Yii::t('DonationsModule.base', 'Actions') ?> |
| = Html::encode($goal->title) ?> |
= Html::encode($goalTypeOptions[$goal->goal_type] ?? $goal->goal_type) ?> |
= number_format((float)$goal->current_amount, 2) ?> / = number_format((float)$goal->target_amount, 2) ?> = Html::encode($goal->currency) ?> |
is_active === 1): ?>
= Yii::t('DonationsModule.base', 'Active') ?>
= Yii::t('DonationsModule.base', 'Inactive') ?>
|
= Html::a(
Yii::t('DonationsModule.base', 'Edit'),
$providerForm->contentContainer->createUrl('/donations/settings', [
'tab' => 'goals',
'goalId' => (int)$goal->id,
]),
['class' => 'btn btn-xs btn-primary']
) ?>
= Html::a(
Yii::t('DonationsModule.base', 'Delete'),
$providerForm->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?'),
]
) ?>
|
= Yii::t('DonationsModule.base', 'Payment Providers') ?>
= Yii::t('DonationsModule.base', 'Run Donations setup from the Advanced tab to manage payment providers.') ?>
= Html::hiddenInput('active_tab', 'payment-providers') ?>
= $providerActiveForm->errorSummary($providerForm, ['class' => 'alert alert-danger']) ?>
= Yii::t('DonationsModule.base', 'Sandbox mode automatically uses sandbox credentials. Disable sandbox mode to use live credentials.') ?>
= $providerActiveForm->field($providerForm, 'sandbox_mode')->checkbox() ?>
= Yii::t('DonationsModule.base', 'PayPal') ?>
= $providerActiveForm->field($providerForm, 'paypal_enabled')->checkbox() ?>
= $providerActiveForm->field($providerForm, 'paypal_recurring_enabled')->checkbox() ?>
= Yii::t('DonationsModule.base', 'Sandbox Credentials') ?>
= $providerActiveForm->field($providerForm, 'paypal_sandbox_client_id') ?>
= $providerActiveForm->field($providerForm, 'paypal_sandbox_client_secret') ?>
= $providerActiveForm->field($providerForm, 'paypal_sandbox_webhook_id') ?>
= Yii::t('DonationsModule.base', 'Live Credentials') ?>
= $providerActiveForm->field($providerForm, 'paypal_live_client_id') ?>
= $providerActiveForm->field($providerForm, 'paypal_live_client_secret') ?>
= $providerActiveForm->field($providerForm, 'paypal_live_webhook_id') ?>
= Yii::t('DonationsModule.base', 'Stripe') ?>
= $providerActiveForm->field($providerForm, 'stripe_enabled')->checkbox() ?>
= $providerActiveForm->field($providerForm, 'stripe_recurring_enabled')->checkbox() ?>
= Yii::t('DonationsModule.base', 'Sandbox Credentials') ?>
= $providerActiveForm->field($providerForm, 'stripe_sandbox_publishable_key') ?>
= $providerActiveForm->field($providerForm, 'stripe_sandbox_secret_key') ?>
= $providerActiveForm->field($providerForm, 'stripe_sandbox_webhook_secret') ?>
= Yii::t('DonationsModule.base', 'Live Credentials') ?>
= $providerActiveForm->field($providerForm, 'stripe_live_publishable_key') ?>
= $providerActiveForm->field($providerForm, 'stripe_live_secret_key') ?>
= $providerActiveForm->field($providerForm, 'stripe_live_webhook_secret') ?>
= Html::submitButton(Yii::t('DonationsModule.base', 'Save Provider Settings'), ['class' => 'btn btn-primary']) ?>
= Yii::t('DonationsModule.base', 'Transactions') ?>
= Yii::t('DonationsModule.base', 'Run Donations setup from the Advanced tab to view transaction history.') ?>
= Yii::t('DonationsModule.base', 'No transactions found.') ?>
| ID |
= Yii::t('DonationsModule.base', 'Provider') ?> |
= Yii::t('DonationsModule.base', 'Mode') ?> |
= Yii::t('DonationsModule.base', 'Status') ?> |
= Yii::t('DonationsModule.base', 'Amount') ?> |
= Yii::t('DonationsModule.base', 'Goal') ?> |
= Yii::t('DonationsModule.base', 'Checkout ID') ?> |
= Yii::t('DonationsModule.base', 'Payment ID') ?> |
= Yii::t('DonationsModule.base', 'Created') ?> |
| = (int)$transaction->id ?> |
= Html::encode($transaction->provider) ?> |
= Html::encode($transaction->mode) ?> |
= Html::encode($transaction->status) ?> |
= number_format((float)$transaction->amount, 2) ?> = Html::encode($transaction->currency) ?> |
#= (int)$transaction->goal_id ?> |
= Html::encode((string)$transaction->provider_checkout_id) ?> |
= Html::encode((string)$transaction->provider_payment_id) ?> |
= Html::encode((string)$transaction->created_at) ?> |
= Yii::t('DonationsModule.base', 'Subscriptions') ?>
= Yii::t('DonationsModule.base', 'Run Donations setup from the Advanced tab to view subscription history.') ?>
= Yii::t('DonationsModule.base', 'No subscriptions found.') ?>
| ID |
= Yii::t('DonationsModule.base', 'Provider') ?> |
= Yii::t('DonationsModule.base', 'Status') ?> |
= Yii::t('DonationsModule.base', 'Amount') ?> |
= Yii::t('DonationsModule.base', 'Interval') ?> |
= Yii::t('DonationsModule.base', 'Subscription ID') ?> |
= Yii::t('DonationsModule.base', 'Created') ?> |
| = (int)$subscription->id ?> |
= Html::encode($subscription->provider) ?> |
= Html::encode($subscription->status) ?> |
= number_format((float)$subscription->amount, 2) ?> = Html::encode($subscription->currency) ?> |
= Html::encode((string)$subscription->interval_count) ?> = Html::encode((string)$subscription->interval_unit) ?> |
= Html::encode((string)$subscription->provider_subscription_id) ?> |
= Html::encode((string)$subscription->created_at) ?> |
= Yii::t('DonationsModule.base', 'Recent Webhook Events (Global)') ?>
= Yii::t('DonationsModule.base', 'Run Donations setup from the Advanced tab to view webhook event history.') ?>
= Yii::t('DonationsModule.base', 'No webhook events found.') ?>
| ID |
= Yii::t('DonationsModule.base', 'Provider') ?> |
= Yii::t('DonationsModule.base', 'Event Type') ?> |
= Yii::t('DonationsModule.base', 'Event ID') ?> |
= Yii::t('DonationsModule.base', 'Processed') ?> |
= Yii::t('DonationsModule.base', 'Created') ?> |
| = (int)$event->id ?> |
= Html::encode($event->provider) ?> |
= Html::encode((string)$event->event_type) ?> |
= Html::encode((string)$event->provider_event_id) ?> |
= (int)$event->is_processed === 1 ? Yii::t('DonationsModule.base', 'Yes') : Yii::t('DonationsModule.base', 'No') ?> |
= Html::encode((string)$event->created_at) ?> |
= Yii::t('DonationsModule.base', 'Module Setup') ?>
= Yii::t('DonationsModule.base', 'Donations supports one-time and recurring contributions using PayPal and Stripe.') ?>
= Yii::t('DonationsModule.base', 'Run setup to apply pending Donations migrations and initialize defaults for this space.') ?>
= Html::a(
Yii::t('DonationsModule.base', 'Run Donations Setup'),
$providerForm->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?'),
]
) ?>
= Yii::t('DonationsModule.base', 'Donations schema is not initialized for this environment yet. Run setup above to continue.') ?>
= Yii::t('DonationsModule.base', 'Stripe Webhook URL') ?>: = Html::encode($stripeWebhookUrl) ?>
= Yii::t('DonationsModule.base', 'PayPal Webhook URL') ?>: = Html::encode($paypalWebhookUrl) ?>
= Yii::t('DonationsModule.base', 'Webhook Simulation Tools') ?>
= Yii::t('DonationsModule.base', 'Use these tools to test webhook processing locally after creating donation intents. Latest matching transaction in this space is used automatically.') ?>
= Html::beginForm($providerForm->contentContainer->createUrl('/donations/settings/simulate-stripe-webhook'), 'post', ['style' => 'display:inline-block;']) ?>
= Html::submitButton(Yii::t('DonationsModule.base', 'Simulate Stripe Checkout Completed'), ['class' => 'btn btn-default btn-sm']) ?>
= Html::endForm() ?>
= Html::beginForm($providerForm->contentContainer->createUrl('/donations/settings/simulate-paypal-webhook'), 'post', ['style' => 'display:inline-block;']) ?>
= Html::submitButton(Yii::t('DonationsModule.base', 'Simulate PayPal Capture Completed'), ['class' => 'btn btn-default btn-sm']) ?>
= Html::endForm() ?>
= Html::beginForm($providerForm->contentContainer->createUrl('/donations/settings/reconcile-pending'), 'post', ['style' => 'display:inline-block;margin-bottom:0;']) ?>
= Html::submitButton(
Yii::t('DonationsModule.base', 'Reconcile Pending Transactions'),
[
'class' => 'btn btn-primary btn-sm',
'data-confirm' => Yii::t('DonationsModule.base', 'Attempt reconciliation for pending transactions in this space now?'),
]
) ?>
= Html::endForm() ?>