This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | /** |
||
3 | * Class for managing plugin settings cache |
||
4 | * |
||
5 | * Note: only use for internal purpose. |
||
6 | * |
||
7 | * @package Give |
||
8 | * @subpackage Classes/Give_Cache_Setting |
||
9 | * @copyright Copyright (c) 2018, GiveWP |
||
10 | * @license https://opensource.org/licenses/gpl-license GNU Public License |
||
11 | * @since 2.4.0 |
||
12 | */ |
||
13 | |||
14 | // Exit if accessed directly. |
||
15 | if ( ! defined( 'ABSPATH' ) ) { |
||
16 | exit; |
||
17 | } |
||
18 | |||
19 | /** |
||
20 | * Class Give_Cache_Setting |
||
21 | */ |
||
22 | class Give_Cache_Setting { |
||
0 ignored issues
–
show
Coding Style
introduced
by
![]() |
|||
23 | /** |
||
24 | * Instance. |
||
25 | * |
||
26 | * @since 2.4.0 |
||
27 | * @access private |
||
28 | * @var Give_Cache_Setting |
||
29 | */ |
||
30 | static private $instance; |
||
31 | |||
32 | /** |
||
33 | * Cache key. |
||
34 | * |
||
35 | * @since 2.4.0 |
||
36 | * @access private |
||
37 | * @var string |
||
38 | */ |
||
39 | private $cache_key = 'giveAllOptions'; |
||
40 | |||
41 | |||
42 | /** |
||
43 | * Cache group. |
||
44 | * |
||
45 | * @since 2.4.0 |
||
46 | * @access private |
||
47 | * @var string |
||
48 | */ |
||
49 | private $cache_group = 'give-options'; |
||
50 | |||
51 | /** |
||
52 | * Array of cached settings |
||
53 | * |
||
54 | * @since 2.4.0 |
||
55 | * @access private |
||
56 | * @var array |
||
57 | */ |
||
58 | private $settings = array( |
||
59 | 'give_settings' => array(), |
||
60 | 'give_version' => '', |
||
61 | 'give_completed_upgrades' => array(), |
||
62 | 'give_doing_upgrade' => array(), |
||
63 | 'give_paused_batches' => array(), |
||
64 | 'give_install_pages_created' => '', |
||
65 | 'give_show_db_upgrade_complete_notice' => '', |
||
66 | 'give_addon_last_activated' => '', |
||
67 | 'currencies' => array(), |
||
68 | 'gateways' => array(), |
||
69 | ); |
||
70 | |||
71 | /** |
||
72 | * Array of cached setting db option names |
||
73 | * |
||
74 | * @since 2.4.0 |
||
75 | * @access private |
||
76 | * @var array |
||
77 | */ |
||
78 | private $db_option_ids = array( |
||
79 | 'give_settings', |
||
80 | 'give_version', |
||
81 | 'give_completed_upgrades', |
||
82 | 'give_doing_upgrade', |
||
83 | 'give_install_pages_created', |
||
84 | 'give_show_db_upgrade_complete_notice', |
||
85 | 'give_addon_last_activated', |
||
86 | 'give_paused_batches', |
||
87 | ); |
||
88 | |||
89 | /** |
||
90 | * Array of cached setting option names |
||
91 | * |
||
92 | * @since 2.4.0 |
||
93 | * @access private |
||
94 | * @var array |
||
95 | */ |
||
96 | static private $all_option_ids; |
||
97 | |||
98 | /** |
||
99 | * Singleton pattern. |
||
100 | * |
||
101 | * @since 2.4.0 |
||
102 | * @access private |
||
103 | */ |
||
104 | private function __construct() { |
||
105 | } |
||
106 | |||
107 | |||
108 | /** |
||
109 | * Get instance. |
||
110 | * |
||
111 | * @since 2.4.0 |
||
112 | * @access public |
||
113 | * @return Give_Cache_Setting |
||
114 | */ |
||
115 | View Code Duplication | public static function get_instance() { |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
116 | if ( null === static::$instance ) { |
||
117 | self::$instance = new static(); |
||
118 | |||
119 | self::$instance->setup(); |
||
120 | } |
||
121 | |||
122 | return self::$instance; |
||
123 | } |
||
124 | |||
125 | /** |
||
126 | * Setup |
||
127 | * |
||
128 | * @since 2.4.0 |
||
129 | * @access private |
||
130 | */ |
||
131 | private function setup() { |
||
132 | self::$all_option_ids = array_keys( $this->settings ); |
||
133 | |||
134 | $this->load_plugin_settings(); |
||
135 | |||
136 | add_action( 'added_option', array( $this, 'reload_plugin_settings' ) ); |
||
137 | add_action( 'updated_option', array( $this, 'reload_plugin_settings' ) ); |
||
138 | add_action( 'deleted_option', array( $this, 'reload_plugin_settings' ) ); |
||
139 | |||
140 | add_action( 'give_init', array( $this, 'setup_currencies_list' ), 11 ); |
||
141 | add_action( 'give_init', array( $this, 'setup_gateways_list' ), 11 ); |
||
142 | } |
||
143 | |||
144 | /** |
||
145 | * Load plugin settings |
||
146 | * |
||
147 | * @since 2.4.0 |
||
148 | * @access private |
||
149 | */ |
||
150 | private function load_plugin_settings() { |
||
151 | global $wpdb; |
||
152 | |||
153 | /** |
||
154 | * Fire the filter |
||
155 | * |
||
156 | * This filter can be used if admin facing any caching issue. |
||
157 | * This is a switch to enable or disable setting cache. |
||
158 | * Thus filter can be removed in future. |
||
159 | * |
||
160 | * @since 2.4.1 |
||
161 | * |
||
162 | */ |
||
163 | if ( ! apply_filters( 'give_disable_setting_cache', false ) ) { |
||
164 | $cache = wp_cache_get( $this->cache_key, $this->cache_group ); |
||
165 | |||
166 | // Load options from cache. |
||
167 | if ( ! empty( $cache ) ) { |
||
168 | $this->settings = $cache; |
||
169 | |||
170 | return; |
||
171 | } |
||
172 | } |
||
173 | |||
174 | $db_option_ids = '\'' . implode( '\',\'', $this->db_option_ids ) . '\''; |
||
175 | |||
176 | $sql = "SELECT option_name, option_value FROM $wpdb->options WHERE option_name IN ({$db_option_ids}) "; |
||
177 | $results = $wpdb->get_results( $sql ); |
||
178 | |||
179 | if ( ! empty( $results ) ) { |
||
180 | |||
181 | /* @var stdClass $result */ |
||
182 | foreach ( $results as $result ) { |
||
183 | $this->settings[ $result->option_name ] = maybe_unserialize( $result->option_value ); |
||
184 | } |
||
185 | |||
186 | wp_cache_set( $this->cache_key, $this->settings, $this->cache_group ); |
||
187 | } |
||
188 | } |
||
189 | |||
190 | /** |
||
191 | * Reload option when add, update or delete |
||
192 | * |
||
193 | * Note: only for internal logic |
||
194 | * |
||
195 | * @since 2.4.0 |
||
196 | * |
||
197 | * @param $option_name |
||
198 | */ |
||
199 | public function reload_plugin_settings( $option_name ) { |
||
200 | // Bailout. |
||
201 | if ( ! in_array( $option_name, $this->db_option_ids ) ) { |
||
202 | return; |
||
203 | } |
||
204 | |||
205 | wp_cache_delete( $this->cache_key, $this->cache_group ); |
||
206 | $this->load_plugin_settings(); |
||
207 | } |
||
208 | |||
209 | /** |
||
210 | * Setup currencies list |
||
211 | * |
||
212 | * @since 2.4.0 |
||
213 | */ |
||
214 | public function setup_currencies_list() { |
||
215 | $currencies = require_once GIVE_PLUGIN_DIR . 'includes/currencies-list.php'; |
||
216 | |||
217 | /** |
||
218 | * Filter the supported currency list |
||
219 | * |
||
220 | * @since 2.4.0 |
||
221 | */ |
||
222 | $currencies = apply_filters( 'give_register_currency', $currencies ); |
||
223 | |||
224 | $this->settings['currencies'] = $currencies; |
||
225 | } |
||
226 | |||
227 | |||
228 | /** |
||
229 | * Setup gateway list |
||
230 | * |
||
231 | * @since 2.4.0 |
||
232 | */ |
||
233 | public function setup_gateways_list() { |
||
234 | // Default, built-in gateways |
||
235 | $gateways = array( |
||
236 | 'paypal' => array( |
||
237 | 'admin_label' => __( 'PayPal Standard', 'give' ), |
||
238 | 'checkout_label' => __( 'PayPal', 'give' ), |
||
239 | ), |
||
240 | 'manual' => array( |
||
241 | 'admin_label' => __( 'Test Donation', 'give' ), |
||
242 | 'checkout_label' => __( 'Test Donation', 'give' ), |
||
243 | ), |
||
244 | 'offline' => array( |
||
245 | 'admin_label' => esc_attr__( 'Offline Donation', 'give' ), |
||
246 | 'checkout_label' => esc_attr__( 'Offline Donation', 'give' ), |
||
247 | ), |
||
248 | ); |
||
249 | |||
250 | /** |
||
251 | * Filter the supported gateways list |
||
252 | * |
||
253 | * @since 2.4.0 |
||
254 | */ |
||
255 | $gateways = apply_filters( 'give_register_gateway', $gateways ); |
||
256 | |||
257 | $this->settings['gateways'] = $gateways; |
||
258 | } |
||
259 | |||
260 | |||
261 | /** |
||
262 | * Get option |
||
263 | * |
||
264 | * @since 2.4.0 |
||
265 | * @access public |
||
266 | * |
||
267 | * @param $option_name |
||
268 | * @param bool $default |
||
269 | * |
||
270 | * @return mixed |
||
271 | */ |
||
272 | public static function get_option( $option_name, $default = false ) { |
||
273 | $value = $default; |
||
274 | |||
275 | if ( in_array( $option_name, self::$all_option_ids ) ) { |
||
276 | $value = ! empty( self::$instance->settings[ $option_name ] ) |
||
277 | ? self::$instance->settings[ $option_name ] |
||
278 | : $default; |
||
279 | } |
||
280 | |||
281 | return $value; |
||
282 | } |
||
283 | |||
284 | /** |
||
285 | * Get plugin settings |
||
286 | * |
||
287 | * @since 2.4.0 |
||
288 | * @access public |
||
289 | */ |
||
290 | public static function get_settings() { |
||
291 | |||
292 | /** |
||
293 | * Filter the plugin setting |
||
294 | */ |
||
295 | return (array) apply_filters( 'give_get_settings', self::get_option( 'give_settings', array() ) ); |
||
296 | } |
||
297 | } |
||
298 | |||
299 | Give_Cache_Setting::get_instance(); |
||
300 |