PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.13.0
GiveWP – Donation Plugin and Fundraising Platform v4.13.0
4.16.4 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 / API / REST / V3 / Routes / Campaigns / GetCampaignStatistics.php
give / src / API / REST / V3 / Routes / Campaigns Last commit date
Permissions 9 months ago ValueObjects 1 year ago GetCampaignComments.php 8 months ago GetCampaignRevenue.php 8 months ago GetCampaignStatistics.php 8 months ago RegisterCampaignRoutes.php 8 months ago
GetCampaignStatistics.php
132 lines
1 <?php
2
3 namespace Give\API\REST\V3\Routes\Campaigns;
4
5 use DateInterval;
6 use DatePeriod;
7 use DateTimeImmutable;
8 use Exception;
9 use Give\API\REST\V3\Routes\Campaigns\ValueObjects\CampaignRoute;
10 use Give\API\RestRoute;
11 use Give\Campaigns\CampaignDonationQuery;
12 use Give\Campaigns\Models\Campaign;
13 use Give\Framework\Support\Facades\DateTime\Temporal;
14 use WP_REST_Response;
15 use WP_REST_Server;
16
17 /**
18 * @since 4.0.0
19 */
20 class GetCampaignStatistics implements RestRoute
21 {
22 /**
23 * @since 4.13.0 add schema
24 * @since 4.0.0
25 */
26 public function registerRoute()
27 {
28 register_rest_route(
29 CampaignRoute::NAMESPACE,
30 CampaignRoute::CAMPAIGN . '/statistics',
31 [
32 [
33 'methods' => WP_REST_Server::READABLE,
34 'callback' => [$this, 'handleRequest'],
35 'permission_callback' => function () {
36 return current_user_can('manage_options');
37 },
38 ],
39 'args' => [
40 'id' => [
41 'type' => 'integer',
42 'required' => true,
43 'sanitize_callback' => 'absint',
44 ],
45 'rangeInDays' => [
46 'type' => 'integer',
47 'required' => false,
48 'sanitize_callback' => 'absint',
49 'default' => 0, // Zero to mean "all time".
50 ],
51 ],
52 'schema' => [$this, 'getSchema'],
53 ]
54 );
55 }
56
57 /**
58 * @since 4.13.0 return 404 error if campaign is not found
59 * @since 4.0.0
60 *
61 * @throws Exception
62 */
63 public function handleRequest($request): WP_REST_Response
64 {
65 $campaign = Campaign::find($request->get_param('id'));
66
67 if (!$campaign) {
68 return new WP_REST_Response('Campaign not found', 404);
69 }
70
71 $query = new CampaignDonationQuery($campaign);
72
73 if (!$request->get_param('rangeInDays')) {
74 return new WP_REST_Response([
75 [
76 'amountRaised' => $query->sumIntendedAmount(),
77 'donationCount' => $query->countDonations(),
78 'donorCount' => $query->countDonors(),
79 ],
80 ]);
81 }
82
83 $days = $request->get_param('rangeInDays');
84 $date = new DateTimeImmutable('now', wp_timezone());
85 $interval = DateInterval::createFromDateString("-$days days");
86 $period = new DatePeriod($date, $interval, 1);
87
88 return new WP_REST_Response(array_map(function ($targetDate) use ($query, $interval) {
89 $query = $query->between(
90 Temporal::withStartOfDay($targetDate->add($interval)),
91 Temporal::withEndOfDay($targetDate)
92 );
93
94 return [
95 'amountRaised' => $query->sumIntendedAmount(),
96 'donationCount' => $query->countDonations(),
97 'donorCount' => $query->countDonors(),
98 ];
99 }, iterator_to_array($period)));
100 }
101
102 /**
103 * @since 4.13.0
104 */
105 public function getSchema(): array
106 {
107 return [
108 'title' => 'givewp/campaign-statistics',
109 'description' => esc_html__('Provides statistics for a specific campaign.', 'give'),
110 'type' => 'array',
111 'readonly' => true,
112 'items' => [
113 'type' => 'object',
114 'properties' => [
115 'amountRaised' => [
116 'type' => ['integer', 'number'],
117 'description' => esc_html__('The amount raised for the campaign.', 'give'),
118 ],
119 'donationCount' => [
120 'type' => 'integer',
121 'description' => esc_html__('The number of donations for the campaign.', 'give'),
122 ],
123 'donorCount' => [
124 'type' => 'integer',
125 'description' => esc_html__('The number of donors for the campaign.', 'give'),
126 ],
127 ],
128 ],
129 ];
130 }
131 }
132