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

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

Last change on this file since 882 was 882, checked in by takanashi, 14 years ago

プロフィール欄の選択肢に文字列(長)を追加/プロフィール入力欄に説明文を追加

File size: 8.3 KB
Line 
1<?php
2/**
3 * @copyright 2005-2006 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 (defined('OPENPNE_REGIST_FROM') &&
18                !(OPENPNE_REGIST_FROM & OPENPNE_REGIST_FROM_PC)) {
19            client_redirect_login();
20        }
21        //>
22
23        $sid = $requests['sid'];
24        if (!n_regist_intro_is_active_sid($sid)) {
25            $p = array('msg_code' => 'invalid_url');
26            openpne_redirect('pc', 'page_o_tologin', $p);
27        }
28
29        $mode = $requests['mode'];
30        $errors = array();
31
32        $validator = new OpenPNE_Validator();
33        if ($mode == 'register') {
34            session_name('OpenPNEpcregist');
35            @session_start();
36            $validator->addRequests($_SESSION['prof']);
37            $requests['password2'] = $_SESSION['prof']['password'];
38        } else {
39            $validator->addRequests($_REQUEST);
40        }
41        $validator->addRules($this->_getValidateRules());
42        if (!$validator->validate()) {
43            $errors = $validator->getErrors();
44        }
45
46        $prof = $validator->getParams();
47
48        switch ($prof['public_flag_birth_year']) {
49        case 'public':
50        case 'friend':
51        case 'private':
52            break;
53        default:
54            $prof['public_flag_birth_year'] = 'public';
55            break;
56        }
57
58        if ($prof['password'] != $requests['password2']) {
59            $errors['password2'] = 'パスワードが一致していません';
60        }
61
62        //--- c_profile の項目をチェック
63        $validator = new OpenPNE_Validator();
64        if ($mode == 'register') {
65            $validator->addRequests($_SESSION['prof']['profile']);
66            $public_flag_list = $_SESSION['prof']['public_flag'];
67        } else {
68            $validator->addRequests($_REQUEST['profile']);
69            $public_flag_list = $_REQUEST['public_flag'];
70        }
71        $validator->addRules($this->_getValidateRulesProfile());
72        if (!$validator->validate()) {
73            $errors = array_merge($errors, $validator->getErrors());
74        }
75
76        // 値の整合性をチェック(DB)
77        $c_member_profile_list = do_config_prof_check_profile($validator->getParams(), $public_flag_list);
78
79
80        // 必須項目チェック
81        $profile_list = db_common_c_profile_list4null();
82        foreach ($profile_list as $profile) {
83            if ( $profile['disp_regist'] &&
84                $profile['is_required'] &&
85                !$c_member_profile_list[$profile['name']]['value']
86            ) {
87                $errors[$profile['name']] = $profile['caption'] . 'を入力してください';
88                break;
89            }
90        }
91
92        // 生年月日のチェック
93        if (!t_checkdate($prof['birth_month'], $prof['birth_day'], $prof['birth_year'])) {
94            $errors[] = '生年月日を正しく入力してください';
95        }
96        if (t_isFutureDate($prof['birth_day'], $prof['birth_month'], $prof['birth_year'])) {
97            $errors[] = '生年月日を未来に設定することはできません';
98        }
99
100        if ($mode != 'input' && $errors) {
101            $_REQUEST['err_msg'] = $errors;
102            $mode = 'input';
103        }
104
105        switch ($mode) {
106        case 'input':
107            $prof['profile'] = $c_member_profile_list;
108            unset($prof['password']);
109
110            openpne_forward('pc', 'page', 'o_regist_prof');
111            exit;
112        case 'confirm':
113        default:
114            $prof['profile'] = $c_member_profile_list;
115
116            session_name('OpenPNEpcregist');
117            @session_start();
118            $_SESSION['prof'] = $_REQUEST;
119
120            $_REQUEST['prof'] = $prof;
121            openpne_forward('pc', 'page', 'o_regist_prof_confirm');
122            exit;
123        case 'register':
124            // delete cookie
125            setcookie(session_name(), '', time() - 3600, ini_get('session.cookie_path'));
126
127            $pre = do_common_c_member_pre4sid($sid);
128
129            // c_member, c_member_secure
130            $c_member = $prof;
131            $c_member['c_member_id_invite'] = $pre['c_member_id_invite'];
132            $c_member['is_receive_mail'] = 1;
133            $c_member['is_receive_ktai_mail'] = 1;
134            $c_member['is_receive_daily_news'] = 1;
135            $c_member_secure = array(
136                'password' => $prof['password'],
137                'password_query_answer' => $prof['c_password_query_answer'],
138                'pc_address' => $pre['pc_address'],
139                'ktai_address' => '',
140                'regist_address' => $pre['pc_address'],
141            );
142            $u = db_member_insert_c_member($c_member, $c_member_secure);
143
144            // c_member_profile
145            do_config_prof_update_c_member_profile($u, $c_member_profile_list);
146
147            // 招待者とフレンドリンク
148            db_friend_insert_c_friend($u, $pre['c_member_id_invite']);
149
150            //管理画面で指定したコミュニティに強制参加
151            $c_commu_id_list = db_commu_regist_join_list();
152            foreach ($c_commu_id_list as $c_commu_id) {
153                do_inc_join_c_commu($c_commu_id, $u);
154            }
155
156            // pre の内容を削除
157            do_common_delete_c_member_pre4sid($sid);
158
159            // 登録完了メール送信
160            do_regist_prof_do_regist2_mail_send($u);
161
162            openpne_redirect('pc', 'page_o_regist_end', array('c_member_id' => $u));
163        }
164    }
165
166    function _getValidateRules()
167    {
168        return array(
169            'nickname' => array(
170                'type' => 'string',
171                'required' => '1',
172                'caption' => 'ニックネーム',
173                'max' => '40',
174            ),
175            'birth_year' => array(
176                'type' => 'int',
177                'required' => '1',
178                'caption' => '生まれた年',
179                'min' => '1901',
180            ),
181            'birth_month' => array(
182                'type' => 'int',
183                'required' => '1',
184                'caption' => '誕生月',
185                'min' => '1',
186                'max' => '12',
187            ),
188            'birth_day' => array(
189                'type' => 'int',
190                'required' => '1',
191                'caption' => '誕生日',
192                'min' => '1',
193                'max' => '31',
194            ),
195            'public_flag_birth_year' => array(
196                'type' => 'string',
197            ),
198            'password' => array(
199                'type' => 'regexp',
200                'regexp' => '/^[a-z0-9]+$/i',
201                'required' => '1',
202                'caption' => 'パスワード',
203                'min' => '6',
204                'max' => '12',
205            ),
206            'c_password_query_id' => array(
207                'type' => 'int',
208                'required' => '1',
209                'caption' => '秘密の質問',
210                'required_error' => '秘密の質問を選択してください',
211                'min' => '1',
212            ),
213            'c_password_query_answer' => array(
214                'type' => 'string',
215                'required' => '1',
216                'caption' => '秘密の質問の答え',
217            ),
218        );
219    }
220
221    function _getValidateRulesProfile()
222    {
223        $rules = array();
224        $profile_list = db_common_c_profile_list4null();
225        foreach ($profile_list as $profile) {
226            if ($profile['disp_regist']) {
227                $rule = array(
228                    'type' => 'int',
229                    'required' => $profile['is_required'],
230                    'caption' => $profile['caption'],
231                );
232                switch ($profile['form_type']) {
233                case 'text':
234                case 'textlong':
235                case 'textarea':
236                    $rule['type'] = $profile['val_type'];
237                    $rule['regexp'] = $profile['val_regexp'];
238                    $rule['min'] = $profile['val_min'];
239                    ($profile['val_max']) and $rule['max'] = $profile['val_max'];
240                    break;
241                case 'checkbox':
242                    $rule['is_array'] = '1';
243                    break;
244                }
245                $rules[$profile['name']] = $rule;
246            }
247        }
248        return $rules;
249    }
250}
251
252?>
Note: See TracBrowser for help on using the repository browser.