OpenPNE Issue Tracking System: チケット
http://redmine.openpne.jp/
http://redmine.openpne.jp/favicon.ico
2014-12-08T16:32:29Z
OpenPNE Issue Tracking System
Redmine
OpenPNE 3 - Bug(バグ) #3738 (Won't fix(対応せず)): fileを参照するテーブル(activity_imageなど)のレコード削除時に対応するfileレコード...
http://redmine.openpne.jp/issues/3738
2014-12-08T16:32:29Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>メンバーのプロフィール画像やコミュニティ画像などの file テーブルを介して格納される画像について、ブラウザ上で画像を変更・削除しても対応する file, file_bin レコードがデータベース上に残ったまま削除されない。</p>
<p>削除されずに残った画像は管理画面のアップロード画像リスト (<code>/pc_backend.php/monitoring</code>) からも確認できる。</p>
<p>対象となるテーブル:</p>
<ul>
<li>OpenPNE コア
<ul>
<li>activity_image (<a class="issue tracker-1 status-13 priority-4 priority-default closed child" title="Bug(バグ): アクティビティを削除しても添付された画像がDBから削除されない (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3752">#3752</a>)</li>
<li>banner_image (<a class="issue tracker-1 status-13 priority-4 priority-default closed child" title="Bug(バグ): バナー設定でアップロードした画像を削除してもDBから削除されない (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3755">#3755</a>)</li>
<li>community (<a class="issue tracker-1 status-13 priority-4 priority-default closed child" title="Bug(バグ): コミュニティ画像が設定されたコミュニティを削除しても画像がDBから削除されない (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3753">#3753</a>)</li>
<li>member_image (<a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): The record of the File is not deleted when related MemberImage is deleted (MemberImage が削除されたときに ... (Fixed(完了))" href="http://redmine.openpne.jp/issues/453">#453</a> <b>修正済み</b>)</li>
<li>oauth_consumer (<a class="issue tracker-1 status-13 priority-4 priority-default closed child" title="Bug(バグ): 画像付きのOAuthアプリケーションを削除してもDBから画像が削除されない (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3756">#3756</a>)</li>
</ul>
</li>
<li>opAlbumPlugin (<a class="issue tracker-1 status-9 priority-4 priority-default" title="Bug(バグ): アルバム・アルバム画像を削除しても画像ファイルが削除されていない (Pending Review(レビュー待ち))" href="http://redmine.openpne.jp/issues/2447">#2447</a>)
<ul>
<li>album</li>
<li>album_image</li>
</ul>
</li>
<li>opCommunityTopicPlugin (<a class="issue tracker-4 status-13 priority-4 priority-default closed child" title="Backport(バックポート): 画像が添付されたコミュニティトピックを削除しても、管理画面のアップロード画像リストに画像が残る (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/2591">#2591</a>)
<ul>
<li>community_event_image</li>
<li>community_event_comment_image</li>
<li>community_topic_image</li>
<li>community_topic_comment_image</li>
</ul>
</li>
<li>opDiaryPlugin (<a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): 日記・日記コメントを削除しても添付画像が削除されない (Fixed(完了))" href="http://redmine.openpne.jp/issues/106">#106</a> <b>修正済み</b>)
<ul>
<li>diary_image</li>
<li>diary_comment_image</li>
</ul>
</li>
<li>opMessagePlugin (<a class="issue tracker-1 status-5 priority-3 priority-lowest closed parent" title="Bug(バグ): メッセージを削除しても画像データが削除されていない (Fixed(完了))" href="http://redmine.openpne.jp/issues/190">#190</a>)
<ul>
<li>message_file</li>
</ul></li>
</ul>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<pre><code class="yaml syntaxhl"><span class="CodeRay"><span class="key">HogeImage</span>:
<span class="key">columns</span>:
<span class="key">id</span>: <span class="string"><span class="content">{ type: integer(4), primary: true, autoincrement: true }</span></span>
<span class="key">hoge_id</span>: <span class="string"><span class="content">{ type: integer(4), notnull: true }</span></span>
<span class="key">file_id</span>: <span class="string"><span class="content">{ type: integer(4), notnull: true }</span></span>
<span class="key">relations</span>:
<span class="key">Hoge</span>: <span class="string"><span class="content">{ onDelete: cascade }</span></span>
<span class="key">File</span>: <span class="string"><span class="content">{ onDelete: cascade }</span></span>
</span></code></pre>
<p>例えば上記の様な DB スキーマの定義があったとき、外部キー制約があるため file のレコードが削除されると対応する hoge_image のレコードが削除されるが、逆に hoge_image のレコードが削除されても file のレコードは削除されない。そのため hoge_image のレコードを削除する際に対応する file のレコードを明示的に削除する必要がある。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<a name="HogeImage-を削除する際に関連する-File-が削除されるようにする"></a>
<h4 >HogeImage を削除する際に関連する File が削除されるようにする<a href="#HogeImage-を削除する際に関連する-File-が削除されるようにする" class="wiki-anchor">¶</a></h4>
<pre><code class="php syntaxhl"><span class="CodeRay"><span class="keyword">class</span> <span class="class">HogeImage</span> <span class="keyword">extends</span> <span class="constant">BaseHogeImage</span>
{
<span class="keyword">public</span> <span class="keyword">function</span> <span class="function">preDelete</span>(<span class="local-variable">$event</span>)
{
<span class="local-variable">$this</span>-><span class="predefined">File</span>-><span class="predefined">delete</span>();
}
}
</span></code></pre>
<p>File を参照するモデルのクラスに <code>preDelete()</code> メソッドを定義し、その中で <code>$this->File->delete();</code> を実行することで関連する file テーブルのレコードも削除されるようになる。</p>
<a name="Hoge-を削除する際に関連する-HogeImage-を明示的に削除する"></a>
<h4 >Hoge を削除する際に関連する HogeImage を明示的に削除する<a href="#Hoge-を削除する際に関連する-HogeImage-を明示的に削除する" class="wiki-anchor">¶</a></h4>
<p>hoge のレコードを削除した場合は、外部キー制約の <code>ON DELETE CASCADE</code> によりそれを参照する hoge_image のレコードも削除される。しかしこれは DBMS 側で行われるもので Doctrine は関知しないため、削除時に <code>HogeImage::preDelete()</code> は実行されない。<br />これでは Hoge の delete() メソッドを呼び出した場合には前述の修正に関わらず File から画像が削除されず残ってしまうため、<code>Hoge::preDelete()</code> から <code>$this->HogeImage->delete();</code> を明示的に呼び出す必要がある。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"><span class="keyword">class</span> <span class="class">Hoge</span> <span class="keyword">extends</span> <span class="constant">BaseHoge</span>
{
<span class="keyword">public</span> <span class="keyword">function</span> <span class="function">preDelete</span>(<span class="local-variable">$event</span>)
{
<span class="comment">// HogeImage::preDelete() を実行させるために明示的に削除する</span>
<span class="local-variable">$this</span>-><span class="constant">HogeImage</span>-><span class="predefined">delete</span>();
}
}
</span></code></pre>
OpenPNE 3 - Bug(バグ) #3543 (Won't fix(対応せず)): MySQLのStrict Modeが有効な状態でメンバーの新規登録を行うとエラーが発生する
http://redmine.openpne.jp/issues/3543
2014-01-07T05:39:57Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="現象"></a>
<h3 >現象<a href="#現象" class="wiki-anchor">¶</a></h3>
<p>MySQLの <a href="http://dev.mysql.com/doc/refman/5.1/ja/server-sql-mode.html" class="external">Strict Mode</a> が有効な環境でメンバーの新規登録を行う際に <strong>プリセット</strong> でかつ <strong>日付</strong> の項目を入力すると、次のようなエラーが発生する。</p>
<pre>
SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '' for column 'value_datetime' at row 1
</pre>
<p>エラーが発生した SQL は下記の通り。</p>
<pre>
12月 27 17:23:12 symfony [info] {Doctrine_Connection_Statement} execute : INSERT INTO member_profile (value, member_id, profile_id, value_datetime, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?) - (, 6, 2, , 2013-12-27 17:23:12, 2013-12-27 17:23:12)
</pre>
<a name="再現手順"></a>
<h3 >再現手順<a href="#再現手順" class="wiki-anchor">¶</a></h3>
<ol>
<li>MySQL の my.cnf に下記の設定を加える<br /><pre>
[mysqld]
sql_mode=STRICT_ALL_TABLES
</pre></li>
<li>管理画面から招待メールを送信し、メールに記載されたURLから新規登録ページ (/member/register) を開く</li>
<li>プロフィール入力 (/member/registerInput) へ進む</li>
<li>必須項目と <strong>誕生日</strong> を入力する</li>
<li>「送信」をクリックすると500エラーが発生する</li>
</ol>
<a name="原因"></a>
<h3 >原因<a href="#原因" class="wiki-anchor">¶</a></h3>
<p><code>MemberProfile::preSave()</code> 内の下記のコードが直接の原因となっている。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"> <span class="keyword">elseif</span> (<span class="string"><span class="delimiter">'</span><span class="content">date</span><span class="delimiter">'</span></span> === <span class="local-variable">$this</span>->getFormType() && <span class="predefined">isset</span>(<span class="local-variable">$modified</span>[<span class="string"><span class="delimiter">'</span><span class="content">value</span><span class="delimiter">'</span></span>]) && <span class="local-variable">$this</span>->getProfile()->isPreset())
{
<span class="local-variable">$this</span>->_set(<span class="string"><span class="delimiter">'</span><span class="content">value_datetime</span><span class="delimiter">'</span></span>, <span class="local-variable">$this</span>->_get(<span class="string"><span class="delimiter">'</span><span class="content">value</span><span class="delimiter">'</span></span>));
}
</span></code></pre>
<p><code>config/doctrine/schema.yml</code> に <code>MemberProfile.value</code> のデフォルト値が <code>""</code> であると記述されているため、value に変更が加えられたか否かに係わらず <code>MemberProfile::preSave()</code> 内で <code>isset($modified['value'])</code> は常に true になる(UPDATE の場合を除く)。<br />すると <code>MemberProfile.value_datetime</code> に空文字列がそのままセットされてしまい、前述の <code>Invalid datetime format</code> エラーが発生してしまう。</p>
<p>なお、プリセットではない日付型のプロフィール項目については value_datetime は使用されない (参照: <a class="changeset" title="member_profile.value_datetime is now for presetting datetime profile. And also "0000-00-00 00:00:..." href="http://redmine.openpne.jp/projects/op3/repository/revisions/b6445a0a40700daa193d1f43280fbef493da02aa">b6445a0a</a>) ためこの問題は発生しない。</p>
<a name="修正内容"></a>
<h3 >修正内容<a href="#修正内容" class="wiki-anchor">¶</a></h3>
<p><code>MemberProfile::preSave()</code> 内で <code>value_datetime</code> に対するから文字列の代入が行われないように <code>$modified['value']</code> のチェックを行う。</p>
OpenPNE 3 - Bug(バグ) #3507 (Won't fix(対応せず)): opDynamicAclRoute クラスが allow_empty オプションの利用を想定していない
http://redmine.openpne.jp/issues/3507
2013-11-29T08:24:15Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>opDynamicAclRoute クラスを使用したルートの <a href="http://symfony.com/legacy/doc/reference/1_4/ja/10-Routing#chapter_10_sub_allow_empty" class="external">allow_empty</a> オプションを true にセットした状態で存在しないオブジェクトに対する URL がリクエストされると、 <code>$route->getObject()</code> で null が返されることなく Fatal Error が発生し異常終了する。</p>
<pre>
[Fri Nov 29 16:56:45.251504 2013] [fcgid:warn] [pid 32517:tid 139863663769344] [client 115.65.29.61:64752] mod_fcgid: stderr: PHP Fatal error: Call to a member function isAllowed() on a non-object in /home/upsilon/git/openpne3/master/lib/routing/opDynamicAclRoute.class.php on line 44, referer: https://sns.example.com/communityTopic/1
</pre>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>opDynamicAclRoute::getObject() メソッド内で、parent::getObject() が null を返すことが想定していないことが原因。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"> <span class="keyword">public</span> <span class="keyword">function</span> <span class="function">getObject</span>()
{
<span class="local-variable">$result</span> = <span class="predefined-constant">parent</span>::getObject();
<span class="keyword">if</span> (!<span class="local-variable">$role</span> = <span class="local-variable">$this</span>->getCurrentMemberId())
{
<span class="local-variable">$role</span> = <span class="string"><span class="delimiter">'</span><span class="content">alien</span><span class="delimiter">'</span></span>;
}
<span class="keyword">if</span> (<span class="local-variable">$result</span> <span class="keyword">instanceof</span> opAccessControlRecordInterface)
{
<span class="keyword">if</span> (!<span class="local-variable">$result</span>->isAllowed(<span class="local-variable">$this</span>->getCurrentMember(), <span class="local-variable">$this</span>->options[<span class="string"><span class="delimiter">'</span><span class="content">privilege</span><span class="delimiter">'</span></span>]))
{
<span class="local-variable">$this</span>->handleRestriction();
}
}
<span class="keyword">elseif</span> (!<span class="local-variable">$this</span>->acl->isAllowed(<span class="local-variable">$this</span>->getCurrentMemberId(), <span class="predefined-constant">null</span>, <span class="local-variable">$this</span>->options[<span class="string"><span class="delimiter">'</span><span class="content">privilege</span><span class="delimiter">'</span></span>]))
{
<span class="local-variable">$this</span>->handleRestriction();
}
<span class="keyword">return</span> <span class="local-variable">$result</span>;
}
</span></code></pre>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>parent::getObject() が null を返した場合には何もせずそのまま null を返すように修正する。</p>
OpenPNE 3 - Bug(バグ) #3447 (Won't fix(対応せず)): zlib 拡張の入っていない環境で opDoctrineRecordTest.php のテストが実行できない
http://redmine.openpne.jp/issues/3447
2013-10-09T08:50:41Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p><a class="issue tracker-1 status-13 priority-4 priority-default closed" title="Bug(バグ): 4バイト文字を含んだ文字列を投稿すると、4バイト文字以降のデータが切れた状態で保存されてしまう (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3134">#3134</a> のテストのために追加された opDoctrineRecordTest.php には gzip タイプのカラムの値を破壊しないか確認するためのテストが含まれているが、このテストは zlib 拡張が有効な環境でないと実行できない。<br /><a class="source" href="http://redmine.openpne.jp/projects/op3/repository/revisions/b9a08942/entry/doc/ja/OpenPNE3_Setup_Guide.txt">source:doc/ja/OpenPNE3_Setup_Guide.txt@b9a08942</a> には OpenPNE の動作に最低限必須とされている拡張に zlib 拡張が含まれていないため、この拡張が有効でない環境でも gzip 関連のテストをスキップして動作するようにすべきである。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>opDoctrineRecordTest 実行時に <code>gzcompress</code> の使用可否をチェックし、それに応じて gzip タイプのカラムに対するテストを行うか否かを分岐するように修正する。</p>
OpenPNE 3 - Bug(バグ) #3404 (Won't fix(対応せず)): テストデータのカテゴライズ機能がfunctionalテストで正しく動作していない
http://redmine.openpne.jp/issues/3404
2013-09-20T05:55:06Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="現象"></a>
<h3 >現象<a href="#現象" class="wiki-anchor">¶</a></h3>
<p><a class="changeset" title="added ability to categorize test data (refs #1527)" href="http://redmine.openpne.jp/projects/op3/repository/revisions/9f48bdd61a5c5667e6a573811876e949aff9015d">9f48bdd61a5c5667e6a573811876e949aff9015d</a> によって追加されたテストデータのカテゴライズ機能で、ユニットテストのコード内にて <code>$fixture</code> に 'common' や 'fix_wrong_categorized_community' などを指定することにより使用する fixture を選択できるようになったが、このコミットはfunctionalテスト向けの修正が抜けている。<br />そのため、functionalテスト実行時にはカテゴライズを無視して全てのテストデータがロードされるためデータの重複などによりエラーとなる。</p>
<a name="原因"></a>
<h3 >原因<a href="#原因" class="wiki-anchor">¶</a></h3>
<p>テストデータのカテゴライズは <a class="source" href="http://redmine.openpne.jp/projects/op3/repository/entry/test/bootstrap/database.php">source:test/bootstrap/database.php</a> にて <code>sfDoctrineBuildTask</code> の <code>and-load</code> に渡される fixture のパスを変えることで実現しているが、functional テストでは <a class="source" href="http://redmine.openpne.jp/projects/op3/repository/entry/test/bootstrap/functional.php">source:test/bootstrap/functional.php</a> を使用するため従来通り <code>test/fixtures/</code> 以下の全てのテストデータをロードしてしまう。</p>
<a name="修正内容"></a>
<h3 >修正内容<a href="#修正内容" class="wiki-anchor">¶</a></h3>
<p><a class="source" href="http://redmine.openpne.jp/projects/op3/repository/entry/test/bootstrap/functional.php">source:test/bootstrap/functional.php</a> 内のデータロード処理に <a class="source" href="http://redmine.openpne.jp/projects/op3/repository/entry/test/bootstrap/database.php">source:test/bootstrap/database.php</a> を使用するように修正する。</p>
OpenPNE 3 - Bug(バグ) #3199 (Won't fix(対応せず)): OpenPNE.yml.sample に記述されているデフォルトの設定が OpenPNE.yml に記述...
http://redmine.openpne.jp/issues/3199
2012-09-11T09:33:35Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>opProjectConfiguration::setOpenPNEConfiguration() メソッドにて、</p>
<pre><code class="php syntaxhl"><span class="CodeRay"> <span class="local-variable">$path</span> = <span class="constant">OPENPNE3_CONFIG_DIR</span>.<span class="string"><span class="delimiter">'</span><span class="content">/OpenPNE.yml</span><span class="delimiter">'</span></span>;
<span class="local-variable">$config</span> = sfYaml::load(<span class="local-variable">$path</span>.<span class="string"><span class="delimiter">'</span><span class="content">.sample</span><span class="delimiter">'</span></span>);
<span class="keyword">if</span> (<span class="predefined">is_readable</span>(<span class="local-variable">$path</span>))
{
<span class="local-variable">$config</span> = <span class="predefined">array_merge</span>(<span class="local-variable">$config</span>, sfYaml::load(<span class="local-variable">$path</span>));
}
</span></code></pre>
<p>のように OpenPNE.yml.sample の設定を OpenPNE.yml とマージする箇所があるが、array_merge 関数を使用しているため多次元配列である OpenPNE.yml 内の設定を正しくマージできていない。結果として OpenPNE.yml.sample はデフォルト設定値として機能できていない。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p><del>array_merge の代わりに array_replace_recursive 関数を使用する。</del> (PHP5.3以前で使用不可)</p>
<p><code>sfToolkit::arrayDeepMerge()</code> メソッドを使用する。</p>
OpenPNE 3 - Bug(バグ) #3198 (Won't fix(対応せず)): opJsonApiActions 内で Content-Type の設定が2度呼び出されている
http://redmine.openpne.jp/issues/3198
2012-09-11T08:12:10Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>opJsonApiActions クラス内で <code>$this->getResponse()->setContentType('application/json')</code> が execute() メソッドと renderJSON() メソッドで 2 度呼び出されている。また、これによって各 API のアクション内で Content-Type の設定を上書きすることが出来ない。</p>
<p>(現象補足)<br />apiを使用しているプラグインでは、使用しているjavascriptライブラリとの都合上、content-typeが「text/html」である必要があるものがあります。<br />(デフォルトでライブラリの中でstringをjsonオブジェクトに変換します。)<br />そのため、actionsのexecuteXxx()内でcontent-typeの書き換えを行っています。<br />その変更をopJsonApiActionsのrenderJSON()で「application/json」に再度置き換えられるために不具合発生となります。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>opJsonApiActions::renderJSON() メソッド内の setContentType の呼び出しが不要なため除去する。</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(バグ) #3168 (Won't fix(対応せず)): OpenPNE.yml の ssl_base_url に api.php 向けの設定が存在しない
http://redmine.openpne.jp/issues/3168
2012-08-22T05:04:25Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>OpenPNE をサブディレクトリに設置している環境でブラウザから SSL でアクセスすると、 <code>openpne.apiBase</code> が下記のようにサブディレクトリを考慮しない値になってしまう。</p>
<pre><code class="html syntaxhl"><span class="CodeRay"><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="tag">></span>
<span class="inline"><span class="comment">//<![CDATA[</span>
<span class="keyword">var</span> openpne = {<span class="key"><span class="delimiter">"</span><span class="content">apiKey</span><span class="delimiter">"</span></span>:<span class="string"><span class="delimiter">"</span><span class="content">98432...624ba</span><span class="delimiter">"</span></span>,<span class="key"><span class="delimiter">"</span><span class="content">apiBase</span><span class="delimiter">"</span></span>:<span class="string"><span class="delimiter">"</span><span class="content">\/</span><span class="content">api.php</span><span class="content">\/</span><span class="delimiter">"</span></span>};
<span class="comment">//]]></span></span>
<span class="tag"></script></span>
</span></code></pre>
<p>例えば <code>https://example.com/sns/</code> に OpenPNE を設置しているならば <code>openpne.apiBase</code> の値は <code>\/sns\/api.php\/</code> となるのが正しい。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>OpenPNE.yml の <code>ssl_base_url</code> は現在 pc_frontend, mobile_frontend, pc_backend 向けの設定項目があるが、api に対する項目は存在していない。アプリケーションを跨いだ URL を生成する際に opApplicationConfiguration::getAppRouting() の下記の箇所で <code>$sslBaseUrls['api']</code> の値を取得しようとすると <code>NULL</code> が返ってしまうため、その先の処理で意図しない挙動を起こしてしまう。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"> <span class="local-variable">$options</span> = <span class="local-variable">$context</span>->getRouting()->getOptions();
<span class="keyword">if</span> (<span class="local-variable">$options</span>[<span class="string"><span class="delimiter">'</span><span class="content">context</span><span class="delimiter">'</span></span>][<span class="string"><span class="delimiter">'</span><span class="content">is_secure</span><span class="delimiter">'</span></span>])
{
<span class="local-variable">$sslBaseUrls</span> = sfConfig::get(<span class="string"><span class="delimiter">'</span><span class="content">op_ssl_base_url</span><span class="delimiter">'</span></span>);
<span class="local-variable">$url</span> = <span class="local-variable">$sslBaseUrls</span>[<span class="local-variable">$application</span>];
<span class="local-variable">$isDefault</span> = <span class="string"><span class="delimiter">'</span><span class="content">https://example.com</span><span class="delimiter">'</span></span> === <span class="local-variable">$url</span>;
}
<span class="keyword">else</span>
{
<span class="local-variable">$url</span> = sfConfig::get(<span class="string"><span class="delimiter">'</span><span class="content">op_base_url</span><span class="delimiter">'</span></span>);
<span class="local-variable">$isDefault</span> = <span class="string"><span class="delimiter">'</span><span class="content">http://example.com</span><span class="delimiter">'</span></span> === <span class="local-variable">$url</span>;
}
</span></code></pre>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>下記のように <code>ssl_base_url</code> に api アプリケーション向けの設定項目を OpenPNE.yml.sample に追加する。</p>
<pre><code class="yaml syntaxhl"><span class="CodeRay"><span class="comment"># SSL用URL (Cookie の値を引き継ぐため、 base_url と同一ドメイン・パスである必要があります)</span>
<span class="comment"># Base URL for SSL (Set same domain and same path with "base_url" configuration to take over a value of Cookie)</span>
<span class="key">ssl_base_url</span>:
<span class="key">pc_frontend</span>: <span class="string"><span class="delimiter">"</span><span class="content">https://example.com</span><span class="delimiter">"</span></span>
<span class="key">mobile_frontend</span>: <span class="string"><span class="delimiter">"</span><span class="content">https://example.com</span><span class="delimiter">"</span></span>
<span class="key">pc_backend</span>: <span class="string"><span class="delimiter">"</span><span class="content">https://example.com</span><span class="delimiter">"</span></span>
<span class="key">api</span>: <span class="string"><span class="delimiter">"</span><span class="content">https://example.com</span><span class="delimiter">"</span></span>
</span></code></pre>
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(バグ) #2948 (Won't fix(対応せず)): opWidgetFormRichTextareaにprototype.js依存なJavaScriptコー...
http://redmine.openpne.jp/issues/2948
2012-04-12T11:09:51Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p><code>lib/widget/opWidgetFormRichTextarea.class.php</code> に含まれているJavaScriptコードがprototype.js依存のままjQueryに移行されていない。</p>
OpenPNE 3 - Bug(バグ) #2882 (Won't fix(対応せず)): opValidatorDate で「年」に 0 を入力した場合に空値として認識される
http://redmine.openpne.jp/issues/2882
2012-03-13T09:13:24Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="現象"></a>
<h3 >現象<a href="#現象" class="wiki-anchor">¶</a></h3>
<p>opValidatorDate を使用しているフォーム(コミュニティイベントの作成画面など)で、日付を入力する項目の「年」に <code>0</code> を入力すると空値として扱われる。</p>
<ul>
<li>コミュニティイベントの作成画面の場合、「募集期日」の「年」に <code>0</code> と入力された状態(「月」「日」は入力しない)で送信しても「正しくありません。」と表示されずにイベントの作成が完了する。</li>
</ul>
<a name="原因"></a>
<h3 >原因<a href="#原因" class="wiki-anchor">¶</a></h3>
<p>lib/validator/opValidatorDate.class.php の 100 行目付近</p>
<pre><code class="php syntaxhl"><span class="CodeRay"> <span class="comment">// if one date value is empty, all others must be empty too</span>
<span class="local-variable">$empties</span> =
(!<span class="predefined">isset</span>(<span class="local-variable">$value</span>[<span class="string"><span class="delimiter">'</span><span class="content">year</span><span class="delimiter">'</span></span>]) || !<span class="local-variable">$value</span>[<span class="string"><span class="delimiter">'</span><span class="content">year</span><span class="delimiter">'</span></span>] ? <span class="integer">1</span> : <span class="integer">0</span>) +
(!<span class="predefined">isset</span>(<span class="local-variable">$value</span>[<span class="string"><span class="delimiter">'</span><span class="content">month</span><span class="delimiter">'</span></span>]) || !<span class="local-variable">$value</span>[<span class="string"><span class="delimiter">'</span><span class="content">month</span><span class="delimiter">'</span></span>] ? <span class="integer">1</span> : <span class="integer">0</span>) +
(!<span class="predefined">isset</span>(<span class="local-variable">$value</span>[<span class="string"><span class="delimiter">'</span><span class="content">day</span><span class="delimiter">'</span></span>]) || !<span class="local-variable">$value</span>[<span class="string"><span class="delimiter">'</span><span class="content">day</span><span class="delimiter">'</span></span>] ? <span class="integer">1</span> : <span class="integer">0</span>);
</span></code></pre>
<p>この判定で、「年」(<code>$value['year']</code>) に <code>"0"</code> が入力されると <code>!isset($value['year']) || !$value['year']</code> が <code>true</code> となり空値と判定されることが原因。</p>
<p>参照: <a href="http://php.net/manual/ja/types.comparisons.php" class="external">PHP: PHP 型の比較表 - Manual</a></p>
<a name="修正内容"></a>
<h3 >修正内容<a href="#修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</p>
OpenPNE 3 - Bug(バグ) #2773 (Won't fix(対応せず)): テンプレートを使用するアクティビティの表示時に、対応するテンプレートが activity_templat...
http://redmine.openpne.jp/issues/2773
2012-02-02T08:49:25Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>opCommunityTopicPlugin や opDiaryPlugin など、activity_template.yml を使用したアクティビティ投稿機能を持つプラグインで発生します。<br />これらのプラグインによって投稿されたアクティビティが残っている状態で、activity_template.yml を使用するプラグインを全て無効化すると <code>Configuration "config/activity_template.yml" does not exist or is unreadable.</code> とエラーが出力されます。</p>
<a name="再現する手順"></a>
<h4 >再現する手順<a href="#再現する手順" class="wiki-anchor">¶</a></h4>
<ol>
<li>opCommunityTopicPlugin を OpenPNE3 に追加・使用可能にする</li>
<li>pc_backend にて、
<ul>
<li>opCommunityTopicPlugin 設定画面 (/pc_backend.php/opCommunityTopicPlugin) から「アクティビティ更新設定」を「使用する」に設定し、コミュニティトピック作成時にアクティビティが投稿される状態にする</li>
<li>ガジェット設定画面 (/pc_backend.php/design/gadget) から、ホーム画面に「アクティビティ」ガジェットが表示される状態にする</li>
</ul>
</li>
<li>SNSにログインし、コミュニティのトピックを作成する</li>
<li>トピック作成時に投稿されたアクティビティがホーム画面に表示される</li>
<li>pc_backend のプラグイン設定 (/pc_backend.php/plugin/list) から opCommunityTopicPlugin 及び opDiaryPlugin を無効化する</li>
<li>ホーム画面を再度表示すると500エラーが表示される</li>
</ol>
<p>Apacheのエラーログには <code>Configuration "config/activity_template.yml" does not exist or is unreadable.</code> と出力されます。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>OpenPNE コア側に activity_template.yml が存在しない(opCommunityTopicPlugin および opDiaryPlugin 内には存在する)ことによるものです。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>このエラーは lib/config/config に空の activity_template.yml を作成することで解決します。<br />なお、後から opCommunityTopicPlugin 等が無効化された場合にそのプラグインのテンプレートを必要としているアクティビティは空白として表示されます。</p>
opOpenSocialPlugin - Bug(バグ) #2237 (Won't fix(対応せず)): [api] アルバム内の画像取得時に MediaItem のファイルサイズが 0 にな...
http://redmine.openpne.jp/issues/2237
2011-06-22T01:16:42Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>RESTful API や osapi 等でアルバム画像を取得すると、fileSize フィールドの値が常に 0 となってしまう。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>opAlbumPlugin でアルバム画像の保存時に filesize カラムに値がセットされないこと (<a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): [PATCH] AlbumPhotoForm での画像アップロード時に album_image のレコードの filesize カラムに値がセットされていない (Fixed(完了))" href="http://redmine.openpne.jp/issues/2236">#2236</a> を参照) が原因。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>opOpenSocialPlugin 側ではこの問題について対処しない。</p>
OpenPNE 3 - Bug(バグ) #1839 (Won't fix(対応せず)): [PATCH] 一部のファイルに不要な実行権限が設定されている
http://redmine.openpne.jp/issues/1839
2010-12-09T07:37:47Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="現象"></a>
<h3 >現象<a href="#現象" class="wiki-anchor">¶</a></h3>
<p>直接実行できないphpファイルや画像ファイルなどに実行可能権限が設定されています。</p>
<a name="修正内容"></a>
<h3 >修正内容<a href="#修正内容" class="wiki-anchor">¶</a></h3>
<p>ソースツリー内にELFファイルは存在しないため、ファイルの一行目がシバン行 (先頭が「#!」で開始) であるか否かで実行権限を設定します</p>
<pre>
find * -type f ! -regex '.*\.git.*' -print0 | xargs -0r -Ifile sh -c 'head -n1 file | grep -q "^#!" && chmod +x file || chmod -x file'
</pre>