PluginProbe ʕ •ᴥ•ʔ
Wp Social Login and Register Social Counter / 2.2.4
Wp Social Login and Register Social Counter v2.2.4
trunk 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.10 1.3.11 1.3.2 1.3.3 1.3.4 1.3.6 1.3.8 1.3.9 1.4.0 1.4.1 1.4.2 1.4.4 1.4.5 1.4.6 1.4.8 1.4.9 1.5.0 1.6.0 1.6.1 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.8.0 1.8.1 1.8.2 1.8.3 1.8.5 1.8.6 1.9.0 2.0.0 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.8 2.2.9 3.0.0 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0
wp-social / lib / notice / notice.php
wp-social / lib / notice Last commit date
notice.php 2 years ago
notice.php
509 lines
1 <?php
2 namespace Oxaim\Libs;
3
4 defined( 'ABSPATH' ) || exit;
5
6 if(!class_exists('\Oxaim\Libs\Notice')):
7
8 class Notice{
9
10 /**
11 * scripts version
12 *
13 * @var string
14 */
15 protected $script_version = '2.1.0';
16
17 /**
18 * Unique ID to identify each notice
19 *
20 * @var string
21 */
22 protected $notice_id;
23
24 /**
25 * Plugin text-domain
26 *
27 * @var string
28 */
29 protected $text_domain;
30
31
32 /**
33 * Unique ID
34 *
35 * @var string
36 */
37 protected $unique_id;
38
39
40 /**
41 * Notice div container's class
42 *
43 * @var string
44 */
45 protected $class;
46
47
48 /**
49 * Single button's data
50 *
51 * @var array
52 */
53 protected $button;
54
55
56 /**
57 * Size class
58 *
59 * @var array
60 */
61 protected $size;
62
63
64 /**
65 * List of all buttons with it's config data
66 *
67 * @var array
68 */
69 protected $buttons;
70
71 /**
72 * Notice title
73 *
74 * @var string
75 */
76 protected $title;
77
78
79 /**
80 * Notice message
81 *
82 * @var string
83 */
84 protected $message;
85
86 /**
87 * Left logo
88 *
89 * @var string
90 */
91 protected $logo;
92 /**
93 * Container gutter
94 *
95 * @var string
96 */
97 protected $gutter;
98
99 /**
100 * Left logo style
101 *
102 * @var string
103 */
104 protected $logo_style;
105
106
107 /**
108 * Left logo style
109 *
110 * @var string
111 */
112 protected $dismissible;
113
114 protected $expired_time;
115
116
117
118 /**
119 * html markup for notice
120 *
121 * @var string
122 */
123 protected $html;
124
125
126
127 /**
128 * get_version
129 *
130 * @return string
131 */
132 public function get_version(){
133 return $this->script_version;
134 }
135
136 /**
137 * get_script_location
138 *
139 * @return string
140 */
141 public function get_script_location(){
142 return __FILE__;
143 }
144
145 // config
146
147 /**
148 * Configures all setter variables
149 *
150 * @param string $prefix
151 * @return void
152 */
153 public function config($text_domain = '', $unique_id = ''){
154 $this->text_domain = $text_domain;
155
156 $this->unique_id = $unique_id;
157
158 $this->notice_id = $text_domain . '-' . $unique_id;
159
160 $this->dismissible = false; // false, user, global
161
162 $this->expired_time = 1;
163
164 $this->html = '';
165
166 $this->title = '';
167
168 $this->message = '';
169
170 $this->class = '';
171
172 $this->gutter = true;
173
174 $this->logo = '';
175
176 $this->logo_style = '';
177
178 $this->size = [ ];
179
180 $this->button = [
181 'default_class' => 'button',
182 'class' => 'button-secondary ', // button-primary button-secondary button-small button-large button-link
183 'text' => 'Button',
184 'url' => '#',
185 'icon' => ''
186 ];
187
188 $this->buttons = [];
189
190 return $this;
191 }
192
193 // setters begin
194
195 /**
196 * Adds classes to the container
197 *
198 * @param string $classname
199 * @return void
200 */
201 public function set_class($classname = ''){
202 $this->class .= $classname;
203
204 return $this;
205 }
206
207 public function set_type($type = ''){
208 $this->class .= ' notice-' . $type;
209
210 return $this;
211 }
212
213 public function set_button($button = []){
214 $button = array_merge($this->button, $button);
215 $this->buttons[] = $button;
216
217 return $this;
218 }
219
220 public function set_id($id){
221 $this->notice_id = $id;
222 return $this;
223 }
224
225 public function set_title($title = ''){
226 $this->title .= $title;
227
228 return $this;
229 }
230
231 public function set_message($message = ''){
232 $this->message .= $message;
233
234 return $this;
235 }
236
237 public function set_gutter($gutter = true){
238 $this->gutter .= $gutter;
239 $this->class .= ($gutter === true ? '' : ' no-gutter');
240
241 return $this;
242 }
243
244 public function set_logo($logo = '', $logo_style = ""){
245 $this->logo = $logo;
246
247 $this->logo_style = $logo_style;
248
249 return $this;
250 }
251
252 public function set_html($html = ''){
253 $this->html .= $html;
254
255 return $this;
256 }
257
258 // setters ends
259
260
261 // group getter
262 public function get_data(){
263 return [
264 'message' => $this->message,
265 'title' => $this->title,
266 'buttons' => $this->buttons,
267 'class' => $this->class,
268 'html' => $this->html,
269 ];
270 }
271
272
273
274
275 public function call(){
276 add_action( 'admin_notices', [$this, 'get_notice'] );
277 }
278
279 public function get_notice(){
280
281 if(!current_user_can('manage_options')) {
282 return;
283 }
284
285 // dismissible conditions
286 if ( 'user' === $this->dismissible) {
287 $expired = get_user_meta( get_current_user_id(), $this->notice_id, true );
288 } elseif ( 'global' === $this->dismissible ) {
289 $expired = get_transient( $this->notice_id );
290 }else{
291 $expired = '';
292 }
293
294 global $oxaim_lib_notice_list;
295
296 if(!isset($oxaim_lib_notice_list[$this->notice_id])){
297 $oxaim_lib_notice_list[$this->notice_id] = __FILE__;
298
299 // is transient expired?
300 if ( false === $expired || empty( $expired ) ) {
301 $this->generate_html();
302 }
303 }
304 }
305
306 public function set_dismiss($scope = 'global', $time = (3600 * 24 * 7)){
307 $this->dismissible = $scope;
308 $this->expired_time = $time;
309
310 return $this;
311 }
312
313 public function generate_html() {
314 ?>
315 <div
316 id="<?php echo esc_attr($this->notice_id); ?>"
317 class="notice wpmet-notice notice-<?php echo esc_attr($this->notice_id . ' ' .$this->class); ?> <?php echo (false === $this->dismissible ? '' : 'is-dismissible') ;?>"
318
319 expired_time="<?php echo esc_attr(($this->expired_time)); ?>"
320 dismissible="<?php echo esc_attr(($this->dismissible)); ?>"
321 >
322 <?php if(!empty($this->logo)):?>
323 <img class="notice-logo" style="<?php echo esc_attr($this->logo_style); ?>" src="<?php echo esc_url($this->logo);?>" />
324 <?php endif; ?>
325
326 <div class="notice-right-container">
327
328 <?php if(empty($this->html)): ?>
329 <?php echo wp_kses((empty($this->title) ? '' : sprintf('<div class="notice-main-title notice-vert-space">%s</div>', $this->title)), \WP_Social\Helper\Helper::get_kses_array()); ?>
330
331 <div class="notice-message notice-vert-space">
332 <?php echo wp_kses(( $this->message ), \WP_Social\Helper\Helper::get_kses_array());?>
333 </div>
334
335 <?php if(!empty($this->buttons)): ?>
336 <div class="button-container notice-vert-space">
337 <?php foreach($this->buttons as $button): ?>
338 <a id="<?php echo esc_attr((!isset($button['id']) ? '' : $button['id'])); ?>" href="<?php echo esc_url($button['url']); ?>" class="wpmet-notice-button <?php echo esc_attr($button['class']); ?>">
339 <?php if(!empty($button['icon'])) :?>
340 <i class="notice-icon <?php echo esc_attr($button['icon']); ?>"></i>
341 <?php endif; ?>
342 <?php echo esc_html($button['text']);?>
343 </a>
344 &nbsp;
345 <?php endforeach; ?>
346 </div>
347 <?php endif;?>
348
349 <?php else:?>
350 <?php echo wp_kses(($this->html),\WP_Social\Helper\Helper::get_kses_array()); ?>
351 <?php endif;?>
352
353 </div>
354
355 <?php if(false !== $this->dismissible): ?>
356 <button type="button" class="notice-dismiss">
357 <span class="screen-reader-text">x</span>
358 </button>
359 <?php endif;?>
360
361 <div style="clear:both"></div>
362
363 </div>
364 <?php
365 }
366
367 public static function init(){
368 add_action( 'wp_ajax_wpmet-notices', [ __CLASS__, 'dismiss_ajax_call' ] );
369 add_action( 'admin_head', [ __CLASS__, 'enqueue_scripts' ] );
370 }
371
372 public static function dismiss_ajax_call() {
373
374 if( empty( $_POST['nonce'] ) || ( isset( $_POST['nonce'] ) && ! wp_verify_nonce( sanitize_text_field( $_POST['nonce'] ), 'wpmet-notices' ) ) ){
375 return false;
376 }
377
378 $notice_id = ( isset( $_POST['notice_id'] ) ) ? sanitize_text_field($_POST['notice_id']) : '';
379 $dismissible = ( isset( $_POST['dismissible'] ) ) ? sanitize_text_field($_POST['dismissible']) : '';
380 $expired_time = ( isset( $_POST['expired_time'] ) ) ? sanitize_text_field($_POST['expired_time']) : '';
381
382 if ( ! empty( $notice_id ) ) {
383 if ( 'user' === $dismissible ) {
384 update_user_meta( get_current_user_id(), $notice_id, true );
385 } else {
386 set_transient( $notice_id, true, $expired_time );
387 }
388
389 wp_send_json_success();
390 }
391
392 wp_send_json_error();
393 }
394
395 public static function enqueue_scripts() {
396 ?> "
397 <script>
398 jQuery(document).ready(function ($) {
399 $( '.wpmet-notice.is-dismissible' ).on( 'click', '.notice-dismiss', function() {
400
401 _this = $( this ).parents('.wpmet-notice').eq(0);
402 var notice_id = _this.attr( 'id' ) || '';
403 var expired_time = _this.attr( 'expired_time' ) || '';
404 var dismissible = _this.attr( 'dismissible' ) || '';
405 var x = $( this ).attr('class');
406
407 // console.log({
408 // _this, x, notice_id, expired_time, dismissible
409 // });
410 // return;
411
412 _this.addClass('hidden');
413
414 $.ajax({
415 url: ajaxurl,
416 type: 'POST',
417 data: {
418 action : 'wpmet-notices',
419 notice_id : notice_id,
420 dismissible : dismissible,
421 expired_time : expired_time,
422 nonce : '<?php echo esc_js( wp_create_nonce( 'wpmet-notices' ) );?>'
423 },
424 });
425 });
426 });
427 </script>
428 <style>
429 .wpmet-notice{
430 margin: 5px 0 15px;
431 padding: 0!important;
432 display: flex;
433 flex-direction: row;
434 justify-content: flex-start;
435 align-items: center;
436 }
437
438 .wpmet-notice .notice-right-container{
439 margin: .7rem .8rem .8rem;
440 }
441
442 .wpmet-notice.no-gutter, .wpmet-notice.no-gutter .notice-right-container{
443 padding: 0!important;
444 margin: 0!important;
445 }
446
447 .notice-right-container .notice-vert-space{
448 margin-bottom: .8rem;
449 }
450
451 .notice-right-container .notice-vert-space:last-child,
452 .notice-right-container .notice-vert-space:only-child{
453 margin-bottom: 0;
454 }
455
456 .wpmet-notice .notice-logo{
457 padding: .8rem;
458 max-width: 110px;
459 max-height: 110px;
460 }
461
462 .wpmet-notice-button {
463 text-decoration:none;
464 }
465
466 .wpmet-notice-button > i{
467 margin-right: 3px;
468 }
469
470 .wpmet-notice-button .notice-icon{
471 display:inline-block;
472 }
473
474 .wpmet-notice-button .notice-icon:before{
475 vertical-align: middle!important;
476 margin-top: -1px;
477 }
478
479 .wpmet-notice .notice-main-title{
480 color: #1d2327;
481 font-size: 1.2rem;
482 }
483
484 </style>
485 <?php
486 }
487
488
489 private static $instance;
490
491 /**
492 * Method: instance -> Return Notice module class instance
493 *
494 * @param string|null $text_domain
495 * @param string|null $unique_id
496 * @return mixed
497 */
498 public static function instance($text_domain = null, $unique_id = null) {
499 if($text_domain == null){
500 return false;
501 }
502
503 self::$instance = new self();
504
505 return self::$instance->config($text_domain, (is_null($unique_id) ? uniqid() : $unique_id));
506 }
507 }
508
509 endif;