PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.27.2
GiveWP – Donation Plugin and Fundraising Platform v2.27.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 / Exports / DonorsExport.php
give / src / Exports Last commit date
resources 4 years ago DonorsExport.php 3 years ago ServiceProvider.php 4 years ago
DonorsExport.php
180 lines
1 <?php
2
3 namespace Give\Exports;
4
5 use Give\Framework\Database\DB;
6 use Give\Framework\QueryBuilder\JoinQueryBuilder;
7 use Give_Batch_Export;
8
9 /**
10 * @since 2.21.2
11 */
12 class DonorsExport extends Give_Batch_Export
13 {
14 /** @inheritdoc */
15 public $export_type = 'donors';
16
17 /** @var array */
18 protected $postedData;
19
20 /** @var String */
21 protected $startDate;
22
23 /** @var String */
24 protected $endDate;
25
26 /** @var String */
27 protected $searchBy;
28
29 /**
30 * @inheritdoc
31 */
32 public function set_properties($request)
33 {
34 $this->postedData = $request;
35
36 if ($this->postedData['giveDonorExport-startDate']) {
37 $this->startDate = date('Y-m-d', strtotime($this->postedData['giveDonorExport-startDate']));
38 }
39
40 if ($this->postedData['giveDonorExport-endDate']) {
41 $this->endDate = date('Y-m-d', strtotime($this->postedData['giveDonorExport-endDate']));
42 }
43
44 if ($this->postedData['searchBy']) {
45 $this->searchBy = $this->postedData['searchBy'];
46 }
47 }
48
49 /**
50 * @since 2.21.2
51 */
52 public function csv_cols(): array
53 {
54 return $this->flattenAddressColumn(
55 array_intersect_key([
56 'full_name' => __('Name', 'give'),
57 'email' => __('Email', 'give'),
58 'address' => [
59 'address_line1' => __('Address', 'give'),
60 'address_line2' => __('Address 2', 'give'),
61 'address_city' => __('City', 'give'),
62 'address_state' => __('State', 'give'),
63 'address_zip' => __('Zip', 'give'),
64 'address_country' => __('Country', 'give'),
65 ],
66 'userid' => __('User ID', 'give'),
67 'donations' => __('Number of donations', 'give'),
68 'donation_sum' => __('Total Donated', 'give'),
69 ], $this->postedData['give_export_columns'])
70 );
71 }
72
73 /**
74 * @since 2.21.2
75 */
76 public function get_data(): array
77 {
78 $donorQuery = DB::table('give_donors', 'donors')
79 ->distinct()
80 ->select(
81 ['donors.name', 'full_name'],
82 ['donors.email', 'email'],
83 ['donors.user_id', 'userid'],
84 ['donors.purchase_count', 'donations'],
85 ['donors.purchase_value', 'donation_sum']
86 );
87
88 $donationQuery = DB::table('posts', 'donations')
89 ->select('donations.ID', ['meta.meta_value', 'donorId'])
90 ->join(function (JoinQueryBuilder $builder) {
91 $builder
92 ->leftJoin('give_donationmeta', 'meta')
93 ->on('donations.ID', 'meta.donation_id')
94 ->andOn('meta.meta_key', '_give_payment_donor_id', true);
95 })
96 ->where('donations.post_type', 'give_payment');
97
98 if ($this->searchBy === 'donor') {
99 if ($this->startDate && $this->endDate) {
100 $donorQuery->whereBetween('DATE(donors.date_created)', $this->startDate, $this->endDate);
101 } elseif ($this->startDate) {
102 $donorQuery->where('DATE(donors.date_created)', $this->startDate, '>=');
103 } elseif ($this->endDate) {
104 $donorQuery->where('DATE(donors.date_created)', $this->endDate, '<=');
105 }
106 } else {
107 if ($this->startDate && $this->endDate) {
108 $donationQuery->whereBetween('DATE(donations.post_date)', $this->startDate, $this->endDate);
109 } elseif ($this->startDate) {
110 $donationQuery->where('DATE(donations.post_date)', $this->startDate, '>=');
111 } elseif ($this->endDate) {
112 $donationQuery->where('DATE(donations.post_date)', $this->endDate, '<=');
113 }
114 }
115
116 $donorQuery->joinRaw("JOIN ({$donationQuery->getSQL()}) AS sub ON donors.id = sub.donorId");
117
118 if ($this->shouldIncludeAddress()) {
119 $donorQuery->attachMeta('give_donormeta',
120 'donors.ID',
121 'donor_id',
122 ['_give_donor_address_billing_line1_0', 'address_line1'],
123 ['_give_donor_address_billing_line2_0', 'address_line2'],
124 ['_give_donor_address_billing_city_0', 'address_city'],
125 ['_give_donor_address_billing_state_0', 'address_state'],
126 ['_give_donor_address_billing_zip_0', 'address_zip'],
127 ['_give_donor_address_billing_country_0', 'address_country']
128 );
129 }
130
131 return $this->filterExportData(
132 array_map(function ($row) {
133 return array_intersect_key($row, $this->csv_cols());
134 }, $donorQuery->getAll(ARRAY_A))
135 );
136 }
137
138 /**
139 * @since 2.21.2
140 */
141 protected function shouldIncludeAddress(): bool
142 {
143 return isset($this->postedData['give_export_columns']['address']);
144 }
145
146 /**
147 * @since 2.21.2
148 */
149 protected function flattenAddressColumn(array $columnarData): array
150 {
151 return $this->flattenColumn($columnarData, 'address');
152 }
153
154 /**
155 * @since 2.21.2
156 */
157 protected function flattenColumn(array $columnarData, string $columnName): array
158 {
159 if (isset($columnarData[$columnName])) {
160 $columnarData = array_merge($columnarData, $columnarData[$columnName]);
161 unset($columnarData[$columnName]);
162 }
163
164 return $columnarData;
165 }
166
167 /**
168 * @since 2.21.2
169 */
170 protected function filterExportData(array $exportData): array
171 {
172 /**
173 * @since 2.21.2
174 *
175 * @param array $exportData
176 */
177 return apply_filters("give_export_get_data_{$this->export_type}", $exportData);
178 }
179 }
180