PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.12.0
GiveWP – Donation Plugin and Fundraising Platform v4.12.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 / Promotions / InPluginUpsells / SaleBanners.php
give / src / Promotions / InPluginUpsells Last commit date
Endpoints 2 years ago resources 9 months ago AddonsAdminPage.php 1 year ago AddonsRepository.php 4 years ago LegacyFormEditor.php 1 year ago PaymentGateways.php 1 year ago SaleBanners.php 1 year ago
SaleBanners.php
323 lines
1 <?php
2
3 namespace Give\Promotions\InPluginUpsells;
4
5 use DateTimeImmutable;
6 use DateTimeZone;
7 use Exception;
8
9 /**
10 * @since 2.17.0
11 */
12 class SaleBanners
13 {
14 /**
15 * @var string
16 */
17 private $optionName = 'give_hidden_sale_banners';
18
19 /**
20 * @var array
21 */
22 private $hiddenBanners;
23
24 /**
25 * @since 2.17.0
26 */
27 public function __construct()
28 {
29 $this->hiddenBanners = get_option($this->optionName, []);
30 }
31
32 /**
33 * Get banners definitions
34 *
35 * @since 3.1.0 add Giving Tuesday 2023 banner
36 * @since 2.23.2 add Giving Tuesday 2022 banner
37 * @since 2.17.0
38 *
39 * @note id must be unique for each definition
40 */
41 public function getBanners(): array
42 {
43 return [
44 [
45 'id' => 'bfgt2023',
46 'giveIconURL' => GIVE_PLUGIN_URL . 'build/assets/dist/images/admin/promotions/bfcm-banner/give-logo-icon.svg',
47 'discountIconURL' => GIVE_PLUGIN_URL . 'build/assets/dist/images/admin/promotions/bfcm-banner/discount-icon.svg',
48 'backgroundImageLargeURL' => GIVE_PLUGIN_URL . 'build/assets/dist/images/admin/promotions/bfcm-banner/background-image-lg.svg',
49 'backgroundImageMediumURL' => GIVE_PLUGIN_URL . 'build/assets/dist/images/admin/promotions/bfcm-banner/background-image-md.svg',
50 'backgroundImageSmallURL' => GIVE_PLUGIN_URL . 'build/assets/dist/images/admin/promotions/bfcm-banner/background-image-s.svg',
51 'shoppingCartIconURL' => GIVE_PLUGIN_URL . 'build/assets/dist/images/admin/promotions/bfcm-banner/shopping-cart-icon.svg',
52 'dismissIconURL' => GIVE_PLUGIN_URL . 'build/assets/dist/images/admin/promotions/bfcm-banner/dismiss-icon.svg',
53 'accessibleLabel' => __('Black Friday/Giving Tuesday Sale', 'give'),
54 'leadText' => self::getDataByPricingPlan(
55 [
56 'Free' => __(
57 'Upgrade to a Pricing Plan for Recurring Donations, Fee Recovery, and more.',
58 'give'
59 ),
60 'Basic' => __(
61 'Upgrade to a Plus Plan to get all must-have add-ons.',
62 'give'
63 ),
64 'Plus' => __(
65 'Upgrade to Pro and get Peer-to-Peer fundraising.',
66 'give'
67 ),
68 'default' => __(
69 'Upgrade to a Pricing Plan for Recurring Donations, Fee Recovery, and more.',
70 'give'
71 ),
72 ]
73 ),
74 'actionText' => __('Shop Now', 'give'),
75 'actionURL' => self::getDataByPricingPlan(
76 [
77 'Free' => 'https://go.givewp.com/bf23',
78 'Basic' => 'https://go.givewp.com/bfup23',
79 'Plus' => 'https://go.givewp.com/bfup23',
80 'default' => 'https://go.givewp.com/bfup23',
81 ]
82 ),
83 'startDate' => '2023-11-20 00:00',
84 'endDate' => '2023-11-29 23:59',
85 ],
86 ];
87 }
88
89 /**
90 * Get the banners that should be displayed.
91 *
92 * @since 3.1.0 hide banners for users with Pro tier accounts.
93 * @since 2.17.0
94 */
95 public function getVisibleBanners(): array
96 {
97 $currentDateTime = current_datetime();
98 $currentUserId = get_current_user_id();
99 $giveWPWebsiteTimezone = new DateTimeZone('America/Los_Angeles');
100
101 return array_filter(
102 $this->getBanners(),
103 function ($banner) use ($currentDateTime, $currentUserId, $giveWPWebsiteTimezone) {
104 $isHidden = in_array($banner['id'] . $currentUserId, $this->hiddenBanners, true);
105
106 try {
107 $isFuture = $currentDateTime < new DateTimeImmutable($banner['startDate'], $giveWPWebsiteTimezone);
108 $isPast = $currentDateTime > new DateTimeImmutable($banner['endDate'], $giveWPWebsiteTimezone);
109 } catch (Exception $exception) {
110 return false;
111 }
112
113 return !($isHidden || $isFuture || $isPast);
114 }
115 );
116 }
117
118 /**
119 * Marks the given banner id as hidden for the current user so it will not display again.
120 *
121 * @since 2.17.0
122 *
123 * @return void
124 */
125 public function hideBanner(string $banner)
126 {
127 $this->hiddenBanners[] = $banner;
128
129 update_option(
130 $this->optionName,
131 array_unique($this->hiddenBanners)
132 );
133 }
134
135 /**
136 * Render admin page
137 *
138 * @since 2.17.0
139 */
140 public function render()
141 {
142 $banners = $this->getVisibleBanners();
143
144 if (!empty($banners)) {
145 include __DIR__ . '/resources/views/sale-banners.php';
146 }
147 }
148
149 /**
150 * Load scripts
151 *
152 * @since 2.17.0
153 */
154 public function loadScripts()
155 {
156 wp_enqueue_script(
157 'give-in-plugin-upsells-sale-banners',
158 GIVE_PLUGIN_URL . 'build/assets/dist/js/admin-upsell-sale-banner.js',
159 [],
160 GIVE_VERSION,
161 true
162 );
163
164 wp_localize_script(
165 'give-in-plugin-upsells-sale-banners',
166 'GiveSaleBanners',
167 [
168 'apiRoot' => esc_url_raw(rest_url('give-api/v2/sale-banner')),
169 'apiNonce' => wp_create_nonce('wp_rest'),
170 ]
171 );
172
173 wp_enqueue_style('givewp-admin-fonts');
174 }
175
176 /**
177 * Helper function to determine if the current page Give admin page
178 *
179 * @since 2.17.0
180 */
181 public static function isShowing(): bool
182 {
183 return isset($_GET['post_type']) && $_GET['post_type'] === 'give_forms';
184 }
185
186 /**
187 * @since 3.13.0 remove all_access_pass.
188 * @since 3.1.0 retrieve licensed plugin slugs.
189 */
190 public static function getLicensedPluginSlugs(): array
191 {
192 $pluginSlugs = [];
193 $licenses = get_option("give_licenses", []);
194
195 foreach ($licenses as $license) {
196 foreach ($license['download'] as $plugin) {
197 $pluginSlugs[] = $plugin['plugin_slug'];
198 }
199 }
200
201 return $pluginSlugs;
202 }
203
204 /**
205 * @since 3.1.0 determines user pricing plan from licensed plugin slugs.
206 */
207 public static function getUserPricingPlan(): string
208 {
209 $plan = 'Free';
210
211 $pricingPlans = [
212 'Basic' => self::getBasicLicenseSlugs(),
213 'Plus' => self::getPlusLicenseSlugs(),
214 'Pro' => self::getProLicenseSlugs(),
215 ];
216
217 $licensedPluginSlugs = self::getLicensedPluginSlugs();
218
219 foreach ($pricingPlans as $planName => $requiredLicenses) {
220 $missingLicenses = array_diff($requiredLicenses, $licensedPluginSlugs);
221 if (empty($missingLicenses)) {
222 $plan = $planName;
223 }
224 }
225
226 return $plan;
227 }
228
229 /**
230 * @since 3.13.0 add type for $data.
231 * @since 3.1.0 return data by user pricing plan.
232 */
233 public static function getDataByPricingPlan(array $data): string
234 {
235 $userPricingPlan = self::getUserPricingPlan();
236
237 if (array_key_exists($userPricingPlan, $data)) {
238
239 return $data[$userPricingPlan];
240 }
241
242 return $data['default'];
243 }
244
245 /**
246 * @since 3.13.0
247 */
248 public static function getBasicLicenseSlugs(): array
249 {
250 return [
251 'give-bitpay',
252 'give-text-to-give',
253 'give-activecampaign',
254 'give-moneris',
255 'give-square',
256 'give-mollie',
257 'give-payfast',
258 'give-sofort',
259 'give-americloud-payments',
260 'give-paytm',
261 'give-gocardless',
262 'give-razorpay',
263 'give-payumoney',
264 'give-convertkit',
265 'give-aweber',
266 'give-per-form-gateways',
267 'give-email-reports',
268 'give-manual-donations',
269 'give-zapier',
270 'give-google-analytics',
271 'ccavenue' => 'give-ccavenue',
272 'give-constant-contact',
273 'give-braintree',
274 'give-iats',
275 'give-2checkout',
276 'give-pdf-receipts',
277 'give-paymill',
278 'give-stripe',
279 'give-authorize-net',
280 'give-mailchimp',
281 ];
282 }
283
284 /**
285 * @since 3.13.0
286 */
287 public static function getPlusLicenseSlugs(): array
288 {
289 $basicLicenseSlugs = self::getBasicLicenseSlugs();
290
291 $plusLicenseSlugs = [
292 'give-webhooks',
293 'give-salesforce',
294 'give-funds',
295 'give-annual-receipts',
296 'give-currency-switcher',
297 'give-donation-upsells-woocommerce',
298 'give-tributes',
299 'give-fee-recovery',
300 'give-email-reports',
301 'give-gift-aid',
302 'give-recurring',
303 'give-form-field-manager',
304 ];
305
306 return array_merge($basicLicenseSlugs, $plusLicenseSlugs);
307 }
308
309 /**
310 * @since 3.13.0
311 */
312 public static function getProLicenseSlugs(): array
313 {
314 $plusLicenseSlugs = self::getPlusLicenseSlugs();
315
316 $proLicenseSlugs = ['give-peer-to-peer'];
317
318 return array_merge($plusLicenseSlugs, $proLicenseSlugs);
319 }
320
321 }
322
323