Bug(バグ) #3192
closedコンバート時にプロフィールの公開範囲デフォルト設定が正しくコンバートされない
100%
Description
概要¶
コンバート時にプロフィールの公開範囲デフォルト設定が正しくコンバートされない
原因¶
下記部分で 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 系からのアップグレードに対応していない)
Updated by Yuya Watanabe over 12 years ago
- Subject changed from コンバート時に公開範囲デフォルト設定 to コンバート時に公開範囲デフォルト設定が正しくコンバートされない
Updated by Yuya Watanabe over 12 years ago
- Subject changed from コンバート時に公開範囲デフォルト設定が正しくコンバートされない to コンバート時にプロフィールの公開範囲デフォルト設定が正しくコンバートされない
- Description updated (diff)
Updated by ichikawa tatsuya about 12 years ago
移行時に対応する数値型に変更するよう修正
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'] ));
Updated by ichikawa tatsuya about 12 years ago
- Status changed from New(新規) to Accepted(着手)
Updated by ichikawa tatsuya about 12 years ago
- Status changed from Accepted(着手) to Pending Review(レビュー待ち)
- % Done changed from 0 to 50
Updated by Chiharu Nakajima over 11 years ago
- Target version changed from OpenPNE 3.6.x to OpenPNE 3.6.10
Updated by Yuya Watanabe over 11 years ago
下記手順で修正を適用しました.ただし,コミットメッセージが修正内容を正確に表現していないため,渡辺のほうでより正確だろうと思う内容に変更しています.
$ curl https://github.com/ichikawatatsuya/OpenPNE3/commit/ec4fa48f454ca7b81350ae3a5ea405ac61ef98bc.patch -O $ git am ec4fa48f454ca7b81350ae3a5ea405ac61ef98bc.patch
Updated by Yuya Watanabe over 11 years ago
- Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
- % Done changed from 50 to 70
Updated by Chiharu Nakajima over 11 years ago
- Status changed from Pending Testing(テスト待ち) to Fixed(完了)
- % Done changed from 70 to 100
テスト完了しました。問題ありません。
Updated by kaoru n over 8 years ago
- 3.8 で発生するか changed from No (いいえ) to Yes (はい)
確認環境に、(OpenPNE 3.8 は 2 系からのアップグレードに対応していない)とありますが、
2系→3.4.x→3.8.xとバージョンアップした時にも発生しますので、3.8系でも対応が必要です。
3.9.0向けにチケット作成します。
Updated by kaoru n over 8 years ago
- Copied to Bug(バグ) #3987: コンバート時にプロフィールの公開範囲デフォルト設定が正しくコンバートされない added
Updated by kaoru n over 8 years ago
- 3.8 で発生するか changed from Yes (はい) to No (いいえ)
note-14 について
対応すべきは、3.8.xではなく、3.4.xですね。
なので、 #3987 は、Invalid にしておきます。