PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.23.2
GiveWP – Donation Plugin and Fundraising Platform v2.23.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 / DonationForms / DataTransferObjects / DonationFormsResponseData.php
give / src / DonationForms / DataTransferObjects Last commit date
DonationFormsResponseData.php 3 years ago
DonationFormsResponseData.php
172 lines
1 <?php
2
3 namespace Give\DonationForms\DataTransferObjects;
4
5 use Give\Framework\Support\Contracts\Arrayable;
6 use Give\Helpers\Date;
7
8 /**
9 * Class DonationFormsResponseData
10 *
11 * @since 2.21.0
12 */
13 final class DonationFormsResponseData implements Arrayable
14 {
15 /**
16 * @var int
17 */
18 public $id;
19 /**
20 * @var string
21 */
22 public $name;
23 /**
24 * @var string
25 */
26 public $status;
27 /**
28 * @var array|false
29 */
30 public $goal;
31 /**
32 * @var int
33 */
34 public $donations;
35 /**
36 * @var string
37 */
38 public $amount;
39 /**
40 * @var string
41 */
42 public $revenue;
43 /**
44 * @var string
45 */
46 public $datetime;
47 /**
48 * @var string
49 */
50 public $shortcode;
51 /**
52 * @var string
53 */
54 public $permalink;
55 /**
56 * @var string
57 */
58 public $edit;
59
60
61 /**
62 * Convert from object to DonationForm
63 *
64 * @since 2.21.0
65 *
66 * @param object $form
67 *
68 */
69 public static function fromObject($form): self
70 {
71 $self = new static();
72
73 $self->id = $form->id;
74 $self->name = $form->title;
75 $self->status = $form->status;
76 $self->goal = $form->goalEnabled === 'enabled' ? $self->getGoal($form->id) : false;
77 $self->donations = give()->donationFormsRepository->getFormDonationsCount($form->id);
78 $self->amount = $self->getFormAmount($form);
79 $self->revenue = $self->formatAmount($form->revenue ?? '');
80 $self->datetime = Date::getDateTime($form->createdAt);
81 $self->shortcode = sprintf('[give_form id="%d"]', $form->id);
82 $self->permalink = html_entity_decode(get_permalink($form->id));
83 $self->edit = html_entity_decode(get_edit_post_link($form->id));
84
85 return $self;
86 }
87
88 /**
89 * Convert DTO to array
90 *
91 * @since 2.21.0
92 */
93 public function toArray(): array
94 {
95 return get_object_vars($this);
96 }
97
98 /**
99 * @since 2.21.0
100 *
101 * @param int $formId
102 *
103 * @return array
104 *
105 */
106 private function getGoal(int $formId): array
107 {
108 $goal = give_goal_progress_stats($formId);
109
110 $getFormatFromGoal = static function ($goal) {
111 switch ($goal['format']) {
112 case 'donation':
113 return _n('donation', 'donations', $goal['raw_goal'], 'give');
114
115 case 'donors':
116 return _n('donor', 'donors', $goal['raw_goal'], 'give');
117
118 case 'amount':
119 return __('amount', 'give');
120
121 case 'percentage':
122 return __('percentage', 'give');
123
124 default:
125 return '';
126 }
127 };
128
129 return [
130 'actual' => html_entity_decode($goal['actual']),
131 'goal' => html_entity_decode($goal['goal']),
132 'progress' => html_entity_decode($goal['progress']),
133 'format' => $getFormatFromGoal($goal),
134 ];
135 }
136
137 /**
138 * @since 2.21.0
139 *
140 * @param object $form
141 *
142 * @return string
143 *
144 */
145 private function getFormAmount($form): string
146 {
147 $donationLevels = unserialize($form->donationLevels, ['allowed_classes' => false]);
148
149 if (
150 is_array($donationLevels)
151 && $amount = array_column($donationLevels, '_give_amount')
152 ) {
153 return $this->formatAmount(min($amount)) . ' - ' . $this->formatAmount(max($amount));
154 }
155
156 return $this->formatAmount($form->setPrice ?? '');
157 }
158
159 /**
160 * @since 2.21.0
161 *
162 * @param string $amount
163 *
164 * @return string
165 *
166 */
167 private function formatAmount(string $amount): string
168 {
169 return html_entity_decode(give_currency_filter(give_format_amount($amount)));
170 }
171 }
172