PluginProbe
VK Blocks / 1.110.0.1
VK Blocks v1.110.0.1
1.126.4 1.126.3 1.126.1 1.126.2 1.126.0 1.125.0 1.124.0 1.123.0 1.122.0 1.121.0 1.120.0 1.119.2 1.119.1 1.119.0 1.118.7 1.82.0.0 1.82.0.1 1.83.0.0 1.83.0.1 1.84.0.0 1.84.0.1 1.85.0.2 1.85.0.3 1.85.1.0 1.85.1.1 All 287 releases
vk-blocks / vk-blocks.php

vk-blocks.php in VK Blocks 1.110.0.1, at vk-blocks.php

419 lines 14.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Plugin Name: VK Blocks
4 * Plugin URI: https://github.com/vektor-inc/vk-blocks
5 * Description: This is a plugin that extends Block Editor.
6 * Version: 1.110.0.1
7 * Requires at least: 6.5
8 * Author: Vektor,Inc.
9 * Author URI: https://vektor-inc.co.jp
10 * Text Domain: vk-blocks
11 *
12 * @package vk-blocks
13 */
14
15 // Do not load directly.
16 if ( ! defined( 'ABSPATH' ) ) {
17 exit;
18 }
19
20
21 /*
22 無料版の VK Blocks の無効化が正常に動作しなかった場合に無料版の関数が�
23 �に定義され
24 重複 -> Fatal error になるため function_exists は フォールバックとして付与している
25 */
26 if ( ! function_exists( 'vk_blocks_get_version' ) ) {
27 /**
28 * Get Plugin Version
29 *
30 * @return string
31 */
32 function vk_blocks_get_version() {
33 $data = get_file_data( __FILE__, array( 'version' => 'Version' ) );
34 return $data['version'];
35 }
36 }
37
38 /**
39 * Deactivate VK Blocks ( Free )
40 *
41 * 読み込んでだ時に無料版が有効化されていたら、誤動作しないようになるべく早く無効化するためそのまま実行させている
42 * VK Blocks 無料版の 1.36.0 で vk_blocks_is_pro を function_exists を経由せずに定義してしまっているため、
43 * 無料版 1.36.0 を停止する前に vk_blocks_is_pro を定義するとエラーになるため、
44 * vk_blocks_is_pro の定義前に無料版の無効化処理を行っている
45 * 1.36.0無料版有効化時にPRo版を有効化時に一瞬エラーが表示されるが、再読み込みで復帰する
46 * 1.36.0無料版をアップデートしてもらわないとこれは避けられないので、当面はこのまま運用する
47 *
48 * プロ版での読み込みかどうかの判定は strpos を使っているが、
49 * strpos は"合致している"にも関わらず返り値は"0"を返してしまうため !== false で処理している.
50 */
51 require_once ABSPATH . 'wp-admin/includes/plugin.php';
52
53 if ( strpos( plugin_dir_path( __FILE__ ), 'vk-blocks-pro' ) !== false ) {
54 if ( is_plugin_active( 'vk-blocks/vk-blocks.php' ) ) {
55 deactivate_plugins( 'vk-blocks/vk-blocks.php' );
56
57 // Deactivate ExUnit included VK Blocks.
58 $vk_blocks_exunit_common_options = get_option( 'vkExUnit_common_options' );
59 if ( ! empty( $vk_blocks_exunit_common_options['active_vk-blocks'] ) ) {
60 $vk_blocks_exunit_common_options['active_vk-blocks'] = false;
61 update_option( 'vkExUnit_common_options', $vk_blocks_exunit_common_options );
62 }
63 return;
64 }
65 if ( is_plugin_active( 'vk-gridcolcard/vk-gridcolcard.php' ) ) {
66 deactivate_plugins( 'vk-gridcolcard/vk-gridcolcard.php' );
67 require_once ABSPATH . 'wp-admin/includes/plugin.php';
68 // Deactivate ExUnit included VK Blocks.
69 $vk_blocks_exunit_common_options = get_option( 'vkExUnit_common_options' );
70 if ( ! empty( $vk_blocks_exunit_common_options['active_vk-blocks'] ) ) {
71 $vk_blocks_exunit_common_options['active_vk-blocks'] = false;
72 update_option( 'vkExUnit_common_options', $vk_blocks_exunit_common_options );
73 }
74 return;
75 }
76 } elseif ( strpos( plugin_dir_path( __FILE__ ), 'vk-blocks' ) !== false ) {
77 if ( is_plugin_active( 'vk-blocks-pro/vk-blocks.php' ) ) {
78 require_once ABSPATH . 'wp-admin/includes/plugin.php';
79 // Deactivate ExUnit included VK Blocks.
80 $vk_blocks_exunit_common_options = get_option( 'vkExUnit_common_options' );
81 if ( ! empty( $vk_blocks_exunit_common_options['active_vk-blocks'] ) ) {
82 $vk_blocks_exunit_common_options['active_vk-blocks'] = false;
83 update_option( 'vkExUnit_common_options', $vk_blocks_exunit_common_options );
84 }
85 return;
86 }
87 }
88
89 if ( is_admin() && ! is_network_admin() ) {
90 $vk_blocks_options = get_option( 'vkExUnit_common_options' );
91 if ( ! empty( $vk_blocks_options['active_vk-blocks'] ) ) {
92 $vk_blocks_options['active_vk-blocks'] = false;
93 update_option( 'vkExUnit_common_options', $vk_blocks_options );
94
95 add_action(
96 'admin_notices',
97 function () {
98 echo '<div class="updated notice"><p>';
99 echo esc_html( __( 'Disabled Blocks module on VK All in One Expansion Unit. Because VK-Blocks Plugin running.', 'vk-blocks' ) );
100 echo '</p></div>';
101 }
102 );
103 }
104 }
105
106 /*
107 無料版の VK Blocks の無効化が正常に動作しなかった場合に無料版の関数が�
108 �に定義され
109 重複 -> Fatal error になるため function_exists は フォールバックとして付与している
110 */
111 if ( ! function_exists( 'vk_blocks_is_pro' ) ) {
112 /**
113 * Check Free or Pro
114 *
115 * @return bool
116 */
117 function vk_blocks_is_pro() {
118 $return = false;
119 // 注意 : strpos() は合致した開始位置を返すので、最初に合致すると、
120 // "合致している"にも関わらず返り値は"0"を返してしまうため !== false で処理している.
121 if ( strpos( plugin_dir_path( __FILE__ ), 'vk-blocks-pro' ) !== false ) {
122 $return = true;
123 }
124 return $return;
125 }
126 }
127
128 /****************************************************************************************
129 * Start VK Blocks
130 * 無料版を無効化した後に書かないと関数の二重宣言などになるので注意
131 */
132 if ( ! function_exists( 'vk_blocks_loaded' ) ) {
133 /**
134 * Load VK Blocks
135 *
136 * @return void
137 */
138 function vk_blocks_loaded() {
139 // Composer のファイルを読み込み ( composer install --no-dev ).
140 require_once plugin_dir_path( __FILE__ ) . 'vendor/autoload.php';
141 // Set plugin dir path.
142 if ( ! defined( 'VK_BLOCKS_DIR_PATH' ) ) {
143 define( 'VK_BLOCKS_DIR_PATH', plugin_dir_path( __FILE__ ) );
144 }
145 // Set Plugin Dir URL.
146 if ( ! defined( 'VK_BLOCKS_DIR_URL' ) ) {
147 define( 'VK_BLOCKS_DIR_URL', plugin_dir_url( __FILE__ ) );
148 }
149 // Load VK Blocks
150 require_once plugin_dir_path( __FILE__ ) . 'inc/vk-blocks-config.php';
151 }
152 add_action( 'plugins_loaded', 'vk_blocks_loaded' );
153 }
154
155
156 /****************************************************************************************
157 * Load updater ( Pro version only )
158 */
159
160 if ( function_exists( 'vk_blocks_is_pro' ) && vk_blocks_is_pro() ) {
161
162 // 翻訳を実行
163 add_action(
164 'plugins_loaded',
165 function () {
166 // サイトのロケールを取得
167 $locale = determine_locale();
168 // 翻訳ファイルのパスを指定
169 $path = plugin_dir_path( __FILE__ ) . 'languages';
170
171 // 日本語の設定のみ翻訳ファイルを読み込み
172 if ( strpos( $locale, 'ja' ) === 0 ) {
173 // PHPファイルの翻訳読み込み
174 load_textdomain( 'vk-blocks-pro', $path . '/vk-blocks-pro-ja.mo' );
175
176 // JavaScriptファイルの翻訳設定
177 add_action(
178 'wp_enqueue_scripts',
179 function () use ( $path ) {
180 // スクリプト登録後に翻訳設定
181 wp_set_script_translations( 'vk-blocks-build-js', 'vk-blocks-pro', $path );
182 wp_set_script_translations( 'vk-blocks-admin-js', 'vk-blocks-pro', $path );
183 }
184 );
185 }
186 }
187 );
188
189 // 本来 Pro 版でしか読み込まないが、1.36.0.0 は間違って読み込んでしまっており
190 // 無料版 1.36.0 を有効化していると previously declared になるため ! function_exists() を通した上で宣言している.
191 if ( ! function_exists( 'vk_blocks_update_checker' ) ) {
192 /**
193 * Perform update checks on VK Blocks.
194 *
195 * @return void
196 */
197 function vk_blocks_update_checker() {
198
199 // Cope with : WP HTTP Error: cURL error 60: SSL certificate problem: certificate has expired.
200 add_filter( 'https_ssl_verify', '__return_false' );
201
202 global $vk_blocks_update_checker;
203
204 $vk_blocks_update_checker = YahnisElsts\PluginUpdateChecker\v5\PucFactory::buildUpdateChecker(
205 'https://license.vektor-inc.co.jp/check/?action=get_metadata&slug=vk-blocks-pro',
206 __FILE__, // この処理を他の場所に移動するとここを変更しないといけなくなるので注意.
207 'vk-blocks-pro'
208 );
209
210 $vk_blocks_update_checker->addQueryArgFilter( 'vk_blocks_get_license_check_query_arg' );
211
212 // 管理画面 かつ テーマオプションの編集権限がある場合.
213 if ( is_admin() && current_user_can( 'edit_theme_options' ) ) {
214 $network_runnning_pro = false;
215
216 // マルチサイトでOriginal Brand Unitが動いていたら.
217 if ( is_multisite() ) {
218 $network_options = get_site_option( 'active_sitewide_plugins', array() );
219 if ( isset( $network_options['lightning-original-brand-unit/lightning-original-brand-unit.php'] ) ) {
220 $network_runnning_pro = true;
221 }
222 }
223
224 // マルチサイトでOriginal Brand Unitが動いていない && Original Brand Unitが有効になっていない.
225 $active_plugins = get_option( 'active_plugins', array() );
226 if ( ! $network_runnning_pro && ! in_array( 'lightning-original-brand-unit/lightning-original-brand-unit.php', $active_plugins, true ) ) {
227 add_action(
228 'admin_notices',
229 function () {
230 vk_blocks_the_update_messsage();
231 }
232 );
233 }
234 }
235 }
236 }
237
238 add_action( 'after_setup_theme', 'vk_blocks_update_checker' );
239
240 if ( ! function_exists( 'vk_blocks_license_check' ) ) {
241 /**
242 * Licence Checker
243 *
244 * @param array $test_data テストデータ.
245 * @return string $check_result ライセンス認証の結果.
246 */
247 function vk_blocks_license_check( $test_data = array() ) {
248
249 // アップデート周りの変数を取得.
250 global $vk_blocks_update_checker;
251
252 // オプション値を取得.
253 $options = get_option( 'vk_blocks_options' );
254
255 // 返す値
256 $check_result = null;
257
258 // テストデータがある場合はそれを処理し、ない場合はそれぞれ取得
259 if ( ! empty( $test_data ) ) {
260
261 // 現在のテーマ
262 $template = $test_data['template'];
263
264 // Pro 版か否か
265 $is_pro = $test_data['is_pro'];
266
267 // ライセンスキー
268 $license_key = ! empty( $test_data['license_key'] ) ? $test_data['license_key'] : '';
269
270 // アップデート API
271 $update = ! empty( $test_data['update'] ) ? $test_data['update'] : array();
272 } else {
273
274 // 現在のテーマ
275 $template = wp_get_theme()->Template;
276
277 // Pro 版か否か
278 $is_pro = vk_blocks_is_pro();
279
280 // ライセンスキー
281 $license_key = ! empty( $options['vk_blocks_pro_license_key'] ) ? $options['vk_blocks_pro_license_key'] : '';
282
283 // アップデート API の�
284 報(オブジェクトは扱いにくいので�
285 �列化)
286 $update = (array) $vk_blocks_update_checker->getUpdateState()->getUpdate();
287 }
288
289 // 条件に応じて認証結果を返す.
290 if ( 'katawara' === $template || false === $is_pro ) {
291
292 // Katawara と無料版はライセンス認証�
293 �除対象なので 'exemption' を返す
294 $check_result = 'exemption';
295 } elseif ( empty( $license_key ) ) {
296
297 // それ以外でライセンスキーが空の場合は 'empty' を返す
298 $check_result = 'empty';
299 } elseif ( ! empty( $update ) && empty( $update['download_url'] ) ) {
300
301 // それ以外でライセンスキーが違う場合は 'invalid' を返す
302 $check_result = 'invalid';
303 } else {
304
305 // それ以外の場合はライセンスキーが正しいと言えるので 'valid' を返す
306 $check_result = 'valid';
307 }
308
309 // 実際の API がどう動いているかのチェック用
310 // var_dump( $check_result );
311
312 return $check_result;
313 }
314 }
315
316 if ( ! function_exists( 'vk_blocks_the_update_messsage' ) ) {
317 /**
318 * Update alert message
319 *
320 * @return void
321 */
322 function vk_blocks_the_update_messsage() {
323 global $vk_blocks_update_checker;
324 $license_check = vk_blocks_license_check();
325 $notice_title = '';
326
327 // ライセンスキーが未�
328 �力の場合.
329 if ( 'empty' === $license_check ) {
330 $notice_title = __( 'License Key has no registered.', 'vk-blocks' );
331 } elseif ( 'invalid' === $license_check ) {
332
333 // ライセンスが切れている あるいは 無効な場合.
334 // アップデートは存在するがURLが帰ってこなかった場合.
335 $notice_title = __( 'The VK Blocks Pro license is invalid.', 'vk-blocks' );
336 }
337
338 if ( empty( $notice_title ) ) {
339 return;
340 }
341
342 $link_url = wp_nonce_url(
343 add_query_arg(
344 array(
345 'puc_check_for_updates' => 1,
346 'puc_slug' => $vk_blocks_update_checker->slug,
347 ),
348 self_admin_url( 'plugins.php' )
349 ),
350 'puc_check_for_updates'
351 );
352
353 $alert_html = '';
354 $alert_html .= '<div class="error">';
355 $alert_html .= '<h4>VK Blocks Pro : ' . $notice_title . '</h4>';
356 $alert_html .= '<p>' . __( 'Please enter a valid license key for any of the following products on the settings screen.', 'vk-blocks' ) . '</p>';
357 $alert_html .= '<ul>';
358 $alert_html .= '<li><a href="https://vws.vektor-inc.co.jp/product/vektor-passport-1y/?rel=vk-blocks-pro-alert" target="_blank">Vektor Passport</a></li>';
359 $alert_html .= '<li><a href="https://vws.vektor-inc.co.jp/product/lightning-g3-pro-pack/?rel=vk-blocks-pro-alert" target="_blank">Lightning G3 Pro Pack</a></li>';
360 $alert_html .= '<li><a href="https://vws.vektor-inc.co.jp/product/lightning-pro-update-license?rel=vk-blocks-pro-alert" target="_blank">Lightning Pro</a></li>';
361 $alert_html .= '</ul>';
362
363 $alert_html .= '<p><a href="' . admin_url( '/options-general.php?page=vk_blocks_options' ) . '" class="button button-primary">' . __( 'Enter the license key', 'vk-blocks' ) . '</a></p>';
364
365 $alert_html .= '<p style="margin-bottom:15px">';
366 $alert_html .= __( 'If this display does not disappear even after entering a valid license key, re-acquire the update.', 'vk-blocks' );
367 $alert_html .= ' <span class="nowrap">[ <a href="' . $link_url . '">' . __( 'Re-acquisition of updates', 'vk-blocks' ) . '</a> ]</span>';
368 $alert_html .= '</p>';
369
370 $alert_html .= '</div>';
371 echo wp_kses_post( $alert_html );
372 }
373 }
374
375 if ( ! function_exists( 'vk_blocks_get_license_check_query_arg' ) ) {
376 /**
377 * Register update license key
378 *
379 * @param array $query_args : updatechacker array.
380 * @return $query_args
381 */
382 function vk_blocks_get_license_check_query_arg( $query_args ) {
383 $options = get_option( 'vk_blocks_options' );
384 $license = '';
385 if ( ! empty( $options['vk_blocks_pro_license_key'] ) ) {
386 $license = esc_html(
387 preg_replace(
388 "/\A[\x20\xE3\x80\x80]++|[\x20\xE3\x80\x80]++\z/u",
389 '',
390 $options['vk_blocks_pro_license_key']
391 )
392 );
393 }
394
395 if ( ! empty( $license ) ) {
396 $query_args['vk-blocks-pro-license-key'] = $license;
397 }
398 $query_args['template'] = wp_get_theme()->Template;
399
400 return $query_args;
401 }
402 }
403 }
404
405 if ( function_exists( 'register_deactivation_hook' ) ) {
406 register_deactivation_hook( __FILE__, 'vk_blocks_deactivate_function' );
407 }
408
409 if ( ! function_exists( 'vk_blocks_deactivate_function' ) ) {
410 /**
411 * Deactivate function
412 *
413 * @return void
414 */
415 function vk_blocks_deactivate_function() {
416 delete_option( 'vk_blocks_checked_flags' );
417 }
418 }
419