| [ Index ] |
PHP Cross Reference of MyBB 1.8.41 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * MyBB 1.8 4 * Copyright 2014 MyBB Group, All Rights Reserved 5 * 6 * Website: http://www.mybb.com 7 * License: http://www.mybb.com/about/license 8 * 9 */ 10 11 define("IN_MYBB", 1); 12 define("IGNORE_CLEAN_VARS", "sid"); 13 define('THIS_SCRIPT', 'member.php'); 14 define("ALLOWABLE_PAGE", "register,do_register,login,do_login,logout,lostpw,do_lostpw,activate,resendactivation,do_resendactivation,resetpassword,viewnotes"); 15 16 $nosession['avatar'] = 1; 17 18 $templatelist = "member_register,member_register_hiddencaptcha,member_register_coppa,member_register_agreement_coppa,member_register_agreement,member_register_customfield,member_register_requiredfields,member_profile_findthreads"; 19 $templatelist .= ",member_loggedin_notice,member_profile_away,member_register_regimage,member_register_regimage_recaptcha_invisible,member_register_regimage_nocaptcha,post_captcha_cfturnstile,post_captcha_hcaptcha_invisible,post_captcha_hcaptcha,post_captcha_hidden,post_captcha,member_register_referrer"; 20 $templatelist .= ",member_profile_email,member_profile_offline,member_profile_reputation,member_profile_warn,member_profile_warninglevel,member_profile_warninglevel_link,member_profile_customfields_field,member_profile_customfields,member_profile_adminoptions_manageban,member_profile_adminoptions,member_profile"; 21 $templatelist .= ",member_profile_signature,member_profile_avatar,member_profile_groupimage,member_referrals_link,member_profile_referrals,member_profile_website,member_profile_reputation_vote,member_activate,member_lostpw,member_register_additionalfields"; 22 $templatelist .= ",member_profile_modoptions_manageuser,member_profile_modoptions_editprofile,member_profile_modoptions_banuser,member_profile_modoptions_viewnotes,member_profile_modoptions_editnotes,member_profile_modoptions_purgespammer"; 23 $templatelist .= ",usercp_profile_profilefields_select_option,usercp_profile_profilefields_multiselect,usercp_profile_profilefields_select,usercp_profile_profilefields_textarea,usercp_profile_profilefields_radio,member_viewnotes"; 24 $templatelist .= ",member_register_question,member_register_question_refresh,usercp_options_timezone,usercp_options_timezone_option,usercp_options_language_option,member_profile_customfields_field_multi_item,member_profile_customfields_field_multi"; 25 $templatelist .= ",member_profile_pm,member_profile_contact_details,member_profile_modoptions_manageban"; 26 $templatelist .= ",member_profile_banned_remaining,member_profile_addremove,member_emailuser_guest,member_register_day,usercp_options_tppselect_option,postbit_warninglevel_formatted,member_profile_userstar,member_profile_findposts"; 27 $templatelist .= ",usercp_options_tppselect,usercp_options_pppselect,member_resetpassword,member_login,member_profile_online,usercp_options_pppselect_option,postbit_reputation_formatted,member_emailuser,usercp_profile_profilefields_text"; 28 $templatelist .= ",member_profile_modoptions_ipaddress,member_profile_modoptions,member_profile_banned,member_register_language,member_resendactivation,usercp_profile_profilefields_checkbox,member_register_password,member_coppa_form"; 29 30 require_once "./global.php"; 31 require_once MYBB_ROOT."inc/functions_post.php"; 32 require_once MYBB_ROOT."inc/functions_user.php"; 33 require_once MYBB_ROOT."inc/class_parser.php"; 34 require_once MYBB_ROOT."inc/functions_modcp.php"; 35 $parser = new postParser; 36 37 // Load global language phrases 38 $lang->load("member"); 39 40 $mybb->input['action'] = $mybb->get_input('action'); 41 42 // Make navigation 43 switch($mybb->input['action']) 44 { 45 case "register": 46 case "do_register": 47 add_breadcrumb($lang->nav_register); 48 break; 49 case "activate": 50 add_breadcrumb($lang->nav_activate); 51 break; 52 case "resendactivation": 53 add_breadcrumb($lang->nav_resendactivation); 54 break; 55 case "lostpw": 56 add_breadcrumb($lang->nav_lostpw); 57 break; 58 case "resetpassword": 59 add_breadcrumb($lang->nav_resetpassword); 60 break; 61 case "login": 62 add_breadcrumb($lang->nav_login); 63 break; 64 case "emailuser": 65 add_breadcrumb($lang->nav_emailuser); 66 break; 67 } 68 69 if(($mybb->input['action'] == "register" || $mybb->input['action'] == "do_register") && $mybb->usergroup['cancp'] != 1) 70 { 71 if($mybb->settings['disableregs'] == 1) 72 { 73 error($lang->registrations_disabled); 74 } 75 if($mybb->user['uid'] != 0) 76 { 77 error($lang->error_alreadyregistered); 78 } 79 if($mybb->settings['betweenregstime'] && $mybb->settings['maxregsbetweentime']) 80 { 81 $time = TIME_NOW; 82 $datecut = $time-(60*60*$mybb->settings['betweenregstime']); 83 $query = $db->simple_select("users", "*", "regip=".$db->escape_binary($session->packedip)." AND regdate > '$datecut'"); 84 $regcount = $db->num_rows($query); 85 if($regcount >= $mybb->settings['maxregsbetweentime']) 86 { 87 $lang->error_alreadyregisteredtime = $lang->sprintf($lang->error_alreadyregisteredtime, $regcount, $mybb->settings['betweenregstime']); 88 error($lang->error_alreadyregisteredtime); 89 } 90 } 91 } 92 93 $fromreg = 0; 94 if($mybb->input['action'] == "do_register" && $mybb->request_method == "post") 95 { 96 $plugins->run_hooks("member_do_register_start"); 97 98 // Are checking how long it takes for users to register? 99 if($mybb->settings['regtime'] > 0) 100 { 101 // Is the field actually set? 102 if(isset($mybb->input['regtime'])) 103 { 104 // Check how long it took for this person to register 105 $timetook = TIME_NOW - $mybb->get_input('regtime', MyBB::INPUT_INT); 106 107 // See if they registered faster than normal 108 if($timetook < $mybb->settings['regtime']) 109 { 110 // This user registered pretty quickly, bot detected! 111 $lang->error_spam_deny_time = $lang->sprintf($lang->error_spam_deny_time, $mybb->settings['regtime'], $timetook); 112 error($lang->error_spam_deny_time); 113 } 114 } 115 else 116 { 117 error($lang->error_spam_deny); 118 } 119 } 120 121 // If we have hidden CATPCHA enabled and it's filled, deny registration 122 if($mybb->settings['hiddencaptchaimage']) 123 { 124 $string = $mybb->settings['hiddencaptchaimagefield']; 125 126 if(!empty($mybb->input[$string])) 127 { 128 error($lang->error_spam_deny); 129 } 130 } 131 132 if($mybb->settings['regtype'] == "randompass") 133 { 134 135 $password_length = (int)$mybb->settings['minpasswordlength']; 136 if($password_length < 8) 137 { 138 $password_length = min(8, (int)$mybb->settings['maxpasswordlength']); 139 } 140 141 $mybb->input['password'] = random_str($password_length, $mybb->settings['requirecomplexpasswords']); 142 $mybb->input['password2'] = $mybb->input['password']; 143 } 144 145 if($mybb->settings['regtype'] == "verify" || $mybb->settings['regtype'] == "admin" || $mybb->settings['regtype'] == "both" || $mybb->get_input('coppa', MyBB::INPUT_INT) == 1) 146 { 147 $usergroup = 5; 148 } 149 else 150 { 151 $usergroup = 2; 152 } 153 154 // Set up user handler. 155 require_once MYBB_ROOT."inc/datahandlers/user.php"; 156 $userhandler = new UserDataHandler("insert"); 157 158 $coppauser = 0; 159 if(isset($mybb->cookies['coppauser'])) 160 { 161 $coppauser = (int)$mybb->cookies['coppauser']; 162 } 163 164 // Set the data for the new user. 165 $user = array( 166 "username" => $mybb->get_input('username'), 167 "password" => $mybb->get_input('password'), 168 "password2" => $mybb->get_input('password2'), 169 "email" => $mybb->get_input('email'), 170 "email2" => $mybb->get_input('email2'), 171 "usergroup" => $usergroup, 172 "referrer" => $mybb->get_input('referrername'), 173 "timezone" => $mybb->get_input('timezoneoffset'), 174 "language" => $mybb->get_input('language'), 175 "profile_fields" => $mybb->get_input('profile_fields', MyBB::INPUT_ARRAY), 176 "regip" => $session->packedip, 177 "coppa_user" => $coppauser, 178 "regcheck1" => $mybb->get_input('regcheck1'), 179 "regcheck2" => $mybb->get_input('regcheck2'), 180 "registration" => true 181 ); 182 183 // Do we have a saved COPPA DOB? 184 if(isset($mybb->cookies['coppadob'])) 185 { 186 list($dob_day, $dob_month, $dob_year) = explode("-", $mybb->cookies['coppadob']); 187 $user['birthday'] = array( 188 "day" => $dob_day, 189 "month" => $dob_month, 190 "year" => $dob_year 191 ); 192 } 193 194 $user['options'] = array( 195 "allownotices" => $mybb->get_input('allownotices', MyBB::INPUT_INT), 196 "hideemail" => $mybb->get_input('hideemail', MyBB::INPUT_INT), 197 "subscriptionmethod" => $mybb->get_input('subscriptionmethod', MyBB::INPUT_INT), 198 "receivepms" => $mybb->get_input('receivepms', MyBB::INPUT_INT), 199 "pmnotice" => $mybb->get_input('pmnotice', MyBB::INPUT_INT), 200 "pmnotify" => $mybb->get_input('pmnotify', MyBB::INPUT_INT), 201 "invisible" => $mybb->get_input('invisible', MyBB::INPUT_INT), 202 "dstcorrection" => $mybb->get_input('dstcorrection') 203 ); 204 205 $userhandler->set_data($user); 206 207 $errors = array(); 208 209 if(!$userhandler->validate_user()) 210 { 211 $errors = $userhandler->get_friendly_errors(); 212 } 213 214 if($mybb->settings['enablestopforumspam_on_register']) 215 { 216 require_once MYBB_ROOT . '/inc/class_stopforumspamchecker.php'; 217 218 $stop_forum_spam_checker = new StopForumSpamChecker( 219 $plugins, 220 $mybb->settings['stopforumspam_min_weighting_before_spam'], 221 $mybb->settings['stopforumspam_check_usernames'], 222 $mybb->settings['stopforumspam_check_emails'], 223 $mybb->settings['stopforumspam_check_ips'], 224 $mybb->settings['stopforumspam_log_blocks'] 225 ); 226 227 try { 228 if($stop_forum_spam_checker->is_user_a_spammer($user['username'], $user['email'], get_ip())) 229 { 230 error($lang->sprintf($lang->error_stop_forum_spam_spammer, 231 $stop_forum_spam_checker->getErrorText(array( 232 'stopforumspam_check_usernames', 233 'stopforumspam_check_emails', 234 'stopforumspam_check_ips' 235 )))); 236 } 237 } 238 catch (Exception $e) 239 { 240 if($mybb->settings['stopforumspam_block_on_error']) 241 { 242 error($lang->error_stop_forum_spam_fetching); 243 } 244 } 245 } 246 247 if($mybb->settings['captchaimage']) 248 { 249 require_once MYBB_ROOT.'inc/class_captcha.php'; 250 $captcha = new captcha; 251 252 if($captcha->validate_captcha() == false) 253 { 254 // CAPTCHA validation failed 255 foreach($captcha->get_errors() as $error) 256 { 257 $errors[] = $error; 258 } 259 } 260 } 261 262 // If we have a security question, check to see if answer is correct 263 if($mybb->settings['securityquestion']) 264 { 265 $question_id = $db->escape_string($mybb->get_input('question_id')); 266 $answer = $db->escape_string($mybb->get_input('answer')); 267 268 $query = $db->query(" 269 SELECT q.*, s.sid 270 FROM ".TABLE_PREFIX."questionsessions s 271 LEFT JOIN ".TABLE_PREFIX."questions q ON (q.qid=s.qid) 272 WHERE q.active='1' AND s.sid='{$question_id}' 273 "); 274 if($db->num_rows($query) > 0) 275 { 276 $question = $db->fetch_array($query); 277 $valid_answers = explode("\n", $question['answer']); 278 $validated = 0; 279 280 foreach($valid_answers as $answers) 281 { 282 if(my_strtolower($answers) == my_strtolower($answer)) 283 { 284 $validated = 1; 285 } 286 } 287 288 if($validated != 1) 289 { 290 $update_question = array( 291 "incorrect" => $question['incorrect'] + 1 292 ); 293 $db->update_query("questions", $update_question, "qid='{$question['qid']}'"); 294 295 $errors[] = $lang->error_question_wrong; 296 } 297 else 298 { 299 $update_question = array( 300 "correct" => $question['correct'] + 1 301 ); 302 $db->update_query("questions", $update_question, "qid='{$question['qid']}'"); 303 } 304 305 $db->delete_query("questionsessions", "sid='{$question_id}'"); 306 } 307 else 308 { 309 $errors[] = $lang->error_question_wrong; 310 } 311 } 312 313 $regerrors = ''; 314 if(!empty($errors)) 315 { 316 $username = htmlspecialchars_uni($mybb->get_input('username')); 317 $email = htmlspecialchars_uni($mybb->get_input('email')); 318 $email2 = htmlspecialchars_uni($mybb->get_input('email2')); 319 $referrername = htmlspecialchars_uni($mybb->get_input('referrername')); 320 321 $allownoticescheck = $hideemailcheck = $no_auto_subscribe_selected = $instant_email_subscribe_selected = $instant_pm_subscribe_selected = $no_subscribe_selected = ''; 322 $receivepmscheck = $pmnoticecheck = $pmnotifycheck = $invisiblecheck = $dst_auto_selected = $dst_enabled_selected = $dst_disabled_selected = ''; 323 324 if($mybb->get_input('allownotices', MyBB::INPUT_INT) == 1) 325 { 326 $allownoticescheck = "checked=\"checked\""; 327 } 328 329 if($mybb->get_input('hideemail', MyBB::INPUT_INT) == 1) 330 { 331 $hideemailcheck = "checked=\"checked\""; 332 } 333 334 if($mybb->get_input('subscriptionmethod', MyBB::INPUT_INT) == 1) 335 { 336 $no_subscribe_selected = "selected=\"selected\""; 337 } 338 else if($mybb->get_input('subscriptionmethod', MyBB::INPUT_INT) == 2) 339 { 340 $instant_email_subscribe_selected = "selected=\"selected\""; 341 } 342 else if($mybb->get_input('subscriptionmethod', MyBB::INPUT_INT) == 3) 343 { 344 $instant_pm_subscribe_selected = "selected=\"selected\""; 345 } 346 else 347 { 348 $no_auto_subscribe_selected = "selected=\"selected\""; 349 } 350 351 if($mybb->get_input('receivepms', MyBB::INPUT_INT) == 1) 352 { 353 $receivepmscheck = "checked=\"checked\""; 354 } 355 356 if($mybb->get_input('pmnotice', MyBB::INPUT_INT) == 1) 357 { 358 $pmnoticecheck = " checked=\"checked\""; 359 } 360 361 if($mybb->get_input('pmnotify', MyBB::INPUT_INT) == 1) 362 { 363 $pmnotifycheck = "checked=\"checked\""; 364 } 365 366 if($mybb->get_input('invisible', MyBB::INPUT_INT) == 1) 367 { 368 $invisiblecheck = "checked=\"checked\""; 369 } 370 371 if($mybb->get_input('dstcorrection', MyBB::INPUT_INT) == 2) 372 { 373 $dst_auto_selected = "selected=\"selected\""; 374 } 375 else if($mybb->get_input('dstcorrection', MyBB::INPUT_INT) == 1) 376 { 377 $dst_enabled_selected = "selected=\"selected\""; 378 } 379 else 380 { 381 $dst_disabled_selected = "selected=\"selected\""; 382 } 383 384 $regerrors = inline_error($errors); 385 $mybb->input['action'] = "register"; 386 $fromreg = 1; 387 } 388 else 389 { 390 $user_info = $userhandler->insert_user(); 391 392 // Invalidate solved captcha 393 if($mybb->settings['captchaimage']) 394 { 395 $captcha->invalidate_captcha(); 396 } 397 398 if($mybb->settings['regtype'] != "randompass" && empty($mybb->cookies['coppauser'])) 399 { 400 // Log them in 401 my_setcookie("mybbuser", $user_info['uid']."_".$user_info['loginkey'], null, true, "lax"); 402 } 403 404 if(!empty($mybb->cookies['coppauser'])) 405 { 406 $lang->redirect_registered_coppa_activate = $lang->sprintf($lang->redirect_registered_coppa_activate, $mybb->settings['bbname'], htmlspecialchars_uni($user_info['username'])); 407 my_unsetcookie("coppauser"); 408 my_unsetcookie("coppadob"); 409 $plugins->run_hooks("member_do_register_end"); 410 error($lang->redirect_registered_coppa_activate); 411 } 412 else if($mybb->settings['regtype'] == "verify") 413 { 414 $activationcode = random_str(); 415 $now = TIME_NOW; 416 $activationarray = array( 417 "uid" => $user_info['uid'], 418 "dateline" => TIME_NOW, 419 "code" => $activationcode, 420 "type" => "r" 421 ); 422 $db->insert_query("awaitingactivation", $activationarray); 423 $emailsubject = $lang->sprintf($lang->emailsubject_activateaccount, $mybb->settings['bbname']); 424 switch($mybb->settings['username_method']) 425 { 426 case 0: 427 $emailmessage = $lang->sprintf($lang->email_activateaccount, $user_info['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user_info['uid'], $activationcode); 428 break; 429 case 1: 430 $emailmessage = $lang->sprintf($lang->email_activateaccount1, $user_info['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user_info['uid'], $activationcode); 431 break; 432 case 2: 433 $emailmessage = $lang->sprintf($lang->email_activateaccount2, $user_info['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user_info['uid'], $activationcode); 434 break; 435 default: 436 $emailmessage = $lang->sprintf($lang->email_activateaccount, $user_info['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user_info['uid'], $activationcode); 437 break; 438 } 439 my_mail($user_info['email'], $emailsubject, $emailmessage); 440 441 $lang->redirect_registered_activation = $lang->sprintf($lang->redirect_registered_activation, $mybb->settings['bbname'], htmlspecialchars_uni($user_info['username'])); 442 443 $plugins->run_hooks("member_do_register_end"); 444 445 error($lang->redirect_registered_activation); 446 } 447 else if($mybb->settings['regtype'] == "randompass") 448 { 449 $emailsubject = $lang->sprintf($lang->emailsubject_randompassword, $mybb->settings['bbname']); 450 switch($mybb->settings['username_method']) 451 { 452 case 0: 453 $emailmessage = $lang->sprintf($lang->email_randompassword, $user['username'], $mybb->settings['bbname'], $user_info['username'], $mybb->get_input('password')); 454 break; 455 case 1: 456 $emailmessage = $lang->sprintf($lang->email_randompassword1, $user['username'], $mybb->settings['bbname'], $user_info['username'], $mybb->get_input('password')); 457 break; 458 case 2: 459 $emailmessage = $lang->sprintf($lang->email_randompassword2, $user['username'], $mybb->settings['bbname'], $user_info['username'], $mybb->get_input('password')); 460 break; 461 default: 462 $emailmessage = $lang->sprintf($lang->email_randompassword, $user['username'], $mybb->settings['bbname'], $user_info['username'], $mybb->get_input('password')); 463 break; 464 } 465 my_mail($user_info['email'], $emailsubject, $emailmessage); 466 467 $plugins->run_hooks("member_do_register_end"); 468 469 error($lang->redirect_registered_passwordsent); 470 } 471 else if($mybb->settings['regtype'] == "admin") 472 { 473 $groups = $cache->read("usergroups"); 474 $admingroups = array(); 475 if(!empty($groups)) // Shouldn't be... 476 { 477 foreach($groups as $group) 478 { 479 if($group['cancp'] == 1) 480 { 481 $admingroups[] = (int)$group['gid']; 482 } 483 } 484 } 485 486 if(!empty($admingroups)) 487 { 488 $sqlwhere = 'usergroup IN ('.implode(',', $admingroups).')'; 489 foreach($admingroups as $admingroup) 490 { 491 switch($db->type) 492 { 493 case 'pgsql': 494 case 'sqlite': 495 $sqlwhere .= " OR ','||additionalgroups||',' LIKE '%,{$admingroup},%'"; 496 break; 497 default: 498 $sqlwhere .= " OR CONCAT(',',additionalgroups,',') LIKE '%,{$admingroup},%'"; 499 break; 500 } 501 } 502 $q = $db->simple_select('users', 'uid,username,email,language', $sqlwhere); 503 while($recipient = $db->fetch_array($q)) 504 { 505 // First we check if the user's a super admin: if yes, we don't care about permissions 506 $is_super_admin = is_super_admin($recipient['uid']); 507 if(!$is_super_admin) 508 { 509 // Include admin functions 510 if(!file_exists(MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions.php")) 511 { 512 continue; 513 } 514 515 require_once MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions.php"; 516 517 // Verify if we have permissions to access user-users 518 require_once MYBB_ROOT.$mybb->config['admin_dir']."/modules/user/module_meta.php"; 519 if(function_exists("user_admin_permissions")) 520 { 521 // Get admin permissions 522 $adminperms = get_admin_permissions($recipient['uid']); 523 524 $permissions = user_admin_permissions(); 525 if(array_key_exists('users', $permissions['permissions']) && $adminperms['user']['users'] != 1) 526 { 527 continue; // No permissions 528 } 529 } 530 } 531 532 // Load language 533 if($recipient['language'] != $lang->language && $lang->language_exists($recipient['language'])) 534 { 535 $reset_lang = true; 536 $lang->set_language($recipient['language']); 537 $lang->load("member"); 538 } 539 540 $subject = $lang->sprintf($lang->newregistration_subject, $mybb->settings['bbname']); 541 $message = $lang->sprintf($lang->newregistration_message, $recipient['username'], $mybb->settings['bbname'], $user['username']); 542 my_mail($recipient['email'], $subject, $message); 543 } 544 545 // Reset language 546 if(isset($reset_lang)) 547 { 548 $lang->set_language($mybb->settings['bblanguage']); 549 $lang->load("member"); 550 } 551 } 552 553 $lang->redirect_registered_admin_activate = $lang->sprintf($lang->redirect_registered_admin_activate, $mybb->settings['bbname'], htmlspecialchars_uni($user_info['username'])); 554 555 $plugins->run_hooks("member_do_register_end"); 556 557 error($lang->redirect_registered_admin_activate); 558 } 559 else if($mybb->settings['regtype'] == "both") 560 { 561 $groups = $cache->read("usergroups"); 562 $admingroups = array(); 563 if(!empty($groups)) // Shouldn't be... 564 { 565 foreach($groups as $group) 566 { 567 if($group['cancp'] == 1) 568 { 569 $admingroups[] = (int)$group['gid']; 570 } 571 } 572 } 573 574 if(!empty($admingroups)) 575 { 576 $sqlwhere = 'usergroup IN ('.implode(',', $admingroups).')'; 577 foreach($admingroups as $admingroup) 578 { 579 switch($db->type) 580 { 581 case 'pgsql': 582 case 'sqlite': 583 $sqlwhere .= " OR ','||additionalgroups||',' LIKE '%,{$admingroup},%'"; 584 break; 585 default: 586 $sqlwhere .= " OR CONCAT(',',additionalgroups,',') LIKE '%,{$admingroup},%'"; 587 break; 588 } 589 } 590 $q = $db->simple_select('users', 'uid,username,email,language', $sqlwhere); 591 while($recipient = $db->fetch_array($q)) 592 { 593 // First we check if the user's a super admin: if yes, we don't care about permissions 594 $is_super_admin = is_super_admin($recipient['uid']); 595 if(!$is_super_admin) 596 { 597 // Include admin functions 598 if(!file_exists(MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions.php")) 599 { 600 continue; 601 } 602 603 require_once MYBB_ROOT.$mybb->config['admin_dir']."/inc/functions.php"; 604 605 // Verify if we have permissions to access user-users 606 require_once MYBB_ROOT.$mybb->config['admin_dir']."/modules/user/module_meta.php"; 607 // Get admin permissions 608 $adminperms = get_admin_permissions($recipient['uid']); 609 if(empty($adminperms['user']['users']) || $adminperms['user']['users'] != 1) 610 { 611 continue; // No permissions 612 } 613 } 614 615 // Load language 616 if($recipient['language'] != $lang->language && $lang->language_exists($recipient['language'])) 617 { 618 $reset_lang = true; 619 $lang->set_language($recipient['language']); 620 $lang->load("member"); 621 } 622 623 $subject = $lang->sprintf($lang->newregistration_subject, $mybb->settings['bbname']); 624 $message = $lang->sprintf($lang->newregistration_message, $recipient['username'], $mybb->settings['bbname'], $user['username']); 625 my_mail($recipient['email'], $subject, $message); 626 } 627 628 // Reset language 629 if(isset($reset_lang)) 630 { 631 $lang->set_language($mybb->settings['bblanguage']); 632 $lang->load("member"); 633 } 634 } 635 636 $activationcode = random_str(); 637 $activationarray = array( 638 "uid" => $user_info['uid'], 639 "dateline" => TIME_NOW, 640 "code" => $activationcode, 641 "type" => "b" 642 ); 643 $db->insert_query("awaitingactivation", $activationarray); 644 $emailsubject = $lang->sprintf($lang->emailsubject_activateaccount, $mybb->settings['bbname']); 645 switch($mybb->settings['username_method']) 646 { 647 case 0: 648 $emailmessage = $lang->sprintf($lang->email_activateaccount, $user_info['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user_info['uid'], $activationcode); 649 break; 650 case 1: 651 $emailmessage = $lang->sprintf($lang->email_activateaccount1, $user_info['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user_info['uid'], $activationcode); 652 break; 653 case 2: 654 $emailmessage = $lang->sprintf($lang->email_activateaccount2, $user_info['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user_info['uid'], $activationcode); 655 break; 656 default: 657 $emailmessage = $lang->sprintf($lang->email_activateaccount, $user_info['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user_info['uid'], $activationcode); 658 break; 659 } 660 my_mail($user_info['email'], $emailsubject, $emailmessage); 661 662 $lang->redirect_registered_activation = $lang->sprintf($lang->redirect_registered_activation, $mybb->settings['bbname'], htmlspecialchars_uni($user_info['username'])); 663 664 $plugins->run_hooks("member_do_register_end"); 665 666 error($lang->redirect_registered_activation); 667 } 668 else 669 { 670 $lang->redirect_registered = $lang->sprintf($lang->redirect_registered, $mybb->settings['bbname'], htmlspecialchars_uni($user_info['username'])); 671 672 $plugins->run_hooks("member_do_register_end"); 673 674 redirect("index.php", $lang->redirect_registered); 675 } 676 } 677 } 678 679 if($mybb->input['action'] == "coppa_form") 680 { 681 if(!$mybb->settings['faxno']) 682 { 683 $mybb->settings['faxno'] = " "; 684 } 685 686 $plugins->run_hooks("member_coppa_form"); 687 688 eval("\$coppa_form = \"".$templates->get("member_coppa_form")."\";"); 689 output_page($coppa_form); 690 } 691 692 if($mybb->input['action'] == "register") 693 { 694 $bdaysel = ''; 695 if($mybb->settings['coppa'] == "disabled") 696 { 697 $bdaysel = $bday2blank = ''; 698 } 699 $mybb->input['bday1'] = $mybb->get_input('bday1', MyBB::INPUT_INT); 700 for($day = 1; $day <= 31; ++$day) 701 { 702 $selected = ''; 703 if($mybb->input['bday1'] == $day) 704 { 705 $selected = " selected=\"selected\""; 706 } 707 708 eval("\$bdaysel .= \"".$templates->get("member_register_day")."\";"); 709 } 710 711 $mybb->input['bday2'] = $mybb->get_input('bday2', MyBB::INPUT_INT); 712 $bdaymonthsel = array(); 713 foreach(range(1, 12) as $number) 714 { 715 $bdaymonthsel[$number] = ''; 716 } 717 $bdaymonthsel[$mybb->input['bday2']] = "selected=\"selected\""; 718 $birthday_year = $mybb->get_input('bday3', MyBB::INPUT_INT); 719 720 if($birthday_year == 0) 721 { 722 $birthday_year = ''; 723 } 724 725 $under_thirteen = false; 726 727 // Is COPPA checking enabled? 728 if($mybb->settings['coppa'] != "disabled" && !isset($mybb->input['step'])) 729 { 730 // Just selected DOB, we check 731 if($mybb->input['bday1'] && $mybb->input['bday2'] && $birthday_year) 732 { 733 my_unsetcookie("coppauser"); 734 735 $months = get_bdays($birthday_year); 736 if($mybb->input['bday2'] < 1 || $mybb->input['bday2'] > 12 || $birthday_year < (date("Y")-100) || $birthday_year > date("Y") || $mybb->input['bday1'] > $months[$mybb->input['bday2']-1]) 737 { 738 error($lang->error_invalid_birthday); 739 } 740 741 $bdaytime = @mktime(0, 0, 0, $mybb->input['bday2'], $mybb->input['bday1'], $birthday_year); 742 743 // Store DOB in cookie so we can save it with the registration 744 my_setcookie("coppadob", "{$mybb->input['bday1']}-{$mybb->input['bday2']}-{$birthday_year}", -1); 745 746 // User is <= 13, we mark as a coppa user 747 if($bdaytime >= mktime(0, 0, 0, my_date('n'), my_date('d'), my_date('Y')-13)) 748 { 749 my_setcookie("coppauser", 1, -0); 750 $under_thirteen = true; 751 } 752 else 753 { 754 my_setcookie("coppauser", 0, -0); 755 } 756 $mybb->request_method = ""; 757 } 758 // Show DOB select form 759 else 760 { 761 $plugins->run_hooks("member_register_coppa"); 762 763 my_unsetcookie("coppauser"); 764 765 $coppa_desc = $mybb->settings['coppa'] == 'deny' ? $lang->coppa_desc_for_deny : $lang->coppa_desc; 766 eval("\$coppa = \"".$templates->get("member_register_coppa")."\";"); 767 output_page($coppa); 768 exit; 769 } 770 } 771 772 if((!isset($mybb->input['agree']) && !isset($mybb->input['regsubmit'])) && $fromreg == 0 || $mybb->request_method != "post") 773 { 774 $coppa_agreement = ''; 775 // Is this user a COPPA user? We need to show the COPPA agreement too 776 if($mybb->settings['coppa'] != "disabled" && (!empty($mybb->cookies['coppauser']) || $under_thirteen)) 777 { 778 if($mybb->settings['coppa'] == "deny") 779 { 780 error($lang->error_need_to_be_thirteen); 781 } 782 $lang->coppa_agreement_1 = $lang->sprintf($lang->coppa_agreement_1, $mybb->settings['bbname']); 783 eval("\$coppa_agreement = \"".$templates->get("member_register_agreement_coppa")."\";"); 784 } 785 786 $plugins->run_hooks("member_register_agreement"); 787 788 eval("\$agreement = \"".$templates->get("member_register_agreement")."\";"); 789 output_page($agreement); 790 } 791 else 792 { 793 $plugins->run_hooks("member_register_start"); 794 795 // JS validator extra 796 if($mybb->settings['maxnamelength'] > 0 && $mybb->settings['minnamelength'] > 0) 797 { 798 $lang->js_validator_username_length = $lang->sprintf($lang->js_validator_username_length, $mybb->settings['minnamelength'], $mybb->settings['maxnamelength']); 799 } 800 801 if(isset($mybb->input['timezoneoffset'])) 802 { 803 $timezoneoffset = $mybb->get_input('timezoneoffset'); 804 } 805 else 806 { 807 $timezoneoffset = $mybb->settings['timezoneoffset']; 808 } 809 $tzselect = build_timezone_select("timezoneoffset", $timezoneoffset, true); 810 811 $stylelist = build_theme_select("style"); 812 813 if($mybb->settings['usertppoptions']) 814 { 815 $tppoptions = ''; 816 $explodedtpp = explode(",", $mybb->settings['usertppoptions']); 817 if(is_array($explodedtpp)) 818 { 819 foreach($explodedtpp as $val) 820 { 821 $val = trim($val); 822 $tpp_option = $lang->sprintf($lang->tpp_option, $val); 823 eval("\$tppoptions .= \"".$templates->get("usercp_options_tppselect_option")."\";"); 824 } 825 } 826 eval("\$tppselect = \"".$templates->get("usercp_options_tppselect")."\";"); 827 } 828 if($mybb->settings['userpppoptions']) 829 { 830 $pppoptions = ''; 831 $explodedppp = explode(",", $mybb->settings['userpppoptions']); 832 if(is_array($explodedppp)) 833 { 834 foreach($explodedppp as $val) 835 { 836 $val = trim($val); 837 $ppp_option = $lang->sprintf($lang->ppp_option, $val); 838 eval("\$pppoptions .= \"".$templates->get("usercp_options_pppselect_option")."\";"); 839 } 840 } 841 eval("\$pppselect = \"".$templates->get("usercp_options_pppselect")."\";"); 842 } 843 if($mybb->settings['usereferrals'] == 1 && !$mybb->user['uid']) 844 { 845 if(isset($mybb->cookies['mybb']['referrer'])) 846 { 847 $query = $db->simple_select("users", "uid,username", "uid='".(int)$mybb->cookies['mybb']['referrer']."'"); 848 $ref = $db->fetch_array($query); 849 $ref['username'] = htmlspecialchars_uni($ref['username']); 850 $referrername = $ref['username']; 851 } 852 elseif(!empty($referrer)) 853 { 854 $query = $db->simple_select("users", "username", "uid='".(int)$referrer['uid']."'"); 855 $ref = $db->fetch_array($query); 856 $ref['username'] = htmlspecialchars_uni($ref['username']); 857 $referrername = $ref['username']; 858 } 859 elseif(!empty($referrername)) 860 { 861 $ref = get_user_by_username($referrername); 862 if(!$ref) 863 { 864 $errors[] = $lang->error_badreferrer; 865 } 866 } 867 else 868 { 869 $referrername = ''; 870 } 871 if(isset($quickreg)) 872 { 873 $refbg = "trow1"; 874 } 875 else 876 { 877 $refbg = "trow2"; 878 } 879 eval("\$referrer = \"".$templates->get("member_register_referrer")."\";"); 880 } 881 else 882 { 883 $referrer = ''; 884 } 885 $mybb->input['profile_fields'] = $mybb->get_input('profile_fields', MyBB::INPUT_ARRAY); 886 // Custom profile fields baby! 887 $altbg = "trow1"; 888 $requiredfields = $customfields = ''; 889 890 if($mybb->settings['regtype'] == "verify" || $mybb->settings['regtype'] == "admin" || $mybb->settings['regtype'] == "both" || $mybb->get_input('coppa', MyBB::INPUT_INT) == 1) 891 { 892 $usergroup = 5; 893 } 894 else 895 { 896 $usergroup = 2; 897 } 898 899 $pfcache = $cache->read('profilefields'); 900 901 if(is_array($pfcache)) 902 { 903 $jsvar_reqfields = array(); 904 foreach($pfcache as $profilefield) 905 { 906 if($profilefield['required'] != 1 && $profilefield['registration'] != 1 || !is_member($profilefield['editableby'], array('usergroup' => $mybb->user['usergroup'], 'additionalgroups' => $usergroup))) 907 { 908 continue; 909 } 910 911 $code = $select = $val = $options = $expoptions = $useropts = ''; 912 $seloptions = array(); 913 $profilefield['type'] = htmlspecialchars_uni($profilefield['type']); 914 $thing = explode("\n", $profilefield['type'], 2); 915 $type = trim($thing[0]); 916 $options = isset($thing[1]) ? $thing[1] : null; 917 $select = ''; 918 $field = "fid{$profilefield['fid']}"; 919 $profilefield['description'] = htmlspecialchars_uni($profilefield['description']); 920 $profilefield['name'] = htmlspecialchars_uni($profilefield['name']); 921 if(!empty($errors) && isset($mybb->input['profile_fields'][$field])) 922 { 923 $userfield = $mybb->input['profile_fields'][$field]; 924 } 925 else 926 { 927 $userfield = ''; 928 } 929 if($type == "multiselect") 930 { 931 if(!empty($errors)) 932 { 933 $useropts = $userfield; 934 } 935 else 936 { 937 $useropts = explode("\n", $userfield); 938 } 939 if(is_array($useropts)) 940 { 941 foreach($useropts as $key => $val) 942 { 943 $seloptions[$val] = $val; 944 } 945 } 946 $expoptions = explode("\n", $options); 947 if(is_array($expoptions)) 948 { 949 foreach($expoptions as $key => $val) 950 { 951 $val = trim($val); 952 $val = str_replace("\n", "\\n", $val); 953 954 $sel = ""; 955 if(isset($seloptions[$val]) && $val == $seloptions[$val]) 956 { 957 $sel = ' selected="selected"'; 958 } 959 960 eval("\$select .= \"".$templates->get("usercp_profile_profilefields_select_option")."\";"); 961 } 962 if(!$profilefield['length']) 963 { 964 $profilefield['length'] = 3; 965 } 966 967 eval("\$code = \"".$templates->get("usercp_profile_profilefields_multiselect")."\";"); 968 } 969 } 970 elseif($type == "select") 971 { 972 $expoptions = explode("\n", $options); 973 if(is_array($expoptions)) 974 { 975 foreach($expoptions as $key => $val) 976 { 977 $val = trim($val); 978 $val = str_replace("\n", "\\n", $val); 979 $sel = ""; 980 if($val == $userfield) 981 { 982 $sel = ' selected="selected"'; 983 } 984 985 eval("\$select .= \"".$templates->get("usercp_profile_profilefields_select_option")."\";"); 986 } 987 if(!$profilefield['length']) 988 { 989 $profilefield['length'] = 1; 990 } 991 992 eval("\$code = \"".$templates->get("usercp_profile_profilefields_select")."\";"); 993 } 994 } 995 elseif($type == "radio") 996 { 997 $expoptions = explode("\n", $options); 998 if(is_array($expoptions)) 999 { 1000 foreach($expoptions as $key => $val) 1001 { 1002 $checked = ""; 1003 if($val == $userfield) 1004 { 1005 $checked = 'checked="checked"'; 1006 } 1007 1008 eval("\$code .= \"".$templates->get("usercp_profile_profilefields_radio")."\";"); 1009 } 1010 } 1011 } 1012 elseif($type == "checkbox") 1013 { 1014 if(!empty($errors)) 1015 { 1016 $useropts = $userfield; 1017 } 1018 else 1019 { 1020 $useropts = explode("\n", $userfield); 1021 } 1022 if(is_array($useropts)) 1023 { 1024 foreach($useropts as $key => $val) 1025 { 1026 $seloptions[$val] = $val; 1027 } 1028 } 1029 $expoptions = explode("\n", $options); 1030 if(is_array($expoptions)) 1031 { 1032 foreach($expoptions as $key => $val) 1033 { 1034 $checked = ""; 1035 if(isset($seloptions[$val]) && $val == $seloptions[$val]) 1036 { 1037 $checked = 'checked="checked"'; 1038 } 1039 1040 eval("\$code .= \"".$templates->get("usercp_profile_profilefields_checkbox")."\";"); 1041 } 1042 } 1043 } 1044 elseif($type == "textarea") 1045 { 1046 $value = htmlspecialchars_uni($userfield); 1047 eval("\$code = \"".$templates->get("usercp_profile_profilefields_textarea")."\";"); 1048 } 1049 else 1050 { 1051 $value = htmlspecialchars_uni($userfield); 1052 $maxlength = ""; 1053 if($profilefield['maxlength'] > 0) 1054 { 1055 $maxlength = " maxlength=\"{$profilefield['maxlength']}\""; 1056 } 1057 1058 eval("\$code = \"".$templates->get("usercp_profile_profilefields_text")."\";"); 1059 } 1060 1061 if($profilefield['required'] == 1) 1062 { 1063 // JS validator extra, choose correct selectors for everything except single select which always has value 1064 if($type != 'select') 1065 { 1066 $jsvar_reqfields[] = array( 1067 'type' => $type, 1068 'fid' => $field, 1069 ); 1070 } 1071 1072 eval("\$requiredfields .= \"".$templates->get("member_register_customfield")."\";"); 1073 } 1074 else 1075 { 1076 eval("\$customfields .= \"".$templates->get("member_register_customfield")."\";"); 1077 } 1078 } 1079 1080 if($requiredfields) 1081 { 1082 eval("\$requiredfields = \"".$templates->get("member_register_requiredfields")."\";"); 1083 } 1084 1085 if($customfields) 1086 { 1087 eval("\$customfields = \"".$templates->get("member_register_additionalfields")."\";"); 1088 } 1089 } 1090 1091 if(!isset($fromreg) || $fromreg == 0) 1092 { 1093 $allownoticescheck = "checked=\"checked\""; 1094 $hideemailcheck = ''; 1095 $receivepmscheck = "checked=\"checked\""; 1096 $pmnoticecheck = " checked=\"checked\""; 1097 $pmnotifycheck = ''; 1098 $invisiblecheck = ''; 1099 if($mybb->settings['dstcorrection'] == 1) 1100 { 1101 $enabledstcheck = "checked=\"checked\""; 1102 } 1103 $no_auto_subscribe_selected = $instant_email_subscribe_selected = $instant_pm_subscribe_selected = $no_subscribe_selected = ''; 1104 $dst_auto_selected = $dst_enabled_selected = $dst_disabled_selected = ''; 1105 $username = $email = $email2 = ''; 1106 $regerrors = ''; 1107 } 1108 // Spambot registration image thingy 1109 $captcha_html = 0; 1110 $regimage = ''; 1111 if($mybb->settings['captchaimage']) 1112 { 1113 require_once MYBB_ROOT.'inc/class_captcha.php'; 1114 $captcha = new captcha(true, "member_register_regimage"); 1115 1116 if($captcha->html) 1117 { 1118 $captcha_html = 1; 1119 $regimage = $captcha->html; 1120 } 1121 } 1122 1123 // Security Question 1124 $questionbox = ''; 1125 $question_exists = 0; 1126 if($mybb->settings['securityquestion']) 1127 { 1128 $sid = generate_question(); 1129 $query = $db->query(" 1130 SELECT q.question, s.sid 1131 FROM ".TABLE_PREFIX."questionsessions s 1132 LEFT JOIN ".TABLE_PREFIX."questions q ON (q.qid=s.qid) 1133 WHERE q.active='1' AND s.sid='{$sid}' 1134 "); 1135 if($db->num_rows($query) > 0) 1136 { 1137 $question_exists = 1; 1138 $question = $db->fetch_array($query); 1139 1140 //Set parser options for security question 1141 $parser_options = array( 1142 "allow_html" => 0, 1143 "allow_mycode" => 1, 1144 "allow_smilies" => 1, 1145 "allow_imgcode" => 1, 1146 "allow_videocode" => 1, 1147 "filter_badwords" => 1, 1148 "me_username" => 0, 1149 "shorten_urls" => 0, 1150 "highlight" => 0, 1151 ); 1152 1153 //Parse question 1154 $question['question'] = $parser->parse_message($question['question'], $parser_options); 1155 $question['sid'] = htmlspecialchars_uni($question['sid']); 1156 1157 $refresh = ''; 1158 // Total questions 1159 $q = $db->simple_select('questions', 'COUNT(qid) as num', 'active=1'); 1160 $num = $db->fetch_field($q, 'num'); 1161 if($num > 1) 1162 { 1163 eval("\$refresh = \"".$templates->get("member_register_question_refresh")."\";"); 1164 } 1165 1166 eval("\$questionbox = \"".$templates->get("member_register_question")."\";"); 1167 } 1168 } 1169 1170 $hiddencaptcha = ''; 1171 // Hidden CAPTCHA for Spambots 1172 if($mybb->settings['hiddencaptchaimage']) 1173 { 1174 $captcha_field = $mybb->settings['hiddencaptchaimagefield']; 1175 1176 eval("\$hiddencaptcha = \"".$templates->get("member_register_hiddencaptcha")."\";"); 1177 } 1178 if($mybb->settings['regtype'] != "randompass") 1179 { 1180 // JS validator extra 1181 $lang->js_validator_password_length = $lang->sprintf($lang->js_validator_password_length, $mybb->settings['minpasswordlength']); 1182 1183 // See if the board has "require complex passwords" enabled. 1184 if($mybb->settings['requirecomplexpasswords'] == 1) 1185 { 1186 $lang->password = $lang->complex_password = $lang->sprintf($lang->complex_password, $mybb->settings['minpasswordlength']); 1187 } 1188 eval("\$passboxes = \"".$templates->get("member_register_password")."\";"); 1189 } 1190 1191 $languages = $lang->get_languages(); 1192 $langoptions = $boardlanguage = ''; 1193 if(count($languages) > 1) 1194 { 1195 foreach($languages as $name => $language) 1196 { 1197 $language = htmlspecialchars_uni($language); 1198 1199 $sel = ''; 1200 if($mybb->get_input('language') == $name) 1201 { 1202 $sel = " selected=\"selected\""; 1203 } 1204 1205 eval('$langoptions .= "'.$templates->get('usercp_options_language_option').'";'); 1206 } 1207 1208 eval('$boardlanguage = "'.$templates->get('member_register_language').'";'); 1209 } 1210 1211 // Set the time so we can find automated signups 1212 $time = TIME_NOW; 1213 1214 $plugins->run_hooks("member_register_end"); 1215 1216 $jsvar_reqfields = json_encode($jsvar_reqfields); 1217 1218 $validator_javascript = "<script type=\"text/javascript\"> 1219 var regsettings = { 1220 requiredfields: '{$jsvar_reqfields}', 1221 minnamelength: '{$mybb->settings['minnamelength']}', 1222 maxnamelength: '{$mybb->settings['maxnamelength']}', 1223 minpasswordlength: '{$mybb->settings['minpasswordlength']}', 1224 captchaimage: '{$mybb->settings['captchaimage']}', 1225 captchahtml: '{$captcha_html}', 1226 securityquestion: '{$mybb->settings['securityquestion']}', 1227 questionexists: '{$question_exists}', 1228 requirecomplexpasswords: '{$mybb->settings['requirecomplexpasswords']}', 1229 regtype: '{$mybb->settings['regtype']}', 1230 hiddencaptchaimage: '{$mybb->settings['hiddencaptchaimage']}' 1231 }; 1232 1233 lang.js_validator_no_username = '{$lang->js_validator_no_username}'; 1234 lang.js_validator_username_length = '{$lang->js_validator_username_length}'; 1235 lang.js_validator_invalid_email = '{$lang->js_validator_invalid_email}'; 1236 lang.js_validator_email_match = '{$lang->js_validator_email_match}'; 1237 lang.js_validator_not_empty = '{$lang->js_validator_not_empty}'; 1238 lang.js_validator_password_length = '{$lang->js_validator_password_length}'; 1239 lang.js_validator_password_matches = '{$lang->js_validator_password_matches}'; 1240 lang.js_validator_no_image_text = '{$lang->js_validator_no_image_text}'; 1241 lang.js_validator_no_security_question = '{$lang->js_validator_no_security_question}'; 1242 lang.js_validator_bad_password_security = '{$lang->js_validator_bad_password_security}'; 1243 </script>\n"; 1244 1245 eval("\$registration = \"".$templates->get("member_register")."\";"); 1246 output_page($registration); 1247 } 1248 } 1249 1250 if($mybb->input['action'] == "activate") 1251 { 1252 $plugins->run_hooks("member_activate_start"); 1253 1254 if(isset($mybb->input['username'])) 1255 { 1256 $mybb->input['username'] = $mybb->get_input('username'); 1257 $options = array( 1258 'username_method' => $mybb->settings['username_method'], 1259 'fields' => '*', 1260 ); 1261 $user = get_user_by_username($mybb->input['username'], $options); 1262 if(!$user) 1263 { 1264 switch($mybb->settings['username_method']) 1265 { 1266 case 0: 1267 error($lang->error_invalidpworusername); 1268 break; 1269 case 1: 1270 error($lang->error_invalidpworusername1); 1271 break; 1272 case 2: 1273 error($lang->error_invalidpworusername2); 1274 break; 1275 default: 1276 error($lang->error_invalidpworusername); 1277 break; 1278 } 1279 } 1280 $uid = $user['uid']; 1281 } 1282 else 1283 { 1284 $user = get_user($mybb->get_input('uid', MyBB::INPUT_INT)); 1285 } 1286 if(isset($mybb->input['code']) && $user) 1287 { 1288 $query = $db->simple_select("awaitingactivation", "*", "uid='".$user['uid']."' AND (type='r' OR type='e' OR type='b')"); 1289 $activation = $db->fetch_array($query); 1290 if(!$activation) 1291 { 1292 error($lang->error_alreadyactivated); 1293 } 1294 if($activation['code'] !== $mybb->get_input('code')) 1295 { 1296 error($lang->error_badactivationcode); 1297 } 1298 1299 if($activation['type'] == "b" && $activation['validated'] == 1) 1300 { 1301 error($lang->error_alreadyvalidated); 1302 } 1303 1304 $db->delete_query("awaitingactivation", "uid='".$user['uid']."' AND (type='r' OR type='e')"); 1305 1306 if($user['usergroup'] == 5 && $activation['type'] != "e" && $activation['type'] != "b") 1307 { 1308 $db->update_query("users", array("usergroup" => 2), "uid='".$user['uid']."'"); 1309 1310 $cache->update_awaitingactivation(); 1311 } 1312 if($activation['type'] == "e") 1313 { 1314 // Email change confirmation links expire after 24 hours. 1315 if((int)$activation['dateline'] < TIME_NOW - 86400) 1316 { 1317 error($lang->error_activationexpired); 1318 } 1319 1320 $newemail = array( 1321 "email" => $db->escape_string($activation['misc']), 1322 ); 1323 $db->update_query("users", $newemail, "uid='".$user['uid']."'"); 1324 $plugins->run_hooks("member_activate_emailupdated"); 1325 1326 redirect("usercp.php", $lang->redirect_emailupdated); 1327 } 1328 elseif($activation['type'] == "b") 1329 { 1330 $update = array( 1331 "validated" => 1, 1332 ); 1333 $db->update_query("awaitingactivation", $update, "uid='".$user['uid']."' AND type='b'"); 1334 $plugins->run_hooks("member_activate_emailactivated"); 1335 1336 redirect("index.php", $lang->redirect_accountactivated_admin, "", true); 1337 } 1338 else 1339 { 1340 $plugins->run_hooks("member_activate_accountactivated"); 1341 1342 redirect("index.php", $lang->redirect_accountactivated); 1343 } 1344 } 1345 else 1346 { 1347 $plugins->run_hooks("member_activate_form"); 1348 1349 $code = htmlspecialchars_uni($mybb->get_input('code')); 1350 1351 if(!isset($user['username'])) 1352 { 1353 $user['username'] = ''; 1354 } 1355 $user['username'] = htmlspecialchars_uni($user['username']); 1356 1357 eval("\$activate = \"".$templates->get("member_activate")."\";"); 1358 output_page($activate); 1359 } 1360 } 1361 1362 if($mybb->input['action'] == "do_resendactivation" && $mybb->request_method == "post") 1363 { 1364 $plugins->run_hooks("member_do_resendactivation_start"); 1365 1366 if($mybb->settings['regtype'] == "admin") 1367 { 1368 error($lang->error_activated_by_admin); 1369 } 1370 1371 $errors = array(); 1372 1373 if($mybb->settings['captchaimage']) 1374 { 1375 require_once MYBB_ROOT.'inc/class_captcha.php'; 1376 $captcha = new captcha; 1377 1378 if($captcha->validate_captcha() == false) 1379 { 1380 // CAPTCHA validation failed 1381 foreach($captcha->get_errors() as $error) 1382 { 1383 $errors[] = $error; 1384 } 1385 } 1386 } 1387 1388 $query = $db->query(" 1389 SELECT u.uid, u.username, u.usergroup, u.email, a.code, a.type, a.validated 1390 FROM ".TABLE_PREFIX."users u 1391 LEFT JOIN ".TABLE_PREFIX."awaitingactivation a ON (a.uid=u.uid AND (a.type='r' OR a.type='b')) 1392 WHERE u.email='".$db->escape_string($mybb->get_input('email'))."' 1393 "); 1394 $numusers = $db->num_rows($query); 1395 if($numusers < 1) 1396 { 1397 error($lang->error_invalidemail); 1398 } 1399 else 1400 { 1401 if(count($errors) == 0) 1402 { 1403 while($user = $db->fetch_array($query)) 1404 { 1405 if($user['type'] == "b" && $user['validated'] == 1) 1406 { 1407 error($lang->error_activated_by_admin); 1408 } 1409 1410 if($user['usergroup'] == 5) 1411 { 1412 if(!$user['code']) 1413 { 1414 $user['code'] = random_str(); 1415 $uid = $user['uid']; 1416 $awaitingarray = array( 1417 "uid" => $uid, 1418 "dateline" => TIME_NOW, 1419 "code" => $user['code'], 1420 "type" => $user['type'] 1421 ); 1422 $db->insert_query("awaitingactivation", $awaitingarray); 1423 } 1424 $username = $user['username']; 1425 $email = $user['email']; 1426 $activationcode = $user['code']; 1427 $emailsubject = $lang->sprintf($lang->emailsubject_activateaccount, $mybb->settings['bbname']); 1428 switch($mybb->settings['username_method']) 1429 { 1430 case 0: 1431 $emailmessage = $lang->sprintf($lang->email_activateaccount, $user['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user['uid'], $activationcode); 1432 break; 1433 case 1: 1434 $emailmessage = $lang->sprintf($lang->email_activateaccount1, $user['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user['uid'], $activationcode); 1435 break; 1436 case 2: 1437 $emailmessage = $lang->sprintf($lang->email_activateaccount2, $user['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user['uid'], $activationcode); 1438 break; 1439 default: 1440 $emailmessage = $lang->sprintf($lang->email_activateaccount, $user['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user['uid'], $activationcode); 1441 break; 1442 } 1443 my_mail($email, $emailsubject, $emailmessage); 1444 } 1445 } 1446 1447 // Invalidate solved captcha 1448 if($mybb->settings['captchaimage']) 1449 { 1450 $captcha->invalidate_captcha(); 1451 } 1452 1453 $plugins->run_hooks("member_do_resendactivation_end"); 1454 1455 redirect("index.php", $lang->redirect_activationresent); 1456 } 1457 else 1458 { 1459 $mybb->input['action'] = "resendactivation"; 1460 } 1461 } 1462 } 1463 1464 if($mybb->input['action'] == "resendactivation") 1465 { 1466 $plugins->run_hooks("member_resendactivation"); 1467 1468 if($mybb->settings['regtype'] == "admin") 1469 { 1470 error($lang->error_activated_by_admin); 1471 } 1472 1473 if($mybb->user['uid'] && $mybb->user['usergroup'] != 5) 1474 { 1475 error($lang->error_alreadyactivated); 1476 } 1477 1478 $query = $db->simple_select("awaitingactivation", "*", "uid='".$mybb->user['uid']."' AND type='b'"); 1479 $activation = $db->fetch_array($query); 1480 1481 if($activation && $activation['validated'] == 1) 1482 { 1483 error($lang->error_activated_by_admin); 1484 } 1485 1486 $captcha = ''; 1487 // Generate CAPTCHA? 1488 if($mybb->settings['captchaimage']) 1489 { 1490 require_once MYBB_ROOT.'inc/class_captcha.php'; 1491 $post_captcha = new captcha(true, "post_captcha"); 1492 1493 if($post_captcha->html) 1494 { 1495 $captcha = $post_captcha->html; 1496 } 1497 } 1498 1499 if(isset($errors) && count($errors) > 0) 1500 { 1501 $errors = inline_error($errors); 1502 $email = htmlspecialchars_uni($mybb->get_input('email')); 1503 } 1504 else 1505 { 1506 $errors = ''; 1507 $email = ''; 1508 } 1509 1510 $plugins->run_hooks("member_resendactivation_end"); 1511 1512 eval("\$activate = \"".$templates->get("member_resendactivation")."\";"); 1513 output_page($activate); 1514 } 1515 1516 if($mybb->input['action'] == "do_lostpw" && $mybb->request_method == "post") 1517 { 1518 $plugins->run_hooks("member_do_lostpw_start"); 1519 1520 $errors = array(); 1521 1522 if($mybb->settings['captchaimage']) 1523 { 1524 require_once MYBB_ROOT.'inc/class_captcha.php'; 1525 $captcha = new captcha; 1526 1527 if($captcha->validate_captcha() == false) 1528 { 1529 // CAPTCHA validation failed 1530 foreach($captcha->get_errors() as $error) 1531 { 1532 $errors[] = $error; 1533 } 1534 } 1535 } 1536 1537 $query = $db->simple_select("users", "*", "email='".$db->escape_string($mybb->get_input('email'))."'"); 1538 $numusers = $db->num_rows($query); 1539 if($numusers < 1) 1540 { 1541 error($lang->error_invalidemail); 1542 } 1543 else 1544 { 1545 if(count($errors) == 0) 1546 { 1547 while($user = $db->fetch_array($query)) 1548 { 1549 $db->delete_query("awaitingactivation", "uid='{$user['uid']}' AND type='p'"); 1550 $user['activationcode'] = random_str(30); 1551 $now = TIME_NOW; 1552 $uid = $user['uid']; 1553 $awaitingarray = array( 1554 "uid" => $user['uid'], 1555 "dateline" => TIME_NOW, 1556 "code" => $user['activationcode'], 1557 "type" => "p" 1558 ); 1559 $db->insert_query("awaitingactivation", $awaitingarray); 1560 $username = $user['username']; 1561 $email = $user['email']; 1562 $activationcode = $user['activationcode']; 1563 $emailsubject = $lang->sprintf($lang->emailsubject_lostpw, $mybb->settings['bbname']); 1564 switch($mybb->settings['username_method']) 1565 { 1566 case 0: 1567 $emailmessage = $lang->sprintf($lang->email_lostpw, $username, $mybb->settings['bbname'], $mybb->settings['bburl'], $uid, $activationcode); 1568 break; 1569 case 1: 1570 $emailmessage = $lang->sprintf($lang->email_lostpw1, $username, $mybb->settings['bbname'], $mybb->settings['bburl'], $uid, $activationcode); 1571 break; 1572 case 2: 1573 $emailmessage = $lang->sprintf($lang->email_lostpw2, $username, $mybb->settings['bbname'], $mybb->settings['bburl'], $uid, $activationcode); 1574 break; 1575 default: 1576 $emailmessage = $lang->sprintf($lang->email_lostpw, $username, $mybb->settings['bbname'], $mybb->settings['bburl'], $uid, $activationcode); 1577 break; 1578 } 1579 my_mail($email, $emailsubject, $emailmessage); 1580 } 1581 1582 // Invalidate solved captcha 1583 if($mybb->settings['captchaimage']) 1584 { 1585 $captcha->invalidate_captcha(); 1586 } 1587 1588 $plugins->run_hooks("member_do_lostpw_end"); 1589 1590 redirect("index.php", $lang->redirect_lostpwsent, "", true); 1591 } 1592 else 1593 { 1594 $mybb->input['action'] = "lostpw"; 1595 } 1596 } 1597 } 1598 1599 if($mybb->input['action'] == "lostpw") 1600 { 1601 $plugins->run_hooks("member_lostpw"); 1602 1603 $captcha = ''; 1604 // Generate CAPTCHA? 1605 if($mybb->settings['captchaimage']) 1606 { 1607 require_once MYBB_ROOT.'inc/class_captcha.php'; 1608 $post_captcha = new captcha(true, "post_captcha"); 1609 1610 if($post_captcha->html) 1611 { 1612 $captcha = $post_captcha->html; 1613 } 1614 } 1615 1616 if(isset($errors) && count($errors) > 0) 1617 { 1618 $errors = inline_error($errors); 1619 $email = htmlspecialchars_uni($mybb->get_input('email')); 1620 } 1621 else 1622 { 1623 $errors = ''; 1624 $email = ''; 1625 } 1626 1627 eval("\$lostpw = \"".$templates->get("member_lostpw")."\";"); 1628 output_page($lostpw); 1629 } 1630 1631 if($mybb->input['action'] == "resetpassword") 1632 { 1633 $plugins->run_hooks("member_resetpassword_start"); 1634 1635 if(isset($mybb->input['username'])) 1636 { 1637 $mybb->input['username'] = $mybb->get_input('username'); 1638 $options = array( 1639 'username_method' => $mybb->settings['username_method'], 1640 'fields' => '*', 1641 ); 1642 $user = get_user_by_username($mybb->input['username'], $options); 1643 if(!$user) 1644 { 1645 switch($mybb->settings['username_method']) 1646 { 1647 case 0: 1648 error($lang->error_invalidpworusername); 1649 break; 1650 case 1: 1651 error($lang->error_invalidpworusername1); 1652 break; 1653 case 2: 1654 error($lang->error_invalidpworusername2); 1655 break; 1656 default: 1657 error($lang->error_invalidpworusername); 1658 break; 1659 } 1660 } 1661 } 1662 else 1663 { 1664 $user = get_user($mybb->get_input('uid', MyBB::INPUT_INT)); 1665 } 1666 1667 if(isset($mybb->input['code']) && $user) 1668 { 1669 $query = $db->simple_select("awaitingactivation", "code, dateline", "uid='".$user['uid']."' AND type='p'"); 1670 $activation = $db->fetch_array($query); 1671 if(!$activation || $activation['code'] !== $mybb->get_input('code')) 1672 { 1673 error($lang->error_badlostpwcode); 1674 } 1675 // Password reset codes expire after 24 hours. 1676 if((int)$activation['dateline'] < TIME_NOW - 86400) 1677 { 1678 $db->delete_query("awaitingactivation", "uid='".$user['uid']."' AND type='p'"); 1679 error($lang->error_resetpwcodeexpired); 1680 } 1681 $db->delete_query("awaitingactivation", "uid='".$user['uid']."' AND type='p'"); 1682 $username = $user['username']; 1683 1684 // Generate a new password, then update it 1685 $password_length = (int)$mybb->settings['minpasswordlength']; 1686 1687 if($password_length < 8) 1688 { 1689 $password_length = min(8, (int)$mybb->settings['maxpasswordlength']); 1690 } 1691 1692 // Set up user handler. 1693 require_once MYBB_ROOT.'inc/datahandlers/user.php'; 1694 $userhandler = new UserDataHandler('update'); 1695 1696 do 1697 { 1698 $password = random_str($password_length, $mybb->settings['requirecomplexpasswords']); 1699 1700 $userhandler->set_data(array( 1701 'uid' => $user['uid'], 1702 'username' => $user['username'], 1703 'email' => $user['email'], 1704 'password' => $password 1705 )); 1706 1707 $userhandler->set_validated(true); 1708 $userhandler->errors = array(); 1709 } while(!$userhandler->verify_password()); 1710 1711 $userhandler->update_user(); 1712 1713 $logindetails = array( 1714 'salt' => $userhandler->data['salt'], 1715 'password' => $userhandler->data['password'], 1716 'loginkey' => $userhandler->data['loginkey'], 1717 ); 1718 1719 $email = $user['email']; 1720 1721 $plugins->run_hooks("member_resetpassword_process"); 1722 1723 $emailsubject = $lang->sprintf($lang->emailsubject_passwordreset, $mybb->settings['bbname']); 1724 $emailmessage = $lang->sprintf($lang->email_passwordreset, $username, $mybb->settings['bbname'], $password); 1725 my_mail($email, $emailsubject, $emailmessage); 1726 1727 $plugins->run_hooks("member_resetpassword_reset"); 1728 1729 error($lang->redirect_passwordreset); 1730 } 1731 else 1732 { 1733 $plugins->run_hooks("member_resetpassword_form"); 1734 1735 switch($mybb->settings['username_method']) 1736 { 1737 case 0: 1738 $lang_username = $lang->username; 1739 break; 1740 case 1: 1741 $lang_username = $lang->username1; 1742 break; 1743 case 2: 1744 $lang_username = $lang->username2; 1745 break; 1746 default: 1747 $lang_username = $lang->username; 1748 break; 1749 } 1750 1751 $code = htmlspecialchars_uni($mybb->get_input('code')); 1752 1753 $input_username = htmlspecialchars_uni($mybb->get_input('username')); 1754 1755 eval("\$activate = \"".$templates->get("member_resetpassword")."\";"); 1756 output_page($activate); 1757 } 1758 } 1759 1760 $do_captcha = $correct = false; 1761 $inline_errors = ""; 1762 if($mybb->input['action'] == "do_login" && $mybb->request_method == "post") 1763 { 1764 verify_post_check($mybb->get_input('my_post_key')); 1765 1766 $errors = array(); 1767 1768 $plugins->run_hooks("member_do_login_start"); 1769 1770 require_once MYBB_ROOT."inc/datahandlers/login.php"; 1771 $loginhandler = new LoginDataHandler("get"); 1772 1773 if($mybb->get_input('quick_password') && $mybb->get_input('quick_username')) 1774 { 1775 $mybb->input['password'] = $mybb->get_input('quick_password'); 1776 $mybb->input['username'] = $mybb->get_input('quick_username'); 1777 $mybb->input['remember'] = $mybb->get_input('quick_remember'); 1778 } 1779 1780 $user = array( 1781 'username' => $mybb->get_input('username'), 1782 'password' => $mybb->get_input('password'), 1783 'remember' => $mybb->get_input('remember'), 1784 'imagestring' => $mybb->get_input('imagestring') 1785 ); 1786 1787 $options = array( 1788 'fields' => 'loginattempts', 1789 'username_method' => (int)$mybb->settings['username_method'], 1790 ); 1791 1792 $user_loginattempts = get_user_by_username($user['username'], $options); 1793 if(!empty($user_loginattempts)) 1794 { 1795 $user['loginattempts'] = (int)$user_loginattempts['loginattempts']; 1796 } 1797 1798 $loginhandler->set_data($user); 1799 $validated = $loginhandler->validate_login(); 1800 1801 if(!$validated) 1802 { 1803 $mybb->input['action'] = "login"; 1804 $mybb->request_method = "get"; 1805 1806 $login_user_uid = 0; 1807 if(!empty($loginhandler->login_data)) 1808 { 1809 $login_user_uid = (int)$loginhandler->login_data['uid']; 1810 $user['loginattempts'] = (int)$loginhandler->login_data['loginattempts']; 1811 } 1812 1813 // Is a fatal call if user has had too many tries 1814 $logins = login_attempt_check($login_user_uid); 1815 1816 $db->update_query("users", array('loginattempts' => 'loginattempts+1'), "uid='".$login_user_uid."'", 1, true); 1817 1818 $errors = $loginhandler->get_friendly_errors(); 1819 1820 // If we need a captcha set it here 1821 if( 1822 $mybb->settings['failedcaptchalogincount'] > 0 && 1823 ( 1824 ( 1825 isset($user['loginattempts']) && 1826 $user['loginattempts'] > $mybb->settings['failedcaptchalogincount'] 1827 ) || 1828 ( 1829 isset($mybb->cookies['loginattempts']) && 1830 (int)$mybb->cookies['loginattempts'] > $mybb->settings['failedcaptchalogincount'] 1831 ) 1832 ) 1833 ) 1834 { 1835 $do_captcha = true; 1836 $correct = $loginhandler->captcha_verified; 1837 } 1838 } 1839 else if($validated && $loginhandler->captcha_verified == true) 1840 { 1841 // Successful login 1842 if($loginhandler->login_data['coppauser']) 1843 { 1844 error($lang->error_awaitingcoppa); 1845 } 1846 1847 $loginhandler->complete_login(); 1848 1849 $plugins->run_hooks("member_do_login_end"); 1850 1851 $mybb->input['url'] = $mybb->get_input('url'); 1852 1853 if(!empty($mybb->input['url']) && my_strpos(basename($mybb->input['url']), 'member.php') === false && !preg_match('#^javascript:#i', $mybb->input['url'])) 1854 { 1855 if((my_strpos(basename($mybb->input['url']), 'newthread.php') !== false || my_strpos(basename($mybb->input['url']), 'newreply.php') !== false) && my_strpos($mybb->input['url'], '&processed=1') !== false) 1856 { 1857 $mybb->input['url'] = str_replace('&processed=1', '', $mybb->input['url']); 1858 } 1859 1860 $mybb->input['url'] = str_replace('&', '&', $mybb->input['url']); 1861 1862 if(my_strpos($mybb->input['url'], $mybb->settings['bburl'].'/') !== 0) 1863 { 1864 if(my_strpos($mybb->input['url'], '/') === 0) 1865 { 1866 $mybb->input['url'] = my_substr($mybb->input['url'], 1); 1867 } 1868 $url_segments = explode('/', $mybb->input['url']); 1869 $mybb->input['url'] = $mybb->settings['bburl'].'/'.end($url_segments); 1870 } 1871 1872 // Redirect to the URL if it is not member.php 1873 redirect($mybb->input['url'], $lang->redirect_loggedin); 1874 } 1875 else 1876 { 1877 1878 redirect("index.php", $lang->redirect_loggedin); 1879 } 1880 } 1881 1882 $plugins->run_hooks("member_do_login_end"); 1883 } 1884 1885 if($mybb->input['action'] == "login") 1886 { 1887 $plugins->run_hooks("member_login"); 1888 1889 $member_loggedin_notice = ""; 1890 if($mybb->user['uid'] != 0) 1891 { 1892 $mybb->user['username'] = htmlspecialchars_uni($mybb->user['username']); 1893 $lang->already_logged_in = $lang->sprintf($lang->already_logged_in, build_profile_link($mybb->user['username'], $mybb->user['uid'])); 1894 eval("\$member_loggedin_notice = \"".$templates->get("member_loggedin_notice")."\";"); 1895 } 1896 1897 // Checks to make sure the user can login; they haven't had too many tries at logging in. 1898 // Is a fatal call if user has had too many tries. This particular check uses cookies, as a uid is not set yet 1899 // and we can't check loginattempts in the db 1900 login_attempt_check(); 1901 1902 // Redirect to the page where the user came from, but not if that was the login page. 1903 if(isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], "action=login") === false) 1904 { 1905 $redirect_url = htmlentities($_SERVER['HTTP_REFERER']); 1906 } 1907 else 1908 { 1909 $redirect_url = ''; 1910 } 1911 1912 $captcha = ''; 1913 // Show captcha image for guests if enabled and only if we have to do 1914 if($mybb->settings['captchaimage'] && $do_captcha == true) 1915 { 1916 require_once MYBB_ROOT.'inc/class_captcha.php'; 1917 $login_captcha = new captcha(false, "post_captcha"); 1918 1919 if($login_captcha->type == captcha::DEFAULT_CAPTCHA) 1920 { 1921 if(!$correct) 1922 { 1923 $login_captcha->build_captcha(); 1924 } 1925 else 1926 { 1927 $captcha = $login_captcha->build_hidden_captcha(); 1928 } 1929 } 1930 elseif(in_array($login_captcha->type, array(captcha::NOCAPTCHA_RECAPTCHA, captcha::RECAPTCHA_INVISIBLE, captcha::RECAPTCHA_V3))) 1931 { 1932 $login_captcha->build_recaptcha(); 1933 } 1934 elseif(in_array($login_captcha->type, array(captcha::HCAPTCHA, captcha::HCAPTCHA_INVISIBLE))) 1935 { 1936 $login_captcha->build_hcaptcha(); 1937 } 1938 elseif($login_captcha->type == captcha::CFTURNSTILE) 1939 { 1940 $login_captcha->build_cfturnstile(); 1941 } 1942 1943 if($login_captcha->html) 1944 { 1945 $captcha = $login_captcha->html; 1946 } 1947 } 1948 1949 $username = ""; 1950 $password = ""; 1951 if(isset($mybb->input['username']) && $mybb->request_method == "post") 1952 { 1953 $username = htmlspecialchars_uni($mybb->get_input('username')); 1954 } 1955 1956 if(isset($mybb->input['password']) && $mybb->request_method == "post") 1957 { 1958 $password = htmlspecialchars_uni($mybb->get_input('password')); 1959 } 1960 1961 if(!empty($errors)) 1962 { 1963 $mybb->input['action'] = "login"; 1964 $mybb->request_method = "get"; 1965 1966 $inline_errors = inline_error($errors); 1967 } 1968 1969 switch($mybb->settings['username_method']) 1970 { 1971 case 1: 1972 $lang->username = $lang->username1; 1973 break; 1974 case 2: 1975 $lang->username = $lang->username2; 1976 break; 1977 default: 1978 break; 1979 } 1980 1981 $plugins->run_hooks("member_login_end"); 1982 1983 eval("\$login = \"".$templates->get("member_login")."\";"); 1984 output_page($login); 1985 } 1986 1987 if($mybb->input['action'] == "logout") 1988 { 1989 $plugins->run_hooks("member_logout_start"); 1990 1991 if(!$mybb->user['uid']) 1992 { 1993 redirect("index.php", $lang->redirect_alreadyloggedout); 1994 } 1995 1996 // Check session ID if we have one 1997 if(isset($mybb->input['sid']) && $mybb->get_input('sid') !== $session->sid) 1998 { 1999 error($lang->error_notloggedout); 2000 } 2001 // Otherwise, check logoutkey 2002 else if(!isset($mybb->input['sid']) && $mybb->get_input('logoutkey') !== $mybb->user['logoutkey']) 2003 { 2004 error($lang->error_notloggedout); 2005 } 2006 2007 my_unsetcookie("mybbuser"); 2008 my_unsetcookie("sid"); 2009 2010 if($mybb->user['uid']) 2011 { 2012 $time = TIME_NOW; 2013 // Run this after the shutdown query from session system 2014 $db->shutdown_query("UPDATE ".TABLE_PREFIX."users SET lastvisit='{$time}', lastactive='{$time}' WHERE uid='{$mybb->user['uid']}'"); 2015 $db->delete_query("sessions", "sid = '{$session->sid}'"); 2016 } 2017 2018 $plugins->run_hooks("member_logout_end"); 2019 2020 redirect("index.php", $lang->redirect_loggedout); 2021 } 2022 2023 if($mybb->input['action'] == "viewnotes") 2024 { 2025 $uid = $mybb->get_input('uid', MyBB::INPUT_INT); 2026 $user = get_user($uid); 2027 2028 // Make sure we are looking at a real user here. 2029 if(!$user) 2030 { 2031 error($lang->error_nomember); 2032 } 2033 2034 if($mybb->user['uid'] == 0 || $mybb->usergroup['canmodcp'] != 1) 2035 { 2036 error_no_permission(); 2037 } 2038 2039 $user['username'] = htmlspecialchars_uni($user['username']); 2040 $lang->view_notes_for = $lang->sprintf($lang->view_notes_for, $user['username']); 2041 2042 $user['usernotes'] = nl2br(htmlspecialchars_uni($user['usernotes'])); 2043 2044 $plugins->run_hooks('member_viewnotes'); 2045 2046 eval("\$viewnotes = \"".$templates->get("member_viewnotes", 1, 0)."\";"); 2047 echo $viewnotes; 2048 exit; 2049 } 2050 2051 if($mybb->input['action'] == "profile") 2052 { 2053 if($mybb->usergroup['canviewprofiles'] == 0) 2054 { 2055 error_no_permission(); 2056 } 2057 2058 $uid = $mybb->get_input('uid', MyBB::INPUT_INT); 2059 if($uid) 2060 { 2061 $memprofile = get_user($uid); 2062 } 2063 elseif($mybb->user['uid']) 2064 { 2065 $memprofile = $mybb->user; 2066 } 2067 else 2068 { 2069 $memprofile = false; 2070 } 2071 2072 if(!$memprofile) 2073 { 2074 error($lang->error_nomember); 2075 } 2076 2077 $uid = $memprofile['uid']; 2078 2079 $plugins->run_hooks("member_profile_start"); 2080 2081 $me_username = $memprofile['username']; 2082 $memprofile['username'] = htmlspecialchars_uni($memprofile['username']); 2083 $lang->profile = $lang->sprintf($lang->profile, $memprofile['username']); 2084 2085 // Get member's permissions 2086 $memperms = user_permissions($memprofile['uid']); 2087 2088 // Set display group 2089 $displaygroupfields = array("title", "description", "namestyle", "usertitle", "stars", "starimage", "image"); 2090 2091 if(!$memprofile['displaygroup']) 2092 { 2093 $memprofile['displaygroup'] = $memprofile['usergroup']; 2094 } 2095 2096 $displaygroup = usergroup_displaygroup($memprofile['displaygroup']); 2097 if(is_array($displaygroup)) 2098 { 2099 $memperms = array_merge($memperms, $displaygroup); 2100 } 2101 2102 $lang->nav_profile = $lang->sprintf($lang->nav_profile, $memprofile['username']); 2103 add_breadcrumb($lang->nav_profile); 2104 2105 $lang->users_forum_info = $lang->sprintf($lang->users_forum_info, $memprofile['username']); 2106 $lang->users_contact_details = $lang->sprintf($lang->users_contact_details, $memprofile['username']); 2107 $lang->send_pm = $lang->sprintf($lang->send_pm, $memprofile['username']); 2108 $lang->away_note = $lang->sprintf($lang->away_note, $memprofile['username']); 2109 $lang->users_additional_info = $lang->sprintf($lang->users_additional_info, $memprofile['username']); 2110 $lang->users_signature = $lang->sprintf($lang->users_signature, $memprofile['username']); 2111 $lang->send_user_email = $lang->sprintf($lang->send_user_email, $memprofile['username']); 2112 2113 $useravatar = format_avatar($memprofile['avatar'], $memprofile['avatardimensions']); 2114 eval("\$avatar = \"".$templates->get("member_profile_avatar")."\";"); 2115 2116 $website = $sendemail = $sendpm = $contact_details = ''; 2117 2118 if(my_validate_url($memprofile['website']) && !is_member($mybb->settings['hidewebsite']) && $memperms['canchangewebsite'] == 1) 2119 { 2120 $memprofile['website'] = htmlspecialchars_uni($memprofile['website']); 2121 $bgcolor = alt_trow(); 2122 eval("\$website = \"".$templates->get("member_profile_website")."\";"); 2123 } 2124 2125 if($mybb->usergroup['cansendemail'] == 1 && $uid != $mybb->user['uid'] && $memprofile['hideemail'] != 1 && (my_strpos(",".$memprofile['ignorelist'].",", ",".$mybb->user['uid'].",") === false || $mybb->usergroup['cansendemailoverride'] != 0)) 2126 { 2127 $bgcolor = alt_trow(); 2128 eval("\$sendemail = \"".$templates->get("member_profile_email")."\";"); 2129 } 2130 2131 if($mybb->settings['enablepms'] != 0 && $uid != $mybb->user['uid'] && $mybb->usergroup['canusepms'] == 1 && (($memprofile['receivepms'] != 0 && $memperms['canusepms'] != 0 && my_strpos(",".$memprofile['ignorelist'].",", ",".$mybb->user['uid'].",") === false) || $mybb->usergroup['canoverridepm'] == 1)) 2132 { 2133 $bgcolor = alt_trow(); 2134 eval('$sendpm = "'.$templates->get("member_profile_pm").'";'); 2135 } 2136 2137 if($sendemail || $sendpm || $website) 2138 { 2139 eval('$contact_details = "'.$templates->get("member_profile_contact_details").'";'); 2140 } 2141 2142 $signature = ''; 2143 if($memprofile['signature'] && ($memprofile['suspendsignature'] == 0 || $memprofile['suspendsigtime'] < TIME_NOW) && !is_member($mybb->settings['hidesignatures']) && $memperms['canusesig'] && $memperms['canusesigxposts'] <= $memprofile['postnum']) 2144 { 2145 $sig_parser = array( 2146 "allow_html" => $mybb->settings['sightml'], 2147 "allow_mycode" => $mybb->settings['sigmycode'], 2148 "allow_smilies" => $mybb->settings['sigsmilies'], 2149 "allow_imgcode" => $mybb->settings['sigimgcode'], 2150 "me_username" => $me_username, 2151 "filter_badwords" => 1 2152 ); 2153 2154 if($memperms['signofollow']) 2155 { 2156 $sig_parser['nofollow_on'] = 1; 2157 } 2158 2159 if($mybb->user['uid'] != 0 && $mybb->user['showimages'] != 1 || $mybb->settings['guestimages'] != 1 && $mybb->user['uid'] == 0) 2160 { 2161 $sig_parser['allow_imgcode'] = 0; 2162 } 2163 2164 $memprofile['signature'] = $parser->parse_message($memprofile['signature'], $sig_parser); 2165 eval("\$signature = \"".$templates->get("member_profile_signature")."\";"); 2166 } 2167 2168 $daysreg = (TIME_NOW - $memprofile['regdate']) / (24*3600); 2169 2170 if($daysreg < 1) 2171 { 2172 $daysreg = 1; 2173 } 2174 2175 $stats = $cache->read("stats"); 2176 2177 // Format post count, per day count and percent of total 2178 $ppd = $memprofile['postnum'] / $daysreg; 2179 $ppd = round($ppd, 2); 2180 if($ppd > $memprofile['postnum']) 2181 { 2182 $ppd = $memprofile['postnum']; 2183 } 2184 2185 $numposts = $stats['numposts']; 2186 if($numposts == 0) 2187 { 2188 $post_percent = "0"; 2189 } 2190 else 2191 { 2192 $post_percent = $memprofile['postnum']*100/$numposts; 2193 $post_percent = round($post_percent, 2); 2194 } 2195 2196 if($post_percent > 100) 2197 { 2198 $post_percent = 100; 2199 } 2200 2201 // Format thread count, per day count and percent of total 2202 $tpd = $memprofile['threadnum'] / $daysreg; 2203 $tpd = round($tpd, 2); 2204 if($tpd > $memprofile['threadnum']) 2205 { 2206 $tpd = $memprofile['threadnum']; 2207 } 2208 2209 $numthreads = $stats['numthreads']; 2210 if($numthreads == 0) 2211 { 2212 $thread_percent = "0"; 2213 } 2214 else 2215 { 2216 $thread_percent = $memprofile['threadnum']*100/$numthreads; 2217 $thread_percent = round($thread_percent, 2); 2218 } 2219 2220 if($thread_percent > 100) 2221 { 2222 $thread_percent = 100; 2223 } 2224 2225 $findposts = $findthreads = ''; 2226 if($mybb->usergroup['cansearch'] == 1) 2227 { 2228 if(!empty($memprofile['postnum'])) 2229 { 2230 eval("\$findposts = \"".$templates->get("member_profile_findposts")."\";"); 2231 } 2232 if(!empty($memprofile['threadnum'])) 2233 { 2234 eval("\$findthreads = \"".$templates->get("member_profile_findthreads")."\";"); 2235 } 2236 } 2237 2238 $awaybit = ''; 2239 if($memprofile['away'] == 1 && $mybb->settings['allowaway'] != 0) 2240 { 2241 $lang->away_note = $lang->sprintf($lang->away_note, $memprofile['username']); 2242 $awaydate = my_date($mybb->settings['dateformat'], $memprofile['awaydate']); 2243 if(!empty($memprofile['awayreason'])) 2244 { 2245 $reason = $parser->parse_badwords($memprofile['awayreason']); 2246 $awayreason = htmlspecialchars_uni($reason); 2247 } 2248 else 2249 { 2250 $awayreason = $lang->away_no_reason; 2251 } 2252 if($memprofile['returndate'] == '') 2253 { 2254 $returndate = "$lang->unknown"; 2255 } 2256 else 2257 { 2258 $returnhome = explode("-", $memprofile['returndate']); 2259 2260 // PHP native date functions use integers so timestamps for years after 2038 will not work 2261 // Thus we use adodb_mktime 2262 if($returnhome[2] >= 2038) 2263 { 2264 require_once MYBB_ROOT."inc/functions_time.php"; 2265 $returnmkdate = adodb_mktime(0, 0, 0, $returnhome[1], $returnhome[0], $returnhome[2]); 2266 $returndate = my_date($mybb->settings['dateformat'], $returnmkdate, "", 1, true); 2267 } 2268 else 2269 { 2270 $returnmkdate = mktime(0, 0, 0, $returnhome[1], $returnhome[0], $returnhome[2]); 2271 $returndate = my_date($mybb->settings['dateformat'], $returnmkdate); 2272 } 2273 2274 // If our away time has expired already, we should be back, right? 2275 if($returnmkdate < TIME_NOW) 2276 { 2277 $db->update_query('users', array('away' => '0', 'awaydate' => '0', 'returndate' => '', 'awayreason' => ''), 'uid=\''.(int)$memprofile['uid'].'\''); 2278 2279 // Update our status to "not away" 2280 $memprofile['away'] = 0; 2281 } 2282 } 2283 2284 // Check if our away status is set to 1, it may have been updated already (see a few lines above) 2285 if($memprofile['away'] == 1) 2286 { 2287 eval("\$awaybit = \"".$templates->get("member_profile_away")."\";"); 2288 } 2289 } 2290 2291 $memprofile['timezone'] = (float)$memprofile['timezone']; 2292 2293 if($memprofile['dst'] == 1) 2294 { 2295 $memprofile['timezone']++; 2296 if(my_substr($memprofile['timezone'], 0, 1) != "-") 2297 { 2298 $memprofile['timezone'] = "+{$memprofile['timezone']}"; 2299 } 2300 } 2301 2302 $memregdate = my_date($mybb->settings['dateformat'], $memprofile['regdate']); 2303 $memlocaldate = gmdate($mybb->settings['dateformat'], TIME_NOW + ($memprofile['timezone'] * 3600)); 2304 $memlocaltime = gmdate($mybb->settings['timeformat'], TIME_NOW + ($memprofile['timezone'] * 3600)); 2305 2306 $localtime = $lang->sprintf($lang->local_time_format, $memlocaldate, $memlocaltime); 2307 2308 if($memprofile['birthday']) 2309 { 2310 $membday = explode("-", $memprofile['birthday']); 2311 2312 if($memprofile['birthdayprivacy'] != 'none') 2313 { 2314 if($membday[0] && $membday[1] && $membday[2]) 2315 { 2316 $lang->membdayage = $lang->sprintf($lang->membdayage, get_age($memprofile['birthday'])); 2317 2318 $bdayformat = fix_mktime($mybb->settings['dateformat'], $membday[2]); 2319 $membday = mktime(0, 0, 0, $membday[1], $membday[0], $membday[2]); 2320 $membday = date($bdayformat, $membday); 2321 2322 $membdayage = $lang->membdayage; 2323 } 2324 elseif($membday[2]) 2325 { 2326 $membday = mktime(0, 0, 0, 1, 1, $membday[2]); 2327 $membday = date("Y", $membday); 2328 $membdayage = ''; 2329 } 2330 else 2331 { 2332 $membday = mktime(0, 0, 0, $membday[1], $membday[0], 0); 2333 $membday = date("F j", $membday); 2334 $membdayage = ''; 2335 } 2336 } 2337 2338 if($memprofile['birthdayprivacy'] == 'age') 2339 { 2340 $membday = $lang->birthdayhidden; 2341 } 2342 else if($memprofile['birthdayprivacy'] == 'none') 2343 { 2344 $membday = $lang->birthdayhidden; 2345 $membdayage = ''; 2346 } 2347 } 2348 else 2349 { 2350 $membday = $lang->not_specified; 2351 $membdayage = ''; 2352 } 2353 2354 // Get the user title for this user 2355 unset($stars); 2356 $usertitle = ''; 2357 $starimage = ''; 2358 if(trim($memprofile['usertitle']) != '') 2359 { 2360 // User has custom user title 2361 $usertitle = $memprofile['usertitle']; 2362 } 2363 elseif(trim($memperms['usertitle']) != '') 2364 { 2365 // User has group title 2366 $usertitle = $memperms['usertitle']; 2367 } 2368 else 2369 { 2370 if(!isset($usertitles)) 2371 { 2372 $usertitles = $cache->read('usertitles'); 2373 } 2374 2375 // No usergroup title so get a default one 2376 if(is_array($usertitles)) 2377 { 2378 foreach($usertitles as $title) 2379 { 2380 if($memprofile['postnum'] >= $title['posts']) 2381 { 2382 $usertitle = $title['title']; 2383 $stars = $title['stars']; 2384 $starimage = $title['starimage']; 2385 2386 break; 2387 } 2388 } 2389 } 2390 } 2391 2392 $usertitle = htmlspecialchars_uni($usertitle); 2393 2394 if($memperms['stars'] || $memperms['usertitle']) 2395 { 2396 // Set the number of stars if display group has constant number of stars 2397 $stars = $memperms['stars']; 2398 } 2399 elseif(!isset($stars)) 2400 { 2401 if(!isset($usertitles)) 2402 { 2403 $usertitles = $cache->read('usertitles'); 2404 } 2405 2406 // This is for cases where the user has a title, but the group has no defined number of stars (use number of stars as per default usergroups) 2407 if(is_array($usertitles)) 2408 { 2409 foreach($usertitles as $title) 2410 { 2411 if($memprofile['postnum'] >= $title['posts']) 2412 { 2413 $stars = $title['stars']; 2414 $starimage = $title['starimage']; 2415 break; 2416 } 2417 } 2418 } 2419 2420 if(!isset($stars)) 2421 { 2422 $stars = 0; 2423 } 2424 } 2425 2426 $groupimage = ''; 2427 if(!empty($memperms['image'])) 2428 { 2429 if(!empty($mybb->user['language'])) 2430 { 2431 $language = $mybb->user['language']; 2432 } 2433 else 2434 { 2435 $language = $mybb->settings['bblanguage']; 2436 } 2437 $memperms['image'] = str_replace("{lang}", $language, $memperms['image']); 2438 $memperms['image'] = str_replace("{theme}", $theme['imgdir'], $memperms['image']); 2439 eval("\$groupimage = \"".$templates->get("member_profile_groupimage")."\";"); 2440 } 2441 2442 if(empty($starimage)) 2443 { 2444 $starimage = $memperms['starimage']; 2445 } 2446 2447 if(!empty($starimage)) 2448 { 2449 // Only display stars if we have an image to use... 2450 $starimage = str_replace("{theme}", $theme['imgdir'], $starimage); 2451 $userstars = ''; 2452 for($i = 0; $i < $stars; ++$i) 2453 { 2454 eval("\$userstars .= \"".$templates->get("member_profile_userstar", 1, 0)."\";"); 2455 } 2456 } 2457 2458 // User is currently online and this user has permissions to view the user on the WOL 2459 $timesearch = TIME_NOW - $mybb->settings['wolcutoffmins']*60; 2460 $query = $db->simple_select("sessions", "location,nopermission", "uid='$uid' AND time>'{$timesearch}'", array('order_by' => 'time', 'order_dir' => 'DESC', 'limit' => 1)); 2461 $session = $db->fetch_array($query); 2462 2463 $timeonline = $lang->none_registered; 2464 $memlastvisitdate = $lang->lastvisit_never; 2465 $last_seen = max(array($memprofile['lastactive'], $memprofile['lastvisit'])); 2466 if(!empty($last_seen)) 2467 { 2468 // We have some stamp here 2469 if($memprofile['invisible'] == 1 && $mybb->usergroup['canviewwolinvis'] != 1 && $memprofile['uid'] != $mybb->user['uid']) 2470 { 2471 $memlastvisitdate = $lang->lastvisit_hidden; 2472 $online_status = $timeonline = $lang->timeonline_hidden; 2473 } 2474 else 2475 { 2476 $memlastvisitdate = my_date('relative', $last_seen); 2477 2478 if($memprofile['timeonline'] > 0) 2479 { 2480 $timeonline = nice_time($memprofile['timeonline']); 2481 } 2482 2483 // Online? 2484 if(!empty($session)) 2485 { 2486 // Fetch their current location 2487 $lang->load("online"); 2488 require_once MYBB_ROOT."inc/functions_online.php"; 2489 $activity = fetch_wol_activity($session['location'], $session['nopermission']); 2490 $location = build_friendly_wol_location($activity); 2491 $location_time = my_date($mybb->settings['timeformat'], $last_seen); 2492 2493 eval("\$online_status = \"".$templates->get("member_profile_online")."\";"); 2494 } 2495 } 2496 } 2497 2498 if(!isset($online_status)) 2499 { 2500 eval("\$online_status = \"".$templates->get("member_profile_offline")."\";"); 2501 } 2502 2503 // Reset the background colours to keep it inline 2504 $alttrow = 'trow1'; 2505 2506 // Build Referral 2507 $referrals = ''; 2508 if($mybb->settings['usereferrals'] == 1) 2509 { 2510 $bg_color = alt_trow(); 2511 2512 $uid = (int) $memprofile['uid']; 2513 $referral_count = $memprofile['referrals']; 2514 if ($referral_count > 0) { 2515 eval("\$memprofile['referrals'] = \"".$templates->get('member_referrals_link')."\";"); 2516 } 2517 2518 eval("\$referrals = \"".$templates->get('member_profile_referrals')."\";"); 2519 } 2520 2521 // Fetch the reputation for this user 2522 $reputation = ''; 2523 if($memperms['usereputationsystem'] == 1 && $mybb->settings['enablereputation'] == 1) 2524 { 2525 $bg_color = alt_trow(); 2526 $reputation = get_reputation($memprofile['reputation']); 2527 2528 // If this user has permission to give reputations show the vote link 2529 $vote_link = ''; 2530 if($mybb->usergroup['cangivereputations'] == 1 && $memprofile['uid'] != $mybb->user['uid'] && ($mybb->settings['posrep'] || $mybb->settings['neurep'] || $mybb->settings['negrep'])) 2531 { 2532 eval("\$vote_link = \"".$templates->get("member_profile_reputation_vote")."\";"); 2533 } 2534 2535 eval("\$reputation = \"".$templates->get("member_profile_reputation")."\";"); 2536 } 2537 2538 $warning_level = ''; 2539 if($mybb->settings['enablewarningsystem'] != 0 && $memperms['canreceivewarnings'] != 0 && ($mybb->usergroup['canwarnusers'] != 0 || ($mybb->user['uid'] == $memprofile['uid'] && $mybb->settings['canviewownwarning'] != 0))) 2540 { 2541 $bg_color = alt_trow(); 2542 2543 if($mybb->settings['maxwarningpoints'] < 1) 2544 { 2545 $mybb->settings['maxwarningpoints'] = 10; 2546 } 2547 2548 $warning_level = round($memprofile['warningpoints']/$mybb->settings['maxwarningpoints']*100); 2549 2550 if($warning_level > 100) 2551 { 2552 $warning_level = 100; 2553 } 2554 2555 $warning_level = get_colored_warning_level($warning_level); 2556 if($mybb->usergroup['canwarnusers'] != 0) 2557 { 2558 eval("\$warn_user = \"".$templates->get("member_profile_warn")."\";"); 2559 eval("\$warning_level = \"".$templates->get("member_profile_warninglevel_link")."\";"); 2560 } 2561 else 2562 { 2563 eval("\$warning_level = \"".$templates->get("member_profile_warninglevel")."\";"); 2564 } 2565 } 2566 2567 $bgcolor = $alttrow = 'trow1'; 2568 $customfields = $profilefields = ''; 2569 2570 $query = $db->simple_select("userfields", "*", "ufid = '{$uid}'"); 2571 $userfields = $db->fetch_array($query); 2572 2573 // If this user is an Administrator or a Moderator then we wish to show all profile fields 2574 $pfcache = $cache->read('profilefields'); 2575 2576 if(is_array($pfcache)) 2577 { 2578 foreach($pfcache as $customfield) 2579 { 2580 if($mybb->usergroup['cancp'] != 1 && $mybb->usergroup['issupermod'] != 1 && $mybb->usergroup['canmodcp'] != 1 && !is_member($customfield['viewableby']) || !$customfield['profile']) 2581 { 2582 continue; 2583 } 2584 2585 $thing = explode("\n", $customfield['type'], "2"); 2586 $type = trim($thing[0]); 2587 2588 $customfieldval = $customfield_val = ''; 2589 $field = "fid{$customfield['fid']}"; 2590 2591 if(isset($userfields[$field])) 2592 { 2593 $useropts = explode("\n", $userfields[$field]); 2594 $customfieldval = $comma = ''; 2595 if(is_array($useropts) && ($type == "multiselect" || $type == "checkbox")) 2596 { 2597 foreach($useropts as $val) 2598 { 2599 if($val != '') 2600 { 2601 $val = htmlspecialchars_uni($val); 2602 2603 eval("\$customfield_val .= \"".$templates->get("member_profile_customfields_field_multi_item")."\";"); 2604 } 2605 } 2606 if($customfield_val != '') 2607 { 2608 eval("\$customfieldval = \"".$templates->get("member_profile_customfields_field_multi")."\";"); 2609 } 2610 } 2611 else 2612 { 2613 $parser_options = array( 2614 "allow_html" => $customfield['allowhtml'], 2615 "allow_mycode" => $customfield['allowmycode'], 2616 "allow_smilies" => $customfield['allowsmilies'], 2617 "allow_imgcode" => $customfield['allowimgcode'], 2618 "allow_videocode" => $customfield['allowvideocode'], 2619 #"nofollow_on" => 1, 2620 "filter_badwords" => 1 2621 ); 2622 2623 if($customfield['type'] == "textarea") 2624 { 2625 $parser_options['me_username'] = $memprofile['username']; 2626 } 2627 else 2628 { 2629 $parser_options['nl2br'] = 0; 2630 } 2631 2632 if($mybb->user['uid'] != 0 && $mybb->user['showimages'] != 1 || $mybb->settings['guestimages'] != 1 && $mybb->user['uid'] == 0) 2633 { 2634 $parser_options['allow_imgcode'] = 0; 2635 } 2636 2637 $customfieldval = $parser->parse_message($userfields[$field], $parser_options); 2638 } 2639 } 2640 2641 if($customfieldval) 2642 { 2643 $customfield['name'] = htmlspecialchars_uni($customfield['name']); 2644 eval("\$customfields .= \"".$templates->get("member_profile_customfields_field")."\";"); 2645 $bgcolor = alt_trow(); 2646 } 2647 } 2648 } 2649 2650 if($customfields) 2651 { 2652 eval("\$profilefields = \"".$templates->get("member_profile_customfields")."\";"); 2653 } 2654 2655 $memprofile['postnum'] = my_number_format($memprofile['postnum']); 2656 $lang->ppd_percent_total = $lang->sprintf($lang->ppd_percent_total, my_number_format($ppd), $post_percent); 2657 2658 $memprofile['threadnum'] = my_number_format($memprofile['threadnum']); 2659 $lang->tpd_percent_total = $lang->sprintf($lang->tpd_percent_total, my_number_format($tpd), $thread_percent); 2660 2661 $formattedname = format_name($memprofile['username'], $memprofile['usergroup'], $memprofile['displaygroup']); 2662 2663 $bannedbit = ''; 2664 if($memperms['isbannedgroup'] == 1 && $mybb->usergroup['canbanusers'] == 1) 2665 { 2666 // Fetch details on their ban 2667 $query = $db->simple_select('banned b LEFT JOIN '.TABLE_PREFIX.'users a ON (b.admin=a.uid)', 'b.*, a.username AS adminuser', "b.uid='{$uid}'", array('limit' => 1)); 2668 2669 if($db->num_rows($query)) 2670 { 2671 $memban = $db->fetch_array($query); 2672 2673 if($memban['reason']) 2674 { 2675 $memban['reason'] = htmlspecialchars_uni($parser->parse_badwords($memban['reason'])); 2676 } 2677 else 2678 { 2679 $memban['reason'] = $lang->na; 2680 } 2681 2682 if($memban['lifted'] == 'perm' || $memban['lifted'] == '' || $memban['bantime'] == 'perm' || $memban['bantime'] == '---') 2683 { 2684 $banlength = $lang->permanent; 2685 $timeremaining = $lang->na; 2686 $banned_class = "normal_banned"; 2687 } 2688 else 2689 { 2690 // Set up the array of ban times. 2691 $bantimes = fetch_ban_times(); 2692 2693 $banlength = $bantimes[$memban['bantime']]; 2694 $remaining = $memban['lifted']-TIME_NOW; 2695 2696 $timeremaining = nice_time($remaining, array('short' => 1, 'seconds' => false)).""; 2697 2698 $banned_class = ''; 2699 if($remaining < 3600) 2700 { 2701 $banned_class = "high_banned"; 2702 } 2703 else if($remaining < 86400) 2704 { 2705 $banned_class = "moderate_banned"; 2706 } 2707 else if($remaining < 604800) 2708 { 2709 $banned_class = "low_banned"; 2710 } 2711 else 2712 { 2713 $banned_class = "normal_banned"; 2714 } 2715 } 2716 eval('$timeremaining = "'.$templates->get('member_profile_banned_remaining').'";'); 2717 2718 $memban['adminuser'] = build_profile_link(htmlspecialchars_uni($memban['adminuser']), $memban['admin']); 2719 2720 // Display a nice warning to the user 2721 eval('$bannedbit = "'.$templates->get('member_profile_banned').'";'); 2722 } 2723 else 2724 { 2725 // TODO: more specific output for converted/merged boards where no ban record is merged. 2726 $bannedbit = ''; 2727 } 2728 } 2729 2730 $adminoptions = ''; 2731 if($mybb->usergroup['cancp'] == 1 && $mybb->config['hide_admin_links'] != 1) 2732 { 2733 if($memperms['isbannedgroup'] == 1) 2734 { 2735 eval("\$adminoptions = \"".$templates->get("member_profile_adminoptions_manageban")."\";"); 2736 } 2737 else 2738 { 2739 eval("\$adminoptions = \"".$templates->get("member_profile_adminoptions")."\";"); 2740 } 2741 } 2742 2743 $modoptions = $viewnotes = $editnotes = $editprofile = $banuser = $manageban = $manageuser = ''; 2744 $can_purge_spammer = purgespammer_show($memprofile['postnum'], $memprofile['usergroup'], $memprofile['uid']); 2745 if($mybb->usergroup['canmodcp'] == 1 || $can_purge_spammer) 2746 { 2747 if($mybb->usergroup['canuseipsearch'] == 1) 2748 { 2749 $memprofile['regip'] = my_inet_ntop($db->unescape_binary($memprofile['regip'])); 2750 $memprofile['lastip'] = my_inet_ntop($db->unescape_binary($memprofile['lastip'])); 2751 2752 eval("\$ipaddress = \"".$templates->get("member_profile_modoptions_ipaddress")."\";"); 2753 } 2754 2755 $memprofile['usernotes'] = nl2br(htmlspecialchars_uni($memprofile['usernotes'])); 2756 2757 if(!empty($memprofile['usernotes'])) 2758 { 2759 if(strlen($memprofile['usernotes']) > 100) 2760 { 2761 eval("\$viewnotes = \"".$templates->get("member_profile_modoptions_viewnotes")."\";"); 2762 $memprofile['usernotes'] = my_substr($memprofile['usernotes'], 0, 100)."... {$viewnotes}"; 2763 } 2764 } 2765 else 2766 { 2767 $memprofile['usernotes'] = $lang->no_usernotes; 2768 } 2769 2770 if($mybb->usergroup['caneditprofiles'] == 1 && modcp_can_manage_user($memprofile['uid'])) 2771 { 2772 eval("\$editprofile = \"".$templates->get("member_profile_modoptions_editprofile")."\";"); 2773 eval("\$editnotes = \"".$templates->get("member_profile_modoptions_editnotes")."\";"); 2774 } 2775 2776 if($memperms['isbannedgroup'] == 1 && $mybb->usergroup['canbanusers'] == 1 && modcp_can_manage_user($memprofile['uid'])) 2777 { 2778 eval("\$manageban = \"".$templates->get("member_profile_modoptions_manageban")."\";"); 2779 } 2780 elseif(modcp_can_manage_user($memprofile['uid']) && $mybb->usergroup['canbanusers'] == 1) 2781 { 2782 eval("\$banuser = \"".$templates->get("member_profile_modoptions_banuser")."\";"); 2783 } 2784 2785 $purgespammer = ''; 2786 if($can_purge_spammer) 2787 { 2788 eval("\$purgespammer = \"".$templates->get('member_profile_modoptions_purgespammer')."\";"); 2789 } 2790 2791 if(!empty($editprofile) || !empty($banuser) || !empty($manageban) || !empty($purgespammer)) 2792 { 2793 eval("\$manageuser = \"".$templates->get("member_profile_modoptions_manageuser")."\";"); 2794 } 2795 2796 eval("\$modoptions = \"".$templates->get("member_profile_modoptions")."\";"); 2797 } 2798 2799 $add_remove_options = array(); 2800 $buddy_options = $ignore_options = $report_options = ''; 2801 if($mybb->user['uid'] != $memprofile['uid'] && $mybb->user['uid'] != 0) 2802 { 2803 $buddy_list = explode(',', $mybb->user['buddylist']); 2804 $ignore_list = explode(',', $mybb->user['ignorelist']); 2805 2806 if(in_array($uid, $buddy_list)) 2807 { 2808 $add_remove_options = array('url' => "usercp.php?action=do_editlists&delete={$uid}&my_post_key={$mybb->post_code}", 'class' => 'remove_buddy_button', 'lang' => $lang->remove_from_buddy_list); 2809 } 2810 else 2811 { 2812 $add_remove_options = array('url' => "usercp.php?action=do_editlists&add_username=".urlencode($memprofile['username'])."&my_post_key={$mybb->post_code}", 'class' => 'add_buddy_button', 'lang' => $lang->add_to_buddy_list); 2813 } 2814 2815 if(!in_array($uid, $ignore_list)) 2816 { 2817 eval("\$buddy_options = \"".$templates->get("member_profile_addremove")."\";"); // Add/Remove Buddy 2818 } 2819 2820 if(in_array($uid, $ignore_list)) 2821 { 2822 $add_remove_options = array('url' => "usercp.php?action=do_editlists&manage=ignored&delete={$uid}&my_post_key={$mybb->post_code}", 'class' => 'remove_ignore_button', 'lang' => $lang->remove_from_ignore_list); 2823 } 2824 else 2825 { 2826 $add_remove_options = array('url' => "usercp.php?action=do_editlists&manage=ignored&add_username=".urlencode($memprofile['username'])."&my_post_key={$mybb->post_code}", 'class' => 'add_ignore_button', 'lang' => $lang->add_to_ignore_list); 2827 } 2828 2829 if(!in_array($uid, $buddy_list)) 2830 { 2831 eval("\$ignore_options = \"".$templates->get("member_profile_addremove")."\";"); // Add/Remove Ignore 2832 } 2833 2834 if(isset($memperms['canbereported']) && $memperms['canbereported'] == 1) 2835 { 2836 $reportable = true; 2837 $query = $db->simple_select("reportedcontent", "reporters", "reportstatus != '1' AND id = '{$memprofile['uid']}' AND type = 'profile'"); 2838 if($db->num_rows($query)) 2839 { 2840 $report = $db->fetch_array($query); 2841 $report['reporters'] = my_unserialize($report['reporters']); 2842 if(is_array($report['reporters']) && in_array($mybb->user['uid'], $report['reporters'])) 2843 { 2844 $reportable = false; 2845 } 2846 } 2847 if($reportable) 2848 { 2849 $add_remove_options = array('url' => "javascript:Report.reportUser({$memprofile['uid']});", 'class' => 'report_user_button', 'lang' => $lang->report_user); 2850 eval("\$report_options = \"".$templates->get("member_profile_addremove")."\";"); // Report User 2851 } 2852 } 2853 } 2854 2855 $plugins->run_hooks("member_profile_end"); 2856 2857 eval("\$profile = \"".$templates->get("member_profile")."\";"); 2858 output_page($profile); 2859 } 2860 2861 if($mybb->input['action'] == "do_emailuser" && $mybb->request_method == "post") 2862 { 2863 // Verify incoming POST request 2864 verify_post_check($mybb->get_input('my_post_key')); 2865 2866 $plugins->run_hooks("member_do_emailuser_start"); 2867 2868 // Guests or those without permission can't email other users 2869 if($mybb->usergroup['cansendemail'] == 0) 2870 { 2871 error_no_permission(); 2872 } 2873 2874 // Check group limits 2875 if($mybb->usergroup['maxemails'] > 0) 2876 { 2877 if($mybb->user['uid'] > 0) 2878 { 2879 $user_check = "fromuid='{$mybb->user['uid']}'"; 2880 } 2881 else 2882 { 2883 $user_check = "ipaddress=".$db->escape_binary($session->packedip); 2884 } 2885 2886 $query = $db->simple_select("maillogs", "COUNT(*) AS sent_count", "{$user_check} AND dateline >= '".(TIME_NOW - (60*60*24))."'"); 2887 $sent_count = $db->fetch_field($query, "sent_count"); 2888 if($sent_count >= $mybb->usergroup['maxemails']) 2889 { 2890 $lang->error_max_emails_day = $lang->sprintf($lang->error_max_emails_day, $mybb->usergroup['maxemails']); 2891 error($lang->error_max_emails_day); 2892 } 2893 } 2894 2895 // Check email flood control 2896 if($mybb->usergroup['emailfloodtime'] > 0) 2897 { 2898 if($mybb->user['uid'] > 0) 2899 { 2900 $user_check = "fromuid='{$mybb->user['uid']}'"; 2901 } 2902 else 2903 { 2904 $user_check = "ipaddress=".$db->escape_binary($session->packedip); 2905 } 2906 2907 $timecut = TIME_NOW-$mybb->usergroup['emailfloodtime']*60; 2908 2909 $query = $db->simple_select("maillogs", "mid, dateline", "{$user_check} AND dateline > '{$timecut}'", array('order_by' => "dateline", 'order_dir' => "DESC")); 2910 $last_email = $db->fetch_array($query); 2911 2912 // Users last email was within the flood time, show the error 2913 if(isset($last_email['mid'])) 2914 { 2915 $remaining_time = ($mybb->usergroup['emailfloodtime']*60)-(TIME_NOW-$last_email['dateline']); 2916 2917 if($remaining_time == 1) 2918 { 2919 $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_1_second, $mybb->usergroup['emailfloodtime']); 2920 } 2921 elseif($remaining_time < 60) 2922 { 2923 $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_seconds, $mybb->usergroup['emailfloodtime'], $remaining_time); 2924 } 2925 elseif($remaining_time > 60 && $remaining_time < 120) 2926 { 2927 $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_1_minute, $mybb->usergroup['emailfloodtime']); 2928 } 2929 else 2930 { 2931 $remaining_time_minutes = ceil($remaining_time/60); 2932 $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_minutes, $mybb->usergroup['emailfloodtime'], $remaining_time_minutes); 2933 } 2934 2935 error($lang->error_emailflooding); 2936 } 2937 } 2938 2939 $query = $db->simple_select("users", "uid, username, email, hideemail, ignorelist", "uid='".$mybb->get_input('uid', MyBB::INPUT_INT)."'"); 2940 $to_user = $db->fetch_array($query); 2941 2942 if(!$to_user['username']) 2943 { 2944 error($lang->error_invalidusername); 2945 } 2946 2947 if($to_user['hideemail'] != 0) 2948 { 2949 error($lang->error_hideemail); 2950 } 2951 2952 if($to_user['ignorelist'] && (my_strpos(",".$to_user['ignorelist'].",", ",".$mybb->user['uid'].",") !== false && $mybb->usergroup['cansendemailoverride'] != 1)) 2953 { 2954 error_no_permission(); 2955 } 2956 2957 $errors = array(); 2958 2959 if($mybb->user['uid']) 2960 { 2961 $mybb->input['fromemail'] = $mybb->user['email']; 2962 $mybb->input['fromname'] = $mybb->user['username']; 2963 } 2964 2965 if(!validate_email_format($mybb->input['fromemail'])) 2966 { 2967 $errors[] = $lang->error_invalidfromemail; 2968 } 2969 2970 if(empty($mybb->input['fromname'])) 2971 { 2972 $errors[] = $lang->error_noname; 2973 } 2974 2975 if(empty($mybb->input['subject'])) 2976 { 2977 $errors[] = $lang->error_no_email_subject; 2978 } 2979 2980 if(empty($mybb->input['message'])) 2981 { 2982 $errors[] = $lang->error_no_email_message; 2983 } 2984 2985 if($mybb->settings['captchaimage'] && $mybb->user['uid'] == 0) 2986 { 2987 require_once MYBB_ROOT.'inc/class_captcha.php'; 2988 $captcha = new captcha; 2989 2990 if($captcha->validate_captcha() == false) 2991 { 2992 // CAPTCHA validation failed 2993 foreach($captcha->get_errors() as $error) 2994 { 2995 $errors[] = $error; 2996 } 2997 } 2998 } 2999 3000 if(count($errors) == 0) 3001 { 3002 $message = $lang->sprintf($lang->email_emailuser, $to_user['username'], $mybb->input['fromname'], $mybb->settings['bbname'], $mybb->settings['bburl'], $mybb->get_input('message')); 3003 my_mail($to_user['email'], $mybb->get_input('subject'), $message, '', '', '', false, 'text', '', $mybb->input['fromemail']); 3004 3005 if($mybb->settings['mail_logging'] > 0) 3006 { 3007 // Log the message 3008 $log_entry = array( 3009 "subject" => $db->escape_string($mybb->get_input('subject')), 3010 "message" => $db->escape_string($mybb->get_input('message')), 3011 "dateline" => TIME_NOW, 3012 "fromuid" => $mybb->user['uid'], 3013 "fromemail" => $db->escape_string($mybb->input['fromemail']), 3014 "touid" => $to_user['uid'], 3015 "toemail" => $db->escape_string($to_user['email']), 3016 "tid" => 0, 3017 "ipaddress" => $db->escape_binary($session->packedip), 3018 "type" => 1 3019 ); 3020 $db->insert_query("maillogs", $log_entry); 3021 } 3022 3023 // Invalidate solved captcha 3024 if($mybb->settings['captchaimage'] && $mybb->user['uid'] == 0) 3025 { 3026 $captcha->invalidate_captcha(); 3027 } 3028 3029 $plugins->run_hooks("member_do_emailuser_end"); 3030 3031 redirect(get_profile_link($to_user['uid']), $lang->redirect_emailsent); 3032 } 3033 else 3034 { 3035 $mybb->input['action'] = "emailuser"; 3036 } 3037 } 3038 3039 if($mybb->input['action'] == "emailuser") 3040 { 3041 $plugins->run_hooks("member_emailuser_start"); 3042 3043 // Guests or those without permission can't email other users 3044 if($mybb->usergroup['cansendemail'] == 0) 3045 { 3046 error_no_permission(); 3047 } 3048 3049 // Check group limits 3050 if($mybb->usergroup['maxemails'] > 0) 3051 { 3052 if($mybb->user['uid'] > 0) 3053 { 3054 $user_check = "fromuid='{$mybb->user['uid']}'"; 3055 } 3056 else 3057 { 3058 $user_check = "ipaddress=".$db->escape_binary($session->packedip); 3059 } 3060 3061 $query = $db->simple_select("maillogs", "COUNT(*) AS sent_count", "{$user_check} AND dateline >= '".(TIME_NOW - (60*60*24))."'"); 3062 $sent_count = $db->fetch_field($query, "sent_count"); 3063 if($sent_count >= $mybb->usergroup['maxemails']) 3064 { 3065 $lang->error_max_emails_day = $lang->sprintf($lang->error_max_emails_day, $mybb->usergroup['maxemails']); 3066 error($lang->error_max_emails_day); 3067 } 3068 } 3069 3070 // Check email flood control 3071 if($mybb->usergroup['emailfloodtime'] > 0) 3072 { 3073 if($mybb->user['uid'] > 0) 3074 { 3075 $user_check = "fromuid='{$mybb->user['uid']}'"; 3076 } 3077 else 3078 { 3079 $user_check = "ipaddress=".$db->escape_binary($session->packedip); 3080 } 3081 3082 $timecut = TIME_NOW-$mybb->usergroup['emailfloodtime']*60; 3083 3084 $query = $db->simple_select("maillogs", "mid, dateline", "{$user_check} AND dateline > '{$timecut}'", array('order_by' => "dateline", 'order_dir' => "DESC")); 3085 $last_email = $db->fetch_array($query); 3086 3087 // Users last email was within the flood time, show the error 3088 if(isset($last_email['mid'])) 3089 { 3090 $remaining_time = ($mybb->usergroup['emailfloodtime']*60)-(TIME_NOW-$last_email['dateline']); 3091 3092 if($remaining_time == 1) 3093 { 3094 $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_1_second, $mybb->usergroup['emailfloodtime']); 3095 } 3096 elseif($remaining_time < 60) 3097 { 3098 $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_seconds, $mybb->usergroup['emailfloodtime'], $remaining_time); 3099 } 3100 elseif($remaining_time > 60 && $remaining_time < 120) 3101 { 3102 $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_1_minute, $mybb->usergroup['emailfloodtime']); 3103 } 3104 else 3105 { 3106 $remaining_time_minutes = ceil($remaining_time/60); 3107 $lang->error_emailflooding = $lang->sprintf($lang->error_emailflooding_minutes, $mybb->usergroup['emailfloodtime'], $remaining_time_minutes); 3108 } 3109 3110 error($lang->error_emailflooding); 3111 } 3112 } 3113 3114 $query = $db->simple_select("users", "uid, username, email, hideemail, ignorelist", "uid='".$mybb->get_input('uid', MyBB::INPUT_INT)."'"); 3115 $to_user = $db->fetch_array($query); 3116 3117 $to_user['username'] = htmlspecialchars_uni($to_user['username']); 3118 $lang->email_user = $lang->sprintf($lang->email_user, $to_user['username']); 3119 3120 if(!$to_user['uid']) 3121 { 3122 error($lang->error_invaliduser); 3123 } 3124 3125 if($to_user['hideemail'] != 0) 3126 { 3127 error($lang->error_hideemail); 3128 } 3129 3130 if($to_user['ignorelist'] && (my_strpos(",".$to_user['ignorelist'].",", ",".$mybb->user['uid'].",") !== false && $mybb->usergroup['cansendemailoverride'] != 1)) 3131 { 3132 error_no_permission(); 3133 } 3134 3135 if(isset($errors) && count($errors) > 0) 3136 { 3137 $errors = inline_error($errors); 3138 $fromname = htmlspecialchars_uni($mybb->get_input('fromname')); 3139 $fromemail = htmlspecialchars_uni($mybb->get_input('fromemail')); 3140 $subject = htmlspecialchars_uni($mybb->get_input('subject')); 3141 $message = htmlspecialchars_uni($mybb->get_input('message')); 3142 } 3143 else 3144 { 3145 $errors = ''; 3146 $fromname = ''; 3147 $fromemail = ''; 3148 $subject = ''; 3149 $message = ''; 3150 } 3151 3152 // Generate CAPTCHA? 3153 if($mybb->settings['captchaimage'] && $mybb->user['uid'] == 0) 3154 { 3155 require_once MYBB_ROOT.'inc/class_captcha.php'; 3156 $post_captcha = new captcha(true, "post_captcha"); 3157 3158 if($post_captcha->html) 3159 { 3160 $captcha = $post_captcha->html; 3161 } 3162 } 3163 else 3164 { 3165 $captcha = ''; 3166 } 3167 3168 $from_email = ''; 3169 if($mybb->user['uid'] == 0) 3170 { 3171 eval("\$from_email = \"".$templates->get("member_emailuser_guest")."\";"); 3172 } 3173 3174 $plugins->run_hooks("member_emailuser_end"); 3175 3176 eval("\$emailuser = \"".$templates->get("member_emailuser")."\";"); 3177 output_page($emailuser); 3178 } 3179 3180 if($mybb->input['action'] == 'referrals') 3181 { 3182 $plugins->run_hooks('member_referrals_start'); 3183 3184 $uid = $mybb->get_input('uid', MyBB::INPUT_INT); 3185 if(!$uid) 3186 { 3187 error($lang->referrals_no_user_specified); 3188 } 3189 3190 $user = get_user($uid); 3191 if(!isset($user['uid'])) 3192 { 3193 error($lang->referrals_invalid_user); 3194 } 3195 3196 $lang->nav_referrals = $lang->sprintf($lang->nav_referrals, $user['username']); 3197 add_breadcrumb($lang->nav_referrals); 3198 3199 $query = $db->simple_select('users', 'COUNT(uid) AS total', "referrer='{$uid}'"); 3200 $referral_count = $db->fetch_field($query, 'total'); 3201 3202 $bg_color = 'trow1'; 3203 3204 if($referral_count == 0) 3205 { 3206 eval("\$referral_rows = \"".$templates->get('member_no_referrals')."\";"); 3207 } 3208 else 3209 { 3210 // Figure out if we need to display multiple pages. 3211 $perpage = 20; 3212 if ((int) $mybb->settings['referralsperpage']) { 3213 $perpage = (int) $mybb->settings['referralsperpage']; 3214 } 3215 3216 $page = 1; 3217 if($mybb->get_input('page', MyBB::INPUT_INT)) 3218 { 3219 $page = $mybb->get_input('page', MyBB::INPUT_INT); 3220 } 3221 3222 $pages = ceil($referral_count / $perpage); 3223 3224 if($page > $pages || $page <= 0) 3225 { 3226 $page = 1; 3227 } 3228 3229 if($page) 3230 { 3231 $start = ($page-1) * $perpage; 3232 } 3233 else 3234 { 3235 $start = 0; 3236 $page = 1; 3237 } 3238 3239 $multipage = multipage($referral_count, $perpage, $page, "member.php?action=referrals&uid={$uid}"); 3240 3241 $referral_rows = ''; 3242 foreach(get_user_referrals($uid, $start, $perpage) as $referral) 3243 { 3244 // Format user name link 3245 $username = htmlspecialchars_uni($referral['username']); 3246 $username = format_name($username, $referral['usergroup'], $referral['displaygroup']); 3247 $username = build_profile_link($username, $referral['uid']); 3248 3249 $regdate = my_date('normal', $referral['regdate']); 3250 3251 eval("\$referral_rows .= \"".$templates->get('member_referral_row')."\";"); 3252 3253 $bg_color = alt_trow(); 3254 } 3255 } 3256 3257 $plugins->run_hooks('member_referrals_end'); 3258 3259 eval("\$referrals = \"".$templates->get("member_referrals")."\";"); 3260 output_page($referrals); 3261 } 3262 3263 if(!$mybb->input['action']) 3264 { 3265 header("Location: index.php"); 3266 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| 2005 - 2021 © MyBB.de | Alle Rechte vorbehalten! | Sponsor: netcup | Cross-referenced by PHPXref |