OpenPNE Issue Tracking System: チケット
http://redmine.openpne.jp/
http://redmine.openpne.jp/favicon.ico
2017-04-13T05:59:31Z
OpenPNE Issue Tracking System
Redmine
OpenPNE 3 - Bug(バグ) #4187 (Fixed(完了)): Class 'sfPearRest13' not found のエラーによりプラグインのインストールに失敗する
http://redmine.openpne.jp/issues/4187
2017-04-13T05:59:31Z
Youichi Kimura
kim.upsilon@bucyou.net
<p>master ブランチ (<a class="changeset" title="Merge remote-tracking branches 'upsilon/update-pear', 'upsilon/t-4178' and 'upsilon/t-4179'" href="http://redmine.openpne.jp/projects/op3/repository/revisions/8cbcdac4e0716ccfe0ed2f0dd1ae3b77175924fb">8cbcdac4</a>) にて、opPlugin:install タスクを実行すると一部のプラグインで Fatal error により異常終了する問題が起きている。</p>
<pre>
$ php symfony opPlugin:install opTimelinePlugin -r 1.2.6.1
PHP Warning: Declaration of sfPearRest::downloadHttp($url, $lastmodified = NULL, $accept = false) should be compatible with PEAR_REST::downloadHttp($url, $lastmodified = NULL, $accept = false, $channel = false) in /vagrant/lib/vendor/symfony/lib/plugin/sfPearRest.class.php on line 30
PHP Notice: Only variables should be passed by reference in /vagrant/lib/vendor/symfony/lib/plugin/sfSymfonyPluginManager.class.php on line 186
PHP Notice: Only variables should be passed by reference in /vagrant/lib/plugin/opPluginManager.class.php on line 220
>> plugin installing plugin "opTimelinePlugin"
PHP Warning: Declaration of opPluginDownloader::getDependency2Object(&$c, $i, $p, $s) should be compatible with & PEAR_Downloader::getDependency2Object(&$c, $i, $p, $s) in /vagrant/lib/plugin/opPluginDownloader.class.php on line 18
>> sfPearFrontendPlugin downloading opTimelinePlugin-1.2.6.1.tgz ...
>> sfPearFrontendPlugin Starting to download opTimelinePlugin-1.2.6.1.tgz (235,547
>> sfPearFrontendPlugin bytes)
>> sfPearFrontendPlugin .
[...]
>> sfPearFrontendPlugin .
>> sfPearFrontendPlugin ...done: 235,547 bytes
>> sfPearFrontendPlugin WARNING: channel "plugins.openpne.jp" has updated its
>> sfPearFrontendPlugin protocols, use "pear channel-update plugins.openpne.jp" to
>> sfPearFrontendPlugin update
PHP Fatal error: Uncaught Error: Class 'sfPearRest13' not found in /vagrant/lib/vendor/symfony/lib/plugin/sfPearConfig.class.php:27
Stack trace:
#0 /vagrant/lib/vendor/PEAR/PEAR/Downloader.php(1022): sfPearConfig->getREST('1.3', Array)
#1 /vagrant/lib/vendor/PEAR/PEAR/Downloader/Package.php(637): PEAR_Downloader->_getDepPackageDownloadUrl(Array, Array)
#2 /vagrant/lib/vendor/PEAR/PEAR/Downloader/Package.php(466): PEAR_Downloader_Package->_detect2Dep(Array, Array, 'required', Array)
#3 /vagrant/lib/vendor/PEAR/PEAR/Downloader/Package.php(380): PEAR_Downloader_Package->_detect2(Array, Array, Array, Array)
#4 /vagrant/lib/vendor/PEAR/PEAR/Downloader.php(412): PEAR_Downloader_Package->detectDependencies(Array)
#5 /vagrant/lib/vendor/symfony/lib/plugin/sfPluginManager.class.php(207): PEAR_Downloader->download(Array)
#6 /vagrant/lib/vendor/symfony/lib/plugin/sfPluginManager.class.php(112): sfPluginManager->doInstallPlugin('opTimelinePlugi...', Array)
#7 /vagrant/lib/vendor/symfony/lib/task/plugin/sfPluginInstallTask.class.php(122): in /vagrant/lib/vendor/symfony/lib/plugin/sfPearConfig.class.php on line 27
</pre>
OpenPNE 3 - Enhancement(機能追加・改善) #4178 (Fixed(完了)): LExpress/symfony1 に移行する
http://redmine.openpne.jp/issues/4178
2017-03-27T11:01:59Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p>現行の安定版である OpenPNE 3.8.x では symfony 1.4.13 を同梱している。<br />symfony 1.4 のソースコードには <a href="https://github.com/symfony/symfony1/blob/v1.4.13/lib/response/sfWebResponse.class.php#L409" class="external"><code>sfWebResponse::normalizeHeaderName()</code></a> メソッドのように、PCRE 関数の <code>/e</code> 修飾子に依存しているコードがいくつか存在しており、このようなコードは PHP7 では動作しない (<a class="issue tracker-5 status-2 priority-4 priority-default parent" title="Task(タスク): PHP7対応のための修正を行う (Accepted(着手))" href="http://redmine.openpne.jp/issues/4112#note-2">#4112-2</a>)<br />また、symfony 1.4 に同梱されている Doctrine1 も PHP7 で動作しない問題を抱えている (<a class="issue tracker-5 status-2 priority-4 priority-default parent" title="Task(タスク): PHP7対応のための修正を行う (Accepted(着手))" href="http://redmine.openpne.jp/issues/4112#note-2">#4112-2</a>)<br />symfony1 は既にメンテナンスを終了しており (<a href="http://symfony.com/blog/symfony-1-4-end-of-maintenance-what-does-it-mean" class="external">参照</a>) 、今後も PHP7 への対応が行われることは無い。</p>
<p>一方で、symfony 1.4 から fork したプロジェクトとして <a href="https://github.com/LExpress/symfony1" class="external">LExpress/symfony1</a> が存在する。<br />この LExpress/symfony1 では上記に挙げている PHP7 における問題も既に修正が済んでおり、現在もなお開発が続けられている。<br />symfony 1.4 から PHP7 対応に必要な修正を独自に行うよりは、OpenPNE3 で使用する Web フレームワークを LExpress/symfony1 に移行することが望ましいと考える。</p>
<a name="Spec-仕様"></a>
<h3 >Spec (仕様)<a href="#Spec-仕様" class="wiki-anchor">¶</a></h3>
<p>OpenPNE の <code>lib/vendor/symfony/</code> 以下に同梱されている symfony 1.4.13 (2011-08-05) を LExpress/symfony1 1.5.9 (2017-02-09) に変更する。</p>
<p>LExpress/symfony1 の <a href="https://github.com/LExpress/symfony1/blob/v1.5.9/README.md" class="external">README.md</a> では Composer や git submodule によるインストールが説明されているが、少なくとも OpenPNE 3.10.x では OpenPNE 3.8 からの移行の障壁をなるべく取り除くために、これまでと同様に単にソースコードをリポジトリ内に同梱することで対応する。</p>
OpenPNE 3 - Enhancement(機能追加・改善) #4177 (Fixed(完了)): 最低動作環境をPHP5.4以上に変更する
http://redmine.openpne.jp/issues/4177
2017-03-27T10:09:05Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p><a class="issue tracker-2 status-5 priority-4 priority-default closed child parent" title="Enhancement(機能追加・改善): PEARパッケージのアップデート (Fixed(完了))" href="http://redmine.openpne.jp/issues/4176">#4176</a> における PEAR のアップデートにより、OpenPNE の実行に必要な PHP のバージョン要件を 5.4 以上に引き上げる必要がある。</p>
<a name="Spec-仕様"></a>
<h3 >Spec (仕様)<a href="#Spec-仕様" class="wiki-anchor">¶</a></h3>
<ul>
<li><a class="source" href="http://redmine.openpne.jp/projects/op3/repository/entry/NOTICE">source:NOTICE</a> に記載されている PHP のバージョンを変更する</li>
<li>OpenPNE セットアップ手順 (<code>doc/{en,ja}/OpenPNE3_Setup_Guide.txt</code>) に記載されている PHP のバージョンを変更する</li>
<li>OpenPNE バージョンアップ手順 (<code>doc/{en,ja}/OpenPNE3_Version_Up_Guide.txt</code>) の「注意事項」に、PHP 5.4 以上でなければ動作しない旨を記載する</li>
</ul>
OpenPNE 3 - Enhancement(機能追加・改善) #4176 (Fixed(完了)): PEARパッケージのアップデート
http://redmine.openpne.jp/issues/4176
2017-03-27T10:00:22Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p>現在 OpenPNE に同梱されている PEAR 1.9.0 (2009-09-03) には、PHP5 以前の古い文法によるソースコードが多数存在している。<br />特に <code>$hoge =& new Hoge();</code> のような代入文は PHP7 では廃止されており、実行時に Parse Error で異常終了する原因となっている (<a class="issue tracker-5 status-2 priority-4 priority-default parent" title="Task(タスク): PHP7対応のための修正を行う (Accepted(着手))" href="http://redmine.openpne.jp/issues/4112#note-1">#4112-1</a>)<br />当チケットでは OpenPNE を PHP7 対応する上で必要となる PEAR の更新作業を行う。</p>
<a name="Spec-仕様"></a>
<h3 >Spec (仕様)<a href="#Spec-仕様" class="wiki-anchor">¶</a></h3>
<p>OpenPNE の <code>lib/vendor/PEAR/</code> 以下に同梱されている PEAR を、現時点の最新版である <a href="https://pear.php.net/package/PEAR/download/1.10.3" class="external">1.10.3</a> (2017-02-28) に更新する。<br />また、PEAR 1.10.3 を導入するために必要な依存パッケージもあわせて追加・更新する。</p>
opCommunityTopicPlugin - Bug(バグ) #4054 (Fixed(完了)): 管理画面のトピックリストなどの画面でtr要素の閉じタグが不足している
http://redmine.openpne.jp/issues/4054
2016-11-17T08:11:18Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>管理画面のトピックリスト (/pc_backend.php/communityTopic/topicList) の検索フォームは下記のようにマークアップされている:</p>
<pre><code class="html syntaxhl"><span class="CodeRay"><span class="tag"><form</span> <span class="attribute-name">method</span>=<span class="string"><span class="delimiter">"</span><span class="content">get</span><span class="delimiter">"</span></span> <span class="attribute-name">action</span>=<span class="string"><span class="delimiter">"</span><span class="content">/master/pc_backend.php/communityTopic/topicList</span><span class="delimiter">"</span></span><span class="tag">></span><span class="tag"><table></span>
<span class="tag"><tr></span>
<span class="tag"><th></span><span class="tag"><label</span> <span class="attribute-name">for</span>=<span class="string"><span class="delimiter">"</span><span class="content">communityTopic_id</span><span class="delimiter">"</span></span><span class="tag">></span>トピックID<span class="tag"></label></span><span class="tag"></th></span>
<span class="tag"><td></span><span class="tag"><input</span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">text</span><span class="delimiter">"</span></span> <span class="attribute-name">id</span>=<span class="string"><span class="delimiter">"</span><span class="content">communityTopic_id</span><span class="delimiter">"</span></span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">communityTopic[id][text]</span><span class="delimiter">"</span></span> <span class="attribute-name">value</span>=<span class="string"><span class="delimiter">"</span><span class="delimiter">"</span></span> <span class="tag">/></span><span class="tag"><br</span> <span class="tag">/></span> <span class="tag"></td></span>
<span class="tag"></tr></span>
<span class="tag"><tr></span>
<span class="tag"><th></span><span class="tag"><label</span> <span class="attribute-name">for</span>=<span class="string"><span class="delimiter">"</span><span class="content">communityTopic_name</span><span class="delimiter">"</span></span><span class="tag">></span>トピックタイトル<span class="tag"></label></span><span class="tag"></th></span>
<span class="tag"><td></span><span class="tag"><input</span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">text</span><span class="delimiter">"</span></span> <span class="attribute-name">id</span>=<span class="string"><span class="delimiter">"</span><span class="content">communityTopic_name</span><span class="delimiter">"</span></span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">communityTopic[name][text]</span><span class="delimiter">"</span></span> <span class="attribute-name">value</span>=<span class="string"><span class="delimiter">"</span><span class="delimiter">"</span></span> <span class="tag">/></span><span class="tag"><br</span> <span class="tag">/></span> <span class="tag"></td></span>
<span class="tag"></tr></span>
<span class="tag"><tr></span>
<span class="tag"><th></span><span class="tag"><label</span> <span class="attribute-name">for</span>=<span class="string"><span class="delimiter">"</span><span class="content">communityTopic_body</span><span class="delimiter">"</span></span><span class="tag">></span>本文<span class="tag"></label></span><span class="tag"></th></span>
<span class="tag"><td></span><span class="tag"><input</span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">text</span><span class="delimiter">"</span></span> <span class="attribute-name">id</span>=<span class="string"><span class="delimiter">"</span><span class="content">communityTopic_body</span><span class="delimiter">"</span></span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">communityTopic[body][text]</span><span class="delimiter">"</span></span> <span class="attribute-name">value</span>=<span class="string"><span class="delimiter">"</span><span class="delimiter">"</span></span> <span class="tag">/></span><span class="tag"><br</span> <span class="tag">/></span> <span class="tag"></td></span>
<span class="tag"></tr></span>
<span class="tag"><tr></span>
<span class="tag"><td</span> <span class="attribute-name">colspan</span>=<span class="string"><span class="delimiter">"</span><span class="content">2</span><span class="delimiter">"</span></span><span class="tag">></span><span class="tag"><input</span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">submit</span><span class="delimiter">"</span></span> <span class="attribute-name">value</span>=<span class="string"><span class="delimiter">"</span><span class="content">検索</span><span class="delimiter">"</span></span> <span class="tag">/></span><span class="tag"></td></span>
<span class="tag"></table></span>
<span class="tag"></form></span>
</span></code></pre>
<p>この中で、検索ボタンが含まれている最後の列について tr 要素の閉じタグが存在せず、XHTML の構文として正しくない状態になっている。</p>
<p>トピックコメントリストやイベントリストなどにも同様の不具合がある。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p><code></table></code> の手前の行に <code></tr></code> を追加する</p>
OpenPNE 3 - Bug(バグ) #4032 (Fixed(完了)): リッチテキストエリア設定でボタンの並び替えが機能しなくなっている
http://redmine.openpne.jp/issues/4032
2016-10-27T07:24:02Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>管理画面のリッチテキストエリア設定 (/pc_backend.php/advanced/richTextarea) で、「ボタンの設定」に表示されている各ボタンの順序をマウスドラッグで変更する機能が動作しなくなっている。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p><a class="issue tracker-2 status-13 priority-4 priority-default closed" title="Enhancement(機能追加・改善): 上級者設定へ移動 (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3010">#3010</a> にてリッチテキストエリア設定を「上級者向け設定」に移動した際に、<code>view.yml</code> の設定や <code>url_for</code> の URL の修正が漏れていたことが原因。</p>
<p><a class="source" href="http://redmine.openpne.jp/projects/op3/repository/revisions/6e121793/entry/apps/pc_backend/modules/sns/config/view.yml">source:apps/pc_backend/modules/sns/config/view.yml@6e121793</a>:</p>
<pre><code class="yaml syntaxhl"><span class="CodeRay"><span class="key">richTextareaSuccess</span>:
<span class="key">javascripts</span>:
- <span class="string"><span class="content">jquery.min.js</span></span>
- <span class="string"><span class="content">jquery-ui.min.js</span></span>
</span></code></pre>
<p><a class="source" href="http://redmine.openpne.jp/projects/op3/repository/revisions/6e121793/entry/apps/pc_backend/modules/advanced/templates/richTextareaSuccess.php#L45">source:apps/pc_backend/modules/advanced/templates/richTextareaSuccess.php@6e121793#L45</a>:</p>
<pre><code class="javascript syntaxhl"><span class="CodeRay"> <span class="predefined">$</span>.ajax({
<span class="key">url</span>: <span class="string"><span class="delimiter">"</span><span class="content">'.url_for('sns/changeRichTextareaButtonOrder').'</span><span class="delimiter">"</span></span>,
<span class="key">type</span>: <span class="string"><span class="delimiter">"</span><span class="content">POST</span><span class="delimiter">"</span></span>,
<span class="key">data</span>: postData
});
</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>view.yml</code> を <code>apps/pc_backend/modules/advanced/config/view.yml</code> に移動し、url_for を正しい URL に書き換える。</p>
OpenPNE 3 - Bug(バグ) #4031 (Fixed(完了)): 存在しない /js/.js を読み込もうとして404エラーが発生している
http://redmine.openpne.jp/issues/4031
2016-10-27T06:48:13Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="現象"></a>
<h3 >現象<a href="#現象" class="wiki-anchor">¶</a></h3>
<p>管理画面のガジェット設定 (/pc_backend.php/design/gadget) を開くと下記のような script 要素が記載されており、<code>/js/.js</code> にはファイルが存在しないため 404 エラーが発生する。</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="attribute-name">src</span>=<span class="string"><span class="delimiter">"</span><span class="content">/js/.js</span><span class="delimiter">"</span></span><span class="tag">></span><span class="tag"></script></span>
</span></code></pre>
<a name="原因"></a>
<h3 >原因<a href="#原因" class="wiki-anchor">¶</a></h3>
<p>下記のコードで <code>op_jquery_url</code> は存在しない設定であるため null を返すことが原因。</p>
<p><a class="source" href="http://redmine.openpne.jp/projects/op3/repository/revisions/43190aa1/entry/lib/helper/opJavascriptHelper.php#L28">source:lib/helper/opJavascriptHelper.php@43190aa1#L28</a>:</p>
<pre><code class="php syntaxhl"><span class="CodeRay">sfContext::getInstance()->getResponse()->addJavascript(sfConfig::get(<span class="string"><span class="delimiter">'</span><span class="content">op_jquery_url</span><span class="delimiter">'</span></span>));
</span></code></pre>
<p><code>op_jquery_url</code> は <a class="issue tracker-2 status-5 priority-5 priority-high3 closed" title="Enhancement(機能追加・改善): prototype.js や script.aculo.us を使用している箇所を全て jQuery で置き換える (Fixed(完了))" href="http://redmine.openpne.jp/issues/2617">#2617</a> で prototype.js から jQuery に移行する際に使用していたものであり、この設定は <a class="changeset" title="include jquery.min.js and jquery-ui.min.js into project tree (fixes #2617)" href="http://redmine.openpne.jp/projects/op3/repository/revisions/207729a0c01b2abcc10902fd08bea021e17b27a9">207729a0</a> で削除されている。</p>
<a name="修正内容"></a>
<h3 >修正内容<a href="#修正内容" class="wiki-anchor">¶</a></h3>
<p><code>sfConfig::get('op_jquery_url')</code> を <code>'jquery.min.js'</code> に置き換える</p>
OpenPNE 3 - Enhancement(機能追加・改善) #3962 (Pending Testing(テスト待ち)): 壊れたテストコードを削除する
http://redmine.openpne.jp/issues/3962
2016-06-27T05:42:55Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="概要"></a>
<h3 >概要<a href="#概要" class="wiki-anchor">¶</a></h3>
<p>現在 OpenPNE3 のテストコードは十分にメンテナンスされておらず、壊れた状態のテストケースが多数存在する。<br />このような状態は CI などにおけるテストコードの自動実行を妨げるだけでなく、退行バグによって既存のテストケースでエラーが発生しても他の大量のエラーに埋もれて発見できないなど、テストコードを十分に活用することができない。<br />過去にこのような壊れたテストコードを全て修正する試みがあった (<a class="issue tracker-5 status-12 priority-4 priority-default closed parent" title="Task(タスク): OpenPNE の既存のテストコードが正常に動作するように修正を行う (Invalid(無効))" href="http://redmine.openpne.jp/issues/3403">#3403</a>) が、エラーとなるテストケースがあまりに多いため「成功か否かに関わらず全てのテストケースが実行される」(Fatal Error による異常終了がない) 状態まで修正するに留まっている。<br />当チケットでは、壊れたテストコードをすべて削除し <code>./symfony test:all</code> によって実行されるすべてのテストコードが正常に実行される状態にする。</p>
opCommunityTopicPlugin - Bug(バグ) #3926 (Fixed(完了)): スマートフォン版のコミュニティトピック/イベントの画面からコメントを投稿しても通知メールが...
http://redmine.openpne.jp/issues/3926
2016-04-06T04:43:12Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>opCommunityTopicPlugin にはコミュニティの書き込み(トピック/イベントの作成、コメントの投稿)をメールで通知する機能が備わっているが、バージョン 1.1.0 から追加されたスマートフォン版の画面からイベントやトピックにコメントを投稿してもコミュニティ参加者にメールが送信されない。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>コメントの投稿をメールで通知する機能は、イベントの場合は <a href="https://github.com/tejimaya/opCommunityTopicPlugin/blob/opCommunityTopicPlugin-1.1.2.1/lib/form/doctrine/PluginCommunityEventCommentForm.class.php#L82" class="external">PluginCommunityEventCommentForm::save()</a> 、トピックの場合は <a href="https://github.com/tejimaya/opCommunityTopicPlugin/blob/opCommunityTopicPlugin-1.1.2.1/lib/form/doctrine/PluginCommunityTopicCommentForm.class.php#L98" class="external">PluginCommunityTopicCommentForm::save()</a> でそれぞれ実現されている一方で、スマートフォン版では JSON API を使用しており内部でこれらのフォームが使われないため通知が行われなかった。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</p>
opCommunityTopicPlugin - Backport(バックポート) #3754 (Won't fix(対応せず)): テスト用のFixtureが壊れている
http://redmine.openpne.jp/issues/3754
2015-01-06T04:42:37Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>opCommunityTopicPlugin 内の任意のテストコードを実行すると下記のようなエラーが出力され異常終了する。</p>
<pre>
$ php test/unit/model/CommunityTopicTest.php
PHP Fatal error: Uncaught exception 'Doctrine_Connection_Mysql_Exception' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1055' for key 'PRIMARY'' in /home/upsilon/git/openpne3/master/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php:1082
Stack trace:
#0 /home/upsilon/git/openpne3/master/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/Statement.php(269): Doctrine_Connection->rethrowException(Object(PDOException), Object(Doctrine_Connection_Statement))
#1 /home/upsilon/git/openpne3/master/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(1042): Doctrine_Connection_Statement->execute(Array)
#2 /home/upsilon/git/openpne3/master/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(687): Doctrine_Connection->exec('INSERT INTO mem...', Array)
#3 /home/upsilon/git/openpne3/master/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendo in /home/upsilon/git/openpne3/master/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1082
</pre>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p><a href="https://github.com/tejimaya/opCommunityTopicPlugin/commit/b26343a6caa26d2915eade9455ebf9cfa53f8b65" class="external">b26343a6</a> と <a href="https://github.com/tejimaya/opCommunityTopicPlugin/commit/1c1ac0282d5360348388277dc9b15671e544f7e9" class="external">1c1ac028</a> の各コミットで追加されたテスト用の Fixture に同じ ID のメンバーやコミュニティが含まれており、両方の Fixture が読み込まれる際に ID が衝突してエラーとなる。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p><a href="https://github.com/tejimaya/opCommunityTopicPlugin/commit/1c1ac0282d5360348388277dc9b15671e544f7e9" class="external">1c1ac028</a> で追加された 999_xss_test_data.yml には <a href="https://github.com/tejimaya/opCommunityTopicPlugin/commit/b26343a6caa26d2915eade9455ebf9cfa53f8b65" class="external">b26343a6</a> で 999_test_data.yml に追加されたものとほぼ同じレコードを含んでいるため、999_xss_test_data.yml を残した上で重複するレコードを削除する。</p>
OpenPNE 3 - Bug(バグ) #3510 (Fixed(完了)): opConfig::get() の $default に null 以外を指定すると sns_config.yml ...
http://redmine.openpne.jp/issues/3510
2013-12-04T08:56:58Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>sns_config.yml には下記のようにデフォルト値を設定する項目があり、例えば <code>opConfig::get('sns_name')</code> とした場合に sns_config テーブルに該当する値が存在しない場合は <code>'MySNS'</code> が返るようになっている。また、sns_config.yml でデフォルト値が定義されていない項目については opConfig::get() の第二引数 $default の値が返る。</p>
<pre><code class="yaml syntaxhl"><span class="CodeRay"><span class="key">general</span>:
<span class="key">sns_name</span>:
<span class="key">Name</span>: <span class="string"><span class="delimiter">"</span><span class="content">sns_name</span><span class="delimiter">"</span></span>
<span class="key">Caption</span>: <span class="string"><span class="delimiter">"</span><span class="content">SNS名</span><span class="delimiter">"</span></span>
<span class="key">FormType</span>: <span class="string"><span class="delimiter">"</span><span class="content">input</span><span class="delimiter">"</span></span>
<span class="key">ValueType</span>: <span class="string"><span class="delimiter">"</span><span class="content">text</span><span class="delimiter">"</span></span>
<span class="key">Default</span>: <span class="string"><span class="delimiter">"</span><span class="content">MySNS</span><span class="delimiter">"</span></span>
<span class="key">IsRequired</span>: <span class="string"><span class="content">true</span></span>
</span></code></pre>
<p>しかし opConfig::get() の第二引数 $default に null 以外の値を指定すると、sns_config テーブルに存在しない設定項目について sns_config.yml に記述されている Default の値は無視され $default の値が返ってしまう。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<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">get</span>(<span class="local-variable">$name</span>, <span class="local-variable">$default</span> = <span class="predefined-constant">null</span>)
{
<span class="local-variable">$setting</span> = <span class="predefined-constant">self</span>::getConfigurationSetting();
<span class="local-variable">$result</span> = <span class="predefined-constant">null</span>;
<span class="local-variable">$result</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="local-variable">$name</span>, <span class="local-variable">$default</span>);
<span class="keyword">if</span> (<span class="predefined">isset</span>(<span class="local-variable">$setting</span>[<span class="local-variable">$name</span>]))
{
<span class="keyword">if</span> (<span class="predefined">is_null</span>(<span class="local-variable">$result</span>))
{
<span class="local-variable">$result</span> = <span class="predefined-constant">self</span>::getDefaultValue(<span class="local-variable">$name</span>);
}
}
<span class="keyword">return</span> <span class="local-variable">$result</span>;
}
</span></code></pre>
<p>SnsConfigTable::get() の第二引数に $default を指定しているため、sns_config テーブル内に該当するレコードが存在しない場合に <code>is_null($result)</code> が false となり、$result が sns_config から取得された値なのか区別ができなくなってしまうことが原因。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>SnsConfigTable::get() の第二引数には null を指定し、最後の <code>return $result;</code> の箇所で $default を使用するか否かの判定を行う。</p>
OpenPNE 3 - Bug(バグ) #3485 (Fixed(完了)): PC向けUIの未ログイン時に jQuery 等のライブラリがロードされない
http://redmine.openpne.jp/issues/3485
2013-11-15T06:22:05Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p><code>jquery.min.js</code> などのライブラリが PC 向け UI の未ログイン時には読み込まれない。これにより jQuery 等に依存するプラグインが未ログイン時の画面で動作できない状態となっている。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p><a class="source" href="http://redmine.openpne.jp/projects/op3/repository/revisions/27853bc5/entry/apps/pc_frontend/templates/_layout.php">source:apps/pc_frontend/templates/_layout.php@27853bc5</a> の下記コードの通り、未ログイン時には <code>use_javascript('jquery.min.js')</code> を通過しないためこれらのライブラリのロードが行われない。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"><span class="inline-delimiter"><?php</span> <span class="keyword">if</span> (opConfig::get(<span class="string"><span class="delimiter">'</span><span class="content">enable_jsonapi</span><span class="delimiter">'</span></span>) && opToolkit::isSecurePage()): <span class="inline-delimiter">?></span>
<span class="inline-delimiter"><?php</span>
use_helper(<span class="string"><span class="delimiter">'</span><span class="content">Javascript</span><span class="delimiter">'</span></span>);
use_javascript(<span class="string"><span class="delimiter">'</span><span class="content">jquery.min.js</span><span class="delimiter">'</span></span>);
use_javascript(<span class="string"><span class="delimiter">'</span><span class="content">jquery.tmpl.min.js</span><span class="delimiter">'</span></span>);
use_javascript(<span class="string"><span class="delimiter">'</span><span class="content">jquery.notify.js</span><span class="delimiter">'</span></span>);
use_javascript(<span class="string"><span class="delimiter">'</span><span class="content">op_notify.js</span><span class="delimiter">'</span></span>);
<span class="local-variable">$jsonData</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">$sf_user</span>->getMemberApiKey(),
<span class="string"><span class="delimiter">'</span><span class="content">apiBase</span><span class="delimiter">'</span></span> => app_url_for(<span class="string"><span class="delimiter">'</span><span class="content">api</span><span class="delimiter">'</span></span>, <span class="string"><span class="delimiter">'</span><span class="content">homepage</span><span class="delimiter">'</span></span>),
<span class="string"><span class="delimiter">'</span><span class="content">baseUrl</span><span class="delimiter">'</span></span> => <span class="local-variable">$sf_request</span>->getRelativeUrlRoot().<span class="string"><span class="delimiter">'</span><span class="content">/</span><span class="delimiter">'</span></span>,
);
<span class="predefined">echo</span> javascript_tag(<span class="string"><span class="delimiter">'</span><span class="content">
var openpne = </span><span class="delimiter">'</span></span>.json_encode(<span class="local-variable">$jsonData</span>).<span class="string"><span class="delimiter">'</span><span class="content">;
</span><span class="delimiter">'</span></span>);
<span class="inline-delimiter">?></span>
<span class="inline-delimiter"><?php</span> <span class="keyword">endif</span> <span class="inline-delimiter">?></span>
</span></code></pre>
<p><code>opConfig::get('enable_jsonapi') && opToolkit::isSecurePage()</code> という条件は API キーの出力を行うか否かを判断するための条件であるが、 <a class="changeset" title="add notification center for PC (refs #2767)" href="http://redmine.openpne.jp/projects/op3/repository/revisions/9f50bdf66e3cdaaa4372669902995a1558d8cbe8">9f50bdf66e3cdaaa4372669902995a1558d8cbe8</a> にて誤って use_javascript をこの if ブロック内に追加してしまったことが原因で当チケットの問題が発生した。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>jQuery 等をロードする <code>use_javascript</code> を <code>opConfig::get('enable_jsonapi') && opToolkit::isSecurePage()</code> の if ブロックの外に移動する。</p>
OpenPNE 3 - Bug(バグ) #3289 (Rejected(差し戻し)): 自動リンク機能で末尾のスラッシュを省略すると後続の日本語テキストもURLとしてリンクされてしまう
http://redmine.openpne.jp/issues/3289
2012-12-27T07:38:14Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="現象"></a>
<h3 >現象<a href="#現象" class="wiki-anchor">¶</a></h3>
<p>op_auto_link_text (<a class="source" href="http://redmine.openpne.jp/projects/op3/repository/entry/lib/helper/opUtilHelper.php">source:lib/helper/opUtilHelper.php</a>) を使用する箇所(アクティビティ、日記の本文・コメントなど)で、次のような現象が起こる。</p>
<p><code>http://example.com/テキスト</code> と入力して投稿すると <code><a href="http://example.com/">http://example.com/</a>テキスト</code> のように日本語の部分を除いて自動リンク機能が働くが、<br /><code>http://example.comテキスト</code> と入力して投稿すると <code><a href="http://example.comテキスト">http://example.comテキスト</a></code> のようなリンクが生成されてしまう。</p>
<a name="原因"></a>
<h3 >原因<a href="#原因" class="wiki-anchor">¶</a></h3>
<p>op_auto_link_text による自動リンクで使用される正規表現は次のように定義されている。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"> <span class="predefined">define</span>(<span class="string"><span class="delimiter">'</span><span class="content">SF_AUTO_LINK_RE</span><span class="delimiter">'</span></span>, <span class="string"><span class="delimiter">'</span><span class="content">~
( # leading text
<</span><span class="content">\w</span><span class="content">+.*?>| # leading HTML tag, or
[^=!:</span><span class="char">\'</span><span class="content">"/]| # leading punctuation, or
^| # beginning of line, or
</span><span class="content">\s</span><span class="content">? # leading whitespaces
)
(
(?:https?://)| # protocol spec, or
(?:www</span><span class="content">\.</span><span class="content">) # www.*
)
(
[-</span><span class="content">\w</span><span class="content">]+ # subdomain or domain
(?:</span><span class="content">\.</span><span class="content">[-</span><span class="content">\w</span><span class="content">]+)* # remaining subdomains or domain
(?::</span><span class="content">\d</span><span class="content">+)? # port
</span><span class="content">\/</span><span class="content">?
[a-zA-Z0-9_</span><span class="content">\-</span><span class="content">\/</span><span class="content">.,:;</span><span class="content">\~</span><span class="content">\?</span><span class="content">@&=+$%#!()]*
)
([^a-zA-Z0-9_</span><span class="content">\-</span><span class="content">\/</span><span class="content">.,:;</span><span class="content">\~</span><span class="content">\?</span><span class="content">@&=+$%#!()]|</span><span class="content">\s</span><span class="content">|<|$) # trailing text
~xu</span><span class="delimiter">'</span></span>);
</span></code></pre>
<p>この正規表現はUTF-8モードが有効となっており(末尾の <code>u</code> オプションによる)、このモードではpreg_match内部でPCREに対して PCRE_UCF オプションが使用される。このオプションでは <code>\d</code>, <code>\D</code>, <code>\s</code>, <code>\S</code>, <code>\w</code>, <code>\W</code> などの <strong>重要な</strong> 文字クラスの挙動が変わり、例えば <code>\d</code> は全角数字にもマッチし、 <code>\w</code> は漢字や平仮名にもマッチするようになる。これによって、ドメイン部分の <code>[-\w]+</code> に日本語のテキストがマッチしてしまうため前述のような現象が起こる。</p>
<a name="参考"></a>
<h4 >参考<a href="#参考" class="wiki-anchor">¶</a></h4>
<ul>
<li><a href="https://bugs.php.net/bug.php?id=52971" class="external">PHP :: Bug #52971 :: PCRE-Meta-Characters not working with utf-8</a></li>
<li><a href="https://github.com/php/php-src/blob/master/ext/pcre/php_pcre.c#L359-L366" class="external">php-src/ext/pcre/php_pcre.c at master · php/php-src · GitHub</a></li>
</ul>
<a name="修正内容"></a>
<h3 >修正内容<a href="#修正内容" class="wiki-anchor">¶</a></h3>
<p>SF_AUTO_LINK_RE で使用されている <code>\w</code>, <code>\s</code>, <code>\d</code> を <code>[0-9A-Za-z]</code>, <code>\ </code>, <code>[0-9]</code> にそれぞれ置き換える。</p>
OpenPNE 3 - Bug(バグ) #3026 (Fixed(完了)): PHP5.2.x環境でjson_encodeの呼び出し時にWarningが発生する
http://redmine.openpne.jp/issues/3026
2012-04-23T12:28:06Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p><code>json_encode</code> の第2引数はPHP5.3.0で追加されたもので、それ以前のバージョンで実行されることを考慮されていなかったことが原因。</p>
<p>参考: <a href="http://php.net/manual/ja/function.json-encode.php" class="external">PHP: json_encode - Manual</a></p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p><code>JSON_PRETTY_PRINT</code> が定義されていない場合に <code>json_encode</code> の第2引数を指定しないように修正する。</p>
opCommunityTopicPlugin - Enhancement(機能追加・改善) #1526 (Rejected(差し戻し)): イベントの参加者を編集できるようにしてほしい
http://redmine.openpne.jp/issues/1526
2010-08-21T15:25:10Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="概要"></a>
<h3 >概要<a href="#概要" class="wiki-anchor">¶</a></h3>
<p>普段あまり書き込みをしないメンバーがイベントに参加する際に参加者一覧と実際の参加者が一致しなくなることがあるため、イベントの作成者が参加者を編集(追加・削除)できるようにしてほしいです。</p>