PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.31.0
GiveWP – Donation Plugin and Fundraising Platform v2.31.0
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 / 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
185 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.29.0 Include donor created date
51 * @since 2.21.2
52 */
53 public function get_data(): array
54 {
55 $donorQuery = DB::table('give_donors', 'donors')
56 ->distinct()
57 ->select(
58 ['donors.name', 'full_name'],
59 ['donors.email', 'email'],
60 ['donors.user_id', 'userid'],
61 ['donors.date_created', 'donor_created_date'],
62 ['donors.purchase_count', 'donations'],
63 ['donors.purchase_value', 'donation_sum']
64 );
65
66 $donationQuery = DB::table('posts', 'donations')
67 ->select('donations.ID', ['meta.meta_value', 'donorId'])
68 ->join(function (JoinQueryBuilder $builder) {
69 $builder
70 ->leftJoin('give_donationmeta', 'meta')
71 ->on('donations.ID', 'meta.donation_id')
72 ->andOn('meta.meta_key', '_give_payment_donor_id', true);
73 })
74 ->where('donations.post_type', 'give_payment');
75
76 if ($this->searchBy === 'donor') {
77 if ($this->startDate && $this->endDate) {
78 $donorQuery->whereBetween('DATE(donors.date_created)', $this->startDate, $this->endDate);
79 } elseif ($this->startDate) {
80 $donorQuery->where('DATE(donors.date_created)', $this->startDate, '>=');
81 } elseif ($this->endDate) {
82 $donorQuery->where('DATE(donors.date_created)', $this->endDate, '<=');
83 }
84 } else {
85 if ($this->startDate && $this->endDate) {
86 $donationQuery->whereBetween('DATE(donations.post_date)', $this->startDate, $this->endDate);
87 } elseif ($this->startDate) {
88 $donationQuery->where('DATE(donations.post_date)', $this->startDate, '>=');
89 } elseif ($this->endDate) {
90 $donationQuery->where('DATE(donations.post_date)', $this->endDate, '<=');
91 }
92 }
93
94 $donorQuery->joinRaw("JOIN ({$donationQuery->getSQL()}) AS sub ON donors.id = sub.donorId");
95
96 if ($this->shouldIncludeAddress()) {
97 $donorQuery->attachMeta(
98 'give_donormeta',
99 'donors.ID',
100 'donor_id',
101 ['_give_donor_address_billing_line1_0', 'address_line1'],
102 ['_give_donor_address_billing_line2_0', 'address_line2'],
103 ['_give_donor_address_billing_city_0', 'address_city'],
104 ['_give_donor_address_billing_state_0', 'address_state'],
105 ['_give_donor_address_billing_zip_0', 'address_zip'],
106 ['_give_donor_address_billing_country_0', 'address_country']
107 );
108 }
109
110 return $this->filterExportData(
111 array_map(function ($row) {
112 return array_intersect_key($row, $this->csv_cols());
113 }, $donorQuery->getAll(ARRAY_A))
114 );
115 }
116
117 /**
118 * @since 2.21.2
119 */
120 protected function shouldIncludeAddress(): bool
121 {
122 return isset($this->postedData['give_export_columns']['address']);
123 }
124
125 /**
126 * @since 2.21.2
127 */
128 protected function filterExportData(array $exportData): array
129 {
130 /**
131 * @since 2.21.2
132 *
133 * @param array $exportData
134 */
135 return apply_filters("give_export_get_data_{$this->export_type}", $exportData);
136 }
137
138 /**
139 * @since 2.29.0 Include donor created col
140 * @since 2.21.2
141 */
142 public function csv_cols(): array
143 {
144 return $this->flattenAddressColumn(
145 array_intersect_key([
146 'full_name' => __('Name', 'give'),
147 'email' => __('Email', 'give'),
148 'address' => [
149 'address_line1' => __('Address', 'give'),
150 'address_line2' => __('Address 2', 'give'),
151 'address_city' => __('City', 'give'),
152 'address_state' => __('State', 'give'),
153 'address_zip' => __('Zip', 'give'),
154 'address_country' => __('Country', 'give'),
155 ],
156 'userid' => __('User ID', 'give'),
157 'donor_created_date' => __('Donor Created', 'give'),
158 'donations' => __('Number of donations', 'give'),
159 'donation_sum' => __('Total Donated', 'give'),
160 ], $this->postedData['give_export_columns'])
161 );
162 }
163
164 /**
165 * @since 2.21.2
166 */
167 protected function flattenAddressColumn(array $columnarData): array
168 {
169 return $this->flattenColumn($columnarData, 'address');
170 }
171
172 /**
173 * @since 2.21.2
174 */
175 protected function flattenColumn(array $columnarData, string $columnName): array
176 {
177 if (isset($columnarData[$columnName])) {
178 $columnarData = array_merge($columnarData, $columnarData[$columnName]);
179 unset($columnarData[$columnName]);
180 }
181
182 return $columnarData;
183 }
184 }
185