PluginProbe
VK Blocks / 1.106.0.0
VK Blocks v1.106.0.0
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.106.0.0, at vk-blocks.php

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