GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( 74a577...62d274 )
by Brad
02:30
created

FS_Admin_Notice_Manager::has_sticky_messages()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 3
nc 2
nop 0
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
1
<?php
0 ignored issues
show
Coding Style Compatibility introduced by
For compatibility and reusability of your code, PSR1 recommends that a file should introduce either new symbols (like classes, functions, etc.) or have side-effects (like outputting something, or including other files), but not both at the same time. The first symbol is defined on line 13 and the first side effect is on line 10.

The PSR-1: Basic Coding Standard recommends that a file should either introduce new symbols, that is classes, functions, constants or similar, or have side effects. Side effects are anything that executes logic, like for example printing output, changing ini settings or writing to a file.

The idea behind this recommendation is that merely auto-loading a class should not change the state of an application. It also promotes a cleaner style of programming and makes your code less prone to errors, because the logic is not spread out all over the place.

To learn more about the PSR-1, please see the PHP-FIG site on the PSR-1.

Loading history...
2
	/**
3
	 * @package     Freemius
4
	 * @copyright   Copyright (c) 2015, Freemius, Inc.
5
	 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
6
	 * @since       1.0.7
7
	 */
8
9
	if ( ! defined( 'ABSPATH' ) ) {
10
		exit;
11
	}
12
13
	class FS_Admin_Notice_Manager {
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class must be in a namespace of at least one level to avoid collisions.

You can fix this by adding a namespace to your class:

namespace YourVendor;

class YourClass { }

When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.

Loading history...
14
		/**
15
		 * @var string
16
		 */
17
		protected $_slug;
18
		/**
19
		 * @var string
20
		 */
21
		protected $_title;
22
		/**
23
		 * @var array[]
24
		 */
25
		private $_admin_messages = array();
26
		/**
27
		 * @var FS_Key_Value_Storage
28
		 */
29
		private $_sticky_storage;
30
		/**
31
		 * @var FS_Plugin_Manager[]
32
		 */
33
		private static $_instances = array();
34
		/**
35
		 * @var FS_Logger
36
		 */
37
		protected $_logger;
38
39
		/**
40
		 * @param string $slug
41
		 * @param string $title
42
		 *
43
		 * @return FS_Admin_Notice_Manager
44
		 */
45
		static function instance( $slug, $title = '' ) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
46
			if ( ! isset( self::$_instances[ $slug ] ) ) {
47
				self::$_instances[ $slug ] = new FS_Admin_Notice_Manager( $slug, $title );
48
			}
49
50
			return self::$_instances[ $slug ];
51
		}
52
53
		protected function __construct( $slug, $title = '' ) {
54
			$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $slug . '_data', WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
55
56
			$this->_slug           = $slug;
57
			$this->_title          = ! empty( $title ) ? $title : '';
58
			$this->_sticky_storage = FS_Key_Value_Storage::instance( 'admin_notices', $this->_slug );
59
60
			if ( is_admin() ) {
61
				if ( 0 < count( $this->_sticky_storage ) ) {
62
					// If there are sticky notices for the current slug, add a callback
63
					// to the AJAX action that handles message dismiss.
64
					add_action( "wp_ajax_fs_dismiss_notice_action_{$slug}", array(
65
						&$this,
66
						'dismiss_notice_ajax_callback'
67
					) );
68
69
					foreach ( $this->_sticky_storage as $id => $msg ) {
70
						// Add admin notice.
71
						$this->add(
72
							$msg['message'],
73
							$msg['title'],
74
							$msg['type'],
75
							true,
76
							$msg['all'],
77
							$msg['id'],
78
							false
79
						);
80
					}
81
				}
82
			}
83
		}
84
85
		/**
86
		 * Remove sticky message by ID.
87
		 *
88
		 * @author Vova Feldman (@svovaf)
89
		 * @since  1.0.7
90
		 *
91
		 */
92
		function dismiss_notice_ajax_callback() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
Coding Style introduced by
dismiss_notice_ajax_callback uses the super-global variable $_POST which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
93
			$this->_sticky_storage->remove( $_POST['message_id'] );
94
			wp_die();
95
		}
96
97
		/**
98
		 * Rendered sticky message dismiss JavaScript.
99
		 *
100
		 * @author Vova Feldman (@svovaf)
101
		 * @since  1.0.7
102
		 */
103
		static function _add_sticky_dismiss_javascript() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
104
			$params = array();
105
			fs_require_once_template( 'sticky-admin-notice-js.php', $params );
106
		}
107
108
		private static $_added_sticky_javascript = false;
109
110
		/**
111
		 * Hook to the admin_footer to add sticky message dismiss JavaScript handler.
112
		 *
113
		 * @author Vova Feldman (@svovaf)
114
		 * @since  1.0.7
115
		 */
116
		private static function has_sticky_messages() {
117
			if ( ! self::$_added_sticky_javascript ) {
118
				add_action( 'admin_footer', array( 'FS_Admin_Notice_Manager', '_add_sticky_dismiss_javascript' ) );
119
			}
120
		}
121
122
		/**
123
		 * Handle admin_notices by printing the admin messages stacked in the queue.
124
		 *
125
		 * @author Vova Feldman (@svovaf)
126
		 * @since  1.0.4
127
		 *
128
		 */
129
		function _admin_notices_hook() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
130
			$notice_type = 'admin_notices';
131
132
			if ( function_exists( 'current_user_can' ) &&
133
			     ! current_user_can( 'manage_options' )
134
			) {
135
				// Only show messages to admins.
136
				return;
137
			}
138
139
			if ( ! isset( $this->_admin_messages[ $notice_type ] ) || ! is_array( $this->_admin_messages[ $notice_type ] ) ) {
140
				return;
141
			}
142
143
			foreach ( $this->_admin_messages[ $notice_type ] as $id => $msg ) {
144
				fs_require_template( 'admin-notice.php', $msg );
145
146
				if ( $msg['sticky'] ) {
147
					self::has_sticky_messages();
148
				}
149
			}
150
		}
151
152
		/**
153
		 * Handle all_admin_notices by printing the admin messages stacked in the queue.
154
		 *
155
		 * @author Vova Feldman (@svovaf)
156
		 * @since  1.0.4
157
		 *
158
		 */
159
		function _all_admin_notices_hook() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
160
			$notice_type = 'all_admin_notices';
161
162
			if ( ! isset( $this->_admin_messages[ $notice_type ] ) || ! is_array( $this->_admin_messages[ $notice_type ] ) ) {
163
				return;
164
			}
165
166
			foreach ( $this->_admin_messages[ $notice_type ] as $id => $msg ) {
167
				fs_require_template( 'all-admin-notice.php', $msg );
168
			}
169
		}
170
171
		/**
172
		 * Enqueue common stylesheet to style admin notice.
173
		 *
174
		 * @author Vova Feldman (@svovaf)
175
		 * @since  1.0.7
176
		 */
177
		function _enqueue_styles() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
178
			fs_enqueue_local_style( 'fs_common', '/admin/common.css' );
179
		}
180
181
		/**
182
		 * Add admin message to admin messages queue, and hook to admin_notices / all_admin_notices if not yet hooked.
183
		 *
184
		 * @author Vova Feldman (@svovaf)
185
		 * @since  1.0.4
186
		 *
187
		 * @param string $message
188
		 * @param string $title
189
		 * @param string $type
190
		 * @param bool   $is_sticky
191
		 * @param bool   $all_admin
192
		 * @param string $id Message ID
193
		 * @param bool   $store_if_sticky
194
		 *
195
		 * @uses   add_action()
196
		 */
197
		function add( $message, $title = '', $type = 'success', $is_sticky = false, $all_admin = false, $id = '', $store_if_sticky = true ) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
198
			$key = ( $all_admin ? 'all_admin_notices' : 'admin_notices' );
199
200
			if ( ! isset( $this->_admin_messages[ $key ] ) ) {
201
				$this->_admin_messages[ $key ] = array();
202
203
				add_action( $key, array( &$this, "_{$key}_hook" ) );
204
				add_action( 'admin_enqueue_scripts', array( &$this, '_enqueue_styles' ) );
205
206
			}
207
208
			if ( '' === $id ) {
209
				$id = md5( $title . ' ' . $message . ' ' . $type );
210
			}
211
212
			$message_object = array(
213
				'message' => $message,
214
				'title'   => $title,
215
				'type'    => $type,
216
				'sticky'  => $is_sticky,
217
				'id'      => $id,
218
				'all'     => $all_admin,
219
				'slug'    => $this->_slug,
220
				'plugin'  => $this->_title,
221
			);
222
223
			if ( $is_sticky && $store_if_sticky ) {
224
				$this->_sticky_storage->{$id} = $message_object;
225
			}
226
227
			$this->_admin_messages[ $key ][ $id ] = $message_object;
228
		}
229
230
		/**
231
		 * @author Vova Feldman (@svovaf)
232
		 * @since  1.0.7
233
		 *
234
		 * @param string|string[] $ids
235
		 */
236
		function remove_sticky( $ids ) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
237
			if ( ! is_array( $ids ) ) {
238
				$ids = array( $ids );
239
			}
240
241
			foreach ( $ids as $id ) {
242
				// Remove from sticky storage.
243
				$this->_sticky_storage->remove( $id );
244
245
				// Remove from current admin messages.
246
				if ( isset( $this->_admin_messages['all_admin_notices'] ) && isset( $this->_admin_messages['all_admin_notices'][ $id ] ) ) {
247
					unset( $this->_admin_messages['all_admin_notices'][ $id ] );
248
				}
249
				if ( isset( $this->_admin_messages['admin_notices'] ) && isset( $this->_admin_messages['admin_notices'][ $id ] ) ) {
250
					unset( $this->_admin_messages['admin_notices'][ $id ] );
251
				}
252
			}
253
		}
254
255
		/**
256
		 * Check if sticky message exists by id.
257
		 *
258
		 * @author Vova Feldman (@svovaf)
259
		 * @since  1.0.9
260
		 *
261
		 * @param $id
262
		 *
263
		 * @return bool
264
		 */
265
		function has_sticky( $id ) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
266
			return isset( $this->_sticky_storage[ $id ] );
267
		}
268
269
		/**
270
		 * Adds sticky admin notification.
271
		 *
272
		 * @author Vova Feldman (@svovaf)
273
		 * @since  1.0.7
274
		 *
275
		 * @param string $message
276
		 * @param string $id Message ID
277
		 * @param string $title
278
		 * @param string $type
279
		 * @param bool   $all_admin
280
		 */
281
		function add_sticky( $message, $id, $title = '', $type = 'success', $all_admin = false ) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
282
			$message = fs_apply_filter( $this->_slug, "sticky_message_{$id}", $message );
283
			$title   = fs_apply_filter( $this->_slug, "sticky_title_{$id}", $title );
284
285
			$this->add( $message, $title, $type, true, $all_admin, $id );
286
		}
287
288
		/**
289
		 * Clear all sticky messages.
290
		 *
291
		 * @author Vova Feldman (@svovaf)
292
		 * @since  1.0.8
293
		 */
294
		function clear_all_sticky() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
295
			$this->_sticky_storage->clear_all();
296
		}
297
298
		/**
299
		 * Add admin message to all admin messages queue, and hook to all_admin_notices if not yet hooked.
300
		 *
301
		 * @author Vova Feldman (@svovaf)
302
		 * @since  1.0.4
303
		 *
304
		 * @param string $message
305
		 * @param string $title
306
		 * @param string $type
307
		 * @param bool   $is_sticky
308
		 * @param string $id Message ID
309
		 */
310
		function add_all( $message, $title = '', $type = 'success', $is_sticky = false, $id = '' ) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
311
			$this->add( $message, $title, $type, $is_sticky, true, $id );
312
		}
313
	}