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

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

Last change on this file since 1093 was 1093, checked in by takanashi, 13 years ago

#230 スレーブPNE

File size: 8.4 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            @session_start();
104            $_SESSION['prof'] = $_REQUEST;
105            unset($_SESSION['password']);
106        }
107
108        switch ($mode) {
109        case 'input':
110            $prof['profile'] = $c_member_profile_list;
111            unset($prof['password']);
112
113            openpne_forward('pc', 'page', 'o_regist_prof');
114            exit;
115        case 'confirm':
116        default:
117            $prof['profile'] = $c_member_profile_list;
118
119            session_name('OpenPNEpcregist');
120            @session_start();
121            $_SESSION['prof'] = $_REQUEST;
122
123            $_REQUEST['prof'] = $prof;
124            openpne_forward('pc', 'page', 'o_regist_prof_confirm');
125            exit;
126        case 'register':
127            // delete cookie
128            setcookie(session_name(), '', time() - 3600, ini_get('session.cookie_path'));
129
130            $pre = do_common_c_member_pre4sid($sid);
131
132            // c_member, c_member_secure
133            $c_member = $prof;
134            $c_member['c_member_id_invite'] = $pre['c_member_id_invite'];
135            $c_member['is_receive_mail'] = 1;
136            $c_member['is_receive_ktai_mail'] = 1;
137            $c_member['is_receive_daily_news'] = 1;
138            $c_member_secure = array(
139                'password' => $prof['password'],
140                'password_query_answer' => $prof['c_password_query_answer'],
141                'pc_address' => $pre['pc_address'],
142                'ktai_address' => '',
143                'regist_address' => $pre['pc_address'],
144            );
145            $u = db_member_insert_c_member($c_member, $c_member_secure);
146
147            // c_member_profile
148            do_config_prof_update_c_member_profile($u, $c_member_profile_list);
149
150            // 招待者とフレンドリンク
151            db_friend_insert_c_friend($u, $pre['c_member_id_invite']);
152
153            //管理画面で指定したコミュニティに強制参加
154            $c_commu_id_list = db_commu_regist_join_list();
155            foreach ($c_commu_id_list as $c_commu_id) {
156                do_inc_join_c_commu($c_commu_id, $u);
157            }
158
159            // pre の内容を削除
160            do_common_delete_c_member_pre4sid($sid);
161
162            // 登録完了メール送信
163            do_regist_prof_do_regist2_mail_send($u);
164
165            openpne_redirect('pc', 'page_o_regist_end', array('c_member_id' => $u));
166        }
167    }
168
169    function _getValidateRules()
170    {
171        return array(
172            'nickname' => array(
173                'type' => 'string',
174                'required' => '1',
175                'caption' => 'ニックネーム',
176                'max' => '40',
177            ),
178            'birth_year' => array(
179                'type' => 'int',
180                'required' => '1',
181                'caption' => '生まれた年',
182                'min' => '1901',
183            ),
184            'birth_month' => array(
185                'type' => 'int',
186                'required' => '1',
187                'caption' => '誕生月',
188                'min' => '1',
189                'max' => '12',
190            ),
191            'birth_day' => array(
192                'type' => 'int',
193                'required' => '1',
194                'caption' => '誕生日',
195                'min' => '1',
196                'max' => '31',
197            ),
198            'public_flag_birth_year' => array(
199                'type' => 'string',
200            ),
201            'password' => array(
202                'type' => 'regexp',
203                'regexp' => '/^[a-z0-9]+$/i',
204                'required' => '1',
205                'caption' => 'パスワード',
206                'min' => '6',
207                'max' => '12',
208            ),
209            'c_password_query_id' => array(
210                'type' => 'int',
211                'required' => '1',
212                'caption' => '秘密の質問',
213                'required_error' => '秘密の質問を選択してください',
214                'min' => '1',
215            ),
216            'c_password_query_answer' => array(
217                'type' => 'string',
218                'required' => '1',
219                'caption' => '秘密の質問の答え',
220            ),
221        );
222    }
223
224    function _getValidateRulesProfile()
225    {
226        $rules = array();
227        $profile_list = db_common_c_profile_list4null();
228        foreach ($profile_list as $profile) {
229            if ($profile['disp_regist']) {
230                $rule = array(
231                    'type' => 'int',
232                    'required' => $profile['is_required'],
233                    'caption' => $profile['caption'],
234                );
235                switch ($profile['form_type']) {
236                case 'text':
237                case 'textlong':
238                case 'textarea':
239                    $rule['type'] = $profile['val_type'];
240                    $rule['regexp'] = $profile['val_regexp'];
241                    $rule['min'] = $profile['val_min'];
242                    ($profile['val_max']) and $rule['max'] = $profile['val_max'];
243                    break;
244                case 'checkbox':
245                    $rule['is_array'] = '1';
246                    break;
247                }
248                $rules[$profile['name']] = $rule;
249            }
250        }
251        return $rules;
252    }
253}
254
255?>
Note: See TracBrowser for help on using the repository browser.