PluginProbe
codoc / 0.9.51
codoc v0.9.51
0.9.8.8 0.9.8.9 0.9.9 0.9.9.1 trunk 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.8.1 0.8.2 0.8.3 0.8.4 0.8.6 0.8.7 0.8.8 0.8.9 0.9 0.9.1 0.9.10 0.9.11 All 114 releases
← All changes | class-codoc.php +355 -121 0.9.110.9.51 View file →
@@ -1,9 +1,9 @@
1 1 <?php
2 2 require_once(plugin_dir_path( __FILE__ ) .'class-codoc-util.php');
3 3 final class Codoc {
4 -
5 4 public function __construct() {
5 + add_action('plugins_loaded', [$this,'codoc_load_textdomain']);
6 6 if (is_admin()) {
7 7 // setting
8 8 $this->add_settings();
9 9 }
@@ -14,9 +14,10 @@
14 14 # the_content フィルタを実行しない状態
15 15 $this->do_not_filter_the_content = false;
16 16
17 17 // paywall用の本文非表示化とcodocタグへの属性追加
18 - $priority = 10;
18 + #$priority = 999999999;
19 + $priority = 100000; # フィルターは最後に実施する default 10
19 20 $CODOC_SETTINGS = get_option(CODOC_SETTINGS_OPTION_NAME);
20 21 if (isset($CODOC_SETTINGS["debug_params"])) {
21 22 $params_decoded = json_decode($CODOC_SETTINGS["debug_params"],true);
22 23 if (isset($params_decoded["the_content_filter_priority"])) {
@@ -22,9 +23,15 @@
22 23 if (isset($params_decoded["the_content_filter_priority"])) {
23 24 $priority = $params_decoded["the_content_filter_priority"];
24 25 }
25 26 }
27 + // ショーココードの退避
28 + if (isset($CODOC_SETTINGS['shortcode_evacuation']) and $CODOC_SETTINGS['shortcode_evacuation']) {
29 + add_filter('the_content',[$this,'the_content_shortcode_evacuations'],0);
30 + }
26 31 add_filter('the_content',[$this,'the_content'],$priority);
32 + // 2021-09-24 the_content を利用しない場合は個別に呼び出ししてもらう
33 + add_filter('codoc_the_content',[$this,'the_content'],$priority);
27 34
28 35 // 2020-07-25 excerpt対応
29 36 add_filter('excerpt_allowed_blocks',[$this,'excerpt_allowed_blocks']);
30 37
@@ -36,36 +43,73 @@
36 43 add_action( 'added_post_meta', [$this,'updated_post_meta'], 10, 3 );
37 44 add_action( 'updated_post_meta',[$this,'updated_post_meta'], 10, 3 );
38 45 add_action( 'deleted_post_meta',[$this,'deleted_post_meta'], 10, 4 );
39 46 }
40 - if (is_admin() and $auth_info) { //管理画面
47 + global $pagenow;
48 + //管理画面でcodoc認証があり投稿画面の場合
49 + if (is_admin() and $auth_info and preg_match('/^post/',$pagenow)) {
41 50 // Gutenberg のサポートがない場合は何もしない
42 51 if ( function_exists( 'register_block_type' ) ) {
52 + // WPに登録ブロックとして認識させる(cgbは登録しないっぽい)
53 + \WP_Block_Type_Registry::get_instance()->register('codoc/codoc-block');
43 54 // gutenberg
44 55 require_once 'src/init.php';
45 56 add_action('wp_loaded', function() {
46 - wp_localize_script('wordpress-cgb-block-js', 'OPTIONS', array(
57 + wp_localize_script('codoc-block-js', 'OPTIONS', array(
47 58 'codoc_url' => $this->get_codoc_url(),
48 59 'codoc_usercode' => get_option(CODOC_USERCODE_OPTION_NAME),
49 60 'codoc_plugin_version' => CODOC_PLUGIN_VERSION,
50 61 'codoc_sdk_path' => CODOC_SDK_PATH,
51 62 ));
63 + wp_set_script_translations('codoc-block-js', 'codoc',plugin_dir_path( __FILE__ ) . 'languages');
52 64 });
53 65 }
54 66 // tinymce
55 67 $this->add_mce();
56 - } else { // ブログ画面
68 + } elseif(is_admin() and $auth_info and preg_match('/^edit/',$pagenow)) {
69 + // 記事編集ページ
70 + } elseif(!is_admin()) { // ブログ画面
57 71 // codocのJS登録
58 72 add_action( 'wp_enqueue_scripts', function() {
59 - wp_enqueue_script( 'codoc-injector-js', $this->get_codoc_url() . '/js/cms.js' );
73 + $CODOC_SETTINGS = get_option(CODOC_SETTINGS_OPTION_NAME);
74 + $load_script_condition = '';
75 + if (isset($CODOC_SETTINGS["debug_params"]) and
76 + $params_decoded = json_decode($CODOC_SETTINGS["debug_params"],true) and
77 + isset($params_decoded["load_script_condition"])
78 + ) {
79 + $load_script_condition = $params_decoded["load_script_condition"];
80 + }
81 + if ($load_script_condition == 'not_list_page') {
82 + // not_list_pageの場合はトップページ等でスクリプトをロードしない
83 + if (!(is_archive() or is_category() or is_home() or is_front_page())) {
84 + wp_enqueue_script( 'codoc-injector-js', $this->get_codoc_url() . '/js/cms.js' );
85 + }
86 + } else {
87 + wp_enqueue_script( 'codoc-injector-js', $this->get_codoc_url() . '/js/cms.js' );
88 + }
60 89 });
61 - // 登録したscriptタグに属性をつける
90 + //登録したscriptタグに属性をつける
62 91 add_filter('script_loader_tag', [$this,'modifier_script_tag'],10,2);
63 92 // tinymce用のショートコード
64 93 add_shortcode('codoc', [$this, 'injector_shortcode']);
94 + // テーマをbodyにも反映
95 + add_filter('body_class', function($classes) {
96 + $CODOC_SETTINGS = get_option(CODOC_SETTINGS_OPTION_NAME);
97 + // デフォルトを変更
98 + $css_path = 'rainbow-square';
99 + if (isset($CODOC_SETTINGS["css_path"]) and $CODOC_SETTINGS["css_path"]) {
100 + $css_path = $CODOC_SETTINGS["css_path"];
101 + }
102 + array_push($classes,sprintf( "codoc-theme-%s",$css_path));
103 + return $classes;
104 + });
105 +
65 106 }
66 107 return $this;
67 108 }
109 + function codoc_load_textdomain() {
110 + load_plugin_textdomain('codoc', false, dirname(plugin_basename( __FILE__ )) . '/languages/');
111 + }
68 112 public function get_codoc_url() {
69 113 $CODOC_SETTINGS = get_option(CODOC_SETTINGS_OPTION_NAME);
70 114 if (isset($CODOC_SETTINGS["debug_params"])) {
71 115 $params_decoded = json_decode($CODOC_SETTINGS["debug_params"],true);
@@ -90,17 +134,25 @@
90 134 $connect_code = $CODOC_SETTINGS["codoc_connect_code"];
91 135 $connect_attributes = sprintf(' data-connect-code="%s"',$connect_code);
92 136 $tag = preg_replace('/cms\.js/','cms-connect.js',$tag);
93 137 }
94 - if (isset($CODOC_SETTINGS["debug_params"])) {
95 - $params_decoded = json_decode($CODOC_SETTINGS["debug_params"],true);
96 - if (isset($params_decoded["connect_registration_mode"])) {
97 - $connect_attributes = $connect_attributes . sprintf(' data-connect-registration-mode="%s"',$params_decoded["connect_registration_mode"]);
98 - }
138 + if (isset($CODOC_SETTINGS["codoc_connect_registration_mode"]) and $CODOC_SETTINGS["codoc_connect_registration_mode"]) {
139 + $connect_attributes = $connect_attributes .
140 + sprintf(' data-connect-registration-mode="%s"',$CODOC_SETTINGS["codoc_connect_registration_mode"]);
99 141 }
100 -
142 +
143 + $usercode_attributes = '';
144 + $user_code = get_option(CODOC_USERCODE_OPTION_NAME);
145 + if ($user_code) {
146 + $usercode_attributes = sprintf(' data-usercode="%s"',$user_code);
147 + }
148 +
149 + $setting_attributes = '';
150 + if (isset($CODOC_SETTINGS['codoc_script_tag_attributes']) and $CODOC_SETTINGS['codoc_script_tag_attributes']) {
151 + $setting_attributes = $CODOC_SETTINGS['codoc_script_tag_attributes'];
152 + }
101 153 //return str_replace(' src=', $data_css . ' defer src=', $tag);
102 - return preg_replace('/(src=[^>]+)/',' ${1} ' . $data_css . $connect_attributes . ' defer',$tag);
154 + return preg_replace('/(src=[^>]+)/',' ${1} ' . $data_css . $connect_attributes . $usercode_attributes . $setting_attributes . ' defer',$tag);
103 155 }
104 156 public function injector_shortcode($atts) {
105 157 global $post;
106 158 ob_start();
@@ -130,10 +182,13 @@
130 182 add_action('admin_print_styles', 'codoc_admin_styles');
131 183 function codoc_admin_styles($hook) {
132 184 wp_enqueue_style('codoc-options-style', plugins_url( 'codoc/css/codoc-options.css', __DIR__ ));
133 185 }
134 -
135 186 add_action( "admin_init", function() {
187 + global $CODOC_USERCODE;
188 + global $CODOC_SETTINGS;
189 + global $CODOC_TOKEN;
190 + global $CODOC_AUTHINFO;
136 191 // codocからの認証データ処理
137 192 if (isset($_GET['page']) and $_GET['page'] == 'codoc' and isset($_GET['fetch_token_key'])) {
138 193 $key = sanitize_text_field($_GET['fetch_token_key']);
139 194 $usercode = sanitize_text_field($_GET['usercode']);
@@ -144,12 +199,9 @@
144 199 update_option(CODOC_TOKEN_OPTION_NAME,$token);
145 200 //$data = $this->callAPI('GET','');
146 201 $data = $this->util->get_user_info([],["usercode" => $usercode, "token" => $token]);
147 202 if ($data->status and $user = $data->user) {
148 - update_option(CODOC_AUTHINFO_OPTION_NAME,[
149 - 'email' => $user->email,
150 - 'name' => $user->name,
151 - ]);
203 + $this->update_codoc_authinfo($user);
152 204 }
153 205 #$current_url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
154 206 #$current_url = preg_replace('/(.*)fetch_token_key.*/','${1}&codoc_auth_finished=1',$current_url);
155 207 //add_settings_error( 'general', 'settings_updated', __( 'OK' ), 'success' );
@@ -158,12 +210,8 @@
158 210 wp_redirect( $current_url);
159 211 exit;
160 212 }
161 213 }
162 - global $CODOC_USERCODE;
163 - global $CODOC_SETTINGS;
164 - global $CODOC_TOKEN;
165 - global $CODOC_AUTHINFO;
166 214 $CODOC_USERCODE = get_option(CODOC_USERCODE_OPTION_NAME);
167 215 $CODOC_SETTINGS = get_option(CODOC_SETTINGS_OPTION_NAME);
168 216 $CODOC_TOKEN = get_option(CODOC_TOKEN_OPTION_NAME);
169 217 $CODOC_AUTHINFO = get_option(CODOC_AUTHINFO_OPTION_NAME);
@@ -201,8 +249,11 @@
201 249 }
202 250 if (!isset($CODOC_SETTINGS['do_not_filter_the_content'])) {
203 251 $CODOC_SETTINGS['do_not_filter_the_content'] = '0';
204 252 }
253 + if (!isset($CODOC_SETTINGS['shortcode_evacuation'])) {
254 + $CODOC_SETTINGS['shortcode_evacuation'] = '0';
255 + }
205 256
206 257 if (!isset($CODOC_SETTINGS['entry_button_text'])) {
207 258 $CODOC_SETTINGS['entry_button_text'] = '';
208 259 }
@@ -226,27 +277,50 @@
226 277 }
227 278 if (!isset($CODOC_SETTINGS['show_powered_by'])) {
228 279 $CODOC_SETTINGS['show_powered_by'] = '1';
229 280 }
230 -
281 + if (!isset($CODOC_SETTINGS['show_created_by'])) {
282 + $CODOC_SETTINGS['show_created_by'] = '1';
283 + }
284 + if (!isset($CODOC_SETTINGS['show_copyright'])) {
285 + $CODOC_SETTINGS['show_copyright'] = '1';
286 + }
231 287 if (!isset($CODOC_SETTINGS['codoc_tag_attributes'])) {
232 288 $CODOC_SETTINGS['codoc_tag_attributes'] = '';
233 289 }
290 + if (!isset($CODOC_SETTINGS['codoc_script_tag_attributes'])) {
291 + $CODOC_SETTINGS['codoc_script_tag_attributes'] = '';
292 + }
234 293 if (!isset($CODOC_SETTINGS['codoc_connect_code'])) {
235 294 $CODOC_SETTINGS['codoc_connect_code'] = '';
236 295 }
296 + if (!isset($CODOC_SETTINGS['codoc_connect_registration_mode'])) {
297 + $CODOC_SETTINGS['codoc_connect_registration_mode'] = '';
298 + }
237 299 if (!isset($CODOC_SETTINGS['debug_params'])) {
238 300 $CODOC_SETTINGS['debug_params'] = '';
239 301 }
240 -
241 302 add_settings_section(
242 303 'setting_section_id', // id
243 - 'codoc 設定ページ', // title
304 + __('codoc Settings','codoc'), // title
244 305 function (){}, // callback
245 306 'codoc' // page
246 307 );
247 308 // 認証がある場合
248 309 if ($CODOC_AUTHINFO) {
310 + // クリエイター情報だけ更新 (POST時に同期をとる)
311 + if (isset($_GET['page']) and $_GET['page'] == 'codoc' and isset($_GET['settings-updated'])) {
312 + $data = $this->util->get_user_info([],[
313 + "usercode" => get_option(CODOC_USERCODE_OPTION_NAME),
314 + "token" => get_option(CODOC_TOKEN_OPTION_NAME),
315 + ]);
316 + if ($data->status and $user = $data->user) {
317 + $this->update_codoc_authinfo($user);
318 + // 一度get_optionしてるのでリロードする
319 + $CODOC_AUTHINFO = get_option(CODOC_AUTHINFO_OPTION_NAME);
320 + }
321 + }
322 +
249 323 register_setting(
250 324 'codoc_option_group', // option group
251 325 CODOC_SETTINGS_OPTION_NAME // option name(DB)
252 326 );
@@ -251,20 +325,22 @@
251 325 CODOC_SETTINGS_OPTION_NAME // option name(DB)
252 326 );
253 327 add_settings_field(
254 328 'css_path', // id
255 - 'テーマ', // title
329 + __('Theme','codoc'), // title
256 330 function() {
257 331 global $CODOC_SETTINGS;
258 - echo '<div class="excerpt">テーマを指定してペイウォールのデザインを変えることができます。<br>パスを指定を選択することでCSSを直接指定するこもと可能です。</div>';
332 + echo '<div class="excerpt">' . __('You can change the design of the paywall by specifying a theme.<br />You can also specify CSS directly by selecting "Path Specification"','codoc') . '</div>';
259 333 echo sprintf('<div class="inputGroup"><input type="text" name="%s[css_path]" value="%s" id="codoc_css_path" readonly>',CODOC_SETTINGS_OPTION_NAME,$CODOC_SETTINGS['css_path']);
260 334 echo '' .
261 335 '<script type="text/javascript"> ' .
262 336 ' function gen_css_path(select) { ' .
263 - ' if (select.value == "dark") { ' .
337 + ' if (select.value == "dark" || select.value == "dark-square") { ' .
264 338 ' document.getElementById("darkmode-caution").style.display="block";' .
265 339 ' } else { ' .
266 - ' document.getElementById("darkmode-caution").style.display="none";' .
340 + ' if (document.getElementById("darkmode-caution")) { ' .
341 + ' document.getElementById("darkmode-caution").style.display="none";' .
342 + ' } ' .
267 343 ' } ' .
268 344 ' if (select.value == "path") { ' .
269 345 ' document.getElementById("codoc_css_path").readOnly=false; ' .
270 346 ' if (!document.getElementById("codoc_css_path").value.match(/\//g)) {' .
@@ -277,44 +353,50 @@
277 353 ' } ' .
278 354 '</script> ' ;
279 355
280 356 echo sprintf('<select name="theme_name" onChange="gen_css_path(this)" id="codoc_theme_select">');
281 - foreach (["blue","red","green","black","dark","blue-square","red-square","green-square","black-square","dark-square"] as $theme) {
357 + foreach (["rainbow","blue","red","green","black","dark","rainbow-square","blue-square","red-square","green-square","black-square","dark-square"] as $theme) {
358 + if ($theme == "rainbow") {
359 + echo sprintf('<option value="%s" %s>%s</option>', $theme, ($CODOC_SETTINGS["css_path"] == "rainbow" ? "selected" : ""),__('Rainbow colors','codoc'));
360 + }
282 361 if ($theme == "blue") {
283 - echo sprintf('<option value="%s" %s>青</option>', $theme, ($CODOC_SETTINGS["css_path"] == "blue" ? "selected" : ""));
362 + echo sprintf('<option value="%s" %s>%s</option>', $theme, ($CODOC_SETTINGS["css_path"] == "blue" ? "selected" : ""),__('Blue','codoc'),);
284 363 }
285 364 if ($theme == "red") {
286 - echo sprintf('<option value="%s" %s>赤</option>', $theme, ($CODOC_SETTINGS["css_path"] == "red" ? "selected" : ""));
365 + echo sprintf('<option value="%s" %s>%s</option>', $theme, ($CODOC_SETTINGS["css_path"] == "red" ? "selected" : ""),__('Red','codoc'));
287 366 }
288 367 if ($theme == "green") {
289 - echo sprintf('<option value="%s" %s>緑</option>', $theme, ($CODOC_SETTINGS["css_path"] == "green" ? "selected" : ""));
368 + echo sprintf('<option value="%s" %s>%s</option>', $theme, ($CODOC_SETTINGS["css_path"] == "green" ? "selected" : ""),__('Green','codoc'));
290 369 }
291 370 if ($theme == "black") {
292 - echo sprintf('<option value="%s" %s>黒</option>', $theme, ($CODOC_SETTINGS["css_path"] == "black" ? "selected" : ""));
371 + echo sprintf('<option value="%s" %s>%s</option>', $theme, ($CODOC_SETTINGS["css_path"] == "black" ? "selected" : ""),__('Black','codoc'));
293 372 }
294 373 if ($theme == "dark") {
295 - echo sprintf('<option value="%s" %s>ダークモード</option>', $theme, ($CODOC_SETTINGS["css_path"] == "dark" ? "selected" : ""));
374 + echo sprintf('<option value="%s" %s>%s</option>', $theme, ($CODOC_SETTINGS["css_path"] == "dark" ? "selected" : ""),__('Dark mode','codoc'));
296 375 }
376 + if ($theme == "rainbow-square") {
377 + echo sprintf('<option value="%s" %s>%s</option>', $theme, ($CODOC_SETTINGS["css_path"] == "rainbow-square" ? "selected" : ""),__("Rainbow Colors / Square design",'codoc'));
378 + }
297 379 if ($theme == "blue-square") {
298 - echo sprintf('<option value="%s" %s>青(四角)</option>', $theme, ($CODOC_SETTINGS["css_path"] == "blue-square" ? "selected" : ""));
380 + echo sprintf('<option value="%s" %s>%s</option>', $theme, ($CODOC_SETTINGS["css_path"] == "blue-square" ? "selected" : ""),__('Blue / Square design','codoc'));
299 381 }
300 382 if ($theme == "red-square") {
301 - echo sprintf('<option value="%s" %s>赤(四角)</option>', $theme, ($CODOC_SETTINGS["css_path"] == "red-square" ? "selected" : ""));
383 + echo sprintf('<option value="%s" %s>%s/option>', $theme, ($CODOC_SETTINGS["css_path"] == "red-square" ? "selected" : ""),__('Red / Square design','codoc'));
302 384 }
303 385 if ($theme == "green-square") {
304 - echo sprintf('<option value="%s" %s>緑(四角)</option>', $theme, ($CODOC_SETTINGS["css_path"] == "green-square" ? "selected" : ""));
386 + echo sprintf('<option value="%s" %s>%s</option>', $theme, ($CODOC_SETTINGS["css_path"] == "green-square" ? "selected" : ""),__('Green / Square design','codoc'));
305 387 }
306 388 if ($theme == "black-square") {
307 - echo sprintf('<option value="%s" %s>黒(四角)</option>', $theme, ($CODOC_SETTINGS["css_path"] == "black-square" ? "selected" : ""));
389 + echo sprintf('<option value="%s" %s>%s</option>', $theme, ($CODOC_SETTINGS["css_path"] == "black-square" ? "selected" : ""),__('Black / Square design','codoc'));
308 390 }
309 391 if ($theme == "dark-square") {
310 - echo sprintf('<option value="%s" %s>ダークモード(四角)</option>', $theme, ($CODOC_SETTINGS["css_path"] == "dark-square" ? "selected" : ""));
392 + echo sprintf('<option value="%s" %s>%s</option>', $theme, ($CODOC_SETTINGS["css_path"] == "dark-square" ? "selected" : ""),__('Dark mode / Square design','codoc'));
311 393 }
312 394 }
313 - echo sprintf('<option value="path" %s>パス指定</option>', (preg_match("/\//",$CODOC_SETTINGS["css_path"]) ? "selected" : ""));
395 + echo sprintf('<option value="path" %s>%s</option>', (preg_match("/\//",$CODOC_SETTINGS["css_path"]) ? "selected" : ""),__('Path Specification','codoc'));
314 396 echo '<script type="text/javascript">gen_css_path(document.getElementById(\'codoc_theme_select\'))</script>';
315 397 echo sprintf('</select></div>');
316 - echo '<p id="darkmode-caution" style="display:none">ダークモード向けテーマは文字色が白となり、背景色によっては文字が見えない状態となるためご注意ください。</p>';
398 + echo '<p id="darkmode-caution" style="display:none">' . __('Please note that the theme for dark mode has white text color, and depending on the background color, the text may not be visible.','codoc'). '</p>';
317 399 },
318 400 'codoc', //page
319 401 'setting_section_id' //Section
320 402 );
@@ -319,45 +401,48 @@
319 401 'setting_section_id' //Section
320 402 );
321 403 add_settings_field(
322 404 'paywall_text', // id
323 - '各種文言', // title
405 + __('Texts in paywall','codoc'), // title
324 406 function() {
325 407 global $CODOC_SETTINGS;
326 - echo '<div class="excerpt">ペイウォール内の一部文言を変更できます。</div>';
408 + global $CODOC_AUTHINFO;
409 + echo '<div class="excerpt">' . __('You can change, show and hide texts in your paywall.','codoc') . '</div>';
327 410 echo '<table class="innerTable"><tbody>';
328 - echo '<tr><th>いいねの表示</th><td>';
329 - echo sprintf('<input type="radio" value="1" name="%s[show_like]" id="show_like_on" %s><label for="show_like_on">する</label> ',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['show_like'] == '1' ? "checked" : ""));
330 - echo sprintf('<input type="radio" value="0" name="%s[show_like]" id="show_like_off" %s><label for="show_like_off">しない</label> <br / >',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['show_like'] == '0' ? "checked" : ""));
411 + echo '<tr><th>' . __('Display of likes','codoc') . '</th><td>';
412 + echo sprintf('<input type="radio" value="1" name="%s[show_like]" id="show_like_on" %s><label for="show_like_on">' . __('Enable','codoc') . '</label> ',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['show_like'] == '1' ? "checked" : ""));
413 + echo sprintf('<input type="radio" value="0" name="%s[show_like]" id="show_like_off" %s><label for="show_like_off">' . __('Disable','codoc') . '</label> <br / >',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['show_like'] == '0' ? "checked" : ""));
331 414 echo '</td></tr>';
332 415
333 - echo '<tr><th>codocについての表示</th><td>';
334 - echo sprintf('<input type="radio" value="1" name="%s[show_about_codoc]" id="show_about_codoc_on" %s><label for="show_about_codoc_on">する</label> ',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['show_about_codoc'] == '1' ? "checked" : ""));
335 - echo sprintf('<input type="radio" value="0" name="%s[show_about_codoc]" id="show_about_codoc_off" %s><label for="show_about_codoc_off">しない</label> <br / >',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['show_about_codoc'] == '0' ? "checked" : ""));
416 + echo '<tr><th>' . __('Display of PoweredBy','codoc') . '</th><td>';
417 + echo sprintf('<input type="hidden" value="1" name="%s[show_about_codoc]">',CODOC_SETTINGS_OPTION_NAME);
418 + echo sprintf('<input type="hidden" value="1" name="%s[show_created_by]">',CODOC_SETTINGS_OPTION_NAME);
419 + echo sprintf('<input type="hidden" value="1" name="%s[show_powered_by]">',CODOC_SETTINGS_OPTION_NAME);
420 + if (isset($CODOC_AUTHINFO['account_is_pro']) and $CODOC_AUTHINFO['account_is_pro']) {
421 + echo sprintf('<input type="radio" value="1" name="%s[show_copyright]" id="show_copyright_on" %s><label for="show_copyright_on">' . __('Enable','codoc') . '</label> ',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['show_copyright'] == '1' ? "checked" : ""));
422 + echo sprintf('<input type="radio" value="0" name="%s[show_copyright]" id="show_copyright_off" %s><label for="show_copyright_off">' . __('Disable','codoc') . '</label> <br / >',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['show_copyright'] == '0' ? "checked" : ""));
423 + } else {
424 + echo __('Only PRO accounts can be disabled.','codoc');
425 + }
336 426 echo '</td></tr>';
337 427
338 - echo '<tr><th>PoweredByの表示</th><td>';
339 - echo sprintf('<input type="radio" value="1" name="%s[show_powered_by]" id="show_powered_by_on" %s><label for="show_powered_by_on">する</label> ',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['show_powered_by'] == '1' ? "checked" : ""));
340 - echo sprintf('<input type="radio" value="0" name="%s[show_powered_by]" id="show_powered_by_off" %s><label for="show_powered_by_off">しない</label> <br / >',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['show_powered_by'] == '0' ? "checked" : ""));
341 - echo '</td></tr>';
342 -
343 - echo '<tr><th>記事購入ボタンのテキスト</th><td>';
428 + echo '<tr><th>' . __('"Purchase Article" button text','codoc') . '</th><td>';
344 429 echo sprintf('<input type="text" name="%s[entry_button_text]" value="%s">',CODOC_SETTINGS_OPTION_NAME,esc_html($CODOC_SETTINGS['entry_button_text']));
345 430 echo '</td></tr>';
346 431
347 - echo '<tr><th>サブスクリプション購入ボタンのテキスト</th><td>';
432 + echo '<tr><th>' . __('"Purchase Subscription" button text.','codoc') . '</th><td>';
348 433 echo sprintf('<input type="text" name="%s[subscription_button_text]" value="%s">',CODOC_SETTINGS_OPTION_NAME,esc_html($CODOC_SETTINGS['subscription_button_text']));
349 434 echo '</td></tr>';
350 435
351 - echo '<tr><th>サポートボタンのテキスト</th><td>';
436 + echo '<tr><th>' . __('Support button text','codoc') . '</th><td>';
352 437 echo sprintf('<input type="text" name="%s[support_button_text]" value="%s">',CODOC_SETTINGS_OPTION_NAME,esc_html($CODOC_SETTINGS['support_button_text']));
353 438 echo '</td></tr>';
354 439
355 - echo '<tr><th>「サブスクリプションに含まれる記事」のテキスト</th><td>';
440 + echo '<tr><th>' . __('Text for "Articles Included in Subscription".','codoc') . '</th><td>';
356 441 echo sprintf('<input type="text" name="%s[subscription_message]" value="%s">',CODOC_SETTINGS_OPTION_NAME,esc_html($CODOC_SETTINGS['subscription_message']));
357 442 echo '</td></tr>';
358 443
359 - echo '<tr><th>サポート説明のテキスト</th><td>';
444 + echo '<tr><th>' . __('Text for support description','codoc') . '</th><td>';
360 445 echo sprintf('<input type="text" name="%s[support_message]" value="%s">',CODOC_SETTINGS_OPTION_NAME,esc_html($CODOC_SETTINGS['support_message']));
361 446 echo '</td></tr>';
362 447
363 448 echo '</tbody></table>';
@@ -367,12 +452,12 @@
367 452 );
368 453
369 454 add_settings_field(
370 455 'codoc_tag_attributes', // id
371 - 'codocタグの属性', // title
456 + __('Attributes for codoc tag','codoc'), // title
372 457 function() {
373 458 global $CODOC_SETTINGS;
374 - echo '<div class="excerpt">codocタグに特定の属性を追加することができます。</div>';
459 + echo '<div class="excerpt">' . __('You can add specific attributes to codoc tags.','codoc') . '</div>';
375 460 echo sprintf('<input type="text" name="%s[codoc_tag_attributes]" value="%s">',CODOC_SETTINGS_OPTION_NAME,htmlspecialchars($CODOC_SETTINGS['codoc_tag_attributes']));
376 461 },
377 462 'codoc', //page
378 463 'setting_section_id' //Section
@@ -377,29 +462,28 @@
377 462 'codoc', //page
378 463 'setting_section_id' //Section
379 464 );
380 465 add_settings_field(
381 - 'codoc_connect_code', // id
382 - 'サービス連携コード', // title
466 + 'codoc_script_tag_attributes', // id
467 + __('Attributes for codoc script tag','codoc'), // title
383 468 function() {
384 469 global $CODOC_SETTINGS;
385 - echo '<div class="excerpt">サービス連携ウィジェットを利用するためにはアカウント設定でサービス連携を有効化し、サービス連携コードを指定してください</div>';
386 - echo sprintf('<input type="text" name="%s[codoc_connect_code]" value="%s">',CODOC_SETTINGS_OPTION_NAME,esc_html($CODOC_SETTINGS['codoc_connect_code']));
470 + echo '<div class="excerpt">' . __('You can add specific attributes to codoc script tags.','codoc') . '</div>';
471 + echo sprintf('<input type="text" name="%s[codoc_script_tag_attributes]" value="%s">',CODOC_SETTINGS_OPTION_NAME,htmlspecialchars($CODOC_SETTINGS['codoc_script_tag_attributes']));
387 472 },
388 473 'codoc', //page
389 474 'setting_section_id' //Section
390 475 );
391 -
392 476 add_settings_field(
393 477 'str_replace_binded_url', // id
394 - 'パーマリンク', // title
478 + __('Permalink','codoc'), // title
395 479 function() {
396 480 global $CODOC_SETTINGS;
397 - echo '<div class="excerpt">codoc側に登録するパーマリンクを置換することができます。</div>';
481 + echo '<div class="excerpt">' . __('You can replace the part of permalink registered on the codoc.','codoc') . '</div>';
398 482 echo sprintf('<input type="text" name="%s[str_replace_binded_url_from]" value="%s">',CODOC_SETTINGS_OPTION_NAME,esc_html($CODOC_SETTINGS['str_replace_binded_url_from']));
399 - echo ('<span class="suptext">を</span>');
483 + echo ('<span class="suptext">→</span>');
400 484 echo sprintf('<input type="text" name="%s[str_replace_binded_url_to]" value="%s">',CODOC_SETTINGS_OPTION_NAME,esc_html($CODOC_SETTINGS['str_replace_binded_url_to']));
401 - echo ('に変換');
485 +
402 486 },
403 487 'codoc', //page
404 488 'setting_section_id' //Section
405 489 );
@@ -405,16 +489,14 @@
405 489 );
406 490
407 491 add_settings_field(
408 492 'str_around_codoc_tag', // id
409 - 'HTMLの挿入', // title
493 + __('HTML insertion','codoc'), // title
410 494 function() {
411 495 global $CODOC_SETTINGS;
412 - echo '<div class="excerpt">codocタグの前後にHTMLを挿入することができます。</div>';
413 - echo sprintf('<div class="inputRow"><textarea name="%s[str_before_codoc_tag]" cols="40">%s</textarea>',CODOC_SETTINGS_OPTION_NAME,esc_html($CODOC_SETTINGS['str_before_codoc_tag']));
414 - echo ('を前に挿入</div>');
415 - echo sprintf('<div class="inputRow"><textarea name="%s[str_after_codoc_tag]" cols="40">%s</textarea>',CODOC_SETTINGS_OPTION_NAME,esc_html($CODOC_SETTINGS['str_after_codoc_tag']));
416 - echo ('を後に挿入</div>');
496 + echo '<div class="excerpt">' . __('You can insert HTML before and after the codoc tag.','codoc') . '</div>';
497 + echo sprintf('<div class="inputRow"><p>%s</p><textarea name="%s[str_before_codoc_tag]" cols="40">%s</textarea></div>',__('Before HTML','codoc'),CODOC_SETTINGS_OPTION_NAME,esc_html($CODOC_SETTINGS['str_before_codoc_tag']));
498 + echo sprintf('<div class="inputRow"><p>%s</p><textarea name="%s[str_after_codoc_tag]" cols="40">%s</textarea></div>',__('After HTML','codoc'),CODOC_SETTINGS_OPTION_NAME,esc_html($CODOC_SETTINGS['str_after_codoc_tag']));
417 499
418 500 },
419 501 'codoc', //page
420 502 'setting_section_id' //Section
@@ -421,26 +503,26 @@
421 503 );
422 504
423 505 add_settings_field(
424 506 'always_show_support_tag', // id
425 - 'サポートの自動挿入', // title
507 + __('Automatic support insertion','codoc'), // title
426 508 function() {
427 509 global $CODOC_SETTINGS;
428 - echo '<div class="excerpt">codocブロックを挿入することなく投稿にサポート機能を追加します</div>';
510 + echo '<div class="excerpt">' . __('It adds support functions to the post without inserting a codoc block.','codoc') . '</div>';
429 511 echo '<table class="innerTable"><tbody>';
430 - echo '<tr><th>自動挿入</th><td>';
431 - echo sprintf('<input type="radio" value="1" name="%s[always_show_support]" id="always_show_support_on" %s><label for="always_show_support_on">する</label> ',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['always_show_support'] == '1' ? "checked" : ""));
432 - echo sprintf('<input type="radio" value="0" name="%s[always_show_support]" id="always_show_support_off" %s><label for="always_show_support_off">しない</label> <br / >',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['always_show_support'] == '0' ? "checked" : ""));
512 + echo '<tr><th>' . __('Automatic insertion','codoc') . '</th><td>';
513 + echo sprintf('<input type="radio" value="1" name="%s[always_show_support]" id="always_show_support_on" %s><label for="always_show_support_on">' . __('Enable','codoc') . '</label> ',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['always_show_support'] == '1' ? "checked" : ""));
514 + echo sprintf('<input type="radio" value="0" name="%s[always_show_support]" id="always_show_support_off" %s><label for="always_show_support_off">' . __('Disable','codoc') . '</label> <br / >',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['always_show_support'] == '0' ? "checked" : ""));
433 515 echo '</td></tr>';
434 - echo '<tr><th>表示位置</th><td>';
435 - echo sprintf('<input type="radio" value="top" name="%s[show_support_location]" id="show_support_location_top" %s><label for="show_support_location_top">冒頭</label> ',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['show_support_location'] == 'top' ? "checked" : ""));
436 - echo sprintf('<input type="radio" value="bottom" name="%s[show_support_location]" id="show_support_location_bottom" %s><label for="show_support_location_bottom">末尾</label> <br / >',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['show_support_location'] == 'bottom' ? "checked" : ""));
516 + echo '<tr><th>'. __('Position','codoc') . '</th><td>';
517 + echo sprintf('<input type="radio" value="top" name="%s[show_support_location]" id="show_support_location_top" %s><label for="show_support_location_top">' . __('TOP','codoc') . '</label> ',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['show_support_location'] == 'top' ? "checked" : ""));
518 + echo sprintf('<input type="radio" value="bottom" name="%s[show_support_location]" id="show_support_location_bottom" %s><label for="show_support_location_bottom">' . __('Bottom','codoc') . '</label> <br / >',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['show_support_location'] == 'bottom' ? "checked" : ""));
437 519 echo '</td></tr>';
438 - echo '<tr><th>説明文</th><td>';
439 - echo sprintf('<input type="text" placeholder="サポートの説明文をカスタマイズできます" size="50%%" name="%s[show_support_message]" value="%s">',CODOC_SETTINGS_OPTION_NAME,esc_html($CODOC_SETTINGS['show_support_message']));
520 + echo '<tr><th>' . __('Description','codoc') . '</th><td>';
521 + echo sprintf('<input type="text" placeholder="' . __('You can customize the description of the support.','codoc') . '" size="50%%" name="%s[show_support_message]" value="%s">',CODOC_SETTINGS_OPTION_NAME,esc_html($CODOC_SETTINGS['show_support_message']));
440 522 echo '</td></tr>';
441 - echo '<tr><th>対象カテゴリ名</th><td>';
442 - echo sprintf('<input placeholder="&quot;|&quot;区切りで複数指定できます" type="text" size="50%%" name="%s[show_support_categories]" value="%s"><br />',CODOC_SETTINGS_OPTION_NAME,esc_html($CODOC_SETTINGS['show_support_categories']));
523 + echo '<tr><th>' . __('Category names','codoc') . '</th><td>';
524 + echo sprintf('<input placeholder="' . __('Inserted into articles of categories, divided by &quot;|&quot;','codoc') . '" type="text" size="50%%" name="%s[show_support_categories]" value="%s"><br />',CODOC_SETTINGS_OPTION_NAME,esc_html($CODOC_SETTINGS['show_support_categories']));
443 525 echo '</td></tr>';
444 526 echo '</tbody></table>';
445 527
446 528 },
@@ -448,24 +530,38 @@
448 530 'setting_section_id' //Section
449 531 );
450 532 add_settings_field(
451 533 'do_not_filter_the_content', // id
452 - '支障が出る処理を無効化', // title
534 + __('Disable plugin filter','codoc'), // title
453 535 function() {
454 536 global $CODOC_SETTINGS;
455 - echo '<div class="excerpt">codocの動作に支障が出る他のプラグインによる<strong>フィルター処理</strong>を無効化できます。codocが上手く動かない場合のみ利用してください。</div>';
456 - echo sprintf('<input type="radio" value="1" name="%s[do_not_filter_the_content]" id="do_not_filter_the_content_on" %s><label for="do_not_filter_the_content_on">する</label> ',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['do_not_filter_the_content'] == '1' ? "checked" : ""));
457 - echo sprintf('<input type="radio" value="0" name="%s[do_not_filter_the_content]" id="do_not_filter_the_content_off" %s><label for="do_not_filter_the_content_off">しない</label> ',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['do_not_filter_the_content'] == '0' ? "checked" : ""));
537 + echo '<div class="excerpt">' . __('You can disable filter processing that includes shortcodes from other plugins that interfere with the operation of codoc. Please use this only if codoc is not functioning properly.','codoc') . '</div>';
538 + echo sprintf('<input type="radio" value="1" name="%s[do_not_filter_the_content]" id="do_not_filter_the_content_on" %s><label for="do_not_filter_the_content_on">' . __('Enable','codoc') .'</label> ',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['do_not_filter_the_content'] == '1' ? "checked" : ""));
539 + echo sprintf('<input type="radio" value="0" name="%s[do_not_filter_the_content]" id="do_not_filter_the_content_off" %s><label for="do_not_filter_the_content_off">' . __('Disable','codoc') . '</label> ',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['do_not_filter_the_content'] == '0' ? "checked" : ""));
458 540 },
459 541 'codoc', //page
460 542 'setting_section_id' //Section
461 543 );
544 +
462 545 add_settings_field(
546 + 'shortcode_evacuation', // id
547 + __('Shortcode evacuation','codoc'), // title
548 + function() {
549 + global $CODOC_SETTINGS;
550 + echo '<div class="excerpt">' . __('The execution results of shortcodes written in the paid part are moved to the free part, and are used and displayed on the HTML during viewing of the paid part. Please use this if the shortcode does not work as expected in the paid part. Please note that the execution results of shortcodes in the paid part will be written in the source code.','codoc'). '</div>';
551 + echo sprintf('<input type="radio" value="1" name="%s[shortcode_evacuation]" id="shortcode_evacuation_on" %s><label for="shortcode_evacuation_on">' . __('Enable','codoc') . '</label> ',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['shortcode_evacuation'] == '1' ? "checked" : ""));
552 + echo sprintf('<input type="radio" value="0" name="%s[shortcode_evacuation]" id="shortcode_evacuation_off" %s><label for="shortcode_evacuation_off">' . __('Disable','codoc') . '</label> ',CODOC_SETTINGS_OPTION_NAME,($CODOC_SETTINGS['shortcode_evacuation'] == '0' ? "checked" : ""));
553 + },
554 + 'codoc', //page
555 + 'setting_section_id' //Section
556 + );
557 +
558 + add_settings_field(
463 559 'debug_params', // id
464 - 'デバック用', // title
560 + __('Debug Parameters','codoc'), // title
465 561 function() {
466 562 global $CODOC_SETTINGS;
467 - echo '<div class="excerpt">デバック用のパラメーターを指定できます。codocサポートから依頼がある場合のみ利用してください。</div>';
563 + echo '<div class="excerpt">' . __('You can specify parameters for debugging. Please use this only upon request from codoc support.','codoc') . '</div>';
468 564 echo sprintf('<input placeholder="" type="text" size="50%%" name="%s[debug_params]" value="%s"><br />',CODOC_SETTINGS_OPTION_NAME,esc_html($CODOC_SETTINGS['debug_params']));
469 565 },
470 566 'codoc', //page
471 567 'setting_section_id' //Section
@@ -470,9 +566,34 @@
470 566 'codoc', //page
471 567 'setting_section_id' //Section
472 568 );
473 569
570 + add_settings_field(
571 + 'cretor_info', // id
572 + __('Creator\'s Information','codoc'), // title
573 + function() {
574 + global $CODOC_SETTINGS;
575 + global $CODOC_AUTHINFO;
576 + echo sprintf('<p><font id="codoc-update-creator-info-message"></font></p>',"");
577 + // 変更を保存時に常に同期するのでこの表示は必要ないがUI上保持しておく
578 + $script = "document.getElementById('codoc-update-creator-info-message').innerText='" . __("Please save changes to update the information.","codoc") . "';document.getElementById('codoc-update-creator-info-message').color='red';";
579 + if (isset($CODOC_AUTHINFO['profile_image_url'])) {
580 + echo sprintf('<img src="%s" width="40" height="40" />',$CODOC_AUTHINFO['profile_image_url']);
581 + }
582 + echo sprintf('<p>%s%s</p>',$CODOC_AUTHINFO['name'],((isset($CODOC_AUTHINFO['account_is_pro']) and $CODOC_AUTHINFO['account_is_pro']) ? ' [PRO] ' : ''));
583 + if ($connect_code = $CODOC_SETTINGS['codoc_connect_code']) {
474 584
585 + echo sprintf('<p>' . __('External service integration completed (Integration code: %s) %s','codoc') . '</p>',
586 + $connect_code,
587 + ($CODOC_SETTINGS['codoc_connect_registration_mode'] == 'dedicated' ? '<br/> <strong>' . __('Set the audience as a private account.','codoc') . '</strong>' : ''));
588 + }
589 + echo sprintf('<p><a href="javascript:void(0);" onClick="' . $script . '">' . __('Update creator\'s Information','codoc') . '</a></p>');
590 + echo ('<p>' . __('Please update each time if you change the logo or cover image on the codoc side.','codoc') . '</p>');
591 + },
592 + 'codoc', //page
593 + 'setting_section_id' //Section
594 + );
595 +
475 596 register_setting(
476 597 'codoc_option_group', // option group
477 598 CODOC_USERCODE_OPTION_NAME
478 599 );
@@ -481,25 +602,25 @@
481 602 CODOC_TOKEN_OPTION_NAME
482 603 );
483 604
484 605 if (isset($_GET['codoc_auth_finished']) and $_GET['codoc_auth_finished']) {
485 - add_settings_error( 'general', 'settings_updated', __( 'codocの認証が完了しました' ), 'success' );
606 + add_settings_error( 'general', 'settings_updated', __( 'codoc authentication has been completed.' ,'codoc'), 'success' );
486 607 }
487 608
488 609 add_settings_field(
489 610 'codoc_auth',
490 - '認証',
611 + __('Authentication','codoc'),
491 612 function() {
492 613 global $CODOC_USERCODE;
493 614 global $CODOC_TOKEN;
494 615 global $CODOC_AUTHINFO;
495 - $script = "javascript:document.getElementById('codoc-usercode').value='-';document.getElementById('codoc-token').value='-';document.getElementById('codoc-auth-message').innerText='解除を完了するには変更を保存してください';document.getElementById('codoc-auth-message').color='red';";
616 + $script = "javascript:document.getElementById('codoc-usercode').value='-';document.getElementById('codoc-token').value='-';document.getElementById('codoc-auth-message').innerText='" . __('Please save changes to complete the unbinding.','codoc') . "';document.getElementById('codoc-auth-message').color='red';";
617 +
618 + echo sprintf('<p><font color="green" id="codoc-auth-message">' . __('Authorized as <strong>%s</strong>','codoc') . '</font></p>',$CODOC_AUTHINFO['email']);
496 619
497 - echo sprintf('<p><font color="green" id="codoc-auth-message"><strong>%s</strong> で認証済</font></p>',$CODOC_AUTHINFO['email']);
498 -
499 620 echo sprintf('<input id="codoc-usercode" type="hidden" name="%s" value="%s">',CODOC_USERCODE_OPTION_NAME,$CODOC_USERCODE);
500 621 echo sprintf('<input id="codoc-token" type="hidden" name="%s" value="%s">',CODOC_TOKEN_OPTION_NAME,$CODOC_TOKEN);
501 - echo sprintf('<p>認証を<a href="javascript:void(0);" onClick="' . $script . '">解除する</p>');
622 + echo sprintf('<p><a href="javascript:void(0);" onClick="' . $script . '">' . __('Unbind authorization','codoc') . '</p>');
502 623 },
503 624 'codoc',
504 625 'setting_section_id'
505 626 );
@@ -511,20 +632,26 @@
511 632 add_settings_field(
512 633 'codoc_auth',
513 634 '認証',
514 635 function() {
515 -
636 + $theme = wp_get_theme();
637 + $from = 'wp';
638 + if ($theme->get('Name') === 'codoc') {
639 + $from = 'wp_codoc';
640 + }
516 641 //$current_url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
517 642 $current_url = admin_url('options-general.php') . '?page=codoc';
518 - $login_url = sprintf("location.href='%s'",$this->get_codoc_url() . '/me/token?from=wp&return_url=' . urlencode($current_url));
519 - $register_url = sprintf("location.href='%s'",$this->get_codoc_url() . '/register?from=wp&return_url=' . urlencode($current_url));
643 + $login_url = sprintf("location.href='%s'",$this->get_codoc_url() . '/me/token?from=' . $from . '&return_url=' . urlencode($current_url));
644 + $register_url = sprintf("location.href='%s'",$this->get_codoc_url() . '/register?from=' . $from . '&return_url=' . urlencode($current_url));
520 645 // submitを消しておく
521 646 echo ('<script type="text/javascript">window.onload=function(){document.getElementById(\'submit\').style.display = \'none\'}</script>');
522 647 echo ('codocをWordPressでご利用いただくには認証が必要です。<br />');
523 648 echo sprintf('ユーザーコードとAPIトークンを<a href="%s&auth_by_myself=1">直接入力</a>することでも認証できます。<br /><br />',$current_url);
524 649 echo sprintf('<input type="button" class="button button-primary" value="ログインして認証" onClick="%s"> <input type="button" class="button button-primary" value="登録して認証" onClick="%s"><br /><br />',$login_url,$register_url);
650 + if (!$this->util->health_check()) {
651 + echo sprintf('<p style="color: red;">codocサーバーと通信ができません。サーバーやWordPress側でのファイヤーウォール設定にて https://codoc.jp への通信を許可してください。</p>');
652 + }
525 653
526 -
527 654 },
528 655 'codoc',
529 656 'setting_section_id'
530 657 );
@@ -581,9 +708,9 @@
581 708 $data = $this->util->get_support_entry([],[
582 709 "usercode" => get_option(CODOC_USERCODE_OPTION_NAME),
583 710 "token" => get_option(CODOC_TOKEN_OPTION_NAME),
584 711 ]);
585 - if ($data->status and $entry = $data->entry) {
712 + if ($data and $data->status and $entry = $data->entry) {
586 713 update_option(CODOC_SUPPORT_ENTRYCODE_OPTION_NAME,$entry->code);
587 714 } else {
588 715 update_option(CODOC_SUPPORT_ENTRYCODE_OPTION_NAME,'');
589 716 }
@@ -590,9 +717,9 @@
590 717 } elseif(isset($CODOC_SETTINGS['always_show_support']) and !$CODOC_SETTINGS['always_show_support']) {
591 718 update_option(CODOC_SUPPORT_ENTRYCODE_OPTION_NAME,'');
592 719 }
593 720 });
594 -
721 +
595 722 add_action('updated_option',function(){
596 723 global $CODOC_RE_AUTHORIZE;
597 724 if ($CODOC_RE_AUTHORIZE) {
598 725 //$data = $this->callAPI('GET','');
@@ -600,12 +727,9 @@
600 727 "usercode" => get_option(CODOC_USERCODE_OPTION_NAME),
601 728 "token" => get_option(CODOC_TOKEN_OPTION_NAME),
602 729 ]);
603 730 if ($data->status and $user = $data->user) {
604 - update_option(CODOC_AUTHINFO_OPTION_NAME,[
605 - 'email' => $user->email,
606 - 'name' => $user->name,
607 - ]);
731 + $this->update_codoc_authinfo($user);
608 732 } else {
609 733 update_option(CODOC_AUTHINFO_OPTION_NAME,'');
610 734 }
611 735 }
@@ -667,13 +791,55 @@
667 791 add_filter( 'mce_buttons', function( $buttons ) {
668 792 array_push( $buttons, "|", "codoc" );
669 793 return $buttons;
670 794 } );
795 + // 非SSL環境の場合、なぜかhttps -> httpsになってしまうので対策
796 + // コメントタグが除去されることがあるらしいのでvalid_elementsに必要なタグを追加 (EXPERIMENTAL)
797 + add_filter( 'tiny_mce_before_init', function($settings) {
798 + $settings['external_plugins'] = preg_replace('/"codoc":"http:/','"codoc":"https:',$settings['external_plugins']);
799 + foreach (['valid_elements','extended_valid_elements'] as $valid_elements) {
800 + if (isset($settings[$valid_elements])) {
801 + $settings[$valid_elements] = $settings[$valid_elements] . ',div[*],p[*],img[*],--[*]';
802 + }
803 + }
804 + $CODOC_SETTINGS = get_option(CODOC_SETTINGS_OPTION_NAME);
805 + if (isset($CODOC_SETTINGS["debug_params"])) {
806 + $params_decoded = json_decode($CODOC_SETTINGS["debug_params"],true);
807 + if (isset($params_decoded["mce_valid_elements"])) {
808 + $settings['valid_elements'] = $params_decoded["mce_valid_elements"];
809 + $settings['extended_valid_elements'] = $params_decoded["mce_valid_elements"];
810 + }
811 + }
671 812
813 + return $settings;
814 + },1000000);
672 815 }
673 816 }
674 817 } );
675 818 }
819 + function update_codoc_authinfo($user) {
820 + global $CODOC_SETTINGS;
821 + global $CODOC_AUTHINFO;
822 + if (property_exists($user,'connect_code') and $user->connect_code) {
823 + $CODOC_SETTINGS = get_option(CODOC_SETTINGS_OPTION_NAME);
824 + $CODOC_SETTINGS['codoc_connect_code'] = $user->connect_code;
825 + $CODOC_SETTINGS['codoc_connect_registration_mode'] = $user->connect_has_permission_dedicated_account ? 'dedicated' : '';
826 + update_option(CODOC_SETTINGS_OPTION_NAME,$CODOC_SETTINGS);
827 + }
828 + return update_option(CODOC_AUTHINFO_OPTION_NAME,[
829 + 'email' => $user->email,
830 + 'name' => $user->name,
831 + 'profile_image_url' => $user->profile_image_url,
832 + 'cover_image_url' => $user->cover_image_url,
833 + 'connect_code' => property_exists($user,'connect_code') ? $user->connect_code : '',
834 + 'connect_image_url' => property_exists($user,'connect_image_url') ? $user->connect_image_url : '',
835 + 'account_is_pro' => property_exists($user,'account_is_pro') ? $user->account_is_pro : '',
836 + 'created_at' => property_exists($user,'created_at') ? $user->created_at : 0,
837 + ]);
838 + $CODOC_AUTHINFO = get_option(CODOC_AUTHINFO_OPTION_NAME);
839 + return $CODOC_AUTHINFO;
840 + }
841 + // 保存用コンテンツにフィルターを実施する
676 842 public function get_filtered_content($post_emulated) {
677 843 // 記事ページであることをエミュレートしてフィルター実行
678 844 $post_backuped = null;
679 845 if (isset($GLOBALS['post'])) {
@@ -684,13 +850,18 @@
684 850 $wp_query_backuped = null;
685 851 if (isset($GLOBALS['wp_query'])) {
686 852 $wp_query_backuped = $GLOBALS['wp_query'];
687 853 $wp_query = $GLOBALS['wp_query'];
688 - $is_single_backuped = $wp_query->is_single;
689 854 $wp_query->is_single = true;
855 + $wp_query->is_singular = true;
856 + # in_the_loop は記事ページでは通常有効っぽいので true指定 ex: wp_ulike
857 + $wp_query->in_the_loop = true;
858 + # これも追加しておく
859 + $wp_query->is_main_query = true;
860 +
690 861 $wp_query->post = $post_emulated;
691 862 $wp_query->queried_object = $post_emulated;
692 - $wp_query->queried_object_id = $post_emulated->id;
863 + $wp_query->queried_object_id = $post_emulated->ID;
693 864
694 865 $GLOBALS['wp_query'] = $wp_query;
695 866 }
696 867 // $this->the_content でオリジナルを返してもらうため
@@ -698,8 +869,29 @@
698 869 $content = preg_replace(
699 870 '/ (\/)?wp:codoc\/codoc-block /',' \\1wptmp:codoc/codoc-block ',
700 871 $post_emulated->post_content
701 872 );
873 + // post_metaに内容を保存し、無料パートにショートコードの退避をおこなう
874 + $codoc_settings = get_option(CODOC_SETTINGS_OPTION_NAME);
875 + if (isset($codoc_settings['shortcode_evacuation']) and $codoc_settings['shortcode_evacuation']) {
876 + $splited = preg_split('/\/wptmp:codoc\/codoc-block/s',$content);
877 + if (isset($splited[0]) and isset($splited[1])) {
878 + // すべてのショートコードを $match_all にいれる
879 + preg_match_all('/\[[^\[\]]+?\](.+\[\/[^\[\]]+?\])?/',$splited[1],$match_all);
880 + // ショートコードをURLエンコードしてdivタグの中にいれておく(後でmetaの中のショートコードと付け合せ)
881 + $replaced = preg_replace_callback('/\[[^\[\]]+?\](.+\[\/[^\[\]]+?\])?/',function($matches) {
882 + return sprintf ('<div class="codoc-evacuation-dests" data-shortcode="%s"></div>', urlencode($matches[0]));
883 + },$splited[1]);
884 + // 0番目に配列で入っているのでそこを退避対象の配列とする
885 + $evacuations = $match_all[0];
886 + // ショートコードの中身をタグに退避
887 + $content = $splited[0] . '/wptmp:codoc/codoc-block' . $replaced;
888 + // 無料パートでショートコードを実行できるようにする
889 + update_post_meta($post_emulated->ID,'codoc_shortcode_evacuations',join('**codoc**',$evacuations));
890 + } else {
891 + update_post_meta($post_emulated->id,'codoc_shortcode_evacuations',"");
892 + }
893 + }
702 894 #$content = do_shortcode( $content );
703 895 $content_filtered = apply_filters( 'the_content', $content);
704 896 $this->do_not_filter_the_content = false;
705 897
@@ -712,9 +904,8 @@
712 904 $content_filtered = preg_replace(
713 905 '/ (\/)?wptmp:codoc\/codoc-block /',' \\1wp:codoc/codoc-block ',
714 906 $content_filtered
715 907 );
716 -
717 908 return $content_filtered;
718 909 }
719 910
720 911 public function save_post($post_ID,$post,$update) {
@@ -727,9 +918,10 @@
727 918 $post->post_content : $this->get_filtered_content($post);
728 919 $res = $this->util->sync_entry([
729 920 "post_title" => $post->post_title,
730 921 "post_content" => $post_content,
731 - "post_status" => ($post->post_status == 'publish' ? 1 : 0),
922 + // password が設定されてる場合は限定公開にする
923 + "post_status" => $post->post_status == 'publish' ? ($post->post_password ? 2 : 1) : 0,
732 924 "post_permalink" => get_permalink($post_ID),
733 925 "codoc_entry_code" => $entryCode,
734 926 "codoc_settings" => $codoc_settings,
735 927 ],[
@@ -735,20 +927,42 @@
735 927 ],[
736 928 "usercode" => get_option(CODOC_USERCODE_OPTION_NAME),
737 929 "token" => get_option(CODOC_TOKEN_OPTION_NAME),
738 930 ]);
739 -
931 + $prudent_update_post_meta_entry_code = null;
932 + if (isset($codoc_settings["debug_params"])) {
933 + $params_decoded = json_decode($codoc_settings["debug_params"],true);
934 + if (isset($params_decoded["prudent_update_post_meta_entry_code"])) {
935 + $prudent_update_post_meta_entry_code = $params_decoded["prudent_update_post_meta_entry_code"];
936 + }
937 + }
938 + if ($prudent_update_post_meta_entry_code == 2) {
939 + error_log('CODOC:: ' . sprintf ("%s : %s : %s : %s", $post_ID, (is_object($res) ? "1" : 0),$res->status,$entryCode));
940 + }
740 941 if (is_object($res) and $res->status and !$entryCode) {
741 - update_post_meta($post_ID,'codoc_entry_code',$res->entry->code);
942 + // 20230222 https://stackoverflow.com/questions/26640785/update-post-meta-not-work-only-when-save-data-not-for-update
943 + if ($prudent_update_post_meta_entry_code) {
944 + add_post_meta($post_ID,'codoc_entry_code',$res->entry->code);
945 + } else {
946 + update_post_meta($post_ID,'codoc_entry_code',$res->entry->code);
947 + }
742 948 }
743 -
744 949 return true;
745 950 }
746 951 function updated_post_meta( $meta_ID, $post_ID, $meta_key ) {
747 - if ($meta_key != '_thumbnail_id') {
952 + // スルーされてる場合は他のメタ情報更新のタイミングにサムネイルをアップロード
953 + $has_to_resend = get_post_meta($post_ID,'codoc_post_thumbnail_invoking_entry_code',true);
954 + if ($has_to_resend != 1 and $meta_key != '_thumbnail_id') {
748 955 return;
749 956 }
750 957 if ( has_post_thumbnail($post_ID) ) {
958 + // 新規投稿の場合、タイミングによってはcodocEntryCodeが取得できないので一旦スルーする
959 + if (!get_post_meta($post_ID,'codoc_entry_code',true)) {
960 + update_post_meta($post_ID,'codoc_post_thumbnail_invoking_entry_code',1);
961 + return;
962 + } else {
963 + update_post_meta($post_ID,'codoc_post_thumbnail_invoking_entry_code',0);
964 + }
751 965 $attachment = wp_get_attachment_metadata( get_post_thumbnail_id($post_ID));
752 966 $upload_dir = wp_upload_dir();
753 967 $file_path = sprintf ('%s/%s',$upload_dir['basedir'],$attachment['file']);
754 968
@@ -773,9 +987,25 @@
773 987 "token" => get_option(CODOC_TOKEN_OPTION_NAME),
774 988 ]
775 989 );
776 990 }
777 -
991 + // 退避されてるかどうかをmetaを使って確認し、無料エリアの一番最後にショートコードを追加
992 + function the_content_shortcode_evacuations( $post_content ) {
993 + if ($this->do_not_filter_the_content) {
994 + return $post_content;
995 + }
996 + $post = get_post();
997 + if (!$post) {
998 + return $post_content;
999 + }
1000 + $evacuations_meta = get_post_meta($post->ID,'codoc_shortcode_evacuations',true);
1001 + $evacuations = preg_split('/\*\*codoc\*\*/',$evacuations_meta);
1002 + foreach ($evacuations as $evacuation) {
1003 + $post_content = sprintf('<div class="codoc-evacuations" style="display:none;" data-shortcode="%s">%s</div>',
1004 + urlencode($evacuation),$evacuation) . $post_content;
1005 + }
1006 + return $post_content;
1007 + }
778 1008 function the_content( $post_content ) {
779 1009 if ( is_single() && in_the_loop() && is_main_query() ) {
780 1010 }
781 1011 // get_filtered_content から do_not_filter_the_contentを有効にされるパターン
@@ -783,8 +1013,12 @@
783 1013 if ($this->do_not_filter_the_content) {
784 1014 return $post_content;
785 1015 }
786 1016 $post = get_post();
1017 + // 20211215 null になる場合がある
1018 + if (!$post) {
1019 + return $post_content;
1020 + }
787 1021 # is_amp で実装しているテンプレート用
788 1022 $is_amp_endpoint = (function_exists('is_amp_endpoint') && is_amp_endpoint()) ? true :
789 1023 ((function_exists('is_amp') && is_amp()) ? true : false);
790 1024 return $this->util->filter_content([