PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.3
GiveWP – Donation Plugin and Fundraising Platform v4.16.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 / Donors / Endpoints / ListDonorsStats.php
give / src / Donors / Endpoints Last commit date
DeleteDonor.php 5 months ago Endpoint.php 5 months ago ListDonors.php 8 months ago ListDonorsStats.php 8 months ago SwitchDonorView.php 4 years ago
ListDonorsStats.php
90 lines
1 <?php
2
3 namespace Give\Donors\Endpoints;
4
5 use Give\Framework\Database\DB;
6 use WP_REST_Request;
7 use WP_REST_Response;
8
9 /**
10 * @since 4.11.0
11 */
12 class ListDonorsStats extends Endpoint
13 {
14 /**
15 * @var string
16 */
17 protected $endpoint = 'admin/donors/stats';
18
19 /**
20 * @var WP_REST_Request
21 */
22 protected $request;
23
24 /**
25 * @since 4.11.0
26 */
27 public function registerRoute()
28 {
29 register_rest_route(
30 'give-api/v2',
31 $this->endpoint,
32 [
33 [
34 'methods' => 'GET',
35 'callback' => [$this, 'handleRequest'],
36 'permission_callback' => [$this, 'permissionsCheck'],
37 ],
38 'args' => [
39 ],
40 ]
41 );
42 }
43
44 /**
45 * @since 4.11.0
46 */
47 public function handleRequest(WP_REST_Request $request): WP_REST_Response
48 {
49 $this->request = $request;
50
51 $statistics = $this->getDonorStatistics();
52
53 return new WP_REST_Response($statistics);
54 }
55
56 /**
57 * Get all donor statistics in a single optimized query
58 *
59 * @since 4.11.0
60 */
61 public function getDonorStatistics(): array
62 {
63 $query = DB::table('give_donors', 'donors')
64 ->leftJoin('give_subscriptions as subscriptions', 'donors.id', 'subscriptions.customer_id')
65 ->selectRaw('SELECT
66 COUNT(DISTINCT donors.id) as total_donors,
67 COUNT(DISTINCT subscriptions.customer_id) as recurring_donors,
68 COUNT(DISTINCT donors.id) - COUNT(DISTINCT subscriptions.customer_id) as one_time_donors
69 ');
70
71 $result = $query->get();
72
73 // Handle case when no results are found
74 if (!$result) {
75 return [
76 'donorsCount' => 0,
77 'oneTimeDonorsCount' => 0,
78 'subscribersCount' => 0,
79 ];
80 }
81
82 return [
83 'donorsCount' => (int) $result->total_donors,
84 'oneTimeDonorsCount' => (int) $result->one_time_donors,
85 'subscribersCount' => (int) $result->recurring_donors,
86 ];
87 }
88
89 }
90