Bug(バグ) #1865
完了プロフィール項目の不具合について
100%
説明
http://sns.openpne.jp/communityTopic/6709 より転記
http://sns.openpne.jp/cache/img/png/w_h/a5e00bca971049df8db393b769b1381a1f20d217_png.png
http://sns.openpne.jp/cache/img/png/w_h/9499800169021d9a54fef4b90d8f792535b16bd0_png.png
(1) OpenPNE-3.4.2とOpenPNE-3.4.9.2で確認しております。 (2) さくらレンタルサーバー プレミアムプラン OS: FreeBSD 7.1-RELEASE-p15 i386 PHP: 5.2.14 MySQL: 5.1 (3) OpenPNEの管理画面の「プロフィール項目設定」→「プロフィール項目登録」を表示しまして 「公開設定の選択」を「メンバー選択」、「フォームタイプ」を「複数選択(チェックボックス)」を選択、 項目名・説明・識別名は適切な文字列を入力後、 その他の設定はデフォルトで追加しました。 同様の手順で項目を追加し、全部で三つのプロフィール項目を追加しました。 そして、プロフィール選択肢一覧で項目名に適切な文字列を入力後 追加して、それぞれ、三つの選択肢を追加しました。 ここまでで三つのプロフィール項目と、それぞれ三つの選択肢が作成されています。 その後、SNSにログインしまして、プロフィール編集で 先ほど追加した三つの項目のチェックボックスを全て選択後、送信。 三つの項目のチェックボックスを全て外して、また送信。 最後に、再び全てのチェックボックスを選択して送信しますと 一番目の項目は、三番目の選択肢のみが表示されて 二番目の項目は、二番目の選択肢のみが表示されて 三番目の項目は、全ての選択肢が表示されるという 現象が発生しました。 また、OpenPNE-3.4.9.2で上記の手順を最後まで試したところ 三番目の項目のみ、全ての選択肢が表示され、 その他の項目は表示されないという異なった結果となりました。 その後に、プロフィール編集を表示しますとOpenPNE-3.4.2と同じ 選択肢がチェックされていました。 これらの動作検証は管理アカウント(sns@example.com)で行っておりました。 しかし、その後に新しくアカウントを作成して動作検証をしたところ、正常に動作するものと同様の症状が発生するものとで別れることが分かっております。 それと色々と試行錯誤したところ、表示される選択肢と表示されない選択肢が ランダムで選ばれるように見受けられ、パターンが把握できないのも特徴の一つとして挙げられます。 (先の例で言いますと、何故一番目の項目は三番目の選択肢だけが表示され 二番目の項目は二番目の選択肢だけが表示されるのかが分からないという事です) 文面だけでは伝わりづらいかと思いまして、スクリーンショットを添付しました。 写真1は管理画面のプロフィール項目設定で、写真2はプロフィール編集→プロフィール確認の画面と、phpmyadminの画面及び補足です。 以上、宜しくお願いいたします。
ファイル
Mutsumi Imamura さんが13年以上前に更新
- 優先度 を Normal(通常) から High(高め) に変更
- 対象バージョン を OpenPNE 3.7.0 にセット
Hiroshi Kato さんが13年以上前に更新
OS: Mac OS X 10.6.7, PHP: 5.3.1, MySQL: 5.1.44, OpenPNE-3.4.9.2 にて確認しましたが再現できませんでした。
(ID1ユーザでの一連の手順の実行, 別ユーザでの一連の手順の実行)
また、この環境にて、OpenPNE-3.4.2 でチェックボックスを全て外した場合バリデーションエラーでプロフィールの更新が出来なかったため、
OpenPNE-3.4.2 での確認は行なっていません。
Hiroshi Kato さんが13年以上前に更新
以下に調査内容をまとめます。
メンバーの入力したプロフィール項目を取得してくる関数 getProfileListByMemberId() で、以下のDQLを実行しています。
lib/model/doctrine/MemberProfileTable.class.php
22 { 23 $memberProfile = $this->createQuery() 24 ->where('member_id = ?', $memberId) 25 ->andWhere('profile_id = ?', $profile->getId()) 26 ->fetchOne(); 27
このDQLでは、selectの結果によって level 1〜 の子(孫〜)プロフィールが取得される可能性があります。
関数の呼び出し元では、取得されたプロフィールを level 0 のものとして扱っているため、
報告されている不具合に繋がっていると考えられます。
確認を行った環境では、クリーンインストールの場合では再現できませんでしたが、
テーブルのストレージエンジンを MyISAM に変更し報告されている手順を実行することで、
プロフィール項目 test1, test2 でそれぞれ item3, item5 だけが選択された状態となることを確認しました。
報告を頂いた方に、以下の点を確認して頂きたいです。
・member_profile テーブルのストレージエンジン
・member_profile にて、ソート順を指定しなかった場合の実行結果の並び順 (報告頂いているキャプチャーでは id の昇順でソートされているようなので。)
・プロフィール項目まわりでのカスタマイズの有無
なお、確認を行なった環境では、報告いただいたキャプチャーの③の段階で送信を押してプロフィール確認に戻った際、
プロフィール項目 test1, test2 は表示されませんでした。(添付画像参照)
これは、getProfileListByMemberId() で取得された level 1〜 の子(孫〜)プロフィールは public_flag が NULL となっているためですが、
報告ではプロフィール項目 test1, test2 ともに表示されていますので、前述の指摘箇所とは別に問題がある可能性があります。
Hiroshi Kato さんが13年以上前に更新
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 b51157e2bdcf378d31bcf25553b64b3de698f5df で適用されました。
Rimpei Ogawa さんが13年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
レビューOKです。
Mutsumi Imamura さんが約13年前に更新
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更