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