PluginProbe ʕ •ᴥ•ʔ
Essential Addons for Elementor – Popular Elementor Templates & Widgets / 6.2.3
Essential Addons for Elementor – Popular Elementor Templates & Widgets v6.2.3
6.6.9 6.6.8 6.6.7 6.6.6 6.6.5 6.6.4 6.6.3 5.7.3 5.7.4 5.8.0 5.8.1 5.8.10 5.8.11 5.8.12 5.8.13 5.8.14 5.8.15 5.8.16 5.8.18 5.8.2 5.8.3 5.8.4 5.8.5 5.8.6 5.8.7 5.8.8 5.8.9 5.9.0 5.9.1 5.9.10 5.9.11 5.9.12 5.9.13 5.9.14 5.9.15 5.9.16 5.9.17 5.9.18 5.9.19 5.9.2 5.9.20 5.9.21 5.9.22 5.9.23 5.9.24 5.9.25 5.9.26 5.9.27 5.9.3 5.9.4 5.9.5 5.9.6 5.9.7 5.9.8 5.9.9 6.0.0 6.0.1 6.0.10 6.0.11 6.0.12 6.0.13 6.0.14 6.0.15 6.0.2 6.0.3 6.0.4 6.0.5 6.0.6 6.0.7 6.0.8 6.0.9 6.1.0 6.1.1 6.1.10 6.1.11 trunk 6.1.12 1.0.0 6.1.13 1.0.1 6.1.14 1.1.0 6.1.15 2.0 6.1.17 2.1 6.1.18 2.10.0 6.1.19 2.10.1 6.1.2 2.10.2 6.1.20 2.10.3 6.1.3 2.10.4 6.1.4 2.10.5 6.1.5 2.2.0 6.1.6 2.2.1 6.1.7 2.2.2 6.1.8 2.2.3 6.1.9 2.2.4 6.2.0 2.2.5 6.2.1 2.3.0 6.2.2 2.3.1 6.2.3 2.4.0 6.2.4 2.4.1 6.3.0 2.4.2 6.3.1 2.4.3 6.3.2 2.5.0 6.3.3 2.6.0 6.4.0 2.7.0 6.5.0 2.7.1 6.5.1 2.7.10 6.5.10 2.7.11 6.5.11 2.7.2 6.5.12 2.7.3 6.5.13 2.7.4 6.5.2 2.7.5 6.5.3 2.7.6 6.5.4 2.7.7 6.5.5 2.7.8 6.5.6 2.7.9 6.5.7 2.8.0 6.5.8 2.8.1 6.5.9 2.8.2 6.6.0 2.8.3 6.6.1 2.8.4 6.6.2 2.8.5 2.8.6 2.8.7 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 2.9.8 2.9.9 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.4.1 3.1.5 3.2.0 3.3.0 3.3.1 3.3.2 3.3.3 3.4.0 3.5.0 3.5.1 3.5.2 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 3.9.1 3.9.2 3.9.3 3.9.4 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.2.0 4.2.1 4.2.2 4.2.3 4.2.4 4.3.0 4.3.1 4.3.2 4.3.3 4.3.4 4.3.5 4.3.6 4.3.7 4.3.8 4.3.9 4.4.0 4.4.1 4.5.0 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.6.0 4.6.1 4.6.2 4.6.3 4.6.4 4.6.5 4.6.6 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.7.5 4.8.0 4.8.1 4.8.2 4.8.3 4.8.4 4.9.0 4.9.1 4.9.2 4.9.3 4.9.4 4.9.5 4.9.6 4.9.7 5.0.0 5.0.1 5.0.10 5.0.11 5.0.12 5.0.13 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.0.9 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.1.8 5.1.9 5.2.0 5.2.1 5.2.2 5.2.3 5.2.4 5.3.0 5.3.1 5.3.2 5.4.6 5.5.5 5.6.5 5.7.2
essential-addons-for-elementor-lite / vendor / priyomukul / wp-notice / src / Dismiss.php
essential-addons-for-elementor-lite / vendor / priyomukul / wp-notice / src Last commit date
Utils 2 years ago Dismiss.php 2 years ago Notice.php 2 years ago Notices.php 2 years ago
Dismiss.php
165 lines
1 <?php
2
3 namespace PriyoMukul\WPNotice;
4
5 use PriyoMukul\WPNotice\Utils\Base;
6 use PriyoMukul\WPNotice\Utils\Helper;
7
8 #[\AllowDynamicProperties]
9 class Dismiss extends Base {
10 use Helper;
11
12 private $id;
13 private $scope = 'user';
14
15 /**
16 * @var Notices
17 */
18 private $app;
19 private $hook;
20
21 public function __construct( $id, $options, $app ) {
22 $this->id = $id;
23 $this->app = $app;
24
25 if ( ! empty( $options ) ) {
26 foreach ( $options as $key => $_value ) {
27 $this->{$key} = $_value;
28 }
29 }
30
31 $this->hook = $this->app->app . '_wpnotice_dismiss_notice';
32
33 add_action( 'wp_ajax_' . $this->hook, [ $this, 'ajax_maybe_dismiss_notice' ] );
34 }
35
36 /**
37 * Print the script for dismissing the notice.
38 *
39 * @access public
40 * @return void
41 * @since 1.0
42 */
43 public function print_script() {
44 $nonce = wp_create_nonce( 'wpnotice_dismiss_notice_' . $this->id );
45 $_id = '#wpnotice-' . esc_attr( $this->app->app ) . '-' . esc_attr( $this->id );
46 ?>
47 <script>
48 window.addEventListener('load', function () {
49 var dismissBtn = document.querySelector('<?php echo $_id ?> .notice-dismiss');
50 var extraDismissBtn = document.querySelectorAll('<?php echo $_id ?> .dismiss-btn');
51
52 function wpNoticeDismissFunc(event) {
53 event.preventDefault();
54
55 var httpRequest = new XMLHttpRequest(),
56 postData = '',
57 dismiss = event.target.dataset?.hasOwnProperty('dismiss') && event.target.dataset.dismiss || false,
58 later = event.target.dataset?.hasOwnProperty('later') && event.target.dataset.later || false;
59
60 if (dismiss || later) {
61 jQuery(event.target.offsetParent).slideUp(200);
62 }
63
64 // Data has to be formatted as a string here.
65 postData += 'id=<?php echo esc_attr( rawurlencode( $this->id ) ); ?>';
66 postData += '&action=<?php echo esc_attr( $this->hook ); ?>';
67 if (dismiss) {
68 postData += '&dismiss=' + dismiss;
69 }
70 if (later) {
71 postData += '&later=' + later;
72 }
73
74 postData += '&nonce=<?php echo esc_html( $nonce ); ?>';
75
76 httpRequest.open('POST', '<?php echo esc_url( admin_url( 'admin-ajax.php' ) ); ?>');
77 httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
78 httpRequest.send(postData);
79 }
80
81 // Add an event listener to the dismiss button.
82 dismissBtn && dismissBtn.addEventListener('click', wpNoticeDismissFunc);
83 if (extraDismissBtn.length > 0) {
84 extraDismissBtn.forEach(btn => btn.addEventListener('click', wpNoticeDismissFunc))
85 }
86 });
87 </script>
88 <?php
89 }
90
91
92 /**
93 * Run check to see if we need to dismiss the notice.
94 * If all tests are successful then call the dismiss_notice() method.
95 *
96 * @access public
97 * @return void
98 * @since 1.0
99 */
100 public function ajax_maybe_dismiss_notice() {
101 // Sanity check: Early exit if we're not on a _dismiss_notice action.
102 if ( ! isset( $_POST['action'] ) || $this->hook !== $_POST['action'] ) {
103 return;
104 }
105
106 // Sanity check: Early exit if the ID of the notice is not the one from this object.
107 if ( ! isset( $_POST['id'] ) || $this->id !== $_POST['id'] ) {
108 return;
109 }
110
111 // Security check: Make sure nonce is OK.
112 check_ajax_referer( 'wpnotice_dismiss_notice_' . $this->id, 'nonce', true );
113
114 if ( isset( $_POST['later'] ) ) {
115 $_recurrence = intval( $this->recurrence ) || 15;
116 $_queue = $this->app->storage()->get();
117
118 $_queue[ $this->id ]['start'] = $this->strtotime( "+$_recurrence days" );
119 $_queue[ $this->id ]['expire'] = $this->strtotime( "+" . ( $_recurrence + 3 ) . " days" );
120 $this->app->storage()->save( $_queue );
121
122 return;
123 }
124
125 // If we got this far, we need to dismiss the notice.
126 $this->dismiss_notice();
127 }
128
129 /**
130 * Actually dismisses the notice.
131 *
132 * @access private
133 * @return bool
134 * @since 1.0
135 */
136 public function dismiss_notice() {
137 if ( ! defined( 'WPNOTICE_EXPIRED_TIME' ) ) {
138 define( 'WPNOTICE_EXPIRED_TIME', HOUR_IN_SECONDS * 10 );
139 }
140
141 set_transient( 'wpnotice_priority_time_expired', true, time() + WPNOTICE_EXPIRED_TIME );
142
143 if ( 'user' === $this->scope ) {
144 return $this->app->storage()->save_meta( $this->id );
145 }
146
147 $_key = $this->app->app . '_' . $this->id . '_notice_dismissed';
148
149 return $this->app->storage()->save( $_key );
150 }
151
152 /**
153 * Check if is dismissed or not
154 * @return boolean
155 */
156 public function is_dismissed() {
157 if ( 'user' === $this->scope ) {
158 return $this->app->storage()->get_meta( $this->id );
159 }
160
161 $_key = $this->app->app . '_' . $this->id . '_notice_dismissed';
162
163 return $this->app->storage()->get( $_key );
164 }
165 }