PluginProbe
codoc / 0.9.3
codoc v0.9.3
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 +200 -243 0.40.9.3 View file →
@@ -1,6 +1,6 @@
1 1 <?php
2 -
2 +require_once(plugin_dir_path( __FILE__ ) .'class-codoc-util.php');
3 3 final class Codoc {
4 4
5 5 public function __construct() {
6 6 if (is_admin()) {
@@ -6,46 +6,51 @@
6 6 if (is_admin()) {
7 7 // setting
8 8 $this->add_settings();
9 9 }
10 +
11 + // usercode, token はadminページのみDBから取得する
12 + $this->util = new CodocUtil();
13 +
14 + // paywall用の本文非表示化とcodocタグへの属性追加
15 + add_filter('the_content',[$this,'the_content']);
16 +
10 17 $auth_info = get_option(CODOC_AUTHINFO_OPTION_NAME);
11 - if (!$auth_info) {
12 - return $this;
13 - }
14 18
15 - // データ同期 (save_postはis_adminで実行されないケースがある)
16 - add_action( 'save_post', [$this,'save_post'], 20, 3 );
17 - add_action( 'added_post_meta', [$this,'updated_post_meta'], 10, 3 );
18 - add_action( 'updated_post_meta',[$this,'updated_post_meta'], 10, 3 );
19 - add_action( 'deleted_post_meta',[$this,'deleted_post_meta'], 10, 4 );
20 -
21 - if (is_admin()) {
22 - // gutenberg
23 - require_once 'src/init.php';
19 + if ($auth_info) {
20 + // データ同期 (save_postはis_adminで実行されないケースがある)
21 + add_action( 'save_post', [$this,'save_post'], 20, 3 );
22 + add_action( 'added_post_meta', [$this,'updated_post_meta'], 10, 3 );
23 + add_action( 'updated_post_meta',[$this,'updated_post_meta'], 10, 3 );
24 + add_action( 'deleted_post_meta',[$this,'deleted_post_meta'], 10, 4 );
25 + }
26 + if (is_admin() and $auth_info) { //管理画面
27 + // Gutenberg のサポートがない場合は何もしない
28 + if ( function_exists( 'register_block_type' ) ) {
29 + // gutenberg
30 + require_once 'src/init.php';
31 + add_action('wp_loaded', function() {
32 + wp_localize_script('wordpress-cgb-block-js', 'OPTIONS', array(
33 + 'codoc_url' => CODOC_URL,
34 + 'codoc_usercode' => get_option(CODOC_USERCODE_OPTION_NAME),
35 + 'codoc_plugin_version' => CODOC_PLUGIN_VERSION,
36 + 'codoc_sdk_path' => CODOC_SDK_PATH,
37 + ));
38 + });
39 + }
24 40 // tinymce
25 41 $this->add_mce();
26 - add_action('wp_loaded', function() {
27 - wp_localize_script('wordpress-cgb-block-js', 'OPTIONS', array(
28 - 'codoc_url' => CODOC_URL,
29 - 'codoc_usercode' => get_option(CODOC_USERCODE_OPTION_NAME),
30 - 'codoc_plugin_version' => CODOC_PLUGIN_VERSION,
31 - ));
32 - });
33 - return $this;
34 - }
35 -
36 - // codocのJS登録
37 - add_action( 'wp_enqueue_scripts', function() {
38 - wp_enqueue_script( 'codoc-injector-js', CODOC_URL . '/js/cms.js' );
39 - });
40 - // 登録したscriptタグに属性をつける
41 - add_filter('script_loader_tag', [$this,'modifier_script_tag'],10,2);
42 - // tinymce用のショートコード
43 - add_shortcode('codoc', [$this, 'injector_shortcode']);
44 -
45 - // paywall用の本文非表示化とcodocタグへの属性追加
46 - add_filter('the_content',[$this,'the_content']);
47 - return $this;
42 + } else { // ブログ画面
43 + // codocのJS登録
44 + add_action( 'wp_enqueue_scripts', function() {
45 + wp_enqueue_script( 'codoc-injector-js', CODOC_URL . '/js/cms.js' );
46 + });
47 + // 登録したscriptタグに属性をつける
48 + add_filter('script_loader_tag', [$this,'modifier_script_tag'],10,2);
49 + // tinymce用のショートコード
50 + add_shortcode('codoc', [$this, 'injector_shortcode']);
51 + }
52 + return $this;
48 53 }
49 54
50 55 public function modifier_script_tag($tag,$handle) {
51 56 if($handle !== 'codoc-injector-js') {
@@ -55,9 +60,10 @@
55 60 $data_css = '';
56 61 if ($css_path = $CODOC_SETTINGS['css_path']) {
57 62 $data_css = sprintf(' data-css="%s" ',$css_path);
58 63 }
59 - return str_replace(' src=', $data_css . ' defer src=', $tag);
64 + //return str_replace(' src=', $data_css . ' defer src=', $tag);
65 + return preg_replace('/(src=[^>]+)/',' ${1} ' . $data_css . ' defer',$tag);
60 66 }
61 67 public function injector_shortcode($atts) {
62 68 global $post;
63 69 ob_start();
@@ -63,50 +69,8 @@
63 69 ob_start();
64 70 require 'views/codoc-injector.php';
65 71 return ob_get_clean();
66 72 }
67 - public function callAPI($method,$path,$body = [],$headers = []) {
68 - $usercode = get_option(CODOC_USERCODE_OPTION_NAME);
69 - $token = get_option(CODOC_TOKEN_OPTION_NAME);
70 -
71 - $headers['X-CodocToken'] = $token;
72 - $host = CODOC_URL;
73 - $sslverify = true;
74 -
75 - if (preg_match('/local/',CODOC_URL)) {
76 - $sslverify = false;
77 - $host = 'https://host.docker.internal';
78 - }
79 - $url = sprintf("%s/api/v1/cms/%s%s",$host,$usercode,$path);
80 - $http = new WP_Http();
81 - try {
82 - $response = $http->request(
83 - $url,
84 - [
85 - 'sslverify' => $sslverify,
86 - 'method' => $method,
87 - 'timeout' => 10,
88 - 'headers' => $headers,
89 - 'body' => $body,
90 - ]
91 - );
92 - if ( is_wp_error($response) || $response['response']['code'] != 200 ) {
93 - //何もしない
94 - //var_dump( $response );
95 - }
96 - } catch(Exception $e) {
97 - }
98 -
99 - if (!is_wp_error($response) and
100 - isset($response['body']) and
101 - is_string($response['body']) and
102 - is_array(json_decode($response['body'], true)) and
103 - (json_last_error() == JSON_ERROR_NONE)) {
104 - return json_decode($response['body']);
105 - } else {
106 - return null;
107 - }
108 - }
109 73 # settings / 設定関連
110 74 public function add_settings() {
111 75 global $CODOC_SETTINGS;
112 76 add_action( 'admin_menu' ,function(){
@@ -120,9 +84,9 @@
120 84 echo '<form method="post" action="options.php">';
121 85 settings_fields( 'codoc_option_group' );
122 86 do_settings_sections( 'codoc' );
123 87 submit_button(); // 送信ボタン
124 - echo '</div>';
88 + echo '</form></div>';
125 89 }
126 90 );
127 91 });
128 92
@@ -131,12 +95,14 @@
131 95 if (isset($_GET['page']) and $_GET['page'] == 'codoc' and isset($_GET['fetch_token_key'])) {
132 96 $key = sanitize_text_field($_GET['fetch_token_key']);
133 97 $usercode = sanitize_text_field($_GET['usercode']);
134 98 update_option(CODOC_USERCODE_OPTION_NAME,$usercode);
135 - $data = $this->callAPI('GET','/token',[ "fetch_token_key" => $key ]);
99 + //$data = $this->callAPI('GET','/token',[ "fetch_token_key" => $key ]);
100 + $data = $this->util->get_token([ "fetch_token_key" => $key ],["usercode" => $usercode, "token" => "1"]);
136 101 if ($data->status and $token = $data->token) {
137 102 update_option(CODOC_TOKEN_OPTION_NAME,$token);
138 - $data = $this->callAPI('GET','');
103 + //$data = $this->callAPI('GET','');
104 + $data = $this->util->get_user_info([],["usercode" => $usercode, "token" => $token]);
139 105 if ($data->status and $user = $data->user) {
140 106 update_option(CODOC_AUTHINFO_OPTION_NAME,[
141 107 'email' => $user->email,
142 108 'name' => $user->name,
@@ -143,9 +109,9 @@
143 109 ]);
144 110 }
145 111 #$current_url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
146 112 #$current_url = preg_replace('/(.*)fetch_token_key.*/','${1}&codoc_auth_finished=1',$current_url);
147 - add_settings_error( 'general', 'settings_updated', __( 'OKKK' ), 'success' );
113 + //add_settings_error( 'general', 'settings_updated', __( 'OK' ), 'success' );
148 114 $current_url = admin_url('options-general.php') . '?page=codoc&codoc_auth_finished=1';
149 115
150 116 wp_redirect( $current_url);
151 117 exit;
@@ -166,8 +132,20 @@
166 132 'css_path' => '',
167 133 );
168 134 update_option( CODOC_SETTINGS_OPTION_NAME, $CODOC_SETTINGS );
169 135 }
136 + if (!isset($CODOC_SETTINGS['str_replace_binded_url_from'])) {
137 + $CODOC_SETTINGS['str_replace_binded_url_from'] = '';
138 + }
139 + if (!isset($CODOC_SETTINGS['str_replace_binded_url_to'])) {
140 + $CODOC_SETTINGS['str_replace_binded_url_to'] = '';
141 + }
142 + if (!isset($CODOC_SETTINGS['str_before_codoc_tag'])) {
143 + $CODOC_SETTINGS['str_before_codoc_tag'] = '';
144 + }
145 + if (!isset($CODOC_SETTINGS['str_after_codoc_tag'])) {
146 + $CODOC_SETTINGS['str_after_codoc_tag'] = '';
147 + }
170 148
171 149 add_settings_section(
172 150 'setting_section_id', // id
173 151 'codoc 設定ページ', // title
@@ -181,9 +159,9 @@
181 159 CODOC_SETTINGS_OPTION_NAME // option name(DB)
182 160 );
183 161 add_settings_field(
184 162 'css_path', // id
185 - 'カスタマイズ用CSSパス:', // title
163 + 'カスタマイズ用CSSパス', // title
186 164 function() {
187 165 global $CODOC_SETTINGS;
188 166 echo sprintf('<input type="text" name="%s[css_path]" value="%s">',CODOC_SETTINGS_OPTION_NAME,$CODOC_SETTINGS['css_path']);
189 167 },
@@ -189,9 +167,37 @@
189 167 },
190 168 'codoc', //page
191 169 'setting_section_id' //Section
192 170 );
171 + add_settings_field(
172 + 'str_replace_binded_url', // id
173 + 'codoc側に登録するパーマリンクを置換', // title
174 + function() {
175 + global $CODOC_SETTINGS;
176 + echo sprintf('<input type="text" name="%s[str_replace_binded_url_from]" value="%s">',CODOC_SETTINGS_OPTION_NAME,$CODOC_SETTINGS['str_replace_binded_url_from']);
177 + echo ('を');
178 + echo sprintf('<input type="text" name="%s[str_replace_binded_url_to]" value="%s">',CODOC_SETTINGS_OPTION_NAME,$CODOC_SETTINGS['str_replace_binded_url_to']);
179 + echo ('に変換');
180 + },
181 + 'codoc', //page
182 + 'setting_section_id' //Section
183 + );
193 184
185 + add_settings_field(
186 + 'str_around_codoc_tag', // id
187 + 'codocタグの前後にHTMLを挿入', // title
188 + function() {
189 + global $CODOC_SETTINGS;
190 + echo sprintf('<textarea name="%s[str_before_codoc_tag]" cols="40">%s</textarea>',CODOC_SETTINGS_OPTION_NAME,$CODOC_SETTINGS['str_before_codoc_tag']);
191 + echo ('を前に挿入<br />');
192 + echo sprintf('<textarea name="%s[str_after_codoc_tag]" cols="40">%s</textarea>',CODOC_SETTINGS_OPTION_NAME,$CODOC_SETTINGS['str_after_codoc_tag']);
193 + echo ('を後に挿入');
194 +
195 + },
196 + 'codoc', //page
197 + 'setting_section_id' //Section
198 + );
199 +
194 200 register_setting(
195 201 'codoc_option_group', // option group
196 202 CODOC_USERCODE_OPTION_NAME
197 203 );
@@ -210,9 +216,9 @@
210 216 function() {
211 217 global $CODOC_USERCODE;
212 218 global $CODOC_TOKEN;
213 219 global $CODOC_AUTHINFO;
214 - $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';";
220 + $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';";
215 221
216 222 echo sprintf('<p><font color="green" id="codoc-auth-message"><strong>%s</strong> で認証済</font></p>',$CODOC_AUTHINFO['email']);
217 223
218 224 echo sprintf('<input id="codoc-usercode" type="hidden" name="%s" value="%s">',CODOC_USERCODE_OPTION_NAME,$CODOC_USERCODE);
@@ -233,10 +239,10 @@
233 239 function() {
234 240
235 241 //$current_url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
236 242 $current_url = admin_url('options-general.php') . '?page=codoc';
237 - $login_url = sprintf("location.href='%s'",CODOC_URL . '/me/token?from_wp=1&return_url=' . urlencode($current_url));
238 - $register_url = sprintf("location.href='%s'",CODOC_URL . '/register?from_wp=1&return_url=' . urlencode($current_url));
243 + $login_url = sprintf("location.href='%s'",CODOC_URL . '/me/token?from=wp&return_url=' . urlencode($current_url));
244 + $register_url = sprintf("location.href='%s'",CODOC_URL . '/register?from=wp&return_url=' . urlencode($current_url));
239 245 // submitを消しておく
240 246 echo ('<script type="text/javascript">window.onload=function(){document.getElementById(\'submit\').style.display = \'none\'}</script>');
241 247 echo ('codocをWordPressでご利用いただくには認証が必要です。<br />');
242 248 echo sprintf('ユーザーコードとAPIトークンを<a href="%s&auth_by_myself=1">直接入力</a>することでも認証できます。<br /><br />',$current_url);
@@ -248,27 +254,31 @@
248 254 'setting_section_id'
249 255 );
250 256 }
251 257 // ない場合かつ自分で認証する場合
252 - if (!$CODOC_AUTHINFO and (isset($_GET['auth_by_myself']) and $_GET['auth_by_myself'])) {
258 + if (!$CODOC_AUTHINFO and (
259 + (isset($_GET['auth_by_myself']) and $_GET['auth_by_myself']) or
260 + (isset($_POST['auth_by_myself']) and $_POST['auth_by_myself'])
261 + )) {
253 262 register_setting(
254 263 'codoc_option_group', // option group
255 264 CODOC_USERCODE_OPTION_NAME
256 265 );
266 + register_setting(
267 + 'codoc_option_group', // option group
268 + CODOC_TOKEN_OPTION_NAME
269 + );
257 270 add_settings_field(
258 271 'codoc_usercode',
259 272 'ユーザーコード',
260 273 function() {
261 274 global $CODOC_USERCODE;
275 + echo '<input type="hidden" name="auth_by_myself" value="1">';
262 276 echo sprintf('<input type="text" name="%s" value="%s">',CODOC_USERCODE_OPTION_NAME,$CODOC_USERCODE);
263 277 },
264 278 'codoc',
265 279 'setting_section_id'
266 280 );
267 - register_setting(
268 - 'codoc_option_group', // option group
269 - CODOC_TOKEN_OPTION_NAME
270 - );
271 281 add_settings_field(
272 282 'codoc_token',
273 283 'APIトークン',
274 284 function() {
@@ -291,9 +301,13 @@
291 301 },10,2);
292 302 add_action('updated_option',function(){
293 303 global $CODOC_RE_AUTHORIZE;
294 304 if ($CODOC_RE_AUTHORIZE) {
295 - $data = $this->callAPI('GET','');
305 + //$data = $this->callAPI('GET','');
306 + $data = $this->util->get_user_info([],[
307 + "usercode" => get_option(CODOC_USERCODE_OPTION_NAME),
308 + "token" => get_option(CODOC_TOKEN_OPTION_NAME),
309 + ]);
296 310 if ($data->status and $user = $data->user) {
297 311 update_option(CODOC_AUTHINFO_OPTION_NAME,[
298 312 'email' => $user->email,
299 313 'name' => $user->name,
@@ -304,64 +318,67 @@
304 318 }
305 319 });
306 320
307 321 });
322 + // プラグイン一覧に設定のリンクをいれる
323 + add_filter( 'plugin_action_links_' . plugin_basename( plugin_dir_path( __FILE__ ) . 'codoc' . '.php' ),
324 + function( $links ) {
325 + $setting_link = sprintf( '<a href="%s">%s</a>', esc_url( add_query_arg( 'page', 'codoc', admin_url( 'options-general.php' ) ) ), esc_html( '設定' ) );
326 + array_unshift( $links, $setting_link );
327 +
328 + return $links;
329 + }
330 + );
331 +
308 332 }
309 333 public function add_mce() {
310 - // Add Shortcode options in the WordPres visual editors
311 - // wp_enqueue_script( 'codoc-editor-script', plugins_url( 'codoc/src_mce/codoc-editor.js', __DIR__ ));
312 - add_action( 'init', function() {
334 + add_action( 'admin_enqueue_scripts', function() {
313 335 if ( ! current_user_can( 'edit_posts' ) && ! current_user_can( 'edit_pages' ) ) {
314 336 return;
315 337 }
316 - if ( get_user_option( 'rich_editing' ) == 'true' ) {
317 - // プラグイン内で使うCSRF を生成
318 - $path = plugins_url( 'codoc/src_mce/codoc-editor-onload.js', __DIR__ );
319 - wp_enqueue_script( 'codoc-editor-onload', $path, array('jquery'), '', true );
320 - // I just want to insert this global variables but i don't know how i can do it..
321 - wp_localize_script(
322 - 'codoc-editor-onload',
323 - 'CODOCEDITOR',
324 - array(
325 - 'action' => 'codoc_shortcodes',
326 - 'nonce' => wp_create_nonce( 'codoc_shortcodes' )
327 - )
328 - );
329 - // ここでtinymceのプラグイン追加
330 - wp_enqueue_style( 'codoc-admin-style', plugins_url( 'codoc/src_mce/codoc-admin.css', __DIR__ ) );
331 - add_filter( 'mce_external_plugins', function( $plugin_array ) {
332 - $plugin_array['codoc'] = plugins_url( 'codoc/src_mce/codoc-editor.js', __DIR__ );
333 - return $plugin_array;
334 - } );
335 - add_filter( 'mce_buttons', function( $buttons ) {
336 - array_push( $buttons, "|", "codoc" );
337 - return $buttons;
338 - } );
339 - add_action( 'wp_ajax_codoc_shortcodes', function(){
340 - check_ajax_referer( 'codoc_shortcodes' );
341 - if ($usercode = sanitize_text_field($_GET['usercode'])) {
342 - update_option('codoc_usercode',$usercode);
343 - }
344 - $usercode = get_option(CODOC_USERCODE_OPTION_NAME) ? get_option(CODOC_USERCODE_OPTION_NAME) : 'nocode';
345 - $uri = CODOC_URL . '/api/v1/paywall/' . $usercode . '/entries';
346 - if ($entrycode = sanitize_text_field($_GET['entrycode'])) {
347 - $uri = $uri . '/' . $entrycode;
348 - }
349 - $args = preg_match('/local/',CODOC_URL) ? ['sslverify' => false ] : [];
350 - $response = wp_remote_request( $uri, $args );
351 -
352 - if ($response instanceof WP_Error) {
353 - exit;
354 - }
355 -
356 - $response['body'] = json_decode($response['body'], true);
357 - $entries = $response['body']['entries'];
338 + $current_screen = get_current_screen();
339 + if ( ( method_exists( $current_screen, 'is_block_editor' ) && $current_screen->is_block_editor() ) || ( function_exists( 'is_gutenberg_page' ) && is_gutenberg_page() ) ) {
340 + // Gutenberg Editor
341 + // なにもしない
342 + } else {
343 + // tinymce
344 + if ( get_user_option( 'rich_editing' ) == 'true' ) {
345 + // プラグイン内で使うCSRF を生成
346 + $path = plugins_url( 'codoc/src_mce/codoc-editor-onload.js', __DIR__ );
347 + wp_enqueue_script( 'codoc-editor-onload', $path, array('jquery'), '', true );
348 + // I just want to insert this global variables but i don't know how i can do it..
349 + wp_localize_script(
350 + 'codoc-editor-onload',
351 + 'CODOCEDITOR',
352 + array(
353 + 'action' => 'codoc_shortcodes',
354 + 'nonce' => wp_create_nonce( 'codoc_shortcodes' ),
355 +
356 + 'codoc_url' => CODOC_URL,
357 + 'codoc_usercode' => get_option(CODOC_USERCODE_OPTION_NAME),
358 + 'codoc_plugin_version' => CODOC_PLUGIN_VERSION,
359 + 'codoc_sdk_path' => CODOC_SDK_PATH,
360 + )
361 + );
358 362
359 - require 'views/codoc-shortcodes-list.php';
360 -
361 - wp_die();
362 - } );
363 - }
363 + // ここでtinymceのプラグイン追加
364 + //wp_enqueue_style( 'codoc-admin-style', plugins_url( 'codoc/src_mce/codoc-admin.css', __DIR__ ) );
365 + //add_editor_style( plugins_url( 'codoc/src_mce/codoc-admin.css', __DIR__ ) );
366 + wp_enqueue_style( 'codoc-admin-style', CODOC_URL . CODOC_SDK_PATH . '.tinymce.css?c=' . date('Ymd') );
367 + add_editor_style( CODOC_URL . CODOC_SDK_PATH . '.tinymce.css' );
368 +
369 + add_filter( 'mce_external_plugins', function( $plugin_array ) {
370 + //$plugin_array['codoc'] = plugins_url( 'codoc/src_mce/codoc-editor.js', __DIR__ );
371 + $plugin_array['codoc'] = CODOC_URL . CODOC_SDK_PATH . '.tinymce.js?c=' . date('Ymd');
372 + return $plugin_array;
373 + } );
374 + add_filter( 'mce_buttons', function( $buttons ) {
375 + array_push( $buttons, "|", "codoc" );
376 + return $buttons;
377 + } );
378 +
379 + }
380 + }
364 381 } );
365 382 }
366 383 public function save_post($post_ID,$post,$update) {
367 384 if (preg_match('/^(auto-draft|inherit)$/',$post->post_status)) {
@@ -366,55 +383,25 @@
366 383 public function save_post($post_ID,$post,$update) {
367 384 if (preg_match('/^(auto-draft|inherit)$/',$post->post_status)) {
368 385 return;
369 386 }
370 -
371 - $post_content = $post->post_content;
372 - preg_match('/wp:codoc\/codoc-block +?({.*})/',$post_content,$matches);
373 - // GUTENBERG で指定されたjson(記事情報)がない場合
374 - if (!$matches) {
375 - return;
376 - }
377 - // GUTENBERG で保存している内容を取得
378 - $codoc_info = json_decode($matches[1],true);
379 - // codoc タグがない場合はなにもしない
380 - preg_match('/(<span +data-id="codoc-tag"[^>]+>(?:.+|)<\/span>)/',$post_content,$matches);
381 - if (!$matches) {
382 - return;
383 - }
384 - // TODO: split or html parse? HTMLがつながってる場合はおかしくなる
385 - $splited = preg_split('/<\!-- +wp:codoc\/codoc-block .*<\!-- +\/wp:codoc\/codoc-block +-->/s',$post_content);
386 - $status = $post->post_status == 'publish' ? 1 : 0;
387 - # $body_free = '';
388 - # $body_paywalled = '';
389 - # if (count($splited) >= 2) {
390 - #
391 - # }
392 -
393 - $params = [
394 - 'title' => $post->post_title,
395 - 'body_free' => $splited[0],
396 - 'body_paywalled' => $splited[1],
397 - 'status' => $status,
398 - 'binded_url' => get_permalink($post_ID),
399 - 'show_price' => isset($codoc_info['showPrice']) ? ($codoc_info['showPrice'] ? 1 : 0) : 0,
400 - 'price' => isset($codoc_info['price']) ? $codoc_info['price'] : 100,
401 - 'limited' => isset($codoc_info['limited']) ? ($codoc_info['limited'] ? 1 : 0) : 0,
402 - 'limited_count' => isset($codoc_info['limitedCount']) ? $codoc_info['limitedCount'] : 1,
403 - 'affiliate_mode' => isset($codoc_info['affiliateMode']) ? ($codoc_info['affiliateMode'] ? 1 : 0) : 0,
404 - 'affiliate_rate' => isset($codoc_info['affiliateRate']) ? $codoc_info['affiliateRate'] : '0.0500',
405 - 'show_support' => isset($codoc_info['showSupport']) ? ($codoc_info['showSupport'] ? 1 : 0) : 0,
406 - 'subscriptions' => isset($codoc_info['subscriptions']) ? array_keys($codoc_info['subscriptions']) : [],
407 - ];
387 +
408 388 $entryCode = get_post_meta($post_ID,'codoc_entry_code',true);
409 - if ($entryCode) {
410 - $res = $this->callAPI('PUT','/entries/' . $entryCode ,$params);
411 - } else {
412 - $res = $this->callAPI('POST', '/entries', $params);
413 - if (is_object($res) and $res->status) {
414 - update_post_meta($post_ID,'codoc_entry_code',$res->entry->code);
415 - }
389 + $res = $this->util->sync_entry([
390 + "post_title" => $post->post_title,
391 + "post_content" => $post->post_content,
392 + "post_status" => ($post->post_status == 'publish' ? 1 : 0),
393 + "post_permalink" => get_permalink($post_ID),
394 + "codoc_entry_code" => $entryCode,
395 + ],[
396 + "usercode" => get_option(CODOC_USERCODE_OPTION_NAME),
397 + "token" => get_option(CODOC_TOKEN_OPTION_NAME),
398 + ]);
399 +
400 + if (is_object($res) and $res->status and !$entryCode) {
401 + update_post_meta($post_ID,'codoc_entry_code',$res->entry->code);
416 402 }
403 +
417 404 return true;
418 405 }
419 406 function updated_post_meta( $meta_ID, $post_ID, $meta_key ) {
420 407 if ($meta_key != '_thumbnail_id') {
@@ -423,35 +410,17 @@
423 410 if ( has_post_thumbnail($post_ID) ) {
424 411 $attachment = wp_get_attachment_metadata( get_post_thumbnail_id($post_ID));
425 412 $upload_dir = wp_upload_dir();
426 413 $file_path = sprintf ('%s/%s',$upload_dir['basedir'],$attachment['file']);
427 -
428 - if (is_readable($file_path)) {
429 - $name = 'file';
430 -
431 - $boundary = wp_generate_password(24);
432 -
433 - $payload = '';
434 - $payload .= '--' . $boundary;
435 - $payload .= "\r\n";
436 - $payload .= 'Content-Disposition: form-data; name="' . $name . '"; filename="' . basename( $file_path ) . '"' . "\r\n";
437 - $payload .= "Content-Type: application/octet-stream\r\n";
438 - $payload .= "Content-Transfer-Encoding: binary\r\n";
439 - $payload .= "\r\n";
440 - $payload .= file_get_contents( $file_path );
441 - $payload .= "\r\n";
442 -
443 - $payload .= '--' . $boundary . '--';
444 -
445 -
446 - $entryCode = get_post_meta($post_ID,'codoc_entry_code',true);
447 - $res = $this->callAPI(
448 - 'POST',
449 - '/entries/' . $entryCode . '/thumbnail',
450 - $payload,
451 - ['content-type' => 'multipart/form-data; boundary=' . $boundary]
452 - );
453 - }
414 +
415 + return $this->util->post_thumbnail([
416 + "file_path" => $file_path,
417 + "boundary" => wp_generate_password(24),
418 + "codoc_entry_code" => get_post_meta($post_ID,'codoc_entry_code',true),
419 + ],[
420 + "usercode" => get_option(CODOC_USERCODE_OPTION_NAME),
421 + "token" => get_option(CODOC_TOKEN_OPTION_NAME),
422 + ]);
454 423 }
455 424 }
456 425 function deleted_post_meta( $meta_ids, $post_ID, $meta_key,$meta_value ) {
457 426 if ($meta_key != '_thumbnail_id') {
@@ -456,39 +425,27 @@
456 425 function deleted_post_meta( $meta_ids, $post_ID, $meta_key,$meta_value ) {
457 426 if ($meta_key != '_thumbnail_id') {
458 427 return;
459 428 }
460 - $entryCode = get_post_meta($post_ID,'codoc_entry_code',true);
461 - $res = $this->callAPI(
462 - 'POST',
463 - '/entries/' . $entryCode . '/thumbnail',
464 - [ "reset" => 1 ]
465 - );
466 - }
429 + return $this->util->reset_thumbnail(
430 + ["codoc_entry_code" => get_post_meta($post_ID,'codoc_entry_code',true)],
431 + [
432 + "usercode" => get_option(CODOC_USERCODE_OPTION_NAME),
433 + "token" => get_option(CODOC_TOKEN_OPTION_NAME),
434 + ]
435 + );
436 + }
437 +
467 438 function the_content( $post_content ) {
468 - if ( is_single() && in_the_loop() && is_main_query() ) {
469 - }
470 - // codoc タグがあるかどうか
471 - preg_match('/(<span +data-id="codoc-tag[^>]+>(?:.+|)<\/span>)/',$post_content,$matches);
472 - // data-wp-plugin-ver が無いタグは分割しない
473 - if (!$matches) {
474 - return $post_content;
475 - }
476 - if ( is_preview() ) {
477 - return $post_content;
478 - }
479 - // codoc タグの前後で分ける
480 - $splited = preg_split('/<div><span data-id="codoc-tag" class="codoc-entries">(?:.+|)<\/span><\/div>/',$post_content);
481 - //$splited = preg_split('/<div +class="wp-block-codoc-codoc-block">.*<\/div>/s',$post_content);
482 - // codco タグにentrycodeをつける
439 + if ( is_single() && in_the_loop() && is_main_query() ) {
440 + }
483 441 $post = get_post();
484 - $entryCode = sprintf('"codoc-entry-%s" ',get_post_meta($post->ID,'codoc_entry_code',true));
485 - $codoc_tag = str_replace('span','span id=' . $entryCode, $matches[1]);
486 - // codoc タグに属性をつける
487 - $codoc_tag = str_replace('span','span data-without-body="1" ',$codoc_tag);
488 - // 無料部分のみ表示
489 - return $splited[0] . sprintf('<div class="wp-block-codoc-codoc-block">%s</div>',$codoc_tag);
442 + return $this->util->filter_content([
443 + "post_content" => $post_content,
444 + "preview" => is_preview(),
445 + "codoc_entry_code" => get_post_meta($post->ID,'codoc_entry_code',true),
446 + "codoc_settings" => get_option(CODOC_SETTINGS_OPTION_NAME),
447 + ]);
490 448 }
491 -
492 449
493 450 }
494 451