PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.14.2
GiveWP – Donation Plugin and Fundraising Platform v4.14.2
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / ThirdPartySupport / Elementor / Traits / HasFormOptions.php
give / src / ThirdPartySupport / Elementor / Traits Last commit date
HasCampaignOptions.php 10 months ago HasFormOptions.php 10 months ago
HasFormOptions.php
151 lines
1 <?php
2
3 namespace Give\ThirdPartySupport\Elementor\Traits;
4
5 use Exception;
6 use Give\Framework\Database\DB;
7
8 /**
9 * Trait to get form options with campaigns
10 *
11 * @since 4.7.0
12 */
13 trait HasFormOptions
14 {
15 /**
16 * Get form options with campaigns
17 *
18 * @since 4.7.0
19 */
20 public function getFormOptionsWithCampaigns(): array
21 {
22 $campaignsWithForms = $this->getCampaignsWithForms();
23
24 if (empty($campaignsWithForms)) {
25 return [];
26 }
27
28 $campaignOptions = [];
29 $formOptionsGroup = [];
30 $campaignGroups = [];
31
32 // Group forms by campaign
33 foreach ($campaignsWithForms as $item) {
34 // Skip items without campaign association
35 if (empty($item->campaign_id) || empty($item->campaign_title)) {
36 continue;
37 }
38
39 $campaignId = $item->campaign_id;
40 $campaignTitle = $item->campaign_title;
41
42 // Add to campaign options if not already added
43 if (!isset($campaignOptions[$campaignId])) {
44 $campaignOptions[$campaignId] = $campaignTitle;
45 $campaignGroups[$campaignId] = [
46 'label' => $campaignTitle,
47 'options' => [],
48 'campaign_id' => $campaignId,
49 'defaultFormId' => $item->default_form_id ?? null,
50 ];
51 }
52
53 // Add form to the campaign group
54 $campaignGroups[$campaignId]['options'][$item->id] = $item->title;
55 }
56
57 // Ensure default form shows first in each campaign group
58 foreach ($campaignGroups as $id => $group) {
59 $defaultFormId = isset($group['defaultFormId']) ? (int)$group['defaultFormId'] : null;
60 $defaultKey = $defaultFormId ?: null;
61 if ($defaultKey !== null && isset($group['options'][$defaultKey])) {
62 $orderedOptions = [];
63 $orderedOptions[$defaultKey] = $group['options'][$defaultKey];
64 foreach ($group['options'] as $formKey => $label) {
65 if ((string)$formKey === (string)$defaultKey) {
66 continue;
67 }
68 $orderedOptions[$formKey] = $label;
69 }
70 $campaignGroups[$id]['options'] = $orderedOptions;
71 }
72 // Remove helper key before returning
73 unset($campaignGroups[$id]['defaultFormId']);
74 }
75
76 $formOptionsGroup = array_values($campaignGroups);
77
78 return $formOptionsGroup;
79 }
80
81 /**
82 * Get flattened form options from campaigns
83 *
84 * @since 4.7.0
85 */
86 public function getFormOptions(): array
87 {
88 $forms = $this->getForms();
89
90 if (empty($forms)) {
91 return [];
92 }
93
94 foreach ($forms as $form) {
95 $options[$form->id] = $form->title;
96 }
97
98 return $options;
99 }
100
101 /**
102 * Query campaigns with forms
103 *
104 * @since 4.7.0
105 */
106 public function getCampaignsWithForms(): array
107 {
108 try {
109 $query = DB::table('posts', 'forms')
110 ->select(
111 ['forms.ID', 'id'],
112 ['forms.post_title', 'title'],
113 ['campaigns.campaign_title', 'campaign_title'],
114 ['campaigns.id', 'campaign_id'],
115 ['campaigns.form_id', 'default_form_id']
116 )
117 ->innerJoin('give_campaign_forms', 'forms.ID', 'campaign_forms.form_id', 'campaign_forms')
118 ->innerJoin('give_campaigns', 'campaign_forms.campaign_id', 'campaigns.id', 'campaigns')
119 ->where('forms.post_status', 'publish')
120 ->where('forms.post_type', 'give_forms')
121 ->orderByRaw('CASE WHEN forms.ID = campaigns.form_id THEN 0 ELSE 1 END')
122 ->orderBy('forms.post_title', 'ASC');
123
124 return $query->getAll();
125 } catch (Exception $e) {
126 error_log('getCampaignsWithForms error: ' . $e->getMessage());
127 return [];
128 }
129 }
130
131 /**
132 * Get forms
133 *
134 * @since 4.7.0
135 */
136 public function getForms(): array
137 {
138 $forms = DB::table('posts')
139 ->select(
140 ['ID', 'id'],
141 ['post_title', 'title']
142 )
143 ->where('post_type', 'give_forms')
144 ->where('post_status', 'publish')
145 ->orderBy('post_title')
146 ->getAll();
147
148 return $forms;
149 }
150 }
151