OpenPNE Issue Tracking System: チケット
http://redmine.openpne.jp/
http://redmine.openpne.jp/favicon.ico
2017-06-05T08:20:28Z
OpenPNE Issue Tracking System
Redmine
OpenPNE 3 - Enhancement(機能追加・改善) #4200 (New(新規)): 古い静的ファイルのキャッシュが意図せず使われないようにする
http://redmine.openpne.jp/issues/4200
2017-06-05T08:20:28Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p>現状の OpenPNE では、静的ファイル (*.js, *.css など) のキャッシュについて HTTP ヘッダ等による制御を行っておらず、Web ブラウザやプロキシサーバーのデフォルトの動作に委ねられている。</p>
<p>静的ファイルについて Apache のデフォルトの動作では、以下のように <code>Last-Modified</code>, <code>ETag</code> ディレクティブがレスポンスヘッダに出力される。</p>
<pre>
$ curl --head http://v38.localhost/js/util.js
HTTP/1.1 200 OK
Date: Mon, 05 Jun 2017 08:13:30 GMT
Server: Apache/2.4.10 (Debian)
Last-Modified: Fri, 17 Mar 2017 06:02:37 GMT
ETag: "6a2-54ae6ecb2f7a1"
Accept-Ranges: bytes
Content-Length: 1698
Vary: Accept-Encoding
Content-Type: application/javascript
</pre>
<p><a class="issue tracker-1 status-5 priority-5 priority-high3 closed" title="Bug(バグ): メンバー登録時にデータが不正な状態になることがある (Fixed(完了))" href="http://redmine.openpne.jp/issues/3150#note-19">#3150-19</a> で指摘されているように、Google Chrome 58 といった比較的新しいブラウザにおいても静的ファイルの古いキャッシュが問題を引き起こす場合があることから、OpenPNE 側での対処が必要であると考えられる。</p>
<p>なお、 #2287 では <code>Cache-Control: no-store, no-cache, private, max-age=0, must-revalidate, post-check=0, pre-check=0</code> が出力されるように修正が行われているが、これは symfony を経由しない静的ファイルに対しては適用されない。</p>
<a name="Spec-仕様"></a>
<h3 >Spec (仕様)<a href="#Spec-仕様" class="wiki-anchor">¶</a></h3>
opDiaryPlugin - Bug(バグ) #4161 (New(新規)): MySQLのSTRICT_TRANS_TABLESが有効な状態でテスト用fixtureのロードに失敗する
http://redmine.openpne.jp/issues/4161
2017-02-17T08:36:57Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>MySQL 5.7 の Strict Mode が有効な状態での動作確認 (<a class="issue tracker-5 status-2 priority-4 priority-default parent" title="Task(タスク): MySQLのStrict Modeを有効にした場合に生じる問題を調査 (Accepted(着手))" href="http://redmine.openpne.jp/issues/4033">#4033</a>) を行った際に発生した。</p>
<p>fixture の読み込みを必要とするテストコードを実行すると下記のエラーが発生する:</p>
<pre>
$ php plugins/opDiaryPlugin/test/unit/model/DiaryTest.php
[...]
Fatal error: Uncaught exception 'Doctrine_Connection_Mysql_Exception' with message 'SQLSTATE[HY000]: General error: 1364 Field 'last_comment_time' doesn't have a default value' in /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php:1082
Stack trace:
#0 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/Statement.php(269): Doctrine_Connection->rethrowException(Object(PDOException), Object(Doctrine_Connection_Statement))
#1 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(1042): Doctrine_Connection_Statement->execute(Array)
#2 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(687): Doctrine_Connection->exec('INSERT INTO dia...', Array)
#3 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/UnitOfWork.php(647): Doctrine_Connection->insert(Object(DiaryCommentUpdateTable), Array)
#4 /vagr in /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1082
</pre>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p><a href="https://github.com/tejimaya/opDiaryPlugin/blob/a72db784a0dc3fea8f3a9d40a274c11db6253213/test/fixtures/diaries.yml#L110-L111" class="external">test/fixtures/diaries.yml#L110-L111</a>:<br /><pre><code class="php syntaxhl"><span class="CodeRay"><span class="inline-delimiter"><?php</span> <span class="keyword">for</span> (<span class="local-variable">$i</span> = <span class="integer">1</span>; <span class="local-variable">$i</span> <= <span class="integer">60</span>; <span class="local-variable">$i</span>++): <span class="inline-delimiter">?></span>
diary_for_member1_<span class="inline-delimiter"><?php</span> <span class="predefined">echo</span> <span class="local-variable">$i</span> <span class="inline-delimiter">?></span>:
Member: member1
title: "title:<span class="inline-delimiter"><?php</span> <span class="predefined">echo</span> <span class="local-variable">$i</span> <span class="inline-delimiter">?></span> by member1"
body: "body:<span class="inline-delimiter"><?php</span> <span class="predefined">echo</span> <span class="local-variable">$i</span> <span class="inline-delimiter">?></span> by member1"
created_at: "2009-03-<span class="inline-delimiter"><?php</span> <span class="predefined">printf</span>(<span class="string"><span class="delimiter">'</span><span class="content">%02d</span><span class="delimiter">'</span></span>, <span class="local-variable">$i</span>) <span class="inline-delimiter">?></span> 10:00:00"
updated_at: "2009-03-<span class="inline-delimiter"><?php</span> <span class="predefined">printf</span>(<span class="string"><span class="delimiter">'</span><span class="content">%02d</span><span class="delimiter">'</span></span>, <span class="local-variable">$i</span>) <span class="inline-delimiter">?></span> 10:00:00"
<span class="inline-delimiter"><?php</span> <span class="keyword">endfor</span>; <span class="inline-delimiter">?></span>
</span></code></pre></p>
<p>上記のように記述された fixture は次のような YAML を出力します。</p>
<pre><code class="yaml syntaxhl"><span class="CodeRay"> <span class="key">diary_for_member1_1</span>:
<span class="key">Member</span>: <span class="string"><span class="content">member1</span></span>
<span class="key">title</span>: <span class="string"><span class="delimiter">"</span><span class="content">title:1 by member1</span><span class="delimiter">"</span></span>
<span class="key">body</span>: <span class="string"><span class="delimiter">"</span><span class="content">body:1 by member1</span><span class="delimiter">"</span></span>
<span class="key">created_at</span>: <span class="string"><span class="delimiter">"</span><span class="content">2009-03-01 10:00:00</span><span class="delimiter">"</span></span>
<span class="key">updated_at</span>: <span class="string"><span class="delimiter">"</span><span class="content">2009-03-01 10:00:00</span><span class="delimiter">"</span></span>
<span class="head"><span class="head">...</span></span>
<span class="key">diary_for_member1_60</span>:
<span class="key">Member</span>: <span class="string"><span class="content">member1</span></span>
<span class="key">title</span>: <span class="string"><span class="delimiter">"</span><span class="content">title:60 by member1</span><span class="delimiter">"</span></span>
<span class="key">body</span>: <span class="string"><span class="delimiter">"</span><span class="content">body:60 by member1</span><span class="delimiter">"</span></span>
<span class="key">created_at</span>: <span class="string"><span class="delimiter">"</span><span class="content">2009-03-60 10:00:00</span><span class="delimiter">"</span></span>
<span class="key">updated_at</span>: <span class="string"><span class="delimiter">"</span><span class="content">2009-03-60 10:00:00</span><span class="delimiter">"</span></span>
</span></code></pre>
<p>created_at および updated_at にセットされる <code>"2009-03-60 10:00:00"</code> は不正な日付のため、<code>STRICT_TRANS_TABLES</code> が有効な MySQL ではエラーが発生する。</p>
opCommunityTopicPlugin - Bug(バグ) #4160 (New(新規)): テスト用fixtureの記述に誤りがありロード時にエラーが発生する
http://redmine.openpne.jp/issues/4160
2017-02-17T08:24:55Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p>MySQL 5.7 の Strict Mode が有効な状態での動作確認 (<a class="issue tracker-5 status-2 priority-4 priority-default parent" title="Task(タスク): MySQLのStrict Modeを有効にした場合に生じる問題を調査 (Accepted(着手))" href="http://redmine.openpne.jp/issues/4033">#4033</a>) を行った際に発生した。</p>
<p>fixture の読み込みを必要とするテストコードを実行すると下記のエラーが発生する:<br /><pre>
$ php plugins/opCommunityTopicPlugin/test/unit/model/CommunityTopicTest.php
PHP Fatal error: Uncaught exception 'Doctrine_Connection_Mysql_Exception' with message 'SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '2017-02-17 open_date_comment: 'あかさたな'' for column 'open_date' at row 1' in /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php:1082
Stack trace:
#0 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/Statement.php(269): Doctrine_Connection->rethrowException(Object(PDOException), Object(Doctrine_Connection_Statement))
#1 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(1042): Doctrine_Connection_Statement->execute(Array)
#2 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(687): Doctrine_Connection->exec('INSERT INTO com...', Array)
#3 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/UnitOfWork.php(647): Doctrine_C in /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1082
</pre></p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p><a href="https://github.com/tejimaya/opCommunityTopicPlugin/blob/1176429425ca9bca6557fe281321fd59eaae037d/test/fixtures/999_test_data.yml#L360" class="external">test/fixtures/999_test_data.yml#L360</a>:<br /><pre><code class="yaml syntaxhl"><span class="CodeRay"> <span class="error">community_event_a_<?php echo $i ?>:</span>
<span class="key">Community</span>: <span class="string"><span class="content">community_a</span></span>
<span class="key">Member</span>: <span class="string"><span class="content">member_1</span></span>
<span class="key">name</span>: <span class="string"><span class="content">'イベントナンバー <?php echo $i ?>'</span></span>
<span class="key">body</span>: <span class="string"><span class="content">'こんにちは <?php echo $i ?>'</span></span>
<span class="key">open_date</span>: <span class="string"><span class="content"><?php echo date('Y-m-d', time())?></span></span>
<span class="key">open_date_comment</span>: <span class="string"><span class="content">'あかさたな'</span></span>
<span class="key">area</span>: <span class="string"><span class="content">'福岡県'</span></span>
</span></code></pre></p>
<p>上記のように記述された fixture は以下のような YAML を出力します。</p>
<pre><code class="yaml syntaxhl"><span class="CodeRay"> <span class="key">community_event_a_1</span>:
<span class="key">Community</span>: <span class="string"><span class="content">community_a</span></span>
<span class="key">Member</span>: <span class="string"><span class="content">member_1</span></span>
<span class="key">name</span>: <span class="string"><span class="content">'イベントナンバー 1'</span></span>
<span class="key">body</span>: <span class="string"><span class="content">'こんにちは 1'</span></span>
<span class="key">open_date</span>: <span class="string"><span class="content">2017-02-17 open_date_comment: 'あかさたな'</span></span>
<span class="key">area</span>: <span class="string"><span class="content">'福岡県'</span></span>
</span></code></pre>
<p>これは PHP タグの仕様で、<code>?></code> と後続する改行文字を含めて除去されるためです。そして、open_date にセットされる日付が不正な文字列であるとしてエラーが発生します。</p>
opDiaryPlugin - Bug(バグ) #4151 (New(新規)): MySQLのONLY_FULL_GROUP_BYが有効な状態で「日記コメント記入履歴」ガジェットを表示するとエラー
http://redmine.openpne.jp/issues/4151
2017-02-16T06:44:32Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>MySQL 5.7 の Strict Mode が有効な状態での動作確認 (<a class="issue tracker-5 status-2 priority-4 priority-default parent" title="Task(タスク): MySQLのStrict Modeを有効にした場合に生じる問題を調査 (Accepted(着手))" href="http://redmine.openpne.jp/issues/4033">#4033</a>) を行った際に発生した。</p>
<p>「日記コメント記入履歴」ガジェットを追加した状態でホーム画面を開くと下記のエラーが発生する:</p>
<pre>
SQLSTATE[HY000]: General error: 3065 Expression #1 of ORDER BY clause is not in SELECT list, references column 'openpne.d3.last_comment_time' which is not in SELECT list; this is incompatible with DISTINCT
</pre>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<pre><code class="sql syntaxhl"><span class="CodeRay"><span class="class">SELECT</span> <span class="keyword">DISTINCT</span> d3.diary_id
<span class="keyword">FROM</span> diary_comment_update d3
<span class="keyword">INNER</span> <span class="keyword">JOIN</span> diary d4 <span class="keyword">ON</span> d3.diary_id = d4.id
<span class="keyword">LEFT</span> <span class="keyword">JOIN</span> member m3 <span class="keyword">ON</span> d4.member_id = m3.id
<span class="keyword">LEFT</span> <span class="keyword">JOIN</span> member_relationship m4 <span class="keyword">ON</span> m3.id = m4.member_id_to <span class="keyword">AND</span> (m4.member_id_from = <span class="string"><span class="delimiter">'</span><span class="content">1</span><span class="delimiter">'</span></span>)
<span class="keyword">WHERE</span> d3.member_id = <span class="string"><span class="delimiter">'</span><span class="content">1</span><span class="delimiter">'</span></span>
<span class="keyword">AND</span> (
d4.public_flag = <span class="string"><span class="delimiter">'</span><span class="content">4</span><span class="delimiter">'</span></span> <span class="keyword">OR</span>
d4.public_flag = <span class="string"><span class="delimiter">'</span><span class="content">1</span><span class="delimiter">'</span></span> <span class="keyword">OR</span>
(d4.public_flag = <span class="string"><span class="delimiter">'</span><span class="content">2</span><span class="delimiter">'</span></span> <span class="keyword">AND</span> m4.is_friend = <span class="integer">1</span>)
)
<span class="keyword">AND</span> (m3.is_active = <span class="string"><span class="delimiter">'</span><span class="content">1</span><span class="delimiter">'</span></span> <span class="keyword">OR</span> m3.is_active <span class="keyword">IS</span> <span class="predefined-constant">NULL</span>)
<span class="keyword">ORDER</span> <span class="keyword">BY</span> d3.last_comment_time <span class="directive">DESC</span>
LIMIT <span class="integer">5</span>
</span></code></pre>
<p>上記のクエリで、ORDER BY で使用するカラムが DISTINCT の対象に含まれていないためにエラーが発生している。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</p>
opAshiatoPlugin - Bug(バグ) #4150 (New(新規)): MySQLのONLY_FULL_GROUP_BYが有効な状態であしあとページを開くとエラーが発生する
http://redmine.openpne.jp/issues/4150
2017-02-16T05:09:58Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>MySQL 5.7 の Strict Mode が有効な状態 (<a class="issue tracker-5 status-2 priority-4 priority-default parent" title="Task(タスク): MySQLのStrict Modeを有効にした場合に生じる問題を調査 (Accepted(着手))" href="http://redmine.openpne.jp/issues/4033">#4033</a>) であしあとページを開くと下記のエラーが発生する:</p>
<pre>
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'openpne.a.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
</pre>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<pre><code class="sql syntaxhl"><span class="CodeRay"><span class="class">SELECT</span> a.id <span class="keyword">AS</span> a__id, a.r_date <span class="keyword">AS</span> a__r_date <span class="keyword">FROM</span> ashiato a <span class="keyword">WHERE</span> (a.member_id_to = <span class="error">?</span>) <span class="keyword">GROUP</span> <span class="keyword">BY</span> a.r_date <span class="directive">DESC</span> LIMIT <span class="integer">30</span>
</span></code></pre>
<p>実行される上記のクエリについて、GROUP BY で指定されていない <code>a.id</code> が SELECT リストで参照されていることが原因。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</p>
OpenPNE 3 - Bug(バグ) #3946 (New(新規)): 新規登録時に携帯電話の登録を求める画面(PC)に翻訳されていない箇所がある
http://redmine.openpne.jp/issues/3946
2016-05-20T04:12:05Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>管理画面の「携帯関連設定」(/advanced/config?category=mobile) にある「メンバー登録時の携帯個体識別番号取得設定」を「PC・携帯登録時に携帯個体識別番号の登録を必須にする」に設定すると PC からの新規登録時に携帯メールアドレスの入力を求められるが、入力する欄のラベルが「Mobile address」のまま未翻訳の状態になっている。</p>
<p><img src="http://redmine.openpne.jp/attachments/download/619/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2016-05-20_13.00.28.png" style="width:693px;" alt="" /></p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p><code>registerMobileForm</code> の <code>mobile_address</code> に対してラベルが設定されておらずデフォルトの「Mobile address」が使用されるのに対し、<code>messages.js.xml</code> には「Mobile E-mail Address」は存在するものの「Mobile address」の翻訳は存在しないため英語のまま表示されてしまう。</p>
<p><a class="source" href="http://redmine.openpne.jp/projects/op3/repository/revisions/43190aa1/entry/apps/pc_frontend/modules/member/lib/registerMobileForm.class.php">source:apps/pc_frontend/modules/member/lib/registerMobileForm.class.php@43190aa1</a>:</p>
<pre><code class="php syntaxhl"><span class="CodeRay"> <span class="keyword">public</span> <span class="keyword">function</span> <span class="function">configure</span>()
{
<span class="local-variable">$this</span>->setWidget(<span class="string"><span class="delimiter">'</span><span class="content">mobile_address</span><span class="delimiter">'</span></span>, <span class="keyword">new</span> sfWidgetFormInput());
<span class="local-variable">$this</span>->setValidator(<span class="string"><span class="delimiter">'</span><span class="content">mobile_address</span><span class="delimiter">'</span></span>, <span class="keyword">new</span> sfValidatorMobileEmail());
<span class="local-variable">$this</span>->mergePostValidator(<span class="keyword">new</span> sfValidatorCallback(<span class="predefined">array</span>(
<span class="string"><span class="delimiter">'</span><span class="content">callback</span><span class="delimiter">'</span></span> => <span class="predefined">array</span>(<span class="local-variable">$this</span>, <span class="string"><span class="delimiter">'</span><span class="content">isUnique</span><span class="delimiter">'</span></span>),
<span class="string"><span class="delimiter">'</span><span class="content">arguments</span><span class="delimiter">'</span></span> => <span class="predefined">array</span>(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="content">mobile_address</span><span class="delimiter">'</span></span>),
)));
}
</span></code></pre>
<p><a class="source" href="http://redmine.openpne.jp/projects/op3/repository/revisions/43190aa1/entry/apps/pc_frontend/i18n/messages.ja.xml#L469">source:apps/pc_frontend/i18n/messages.ja.xml@43190aa1#L469</a>:</p>
<pre><code class="xml syntaxhl"><span class="CodeRay"> <span class="tag"><trans-unit</span> <span class="attribute-name">id</span>=<span class="string"><span class="delimiter">"</span><span class="delimiter">"</span></span><span class="tag">></span>
<span class="tag"><source></span>Mobile E-mail Address<span class="tag"></source></span>
<span class="tag"><target></span>携帯メールアドレス<span class="tag"></target></span>
<span class="tag"></trans-unit></span>
</span></code></pre>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p><code>registerMobileForm::configure()</code> メソッド内に下記のコードを追加し、既存の翻訳が使われるようにする。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"><span class="local-variable">$this</span>->widgetSchema->setLabel(<span class="string"><span class="delimiter">'</span><span class="content">mobile_address</span><span class="delimiter">'</span></span>, <span class="string"><span class="delimiter">'</span><span class="content">Mobile E-mail Address</span><span class="delimiter">'</span></span>);
</span></code></pre>
OpenPNE 3 - Bug(バグ) #3933 (New(新規)): 利用可能な認証プラグインが無い状態でログイン画面を開くとFatal errorになる
http://redmine.openpne.jp/issues/3933
2016-04-21T11:04:17Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>管理画面の「認証プラグイン設定」(/pc_backend.php/plugin/list?type=auth) から認証プラグインの設定ページを開き、全ての認証プラグインで「PC版有効設定」を「無効にする」に設定した状態で PC 版のログイン画面を開くと HTTP 500 エラーとなり、Web ブラウザ側にはエラーメッセージ等もない真っ白なページが表示される。</p>
<p>Apache 等のエラーログには下記のようなエラーが記録される:</p>
<pre>
[Thu Apr 21 10:30:57.453033 2016] [fcgid:warn] [pid 1331:tid 140111127688960] [client 10.0.2.2:49636] mod_fcgid: stderr: PHP Fatal error: Cannot instantiate abstract class opAuthAdapter in /var/www/sns/op36.localhost/lib/user/opAdaptableUser.class.php on line 99, referer: http://op36.localhost:8080/
</pre>
<p>類似の設定として、管理画面の「SNS設定」には「PC版使用設定」「携帯版使用設定」があるが、ここで無効に設定した場合は「このページにはアクセスできません。」とエラーメッセージが表示される。<br />認証プラグインの「PC版有効設定」および「携帯版有効設定」は、PC 版のみアクセス可能な SNS として設定したいなどの目的で無効に設定する可能性があるが、当チケットの現象ではユーザー側にメッセージを表示することもなく Fatal error で異常終了するという形で SNS が利用できなくなるため、「PC版使用設定」「携帯版使用設定」と比べて不親切である。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p><a class="source" href="http://redmine.openpne.jp/projects/op3/repository/revisions/43190aa1/entry/lib/user/opAdaptableUser.class.php#L28">source:lib/user/opAdaptableUser.class.php@43190aa1#L28</a></p>
<pre><code class="php syntaxhl"><span class="CodeRay"> <span class="keyword">public</span> <span class="keyword">function</span> <span class="function">initialize</span>(sfEventDispatcher <span class="local-variable">$dispatcher</span>, sfStorage <span class="local-variable">$storage</span>, <span class="local-variable">$options</span> = <span class="predefined">array</span>())
{
<span class="predefined-constant">parent</span>::initialize(<span class="local-variable">$dispatcher</span>, <span class="local-variable">$storage</span>, <span class="local-variable">$options</span>);
<span class="keyword">if</span> (<span class="local-variable">$this</span>->getMemberId() && <span class="local-variable">$this</span>->isTimedOut())
{
<span class="local-variable">$this</span>->getAttributeHolder()->removeNamespace(<span class="string"><span class="delimiter">'</span><span class="content">opSecurityUser</span><span class="delimiter">'</span></span>);
}
<span class="local-variable">$request</span> = sfContext::getInstance()->getRequest();
<span class="local-variable">$authMode</span> = <span class="local-variable">$request</span>->getUrlParameter(<span class="string"><span class="delimiter">'</span><span class="content">authMode</span><span class="delimiter">'</span></span>);
<span class="keyword">if</span> (<span class="local-variable">$authMode</span>)
{
<span class="local-variable">$this</span>->setCurrentAuthMode(<span class="local-variable">$authMode</span>);
}
<span class="local-variable">$this</span>->createAuthAdapter(<span class="local-variable">$this</span>->getCurrentAuthMode());
}
</span></code></pre>
<p>上記のコードで、利用可能な認証プラグインが存在しない状態で <code>$this->getCurrentAuthMode()</code> が呼び出されると null が返るが、このメソッドではそのことが考慮されておらず <code>$this->createAuthAdapter()</code> の <code>$authMode</code> に null を渡してしまう。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">function</span> <span class="function">getAuthAdapterClassName</span>(<span class="local-variable">$authMode</span>)
{
<span class="keyword">return</span> <span class="string"><span class="delimiter">'</span><span class="content">opAuthAdapter</span><span class="delimiter">'</span></span>.<span class="predefined">ucfirst</span>(<span class="local-variable">$authMode</span>);
}
</span></code></pre>
<p>途中の呼び出し過程は省略するが、上記の <code>opAdaptableUser::getAuthAdapterClassName()</code> メソッドにも <code>$authMode</code> が null の状態で呼び出され、<code>'opAuthAdapter'</code> の文字列が返される。そして <code>opAuthAdapter</code> クラスを new でインスタンス化しようとすることで Fatal error が発生する。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</p>
OpenPNE 3 - Bug(バグ) #3415 (New(新規)): 管理画面のガジェット設定ページのiframe内でフォームのエラーが赤文字で表示されない
http://redmine.openpne.jp/issues/3415
2013-10-03T03:38:02Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>アクティビティガジェットなどのガジェットの設定項目で「表示する行」の値をブラウザのインスペクタ等で不正な文字 ("aaaa" など) に書き換えて送信した場合に「正しくありません」というエラーメッセージが表示されるが、「SNS設定」画面で表示されるエラーのように赤文字で表示されない。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>ガジェットの設定画面は iframe 内に表示されているが、このページ内で backend.css が読み込まれていないのが原因である。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</p>
OpenPNE 3 - Enhancement(機能追加・改善) #3395 (New(新規)): 機能テストでJSON形式のレスポンス内容をチェックするためのテスターを追加
http://redmine.openpne.jp/issues/3395
2013-09-10T08:09:10Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p>現状、JSON API の機能テストを書く際には下記のようなコードを書く必要がある。JSON の内容をチェックする度に sfTestFunctional のメソッドチェインを抜ける必要があり、記述も冗長になってしまう。これを簡略化するためのテスターを作成する。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"><span class="local-variable">$browser</span>
->get(<span class="string"><span class="delimiter">'</span><span class="content">/activity/search.json</span><span class="delimiter">'</span></span>, <span class="predefined">array</span>(<span class="string"><span class="delimiter">'</span><span class="content">apiKey</span><span class="delimiter">'</span></span> => <span class="local-variable">$apiKeyMember1</span>))
->with(<span class="string"><span class="delimiter">'</span><span class="content">response</span><span class="delimiter">'</span></span>)->isStatusCode(<span class="integer">200</span>);
<span class="local-variable">$response</span> = json_decode(<span class="local-variable">$browser</span>->getResponse()->getContent(), <span class="predefined-constant">true</span>);
<span class="local-variable">$t</span>->is(<span class="local-variable">$response</span>, <span class="predefined">array</span>(
<span class="string"><span class="delimiter">'</span><span class="content">status</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="content">success</span><span class="delimiter">'</span></span>,
<span class="string"><span class="delimiter">'</span><span class="content">data</span><span class="delimiter">'</span></span> => <span class="predefined">array</span>(
<span class="predefined">array</span>(
<span class="string"><span class="delimiter">'</span><span class="content">id</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="content">1</span><span class="delimiter">'</span></span>,
...
<span class="string"><span class="delimiter">'</span><span class="content">created_at</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="content">Tue, 10 Apr 2012 13:20:18 +0900</span><span class="delimiter">'</span></span>,
),
),
));
</span></code></pre>
<a name="Spec-仕様"></a>
<h3 >Spec (仕様)<a href="#Spec-仕様" class="wiki-anchor">¶</a></h3>
<p>JSON 形式のレスポンスを下記のような記述でチェックできるようにする。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"><span class="local-variable">$browser</span>
->get(<span class="string"><span class="delimiter">'</span><span class="content">/activity/search.json</span><span class="delimiter">'</span></span>, <span class="predefined">array</span>(<span class="string"><span class="delimiter">'</span><span class="content">apiKey</span><span class="delimiter">'</span></span> => <span class="local-variable">$apiKeyMember1</span>))
->with(<span class="string"><span class="delimiter">'</span><span class="content">response</span><span class="delimiter">'</span></span>)->isStatusCode(<span class="integer">200</span>)
->with(<span class="string"><span class="delimiter">'</span><span class="content">json</span><span class="delimiter">'</span></span>)->equals(<span class="predefined">array</span>(
<span class="string"><span class="delimiter">'</span><span class="content">status</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="content">success</span><span class="delimiter">'</span></span>,
<span class="string"><span class="delimiter">'</span><span class="content">data</span><span class="delimiter">'</span></span> => <span class="predefined">array</span>(
<span class="predefined">array</span>(
<span class="string"><span class="delimiter">'</span><span class="content">id</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="content">1</span><span class="delimiter">'</span></span>,
...
<span class="string"><span class="delimiter">'</span><span class="content">created_at</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="content">Tue, 10 Apr 2012 13:20:18 +0900</span><span class="delimiter">'</span></span>,
),
),
));
</span></code></pre>
OpenPNE 3 - Bug(バグ) #3367 (New(新規)): デイリーニュースで使用されるガジェットのパラメータがエスケープされている
http://redmine.openpne.jp/issues/3367
2013-06-25T12:38:21Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>管理画面のガジェット設定 (/design/gadget?type=dailyNews) からデイリーニュースで使用するガジェットを設定できるが、このガジェットのパラメーターに対してエスケープが施された状態でメール送信されてしまう。<br />例えば、デイリーニュースのガジェットに「フリーエリア」を追加して「内容」に「>>>> aaaaa <<<<」を設定すると、送信されるデイリーニュースのメール本文には「>>>> aaaaa <<<<」が出力される。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>メールテンプレートにおけるエスケープ処理の問題は <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): The Parameter will be escape in the mail (メールに含まれるパラメータがエスケープされている) (Fixed(完了))" href="http://redmine.openpne.jp/issues/1344">#1344</a> によって修正されており、その修正内容は下記のようなものでした。</p>
<pre><code class="diff syntaxhl"><span class="CodeRay"><span class="line head"><span class="head">--- </span><span class="filename">a/lib/util/opMailSend.class.php</span></span>
<span class="line head"><span class="head">+++ </span><span class="filename">b/lib/util/opMailSend.class.php</span></span>
<span class="change"><span class="change">@@</span> -81,6 +82,7 <span class="change">@@</span></span> <span class="keyword">class</span> <span class="class">opMailSend</span>
<span class="local-variable">$view</span> = <span class="keyword">new</span> sfTemplatingComponentPartialView(<span class="local-variable">$context</span>, <span class="string"><span class="delimiter">'</span><span class="content">superGlobal</span><span class="delimiter">'</span></span>, <span class="string"><span class="delimiter">'</span><span class="content">notify_mail:</span><span class="delimiter">'</span></span>.<span class="local-variable">$target</span>.<span class="string"><span class="delimiter">'</span><span class="content">_</span><span class="delimiter">'</span></span>.<span class="local-variable">$template</span>, <span class="string"><span class="delimiter">'</span><span class="delimiter">'</span></span>);
<span class="local-variable">$context</span>->set(<span class="string"><span class="delimiter">'</span><span class="content">view_instance</span><span class="delimiter">'</span></span>, <span class="local-variable">$view</span>);
<span class="line insert"><span class="insert">+</span> <span class="local-variable">$view</span>->getAttributeHolder()->setEscaping(<span class="predefined-constant">false</span>);</span>
<span class="local-variable">$view</span>->setPartialVars(<span class="local-variable">$params</span>);
<span class="local-variable">$view</span>->setAttribute(<span class="string"><span class="delimiter">'</span><span class="content">renderer_config</span><span class="delimiter">'</span></span>, <span class="predefined">array</span>(<span class="string"><span class="delimiter">'</span><span class="content">twig</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="content">opTemplateRendererTwig</span><span class="delimiter">'</span></span>));
<span class="local-variable">$view</span>->setAttribute(<span class="string"><span class="delimiter">'</span><span class="content">rule_config</span><span class="delimiter">'</span></span>, <span class="predefined">array</span>(<span class="string"><span class="delimiter">'</span><span class="content">notify_mail</span><span class="delimiter">'</span></span> => <span class="predefined">array</span>(
</span></code></pre>
<p>一方、デイリーニュースの送信には、メールテンプレートこそ使用しているものの本文中で include_component を使用しており、呼び出されるコンポーネントのために新たに sfViewParameterHolder が生成されます。この sfViewParameterHolder は呼び出し元ビューのエスケープ設定を引き継がず、sfConfig から sf_escaping_method や sf_escaping_strategy の値を取得して設定するため、コンポーネント内では <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): The Parameter will be escape in the mail (メールに含まれるパラメータがエスケープされている) (Fixed(完了))" href="http://redmine.openpne.jp/issues/1344">#1344</a> の修正による効果が及ばないことになります。これが原因で、デイリーニュースのガジェット内ではエスケープが有効な状態でテンプレートが出力されます。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</p>
OpenPNE 3 - Enhancement(機能追加・改善) #3223 (New(新規)): 管理画面に管理者用apiKeyを実装する
http://redmine.openpne.jp/issues/3223
2012-10-11T09:10:26Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="概要"></a>
<h3 >概要<a href="#概要" class="wiki-anchor">¶</a></h3>
<p>pc_frontend と同様に管理画面から使用できるAPIキーを追加する。</p>
<a name="仕様"></a>
<h3 >仕様<a href="#仕様" class="wiki-anchor">¶</a></h3>
<ul>
<li>管理画面初回アクセス時に「管理者用apiKey」を生成する (生成されるキーの仕様は pc_frontend のものと同じ)</li>
<li>管理画面の各ページに、JavaScriptから参照可能なように <code>openpne.apiKey</code> と <code>openpne.apiBase</code> の値を埋め込む</li>
<li>既に実装されているAPIは、「メンバーID + '@' + 管理者用apiKey」をapiKeyに渡された場合には指定されたメンバーからAPIが呼び出されたかのような振る舞いをする</li>
</ul>
opAshiatoPlugin - Bug(バグ) #1978 (New(新規)): MySQL以外のDBMS上であしあと一覧がエラーになる
http://redmine.openpne.jp/issues/1978
2011-03-26T05:48:58Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>あしあと一覧ページをSQLite使用のOpenPNE3で実行すると、以下のようなエラーが出ます。<br /><pre>
mod_fcgid: stderr: SQLSTATE[HY000]: General error: 1 near "DESC": syntax error. Failing Query: "SELECT a.id AS a__id, a.r_date AS a__r_date FROM ashiato a WHERE (a.member_id_to = ?) GROUP BY a.r_date DESC LIMIT 30", referer: http://sns.localhost/sqlite/
</pre></p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>「GROUP BY a.r_date DESC」といった構文がMySQL依存のものであるため、他のDBMSでエラーになる。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>PluginAshiatoTable::getAshiatoListPager() 内で実行されるクエリを修正する。</p>
<pre><code class="diff syntaxhl"><span class="CodeRay"><span class="line head"><span class="head">--- </span><span class="filename">a/lib/model/doctrine/PluginAshiatoTable.class.php</span></span>
<span class="line head"><span class="head">+++ </span><span class="filename">b/lib/model/doctrine/PluginAshiatoTable.class.php</span></span>
<span class="change"><span class="change">@@</span> -23,7 +23,7 <span class="change">@@</span></span> <span class="keyword">class</span> <span class="class">PluginAshiatoTable</span> <span class="keyword">extends</span> <span class="constant">Doctrine_Table</span>
<span class="keyword">public</span> <span class="keyword">function</span> <span class="function">getAshiatoListPager</span>(<span class="local-variable">$memberId</span>, <span class="local-variable">$page</span> = <span class="integer">1</span>, <span class="local-variable">$size</span> = <span class="integer">20</span>)
{
<span class="local-variable">$day_list</span> = <span class="predefined">array</span>();
<span class="local-variable">$q</span> = <span class="local-variable">$this</span>->createQuery()
->select(<span class="string"><span class="delimiter">'</span><span class="content">id, r_date</span><span class="delimiter">'</span></span>)
->where(<span class="string"><span class="delimiter">'</span><span class="content">member_id_to = ?</span><span class="delimiter">'</span></span>, <span class="local-variable">$memberId</span>)
<span class="line delete"><span class="delete">-</span> -><span class="eyecatcher">group</span>By(<span class="string"><span class="delimiter">'</span><span class="content">r_date DESC</span><span class="delimiter">'</span></span>)</span>
<span class="line insert"><span class="insert">+</span> -><span class="eyecatcher">order</span>By(<span class="string"><span class="delimiter">'</span><span class="content">r_date DESC</span><span class="delimiter">'</span></span>)</span>
->limit(<span class="local-variable">$size</span>);
</span></code></pre>
opChatPlugin - Enhancement(機能追加・改善) #1976 (New(新規)): ウィンドウを閉じた場合などに自動でログアウトさせる
http://redmine.openpne.jp/issues/1976
2011-03-25T15:00:12Z
Youichi Kimura
kim.upsilon@bucyou.net
<p>JavaScriptのunloadイベントを使ってクローズを検知する</p>
opChatPlugin - Enhancement(機能追加・改善) #1975 (New(新規)): ページタイトルに未読件数を表示して欲しい
http://redmine.openpne.jp/issues/1975
2011-03-25T14:59:13Z
Youichi Kimura
kim.upsilon@bucyou.net
opChatPlugin - Enhancement(機能追加・改善) #1024 (New(新規)): チャットの携帯対応
http://redmine.openpne.jp/issues/1024
2010-05-04T19:15:39Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="概要"></a>
<h3 >概要<a href="#概要" class="wiki-anchor">¶</a></h3>
<p>携帯からチャットへ参加できるようにする</p>