Bug(バグ) #2354
完了デイリーニュース用のフレンド最新日記ガジェットが動作していない
100%
説明
このチケットで扱う内容¶
コア側のデイリーニュース機能において、管理画面からガジェットとして「フレンド最新日記」が選択できるが、これが機能していないためこのガジェットを取り除く。
修正前と修正後の違い¶
- 修正前
- (1) 管理画面 > デザイン設定 > ガジェット設定から、次のいずれかのリンクを辿り、「ガジェットを追加する」を押す
- デイリーニュース(PCメールアドレス向け)ガジェット設定
- デイリーニュース(携帯メールアドレス向け)ガジェット設定
- (2) 「フレンド最新日記」と「フリーエリア」のガジェットが選択できる
- (1) 管理画面 > デザイン設定 > ガジェット設定から、次のいずれかのリンクを辿り、「ガジェットを追加する」を押す
- 修正後
- (1) 上と同じ
- (2) 「フリーエリア」のガジェットしか選択できない(「フレンド最新日記」のガジェットが取り除かれている)
これが確認できれば動作テストは十分です。
なお、修正前に「フレンド最新日記」ガジェットを設定しておくと、修正後にガジェット設定を見たときにガジェット名が空のボックスが表示されてしまい、そのままガジェット設定を行うと空のボックスが消えるような動作となっている。
これは、「設定済みのガジェットが、ソースコードから取り除かれたりプラグインが無効化されることで使用不能になった場合に、ガジェット設定でその部分に空のボックスが表示されてしまう」という好ましくない動作であると考えられるが、このチケットで扱う必要のある内容ではないため、ここでは触れないことにする。
概要¶
デイリーニュース用のフレンド最新日記ガジェットについて、コンポーネント内でメンバー情報の呼び出しがおこなえておらず、表示できない。
そのため、デイリーニュースのコンテンツにフレンド最新日記が表示されなくなる。
問題の処理¶
lib/action/opDiaryPluginDiaryComponents.class.php
public function executeDailyNews() { $env = 'mobile_frontend' == sfConfig::get('sf_app') ? 'mobile' : 'pc'; $twigEnvironment = new Twig_Environment(new Twig_Loader_String()); $valueTpl = $twigEnvironment->loadTemplate(opDiaryPluginToolkit::getMailTemplate($env, 'diaryGagdet')); $diaries = Doctrine::getTable('Diary')->getFriendDiaryList($member['id'], 5);
$member['id'] という記述があるが、 $member は定義されていない。
エラーメッセージ¶
Notice: Undefined variable: member in /OPENPNE_DIR/plugins/opDiaryPlugin/lib/action/opDiaryPluginDiaryComponents.class.php on line 58 Call Stack: 0.0004 328340 1. {main}() /OPENPNE_DIR/symfony:0 0.0050 643024 2. include('/OPENPNE_DIR/symfony:37 0.2657 9905668 3. sfSymfonyCommandApplication->run() /OPENPNE_DIR/lib/vendor/symfony/lib/command/cli.php:20 0.2754 9907224 4. sfTask->runFromCLI() /OPENPNE_DIR/lib/vendor/symfony/lib/command/sfSymfonyCommandApplication.class.php:76 0.2755 9907360 5. sfBaseTask->doRun() /OPENPNE_DIR/lib/vendor/symfony/lib/task/sfTask.class.php:97 1.1033 10266872 6. openpneSendDailyNewsTask->execute() /OPENPNE_DIR/lib/vendor/symfony/lib/task/sfBaseTask.class.php:68 15.9389 62226780 7. opMailSend::sendTemplateMail() /OPENPNE_DIR/lib/task/openpneSendDailyNewsTask.class.php:80 15.9558 62269636 8. opMailSend::getMailTemplate() /OPENPNE_DIR/lib/util/opMailSend.class.php:136 15.9586 62299888 9. sfPartialView->render() /OPENPNE_DIR/lib/util/opMailSend.class.php:97 15.9587 62300172 10. sfTemplatingComponentPartialView->renderFile() /OPENPNE_DIR/lib/vendor/symfony/lib/view/sfPartialView.class.php:110 15.9624 62332708 11. sfTemplateEngine->render() /OPENPNE_DIR/plugins/sfSymfonyTemplatingViewPlugin/lib/view/sfTemplatingComponentPartialView.class.php:67 16.0613 62375024 12. opTemplateRendererTwig->evaluate() /OPENPNE_DIR/plugins/sfSymfonyTemplatingViewPlugin/lib/vendor/SymfonyTemplating/sfTemplateEngine.php:105 16.7483 63731628 13. sfTemplateRendererTwig->evaluate() /OPENPNE_DIR/lib/view/twig/opTemplateRendererTwig.php:26 16.7484 63732748 14. Twig_Template->render() /OPENPNE_DIR/plugins/sfSymfonyTemplatingViewPlugin/lib/renderer/sfTemplateRendererTwig.php:37 16.7484 63773784 15. __TwigTemplate_8ef0a9ac4eec4dede10f6c2551e2e3c1->display() /OPENPNE_DIR/plugins/sfSymfonyTemplatingViewPlugin/lib/vendor/Twig/Template.php:26 16.7511 63777580 16. include_component() /tmp/twig_174bde47fdf7da9ef29ac5a948b7003b/__TwigTemplate_8ef0a9ac4eec4dede10f6c2551e2e3c1.php:74 16.7511 63777580 17. get_component() /OPENPNE_DIR/lib/vendor/symfony/lib/helper/PartialHelper.php:115 16.7517 63781136 18. _call_component() /OPENPNE_DIR/lib/vendor/symfony/lib/helper/PartialHelper.php:148 16.7584 63811432 19. opDiaryPluginDiaryComponents->executeDailyNews() /OPENPNE_DIR/lib/vendor/symfony/lib/helper/PartialHelper.php:386
Minoru Takai さんが約13年前に更新
概要¶
コア側のデイリーニュース機能に対して、管理画面では「デイリーニュース」に対するガジェットを設定できます。現時点では「フリーエリア」と「フレンド最新日記」の 2 個が使えるようです。
しかし「フレンド最新日記」のガジェットは、「デイリーニュースにフレンドの最新日記を表示します」という説明に反し、機能していないようです。
この問題は、「機能すべき日記ガジェットが機能していない」と捉えるのではなく、「機能しない日記ガジェットが組み込まれている」と捉えることにします。ここでいう「日記ガジェット」とは「デイリーニュース用のフレンド最新日記ガジェット」を指します。
OpenPNE(それにバンドルされる opDiaryPlugin )として動作が保証される機能が動いていないと考えるべきではないのは、この機能を組み込んだ経緯が不適切で、この機能を取り込む必要性も見当たらないためです(*1)。つまり、もともとこの機能は動作が保証されているものではない、ということです。
(*1) #1029 がその対応チケットですが、実装方針やそのレビュー結果、動作の確認についての説明が一切ありません。
修正方針¶
この機能しないガジェットを OpenPNE (opDiaryPlugin) から取り除きます。
OpenPNE を利用する上で、管理画面側の操作でガジェットを設定した場合、その情報はDBに保存されます。今回のガジェットが存在している OpenPNE で「デイリーニュース用のフレンド最新日記ガジェット」を使用する設定にしたまま、今回の修正が取り込まれた opDiaryPlugin にバージョンアップした場合、存在しないガジェットのデータがDBにある状態になってしまいます。
この場合に問題が起こらないかを確認する必要がありますが、このケースは、「プラグイン側で定義されたガジェットを使用する設定にしておき、そのプラグインを外した状態」と同等の状況を意味しており、この場合に問題が起こらないようにコア側ではコードが書かれています。未知のガジェット情報がDBにある場合、それは無視される設計になっています(*2)。
(*2) config/gadget.yml に相当する YAML の記述が無い場合は Gadget::getGadgetConfigList() のリストにそのガジェットが含まれなくなり、DBにレコードがあってもそのガジェットは無かったものとして扱われます(Gadget::isEnabled() メソッドが false を返します)。
つまり、このガジェットを取り込んだ #1029 の修正を打ち消すことで対応できます。 (*2) により、最小範囲の修正として opDiaryPlugin/config/daily_news_gadget.yml を削除(または内容をコメントアウト)するだけでも対応できます。
実装の実態¶
#1029 のチケットでは日記ガジェットが追加されていますが、デイリーニュース向けのガジェットを作成し、ガジェット側で送信対象のメンバーの情報を参照することは現状のコア側のデイリーニュースの実装ではできません。
そのコア側の実装が改善されているわけでもないのに、日記ガジェット側では、あたかもメンバー情報が取得できている前提のコードが書かれており、結果として「常に動作しない」フレンド最新日記ガジェット機能が提供されてしまっています。
備考¶
#1029 での対応内容について、実装・レビュー・動作テストをした方がいて、「現状の実装のままでも、この機能は常に動作しないわけではなく、こうすれば動作する」といった情報がもしあれば提供してください。
Minoru Takai さんが約13年前に更新
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
https://github.com/balibali/opDiaryPlugin/pull/15 で pull request しました。
修正内容は、単に dcb0853c を revert しただけです(8ファイルほどありますが、内2ファイルが衝突したので git revert ではなく手動で行いました)。
Rimpei Ogawa さんが約13年前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
レビューOKです。
Yuma Sakata さんが約13年前に更新
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更
テストOKです。