PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.6.1
GiveWP – Donation Plugin and Fundraising Platform v4.16.6.1
4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 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 / vendor / vendor-prefixed / stellarwp / admin-notices / src / Actions / NoticeShouldRender.php
give / vendor / vendor-prefixed / stellarwp / admin-notices / src / Actions Last commit date
DisplayNoticesInAdmin.php 1 year ago EnqueueNoticesScriptsAndStyles.php 1 year ago NoticeShouldRender.php 1 year ago RenderAdminNotice.php 1 year ago
NoticeShouldRender.php
175 lines
1 <?php
2
3 declare(strict_types=1);
4
5
6 namespace Give\Vendors\StellarWP\AdminNotices\Actions;
7
8 use DateTimeImmutable;
9 use DateTimeZone;
10 use Give\Vendors\StellarWP\AdminNotices\AdminNotice;
11 use Give\Vendors\StellarWP\AdminNotices\Traits\HasNamespace;
12
13 /**
14 * Checks whether the given notice should be rendered based on the provided conditions.
15 *
16 * @since 2.0.0
17 */
18 class NoticeShouldRender
19 {
20 use HasNamespace;
21
22 /**
23 * @since 2.0.0
24 */
25 public function __invoke(AdminNotice $notice): bool
26 {
27 return $this->passesDismissedConditions($notice)
28 && $this->passesDateLimits($notice)
29 && $this->passesWhenCallback($notice)
30 && $this->passesUserCapabilities($notice)
31 && $this->passesScreenConditions($notice);
32 }
33
34 /**
35 * Checks whether the notice should be displayed based on the provided date limits.
36 *
37 * @since 2.0.0 moved to the NoticeShouldRender class
38 * @since 1.0.0
39 */
40 private function passesDateLimits(AdminNotice $notice): bool
41 {
42 if (!$notice->getAfterDate() && !$notice->getUntilDate()) {
43 return true;
44 }
45
46 $now = new DateTimeImmutable('now', new DateTimeZone('UTC'));
47
48 if ($notice->getAfterDate() && $notice->getAfterDate() > $now) {
49 return false;
50 }
51
52 if ($notice->getUntilDate() && $notice->getUntilDate() < $now) {
53 return false;
54 }
55
56 return true;
57 }
58
59 /**
60 * Checks whether the notice should be displayed based on the provided callback.
61 *
62 * @since 2.0.0 moved to the NoticeShouldRender class
63 * @since 1.0.0
64 */
65 private function passesWhenCallback(AdminNotice $notice): bool
66 {
67 $callback = $notice->getWhenCallback();
68
69 if ($callback === null) {
70 return true;
71 }
72
73 return $callback();
74 }
75
76 /**
77 * Checks whether user limits were provided and they pass. Only one capability is required to pass, allowing for
78 * multiple users have visibility.
79 *
80 * @since 2.0.0 moved to the NoticeShouldRender class
81 * @since 1.0.0
82 */
83 private function passesUserCapabilities(AdminNotice $notice): bool
84 {
85 $capabilities = $notice->getUserCapabilities();
86
87 if (empty($capabilities)) {
88 return true;
89 }
90
91 foreach ($capabilities as $capability) {
92 if ($capability->currentUserCan()) {
93 return true;
94 }
95 }
96
97 return false;
98 }
99
100 /**
101 * Checks whether the notice is limited to specific screens and the current screen matches the conditions. Only one
102 * screen condition is required to pass, allowing for the notice to appear on multiple screens.
103 *
104 * @since 2.0.0 moved to the NoticeShouldRender class
105 * @since 1.0.0
106 */
107 private function passesScreenConditions(AdminNotice $notice): bool
108 {
109 $screenConditions = $notice->getOnConditions();
110
111 if (empty($screenConditions)) {
112 return true;
113 }
114
115 $screen = get_current_screen();
116 $currentUrl = get_admin_url(null, $_SERVER['REQUEST_URI']);
117
118 foreach ($screenConditions as $screenCondition) {
119 $condition = $screenCondition->getCondition();
120
121 if ($screenCondition->isRegex()) {
122 // do a regex comparison on the current url
123 if (preg_match($condition, $currentUrl) === 1) {
124 return true;
125 }
126 } elseif (is_string($condition)) {
127 // do a string comparison on the current url
128 if (strpos($currentUrl, $condition) !== false) {
129 return true;
130 }
131 } else {
132 // compare the condition array against the WP_Screen object
133 foreach ($condition as $property => $value) {
134 if ($screen->$property === $value) {
135 return true;
136 }
137 }
138 }
139 }
140
141 return false;
142 }
143
144 /**
145 * Checks whether the notice has been dismissed by the user.
146 *
147 * @since 2.0.0 moved to the NoticeShouldRender class
148 * @since 1.1.0 added namespacing to the preferences key
149 * @since 1.0.0
150 */
151 private function passesDismissedConditions(AdminNotice $notice): bool
152 {
153 global $wpdb;
154
155 $userPreferences = get_user_meta(
156 get_current_user_id(),
157 $wpdb->get_blog_prefix() . 'persisted_preferences',
158 true
159 );
160
161 $key = "stellarwp/admin-notices/$this->namespace";
162 if (!is_array($userPreferences) || empty($userPreferences[$key])) {
163 return true;
164 }
165
166 $dismissedNotices = $userPreferences[$key];
167
168 if (key_exists($notice->getId(), $dismissedNotices)) {
169 return false;
170 }
171
172 return true;
173 }
174 }
175