PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.15.3
GiveWP – Donation Plugin and Fundraising Platform v4.15.3
4.16.3 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 / Campaigns / Actions / RedirectLegacyCreateFormToCreateCampaign.php
give / src / Campaigns / Actions Last commit date
AddCampaignFormFromRequest.php 1 year ago AddNewBadgeToAdminMenuItem.php 1 year ago AllowGiveRolesToEditCampaignPages.php 1 month ago ArchiveCampaignFormsAsDraftStatus.php 1 year ago ArchiveCampaignPagesAsDraftStatus.php 1 year ago AssignDuplicatedFormToCampaign.php 1 year ago AssociateCampaignPageWithCampaign.php 1 year ago CacheCampaignData.php 7 months ago ConvertQueryDataToCampaign.php 1 year ago CreateCampaignPage.php 1 year ago CreateDefaultCampaignForm.php 4 months ago CreateDefaultLayoutForCampaignPage.php 1 year ago DuplicateCampaign.php 7 months ago EnqueueCampaignPageEditorAssets.php 1 year ago FormInheritsCampaignGoal.php 1 year ago LoadCampaignAdminOptions.php 11 months ago LoadCampaignDetailsAssets.php 1 year ago LoadCampaignPublicOptions.php 11 months ago LoadCampaignsListTableAssets.php 11 months ago PreventDeleteDefaultForm.php 1 year ago RedirectLegacyCreateFormToCreateCampaign.php 4 months ago RegisterCampaignBlocks.php 6 months ago RegisterCampaignIdRestField.php 1 year ago RegisterCampaignShortcodes.php 10 months ago RenderDonateButton.php 9 months ago ReplaceGiveFormsCptLabels.php 1 year ago UnarchiveCampaignFormAsPublishStatus.php 1 year ago
RedirectLegacyCreateFormToCreateCampaign.php
157 lines
1 <?php
2
3 namespace Give\Campaigns\Actions;
4
5 use Give\Campaigns\Models\Campaign;
6 use Give\Framework\Database\DB;
7
8 /**
9 * @since 4.0.0
10 */
11 class RedirectLegacyCreateFormToCreateCampaign
12 {
13 /**
14 * @since 4.0.0
15 */
16 public function __invoke()
17 {
18 if ($this->isAddingNewForm()) {
19 if ($this->isCampaignIdInvalidOrMissing()) {
20 $this->redirectToNewCampaignPage();
21 }
22
23 return;
24 }
25
26 if ($this->isEditingCampaignForm()) {
27 if ($this->isP2P()) {
28 if ($this->isP2PCampaignFormIdInvalidOrMissing()) {
29 $this->redirectToP2PNewCampaignPage();
30 }
31 } elseif ($this->isCampaignFormIdInvalidOrMissing()) {
32 $this->redirectToNewCampaignPage();
33 }
34 }
35 }
36
37 /**
38 * @since 4.0.0
39 */
40 private function isAddingNewForm(): bool
41 {
42 return $GLOBALS['pagenow'] === 'post-new.php'
43 && isset($_GET['post_type'])
44 && $_GET['post_type'] === 'give_forms';
45 }
46
47 /**
48 * @since 4.0.0
49 */
50 private function isEditingCampaignForm(): bool
51 {
52 return $GLOBALS['pagenow'] === 'edit.php'
53 && isset($_GET['post_type'])
54 && $_GET['post_type'] === 'give_forms'
55 && isset($_GET['page']) && $_GET['page'] === 'givewp-form-builder';
56 }
57
58 /**
59 * @since 4.0.0
60 */
61 private function isP2P(): bool
62 {
63 return isset($_GET['p2p']);
64 }
65
66 /**
67 * @since 4.0.0
68 */
69 private function redirectToNewCampaignPage(): void
70 {
71 wp_safe_redirect(admin_url('edit.php?post_type=give_forms&page=give-campaigns&new=campaign'));
72 exit;
73 }
74
75 /**
76 * @since 4.0.0
77 */
78 private function redirectToP2PNewCampaignPage(): void
79 {
80 wp_safe_redirect(admin_url('edit.php?post_type=give_forms&page=p2p-add-campaign'));
81 exit;
82 }
83
84 /**
85 * @since 4.0.0
86 */
87 private function isCampaignIdInvalidOrMissing(): bool
88 {
89 return ! isset($_GET['campaignId']) || ! (Campaign::find(absint($_GET['campaignId'])));
90 }
91
92 /**
93 * @since 4.14.2 updated logic to search the DB explicitly for P2P campaigns
94 * @since 4.0.0
95 */
96 private function isP2PCampaignFormIdInvalidOrMissing(): bool
97 {
98 if (!isset($_GET['donationFormID'])) {
99 return true;
100 }
101
102 $formId = absint($_GET['donationFormID']);
103
104 // Check give_campaigns.form_id for P2P campaigns
105 $campaign = DB::table('give_campaigns', 'c')
106 ->select('c.id')
107 ->innerJoin('give_p2p_campaigns', 'c.id', 'p2p.campaign_id', 'p2p')
108 ->where('c.form_id', $formId)
109 ->get();
110
111 if ($campaign) {
112 return false;
113 }
114
115 // Also check give_campaign_forms junction table for P2P campaigns
116 // (migrated v3 forms are stored in the junction table)
117 $campaignForm = DB::table('give_campaign_forms')
118 ->where('form_id', $formId)
119 ->get();
120
121 if ($campaignForm) {
122 $p2pCampaign = DB::table('give_p2p_campaigns')
123 ->where('campaign_id', $campaignForm->campaign_id)
124 ->get();
125
126 return !$p2pCampaign;
127 }
128
129 return true;
130 }
131
132 /**
133 * @since 4.14.2 Also check give_campaign_forms junction table for non-core campaigns (e.g., migrated P2P forms).
134 * @since 4.0.0
135 */
136 private function isCampaignFormIdInvalidOrMissing(): bool
137 {
138 if (!isset($_GET['donationFormID'])) {
139 return true;
140 }
141
142 $formId = absint($_GET['donationFormID']);
143
144 // Check core campaigns first
145 if (Campaign::findByFormId($formId)) {
146 return false;
147 }
148
149 // Fallback: check give_campaign_forms junction table for non-core campaigns
150 $campaignForm = DB::table('give_campaign_forms')
151 ->where('form_id', $formId)
152 ->get();
153
154 return !$campaignForm;
155 }
156 }
157