OpenPNE Issue Tracking System: チケット
http://redmine.openpne.jp/
http://redmine.openpne.jp/favicon.ico
2016-11-14T07:59:10Z
OpenPNE Issue Tracking System
Redmine
OpenPNE 3 - Task(タスク) #4040 (New(新規)): #3083の修正コミットがstable-3.8.xのみに存在し、masterブランチに対するチケット及びPull R...
http://redmine.openpne.jp/issues/4040
2016-11-14T07:59:10Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="概要"></a>
<h3 >概要<a href="#概要" class="wiki-anchor">¶</a></h3>
<p><a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): --internetオプション付けないでインストールした場合、プラグイン設定ページにアクセスできない (Fixed(完了))" href="http://redmine.openpne.jp/issues/3083">#3083</a> はトラッカーが Bug のチケットであるが、その修正コミットである <a class="changeset" title="(fixes #3083) fixed not to occur Exception when channel server was not registered" href="http://redmine.openpne.jp/projects/op3/repository/revisions/41db124efa99201060a2d17cecac966045b8c611">41db124e</a> は stable-3.8.x に取り込まれている。<br />そのため <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): --internetオプション付けないでインストールした場合、プラグイン設定ページにアクセスできない (Fixed(完了))" href="http://redmine.openpne.jp/issues/3083">#3083</a> の役割は実質 Backport のチケットであるが、一方で <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): --internetオプション付けないでインストールした場合、プラグイン設定ページにアクセスできない (Fixed(完了))" href="http://redmine.openpne.jp/issues/3083">#3083</a> の修正を master ブランチで行うチケットが存在していない。</p>
<p>内容が酷似した <a class="issue tracker-1 status-13 priority-4 priority-default closed" title="Bug(バグ): --internetオプション付けないでインストールした場合、プラグイン設定ページにアクセスできない (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3011">#3011</a>, <a class="issue tracker-4 status-5 priority-4 priority-default closed" title="Backport(バックポート): --internetオプション付けないでインストールした場合、プラグイン設定ページにアクセスできない (Fixed(完了))" href="http://redmine.openpne.jp/issues/3012">#3012</a> のチケットも存在するが、これらは <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): --internetオプション付けないでインストールした場合、プラグイン設定ページにアクセスできない (Fixed(完了))" href="http://redmine.openpne.jp/issues/3083">#3083</a> 以前に master ブランチで修正および stable-3.8.x へのバックポートが既に行われている。<br /><a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): --internetオプション付けないでインストールした場合、プラグイン設定ページにアクセスできない (Fixed(完了))" href="http://redmine.openpne.jp/issues/3083">#3083</a> は、一度 <a class="issue tracker-1 status-13 priority-4 priority-default closed" title="Bug(バグ): --internetオプション付けないでインストールした場合、プラグイン設定ページにアクセスできない (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3011">#3011</a>, <a class="issue tracker-4 status-5 priority-4 priority-default closed" title="Backport(バックポート): --internetオプション付けないでインストールした場合、プラグイン設定ページにアクセスできない (Fixed(完了))" href="http://redmine.openpne.jp/issues/3012">#3012</a> で修正した問題について再び修正を試みたチケットであるように読み取れる。</p>
<a name="対応方法"></a>
<h3 >対応方法<a href="#対応方法" class="wiki-anchor">¶</a></h3>
<p>stable-3.8.x ブランチにしか存在しない <a class="changeset" title="(fixes #3083) fixed not to occur Exception when channel server was not registered" href="http://redmine.openpne.jp/projects/op3/repository/revisions/41db124efa99201060a2d17cecac966045b8c611">41db124e</a> の修正を master ブランチに cherry-pick するためのチケットおよび Pull Request を作成する</p>
opBlogPlugin - Bug(バグ) #3986 (Accepted(着手)): v0.9.0からv1.0.2へのマイグレーション後とv1.0.2のクリーンインストール後でDBスキーマに...
http://redmine.openpne.jp/issues/3986
2016-07-27T11:32:27Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>マイグレーションスクリプトの不備により v1.0.2 へのマイグレーションと v1.0.2 のクリーンインストール後で <code>blog_rss_cache</code> テーブルのスキーマに差異が生じている。</p>
<pre>
$ cd plugins/opBlogPlugin
$ git checkout v0.9.0
$ ../../symfony doctrine:build --env=test --all --and-load
$ git checkout v1.0.2
$ ../../symfony openpne:migrate --env=test --no-update-plugin --target=opBlogPlugin
$ echo 'SHOW CREATE TABLE blog_rss_cache\G' | mysql -u root openpne_test > schema-migrate.txt
$ ../../symfony doctrine:build --env=test --all --and-load
$ echo 'SHOW CREATE TABLE blog_rss_cache\G' | mysql -u root openpne_test > schema-rebuild.txt
$ diff -u schema-migrate.txt schema-rebuild.txt
</pre>
<pre><code class="diff syntaxhl"><span class="CodeRay"><span class="line head"><span class="head">--- </span><span class="filename">schema-migrate.txt 2016-07-27 17:45:29.927593471 +0900</span></span>
<span class="line head"><span class="head">+++ </span><span class="filename">schema-rebuild.txt 2016-07-27 17:46:18.371593471 +0900</span></span>
<span class="line change"><span class="change">@@</span> -11,5 +11,7 <span class="change">@@</span></span>
`updated_at` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `date_INDEX_idx` (`date`),
<span class="line delete"><span class="delete">-</span> KEY `member_id_date_idx` (`member_id`,`date`)</span>
<span class="line insert"><span class="insert">+</span> KEY `member_id_date_idx` (`member_id`,`date`),</span>
<span class="line insert"><span class="insert">+</span> KEY `member_id_idx` (`member_id`),</span>
<span class="line insert"><span class="insert">+</span> CONSTRAINT `blog_rss_cache_member_id_member_id` FOREIGN KEY (`member_id`) REFERENCES `member` (`id`)</span>
) ENGINE=InnoDB DEFAULT CHARSET=utf8
</span></code></pre>
<p>不足している箇所:</p>
<ul>
<li>インデックス <code>member_id_idx</code> (Doctrine によって自動で追加されたもの) が追加されていない</li>
<li>外部キー制約 <code>blog_rss_cache_member_id_member_id</code> が追加されていない</li>
</ul>
<p>特に <code>blog_rss_cache_member_id_member_id</code> が存在しない不一致については、v1.0.3 で修正された <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): opBlogPlugin を使用しているメンバーが退会しようとすると500エラーとなる (Fixed(完了))" href="http://redmine.openpne.jp/issues/3473">#3473</a> に関するマイグレーション時に問題となる。<br />具体的には v0.9.0 をクリーンインストールした状態から v1.0.3 にマイグレーションすると下記のエラーが発生して異常終了する。</p>
<pre>
migrating of opBlogPlugin encountered the following errors:
Error #1 - SQLSTATE[42000]: Syntax error or access violation: 1091 Can't DROP 'blog_rss_cache_member_id_member_id'; check that column/key exists. Failing Query: "ALTER TABLE `blog_rss_cache` DROP FOREIGN KEY blog_rss_cache_member_id_member_id"
</pre>
<p>このエラーが発生した場合、マイグレーションが途中まで完了した状態かつ <code>opBlogPlugin_revision</code> が更新されないままロールバックされずに中断されるため、復旧が困難な <strong>非常に面倒な状態になる</strong>。(チケットの優先度を高めにしたのはこのため)</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p><code>data/migrations/1.0.0/001_add_blog_rss_cache_table.php</code> に必要な定義が不足していたことが原因。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>修正にあたって下記のパターンを考慮する必要がある。</p>
<ul>
<li>v0.9.0 をクリーンインストールした状態から最新版にマイグレーション
<ul>
<li><code>opBlogPlugin_revision</code> が存在しない状態からリビジョン 1, 2, 3, 4 の差分が一度に適用される</li>
<li>この場合、リビジョン 1 を直接修正することで <code>blog_rss_cache_member_id_member_id</code> を追加できる</li>
<li>一方で、リビジョン 1 を修正したとしても、追加された <code>blog_rss_cache_member_id_member_id</code> の存在をリビジョン 4 の up メソッド内でチェックすることはできない</li>
<li>各リビジョンの up メソッド内で呼ばれる addForeignKey などのメソッドは即時に SQL として実行されるものではない(全てのリビジョンの up メソッドが呼ばれた後に一度に実行される)</li>
</ul>
</li>
<li>v0.9.0 をクリーンインストールした状態から一度 v1.0.2 にマイグレーションしてから最新版にマイグレーション
<ul>
<li><code>opBlogPlugin_revision</code> が存在しない状態からリビジョン 1, 2, 3 の差分が適用され、その後リビジョン 4 が適用される</li>
<li>修正前のリビジョン 1 がすでに適用された状態からのマイグレーション</li>
<li>リビジョン 4 が実行される時点では <code>blog_rss_cache_member_id_member_id</code> が存在しない状態</li>
</ul>
</li>
<li>v1.0.2 をクリーンインストールした状態から最新版にマイグレーション
<ul>
<li><code>opBlogPlugin_revision</code> が 3 の状態からリビジョン 4 が適用される</li>
<li>リビジョン 4 が実行される時点では <code>blog_rss_cache_member_id_member_id</code> が存在する状態</li>
</ul>
</li>
<li>最新版をクリーンインストール</li>
</ul>
<p>上記の全てのパターンでインストールまたはマイグレーションが正常に完了し、かつ最終的な <code>blog_rss_cache</code> テーブルのスキーマが同一でなければならない。</p>
OpenPNE 3 - Backport(バックポート) #3971 (New(新規)): #3968で削除したテストコードを動作する状態にして再び追加する
http://redmine.openpne.jp/issues/3971
2016-07-19T02:30:58Z
Youichi Kimura
kim.upsilon@bucyou.net
<p><a class="issue tracker-4 status-8 priority-4 priority-default" title="Backport(バックポート): 壊れたテストコードを削除する (Rejected(差し戻し))" href="http://redmine.openpne.jp/issues/3968">#3968</a> で削除したテストコードを動作する状態に修正した上で再び追加します。</p>
<a name="Functional-Test"></a>
<h4 >Functional Test<a href="#Functional-Test" class="wiki-anchor">¶</a></h4>
<ul>
<li>pc_backend
<ul>
<li>POST /community/categoryEdit/id/1 (CSRF)</li>
<li>POST /community/addDefaultCommunity/id/1 (CSRF)</li>
<li>POST /connection (CSRF)</li>
<li>POST /connection/1 (CSRF)</li>
<li>POST /default/login (CSRF)</li>
<li>POST /design/gadget?type=gadget (sfTesterDoctrine::check)</li>
<li>POST /design/gadget?type=sideBanner (sfTesterDoctrine::check)</li>
<li>POST /design/gadget?type=mobile (sfTesterDoctrine::check)</li>
<li>POST /design (CSRF)</li>
<li>POST /design/gadget (CSRF)</li>
<li>POST /design/customCss (CSRF)</li>
<li>POST /navigation/edit?app=pc (CSRF)</li>
<li>POST /navigation/edit?app=mobile (CSRF)</li>
<li>POST /navigation/edit?app=backend (CSRF)</li>
<li>POST /plugin/list?type=application (CSRF)</li>
<li>POST /plugin/list?type=auth (CSRF)</li>
<li>POST /plugin/list?type=skin (CSRF)</li>
<li>POST /profile/editOption (CSRF)</li>
<li>GET /sns/config?category=general (sfTestFunctionalBase::click)</li>
<li>POST /sns/richTextarea (CSRF)</li>
<li>POST /sns/changeRichTextareaButtonOrder (CSRF)</li>
</ul>
</li>
<li>pc_frontend
<ul>
<li><del>POST /community/quit?id=1 (CSRF)</del>
<ul>
<li>stable-3.8.x にのみ存在しないテスト</li>
</ul>
</li>
<li><del>POST /community/join?id=1 (CSRF)</del>
<ul>
<li>stable-3.8.x にのみ存在しないテスト</li>
</ul>
</li>
<li><del>GET /community/changeAdminRequest?id=1055&member_id=1056 (XSS)</del>
<ul>
<li>stable-3.8.x にのみ存在しないテスト</li>
</ul>
</li>
<li><del>GET /community/changeAdminRequest?id=1055&member_id=1056 (XSS)</del>
<ul>
<li>stable-3.8.x にのみ存在しないテスト</li>
</ul>
</li>
<li><del>GET /community/1055 (XSS)</del>
<ul>
<li>stable-3.8.x にのみ存在しないテスト</li>
</ul>
</li>
<li>「コミュニティリスト」ガジェットの画像部分のリンク先に対するリクエスト</li>
<li>「コミュニティリスト」ガジェットのテキスト部分のリンク先に対するリクエスト</li>
<li>POST /confirmation/community_admin_request/5 (CSRF)</li>
<li>POST /confirmation/community_sub_admin_request/8 (CSRF)</li>
<li>GET /connection/1055 (XSS)</li>
<li>GET /connection/list (XSS)</li>
<li>POST /connection (CSRF)</li>
<li>POST /connection/2/delete (CSRF)</li>
<li>POST /connection/2 (CSRF)</li>
<li>POST /connection/revoke/2 (CSRF)</li>
<li>POST /leave (CSRF)</li>
<li>POST /member/config?category=language (CSRF)</li>
<li>GET / (XSS, RSSガジェット部分)</li>
</ul>
</li>
<li>api
<ul>
<li><a href="https://houou.github.io/api.php/" class="external">JSON API</a> に対するテスト</li>
</ul></li>
</ul>
<a name="Unit-Test"></a>
<h4 >Unit Test<a href="#Unit-Test" class="wiki-anchor">¶</a></h4>
<ul>
<li>Doctrine_Record::getListener() (opApplicationLevelCascadingListener)</li>
<li>ActivityDataTable::getPublicFlags()</li>
<li>CommunityCategoryTable::getAllChildren()</li>
<li>CommunityCategory::getChildren()</li>
<li>CommunityMemberTable::join()</li>
<li>CommunityMemberTable::quit()</li>
<li>CommunityMemberTable::requestChangeAdmin()</li>
<li>CommunityMemberTable::requestSubAdmin()</li>
<li>CommunityMemberTable::getMemberIdsByCommunityId()</li>
<li>CommunityTable::getCommunityMemberListPager()</li>
<li>CommunityTable::getDefaultCommunities()</li>
<li>Community::countCommunityMembers()</li>
<li>Community::getNameAndCount()</li>
<li>File::delete()</li>
<li>MemberProfileTable::searchMemberIds()</li>
<li>MemberRelationshipTable::retrievesByMemberIdFrom()</li>
<li>MemberRelationshipTable::getFriendListPager()</li>
<li>MemberRelationshipTable::getFriendMemberIds()</li>
<li>MemberTable::searchMemberIds()</li>
<li>Member::getProfiles()</li>
<li>Member::countFriends()</li>
<li>Member::getNameAndCount()</li>
<li>Member::delete()</li>
<li>OAuthConsumerInformationTable::getListPager()</li>
<li>OAuthConsumerInformation::getAPICaptions()</li>
<li>ProfileOptionTable::getMaxSortOrder()</li>
<li>ProfileTable::getMaxSortOrder()</li>
<li>Profile::getOptionsArray()</li>
<li>opToolkit::loadXmlString()</li>
</ul>
OpenPNE 3 - Backport(バックポート) #3970 (New(新規)): #3967で削除したテストコードを動作する状態にして再び追加する
http://redmine.openpne.jp/issues/3970
2016-07-19T02:30:46Z
Youichi Kimura
kim.upsilon@bucyou.net
<p><a class="issue tracker-4 status-13 priority-4 priority-default closed" title="Backport(バックポート): 壊れたテストコードを削除する (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3967">#3967</a> で削除したテストコードを動作する状態に修正した上で再び追加します。</p>
<a name="Functional-Test"></a>
<h4 >Functional Test<a href="#Functional-Test" class="wiki-anchor">¶</a></h4>
<ul>
<li>pc_backend
<ul>
<li>POST /community/categoryEdit/id/1 (CSRF)</li>
<li>POST /community/addDefaultCommunity/id/1 (CSRF)</li>
<li>POST /connection (CSRF)</li>
<li>POST /connection/1 (CSRF)</li>
<li>POST /default/login (CSRF)</li>
<li>POST /design/gadget?type=gadget (sfTesterDoctrine::check)</li>
<li>POST /design/gadget?type=sideBanner (sfTesterDoctrine::check)</li>
<li>POST /design/gadget?type=mobile (sfTesterDoctrine::check)</li>
<li>POST /design (CSRF)</li>
<li>POST /design/gadget (CSRF)</li>
<li>POST /design/customCss (CSRF)</li>
<li>POST /mail (CSRF)
<ul>
<li>stable-3.6.x にのみ存在するテスト</li>
</ul>
</li>
<li>POST /mail/edit (CSRF)
<ul>
<li>stable-3.6.x にのみ存在するテスト</li>
</ul>
</li>
<li>POST /navigation/edit?app=pc (CSRF)</li>
<li>POST /navigation/edit?app=mobile (CSRF)</li>
<li>POST /navigation/edit?app=backend (CSRF)</li>
<li>POST /plugin/list?type=application (CSRF)</li>
<li>POST /plugin/list?type=auth (CSRF)</li>
<li>POST /plugin/list?type=skin (CSRF)</li>
<li>POST /profile/editOption (CSRF)</li>
<li>GET /sns/config?category=general (sfTestFunctionalBase::click)</li>
<li>POST /sns/richTextarea (CSRF)</li>
<li>POST /sns/changeRichTextareaButtonOrder (CSRF)</li>
</ul>
</li>
<li>pc_frontend
<ul>
<li>GET /OpenID/list (XSS)
<ul>
<li>stable-3.6.x にのみ存在するテスト</li>
</ul>
</li>
<li>/OpenID/unsetPermission?id=2 (CSRF)
<ul>
<li>stable-3.6.x にのみ存在するテスト</li>
</ul>
</li>
<li>POST /community/quit?id=1 (CSRF)</li>
<li>POST /community/join?id=1 (CSRF)</li>
<li>GET /community/changeAdminRequest?id=1055&member_id=1056 (XSS)</li>
<li>GET /community/changeAdminRequest?id=1055&member_id=1056 (XSS)</li>
<li>GET /community/1055 (XSS)</li>
<li>「コミュニティリスト」ガジェットの画像部分のリンク先に対するリクエスト</li>
<li>「コミュニティリスト」ガジェットのテキスト部分のリンク先に対するリクエスト</li>
<li>POST /confirmation/community_admin_request/5 (CSRF)</li>
<li>POST /confirmation/community_sub_admin_request/8 (CSRF)</li>
<li>GET /connection/1055 (XSS)</li>
<li>GET /connection/list (XSS)</li>
<li>POST /connection (CSRF)</li>
<li>POST /connection/2/delete (CSRF)</li>
<li>POST /connection/2 (CSRF)</li>
<li>POST /connection/revoke/2 (CSRF)</li>
<li>POST /leave (CSRF)</li>
<li>POST /member/config?category=language (CSRF)</li>
<li>GET / (XSS, RSSガジェット部分)</li>
</ul>
</li>
<li>api
<ul>
<li><del><a href="https://houou.github.io/api.php/" class="external">JSON API</a> に対するテスト</del>
<ul>
<li>stable-3.6.x にのみ存在しないテスト</li>
</ul></li>
</ul></li>
</ul>
<a name="Unit-Test"></a>
<h4 >Unit Test<a href="#Unit-Test" class="wiki-anchor">¶</a></h4>
<ul>
<li>Doctrine_Record::getListener() (opApplicationLevelCascadingListener)</li>
<li>ActivityDataTable::getPublicFlags()</li>
<li>CommunityCategoryTable::getAllChildren()</li>
<li>CommunityCategory::getChildren()</li>
<li>CommunityMemberTable::join()</li>
<li>CommunityMemberTable::quit()</li>
<li>CommunityMemberTable::requestChangeAdmin()</li>
<li>CommunityMemberTable::requestSubAdmin()</li>
<li>CommunityMemberTable::getMemberIdsByCommunityId()</li>
<li>CommunityTable::getCommunityMemberListPager()</li>
<li>CommunityTable::getDefaultCommunities()</li>
<li>Community::countCommunityMembers()</li>
<li>Community::getNameAndCount()</li>
<li>File::delete()</li>
<li>MemberProfileTable::searchMemberIds()</li>
<li>MemberRelationshipTable::retrievesByMemberIdFrom()</li>
<li>MemberRelationshipTable::getFriendListPager()</li>
<li>MemberRelationshipTable::getFriendMemberIds()</li>
<li>MemberTable::searchMemberIds()</li>
<li>Member::getProfiles()</li>
<li>Member::countFriends()</li>
<li>Member::getNameAndCount()</li>
<li>Member::delete()</li>
<li>OAuthConsumerInformationTable::getListPager()</li>
<li>OAuthConsumerInformation::getAPICaptions()</li>
<li>ProfileOptionTable::getMaxSortOrder()</li>
<li>ProfileTable::getMaxSortOrder()</li>
<li>Profile::getOptionsArray()</li>
<li>opToolkit::loadXmlString()</li>
</ul>
OpenPNE 3 - Enhancement(機能追加・改善) #3969 (New(新規)): #3962で削除したテストコードを動作する状態にして再び追加する
http://redmine.openpne.jp/issues/3969
2016-07-19T02:30:37Z
Youichi Kimura
kim.upsilon@bucyou.net
<p><a class="issue tracker-2 status-10 priority-4 priority-default parent" title="Enhancement(機能追加・改善): 壊れたテストコードを削除する (Pending Testing(テスト待ち))" href="http://redmine.openpne.jp/issues/3962">#3962</a> で削除したテストコードを動作する状態に修正した上で再び追加します。</p>
<a name="Functional-Test"></a>
<h4 >Functional Test<a href="#Functional-Test" class="wiki-anchor">¶</a></h4>
<ul>
<li>pc_backend
<ul>
<li>POST /community/categoryEdit/id/1 (CSRF)</li>
<li>POST /community/addDefaultCommunity/id/1 (CSRF)</li>
<li>POST /connection (CSRF)</li>
<li>POST /connection/1 (CSRF)</li>
<li>POST /default/login (CSRF)</li>
<li>POST /design/gadget?type=gadget (sfTesterDoctrine::check)</li>
<li>POST /design/gadget?type=sideBanner (sfTesterDoctrine::check)</li>
<li>POST /design/gadget?type=mobile (sfTesterDoctrine::check)</li>
<li>POST /design (CSRF)</li>
<li>POST /design/banner (CSRF)</li>
<li>POST /design/banneradd (CSRF)</li>
<li>POST /design/gadget (CSRF)</li>
<li>POST /design/customCss (CSRF)</li>
<li>GET /member/delete/id/1055 (XSS)</li>
<li>POST /monitoring/editImage (CSRF)</li>
<li>POST /navigation/edit?app=pc (CSRF)</li>
<li>POST /navigation/edit?app=mobile (CSRF)</li>
<li>POST /navigation/edit?app=backend (CSRF)</li>
<li>POST /plugin/list?type=application (CSRF)</li>
<li>POST /plugin/list?type=auth (CSRF)</li>
<li>POST /plugin/list?type=skin (CSRF)</li>
<li>POST /profile/edit (CSRF)</li>
<li>POST /profile/editOption (CSRF)</li>
<li>GET /sns/config?category=general (sfTestFunctionalBase::click)</li>
<li>POST /sns/richTextarea (CSRF)</li>
<li>POST /sns/changeRichTextareaButtonOrder (CSRF)</li>
</ul>
</li>
<li>pc_frontend
<ul>
<li>POST /community/quit?id=1 (CSRF)</li>
<li>POST /community/join?id=1 (CSRF)</li>
<li>GET /community/changeAdminRequest?id=1055&member_id=1056 (XSS)</li>
<li>GET /community/changeAdminRequest?id=1055&member_id=1056 (XSS)</li>
<li>GET /community/1055 (XSS)</li>
<li>「コミュニティリスト」ガジェットの画像部分のリンク先に対するリクエスト</li>
<li>「コミュニティリスト」ガジェットのテキスト部分のリンク先に対するリクエスト</li>
<li>POST /confirmation/community_admin_request/5 (CSRF)</li>
<li>POST /confirmation/community_sub_admin_request/8 (CSRF)</li>
<li>GET /connection/1055 (XSS)</li>
<li>GET /connection/list (XSS)</li>
<li>POST /connection (CSRF)</li>
<li>POST /connection/2/delete (CSRF)</li>
<li>POST /connection/2 (CSRF)</li>
<li>POST /connection/revoke/2 (CSRF)</li>
<li>POST /leave (CSRF)</li>
<li>POST /member/config?category=accessBlock (CSRF)</li>
<li>POST /member/config?category=language (CSRF)</li>
<li>GET / (XSS, RSSガジェット部分)</li>
</ul>
</li>
<li>api
<ul>
<li><a href="https://houou.github.io/api.php/" class="external">JSON API</a> に対するテスト</li>
</ul></li>
</ul>
<a name="Unit-Test"></a>
<h4 >Unit Test<a href="#Unit-Test" class="wiki-anchor">¶</a></h4>
<ul>
<li>Doctrine_Record::getListener() (opApplicationLevelCascadingListener)</li>
<li>ActivityDataTable::getPublicFlags()</li>
<li>CommunityCategoryTable::getAllChildren()</li>
<li>CommunityCategory::getChildren()</li>
<li>CommunityMemberTable::join()</li>
<li>CommunityMemberTable::quit()</li>
<li>CommunityMemberTable::requestChangeAdmin()</li>
<li>CommunityMemberTable::requestSubAdmin()</li>
<li>CommunityMemberTable::getMemberIdsByCommunityId()</li>
<li>CommunityTable::getCommunityMemberListPager()</li>
<li>CommunityTable::getDefaultCommunities()</li>
<li>Community::countCommunityMembers()</li>
<li>Community::getNameAndCount()</li>
<li>File::delete()</li>
<li>MemberProfileTable::searchMemberIds()</li>
<li>MemberRelationshipTable::retrievesByMemberIdFrom()</li>
<li>MemberRelationshipTable::getFriendListPager()</li>
<li>MemberRelationshipTable::getFriendMemberIds()</li>
<li>MemberTable::searchMemberIds()</li>
<li>Member::getProfiles()</li>
<li>Member::countFriends()</li>
<li>Member::getNameAndCount()</li>
<li>Member::delete()</li>
<li>OAuthConsumerInformationTable::getListPager()</li>
<li>OAuthConsumerInformation::getAPICaptions()</li>
<li>ProfileOptionTable::getMaxSortOrder()</li>
<li>ProfileTable::getMaxSortOrder()</li>
<li>Profile::getOptionsArray()</li>
<li>opToolkit::loadXmlString()</li>
</ul>
OpenPNE 3 - Bug(バグ) #3934 (New(新規)): :80, :443 以外のポートでアクセスするSNSでOAuth署名の検証に失敗する
http://redmine.openpne.jp/issues/3934
2016-04-25T09:47:24Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p><a class="external" href="http://sns.example.com:8080/">http://sns.example.com:8080/</a> のように :80, :443 以外のポートに設置された SNS で、opWebAPIPlugin などが提供する API に OAuth を使用してアクセスしようとすると OAuth 署名の検証に失敗してエラーとなる。</p>
<p>その際に、Apache の error_log には下記のようなエラーが記録される:</p>
<pre>
[Mon Apr 25 09:08:16.854133 2016] [fcgid:warn] [pid 27166:tid 139768981554944] [client 10.0.2.2:60103] mod_fcgid: stderr: Invalid signature
</pre>
<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/vendor/OAuth/OAuth.php#L190">source:lib/vendor/OAuth/OAuth.php@43190aa1#L190</a></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">from_request</span>(<span class="local-variable">$http_method</span>=<span class="predefined-constant">NULL</span>, <span class="local-variable">$http_url</span>=<span class="predefined-constant">NULL</span>, <span class="local-variable">$parameters</span>=<span class="predefined-constant">NULL</span>) {
<span class="local-variable">$scheme</span> = (!<span class="predefined">isset</span>(<span class="predefined">$_SERVER</span>[<span class="string"><span class="delimiter">'</span><span class="content">HTTPS</span><span class="delimiter">'</span></span>]) || <span class="predefined">$_SERVER</span>[<span class="string"><span class="delimiter">'</span><span class="content">HTTPS</span><span class="delimiter">'</span></span>] != <span class="string"><span class="delimiter">"</span><span class="content">on</span><span class="delimiter">"</span></span>)
? <span class="string"><span class="delimiter">'</span><span class="content">http</span><span class="delimiter">'</span></span>
: <span class="string"><span class="delimiter">'</span><span class="content">https</span><span class="delimiter">'</span></span>;
<span class="exception">@</span><span class="local-variable">$http_url</span> <span class="keyword">or</span> <span class="local-variable">$http_url</span> = <span class="local-variable">$scheme</span> .
<span class="string"><span class="delimiter">'</span><span class="content">://</span><span class="delimiter">'</span></span> . <span class="predefined">$_SERVER</span>[<span class="string"><span class="delimiter">'</span><span class="content">HTTP_HOST</span><span class="delimiter">'</span></span>] .
<span class="string"><span class="delimiter">'</span><span class="content">:</span><span class="delimiter">'</span></span> .
<span class="predefined">$_SERVER</span>[<span class="string"><span class="delimiter">'</span><span class="content">SERVER_PORT</span><span class="delimiter">'</span></span>] .
<span class="predefined">$_SERVER</span>[<span class="string"><span class="delimiter">'</span><span class="content">REQUEST_URI</span><span class="delimiter">'</span></span>];
</span></code></pre>
<p>上記のコードは <code>OAuthRequest::from_request()</code> メソッドの冒頭部分であるが、例えば <code>http://sns.example.com:8080/</code> のような URL にアクセスがあった場合は上記の <code>$_SERVER['HTTP_HOST']</code> には <code>sns.example.com:8080</code> の文字列が入る。<br />つまり、この場合の <code>$http_url</code> は <code>http://sns.example.com:8080:8080/</code> という文字列が生成されてしまう。<br />この <code>$http_url</code> は <code>oauth_signature</code> の検証にも使用される文字列であるため、最終的には署名の検証に失敗し不正なリクエストとして扱われることになる。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>この不具合は <code>lib/vendor/OAuth/OAuth.php</code> の問題であるが、 <a class="external" href="https://code.google.com/archive/p/oauth/issues/170">https://code.google.com/archive/p/oauth/issues/170</a> の通り既に報告がされており修正も済んでいる。<br />そのため、<code>lib/vendor/OAuth/OAuth.php</code> を最新の <a class="external" href="https://oauth.googlecode.com/svn/code/php/OAuth.php">https://oauth.googlecode.com/svn/code/php/OAuth.php</a> に置き換えることで当チケットの不具合は解決する。</p>
OpenPNE 3 - Enhancement(機能追加・改善) #3829 (Invalid(無効)): member_configのpc_address_preを複数の目的で使用すべきではない
http://redmine.openpne.jp/issues/3829
2015-07-09T10:18:43Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p>現状、member_config の pc_address_pre は下記の 2 つの目的で使用されている。</p>
<ul>
<li>メンバーの新規登録または招待時に入力されたメールアドレスの保持
<ul>
<li>メンバー登録が完了するまで有効</li>
<li>登録が完了すると、name が pc_address_pre から pc_address に変更される。</li>
<li>参照: <a href="https://github.com/openpne/OpenPNE3/blob/OpenPNE-3.8.16/plugins/opAuthMailAddressPlugin/lib/form/opAuthRegisterFormMailAddress.class.php#L52-L60" class="external"><code>opAuthRegisterFormMailAddress::doSave()</code></a></li>
</ul>
</li>
<li>メンバーのメールアドレス変更時に、確認手続きが完了するまでの変更後のメールアドレスの保持
<ul>
<li>変更後のメールアドレスの確認手続きが完了するまで有効</li>
<li>確認手続きが完了すると、name が pc_address_pre から pc_address に変更される。</li>
<li>参照: <a href="https://github.com/openpne/OpenPNE3/blob/OpenPNE-3.8.16/lib/action/opMemberAction.class.php#L301-L317" class="external"><code>opMemberAction::executeConfigComplete()</code></a></li>
</ul></li>
</ul>
<p>このように pc_address_pre が複数の意味を持っている現状では、新規登録の実装に手を加える際にはメールアドレス変更の影響を受けないか、実装やレビュー時に余分に考慮しなければならない。(メールアドレス変更の実装に変更を加える場合も同様)<br />新規登録はユーザーの権限に影響を及ぼすため変更に慎重を要することや、新規登録のフローは <a class="issue tracker-1 status-13 priority-4 priority-default closed" title="Bug(バグ): 自動ログインCookieを有効にしてログインしているブラウザで新規登録を実行すると member/registerInput で404エラーとなる (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3416">#3416</a> のコメントに記載されているように複雑な手順を踏むことから、考慮しなければならない事項をなるべく減らすためにも pc_address_pre を複数の目的で使用することは避けるべきである。</p>
<a name="Spec-仕様"></a>
<h3 >Spec (仕様)<a href="#Spec-仕様" class="wiki-anchor">¶</a></h3>
<p>新規登録かメールアドレス変更のいずれかで pc_address_pre 以外の別の名前を使用するように変更する。<br />ただし、いずれの場合も既存の pc_address_pre を仕様変更後にどのように扱うか考慮する必要がある。(マイグレーション時に pc_address_pre の用途を判別して適切な名前に変更するなど)</p>
OpenPNE 3 - Backport(バックポート) #3446 (Invalid(無効)): #927 の修正によって無関係なCommunityMemberインスタンスが解放される問題の回避
http://redmine.openpne.jp/issues/3446
2013-10-09T08:28:45Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>Doctrine_Record::free() メソッドには <a class="external" href="https://gist.github.com/upsilon/6896385">https://gist.github.com/upsilon/6896385</a> のような Doctrine のバグと思わしき現象が存在している。<br /><a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Enhancement(機能追加・改善): will memory over to be if all members join to community when has many members to the SNS. (SNSのメン... (Fixed(完了))" href="http://redmine.openpne.jp/issues/927">#927</a> でのメモリリーク改善のために行った <a class="changeset" title="improved performance while join member to community (fixes #927)" href="http://redmine.openpne.jp/projects/op3/repository/revisions/d6956cde880be65aefc802e01b070bb9d054145f">d6956cde880be65aefc802e01b070bb9d054145f</a> の修正は CommunityTableTest.php などのテストコードでこの現象を引き起こしており、例えば下記のようなコードを実行するとエラーが発生する。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"><span class="local-variable">$communityMember1</span> = <span class="constant">Doctrine_Core</span>::getTable(<span class="string"><span class="delimiter">'</span><span class="content">CommunityMember</span><span class="delimiter">'</span></span>)
->findOneByCommunityIdAndMemberId(<span class="integer">1</span>, <span class="integer">1</span>);
<span class="constant">Doctrine_Core</span>::getTable(<span class="string"><span class="delimiter">'</span><span class="content">CommunityMember</span><span class="delimiter">'</span></span>)->isMember(<span class="integer">1</span>, <span class="integer">1</span>);
<span class="predefined">print</span> <span class="local-variable">$communityMember1</span>->community_id; <span class="comment">// エラー</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>この問題を根本的に解決するためには Doctrine 自体に手を加える必要があるため、ここでは不具合の回避のための修正を行う。具体的には <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Enhancement(機能追加・改善): will memory over to be if all members join to community when has many members to the SNS. (SNSのメン... (Fixed(完了))" href="http://redmine.openpne.jp/issues/927">#927</a> で行ったメモリリーク改善の効果を落とさないように CommunityMember オブジェクトに対する free() メソッドの呼び出しを最小限に抑えるための修正を施す。</p>
OpenPNE 3 - Bug(バグ) #3445 (Won't fix(対応せず)): #927 の修正によって無関係なCommunityMemberインスタンスが解放される問題の回避
http://redmine.openpne.jp/issues/3445
2013-10-09T06:49:57Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>Doctrine_Record::free() メソッドには <a class="external" href="https://gist.github.com/upsilon/6896385">https://gist.github.com/upsilon/6896385</a> のような Doctrine のバグと思わしき現象が存在している。<br /><a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Enhancement(機能追加・改善): will memory over to be if all members join to community when has many members to the SNS. (SNSのメン... (Fixed(完了))" href="http://redmine.openpne.jp/issues/927">#927</a> でのメモリリーク改善のために行った <a class="changeset" title="improved performance while join member to community (fixes #927)" href="http://redmine.openpne.jp/projects/op3/repository/revisions/d6956cde880be65aefc802e01b070bb9d054145f">d6956cde880be65aefc802e01b070bb9d054145f</a> の修正は CommunityTableTest.php などのテストコードでこの現象を引き起こしており、例えば下記のようなコードを実行するとエラーが発生する。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"><span class="local-variable">$communityMember1</span> = <span class="constant">Doctrine_Core</span>::getTable(<span class="string"><span class="delimiter">'</span><span class="content">CommunityMember</span><span class="delimiter">'</span></span>)
->findOneByCommunityIdAndMemberId(<span class="integer">1</span>, <span class="integer">1</span>);
<span class="constant">Doctrine_Core</span>::getTable(<span class="string"><span class="delimiter">'</span><span class="content">CommunityMember</span><span class="delimiter">'</span></span>)->isMember(<span class="integer">1</span>, <span class="integer">1</span>);
<span class="predefined">print</span> <span class="local-variable">$communityMember1</span>->community_id; <span class="comment">// エラー</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>この問題を根本的に解決するためには Doctrine 自体に手を加える必要があるため、ここでは不具合の回避のための修正を行う。具体的には <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Enhancement(機能追加・改善): will memory over to be if all members join to community when has many members to the SNS. (SNSのメン... (Fixed(完了))" href="http://redmine.openpne.jp/issues/927">#927</a> で行ったメモリリーク改善の効果を落とさないように CommunityMember オブジェクトに対する free() メソッドの呼び出しを最小限に抑えるための修正を施す。</p>
OpenPNE 3 - Bug(バグ) #3357 (New(新規)): ./symfony cc を実行しても web/cache/ ディレクトリ以下に生成されたキャッシュが削除されない
http://redmine.openpne.jp/issues/3357
2013-06-06T06:40:54Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="現象"></a>
<h3 >現象<a href="#現象" class="wiki-anchor">¶</a></h3>
<p>ブラウザ等でメンバー画像 (no_image ではない) などユーザーが投稿した画像のサムネイルを表示すると web/cache/ ディレクトリ以下にサムネイル画像のキャッシュが生成されるが、ここに生成された画像が ./symfony cc コマンドによって削除されない状態となっている。</p>
<a name="原因"></a>
<h3 >原因<a href="#原因" class="wiki-anchor">¶</a></h3>
<p>web/cache/ ディレクトリのキャッシュ削除は opApplicationConfiguration::clearWebCache() メソッドによって行われていた。このメソッドは task.cache.clear イベントの発生によって駆動するよう設計されているが、現状 task.cache.clear イベントは下記の理由により発生する事がないため、結果として一部のキャッシュが削除されない現象が発生している。</p>
<p>task.cache.clear イベントは ./symfony cc コマンド (sfCacheClearTask クラス) 実行時に <strong>アプリケーション毎に</strong> (pc_frontend, pc_backend, mobile_frontend など) 複数回呼び出されるイベントである。その仕組みは、symfony標準のディレクトリ階層の</p>
<ul>
<li>cache/
<ul>
<li>pc_frontend/
<ul>
<li>prod/</li>
<li>dev/</li>
</ul>
</li>
<li>pc_backend/
<ul>
<li>...</li>
</ul></li>
</ul></li>
</ul>
<p>に基づいて、 <strong>cache/ ディレクトリ直下</strong> に存在するアプリケーション名 (この場合、pc_frontend と pc_backend が存在する) ごとに task.cache.clear イベントを発生させるものとなっている。<br />しかし現状のOpenPNEでは、 <a class="issue tracker-1 status-5 priority-5 priority-high3 closed" title="Bug(バグ): Can't execute openpne:execute-mail-action bacause of permisson of cache/cli directory (Fixed(完了))" href="http://redmine.openpne.jp/issues/957">#957</a> の修正によって cache/ ディレクトリの階層構造がUNIXユーザー単位で分離されるようになり</p>
<ul>
<li>cache/
<ul>
<li>www-data/
<ul>
<li>pc_frontend/
<ul>
<li>dev/</li>
<li>prod/</li>
</ul>
</li>
</ul>
</li>
<li>john/
<ul>
<li>pc_frontend/
<ul>
<li>dev/</li>
<li>prod/</li>
</ul></li>
</ul></li>
</ul></li>
</ul>
<p>となっているため、www-data や john といったアプリケーションは存在しないといった判断され task.cache.clear イベントが実行されない。</p>
<a name="修正内容"></a>
<h3 >修正内容<a href="#修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</p>
OpenPNE 3 - Enhancement(機能追加・改善) #2822 (Fixed(完了)): sfPropelPlugin をプロジェクトツリーから削除する
http://redmine.openpne.jp/issues/2822
2012-02-16T07:30:02Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p>sfPropelPlugin は現在使用されていないため削除する。</p>
<a name="Spec-仕様"></a>
<h3 >Spec (仕様)<a href="#Spec-仕様" class="wiki-anchor">¶</a></h3>
<ul>
<li><code>lib/vendor/symfony/lib/plugins/sfPropelPlugin</code> を削除する</li>
<li><code>lib/config/opProjectConfigration.class.php</code> から sfPropelPlugin を無効化するコードを除去する</li>
</ul>
OpenPNE 3 - Enhancement(機能追加・改善) #2698 (Fixed(完了)): OpenPNE3 コアに JSON API を追加する
http://redmine.openpne.jp/issues/2698
2011-12-19T14:06:29Z
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-5 priority-high3 closed" title="Enhancement(機能追加・改善): スマートフォンに対応する (Fixed(完了))" href="http://redmine.openpne.jp/issues/2227">#2227</a>) や外部アプリから利用できるようなJSON APIを追加する</p>
<a name="Spec-仕様"></a>
<h3 >Spec (仕様)<a href="#Spec-仕様" class="wiki-anchor">¶</a></h3>
<p>出力フォーマットは JSON。<br />ユーザごとにOpenPNE内部・外部ともに共通で使用する「API キー」(ユーザ毎に生成されるランダムな文字列)を発行し、これによって認証を行う。</p>
<p><a class="external" href="https://docs.google.com/spreadsheet/ccc?key=0AlEj4P9A6aRKdGp5cjFfaER3N1IzdUNhT3RlTmtUdmc">https://docs.google.com/spreadsheet/ccc?key=0AlEj4P9A6aRKdGp5cjFfaER3N1IzdUNhT3RlTmtUdmc</a></p>
OpenPNE 3 - Enhancement(機能追加・改善) #2617 (Fixed(完了)): prototype.js や script.aculo.us を使用している箇所を全て j...
http://redmine.openpne.jp/issues/2617
2011-11-22T14:07:55Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p>prototype.js と script.aculo.us が含まれている sfProtoculousPlugin を削除し、OpenPNE3 の JavaScript コード中に含まれている prototype.js または script.aculo.us 依存なコードを jQuery 用に書き換える。</p>
<a name="Spec-仕様"></a>
<h3 >Spec (仕様)<a href="#Spec-仕様" class="wiki-anchor">¶</a></h3>
<ul>
<li>sfProtoculousPlugin を削除</li>
<li>jQuery 及び jQuery UI を同梱する</li>
<li>ビューでのJavaScriptの読み込みで <code>%SF_PROTOTYPE_WEB_DIR%/js/prototype</code> などの代わりに <code>jquery.min.js</code> を使用して jQuery をロードする</li>
<li>既存の JavaScript コードの prototype.js または script.aculo.us 依存なコードを jQuery 用に書き換える</li>
</ul>
OpenPNE 3 - Enhancement(機能追加・改善) #2045 (New(新規)): #1482 の新パスワード仕様の使用可否を設定できるようにする
http://redmine.openpne.jp/issues/2045
2011-05-02T17:11:17Z
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-1 priority-5 priority-high3 overdue parent" title="Enhancement(機能追加・改善): Enhancement for Password (パスワードの仕様変更) (New(新規))" href="http://redmine.openpne.jp/issues/1482">#1482</a> の新パスワード仕様を無効にする設定を追加</p>
<a name="Spec-仕様"></a>
<h3 >Spec (仕様)<a href="#Spec-仕様" class="wiki-anchor">¶</a></h3>
<p>OpenPNE.yml に password_through_phpass (デフォルト: true) を追加</p>
OpenPNE 3 - Bug(バグ) #1936 (Fixed(完了)): opAnonymousMember クラスにStrict Standardsエラーが含まれている
http://redmine.openpne.jp/issues/1936
2011-03-01T08:14:16Z
Youichi Kimura
kim.upsilon@bucyou.net
<p>error_reporting に E_STRICT を設定している環境において、以下のエラーが出力される場合があります。</p>
<code><pre>
PHP Strict Standards: Declaration of opAnonymousMember::getConfig() should be compatible with that of Member::getConfig() in /home/upsilon/git/openpne3/sqlite/lib/user/opAnonymousMember.class.php on line 158
Strict Standards: Declaration of opAnonymousMember::getConfig() should be compatible with that of Member::getConfig() in /home/upsilon/git/openpne3/sqlite/lib/user/opAnonymousMember.class.php on line 158
PHP Strict Standards: Declaration of opAnonymousMember::delete() should be compatible with that of Member::delete() in /home/upsilon/git/openpne3/sqlite/lib/user/opAnonymousMember.class.php on line 158
Strict Standards: Declaration of opAnonymousMember::delete() should be compatible with that of Member::delete() in /home/upsilon/git/openpne3/sqlite/lib/user/opAnonymousMember.class.php on line 158
PHP Strict Standards: Declaration of opAnonymousMember::save() should be compatible with that of opDoctrineRecord::save() in /home/upsilon/git/openpne3/sqlite/lib/user/opAnonymousMember.class.php on line 158
Strict Standards: Declaration of opAnonymousMember::save() should be compatible with that of opDoctrineRecord::save() in /home/upsilon/git/openpne3/sqlite/lib/user/opAnonymousMember.class.php on line 158
</pre></code>