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 - Bug(バグ) #4131 (Fixed(完了)): Doctrine_Query::execute() の $params に応じて WHERE ... IN の要素数...
http://redmine.openpne.jp/issues/4131
2017-01-16T10:23:35Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<pre><code class="php syntaxhl"><span class="CodeRay"><span class="local-variable">$query</span> = <span class="constant">Doctrine_Core</span>::getTable(<span class="string"><span class="delimiter">'</span><span class="content">AdminUser</span><span class="delimiter">'</span></span>)->createQuery()
->andWhere(<span class="string"><span class="delimiter">'</span><span class="content">id IN ?</span><span class="delimiter">'</span></span>);
<span class="comment">// (1) 生成されるクエリ: SELECT ... FROM admin_user a WHERE (a.id IN (?))</span>
<span class="local-variable">$query</span>->execute(<span class="predefined">array</span>(<span class="predefined">array</span>(<span class="integer">1</span>)));
<span class="comment">// (2) 生成されるクエリ: SELECT ... FROM admin_user a WHERE (a.id IN (?, ?))</span>
<span class="local-variable">$query</span>->execute(<span class="predefined">array</span>(<span class="predefined">array</span>(<span class="integer">1</span>, <span class="integer">2</span>)));
</span></code></pre>
<p>上記のコードを実行すると、(1) の状態で生成されたクエリキャッシュが (2) でも使用され、パラメーターの数が一致せず下記のエラーが発生する。</p>
<pre>
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
</pre>
<p>このような、<code>Doctrine_Query::execute()</code> が呼び出されるまでプリペアドステートメントの形式が不定となる状況に <code>Doctrine_Query_Abstract::calculateQueryCacheHash()</code> および <code>opDoctrineQuery::calculateQueryCacheHash()</code> のいずれも対応できていない。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p><code>calculateQueryCacheHash()</code> メソッド内では <code>execute()</code> メソッドに渡されたパラメータの値を参照する手段が存在しない。<br />そのため opDoctrineQuery クラスで <code>Doctrine_Query::execute()</code> をオーバーライドし、渡されたパラメータに応じて一時的に <code>$this->whereInCount</code> を書き換えることで対処する。</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 - Bug(バグ) #3933 (New(新規)): 利用可能な認証プラグインが無い状態でログイン画面を開くとFatal errorになる
http://redmine.openpne.jp/issues/3933
2016-04-21T11:04:17Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>管理画面の「認証プラグイン設定」(/pc_backend.php/plugin/list?type=auth) から認証プラグインの設定ページを開き、全ての認証プラグインで「PC版有効設定」を「無効にする」に設定した状態で PC 版のログイン画面を開くと HTTP 500 エラーとなり、Web ブラウザ側にはエラーメッセージ等もない真っ白なページが表示される。</p>
<p>Apache 等のエラーログには下記のようなエラーが記録される:</p>
<pre>
[Thu Apr 21 10:30:57.453033 2016] [fcgid:warn] [pid 1331:tid 140111127688960] [client 10.0.2.2:49636] mod_fcgid: stderr: PHP Fatal error: Cannot instantiate abstract class opAuthAdapter in /var/www/sns/op36.localhost/lib/user/opAdaptableUser.class.php on line 99, referer: http://op36.localhost:8080/
</pre>
<p>類似の設定として、管理画面の「SNS設定」には「PC版使用設定」「携帯版使用設定」があるが、ここで無効に設定した場合は「このページにはアクセスできません。」とエラーメッセージが表示される。<br />認証プラグインの「PC版有効設定」および「携帯版有効設定」は、PC 版のみアクセス可能な SNS として設定したいなどの目的で無効に設定する可能性があるが、当チケットの現象ではユーザー側にメッセージを表示することもなく Fatal error で異常終了するという形で SNS が利用できなくなるため、「PC版使用設定」「携帯版使用設定」と比べて不親切である。</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/43190aa1/entry/lib/user/opAdaptableUser.class.php#L28">source:lib/user/opAdaptableUser.class.php@43190aa1#L28</a></p>
<pre><code class="php syntaxhl"><span class="CodeRay"> <span class="keyword">public</span> <span class="keyword">function</span> <span class="function">initialize</span>(sfEventDispatcher <span class="local-variable">$dispatcher</span>, sfStorage <span class="local-variable">$storage</span>, <span class="local-variable">$options</span> = <span class="predefined">array</span>())
{
<span class="predefined-constant">parent</span>::initialize(<span class="local-variable">$dispatcher</span>, <span class="local-variable">$storage</span>, <span class="local-variable">$options</span>);
<span class="keyword">if</span> (<span class="local-variable">$this</span>->getMemberId() && <span class="local-variable">$this</span>->isTimedOut())
{
<span class="local-variable">$this</span>->getAttributeHolder()->removeNamespace(<span class="string"><span class="delimiter">'</span><span class="content">opSecurityUser</span><span class="delimiter">'</span></span>);
}
<span class="local-variable">$request</span> = sfContext::getInstance()->getRequest();
<span class="local-variable">$authMode</span> = <span class="local-variable">$request</span>->getUrlParameter(<span class="string"><span class="delimiter">'</span><span class="content">authMode</span><span class="delimiter">'</span></span>);
<span class="keyword">if</span> (<span class="local-variable">$authMode</span>)
{
<span class="local-variable">$this</span>->setCurrentAuthMode(<span class="local-variable">$authMode</span>);
}
<span class="local-variable">$this</span>->createAuthAdapter(<span class="local-variable">$this</span>->getCurrentAuthMode());
}
</span></code></pre>
<p>上記のコードで、利用可能な認証プラグインが存在しない状態で <code>$this->getCurrentAuthMode()</code> が呼び出されると null が返るが、このメソッドではそのことが考慮されておらず <code>$this->createAuthAdapter()</code> の <code>$authMode</code> に null を渡してしまう。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">function</span> <span class="function">getAuthAdapterClassName</span>(<span class="local-variable">$authMode</span>)
{
<span class="keyword">return</span> <span class="string"><span class="delimiter">'</span><span class="content">opAuthAdapter</span><span class="delimiter">'</span></span>.<span class="predefined">ucfirst</span>(<span class="local-variable">$authMode</span>);
}
</span></code></pre>
<p>途中の呼び出し過程は省略するが、上記の <code>opAdaptableUser::getAuthAdapterClassName()</code> メソッドにも <code>$authMode</code> が null の状態で呼び出され、<code>'opAuthAdapter'</code> の文字列が返される。そして <code>opAuthAdapter</code> クラスを new でインスタンス化しようとすることで Fatal error が発生する。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</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>
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(バグ) #3357 (New(新規)): ./symfony cc を実行しても web/cache/ ディレクトリ以下に生成されたキャッシュが削除されない
http://redmine.openpne.jp/issues/3357
2013-06-06T06:40:54Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="現象"></a>
<h3 >現象<a href="#現象" class="wiki-anchor">¶</a></h3>
<p>ブラウザ等でメンバー画像 (no_image ではない) などユーザーが投稿した画像のサムネイルを表示すると web/cache/ ディレクトリ以下にサムネイル画像のキャッシュが生成されるが、ここに生成された画像が ./symfony cc コマンドによって削除されない状態となっている。</p>
<a name="原因"></a>
<h3 >原因<a href="#原因" class="wiki-anchor">¶</a></h3>
<p>web/cache/ ディレクトリのキャッシュ削除は opApplicationConfiguration::clearWebCache() メソッドによって行われていた。このメソッドは task.cache.clear イベントの発生によって駆動するよう設計されているが、現状 task.cache.clear イベントは下記の理由により発生する事がないため、結果として一部のキャッシュが削除されない現象が発生している。</p>
<p>task.cache.clear イベントは ./symfony cc コマンド (sfCacheClearTask クラス) 実行時に <strong>アプリケーション毎に</strong> (pc_frontend, pc_backend, mobile_frontend など) 複数回呼び出されるイベントである。その仕組みは、symfony標準のディレクトリ階層の</p>
<ul>
<li>cache/
<ul>
<li>pc_frontend/
<ul>
<li>prod/</li>
<li>dev/</li>
</ul>
</li>
<li>pc_backend/
<ul>
<li>...</li>
</ul></li>
</ul></li>
</ul>
<p>に基づいて、 <strong>cache/ ディレクトリ直下</strong> に存在するアプリケーション名 (この場合、pc_frontend と pc_backend が存在する) ごとに task.cache.clear イベントを発生させるものとなっている。<br />しかし現状のOpenPNEでは、 <a class="issue tracker-1 status-5 priority-5 priority-high3 closed" title="Bug(バグ): Can't execute openpne:execute-mail-action bacause of permisson of cache/cli directory (Fixed(完了))" href="http://redmine.openpne.jp/issues/957">#957</a> の修正によって cache/ ディレクトリの階層構造がUNIXユーザー単位で分離されるようになり</p>
<ul>
<li>cache/
<ul>
<li>www-data/
<ul>
<li>pc_frontend/
<ul>
<li>dev/</li>
<li>prod/</li>
</ul>
</li>
</ul>
</li>
<li>john/
<ul>
<li>pc_frontend/
<ul>
<li>dev/</li>
<li>prod/</li>
</ul></li>
</ul></li>
</ul></li>
</ul>
<p>となっているため、www-data や john といったアプリケーションは存在しないといった判断され task.cache.clear イベントが実行されない。</p>
<a name="修正内容"></a>
<h3 >修正内容<a href="#修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</p>
OpenPNE 3 - Bug(バグ) #3303 (Fixed(完了)): 通知センターのUIがモックアップ上のものと異なる箇所がある
http://redmine.openpne.jp/issues/3303
2013-01-24T09:55:52Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p><a class="external" href="http://www.tejimaya.com/20111203houou-%E3%83%A2%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97-update/">http://www.tejimaya.com/20111203houou-%E3%83%A2%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97-update/</a></p>
<p><a class="external" href="http://www.tejimaya.com/20111203%E9%80%9A%E7%9F%A5%E3%82%BB%E3%83%B3%E3%82%BF%E3%83%BC%E3%82%92%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B%E3%82%A2%E3%82%A4%E3%83%87%E3%82%A2/">http://www.tejimaya.com/20111203%E9%80%9A%E7%9F%A5%E3%82%BB%E3%83%B3%E3%82%BF%E3%83%BC%E3%82%92%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B%E3%82%A2%E3%82%A4%E3%83%87%E3%82%A2/</a></p>
<p>通知センターのモックアップが上記のURLに掲載されているが、次の点で現在の実装と相違がある。</p>
<ul>
<li>フレンド申請の通知文が「○○さんからリンク申請が届いています」ではなく「フレンド申請を許可しますか?」のみとなっている(申請者の名前が表示されていない)</li>
<li>「クリックしたものは通知から消す」との記述があるが、既読状態にかかわらず全ての通知が表示されている</li>
</ul>
<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(バグ) #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(バグ) #3196 (New(新規)): cacheディレクトリのパーミッションが適切でない
http://redmine.openpne.jp/issues/3196
2012-09-11T06:55:03Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="現象"></a>
<h3 >現象<a href="#現象" class="wiki-anchor">¶</a></h3>
<p>現状の実装では、cache ディレクトリ内のファイルは 0666 (rw-rw-rw-)、ディレクトリは 0777 (rwxrwxrwx) と過大な権限が設定されている。この実装については、</p>
<p><a class="external" href="http://trac.openpne.jp/ticket/3246#comment:7">http://trac.openpne.jp/ticket/3246#comment:7</a></p>
<blockquote>
<p>r10242, r10244, r10245 で修正しました。</p>
<p>基本的には symfony 側もしくは OpenPNE 側で作成するディレクトリに関しては 0777 、ファイルに関しては 0666 というパーミッションになるように修正をおこなっています。</p>
<p>この修正は正当なユーザ以外のファイル・ディレクトリに関する操作を許してしまうので、セキュリティ面では弱くなってしまいます。これはあくまでより多くの環境で使用していただくための措置であり、決して恒久的な対処であってはならないことを念頭に置かねばなりません。</p>
</blockquote>
<p>と書かれており、適切なパーミッションへの修正が必要である。</p>
<a name="修正内容"></a>
<h3 >修正内容<a href="#修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</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>
OpenPNE 3 - Bug(バグ) #1855 (New(新規)): cache以下のディレクトリがユーザ毎に完全に分離できていない
http://redmine.openpne.jp/issues/1855
2010-12-17T07:01:26Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>symfony コマンドを使用してタスクを実行すると、キャッシュディレクトリにユーザ毎に生成されるディレクトリを無視して ./cache/config/OpenPNE.yml.php や ./cache/project_autoload.cache のようなファイルが生成されてしまいます。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>ユーザ毎の sf_cache_dir の変更は opApplicationConfiguration::setCacheDir() で行われていますが、symfony コマンドでのタスクの実行ではタスクが実行されるまでの初期化中に opApplicationConfiguration が使われていません。そのため、sf_cache_dir への変更が行われないままキャッシュが生成されてます。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>opApplicationConfiguration::setCacheDir() メソッドを opProjectConfiguration クラスに移動する</p>