PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.25.3
GiveWP – Donation Plugin and Fundraising Platform v2.25.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 / Promotions / InPluginUpsells / SaleBanners.php
give / src / Promotions / InPluginUpsells Last commit date
resources 4 years ago AddonsAdminPage.php 3 years ago AddonsRepository.php 4 years ago HideSaleBannerRoute.php 4 years ago RecurringDonationsTab.php 3 years ago SaleBanners.php 3 years ago
SaleBanners.php
165 lines
1 <?php
2
3 namespace Give\Promotions\InPluginUpsells;
4
5 use DateTimeImmutable;
6 use DateTimeZone;
7 use Exception;
8 use Give\Framework\Shims\Shim;
9
10 /**
11 * @since 2.17.0
12 */
13 class SaleBanners
14 {
15 /**
16 * @var string
17 */
18 private $optionName = 'give_hidden_sale_banners';
19
20 /**
21 * @var array
22 */
23 private $hiddenBanners;
24
25 /**
26 * @since 2.17.0
27 */
28 public function __construct()
29 {
30 $this->hiddenBanners = get_option($this->optionName, []);
31 }
32
33 /**
34 * Get banners definitions
35 *
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' => 'bfgt2021',
46 'iconURL' => GIVE_PLUGIN_URL . 'assets/dist/images/admin/sale-icon.png',
47 'accessibleLabel' => __('Black Friday/Giving Tuesday Sale', 'give'),
48 'leadText' => __('Save 40% on all Plans for a limited time.', 'give'),
49 'contentText' => __('Black Friday through Giving Tuesday.', 'give'),
50 'actionText' => __('Shop Now', 'give'),
51 'actionURL' => 'https://go.givewp.com/bfgt21',
52 'startDate' => '2021-11-26 00:00',
53 'endDate' => '2021-11-30 23:59',
54 ],
55 [
56 'id' => 'bfgt2022',
57 'iconURL' => GIVE_PLUGIN_URL . 'assets/dist/images/admin/sale-icon.png',
58 'accessibleLabel' => __('Black Friday/Giving Tuesday Sale', 'give'),
59 'leadText' => __('Save 40% on all Plans for a limited time.', 'give'),
60 'contentText' => __('Black Friday through Giving Tuesday.', 'give'),
61 'actionText' => __('Shop Now', 'give'),
62 'actionURL' => 'https://go.givewp.com/bf22',
63 'startDate' => '2022-11-01 00:00',
64 'endDate' => '2022-11-29 23:59',
65 ],
66 ];
67 }
68
69 /**
70 * Get the banners that should be displayed.
71 *
72 * @since 2.17.0
73 */
74 public function getVisibleBanners(): array
75 {
76 $currentDateTime = current_datetime();
77 $currentUserId = get_current_user_id();
78 $giveWPWebsiteTimezone = new DateTimeZone('America/Los_Angeles');
79
80 return array_filter(
81 $this->getBanners(),
82 function ($banner) use ($currentDateTime, $currentUserId, $giveWPWebsiteTimezone) {
83 $isHidden = in_array($banner['id'] . $currentUserId, $this->hiddenBanners, true);
84
85 try {
86 $isFuture = $currentDateTime < new DateTimeImmutable($banner['startDate'], $giveWPWebsiteTimezone);
87 $isPast = $currentDateTime > new DateTimeImmutable($banner['endDate'], $giveWPWebsiteTimezone);
88 } catch(Exception $exception) {
89 return false;
90 }
91
92 return !($isHidden || $isFuture || $isPast);
93 }
94 );
95 }
96
97 /**
98 * Marks the given banner id as hidden for the current user so it will not display again.
99 *
100 * @since 2.17.0
101 *
102 * @return void
103 */
104 public function hideBanner(string $banner)
105 {
106 $this->hiddenBanners[] = $banner;
107
108 update_option(
109 $this->optionName,
110 array_unique($this->hiddenBanners)
111 );
112 }
113
114 /**
115 * Render admin page
116 *
117 * @since 2.17.0
118 */
119 public function render()
120 {
121 $banners = $this->getVisibleBanners();
122
123 if (!empty($banners)) {
124 include __DIR__ . '/resources/views/sale-banners.php';
125 }
126 }
127
128 /**
129 * Load scripts
130 *
131 * @since 2.17.0
132 */
133 public function loadScripts()
134 {
135 wp_enqueue_script(
136 'give-in-plugin-upsells-sale-banners',
137 GIVE_PLUGIN_URL . 'assets/dist/js/admin-upsell-sale-banner.js',
138 [],
139 GIVE_VERSION,
140 true
141 );
142
143 wp_localize_script(
144 'give-in-plugin-upsells-sale-banners',
145 'GiveSaleBanners',
146 [
147 'apiRoot' => esc_url_raw(rest_url('give-api/v2/sale-banner')),
148 'apiNonce' => wp_create_nonce('wp_rest'),
149 ]
150 );
151
152 wp_enqueue_style('givewp-admin-fonts');
153 }
154
155 /**
156 * Helper function to determine if the current page Give admin page
157 *
158 * @since 2.17.0
159 */
160 public static function isShowing(): bool
161 {
162 return isset($_GET['post_type']) && $_GET['post_type'] === 'give_forms';
163 }
164 }
165