OpenPNE Issue Tracking System: チケット
http://redmine.openpne.jp/
http://redmine.openpne.jp/favicon.ico
2015-06-30T10:16:10Z
OpenPNE Issue Tracking System
Redmine
opCalendarPlugin - Bug(バグ) #3826 (Pending Testing(テスト待ち)): 存在しないメソッド sfContext::getMember() を呼びだそ...
http://redmine.openpne.jp/issues/3826
2015-06-30T10:16:10Z
Rimpei Ogawa
ogawa@tejimaya.com
<p>opCalendarPluginToolkit::updateGoogleCalendarCronFlags() の第三引数が null だった場合に呼ばれますが、現状のこのメソッド使用箇所では第三引数を明示的に指定しているようです。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"><span class="keyword">class</span> <span class="class">opCalendarPluginToolkit</span>
{
<span class="keyword">static</span> <span class="keyword">public</span> <span class="keyword">function</span> <span class="function">updateGoogleCalendarCronFlags</span>(<span class="local-variable">$cronFlag</span>, <span class="local-variable">$publicFlag</span>, <span class="constant">Member</span> <span class="local-variable">$member</span> = <span class="predefined-constant">null</span>)
{
<span class="keyword">if</span> (<span class="predefined-constant">null</span> === <span class="local-variable">$member</span>)
{
<span class="local-variable">$member</span> = sfContext::getInstance()->getMember();
}
</span></code></pre>
<p>おそらく <code>getUser()</code> が抜けただけだと思います。</p>
opCalendarPlugin - Bug(バグ) #3825 (Pending Testing(テスト待ち)): 管理画面のスケジュールリソース更新が必ずエラーになる
http://redmine.openpne.jp/issues/3825
2015-06-30T10:03:43Z
Rimpei Ogawa
ogawa@tejimaya.com
<p>管理画面のスケジュールリソース更新の部分で、CSRFトークンがテンプレートで出力されていないため必ずエラーとなり更新できない状態になっています。</p>
<p>エラーメッセージは、<br />「スケジュールリソースの更新に失敗しました」<br />としか表示されず(他の入力エラーも同様なのですが)、原因がわかりにくい状態になっています。</p>
opCalendarPlugin - Bug(バグ) #3824 (Pending Testing(テスト待ち)): スケジュール詳細画面で 'Schedule resource lock' が...
http://redmine.openpne.jp/issues/3824
2015-06-30T09:52:40Z
Rimpei Ogawa
ogawa@tejimaya.com
<p>スケジュール詳細画面で 'Schedule resource lock' が英語のまま表示されます。</p>
<p>apps/pc_frontend/modules/schedule/templates/_detailScheduleTable.php</p>
opCalendarPlugin - Bug(バグ) #3823 (Rejected(差し戻し)): カレンダーに関係ない部分に影響を与えるスタイル指定がある
http://redmine.openpne.jp/issues/3823
2015-06-30T09:36:44Z
Rimpei Ogawa
ogawa@tejimaya.com
<p>web/css/main.css にカレンダーに関係ない部分に影響を与えるスタイル指定があります。</p>
<pre>
* {
word-wrap: break-word;
}
</pre>
<p>このCSSファイルはカレンダー専用ページ以外でも読み込まれるため、このプラグインを入れている場合と入れていない場合で、カレンダーに関係ない部分の表示に差異が生じる可能性があります。</p>
opCalendarPlugin - Bug(バグ) #3821 (New(新規)): 管理画面コミュニティリストでカレンダー表示範囲設定が英語で翻訳されずに表示される
http://redmine.openpne.jp/issues/3821
2015-06-30T07:50:54Z
Rimpei Ogawa
ogawa@tejimaya.com
<p>管理画面コミュニティリストでカレンダー表示範囲設定(Calendar Show Flag)が、見出し・値ともに、日本語設定であっても英語のまま翻訳されずに表示されています。</p>
<p>Bug(バグ) <a class="issue tracker-1 status-1 priority-4 priority-default" title="Bug(バグ): 管理画面の翻訳が不十分である (New(新規))" href="http://redmine.openpne.jp/issues/2399">#2399</a>: 管理画面の翻訳が不十分である<br /><a class="external" href="https://redmine.openpne.jp/issues/2399">https://redmine.openpne.jp/issues/2399</a><br />に関連しますが、元チケットの <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): 国際化対応がされていない (Fixed(完了))" href="http://redmine.openpne.jp/issues/1575">#1575</a> の説明文にある日本語がベタ書きなっている問題とは別です。</p>
opCalendarPlugin - Bug(バグ) #3820 (New(新規)): コミュニティカレンダーを表示するとコミュニティ情報を表示しているテーブルのセル幅が変わってしまう
http://redmine.openpne.jp/issues/3820
2015-06-30T07:21:25Z
Rimpei Ogawa
ogawa@tejimaya.com
<p>コミュニティカレンダーを表示するとコミュニティ情報を表示しているテーブルのセル幅が変わってしまいます。</p>
<p>以下のとおり、表示しない場合に較べて見出し部分が広く、コンテンツ部分が狭くなっています。</p>
<table>
<tr>
<td> カレンダーなし </td>
<td> カレンダーあり </td>
</tr>
<tr>
<td style="vertical-align:top;"><img src="http://redmine.openpne.jp/attachments/download/600/no_calendar.png" style="width:220px;" alt="" /> </td>
<td style="vertical-align:top;"><img src="http://redmine.openpne.jp/attachments/download/601/calendar.png" style="width:220px;" alt="" /> </td>
</tr>
</table>
<p>どちらが見やすいかというようなことは別として、カレンダーの有無でカレンダー以外の部分の表示が変わってしまうのは問題だと思います。<br />また、コミュニティ説明文には小窓を入れることも可能となっており、カレンダーを表示した際にはほとんど見えなくなってしまう場合があります。</p>
opCalendarPlugin - Bug(バグ) #3819 (New(新規)): 設定変更の公開範囲のデフォルト値が通常のスケジュール追加に反映されない
http://redmine.openpne.jp/issues/3819
2015-06-30T06:40:48Z
Rimpei Ogawa
ogawa@tejimaya.com
<p>「設定変更」>「スケジュール設定」<br />から設定できる公開範囲のデフォルト値が、週間カレンダーや月間カレンダーからの通常のスケジュール追加に反映されません。</p>
<p>ソースコード上で設定値を使用しているのが opGoogleCalendarChoiceForm のみのようです。<br />仮に opGoogleCalendarChoiceForm のみに反映されるのが仕様であれば、そのような説明が必要になると思います。</p>
opCalendarPlugin - Bug(バグ) #3818 (Pending Review(レビュー待ち)): 管理画面スケジュールリソースの作成者名が正しくエスケープされていない
http://redmine.openpne.jp/issues/3818
2015-06-30T06:29:52Z
Rimpei Ogawa
ogawa@tejimaya.com
<p>管理画面スケジュールリソースの作成者名が正しくエスケープされずに出力されています。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"><span class="inline-delimiter"><?php</span> <span class="predefined">echo</span> get_auther_name(<span class="local-variable">$scheduleResourceForm</span>->getObject(), <span class="predefined-constant">true</span>) <span class="inline-delimiter">?></span>
</span></code></pre>
<p>Form 由来の変数であるため、自動エスケープの対象外となっています。</p>
<p>現行の機能の範囲内ではスケジュールリソースを作成できるのは管理者のみでその管理者の名前が出力されるだけですが、データ構造上はメンバーの名前が表示される可能性を持っているため、将来的な機能追加やカスタマイズを考慮すれば重要度は高いです。</p>
opCalendarPlugin - Bug(バグ) #3815 (Pending Testing(テスト待ち)): ルーティングの sf_method 指定が有効になっていない箇所がある
http://redmine.openpne.jp/issues/3815
2015-06-30T06:04:59Z
Rimpei Ogawa
ogawa@tejimaya.com
<p>routing.yml で sf_method を指定している箇所がありますが、class 指定を合わせて行っていない箇所ではメソッドの制限は有効になっていません。</p>
<p>クラスの指定がない場合、デフォルトの sfRoute クラスが使用されますが、sfRoute では sf_method 指定は無視されます。<br />sf_method 指定を有効にする場合、sfRequestRoute かその派生クラスを合わせて指定する必要があります。</p>
opSkinThemePlugin - Task(タスク) #3748 (New(新規)): 各テーマの bootstrap.css ファイルに配色以外の差分が多数存在する
http://redmine.openpne.jp/issues/3748
2014-12-16T08:24:14Z
Rimpei Ogawa
ogawa@tejimaya.com
<p>Bootstrap 2.3.2 を使用している点は共通していますが、配色以外の部分で差分が多数あり、どこまでが意図的にテーマ用にカスタマイズされた指定かがわかりにくい状態となっています。</p>
<p>スマートフォン対応や、将来的に他の拡張をする際に障害となる可能性があるため、課題としてチケットを作成しておきます。</p>
OpenPNE 3 - Backport(バックポート) #3297 (New(新規)): ログインフォームの next_uri に特定の値を渡した場合に500エラーとなる
http://redmine.openpne.jp/issues/3297
2013-01-15T04:26:12Z
Rimpei Ogawa
ogawa@tejimaya.com
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>ログインフォームには認証後に遷移する URL を引き継ぐために next_uri という名前の hidden フィールドが用意されています。<br />この next_uri に特定の不正な値を指定した状態でログイン操作を行うと認証成功時に 500 エラーとなります。</p>
<p>なお、next_uri の値の改変は input[type="hidden"] の値を書き換えるか、もしくは、 <a class="issue tracker-1 status-13 priority-4 priority-default closed" title="Bug(バグ): http のWeb全体に公開が可能な画面に https のログイン画面を経由してアクセスしようとするとログインに失敗する (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3073">#3073</a> の修正以後であれば <code>/member/login?next_uri=XXXXX</code> のURLパラメーターを与えれば可能です。</p>
<p>prod 環境で表示されるエラーメッセージ<br /><pre>
現在、サーバが混み合っているか、メンテナンス中です。
ご迷惑をおかけいたしますが、しばらく時間を空けて再度アクセスしてください。
</pre></p>
<p>dev 環境で表示されるエラーメッセージ<br /><pre>
500 | Internal Server Error | sfConfigurationException
The route "foobar" does not exist.
</pre></p>
<p>また、 next_uri の値によっては 500 エラーとはならないが、不自然な挙動をするものもあります。</p>
<p>next_uri の値の例:</p>
<table>
<tr>
<th>next_uri </th>
<th>リダイレクト先 </th>
<th>エラー </th>
<th>備考 </th>
</tr>
<tr>
<td> <code>foobar</code> </td>
<td> なし </td>
<td> 500 エラー </td>
<td> リダイレクトできずに500エラー </td>
</tr>
<tr>
<td> <code>foo/bar</code> </td>
<td> <code>/foo/bar</code> </td>
<td> 404 エラー </td>
<td> エラーだが自然な動作 </td>
</tr>
<tr>
<td> <code>/foo</code> </td>
<td> <code>/foo</code> (※) </td>
<td> 404 エラー </td>
<td> ※OpenPNE.yml の base_url のパスも消える </td>
</tr>
<tr>
<td> <code>/foo/bar</code> </td>
<td> <code>/foo/bar</code> (※) </td>
<td> 404 エラー </td>
<td> ※OpenPNE.yml の base_url のパスも消える </td>
</tr>
<tr>
<td> <code>foo/bar/baz</code> </td>
<td> <code>/foo/bar</code> </td>
<td> 404 エラー </td>
<td> "/baz" の情報がなくなっている </td>
</tr>
<tr>
<td> <code>foo/bar?baz=qux</code> </td>
<td> <code>/foo/bar/baz/qux</code> </td>
<td> 404 エラー </td>
<td> URLの形式が変わっている </td>
</tr>
<tr>
<td> (空の値) </td>
<td> <code>/</code> </td>
<td> なし </td>
<td></td>
</tr>
<tr>
<td> <code>http://example.com</code> </td>
<td> <code>/</code> </td>
<td> なし </td>
<td></td>
</tr>
<tr>
<td> <code>member_config_image</code> </td>
<td> <code>/member/image/config</code> </td>
<td> なし </td>
<td></td>
</tr>
<tr>
<td> <code>@member_config_image</code> </td>
<td> <code>/member/image/config</code> </td>
<td> なし </td>
<td></td>
</tr>
<tr>
<td> <code>member/image/config</code> </td>
<td> <code>/member/image</code> </td>
<td> 404 エラー </td>
<td> "/config" の情報がなくなっている </td>
</tr>
<tr>
<td> <code>member/config/image</code> </td>
<td> <code>/member/config</code> </td>
<td> なし </td>
<td> 意図とは別のURLへリダイレクトしている </td>
</tr>
</table>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>※以下では、symfony 内部で利用するための独自のURL形式を <strong>内部URL形式</strong> 、ブラウザからアクセスする際のURLに利用されるものを <strong>外部URL形式</strong> と呼びます。(ここでは外部サイトを指す URL のことではありません)</p>
<p>この問題はログイン情報POST時に next_uri の入力をチェックする opValidatorNextUri が routing->findRoute() で <strong>外部URL形式</strong> からルートを探している一方で、ログイン成功後のリダイレクト処理で使われている sfAction::redirect() から呼ばれる sfWebController::genUrl() では <strong>内部URL形式</strong> で next_uri の値を扱っていることにより発生しています。</p>
<p>現行の実装では next_uri の値を生成する opWidgetFormInputHiddenNextUri は、routing->getCurrentInternalUri() としているため <strong>内部URL形式</strong> (かつ <code>:module/:action?parameters..</code> の形式)の値をフォームに設定しています。</p>
<p>例えば、next_uri=foobar は opValidatorNextUri 内の findRoute() 時点で以下のルーティングルールとマッチするために、バリデーションをパスしています。</p>
<pre>
array(3) {
["name"]=>
string(13) "default_index"
["pattern"]=>
string(8) "/:module"
["parameters"]=>
array(3) {
["module"]=>
string(6) "foobar"
["action"]=>
string(5) "index"
["sf_culture"]=>
string(5) "ja_JP"
}
}
</pre>
<p>一方、sfWebController::genUrl() は <code>foobar</code> を module_name ではなく route_name と扱ってしまうため、例外が発生します。</p>
<pre>
The route "foobar" does not exist.
</pre>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>(※修正内容が確定したら書き換えてください)</p>
<p>修正方針についての参考情報を記します。</p>
<p>next_uri の役割は、未ログイン状態のユーザーがログイン後に最初にアクセスした URL と同じ URL へ遷移させることであると考えられるため、next_uri の値は 外部URL形式 とするのが自然だと思われます。</p>
<p>一方で、next_uri の役割をユーザーが最初にアクセスした "URL" ではなく "アクション" へ遷移させることと考えれば、 内部URL形式 であっても目的を果たせることになります。しかし、next_uri の値はユーザーが書き換え可能な状態に置かれるものであるため、システム内部で利用するための値を露出させるのはあまり得策ではないとも考えられます。</p>
<p>従って、修正は next_uri を一貫して 外部URL形式 で扱うようにするのがよいのではないかと思います。</p>
<p>next_uri を 内部URL形式 で扱う方針にした場合でも、opValidatorNextUri の修正が必要です。</p>
<a name="参考情報"></a>
<h3 >参考情報<a href="#参考情報" class="wiki-anchor">¶</a></h3>
<p><a class="issue tracker-1 status-13 priority-4 priority-default closed" title="Bug(バグ): http のWeb全体に公開が可能な画面に https のログイン画面を経由してアクセスしようとするとログインに失敗する (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3073">#3073</a> のレビュー中に発見して <a href="/issues/3073#note-18">note-18</a> で最初に報告したものです。</p>
OpenPNE 3 - Backport(バックポート) #3296 (New(新規)): ログインフォームの next_uri に特定の値を渡した場合に500エラーとなる
http://redmine.openpne.jp/issues/3296
2013-01-15T04:25:38Z
Rimpei Ogawa
ogawa@tejimaya.com
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>ログインフォームには認証後に遷移する URL を引き継ぐために next_uri という名前の hidden フィールドが用意されています。<br />この next_uri に特定の不正な値を指定した状態でログイン操作を行うと認証成功時に 500 エラーとなります。</p>
<p>なお、next_uri の値の改変は input[type="hidden"] の値を書き換えるか、もしくは、 <a class="issue tracker-1 status-13 priority-4 priority-default closed" title="Bug(バグ): http のWeb全体に公開が可能な画面に https のログイン画面を経由してアクセスしようとするとログインに失敗する (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3073">#3073</a> の修正以後であれば <code>/member/login?next_uri=XXXXX</code> のURLパラメーターを与えれば可能です。</p>
<p>prod 環境で表示されるエラーメッセージ<br /><pre>
現在、サーバが混み合っているか、メンテナンス中です。
ご迷惑をおかけいたしますが、しばらく時間を空けて再度アクセスしてください。
</pre></p>
<p>dev 環境で表示されるエラーメッセージ<br /><pre>
500 | Internal Server Error | sfConfigurationException
The route "foobar" does not exist.
</pre></p>
<p>また、 next_uri の値によっては 500 エラーとはならないが、不自然な挙動をするものもあります。</p>
<p>next_uri の値の例:</p>
<table>
<tr>
<th>next_uri </th>
<th>リダイレクト先 </th>
<th>エラー </th>
<th>備考 </th>
</tr>
<tr>
<td> <code>foobar</code> </td>
<td> なし </td>
<td> 500 エラー </td>
<td> リダイレクトできずに500エラー </td>
</tr>
<tr>
<td> <code>foo/bar</code> </td>
<td> <code>/foo/bar</code> </td>
<td> 404 エラー </td>
<td> エラーだが自然な動作 </td>
</tr>
<tr>
<td> <code>/foo</code> </td>
<td> <code>/foo</code> (※) </td>
<td> 404 エラー </td>
<td> ※OpenPNE.yml の base_url のパスも消える </td>
</tr>
<tr>
<td> <code>/foo/bar</code> </td>
<td> <code>/foo/bar</code> (※) </td>
<td> 404 エラー </td>
<td> ※OpenPNE.yml の base_url のパスも消える </td>
</tr>
<tr>
<td> <code>foo/bar/baz</code> </td>
<td> <code>/foo/bar</code> </td>
<td> 404 エラー </td>
<td> "/baz" の情報がなくなっている </td>
</tr>
<tr>
<td> <code>foo/bar?baz=qux</code> </td>
<td> <code>/foo/bar/baz/qux</code> </td>
<td> 404 エラー </td>
<td> URLの形式が変わっている </td>
</tr>
<tr>
<td> (空の値) </td>
<td> <code>/</code> </td>
<td> なし </td>
<td></td>
</tr>
<tr>
<td> <code>http://example.com</code> </td>
<td> <code>/</code> </td>
<td> なし </td>
<td></td>
</tr>
<tr>
<td> <code>member_config_image</code> </td>
<td> <code>/member/image/config</code> </td>
<td> なし </td>
<td></td>
</tr>
<tr>
<td> <code>@member_config_image</code> </td>
<td> <code>/member/image/config</code> </td>
<td> なし </td>
<td></td>
</tr>
<tr>
<td> <code>member/image/config</code> </td>
<td> <code>/member/image</code> </td>
<td> 404 エラー </td>
<td> "/config" の情報がなくなっている </td>
</tr>
<tr>
<td> <code>member/config/image</code> </td>
<td> <code>/member/config</code> </td>
<td> なし </td>
<td> 意図とは別のURLへリダイレクトしている </td>
</tr>
</table>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>※以下では、symfony 内部で利用するための独自のURL形式を <strong>内部URL形式</strong> 、ブラウザからアクセスする際のURLに利用されるものを <strong>外部URL形式</strong> と呼びます。(ここでは外部サイトを指す URL のことではありません)</p>
<p>この問題はログイン情報POST時に next_uri の入力をチェックする opValidatorNextUri が routing->findRoute() で <strong>外部URL形式</strong> からルートを探している一方で、ログイン成功後のリダイレクト処理で使われている sfAction::redirect() から呼ばれる sfWebController::genUrl() では <strong>内部URL形式</strong> で next_uri の値を扱っていることにより発生しています。</p>
<p>現行の実装では next_uri の値を生成する opWidgetFormInputHiddenNextUri は、routing->getCurrentInternalUri() としているため <strong>内部URL形式</strong> (かつ <code>:module/:action?parameters..</code> の形式)の値をフォームに設定しています。</p>
<p>例えば、next_uri=foobar は opValidatorNextUri 内の findRoute() 時点で以下のルーティングルールとマッチするために、バリデーションをパスしています。</p>
<pre>
array(3) {
["name"]=>
string(13) "default_index"
["pattern"]=>
string(8) "/:module"
["parameters"]=>
array(3) {
["module"]=>
string(6) "foobar"
["action"]=>
string(5) "index"
["sf_culture"]=>
string(5) "ja_JP"
}
}
</pre>
<p>一方、sfWebController::genUrl() は <code>foobar</code> を module_name ではなく route_name と扱ってしまうため、例外が発生します。</p>
<pre>
The route "foobar" does not exist.
</pre>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>(※修正内容が確定したら書き換えてください)</p>
<p>修正方針についての参考情報を記します。</p>
<p>next_uri の役割は、未ログイン状態のユーザーがログイン後に最初にアクセスした URL と同じ URL へ遷移させることであると考えられるため、next_uri の値は 外部URL形式 とするのが自然だと思われます。</p>
<p>一方で、next_uri の役割をユーザーが最初にアクセスした "URL" ではなく "アクション" へ遷移させることと考えれば、 内部URL形式 であっても目的を果たせることになります。しかし、next_uri の値はユーザーが書き換え可能な状態に置かれるものであるため、システム内部で利用するための値を露出させるのはあまり得策ではないとも考えられます。</p>
<p>従って、修正は next_uri を一貫して 外部URL形式 で扱うようにするのがよいのではないかと思います。</p>
<p>next_uri を 内部URL形式 で扱う方針にした場合でも、opValidatorNextUri の修正が必要です。</p>
<a name="参考情報"></a>
<h3 >参考情報<a href="#参考情報" class="wiki-anchor">¶</a></h3>
<p><a class="issue tracker-1 status-13 priority-4 priority-default closed" title="Bug(バグ): http のWeb全体に公開が可能な画面に https のログイン画面を経由してアクセスしようとするとログインに失敗する (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3073">#3073</a> のレビュー中に発見して <a href="/issues/3073#note-18">note-18</a> で最初に報告したものです。</p>
OpenPNE 3 - Bug(バグ) #3295 (New(新規)): ログインフォームの next_uri に特定の値を渡した場合に500エラーとなる
http://redmine.openpne.jp/issues/3295
2013-01-15T04:23:04Z
Rimpei Ogawa
ogawa@tejimaya.com
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>ログインフォームには認証後に遷移する URL を引き継ぐために next_uri という名前の hidden フィールドが用意されています。<br />この next_uri に特定の不正な値を指定した状態でログイン操作を行うと認証成功時に 500 エラーとなります。</p>
<p>なお、next_uri の値の改変は input[type="hidden"] の値を書き換えるか、もしくは、 <a class="issue tracker-1 status-13 priority-4 priority-default closed" title="Bug(バグ): http のWeb全体に公開が可能な画面に https のログイン画面を経由してアクセスしようとするとログインに失敗する (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3073">#3073</a> の修正以後であれば <code>/member/login?next_uri=XXXXX</code> のURLパラメーターを与えれば可能です。</p>
<p>prod 環境で表示されるエラーメッセージ<br /><pre>
現在、サーバが混み合っているか、メンテナンス中です。
ご迷惑をおかけいたしますが、しばらく時間を空けて再度アクセスしてください。
</pre></p>
<p>dev 環境で表示されるエラーメッセージ<br /><pre>
500 | Internal Server Error | sfConfigurationException
The route "foobar" does not exist.
</pre></p>
<p>また、 next_uri の値によっては 500 エラーとはならないが、不自然な挙動をするものもあります。</p>
<p>next_uri の値の例:</p>
<table>
<tr>
<th>next_uri </th>
<th>リダイレクト先 </th>
<th>エラー </th>
<th>備考 </th>
</tr>
<tr>
<td> <code>foobar</code> </td>
<td> なし </td>
<td> 500 エラー </td>
<td> リダイレクトできずに500エラー </td>
</tr>
<tr>
<td> <code>foo/bar</code> </td>
<td> <code>/foo/bar</code> </td>
<td> 404 エラー </td>
<td> エラーだが自然な動作 </td>
</tr>
<tr>
<td> <code>/foo</code> </td>
<td> <code>/foo</code> (※) </td>
<td> 404 エラー </td>
<td> ※OpenPNE.yml の base_url のパスも消える </td>
</tr>
<tr>
<td> <code>/foo/bar</code> </td>
<td> <code>/foo/bar</code> (※) </td>
<td> 404 エラー </td>
<td> ※OpenPNE.yml の base_url のパスも消える </td>
</tr>
<tr>
<td> <code>foo/bar/baz</code> </td>
<td> <code>/foo/bar</code> </td>
<td> 404 エラー </td>
<td> "/baz" の情報がなくなっている </td>
</tr>
<tr>
<td> <code>foo/bar?baz=qux</code> </td>
<td> <code>/foo/bar/baz/qux</code> </td>
<td> 404 エラー </td>
<td> URLの形式が変わっている </td>
</tr>
<tr>
<td> (空の値) </td>
<td> <code>/</code> </td>
<td> なし </td>
<td></td>
</tr>
<tr>
<td> <code>http://example.com</code> </td>
<td> <code>/</code> </td>
<td> なし </td>
<td></td>
</tr>
<tr>
<td> <code>member_config_image</code> </td>
<td> <code>/member/image/config</code> </td>
<td> なし </td>
<td></td>
</tr>
<tr>
<td> <code>@member_config_image</code> </td>
<td> <code>/member/image/config</code> </td>
<td> なし </td>
<td></td>
</tr>
<tr>
<td> <code>member/image/config</code> </td>
<td> <code>/member/image</code> </td>
<td> 404 エラー </td>
<td> "/config" の情報がなくなっている </td>
</tr>
<tr>
<td> <code>member/config/image</code> </td>
<td> <code>/member/config</code> </td>
<td> なし </td>
<td> 意図とは別のURLへリダイレクトしている </td>
</tr>
</table>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>※以下では、symfony 内部で利用するための独自のURL形式を <strong>内部URL形式</strong> 、ブラウザからアクセスする際のURLに利用されるものを <strong>外部URL形式</strong> と呼びます。(ここでは外部サイトを指す URL のことではありません)</p>
<p>この問題はログイン情報POST時に next_uri の入力をチェックする opValidatorNextUri が routing->findRoute() で <strong>外部URL形式</strong> からルートを探している一方で、ログイン成功後のリダイレクト処理で使われている sfAction::redirect() から呼ばれる sfWebController::genUrl() では <strong>内部URL形式</strong> で next_uri の値を扱っていることにより発生しています。</p>
<p>現行の実装では next_uri の値を生成する opWidgetFormInputHiddenNextUri は、routing->getCurrentInternalUri() としているため <strong>内部URL形式</strong> (かつ <code>:module/:action?parameters..</code> の形式)の値をフォームに設定しています。</p>
<p>例えば、next_uri=foobar は opValidatorNextUri 内の findRoute() 時点で以下のルーティングルールとマッチするために、バリデーションをパスしています。</p>
<pre>
array(3) {
["name"]=>
string(13) "default_index"
["pattern"]=>
string(8) "/:module"
["parameters"]=>
array(3) {
["module"]=>
string(6) "foobar"
["action"]=>
string(5) "index"
["sf_culture"]=>
string(5) "ja_JP"
}
}
</pre>
<p>一方、sfWebController::genUrl() は <code>foobar</code> を module_name ではなく route_name と扱ってしまうため、例外が発生します。</p>
<pre>
The route "foobar" does not exist.
</pre>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>(※修正内容が確定したら書き換えてください)</p>
<p>修正方針についての参考情報を記します。</p>
<p>next_uri の役割は、未ログイン状態のユーザーがログイン後に最初にアクセスした URL と同じ URL へ遷移させることであると考えられるため、next_uri の値は 外部URL形式 とするのが自然だと思われます。</p>
<p>一方で、next_uri の役割をユーザーが最初にアクセスした "URL" ではなく "アクション" へ遷移させることと考えれば、 内部URL形式 であっても目的を果たせることになります。しかし、next_uri の値はユーザーが書き換え可能な状態に置かれるものであるため、システム内部で利用するための値を露出させるのはあまり得策ではないとも考えられます。</p>
<p>従って、修正は next_uri を一貫して 外部URL形式 で扱うようにするのがよいのではないかと思います。</p>
<p>next_uri を 内部URL形式 で扱う方針にした場合でも、opValidatorNextUri の修正が必要です。</p>
<a name="参考情報"></a>
<h3 >参考情報<a href="#参考情報" class="wiki-anchor">¶</a></h3>
<p><a class="issue tracker-1 status-13 priority-4 priority-default closed" title="Bug(バグ): http のWeb全体に公開が可能な画面に https のログイン画面を経由してアクセスしようとするとログインに失敗する (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3073">#3073</a> のレビュー中に発見して <a href="/issues/3073#note-18">note-18</a> で最初に報告したものです。</p>
OpenPNE 3 - Bug(バグ) #3135 (New(新規)): サブクエリのWHERE節に「field IN ?」の形式のDQLがあると Invalid parameter numbe...
http://redmine.openpne.jp/issues/3135
2012-07-27T07:13:19Z
Rimpei Ogawa
ogawa@tejimaya.com
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>Doctrine でサブクエリの WHERE 節に <code>filed IN ?</code> の形式のものがあると、 DQL から SQL を生成する際に Invalid parameter number のエラーが発生する。</p>
<pre>
SELECT 〜 WHERE field = (SELECT field FROM table WHERE field IN ?);
</pre>
<pre>
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
</pre>
<p>次のようにパラメーター数分の <code>?</code> が DQL 時点で展開されている場合はエラーは発生しない。</p>
<pre>
SELECT 〜 WHERE field = (SELECT field FROM table WHERE field IN (?, ?, ?));
</pre>
<p>具体的には以下のようなコードでエラーが発生する。</p>
<p><strong>例1</strong> : サブクエリの生成に andWhereIn() を利用する場合<br /><pre>
opActivateBehavior::disable(); // あってもなくてもエラー
$q = Doctrine_Core::getTable('MemberConfig')->createQuery('c');
$q2 = $q->createSubquery()
->select('m.id')
->from('Member m')
->andWhereIn('m.id', array('1', '2'));
$q->andWhere('c.member_id IN ('.$q2->getDql().')');
$q->execute();
</pre></p>
<p><strong>例2</strong> : サブクエリを手動で記述する場合<br /><pre>
opActivateBehavior::disable(); // あってもなくてもエラー
$q = Doctrine_Core::getTable('MemberConfig')->createQuery('c');
$q->andWhere('c.member_id IN (SELECT m.id FROM Member m WHERE m.id IN ?)', array(array('1', '2')));
$q->execute();
</pre></p>
<p>※ただし、上の2つの例は APC のキャッシュが有効な状態では2回目以降のアクセスで成功していた</p>
<p>本問題は基本的には Doctrine のバグである可能性が高いが、例1 に関しては opDoctrineQuery を利用しない場合はエラーが発生しないため、OpenPNE の問題とも考えられる可能性がある。</p>
<p>本問題は <a class="issue tracker-1 status-13 priority-4 priority-default closed" title="Bug(バグ): activity/community.json 実行時にDoctrineでエラーが発生する場合がある (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3052">#3052</a> の調査中に発見した。(#3052 は 例1 のケースに該当する)</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>DQL から SQL を生成するタイミングで <code>filed IN ?</code> の形式は、 <code>field IN (?, ?, ?)</code> のようにパラメーター配列の要素数に応じた形式に変換されるが、サブクエリ内の変換処理を行なう際にパラメーターを正しく扱えていないようで、要素数を間違ったり、パラメーターが展開されなかったりでエラーになる。</p>
<p>opDoctrineQuery::andWhereIn() は、パフォーマンスチューニングのため <code>filed IN ?</code> の形式の DQL を生成するが (<a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): [Optimization] Doctrine_Query::andWhereIn() add inefficient conditions to a DQL (Doctrine_Query::... (Fixed(完了))" href="http://redmine.openpne.jp/issues/991">#991</a>)、親クラスの Doctrine_Query_Abstract::andWhereIn() をそのまま使う場合は DQL 時点でパラメーターの展開が行われるためこの問題が発生しない。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>例1 だけを修正するのであれば、以下のようにサブクエリ利用前提の場合はパフォーマンスチューニングのためのコードを利用しないという修正案が考えられます。</p>
<pre>
--- a/lib/util/opDoctrineQuery.class.php
+++ b/lib/util/opDoctrineQuery.class.php
@@ -189,6 +189,11 @@ class opDoctrineQuery extends Doctrine_Query
}
}
+ if ($this->isSubquery())
+ {
+ return parent::andWhereIn($expr, $params, $not);
+ }
+
$this->addWhereInCount(count($params));
if ($not)
</pre>
<p>ただし、この修正では例2は動作しないため修正としては不十分かもしれない。</p>
opDiaryPlugin - Bug(バグ) #2472 (Invalid(無効)): 1.4.0.1 で修正されたマイグレートスクリプト (リビジョン番号 9) の実行に失敗することがある
http://redmine.openpne.jp/issues/2472
2011-10-06T09:53:39Z
Rimpei Ogawa
ogawa@tejimaya.com
<a name="概要"></a>
<h3 >概要<a href="#概要" class="wiki-anchor">¶</a></h3>
<p>1.4.0 (3.6RC1 バンドル) で追加されたマイグレートスクリプト(リビジョン番号 9)を実行してエラーになった環境で、1.4.0.1 (3.6RC2 バンドル) で修正された同マイグレートスクリプト(リビジョン番号 9)を実行すると失敗することがある。</p>
<p>エラーメッセージ:<br /><pre>
migrating of opDiaryPlugin encountered the following errors:
Error #1 - SQLSTATE[HY000]: General error: 1025 Error on rename of './sns_openpne_jp/diary_comment' to './XXXXXXXX/#sql2-393e-456bfe' (errno: 152). Failing Query: "ALTER TABLE `diary_comment` DROP FOREIGN KEY diary_comment_member_id_member_id"
</pre></p>
<a name="原因"></a>
<h3 >原因<a href="#原因" class="wiki-anchor">¶</a></h3>
<p>マイグレート失敗時に DB のロールバックがおこなわれないために、1.4.0 でのマイグレート時に diary_comment_member_id_member_id の外部キー削除処理までは成功し、その次の修正後の外部キーの追加に失敗すると、外部キーは削除されたままの状態になってしまう。</p>
<p>この状態で 1.4.0.1 のマイグレートを実行すると、外部キー削除処理でエラーが発生してしまう。</p>
<p>失敗した環境の diary_comment テーブルの定義:<br /><pre>
CREATE TABLE `diary_comment` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`diary_id` int(11) NOT NULL,
`member_id` int(11) DEFAULT NULL,
`number` int(11) NOT NULL,
`body` text NOT NULL,
`has_images` tinyint(1) NOT NULL DEFAULT '0',
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `diary_id_number_idx` (`diary_id`,`number`),
KEY `diary_id_idx` (`diary_id`),
KEY `member_id_idx` (`member_id`),
CONSTRAINT `diary_comment_diary_id_diary_id` FOREIGN KEY (`diary_id`) REFERENCES `diary` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
</pre></p>