プロジェクト

全般

プロフィール

Backport(バックポート) #2718

完了

デイリーニュースにガジェットが追加されている場合、デイリーニュース配信タスク実行時にエラーになる

Yuya Watanabe さんがほぼ13年前に追加. ほぼ13年前に更新.

ステータス:
Fixed(完了)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2010-09-17
期日:
進捗率:

100%

予定工数:

説明

Overview (現象)

デイリーニュースに1つ以上ガジェットが登録されている場合、
デイリーニュース配信タスクを実行するとエラーが表示され、デイリーニュースが1通も送信されない。

実行するタスク
$./symfony openpne:send-daily-news
表示されるエラー
Call to undefined method myUser::getMember.

再現バージョン

OpenPNE
  • OpenPNE 3.7.0-dev
  • OpenPNE 3.6beta12
php
  • PHP 5.2.13
  • PHP 5.3.3
  • PHP 5.3.5

Causes (原因)

Way to fix (修正内容)

報告元

http://sns.openpne.jp/diary/25133 より転載

デイリーニュースが送れない、です。
PHP5.3.3の所為??それとも、3.7.0-devだから??

【環境】
Powered by OpenPNE 3.7.0-dev
# ./symfony plugin:list
Installed plugins:
symfony 1.4.6-stable
openpne 3.7.0dev-beta
opAuthMailAddressPlugin 1.3.1-devel
opAuthMobileUIDPlugin 1.3.0-devel
opAuthOpenIDPlugin 1.3.0-beta
opCommunityTopicPlugin 1.0.0.2-stable
opWebAPIPlugin 0.4.0-beta
opDiaryPlugin 1.3.1-beta
opBlogPlugin 1.0.1-stable
opOpenSocialPlugin 1.2.0.1-stable
opAshiatoPlugin 0.9.1-stable
opMessagePlugin 0.9.1-beta
opAlbumPlugin 0.9.4-beta
opIntroFriendPlugin 0.9.0.1-beta
opFavoritePlugin 1.0.0.3-beta
opRankingPlugin 1.0.0-beta

FreeBSD 7.2-RELEASE-p8
Apache/2.2.16 (FreeBSD)
PHP 5.3.3 with Suhosin-Patch Zend Engine v2.3.0
mysql 5.1.36

【現象】
コマンドラインで
#./symfony openpne:send-daily-news
を実行すると

Call to undefined method myUser::getMember.

というエラーがでて、デイリーニュースが送れない。

原因

下記コマンドを実行した時にデイリーニュース用のガジェットが表示可能かのロジックが正しくない.

  $ ./symfony openpne:send-daily-news

lib/task/openpneSendDailyNewsTask.class.php の下記部分が実行され,61 行目が実行される.

 27   protected function execute($arguments = array(), $options = array())
 28   {
...
 56       $filteredGadgets = array();
 57       if ($gadgets)
 58       {
 59         foreach ($gadgets as $gadget)
 60         {
 61           if ($gadget->isEnabled())
 62           {
 63             $filteredGadgets[] = array(
 64               'component' => array('module' => $gadget->getComponentModule(), 'action' => $gadget->getComponentAction()),
 65               'gadget' => $gadget,
 66               'member' => $member,
 67             );
 68           } 
 69         } 
 70       } 

ここで isEnabled() を見てみると,sfContext で得られる getUser() で使えるかどうかを決定している.しかし,タスクで実行しているためここで得られる User は実際にメールを送信したい Member を含む User ではなくタスクを実行した時の User (ここでは apps/api/lib/myUser.class.php )である.エラー自体はここで User から getMember() を呼び出すことができないという問題であるが,エラーが発生していなくても正しく動作しないものと思われる.

lib/model/doctrine/Gadget.class.php

 66   public function isEnabled()
 67   {
 68     $list = $this->getGadgetConfigList();
 69     if (empty($list[$this->name]))
 70     {
 71       return false;
 72     }
 73 
 74     $controller = sfContext::getInstance()->getController();
 75     if (!$controller->componentExists($this->getComponentModule(), $this->getComponentAction()))
 76     {
 77       return false;
 78     }
 79 
 80     $member = sfContext::getInstance()->getUser()->getMember();
 81     $isEnabled = $this->isAllowed($member, 'view');
 82 
 83     return $isEnabled;
 84   }


関連するチケット 1 (0件未完了1件完了)

関連している OpenPNE 3 - Bug(バグ) #1594: デイリーニュースにガジェットが追加されている場合、デイリーニュース配信タスク実行時にエラーになるFixed(完了)Yuya Watanabe2010-09-17

操作

他の形式にエクスポート: Atom PDF