HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux WebLive 5.15.0-79-generic #86-Ubuntu SMP Mon Jul 10 16:07:21 UTC 2023 x86_64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/html/wpmuhibbah/wp-content/plugins/give/src/Donations/Actions/LoadDonationAdminOptions.php
<?php

namespace Give\Donations\Actions;

use Give\API\REST\V3\Routes\Donations\ValueObjects\DonationRoute;
use Give\Donations\ValueObjects\DonationStatus;
use Give\Helpers\IntlTelInput;
use Give\BetaFeatures\Facades\FeatureFlag;
use Give\Framework\Database\DB;
use Give\Framework\PaymentGateways\PaymentGateway;

/**
 * The purpose of this action is to have a centralized place for localizing options used on many different places
 * by donation scripts (list tables, blocks, etc.)
 *
 * @since 4.6.1 Rename to LoadDonationAdminOptions
 * @since 4.6.0
 */
class LoadDonationAdminOptions
{
    public function __invoke()
    {
        wp_register_script('give-donation-options', false);
        wp_localize_script('give-donation-options', 'GiveDonationOptions', $this->getDonationOptions());
        wp_enqueue_script('give-donation-options');
    }

    /**
     * Get all donation options for localization
     *
     * @since 4.7.0 removed donors from the options
     * @since 4.6.0
     */
    private function getDonationOptions(): array
    {
        $isAdmin = is_admin();

        return [
            'isAdmin' => $isAdmin,
            'adminUrl' => admin_url(),
            'apiRoot' => rest_url(DonationRoute::NAMESPACE),
            'apiNonce' => wp_create_nonce('wp_rest'),
            'donationsAdminUrl' => admin_url('edit.php?post_type=give_forms&page=give-payment-history'),
            'currency' => give_get_currency(),
            'intlTelInputSettings' => IntlTelInput::getSettings(),
            'nameTitlePrefixes' => give_get_option('title_prefixes', array_values(give_get_default_title_prefixes())),
            'countries' => $this->decodeHtmlEntities(give_get_country_list()),
            'states' => $this->getStatesData(),
            'donationStatuses' => DonationStatus::labels(),
            'campaignsWithForms' => $this->getCampaignsWithForms(),
            'isRecurringEnabled' => defined('GIVE_RECURRING_VERSION') ? GIVE_RECURRING_VERSION : null,
            'admin' => $isAdmin ? [] : null,
            'eventTicketsEnabled' => FeatureFlag::eventTickets(),
            'isFeeRecoveryEnabled' => defined('GIVE_FEE_RECOVERY_VERSION'),
            'mode' => give_is_test_mode() ? 'test' : 'live',
            'gateways' => $this->getGateways(),
        ];
    }

    /**
     * Get states data with decoded HTML entities
     *
     * @since 4.6.0
     */
    private function getStatesData(): array
    {
        return [
            'list' => $this->decodeHtmlEntities(give_states_list(), true),
            'labels' => give_get_states_label(),
            'noStatesCountries' => array_keys(give_no_states_country_list()),
            'statesNotRequiredCountries' => array_keys(give_states_not_required_country_list()),
        ];
    }

    /**
     * Get campaigns with their forms using Campaign query builder
     *
     * @since 4.6.0
     */
    private function getCampaignsWithForms(): array
    {
        $campaignsWithForms = [];

        $results = DB::table('give_campaigns', 'campaigns')
            ->select(
                ['campaigns.id', 'campaignId'],
                ['campaigns.campaign_title', 'campaignTitle'],
                ['campaigns.form_id', 'defaultFormId'],
                ['posts.ID', 'formId'],
                ['posts.post_title', 'formTitle']
            )
            ->leftJoin('give_campaign_forms', 'campaigns.id', 'campaign_forms.campaign_id', 'campaign_forms')
            ->leftJoin('posts', 'campaign_forms.form_id', 'posts.ID', 'posts')
            ->where('posts.post_type', 'give_forms')
            ->orderBy('campaigns.id', 'DESC')
            ->orderBy('posts.ID', 'DESC')
            ->getAll(ARRAY_A);

        foreach ($results as $row) {
            [
                'campaignId' => $campaignId,
                'campaignTitle' => $campaignTitle,
                'defaultFormId' => $defaultFormId,
                'formId' => $formId,
                'formTitle' => $formTitle
            ] = $row;

            if (!isset($campaignsWithForms[$campaignId])) {
                $campaignsWithForms[$campaignId] = [
                    'title' => $campaignTitle,
                    'defaultFormId' => $defaultFormId,
                    'forms' => []
                ];
            }

            if ($formId && $formTitle) {
                $campaignsWithForms[$campaignId]['forms'][$formId] = $formTitle;
            }
        }

        return $campaignsWithForms;
    }

    /**
     * Decode HTML entities from an array of strings or nested arrays
     *
     * @since 4.6.0
     */
    private function decodeHtmlEntities(array $data, bool $isNested = false): array
    {
        if ($isNested) {
            return array_map(function($nestedData) {
                return $this->decodeHtmlEntities($nestedData);
            }, $data);
        }

        return array_map(function($item) {
            return html_entity_decode($item, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, 'UTF-8');
        }, $data);
    }

    /**
     * Get gateways
     *
     * @since 4.6.0
     */
    private function getGateways(): array
    {
        $enabledGateways = array_keys(give_get_enabled_payment_gateways());

        $gateways = array_map(static function ($gatewayClass) use ($enabledGateways) {
            /** @var PaymentGateway $gateway */
            $gateway = give($gatewayClass);

            return [
                'id' => $gateway::id(),
                'enabled' => in_array($gateway::id(), $enabledGateways, true),
                'label' => $gateway->getName(),
                'supportsSubscriptions' => $gateway->supportsSubscriptions(),
                'supportsRefund' => $gateway->supportsRefund(),
            ];
        }, give()->gateways->getPaymentGateways());

        return array_values($gateways);
    }
}