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 - 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(バグ) #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(バグ) #3443 (Won't fix(対応せず)): MemberConfigFormTest, MemberRelationshipTableTest がs...
http://redmine.openpne.jp/issues/3443
2013-10-08T08:02:07Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>MemberConfigFormTest, MemberRelationshipTableTest は、それぞれメールアドレスの変更やフレンド申請のテスト時に sendmail コマンドを実行しようとする。<br />これではテストの度に <code>example@docomo.ne.jp</code> や <code>sns4@example.com</code> へのメール送信が実際に行われてしまうほか、メール送信が可能な環境でないとテストが実行できない状態となってしまう。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>テスト実行前に Zend_Mail が使用する Transport クラスをモックに差し替えるコードを追加する</p>
OpenPNE 3 - Enhancement(機能追加・改善) #3396 (Won't fix(対応せず)): opBrowser::post() でファイルのアップロードをテストできるようにする
http://redmine.openpne.jp/issues/3396
2013-09-10T08:45:28Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="概要"></a>
<h3 >概要<a href="#概要" class="wiki-anchor">¶</a></h3>
<p>symfony 標準の sfBrowser では <a class="external" href="http://symfony.com/legacy/doc/jobeet/1_4/ja/11?orm=Doctrine#chapter_11_8902df26b0555ad0fff49192b679964b48a1322d">http://symfony.com/legacy/doc/jobeet/1_4/ja/11?orm=Doctrine#chapter_11_8902df26b0555ad0fff49192b679964b48a1322d</a> のように click() メソッドからファイルパスを指定して POST リクエストを送信することができるが、sfBrowser::post() ではファイルアップロードが考慮されていないためフォームを介さずにリクエストを送信する JSON API などでファイルアップロードのテストを行うことが出来ない。<br />これを改善するために、派生クラスの opBrowser 内でファイルアップロードに対応した post() メソッドを実装する。</p>
<a name="仕様"></a>
<h3 >仕様<a href="#仕様" class="wiki-anchor">¶</a></h3>
<p>opBrowser クラスに、ファイル名を受け付けるための引数を追加した postWithFiles() メソッドを実装する。</p>
OpenPNE 3 - Bug(バグ) #3260 (Won't fix(対応せず)): activity/search.json に自分の投稿した「公開しない」設定のアクティビティが出力されない
http://redmine.openpne.jp/issues/3260
2012-11-15T10:00:09Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="現象"></a>
<h3 >現象<a href="#現象" class="wiki-anchor">¶</a></h3>
<p>公開範囲を「公開しない」に設定した自分のアクティビティ投稿が activity/search.json に出力されない。</p>
<a name="原因"></a>
<h3 >原因<a href="#原因" class="wiki-anchor">¶</a></h3>
<p>apps/api/modules/activity/actions/actions.class.php の executeSearch メソッドにて、アクティビティを取得するクエリに「フレンドのみ公開」「公開しない」設定の投稿が含まれていないため。</p>
<a name="修正内容"></a>
<h3 >修正内容<a href="#修正内容" class="wiki-anchor">¶</a></h3>
<p>target 及び member_id パラメータが指定されていない場合は、フレンドの投稿と自分自身の投稿を含める条件をクエリに追加する。</p>
OpenPNE 3 - Bug(バグ) #3235 (Won't fix(対応せず)): activity/post.json に文字数制限を越えた文字列を送信してもエラーにならない
http://redmine.openpne.jp/issues/3235
2012-11-01T08:26:19Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>activity/post.json について、activity_data の body の最大長である 140 文字を越えたテキストを送信してもエラーとならず、正常に終了してしまう。<br />投稿されたテキストは DBMS 側で 140 文字に切り落とされ (<a href="http://dev.mysql.com/doc/refman/5.1/ja/char.html" class="external">参考</a>) 、activity/search.json 等で取得すると切り落とされた状態のテキストが出力される。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>activity/post.json にて文字数制限のチェックを行っていないため。</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(機能追加・改善) #3203 (Won't fix(対応せず)): activity/post.json の images パラメータを複数枚の画...
http://redmine.openpne.jp/issues/3203
2012-09-14T09:08:27Z
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-13 priority-4 priority-default closed" title="Enhancement(機能追加・改善): activity/post.json の画像投稿対応 (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3064">#3064</a> で実装された activity/post.json の images パラメーターは、images と複数形の名前であるにもかかわらず複数枚の画像を指定することが出来ない。そのため、images パラメーターが複数枚の画像を受け付けるように修正を施す。</p>
<a name="Spec-仕様"></a>
<h3 >Spec (仕様)<a href="#Spec-仕様" class="wiki-anchor">¶</a></h3>
<p>activity/post.json のアクションにて、images が配列であっても受け付けるように修正する。<br />また、activity/search.json のレスポンスに追加されている image_url, image_large_url は、アクティビティに複数枚の画像が添付されていることを考慮していないため、これも配列で返すように変更を行う。</p>
OpenPNE 3 - Bug(バグ) #3202 (Won't fix(対応せず)): ActivityDataTable::updateActivity() メソッドで画像付きのアクティビテ...
http://redmine.openpne.jp/issues/3202
2012-09-14T08:47:29Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>ActivityDataTable::updateActivity() メソッドには、オプションとして file_id を含む配列を渡すことで画像付きのアクティビティを作成する機能があるが、このオプションを使用すると下記のようなエラーが発生してしまう。</p>
<pre>
SQLSTATE[23000]: Integrity constraint violation: 19 activity_image.mime_type may not be NULL, referer: http://sns.localhost:18080/sqlite/
</pre>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<pre><code class="php syntaxhl"><span class="CodeRay"><span class="local-variable">$activityImage</span> = <span class="keyword">new</span> <span class="constant">ActivityImage</span>();
<span class="keyword">if</span> (<span class="predefined">isset</span>(<span class="local-variable">$image</span>[<span class="string"><span class="delimiter">'</span><span class="content">file_id</span><span class="delimiter">'</span></span>]))
{
<span class="local-variable">$activityImage</span>->setFileId(<span class="local-variable">$image</span>[<span class="string"><span class="delimiter">'</span><span class="content">file_id</span><span class="delimiter">'</span></span>]);
}
<span class="keyword">elseif</span> (<span class="predefined">isset</span>(<span class="local-variable">$image</span>[<span class="string"><span class="delimiter">'</span><span class="content">uri</span><span class="delimiter">'</span></span>]) && <span class="predefined">isset</span>(<span class="local-variable">$image</span>[<span class="string"><span class="delimiter">'</span><span class="content">mime_type</span><span class="delimiter">'</span></span>]))
{
<span class="local-variable">$activityImage</span>->setUri(<span class="local-variable">$image</span>[<span class="string"><span class="delimiter">'</span><span class="content">uri</span><span class="delimiter">'</span></span>]);
<span class="local-variable">$activityImage</span>->setMimeType(<span class="local-variable">$image</span>[<span class="string"><span class="delimiter">'</span><span class="content">mime_type</span><span class="delimiter">'</span></span>]);
}
</span></code></pre>
<p>ActivityDataTable::updateActivity() メソッド内の images オプションを扱う上記のコードで、file_id をオプションに指定した画像について activity_image.mime_type の値が設定されておらず、activity_image テーブルの NOT NULL 制約によってエラーが発生している。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>添付される画像の MIME タイプを file テーブルから取得し activity_image.mime_type にセットする。</p>
OpenPNE 3 - Enhancement(機能追加・改善) #3201 (Won't fix(対応せず)): activity/post.json の画像投稿機能をJavaScriptから...
http://redmine.openpne.jp/issues/3201
2012-09-14T07:10:58Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p>JSON API の activity/post.json で画像を含むアクティビティの投稿を行う場合、XHR ではファイルのアップロードを行うことが出来ないため iframe 要素を動的に作成してそこで API を呼ぶ必要がある (e.g. <a href="http://lagoscript.org/jquery/upload" class="external">jQuery.upload</a> )。</p>
<p>この方法で API を呼び出す場合はレスポンスの Content-Type が <code>application/json</code> となっていると、iframe 読み込み時にブラウザによるダウンロードダイアログが表示されたり、iframe 要素から取得できる contentWindow.document (または contentDocument) の内容に(ブラウザの拡張機能等によって整形された)HTMLタグが混入したりすることがあるため不都合となる。</p>
<p>このため、activity/post.json (及び、今後追加される画像アップロード機能を含んだAPI) については強制的に Content-Type を <code>text/html</code> にするオプションが必要である。</p>
<a name="Spec-仕様"></a>
<h3 >Spec (仕様)<a href="#Spec-仕様" class="wiki-anchor">¶</a></h3>
<p><code>forceHtml</code> パラメータを追加、forceHtml=1 の場合は Content-Type を <code>text/html</code> にする(レスポンス本文はそのまま)</p>
OpenPNE 3 - Bug(バグ) #3195 (Won't fix(対応せず)): ImageMagickによる画像生成に失敗する
http://redmine.openpne.jp/issues/3195
2012-09-11T04:59:27Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>OpenPNE.yml にて <code>use_imagemagick</code> を 1 または 2 に設定した場合、メンバーがアップロードした画像の表示に失敗する。</p>
<p>Apahceのエラーログには下記のようなエラーが出力される。</p>
<pre>
[Tue Sep 11 12:04:21 2012] [warn] [client 127.0.0.1] mod_fcgid: stderr: convert: unable to open image `/tmp/IGITF7GbcmB': No such file or directory @ error/blob.c/OpenBlob/2638.. convert: no decode delegate for this image format `/tmp/IGITF7GbcmB' @ error/constitute.c/ReadImage/544.. convert: no images defined `GIF:/home/upsilon/git/openpne3/sqlite/web/cache/img/gif/w120_h120/dc_3_f9d604c23c6725aad2f6dbfb8b2e9388c45b00ff_gif.gif' @ error/convert.c/ConvertImageCommand/3044., referer: http://sns.localhost:18080/sqlite/diary/4?comment_count=4
</pre>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<pre><code class="diff syntaxhl"><span class="CodeRay"><span class="line comment">diff --git a/lib/plugins/sfImageHandlerPlugin/lib/image/generator/sfImageGeneratorImageTransform.php b/lib/plugins/sfImageHandlerPlugin/lib/image/generator/sfImageGeneratorImageTransform.php</span>
<span class="line comment">index 4b442c9..b9fab74 100644</span>
<span class="line head"><span class="head">--- </span><span class="filename">a/lib/plugins/sfImageHandlerPlugin/lib/image/generator/sfImageGeneratorImageTransform.php</span></span>
<span class="line head"><span class="head">+++ </span><span class="filename">b/lib/plugins/sfImageHandlerPlugin/lib/image/generator/sfImageGeneratorImageTransform.php</span></span>
<span class="change"><span class="change">@@</span> -64,7 +81,16 <span class="change">@@</span></span> <span class="keyword">abstract</span> <span class="keyword">class</span> <span class="class">sfImageGeneratorImageTransform</span> <span class="keyword">extends</span> sfImageGenerator
<span class="keyword">if</span> (<span class="local-variable">$this</span>->width && <span class="local-variable">$this</span>->height)
{
<span class="line insert"><span class="insert">+</span> <span class="local-variable">$this</span>->transform->crop(<span class="local-variable">$srcW</span>, <span class="local-variable">$srcH</span>, <span class="local-variable">$srcX</span>, <span class="local-variable">$srcY</span>);</span>
<span class="line insert"><span class="insert">+</span> <span class="local-variable">$tmpoutputfilename</span> = <span class="predefined">tempnam</span>(sys_get_temp_dir(), <span class="string"><span class="delimiter">'</span><span class="content">IGITF</span><span class="delimiter">'</span></span>);</span>
<span class="line insert"><span class="insert">+</span> <span class="local-variable">$result</span> = <span class="local-variable">$this</span>->transform->save(<span class="local-variable">$tmpoutputfilename</span>);</span>
<span class="line insert"><span class="insert">+</span> <span class="keyword">if</span> (<span class="constant">PEAR</span>::isError(<span class="local-variable">$result</span>))</span>
<span class="line insert"><span class="insert">+</span> {</span>
<span class="line insert"><span class="insert">+</span> <span class="keyword">throw</span> <span class="keyword">new</span> sfException(<span class="local-variable">$result</span>->getMessage());</span>
<span class="line insert"><span class="insert">+</span> }</span>
<span class="line insert"><span class="insert">+</span> <span class="local-variable">$this</span>->transform->load(<span class="local-variable">$tmpoutputfilename</span>);</span>
<span class="local-variable">$this</span>->transform->fit(<span class="local-variable">$this</span>->width, <span class="local-variable">$this</span>->height);
<span class="line insert"><span class="insert">+</span> <span class="predefined">unlink</span>(<span class="local-variable">$tmpoutputfilename</span>); </span>
}
}
</span></code></pre>
<p><a class="changeset" title="fixed to generate image for square size. (fixes #2890)" href="http://redmine.openpne.jp/projects/op3/repository/revisions/4ff9ae5331ed12261ea80dec8c69b38eae1bacf8">4ff9ae5331ed12261ea80dec8c69b38eae1bacf8</a> に含まれる上記の修正において、画像の加工途中に生成された一時ファイルを load した後に unlink する処理が追加されている。GD を使用する場合には問題にならないが、ImageMagick を使用する場合は load メソッドを実行しても即座にファイルの内容がメモリ上にロードされるものではない(save メソッドが呼び出されるタイミングで convert コマンドが実行される)ため、save メソッドを実行する前に 変換元のファイルを削除してしまうと前述のようなエラーが発生してしまう。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>sfImageGeneratorImage::doResize() に渡される $tmpfilename のファイルは最終的に sfImageGenerator::__destruct() メソッドにて削除されるため、doResize() メソッド内では $tmpfilename を削除する必要はない。そのため、現在の実装のように $tmpfilename で渡されたファイルを unlink するのではなく、crop後の $tmpoutputfilename を $tmpfilename に rename することで上書きするように修正を施す。</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 - Bug(バグ) #3052 (Won't fix(対応せず)): activity/community.json 実行時にDoctrineでエラーが発生する場合がある
http://redmine.openpne.jp/issues/3052
2012-05-10T06:56:21Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="現象"></a>
<h3 >現象<a href="#現象" class="wiki-anchor">¶</a></h3>
<p>activity/community.json 呼び出し時に下記のようなエラーがhttpdのエラーログに出力されて500エラーとなる。<br /><pre>
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
</pre></p>
<p>is_active: 0 のメンバー(仮登録中のメンバー)が1人以上いる場合に発生する。</p>
<a name="原因"></a>
<h3 >原因<a href="#原因" class="wiki-anchor">¶</a></h3>
<p>マイフレンドまで公開のアクティビティを取得するための条件の中で、is_active: 0 のメンバーを対象外とするためにサブクエリ内に <code>member_id_to NOT IN ?</code> を追加していたが、この形式の DQL を Doctrine が正しくパースできず、最終的にパラメーター数が一致しない SQL とパラメーターの組が生成されていたためにエラーとなっていた。</p>
<p>inactiveIds が空の場合は opDoctrineQuery::andWhereIn() により <code>->andWhere('0 = 1');</code> に書き換えられるため問題が発生しない。</p>
<a name="修正内容"></a>
<h3 >修正内容<a href="#修正内容" class="wiki-anchor">¶</a></h3>
<p>問題箇所のクエリでは Member モデルを必ず leftJoin しているため、opActivateListener により is_active のチェックが自動的に追加される。</p>
<p>このクエリにおいて is_active: 0 のメンバーを除外するには Member に対する絞り込みのみで十分であるため、マイフレンドまで公開のアクティビティを抽出する部分からは is_active: 0 を除外する条件を冗長と判断し削除した。</p>
opOpenSocialPlugin - Bug(バグ) #1932 (Won't fix(対応せず)): applicationActions::executeInvitePost() 内のコ...
http://redmine.openpne.jp/issues/1932
2011-02-25T06:48:00Z
Youichi Kimura
kim.upsilon@bucyou.net
<p>applicationActions::executeInvitePost() メソッド内の処理で、result と resultIds を混同している箇所があるため application/invitePost のレスポンスが正しい値になりません。</p>