OpenPNE Issue Tracking System: チケット
http://redmine.openpne.jp/
http://redmine.openpne.jp/favicon.ico
2017-05-19T11:02:31Z
OpenPNE Issue Tracking System
Redmine
OpenPNE 3 - Bug(バグ) #4195 (New(新規)): opFormItemGenerator で FormType が checkbox, select, radio の場合...
http://redmine.openpne.jp/issues/4195
2017-05-19T11:02:31Z
kaoru n
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>opFormItemGenerator で FormType が checkbox, select, radio の場合に翻訳を行っているため、Formクラス等でカタログを変更しても反映されない。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p><a class="external" href="https://github.com/openpne/OpenPNE3/blob/master/lib/util/opFormItemGenerator.class.php#L47">https://github.com/openpne/OpenPNE3/blob/master/lib/util/opFormItemGenerator.class.php#L47</a><br /><a class="external" href="https://github.com/openpne/OpenPNE3/blob/master/lib/util/opFormItemGenerator.class.php#L50">https://github.com/openpne/OpenPNE3/blob/master/lib/util/opFormItemGenerator.class.php#L50</a><br /><a class="external" href="https://github.com/openpne/OpenPNE3/blob/master/lib/util/opFormItemGenerator.class.php#L78">https://github.com/openpne/OpenPNE3/blob/master/lib/util/opFormItemGenerator.class.php#L78</a><br />などで翻訳を行っている</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</p>
opSkinThemePlugin - Bug(バグ) #4026 (Pending Review(レビュー待ち)): PC向けのテンプレートのみ存在する画面をスマートフォンで閲覧するとテーマC...
http://redmine.openpne.jp/issues/4026
2016-10-19T06:01:24Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="現象"></a>
<h3 >現象<a href="#現象" class="wiki-anchor">¶</a></h3>
<p>opSkinThemePlugin は、リクエストのあった User-Agent に応じて PC 向けの CSS とスマートフォン向けの CSS を分けて出力できるが、スマートフォンで PC 向けのテンプレートのみ用意された画面を開くと PC, スマートフォン向けのいずれの CSS も読み込まれない現象が起こる。<br />具体的には opAuthMailAddressPlugin の新規登録画面 (/opAuthMailAddress/requestRegisterURL) などで発生する。</p>
<a name="原因"></a>
<h3 >原因<a href="#原因" class="wiki-anchor">¶</a></h3>
<p><code>opThemeEvent::enableSkinByTheme()</code> メソッドでは、<code>opWebRequest::isSmartphone()</code> の結果が true の場合にはスマートフォン向け CSS のみを設定し、false の場合には PC 向け CSS のみを設定という動作となっている。<br />しかし、スマートフォンから閲覧した場合は表示される画面が常にスマートフォン向けのレイアウトであるとは限らず、PC 向けテンプレートのみ用意されている画面であれば PC 向けのレイアウトで表示される。<br />そのため、スマートフォンからの閲覧でかつ PC 向けのレイアウトが表示される場合に、PC 向け CSS が設定されておらずスキンが適用されていない状態で表示されていた。</p>
<a name="修正内容"></a>
<h3 >修正内容<a href="#修正内容" class="wiki-anchor">¶</a></h3>
<p><code>opWebRequest::isSmartphone()</code> の結果が true の場合にはスマートフォン向け CSS と PC 向け CSS の両方が設定されるように修正する。</p>
opBlogPlugin - Bug(バグ) #3986 (Accepted(着手)): v0.9.0からv1.0.2へのマイグレーション後とv1.0.2のクリーンインストール後でDBスキーマに...
http://redmine.openpne.jp/issues/3986
2016-07-27T11:32:27Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>マイグレーションスクリプトの不備により v1.0.2 へのマイグレーションと v1.0.2 のクリーンインストール後で <code>blog_rss_cache</code> テーブルのスキーマに差異が生じている。</p>
<pre>
$ cd plugins/opBlogPlugin
$ git checkout v0.9.0
$ ../../symfony doctrine:build --env=test --all --and-load
$ git checkout v1.0.2
$ ../../symfony openpne:migrate --env=test --no-update-plugin --target=opBlogPlugin
$ echo 'SHOW CREATE TABLE blog_rss_cache\G' | mysql -u root openpne_test > schema-migrate.txt
$ ../../symfony doctrine:build --env=test --all --and-load
$ echo 'SHOW CREATE TABLE blog_rss_cache\G' | mysql -u root openpne_test > schema-rebuild.txt
$ diff -u schema-migrate.txt schema-rebuild.txt
</pre>
<pre><code class="diff syntaxhl"><span class="CodeRay"><span class="line head"><span class="head">--- </span><span class="filename">schema-migrate.txt 2016-07-27 17:45:29.927593471 +0900</span></span>
<span class="line head"><span class="head">+++ </span><span class="filename">schema-rebuild.txt 2016-07-27 17:46:18.371593471 +0900</span></span>
<span class="line change"><span class="change">@@</span> -11,5 +11,7 <span class="change">@@</span></span>
`updated_at` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `date_INDEX_idx` (`date`),
<span class="line delete"><span class="delete">-</span> KEY `member_id_date_idx` (`member_id`,`date`)</span>
<span class="line insert"><span class="insert">+</span> KEY `member_id_date_idx` (`member_id`,`date`),</span>
<span class="line insert"><span class="insert">+</span> KEY `member_id_idx` (`member_id`),</span>
<span class="line insert"><span class="insert">+</span> CONSTRAINT `blog_rss_cache_member_id_member_id` FOREIGN KEY (`member_id`) REFERENCES `member` (`id`)</span>
) ENGINE=InnoDB DEFAULT CHARSET=utf8
</span></code></pre>
<p>不足している箇所:</p>
<ul>
<li>インデックス <code>member_id_idx</code> (Doctrine によって自動で追加されたもの) が追加されていない</li>
<li>外部キー制約 <code>blog_rss_cache_member_id_member_id</code> が追加されていない</li>
</ul>
<p>特に <code>blog_rss_cache_member_id_member_id</code> が存在しない不一致については、v1.0.3 で修正された <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): opBlogPlugin を使用しているメンバーが退会しようとすると500エラーとなる (Fixed(完了))" href="http://redmine.openpne.jp/issues/3473">#3473</a> に関するマイグレーション時に問題となる。<br />具体的には v0.9.0 をクリーンインストールした状態から v1.0.3 にマイグレーションすると下記のエラーが発生して異常終了する。</p>
<pre>
migrating of opBlogPlugin encountered the following errors:
Error #1 - SQLSTATE[42000]: Syntax error or access violation: 1091 Can't DROP 'blog_rss_cache_member_id_member_id'; check that column/key exists. Failing Query: "ALTER TABLE `blog_rss_cache` DROP FOREIGN KEY blog_rss_cache_member_id_member_id"
</pre>
<p>このエラーが発生した場合、マイグレーションが途中まで完了した状態かつ <code>opBlogPlugin_revision</code> が更新されないままロールバックされずに中断されるため、復旧が困難な <strong>非常に面倒な状態になる</strong>。(チケットの優先度を高めにしたのはこのため)</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p><code>data/migrations/1.0.0/001_add_blog_rss_cache_table.php</code> に必要な定義が不足していたことが原因。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>修正にあたって下記のパターンを考慮する必要がある。</p>
<ul>
<li>v0.9.0 をクリーンインストールした状態から最新版にマイグレーション
<ul>
<li><code>opBlogPlugin_revision</code> が存在しない状態からリビジョン 1, 2, 3, 4 の差分が一度に適用される</li>
<li>この場合、リビジョン 1 を直接修正することで <code>blog_rss_cache_member_id_member_id</code> を追加できる</li>
<li>一方で、リビジョン 1 を修正したとしても、追加された <code>blog_rss_cache_member_id_member_id</code> の存在をリビジョン 4 の up メソッド内でチェックすることはできない</li>
<li>各リビジョンの up メソッド内で呼ばれる addForeignKey などのメソッドは即時に SQL として実行されるものではない(全てのリビジョンの up メソッドが呼ばれた後に一度に実行される)</li>
</ul>
</li>
<li>v0.9.0 をクリーンインストールした状態から一度 v1.0.2 にマイグレーションしてから最新版にマイグレーション
<ul>
<li><code>opBlogPlugin_revision</code> が存在しない状態からリビジョン 1, 2, 3 の差分が適用され、その後リビジョン 4 が適用される</li>
<li>修正前のリビジョン 1 がすでに適用された状態からのマイグレーション</li>
<li>リビジョン 4 が実行される時点では <code>blog_rss_cache_member_id_member_id</code> が存在しない状態</li>
</ul>
</li>
<li>v1.0.2 をクリーンインストールした状態から最新版にマイグレーション
<ul>
<li><code>opBlogPlugin_revision</code> が 3 の状態からリビジョン 4 が適用される</li>
<li>リビジョン 4 が実行される時点では <code>blog_rss_cache_member_id_member_id</code> が存在する状態</li>
</ul>
</li>
<li>最新版をクリーンインストール</li>
</ul>
<p>上記の全てのパターンでインストールまたはマイグレーションが正常に完了し、かつ最終的な <code>blog_rss_cache</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>
opOpenSocialPlugin - Bug(バグ) #3937 (Pending Review(レビュー待ち)): 管理画面の「アクティビティの連続投稿禁止時間」の値を変更しても連続投稿禁...
http://redmine.openpne.jp/issues/3937
2016-04-27T11:02:44Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>管理画面の「アクティビティの連続投稿禁止時間」はデフォルトで 30 秒となっているが、この値を 1 秒や 60 秒に変更しても設定したとおりの時間にならず常に 30 秒で連続投稿が制限される。</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/plg-open-social/repository/revisions/6d81bffd/entry/lib/services/opOpenSocialActivityService.class.php#L185">source:lib/services/opOpenSocialActivityService.class.php@6d81bffd#L185</a></p>
<pre><code class="php syntaxhl"><span class="CodeRay"> <span class="keyword">if</span> (sfConfig::get(<span class="string"><span class="delimiter">'</span><span class="content">opensocial_activity_post_limit_time</span><span class="delimiter">'</span></span>, <span class="integer">30</span>))
{
<span class="local-variable">$object</span> = <span class="constant">Doctrine</span>::getTable(<span class="string"><span class="delimiter">'</span><span class="content">ActivityData</span><span class="delimiter">'</span></span>)->createQuery()
->where(<span class="string"><span class="delimiter">'</span><span class="content">foreign_table = ?</span><span class="delimiter">'</span></span>, <span class="constant">Doctrine</span>::getTable(<span class="string"><span class="delimiter">'</span><span class="content">Application</span><span class="delimiter">'</span></span>)->getTableName())
->andWhere(<span class="string"><span class="delimiter">'</span><span class="content">foreign_id = ?</span><span class="delimiter">'</span></span>, <span class="local-variable">$memberApplication</span>->getApplicationId())
->andWhere(<span class="string"><span class="delimiter">'</span><span class="content">member_id = ?</span><span class="delimiter">'</span></span>, <span class="local-variable">$member</span>->getId())
->orderBy(<span class="string"><span class="delimiter">'</span><span class="content">created_at DESC</span><span class="delimiter">'</span></span>)
->fetchOne();
<span class="keyword">if</span> (<span class="local-variable">$object</span>)
{
<span class="local-variable">$interval</span> = <span class="predefined">time</span>() - <span class="predefined">strtotime</span>(<span class="local-variable">$object</span>->getCreatedAt());
<span class="keyword">if</span> (<span class="local-variable">$interval</span> < sfConfig::get(<span class="string"><span class="delimiter">'</span><span class="content">opensocial_activity_post_limit_time</span><span class="delimiter">'</span></span>, <span class="integer">30</span>))
{
<span class="keyword">throw</span> <span class="keyword">new</span> <span class="constant">SocialSpiException</span>(<span class="string"><span class="delimiter">"</span><span class="content">Service Unavailable</span><span class="delimiter">"</span></span>, <span class="integer">503</span>);
}
}
}
</span></code></pre>
<p>「アクティビティの連続投稿禁止時間」の設定値は上記の箇所で使用されているが、この設定は sns_config テーブルに格納される値であるため sfConfig ではなく opConfig ないし <code>Doctrine_Core::getTable('SnsConfig')->get()</code> を使わなければ期待した値を取得することができない。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p><code>sfConfig::get('opensocial_activity_post_limit_time', 30)</code> としている箇所を <code>Doctrine_Core::getTable('SnsConfig')->get('opensocial_activity_post_limit_time', 30)</code> に変更する。</p>
opOpenSocialPlugin - Bug(バグ) #3936 (Pending Review(レビュー待ち)): SNSメンバーによるアプリ追加を許可しても「新しいアプリをインストールす...
http://redmine.openpne.jp/issues/3936
2016-04-27T05:21:19Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>管理画面から opOpenSocialPlugin の「アプリ設定」(/pc_backend.php/opOpenSocialPlugin) にある「SNSメンバーのアプリ追加を許可」を「許可」または「SNS管理者の許可が必要」にセットすると、管理画面だけでなく SNS メンバーが OpenSocial アプリをインストールすることができるようになる。</p>
<p>しかし、「アプリを新しく追加する」(/application/install) のページへ移動するためのリンクが、すでにアプリを追加しているメンバーにしか表示されないため、SNS メンバーが新たにアプリをインストールしたい場合には既にインストールされている他の適当なアプリを追加する必要がある。</p>
<p>アプリが追加されていないメンバーの表示:<br /><img src="http://redmine.openpne.jp/attachments/download/618/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2016-04-27_13.07.36.png" style="width:734px;" alt="" /></p>
<p>アプリが追加されているメンバーの表示:<br /><img src="http://redmine.openpne.jp/attachments/download/617/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2016-04-27_13.05.21.png" style="width:735px;" alt="" /></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/plg-open-social/repository/revisions/6d81bffd/entry/apps/pc_frontend/modules/application/templates/listSuccess.php#L31">source:apps/pc_frontend/modules/application/templates/listSuccess.php@6d81bffd#L31</a></p>
<pre><code class="php syntaxhl"><span class="CodeRay"><span class="inline-delimiter"><?php</span> <span class="keyword">if</span> (<span class="local-variable">$isOwner</span> && <span class="predefined">isset</span>(<span class="local-variable">$memberApplications</span>) && <span class="predefined">count</span>(<span class="local-variable">$memberApplications</span>)) : <span class="inline-delimiter">?></span>
<span class="inline-delimiter"><?php</span> <span class="predefined">echo</span> sortable_element(<span class="string"><span class="delimiter">'</span><span class="content">order</span><span class="delimiter">'</span></span>, <span class="predefined">array</span>(
<span class="string"><span class="delimiter">'</span><span class="content">url</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="content">@application_sort</span><span class="delimiter">'</span></span>,
<span class="string"><span class="delimiter">'</span><span class="content">tag</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="content">div</span><span class="delimiter">'</span></span>,
<span class="string"><span class="delimiter">'</span><span class="content">only</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="content">sortable</span><span class="delimiter">'</span></span>,
<span class="string"><span class="delimiter">'</span><span class="content">with</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="content">Sortable.serialize("order")+"&</span><span class="delimiter">'</span></span>.<span class="predefined">urlencode</span>(<span class="local-variable">$form</span>->getCSRFFieldName()).<span class="string"><span class="delimiter">'</span><span class="content">=</span><span class="delimiter">'</span></span>.<span class="predefined">urlencode</span>(<span class="local-variable">$form</span>->getCSRFToken()).<span class="string"><span class="delimiter">'</span><span class="content">"</span><span class="delimiter">'</span></span>
)); <span class="inline-delimiter">?></span>
<span class="tag"><div</span> <span class="attribute-name">class</span>=<span class="string"><span class="delimiter">"</span><span class="content">moreInfo</span><span class="delimiter">"</span></span><span class="tag">></span>
<span class="tag"><ul</span> <span class="attribute-name">class</span>=<span class="string"><span class="delimiter">"</span><span class="content">moreInfo</span><span class="delimiter">"</span></span><span class="tag">></span>
<span class="tag"><li></span>
<span class="inline-delimiter"><?php</span> <span class="predefined">echo</span> link_to(__(<span class="string"><span class="delimiter">'</span><span class="content">App Gallery</span><span class="delimiter">'</span></span>), <span class="string"><span class="delimiter">'</span><span class="content">@application_gallery</span><span class="delimiter">'</span></span>) <span class="inline-delimiter">?></span>
<span class="inline-delimiter"><?php</span> <span class="keyword">if</span> (<span class="local-variable">$isOwner</span>): <span class="inline-delimiter">?></span>
<span class="inline-delimiter"><?php</span> <span class="keyword">if</span> (<span class="local-variable">$isInstallApp</span>): <span class="inline-delimiter">?></span>
<span class="tag"><li></span><span class="inline-delimiter"><?php</span> <span class="predefined">echo</span> link_to(__(<span class="string"><span class="delimiter">'</span><span class="content">Install new App</span><span class="delimiter">'</span></span>), <span class="string"><span class="delimiter">'</span><span class="content">@application_install</span><span class="delimiter">'</span></span>) <span class="inline-delimiter">?></span><span class="tag"></li></span>
<span class="inline-delimiter"><?php</span> <span class="keyword">endif</span>; <span class="inline-delimiter">?></span>
<span class="inline-delimiter"><?php</span> <span class="keyword">if</span> (<span class="local-variable">$isInstalledApp</span>): <span class="inline-delimiter">?></span>
<span class="tag"><li></span><span class="inline-delimiter"><?php</span> <span class="predefined">echo</span> link_to(__(<span class="string"><span class="delimiter">'</span><span class="content">Apps Installed by You</span><span class="delimiter">'</span></span>), <span class="string"><span class="delimiter">'</span><span class="content">@application_installed_list</span><span class="delimiter">'</span></span>) <span class="inline-delimiter">?></span><span class="tag"></li></span>
<span class="inline-delimiter"><?php</span> <span class="keyword">endif</span>; <span class="inline-delimiter">?></span>
<span class="inline-delimiter"><?php</span> <span class="keyword">endif</span>; <span class="inline-delimiter">?></span>
<span class="tag"></li></span>
<span class="tag"></ul></span>
<span class="tag"></div></span>
<span class="inline-delimiter"><?php</span> <span class="keyword">endif</span>; <span class="inline-delimiter">?></span>
</span></code></pre>
<p>上記のコードのうち <code>sortable_element</code> はメンバーが持っているアプリケーションを並べ替えるために必要な部分となっているが、<code>div.moreInfo</code> に表示される項目についてはメンバーがアプリケーションを持っているか否かは関係なく <code>$isOwner</code> が true であれば表示すべき部分であるため、この if の条件が適切でないことが原因であるといえる。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>メンバーがアプリケーションを持っているか否かに関わらず <code>$isOwner</code> が true であれば <code>div.moreInfo</code> を表示する</p>
OpenPNE 3 - Bug(バグ) #3786 (Rejected(差し戻し)): 表示されているバナー画像をアップロード画像リストから削除しようとすると500エラー
http://redmine.openpne.jp/issues/3786
2015-03-03T06:34:14Z
isao sano
sano@tejimaya.com
<a name="概要"></a>
<h3 >概要<a href="#概要" class="wiki-anchor">¶</a></h3>
<p>表示されているバナー画像をアップロード画像リストから削除しようとすると500エラーが発生する。<br />アップロード画像リスト画面を再度表示すると、以下の画像のように枠だけが表示される。</p>
<p><img src="http://redmine.openpne.jp/attachments/download/585/%E7%A9%BA%E3%81%AE%E7%94%BB%E5%83%8F.png" style="width:500px;" alt="" /></p>
<a name="エラー"></a>
<h3 >エラー<a href="#エラー" class="wiki-anchor">¶</a></h3>
<pre>
500 | Internal Server Error | Doctrine_Connection_Mysql_Exception
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`sns_example_com/banner_use_image`, CONSTRAINT `banner_use_image_banner_image_id_banner_image_id` FOREIGN KEY (`banner_image_id`) REFERENCES `banner_image` (`id`))
</pre>
<a name="再現手順"></a>
<h3 >再現手順<a href="#再現手順" class="wiki-anchor">¶</a></h3>
<p>1.管理画面の「デザイン設定」→「バナー設定」→「トップバナー(ログイン前)設定」(/pc_backend.php/design/banner/id/1) を開く。<br />2.「バナー画像を追加」を開き、適当な画像をアップロードする。<br />3. 手順2でアップロードした画像を「表示する」に設定する<br />4.管理画面のアップロード画像リスト (/pc_backend.php/monitoring) を開き、先ほど追加した画像を削除する。<br />5. エラーが発生し削除できない</p>
opAshiatoPlugin - Bug(バグ) #3398 (Pending Review(レビュー待ち)): スマートフォン版のプロフィール画面などへのアクセスに対応していない
http://redmine.openpne.jp/issues/3398
2013-09-12T05:28:15Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>スマートフォン端末からプロフィール画面やフレンドリスト画面を閲覧したときにあしあとが記録されない。<br /><a href="https://github.com/ichikawatatsuya/opDiaryPlugin/tree/master" class="external">ichikawatatsuya/opDiaryPlugin</a> のようにスマートフォン対応された opDiaryPlugin でも同様の現象が起こる。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>通常のPC版のプロフィール画面は member/profile アクションであるのに対し、スマートフォン版では member/smtProfile アクションであるため <code>config/config.php</code> に記述されている op_action.post_execute_member_profile イベントが発生しないため。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p><code>config/config.php</code> にスマートフォン版のアクションに対する記述を追加する。</p>
OpenPNE 3 - Bug(バグ) #3367 (New(新規)): デイリーニュースで使用されるガジェットのパラメータがエスケープされている
http://redmine.openpne.jp/issues/3367
2013-06-25T12:38:21Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>管理画面のガジェット設定 (/design/gadget?type=dailyNews) からデイリーニュースで使用するガジェットを設定できるが、このガジェットのパラメーターに対してエスケープが施された状態でメール送信されてしまう。<br />例えば、デイリーニュースのガジェットに「フリーエリア」を追加して「内容」に「>>>> aaaaa <<<<」を設定すると、送信されるデイリーニュースのメール本文には「>>>> aaaaa <<<<」が出力される。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>メールテンプレートにおけるエスケープ処理の問題は <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): The Parameter will be escape in the mail (メールに含まれるパラメータがエスケープされている) (Fixed(完了))" href="http://redmine.openpne.jp/issues/1344">#1344</a> によって修正されており、その修正内容は下記のようなものでした。</p>
<pre><code class="diff syntaxhl"><span class="CodeRay"><span class="line head"><span class="head">--- </span><span class="filename">a/lib/util/opMailSend.class.php</span></span>
<span class="line head"><span class="head">+++ </span><span class="filename">b/lib/util/opMailSend.class.php</span></span>
<span class="change"><span class="change">@@</span> -81,6 +82,7 <span class="change">@@</span></span> <span class="keyword">class</span> <span class="class">opMailSend</span>
<span class="local-variable">$view</span> = <span class="keyword">new</span> sfTemplatingComponentPartialView(<span class="local-variable">$context</span>, <span class="string"><span class="delimiter">'</span><span class="content">superGlobal</span><span class="delimiter">'</span></span>, <span class="string"><span class="delimiter">'</span><span class="content">notify_mail:</span><span class="delimiter">'</span></span>.<span class="local-variable">$target</span>.<span class="string"><span class="delimiter">'</span><span class="content">_</span><span class="delimiter">'</span></span>.<span class="local-variable">$template</span>, <span class="string"><span class="delimiter">'</span><span class="delimiter">'</span></span>);
<span class="local-variable">$context</span>->set(<span class="string"><span class="delimiter">'</span><span class="content">view_instance</span><span class="delimiter">'</span></span>, <span class="local-variable">$view</span>);
<span class="line insert"><span class="insert">+</span> <span class="local-variable">$view</span>->getAttributeHolder()->setEscaping(<span class="predefined-constant">false</span>);</span>
<span class="local-variable">$view</span>->setPartialVars(<span class="local-variable">$params</span>);
<span class="local-variable">$view</span>->setAttribute(<span class="string"><span class="delimiter">'</span><span class="content">renderer_config</span><span class="delimiter">'</span></span>, <span class="predefined">array</span>(<span class="string"><span class="delimiter">'</span><span class="content">twig</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="content">opTemplateRendererTwig</span><span class="delimiter">'</span></span>));
<span class="local-variable">$view</span>->setAttribute(<span class="string"><span class="delimiter">'</span><span class="content">rule_config</span><span class="delimiter">'</span></span>, <span class="predefined">array</span>(<span class="string"><span class="delimiter">'</span><span class="content">notify_mail</span><span class="delimiter">'</span></span> => <span class="predefined">array</span>(
</span></code></pre>
<p>一方、デイリーニュースの送信には、メールテンプレートこそ使用しているものの本文中で include_component を使用しており、呼び出されるコンポーネントのために新たに sfViewParameterHolder が生成されます。この sfViewParameterHolder は呼び出し元ビューのエスケープ設定を引き継がず、sfConfig から sf_escaping_method や sf_escaping_strategy の値を取得して設定するため、コンポーネント内では <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): The Parameter will be escape in the mail (メールに含まれるパラメータがエスケープされている) (Fixed(完了))" href="http://redmine.openpne.jp/issues/1344">#1344</a> の修正による効果が及ばないことになります。これが原因で、デイリーニュースのガジェット内ではエスケープが有効な状態でテンプレートが出力されます。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</p>
OpenPNE 3 - 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 - Enhancement(機能追加・改善) #3254 (New(新規)): アクティビティ関連のAPIで絵文字を適切なimg要素に変換されるようにする
http://redmine.openpne.jp/issues/3254
2012-11-08T09:03:41Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="概要"></a>
<h3 >概要<a href="#概要" class="wiki-anchor">¶</a></h3>
<p>activity/search.json などのAPIで、アクティビティのbodyに <code>[i:1]</code> のように含まれる絵文字をimg要素に変換されるようにする。</p>
<a name="仕様"></a>
<h3 >仕様<a href="#仕様" class="wiki-anchor">¶</a></h3>
<p>APIで返されるアクティビティには、ブラウザ等で表示するためのHTMLの断片が含まれる body_html という項目がある。この項目について絵文字からimg要素への変換を施す。</p>
opOpenSocialPlugin - Bug(バグ) #2394 (Pending Review(レビュー待ち)): [pc] 内部コンテナ使用時にcajaのJavaScriptコードが読み...
http://redmine.openpne.jp/issues/2394
2011-09-05T12:22:22Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>内部コンテナを有効にした状態でガジェットを実行すると gadgets/ifr ページに html-sanitizer-minified.js などのコードが含まれない。<br />そのため、html-sanitizer の関数を使用する tabs などのフィーチャーでは <code>html_sanitize is not defined</code> とエラーが出てフィーチャーの機能を使用できない。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>Shindig の php/external/resources ディレクトリが opOpenSocialPlugin に同梱されていないため</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<ul>
<li>Shindig の php/external/resources ディレクトリを lib/vendor/Shindig/extarnal へコピー</li>
<li><a class="external" href="http://sns.example.com/gadgets/resources">http://sns.example.com/gadgets/resources</a> で追加したリソースにアクセスできるようにする</li>
<li>NOTICE ファイルに php/external/resources をコピーしている旨を追記</li>
</ul>
OpenPNE 3 - Enhancement(機能追加・改善) #2045 (New(新規)): #1482 の新パスワード仕様の使用可否を設定できるようにする
http://redmine.openpne.jp/issues/2045
2011-05-02T17:11:17Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p><a class="issue tracker-2 status-1 priority-5 priority-high3 overdue parent" title="Enhancement(機能追加・改善): Enhancement for Password (パスワードの仕様変更) (New(新規))" href="http://redmine.openpne.jp/issues/1482">#1482</a> の新パスワード仕様を無効にする設定を追加</p>
<a name="Spec-仕様"></a>
<h3 >Spec (仕様)<a href="#Spec-仕様" class="wiki-anchor">¶</a></h3>
<p>OpenPNE.yml に password_through_phpass (デフォルト: true) を追加</p>
OpenPNE 3 - Enhancement(機能追加・改善) #1539 (Rejected(差し戻し)): customizing.css がブラウザキャッシュを使うように対処する
http://redmine.openpne.jp/issues/1539
2010-08-30T10:08:11Z
Shinichi Urabe
urabe+op3@nuts-choco.com
<a name="概要"></a>
<h3 >概要<a href="#概要" class="wiki-anchor">¶</a></h3>
<p>customizing.css 出力時にブラウザキャッシュを使うようにレスポンスを変更する<br />CSS更新時は customizing.css にパラメータを追加して、ブラウザキャッシュが読まれないように対処する</p>
<a name="仕様"></a>
<h3 >仕様<a href="#仕様" class="wiki-anchor">¶</a></h3>
<p>SnsConfig テーブルにカスタムCSS用のリビジョン番号を保存し、customizing.css に customizing.css?rev=1 のようにパラメータとして渡す</p>
OpenPNE 3 - Enhancement(機能追加・改善) #1482 (New(新規)): Enhancement for Password (パスワードの仕様変更)
http://redmine.openpne.jp/issues/1482
2010-08-05T03:11:03Z
Shogo Kawahara
kawahara@bucyou.net
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p>Enhancement for Password (パスワードの仕様変更)</p>
<ul>
<li>The password is saved database before md5 hash now, but hash function must use salted SHA256 or salted SAH512.</li>
<li>The password must be able to use the symbol character.</li>
</ul>
<ul>
<li>現状md5ハッシュでの保存となっているが、salted SHA256や salted SHA512 (もしくはより安全なハッシュアルゴリズム)を利用する。
<ul>
<li>(OpenPNE3は PHP5.2以降のためphp5.1.2でデフォルトで有効になったhash拡張モジュールを活用するといった手段を使いたい)</li>
</ul>
</li>
<li>パスワードの文字長は最小は制限するが最大値は制限しない。</li>
<li>英数字意外にも記号を使えるようにする</li>
<li>旧バージョンとの互換性
<ul>
<li>文字長で判断?</li>
</ul></li>
</ul>