PluginProbe
VK Blocks / 1.90.1.1
VK Blocks v1.90.1.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.90.1.1, at vk-blocks.php

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