プロジェクト

全般

プロフィール

Bug(バグ) #4055

完了

OpenPNE が http://example.com/sns/ のようにサブディレクトリ以下に設置されている場合に、通知センターからアクセスする日記やコミュニティのURLが正しくない

kaoru n さんがほぼ8年前に追加. 4年以上前に更新.

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

100%

予定工数:
(合計: 0:00時間)
3.6 で発生するか:
No (いいえ)
3.8 で発生するか:
Yes (はい)

説明

Overview (現象)

OpenPNE が http://example.com/sns/ のようにサブディレクトリ以下に設置されている場合に、通知センターから日記等にアクセスする場合、http://example.com/sns/diary/1 のようなURLになるべきであるが、http://example.com/diary/1 にアクセスしてしまう。

Causes (原因)

通知センターに表示される通知のリンク先は、opNotificationCenter::notify()url パラメーターによって指定される。
このパラメーターを実装した当初は diary/show?id=1@diary_show?id=1 のような url_for ヘルパーに指定するための Internal URI の形式を想定していた。
しかし、実際には誤った実装によって Internal URI での指定は正しく機能していない状態となっていた。
(opJsonApiHelper が実行されるのは api アプリケーションであるため、url_for ではなく app_url_for を呼び出すのが正しい)

source:apps/api/lib/helper/opJsonApiHelper.php@8205623#L203

    'url' => $notification['url'] ? url_for($notification['url'], array('abstract' => true)) : null,

通知センターによる通知機能を提供するプラグイン等では、上記の不具合を避けるために Internal URI ではなく /diary/1 などの URI を直接出力することで目的の URI へのリンクを実現している。

しかし、/diary/1 などの URI を指定した場合には、本来 url_forapp_url_for であれば自動的に付加されるサブディレクトリ部分の相対パス (sfWebRequest::getRelativeUrlRoot() に相当) が付加されないため、当チケットで報告されているような OpenPNE をサブディレクトリに設置した場合のリンクの不具合が生じる。

Way to fix (修正内容)

JSON API の /api.php/push/search.json の実装を修正し、opNotificationCenter::notify()url パラメーターに Internal URI が指定された場合でも正しく動作するようにする。この場合は、API 実行時にサブディレクトリを考慮した URI が生成されるものとする。

また、/diary/1 のような URI を直接 url パラメーターに指定していたプラグイン等との互換性を保つため、先頭が / から始まる URI であった場合には app_url_for ヘルパーを介さずに直接文字列を出力するように対応する。
この場合は、API 側ではサブディレクトリ部分の付加は行わずに出力する。これは、opLikePlugin のようにプラグイン側で独自にサブディレクトリ部分を付加した URI を url パラメーターに指定している実装が存在しており、一律な対応を執ることが困難なためである。


子チケット 3 (0件未完了3件完了)

Backport(バックポート) #4057: OpenPNE が http://example.com/sns/ のようにサブディレクトリ以下に設置されている場合に、通知センターからアクセスする日記やコミュニティのURLが正しくないInvalid(無効)isao sano2016-11-21

操作
Backport(バックポート) #4058: OpenPNE が http://example.com/sns/ のようにサブディレクトリ以下に設置されている場合に、通知センターからアクセスする日記やコミュニティのURLが正しくないFixed(完了)Youichi Kimura2016-11-21

操作
Backport(バックポート) #4379: OpenPNE が http://example.com/sns/ のようにサブディレクトリ以下に設置されている場合に、通知センターからアクセスする日記やコミュニティのURLが正しくないFixed(完了)isao sano2016-11-21

操作

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

関連している opLikePlugin - Enhancement(機能追加・改善) #4064: OpenPNE が http://example.com/sns/ のようにサブディレクトリ以下に設置されている場合に、通知センターからアクセスするURLが正しくない問題に対する opLikePlugin の独自修正を取り除くWon't fix(対応せず)kaoru n2016-12-02

操作

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