Gucchiy / neo

0 stars 0 forks source link

ユーザー staffで「保存のみ」で記事がWordPress側に送られたので承認したときに送りたい #12

Closed genepine closed 3 years ago

genepine commented 3 years ago

kintone側 ユーザー staffで「保存のみ」した時点で記事がWordPress側に送られた。 Webhookの設定で「追加」を許可しているのが原因と思われる https://jp.cybozu.help/k/ja/user/app_settings/set_webhook/webhook.html#set_webhook_webhook_30 予想される対策 コメントの書き込み のみにチェックを付けて チーフがコメントをすることで通知、WordPress側に送る。 下記に通知を許可すればよいかもしれない

genepine commented 3 years ago

2 保存するとカテゴリはWPに送られるが、「提出」しないとWordPress側にタグが送られない

genepine commented 3 years ago

Kintone側アプリ管理権限がないユーザーの場合、保存、提出、承認してもWordPress側に送られないことを利用して、動作を実現できるかもしれません。 Kintone側ユーザー権限設定 staff アプリ管理権限なし chief アプリ管理権限あり このような設定で動作確認する Kintone側ユーザー権限設定について要調査。

genepine commented 3 years ago

確認手順です

  1. Kintone スタッフログイン
  2. WordPress 投稿者ログイン
  3. Kintone 日記を書き、保存
  4. WordPress 投稿一覧で投稿した日記が表示されるか確認 YES/NO YESの場合 NG NOの場合 そのまま、アカウント スタッフで提出する
  5. WordPress 投稿一覧で投稿した日記が表示されるか確認 YES/NO YESの場合 NG NOの場合 アカウント チーフに切り替え承認する
  6. WordPress 投稿一覧で投稿した日記が表示されるか確認 YES/NO YESの場合 OK NOの場合 WordPress側に投稿できなかったのでそもそもNG
Gucchiy commented 3 years ago

ステータス変更時には WebHook が呼び出されていないため、Kintone の承認機能は、そもそも PlugIn 側の想定になっていないことが分かりました。Publish Kintone Data のコードを確認し、ステータス変更(承認・非承認)の確認確認を入れ込むことができるか、まずは見積もります。

Gucchiy commented 3 years ago

以下の Publish kintone data コードに、ログ出力コードを入れました。 /home/neo-kintone/www/nkwp/wp-content/plugins/import-kintone pubish-kintone-data.pnp 631行目以降

    public function kintone_to_wp_start() {

        $update_kintone_data_json = file_get_contents( "php://input" );
        $update_kintone_data      = json_decode( $update_kintone_data_json, true );

        $debug_output_file = '/home/neo-kintone/www/nkwp/wp-content/plugins/import-kintone/debug.txt';

        error_log( "\n".date("Y/m/d H:i:s")." Web Hook 呼び出し\n", 3, $debug_output_file);
        error_log( var_export($update_kintone_data, true), 3, $debug_output_file);
        error_log( "\n", 3, $debug_output_file);

同フォルダに以下のように debug.txt が出力されます。これによって、WebHook が呼び出された際にどんなパラメータが与えられているかを監視することができます。

2020/11/20 10:04:03 Web Hook 呼び出し
array (
  'id' => '224db362-3d6f-43d3-a798-b02a4e3174fe',
  'type' => 'DELETE_RECORD',
  'app' => 
  array (
    'id' => '1',
    'name' => 'Kintone-WordPress-日記',
  ),
  'recordId' => '25',
  'deletedBy' => 
  array (
    'code' => 'staff',
    'name' => 'スタッフ ',
  ),
  'deletedAt' => '2020-11-20T10:04:00Z',
)
Gucchiy commented 3 years ago

いちいち、何かあった際に該当 debug.txt を FTP でダウンロードしても良いですが、ssh で sakura server にログインして、tail コマンドでリアルタイムに監視すると効率が良いです。ssh でログイン時、日本語が表示されるよう、以下のように初期設定します。debug.txt は UTF-8 です。

setenv LANG ja_JP.UTF-8
bash

リアルタイムで debug.txt の更新を監視するために以下のようにします。このようにすることで、Plug-in が呼び出されてログが更新されると、リアルタイムに更新文字列が表示されます。

cd /home/neo-kintone/www/nkwp/wp-content/plugins/import-kintone
tail -f debug.txt 
Gucchiy commented 3 years ago

さて、上記ログを仕掛けての検証・監視の結果、分かったことを列挙します。

Gucchiy commented 3 years ago

さらに実験を進めたところ、WebHook の「通知を送信する条件」のチェック状態に関係なく、書き込み・編集・削除の WebHook が呼び出されているように見えます。さらに悪いことには、ステータスの更新はチェックに関係なく呼び出されていません。不具合のような気がしたので、松野さんの問いかけにかぶせて追加質問してみています

Gucchiy commented 3 years ago

なんと、WebHook の設定含めて、Kintone の設定は「保存」では反映されず、最後に「アプリの更新」が必要とのこと。改めて確認したところ、正常に動作していることを確認しました。とりわけ、「ステータスの更新」も UPDATE_STATUS として、タイトル・コンテンツ等も送られて WebHook が呼び出されることを確認しました。カスタムで Plug In を作ってしまえば対応は可能であることが分かりました。

さらに実験を進めたところ、WebHook の「通知を送信する条件」のチェック状態に関係なく、書き込み・編集・削除の WebHook が呼び出されているように見えます。さらに悪いことには、ステータスの更新はチェックに関係なく呼び出されていません。不具合のような気がしたので、松野さんの問いかけにかぶせて追加質問してみています

Gucchiy commented 3 years ago

とりあえず、WebHook ハンドラ冒頭で、record のステータスが、「承認済み・WEB反映」以外の時は、以降の処理をスキップするようにしました。これで一通り動いているような気がするので、一旦、ご確認くださいませ。また、publish kintone data 作者様 によるアップデートがあると思いますので、当面は「手作業」でマージします。ゆくゆくは Git によるマージ、さらにゆくゆくは、GitHub → Azure Deploy と自動化するのが良いですね(本 Issue とは別件です)

    public function kintone_to_wp_start() {

        $update_kintone_data_json = file_get_contents( "php://input" );
        $update_kintone_data      = json_decode( $update_kintone_data_json, true );

        // Added by Gucchiy ---
        $debug_output_file = '/home/neo-kintone/www/nkwp/wp-content/plugins/import-kintone/debug.txt';

        error_log( "\n".date("Y/m/d H:i:s")." Web Hook 呼び出し\n", 3, $debug_output_file);
        error_log( var_export($update_kintone_data, true), 3, $debug_output_file);
        error_log( "\n", 3, $debug_output_file);
        error_log( "ステータス → ".$update_kintone_data['record']['ステータス']['value']."\n", 3, $debug_output_file);
        // --- Added by Gucchiy

        if ( $update_kintone_data['type'] == 'DELETE_RECORD' ) {

            $kintone_id = $update_kintone_data['recordId'];

        } else {

            // Added by Gucchiy ---
            if( strcmp( $update_kintone_data['record']['ステータス']['value'], '承認済み・WEB反映' ) != 0 ){

                error_log( "\n\n ==未承認処理== \n\n", 3, $debug_output_file);
                return;

            }
            // --- Added by Gucchiy

            $kintone_id = $update_kintone_data['record']['$id']['value'];

        }
Gucchiy commented 3 years ago

Sprint2 にて実装確認完了、クローズ