OpenPNE Issue Tracking System: チケット
http://redmine.openpne.jp/
http://redmine.openpne.jp/favicon.ico
2017-11-10T05:41:59Z
OpenPNE Issue Tracking System
Redmine
OpenPNE 3 - Backport(バックポート) #4259 (Fixed(完了)): [PATCH] opWidgetFormDateTime クラスの追加
http://redmine.openpne.jp/issues/4259
2017-11-10T05:41:59Z
Youichi Kimura
kim.upsilon@bucyou.net
<p>親チケットの説明を参照</p>
OpenPNE 3 - Backport(バックポート) #4258 (Fixed(完了)): [PATCH] opWidgetFormDateTime クラスの追加
http://redmine.openpne.jp/issues/4258
2017-11-10T05:41:19Z
Youichi Kimura
kim.upsilon@bucyou.net
<p>親チケットの説明を参照</p>
OpenPNE 3 - Backport(バックポート) #4229 (Fixed(完了)): opI18N::__() のパラメータに語形変化の設定をしたSnsTermインスタンスを渡しても反...
http://redmine.openpne.jp/issues/4229
2017-10-20T06:26:28Z
Youichi Kimura
kim.upsilon@bucyou.net
<p>親チケットの説明を参照</p>
OpenPNE 3 - Backport(バックポート) #4228 (Fixed(完了)): opI18N::__() のパラメータに語形変化の設定をしたSnsTermインスタンスを渡しても反...
http://redmine.openpne.jp/issues/4228
2017-10-20T06:24:28Z
Youichi Kimura
kim.upsilon@bucyou.net
<p>親チケットの説明を参照</p>
OpenPNE 3 - Enhancement(機能追加・改善) #4200 (New(新規)): 古い静的ファイルのキャッシュが意図せず使われないようにする
http://redmine.openpne.jp/issues/4200
2017-06-05T08:20:28Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p>現状の OpenPNE では、静的ファイル (*.js, *.css など) のキャッシュについて HTTP ヘッダ等による制御を行っておらず、Web ブラウザやプロキシサーバーのデフォルトの動作に委ねられている。</p>
<p>静的ファイルについて Apache のデフォルトの動作では、以下のように <code>Last-Modified</code>, <code>ETag</code> ディレクティブがレスポンスヘッダに出力される。</p>
<pre>
$ curl --head http://v38.localhost/js/util.js
HTTP/1.1 200 OK
Date: Mon, 05 Jun 2017 08:13:30 GMT
Server: Apache/2.4.10 (Debian)
Last-Modified: Fri, 17 Mar 2017 06:02:37 GMT
ETag: "6a2-54ae6ecb2f7a1"
Accept-Ranges: bytes
Content-Length: 1698
Vary: Accept-Encoding
Content-Type: application/javascript
</pre>
<p><a class="issue tracker-1 status-5 priority-5 priority-high3 closed" title="Bug(バグ): メンバー登録時にデータが不正な状態になることがある (Fixed(完了))" href="http://redmine.openpne.jp/issues/3150#note-19">#3150-19</a> で指摘されているように、Google Chrome 58 といった比較的新しいブラウザにおいても静的ファイルの古いキャッシュが問題を引き起こす場合があることから、OpenPNE 側での対処が必要であると考えられる。</p>
<p>なお、 #2287 では <code>Cache-Control: no-store, no-cache, private, max-age=0, must-revalidate, post-check=0, pre-check=0</code> が出力されるように修正が行われているが、これは symfony を経由しない静的ファイルに対しては適用されない。</p>
<a name="Spec-仕様"></a>
<h3 >Spec (仕様)<a href="#Spec-仕様" class="wiki-anchor">¶</a></h3>
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(機能追加・改善) #4179 (Fixed(完了)): SimplePie 1.4.3 へのアップデート
http://redmine.openpne.jp/issues/4179
2017-03-29T07:13:27Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p>OpenPNE に同梱されている SimplePie 1.0.1 (2007-07-23) は PHP7 で廃止された構文が含まれており、これを使用すると Parse Error で異常終了する。</p>
<pre>
Parse error: syntax error, unexpected 'new' (T_NEW) in /vagrant/lib/vendor/simplepie/simplepie.inc on line 659
</pre>
<p>SimplePie に依存する機能は、OpenPNE 本体に存在する「RSS リーダー」ガジェットおよび opBlogPlugin が該当するため、SimplePie をアップデートすることで PHP7 で動作できる状態にする。</p>
<a name="Spec-仕様"></a>
<h3 >Spec (仕様)<a href="#Spec-仕様" class="wiki-anchor">¶</a></h3>
<p>SimplePie 1.4.3 (2016-11-27) にアップデートする。</p>
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>
OpenPNE 3 - Task(タスク) #4172 (Fixed(完了)): 新masterブランチへの移行
http://redmine.openpne.jp/issues/4172
2017-03-15T05:49:17Z
Youichi Kimura
kim.upsilon@bucyou.net
<p>現行の master ブランチを廃止し、OpenPNE 3.8 系ベースの新しい master ブランチに移行します。</p>
<a name="現状の問題点"></a>
<h4 >現状の問題点<a href="#現状の問題点" class="wiki-anchor">¶</a></h4>
<ul>
<li>PHP7 への移行 (<a class="issue tracker-5 status-2 priority-4 priority-default parent" title="Task(タスク): PHP7対応のための修正を行う (Accepted(着手))" href="http://redmine.openpne.jp/issues/4112">#4112</a>) を進めるためには、フレームワークの変更やそれに伴う最低動作要件 (PHPバージョン) の変更など、最小限に留めるにせよ互換性を損なう変更が不可欠であるため安定版ブランチで実施することはできない</li>
<li>OpenPNE 開発版のブランチである master は事実上メンテナンスされていない
<ul>
<li>バグチケットを含む一切の Pull Request は master および各安定版ブランチに対して作成されるが、テストが行われマージまで実施されるのは安定版ブランチのみである</li>
</ul>
</li>
<li>現在の master ブランチは stable-3.8.x よりも古い状態となっており、バグ修正等を現行の安定版と同程度にするためには放置された多くの Pull Request を処理する必要があり、膨大な手間が掛かると予想される</li>
</ul>
<a name="解決策"></a>
<h4 >解決策<a href="#解決策" class="wiki-anchor">¶</a></h4>
<ul>
<li>現行の master ブランチを廃止し、old-master ブランチに改称する
<ul>
<li>master ブランチに対して作成されていた Pull Request は、old-master ブランチに対する Pull Request として残す (クローズするかどうかは要検討)</li>
</ul>
</li>
<li>最新の安定版バージョンをベースとして、新たな master ブランチを作成する
<ul>
<li>予定されているのは OpenPNE 3.8.23 ベース</li>
</ul>
</li>
<li>これまで master ブランチにのみ作成されていた機能追加等の Pull Request については、必要に応じて個別に新 master ブランチに対する Pull Request を作成する</li>
</ul>
<a name="手順"></a>
<h4 >手順<a href="#手順" class="wiki-anchor">¶</a></h4>
<ol>
<li><code>git clone git@github.com:openpne/OpenPNE3.git openpne3</code></li>
<li><code>cd openpne3</code></li>
<li><code>git branch -M master old-master</code></li>
<li><code>git branch master OpenPNE-3.8.23</code></li>
<li><code>git push origin old-master master --force</code></li>
</ol>
<a name="移行後の作業"></a>
<h4 >移行後の作業<a href="#移行後の作業" class="wiki-anchor">¶</a></h4>
<ul>
<li>master ブランチ宛に作成されている全ての Pull Request のベースブランチを old-master に変更する</li>
<li>Redmine のチケットでの「対象バージョン」の扱い
<ul>
<li>old-master ブランチ (旧 master ブランチ) に紐付いたままのチケットは <a class="version" href="http://redmine.openpne.jp/versions/269">OpenPNE 3.9.0-old</a> に、新しい master ブランチで進行するチケットは <a class="version" href="http://redmine.openpne.jp/versions/369">OpenPNE 3.9.0</a> に設定されます。</li>
</ul></li>
</ul>
OpenPNE 3 - Bug(バグ) #4168 (Fixed(完了)): opI18N::__() のパラメータに語形変化の設定をしたSnsTermインスタンスを渡しても反映されない
http://redmine.openpne.jp/issues/4168
2017-02-27T09:19:05Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p>SnsTerm の <a href="https://github.com/openpne/OpenPNE3-doc/blob/master/cookbook/3.6/ja/use-sns-term-from-plugin.rst#%E8%A4%87%E9%9B%91%E3%81%AA%E4%BD%BF%E7%94%A8%E4%BE%8B" class="external">複雑な使用例</a> に記載されている下記のようなコードが正しく動作せず、語形変化が適用されていない「friend」のまま出力される。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"><span class="inline-delimiter"><?php</span> <span class="predefined">echo</span> __(<span class="string"><span class="delimiter">'</span><span class="content">%friend% are removed.</span><span class="delimiter">'</span></span>, <span class="predefined">array</span>(<span class="string"><span class="delimiter">'</span><span class="content">%friend%</span><span class="delimiter">'</span></span> => <span class="local-variable">$op_term</span>[<span class="string"><span class="delimiter">'</span><span class="content">friend</span><span class="delimiter">'</span></span>]->pluralize()->fronting())); <span class="inline-delimiter">?></span>
</span></code></pre>
<p>この問題は <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): occurs "warning" when second argument of the __() i18n translation method is non-array (i18nの翻訳メソ... (Fixed(完了))" href="http://redmine.openpne.jp/issues/1759">#1759</a> における <a class="changeset" title="fixed non-array (fixes #1759)" href="http://redmine.openpne.jp/projects/op3/repository/revisions/9b2f55d84ecb1e0cc2aa47a77b9b42f0582799f5">9b2f55d8</a> の修正以降から発生している。</p>
<p>これにより、opDiaryPlugin の日記作成画面を英語で表示した際に「My Friends」と表示されるべき箇所が「my friend」と表示される状態になっている。</p>
<p><img src="http://redmine.openpne.jp/attachments/download/653/%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_2017-02-27_18.00.07.png" style="width:567px;" alt="" /></p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>前提として、SnsTerm は以下のような性質を持っている。</p>
<ol>
<li>SnsTerm インスタンスに設定した語形変化は <code>SnsTerm::__toString()</code> が呼ばれると初期状態に戻る
<ul>
<li><pre><code class="php syntaxhl"><span class="CodeRay"><span class="local-variable">$term</span> = <span class="constant">Doctrine_Core</span>::getTable(<span class="string"><span class="delimiter">'</span><span class="content">SnsTerm</span><span class="delimiter">'</span></span>)->get(<span class="string"><span class="delimiter">'</span><span class="content">my_friend</span><span class="delimiter">'</span></span>);
<span class="local-variable">$term</span>->titleize();
<span class="predefined">var_dump</span>((<span class="predefined-type">string</span>)<span class="local-variable">$term</span>); <span class="comment">// "My Friend" </span>
<span class="predefined">var_dump</span>((<span class="predefined-type">string</span>)<span class="local-variable">$term</span>); <span class="comment">// "my friend" </span>
</span></code></pre></li>
</ul>
</li>
<li>SnsTerm インスタンスは SnsTermTable クラス内でキャッシュされる
<ul>
<li><pre><code class="php syntaxhl"><span class="CodeRay"><span class="local-variable">$term</span> = <span class="constant">Doctrine_Core</span>::getTable(<span class="string"><span class="delimiter">'</span><span class="content">SnsTerm</span><span class="delimiter">'</span></span>)->get(<span class="string"><span class="delimiter">'</span><span class="content">my_friend</span><span class="delimiter">'</span></span>);
<span class="local-variable">$term</span>->titleize();
<span class="comment">// $term と同一のインスタンスが返る</span>
<span class="local-variable">$term2</span> = <span class="constant">Doctrine_Core</span>::getTable(<span class="string"><span class="delimiter">'</span><span class="content">SnsTerm</span><span class="delimiter">'</span></span>)->get(<span class="string"><span class="delimiter">'</span><span class="content">my_friend</span><span class="delimiter">'</span></span>);
<span class="predefined">var_dump</span>((<span class="predefined-type">string</span>)<span class="local-variable">$term2</span>); <span class="comment">// "My Friend" </span>
</span></code></pre></li>
</ul></li>
</ol>
<p>それを踏まえて、<code>opI18N::__()</code> メソッドの動作を追うと以下のようになる。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"> <span class="comment">// 以下のように呼ばれる。期待する出力は「Friends are removed.」</span>
<span class="predefined">echo</span> __(<span class="string"><span class="delimiter">'</span><span class="content">%friend% are removed.</span><span class="delimiter">'</span></span>, <span class="predefined">array</span>(<span class="string"><span class="delimiter">'</span><span class="content">%friend%</span><span class="delimiter">'</span></span> => <span class="local-variable">$op_term</span>[<span class="string"><span class="delimiter">'</span><span class="content">friend</span><span class="delimiter">'</span></span>]->pluralize()->fronting()));
....
<span class="comment">// lib/i18n/opI18N.class.php</span>
<span class="keyword">public</span> <span class="keyword">function</span> <span class="function">__</span>(<span class="local-variable">$string</span>, <span class="local-variable">$args</span> = <span class="predefined">array</span>(), <span class="local-variable">$catalogue</span> = <span class="string"><span class="delimiter">'</span><span class="content">messages</span><span class="delimiter">'</span></span>)
{
<span class="keyword">if</span> (<span class="predefined">empty</span>(<span class="local-variable">$this</span>->parsed[<span class="local-variable">$string</span>])) <span class="comment">// 初回の呼び出しでは true になる</span>
{
<span class="local-variable">$this</span>->parsed[<span class="local-variable">$string</span>] = <span class="predefined">array</span>();
<span class="local-variable">$matches</span> = <span class="predefined">array</span>();
<span class="predefined">preg_match_all</span>(<span class="string"><span class="delimiter">'</span><span class="content">/%([a-zA-Z_]+)%/</span><span class="delimiter">'</span></span>, <span class="local-variable">$string</span>, <span class="local-variable">$matches</span>); <span class="comment">// 「%friend%」がヒットする</span>
<span class="predefined">array_shift</span>(<span class="local-variable">$matches</span>);
<span class="keyword">foreach</span> (<span class="local-variable">$matches</span> <span class="keyword">as</span> <span class="local-variable">$match</span>)
{
<span class="keyword">foreach</span> (<span class="local-variable">$match</span> <span class="keyword">as</span> <span class="local-variable">$v</span>)
{
<span class="keyword">if</span> (<span class="local-variable">$this</span>->terms[<span class="local-variable">$v</span>])
{
<span class="local-variable">$term</span> = <span class="local-variable">$this</span>->terms[<span class="local-variable">$v</span>]; <span class="comment">// 性質 2 より、語形変化が適用されたままのインスタンスが返る</span>
<span class="keyword">if</span> (<span class="local-variable">$this</span>->titleize) <span class="comment">// デフォルトで false</span>
{
<span class="local-variable">$term</span> = <span class="local-variable">$term</span>->titleize();
}
<span class="local-variable">$this</span>->parsed[<span class="local-variable">$string</span>][<span class="string"><span class="delimiter">'</span><span class="content">%</span><span class="delimiter">'</span></span>.<span class="local-variable">$v</span>.<span class="string"><span class="delimiter">'</span><span class="content">%</span><span class="delimiter">'</span></span>] = (<span class="predefined-type">string</span>)<span class="local-variable">$term</span>; <span class="comment">// ここで返るのは「Friends」</span>
}
}
}
}
<span class="local-variable">$parsedString</span> = <span class="local-variable">$this</span>->parsed[<span class="local-variable">$string</span>];
<span class="keyword">if</span> (<span class="predefined">is_array</span>(<span class="local-variable">$args</span>))
{
<span class="keyword">foreach</span> (<span class="local-variable">$args</span> <span class="keyword">as</span> <span class="local-variable">$k</span> => <span class="local-variable">$v</span>)
{
<span class="keyword">if</span> (<span class="local-variable">$v</span> <span class="keyword">instanceof</span> <span class="constant">SnsTerm</span>)
{
<span class="local-variable">$args</span>[<span class="local-variable">$k</span>] = (<span class="predefined-type">string</span>)<span class="local-variable">$v</span>; <span class="comment">// 性質 1 より、ここで返るのは「friend」</span>
}
}
<span class="local-variable">$parsedString</span> = <span class="predefined">array_merge</span>(<span class="local-variable">$parsedString</span>, <span class="local-variable">$args</span>); <span class="comment">// 「Friends」が「friend」に上書きされる</span>
}
<span class="comment">// 「friend are removed.」が出力される (不具合)</span>
<span class="keyword">return</span> <span class="predefined-constant">parent</span>::__(<span class="local-variable">$string</span>, <span class="local-variable">$parsedString</span>, <span class="local-variable">$catalogue</span>);
}
</span></code></pre>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p><a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): occurs "warning" when second argument of the __() i18n translation method is non-array (i18nの翻訳メソ... (Fixed(完了))" href="http://redmine.openpne.jp/issues/1759">#1759</a> の修正を一旦取り消し、上記のような SnsTerm の不具合が生じないように <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): occurs "warning" when second argument of the __() i18n translation method is non-array (i18nの翻訳メソ... (Fixed(完了))" href="http://redmine.openpne.jp/issues/1759">#1759</a> の修正を再度行う。</p>
opFavoritePlugin - Bug(バグ) #4163 (New(新規)): テスト用fixtureの記述に誤りがありロード時にエラーが発生する
http://redmine.openpne.jp/issues/4163
2017-02-17T08:58:04Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p>MySQL 5.7 の Strict Mode が有効な状態での動作確認 (<a class="issue tracker-5 status-2 priority-4 priority-default parent" title="Task(タスク): MySQLのStrict Modeを有効にした場合に生じる問題を調査 (Accepted(着手))" href="http://redmine.openpne.jp/issues/4033">#4033</a>) を行った際に発生した。</p>
<p>fixture の読み込みを必要とするテストコードを実行すると下記のエラーが発生する:<br /><pre>
$ php plugins/opFavoritePlugin/test/functional/pc_frontend/favoriteActionsTest.php
PHP Fatal error: Uncaught exception 'Doctrine_Connection_Mysql_Exception' with message 'SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '1487263613' for column 'date' at row 1' in /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php:1082
Stack trace:
#0 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/Statement.php(269): Doctrine_Connection->rethrowException(Object(PDOException), Object(Doctrine_Connection_Statement))
#1 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(1042): Doctrine_Connection_Statement->execute(Array)
#2 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(687): Doctrine_Connection->exec('INSERT INTO blo...', Array)
#3 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/UnitOfWork.php(647): Doctrine_Connection->insert(Object(BlogRssCacheTable), in /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1082
</pre></p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p><a href="https://github.com/tejimaya/opFavoritePlugin/blob/bca2c9a470adc6e81003f69d9135a5507227e139/test/fixtures/004_import_blog_rss_cache.yml#L14" class="external">test/fixtures/004_import_blog_rss_cache.yml#L14</a>:<br /><pre><code class="yaml syntaxhl"><span class="CodeRay"><span class="key">BlogRssCache</span>:
<span class="key">first_member_blog_rss_cache</span>:
<span class="key">Member</span>: <span class="string"><span class="content">third_member</span></span>
<span class="key">title</span>: <span class="string"><span class="delimiter">"</span><span class="content"><&\"'>BlogRssCache.title ESCAPING HTML TEST DATA</span><span class="delimiter">"</span></span>
<span class="key">description</span>: <span class="string"><span class="delimiter">"</span><span class="content">description</span><span class="delimiter">"</span></span>
<span class="key">link</span>: <span class="string"><span class="delimiter">"</span><span class="content">http://localhost/</span><span class="delimiter">"</span></span>
<span class="key">date</span>: <span class="string"><span class="content"><?php echo date("Y-m-d H:i:s\n") ?></span></span>
</span></code></pre></p>
<p>上記のように記述された fixture は以下のような YAML を出力します。</p>
<pre><code class="yaml syntaxhl"><span class="CodeRay"><span class="key">BlogRssCache</span>:
<span class="key">first_member_blog_rss_cache</span>:
<span class="key">Member</span>: <span class="string"><span class="content">third_member</span></span>
<span class="key">title</span>: <span class="string"><span class="delimiter">"</span><span class="content"><&\"'>BlogRssCache.title ESCAPING HTML TEST DATA</span><span class="delimiter">"</span></span>
<span class="key">description</span>: <span class="string"><span class="delimiter">"</span><span class="content">description</span><span class="delimiter">"</span></span>
<span class="key">link</span>: <span class="string"><span class="delimiter">"</span><span class="content">http://localhost/</span><span class="delimiter">"</span></span>
<span class="key">date</span>: <span class="string"><span class="content">2017-02-27 01:46:53</span></span>
</span></code></pre>
<p>文字列としてダブルクオーテーションで囲われていない日付は、YAML のロード時にタイムスタンプの数値に置換されるため、<code>'1487263613'</code> が不正な形式の日付であるとしてエラーが発生する。</p>
opMessagePlugin - Bug(バグ) #4162 (Fixed(完了)): MySQLのSTRICT_TRANS_TABLESが有効な状態でテスト用fixtureのロードに失敗する
http://redmine.openpne.jp/issues/4162
2017-02-17T08:48:26Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p>MySQL 5.7 の Strict Mode が有効な状態での動作確認 (<a class="issue tracker-5 status-2 priority-4 priority-default parent" title="Task(タスク): MySQLのStrict Modeを有効にした場合に生じる問題を調査 (Accepted(着手))" href="http://redmine.openpne.jp/issues/4033">#4033</a>) を行った際に発生した。</p>
<p>fixture の読み込みを必要とするテストコードを実行すると下記のエラーが発生する:</p>
<pre>
$ php plugins/opMessagePlugin/test/unit/model/SendMessageDataTest.php
PHP Fatal error: Uncaught exception 'Doctrine_Connection_Mysql_Exception' with message 'SQLSTATE[HY000]: General error: 1364 Field 'message_id' doesn't have a default value' in /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php:1082
Stack trace:
#0 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/Statement.php(269): Doctrine_Connection->rethrowException(Object(PDOException), Object(Doctrine_Connection_Statement))
#1 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(1042): Doctrine_Connection_Statement->execute(Array)
#2 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(687): Doctrine_Connection->exec('INSERT INTO del...', Array)
#3 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/UnitOfWork.php(647): Doctrine_Connection->insert(Object(DeletedMessageTable), Array)
#4 /vagrant/lib/ven in /vagrant/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 class="source" href="http://redmine.openpne.jp/projects/plg-message/repository/revisions/6eef6b49/entry/test/fixtures/010_message.yml#L106">source:test/fixtures/010_message.yml@6eef6b49#L106</a>:<br /><pre><code class="yaml syntaxhl"><span class="CodeRay"><span class="key">DeletedMessage</span>:
<span class="key">dust_delete_mesage</span>:
<span class="key">id</span>: <span class="string"><span class="content">1</span></span>
<span class="key">Member</span>: <span class="string"><span class="content">first_member</span></span>
<span class="key">message_send_list_id</span>: <span class="string"><span class="content">3</span></span>
<span class="key">is_deleted</span>: <span class="string"><span class="content">0</span></span>
</span></code></pre></p>
<p>上記の fixture で、NOT NULL 制約のある deleted_message.message_id に値がセットされていないことが原因。</p>
opDiaryPlugin - Bug(バグ) #4161 (New(新規)): MySQLのSTRICT_TRANS_TABLESが有効な状態でテスト用fixtureのロードに失敗する
http://redmine.openpne.jp/issues/4161
2017-02-17T08:36:57Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>MySQL 5.7 の Strict Mode が有効な状態での動作確認 (<a class="issue tracker-5 status-2 priority-4 priority-default parent" title="Task(タスク): MySQLのStrict Modeを有効にした場合に生じる問題を調査 (Accepted(着手))" href="http://redmine.openpne.jp/issues/4033">#4033</a>) を行った際に発生した。</p>
<p>fixture の読み込みを必要とするテストコードを実行すると下記のエラーが発生する:</p>
<pre>
$ php plugins/opDiaryPlugin/test/unit/model/DiaryTest.php
[...]
Fatal error: Uncaught exception 'Doctrine_Connection_Mysql_Exception' with message 'SQLSTATE[HY000]: General error: 1364 Field 'last_comment_time' doesn't have a default value' in /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php:1082
Stack trace:
#0 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/Statement.php(269): Doctrine_Connection->rethrowException(Object(PDOException), Object(Doctrine_Connection_Statement))
#1 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(1042): Doctrine_Connection_Statement->execute(Array)
#2 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(687): Doctrine_Connection->exec('INSERT INTO dia...', Array)
#3 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/UnitOfWork.php(647): Doctrine_Connection->insert(Object(DiaryCommentUpdateTable), Array)
#4 /vagr in /vagrant/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/opDiaryPlugin/blob/a72db784a0dc3fea8f3a9d40a274c11db6253213/test/fixtures/diaries.yml#L110-L111" class="external">test/fixtures/diaries.yml#L110-L111</a>:<br /><pre><code class="php syntaxhl"><span class="CodeRay"><span class="inline-delimiter"><?php</span> <span class="keyword">for</span> (<span class="local-variable">$i</span> = <span class="integer">1</span>; <span class="local-variable">$i</span> <= <span class="integer">60</span>; <span class="local-variable">$i</span>++): <span class="inline-delimiter">?></span>
diary_for_member1_<span class="inline-delimiter"><?php</span> <span class="predefined">echo</span> <span class="local-variable">$i</span> <span class="inline-delimiter">?></span>:
Member: member1
title: "title:<span class="inline-delimiter"><?php</span> <span class="predefined">echo</span> <span class="local-variable">$i</span> <span class="inline-delimiter">?></span> by member1"
body: "body:<span class="inline-delimiter"><?php</span> <span class="predefined">echo</span> <span class="local-variable">$i</span> <span class="inline-delimiter">?></span> by member1"
created_at: "2009-03-<span class="inline-delimiter"><?php</span> <span class="predefined">printf</span>(<span class="string"><span class="delimiter">'</span><span class="content">%02d</span><span class="delimiter">'</span></span>, <span class="local-variable">$i</span>) <span class="inline-delimiter">?></span> 10:00:00"
updated_at: "2009-03-<span class="inline-delimiter"><?php</span> <span class="predefined">printf</span>(<span class="string"><span class="delimiter">'</span><span class="content">%02d</span><span class="delimiter">'</span></span>, <span class="local-variable">$i</span>) <span class="inline-delimiter">?></span> 10:00:00"
<span class="inline-delimiter"><?php</span> <span class="keyword">endfor</span>; <span class="inline-delimiter">?></span>
</span></code></pre></p>
<p>上記のように記述された fixture は次のような YAML を出力します。</p>
<pre><code class="yaml syntaxhl"><span class="CodeRay"> <span class="key">diary_for_member1_1</span>:
<span class="key">Member</span>: <span class="string"><span class="content">member1</span></span>
<span class="key">title</span>: <span class="string"><span class="delimiter">"</span><span class="content">title:1 by member1</span><span class="delimiter">"</span></span>
<span class="key">body</span>: <span class="string"><span class="delimiter">"</span><span class="content">body:1 by member1</span><span class="delimiter">"</span></span>
<span class="key">created_at</span>: <span class="string"><span class="delimiter">"</span><span class="content">2009-03-01 10:00:00</span><span class="delimiter">"</span></span>
<span class="key">updated_at</span>: <span class="string"><span class="delimiter">"</span><span class="content">2009-03-01 10:00:00</span><span class="delimiter">"</span></span>
<span class="head"><span class="head">...</span></span>
<span class="key">diary_for_member1_60</span>:
<span class="key">Member</span>: <span class="string"><span class="content">member1</span></span>
<span class="key">title</span>: <span class="string"><span class="delimiter">"</span><span class="content">title:60 by member1</span><span class="delimiter">"</span></span>
<span class="key">body</span>: <span class="string"><span class="delimiter">"</span><span class="content">body:60 by member1</span><span class="delimiter">"</span></span>
<span class="key">created_at</span>: <span class="string"><span class="delimiter">"</span><span class="content">2009-03-60 10:00:00</span><span class="delimiter">"</span></span>
<span class="key">updated_at</span>: <span class="string"><span class="delimiter">"</span><span class="content">2009-03-60 10:00:00</span><span class="delimiter">"</span></span>
</span></code></pre>
<p>created_at および updated_at にセットされる <code>"2009-03-60 10:00:00"</code> は不正な日付のため、<code>STRICT_TRANS_TABLES</code> が有効な MySQL ではエラーが発生する。</p>