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

source: OpenPNE/trunk/webapp/modules/pc/do/o_regist_prof.php @ 9006

Last change on this file since 9006 was 9006, checked in by shingo, 11 years ago

#:h_prof・o_regist_profを追加修正

File size: 9.9 KB
Line 
1<?php
2/**
3 * @copyright 2005-2008 OpenPNE Project
4 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
5 */
6
7class pc_do_o_regist_prof extends OpenPNE_Action
8{
9    function isSecure()
10    {
11        return false;
12    }
13
14    function execute($requests)
15    {
16        //<PCKTAI
17        if (OPENPNE_AUTH_MODE == 'slavepne' || !(OPENPNE_REGIST_FROM & OPENPNE_REGIST_FROM_PC)) {
18            client_redirect_login();
19        }
20        //>
21
22        $sid = $requests['sid'];
23        if (!db_member_is_active_sid($sid)) {
24            $p = array('msg_code' => 'invalid_url');
25            openpne_redirect('pc', 'page_o_tologin', $p);
26        }
27
28        $pre = db_member_c_member_pre4sid($sid);
29
30        $mode = $requests['mode'];
31        $errors = array();
32
33        $validator = new OpenPNE_Validator();
34        if ($mode == 'register') {
35            session_name('OpenPNEpcregist');
36            @session_start();
37            $validator->addRequests($_SESSION['prof']);
38            $requests['password2'] = $_SESSION['prof']['password'];
39        } else {
40            $validator->addRequests($_REQUEST);
41        }
42        $validator->addRules($this->_getValidateRules());
43        if (!$validator->validate()) {
44            $errors = $validator->getErrors();
45        }
46
47        $prof = $validator->getParams();
48
49        if ($prof['password'] !== $requests['password2']) {
50            $errors['password2'] = 'パスワードが一致していません';
51        }
52
53        //--- c_profile の項目をチェック
54        $validator = new OpenPNE_Validator();
55        if ($mode == 'register') {
56            $validator->addRequests($_SESSION['prof']['profile']);
57            $public_flag_list = $_SESSION['prof']['public_flag'];
58        } else {
59            $validator->addRequests($_REQUEST['profile']);
60            $public_flag_list = $_REQUEST['public_flag'];
61        }
62        $validator->addRules(util_get_validate_rules_profile('regist'));
63        if (!$validator->validate()) {
64            $errors = array_merge($errors, $validator->getErrors());
65        }
66
67        // 値の整合性をチェック(DB)
68        $c_member_profile_list = db_member_check_profile($validator->getParams(), $public_flag_list);
69
70        // 必須項目チェック
71        $profile_list = db_member_c_profile_list4null();
72        foreach ($profile_list as $profile) {
73            $value = $c_member_profile_list[$profile['name']]['value'];
74            if ($profile['disp_regist'] && $profile['is_required']) {
75                if (is_null($value) || $value === '' || $value === array()) {
76                    $errors[$profile['name']] = $profile['caption'] . 'を入力してください';
77                }
78            }
79        }
80
81        // 生年月日のチェック
82        if (!t_checkdate($prof['birth_month'], $prof['birth_day'], $prof['birth_year'])) {
83            $errors[] = '生年月日を正しく入力してください';
84        }
85        if (t_isFutureDate($prof['birth_day'], $prof['birth_month'], $prof['birth_year'])) {
86            $errors[] = '生年月日を未来に設定することはできません';
87        }
88
89        if (OPENPNE_AUTH_MODE == 'pneid') {
90            // ログインIDの重複チェック
91            if (db_member_c_member_id4username($prof['login_id'])) {
92                $errors[] = 'このログインIDはすでに登録されています';
93            }
94        }
95
96        if ($mode != 'input' && $errors) {
97            $_REQUEST['err_msg'] = $errors;
98            $mode = 'input';
99            @session_start();
100            $_SESSION['prof'] = $_REQUEST;
101            unset($_SESSION['password']);
102        }
103
104        switch ($mode) {
105        case 'input':
106            $prof['profile'] = $c_member_profile_list;
107            unset($prof['password']);
108
109            openpne_forward('pc', 'page', 'o_regist_prof');
110            exit;
111        case 'confirm':
112        default:
113            $prof['profile'] = $c_member_profile_list;
114
115            session_name('OpenPNEpcregist');
116            @session_start();
117            $_SESSION['prof'] = $_REQUEST;
118
119            $_REQUEST['prof'] = $prof;
120            openpne_forward('pc', 'page', 'o_regist_prof_confirm');
121            exit;
122        case 'register':
123            $pre = db_member_c_member_pre4sid($sid);
124             // delete cookie
125            setcookie(session_name(), '', time() - 3600, ini_get('session.cookie_path'));
126
127            if ((IS_GET_EASY_ACCESS_ID != 3) || $pre['is_disabled_regist_easy_access_id']) {
128                // メンバー登録時の携帯個体識別番号取得設定が「PC・携帯登録時に個体識別番号を必須にする」でない場合、メンバー登録処理をおこなう
129                $c_member = $prof;
130                $c_member['c_member_id_invite'] = $pre['c_member_id_invite'];
131                $c_member_secure = array(
132                    'password' => $prof['password'],
133                    'password_query_answer' => $prof['c_password_query_answer'],
134                    'pc_address' => $pre['pc_address'],
135                    'ktai_address' => '',
136                    'regist_address' => $pre['pc_address'],
137                );
138
139                // メンバー登録
140                $u = util_regist_c_member($c_member, $c_member_secure, $c_member_profile_list);
141
142                // pre の内容を削除
143                db_member_delete_c_member_pre4sid($sid);
144
145                // 登録完了メール送信
146                do_regist_prof_do_regist2_mail_send($u);
147
148                openpne_redirect('pc', 'page_o_regist_end', array('c_member_id' => $u));
149            } else {
150                // メンバー登録時の携帯個体識別番号取得設定が「PC・携帯登録時に個体識別番号を必須にする」である場合、
151                // ここでのメンバー登録はすべてスキップする。入力した項目は c_member_pre とc_member_pre_profile に
152                // 保持しておき、携帯の登録が完了した場合に、メンバー登録も完了する
153
154                // c_member_pre_profile にデータ挿入
155                db_member_update_c_member_pre_profile($pre['c_member_pre_id'], $c_member_profile_list);
156
157                // c_member_pre にデータ挿入
158                $c_member_pre_secure = array(
159                    'session' => $pre['session'],
160                    'nickname' => $prof['nickname'],
161                    'birth_year' => $prof['birth_year'],
162                    'birth_month' => $prof['birth_month'],
163                    'birth_day' => $prof['birth_day'],
164                    'public_flag_birth_year' => $prof['public_flag_birth_year'],
165                    'public_flag_birth_month_day' => $prof['public_flag_birth_month_day'],
166                    'password' => $prof['password'],
167                    'c_password_query_id' => $prof['c_password_query_id'],
168                    'password_query_answer' => $prof['c_password_query_answer'],
169                    'pc_address' => $pre['pc_address'],
170                    'regist_address' => $pre['pc_address'],
171                );
172
173                if (OPENPNE_AUTH_MODE == 'pneid') {
174                    $c_member_pre_secure['login_id'] = $prof['login_id'];
175                }
176
177                db_member_update_c_member_pre_secure($pre['c_member_pre_id'], $c_member_pre_secure);
178
179                openpne_redirect('pc', 'page_o_regist_ktai_address', array('sid' => $pre['session']));
180            }
181        }
182    }
183
184    function _getValidateRules()
185    {
186        $rules = array(
187            'nickname' => array(
188                'type' => 'string',
189                'required' => '1',
190                'caption' => WORD_NICKNAME,
191                'max' => '40',
192            ),
193            'birth_year' => array(
194                'type' => 'int',
195                'required' => '1',
196                'caption' => '生まれた年',
197                'min' => '1901',
198            ),
199            'birth_month' => array(
200                'type' => 'int',
201                'required' => '1',
202                'caption' => '誕生月',
203                'min' => '1',
204                'max' => '12',
205            ),
206            'birth_day' => array(
207                'type' => 'int',
208                'required' => '1',
209                'caption' => '誕生日',
210                'min' => '1',
211                'max' => '31',
212            ),
213            'public_flag_birth_year' => array(
214                'type' => 'regexp',
215                'regexp' => '/^(public|friend|private)$/',
216                'required' => '1',
217                'caption' => '公開範囲',
218            ),
219            'public_flag_birth_month_day' => array(
220                'type' => 'regexp',
221                'regexp' => '/^(public|friend|private)$/',
222                'required' => '1',
223                'caption' => '公開範囲',
224            ),
225            'password' => array(
226                'type' => 'regexp',
227                'regexp' => '/^[a-z0-9]+$/i',
228                'required' => '1',
229                'caption' => 'パスワード',
230                'min' => '6',
231                'max' => '12',
232            ),
233            'c_password_query_id' => array(
234                'type' => 'int',
235                'required' => '1',
236                'caption' => '秘密の質問',
237                'required_error' => '秘密の質問を選択してください',
238                'min' => '1',
239            ),
240            'c_password_query_answer' => array(
241                'type' => 'string',
242                'required' => '1',
243                'caption' => '秘密の質問の答え',
244            ),
245        );
246
247        if (OPENPNE_AUTH_MODE == 'pneid') {
248            $rules['login_id'] = array(
249                'type' => 'regexp',
250                'regexp' => '/^[a-zA-Z0-9][a-zA-Z0-9\-_]+[a-zA-Z0-9]$/i',
251                'required' => '1',
252                'caption' => 'ログインID',
253                'type_error' => 'ログインIDは4~30文字の半角英数字、記号(アンダーバー「_」、ハイフン「-」)で入力してください',
254                'min' => '4',
255                'max' => '30',
256            );
257        }
258
259        return $rules;
260    }
261}
262
263?>
Note: See TracBrowser for help on using the repository browser.