Changeset 2689189
- Timestamp:
- 03/05/2022 03:16:44 AM (3 years ago)
- Location:
- line-auto-post/trunk
- Files:
-
- 1 deleted
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
line-auto-post/trunk/line-auto-post.php
r2543176 r2689189 5 5 Plugin URI: https://s-page.biz/line-auto-post/ 6 6 Description: WordPressの投稿をLINE公式アカウント経由で連動配信することができるプラグインです。 7 Version: 1.0. 37 Version: 1.0.4 8 8 Author: growniche 9 9 Author URI: https://www.growniche.co.jp/ … … 19 19 * このプラグインのバージョン 20 20 */ 21 const VERSION = '1.0. 2';21 const VERSION = '1.0.4'; 22 22 23 23 /** … … 62 62 63 63 /** 64 * OPTIONSテーブルのキー:ChannelSecret65 */66 const OPTION_KEY__CHANNEL_SECRET = self::PLUGIN_PREFIX . 'channel-secret';67 68 /**69 64 * 画面のslug:トップ 70 65 */ … … 82 77 83 78 /** 84 * パラメータ名:ChannelSecret85 */86 const PARAMETER__CHANNEL_SECRET = self::PLUGIN_PREFIX . 'channel-secret';87 88 /**89 79 * パラメータ名:LINEメッセージ送信チェックボックス 90 80 */ … … 97 87 98 88 /** 99 * TRANSIENTキー(一時入力値):ChannelSecret ※4文字+41文字以下100 */101 const TRANSIENT_KEY__TEMP_CHANNEL_SECRET = self::PLUGIN_PREFIX . 'temp-channel-secret';102 103 /**104 89 * TRANSIENTキー(不正メッセージ):ChannelAccessToken 105 90 */ … … 107 92 108 93 /** 109 * TRANSIENTキー(不正メッセージ):ChannelSecret110 */111 const TRANSIENT_KEY__INVALID_CHANNEL_SECRET = self::PLUGIN_PREFIX . 'invalid-channel-secret';112 113 /**114 94 * TRANSIENTキー(エラー):LINEメッセージ送信失敗 115 95 */ … … 160 140 */ 161 141 const REGEXP_CHANNEL_ACCESS_TOKEN = '/^[a-zA-Z0-9+\/=]{100,}$/'; 162 /**163 * 正規表現:ChannelSecret164 */165 const REGEXP_CHANNEL_SECRET = '/^[a-z0-9]{30,}$/';166 142 167 143 /** … … 242 218 */ 243 219 static function getNotice($message, $type) { 244 return 220 return 245 221 '<div class="notice notice-' . $type . ' is-dismissible">' . 246 222 '<p><strong>' . esc_html($message) . '</strong></p>' . … … 265 241 // 投稿画面にチェックボックスを表示 266 242 add_action('add_meta_boxes', [$this, 'add_send_checkbox'], 10, 2 ); 243 // カスタム投稿の場合 244 $custom_post_slags = array_keys(get_post_types(array( 'line_auto_post' => true ))); 245 foreach ($custom_post_slags as $custom_post_slag) { 246 // カスタム投稿(公開)した時のコールバック関数を定義 247 add_action('publish_'.$custom_post_slag, [$this, 'send_to_line'], 1, 6); 248 } 267 249 } 268 250 // 管理画面を表示中、且つ、ログイン済、且つ、特権管理者or管理者or編集者or投稿者の場合 … … 291 273 'high' 292 274 ); 275 // カスタム投稿の場合 276 $custom_post_slags = array_keys(get_post_types(array( 'line_auto_post' => true ))); 277 foreach ($custom_post_slags as $custom_post_slag) { 278 add_meta_box( 279 // チェックボックスのID 280 self::PARAMETER__SEND_CHECKBOX, 281 // チェックボックスのラベル名 282 'LINEメッセージ送信', 283 // チェックボックスを表示するコールバック関数 284 [$this, 'show_send_checkbox'], 285 // カスタム投稿画面に表示 286 $custom_post_slag, 287 // 投稿画面の右サイドに表示 288 'advanced', 289 // 優先度(最優先) 290 'high' 291 ); 292 } 293 293 } 294 294 … … 328 328 // ChannelAccessTokenをOPTIONSテーブルから取得 329 329 $channel_access_token = self::decrypt(get_option(self::OPTION_KEY__CHANNEL_ACCESS_TOKEN), self::ENCRYPT_PASSWORD); 330 // ChannelSecretをOPTIONSテーブルから取得 331 $channel_secret = self::decrypt(get_option(self::OPTION_KEY__CHANNEL_SECRET), self::ENCRYPT_PASSWORD); 332 // ChannelAccessTokenとChannelSecretが設定されている場合 333 if (strlen($channel_access_token) > 0 && strlen($channel_secret) > 0) { 330 // ChannelAccessTokenが設定されている場合 331 if (strlen($channel_access_token) > 0) { 334 332 // 投稿のタイトルを取得 335 333 $title = sanitize_text_field($post->post_title); … … 348 346 $message = $title . "\r\n" . $body30 . "\r\n" . $link; 349 347 // LINEに送信 350 require_once( dirname(__FILE__).'/LINE/LINEBot/Response.php'); 351 require_once( dirname(__FILE__).'/LINE/LINEBot/HTTPClient/Curl.php'); 352 require_once( dirname(__FILE__).'/LINE/LINEBot/Constant/MessageType.php'); 353 require_once( dirname(__FILE__).'/LINE/LINEBot/MessageBuilder.php'); 354 require_once( dirname(__FILE__).'/LINE/LINEBot/Constant/Meta.php'); 355 require_once( dirname(__FILE__).'/LINE/LINEBot/HTTPClient.php'); 356 require_once( dirname(__FILE__).'/LINE/LINEBot/HTTPClient/CurlHTTPClient.php'); 357 require_once( dirname(__FILE__).'/LINE/LINEBot.php'); 358 require_once( dirname(__FILE__).'/LINE/LINEBot/MessageBuilder/TextMessageBuilder.php'); 359 $httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient($channel_access_token); 360 $bot = new \LINE\LINEBot($httpClient, ['channelSecret' => $channel_secret]); 361 $textMessageBuilder = new \LINE\LINEBot\MessageBuilder\TextMessageBuilder($message); 362 $response = $bot->broadcast($textMessageBuilder); 348 $contents = file_get_contents( 349 'https://api.line.me/v2/bot/message/broadcast', 350 false, 351 stream_context_create( 352 array( 353 'http' => array( 354 'method' => 'POST', 355 'header' => array( 356 'Content-Type: application/json;', 357 'Authorization: Bearer '.$channel_access_token 358 ), 359 'content' => json_encode( 360 array( 361 "messages" => array( 362 array( 363 "type" => "text", 364 "text" => $message 365 ) 366 ) 367 ) 368 ) 369 ) 370 ) 371 ) 372 ); 363 373 // 送信に成功した場合 364 if ($ response->getHTTPStatus() === 200) {374 if ($contents !== false) { 365 375 // LINE送信に成功した旨をTRANSIENTに5秒間保持 366 376 set_transient(self::TRANSIENT_KEY__SUCCESS_SEND_TO_LINE, 'LINEに送信しました', self::TRANSIENT_TIME_LIMIT); … … 468 478 $invalid_channel_access_token = self::getNotice($invalid_channel_access_token, self::NOTICE_TYPE__ERROR); 469 479 } 470 // ChannelSecretの不正メッセージ471 if (false !== ($invalid_channel_secret = get_transient(self::TRANSIENT_KEY__INVALID_CHANNEL_SECRET))) {472 $invalid_channel_secret = self::getNotice($invalid_channel_secret, self::NOTICE_TYPE__ERROR);473 }474 480 // ChannelAccessTokenのパラメータ名 475 481 $param_channel_access_token = self::PARAMETER__CHANNEL_ACCESS_TOKEN; 476 // ChannelSecretのパラメータ名477 $param_channel_secret = self::PARAMETER__CHANNEL_SECRET;478 482 // ChannelAccessTokenをTRANSIENTから取得 479 483 if (false === ($channel_access_token = get_transient(self::TRANSIENT_KEY__TEMP_CHANNEL_ACCESS_TOKEN))) { … … 482 486 } 483 487 $channel_access_token = esc_html($channel_access_token); 484 // ChannelSecretをTRANSIENTから取得485 if (false === ($channel_secret = get_transient(self::TRANSIENT_KEY__TEMP_CHANNEL_SECRET))) {486 // 無ければoptionsテーブルから取得487 $channel_secret = self::decrypt(get_option(self::OPTION_KEY__CHANNEL_SECRET), self::ENCRYPT_PASSWORD);488 }489 $channel_secret = esc_html($channel_secret);490 488 // nonceフィールドを生成・取得 491 489 $nonce_field = wp_nonce_field(self::CREDENTIAL_ACTION__SETTINGS_FORM, self::CREDENTIAL_NAME__SETTINGS_FORM, true, false); … … 498 496 {$complete_message} 499 497 {$invalid_channel_access_token} 500 {$invalid_channel_secret}501 498 <form action="" method='post' id="line-auto-post-settings-form"> 502 499 {$nonce_field} … … 504 501 <label for="{$param_channel_access_token}">Channel Access Token:</label> 505 502 <input type="text" name="{$param_channel_access_token}" value="{$channel_access_token}"/> 506 </p>507 <p>508 <label for="{$param_channel_secret}">Channel Secret:</label>509 <input type="text" name="{$param_channel_secret}" value="{$channel_secret}"/>510 503 </p> 511 504 {$submit_button} … … 525 518 // ChannelAccessTokenをPOSTから取得 526 519 $channel_access_token = trim(sanitize_text_field($_POST[self::PARAMETER__CHANNEL_ACCESS_TOKEN])); 527 // ChannelSecretをPOSTから取得528 $channel_secret = trim(sanitize_text_field($_POST[self::PARAMETER__CHANNEL_SECRET]));529 520 $valid = true; 530 521 // ChannelAccessTokenが正しくない場合 … … 535 526 $valid = false; 536 527 } 537 // ChannelSecretが正しくない場合 538 if (!preg_match(self::REGEXP_CHANNEL_SECRET, $channel_secret)) { 539 // ChannelSecretの設定し直しを促すメッセージをTRANSIENTに5秒間保持 540 set_transient(self::TRANSIENT_KEY__INVALID_CHANNEL_SECRET, "Channel Secret が正しくありません。", self::TRANSIENT_TIME_LIMIT); 541 // 有効フラグをFalse 542 $valid = false; 543 } 544 // 有効フラグがTrueの場合(ChannelAccessTokenとChannelSecretが入力されている場合) 528 // 有効フラグがTrueの場合(ChannelAccessTokenが入力されている場合) 545 529 if ($valid) { 546 530 // 保存処理 547 531 // ChannelAccessTokenをoptionsテーブルに保存 548 532 update_option(self::OPTION_KEY__CHANNEL_ACCESS_TOKEN, self::encrypt($channel_access_token, self::ENCRYPT_PASSWORD)); 549 // ChannelSecretをoptionsテーブルに保存550 update_option(self::OPTION_KEY__CHANNEL_SECRET, self::encrypt($channel_secret, self::ENCRYPT_PASSWORD));551 533 // 保存が完了したら、完了メッセージをTRANSIENTに5秒間保持 552 534 set_transient(self::TRANSIENT_KEY__SAVE_SETTINGS, "初期設定の保存が完了しました。", self::TRANSIENT_TIME_LIMIT); 553 535 // (一応)ChannelAccessTokenの不正メッセージをTRANSIENTから削除 554 536 delete_transient(self::TRANSIENT_KEY__INVALID_CHANNEL_ACCESS_TOKEN); 555 // (一応)ChannelSecretの不正メッセージをTRANSIENTから削除556 delete_transient(self::TRANSIENT_KEY__INVALID_CHANNEL_SECRET);557 537 // (一応)ユーザが入力したChannelAccessTokenをTRANSIENTから削除 558 538 delete_transient(self::TRANSIENT_KEY__TEMP_CHANNEL_ACCESS_TOKEN); 559 // (一応)ユーザが入力したChannelSecretをTRANSIENTから削除560 delete_transient(self::TRANSIENT_KEY__TEMP_CHANNEL_SECRET);561 539 } 562 // 有効フラグがFalseの場合(ChannelAccessToken 、ChannelSecretが入力されていない場合)540 // 有効フラグがFalseの場合(ChannelAccessTokenが入力されていない場合) 563 541 else { 564 542 // ユーザが入力したChannelAccessTokenをTRANSIENTに5秒間保持 565 543 set_transient(self::TRANSIENT_KEY__TEMP_CHANNEL_ACCESS_TOKEN, $channel_access_token, self::TRANSIENT_TIME_LIMIT); 566 // ユーザが入力したChannelSecretをTRANSIENTに5秒間保持567 set_transient(self::TRANSIENT_KEY__TEMP_CHANNEL_SECRET, $channel_secret, self::TRANSIENT_TIME_LIMIT);568 544 // (一応)初期設定の保存完了メッセージを削除 569 545 delete_transient(self::TRANSIENT_KEY__SAVE_SETTINGS); -
line-auto-post/trunk/readme.txt
r2543176 r2689189 27 27 28 28 == Frequently Asked Questions == 29 29 30 30 == Changelog == 31 31 … … 38 38 = 1.0.3 = 39 39 * 2021-06-06 WordPress 5.7.2 に対応 40 = 1.0.4 = 41 * 2022-03-05 LINE Messaging API SDK for PHP をやめて、直接 LINE Messaging API を利用(ChannelSecret不要) 42 * 2022-03-05 カスタム投稿に対応
Note: See TracChangeset
for help on using the changeset viewer.