PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.13.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.13.0
4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 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.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 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.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / WordPress / Admin / Notices / AdminNoticesService.php
surecart / app / src / WordPress / Admin / Notices Last commit date
AdminNoticesService.php 2 years ago AdminNoticesServiceProvider.php 3 years ago
AdminNoticesService.php
182 lines
1 <?php
2
3 namespace SureCart\WordPress\Admin\Notices;
4
5 /**
6 * Admin notices service
7 */
8 class AdminNoticesService {
9 /**
10 * Notice key.
11 *
12 * @var string
13 */
14 protected $notice_key = 'surecart_dismissed_notice';
15
16 /**
17 * Showing the response notice?
18 *
19 * @var boolean
20 */
21 protected $showing_response_notice = false;
22
23 /**
24 * Bootstrap notice dismissal.
25 *
26 * @return void
27 */
28 public function bootstrap() {
29 add_action( 'admin_init', [ $this, 'dismiss' ] );
30 }
31
32 /**
33 * Is the notice dismissed.
34 *
35 * @param string $name Notice name.
36 *
37 * @return boolean
38 */
39 public function isDismissed( $name ) {
40 return (bool) get_option( $this->notice_key . '_' . sanitize_text_field( $name ), false );
41 }
42
43 /**
44 * Dismiss the notice.
45 *
46 * @return void
47 */
48 public function dismiss() {
49 // permissions check.
50 if ( ! current_user_can( 'manage_options' ) ) {
51 return;
52 }
53
54 // not our notices, bail.
55 if ( ! isset( $_GET['surecart_action'] ) || 'dismiss_notices' !== sanitize_text_field( wp_unslash( $_GET['surecart_action'] ) ) ) {
56 return;
57 }
58
59 // get notice.
60 $notice = ! empty( $_GET['surecart_notice'] ) ? sanitize_text_field( wp_unslash( $_GET['surecart_notice'] ) ) : '';
61 if ( ! $notice ) {
62 return;
63 }
64
65 // verify nonce.
66 if ( ! wp_verify_nonce( sanitize_text_field( $_GET['surecart_nonce'] ), 'surecart_notice_nonce' ) ) {
67 wp_die( esc_html__( 'Your session expired - please try again.', 'surecart' ) );
68 exit;
69 }
70
71 // notice is dismissed.
72 update_option( $this->notice_key . '_' . sanitize_text_field( $notice ), 1 );
73 }
74
75 /**
76 * Show the response notice.
77 *
78 * @param array $notice Notice data to show.
79 *
80 * @return void
81 */
82 public function showResponseNotice( $notice = [] ) {
83 // already showing it.
84 if ( $this->showing_response_notice ) {
85 return;
86 }
87
88 // phpcs:disable WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_decode
89 $notice_data = json_decode( base64_decode( implode( '', (array) $notice ) ) );
90 if ( empty( $notice_data->message ) ) {
91 return;
92 }
93
94 $this->showing_response_notice = true;
95
96 add_action(
97 'admin_notices',
98 function() use ( $notice_data ) {
99 echo wp_kses_post(
100 $this->render(
101 [
102 'name' => 'update_notice_' . \SureCart::plugin()->version(),
103 'type' => sanitize_text_field( $notice_data->type ),
104 'title' => esc_html__( 'SureCart', 'surecart' ),
105 'text' => wp_kses_post( $notice_data->message ),
106 ]
107 )
108 );
109 }
110 );
111 }
112
113 /**
114 * Add the notice.
115 *
116 * @return void
117 */
118 public function add( $notice_data ) {
119 add_action(
120 'admin_notices',
121 function() use ( $notice_data ) {
122 echo wp_kses_post(
123 $this->render( $notice_data )
124 );
125 }
126 );
127 }
128
129 /**
130 * Render the notice
131 *
132 * @return string
133 */
134 public function render( $args = [] ) {
135 $args = wp_parse_args(
136 $args,
137 [
138 'title' => '',
139 'type' => 'info',
140 'text' => '',
141 'name' => '',
142 ]
143 );
144
145 if ( $this->isDismissed( $args['name'] ) ) {
146 return '';
147 }
148
149 ob_start(); ?>
150
151 <div class="notice notice-<?php echo sanitize_html_class( $args['type'] ); ?>" style="position:relative">
152 <p>
153 <strong>
154 <?php echo esc_html( $args['title'] ); ?>
155 </strong>
156 </p>
157
158 <?php echo wp_kses_post( $args['text'] ); ?>
159
160 <?php if ( ! empty( $args['name'] ) ) : ?>
161 <a href="
162 <?php
163 echo esc_url(
164 add_query_arg(
165 [
166 'surecart_action' => 'dismiss_notices',
167 'surecart_notice' => sanitize_text_field( $args['name'] ),
168 'surecart_nonce' => \wp_create_nonce( 'surecart_notice_nonce' ),
169 ]
170 )
171 );
172 ?>
173 " type="button" class="notice-dismiss" style="text-decoration:none;"><span class="screen-reader-text">Dismiss this notice.</span></a>
174
175 <?php endif; ?>
176 </div>
177
178 <?php
179 return ob_get_clean();
180 }
181 }
182