PluginProbe
VK Blocks / 1.59.0.1
VK Blocks v1.59.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.59.0.1, at vk-blocks.php

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