ここの情報は古いです。ご理解頂いた上でお取り扱いください。

source: OpenPNE/branches/stable-2.8.x/webapp/modules/pc/do/h_regist_prof.php @ 4057

Last change on this file since 4057 was 4057, checked in by ogawa, 13 years ago

#1242:プロフィール登録、変更の複数選択項目の必須チェックが不完全

File size: 6.1 KB
Line 
1<?php
2/**
3 * @copyright 2005-2007 OpenPNE Project
4 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
5 */
6
7/**
8 * メールアドレス変更
9 */
10class pc_do_h_regist_prof extends OpenPNE_Action
11{
12    function execute($requests)
13    {
14        $u = $GLOBALS['AUTH']->uid();
15
16        $mode = $requests['mode'];
17        $errors = array();
18
19        $validator = new OpenPNE_Validator();
20        if ($mode == 'register') {
21            $validator->addRequests($_SESSION['prof_req']);
22        } else {
23            $validator->addRequests($_REQUEST);
24        }
25        $validator->addRules($this->_getValidateRules());
26        if (!$validator->validate()) {
27            $errors = array_merge($errors, $validator->getErrors());
28        }
29        $prof = $validator->getParams();
30
31        //--- c_profile の項目をチェック
32        $validator = new OpenPNE_Validator();
33        if ($mode == 'register') {
34            $validator->addRequests($_SESSION['prof_req']['profile']);
35        } else {
36            $validator->addRequests($_REQUEST['profile']);
37        }
38        $validator->addRules($this->_getValidateRulesProfile());
39        if (!$validator->validate()) {
40            $errors = array_merge($errors, $validator->getErrors());
41        }
42
43        // 値の整合性をチェック(DB)
44        $c_member_profile_list = db_member_check_profile($validator->getParams(), $_REQUEST['public_flag']);
45
46        // 必須項目チェック
47        $profile_list = db_member_c_profile_list4null();
48        foreach ($profile_list as $profile) {
49            $value = $c_member_profile_list[$profile['name']]['value'];
50            if ($profile['disp_config'] && $profile['is_required']) {
51                if (is_null($value) || $value === '' || $value === array()) {
52                    $errors[$profile['name']] = $profile['caption'] . 'を入力してください';
53                }
54            }
55        }
56
57        // 生年月日のチェック
58        if (!t_checkdate($prof['birth_month'], $prof['birth_day'], $prof['birth_year'])) {
59            $errors[] = '生年月日を正しく入力してください';
60        }
61        if (t_isFutureDate($prof['birth_day'], $prof['birth_month'], $prof['birth_year'])) {
62            $errors[] = '生年月日を未来に設定することはできません';
63        }
64       
65        $prof['profile'] = $c_member_profile_list;
66        if ($errors && $mode != "input") {
67            $_REQUEST['msg'] = array_shift($errors);
68            $mode = "input";
69            $_SESSION['prof'] = $prof;
70            unset($_SESSION['prof_req']);
71        }
72       
73        switch ($mode) {
74        case "input":
75            openpne_forward('pc', 'page', "h_regist_prof");
76            exit;
77            break;
78        default:
79        case "confirm":
80            $_SESSION['prof_req'] = $_REQUEST;
81            $_SESSION['prof'] = $prof;
82            openpne_forward('pc', 'page', "h_regist_prof_confirm");
83            exit;
84            break;
85        case "register":
86            db_member_config_prof_new($u, $prof);
87            db_member_update_c_member_profile($u, $c_member_profile_list);
88            db_member_update_password_query($u, $prof['password_query_id'], $prof['password_query_answer']);
89            //管理画面で指定したコミュニティに強制参加
90            $c_commu_id_list = db_commu_regist_join_list();
91            foreach ($c_commu_id_list as $c_commu_id) {
92                db_commu_join_c_commu($c_commu_id, $u);
93            }
94            unset($_SESSION['prof']);
95           
96            openpne_redirect('pc', 'page_h_home');
97            break;
98        }
99    }
100   
101   
102    function _getValidateRules()
103    {
104        return array(
105            'nickname' => array(
106                'type' => 'string',
107                'required' => '1',
108                'caption' => 'ニックネーム',
109                'max' => '40',
110            ),
111            'birth_year' => array(
112                'type' => 'int',
113                'required' => '1',
114                'caption' => '生まれた年',
115                'min' => '1901',
116            ),
117            'birth_month' => array(
118                'type' => 'int',
119                'required' => '1',
120                'caption' => '誕生月',
121                'min' => '1',
122                'max' => '12',
123            ),
124            'birth_day' => array(
125                'type' => 'int',
126                'required' => '1',
127                'caption' => '誕生日',
128                'min' => '1',
129                'max' => '31',
130            ),
131            'public_flag_birth_year' => array(
132                'type' => 'string',
133            ),
134            'c_password_query_id' => array(
135                'type' => 'int',
136                'required' => '1',
137                'caption' => '秘密の質問',
138                'required_error' => '秘密の質問を選択してください',
139                'min' => '1',
140            ),
141            'c_password_query_answer' => array(
142                'type' => 'string',
143                'required' => '1',
144                'caption' => '秘密の質問の答え',
145            ),
146        );
147    }
148
149    function _getValidateRulesProfile()
150    {
151        $rules = array();
152        $profile_list = db_member_c_profile_list4null();
153        foreach ($profile_list as $profile) {
154            if ($profile['disp_regist']) {
155                $rule = array(
156                    'type' => 'int',
157                    'required' => $profile['is_required'],
158                    'caption' => $profile['caption'],
159                );
160                switch ($profile['form_type']) {
161                case 'text':
162                case 'textlong':
163                case 'textarea':
164                    $rule['type'] = $profile['val_type'];
165                    $rule['regexp'] = $profile['val_regexp'];
166                    $rule['min'] = $profile['val_min'];
167                    ($profile['val_max']) and $rule['max'] = $profile['val_max'];
168                    break;
169                case 'checkbox':
170                    $rule['is_array'] = '1';
171                    break;
172                }
173                $rules[$profile['name']] = $rule;
174            }
175        }
176        return $rules;
177    }
178}
179
180?>
Note: See TracBrowser for help on using the repository browser.