OpenPNE Issue Tracking System: チケット
http://redmine.openpne.jp/
http://redmine.openpne.jp/favicon.ico
2016-10-26T08:48:59Z
OpenPNE Issue Tracking System
Redmine
OpenPNE 3 - Task(タスク) #4028 (Won't fix(対応せず)): jQuery / jQuery UI のアップグレードによる影響を調査
http://redmine.openpne.jp/issues/4028
2016-10-26T08:48:59Z
Youichi Kimura
kim.upsilon@bucyou.net
<p>jQuery および jQuery UI を最新版にアップグレードする際の影響を調査する。</p>
<a name="調査対象"></a>
<h4 >調査対象<a href="#調査対象" class="wiki-anchor">¶</a></h4>
<ul>
<li>OpenPNE
<ul>
<li>安定版ブランチは対象に含める?</li>
</ul>
</li>
<li>OpenPNE プラグイン (要検討)
<ul>
<li>opCommunityTopicPlugin 1.1.x</li>
<li>opDiaryPlugin 1.5.x</li>
<li>opLikePlugin</li>
<li>opMessagePlugin 2.0.x</li>
<li>opSkinThemePlugin</li>
<li>opTimelinePlugin</li>
<li>opUploadFilePlugin</li>
</ul></li>
</ul>
<a name="現状"></a>
<h4 >現状<a href="#現状" class="wiki-anchor">¶</a></h4>
<p>下記のバージョンが OpenPNE に同梱されている:</p>
<ul>
<li>jQuery v1.7.1 (2011/11/21)</li>
<li>jQuery UI v1.8.16 (2011/08/18)</li>
</ul>
OpenPNE 3 - Backport(バックポート) #3967 (Won't fix(対応せず)): 壊れたテストコードを削除する
http://redmine.openpne.jp/issues/3967
2016-07-15T10:10:41Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="概要"></a>
<h3 >概要<a href="#概要" class="wiki-anchor">¶</a></h3>
<p>現在 OpenPNE3 のテストコードは十分にメンテナンスされておらず、壊れた状態のテストケースが多数存在する。<br />このような状態は CI などにおけるテストコードの自動実行を妨げるだけでなく、退行バグによって既存のテストケースでエラーが発生しても他の大量のエラーに埋もれて発見できないなど、テストコードを十分に活用することができない。<br />過去にこのような壊れたテストコードを全て修正する試みがあった (<a class="issue tracker-5 status-12 priority-4 priority-default closed parent" title="Task(タスク): OpenPNE の既存のテストコードが正常に動作するように修正を行う (Invalid(無効))" href="http://redmine.openpne.jp/issues/3403">#3403</a>) が、エラーとなるテストケースがあまりに多いため「成功か否かに関わらず全てのテストケースが実行される」(Fatal Error による異常終了がない) 状態まで修正するに留まっている。<br />当チケットでは、壊れたテストコードをすべて削除し <code>./symfony test:all</code> によって実行されるすべてのテストコードが正常に実行される状態にする。</p>
OpenPNE 3 - Enhancement(機能追加・改善) #3957 (Won't fix(対応せず)): PHP5.6向けにAPCu拡張のインストールを推奨する記述を追加する
http://redmine.openpne.jp/issues/3957
2016-06-14T05:36:00Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p><a class="issue tracker-2 status-5 priority-7 priority-highest closed" title="Enhancement(機能追加・改善): PHP 5.6 対応 (Fixed(完了))" href="http://redmine.openpne.jp/issues/3919#note-8">#3919-8</a> で調査したとおり、PHP 5.6 以降で APC が使用できない件について OpenPNE 内で APC の関数を使用している箇所については APCu をインストールすることで代替が可能なため、OpenPNE のインストール手順に APUu 拡張モジュールのインストールを推奨する旨を記載する。</p>
<a name="Spec-仕様"></a>
<h3 >Spec (仕様)<a href="#Spec-仕様" class="wiki-anchor">¶</a></h3>
<p>現行のインストール手順には「PHP の APC 拡張モジュールの使用を推奨」と記載されている所を「PHP の APC (または APCu) 拡張モジュールの使用を推奨」に書き換える。</p>
<p>APCu 拡張モジュールの推奨については特に PHP 5.6 以降の場合に限定しません。<br />これは APCu 自体が PHP 5.3.0 以降で動作することと、PHP 5.3 の頃から APC は同梱されておらず opcode cache 部分に関しては php_opcache に置き換わっているためです。</p>
OpenPNE 3 - Bug(バグ) #3939 (Won't fix(対応せず)): セットアップ手順にexif拡張モジュールが必要であることが記載されていない
http://redmine.openpne.jp/issues/3939
2016-05-12T07:10:25Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p><a class="issue tracker-1 status-13 priority-4 priority-default closed" title="Bug(バグ): スマートフォンで画像をアップロードすると画像が横向きになってしまう場合がある (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3560">#3560</a> の修正以降、JPEG 画像のアップロード時に <code>exif_read_data</code> 関数 (exif 拡張に含まれる) が使われるようになったが、セットアップ手順が記載されている <a class="source" href="http://redmine.openpne.jp/projects/op3/repository/revisions/43190aa1/entry/doc/ja/OpenPNE3_Setup_Guide.txt">source:doc/ja/OpenPNE3_Setup_Guide.txt@43190aa1</a> には exif 拡張が必要であることが書かれていない。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>下記の行を <code>doc/ja/OpenPNE3_Setup_Guide.txt</code> に追記する (<code>doc/en/OpenPNE3_Setup_Guide.txt</code> にも対応する訳文を追加)</p>
<pre>
* PHP の exif 拡張モジュールを使用可能
</pre>
OpenPNE 3 - Bug(バグ) #3873 (Won't fix(対応せず)): opPluginDownloaderクラスのファイル名がopPearDownloader.class.p...
http://redmine.openpne.jp/issues/3873
2015-12-09T06:19:51Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>opPluginDownloader クラスが記述されているファイルが <code>lib/plugin/opPearDownloader.class.php</code> にあり、クラス名とファイル名が一致していない状態になっている。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>ファイル名を <code>opPluginDownloader.class.php</code> に変更する</p>
OpenPNE 3 - Bug(バグ) #3852 (Won't fix(対応せず)): 機能テスト実行時にopBrowserによる各リクエスト間でMemberConfigのキャッシュが意図せず...
http://redmine.openpne.jp/issues/3852
2015-11-05T11:30:07Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>MemberConfigTable クラスには MemberConfig をキャッシュするための <code>MemberConfigTable::$results</code> が用意されおり、多くのコードはこのキャッシュがリクエストごとに初期化される前提で実装されているが、機能テスト時には <code>MemberConfigTable::$results</code> のキャッシュがリクエストを跨いで引き継がれてしまうため、テスト時のみ発生する意図しない動作の原因となっている。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>MemberConfigTable クラスには MemberConfig をキャッシュするための <code>MemberConfigTable::$results</code> が用意されているが、通常のブラウザからのアクセスによって OpenPNE が動作する場合はリクエスト毎にこのキャッシュは破棄される。<br />しかし機能テストで使用する opBrowser では、リクエストごとに sfContext の初期化は行うものの静的変数の初期化は行われないため MemberConfigTable のインスタンス(<code>Doctrine_Core::getTable()</code> によって生成されるシングルトン)は残ったままとなり、<code>MemberConfigTable::$results</code> も初期化されない。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>opBrowser がリクエストを実行する度(sfContext を生成するタイミング)に <code>MemberConfigTable::$results</code> の中身を空にする</p>
OpenPNE 3 - Bug(バグ) #3756 (Won't fix(対応せず)): 画像付きのOAuthアプリケーションを削除してもDBから画像が削除されない
http://redmine.openpne.jp/issues/3756
2015-01-06T07:37:16Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="再現手順"></a>
<h3 >再現手順<a href="#再現手順" class="wiki-anchor">¶</a></h3>
<p>事前に OpenPNE に opWebAPIPlugin をインストールする必要があります。</p>
<ol>
<li>管理画面の SNS 設定 (/pc_backend.php/sns/config?category=general) から「外部サービスとの接続設定の使用設定」を「使用する」に変更</li>
<li>「連携済みアプリケーション一覧」(/pc_backend.php/connection/new) を開く
<ul>
<li>このページにアクセスするには直接 URL を入力する必要があります</li>
</ul>
</li>
<li>説明文等を入力し、適当な画像を選択して登録する</li>
<li>登録したアプリケーションが表示される</li>
<li>「連携済みアプリケーション一覧」(/pc_backend.php/connection) を開き、登録したアプリケーションを削除する</li>
<li>アップロード画像リスト (/pc_backend.php/monitoring) を開くと削除したアプリケーションの画像が残ったままとなっている</li>
</ol>
<a name="原因"></a>
<h3 >原因<a href="#原因" class="wiki-anchor">¶</a></h3>
<p>親チケット <a class="issue tracker-1 status-13 priority-4 priority-default closed parent" title="Bug(バグ): fileを参照するテーブル(activity_imageなど)のレコード削除時に対応するfileレコードが削除されない (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3738">#3738</a> を参照。</p>
OpenPNE 3 - Bug(バグ) #3755 (Won't fix(対応せず)): バナー設定でアップロードした画像を削除してもDBから削除されない
http://redmine.openpne.jp/issues/3755
2015-01-06T07:07:50Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="再現手順"></a>
<h3 >再現手順<a href="#再現手順" class="wiki-anchor">¶</a></h3>
<ol>
<li>管理画面の「デザイン設定」→「バナー設定」(/pc_backend.php/design/banner) を開く</li>
<li>「バナー画像を追加」を開き、適当な画像をアップロードする</li>
<li>バナー設定のページから、先ほど追加した画像を削除する</li>
<li>管理画面のアップロード画像リスト (/pc_backend.php/monitoring) に、削除したはずのバナー画像が残ったままとなっている</li>
</ol>
<a name="原因"></a>
<h3 >原因<a href="#原因" class="wiki-anchor">¶</a></h3>
<p>親チケット <a class="issue tracker-1 status-13 priority-4 priority-default closed parent" title="Bug(バグ): fileを参照するテーブル(activity_imageなど)のレコード削除時に対応するfileレコードが削除されない (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3738">#3738</a> を参照。</p>
opCommunityTopicPlugin - Backport(バックポート) #3754 (Won't fix(対応せず)): テスト用のFixtureが壊れている
http://redmine.openpne.jp/issues/3754
2015-01-06T04:42:37Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>opCommunityTopicPlugin 内の任意のテストコードを実行すると下記のようなエラーが出力され異常終了する。</p>
<pre>
$ php test/unit/model/CommunityTopicTest.php
PHP Fatal error: Uncaught exception 'Doctrine_Connection_Mysql_Exception' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1055' for key 'PRIMARY'' in /home/upsilon/git/openpne3/master/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php:1082
Stack trace:
#0 /home/upsilon/git/openpne3/master/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/Statement.php(269): Doctrine_Connection->rethrowException(Object(PDOException), Object(Doctrine_Connection_Statement))
#1 /home/upsilon/git/openpne3/master/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(1042): Doctrine_Connection_Statement->execute(Array)
#2 /home/upsilon/git/openpne3/master/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(687): Doctrine_Connection->exec('INSERT INTO mem...', Array)
#3 /home/upsilon/git/openpne3/master/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendo in /home/upsilon/git/openpne3/master/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/opCommunityTopicPlugin/commit/b26343a6caa26d2915eade9455ebf9cfa53f8b65" class="external">b26343a6</a> と <a href="https://github.com/tejimaya/opCommunityTopicPlugin/commit/1c1ac0282d5360348388277dc9b15671e544f7e9" class="external">1c1ac028</a> の各コミットで追加されたテスト用の Fixture に同じ ID のメンバーやコミュニティが含まれており、両方の Fixture が読み込まれる際に ID が衝突してエラーとなる。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p><a href="https://github.com/tejimaya/opCommunityTopicPlugin/commit/1c1ac0282d5360348388277dc9b15671e544f7e9" class="external">1c1ac028</a> で追加された 999_xss_test_data.yml には <a href="https://github.com/tejimaya/opCommunityTopicPlugin/commit/b26343a6caa26d2915eade9455ebf9cfa53f8b65" class="external">b26343a6</a> で 999_test_data.yml に追加されたものとほぼ同じレコードを含んでいるため、999_xss_test_data.yml を残した上で重複するレコードを削除する。</p>
OpenPNE 3 - Bug(バグ) #3753 (Won't fix(対応せず)): コミュニティ画像が設定されたコミュニティを削除しても画像がDBから削除されない
http://redmine.openpne.jp/issues/3753
2015-01-05T06:32:43Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="現象"></a>
<h3 >現象<a href="#現象" class="wiki-anchor">¶</a></h3>
<p>コミュニティ画像が設定されているコミュニティを削除しても、画像は削除されずに DB に残ってしまう。</p>
<a name="再現手順"></a>
<h3 >再現手順<a href="#再現手順" class="wiki-anchor">¶</a></h3>
<ol>
<li>コミュニティ作成 (/community/edit) ページから新規にコミュニティを作成する。この時にコミュニティ画像も指定する</li>
<li>コミュニティ編集 (/community/edit?id=xx) ページの「コミュニティを削除する」からコミュニティを削除する
<ul>
<li>「コミュニティ画像」の削除ではない</li>
</ul>
</li>
<li>管理画面のアップロード画像リスト (/pc_backend.php/monitoring) に、コミュニティに設定していた画像が表示されたままとなっている</li>
</ol>
<a name="原因"></a>
<h3 >原因<a href="#原因" class="wiki-anchor">¶</a></h3>
<p>親チケット <a class="issue tracker-1 status-13 priority-4 priority-default closed parent" title="Bug(バグ): fileを参照するテーブル(activity_imageなど)のレコード削除時に対応するfileレコードが削除されない (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3738">#3738</a> を参照。</p>
OpenPNE 3 - Bug(バグ) #3752 (Won't fix(対応せず)): アクティビティを削除しても添付された画像がDBから削除されない
http://redmine.openpne.jp/issues/3752
2015-01-05T05:39:16Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="現象"></a>
<h3 >現象<a href="#現象" class="wiki-anchor">¶</a></h3>
<p>opTimelinePlugin 等のプラグインによって投稿された画像付きのアクティビティを削除しても、添付されている画像は削除されずに DB に残ってしまう。</p>
<a name="再現手順"></a>
<h3 >再現手順<a href="#再現手順" class="wiki-anchor">¶</a></h3>
<p>標準のアクティビティ関係のガジェットには画像投稿機能は備わっていないため、ここでは例として opTimelinePlugin を使用する。</p>
<ol>
<li>opTimelinePlugin から画像付きのアクティビティを投稿する</li>
<li>タイムラインに表示された画像付きのアクティビティを削除する
<ul>
<li>または、標準の「SNSメンバーのアクティビティ」ガジェットから画像付きのアクティビティを削除する</li>
</ul>
</li>
<li>管理画面のアップロード画像リスト (/pc_backend.php/monitoring) に、アクティビティに添付されていた画像が表示されたままとなっている</li>
</ol>
<a name="原因"></a>
<h3 >原因<a href="#原因" class="wiki-anchor">¶</a></h3>
<p>親チケット <a class="issue tracker-1 status-13 priority-4 priority-default closed parent" title="Bug(バグ): fileを参照するテーブル(activity_imageなど)のレコード削除時に対応するfileレコードが削除されない (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3738">#3738</a> を参照。</p>
OpenPNE 3 - Bug(バグ) #3738 (Won't fix(対応せず)): fileを参照するテーブル(activity_imageなど)のレコード削除時に対応するfileレコード...
http://redmine.openpne.jp/issues/3738
2014-12-08T16:32:29Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>メンバーのプロフィール画像やコミュニティ画像などの file テーブルを介して格納される画像について、ブラウザ上で画像を変更・削除しても対応する file, file_bin レコードがデータベース上に残ったまま削除されない。</p>
<p>削除されずに残った画像は管理画面のアップロード画像リスト (<code>/pc_backend.php/monitoring</code>) からも確認できる。</p>
<p>対象となるテーブル:</p>
<ul>
<li>OpenPNE コア
<ul>
<li>activity_image (<a class="issue tracker-1 status-13 priority-4 priority-default closed child" title="Bug(バグ): アクティビティを削除しても添付された画像がDBから削除されない (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3752">#3752</a>)</li>
<li>banner_image (<a class="issue tracker-1 status-13 priority-4 priority-default closed child" title="Bug(バグ): バナー設定でアップロードした画像を削除してもDBから削除されない (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3755">#3755</a>)</li>
<li>community (<a class="issue tracker-1 status-13 priority-4 priority-default closed child" title="Bug(バグ): コミュニティ画像が設定されたコミュニティを削除しても画像がDBから削除されない (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3753">#3753</a>)</li>
<li>member_image (<a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): The record of the File is not deleted when related MemberImage is deleted (MemberImage が削除されたときに ... (Fixed(完了))" href="http://redmine.openpne.jp/issues/453">#453</a> <b>修正済み</b>)</li>
<li>oauth_consumer (<a class="issue tracker-1 status-13 priority-4 priority-default closed child" title="Bug(バグ): 画像付きのOAuthアプリケーションを削除してもDBから画像が削除されない (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3756">#3756</a>)</li>
</ul>
</li>
<li>opAlbumPlugin (<a class="issue tracker-1 status-9 priority-4 priority-default" title="Bug(バグ): アルバム・アルバム画像を削除しても画像ファイルが削除されていない (Pending Review(レビュー待ち))" href="http://redmine.openpne.jp/issues/2447">#2447</a>)
<ul>
<li>album</li>
<li>album_image</li>
</ul>
</li>
<li>opCommunityTopicPlugin (<a class="issue tracker-4 status-13 priority-4 priority-default closed child" title="Backport(バックポート): 画像が添付されたコミュニティトピックを削除しても、管理画面のアップロード画像リストに画像が残る (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/2591">#2591</a>)
<ul>
<li>community_event_image</li>
<li>community_event_comment_image</li>
<li>community_topic_image</li>
<li>community_topic_comment_image</li>
</ul>
</li>
<li>opDiaryPlugin (<a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): 日記・日記コメントを削除しても添付画像が削除されない (Fixed(完了))" href="http://redmine.openpne.jp/issues/106">#106</a> <b>修正済み</b>)
<ul>
<li>diary_image</li>
<li>diary_comment_image</li>
</ul>
</li>
<li>opMessagePlugin (<a class="issue tracker-1 status-5 priority-3 priority-lowest closed parent" title="Bug(バグ): メッセージを削除しても画像データが削除されていない (Fixed(完了))" href="http://redmine.openpne.jp/issues/190">#190</a>)
<ul>
<li>message_file</li>
</ul></li>
</ul>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<pre><code class="yaml syntaxhl"><span class="CodeRay"><span class="key">HogeImage</span>:
<span class="key">columns</span>:
<span class="key">id</span>: <span class="string"><span class="content">{ type: integer(4), primary: true, autoincrement: true }</span></span>
<span class="key">hoge_id</span>: <span class="string"><span class="content">{ type: integer(4), notnull: true }</span></span>
<span class="key">file_id</span>: <span class="string"><span class="content">{ type: integer(4), notnull: true }</span></span>
<span class="key">relations</span>:
<span class="key">Hoge</span>: <span class="string"><span class="content">{ onDelete: cascade }</span></span>
<span class="key">File</span>: <span class="string"><span class="content">{ onDelete: cascade }</span></span>
</span></code></pre>
<p>例えば上記の様な DB スキーマの定義があったとき、外部キー制約があるため file のレコードが削除されると対応する hoge_image のレコードが削除されるが、逆に hoge_image のレコードが削除されても file のレコードは削除されない。そのため hoge_image のレコードを削除する際に対応する file のレコードを明示的に削除する必要がある。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<a name="HogeImage-を削除する際に関連する-File-が削除されるようにする"></a>
<h4 >HogeImage を削除する際に関連する File が削除されるようにする<a href="#HogeImage-を削除する際に関連する-File-が削除されるようにする" class="wiki-anchor">¶</a></h4>
<pre><code class="php syntaxhl"><span class="CodeRay"><span class="keyword">class</span> <span class="class">HogeImage</span> <span class="keyword">extends</span> <span class="constant">BaseHogeImage</span>
{
<span class="keyword">public</span> <span class="keyword">function</span> <span class="function">preDelete</span>(<span class="local-variable">$event</span>)
{
<span class="local-variable">$this</span>-><span class="predefined">File</span>-><span class="predefined">delete</span>();
}
}
</span></code></pre>
<p>File を参照するモデルのクラスに <code>preDelete()</code> メソッドを定義し、その中で <code>$this->File->delete();</code> を実行することで関連する file テーブルのレコードも削除されるようになる。</p>
<a name="Hoge-を削除する際に関連する-HogeImage-を明示的に削除する"></a>
<h4 >Hoge を削除する際に関連する HogeImage を明示的に削除する<a href="#Hoge-を削除する際に関連する-HogeImage-を明示的に削除する" class="wiki-anchor">¶</a></h4>
<p>hoge のレコードを削除した場合は、外部キー制約の <code>ON DELETE CASCADE</code> によりそれを参照する hoge_image のレコードも削除される。しかしこれは DBMS 側で行われるもので Doctrine は関知しないため、削除時に <code>HogeImage::preDelete()</code> は実行されない。<br />これでは Hoge の delete() メソッドを呼び出した場合には前述の修正に関わらず File から画像が削除されず残ってしまうため、<code>Hoge::preDelete()</code> から <code>$this->HogeImage->delete();</code> を明示的に呼び出す必要がある。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"><span class="keyword">class</span> <span class="class">Hoge</span> <span class="keyword">extends</span> <span class="constant">BaseHoge</span>
{
<span class="keyword">public</span> <span class="keyword">function</span> <span class="function">preDelete</span>(<span class="local-variable">$event</span>)
{
<span class="comment">// HogeImage::preDelete() を実行させるために明示的に削除する</span>
<span class="local-variable">$this</span>-><span class="constant">HogeImage</span>-><span class="predefined">delete</span>();
}
}
</span></code></pre>
OpenPNE 3 - Bug(バグ) #3543 (Won't fix(対応せず)): MySQLのStrict Modeが有効な状態でメンバーの新規登録を行うとエラーが発生する
http://redmine.openpne.jp/issues/3543
2014-01-07T05:39:57Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="現象"></a>
<h3 >現象<a href="#現象" class="wiki-anchor">¶</a></h3>
<p>MySQLの <a href="http://dev.mysql.com/doc/refman/5.1/ja/server-sql-mode.html" class="external">Strict Mode</a> が有効な環境でメンバーの新規登録を行う際に <strong>プリセット</strong> でかつ <strong>日付</strong> の項目を入力すると、次のようなエラーが発生する。</p>
<pre>
SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '' for column 'value_datetime' at row 1
</pre>
<p>エラーが発生した SQL は下記の通り。</p>
<pre>
12月 27 17:23:12 symfony [info] {Doctrine_Connection_Statement} execute : INSERT INTO member_profile (value, member_id, profile_id, value_datetime, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?) - (, 6, 2, , 2013-12-27 17:23:12, 2013-12-27 17:23:12)
</pre>
<a name="再現手順"></a>
<h3 >再現手順<a href="#再現手順" class="wiki-anchor">¶</a></h3>
<ol>
<li>MySQL の my.cnf に下記の設定を加える<br /><pre>
[mysqld]
sql_mode=STRICT_ALL_TABLES
</pre></li>
<li>管理画面から招待メールを送信し、メールに記載されたURLから新規登録ページ (/member/register) を開く</li>
<li>プロフィール入力 (/member/registerInput) へ進む</li>
<li>必須項目と <strong>誕生日</strong> を入力する</li>
<li>「送信」をクリックすると500エラーが発生する</li>
</ol>
<a name="原因"></a>
<h3 >原因<a href="#原因" class="wiki-anchor">¶</a></h3>
<p><code>MemberProfile::preSave()</code> 内の下記のコードが直接の原因となっている。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"> <span class="keyword">elseif</span> (<span class="string"><span class="delimiter">'</span><span class="content">date</span><span class="delimiter">'</span></span> === <span class="local-variable">$this</span>->getFormType() && <span class="predefined">isset</span>(<span class="local-variable">$modified</span>[<span class="string"><span class="delimiter">'</span><span class="content">value</span><span class="delimiter">'</span></span>]) && <span class="local-variable">$this</span>->getProfile()->isPreset())
{
<span class="local-variable">$this</span>->_set(<span class="string"><span class="delimiter">'</span><span class="content">value_datetime</span><span class="delimiter">'</span></span>, <span class="local-variable">$this</span>->_get(<span class="string"><span class="delimiter">'</span><span class="content">value</span><span class="delimiter">'</span></span>));
}
</span></code></pre>
<p><code>config/doctrine/schema.yml</code> に <code>MemberProfile.value</code> のデフォルト値が <code>""</code> であると記述されているため、value に変更が加えられたか否かに係わらず <code>MemberProfile::preSave()</code> 内で <code>isset($modified['value'])</code> は常に true になる(UPDATE の場合を除く)。<br />すると <code>MemberProfile.value_datetime</code> に空文字列がそのままセットされてしまい、前述の <code>Invalid datetime format</code> エラーが発生してしまう。</p>
<p>なお、プリセットではない日付型のプロフィール項目については value_datetime は使用されない (参照: <a class="changeset" title="member_profile.value_datetime is now for presetting datetime profile. And also "0000-00-00 00:00:..." href="http://redmine.openpne.jp/projects/op3/repository/revisions/b6445a0a40700daa193d1f43280fbef493da02aa">b6445a0a</a>) ためこの問題は発生しない。</p>
<a name="修正内容"></a>
<h3 >修正内容<a href="#修正内容" class="wiki-anchor">¶</a></h3>
<p><code>MemberProfile::preSave()</code> 内で <code>value_datetime</code> に対するから文字列の代入が行われないように <code>$modified['value']</code> のチェックを行う。</p>
OpenPNE 3 - Bug(バグ) #3507 (Won't fix(対応せず)): opDynamicAclRoute クラスが allow_empty オプションの利用を想定していない
http://redmine.openpne.jp/issues/3507
2013-11-29T08:24:15Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>opDynamicAclRoute クラスを使用したルートの <a href="http://symfony.com/legacy/doc/reference/1_4/ja/10-Routing#chapter_10_sub_allow_empty" class="external">allow_empty</a> オプションを true にセットした状態で存在しないオブジェクトに対する URL がリクエストされると、 <code>$route->getObject()</code> で null が返されることなく Fatal Error が発生し異常終了する。</p>
<pre>
[Fri Nov 29 16:56:45.251504 2013] [fcgid:warn] [pid 32517:tid 139863663769344] [client 115.65.29.61:64752] mod_fcgid: stderr: PHP Fatal error: Call to a member function isAllowed() on a non-object in /home/upsilon/git/openpne3/master/lib/routing/opDynamicAclRoute.class.php on line 44, referer: https://sns.example.com/communityTopic/1
</pre>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>opDynamicAclRoute::getObject() メソッド内で、parent::getObject() が null を返すことが想定していないことが原因。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"> <span class="keyword">public</span> <span class="keyword">function</span> <span class="function">getObject</span>()
{
<span class="local-variable">$result</span> = <span class="predefined-constant">parent</span>::getObject();
<span class="keyword">if</span> (!<span class="local-variable">$role</span> = <span class="local-variable">$this</span>->getCurrentMemberId())
{
<span class="local-variable">$role</span> = <span class="string"><span class="delimiter">'</span><span class="content">alien</span><span class="delimiter">'</span></span>;
}
<span class="keyword">if</span> (<span class="local-variable">$result</span> <span class="keyword">instanceof</span> opAccessControlRecordInterface)
{
<span class="keyword">if</span> (!<span class="local-variable">$result</span>->isAllowed(<span class="local-variable">$this</span>->getCurrentMember(), <span class="local-variable">$this</span>->options[<span class="string"><span class="delimiter">'</span><span class="content">privilege</span><span class="delimiter">'</span></span>]))
{
<span class="local-variable">$this</span>->handleRestriction();
}
}
<span class="keyword">elseif</span> (!<span class="local-variable">$this</span>->acl->isAllowed(<span class="local-variable">$this</span>->getCurrentMemberId(), <span class="predefined-constant">null</span>, <span class="local-variable">$this</span>->options[<span class="string"><span class="delimiter">'</span><span class="content">privilege</span><span class="delimiter">'</span></span>]))
{
<span class="local-variable">$this</span>->handleRestriction();
}
<span class="keyword">return</span> <span class="local-variable">$result</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>parent::getObject() が null を返した場合には何もせずそのまま null を返すように修正する。</p>
OpenPNE 3 - Bug(バグ) #3475 (Won't fix(対応せず)): 部分 SSL 使用時に SSL 必須のページでカスタム CSS が読み込まれない
http://redmine.openpne.jp/issues/3475
2013-11-01T06:44:51Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>config/OpenPNE.yml にて部分 SSL を有効 (<code>use_ssl: true</code>) にしている環境で、ログイン画面 (member/login) などの SSL 必須のページを Web ブラウザからアクセスする際にカスタム CSS が読み込まれない場合がある。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>カスタム CSS は /cache/css/customizing.css (実体は default/customizingCss アクション) が読み込まれることによって反映される仕組みとなっているが、default/customizingCss アクションは部分 SSL の対象となっていないため常に <code>http://</code> スキームにリダイレクトされてしまう。<br />Google Chrome などの Web ブラウザでは、SSL で保護されている Web ページ内に保護されていない CSS などのコンテンツが含まれている場合は「混在したコンテンツ」としてブロックされるため、結果としてカスタム CSS が読み込まれない状態となる。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>config/OpenPNE.yml.sample の ssl_selectable_actions に default/customizingCss アクションを追加する</p>