PageRenderTime 31ms CodeModel.GetById 20ms RepoModel.GetById 1ms app.codeStats 0ms

/upload/includes/ucp/usercp_register.php

http://torrentpier2.googlecode.com/
PHP | 791 lines | 627 code | 83 blank | 81 comment | 163 complexity | 99652ee64ee5d919219529210a634f6f MD5 | raw file
  1. <?php
  2. if (!defined('BB_ROOT')) die(basename(__FILE__));
  3. array_deep($_POST, 'trim');
  4. set_die_append_msg();
  5. if (IS_ADMIN)
  6. {
  7. $bb_cfg['reg_email_activation'] = false;
  8. $new_user = (int) request_var('admin', '');
  9. if ($new_user) $gen_simple_header = true;
  10. $template->assign_vars(array(
  11. 'NEW_USER' => $new_user,
  12. ));
  13. }
  14. $can_register = (IS_GUEST || IS_ADMIN);
  15. $submit = !empty($_POST['submit']);
  16. $errors = array();
  17. $adm_edit = false; // ?????????????? ??????? ?????? ???????
  18. require(INC_DIR .'bbcode.php');
  19. require(INC_DIR .'functions_validate.php');
  20. require(INC_DIR .'functions_selects.php');
  21. $pr_data = array(); // ?????? ?????????????? ???? ???????????????? ???????
  22. $db_data = array(); // ?????? ??? ????: ??????????????? ???? ?????????? ?????? ?????
  23. $tp_data = array(); // ?????? ??? tpl
  24. // ?????? ???????
  25. switch ($mode)
  26. {
  27. /**
  28. * ???????????
  29. */
  30. case 'register':
  31. if (!$can_register)
  32. {
  33. redirect('index.php');
  34. }
  35. if (!IS_ADMIN)
  36. {
  37. // ??????????? ?? ip
  38. if($bb_cfg['unique_ip'])
  39. {
  40. if($users = DB()->fetch_row("SELECT user_id, username FROM ". BB_USERS ." WHERE user_reg_ip = '". USER_IP ."' LIMIT 1"))
  41. {
  42. bb_die(sprintf($lang['ALREADY_REG_IP'], '<a href="'. PROFILE_URL . $users['user_id'] .'"><b>'. $users['username'] .'</b></a>', $bb_cfg['tech_admin_email']));
  43. }
  44. }
  45. // ?????????? ???????????
  46. if ($bb_cfg['new_user_reg_disabled'] || ($bb_cfg['reg_email_activation'] && $bb_cfg['emailer_disabled']))
  47. {
  48. bb_die($lang['NEW_USER_REG_DISABLED']);
  49. }
  50. // ??????????? ?? ???????
  51. else if ($bb_cfg['new_user_reg_restricted'])
  52. {
  53. if (in_array(date('G'), array(0,/*1,2,3,4,5,6,7,8,11,12,13,14,15,16,*/17,18,19,20,21,22,23)))
  54. {
  55. bb_die($lang['REGISTERED_IN_TIME']);
  56. }
  57. }
  58. }
  59. // field => can_edit
  60. $profile_fields = array(
  61. 'username' => true,
  62. 'user_password' => true,
  63. 'user_email' => true,
  64. 'user_timezone' => true,
  65. 'user_lang' => true,
  66. );
  67. $pr_data = array(
  68. 'user_id' => GUEST_UID,
  69. 'username' => '',
  70. 'user_password' => '',
  71. 'user_email' => '',
  72. 'user_timezone' => $bb_cfg['board_timezone'],
  73. 'user_lang' => $bb_cfg['default_lang'],
  74. 'user_opt' => 0,
  75. 'avatar_ext_id' => 0,
  76. );
  77. break;
  78. /**
  79. * ?????????????? ???????
  80. */
  81. case 'editprofile':
  82. if (IS_GUEST)
  83. {
  84. login_redirect();
  85. }
  86. // field => can_edit
  87. $profile_fields = array(
  88. 'user_active' => IS_ADMIN,
  89. 'username' => (IS_ADMIN || $bb_cfg['allow_namechange']),
  90. 'user_password' => true,
  91. 'user_email' => true, // ?????? ???? ????? user_password
  92. 'user_lang' => true,
  93. 'user_gender' => true,
  94. 'user_birthday' => true,
  95. 'user_timezone' => true,
  96. 'user_opt' => true,
  97. 'avatar_ext_id' => true,
  98. 'user_icq' => true,
  99. 'user_skype' => true,
  100. 'user_website' => true,
  101. 'user_from' => true,
  102. 'user_sig' => true,
  103. 'user_occ' => true,
  104. 'user_interests' => true,
  105. 'tpl_name' => true,
  106. );
  107. // ????? ???????: ??? ????? ????, ??? ?????? ?????
  108. if (IS_ADMIN && !empty($_REQUEST['u']))
  109. {
  110. $pr_user_id = (int) $_REQUEST['u'];
  111. $adm_edit = ($pr_user_id != $userdata['user_id']);
  112. }
  113. else
  114. {
  115. $pr_user_id = $userdata['user_id'];
  116. }
  117. $profile_fields_sql = join(', ', array_keys($profile_fields));
  118. $sql = "
  119. SELECT
  120. user_id,
  121. user_rank,
  122. user_level,
  123. user_email,
  124. $profile_fields_sql
  125. FROM ". BB_USERS ."
  126. WHERE user_id = $pr_user_id
  127. LIMIT 1
  128. ";
  129. if (!$pr_data = DB()->fetch_row($sql))
  130. {
  131. bb_die($lang['PROFILE_NOT_FOUND']);
  132. }
  133. break;
  134. default:
  135. trigger_error("invalid mode: $mode", E_USER_ERROR);
  136. }
  137. // CAPTCHA
  138. $need_captcha = ($mode == 'register' && !IS_ADMIN);
  139. if ($submit)
  140. {
  141. if ($need_captcha && !CAPTCHA()->verify_code())
  142. {
  143. $errors[] = $lang['CONFIRM_CODE_WRONG'];
  144. }
  145. }
  146. // ????????? ??????
  147. $cur_pass_valid = $adm_edit;
  148. foreach ($profile_fields as $field => $can_edit)
  149. {
  150. switch ($field)
  151. {
  152. /**
  153. * ????????? (edit, reg)
  154. */
  155. case 'user_active':
  156. $active = isset($_POST['user_active']) ? (int) $_POST['user_active'] : $pr_data['user_active'];
  157. if ($submit && $adm_edit)
  158. {
  159. $pr_data['user_active'] = $active;
  160. $db_data['user_active'] = $active;
  161. }
  162. break;
  163. /**
  164. * ??? (edit, reg)
  165. */
  166. case 'username':
  167. $username = !empty($_POST['username']) ? clean_username($_POST['username']) : $pr_data['username'];
  168. if ($submit)
  169. {
  170. $err = validate_username($username);
  171. if (!$errors AND $err && $mode == 'register')
  172. {
  173. $errors[] = $err;
  174. }
  175. if ($can_edit && $username != $pr_data['username'] || $mode == 'register')
  176. {
  177. $pr_data['username'] = $username;
  178. $db_data['username'] = $username;
  179. }
  180. }
  181. $tp_data['CAN_EDIT_USERNAME'] = $can_edit;
  182. $tp_data['USERNAME'] = $pr_data['username'];
  183. break;
  184. /**
  185. * ?????? (edit, reg)
  186. */
  187. case 'user_password':
  188. if ($submit)
  189. {
  190. $cur_pass = (string) @$_POST['cur_pass'];
  191. $new_pass = (string) @$_POST['new_pass'];
  192. $cfm_pass = (string) @$_POST['cfm_pass'];
  193. // ?????? ??? ????? ? ??? ????? ?????? ??????
  194. if (!empty($new_pass))
  195. {
  196. if (mb_strlen($new_pass, 'UTF-8') > 20)
  197. {
  198. $errors[] = sprintf($lang['CHOOSE_PASS_ERR_MAX'], 20);
  199. }
  200. elseif (mb_strlen($new_pass, 'UTF-8') < 4)
  201. {
  202. $errors[] = sprintf($lang['CHOOSE_PASS_ERR_MIN'], 4);
  203. }
  204. elseif ($new_pass != $cfm_pass)
  205. {
  206. $errors[] = $lang['CHOOSE_PASS_ERR'];
  207. }
  208. $db_data['user_password'] = md5(md5($new_pass));
  209. }
  210. if ($mode == 'register')
  211. {
  212. if (empty($new_pass))
  213. {
  214. $errors[] = $lang['CHOOSE_PASS'];
  215. }
  216. }
  217. else
  218. {
  219. if (!empty($cur_pass))
  220. {
  221. $cur_pass_valid = ($pr_data['user_password'] === md5(md5($cur_pass)));
  222. }
  223. if (!empty($new_pass) && !$cur_pass_valid)
  224. {
  225. $errors[] = $lang['CHOOSE_PASS_FAILED'];
  226. }
  227. }
  228. }
  229. break;
  230. /**
  231. * E-mail (edit, reg)
  232. */
  233. case 'user_email':
  234. $email = !empty($_POST['user_email']) ? (string) $_POST['user_email'] : $pr_data['user_email'];
  235. if ($submit)
  236. {
  237. if ($mode == 'register')
  238. {
  239. if (empty($email))
  240. {
  241. $errors[] = $lang['CHOOSE_E_MAIL'];
  242. }
  243. if (!$errors AND $err = validate_email($email))
  244. {
  245. $errors[] = $err;
  246. }
  247. $db_data['user_email'] = $email;
  248. }
  249. else if ($email != $pr_data['user_email']) // ???? ????? ????? ??????
  250. {
  251. if (!$cur_pass_valid)
  252. {
  253. $errors[] = $lang['CONFIRM_PASSWORD_EXPLAIN'];
  254. }
  255. if (!$errors AND $err = validate_email($email))
  256. {
  257. $errors[] = $err;
  258. }
  259. if ($bb_cfg['reg_email_activation'])
  260. {
  261. $pr_data['user_active'] = 0;
  262. $db_data['user_active'] = 0;
  263. }
  264. $db_data['user_email'] = $email;
  265. }
  266. }
  267. $tp_data['USER_EMAIL'] = htmlCHR($email);
  268. break;
  269. /**
  270. * ???? (edit, reg)
  271. */
  272. case 'user_lang':
  273. $user_lang = isset($_POST['user_lang']) ? (string) $_POST['user_lang'] : $pr_data['user_lang'];
  274. if ($submit && ($user_lang != $pr_data['user_lang'] || $mode == 'register'))
  275. {
  276. $pr_data['user_lang'] = $user_lang;
  277. $db_data['user_lang'] = $user_lang;
  278. }
  279. break;
  280. /**
  281. * ??????? ???? (edit, reg)
  282. */
  283. case 'user_timezone':
  284. $user_timezone = isset($_POST['user_timezone']) ? (int) $_POST['user_timezone'] : $pr_data['user_timezone'];
  285. if ($submit && ($user_timezone != $pr_data['user_timezone'] || $mode == 'register'))
  286. {
  287. if (isset($lang['TZ'][$user_timezone]))
  288. {
  289. $pr_data['user_timezone'] = $user_timezone;
  290. $db_data['user_timezone'] = $user_timezone;
  291. }
  292. }
  293. break;
  294. /**
  295. * ??? (edit, reg)
  296. */
  297. case 'user_gender':
  298. $gender = isset($_POST['user_gender']) ? (int) $_POST['user_gender'] : $pr_data['user_gender'];
  299. if ($submit && $gender != $pr_data['user_gender'])
  300. {
  301. $pr_data['user_gender'] = $gender;
  302. $db_data['user_gender'] = $gender;
  303. }
  304. $tp_data['USER_GENDER'] = build_select('user_gender', array_flip($lang['GENDER_SELECT']), $pr_data['user_gender']);
  305. break;
  306. /**
  307. * ??????? (edit)
  308. */
  309. case 'user_birthday':
  310. $user_birthday = ($pr_data['user_birthday'] != '0000-00-00') ? strtotime($pr_data['user_birthday']) : false;
  311. $b_day = (isset($_POST['b_day'])) ? (int) $_POST['b_day'] : (($user_birthday) ? date('j', $user_birthday) : 0);
  312. $b_md = (isset($_POST['b_md'])) ? (int) $_POST['b_md'] : (($user_birthday) ? date('n', $user_birthday) : 0);
  313. $b_year = (isset($_POST['b_year'])) ? (int) $_POST['b_year'] : (($user_birthday) ? date('Y', $user_birthday) : 0);
  314. if ($b_day || $b_md || $b_year)
  315. {
  316. if (!checkdate($b_md, $b_day, $b_year))
  317. {
  318. $errors[] = $lang['WRONG_BIRTHDAY_FORMAT'];
  319. $birthday = '';
  320. $next_birthday_greeting = 0;
  321. }
  322. else
  323. {
  324. $birthday = "$b_year-$b_md-$b_day";
  325. $next_birthday_greeting = (date('md') < $b_md . (($b_day <= 9) ? '0' : '') . $b_day) ? date('Y') : date('Y') + 1;
  326. }
  327. }
  328. else
  329. {
  330. $birthday = '';
  331. $next_birthday_greeting = 0;
  332. }
  333. if ($submit && $birthday != $pr_data['user_birthday'])
  334. {
  335. $pr_data['user_birthday'] = $birthday;
  336. $db_data['user_birthday'] = $birthday;
  337. $db_data['user_next_birthday_greeting'] = $next_birthday_greeting;
  338. }
  339. break;
  340. /**
  341. * opt (edit)
  342. */
  343. case 'user_opt':
  344. $user_opt = $pr_data['user_opt'];
  345. $update_user_opt = array(
  346. 'viewemail' => true,
  347. 'allow_viewonline' => true,
  348. 'notify' => true,
  349. 'notify_pm' => true,
  350. 'hide_porn_forums' => true,
  351. 'allow_dls' => true,
  352. );
  353. foreach ($update_user_opt as $opt => $can_change_opt)
  354. {
  355. if ($submit && $can_change_opt && isset($_POST[$opt]))
  356. {
  357. setbit($user_opt, $bf['user_opt'][$opt], !empty($_POST[$opt]));
  358. }
  359. $tp_data[strtoupper($opt)] = bf($user_opt, 'user_opt', $opt);
  360. }
  361. if ($submit && $user_opt != $pr_data['user_opt'])
  362. {
  363. $pr_data['user_opt'] = $user_opt;
  364. $db_data['user_opt'] = (int) $user_opt;
  365. }
  366. break;
  367. /**
  368. * Avatar (edit)
  369. */
  370. case 'avatar_ext_id':
  371. if ($submit && !bf($pr_data['user_opt'], 'user_opt', 'allow_avatar'))
  372. {
  373. if (isset($_POST['delete_avatar']))
  374. {
  375. delete_avatar($pr_data['user_id'], $pr_data['avatar_ext_id']);
  376. $pr_data['avatar_ext_id'] = 0;
  377. $db_data['avatar_ext_id'] = 0;
  378. }
  379. else if (!empty($_FILES['avatar']['name']) && $bb_cfg['avatars']['up_allowed'])
  380. {
  381. require(INC_DIR .'functions_upload.php');
  382. $upload = new upload_common();
  383. if ($upload->init($bb_cfg['avatars'], $_FILES['avatar']) AND $upload->store('avatar', $pr_data))
  384. {
  385. $pr_data['avatar_ext_id'] = $upload->file_ext_id;
  386. $db_data['avatar_ext_id'] = (int) $upload->file_ext_id;
  387. }
  388. else
  389. {
  390. $errors = array_merge($errors, $upload->errors);
  391. }
  392. }
  393. }
  394. break;
  395. /**
  396. * ICQ (edit)
  397. */
  398. case 'user_icq':
  399. $icq = isset($_POST['user_icq']) ? (string) $_POST['user_icq'] : $pr_data['user_icq'];
  400. if ($submit && $icq != $pr_data['user_icq'])
  401. {
  402. if ($icq == '' || preg_match('#^\d{6,15}$#', $icq))
  403. {
  404. $pr_data['user_icq'] = $icq;
  405. $db_data['user_icq'] = (string) $icq;
  406. }
  407. else
  408. {
  409. $pr_data['user_icq'] = '';
  410. $errors[] = htmlCHR($lang['ICQ_ERROR']);
  411. }
  412. }
  413. $tp_data['USER_ICQ'] = $pr_data['user_icq'];
  414. break;
  415. /**
  416. * ???? (edit)
  417. */
  418. case 'user_website':
  419. $website = isset($_POST['user_website']) ? (string) $_POST['user_website'] : $pr_data['user_website'];
  420. $website = htmlCHR($website);
  421. if ($submit && $website != $pr_data['user_website'])
  422. {
  423. if ($website == '' || preg_match('#^https?://[\w\#!$%&~/.\-;:=,?@?-??-?\[\]+]+$#iu', $website))
  424. {
  425. $pr_data['user_website'] = $website;
  426. $db_data['user_website'] = (string) $website;
  427. }
  428. else
  429. {
  430. $pr_data['user_website'] = '';
  431. $errors[] = htmlCHR($lang['WEBSITE_ERROR']);
  432. }
  433. }
  434. $tp_data['USER_WEBSITE'] = $pr_data['user_website'];
  435. break;
  436. /**
  437. * ?????? (edit)
  438. */
  439. case 'user_from':
  440. $from = isset($_POST['user_from']) ? (string) $_POST['user_from'] : $pr_data['user_from'];
  441. $from = htmlCHR($from);
  442. if ($submit && $from != $pr_data['user_from'])
  443. {
  444. $pr_data['user_from'] = $from;
  445. $db_data['user_from'] = (string) $from;
  446. }
  447. $tp_data['USER_FROM'] = $pr_data['user_from'];
  448. break;
  449. /**
  450. * ??????? (edit)
  451. */
  452. case 'user_sig':
  453. $sig = isset($_POST['user_sig']) ? (string) $_POST['user_sig'] : $pr_data['user_sig'];
  454. if ($submit && $sig != $pr_data['user_sig'])
  455. {
  456. $sig = prepare_message($sig);
  457. if (mb_strlen($sig, 'UTF-8') > $bb_cfg['max_sig_chars'])
  458. {
  459. $errors[] = $lang['SIGNATURE_TOO_LONG'];
  460. }
  461. else if (preg_match('#<(a|b|i|u|table|tr|td|img) #i', $sig) || preg_match('#(href|src|target|title)=#i', $sig))
  462. {
  463. $errors[] = $lang['SIGNATURE_ERROR_HTML'];
  464. }
  465. $pr_data['user_sig'] = $sig;
  466. $db_data['user_sig'] = (string) $sig;
  467. }
  468. $tp_data['USER_SIG'] = $pr_data['user_sig'];
  469. break;
  470. /**
  471. * ??? ??????? (edit)
  472. */
  473. case 'user_occ':
  474. $occ = isset($_POST['user_occ']) ? (string) $_POST['user_occ'] : $pr_data['user_occ'];
  475. $occ = htmlCHR($occ);
  476. if ($submit && $occ != $pr_data['user_occ'])
  477. {
  478. $pr_data['user_occ'] = $occ;
  479. $db_data['user_occ'] = (string) $occ;
  480. }
  481. $tp_data['USER_OCC'] = $pr_data['user_occ'];
  482. break;
  483. /**
  484. * ????????
  485. */
  486. case 'user_interests':
  487. $interests = isset($_POST['user_interests']) ? (string) $_POST['user_interests'] : $pr_data['user_interests'];
  488. $interests = htmlCHR($interests);
  489. if ($submit && $interests != $pr_data['user_interests'])
  490. {
  491. $pr_data['user_interests'] = $interests;
  492. $db_data['user_interests'] = (string) $interests;
  493. }
  494. $tp_data['USER_INTERESTS'] = $pr_data['user_interests'];
  495. break;
  496. /**
  497. * Skype
  498. */
  499. case 'user_skype':
  500. $skype = isset($_POST['user_skype']) ? (string) $_POST['user_skype'] : $pr_data['user_skype'];
  501. if ($submit && $skype != $pr_data['user_skype'])
  502. {
  503. if ($skype != '' && !preg_match("#^[a-zA-Z0-9_.\-@,]{6,32}$#", $skype))
  504. {
  505. $errors[] = $lang['SKYPE_ERROR'];
  506. }
  507. $pr_data['user_skype'] = $skype;
  508. $db_data['user_skype'] = (string) $skype;
  509. }
  510. $tp_data['USER_SKYPE'] = $pr_data['user_skype'];
  511. break;
  512. /**
  513. * ????? ??????? (edit)
  514. */
  515. case 'tpl_name':
  516. $templates = isset($_POST['tpl_name']) ? (string) $_POST['tpl_name'] : $pr_data['tpl_name'];
  517. $templates = htmlCHR($templates);
  518. if ($submit && $templates != $pr_data['tpl_name'])
  519. {
  520. $pr_data['tpl_name'] = $bb_cfg['tpl_name'];
  521. $db_data['tpl_name'] = (string) $bb_cfg['tpl_name'];
  522. foreach ($bb_cfg['templates'] as $folder => $name)
  523. {
  524. if ($templates == $folder)
  525. {
  526. $pr_data['tpl_name'] = $templates;
  527. $db_data['tpl_name'] = (string) $templates;
  528. }
  529. }
  530. }
  531. $tp_data['TEMPLATES_SELECT'] = templates_select($pr_data['tpl_name'], 'tpl_name');
  532. break;
  533. /**
  534. * default
  535. */
  536. default:
  537. trigger_error("invalid profile field: $field", E_USER_ERROR);
  538. }
  539. }
  540. if ($bb_cfg['birthday_enabled'] && $mode != 'register')
  541. {
  542. $days = array($lang['DELTA_TIME']['INTERVALS']['mday'][0] => 0);
  543. for ($i = 1; $i <= 31; $i++)
  544. {
  545. $days[$i] = $i;
  546. }
  547. $s_birthday = build_select('b_day', $days, $b_day);
  548. $months = array($lang['DELTA_TIME']['INTERVALS']['mon'][0] => 0);
  549. for ($i = 1; $i <= 12; $i++)
  550. {
  551. $month = bb_date(mktime(0, 0, 0, ($i+1), 0, 0), 'F');
  552. $months[$month] = $i;
  553. }
  554. $s_birthday .= build_select('b_md', $months, $b_md);
  555. $year = bb_date(TIMENOW, 'Y', 'false');
  556. $years = array($lang['DELTA_TIME']['INTERVALS']['year'][0] => 0);
  557. for ($i = $year-$bb_cfg['birthday_max_age']; $i <= $year - $bb_cfg['birthday_min_age']; $i++)
  558. {
  559. $years[$i] = $i;
  560. }
  561. $s_birthday .= build_select('b_year', $years, $b_year);
  562. $tp_data['BIRTHDAY'] = $s_birthday;
  563. }
  564. // submit
  565. if ($submit && !$errors)
  566. {
  567. /**
  568. * ???????? ?????? ???????
  569. */
  570. if ($mode == 'register')
  571. {
  572. if ($bb_cfg['reg_email_activation'])
  573. {
  574. $user_actkey = make_rand_str(12);
  575. $db_data['user_active'] = 0;
  576. $db_data['user_actkey'] = $user_actkey;
  577. }
  578. else
  579. {
  580. $db_data['user_active'] = 1;
  581. $db_data['user_actkey'] = '';
  582. }
  583. $db_data['user_regdate'] = TIMENOW;
  584. if (!IS_ADMIN) $db_data['user_reg_ip'] = USER_IP;
  585. if (!isset($db_data['tpl_name'])) $db_data['tpl_name'] = (string) $bb_cfg['tpl_name'];
  586. $sql_args = DB()->build_array('INSERT', $db_data);
  587. DB()->query("INSERT INTO ". BB_USERS . $sql_args);
  588. $new_user_id = DB()->sql_nextid();
  589. if (IS_ADMIN)
  590. {
  591. set_pr_die_append_msg($new_user_id);
  592. $message = $lang['ACCOUNT_ADDED'];
  593. }
  594. else
  595. {
  596. if ($bb_cfg['reg_email_activation'])
  597. {
  598. $message = $lang['ACCOUNT_INACTIVE'];
  599. $email_template = 'user_welcome_inactive';
  600. }
  601. else
  602. {
  603. $message = $lang['ACCOUNT_ADDED'];
  604. $email_template = 'user_welcome';
  605. }
  606. require(INC_DIR .'emailer.class.php');
  607. $emailer = new emailer($bb_cfg['smtp_delivery']);
  608. $emailer->from($bb_cfg['sitename'] ." <{$bb_cfg['board_email']}>");
  609. $emailer->email_address("$username <$email>");
  610. $emailer->use_template($email_template, $user_lang);
  611. $emailer->assign_vars(array(
  612. 'SITENAME' => $bb_cfg['sitename'],
  613. 'WELCOME_MSG' => sprintf($lang['WELCOME_SUBJECT'], $bb_cfg['sitename']),
  614. 'USERNAME' => html_entity_decode($username),
  615. 'PASSWORD' => $new_pass,
  616. 'U_ACTIVATE' => make_url('profile.php?mode=activate&' . POST_USERS_URL . '=' . $new_user_id . '&act_key=' . $db_data['user_actkey'])
  617. ));
  618. $emailer->send();
  619. $emailer->reset();
  620. }
  621. bb_die($message);
  622. }
  623. /**
  624. * ??????????????
  625. */
  626. else
  627. {
  628. set_pr_die_append_msg($pr_data['user_id']);
  629. // ???? ???-?? ???? ????????
  630. if ($db_data)
  631. {
  632. if (!$pr_data['user_active'])
  633. {
  634. $user_actkey = make_rand_str(12);
  635. $pr_data['user_actkey'] = $user_actkey;
  636. $db_data['user_actkey'] = $user_actkey;
  637. require(INC_DIR .'emailer.class.php');
  638. $emailer = new emailer($bb_cfg['smtp_delivery']);
  639. $emailer->from($bb_cfg['sitename'] ." <{$bb_cfg['board_email']}>");
  640. $emailer->use_template('user_activate', $pr_data['user_lang']);
  641. $emailer->email_address("$username <$email>");
  642. $emailer->assign_vars(array(
  643. 'SITENAME' => $bb_cfg['sitename'],
  644. 'USERNAME' => html_entity_decode($username),
  645. 'U_ACTIVATE' => make_url("profile.php?mode=activate&u={$pr_data['user_id']}&act_key=$user_actkey"),
  646. ));
  647. $emailer->send();
  648. $emailer->reset();
  649. $message = $lang['PROFILE_UPDATED_INACTIVE'];
  650. $user->session_end();
  651. }
  652. else
  653. {
  654. meta_refresh('index.php' , 10);
  655. $message = $lang['PROFILE_UPDATED'];
  656. }
  657. $sql_args = DB()->build_array('UPDATE', $db_data);
  658. DB()->query("UPDATE ". BB_USERS ." SET $sql_args WHERE user_id = {$pr_data['user_id']} LIMIT 1");
  659. if ($pr_data['user_id'] != $userdata['user_id'])
  660. {
  661. if ($pr_data['user_level'] == MOD && !empty($db_data['username']))
  662. {
  663. $datastore->update('moderators');
  664. }
  665. }
  666. cache_rm_user_sessions ($pr_data['user_id']);
  667. if($adm_edit)
  668. {
  669. bb_die($lang['PROFILE_USER'] . ' <b>'. profile_url($pr_data) .'</b> '. $lang['GOOD_UPDATE']);
  670. }
  671. elseif(!$pr_data['user_active'])
  672. {
  673. bb_die($lang['PROFILE_UPDATED_INACTIVE']);
  674. }
  675. else
  676. {
  677. meta_refresh('index.php' , 10);
  678. bb_die($lang['PROFILE_UPDATED']);
  679. }
  680. }
  681. else
  682. {
  683. bb_die($lang['NOTHING_HAS_CHANGED']);
  684. }
  685. }
  686. }
  687. $template->assign_vars($tp_data);
  688. $template->assign_vars(array(
  689. 'PAGE_TITLE' => ($mode == 'editprofile') ? $lang['EDIT_PROFILE'] . ($adm_edit ? " :: {$pr_data['username']}" : '') : $lang['REGISTER'],
  690. 'SHOW_REG_AGREEMENT' => ($mode == 'register' && !IS_ADMIN),
  691. 'ERROR_MESSAGE' => ($errors) ? join('<br />', array_unique($errors)) : '',
  692. 'MODE' => $mode,
  693. 'EDIT_PROFILE' => ($mode == 'editprofile'),
  694. 'ADM_EDIT' => $adm_edit,
  695. 'SHOW_PASS' => ($adm_edit || ($mode == 'register' && IS_ADMIN)),
  696. 'CAPTCHA_HTML' => ($need_captcha) ? CAPTCHA()->get_html() : '',
  697. 'LANGUAGE_SELECT' => language_select($user_lang, 'user_lang'),
  698. 'TIMEZONE_SELECT' => tz_select($user_timezone, 'user_timezone'),
  699. 'USER_TIMEZONE' => $pr_data['user_timezone'],
  700. 'AVATAR_EXPLAIN' => sprintf($lang['AVATAR_EXPLAIN'], $bb_cfg['avatars']['max_width'], $bb_cfg['avatars']['max_height'], (round($bb_cfg['avatars']['max_size'] / 1024))),
  701. 'AVATAR_DISALLOWED' => bf($pr_data['user_opt'], 'user_opt', 'allow_avatar'),
  702. 'SIGNATURE_EXPLAIN' => sprintf($lang['SIGNATURE_EXPLAIN'], $bb_cfg['max_sig_chars']),
  703. 'SIG_DISALLOWED' => bf($pr_data['user_opt'], 'user_opt', 'allow_sig'),
  704. 'PR_USER_ID' => $pr_data['user_id'],
  705. 'U_RESET_AUTOLOGIN' => LOGIN_URL . "?logout=1&amp;reset_autologin=1&amp;sid={$userdata['session_id']}",
  706. 'AVATAR_URL_PATH' => ($pr_data['avatar_ext_id']) ? get_avatar_path($pr_data['user_id'], $pr_data['avatar_ext_id']) : '',
  707. ));
  708. print_page('usercp_register.tpl');