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

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

Last change on this file since 1265 was 1265, checked in by takanashi, 16 years ago

PNEPoint確認用

File size: 8.7 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            //入会者にポイント加算
148            $point = db_action_get_point4c_action_id(1);
149            db_point_add_point($u, $point);
150
151            //メンバー招待をした人にポイント付与
152            $point = db_action_get_point4c_action_id(7);
153            db_point_add_point($pre['c_member_id_invite'], $point);
154
155
156            // c_member_profile
157            do_config_prof_update_c_member_profile($u, $c_member_profile_list);
158
159            // 招待者とフレンドリンク
160            db_friend_insert_c_friend($u, $pre['c_member_id_invite']);
161
162            //管理画面で指定したコミュニティに強制参加
163            $c_commu_id_list = db_commu_regist_join_list();
164            foreach ($c_commu_id_list as $c_commu_id) {
165                do_inc_join_c_commu($c_commu_id, $u);
166            }
167
168            // pre の内容を削除
169            do_common_delete_c_member_pre4sid($sid);
170
171            // 登録完了メール送信
172            do_regist_prof_do_regist2_mail_send($u);
173
174            openpne_redirect('pc', 'page_o_regist_end', array('c_member_id' => $u));
175        }
176    }
177
178    function _getValidateRules()
179    {
180        return array(
181            'nickname' => array(
182                'type' => 'string',
183                'required' => '1',
184                'caption' => 'ニックネーム',
185                'max' => '40',
186            ),
187            'birth_year' => array(
188                'type' => 'int',
189                'required' => '1',
190                'caption' => '生まれた年',
191                'min' => '1901',
192            ),
193            'birth_month' => array(
194                'type' => 'int',
195                'required' => '1',
196                'caption' => '誕生月',
197                'min' => '1',
198                'max' => '12',
199            ),
200            'birth_day' => array(
201                'type' => 'int',
202                'required' => '1',
203                'caption' => '誕生日',
204                'min' => '1',
205                'max' => '31',
206            ),
207            'public_flag_birth_year' => array(
208                'type' => 'string',
209            ),
210            'password' => array(
211                'type' => 'regexp',
212                'regexp' => '/^[a-z0-9]+$/i',
213                'required' => '1',
214                'caption' => 'パスワード',
215                'min' => '6',
216                'max' => '12',
217            ),
218            'c_password_query_id' => array(
219                'type' => 'int',
220                'required' => '1',
221                'caption' => '秘密の質問',
222                'required_error' => '秘密の質問を選択してください',
223                'min' => '1',
224            ),
225            'c_password_query_answer' => array(
226                'type' => 'string',
227                'required' => '1',
228                'caption' => '秘密の質問の答え',
229            ),
230        );
231    }
232
233    function _getValidateRulesProfile()
234    {
235        $rules = array();
236        $profile_list = db_common_c_profile_list4null();
237        foreach ($profile_list as $profile) {
238            if ($profile['disp_regist']) {
239                $rule = array(
240                    'type' => 'int',
241                    'required' => $profile['is_required'],
242                    'caption' => $profile['caption'],
243                );
244                switch ($profile['form_type']) {
245                case 'text':
246                case 'textlong':
247                case 'textarea':
248                    $rule['type'] = $profile['val_type'];
249                    $rule['regexp'] = $profile['val_regexp'];
250                    $rule['min'] = $profile['val_min'];
251                    ($profile['val_max']) and $rule['max'] = $profile['val_max'];
252                    break;
253                case 'checkbox':
254                    $rule['is_array'] = '1';
255                    break;
256                }
257                $rules[$profile['name']] = $rule;
258            }
259        }
260        return $rules;
261    }
262}
263
264?>
Note: See TracBrowser for help on using the repository browser.