PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / trunk
GiveWP – Donation Plugin and Fundraising Platform vtrunk
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 / DonationForms / Controllers / DonationFormsRequestController.php
give / src / DonationForms / Controllers Last commit date
DonateController.php 2 years ago DonationConfirmationReceiptViewController.php 1 year ago DonationFormViewController.php 3 months ago DonationFormsRequestController.php 5 months ago
DonationFormsRequestController.php
149 lines
1 <?php
2
3 namespace Give\DonationForms\Controllers;
4
5 use Exception;
6 use Give\Campaigns\Repositories\CampaignRepository;
7 use Give\Campaigns\ValueObjects\CampaignType;
8 use Give\DonationForms\Models\DonationForm;
9 use Give\DonationForms\Routes\Permissions\DonationFormPermissions;
10 use Give\DonationForms\ValueObjects\DonationFormStatus;
11 use Give\DonationForms\ValueObjects\DonationFormsRoute;
12 use Give\Framework\QueryBuilder\QueryBuilder;
13 use WP_Error;
14 use WP_REST_Request;
15 use WP_REST_Response;
16
17 /**
18 * @since 4.2.0
19 */
20 class DonationFormsRequestController
21 {
22 /**
23 * @since 4.10.1 Added status check to ensure non-authorized users can only access published forms
24 * @since 4.2.0
25 */
26 public function getForm(WP_REST_Request $request)
27 {
28 $form = DonationForm::find($request->get_param('id'));
29
30 if ( ! $form) {
31 return new WP_REST_Response(__('Form not found', 'give'), 404);
32 }
33
34 if (!$form->status->isPublished() && !DonationFormPermissions::canViewPrivate()) {
35 return new WP_Error(
36 'rest_forbidden',
37 __('You do not have permission to view this donation form.', 'give'),
38 ['status' => DonationFormPermissions::authorizationStatusCode()]
39 );
40 }
41
42 return new WP_REST_Response($form->toArray());
43 }
44
45 /**
46 * @since 4.2.0
47 */
48 public function getForms(WP_REST_Request $request): WP_REST_Response
49 {
50 $ids = $request->get_param('ids');
51 $page = $request->get_param('page');
52 $perPage = $request->get_param('per_page');
53 $status = $request->get_param('status');
54
55 $query = DonationForm::query();
56
57 if ( ! in_array('orphaned', $status)) {
58 $query->whereIn('post_status', $status);
59 } else {
60 // get orphaned forms only
61 $query
62 ->whereNotIn('ID', function (QueryBuilder $builder) {
63 $builder
64 ->from('give_campaign_forms')
65 ->select('form_id');
66 })
67 // p2p forms
68 ->whereNotIn('ID', function (QueryBuilder $builder) {
69 $builder
70 ->from('give_campaigns')
71 ->select('form_id')
72 ->where('campaign_type', CampaignType::CORE, '!=');
73 });
74 }
75
76 if ( ! empty($ids)) {
77 $query->whereIn('id', $ids);
78 }
79
80 $totalQuery = clone $query;
81
82 $query
83 ->limit($perPage)
84 ->offset(($page - 1) * $perPage);
85
86 $forms = $query->getAll() ?? [];
87 $totalForms = empty($forms) ? 0 : $totalQuery->count();
88 $totalPages = $totalForms === 0 ? 0 : (int)ceil($totalForms / $perPage);
89
90 $forms = array_map(function ($form) {
91 return $form->toArray();
92 }, $forms);
93
94 $response = rest_ensure_response($forms);
95 $response->header('X-WP-Total', $totalForms);
96 $response->header('X-WP-TotalPages', $totalPages);
97
98 $base = add_query_arg(
99 map_deep($request->get_query_params(), function ($value) {
100 if (is_bool($value)) {
101 $value = $value ? 'true' : 'false';
102 }
103
104 return urlencode($value);
105 }),
106 rest_url(DonationFormsRoute::FORMS)
107 );
108
109 if ($page > 1) {
110 $prevPage = $page - 1;
111
112 if ($prevPage > $totalPages) {
113 $prevPage = $totalPages;
114 }
115
116 $response->link_header('prev', add_query_arg('page', $prevPage, $base));
117 }
118
119 if ($totalPages > $page) {
120 $nextPage = $page + 1;
121 $response->link_header('next', add_query_arg('page', $nextPage, $base));
122 }
123
124 return $response;
125 }
126
127 /**
128 * @since 4.2.0
129 *
130 * @throws Exception
131 */
132 public function associateFormsWithCampaign(WP_REST_Request $request): WP_REST_Response
133 {
134 $formIDs = $request->get_param('formIDs');
135 $campaignId = $request->get_param('campaignId');
136 $campaignRepository = give(CampaignRepository::class);
137
138 if ($campaign = $campaignRepository->getById($campaignId)) {
139 foreach ($formIDs as $formID) {
140 $campaignRepository->addCampaignForm($campaign, $formID);
141 }
142
143 return new WP_REST_Response($formIDs);
144 }
145
146 return new WP_REST_Response('Campaign not found', 404);
147 }
148 }
149