プロジェクト

全般

プロフィール

Bug(バグ) #3192

コンバート時にプロフィールの公開範囲デフォルト設定が正しくコンバートされない

Yuya Watanabe11年以上前に追加. 7年以上前に更新.

ステータス:
Fixed(完了)
優先度:
Normal(通常)
対象バージョン:
開始日:
2012-09-05
期日:
進捗率:

100%

3.6 で発生するか:
Yes (はい)
3.8 で発生するか:
No (いいえ)

説明

概要

コンバート時にプロフィールの公開範囲デフォルト設定が正しくコンバートされない

原因

下記部分で c_profile のテーブルの public_flag_default をそのまま使用しているが,2 系では数値ではなく文字列で管理していたため,そのまま利用すると正しく格納されない.実際には 0 になる

mysql> select public_flag_default from c_profile group by public_flag_default;
+---------------------+
| public_flag_default |
+---------------------+
| public              | 
| friend              | 
| private             | 
+---------------------+
3 rows in set (0.00 sec)

テーブル定義.

mysql> show create table profile\G
*************************** 1. row ***************************
       Table: profile
Create Table: CREATE TABLE `profile` (
...
  `default_public_flag` tinyint(4) NOT NULL DEFAULT '1' COMMENT 'Default of public flag',
...
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Saves input/select items for the member profile'
1 row in set (0.00 sec)

実際に格納している部分.

data/upgrade/2/opUpgradeFrom2MemberProfileStrategy.class.php

 54   protected function importProfile($ids, $idStr)
 55   {
 56     $list = $this->conn->fetchAll('SELECT c_profile_id, name, is_required, public_flag_edit, public_flag_default, form_type, val_type, disp_regist, disp_config, disp_search, val_regexp, val_min, val_max, sort_order FROM c_profile WHER    E c_profile_id IN ('.$idStr.') LIMIT 16', $ids);
...
 62       $this->conn->execute('INSERT INTO profile (id, name, is_required, is_unique, is_edit_public_flag, default_public_flag, form_type, value_type, is_disp_regist, is_disp_config, is_disp_search, value_regexp, value_min, value_max, so    rt_order, created_at, updated_at) VALUES (?, ?, ?, 0, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), NOW())', array(
 63         $profile['c_profile_id'] , $profile['name']     , $profile['is_required'] , $profile['public_flag_edit'] ,
...
 66       ));
 67     }
 68   }

実際に格納される値は下記のような形になる.(cast関数参考URL https://dev.mysql.com/doc/refman/5.1/ja/cast-functions.html

mysql> SELECT CAST('public' AS UNSIGNED), CAST('private' AS UNSIGNED), CAST('friend' AS UNSIGNED);
+----------------------------+-----------------------------+----------------------------+
| CAST('public' AS UNSIGNED) | CAST('private' AS UNSIGNED) | CAST('friend' AS UNSIGNED) |
+----------------------------+-----------------------------+----------------------------+
|                          0 |                           0 |                          0 |
+----------------------------+-----------------------------+----------------------------+
1 row in set, 3 warnings (0.00 sec)

修正案

下記設定に従って, opUpgradeFrom2MemberProfileStrategy.class.php の値を正しく設定する.

lib/model/doctrine/ProfileTable.class.php

 13   const PUBLIC_FLAG_SNS = 1;
 14   const PUBLIC_FLAG_FRIEND = 2;                                                                                    
 15   const PUBLIC_FLAG_PRIVATE = 3;
 16   const PUBLIC_FLAG_WEB = 4;
 17 
 18   protected $publicFlags = array(
 19     self::PUBLIC_FLAG_WEB     => 'All Users on the Web',
 20     self::PUBLIC_FLAG_SNS     => 'All Members',
 21     self::PUBLIC_FLAG_FRIEND  => '%my_friend%',
 22     self::PUBLIC_FLAG_PRIVATE => 'Private',
 23   );

array_search($flag, array('public' => 1, 'friend' = 2, 'private' = 3));

確認環境

OpenPNE 3.6.5
(OpenPNE 3.8 は 2 系からのアップグレードに対応していない)


関連するチケット

コピー先 OpenPNE 3 - Bug(バグ) #3987: コンバート時にプロフィールの公開範囲デフォルト設定が正しくコンバートされない Invalid(無効) 2016-07-28

関係しているリビジョン

リビジョン e175fbb2 (差分)
ichikawa tatsuyaほぼ11年前に追加

(refs #3192) fixed upgrade strategy to convert public flag correctly

履歴

#1 Yuya Watanabe11年以上前に更新

  • 題名コンバート時に公開範囲デフォルト設定 から コンバート時に公開範囲デフォルト設定が正しくコンバートされない に変更

#2 Yuya Watanabe11年以上前に更新

  • 題名コンバート時に公開範囲デフォルト設定が正しくコンバートされない から コンバート時にプロフィールの公開範囲デフォルト設定が正しくコンバートされない に変更
  • 説明 を更新 (diff)

#3 Yuya Watanabe11年以上前に更新

  • 説明 を更新 (diff)

#4 ichikawa tatsuya11年以上前に更新

移行時に対応する数値型に変更するよう修正
https://github.com/ichikawatatsuya/OpenPNE3/commit/ec4fa48f454ca7b81350ae3a5ea405ac61ef98bc

diff --git a/data/upgrade/2/opUpgradeFrom2MemberProfileStrategy.class.php b/data/upgrade/2/opUpgradeFrom2MemberProfileStrategy.class.php
index 1aba35a..a3eaa83 100644
--- a/data/upgrade/2/opUpgradeFrom2MemberProfileStrategy.class.php
+++ b/data/upgrade/2/opUpgradeFrom2MemberProfileStrategy.class.php
@@ -59,8 +59,21 @@ class opUpgradeFrom2MemberProfileStrategy extends opUpgradeAbstractStrategy
       $valMin = (0 == $profile['val_min']) ? null : $profile['val_min'];
       $valMax = (0 == $profile['val_max']) ? null : $profile['val_max'];

+      switch ($profile['public_flag_default'])
+      {
+        case 'friend':
+          $publicFlagDefault = 2;
+          break;
+        case 'private':
+          $publicFlagDefault = 3;
+          break;
+        default:
+          $publicFlagDefault = 1;
+          break;
+      }
+
       $this->conn->execute('INSERT INTO profile (id, name, is_required, is_unique, is_edit_public_flag, default_public_flag, form_type, value_t
-        $profile['c_profile_id'] , $profile['name']     , $profile['is_required'] , $profile['public_flag_edit'] , $profile['public_flag_defaul
+        $profile['c_profile_id'] , $profile['name']     , $profile['is_required'] , $profile['public_flag_edit'] , $publicFlagDefault ,
         $profile['form_type']    , $profile['val_type'] , $profile['disp_regist'] , $profile['disp_config']      , $profile['disp_search']     
         $profile['val_regexp']   , $valMin              , $valMax                 , $profile['sort_order']
       ));

#5 ichikawa tatsuya11年以上前に更新

  • ステータスNew(新規) から Accepted(着手) に変更

#6 ichikawa tatsuya11年以上前に更新

  • ステータスAccepted(着手) から Pending Review(レビュー待ち) に変更
  • 進捗率0 から 50 に変更

#7 ichikawa tatsuya11年以上前に更新

  • 担当者ichikawa tatsuya にセット

#8 Chiharu Nakajimaほぼ11年前に更新

  • 対象バージョンOpenPNE 3.6.x から OpenPNE 3.6.10 に変更

#9 Yuya Watanabeほぼ11年前に更新

下記手順で修正を適用しました.ただし,コミットメッセージが修正内容を正確に表現していないため,渡辺のほうでより正確だろうと思う内容に変更しています.

$ curl https://github.com/ichikawatatsuya/OpenPNE3/commit/ec4fa48f454ca7b81350ae3a5ea405ac61ef98bc.patch -O
$ git am ec4fa48f454ca7b81350ae3a5ea405ac61ef98bc.patch

#10 Yuya Watanabeほぼ11年前に更新

  • ステータスPending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
  • 進捗率50 から 70 に変更

#11 Chiharu Nakajimaほぼ11年前に更新

  • ステータスPending Testing(テスト待ち) から Fixed(完了) に変更
  • 進捗率70 から 100 に変更

テスト完了しました。問題ありません。

#14 kaoru n7年以上前に更新

  • 3.8 で発生するかNo (いいえ) から Yes (はい) に変更

確認環境に、(OpenPNE 3.8 は 2 系からのアップグレードに対応していない)とありますが、
2系→3.4.x→3.8.xとバージョンアップした時にも発生しますので、3.8系でも対応が必要です。

3.9.0向けにチケット作成します。

#15 kaoru n7年以上前に更新

  • コピー先 Bug(バグ) #3987: コンバート時にプロフィールの公開範囲デフォルト設定が正しくコンバートされない を追加

#16 kaoru n7年以上前に更新

  • 3.8 で発生するかYes (はい) から No (いいえ) に変更

note-14 について
対応すべきは、3.8.xではなく、3.4.xですね。
なので、 #3987 は、Invalid にしておきます。

他の形式にエクスポート: Atom PDF