PluginProbe
User Profile Builder – Beautiful User Registration Forms, User Profiles & User Role Editor / 3.16.3
User Profile Builder – Beautiful User Registration Forms, User Profiles & User Role Editor v3.16.3
4.0.3 4.0.2 4.0.1 4.0.0 3.16.6 3.16.5 3.16.4 3.16.3 3.16.2 3.16.1 3.16.0 3.15.9 3.9.9 3.9.5 3.9.6 3.9.7 3.9.8 1.1.7 1.1.8 1.1.9 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 All 341 releases
profile-builder / assets / lib / class_notices.php

class_notices.php in User Profile Builder – Beautiful User Registration Forms, User Profiles & User Role Editor 3.16.3, at assets/lib/class_notices.php

303 lines 10.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Class that adds a misc notice
4 *
5 * @since v.2.0
6 *
7 * @return void
8 */
9 class WPPB_Add_General_Notices{
10 public $notificationId = '';
11 public $notificationMessage = '';
12 public $notificationClass = '';
13 public $startDate = '';
14 public $endDate = '';
15
16 function __construct( $notificationId, $notificationMessage, $notificationClass = 'updated' , $startDate = '', $endDate = '' ){
17 $this->notificationId = $notificationId;
18 $this->notificationMessage = $notificationMessage;
19 $this->notificationClass = $notificationClass;
20
21 if( !empty( $startDate ) && time() < strtotime( $startDate ) )
22 return;
23
24 if( !empty( $endDate ) && time() > strtotime( $endDate ) )
25 return;
26
27 add_action( 'admin_notices', array( $this, 'add_admin_notice' ) );
28 add_action( 'admin_init', array( $this, 'dismiss_notification' ) );
29 }
30
31
32 // Display a notice that can be dismissed in case the serial number is inactive
33 function add_admin_notice() {
34 global $current_user ;
35 global $pagenow;
36
37 $user_id = $current_user->ID;
38 do_action( $this->notificationId.'_before_notification_displayed', $current_user, $pagenow );
39
40 if ( current_user_can( 'manage_options' ) ){
41 // Check that the user hasn't already clicked to ignore the message
42 if ( ! get_user_meta($user_id, $this->notificationId.'_dismiss_notification' ) ) {
43 echo wp_kses_post( apply_filters($this->notificationId.'_notification_message','<div class="'. $this->notificationClass .'" style="position:relative">'.$this->notificationMessage.'</div>', $this->notificationMessage) );
44 }
45 do_action( $this->notificationId.'_notification_displayed', $current_user, $pagenow );
46 }
47 do_action( $this->notificationId.'_after_notification_displayed', $current_user, $pagenow );
48 }
49
50 function dismiss_notification() {
51
52 if( empty( $_GET['_wpnonce'] ) || !wp_verify_nonce( sanitize_text_field( $_GET['_wpnonce'] ), 'wppb_general_notice_dismiss' ) )
53 return;
54
55 global $current_user;
56
57 $user_id = $current_user->ID;
58
59 do_action( $this->notificationId.'_before_notification_dismissed', $current_user );
60
61 // If user clicks to ignore the notice, add that to their user meta
62 if ( isset( $_GET[$this->notificationId.'_dismiss_notification']) && '0' == $_GET[$this->notificationId.'_dismiss_notification'] )
63 add_user_meta( $user_id, $this->notificationId.'_dismiss_notification', 'true', true );
64
65 do_action( $this->notificationId.'_after_notification_dismissed', $current_user );
66
67 }
68 }
69
70 Class WPPB_Plugin_Notifications {
71
72 public $notifications = array();
73 private static $_instance = null;
74 private $prefix = 'wppb';
75 private $menu_slug = 'profile-builder';
76 public $pluginPages = array( 'profile-builder-', 'manage-fields', 'wppb-', 'admin-email-customizer', 'user-email-customizer', 'pb-labels-edit', 'profile-user-profile-picture', 'pbie-import-export' );
77
78 protected function __construct() {
79 add_action( 'admin_init', array( $this, 'dismiss_admin_notifications' ), 200 );
80 add_action( 'admin_init', array( $this, 'add_admin_menu_notification_counts' ), 1000 );
81 add_action( 'admin_init', array( $this, 'remove_other_plugin_notices' ), 1001 );
82 }
83
84
85 function dismiss_admin_notifications() {
86 if( ! empty( $_GET[$this->prefix.'_dismiss_admin_notification'] ) ) {
87
88 if( empty( $_GET['_wpnonce'] ) || !wp_verify_nonce( sanitize_text_field( $_GET['_wpnonce'] ), 'wppb_plugin_notice_dismiss' ) )
89 return;
90
91 $notifications = self::get_instance();
92 $notifications->dismiss_notification( sanitize_text_field( $_GET[$this->prefix.'_dismiss_admin_notification'] ) );
93
94 }
95
96 }
97
98 function add_admin_menu_notification_counts() {
99
100 global $menu, $submenu;
101
102 $notifications = WPPB_Plugin_Notifications::get_instance();
103
104 if( ! empty( $menu ) ) {
105 foreach( $menu as $menu_position => $menu_data ) {
106 if( ! empty( $menu_data[2] ) && $menu_data[2] == $this->menu_slug ) {
107 $menu_count = $notifications->get_count_in_menu();
108 if( ! empty( $menu_count ) )
109 $menu[$menu_position][0] .= '<span class="update-plugins '.$this->prefix.'-update-plugins"><span class="plugin-count">' . $menu_count . '</span></span>';
110 }
111 }
112 }
113
114 if( ! empty( $submenu[$this->menu_slug] ) ) {
115 foreach( $submenu[$this->menu_slug] as $menu_position => $menu_data ) {
116 $menu_count = $notifications->get_count_in_submenu( $menu_data[2] );
117
118 if( ! empty( $menu_count ) )
119 $submenu[$this->menu_slug][$menu_position][0] .= '<span class="update-plugins '.$this->prefix.'-update-plugins"><span class="plugin-count">' . $menu_count . '</span></span>';
120 }
121 }
122 }
123
124 /* handle other plugin notifications on our plugin pages */
125 function remove_other_plugin_notices(){
126
127 /* remove all other plugin notifications except our own from the rest of the PB pages */
128 if( $this->is_plugin_page() ) {
129 global $wp_filter;
130 if (!empty($wp_filter['admin_notices'])) {
131 if (!empty($wp_filter['admin_notices']->callbacks)) {
132 foreach ($wp_filter['admin_notices']->callbacks as $priority => $callbacks_level) {
133 if (!empty($callbacks_level)) {
134 foreach ($callbacks_level as $key => $callback) {
135 if( is_array( $callback['function'] ) ){
136 if( is_object($callback['function'][0])) {//object here
137 if (strpos(get_class($callback['function'][0]), 'PMS_') !== 0 && strpos(get_class($callback['function'][0]), 'WPPB_') !== 0 && strpos(get_class($callback['function'][0]), 'TRP_') !== 0 && strpos(get_class($callback['function'][0]), 'WCK_') !== 0) {
138 unset($wp_filter['admin_notices']->callbacks[$priority][$key]);//unset everything that doesn't come from our plugins
139 }
140 }
141 } else if( is_string( $callback['function'] ) ){//it should be a function name
142 if (strpos($callback['function'], 'pms_') !== 0 && strpos($callback['function'], 'wppb_') !== 0 && strpos($callback['function'], 'trp_') !== 0 && strpos($callback['function'], 'wck_') !== 0) {
143 unset($wp_filter['admin_notices']->callbacks[$priority][$key]);//unset everything that doesn't come from our plugins
144 }
145 }
146 }
147 }
148 }
149 }
150 }
151 }
152
153 }
154
155 /**
156 *
157 *
158 */
159 public static function get_instance() {
160 if( is_null( self::$_instance ) )
161 self::$_instance = new WPPB_Plugin_Notifications();
162
163 return self::$_instance;
164 }
165
166
167 /**
168 *
169 *
170 */
171 public function add_notification( $notification_id = '', $notification_message = '', $notification_class = 'update-nag', $count_in_menu = true, $count_in_submenu = array(), $show_in_all_backend = false ) {
172
173 if( empty( $notification_id ) )
174 return;
175
176 if( empty( $notification_message ) )
177 return;
178
179 global $current_user;
180
181 if( get_user_meta( $current_user->ID, $notification_id . '_dismiss_notification' ) )
182 return;
183
184 $this->notifications[$notification_id] = array(
185 'id' => $notification_id,
186 'message' => $notification_message,
187 'class' => $notification_class,
188 'count_in_menu' => $count_in_menu,
189 'count_in_submenu' => $count_in_submenu
190 );
191
192 if( $this->is_plugin_page() || $show_in_all_backend == true ) {
193 new WPPB_Add_General_Notices( $notification_id, $notification_message, $notification_class );
194 }
195
196 }
197
198
199 /**
200 *
201 *
202 */
203 public function get_notifications() {
204 return $this->notifications;
205 }
206
207
208 /**
209 *
210 *
211 */
212 public function get_notification( $notification_id = '' ) {
213
214 if( empty( $notification_id ) )
215 return null;
216
217 $notifications = $this->get_notifications();
218
219 if( ! empty( $notifications[$notification_id] ) )
220 return $notifications[$notification_id];
221 else
222 return null;
223
224 }
225
226
227 /**
228 *
229 *
230 */
231 public function dismiss_notification( $notification_id = '' ) {
232 global $current_user;
233 add_user_meta( $current_user->ID, $notification_id . '_dismiss_notification', 'true', true );
234 }
235
236
237 /**
238 *
239 *
240 */
241 public function get_count_in_menu() {
242 $count = 0;
243
244 foreach( $this->notifications as $notification ) {
245 if( ! empty( $notification['count_in_menu'] ) )
246 $count++;
247 }
248
249 return $count;
250 }
251
252
253 /**
254 *
255 *
256 */
257 public function get_count_in_submenu( $submenu = '' ) {
258
259 if( empty( $submenu ) )
260 return 0;
261
262 $count = 0;
263
264 foreach( $this->notifications as $notification ) {
265 if( empty( $notification['count_in_submenu'] ) )
266 continue;
267
268 if( ! is_array( $notification['count_in_submenu'] ) )
269 continue;
270
271 if( ! in_array( $submenu, $notification['count_in_submenu'] ) )
272 continue;
273
274 $count++;
275 }
276
277 return $count;
278
279 }
280
281
282 /**
283 *
284 *
285 */
286 public function is_plugin_page() {
287 if( !empty( $this->pluginPages ) ){
288 foreach ( $this->pluginPages as $pluginPage ){
289 if( ! empty( $_GET['page'] ) && false !== strpos( sanitize_text_field( $_GET['page'] ), $pluginPage ) )
290 return true;
291
292 if( ! empty( $_GET['post_type'] ) && false !== strpos( sanitize_text_field( $_GET['post_type'] ), $pluginPage ) )
293 return true;
294
295 if( ! empty( $_GET['post'] ) && false !== strpos( get_post_type( (int)$_GET['post'] ), $pluginPage ) )
296 return true;
297 }
298 }
299
300 return false;
301 }
302
303 }