PluginProbe
Woody Code Snippets – Insert PHP, CSS, JS, and Header/Footer Scripts / trunk
Woody Code Snippets – Insert PHP, CSS, JS, and Header/Footer Scripts vtrunk
2.7.6 2.7.5 2.7.4 trunk 1.3 2.0.4 2.0.6 2.1.91 2.2.4 2.2.7 2.2.9 2.3.1 2.3.10 2.4.10 2.4.2 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.6.0 2.6.1 2.7.0 2.7.1 All 27 releases
insert-php / includes / class.plugin.php

class.plugin.php in Woody Code Snippets – Insert PHP, CSS, JS, and Header/Footer Scripts trunk, at includes/class.plugin.php

409 lines 12.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * PHP snippets plugin base
4 *
5 * @package Woody_Code_Snippets
6 */
7
8 // Exit if accessed directly
9 if ( ! defined( 'ABSPATH' ) ) {
10 exit;
11 }
12
13 if ( ! class_exists( 'WINP_Plugin' ) ) {
14
15 class WINP_Plugin {
16
17 /**
18 * Custom license provider (overrides parent's premium property)
19 *
20 * @var WINP_License
21 */
22 public $premium;
23
24 /**
25 * @var WINP_Plugin
26 */
27 private static $app;
28
29 /**
30 * Snippets custom post type instance.
31 *
32 * @var WINP_SnippetsType
33 */
34 private $snippets_type;
35
36 /**
37 * @throws Exception
38 */
39 public function __construct() {
40 self::$app = $this;
41
42 // Initialize custom license provider.
43 require_once WINP_PLUGIN_DIR . '/includes/class.license.php';
44 $this->premium = new WINP_License();
45
46 require_once WINP_PLUGIN_DIR . '/includes/class.rest.php';
47 new WINP_Rest();
48
49 require_once WINP_PLUGIN_DIR . '/admin/pages/class.settings.php';
50 require_once WINP_PLUGIN_DIR . '/admin/pages/class.new-item.php';
51 require_once WINP_PLUGIN_DIR . '/admin/pages/class.snippet-library.php';
52
53 WINP_Settings::get_instance();
54 WINP_NewItem::get_instance();
55 WINP_SnippetLibrary::get_instance();
56
57 $this->load_global();
58
59 if ( is_admin() || WINP_Helper::doing_rest_api() ) {
60
61 if ( WINP_Helper::doing_ajax() ) {
62 require WINP_PLUGIN_DIR . '/admin/ajax/ajax.php';
63 require WINP_PLUGIN_DIR . '/admin/ajax/snippet-library.php';
64 }
65
66 $this->load_backend();
67 }
68 add_action(
69 'init',
70 function () {
71 if ( WINP_Plugin::app()->premium->is_active() ) {
72 update_option( WINP_PLUGIN_NAMESPACE . '_logger_flag', 'yes' );
73 }
74 }
75 );
76
77 add_filter( WINP_PLUGIN_NAMESPACE . '_logger_data', [ $this, 'get_logger_data' ] );
78 add_filter( 'themeisle_sdk_blackfriday_data', [ $this, 'add_black_friday_data' ] );
79 }
80
81 /**
82 * Get plugin instance
83 *
84 * @return WINP_Plugin
85 */
86 public static function app() {
87 return self::$app;
88 }
89
90 /**
91 * Survey data.
92 *
93 * @return array<string, mixed>
94 */
95 public function get_survey_data() {
96 $install_time = get_option( WINP_PLUGIN_NAMESPACE . '_install', time() );
97 $days_since_install = round( ( time() - $install_time ) / DAY_IN_SECONDS );
98 $total_snippets = wp_count_posts( WINP_SNIPPETS_POST_TYPE );
99 $total_snippets = isset( $total_snippets->publish ) ? $total_snippets->publish : 0;
100
101 $data = [
102 'environmentId' => 'cmiooosih4vm0ad01eihjub64',
103 'attributes' => [
104 'free_version' => WINP_PLUGIN_VERSION,
105 'pro_version' => defined( 'WASP_PLUGIN_VERSION' ) ? WASP_PLUGIN_VERSION : '',
106 'install_days_number' => $days_since_install,
107 'license_status' => self::app()->premium->is_active(),
108 'total_snippets' => $total_snippets,
109 ],
110 ];
111
112 if ( self::app()->premium->is_active() ) {
113 $data['attributes']['license_key'] = apply_filters( 'themeisle_sdk_secret_masking', self::app()->premium->get_key() );
114 }
115
116 return $data;
117 }
118
119 /**
120 * @return bool
121 */
122 public function current_user_car() {
123 return current_user_can( 'manage_options' );
124 }
125
126 /**
127 * Get Execute_Snippet object
128 *
129 * @return WINP_Execute_Snippet
130 */
131 public function get_execute_object() {
132 require_once WINP_PLUGIN_DIR . '/includes/class.execute.snippet.php';
133
134 return WINP_Execute_Snippet::app();
135 }
136
137 /**
138 * Get WINP_Api object
139 *
140 * @return WINP_Api
141 */
142 public function get_api_object() {
143 require_once WINP_PLUGIN_DIR . '/admin/includes/class.request.php';
144 require_once WINP_PLUGIN_DIR . '/admin/includes/class.api.php';
145
146 return new WINP_Api();
147 }
148
149 /**
150 * Get WINP_Common_Snippet object
151 *
152 * @return WINP_Common_Snippet
153 */
154 public function get_common_object() {
155 require_once WINP_PLUGIN_DIR . '/admin/includes/class.common.snippet.php';
156
157 return new WINP_Common_Snippet();
158 }
159
160 /**
161 * Plugin activation hook.
162 * Creates demo snippets on first activation and sets up capabilities.
163 *
164 * @return void
165 */
166 public function activation_hook() {
167 // Add custom capabilities to administrator role.
168 $this->snippets_type->add_capabilities();
169
170 // Create demo snippets with examples of use.
171 if ( ! get_option( 'wbcr_inp_demo_snippets_created' ) ) {
172 WINP_Helper::create_demo_snippets();
173 }
174
175 WINP_Helper::flush_page_cache();
176 }
177
178 /**
179 * Plugin deactivation hook.
180 * Removes custom capabilities.
181 *
182 * @return void
183 */
184 public function deactivation_hook() {
185 // Remove custom capabilities from administrator role.
186 $this->snippets_type->remove_capabilities();
187 }
188
189 /**
190 * Register custom post types and taxonomies.
191 *
192 * @throws \Exception Exception.
193 * @since 2.2.0
194 */
195 private function register_types() {
196 require_once WINP_PLUGIN_DIR . '/admin/types/snippets-post-types.php';
197 $this->snippets_type = new WINP_SnippetsType();
198
199 require_once WINP_PLUGIN_DIR . '/admin/types/snippets-taxonomy.php';
200 new WINP_SnippetsTaxonomy();
201 }
202
203 /**
204 * Register shortcodes.
205 *
206 * @since 2.2.0
207 */
208 private function register_shortcodes() {
209 $action = WINP_HTTP::get( 'action', '' );
210 if ( ! ( 'edit' == $action && is_admin() ) ) {
211 require_once WINP_PLUGIN_DIR . '/includes/shortcodes/shortcodes.php';
212 require_once WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-php.php';
213 require_once WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-text.php';
214 require_once WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-universal.php';
215 require_once WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-css.php';
216 require_once WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-js.php';
217 require_once WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-html.php';
218 require_once WINP_PLUGIN_DIR . '/includes/shortcodes/shortcode-ad.php';
219
220 WINP_Helper::register_shortcode( 'WINP_SnippetShortcodePhp', $this );
221 WINP_Helper::register_shortcode( 'WINP_SnippetShortcodeText', $this );
222 WINP_Helper::register_shortcode( 'WINP_SnippetShortcodeUniversal', $this );
223 WINP_Helper::register_shortcode( 'WINP_SnippetShortcodeCss', $this );
224 WINP_Helper::register_shortcode( 'WINP_SnippetShortcodeJs', $this );
225 WINP_Helper::register_shortcode( 'WINP_SnippetShortcodeHtml', $this );
226 WINP_Helper::register_shortcode( 'WINP_SnippetShortcodeAdvert', $this );
227 }
228 }
229
230 /**
231 * Initialization and require files for backend and frontend.
232 *
233 * @since 2.2.0
234 */
235 private function load_global() {
236 require_once WINP_PLUGIN_DIR . '/admin/includes/class.gutenberg.snippet.php';
237 require_once WINP_PLUGIN_DIR . '/includes/class.admin-bar.php';
238
239 new WINP_Gutenberg_Snippet();
240 WINP_Admin_Bar::instance();
241
242 $this->get_execute_object()->register_hooks();
243 $this->register_shortcodes();
244 }
245
246 /**
247 * Initialization and require files for backend.
248 *
249 * @throws \Exception
250 * @since 2.2.0
251 */
252 private function load_backend() {
253 require_once WINP_PLUGIN_DIR . '/admin/includes/class.snippets.viewtable.php';
254 require_once WINP_PLUGIN_DIR . '/admin/includes/class.filter.snippet.php';
255 require_once WINP_PLUGIN_DIR . '/admin/includes/class.actions.snippet.php';
256 require_once WINP_PLUGIN_DIR . '/admin/includes/class.notices.php';
257 require_once WINP_PLUGIN_DIR . '/admin/includes/class.admin.notices.php';
258 require_once WINP_PLUGIN_DIR . '/admin/includes/class.request.php';
259 require_once WINP_PLUGIN_DIR . '/admin/boot.php';
260
261 $this->get_common_object()->register_hooks();
262 $this->register_types();
263
264 new WINP_Filter_List();
265 new WINP_Actions_Snippet();
266 WINP_Notices::instance();
267 new WINP_Admin_Notices();
268
269 if ( ! defined( 'E2E_TESTING' ) ) {
270 add_filter(
271 'themeisle-sdk/survey/' . WINP_PLUGIN_SLUG,
272 function ( $data, $page_slug ) {
273 if ( empty( $page_slug ) ) {
274 return $data;
275 }
276
277 return $this->get_survey_data();
278 },
279 10,
280 2
281 );
282 }
283 }
284
285 /**
286 * Метод проверяет активацию премиум плагина и наличие действующего лицензионного ключа
287 *
288 * @return bool
289 */
290 public function is_premium() {
291 return $this->premium->is_active();
292 }
293
294 /**
295 * Logger data.
296 *
297 * @return array<string, mixed>
298 */
299 public function get_logger_data() {
300 $settings = WINP_Settings::get_instance()->get_settings();
301
302 // Each settings has a lot of keys, we only want name and value items. So map them.
303 $settings = array_map(
304 function ( $setting ) {
305 return [
306 'name' => isset( $setting['name'] ) ? $setting['name'] : '',
307 'value' => isset( $setting['value'] ) ? $setting['value'] : '',
308 ];
309 },
310 $settings
311 );
312
313 $total_snippets = wp_count_posts( WINP_SNIPPETS_POST_TYPE );
314 $total_snippets = isset( $total_snippets->publish ) ? $total_snippets->publish : 0;
315
316 // Count snippets by type.
317 $snippet_types = [ 'php', 'css', 'js', 'text', 'html', 'advert', 'universal' ];
318 $types_count = [];
319
320 foreach ( $snippet_types as $type ) {
321 $count = get_posts(
322 [
323 'post_type' => WINP_SNIPPETS_POST_TYPE,
324 'post_status' => 'publish',
325 'meta_key' => 'wbcr_inp_snippet_type',
326 'meta_value' => $type,
327 'posts_per_page' => -1,
328 'fields' => 'ids',
329 ]
330 );
331
332 if ( ! empty( $count ) ) {
333 $types_count[ $type ] = count( $count );
334 }
335 }
336
337 return [
338 'settings' => $settings,
339 'stats' => [
340 'total_snippets' => $total_snippets,
341 'types' => $types_count,
342 ],
343 ];
344 }
345
346 /**
347 * Set the black friday data.
348 *
349 * @param array<string, mixed> $configs The configuration array for the loaded products.
350 *
351 * @return array<string, mixed> The configurations.
352 */
353 public function add_black_friday_data( $configs ) {
354 $config = $configs['default'];
355
356 $message = __( 'Conditional logic, revision history, import/export. Manage your custom code properly. Exclusively for existing Woody users.', 'insert-php' );
357 $cta_label = __( 'Get Woody Pro', 'insert-php' );
358
359 $plan = apply_filters( 'product_woody_license_plan', 0 );
360 $status = apply_filters( 'product_woody_license_status', 'invalid' );
361 $license = apply_filters( 'product_woody_license_key', false );
362 $pro_product_slug = defined( 'WASP_PLUGIN_FILE' ) ? basename( dirname( WASP_PLUGIN_FILE ) ) : '';
363
364 $is_pro = 'valid' === $status;
365 $is_expired = 'expired' === $status || 'active-expired' === $status;
366
367 if ( $is_pro ) {
368 // translators: %s is the discount percentage.
369 $config['plugin_meta_message'] = sprintf( __( 'Black Friday Sale - up to %s off', 'insert-php' ), '30%' );
370 // translators: %1$s - discount, %2$s - discount.
371 $message = sprintf( __( 'Upgrade your Woody Pro plan: %1$s off this week. Already on the plan you need? Renew early and save up to %2$s.', 'insert-php' ), '30%', '20%' );
372 $cta_label = __( 'See your options', 'insert-php' );
373 } elseif ( $is_expired ) {
374 // translators: %s is the discount percentage.
375 $config['plugin_meta_message'] = sprintf( __( 'Black Friday Sale - %s off', 'insert-php' ), '50%' );
376 $message = __( 'Your Woody Pro features are still here, just locked. Renew at a reduced rate this week.', 'insert-php' );
377 $cta_label = __( 'Reactivate now', 'insert-php' );
378 } else {
379 // translators: %s - discount.
380 $config['title'] = sprintf( __( 'Woody Pro: %s off this week', 'insert-php' ), '60%' );
381 // translators: %s is the discount percentage.
382 $config['plugin_meta_message'] = sprintf( __( 'Black Friday Sale - %s off', 'insert-php' ), '60%' );
383 }
384
385 $url_params = [
386 'utm_term' => $is_pro ? 'plan-' . $plan : 'free',
387 'lkey' => ! empty( $license ) ? $license : false,
388 'expired' => $is_expired ? '1' : false,
389 ];
390
391 if ( ( $is_pro || $is_expired ) && ! empty( $pro_product_slug ) ) {
392 $config['plugin_meta_targets'] = [ $pro_product_slug ];
393 }
394
395 $config['cta_label'] = $cta_label;
396 $config['message'] = $message;
397
398 $config['sale_url'] = add_query_arg(
399 $url_params,
400 tsdk_translate_link( tsdk_utmify( 'https://themeisle.link/woody-bf', 'bfcm', 'woody' ) )
401 );
402
403 $configs[ WINP_PLUGIN_SLUG ] = $config;
404
405 return $configs;
406 }
407 }
408 }
409