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>
opWebAPIPlugin - Bug(バグ) #4156 (New(新規)): MySQLのONLY_FULL_GROUP_BYが有効な状態でコミュニティ一覧のフィードを取得するとエラー
http://redmine.openpne.jp/issues/4156
2017-02-16T11:33:52Z
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>コミュニティ一覧のフィード (<code>/api.php/feeds/community</code>) を取得すると下記のエラーが発生する:</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.c3.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> <span class="keyword">DISTINCT</span> c3.id
<span class="keyword">FROM</span> community c3
<span class="keyword">LEFT</span> <span class="keyword">JOIN</span> community_member c4 <span class="keyword">ON</span> c3.id = c4.community_id
<span class="keyword">GROUP</span> <span class="keyword">BY</span> c4.community_id
<span class="keyword">ORDER</span> <span class="keyword">BY</span> c3.created_at <span class="directive">DESC</span>
LIMIT <span class="integer">25</span>
</span></code></pre>
<p>上記のクエリで、<code>c3.id</code> が GROUP BY に含まれていないためエラーが発生している。</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(機能追加・改善) #4014 (New(新規)): member_configに格納しているメールアドレスを独立したテーブルに分離する
http://redmine.openpne.jp/issues/4014
2016-09-29T05:15:11Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p>OpenPNE3 では SNS メンバーのメールアドレスを member_config テーブルに格納しており、下記の name を割り当てている。<br />(「設定が完了していない」状態とは <a class="issue tracker-2 status-12 priority-5 priority-high3 closed" title="Enhancement(機能追加・改善): member_configのpc_address_preを複数の目的で使用すべきではない (Invalid(無効))" href="http://redmine.openpne.jp/issues/3829#note-3">#3829-3</a> で指摘しているような「所有者確認が済んでいないメールアドレス」を指す)</p>
<ul>
<li>pc_address
<ul>
<li>PCメールアドレス</li>
</ul>
</li>
<li>mobile_address
<ul>
<li>携帯メールアドレス</li>
</ul>
</li>
<li>pc_address_pre
<ul>
<li>設定が完了していないPCメールアドレス</li>
</ul>
</li>
<li>mobile_address_pre
<ul>
<li>設定が完了していない携帯メールアドレス</li>
</ul></li>
</ul>
<p>これらのメールアドレスに関する設定は下記のような問題点を抱えている。</p>
<a name="問題点1-ユニーク制約を設定できないテーブル構造"></a>
<h4 >問題点1: ユニーク制約を設定できないテーブル構造<a href="#問題点1-ユニーク制約を設定できないテーブル構造" class="wiki-anchor">¶</a></h4>
<p>メールアドレスは SNS メンバーのログインおよびパスワード再発行にも使用される重要な役割を担っている。また、その用途から自明なとおり 1 つのメールアドレスに対応する SNS メンバーが 2 人以上存在してはならない。<br />しかし、メールアドレスを格納している member_config テーブルに同じメールアドレスが複数含まれないようにユニーク制約を設定することはできない。member_config はメールアドレス以外にも様々な設定を扱っており、value に対してユニーク制約を設定してしまうと他のメンバーと設定が重複しうる別の設定項目にも影響してしまうためである。</p>
<p>そのため現在に至るまで pc_address, mobile_address には DB スキーマ上のユニーク制約を設けることができないまま、アプリケーション側でメールアドレスの重複が生じないように対処し続けてきた。<br />しかし <a class="issue tracker-1 status-5 priority-5 priority-high3 closed" title="Bug(バグ): 管理画面 招待メール送信 を利用すると同じメールアドレスを重複登録できる (Fixed(完了))" href="http://redmine.openpne.jp/issues/1816">#1816</a> のように一度でも重複チェックに漏れが生じると member_config テーブルには重複したメールアドレスが残り続けてしまう。その後の修正も <a class="issue tracker-1 status-5 priority-5 priority-high3 closed" title="Bug(バグ): 管理画面 招待メール送信 を利用すると同じメールアドレスを重複登録できる (Fixed(完了))" href="http://redmine.openpne.jp/issues/1816">#1816</a> 自体の修正だけでは足らず、 <a class="issue tracker-1 status-5 priority-5 priority-high3 closed" title="Bug(バグ): 重複登録しないように修正する前の環境で送信した招待メールでは重複登録が可能になってしまっている (Fixed(完了))" href="http://redmine.openpne.jp/issues/2340">#2340</a> のように既に重複したメールアドレスが存在していても正しく動作させるためにレコードの更新日時をチェックするといった修正も行われることになる。<br />もしユニーク制約が設定できる設計であったならば、仮に <a class="issue tracker-1 status-5 priority-5 priority-high3 closed" title="Bug(バグ): 管理画面 招待メール送信 を利用すると同じメールアドレスを重複登録できる (Fixed(完了))" href="http://redmine.openpne.jp/issues/1816">#1816</a> のような不具合が発生しても DB にレコードが追加される前に異常終了するため、その不具合のみ修正されれば十分だったはずである。</p>
<a name="問題点2-pc_address-と-mobile_address-の区別"></a>
<h4 >問題点2: pc_address と mobile_address の区別<a href="#問題点2-pc_address-と-mobile_address-の区別" class="wiki-anchor">¶</a></h4>
<p>PCメールアドレスと携帯メールアドレスの違いは <code>opToolkit::isMobileEmailAddress()</code> によって携帯メールアドレスと判断されるか否かの違いであり、いわゆる <a href="https://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%A3%E3%83%AA%E3%82%A2%E3%83%A1%E3%83%BC%E3%83%AB" class="external">キャリアメール</a> が携帯メールアドレスとして扱われている。PCメールアドレスと携帯メールアドレスは利用できる機能にも下記のような違いがある。</p>
<ul>
<li>「メール投稿」関連の機能は携帯メールアドレスからのみ利用できる</li>
<li>ログイン用メールアドレスに「PCメールアドレスと携帯メールアドレスのどちらか一方を受け付ける」を設定しているSNSでは、PCメールアドレスではPC版のみ、携帯メールアドレスでは携帯版のみにログインできる
<ul>
<li>この設定は後にデフォルトではなくなった (master, 3.6.x および 3.8.x の最新バージョン)</li>
</ul></li>
</ul>
<p>スマートフォンから OpenPNE を利用する場合は携帯 IP アドレス帯域制限により mobile_frontend は使用できないが、そのような携帯端末でも新規登録にキャリアメールを使用すると mobile_address として登録されるためログインできなくなるという問題も過去に生じていた (<a class="issue tracker-1 status-13 priority-4 priority-default closed" title="Bug(バグ): スマートフォンで携帯メールアドレスを利用することができない (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3155">#3155</a>)。<br />また、Gmail などとキャリアメールの双方を扱える携帯端末が増えたことで pc_address, mobile_address の区別が形骸化しつつあり、携帯 (スマートフォン) で Gmail を使用しているユーザーが「携帯メールアドレス」の設定画面に <code>@gmail.com</code> のメールアドレスを入力するとエラーになるといった不親切な状態も招いている。</p>
<a name="Spec-仕様"></a>
<h3 >Spec (仕様)<a href="#Spec-仕様" class="wiki-anchor">¶</a></h3>
<p>これらの問題点を解決するために、下記のような email_address テーブルを新たに追加する。</p>
<pre><code class="yaml syntaxhl"><span class="CodeRay"><span class="key">Member</span>:
<span class="key">actAs</span>: <span class="string"><span class="content">[Timestampable, opActivateBehavior]</span></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">name</span>: <span class="string"><span class="content">{ type: string(64), default: "", notnull: true }</span></span>
<span class="key">invite_member_id</span>: <span class="string"><span class="content">{ type: integer(4) }</span></span>
<span class="key">is_login_rejected</span>: <span class="string"><span class="content">{ type: boolean, notnull: true, default: false }</span></span>
<span class="key">primary_email_address_id</span>: <span class="string"><span class="content">{ type: integer(4) }</span></span> <span class="comment"># 追加</span>
<span class="key">relations</span>:
<span class="key">Member</span>: <span class="string"><span class="content">{ local: invite_member_id, foreign: id, onDelete: set null }</span></span>
<span class="key">PrimaryEmailAddress</span>: <span class="string"><span class="content">{ class: EmailAddress, local: primary_email_id, onDelete: set null }</span></span> <span class="comment"># 追加</span>
<span class="comment"># 新規テーブル</span>
<span class="key">EmailAddress</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">email_address</span>: <span class="string"><span class="content">{ type: string(255), notnull: true }</span></span>
<span class="key">member_id</span>: <span class="string"><span class="content">{ type: integer(4), notnull: true }</span></span>
<span class="key">verified</span>: <span class="string"><span class="content">{ type: boolean, notnull: true }</span></span>
<span class="key">relations</span>:
<span class="key">Member</span>: <span class="string"><span class="content">{ onDelete: cascade }</span></span>
<span class="key">indexes</span>:
<span class="key">email_address_UNIQUE</span>:
<span class="key">fields</span>: <span class="string"><span class="content">[email_address]</span></span>
<span class="key">type</span>: <span class="string"><span class="content">unique</span></span>
</span></code></pre>
<a name="DB-スキーマの詳細"></a>
<h4 >DB スキーマの詳細<a href="#DB-スキーマの詳細" class="wiki-anchor">¶</a></h4>
<ul>
<li>メンバーは 0 個以上のメールアドレスを持つことができる
<ul>
<li>0 個を許容するのは OpenID や LDAP などメールアドレスを用いない認証方式を考慮するため</li>
<li>2 個以上を許容するのは既に pc_address, mobile_address の両方にメールアドレスを設定しているメンバーを考慮するため</li>
</ul>
</li>
<li>メールアドレスに紐付くメンバーは常に 1 人のみ存在する</li>
<li>メールアドレスは pc, mobile の区別を行わずに格納する</li>
<li>メールアドレス変更や新規登録などにおける、所有者確認が済んでいないメールアドレスは <code>email_address.verified = 0</code> で表す
<ul>
<li><code>{pc,mobile}_address_pre</code> に相当する</li>
<li><a class="issue tracker-1 status-5 priority-4 priority-default closed parent" title="Bug(バグ): メールアドレス設定から意図的に他のメンバーと同じメールアドレスを設定できる (Fixed(完了))" href="http://redmine.openpne.jp/issues/4012">#4012</a> における対応と異なり、これらのメールアドレスについても一切の重複を認めない</li>
</ul>
</li>
<li>メンバーは自ら設定しているメールアドレスのうち 1 つを <code>member.primary_email_address_id</code> に設定できる</li>
</ul>
<a name="互換性に関する考慮"></a>
<h4 >互換性に関する考慮<a href="#互換性に関する考慮" class="wiki-anchor">¶</a></h4>
<ul>
<li>メールテンプレートなど pc, mobile の区別が必要な場面ではその都度 <code>opToolkit::isMobileEmailAddress()</code> を使用して判別する</li>
<li>member_config テーブルの pc_address, mobile_address は引き続き参照できる状態にする
<ul>
<li>pc_address, mobile_address を直接参照しているプラグインとの互換性を保つため</li>
<li>メンバーの PrimaryEmailAddress が変更されると、設定されたメールアドレスが pc_address, mobile_address のいずれか一方にも設定される</li>
<li>PrimaryEmailAddress のメールアドレスが pc_address に設定された場合、mobile_address のレコードが存在すれば削除される (常にどちらか一方のみ存在する状態になる)</li>
</ul></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(バグ) #3476 (New(新規)): カスタム CSS を読み込む記述が 2 度書かれている
http://redmine.openpne.jp/issues/3476
2013-11-01T07:09:08Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>pc_frontend 内の各ページ (スマートフォン版を除く) にてカスタム CSS を読み込む link 要素が下記のように 2 つ書かれている。</p>
<pre><code class="html syntaxhl"><span class="CodeRay"><span class="tag"><head></span>
<span class="tag"><meta</span> <span class="attribute-name">http-equiv</span>=<span class="string"><span class="delimiter">"</span><span class="content">Content-Type</span><span class="delimiter">"</span></span> <span class="attribute-name">content</span>=<span class="string"><span class="delimiter">"</span><span class="content">text/html; charset=utf-8</span><span class="delimiter">"</span></span> <span class="tag">/></span>
<span class="tag"><meta</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">robots</span><span class="delimiter">"</span></span> <span class="attribute-name">content</span>=<span class="string"><span class="delimiter">"</span><span class="content">index, follow</span><span class="delimiter">"</span></span> <span class="tag">/></span>
<span class="tag"><title></span>MySNS<span class="tag"></title></span>
<span class="tag"><link</span> <span class="attribute-name">rel</span>=<span class="string"><span class="delimiter">"</span><span class="content">stylesheet</span><span class="delimiter">"</span></span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">text/css</span><span class="delimiter">"</span></span> <span class="attribute-name">media</span>=<span class="string"><span class="delimiter">"</span><span class="content">screen</span><span class="delimiter">"</span></span> <span class="attribute-name">href</span>=<span class="string"><span class="delimiter">"</span><span class="content">/opSkinBasicPlugin/css/main.css</span><span class="delimiter">"</span></span> <span class="tag">/></span>
<span class="tag"><link</span> <span class="attribute-name">rel</span>=<span class="string"><span class="delimiter">"</span><span class="content">stylesheet</span><span class="delimiter">"</span></span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">text/css</span><span class="delimiter">"</span></span> <span class="attribute-name">media</span>=<span class="string"><span class="delimiter">"</span><span class="content">screen</span><span class="delimiter">"</span></span> <span class="attribute-name">href</span>=<span class="string"><span class="delimiter">"</span><span class="content">/cache/css/customizing.css</span><span class="delimiter">"</span></span> <span class="tag">/></span>
<span class="tag"><link</span> <span class="attribute-name">rel</span>=<span class="string"><span class="delimiter">"</span><span class="content">stylesheet</span><span class="delimiter">"</span></span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">text/css</span><span class="delimiter">"</span></span> <span class="attribute-name">href</span>=<span class="string"><span class="delimiter">"</span><span class="content">/cache/css/customizing</span><span class="delimiter">"</span></span> <span class="tag">/></span>
<span class="tag"><script</span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">text/javascript</span><span class="delimiter">"</span></span> <span class="attribute-name">src</span>=<span class="string"><span class="delimiter">"</span><span class="content">/js/util.js</span><span class="delimiter">"</span></span><span class="tag">></span><span class="tag"></script></span>
<span class="tag"></head></span>
</span></code></pre>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p><a class="changeset" title="(fixes #3006) fixed not to show apiKey when user is not logged in and to show apiKey when OpenPNE..." href="http://redmine.openpne.jp/projects/op3/repository/revisions/98f097f624d6e0ccfedcdda47e641f29fbb4ce15">98f097f624d6e0ccfedcdda47e641f29fbb4ce15</a> によって追加された customizing_css の記述が原因となっている。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"><span class="inline-delimiter"><?php</span> <span class="keyword">if</span> (<span class="constant">Doctrine</span>::getTable(<span class="string"><span class="delimiter">'</span><span class="content">SnsConfig</span><span class="delimiter">'</span></span>)->get(<span class="string"><span class="delimiter">'</span><span class="content">customizing_css</span><span class="delimiter">'</span></span>)): <span class="inline-delimiter">?></span>
<span class="tag"><link</span> <span class="attribute-name">rel</span>=<span class="string"><span class="delimiter">"</span><span class="content">stylesheet</span><span class="delimiter">"</span></span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">text/css</span><span class="delimiter">"</span></span> <span class="attribute-name">href</span>=<span class="string"><span class="delimiter">"</span></span><span class="inline-delimiter"><?php</span> <span class="predefined">echo</span> url_for(<span class="string"><span class="delimiter">'</span><span class="content">@customizing_css</span><span class="delimiter">'</span></span>) <span class="inline-delimiter">?></span><span class="string"><span class="delimiter">"</span></span> <span class="tag">/></span>
<span class="inline-delimiter"><?php</span> <span class="keyword">endif</span>; <span class="inline-delimiter">?></span>
</span></code></pre>
<p>上記のコードは <a class="issue tracker-2 status-8 priority-4 priority-default" title="Enhancement(機能追加・改善): customizing.css がブラウザキャッシュを使うように対処する (Rejected(差し戻し))" href="http://redmine.openpne.jp/issues/1539">#1539</a> で一度削除されている (代わりに <code>use_stylesheet('/cache/css/customizing.css')</code> を追加している) もので、恐らく誤って古い _layout.php から記述をコピーしてしまったものと見られる。</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(バグ) #3428 (Won't fix(対応せず)): opFormItemGenerator::generateValidator() に渡すフィールドの I...
http://redmine.openpne.jp/issues/3428
2013-10-07T08:29:17Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p><a class="source" href="http://redmine.openpne.jp/projects/op3/repository/entry/lib/config/config/sns_config.yml">source:lib/config/config/sns_config.yml</a> などの opFormItemGenerator で自動生成するフィールドの定義では、しばしば IsRequired や IsTrim が省略されているが、opFormItemGenerator::generateValidator() の下記のコードはそれらの省略を考慮されておらず E_NOTICE レベルのエラーを発生させてしまう。</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">generateValidator</span>(<span class="local-variable">$field</span>, <span class="local-variable">$choices</span> = <span class="predefined">array</span>())
{
<span class="local-variable">$field</span> = <span class="predefined-constant">self</span>::arrayKeyCamelize(<span class="local-variable">$field</span>);
<span class="local-variable">$option</span> = <span class="predefined">array</span>(<span class="string"><span class="delimiter">'</span><span class="content">required</span><span class="delimiter">'</span></span> => <span class="local-variable">$field</span>[<span class="string"><span class="delimiter">'</span><span class="content">IsRequired</span><span class="delimiter">'</span></span>], <span class="string"><span class="delimiter">'</span><span class="content">trim</span><span class="delimiter">'</span></span> => <span class="local-variable">$field</span>[<span class="string"><span class="delimiter">'</span><span class="content">IsTrim</span><span class="delimiter">'</span></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>isset() を使用し IsRequired 等が定義されていることを確認した上で値を使用するように修正する</p>
OpenPNE 3 - Bug(バグ) #3426 (Won't fix(対応せず)): pc_backend の存在しないアクションに対するテストコードを削除する
http://redmine.openpne.jp/issues/3426
2013-10-07T07:34:35Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p><a class="source" href="http://redmine.openpne.jp/projects/op3/repository/entry/test/functional/pc_backend/securityActionsTest.php">source:test/functional/pc_backend/securityActionsTest.php</a> は pc_backend の security/index アクションに対するテストコードとなっているが、現状 security/index というモジュール及びアクションは存在せずテストを実行してもエラーで終了する。<br />また <a class="source" href="http://redmine.openpne.jp/projects/op3/repository/entry/test/functional/pc_backend/mailActionsTest.php">source:test/functional/pc_backend/mailActionsTest.php</a> についても、存在しないアクション mail/index に対するテストコードとなっている。<br />そのため、securityActionsTest.php 及び mailActionsTest.php は不要なファイルと判断し削除する。</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(機能追加・改善) #3254 (New(新規)): アクティビティ関連のAPIで絵文字を適切なimg要素に変換されるようにする
http://redmine.openpne.jp/issues/3254
2012-11-08T09:03:41Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="概要"></a>
<h3 >概要<a href="#概要" class="wiki-anchor">¶</a></h3>
<p>activity/search.json などのAPIで、アクティビティのbodyに <code>[i:1]</code> のように含まれる絵文字をimg要素に変換されるようにする。</p>
<a name="仕様"></a>
<h3 >仕様<a href="#仕様" class="wiki-anchor">¶</a></h3>
<p>APIで返されるアクティビティには、ブラウザ等で表示するためのHTMLの断片が含まれる body_html という項目がある。この項目について絵文字からimg要素への変換を施す。</p>
OpenPNE 3 - Bug(バグ) #3165 (Won't fix(対応せず)): ./symfony ccでキャッシュをクリアした直後だけメッセージが翻訳されずに表示される
http://redmine.openpne.jp/issues/3165
2012-08-15T02:31:11Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p><code>./symfony cc</code> を実行した後にブラウザでホーム画面等を閲覧すると、ナビゲーションと SnsTerm で設定される語句を除いてメッセージが翻訳されずに表示されてしまう。リロードすると正常に設定された言語でメッセージが表示される。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>git bisect を使用して原因となるコミットを探索した結果 <a class="changeset" title="fixed for coding standard (fixes #2698)" href="http://redmine.openpne.jp/projects/op3/repository/revisions/94515d98f87747603b42b4397c0561039bff011a">94515d98f87747603b42b4397c0561039bff011a</a> に行き着いた。</p>
<p>このコミット内には <code>b/lib/i18n/opI18N.class.php</code> に対する下記の修正ミスがあり、これを正したところ上記の現象は起きなかったためこの変更が原因と思われる。</p>
<pre><code class="diff syntaxhl"><span class="CodeRay"><span class="change"><span class="change">@@</span> -74,7 +74,7 <span class="change">@@</span></span> class opI18N extends sfI18N
{
$this->generateApplicationMessages($dirs);
<span class="line delete"><span class="delete">-</span> if (<span class="eyecatcher">null === $dirs</span>)</span>
<span class="line insert"><span class="insert">+</span> if (<span class="eyecatcher">!is_null($dirs)</span>)</span>
{
$this->messageSource = $this->createMessageSource();
}
</span></code></pre>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>修正ミスの箇所を直す</p>
OpenPNE 3 - Task(タスク) #2946 (New(新規)): スマートフォンUIのユニットテストを作成する
http://redmine.openpne.jp/issues/2946
2012-04-12T05:59:02Z
Youichi Kimura
kim.upsilon@bucyou.net
<p>スマートフォンUIに対するユニットテストをQUnitで作成する。</p>
opOpenSocialPlugin - Enhancement(機能追加・改善) #2230 (New(新規)): [api] アクティビティ投稿時の mediaItems フィールドに対応
http://redmine.openpne.jp/issues/2230
2011-06-20T16:03:48Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p>RESFful API や osapi などでアクティビティを投稿する際に mediaItems フィールドを使用した画像の付加が行えるようにする。</p>
<a name="Spec-仕様"></a>
<h3 >Spec (仕様)<a href="#Spec-仕様" class="wiki-anchor">¶</a></h3>
<p>opJsonDbOpensocialService::createActivity() メソッド内で $activity['mediaItems'] の値を見て、 ActivityDataTable::updateActivity() メソッドに渡す $options['images'] に適切な値を入れるようにする。</p>
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>
opCalendarPlugin - Bug(バグ) #1887 (Fixed(完了)): MySQLに依存する関数を含むクエリがある
http://redmine.openpne.jp/issues/1887
2011-01-21T15:57:40Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>opCalendarPluginExtension::getScheduleBirthMember() メソッド内で実行されるクエリの一部がMySQLのDATE_FORMAT関数を使用しているため、MySQL以外のDBMSで「バースデイボックス」ガジェットを使用するとInternal Server Errorが返ります。</p>