OpenPNE Issue Tracking System: チケット
http://redmine.openpne.jp/
http://redmine.openpne.jp/favicon.ico
2017-03-15T05:49:17Z
OpenPNE Issue Tracking System
Redmine
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 - 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>
OpenPNE 3 - Bug(バグ) #3852 (Won't fix(対応せず)): 機能テスト実行時にopBrowserによる各リクエスト間でMemberConfigのキャッシュが意図せず...
http://redmine.openpne.jp/issues/3852
2015-11-05T11:30:07Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>MemberConfigTable クラスには MemberConfig をキャッシュするための <code>MemberConfigTable::$results</code> が用意されおり、多くのコードはこのキャッシュがリクエストごとに初期化される前提で実装されているが、機能テスト時には <code>MemberConfigTable::$results</code> のキャッシュがリクエストを跨いで引き継がれてしまうため、テスト時のみ発生する意図しない動作の原因となっている。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>MemberConfigTable クラスには MemberConfig をキャッシュするための <code>MemberConfigTable::$results</code> が用意されているが、通常のブラウザからのアクセスによって OpenPNE が動作する場合はリクエスト毎にこのキャッシュは破棄される。<br />しかし機能テストで使用する opBrowser では、リクエストごとに sfContext の初期化は行うものの静的変数の初期化は行われないため MemberConfigTable のインスタンス(<code>Doctrine_Core::getTable()</code> によって生成されるシングルトン)は残ったままとなり、<code>MemberConfigTable::$results</code> も初期化されない。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>opBrowser がリクエストを実行する度(sfContext を生成するタイミング)に <code>MemberConfigTable::$results</code> の中身を空にする</p>
OpenPNE 3 - Bug(バグ) #3756 (Won't fix(対応せず)): 画像付きのOAuthアプリケーションを削除してもDBから画像が削除されない
http://redmine.openpne.jp/issues/3756
2015-01-06T07:37:16Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="再現手順"></a>
<h3 >再現手順<a href="#再現手順" class="wiki-anchor">¶</a></h3>
<p>事前に OpenPNE に opWebAPIPlugin をインストールする必要があります。</p>
<ol>
<li>管理画面の SNS 設定 (/pc_backend.php/sns/config?category=general) から「外部サービスとの接続設定の使用設定」を「使用する」に変更</li>
<li>「連携済みアプリケーション一覧」(/pc_backend.php/connection/new) を開く
<ul>
<li>このページにアクセスするには直接 URL を入力する必要があります</li>
</ul>
</li>
<li>説明文等を入力し、適当な画像を選択して登録する</li>
<li>登録したアプリケーションが表示される</li>
<li>「連携済みアプリケーション一覧」(/pc_backend.php/connection) を開き、登録したアプリケーションを削除する</li>
<li>アップロード画像リスト (/pc_backend.php/monitoring) を開くと削除したアプリケーションの画像が残ったままとなっている</li>
</ol>
<a name="原因"></a>
<h3 >原因<a href="#原因" class="wiki-anchor">¶</a></h3>
<p>親チケット <a class="issue tracker-1 status-13 priority-4 priority-default closed parent" title="Bug(バグ): fileを参照するテーブル(activity_imageなど)のレコード削除時に対応するfileレコードが削除されない (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3738">#3738</a> を参照。</p>
OpenPNE 3 - Bug(バグ) #3475 (Won't fix(対応せず)): 部分 SSL 使用時に SSL 必須のページでカスタム CSS が読み込まれない
http://redmine.openpne.jp/issues/3475
2013-11-01T06:44:51Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>config/OpenPNE.yml にて部分 SSL を有効 (<code>use_ssl: true</code>) にしている環境で、ログイン画面 (member/login) などの SSL 必須のページを Web ブラウザからアクセスする際にカスタム CSS が読み込まれない場合がある。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>カスタム CSS は /cache/css/customizing.css (実体は default/customizingCss アクション) が読み込まれることによって反映される仕組みとなっているが、default/customizingCss アクションは部分 SSL の対象となっていないため常に <code>http://</code> スキームにリダイレクトされてしまう。<br />Google Chrome などの Web ブラウザでは、SSL で保護されている Web ページ内に保護されていない CSS などのコンテンツが含まれている場合は「混在したコンテンツ」としてブロックされるため、結果としてカスタム CSS が読み込まれない状態となる。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>config/OpenPNE.yml.sample の ssl_selectable_actions に default/customizingCss アクションを追加する</p>
OpenPNE 3 - Bug(バグ) #3453 (Won't fix(対応せず)): 管理画面で「Web 全体への年齢公開許可設定」を「メンバーの設定を許可しない」に設定しても新規登録時には...
http://redmine.openpne.jp/issues/3453
2013-10-17T07:41:26Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>管理画面で「Web 全体への年齢公開許可設定」を「メンバーの設定を許可しない」に設定している状態であっても、新規登録時のプロフィール入力画面では年齢の公開範囲に「Web全体に公開」の選択肢が表示され選択できてしまう。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>管理画面の「Web 全体への年齢公開許可設定」で設定された値は、<code>MemberConfigPublicFlagForm::__construct()</code> で使用されている。<br />ここでは「Web 全体への年齢公開許可設定」が「メンバーの設定を許可しない」にセットされていた場合、「年齢の公開範囲」の選択肢から「Web 全体に公開」を除去している。</p>
<p><a class="source" href="http://redmine.openpne.jp/projects/op3/repository/revisions/20d13f4/entry/lib/form/MemberConfigForm/MemberConfigPublicFlagForm.class.php#L31">source:lib/form/MemberConfigForm/MemberConfigPublicFlagForm.class.php@20d13f4#L31</a>:<br /><pre><code class="php syntaxhl"><span class="CodeRay"> <span class="keyword">if</span> (!opConfig::get(<span class="string"><span class="delimiter">'</span><span class="content">is_allow_web_public_flag_age</span><span class="delimiter">'</span></span>))
{
<span class="local-variable">$widget</span> = <span class="local-variable">$this</span>->widgetSchema[<span class="string"><span class="delimiter">'</span><span class="content">age_public_flag</span><span class="delimiter">'</span></span>];
<span class="local-variable">$choices</span> = <span class="local-variable">$widget</span>->getOption(<span class="string"><span class="delimiter">'</span><span class="content">choices</span><span class="delimiter">'</span></span>);
<span class="predefined">unset</span>(<span class="local-variable">$choices</span>[<span class="integer">4</span>]);
<span class="local-variable">$widget</span>->setOption(<span class="string"><span class="delimiter">'</span><span class="content">choices</span><span class="delimiter">'</span></span>, <span class="local-variable">$choices</span>);
<span class="local-variable">$this</span>->validatorSchema[<span class="string"><span class="delimiter">'</span><span class="content">age_public_flag</span><span class="delimiter">'</span></span>]->setOption(<span class="string"><span class="delimiter">'</span><span class="content">choices</span><span class="delimiter">'</span></span>, <span class="predefined">array_keys</span>(<span class="local-variable">$choices</span>));
}
</span></code></pre></p>
<p>しかし、 <strong>新規登録時</strong> のフォームでは MemberConfigPublicFlagForm などの MemberConfigForm 派生クラスは使用されず MemberConfigForm のインスタンスが直接使用されるため、<code>MemberConfigPublicFlagForm::__construct()</code> が呼ばれることはない。<br />そのため、「Web 全体への年齢公開許可設定」の設定値を考慮することなく <code>MemberConfigForm::generateConfigWidgets()</code> によってウィジェットが追加される。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>「Web 全体に公開」の選択肢の除去を <code>MemberConfigForm::setMemberConfigSettings()</code> メソッドに移動する。<br />このメソッドは、新規登録画面 (MemberConfigForm インスタンスが使われる) および設定変更画面 (MemberConfigForm 派生クラスのインスタンスが使われる) で共通して使用されるため、これらの画面による選択肢の差異が生じなくなる。</p>
OpenPNE 3 - Bug(バグ) #3431 (Won't fix(対応せず)): 機能テストに存在する雛形のままのテストコードを削除する
http://redmine.openpne.jp/issues/3431
2013-10-08T03:15:30Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>OpenPNE に同梱されている機能テストの一部は symfony が提供する雛形のコードのまま手が加えられておらず、中には symfony 1.4 と互換性のないメソッドを使用しているテストも含まれている。<br />これらのテストコードは実装に合わせて修正されない限り自動テストの妨げとなるため削除を行う。</p>
OpenPNE 3 - Bug(バグ) #3416 (Won't fix(対応せず)): 自動ログインCookieを有効にしてログインしているブラウザで新規登録を実行すると member/reg...
http://redmine.openpne.jp/issues/3416
2013-10-04T02:56:18Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<ol>
<li>自動ログインを有効にして <a class="email" href="mailto:sns@example.com">sns@example.com</a> にログインする</li>
<li>友人を招待する (/invite) 画面から招待メールを送信する</li>
<li>届いたメールに書かれている招待 URL (/member/register) を開く</li>
<li>「プロフィール入力ページへ」(/member/registerInput) ボタンをクリックする</li>
<li>404 エラーが表示される</li>
</ol>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p><a class="issue tracker-1 status-5 priority-5 priority-high3 closed" title="Bug(バグ): 既にSNSにログインしているブラウザで新規登録を実行しようとすると、member/regist が404エラーになる (Fixed(完了))" href="http://redmine.openpne.jp/issues/1100">#1100</a> では新規登録時にログイン中のセッションがあった場合に削除する処理が追加されているが、自動ログインが有効な場合が考慮されていない。そのため member/register までは正常に表示されるが、次の画面に遷移したところで自動ログイン Cookie によりログイン状態となってしまう。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>member/register アクション内に自動ログイン Cookie を失効させる処理を追加する</p>
OpenPNE 3 - Enhancement(機能追加・改善) #3395 (New(新規)): 機能テストでJSON形式のレスポンス内容をチェックするためのテスターを追加
http://redmine.openpne.jp/issues/3395
2013-09-10T08:09:10Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p>現状、JSON API の機能テストを書く際には下記のようなコードを書く必要がある。JSON の内容をチェックする度に sfTestFunctional のメソッドチェインを抜ける必要があり、記述も冗長になってしまう。これを簡略化するためのテスターを作成する。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"><span class="local-variable">$browser</span>
->get(<span class="string"><span class="delimiter">'</span><span class="content">/activity/search.json</span><span class="delimiter">'</span></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">$apiKeyMember1</span>))
->with(<span class="string"><span class="delimiter">'</span><span class="content">response</span><span class="delimiter">'</span></span>)->isStatusCode(<span class="integer">200</span>);
<span class="local-variable">$response</span> = json_decode(<span class="local-variable">$browser</span>->getResponse()->getContent(), <span class="predefined-constant">true</span>);
<span class="local-variable">$t</span>->is(<span class="local-variable">$response</span>, <span class="predefined">array</span>(
<span class="string"><span class="delimiter">'</span><span class="content">status</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="content">success</span><span class="delimiter">'</span></span>,
<span class="string"><span class="delimiter">'</span><span class="content">data</span><span class="delimiter">'</span></span> => <span class="predefined">array</span>(
<span class="predefined">array</span>(
<span class="string"><span class="delimiter">'</span><span class="content">id</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="content">1</span><span class="delimiter">'</span></span>,
...
<span class="string"><span class="delimiter">'</span><span class="content">created_at</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="content">Tue, 10 Apr 2012 13:20:18 +0900</span><span class="delimiter">'</span></span>,
),
),
));
</span></code></pre>
<a name="Spec-仕様"></a>
<h3 >Spec (仕様)<a href="#Spec-仕様" class="wiki-anchor">¶</a></h3>
<p>JSON 形式のレスポンスを下記のような記述でチェックできるようにする。</p>
<pre><code class="php syntaxhl"><span class="CodeRay"><span class="local-variable">$browser</span>
->get(<span class="string"><span class="delimiter">'</span><span class="content">/activity/search.json</span><span class="delimiter">'</span></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">$apiKeyMember1</span>))
->with(<span class="string"><span class="delimiter">'</span><span class="content">response</span><span class="delimiter">'</span></span>)->isStatusCode(<span class="integer">200</span>)
->with(<span class="string"><span class="delimiter">'</span><span class="content">json</span><span class="delimiter">'</span></span>)->equals(<span class="predefined">array</span>(
<span class="string"><span class="delimiter">'</span><span class="content">status</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="content">success</span><span class="delimiter">'</span></span>,
<span class="string"><span class="delimiter">'</span><span class="content">data</span><span class="delimiter">'</span></span> => <span class="predefined">array</span>(
<span class="predefined">array</span>(
<span class="string"><span class="delimiter">'</span><span class="content">id</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="content">1</span><span class="delimiter">'</span></span>,
...
<span class="string"><span class="delimiter">'</span><span class="content">created_at</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="content">Tue, 10 Apr 2012 13:20:18 +0900</span><span class="delimiter">'</span></span>,
),
),
));
</span></code></pre>
OpenPNE 3 - Bug(バグ) #3356 (Won't fix(対応せず)): 日記やアルバムなどに投稿された画像のサムネイル表示が全て正方形に切り抜かれる問題
http://redmine.openpne.jp/issues/3356
2013-06-06T05:56:54Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="現象"></a>
<h3 >現象<a href="#現象" class="wiki-anchor">¶</a></h3>
<p>画像付きの日記を日記の表示画面 (/diary/:id) などでサムネイル表示した際に、投稿された画像の縦横比に関わらず <strong>長辺が切り落とされた正方形</strong> で表示されてしまう。<br />この挙動は OpenPNE3.8 から追加されたメンバー画像の正方形化 (<a class="issue tracker-2 status-5 priority-5 priority-high3 closed" title="Enhancement(機能追加・改善): デフォルトで生成されるキャッシュ画像を正方形に切り取る (Fixed(完了))" href="http://redmine.openpne.jp/issues/2890">#2890</a>) が他方にも影響したバグであると推測して調査を行う。</p>
<a name="調査時に注意すべき点"></a>
<h3 >調査時に注意すべき点<a href="#調査時に注意すべき点" class="wiki-anchor">¶</a></h3>
<p>このバグに関する調査の注意点として、 <a class="issue tracker-1 status-1 priority-4 priority-default" title="Bug(バグ): ./symfony cc を実行しても web/cache/ ディレクトリ以下に生成されたキャッシュが削除されない (New(新規))" href="http://redmine.openpne.jp/issues/3357">#3357</a> の影響によりサムネイル画像のキャッシュ (web/cache/ 以下に生成される) は ./symfony cc コマンドでは削除されないため、挙動の変化を確認する際には手動でこのキャッシュを削除する必要がある。</p>
<a name="原因"></a>
<h3 >原因<a href="#原因" class="wiki-anchor">¶</a></h3>
<p><a class="issue tracker-2 status-5 priority-5 priority-high3 closed" title="Enhancement(機能追加・改善): デフォルトで生成されるキャッシュ画像を正方形に切り取る (Fixed(完了))" href="http://redmine.openpne.jp/issues/2890">#2890</a> の変更が sfImageHandlerPlugin を介する全ての画像に影響していることによるもの。</p>
<a name="修正内容"></a>
<h3 >修正内容<a href="#修正内容" class="wiki-anchor">¶</a></h3>
<ul>
<li>正方形化した画像とそうでない画像でURLを区別しキャッシュの混在を避ける
<ul>
<li>/cache/img/png/w120_h120/hogehoge.png (通常の画像)</li>
<li>/cache/img/png/w120_h120_sq/hogehoge.png (正方形化する画像)</li>
</ul>
</li>
<li>ヘルパー関数 sf_image_path に square オプションを追加し、テンプレートにおいて画像を正方形化した状態で表示するか否かを選択できる状態にする
<ul>
<li>このオプションは、メンバー画像 (nameが m_ から始まる) とコミュニティ画像 (nameが c_ から始まる) についてはデフォルトで true とし、それ以外はデフォルトで false とする。</li>
</ul></li>
</ul>
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(バグ) #2882 (Won't fix(対応せず)): opValidatorDate で「年」に 0 を入力した場合に空値として認識される
http://redmine.openpne.jp/issues/2882
2012-03-13T09:13:24Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="現象"></a>
<h3 >現象<a href="#現象" class="wiki-anchor">¶</a></h3>
<p>opValidatorDate を使用しているフォーム(コミュニティイベントの作成画面など)で、日付を入力する項目の「年」に <code>0</code> を入力すると空値として扱われる。</p>
<ul>
<li>コミュニティイベントの作成画面の場合、「募集期日」の「年」に <code>0</code> と入力された状態(「月」「日」は入力しない)で送信しても「正しくありません。」と表示されずにイベントの作成が完了する。</li>
</ul>
<a name="原因"></a>
<h3 >原因<a href="#原因" class="wiki-anchor">¶</a></h3>
<p>lib/validator/opValidatorDate.class.php の 100 行目付近</p>
<pre><code class="php syntaxhl"><span class="CodeRay"> <span class="comment">// if one date value is empty, all others must be empty too</span>
<span class="local-variable">$empties</span> =
(!<span class="predefined">isset</span>(<span class="local-variable">$value</span>[<span class="string"><span class="delimiter">'</span><span class="content">year</span><span class="delimiter">'</span></span>]) || !<span class="local-variable">$value</span>[<span class="string"><span class="delimiter">'</span><span class="content">year</span><span class="delimiter">'</span></span>] ? <span class="integer">1</span> : <span class="integer">0</span>) +
(!<span class="predefined">isset</span>(<span class="local-variable">$value</span>[<span class="string"><span class="delimiter">'</span><span class="content">month</span><span class="delimiter">'</span></span>]) || !<span class="local-variable">$value</span>[<span class="string"><span class="delimiter">'</span><span class="content">month</span><span class="delimiter">'</span></span>] ? <span class="integer">1</span> : <span class="integer">0</span>) +
(!<span class="predefined">isset</span>(<span class="local-variable">$value</span>[<span class="string"><span class="delimiter">'</span><span class="content">day</span><span class="delimiter">'</span></span>]) || !<span class="local-variable">$value</span>[<span class="string"><span class="delimiter">'</span><span class="content">day</span><span class="delimiter">'</span></span>] ? <span class="integer">1</span> : <span class="integer">0</span>);
</span></code></pre>
<p>この判定で、「年」(<code>$value['year']</code>) に <code>"0"</code> が入力されると <code>!isset($value['year']) || !$value['year']</code> が <code>true</code> となり空値と判定されることが原因。</p>
<p>参照: <a href="http://php.net/manual/ja/types.comparisons.php" class="external">PHP: PHP 型の比較表 - Manual</a></p>
<a name="修正内容"></a>
<h3 >修正内容<a href="#修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</p>
OpenPNE 3 - Bug(バグ) #1839 (Won't fix(対応せず)): [PATCH] 一部のファイルに不要な実行権限が設定されている
http://redmine.openpne.jp/issues/1839
2010-12-09T07:37:47Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="現象"></a>
<h3 >現象<a href="#現象" class="wiki-anchor">¶</a></h3>
<p>直接実行できないphpファイルや画像ファイルなどに実行可能権限が設定されています。</p>
<a name="修正内容"></a>
<h3 >修正内容<a href="#修正内容" class="wiki-anchor">¶</a></h3>
<p>ソースツリー内にELFファイルは存在しないため、ファイルの一行目がシバン行 (先頭が「#!」で開始) であるか否かで実行権限を設定します</p>
<pre>
find * -type f ! -regex '.*\.git.*' -print0 | xargs -0r -Ifile sh -c 'head -n1 file | grep -q "^#!" && chmod +x file || chmod -x file'
</pre>
opCommunityTopicPlugin - Enhancement(機能追加・改善) #1526 (Rejected(差し戻し)): イベントの参加者を編集できるようにしてほしい
http://redmine.openpne.jp/issues/1526
2010-08-21T15:25:10Z
Youichi Kimura
kim.upsilon@bucyou.net
<a name="概要"></a>
<h3 >概要<a href="#概要" class="wiki-anchor">¶</a></h3>
<p>普段あまり書き込みをしないメンバーがイベントに参加する際に参加者一覧と実際の参加者が一致しなくなることがあるため、イベントの作成者が参加者を編集(追加・削除)できるようにしてほしいです。</p>