PluginProbe
VK Blocks / 1.93.1.0
VK Blocks v1.93.1.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.93.1.0, at vk-blocks.php

396 lines 13.9 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.93.1.0
7 * Stable tag: 1.93.0.1
8 * Requires at least: 6.3
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
134 // Composer のファイルを読み込み ( composer install --no-dev ).
135 require_once plugin_dir_path( __FILE__ ) . 'vendor/autoload.php';
136 // Set plugin dir path.
137 if ( ! defined( 'VK_BLOCKS_DIR_PATH' ) ) {
138 define( 'VK_BLOCKS_DIR_PATH', plugin_dir_path( __FILE__ ) );
139 }
140 // Set Plugin Dir URL.
141 if ( ! defined( 'VK_BLOCKS_DIR_URL' ) ) {
142 define( 'VK_BLOCKS_DIR_URL', plugin_dir_url( __FILE__ ) );
143 }
144 // Load VK Blocks
145 require_once plugin_dir_path( __FILE__ ) . 'inc/vk-blocks-config.php';
146
147
148 /****************************************************************************************
149 * Load updater ( Pro version only )
150 */
151
152 if ( function_exists( 'vk_blocks_is_pro' ) && vk_blocks_is_pro() ) {
153
154 // 翻訳を実行
155 add_action(
156 'plugins_loaded',
157 function () {
158 // サイトのロケールを取得
159 $locale = determine_locale();
160 // 翻訳ファイルのパスを指定
161 $path = plugin_dir_path( __FILE__ ) . 'languages';
162
163 // 日本語の設定のみ翻訳ファイルを読み込み
164 if ( strpos( $locale, 'ja' ) === 0 ) {
165 // PHPファイルの翻訳読み込み
166 load_textdomain( 'vk-blocks-pro', $path . '/vk-blocks-pro-ja.mo' );
167
168 // JavaScriptファイルの翻訳設定
169 add_action(
170 'wp_enqueue_scripts',
171 function () use ( $path ) {
172 // スクリプト登録後に翻訳設定
173 wp_set_script_translations( 'vk-blocks-build-js', 'vk-blocks-pro', $path );
174 wp_set_script_translations( 'vk-blocks-admin-js', 'vk-blocks-pro', $path );
175 }
176 );
177 }
178 }
179 );
180
181 // 本来 Pro 版でしか読み込まないが、1.36.0.0 は間違って読み込んでしまっており
182 // 無料版 1.36.0 を有効化していると previously declared になるため ! function_exists() を通した上で宣言している.
183 if ( ! function_exists( 'vk_blocks_update_checker' ) ) {
184 /**
185 * Perform update checks on VK Blocks.
186 *
187 * @return void
188 */
189 function vk_blocks_update_checker() {
190
191 // Cope with : WP HTTP Error: cURL error 60: SSL certificate problem: certificate has expired.
192 add_filter( 'https_ssl_verify', '__return_false' );
193
194 global $vk_blocks_update_checker;
195
196 $vk_blocks_update_checker = YahnisElsts\PluginUpdateChecker\v5\PucFactory::buildUpdateChecker(
197 'https://vws.vektor-inc.co.jp/updates/?action=get_metadata&slug=vk-blocks-pro',
198 __FILE__, // この処理を他の場所に移動するとここを変更しないといけなくなるので注意.
199 'vk-blocks-pro'
200 );
201
202 $vk_blocks_update_checker->addQueryArgFilter( 'vk_blocks_get_license_check_query_arg' );
203
204 // 管理画面 かつ テーマオプションの編集権限がある場合.
205 if ( is_admin() && current_user_can( 'edit_theme_options' ) ) {
206 $network_runnning_pro = false;
207
208 // マルチサイトでOriginal Brand Unitが動いていたら.
209 if ( is_multisite() ) {
210 $network_options = get_site_option( 'active_sitewide_plugins', array() );
211 if ( isset( $network_options['lightning-original-brand-unit/lightning-original-brand-unit.php'] ) ) {
212 $network_runnning_pro = true;
213 }
214 }
215
216 // マルチサイトでOriginal Brand Unitが動いていない && Original Brand Unitが有効になっていない.
217 $active_plugins = get_option( 'active_plugins', array() );
218 if ( ! $network_runnning_pro && ! in_array( 'lightning-original-brand-unit/lightning-original-brand-unit.php', $active_plugins, true ) ) {
219 add_action(
220 'admin_notices',
221 function () {
222 vk_blocks_the_update_messsage();
223 }
224 );
225 }
226 }
227 }
228 }
229
230 add_action( 'after_setup_theme', 'vk_blocks_update_checker' );
231
232 if ( ! function_exists( 'vk_blocks_license_check' ) ) {
233 /**
234 * Lisence Chcker
235 *
236 * @param array $test_data テストデータ.
237 * @return string $check_result ライセンス認証の結果.
238 */
239 function vk_blocks_license_check( $test_data = array() ) {
240
241 // アップデート周りの変数を取得.
242 global $vk_blocks_update_checker;
243
244 // オプション値を取得.
245 $options = get_option( 'vk_blocks_options' );
246
247 // 返す値
248 $check_result = null;
249
250 // テストデータがある場合はそれを処理し、ない場合はそれぞれ取得
251 if ( ! empty( $test_data ) ) {
252
253 // 現在のテーマ
254 $template = $test_data['template'];
255
256 // Pro 版か否か
257 $is_pro = $test_data['is_pro'];
258
259 // ライセンスキー
260 $license_key = ! empty( $test_data['license_key'] ) ? $test_data['license_key'] : '';
261
262 // アップデート API
263 $update = ! empty( $test_data['update'] ) ? $test_data['update'] : array();
264 } else {
265
266 // 現在のテーマ
267 $template = wp_get_theme()->Template;
268
269 // Pro 版か否か
270 $is_pro = vk_blocks_is_pro();
271
272 // ライセンスキー
273 $license_key = ! empty( $options['vk_blocks_pro_license_key'] ) ? $options['vk_blocks_pro_license_key'] : '';
274
275 // アップデート API の�
276 報(オブジェクトは扱いにくいので�
277 �列化)
278 $update = (array) $vk_blocks_update_checker->getUpdateState()->getUpdate();
279 }
280
281 // 条件に応じて認証結果を返す.
282 if ( 'katawara' === $template || false === $is_pro ) {
283
284 // Katawara と無料版はライセンス認証�
285 �除対象なので 'exemption' を返す
286 $check_result = 'exemption';
287 } elseif ( empty( $license_key ) ) {
288
289 // それ以外でライセンスキーが空の場合は 'empty' を返す
290 $check_result = 'empty';
291 } elseif ( ! empty( $update ) && empty( $update['download_url'] ) ) {
292
293 // それ以外でライセンスキーが違う場合は 'invalid' を返す
294 $check_result = 'invalid';
295 } else {
296
297 // それ以外の場合はライセンスキーが正しいと言えるので 'valid' を返す
298 $check_result = 'valid';
299 }
300
301 // 実際の API がどう動いているかのチェック用
302 // var_dump( $check_result );
303
304 return $check_result;
305 }
306 }
307
308 if ( ! function_exists( 'vk_blocks_the_update_messsage' ) ) {
309 /**
310 * Update alert message
311 *
312 * @return void
313 */
314 function vk_blocks_the_update_messsage() {
315 global $vk_blocks_update_checker;
316 $license_check = vk_blocks_license_check();
317 $notice_title = '';
318
319 // ライセンスキーが未�
320 �力の場合.
321 if ( 'empty' === $license_check ) {
322 $notice_title = __( 'License Key has no registered.', 'vk-blocks' );
323 } elseif ( 'invalid' === $license_check ) {
324
325 // ライセンスが切れている あるいは 無効な場合.
326 // アップデートは存在するがURLが帰ってこなかった場合.
327 $notice_title = __( 'The VK Blocks Pro license is invalid.', 'vk-blocks' );
328 }
329
330 if ( empty( $notice_title ) ) {
331 return;
332 }
333
334 $link_url = wp_nonce_url(
335 add_query_arg(
336 array(
337 'puc_check_for_updates' => 1,
338 'puc_slug' => $vk_blocks_update_checker->slug,
339 ),
340 self_admin_url( 'plugins.php' )
341 ),
342 'puc_check_for_updates'
343 );
344
345 $alert_html = '';
346 $alert_html .= '<div class="error">';
347 $alert_html .= '<h4>VK Blocks Pro : ' . $notice_title . '</h4>';
348 $alert_html .= '<p>' . __( 'Please enter a valid license key for any of the following products on the settings screen.', 'vk-blocks' ) . '</p>';
349 $alert_html .= '<ul>';
350 $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>';
351 $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>';
352 $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>';
353 $alert_html .= '</ul>';
354
355 $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>';
356
357 $alert_html .= '<p style="margin-bottom:15px">';
358 $alert_html .= __( 'If this display does not disappear even after entering a valid license key, re-acquire the update.', 'vk-blocks' );
359 $alert_html .= ' <span class="nowrap">[ <a href="' . $link_url . '">' . __( 'Re-acquisition of updates', 'vk-blocks' ) . '</a> ]</span>';
360 $alert_html .= '</p>';
361
362 $alert_html .= '</div>';
363 echo wp_kses_post( $alert_html );
364 }
365 }
366
367 if ( ! function_exists( 'vk_blocks_get_license_check_query_arg' ) ) {
368 /**
369 * Register update license key
370 *
371 * @param array $query_args : updatechacker array.
372 * @return $query_args
373 */
374 function vk_blocks_get_license_check_query_arg( $query_args ) {
375 $options = get_option( 'vk_blocks_options' );
376 $license = '';
377 if ( ! empty( $options['vk_blocks_pro_license_key'] ) ) {
378 $license = esc_html(
379 preg_replace(
380 "/\A[\x20\xE3\x80\x80]++|[\x20\xE3\x80\x80]++\z/u",
381 '',
382 $options['vk_blocks_pro_license_key']
383 )
384 );
385 }
386
387 if ( ! empty( $license ) ) {
388 $query_args['vk-blocks-pro-license-key'] = $license;
389 }
390 $query_args['template'] = wp_get_theme()->Template;
391
392 return $query_args;
393 }
394 }
395 }
396