PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 3.8.9
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v3.8.9
4.9.2 4.9.1 4.9.0 4.8.2 4.8.1 4.8.0 4.7.0 4.6.2 4.6.1 4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 4.5.1 4.5.0 4.4.1 4.4.0 3.3.4 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 All 200 releases
betterdocs / vendor / priyomukul / wp-notice / src / Notices.php

Notices.php in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 3.8.9, at vendor/priyomukul/wp-notice/src/Notices.php

220 lines 4.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace PriyoMukul\WPNotice;
4
5 use Exception;
6 use PriyoMukul\WPNotice\Utils\Base;
7 use PriyoMukul\WPNotice\Utils\CacheBank;
8 use PriyoMukul\WPNotice\Utils\Helper;
9
10
11 /**
12 * @property $notices []
13 * @property $queue []
14 * @property $id string
15 * @property $stylesheet_url string
16 */
17 #[\AllowDynamicProperties]
18 final class Notices extends Base {
19 use Helper;
20
21 const VERSION = '1.1.0';
22
23 private $version = '1.1.0';
24
25 public $system_id = 'wpnotice_system';
26 public $app = 'wpnotice';
27 private $storage = null;
28 private $scripts = null;
29
30 private $args;
31
32 /**
33 * A list of notice
34 * @var array
35 */
36 private $notices = [];
37
38 /**
39 * A list of notice based to timestamp (A Queue)
40 * @var false|mixed
41 */
42 private $queue;
43
44 /**
45 * @var CacheBank
46 */
47 private static $cache_bank;
48
49 /**
50 * @var bool
51 */
52 private $dev_mode = false;
53
54 /**
55 * Default notice system options
56 * @var array
57 */
58 private $options = [
59 'id' => '',
60 'stylesheet_url' => '',
61 'priority' => 1
62 ];
63
64 private $deprecated_options = [
65 'system_id' => 'id',
66 'app' => 'id',
67 'scripts' => 'stylesheet_url'
68 ];
69
70 private $default_options = [
71 'scripts_handle' => ''
72 ];
73
74 /**
75 * This method takes an array as argument.
76 *
77 * @template $args
78 *
79 * @param $args
80 *
81 * @throws Exception
82 */
83 public function __construct( $args ) {
84 self::$cache_bank = CacheBank::get_instance();
85
86 /**
87 * Check all the property is passed or not
88 */
89 if ( ! isset( $args['version'] ) && self::VERSION === '1.1.0' ) {
90 if ( ! is_array( $args ) ) {
91 $this->error( "Argument of " . __CLASS__ . " should be an array. " . gettype( $args ) . " given." );
92 }
93
94 if ( empty( $args ) ) {
95 $this->error( "Argument of " . __CLASS__ . " should not be an empty array." );
96 }
97
98 foreach ( $this->options as $key => $value ) {
99 if ( ! isset( $args[ $key ] ) ) {
100 $this->error( "Missing $key from argument list." );
101 }
102 }
103
104 $this->options = wp_parse_args( $args, $this->options );
105 $this->scripts = $this->stylesheet_url;
106 }
107
108 $this->system_id = ! empty( $args['id'] ) ? $args['id'] . '-notice-system' : 'wpnotice_system';
109 $this->app = ! empty( $args['id'] ) ? $args['id'] : 'wpnotice';
110 $this->dev_mode = ! empty( $args['dev_mode'] ) ? $args['dev_mode'] : $this->dev_mode;
111 $this->args = $args;
112
113 if ( ! empty( $args['styles'] ) ) {
114 $this->scripts = $args['styles'];
115 unset( $args['styles'] );
116 }
117
118 $this->queue = $this->storage()->get( '', [] );
119
120 self::$cache_bank->create_account( $this );
121 }
122
123 public function __get( $name ) {
124 if ( property_exists( $this, $name ) ) {
125 return $this->$name;
126 }
127
128 if ( ! empty( $this->options[ $name ] ) ) {
129 return $this->options[ $name ];
130 }
131
132 if ( isset( $this->deprecated_options[ $name ] ) && ! empty( $this->options[ $this->deprecated_options[ $name ] ] ) ) {
133 return $this->options[ $this->deprecated_options[ $name ] ];
134 }
135
136 if ( ! empty( $this->args[ $name ] ) ) {
137 return $this->args[ $name ];
138 }
139
140 return null;
141 }
142
143 public function storage() {
144 return $this->database( $this->args );
145 }
146
147 public function init() {
148 }
149
150 public function notices() {
151 wp_enqueue_style( $this->system_id, $this->scripts );
152
153 if ( ! $this->dev_mode ) {
154 /**
155 * @var Notice $notice
156 */
157 $notice = $this->current_notice();
158 if ( $notice ) {
159 $notice->display();
160 }
161 }
162
163 /**
164 * Print all notices while dev_mode is enabled.
165 */
166 $this->print_notices_for_dev_mode();
167 }
168
169 public function eligible_notices( $notices = [], $queue = [] ) {
170 $notices = empty( $notices ) ? $this->notices : $notices;
171 $queue = empty( $queue ) ? $this->queue : $queue;
172
173 return $this->get_sorted_queue( $notices, $queue );
174 }
175
176 public function scripts() {
177 if ( ! $this->dev_mode ) {
178 /**
179 * @var Notice $notice
180 */
181 $notice = $this->current_notice();
182
183 if ( $notice && $notice->show() ) {
184 $notice->dismiss->print_script();
185 }
186 }
187
188 /**
189 * Print scripts for all notices while dev_mode is enabled.
190 */
191 $this->print_notices_for_dev_mode( true );
192 }
193
194 public function add( $id, $content, $options = [] ) {
195 $this->notices[ $id ] = new Notice( $id, $content, $options, $this->queue, $this );
196
197 self::$cache_bank->deposit( $this->id, $id, $this->notices[ $id ] );
198 }
199
200 private function current_notice() {
201 $current_notice = current( $this->eligible_notices() );
202
203 return isset( $this->notices[ $current_notice ] ) ? $this->notices[ $current_notice ] : false;
204 }
205
206 private function print_notices_for_dev_mode( $scripts = false ) {
207 if ( $this->dev_mode ) {
208 /**
209 * @var Notice $notice
210 */
211 foreach ( $this->notices as $notice ) {
212 if ( $scripts ) {
213 $notice->dismiss->print_script();
214 } else {
215 $notice->display( true );
216 }
217 }
218 }
219 }
220 }