Advertisement
Guest User

Untitled

a guest
Aug 19th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 58.98 KB | None | 0 0
  1. <?php
  2.  
  3. define("IN_MYBB", 1);
  4. define('THIS_SCRIPT', 'member.php');
  5. define("ALLOWABLE_PAGE", "register,do_register,login,do_login,logout,lostpw,do_lostpw,activate,resendactivation,do_resendactivation,resetpassword");
  6.  
  7. $nosession['avatar'] = 1;
  8. $templatelist = "member_register,error_nousername,error_nopassword,error_passwordmismatch,error_invalidemail,error_usernametaken,error_emailmismatch,error_noemail,redirect_registered";
  9. $templatelist .= ",redirect_loggedout,login,redirect_loggedin,error_invalidusername,error_invalidpassword,member_profile_email,member_profile_offline,member_profile_reputation,member_profile_warn,member_profile_warninglevel,member_profile_customfields_field,member_profile_customfields,member_profile_adminoptions,member_profile,member_login,member_profile_online,member_profile_modoptions,member_profile_signature,member_profile_groupimage,member_profile_referrals";
  10. require_once "./global.php";
  11.  
  12. require_once MYBB_ROOT."inc/functions_post.php";
  13. require_once MYBB_ROOT."inc/functions_user.php";
  14. require_once MYBB_ROOT."inc/class_parser.php";
  15. $parser = new postParser;
  16.  
  17. // Load global language phrases
  18. $lang->load("member");
  19.  
  20. // Make navigation
  21. switch($mybb->input['action'])
  22. {
  23. case "register":
  24. case "do_register":
  25. add_breadcrumb($lang->nav_register);
  26. break;
  27. case "activate":
  28. add_breadcrumb($lang->nav_activate);
  29. break;
  30. case "resendactivation":
  31. add_breadcrumb($lang->nav_resendactivation);
  32. break;
  33. case "lostpw":
  34. add_breadcrumb($lang->nav_lostpw);
  35. break;
  36. case "resetpassword":
  37. add_breadcrumb($lang->nav_resetpassword);
  38. break;
  39. case "login":
  40. add_breadcrumb($lang->nav_login);
  41. break;
  42. case "emailuser":
  43. add_breadcrumb($lang->nav_emailuser);
  44. break;
  45. }
  46.  
  47. if(($mybb->input['action'] == "register" || $mybb->input['action'] == "do_register") && $mybb->usergroup['cancp'] != 1)
  48. {
  49. if($mybb->settings['disableregs'] == 1)
  50. {
  51. error($lang->registrations_disabled);
  52. }
  53. if($mybb->user['regdate'])
  54. {
  55. error($lang->error_alreadyregistered);
  56. }
  57. if($mybb->settings['betweenregstime'] && $mybb->settings['maxregsbetweentime'])
  58. {
  59. $time = TIME_NOW;
  60. $datecut = $time-(60*60*$mybb->settings['betweenregstime']);
  61. $query = $db->simple_select("users", "*", "regip='".$db->escape_string($session->ipaddress)."' AND regdate > '$datecut'");
  62. $regcount = $db->num_rows($query);
  63. if($regcount >= $mybb->settings['maxregsbetweentime'])
  64. {
  65. $lang->error_alreadyregisteredtime = $lang->sprintf($lang->error_alreadyregisteredtime, $regcount, $mybb->settings['betweenregstime']);
  66. error($lang->error_alreadyregisteredtime);
  67. }
  68. }
  69. }
  70.  
  71. if($mybb->input['action'] == "do_register" && $mybb->request_method == "post")
  72. {
  73. $plugins->run_hooks("member_do_register_start");
  74.  
  75. if($mybb->settings['regtype'] == "randompass")
  76. {
  77. $mybb->input['password'] = random_str();
  78. $mybb->input['password2'] = $mybb->input['password'];
  79. }
  80.  
  81. if($mybb->settings['regtype'] == "verify" || $mybb->settings['regtype'] == "admin" || $mybb->input['coppa'] == 1)
  82. {
  83. $usergroup = 5;
  84. }
  85. else
  86. {
  87. $usergroup = 2;
  88. }
  89.  
  90. // Set up user handler.
  91. require_once MYBB_ROOT."inc/datahandlers/user.php";
  92. $userhandler = new UserDataHandler("insert");
  93.  
  94. // Set the data for the new user.
  95. $user = array(
  96. "username" => $mybb->input['username'],
  97. "password" => $mybb->input['password'],
  98. "password2" => $mybb->input['password2'],
  99. "email" => $mybb->input['email'],
  100. "email2" => $mybb->input['email2'],
  101. "usergroup" => $usergroup,
  102. "referrer" => $mybb->input['referrername'],
  103. "timezone" => $mybb->input['timezoneoffset'],
  104. "language" => $mybb->input['language'],
  105. "profile_fields" => $mybb->input['profile_fields'],
  106. "regip" => $session->ipaddress,
  107. "longregip" => my_ip2long($session->ipaddress),
  108. "coppa_user" => intval($mybb->cookies['coppauser']),
  109. );
  110.  
  111. if(isset($mybb->input['regcheck1']) && isset($mybb->input['regcheck2']))
  112. {
  113. $user['regcheck1'] = $mybb->input['regcheck1'];
  114. $user['regcheck2'] = $mybb->input['regcheck2'];
  115. }
  116.  
  117. // Do we have a saved COPPA DOB?
  118. if($mybb->cookies['coppadob'])
  119. {
  120. list($dob_day, $dob_month, $dob_year) = explode("-", $mybb->cookies['coppadob']);
  121. $user['birthday'] = array(
  122. "day" => $dob_day,
  123. "month" => $dob_month,
  124. "year" => $dob_year
  125. );
  126. }
  127.  
  128. $user['options'] = array(
  129. "allownotices" => $mybb->input['allownotices'],
  130. "hideemail" => $mybb->input['hideemail'],
  131. "subscriptionmethod" => $mybb->input['subscriptionmethod'],
  132. "receivepms" => $mybb->input['receivepms'],
  133. "pmnotice" => $mybb->input['pmnotice'],
  134. "emailpmnotify" => $mybb->input['emailpmnotify'],
  135. "invisible" => $mybb->input['invisible'],
  136. "dstcorrection" => $mybb->input['dstcorrection']
  137. );
  138.  
  139. $userhandler->set_data($user);
  140.  
  141. $errors = "";
  142.  
  143. if(!$userhandler->validate_user())
  144. {
  145. $errors = $userhandler->get_friendly_errors();
  146. }
  147.  
  148. if($mybb->settings['captchaimage'] == 1 && function_exists("imagecreatefrompng"))
  149. {
  150. $imagehash = $db->escape_string($mybb->input['imagehash']);
  151. $imagestring = $db->escape_string(my_strtolower($mybb->input['imagestring']));
  152. $query = $db->simple_select("captcha", "*", "imagehash='$imagehash' AND LOWER(imagestring)='$imagestring'");
  153. $imgcheck = $db->fetch_array($query);
  154. if(!$imgcheck['dateline'])
  155. {
  156. $errors[] = $lang->error_regimageinvalid;
  157. }
  158. $db->delete_query("captcha", "imagehash='$imagehash'");
  159. }
  160.  
  161. if(is_array($errors))
  162. {
  163. $username = htmlspecialchars_uni($mybb->input['username']);
  164. $email = htmlspecialchars_uni($mybb->input['email']);
  165. $email2 = htmlspecialchars_uni($mybb->input['email']);
  166. $referrername = htmlspecialchars_uni($mybb->input['referrername']);
  167.  
  168. if($mybb->input['allownotices'] == 1)
  169. {
  170. $allownoticescheck = "checked=\"checked\"";
  171. }
  172.  
  173. if($mybb->input['hideemail'] == 1)
  174. {
  175. $hideemailcheck = "checked=\"checked\"";
  176. }
  177.  
  178. if($mybb->input['subscriptionmethod'] == 1)
  179. {
  180. $no_email_subscribe_selected = "selected=\"selected\"";
  181. }
  182. else if($mybb->input['subscriptionmethod'] == 2)
  183. {
  184. $instant_email_subscribe_selected = "selected=\"selected\"";
  185. }
  186. else
  187. {
  188. $no_subscribe_selected = "selected=\"selected\"";
  189. }
  190.  
  191. if($mybb->input['receivepms'] == 1)
  192. {
  193. $receivepmscheck = "checked=\"checked\"";
  194. }
  195.  
  196. if($mybb->input['pmnotice'] == 1)
  197. {
  198. $pmnoticecheck = " checked=\"checked\"";
  199. }
  200.  
  201. if($mybb->input['emailpmnotify'] == 1)
  202. {
  203. $emailpmnotifycheck = "checked=\"checked\"";
  204. }
  205.  
  206. if($mybb->input['invisible'] == 1)
  207. {
  208. $invisiblecheck = "checked=\"checked\"";
  209. }
  210.  
  211. if($mybb->input['dstcorrection'] == 2)
  212. {
  213. $dst_auto_selected = "selected=\"selected\"";
  214. }
  215. else if($mybb->input['dstcorrection'] == 1)
  216. {
  217. $dst_enabled_selected = "selected=\"selected\"";
  218. }
  219. else
  220. {
  221. $dst_disabled_selected = "selected=\"selected\"";
  222. }
  223.  
  224. $regerrors = inline_error($errors);
  225. $mybb->input['action'] = "register";
  226. $fromreg = 1;
  227. }
  228. else
  229. {
  230. $user_info = $userhandler->insert_user();
  231.  
  232. if($mybb->settings['regtype'] != "randompass" && !$mybb->cookies['coppauser'])
  233. {
  234. // Log them in
  235. my_setcookie("mybbuser", $user_info['uid']."_".$user_info['loginkey'], null, true);
  236. }
  237.  
  238. if($mybb->cookies['coppauser'])
  239. {
  240. $lang->redirect_registered_coppa_activate = $lang->sprintf($lang->redirect_registered_coppa_activate, $mybb->settings['bbname'], $user_info['username']);
  241. my_unsetcookie("coppauser");
  242. my_unsetcookie("coppadob");
  243. $plugins->run_hooks("member_do_register_end");
  244. error($lang->redirect_registered_coppa_activate);
  245. }
  246. else if($mybb->settings['regtype'] == "verify")
  247. {
  248. $activationcode = random_str();
  249. $now = TIME_NOW;
  250. $activationarray = array(
  251. "uid" => $user_info['uid'],
  252. "dateline" => TIME_NOW,
  253. "code" => $activationcode,
  254. "type" => "r"
  255. );
  256. $db->insert_query("awaitingactivation", $activationarray);
  257. $emailsubject = $lang->sprintf($lang->emailsubject_activateaccount, $mybb->settings['bbname']);
  258. $emailmessage = $lang->sprintf($lang->email_activateaccount, $user_info['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user_info['uid'], $activationcode);
  259. my_mail($user_info['email'], $emailsubject, $emailmessage);
  260.  
  261. $lang->redirect_registered_activation = $lang->sprintf($lang->redirect_registered_activation, $mybb->settings['bbname'], $user_info['username']);
  262.  
  263. $plugins->run_hooks("member_do_register_end");
  264.  
  265. error($lang->redirect_registered_activation);
  266. }
  267. else if($mybb->settings['regtype'] == "randompass")
  268. {
  269. $emailsubject = $lang->sprintf($lang->emailsubject_randompassword, $mybb->settings['bbname']);
  270. $emailmessage = $lang->sprintf($lang->email_randompassword, $user['username'], $mybb->settings['bbname'], $user_info['username'], $user_info['password']);
  271. my_mail($user_info['email'], $emailsubject, $emailmessage);
  272.  
  273. $plugins->run_hooks("member_do_register_end");
  274.  
  275. error($lang->redirect_registered_passwordsent);
  276. }
  277. else if($mybb->settings['regtype'] == "admin")
  278. {
  279. $lang->redirect_registered_admin_activate = $lang->sprintf($lang->redirect_registered_admin_activate, $mybb->settings['bbname'], $user_info['username']);
  280.  
  281. $plugins->run_hooks("member_do_register_end");
  282.  
  283. error($lang->redirect_registered_admin_activate);
  284. }
  285. else
  286. {
  287. $lang->redirect_registered = $lang->sprintf($lang->redirect_registered, $mybb->settings['bbname'], $user_info['username']);
  288.  
  289. $plugins->run_hooks("member_do_register_end");
  290.  
  291. redirect("index.php", $lang->redirect_registered);
  292. }
  293. }
  294. }
  295.  
  296. if($mybb->input['action'] == "coppa_form")
  297. {
  298. if(!$mybb->settings['faxno'])
  299. {
  300. $mybb->settings['faxno'] = "&nbsp;";
  301. }
  302.  
  303. eval("\$coppa_form = \"".$templates->get("member_coppa_form")."\";");
  304. output_page($coppa_form);
  305. }
  306.  
  307. if($mybb->input['action'] == "register")
  308. {
  309. $bdaysel = '';
  310. if($mybb->settings['coppa'] == "disabled")
  311. {
  312. $bdaysel = $bday2blank = "<option value=\"\">&nbsp;</option>";
  313. }
  314. for($i = 1; $i <= 31; ++$i)
  315. {
  316. if($mybb->input['bday1'] == $i)
  317. {
  318. $bdaysel .= "<option value=\"$i\" selected=\"selected\">$i</option>\n";
  319. }
  320. else
  321. {
  322. $bdaysel .= "<option value=\"$i\">$i</option>\n";
  323. }
  324. }
  325.  
  326. $bdaymonthsel[$mybb->input['bday2']] = "selected=\"selected\"";
  327. $mybb->input['bday3'] = intval($mybb->input['bday3']);
  328.  
  329. if($mybb->input['bday3'] == 0) $mybb->input['bday3'] = "";
  330.  
  331. // Is COPPA checking enabled?
  332. if($mybb->settings['coppa'] != "disabled" && !$mybb->input['step'])
  333. {
  334. // Just selected DOB, we check
  335. if($mybb->input['bday1'] && $mybb->input['bday2'] && $mybb->input['bday3'])
  336. {
  337. my_unsetcookie("coppauser");
  338.  
  339. $bdaytime = @mktime(0, 0, 0, $mybb->input['bday2'], $mybb->input['bday1'], $mybb->input['bday3']);
  340.  
  341. // Store DOB in cookie so we can save it with the registration
  342. my_setcookie("coppadob", "{$mybb->input['bday1']}-{$mybb->input['bday2']}-{$mybb->input['bday3']}", -1);
  343.  
  344. // User is <= 13, we mark as a coppa user
  345. if($bdaytime >= mktime(0, 0, 0, my_date('n'), my_date('d'), my_date('Y')-13))
  346. {
  347. my_setcookie("coppauser", 1, -0);
  348. $under_thirteen = true;
  349. }
  350. $mybb->request_method = "";
  351. }
  352. // Show DOB select form
  353. else
  354. {
  355. $plugins->run_hooks("member_register_coppa");
  356.  
  357. my_unsetcookie("coppauser");
  358.  
  359. eval("\$coppa = \"".$templates->get("member_register_coppa")."\";");
  360. output_page($coppa);
  361. exit;
  362. }
  363. }
  364.  
  365. if((!isset($mybb->input['agree']) && !isset($mybb->input['regsubmit'])) || $mybb->request_method != "post")
  366. {
  367. // Is this user a COPPA user? We need to show the COPPA agreement too
  368. if($mybb->settings['coppa'] != "disabled" && ($mybb->cookies['coppauser'] == 1 || $under_thirteen))
  369. {
  370. if($mybb->settings['coppa'] == "deny")
  371. {
  372. error($lang->error_need_to_be_thirteen);
  373. }
  374. $lang->coppa_agreement_1 = $lang->sprintf($lang->coppa_agreement_1, $mybb->settings['bbname']);
  375. eval("\$coppa_agreement = \"".$templates->get("member_register_agreement_coppa")."\";");
  376. }
  377.  
  378. $plugins->run_hooks("member_register_agreement");
  379.  
  380. eval("\$agreement = \"".$templates->get("member_register_agreement")."\";");
  381. output_page($agreement);
  382. }
  383. else
  384. {
  385. $plugins->run_hooks("member_register_start");
  386.  
  387. $validator_extra = '';
  388.  
  389. if(isset($mybb->input['timezoneoffset']))
  390. {
  391. $timezoneoffset = $mybb->input['timezoneoffset'];
  392. }
  393. else
  394. {
  395. $timezoneoffset = $mybb->settings['timezoneoffset'];
  396. }
  397. $tzselect = build_timezone_select("timezoneoffset", $timezoneoffset, true);
  398.  
  399. $stylelist = build_theme_select("style");
  400.  
  401. if($mybb->settings['usertppoptions'])
  402. {
  403. $tppoptions = '';
  404. $explodedtpp = explode(",", $mybb->settings['usertppoptions']);
  405. if(is_array($explodedtpp))
  406. {
  407. foreach($explodedtpp as $val)
  408. {
  409. $val = trim($val);
  410. $tppoptions .= "<option value=\"$val\">".$lang->sprintf($lang->tpp_option, $val)."</option>\n";
  411. }
  412. }
  413. eval("\$tppselect = \"".$templates->get("usercp_options_tppselect")."\";");
  414. }
  415. if($mybb->settings['userpppoptions'])
  416. {
  417. $pppoptions = '';
  418. $explodedppp = explode(",", $mybb->settings['userpppoptions']);
  419. if(is_array($explodedppp))
  420. {
  421. foreach($explodedppp as $val)
  422. {
  423. $val = trim($val);
  424. $pppoptions .= "<option value=\"$val\">".$lang->sprintf($lang->ppp_option, $val)."</option>\n";
  425. }
  426. }
  427. eval("\$pppselect = \"".$templates->get("usercp_options_pppselect")."\";");
  428. }
  429. if($mybb->settings['usereferrals'] == 1 && !$mybb->user['uid'])
  430. {
  431. if($mybb->cookies['mybb']['referrer'])
  432. {
  433. $query = $db->simple_select("users", "uid,username", "uid='".$db->escape_string($mybb->cookies['mybb']['referrer'])."'");
  434. $ref = $db->fetch_array($query);
  435. $referrername = $ref['username'];
  436. }
  437. elseif($referrer)
  438. {
  439. $query = $db->simple_select("users", "username", "uid='".intval($referrer['uid'])."'");
  440. $ref = $db->fetch_array($query);
  441. $referrername = $ref['username'];
  442. }
  443. elseif($referrername)
  444. {
  445. $query = $db->simple_select("users", "uid", "LOWER(username)='".$db->escape_string(my_strtolower($referrername))."'");
  446. $ref = $db->fetch_array($query);
  447. if(!$ref['uid'])
  448. {
  449. $errors[] = $lang->error_badreferrer;
  450. }
  451. }
  452. if($quickreg)
  453. {
  454. $refbg = "trow1";
  455. }
  456. else
  457. {
  458. $refbg = "trow2";
  459. }
  460. // JS validator extra
  461. $validator_extra .= "\tregValidator.register('referrer', 'ajax', {url:'xmlhttp.php?action=username_exists', loading_message:'{$lang->js_validator_checking_referrer}'});\n";
  462.  
  463. eval("\$referrer = \"".$templates->get("member_register_referrer")."\";");
  464. }
  465. else
  466. {
  467. $referrer = '';
  468. }
  469. // Custom profile fields baby!
  470. $altbg = "trow1";
  471. $query = $db->simple_select("profilefields", "*", "editable=1", array('order_by' => 'disporder'));
  472. while($profilefield = $db->fetch_array($query))
  473. {
  474. $profilefield['type'] = htmlspecialchars_uni($profilefield['type']);
  475. $thing = explode("\n", $profilefield['type'], "2");
  476. $type = trim($thing[0]);
  477. $options = $thing[1];
  478. $select = '';
  479. $field = "fid{$profilefield['fid']}";
  480. if($errors)
  481. {
  482. $userfield = $mybb->input['profile_fields'][$field];
  483. }
  484. else
  485. {
  486. $userfield = '';
  487. }
  488. if($type == "multiselect")
  489. {
  490. if($errors)
  491. {
  492. $useropts = $userfield;
  493. }
  494. else
  495. {
  496. $useropts = explode("\n", $userfield);
  497. }
  498. if(is_array($useropts))
  499. {
  500. foreach($useropts as $key => $val)
  501. {
  502. $seloptions[$val] = $val;
  503. }
  504. }
  505. $expoptions = explode("\n", $options);
  506. if(is_array($expoptions))
  507. {
  508. foreach($expoptions as $key => $val)
  509. {
  510. $val = trim($val);
  511. $val = str_replace("\n", "\\n", $val);
  512.  
  513. $sel = "";
  514. if($val == $seloptions[$val])
  515. {
  516. $sel = "selected=\"selected\"";
  517. }
  518. $select .= "<option value=\"$val\" $sel>$val</option>\n";
  519. }
  520. if(!$profilefield['length'])
  521. {
  522. $profilefield['length'] = 3;
  523. }
  524. $code = "<select name=\"profile_fields[$field][]\" id=\"{$field}\" size=\"{$profilefield['length']}\" multiple=\"multiple\">$select</select>";
  525. }
  526. }
  527. elseif($type == "select")
  528. {
  529. $expoptions = explode("\n", $options);
  530. if(is_array($expoptions))
  531. {
  532. foreach($expoptions as $key => $val)
  533. {
  534. $val = trim($val);
  535. $val = str_replace("\n", "\\n", $val);
  536. $sel = "";
  537. if($val == $userfield)
  538. {
  539. $sel = "selected=\"selected\"";
  540. }
  541. $select .= "<option value=\"$val\" $sel>$val</option>";
  542. }
  543. if(!$profilefield['length'])
  544. {
  545. $profilefield['length'] = 1;
  546. }
  547. $code = "<select name=\"profile_fields[$field]\" id=\"{$field}\" size=\"{$profilefield['length']}\">$select</select>";
  548. }
  549. }
  550. elseif($type == "radio")
  551. {
  552. $expoptions = explode("\n", $options);
  553. if(is_array($expoptions))
  554. {
  555. foreach($expoptions as $key => $val)
  556. {
  557. $checked = "";
  558. if($val == $userfield)
  559. {
  560. $checked = "checked=\"checked\"";
  561. }
  562. $code .= "<input type=\"radio\" class=\"radio\" name=\"profile_fields[$field]\" id=\"{$field}{$key}\" value=\"$val\" $checked /> <span class=\"smalltext\">$val</span><br />";
  563. }
  564. }
  565. }
  566. elseif($type == "checkbox")
  567. {
  568. if($errors)
  569. {
  570. $useropts = $userfield;
  571. }
  572. else
  573. {
  574. $useropts = explode("\n", $userfield);
  575. }
  576. if(is_array($useropts))
  577. {
  578. foreach($useropts as $key => $val)
  579. {
  580. $seloptions[$val] = $val;
  581. }
  582. }
  583. $expoptions = explode("\n", $options);
  584. if(is_array($expoptions))
  585. {
  586. foreach($expoptions as $key => $val)
  587. {
  588. $checked = "";
  589. if($val == $seloptions[$val])
  590. {
  591. $checked = "checked=\"checked\"";
  592. }
  593. $code .= "<input type=\"checkbox\" class=\"checkbox\" name=\"profile_fields[$field][]\" id=\"{$field}{$key}\" value=\"$val\" $checked /> <span class=\"smalltext\">$val</span><br />";
  594. }
  595. }
  596. }
  597. elseif($type == "textarea")
  598. {
  599. $value = htmlspecialchars_uni($userfield);
  600. $code = "<textarea name=\"profile_fields[$field]\" id=\"{$field}\" rows=\"6\" cols=\"30\" style=\"width: 95%\">$value</textarea>";
  601. }
  602. else
  603. {
  604. $value = htmlspecialchars_uni($userfield);
  605. $maxlength = "";
  606. if($profilefield['maxlength'] > 0)
  607. {
  608. $maxlength = " maxlength=\"{$profilefield['maxlength']}\"";
  609. }
  610. $code = "<input type=\"text\" name=\"profile_fields[$field]\" id=\"{$field}\" class=\"textbox\" size=\"{$profilefield['length']}\"{$maxlength} value=\"$value\" />";
  611. }
  612. if($profilefield['required'] == 1)
  613. {
  614. // JS validator extra
  615. if($type == "checkbox" || $type == "radio")
  616. {
  617. $id = "{$field}0";
  618. }
  619. else
  620. {
  621. $id = "fid{$profilefield['fid']}";
  622. }
  623. $validator_extra .= "\tregValidator.register('{$id}', 'notEmpty', {failure_message:'{$lang->js_validator_not_empty}'});\n";
  624.  
  625. eval("\$requiredfields .= \"".$templates->get("member_register_customfield")."\";");
  626. }
  627. $code = '';
  628. $select = '';
  629. $val = '';
  630. $options = '';
  631. $expoptions = '';
  632. $useropts = '';
  633. $seloptions = '';
  634. }
  635. if($requiredfields)
  636. {
  637. eval("\$requiredfields = \"".$templates->get("member_register_requiredfields")."\";");
  638. }
  639. if(!$fromreg)
  640. {
  641. $allownoticescheck = "checked=\"checked\"";
  642. $hideemailcheck = '';
  643. $emailnotifycheck = '';
  644. $receivepmscheck = "checked=\"checked\"";
  645. $pmnoticecheck = " checked=\"checked\"";
  646. $emailpmnotifycheck = '';
  647. $invisiblecheck = '';
  648. if($mybb->settings['dstcorrection'] == 1)
  649. {
  650. $enabledstcheck = "checked=\"checked\"";
  651. }
  652.  
  653. }
  654. // Spambot registration image thingy
  655. if($mybb->settings['captchaimage'] == 1 && function_exists("imagecreatefrompng"))
  656. {
  657. $randomstr = random_str(5);
  658. $imagehash = md5(random_str(12));
  659. $regimagearray = array(
  660. "imagehash" => $imagehash,
  661. "imagestring" => $randomstr,
  662. "dateline" => TIME_NOW
  663. );
  664. $db->insert_query("captcha", $regimagearray);
  665. eval("\$regimage = \"".$templates->get("member_register_regimage")."\";");
  666.  
  667. // JS validator extra
  668. $validator_extra .= "\tregValidator.register('imagestring', 'ajax', {url:'xmlhttp.php?action=validate_captcha', extra_body: 'imagehash', loading_message:'{$lang->js_validator_captcha_valid}', failure_message:'{$lang->js_validator_no_image_text}'});\n";
  669. }
  670. if($mybb->settings['regtype'] != "randompass")
  671. {
  672. // JS validator extra
  673. $lang->js_validator_password_length = $lang->sprintf($lang->js_validator_password_length, $mybb->settings['minpasswordlength']);
  674. $validator_extra .= "\tregValidator.register('password', 'length', {match_field:'password2', min: {$mybb->settings['minpasswordlength']}, failure_message:'{$lang->js_validator_password_length}'});\n";
  675.  
  676. // See if the board has "require complex passwords" enabled.
  677. if($mybb->settings['requirecomplexpasswords'] == 1)
  678. {
  679. $lang->password = $lang->complex_password = $lang->sprintf($lang->complex_password, $mybb->settings['minpasswordlength']);
  680. $validator_extra .= "\tregValidator.register('password', 'ajax', {url:'xmlhttp.php?action=complex_password', loading_message:'{$lang->js_validator_password_complexity}'});\n";
  681. }
  682. $validator_extra .= "\tregValidator.register('password2', 'matches', {match_field:'password', status_field:'password_status', failure_message:'{$lang->js_validator_password_matches}'});\n";
  683.  
  684. eval("\$passboxes = \"".$templates->get("member_register_password")."\";");
  685. }
  686.  
  687. // JS validator extra
  688. if($mybb->settings['maxnamelength'] > 0 && $mybb->settings['minnamelength'] > 0)
  689. {
  690. $lang->js_validator_username_length = $lang->sprintf($lang->js_validator_username_length, $mybb->settings['minnamelength'], $mybb->settings['maxnamelength']);
  691. $validator_extra .= "\tregValidator.register('username', 'length', {min: {$mybb->settings['minnamelength']}, max: {$mybb->settings['maxnamelength']}, failure_message:'{$lang->js_validator_username_length}'});\n";
  692. }
  693.  
  694. $languages = $lang->get_languages();
  695. $langoptions = '';
  696. foreach($languages as $lname => $language)
  697. {
  698. $language = htmlspecialchars_uni($language);
  699. if($user['language'] == $lname)
  700. {
  701. $langoptions .= "<option value=\"$lname\" selected=\"selected\">$language</option>\n";
  702. }
  703. else
  704. {
  705. $langoptions .= "<option value=\"$lname\">$language</option>\n";
  706. }
  707. }
  708.  
  709. $plugins->run_hooks("member_register_end");
  710.  
  711. eval("\$registration = \"".$templates->get("member_register")."\";");
  712. output_page($registration);
  713. }
  714. }
  715.  
  716. if($mybb->input['action'] == "activate")
  717. {
  718. $plugins->run_hooks("member_activate_start");
  719.  
  720. if($mybb->input['username'])
  721. {
  722. $query = $db->simple_select("users", "*", "LOWER(username)='".$db->escape_string(my_strtolower($mybb->input['username']))."'", array('limit' => 1));
  723. $user = $db->fetch_array($query);
  724. if(!$user['username'])
  725. {
  726. error($lang->error_invalidpworusername);
  727. }
  728. $uid = $user['uid'];
  729. }
  730. else
  731. {
  732. $query = $db->simple_select("users", "*", "uid='".intval($mybb->input['uid'])."'");
  733. $user = $db->fetch_array($query);
  734. }
  735. if($mybb->input['code'] && $user['uid'])
  736. {
  737. $mybb->settings['awaitingusergroup'] = "5";
  738. $query = $db->simple_select("awaitingactivation", "*", "uid='".$user['uid']."' AND (type='r' OR type='e')");
  739. $activation = $db->fetch_array($query);
  740. if(!$activation['uid'])
  741. {
  742. error($lang->error_alreadyactivated);
  743. }
  744. if($activation['code'] != $mybb->input['code'])
  745. {
  746. error($lang->error_badactivationcode);
  747. }
  748. $db->delete_query("awaitingactivation", "uid='".$user['uid']."' AND (type='r' OR type='e')");
  749. if($user['usergroup'] == 5 && $activation['type'] != "e")
  750. {
  751. $db->update_query("users", array("usergroup" => 2), "uid='".$user['uid']."'");
  752. }
  753. if($activation['type'] == "e")
  754. {
  755. $newemail = array(
  756. "email" => $db->escape_string($activation['misc']),
  757. );
  758. $db->update_query("users", $newemail, "uid='".$user['uid']."'");
  759. $plugins->run_hooks("member_activate_emailupdated");
  760.  
  761. redirect("usercp.php", $lang->redirect_emailupdated);
  762. }
  763. else
  764. {
  765. $plugins->run_hooks("member_activate_accountactivated");
  766.  
  767. redirect("index.php", $lang->redirect_accountactivated);
  768. }
  769. }
  770. else
  771. {
  772. $plugins->run_hooks("member_activate_form");
  773.  
  774. eval("\$activate = \"".$templates->get("member_activate")."\";");
  775. output_page($activate);
  776. }
  777. }
  778.  
  779. if($mybb->input['action'] == "resendactivation")
  780. {
  781. $plugins->run_hooks("member_resendactivation");
  782.  
  783. if($mybb->settings['regtype'] == "admin")
  784. {
  785. error($lang->error_activated_by_admin);
  786. }
  787.  
  788. eval("\$activate = \"".$templates->get("member_resendactivation")."\";");
  789. output_page($activate);
  790. }
  791.  
  792. if($mybb->input['action'] == "do_resendactivation" && $mybb->request_method == "post")
  793. {
  794. $plugins->run_hooks("member_do_resendactivation_start");
  795.  
  796. if($mybb->settings['regtype'] == "admin")
  797. {
  798. error($lang->error_activated_by_admin);
  799. }
  800.  
  801. $query = $db->query("
  802. SELECT u.uid, u.username, u.usergroup, u.email, a.code
  803. FROM ".TABLE_PREFIX."users u
  804. LEFT JOIN ".TABLE_PREFIX."awaitingactivation a ON (a.uid=u.uid AND a.type='r')
  805. WHERE u.email='".$db->escape_string($mybb->input['email'])."'
  806. ");
  807. $numusers = $db->num_rows($query);
  808. if($numusers < 1)
  809. {
  810. error($lang->error_invalidemail);
  811. }
  812. else
  813. {
  814. while($user = $db->fetch_array($query))
  815. {
  816. if($user['usergroup'] == 5)
  817. {
  818. if(!$user['code'])
  819. {
  820. $user['code'] = random_str();
  821. $now = TIME_NOW;
  822. $uid = $user['uid'];
  823. $awaitingarray = array(
  824. "uid" => $uid,
  825. "dateline" => TIME_NOW,
  826. "code" => $user['code'],
  827. "type" => "r"
  828. );
  829. $db->insert_query("awaitingactivation", $awaitingarray);
  830. }
  831. $username = $user['username'];
  832. $email = $user['email'];
  833. $activationcode = $user['code'];
  834. $emailsubject = $lang->sprintf($lang->emailsubject_activateaccount, $mybb->settings['bbname']);
  835. $emailmessage = $lang->sprintf($lang->email_activateaccount, $user['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $user['uid'], $activationcode);
  836. my_mail($email, $emailsubject, $emailmessage);
  837. }
  838. }
  839. $plugins->run_hooks("member_do_resendactivation_end");
  840.  
  841. redirect("index.php", $lang->redirect_activationresent);
  842. }
  843. }
  844.  
  845. if($mybb->input['action'] == "lostpw")
  846. {
  847. $plugins->run_hooks("member_lostpw");
  848.  
  849. eval("\$lostpw = \"".$templates->get("member_lostpw")."\";");
  850. output_page($lostpw);
  851. }
  852.  
  853. if($mybb->input['action'] == "do_lostpw" && $mybb->request_method == "post")
  854. {
  855. $plugins->run_hooks("member_do_lostpw_start");
  856.  
  857. $email = $db->escape_string($email);
  858. $query = $db->simple_select("users", "*", "email='".$db->escape_string($mybb->input['email'])."'");
  859. $numusers = $db->num_rows($query);
  860. if($numusers < 1)
  861. {
  862. error($lang->error_invalidemail);
  863. }
  864. else
  865. {
  866. while($user = $db->fetch_array($query))
  867. {
  868. $db->delete_query("awaitingactivation", "uid='{$user['uid']}' AND type='p'");
  869. $user['activationcode'] = random_str();
  870. $now = TIME_NOW;
  871. $uid = $user['uid'];
  872. $awaitingarray = array(
  873. "uid" => $user['uid'],
  874. "dateline" => TIME_NOW,
  875. "code" => $user['activationcode'],
  876. "type" => "p"
  877. );
  878. $db->insert_query("awaitingactivation", $awaitingarray);
  879. $username = $user['username'];
  880. $email = $user['email'];
  881. $activationcode = $user['activationcode'];
  882. $emailsubject = $lang->sprintf($lang->emailsubject_lostpw, $mybb->settings['bbname']);
  883. $emailmessage = $lang->sprintf($lang->email_lostpw, $username, $mybb->settings['bbname'], $mybb->settings['bburl'], $uid, $activationcode);
  884. my_mail($email, $emailsubject, $emailmessage);
  885. }
  886. }
  887. $plugins->run_hooks("member_do_lostpw_end");
  888.  
  889. redirect("index.php", $lang->redirect_lostpwsent);
  890. }
  891.  
  892. if($mybb->input['action'] == "resetpassword")
  893. {
  894. $plugins->run_hooks("member_resetpassword_start");
  895.  
  896. if($mybb->input['username'])
  897. {
  898. $query = $db->simple_select("users", "*", "LOWER(username)='".$db->escape_string(my_strtolower($mybb->input['username']))."'");
  899. $user = $db->fetch_array($query);
  900. if(!$user['uid'])
  901. {
  902. error($lang->error_invalidpworusername);
  903. }
  904. }
  905. else
  906. {
  907. $query = $db->simple_select("users", "*", "uid='".intval($mybb->input['uid'])."'");
  908. $user = $db->fetch_array($query);
  909. }
  910. if($mybb->input['code'] && $user['uid'])
  911. {
  912. $query = $db->simple_select("awaitingactivation", "*", "uid='".$user['uid']."' AND type='p'");
  913. $activation = $db->fetch_array($query);
  914. $now = TIME_NOW;
  915. if($activation['code'] != $mybb->input['code'])
  916. {
  917. error($lang->error_badlostpwcode);
  918. }
  919. $db->delete_query("awaitingactivation", "uid='".$user['uid']."' AND type='p'");
  920. $username = $user['username'];
  921.  
  922. // Generate a new password, then update it
  923. $password = random_str();
  924. $logindetails = update_password($user['uid'], md5($password), $user['salt']);
  925.  
  926. $email = $user['email'];
  927.  
  928. $plugins->run_hooks("member_resetpassword_process");
  929.  
  930. $emailsubject = $lang->sprintf($lang->emailsubject_passwordreset, $mybb->settings['bbname']);
  931. $emailmessage = $lang->sprintf($lang->email_passwordreset, $username, $mybb->settings['bbname'], $password);
  932. my_mail($email, $emailsubject, $emailmessage);
  933.  
  934. $plugins->run_hooks("member_resetpassword_reset");
  935.  
  936. error($lang->redirect_passwordreset);
  937. }
  938. else
  939. {
  940. $plugins->run_hooks("member_resetpassword_form");
  941.  
  942. eval("\$activate = \"".$templates->get("member_resetpassword")."\";");
  943. output_page($activate);
  944. }
  945. }
  946.  
  947. $do_captcha = $correct = false;
  948. $inline_errors = "";
  949. if($mybb->input['action'] == "do_login" && $mybb->request_method == "post")
  950. {
  951. $plugins->run_hooks("member_do_login_start");
  952.  
  953. // Checks to make sure the user can login; they haven't had too many tries at logging in.
  954. // Is a fatal call if user has had too many tries
  955. $logins = login_attempt_check();
  956. $login_text = '';
  957.  
  958. // Did we come from the quick login form
  959. if($mybb->input['quick_login'] == "1" && $mybb->input['quick_password'] && $mybb->input['quick_username'])
  960. {
  961. $mybb->input['password'] = $mybb->input['quick_password'];
  962. $mybb->input['username'] = $mybb->input['quick_username'];
  963. $mybb->input['remember'] = $mybb->input['quick_remember'];
  964. }
  965.  
  966. if(!username_exists($mybb->input['username']))
  967. {
  968. my_setcookie('loginattempts', $logins + 1);
  969. error($lang->error_invalidpworusername.$login_text);
  970. }
  971.  
  972. $query = $db->simple_select("users", "loginattempts", "LOWER(username)='".$db->escape_string(my_strtolower($mybb->input['username']))."'", array('limit' => 1));
  973. $loginattempts = $db->fetch_field($query, "loginattempts");
  974.  
  975. $errors = array();
  976.  
  977. $user = validate_password_from_username($mybb->input['username'], $mybb->input['password']);
  978. if(!$user['uid'])
  979. {
  980. my_setcookie('loginattempts', $logins + 1);
  981. $db->update_query("users", array('loginattempts' => 'loginattempts+1'), "LOWER(username) = '".$db->escape_string(my_strtolower($mybb->input['username']))."'", 1, true);
  982.  
  983. $mybb->input['action'] = "login";
  984. $mybb->input['request_method'] = "get";
  985.  
  986. if($mybb->settings['failedlogincount'] != 0 && $mybb->settings['failedlogintext'] == 1)
  987. {
  988. $login_text = $lang->sprintf($lang->failed_login_again, $mybb->settings['failedlogincount'] - $logins);
  989. }
  990.  
  991. $errors[] = $lang->error_invalidpworusername.$login_text;
  992. }
  993. else
  994. {
  995. $correct = true;
  996. }
  997.  
  998. if($mybb->settings['failedcaptchalogincount'] > 0 && ($loginattempts > $mybb->settings['failedcaptchalogincount'] || intval($mybb->cookies['loginattempts']) > $mybb->settings['failedcaptchalogincount']))
  999. {
  1000. // Show captcha image if enabled
  1001. if($mybb->settings['captchaimage'] == 1 && function_exists("imagepng"))
  1002. {
  1003. // Check their current captcha input - if correct, hide the captcha input area
  1004. if($mybb->input['imagestring'])
  1005. {
  1006. $imagehash = $db->escape_string($mybb->input['imagehash']);
  1007. $imagestring = $db->escape_string($mybb->input['imagestring']);
  1008. $query = $db->simple_select("captcha", "*", "imagehash='{$imagehash}' AND imagestring='{$imagestring}'");
  1009. $imgcheck = $db->fetch_array($query);
  1010. if($imgcheck['dateline'] > 0)
  1011. {
  1012. $correct = true;
  1013. }
  1014. else
  1015. {
  1016. $db->delete_query("captcha", "imagehash='{$imagehash}'");
  1017. $errors[] = $lang->error_regimageinvalid;
  1018. }
  1019. }
  1020. else if($mybb->input['quick_login'] == 1 && $mybb->input['quick_password'] && $mybb->input['quick_username'])
  1021. {
  1022. $errors[] = $lang->error_regimagerequired;
  1023. }
  1024. else
  1025. {
  1026. $errors[] = $lang->error_regimagerequired;
  1027. }
  1028. }
  1029.  
  1030. $do_captcha = true;
  1031. }
  1032.  
  1033. if(!empty($errors))
  1034. {
  1035. $mybb->input['action'] = "login";
  1036. $mybb->input['request_method'] = "get";
  1037.  
  1038. $inline_errors = inline_error($errors);
  1039. }
  1040. else if($correct)
  1041. {
  1042. if($user['coppauser'])
  1043. {
  1044. error($lang->error_awaitingcoppa);
  1045. }
  1046.  
  1047. my_setcookie('loginattempts', 1);
  1048. $db->delete_query("sessions", "ip='".$db->escape_string($session->ipaddress)."' AND sid != '".$session->sid."'");
  1049. $newsession = array(
  1050. "uid" => $user['uid'],
  1051. );
  1052. $db->update_query("sessions", $newsession, "sid='".$session->sid."'");
  1053.  
  1054. $db->update_query("users", array("loginattempts" => 1), "uid='{$user['uid']}'");
  1055.  
  1056. if($mybb->input['remember'] != "yes")
  1057. {
  1058. $remember = -1;
  1059. }
  1060. else
  1061. {
  1062. $remember = null;
  1063. }
  1064. my_setcookie("mybbuser", $user['uid']."_".$user['loginkey'], $remember, true);
  1065. my_setcookie("sid", $session->sid, -1, true);
  1066.  
  1067. $plugins->run_hooks("member_do_login_end");
  1068.  
  1069. if($mybb->input['url'] != "" && my_strpos(basename($mybb->input['url']), 'member.php') === false)
  1070. {
  1071. 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)
  1072. {
  1073. $mybb->input['url'] = str_replace('&processed=1', '', $mybb->input['url']);
  1074. }
  1075.  
  1076. $mybb->input['url'] = str_replace('&', '&', $mybb->input['url']);
  1077.  
  1078. // Redirect to the URL if it is not member.php
  1079. redirect(htmlentities($mybb->input['url']), $lang->redirect_loggedin);
  1080. }
  1081. else
  1082. {
  1083. redirect("index.php", $lang->redirect_loggedin);
  1084. }
  1085. }
  1086. else
  1087. {
  1088. $mybb->input['action'] = "login";
  1089. $mybb->input['request_method'] = "get";
  1090. }
  1091.  
  1092. $plugins->run_hooks("member_do_login_end");
  1093. }
  1094.  
  1095. if($mybb->input['action'] == "login")
  1096. {
  1097. $plugins->run_hooks("member_login");
  1098.  
  1099. $member_loggedin_notice = "";
  1100. if($mybb->user['uid'] != 0)
  1101. {
  1102. $lang->already_logged_in = $lang->sprintf($lang->already_logged_in, build_profile_link($mybb->user['username'], $mybb->user['uid']));
  1103. eval("\$member_loggedin_notice = \"".$templates->get("member_loggedin_notice")."\";");
  1104. }
  1105.  
  1106. // Checks to make sure the user can login; they haven't had too many tries at logging in.
  1107. // Is a fatal call if user has had too many tries
  1108. login_attempt_check();
  1109.  
  1110. // Redirect to the page where the user came from, but not if that was the login page.
  1111. if($_SERVER['HTTP_REFERER'] && strpos($_SERVER['HTTP_REFERER'], "action=login") === false)
  1112. {
  1113. $redirect_url = htmlentities($_SERVER['HTTP_REFERER']);
  1114. }
  1115. else
  1116. {
  1117. $redirect_url = '';
  1118. }
  1119.  
  1120. $captcha = "";
  1121. // Show captcha image for guests if enabled
  1122. if($mybb->settings['captchaimage'] == 1 && function_exists("imagepng") && $do_captcha == true)
  1123. {
  1124. $randomstr = random_str(5);
  1125. $imagehash = md5(random_str(12));
  1126. $imagearray = array(
  1127. "imagehash" => $imagehash,
  1128. "imagestring" => $randomstr,
  1129. "dateline" => TIME_NOW
  1130. );
  1131. $db->insert_query("captcha", $imagearray);
  1132. eval("\$captcha = \"".$templates->get("post_captcha")."\";");
  1133. }
  1134.  
  1135. $username = "";
  1136. $password = "";
  1137. if($mybb->input['username'] && $mybb->request_method == "post")
  1138. {
  1139. $username = htmlspecialchars_uni($mybb->input['username']);
  1140. }
  1141.  
  1142. if($mybb->input['password'] && $mybb->request_method == "post")
  1143. {
  1144. $password = htmlspecialchars_uni($mybb->input['password']);
  1145. }
  1146.  
  1147. eval("\$login = \"".$templates->get("member_login")."\";");
  1148. output_page($login);
  1149. }
  1150.  
  1151. if($mybb->input['action'] == "logout")
  1152. {
  1153. $plugins->run_hooks("member_logout_start");
  1154.  
  1155. if(!$mybb->user['uid'])
  1156. {
  1157. redirect("index.php", $lang->redirect_alreadyloggedout);
  1158. }
  1159.  
  1160. // Check session ID if we have one
  1161. if($mybb->input['sid'] && $mybb->input['sid'] != $session->sid)
  1162. {
  1163. error($lang->error_notloggedout);
  1164. }
  1165. // Otherwise, check logoutkey
  1166. else if(!$mybb->input['sid'] && $mybb->input['logoutkey'] != $mybb->user['logoutkey'])
  1167. {
  1168. error($lang->error_notloggedout);
  1169. }
  1170.  
  1171. my_unsetcookie("mybbuser");
  1172. my_unsetcookie("sid");
  1173. if($mybb->user['uid'])
  1174. {
  1175. $time = TIME_NOW;
  1176. $lastvisit = array(
  1177. "lastactive" => $time-900,
  1178. "lastvisit" => $time,
  1179. );
  1180. $db->update_query("users", $lastvisit, "uid='".$mybb->user['uid']."'");
  1181. $db->delete_query("sessions", "sid='".$session->sid."'");
  1182. }
  1183. $plugins->run_hooks("member_logout_end");
  1184. redirect("index.php", $lang->redirect_loggedout);
  1185. }
  1186.  
  1187. if($mybb->input['action'] == "profile")
  1188. {
  1189. $plugins->run_hooks("member_profile_start");
  1190.  
  1191. if($mybb->usergroup['canviewprofiles'] == 0)
  1192. {
  1193. error_no_permission();
  1194. }
  1195. if($mybb->input['uid'] == "lastposter")
  1196. {
  1197. if($mybb->input['tid'])
  1198. {
  1199. $query = $db->simple_select("posts", "uid", "tid='".intval($mybb->input['tid'])."' AND visible = 1", array('order_by' => 'dateline', 'order_dir' => 'DESC', 'limit' => '1'));
  1200. $post = $db->fetch_array($query);
  1201. $uid = $post['uid'];
  1202. }
  1203. elseif($mybb->input['fid'])
  1204. {
  1205. $flist = '';
  1206. switch($db->type)
  1207. {
  1208. case "pgsql":
  1209. case "sqlite":
  1210. $query = $db->simple_select("forums", "fid", "INSTR(','||parentlist||',',',".intval($mybb->input['fid']).",') > 0");
  1211. break;
  1212. default:
  1213. $query = $db->simple_select("forums", "fid", "INSTR(CONCAT(',',parentlist,','),',".intval($mybb->input['fid']).",') > 0");
  1214. }
  1215.  
  1216. while($forum = $db->fetch_array($query))
  1217. {
  1218. if($forum['fid'] == $mybb->input['fid'])
  1219. {
  1220. $theforum = $forum;
  1221. }
  1222. $flist .= ",".$forum['fid'];
  1223. }
  1224. $query = $db->simple_select("threads", "tid", "fid IN (0$flist) AND visible = 1", array('order_by' => 'lastpost', 'order_dir' => 'DESC', 'limit' => '1'));
  1225. $thread = $db->fetch_array($query);
  1226. $tid = $thread['tid'];
  1227. $query = $db->simple_select("posts", "uid", "tid='$tid' AND visible = 1", array('order_by' => 'dateline', 'order_dir' => 'DESC', 'limit' => '1'));
  1228. $post = $db->fetch_array($query);
  1229. $uid = $post['uid'];
  1230. }
  1231. }
  1232. else
  1233. {
  1234. if($mybb->input['uid'])
  1235. {
  1236. $uid = intval($mybb->input['uid']);
  1237. }
  1238. else
  1239. {
  1240. $uid = $mybb->user['uid'];
  1241. }
  1242. }
  1243.  
  1244. if($mybb->user['uid'] != $uid)
  1245. {
  1246. $query = $db->simple_select("users", "*", "uid='$uid'");
  1247. $memprofile = $db->fetch_array($query);
  1248. }
  1249. else
  1250. {
  1251. $memprofile = $mybb->user;
  1252. }
  1253.  
  1254. $lang->profile = $lang->sprintf($lang->profile, $memprofile['username']);
  1255.  
  1256. if(!$memprofile['uid'])
  1257. {
  1258. error($lang->error_nomember);
  1259. }
  1260.  
  1261. // Get member's permissions
  1262. $memperms = user_permissions($memprofile['uid']);
  1263.  
  1264. $lang->nav_profile = $lang->sprintf($lang->nav_profile, $memprofile['username']);
  1265. add_breadcrumb($lang->nav_profile);
  1266.  
  1267. $lang->users_forum_info = $lang->sprintf($lang->users_forum_info, $memprofile['username']);
  1268. $lang->users_contact_details = $lang->sprintf($lang->users_contact_details, $memprofile['username']);
  1269.  
  1270. if($mybb->settings['enablepms'] != 0 && $memprofile['receivepms'] != 0 && $memperms['canusepms'] != 0 && my_strpos(",".$memprofile['ignorelist'].",", ",".$mybb->user['uid'].",") === false)
  1271. {
  1272. $lang->send_pm = $lang->sprintf($lang->send_pm, $memprofile['username']);
  1273. }
  1274. else
  1275. {
  1276. $lang->send_pm = '';
  1277. }
  1278. $lang->away_note = $lang->sprintf($lang->away_note, $memprofile['username']);
  1279. $lang->users_additional_info = $lang->sprintf($lang->users_additional_info, $memprofile['username']);
  1280. $lang->users_signature = $lang->sprintf($lang->users_signature, $memprofile['username']);
  1281. $lang->send_user_email = $lang->sprintf($lang->send_user_email, $memprofile['username']);
  1282.  
  1283. if($memprofile['avatar'])
  1284. {
  1285. $memprofile['avatar'] = htmlspecialchars_uni($memprofile['avatar']);
  1286. $avatar_dimensions = explode("|", $memprofile['avatardimensions']);
  1287. if($avatar_dimensions[0] && $avatar_dimensions[1])
  1288. {
  1289. $avatar_width_height = "width=\"{$avatar_dimensions[0]}\" height=\"{$avatar_dimensions[1]}\"";
  1290. }
  1291. $avatar = "<img src=\"{$memprofile['avatar']}\" alt=\"\" $avatar_width_height />";
  1292. }
  1293. else
  1294. {
  1295. $avatar = '';
  1296. }
  1297.  
  1298. if($memprofile['hideemail'] != 1)
  1299. {
  1300. eval("\$sendemail = \"".$templates->get("member_profile_email")."\";");
  1301. }
  1302. else
  1303. {
  1304. $alttrow = "trow1"; // To properly sort the contact details below
  1305. $sendemail = '';
  1306. }
  1307.  
  1308. // Clean alt_trow for the contact details
  1309. $cat_array = array(
  1310. "pm",
  1311. "icq",
  1312. "aim",
  1313. "yahoo",
  1314. "msn",
  1315. );
  1316.  
  1317. $bgcolors = array();
  1318. foreach($cat_array as $cat)
  1319. {
  1320. $bgcolors[$cat] = alt_trow();
  1321. }
  1322.  
  1323. if($memprofile['website'])
  1324. {
  1325. $memprofile['website'] = htmlspecialchars_uni($memprofile['website']);
  1326. $website = "<a href=\"{$memprofile['website']}\" target=\"_blank\">{$memprofile['website']}</a>";
  1327. }
  1328. else
  1329. {
  1330. $website = '';
  1331. }
  1332.  
  1333. if($memprofile['signature'] && ($memprofile['suspendsignature'] == 0 || $memprofile['suspendsigtime'] < TIME_NOW))
  1334. {
  1335. $sig_parser = array(
  1336. "allow_html" => $mybb->settings['sightml'],
  1337. "allow_mycode" => $mybb->settings['sigmycode'],
  1338. "allow_smilies" => $mybb->settings['sigsmilies'],
  1339. "allow_imgcode" => $mybb->settings['sigimgcode'],
  1340. "me_username" => $memprofile['username']
  1341. );
  1342.  
  1343. $memprofile['signature'] = $parser->parse_message($memprofile['signature'], $sig_parser);
  1344. eval("\$signature = \"".$templates->get("member_profile_signature")."\";");
  1345. }
  1346.  
  1347. $daysreg = (TIME_NOW - $memprofile['regdate']) / (24*3600);
  1348. $ppd = $memprofile['postnum'] / $daysreg;
  1349. $ppd = round($ppd, 2);
  1350. if($ppd > $memprofile['postnum'])
  1351. {
  1352. $ppd = $memprofile['postnum'];
  1353. }
  1354. $stats = $cache->read("stats");
  1355. $numposts = $stats['numposts'];
  1356. if($numposts == 0)
  1357. {
  1358. $percent = "0";
  1359. }
  1360. else
  1361. {
  1362. $percent = $memprofile['postnum']*100/$numposts;
  1363. $percent = round($percent, 2);
  1364. }
  1365.  
  1366. if($percent > 100)
  1367. {
  1368. $percent = 100;
  1369. }
  1370.  
  1371. if(!empty($memprofile['icq']))
  1372. {
  1373. $memprofile['icq'] = intval($memprofile['icq']);
  1374. }
  1375. else
  1376. {
  1377. $memprofile['icq'] = '';
  1378. }
  1379.  
  1380. if($memprofile['away'] == 1 && $mybb->settings['allowaway'] != 0)
  1381. {
  1382. $lang->away_note = $lang->sprintf($lang->away_note, $memprofile['username']);
  1383. $awaydate = my_date($mybb->settings['dateformat'], $memprofile['awaydate']);
  1384. if(!empty($memprofile['awayreason']))
  1385. {
  1386. $awayreason = htmlspecialchars_uni($memprofile['awayreason']);
  1387. }
  1388. else
  1389. {
  1390. $awayreason = $lang->away_no_reason;
  1391. }
  1392. if($memprofile['returndate'] == '')
  1393. {
  1394. $returndate = "$lang->unknown";
  1395. }
  1396. else
  1397. {
  1398. $returnhome = explode("-", $memprofile['returndate']);
  1399. if($returnhome[2] >= 2038)
  1400. {
  1401. require_once MYBB_ROOT."inc/functions_time.php";
  1402. $returnmkdate = adodb_mktime(0, 0, 0, $returnhome[1], $returnhome[0], $returnhome[2]);
  1403. $returndate = my_date($mybb->settings['dateformat'], $returnmkdate, "", 1, true);
  1404. }
  1405. else
  1406. {
  1407. $returnmkdate = mktime(0, 0, 0, $returnhome[1], $returnhome[0], $returnhome[2]);
  1408. $returndate = my_date($mybb->settings['dateformat'], $returnmkdate);
  1409. }
  1410. }
  1411. eval("\$awaybit = \"".$templates->get("member_profile_away")."\";");
  1412. }
  1413. if($memprofile['dst'] == 1)
  1414. {
  1415. $memprofile['timezone']++;
  1416. if(my_substr($memprofile['timezone'], 0, 1) != "-")
  1417. {
  1418. $memprofile['timezone'] = "+{$memprofile['timezone']}";
  1419. }
  1420. }
  1421. $memregdate = my_date($mybb->settings['dateformat'], $memprofile['regdate']);
  1422. $memlocaldate = gmdate($mybb->settings['dateformat'], TIME_NOW + ($memprofile['timezone'] * 3600));
  1423. $memlocaltime = gmdate($mybb->settings['timeformat'], TIME_NOW + ($memprofile['timezone'] * 3600));
  1424.  
  1425. $localtime = $lang->sprintf($lang->local_time_format, $memlocaldate, $memlocaltime);
  1426.  
  1427. if($memprofile['lastactive'])
  1428. {
  1429. $memlastvisitdate = my_date($mybb->settings['dateformat'], $memprofile['lastactive']);
  1430. $memlastvisitsep = $lang->comma;
  1431. $memlastvisittime = my_date($mybb->settings['timeformat'], $memprofile['lastactive']);
  1432. }
  1433. else
  1434. {
  1435. $memlastvisitdate = $lang->lastvisit_never;
  1436. $memlastvisitsep = '';
  1437. $memlastvisittime = '';
  1438. }
  1439.  
  1440. if($memprofile['birthday'])
  1441. {
  1442. $membday = explode("-", $memprofile['birthday']);
  1443.  
  1444. if($memprofile['birthdayprivacy'] != 'none')
  1445. {
  1446. if($membday[2])
  1447. {
  1448. $lang->membdayage = $lang->sprintf($lang->membdayage, get_age($memprofile['birthday']));
  1449.  
  1450. if($membday[2] >= 1970)
  1451. {
  1452. $w_day = date("l", mktime(0, 0, 0, $membday[1], $membday[0], $membday[2]));
  1453. $membday = format_bdays($mybb->settings['dateformat'], $membday[1], $membday[0], $membday[2], $w_day);
  1454. }
  1455. else
  1456. {
  1457. $bdayformat = fix_mktime($mybb->settings['dateformat'], $membday[2]);
  1458. $membday = mktime(0, 0, 0, $membday[1], $membday[0], $membday[2]);
  1459. $membday = date($bdayformat, $membday);
  1460. }
  1461. $membdayage = $lang->membdayage;
  1462. }
  1463. else
  1464. {
  1465. $membday = mktime(0, 0, 0, $membday[1], $membday[0], 0);
  1466. $membday = date("F j", $membday);
  1467. $membdayage = '';
  1468. }
  1469. }
  1470.  
  1471. if($memprofile['birthdayprivacy'] == 'age')
  1472. {
  1473. $membday = $lang->birthdayhidden;
  1474. }
  1475. else if($memprofile['birthdayprivacy'] == 'none')
  1476. {
  1477. $membday = $lang->birthdayhidden;
  1478. $membdayage = '';
  1479. }
  1480. }
  1481. else
  1482. {
  1483. $membday = $lang->not_specified;
  1484. $membdayage = '';
  1485. }
  1486.  
  1487. if(!$memprofile['displaygroup'])
  1488. {
  1489. $memprofile['displaygroup'] = $memprofile['usergroup'];
  1490. }
  1491.  
  1492. // Grab the following fields from the user's displaygroup
  1493. $displaygroupfields = array(
  1494. "title",
  1495. "usertitle",
  1496. "stars",
  1497. "starimage",
  1498. "image",
  1499. "usereputationsystem"
  1500. );
  1501. $displaygroup = usergroup_displaygroup($memprofile['displaygroup']);
  1502.  
  1503. // Get the user title for this user
  1504. unset($usertitle);
  1505. unset($stars);
  1506. if(trim($memprofile['usertitle']) != '')
  1507. {
  1508. // User has custom user title
  1509. $usertitle = $memprofile['usertitle'];
  1510. }
  1511. elseif(trim($displaygroup['usertitle']) != '')
  1512. {
  1513. // User has group title
  1514. $usertitle = $displaygroup['usertitle'];
  1515. }
  1516. else
  1517. {
  1518. // No usergroup title so get a default one
  1519. $query = $db->simple_select("usertitles", "*", "", array('order_by' => 'posts', 'order_dir' => 'DESC'));
  1520. while($title = $db->fetch_array($query))
  1521. {
  1522. if($memprofile['postnum'] >= $title['posts'])
  1523. {
  1524. $usertitle = $title['title'];
  1525. $stars = $title['stars'];
  1526. $starimage = $title['starimage'];
  1527. break;
  1528. }
  1529. }
  1530. }
  1531.  
  1532. if($displaygroup['stars'] || $displaygroup['usertitle'])
  1533. {
  1534. // Set the number of stars if display group has constant number of stars
  1535. $stars = $displaygroup['stars'];
  1536. }
  1537. elseif(!$stars)
  1538. {
  1539. // 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)
  1540. $query = $db->simple_select("usertitles", "*", "", array('order_by' => 'posts', 'order_dir' => 'DESC'));
  1541. while($title = $db->fetch_array($query))
  1542. {
  1543. if($memprofile['postnum'] >= $title['posts'])
  1544. {
  1545. $stars = $title['stars'];
  1546. $starimage = $title['starimage'];
  1547. break;
  1548. }
  1549. }
  1550. }
  1551.  
  1552. if(!empty($displaygroup['image']))
  1553. {
  1554. if(!empty($mybb->user['language']))
  1555. {
  1556. $language = $mybb->user['language'];
  1557. }
  1558. else
  1559. {
  1560. $language = $mybb->settings['bblanguage'];
  1561. }
  1562. $displaygroup['image'] = str_replace("{lang}", $language, $displaygroup['image']);
  1563. $displaygroup['image'] = str_replace("{theme}", $theme['imgdir'], $displaygroup['image']);
  1564. eval("\$groupimage = \"".$templates->get("member_profile_groupimage")."\";");
  1565. }
  1566.  
  1567. if(!$starimage)
  1568. {
  1569. $starimage = $displaygroup['starimage'];
  1570. }
  1571.  
  1572. if($starimage)
  1573. {
  1574. // Only display stars if we have an image to use...
  1575. $starimage = str_replace("{theme}", $theme['imgdir'], $starimage);
  1576. $userstars = '';
  1577. for($i = 0; $i < $stars; ++$i)
  1578. {
  1579. $userstars .= "<img src=\"$starimage\" border=\"0\" alt=\"*\" />";
  1580. }
  1581. }
  1582.  
  1583. // User is currently online and this user has permissions to view the user on the WOL
  1584. $timesearch = TIME_NOW - $mybb->settings['wolcutoffmins']*60;
  1585. $query = $db->simple_select("sessions", "location,nopermission", "uid='$uid' AND time>'{$timesearch}'", array('order_by' => 'time', 'order_dir' => 'DESC', 'limit' => 1));
  1586. $session = $db->fetch_array($query);
  1587.  
  1588. if(($memprofile['invisible'] != 1 || $mybb->usergroup['canviewwolinvis'] == 1 || $memprofile['uid'] == $mybb->user['uid']) && !empty($session))
  1589. {
  1590. // Fetch their current location
  1591. $lang->load("online");
  1592. require_once MYBB_ROOT."inc/functions_online.php";
  1593. $activity = fetch_wol_activity($session['location'], $session['nopermission']);
  1594. $location = build_friendly_wol_location($activity);
  1595. $location_time = my_date($mybb->settings['timeformat'], $memprofile['lastactive']);
  1596.  
  1597. eval("\$online_status = \"".$templates->get("member_profile_online")."\";");
  1598. }
  1599. // User is offline
  1600. else
  1601. {
  1602. eval("\$online_status = \"".$templates->get("member_profile_offline")."\";");
  1603. }
  1604.  
  1605. // Build Referral
  1606. if($mybb->settings['usereferrals'] == 1)
  1607. {
  1608. // Reset the background colours to keep it inline
  1609. $bg_color = alt_trow(true);
  1610.  
  1611. eval("\$referrals = \"".$templates->get("member_profile_referrals")."\";");
  1612. }
  1613. else
  1614. {
  1615. // Manually set to override colours...
  1616. $alttrow = 'trow2';
  1617. }
  1618.  
  1619. // Fetch the reputation for this user
  1620. if($memperms['usereputationsystem'] == 1 && $displaygroup['usereputationsystem'] == 1 && $mybb->settings['enablereputation'] == 1)
  1621. {
  1622. $bg_color = alt_trow();
  1623. $reputation = get_reputation($memprofile['reputation']);
  1624.  
  1625. // If this user has permission to give reputations show the vote link
  1626. if($mybb->usergroup['cangivereputations'] == 1 && $memprofile['uid'] != $mybb->user['uid'])
  1627. {
  1628. $vote_link = "[<a href=\"javascript:MyBB.reputation({$memprofile['uid']});\">{$lang->reputation_vote}</a>]";
  1629. }
  1630.  
  1631. eval("\$reputation = \"".$templates->get("member_profile_reputation")."\";");
  1632. }
  1633.  
  1634. if($mybb->settings['enablewarningsystem'] != 0 && $memperms['canreceivewarnings'] != 0 && ($mybb->usergroup['canwarnusers'] != 0 || ($mybb->user['uid'] == $memprofile['uid'] && $mybb->settings['canviewownwarning'] != 0)))
  1635. {
  1636. $bg_color = alt_trow();
  1637. $warning_level = round($memprofile['warningpoints']/$mybb->settings['maxwarningpoints']*100);
  1638. if($warning_level > 100)
  1639. {
  1640. $warning_level = 100;
  1641. }
  1642. $warning_level = get_colored_warning_level($warning_level);
  1643. if($mybb->usergroup['canwarnusers'] != 0 && $memprofile['uid'] != $mybb->user['uid'])
  1644. {
  1645. eval("\$warn_user = \"".$templates->get("member_profile_warn")."\";");
  1646. $warning_link = "warnings.php?uid={$memprofile['uid']}";
  1647. }
  1648. else
  1649. {
  1650. $warning_link = "usercp.php";
  1651. }
  1652. eval("\$warning_level = \"".$templates->get("member_profile_warninglevel")."\";");
  1653. }
  1654.  
  1655. $query = $db->simple_select("userfields", "*", "ufid='$uid'");
  1656. $userfields = $db->fetch_array($query);
  1657. $customfields = '';
  1658. $bgcolor = "trow1";
  1659. $alttrow = "trow1";
  1660. // If this user is an Administrator or a Moderator then we wish to show all profile fields
  1661. if($mybb->usergroup['cancp'] == 1 || $mybb->usergroup['issupermod'] == 1 || $mybb->usergroup['canmodcp'] == 1)
  1662. {
  1663. $field_hidden = '1=1';
  1664. }
  1665. else
  1666. {
  1667. $field_hidden = "hidden=0";
  1668. }
  1669. $query = $db->simple_select("profilefields", "*", "{$field_hidden}", array('order_by' => 'disporder'));
  1670. while($customfield = $db->fetch_array($query))
  1671. {
  1672. $thing = explode("\n", $customfield['type'], "2");
  1673. $type = trim($thing[0]);
  1674.  
  1675. $field = "fid{$customfield['fid']}";
  1676. $useropts = explode("\n", $userfields[$field]);
  1677. $customfieldval = $comma = '';
  1678. if(is_array($useropts) && ($type == "multiselect" || $type == "checkbox"))
  1679. {
  1680. foreach($useropts as $val)
  1681. {
  1682. if($val != '')
  1683. {
  1684. $customfieldval .= "<li style=\"margin-left: 0;\">{$val}</li>";
  1685. }
  1686. }
  1687. if($customfieldval != '')
  1688. {
  1689. $customfieldval = "<ul style=\"margin: 0; padding-left: 15px;\">{$customfieldval}</ul>";
  1690. }
  1691. }
  1692. else
  1693. {
  1694. if($customfield['type'] == "textarea")
  1695. {
  1696. $customfieldval = nl2br(htmlspecialchars_uni($userfields[$field]));
  1697. }
  1698. else
  1699. {
  1700. $customfieldval = htmlspecialchars_uni($userfields[$field]);
  1701. }
  1702. }
  1703. eval("\$customfields .= \"".$templates->get("member_profile_customfields_field")."\";");
  1704. $bgcolor = alt_trow();
  1705. }
  1706. if($customfields)
  1707. {
  1708. eval("\$profilefields = \"".$templates->get("member_profile_customfields")."\";");
  1709. }
  1710. $memprofile['postnum'] = my_number_format($memprofile['postnum']);
  1711. $lang->ppd_percent_total = $lang->sprintf($lang->ppd_percent_total, my_number_format($ppd), $percent);
  1712. $formattedname = format_name($memprofile['username'], $memprofile['usergroup'], $memprofile['displaygroup']);
  1713. if($memprofile['timeonline'] > 0)
  1714. {
  1715. $timeonline = nice_time($memprofile['timeonline']);
  1716. }
  1717. else
  1718. {
  1719. $timeonline = $lang->none_registered;
  1720. }
  1721.  
  1722. if($mybb->usergroup['cancp'] == 1 && $mybb->config['hide_admin_links'] != 1)
  1723. {
  1724. eval("\$adminoptions = \"".$templates->get("member_profile_adminoptions")."\";");
  1725. }
  1726. else
  1727. {
  1728. $adminoptions = '';
  1729. }
  1730.  
  1731. if($mybb->usergroup['canmodcp'] == 1)
  1732. {
  1733. $memprofile['usernotes'] = nl2br(htmlspecialchars_uni($memprofile['usernotes']));
  1734.  
  1735. if(!empty($memprofile['usernotes']))
  1736. {
  1737. if(strlen($memprofile['usernotes']) > 100)
  1738. {
  1739. $memprofile['usernotes'] = my_substr($memprofile['usernotes'], 0, 100).'...';
  1740. }
  1741. }
  1742. else
  1743. {
  1744. $memprofile['usernotes'] = $lang->no_usernotes;
  1745. }
  1746.  
  1747. eval("\$modoptions = \"".$templates->get("member_profile_modoptions")."\";");
  1748. }
  1749. else
  1750. {
  1751. $modoptions = '';
  1752. }
  1753.  
  1754. $buddy_options = '';
  1755.  
  1756. if($mybb->user['uid'] != $memprofile['uid'] && $mybb->user['uid'] != 0)
  1757. {
  1758. $buddy_list = explode(',', $mybb->user['buddylist']);
  1759. if(in_array($mybb->input['uid'], $buddy_list))
  1760. {
  1761. $buddy_options = "<br /><a href=\"./usercp.php?action=do_editlists&delete={$mybb->input['uid']}&my_post_key={$mybb->post_code}\"><img src=\"{$theme['imgdir']}/remove_buddy.gif\" /> {$lang->remove_from_buddy_list}</a>";
  1762. }
  1763. else
  1764. {
  1765. $buddy_options = "<br /><a href=\"./usercp.php?action=do_editlists&add_username=".urlencode($memprofile['username'])."&my_post_key={$mybb->post_code}\"><img src=\"{$theme['imgdir']}/add_buddy.gif\" /> {$lang->add_to_buddy_list}</a>";
  1766. }
  1767.  
  1768. $ignore_list = explode(',', $mybb->user['ignorelist']);
  1769. if(in_array($mybb->input['uid'], $ignore_list))
  1770. {
  1771. $buddy_options .= "<br /><a href=\"./usercp.php?action=do_editlists&manage=ignored&delete={$mybb->input['uid']}&my_post_key={$mybb->post_code}\"><img src=\"{$theme['imgdir']}/remove_ignore.gif\" /> {$lang->remove_from_ignore_list}</a>";
  1772. }
  1773. else
  1774. {
  1775. $buddy_options .= "<br /><a href=\"./usercp.php?action=do_editlists&manage=ignored&add_username=".urlencode($memprofile['username'])."&my_post_key={$mybb->post_code}\"><img src=\"{$theme['imgdir']}/add_ignore.gif\" /> {$lang->add_to_ignore_list}</a>";
  1776. }
  1777. }
  1778.  
  1779. $plugins->run_hooks("member_profile_end");
  1780.  
  1781. eval("\$profile = \"".$templates->get("member_profile")."\";");
  1782. output_page($profile);
  1783. }
  1784.  
  1785. if($mybb->input['action'] == "do_emailuser" && $mybb->request_method == "post")
  1786. {
  1787. // Verify incoming POST request
  1788. verify_post_check($mybb->input['my_post_key']);
  1789.  
  1790. $plugins->run_hooks("member_do_emailuser_start");
  1791.  
  1792. // Guests or those without permission can't email other users
  1793. if($mybb->usergroup['cansendemail'] == 0 || !$mybb->user['uid'])
  1794. {
  1795. error_no_permission();
  1796. }
  1797.  
  1798. // Check group limits
  1799. if($mybb->usergroup['maxemails'] > 0)
  1800. {
  1801. $query = $db->simple_select("maillogs", "COUNT(*) AS sent_count", "fromuid='{$mybb->user['uid']}' AND dateline >= '".(TIME_NOW - (60*60*24))."'");
  1802. $sent_count = $db->fetch_field($query, "sent_count");
  1803. if($sent_count >= $mybb->usergroup['maxemails'])
  1804. {
  1805. $lang->error_max_emails_day = $lang->sprintf($lang->error_max_emails_day, $mybb->usergroup['maxemails']);
  1806. error($lang->error_max_emails_day);
  1807. }
  1808. }
  1809.  
  1810. $query = $db->simple_select("users", "uid, username, email, hideemail", "uid='".intval($mybb->input['uid'])."'");
  1811. $to_user = $db->fetch_array($query);
  1812.  
  1813. if(!$to_user['username'])
  1814. {
  1815. error($lang->error_invalidusername);
  1816. }
  1817.  
  1818. if($to_user['hideemail'] != 0)
  1819. {
  1820. error($lang->error_hideemail);
  1821. }
  1822.  
  1823. if(empty($mybb->input['subject']))
  1824. {
  1825. $errors[] = $lang->error_no_email_subject;
  1826. }
  1827.  
  1828. if(empty($mybb->input['message']))
  1829. {
  1830. $errors[] = $lang->error_no_email_message;
  1831. }
  1832.  
  1833. if(count($errors) == 0)
  1834. {
  1835. if($mybb->settings['mail_handler'] == 'smtp')
  1836. {
  1837. $from = $mybb->user['email'];
  1838. }
  1839. else
  1840. {
  1841. $from = "{$mybb->user['username']} <{$mybb->user['email']}>";
  1842. }
  1843.  
  1844. $message = $lang->sprintf($lang->email_emailuser, $to_user['username'], $mybb->user['username'], $mybb->settings['bbname'], $mybb->settings['bburl'], $mybb->input['message']);
  1845. my_mail($to_user['email'], $mybb->input['subject'], $message, $from, "", "", false, "text", "", $mybb->user['email']);
  1846.  
  1847. if($mybb->settings['mail_logging'] > 0)
  1848. {
  1849. // Log the message
  1850. $log_entry = array(
  1851. "subject" => $db->escape_string($mybb->input['subject']),
  1852. "message" => $db->escape_string($mybb->input['message']),
  1853. "dateline" => TIME_NOW,
  1854. "fromuid" => $mybb->user['uid'],
  1855. "fromemail" => $db->escape_string($mybb->user['email']),
  1856. "touid" => $to_user['uid'],
  1857. "toemail" => $db->escape_string($to_user['email']),
  1858. "tid" => 0,
  1859. "ipaddress" => $db->escape_string($session->ipaddress)
  1860. );
  1861. $db->insert_query("maillogs", $log_entry);
  1862. }
  1863.  
  1864. $plugins->run_hooks("member_do_emailuser_end");
  1865.  
  1866. redirect(get_profile_link($to_user['uid']), $lang->redirect_emailsent);
  1867. }
  1868. else
  1869. {
  1870. $mybb->input['action'] = "emailuser";
  1871. }
  1872. }
  1873.  
  1874. if($mybb->input['action'] == "emailuser")
  1875. {
  1876. $plugins->run_hooks("member_emailuser_start");
  1877.  
  1878. // Guests or those without permission can't email other users
  1879. if($mybb->usergroup['cansendemail'] == 0 || !$mybb->user['uid'])
  1880. {
  1881. error_no_permission();
  1882. }
  1883.  
  1884. // Check group limits
  1885. if($mybb->usergroup['maxemails'] > 0)
  1886. {
  1887. $query = $db->simple_select("maillogs", "COUNT(*) AS sent_count", "fromuid='{$mybb->user['uid']}' AND dateline >= '".(TIME_NOW - (60*60*24))."'");
  1888. $sent_count = $db->fetch_field($query, "sent_count");
  1889. if($sent_count > $mybb->usergroup['maxemails'])
  1890. {
  1891. $lang->error_max_emails_day = $lang->sprintf($lang->error_max_emails_day, $mybb->usergroup['maxemails']);
  1892. error($lang->error_max_emails_day);
  1893. }
  1894. }
  1895.  
  1896. $query = $db->simple_select("users", "uid, username, email, hideemail", "uid='".intval($mybb->input['uid'])."'");
  1897. $to_user = $db->fetch_array($query);
  1898.  
  1899. $lang->email_user = $lang->sprintf($lang->email_user, $to_user['username']);
  1900.  
  1901. if(!$to_user['uid'])
  1902. {
  1903. error($lang->error_invaliduser);
  1904. }
  1905.  
  1906. if($to_user['hideemail'] != 0)
  1907. {
  1908. error($lang->error_hideemail);
  1909. }
  1910.  
  1911. if(count($errors) > 0)
  1912. {
  1913. $errors = inline_error($errors);
  1914. $subject = htmlspecialchars_uni($mybb->input['subject']);
  1915. $message = htmlspecialchars_uni($mybb->input['message']);
  1916. }
  1917. else
  1918. {
  1919. $errors = '';
  1920. $subject = '';
  1921. $message = '';
  1922. }
  1923.  
  1924. $plugins->run_hooks("member_emailuser_end");
  1925.  
  1926. eval("\$emailuser = \"".$templates->get("member_emailuser")."\";");
  1927. output_page($emailuser);
  1928. }
  1929.  
  1930. if(!$mybb->input['action'])
  1931. {
  1932. header("Location: index.php");
  1933. }
  1934. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement