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 / API / REST / V3 / Routes / Campaigns / CampaignStatisticsController.php
give / src / API / REST / V3 / Routes / Campaigns Last commit date
Permissions 5 months ago ValueObjects 1 year ago ViewModels 7 months ago CampaignCommentsController.php 7 months ago CampaignController.php 5 months ago CampaignPageController.php 5 months ago CampaignRevenueController.php 5 months ago CampaignStatisticsController.php 5 months ago
CampaignStatisticsController.php
158 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\Campaigns\CampaignDonationQuery;
11 use Give\Campaigns\Models\Campaign;
12 use Give\Framework\Permissions\Facades\UserPermissions;
13 use Give\Framework\Support\Facades\DateTime\Temporal;
14 use WP_Error;
15 use WP_REST_Controller;
16 use WP_REST_Response;
17 use WP_REST_Server;
18
19 /**
20 * @since 4.13.1
21 */
22 class CampaignStatisticsController extends WP_REST_Controller
23 {
24 /**
25 * @var string
26 */
27 protected $namespace;
28
29 /**
30 * @since 4.13.1
31 */
32 public function __construct()
33 {
34 $this->namespace = CampaignRoute::NAMESPACE;
35 }
36
37 /**
38 * @since 4.14.0 update permission capability to use facade
39 * @since 4.13.0 add schema
40 * @since 4.0.0
41 */
42 public function register_routes()
43 {
44 register_rest_route(
45 $this->namespace,
46 '/' . CampaignRoute::CAMPAIGN . '/statistics',
47 [
48 [
49 'methods' => WP_REST_Server::READABLE,
50 'callback' => [$this, 'get_items'],
51 'permission_callback' => function () {
52 return UserPermissions::campaigns()->canView();
53 },
54 'args' => [
55 'id' => [
56 'type' => 'integer',
57 'required' => true,
58 'sanitize_callback' => 'absint',
59 ],
60 'rangeInDays' => [
61 'type' => 'integer',
62 'required' => false,
63 'sanitize_callback' => 'absint',
64 'default' => 0,
65 ],
66 ],
67 ],
68 'schema' => [$this, 'get_public_item_schema'],
69 ]
70 );
71 }
72
73 /**
74 * @since 4.13.0 return 404 error if campaign is not found
75 * @since 4.0.0
76 *
77 * @throws Exception
78 */
79 public function get_items($request): WP_REST_Response
80 {
81 $campaign = Campaign::find($request->get_param('id'));
82
83 if (!$campaign) {
84 $response = new WP_Error('campaign_not_found', __('Campaign not found', 'give'), ['status' => 404]);
85
86 return rest_ensure_response($response);
87 }
88
89 $query = new CampaignDonationQuery($campaign);
90
91 if (!$request->get_param('rangeInDays')) {
92 $data = [[
93 'amountRaised' => $query->sumIntendedAmount(),
94 'donationCount' => $query->countDonations(),
95 'donorCount' => $query->countDonors(),
96 ]];
97
98 $items = new WP_REST_Response($data);
99
100 return rest_ensure_response($items);
101 }
102
103 $days = (int)$request->get_param('rangeInDays');
104 $date = new DateTimeImmutable('now', wp_timezone());
105 $interval = DateInterval::createFromDateString("-$days days");
106 $period = new DatePeriod($date, $interval, 1);
107
108 $data = array_map(function ($targetDate) use ($query, $interval) {
109 $rangeQuery = $query->between(
110 Temporal::withStartOfDay($targetDate->add($interval)),
111 Temporal::withEndOfDay($targetDate)
112 );
113
114 return [
115 'amountRaised' => $rangeQuery->sumIntendedAmount(),
116 'donationCount' => $rangeQuery->countDonations(),
117 'donorCount' => $rangeQuery->countDonors(),
118 ];
119 }, iterator_to_array($period));
120
121 $items = new WP_REST_Response($data);
122
123 return rest_ensure_response($items);
124 }
125
126 /**
127 * @since 4.13.0
128 */
129 public function get_item_schema(): array
130 {
131 return [
132 'title' => 'givewp/campaign-statistics',
133 'description' => esc_html__('Provides statistics for a specific campaign.', 'give'),
134 'type' => 'array',
135 'readonly' => true,
136 'items' => [
137 'type' => 'object',
138 'properties' => [
139 'amountRaised' => [
140 'type' => ['integer', 'number'],
141 'description' => esc_html__('The amount raised for the campaign.', 'give'),
142 ],
143 'donationCount' => [
144 'type' => 'integer',
145 'description' => esc_html__('The number of donations for the campaign.', 'give'),
146 ],
147 'donorCount' => [
148 'type' => 'integer',
149 'description' => esc_html__('The number of donors for the campaign.', 'give'),
150 ],
151 ],
152 ],
153 ];
154 }
155 }
156
157
158