PageRenderTime 62ms CodeModel.GetById 24ms RepoModel.GetById 1ms app.codeStats 0ms

/include/admin/users.php

https://bitbucket.org/webop/webop-forum
PHP | 1079 lines | 994 code | 59 blank | 26 comment | 43 complexity | 17dd10289c99addb16ef16f62ce3c5ea MD5 | raw file
Possible License(s): LGPL-2.1
  1. <?php
  2. ////////////////////////////////////////////////////////////////////////////////
  3. // //
  4. // Copyright (C) 2010 Phorum Development Team //
  5. // http://www.phorum.org //
  6. // //
  7. // This program is free software. You can redistribute it and/or modify //
  8. // it under the terms of either the current Phorum License (viewable at //
  9. // phorum.org) or the Phorum License that was distributed with this file //
  10. // //
  11. // This program is distributed in the hope that it will be useful, //
  12. // but WITHOUT ANY WARRANTY, without even the implied warranty of //
  13. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. //
  14. // //
  15. // You should have received a copy of the Phorum License //
  16. // along with this program. //
  17. // //
  18. ////////////////////////////////////////////////////////////////////////////////
  19. if(!defined("PHORUM_ADMIN")) return;
  20. include('./include/format_functions.php');
  21. $user_status_map = array(
  22. 'any' => 'Any user status',
  23. 'pending' => 'Any pending status',
  24. PHORUM_USER_PENDING_BOTH => 'Pending user + moderator confirmation',
  25. PHORUM_USER_PENDING_EMAIL => 'Pending user confirmation',
  26. PHORUM_USER_PENDING_MOD => 'Pending moderator confirmation',
  27. PHORUM_USER_INACTIVE => 'Deactivated',
  28. PHORUM_USER_ACTIVE => 'Active',
  29. );
  30. // A utility list of field names that are used for searching.
  31. $user_search_fields = array(
  32. 'search_username',
  33. 'username_search_loc',
  34. 'search_display_name',
  35. 'display_name_search_loc',
  36. 'search_email',
  37. 'email_search_loc',
  38. 'search_signature',
  39. 'signature_search_loc',
  40. 'search_type',
  41. 'search_status',
  42. 'posts',
  43. 'posts_op',
  44. 'lastactive',
  45. 'lastactive_op',
  46. 'registered',
  47. 'registered_op',
  48. 'member_of_group',
  49. 'profile_field',
  50. 'search_profile_field',
  51. 'profile_field_search_loc',
  52. 'forum_permissions',
  53. 'forum_permissions_forums'
  54. );
  55. $error="";
  56. // if the page and pagelength have been set from before, use them.
  57. $page_args = "";
  58. $page_args_array = array();
  59. if (isset($_GET["page"])) {
  60. $page_args .= "&page=".(int)$_GET["page"];
  61. $page_args_array[] = "page=".(int)$_GET["page"];
  62. }
  63. if (isset($_GET["pagelength"])) {
  64. $page_args .= "&pagelength=".(int)$_GET["pagelength"];
  65. $page_args_array[] = "pagelength=".(int)$_GET["pagelength"];
  66. }
  67. if (isset($_GET["sort"])) {
  68. $page_args .= "&sort=".$_GET["sort"];
  69. $page_args_array[] = "sort=".$_GET["sort"];
  70. }
  71. if (isset($_GET["sort_dir"])) {
  72. $get_sort_dir = empty($_GET["sort_dir"]) ? "" : "-";
  73. $page_args .= "&sort_dir=".$get_sort_dir;
  74. $page_args_array[] = "sort_dir=".$get_sort_dir;
  75. }
  76. // The referrer to use for the user edit page, to jump back to the user list.
  77. if (isset($_POST['referrer'])) {
  78. $referrer = $_POST['referrer'];
  79. unset($_POST['referrer']);
  80. } elseif (isset($_SERVER['HTTP_REFERER'])) {
  81. $referrer = $_SERVER['HTTP_REFERER'] . $page_args;
  82. } else {
  83. $input_args = array('module=users');
  84. if(count($page_args_array)) $input_args = array_merge($input_args,$page_args_array);
  85. $referrer = phorum_admin_build_url($input_args);
  86. }
  87. if(count($_POST))
  88. {
  89. if (isset($_POST['action']) && $_POST['action'] == "deleteUsers")
  90. {
  91. $count=count($_POST['deleteIds']);
  92. if($count > 0) {
  93. foreach($_POST['deleteIds'] as $id => $deluid) {
  94. phorum_api_user_delete($deluid);
  95. }
  96. phorum_admin_okmsg("$count User(s) deleted.");
  97. }
  98. //process new user data
  99. } elseif (isset($_POST["addUser"])) {
  100. $user_data = $_POST;
  101. //check for pre-existing username
  102. if (!empty($_POST["username"])) {
  103. $existing_user = phorum_api_user_search("username", $_POST["username"]);
  104. if (!empty($existing_user))
  105. $error = 'The user name "'.htmlspecialchars($_POST['username']).'" is already in use!';
  106. } else {
  107. $error = "You must provide a user name!";
  108. }
  109. //check for a valid email
  110. if (!empty($_POST["email"])) {
  111. include('./include/email_functions.php');
  112. $valid_email = phorum_valid_email($_POST["email"]);
  113. if ($valid_email !== true)
  114. $error = 'The email "'.htmlspecialchars($_POST[email]).'" is not valid!';
  115. } else {
  116. $error = "You must provide an e-mail!";
  117. }
  118. //check for password and password confirmation
  119. if(isset($_POST['password1']) && !empty($_POST['password1']) && !empty($_POST['password2']) && $_POST['password1'] != $_POST['password2']) {
  120. $error="Passwords don't match!";
  121. } elseif(!empty($_POST['password1']) && !empty($_POST['password2'])) {
  122. $user_data['password']=$_POST['password1'];
  123. $user_data['password_temp']=$_POST['password1'];
  124. } else {
  125. $error="You must assign a password!";
  126. }
  127. unset($user_data["password1"]);
  128. unset($user_data["password2"]);
  129. unset($user_data["module"]);
  130. unset($user_data["addUser"]);
  131. unset($user_data["phorum_admin_token"]);
  132. if(empty($error)){
  133. $user_data["user_id"] = NULL;
  134. $user_data["active"] = PHORUM_USER_ACTIVE;
  135. phorum_api_user_save($user_data);
  136. phorum_admin_okmsg("User Added");
  137. } else {
  138. $addUser_error = 1;
  139. }
  140. } else {
  141. $user_data=$_POST;
  142. switch( $_POST["section"] ) {
  143. case "forums":
  144. if($_POST["new_forum"]){
  145. if(!is_array($_POST["new_forum_permissions"])){
  146. $permission=0;
  147. } else {
  148. $permission = 0;
  149. foreach($_POST["new_forum_permissions"] as $perm=>$check){
  150. $permission = $permission | $perm;
  151. }
  152. }
  153. $user_data["forum_permissions"][$_POST["new_forum"]]=$permission;
  154. unset($user_data["new_forum"]);
  155. }
  156. if(isset($_POST["delforum"])){
  157. foreach($_POST["delforum"] as $fid=>$val){
  158. unset($user_data["forum_permissions"][$fid]);
  159. unset($_POST["forums"][$fid]);
  160. }
  161. unset($user_data["delforum"]);
  162. }
  163. if(isset($_POST["forums"])){
  164. foreach($_POST["forums"] as $forum_id){
  165. $permission=0;
  166. if(isset($user_data["forum_permissions"][$forum_id])){
  167. foreach($user_data["forum_permissions"][$forum_id] as $perm=>$check){
  168. $permission = $permission | $perm;
  169. }
  170. }
  171. $user_data["forum_permissions"][$forum_id]=$permission;
  172. }
  173. unset($user_data["forums"]);
  174. }
  175. if(empty($user_data["forum_permissions"])) $user_data["forum_permissions"]=array();
  176. unset($user_data["delforum"]);
  177. unset($user_data["new_forum"]);
  178. unset($user_data["new_forum_permissions"]);
  179. break;
  180. case "groups":
  181. $groupdata = array();
  182. if($_POST["new_group"]){
  183. // set the new group permission to approved
  184. $groupdata[$_POST["new_group"]] = PHORUM_USER_GROUP_APPROVED;
  185. unset($user_data['new_group']);
  186. }
  187. if(isset($_POST["group_perm"])){
  188. foreach($_POST["group_perm"] as $group_id=>$perm){
  189. // as long as we aren't removing them from the group, accept other values
  190. if ($perm != "remove"){
  191. $groupdata[$group_id] = $perm;
  192. }
  193. }
  194. unset($user_data['group_perm']);
  195. }
  196. phorum_api_user_save_groups($_POST["user_id"], $groupdata);
  197. unset($user_data["new_group"]);
  198. break;
  199. }
  200. if(isset($_POST['password1']) && !empty($_POST['password1']) && !empty($_POST['password2']) && $_POST['password1'] != $_POST['password2']) {
  201. $error="Passwords don't match!";
  202. } elseif(!empty($_POST['password1']) && !empty($_POST['password2'])) {
  203. $user_data['password']=$_POST['password1'];
  204. $user_data['password_temp']=$_POST['password1'];
  205. }
  206. // clean up
  207. unset($user_data["module"]);
  208. unset($user_data["section"]);
  209. unset($user_data["password1"]);
  210. unset($user_data["password2"]);
  211. unset($user_data["submit"]);
  212. unset($user_data["phorum_admin_token"]);
  213. if (empty($error)){
  214. $user_data = phorum_hook("admin_users_form_save", $user_data);
  215. if (isset($user_data["error"])) {
  216. $error = $user_data["error"];
  217. unset($user_data["error"]);
  218. }
  219. }
  220. if(empty($error)){
  221. phorum_api_user_save($user_data);
  222. phorum_admin_okmsg("User Saved");
  223. }
  224. }
  225. }
  226. if ($error) {
  227. phorum_admin_error($error);
  228. }
  229. include_once "./include/admin/PhorumInputForm.php";
  230. include_once "./include/profile_functions.php";
  231. if(!defined("PHORUM_ORIGINAL_USER_CODE") || PHORUM_ORIGINAL_USER_CODE!==true){
  232. echo "Phorum User Admin only works with the Phorum User System.";
  233. return;
  234. }
  235. if (!isset($_GET["edit"]) && !isset($_GET["add"]) && !isset($addUser_error) && !isset($_POST['section']))
  236. {
  237. $users_url = phorum_admin_build_url(array('module=users'));
  238. $users_add_url = phorum_admin_build_url(array('module=users','add=1'));
  239. print "<a href=\"$users_url\">" .
  240. "Show all users</a> | <a href=\"$users_add_url\">Add User</a><br/>";
  241. if (empty($_REQUEST["user_id"]))
  242. {
  243. $frm = new PhorumInputForm ("", "get", "Search");
  244. $frm->addbreak("User Search");
  245. $frm->hidden("module", "users");
  246. $field_search_loc_array = array("any" => "Anywhere","start" => "Start of Field","end" => "End of Field");
  247. $frm->addrow("Username contains", $frm->text_box("search_username", $_REQUEST["search_username"], 30) ."&nbsp;". $frm->select_tag("username_search_loc", $field_search_loc_array, $_REQUEST["username_search_loc"]));
  248. if ($PHORUM['display_name_source'] != 'username') {
  249. $frm->addrow("Display name contains", $frm->text_box("search_display_name", $_REQUEST["search_display_name"], 30) ."&nbsp;". $frm->select_tag("display_name_search_loc", $field_search_loc_array, $_REQUEST["display_name_search_loc"]));
  250. }
  251. $frm->addrow("Email contains", $frm->text_box("search_email", $_REQUEST["search_email"], 30) ."&nbsp;". $frm->select_tag("email_search_loc", $field_search_loc_array, $_REQUEST["email_search_loc"]));
  252. $frm->addrow("Signature contains", $frm->text_box("search_signature", $_REQUEST["search_signature"], 30) ."&nbsp;". $frm->select_tag("signature_search_loc", $field_search_loc_array, $_REQUEST["signature_search_loc"]));
  253. $frm->addrow("User status and type", $frm->select_tag("search_status", $user_status_map, $_REQUEST['search_status']) . " " . $frm->select_tag("search_type", array('any' => 'Any type of user', 'user' => 'Regular users', 'admin' => 'Administrators'), $_REQUEST['search_type']));
  254. $frm->addrow("Number of forum posts ",
  255. $frm->text_box("posts", isset($_REQUEST["posts"]) && trim($_REQUEST["posts"]) != '' ? (int) $_REQUEST["posts"] : "", 5) . " " .
  256. $frm->select_tag("posts_op", array("gte" => "messages or more", "lte" => "messages or less"), $_REQUEST["posts_op"]));
  257. $frm->addrow("Last user activity",
  258. $frm->select_tag("lastactive_op", array("lt" => "Longer ago than", "gte" => "Within the last"), $_REQUEST["lastactive_op"]) . " " .
  259. $frm->text_box("lastactive", empty($_REQUEST["lastactive"]) ? "" : (int) $_REQUEST["lastactive"], 5) . " days"
  260. );
  261. $frm->addrow("Date user registered",
  262. $frm->select_tag("registered_op", array("lt" => "Longer ago than", "gte" => "Within the last"), $_REQUEST["registered_op"]) . " " .
  263. $frm->text_box("registered", empty($_REQUEST["registered"]) ? "" : (int) $_REQUEST["registered"], 5) . " days"
  264. );
  265. $forum_permissions_forums_list = array();
  266. $forum_permissions_forums = phorum_db_get_forums();
  267. $forum_permissions_forumpaths = phorum_get_forum_info(1);
  268. foreach($forum_permissions_forumpaths as $forum_id => $forumname) {
  269. if($forums[$forum_id]['folder_flag'] == 0)
  270. $forum_permissions_forums_list[$forum_id]=$forumname;
  271. }
  272. if(count($forum_permissions_forums_list)) {
  273. $forum_permissions_forums_select = "<select name=\"forum_permissions_forums[]\" multiple=\"multiple\" size=\"2\">\n";
  274. if(!empty($_REQUEST['forum_permissions_forums'])) {
  275. if (is_array($_REQUEST['forum_permissions_forums'])) {
  276. foreach ($_REQUEST['forum_permissions_forums'] as $forum_permissions_forum) {
  277. $selected_forum_permissions_forums[$forum_permissions_forum] = $forum_permissions_forum;
  278. }
  279. } else {
  280. $selected_forum_permissions_forums[(int)$_REQUEST['forum_permissions_forums']] = (int)$_REQUEST['forum_permissions_forums'];
  281. }
  282. }
  283. foreach ($forum_permissions_forums_list as $forum_id => $forumname) {
  284. $forum_permissions_forums_select .= "<option value=\"$forum_id\"";
  285. if (isset($selected_forum_permissions_forums[$forum_id]))
  286. $forum_permissions_forums_select .= " selected='selected'";
  287. $forum_permissions_forums_select .= ">$forumname</option>";
  288. }
  289. $forum_permissions_forums_select .= "</select>";
  290. $forum_permissions = array(
  291. PHORUM_USER_ALLOW_READ => "Read",
  292. PHORUM_USER_ALLOW_REPLY => "Reply",
  293. PHORUM_USER_ALLOW_NEW_TOPIC => "Create New Topics",
  294. PHORUM_USER_ALLOW_EDIT => "Edit Their Posts",
  295. PHORUM_USER_ALLOW_ATTACH => "Attach Files",
  296. PHORUM_USER_ALLOW_MODERATE_MESSAGES => "Moderate Messages",
  297. PHORUM_USER_ALLOW_MODERATE_USERS => "Moderate Users"
  298. );
  299. $forum_permissions_select = "<select name=\"forum_permissions[]\" multiple=\"multiple\" size=\"2\">\n";
  300. if(!empty($_REQUEST['forum_permissions'])) {
  301. if (is_array($_REQUEST['forum_permissions'])) {
  302. foreach ($_REQUEST['forum_permissions'] as $forum_permission) {
  303. $selected_forum_permissions[$forum_permission] = $forum_permission;
  304. }
  305. } else {
  306. $selected_forum_permissions[(int)$_REQUEST['forum_permissions']] = (int)$_REQUEST['forum_permissions'];
  307. }
  308. }
  309. foreach($forum_permissions as $forum_permission => $forum_permission_description) {
  310. $forum_permissions_select .= "<option value=\"".$forum_permission."\"";
  311. if (isset($selected_forum_permissions[$forum_permission]))
  312. $forum_permissions_select .= " selected=\"selected\"";
  313. $forum_permissions_select .= ">".$forum_permission_description."</option>\n";
  314. }
  315. $forum_permissions_select .= "</select>\n";
  316. $frm->addrow("Personal permission to", $forum_permissions_select . "&nbsp;in&nbsp;" . $forum_permissions_forums_select);
  317. }
  318. if (isset($PHORUM['PROFILE_FIELDS']["num_fields"]))
  319. unset($PHORUM['PROFILE_FIELDS']["num_fields"]);
  320. $active_profile_fields = 0;
  321. foreach($PHORUM["PROFILE_FIELDS"] as $profile_field) {
  322. if (empty($profile_field['deleted']) && !empty($profile_field['show_in_admin'])) $active_profile_fields ++;
  323. }
  324. if ($active_profile_fields > 0) {
  325. $profile_field_select = "<select name=\"profile_field[]\"";
  326. if ($active_profile_fields > 1)
  327. $profile_field_select .= " multiple=\"multiple\" size=\"2\"";
  328. $profile_field_select .= ">\n";
  329. if(!empty($_REQUEST['profile_field'])) {
  330. if (is_array($_REQUEST['profile_field'])) {
  331. foreach ($_REQUEST['profile_field'] as $profile_field_id) {
  332. $selected_profile_fields[$profile_field_id] = $profile_field_id;
  333. }
  334. } else {
  335. $selected_profile_fields[(int)$_REQUEST['profile_field']] = (int)$_REQUEST['profile_field'];
  336. }
  337. }
  338. foreach($PHORUM["PROFILE_FIELDS"] as $key => $profile_field) {
  339. // Do not show deleted fields.
  340. if (!empty($profile_field['deleted']) || empty($profile_field['show_in_admin'])) continue;
  341. $profile_field_select .= "<option value=\"".$profile_field["id"]."\"";
  342. if (isset($selected_profile_fields[$profile_field["id"]]))
  343. $profile_field_select .= " selected=\"selected\"";
  344. $profile_field_select .= ">".$profile_field["name"]."</option>\n";
  345. }
  346. $profile_field_select .= "</select>\n";
  347. $frm->addrow("Custom Profiles", $frm->text_box("search_profile_field", $_REQUEST["search_profile_field"], 30) ."&nbsp;"
  348. . $frm->select_tag("profile_field_search_loc", $field_search_loc_array, $_REQUEST["profile_field_search_loc"])
  349. . "&nbsp;in&nbsp;" . $profile_field_select);
  350. }
  351. $db_groups = phorum_db_get_groups(0,true);
  352. if (count($db_groups)) {
  353. $multiple = (count($db_groups) > 1) ? "multiple=\"multiple\" size=\"3\"" : "";
  354. $group_select = "<select name=\"member_of_group[]\" $multiple>\n";
  355. if (!$multiple) {
  356. $group_select .= '<option value="">Any group</option>';
  357. }
  358. $selected_groups = array();
  359. if(!empty($_REQUEST['member_of_group'])) {
  360. if (is_array($_REQUEST['member_of_group'])) {
  361. foreach ($_REQUEST['member_of_group'] as $group_id) {
  362. $selected_groups[$group_id] = $group_id;
  363. }
  364. } else {
  365. $selected_groups[(int)$_REQUEST['member_of_group']] = (int)$_REQUEST['member_of_group'];
  366. }
  367. }
  368. ksort($db_groups);
  369. foreach ($db_groups as $group_id => $group) {
  370. $group_select .= "<option value=\"$group_id\"";
  371. if (isset($selected_groups[$group_id])) $group_select .= " selected=\"selected\"";
  372. $group_select .= ">".$group["name"]."</option>\n";
  373. }
  374. $group_select .= "</select>\n";
  375. $frm->addrow("Member of group", $group_select);
  376. }
  377. $frm->show();
  378. }
  379. ?>
  380. <hr class="PhorumAdminHR" />
  381. <script type="text/javascript">
  382. <!--
  383. function CheckboxControl(form, onoff) {
  384. for (var i = 0; i < form.elements.length; i++)
  385. if (form.elements[i].type == "checkbox")
  386. form.elements[i].checked = onoff;
  387. }
  388. // -->
  389. </script>
  390. <?php
  391. if (!empty($_REQUEST["member_of_group"]) && is_array($_REQUEST["member_of_group"])) {
  392. $_REQUEST["member_of_group"] = implode(",",$_REQUEST["member_of_group"]);
  393. }
  394. if (!empty($_REQUEST["profile_field"]) && is_array($_REQUEST["profile_field"])) {
  395. $_REQUEST["profile_field"] = implode(",",$_REQUEST["profile_field"]);
  396. }
  397. if (!empty($_REQUEST["forum_permissions"]) && is_array($_REQUEST["forum_permissions"])) {
  398. $_REQUEST["forum_permissions"] = implode(",",$_REQUEST["forum_permissions"]);
  399. }
  400. if (!empty($_REQUEST["forum_permissions_forums"]) && is_array($_REQUEST["forum_permissions_forums"])) {
  401. $_REQUEST["forum_permissions_forums"] = implode(",",$_REQUEST["forum_permissions_forums"]);
  402. }
  403. // Build the search parameters query string items.
  404. $url_safe_search_arr = array();
  405. foreach ($user_search_fields as $field) {
  406. if (isset($_REQUEST[$field])) {
  407. $url_safe_search_arr[]= "$field=" . urlencode($_REQUEST[$field]);
  408. }
  409. }
  410. if (isset($_POST["sort"])) $_GET["sort"] = $_POST["sort"];
  411. $sort = isset($_GET["sort"]) ? $_GET["sort"] : "display_name";
  412. if (isset($_POST["sort_dir"])) $_GET["sort_dir"] = $_POST["sort_dir"];
  413. $sort_dir = empty($_GET["sort_dir"]) ? "" : "-";
  414. $reverse_sort_dir = (empty($sort_dir)) ? "-" : "";
  415. // Build the fields to search on.
  416. $search_fields = array();
  417. $search_values = array();
  418. $search_operators = array();
  419. if (isset($_REQUEST['search_username'])) {
  420. $search = trim($_REQUEST['search_username']);
  421. if ($search != '') {
  422. $search_fields[] = 'username';
  423. $search_values[] = $search;
  424. if ($_REQUEST['username_search_loc'] == "start") {
  425. $search_operators[] = '?*';
  426. } else if ($_REQUEST['username_search_loc'] == "end") {
  427. $search_operators[] = '*?';
  428. } else {
  429. $search_operators[] = '*';
  430. }
  431. }
  432. }
  433. if (isset($_REQUEST['search_display_name'])) {
  434. $search = trim($_REQUEST['search_display_name']);
  435. if ($search != '') {
  436. $search_fields[] = 'display_name';
  437. $search_values[] = $search;
  438. if ($_REQUEST['display_name_search_loc'] == "start") {
  439. $search_operators[] = '?*';
  440. } else if ($_REQUEST['display_name_search_loc'] == "end") {
  441. $search_operators[] = '*?';
  442. } else {
  443. $search_operators[] = '*';
  444. }
  445. }
  446. }
  447. if (isset($_REQUEST['search_email'])) {
  448. $search = trim($_REQUEST['search_email']);
  449. if ($search != '') {
  450. $search_fields[] = 'email';
  451. $search_values[] = $search;
  452. if ($_REQUEST['email_search_loc'] == "start") {
  453. $search_operators[] = '?*';
  454. } else if ($_REQUEST['email_search_loc'] == "end") {
  455. $search_operators[] = '*?';
  456. } else {
  457. $search_operators[] = '*';
  458. }
  459. }
  460. }
  461. if (isset($_REQUEST['search_signature'])) {
  462. $search = trim($_REQUEST['search_signature']);
  463. if ($search != '') {
  464. $search_fields[] = 'signature';
  465. $search_values[] = $search;
  466. if ($_REQUEST['signature_search_loc'] == "start") {
  467. $search_operators[] = '?*';
  468. } else if ($_REQUEST['signature_search_loc'] == "end") {
  469. $search_operators[] = '*?';
  470. } else {
  471. $search_operators[] = '*';
  472. }
  473. }
  474. }
  475. if (isset($_REQUEST['search_profile_field'])) {
  476. $search = trim($_REQUEST['search_profile_field']);
  477. if ($search != '' && !empty($_REQUEST['profile_field'])) {
  478. $profile_fields = explode(",",$_REQUEST['profile_field']);
  479. if ($_REQUEST['profile_field_search_loc'] == "start") {
  480. $search_operator = '?*';
  481. } else if ($_REQUEST['profile_field_search_loc'] == "end") {
  482. $search_operator = '*?';
  483. } else {
  484. $search_operator = '*';
  485. }
  486. foreach($profile_fields as $profile_field) {
  487. $profile_field_search_values[] = $search;
  488. $profile_field_search_operators[] = $search_operator;
  489. }
  490. $db_matching_users = phorum_api_user_search_custom_profile_field($profile_fields,$profile_field_search_values,$profile_field_search_operators, TRUE, 'OR');
  491. if (empty($db_matching_users)) $db_matching_users = array();
  492. $search_fields[] = 'user_id';
  493. $search_values[] = $db_matching_users;
  494. $search_operators[] = '()';
  495. }
  496. }
  497. if (isset($_REQUEST['search_type']) &&
  498. $_REQUEST['search_type'] != '') {
  499. if ($_REQUEST['search_type'] == 'user') {
  500. $search_fields[] = 'admin';
  501. $search_values[] = 0;
  502. $search_operators[] = '=';
  503. } elseif ($_REQUEST['search_type'] == 'admin') {
  504. $search_fields[] = 'admin';
  505. $search_values[] = 1;
  506. $search_operators[] = '=';
  507. }
  508. }
  509. if (isset($_REQUEST["posts"]) && trim($_REQUEST["posts"]) != '' && $_REQUEST["posts"] >= 0) {
  510. $search_fields[] = 'posts';
  511. $search_values[] = (int) $_REQUEST['posts'];
  512. $search_operators[] = $_REQUEST['posts_op'] == 'gte' ? '>=' : '<=';
  513. }
  514. if (!empty($_REQUEST["lastactive"]) && $_REQUEST["lastactive"] >= 0) {
  515. $time = time() - ($_REQUEST["lastactive"] * 86400);
  516. $search_fields[] = 'date_last_active';
  517. $search_values[] = $time;
  518. $search_operators[] = $_REQUEST['lastactive_op'] == 'gte' ? '>=' : '<';
  519. }
  520. if (!empty($_REQUEST["registered"]) && $_REQUEST["registered"] >= 0) {
  521. $time = time() - ($_REQUEST["registered"] * 86400);
  522. $search_fields[] = 'date_added';
  523. $search_values[] = $time;
  524. $search_operators[] = $_REQUEST['registered_op'] == 'gte' ? '>=' : '<';
  525. }
  526. if (isset($_REQUEST['search_status']) &&
  527. $_REQUEST['search_status'] != '' &&
  528. $_REQUEST['search_status'] != 'any') {
  529. $search_fields[] = 'active';
  530. if ($_REQUEST['search_status'] == 'pending') {
  531. $search_values[] = 0;
  532. $search_operators[] = '<';
  533. } else {
  534. $search_values[] = (int) $_REQUEST['search_status'];
  535. $search_operators[] = '=';
  536. }
  537. }
  538. if (!empty($_REQUEST["member_of_group"])) {
  539. $groups = explode(",",$_REQUEST["member_of_group"]);
  540. foreach($groups as $glid => $glrid) {
  541. if($glrid < 1) {
  542. unset($groups[$glid]);
  543. }
  544. }
  545. if(count($groups)) {
  546. $db_group_members = phorum_db_get_group_members($groups);
  547. $group_members = array();
  548. foreach ($db_group_members as $user_id => $group_status) {
  549. $group_members[] = $user_id;
  550. }
  551. $search_fields[] = 'user_id';
  552. $search_values[] = $group_members;
  553. $search_operators[] = '()';
  554. }
  555. }
  556. if (!empty($_REQUEST["forum_permissions"]) && !empty($_REQUEST["forum_permissions_forums"])) {
  557. $forum_permissions = explode(",",$_REQUEST["forum_permissions"]);
  558. $or_forum_permissions = "";
  559. foreach ($forum_permissions as $forum_permission) {
  560. if (isset($forum_permissions_first)) {
  561. $or_forum_permissions .= " OR ";
  562. } else {
  563. $forum_permissions_first = 1;
  564. }
  565. $or_forum_permissions .= "(perm.permission>=$forum_permission AND
  566. (perm.permission & $forum_permission>0))";
  567. }
  568. phorum_db_sanitize_mixed($_REQUEST["forum_permissions_forums"],"string");
  569. $db_forum_permissions_users = phorum_db_interact(
  570. DB_RETURN_ROWS,
  571. "SELECT DISTINCT user.user_id AS user_id
  572. FROM {$PHORUM['user_table']} AS user
  573. LEFT JOIN {$PHORUM['user_permissions_table']} AS perm
  574. ON perm.user_id = user.user_id
  575. WHERE ($or_forum_permissions) AND perm.forum_id IN ({$_REQUEST['forum_permissions_forums']})"
  576. );
  577. $forum_permissions_users = array();
  578. foreach($db_forum_permissions_users as $user) {
  579. $forum_permissions_users[] = $user[0];
  580. }
  581. $search_fields[] = 'user_id';
  582. $search_values[] = $forum_permissions_users;
  583. $search_operators[] = '()';
  584. }
  585. // Find a list of all matching user_ids.
  586. $total = phorum_api_user_search(
  587. $search_fields, $search_values, $search_operators,
  588. TRUE, 'AND',NULL,0,0,true
  589. );
  590. $default_pagelength=30;
  591. settype($_REQUEST["page"], "integer");
  592. settype($_REQUEST["pagelength"], "integer");
  593. // The available page lengths.
  594. $pagelengths = array(
  595. 10 => "10 users per page",
  596. 20 => "20 users per page",
  597. 30 => "30 users per page",
  598. 50 => "50 users per page",
  599. 100 => "100 users per page",
  600. 250 => "250 users per page",
  601. );
  602. // What page length to use?
  603. if (isset($_POST["pagelength"])) $_GET["pagelength"] = $_POST["pagelength"];
  604. $pagelength = isset($_GET["pagelength"]) ? (int)$_GET["pagelength"] : $default_pagelength;
  605. if (!isset($pagelengths[$pagelength])) $pagelength = $default_pagelength;
  606. $totalpages = ceil($total/$pagelength);
  607. if ($totalpages <= 0) $totalpages = 1;
  608. // Which page to show?
  609. if (isset($_POST["prevpage"])) {
  610. $page = (int)$_POST["curpage"] - 1;
  611. } elseif (isset($_POST["nextpage"])) {
  612. $page = (int)$_POST["curpage"] + 1;
  613. } else {
  614. if (isset($_POST["page"])) $_GET["page"] = $_POST["page"];
  615. $page = isset($_GET["page"]) ? (int)$_GET["page"] : 1;
  616. }
  617. if ($page <= 0) $page = 1;
  618. if ($page > $totalpages) $page = $totalpages;
  619. $search_start = ($page-1)*$pagelength;
  620. $db_sort = ($sort == "display_name") ? $sort_dir.$sort : array($sort_dir.$sort,"display_name");
  621. // Find a list of matching user_ids to display on the current page.
  622. $user_ids = phorum_api_user_search(
  623. $search_fields, $search_values, $search_operators,
  624. TRUE, 'AND', $db_sort,
  625. $search_start, $pagelength
  626. );
  627. // Retrieve the user data for the users on the current page.
  628. $users = empty($user_ids)
  629. ? array()
  630. : phorum_api_user_get($user_ids, FALSE);
  631. if (count($users))
  632. {
  633. // Create a page list for a drop down menu.
  634. $pagelist = array();
  635. for($p=1; $p<=$totalpages; $p++) {
  636. $pagelist[$p] = $p;
  637. }
  638. $cols = 6;
  639. $input_args = array('module=users');
  640. $input_args = array_merge($input_args,$url_safe_search_arr);
  641. $frm_url = phorum_admin_build_url($input_args);
  642. $sort_input_args = array('page='.$page,'pagelength='.$pagelength);
  643. $sort_input_args = array_merge($sort_input_args,$input_args);
  644. $display_name_sort_dir = ($sort == "display_name") ? $reverse_sort_dir : "";
  645. $display_name_sort_url_args = array_merge(array('sort=display_name','sort_dir='.$display_name_sort_dir),$sort_input_args);
  646. $display_name_sort_url = phorum_admin_build_url($display_name_sort_url_args);
  647. $email_sort_dir = ($sort == "email") ? $reverse_sort_dir : "";
  648. $email_sort_url_args = array_merge(array('sort=email','sort_dir='.$email_sort_dir),$sort_input_args);
  649. $email_sort_url = phorum_admin_build_url($email_sort_url_args);
  650. $status_sort_dir = ($sort == "active") ? $reverse_sort_dir : "";
  651. $status_sort_url_args = array_merge(array('sort=active','sort_dir='.$status_sort_dir),$sort_input_args);
  652. $status_sort_url = phorum_admin_build_url($status_sort_url_args);
  653. $posts_sort_dir = ($sort == "posts") ? $reverse_sort_dir : "";
  654. $posts_sort_url_args = array_merge(array('sort=posts','sort_dir='.$posts_sort_dir),$sort_input_args);
  655. $posts_sort_url = phorum_admin_build_url($posts_sort_url_args);
  656. $last_activity_sort_dir = ($sort == "date_last_active") ? $reverse_sort_dir : "";
  657. $last_activity_sort_url_args = array_merge(array('sort=date_last_active','sort_dir='.$last_activity_sort_dir),$sort_input_args);
  658. $last_activity_sort_url = phorum_admin_build_url($last_activity_sort_url_args);
  659. if (!empty($_REQUEST["registered"])) {
  660. $cols++;
  661. $registered_sort_dir = ($sort == "date_added") ? $reverse_sort_dir : "";
  662. $registered_sort_url_args = array_merge(array('sort=date_added','sort_dir='.$registered_sort_dir),$sort_input_args);
  663. $registered_sort_url = phorum_admin_build_url($registered_sort_url_args);
  664. }
  665. echo <<<EOT
  666. <form name="UsersForm" action="$frm_url" method="post">
  667. <input type="hidden" name="phorum_admin_token" value="{$PHORUM['admin_token']}">
  668. <input type="hidden" name="curpage" value="$page">
  669. <input type="hidden" name="sort" value="$sort">
  670. <input type="hidden" name="sort_dir" value="$sort_dir">
  671. <input type="hidden" name="module" value="users">
  672. <input type="hidden" name="action" value="deleteUsers">
  673. <table border="0" cellspacing="1" cellpadding="0"
  674. class="PhorumAdminTable" width="100%">
  675. <tr>
  676. <td colspan="$cols">
  677. <span style="float:right;margin-right:10px">
  678. <select name="pagelength" onchange="this.form.submit()">
  679. EOT;
  680. foreach ($pagelengths as $value => $description) {
  681. echo "<option";
  682. if ($value == $pagelength) echo " selected=\"selected\"";
  683. echo " value=\"$value\">$description</option>";
  684. }
  685. echo "</select>&nbsp;&nbsp;&nbsp;";
  686. if ($page > 1) echo "<input type=\"submit\" name=\"prevpage\" value=\"&lt;&lt;\"/> ";
  687. echo "page <select name=\"page\" onchange=\"this.form.submit()\">";
  688. foreach ($pagelist as $value) {
  689. echo "<option";
  690. if ($value == $page) echo " selected=\"selected\"";
  691. echo " value=\"$value\">$value</option>";
  692. }
  693. echo "</select> of $totalpages ";
  694. if ($page < $totalpages) echo "<input type=\"submit\" name=\"nextpage\" value=\"&gt;&gt;\"/>";
  695. echo <<<EOT
  696. </span>Number of users: $total
  697. </td>
  698. </tr>
  699. <tr>
  700. <td class="PhorumAdminTableHead"><a href="$display_name_sort_url" style="color: #FFF;">Display Name</a></td>
  701. <td class="PhorumAdminTableHead"><a href="$email_sort_url" style="color: #FFF;">Email</a></td>
  702. <td class="PhorumAdminTableHead"><a href="$status_sort_url" style="color: #FFF;">Status</a></td>
  703. <td class="PhorumAdminTableHead"><a href="$posts_sort_url" style="color: #FFF;">Posts</a></td>
  704. <td class="PhorumAdminTableHead"><a href="$last_activity_sort_url" style="color: #FFF;">Last Activity</a></td>
  705. EOT;
  706. if (!empty($_REQUEST["registered"])) {
  707. echo "<td class=\"PhorumAdminTableHead\"><a href=\"$registered_sort_url\" style=\"color: #FFF;\">Registered</a></td>";
  708. }
  709. echo <<<EOT
  710. <td class="PhorumAdminTableHead">Delete</td>
  711. </tr>
  712. EOT;
  713. foreach($user_ids as $user_id)
  714. {
  715. $user = $users[$user_id];
  716. $status = $user_status_map[$user['active']];
  717. $posts = intval($user['posts']);
  718. $ta_class = "PhorumAdminTableRow".($ta_class == "PhorumAdminTableRow" ? "Alt" : "");
  719. $user_input_args = array('module=users','user_id='.$user['user_id'],'edit=1','page='.$page,'pagelength='.$pagelength,'sort='.$sort,'sort_dir='.$sort_dir);
  720. $user_input_args = array_merge($user_input_args,$url_safe_search_arr);
  721. $edit_url = phorum_admin_build_url($user_input_args);
  722. echo "<tr>\n";
  723. echo " <td class=\"".$ta_class."\"><a href=\"$edit_url\">".(empty($PHORUM['custom_display_name']) ? htmlspecialchars($user['display_name']) : $user['display_name'])."</a></td>\n";
  724. echo " <td class=\"".$ta_class."\">".htmlspecialchars($user['email'])."</td>\n";
  725. echo " <td class=\"".$ta_class."\">{$status}</td>\n";
  726. echo " <td class=\"".$ta_class."\" style=\"text-align:right\">{$posts}</td>\n";
  727. echo " <td class=\"".$ta_class."\" align=\"right\">".(intval($user['date_last_active']) ? phorum_date($PHORUM['short_date'], intval($user['date_last_active'])) : "&nbsp;")."</td>\n";
  728. if (!empty($_REQUEST["registered"])) {
  729. echo " <td class=\"".$ta_class."\" align=\"right\">".(intval($user['date_added']) ? phorum_date($PHORUM['short_date'], intval($user['date_added'])) : "&nbsp;")."</td>\n";
  730. }
  731. echo " <td class=\"".$ta_class."\"><input type=\"checkbox\" name=\"deleteIds[]\" value=\"{$user['user_id']}\"></td>\n";
  732. echo "</tr>\n";
  733. }
  734. echo <<<EOT
  735. <tr>
  736. <td colspan="$cols" align="right">
  737. <input type="button" value="Check All"
  738. onClick="CheckboxControl(this.form, true);">
  739. <input type="button" value="Clear All"
  740. onClick="CheckboxControl(this.form, false);">
  741. <input type="submit" name="delete" value="Delete Selected Users"
  742. onClick="return confirm('Really delete the selected user(s)?')">
  743. </td>
  744. </tr>
  745. </table>
  746. </form>
  747. EOT;
  748. } else {
  749. echo "No Users Found.";
  750. }
  751. }
  752. // display edit form
  753. if (isset($_REQUEST["user_id"]))
  754. {
  755. print "<a href=\"".htmlspecialchars($referrer)."\">Back to the user overview</a>&nbsp;|&nbsp;<a href=\"#forums\">Edit Forum Permissions</a>&nbsp;|&nbsp;<a href=\"#groups\">Edit Groups</a><br />";
  756. $user = phorum_api_user_get($_REQUEST["user_id"], TRUE);
  757. if(count($user)){
  758. $frm = new PhorumInputForm ("", "post", "Update");
  759. $frm->hidden("module", "users");
  760. $frm->hidden("section", "main");
  761. $frm->hidden("referrer", $referrer);
  762. $frm->hidden("user_id", $_REQUEST["user_id"]);
  763. $frm->addbreak("Edit User");
  764. $frm->addrow("User Name", $frm->text_box("username", $user["username"], 50));
  765. $frm->addrow("Real Name", $frm->text_box("real_name", $user["real_name"], 50));
  766. $frm->addrow("Email", $frm->text_box("email", $user["email"], 50));
  767. $frm->addrow("Password (Enter to change)", $frm->text_box("password1",""));
  768. $frm->addrow("Password (Confirmation)", $frm->text_box("password2",""));
  769. $frm->addrow("Signature", $frm->textarea("signature", $user["signature"]));
  770. $frm->addrow("Active", $frm->select_tag("active", array("No", "Yes"), $user["active"]));
  771. $frm->addrow("Forum posts",$user["posts"]);
  772. $frm->addrow("Registration Date", phorum_date($PHORUM['short_date_time'], $user['date_added']));
  773. $row=$frm->addrow("Date last active", phorum_date($PHORUM['short_date_time'], $user['date_last_active']));
  774. $frm->addrow("Administrator", $frm->select_tag("admin", array("No", "Yes"), $user["admin"]));
  775. $frm->addhelp($row, "Date last active", "This shows the date, when the user was last seen in the forum. Check your setting on \"Track user usage\" in the \"General Settings\". As long as this setting is not enabled, the activity will not be tracked.");
  776. $cf_header_shown=0;
  777. foreach($PHORUM["PROFILE_FIELDS"] as $key => $item){
  778. if ($key === 'num_rows' || !empty($item['deleted'])) continue;
  779. if(!empty($item['show_in_admin'])) {
  780. if(!$cf_header_shown) {
  781. $frm->addbreak('Custom Profile Fields');
  782. $cf_header_shown=1;
  783. }
  784. $itemval = "[EMPTY]";
  785. if (isset($user[$item['name']]) && trim($user[$item['name']]) != '') {
  786. $itemval = trim($user[$item['name']]);
  787. }
  788. $frm->addrow($item['name'],$itemval);
  789. }
  790. }
  791. phorum_hook("admin_users_form", $frm, $user);
  792. $frm->show();
  793. echo "<br /><hr class=\"PhorumAdminHR\" /><br /><a name=\"forums\"></a>";
  794. $frm = new PhorumInputForm ("", "post", "Update");
  795. $frm->hidden("user_id", $_REQUEST["user_id"]);
  796. $frm->hidden("module", "users");
  797. $frm->hidden("section", "forums");
  798. $frm->hidden("referrer", $referrer);
  799. $row=$frm->addbreak("Edit Forum Permissions");
  800. $frm->addhelp($row, "Forum Permissions", "These are permissions set exclusively for this user. You need to grant all permisssions you want the user to have for a forum here. No permissions from groups or a forum's properties will be used once the user has specific permissions for a forum.");
  801. $forums=phorum_db_get_forums();
  802. $forumpaths = phorum_get_forum_info(1);
  803. $perm_frm = $frm->checkbox("new_forum_permissions[".PHORUM_USER_ALLOW_READ."]", 1, "Read")."&nbsp;&nbsp;".
  804. $frm->checkbox("new_forum_permissions[".PHORUM_USER_ALLOW_REPLY."]", 1, "Reply")."&nbsp;&nbsp;".
  805. $frm->checkbox("new_forum_permissions[".PHORUM_USER_ALLOW_NEW_TOPIC."]", 1, "Create&nbsp;New&nbsp;Topics")."&nbsp;&nbsp;".
  806. $frm->checkbox("new_forum_permissions[".PHORUM_USER_ALLOW_EDIT."]", 1, "Edit&nbsp;Their&nbsp;Posts")."<br />".
  807. $frm->checkbox("new_forum_permissions[".PHORUM_USER_ALLOW_ATTACH."]", 1, "Attach&nbsp;Files")."<br />".
  808. $frm->checkbox("new_forum_permissions[".PHORUM_USER_ALLOW_MODERATE_MESSAGES."]", 1, "Moderate Messages")."&nbsp;&nbsp;".
  809. $frm->checkbox("new_forum_permissions[".PHORUM_USER_ALLOW_MODERATE_USERS."]", 1, "Moderate Users")."&nbsp;&nbsp;";
  810. $arr[]="Add A Forum...";
  811. foreach($forumpaths as $forum_id=>$forumname){
  812. if(!isset($user["forum_permissions"][$forum_id]) && $forums[$forum_id]['folder_flag'] == 0)
  813. $arr[$forum_id]=$forumname;
  814. }
  815. if(count($arr)>1)
  816. $frm->addrow($frm->select_tag("new_forum", $arr), $perm_frm);
  817. if(is_array($user["forum_permissions"])){
  818. foreach($user["forum_permissions"] as $forum_id=>$perms){
  819. $perm_frm = $frm->checkbox("forum_permissions[$forum_id][".PHORUM_USER_ALLOW_READ."]", 1, "Read", ($perms & PHORUM_USER_ALLOW_READ))."&nbsp;&nbsp;".
  820. $frm->checkbox("forum_permissions[$forum_id][".PHORUM_USER_ALLOW_REPLY."]", 1, "Reply", ($perms & PHORUM_USER_ALLOW_REPLY))."&nbsp;&nbsp;".
  821. $frm->checkbox("forum_permissions[$forum_id][".PHORUM_USER_ALLOW_NEW_TOPIC."]", 1, "Create&nbsp;New&nbsp;Topics", ($perms & PHORUM_USER_ALLOW_NEW_TOPIC))."&nbsp;&nbsp;".
  822. $frm->checkbox("forum_permissions[$forum_id][".PHORUM_USER_ALLOW_EDIT."]", 1, "Edit&nbsp;Their&nbsp;Posts", ($perms & PHORUM_USER_ALLOW_EDIT))."<br />".
  823. $frm->checkbox("forum_permissions[$forum_id][".PHORUM_USER_ALLOW_ATTACH."]", 1, "Attach&nbsp;Files", ($perms & PHORUM_USER_ALLOW_ATTACH))."<br />".
  824. $frm->checkbox("forum_permissions[$forum_id][".PHORUM_USER_ALLOW_MODERATE_MESSAGES."]", 1, "Moderate Messages", ($perms & PHORUM_USER_ALLOW_MODERATE_MESSAGES))."&nbsp;&nbsp;".
  825. $frm->checkbox("forum_permissions[$forum_id][".PHORUM_USER_ALLOW_MODERATE_USERS."]", 1, "Moderate Users", ($perms & PHORUM_USER_ALLOW_MODERATE_USERS))."&nbsp;&nbsp;".
  826. $frm->hidden("forums[$forum_id]", $forum_id);
  827. $row=$frm->addrow($forumpaths[$forum_id]."<br />".$frm->checkbox("delforum[$forum_id]", 1, "Delete"), $perm_frm);
  828. }
  829. }
  830. $frm->show();
  831. echo "<br /><hr class=\"PhorumAdminHR\" /><br /><a name=\"groups\"></a>";
  832. $frm = new PhorumInputForm ("", "post", "Update");
  833. $frm->hidden("user_id", $_REQUEST["user_id"]);
  834. $frm->hidden("module", "users");
  835. $frm->hidden("referrer", $referrer);
  836. $frm->hidden("section", "groups");
  837. $extra_opts = "";
  838. // if its an admin, let the user know that the admin will be able to act as a moderator no matter what
  839. if ($user["admin"]){
  840. $row=$frm->addbreak("Edit Groups (Admins can act as a moderator of every group, regardless of these values)");
  841. }
  842. else{
  843. $row=$frm->addbreak("Edit Groups");
  844. }
  845. $groups= phorum_db_get_groups(0, TRUE);
  846. $usergroups = phorum_api_user_check_group_access(PHORUM_USER_GROUP_SUSPENDED, PHORUM_ACCESS_LIST, $_REQUEST["user_id"]);
  847. $arr=array("Add A Group...");
  848. foreach($groups as $group_id=>$group){
  849. if(!isset($usergroups[$group_id]))
  850. $arr[$group_id]=$group["name"];
  851. }
  852. if(count($arr)>1)
  853. $frm->addrow("Add A Group", $frm->select_tag("new_group", $arr));
  854. if(is_array($usergroups)){
  855. $group_options = array(
  856. "remove" => "< Remove User From Group >",
  857. PHORUM_USER_GROUP_SUSPENDED => "Suspended",
  858. PHORUM_USER_GROUP_UNAPPROVED => "Unapproved",
  859. PHORUM_USER_GROUP_APPROVED => "Approved",
  860. PHORUM_USER_GROUP_MODERATOR => "Group Moderator");
  861. foreach($usergroups as $group_id => $group){
  862. $group_perm = $group['user_status'];
  863. $group_info = phorum_db_get_groups($group_id);
  864. $frm->hidden("groups[$group_id]", "$group_id");
  865. $frm->addrow($group_info[$group_id]["name"], $frm->select_tag("group_perm[$group_id]", $group_options, $group_perm, $extra_opts));
  866. }
  867. }
  868. $frm->show();
  869. } else {
  870. echo "User Not Found.";
  871. }
  872. //display add user form
  873. } elseif (isset($_REQUEST["add"]) || isset($addUser_error)) {
  874. $username = isset($user_data["username"]) ? $user_data["username"] : "";
  875. $real_name = isset($user_data["real_name"]) ? $user_data["real_name"] : "";
  876. $email = isset($user_data["email"]) ? $user_data["email"] : "";
  877. $admin = isset($user_data["admin"]) ? $user_data["admin"] : "";
  878. print "<a href=\"".htmlspecialchars($referrer)."\">Back to the user overview</a><br/>";
  879. $frm = new PhorumInputForm ("", "post", "Add User");
  880. $frm->hidden("module", "users");
  881. $frm->hidden("referrer", $referrer);
  882. $frm->hidden("addUser", 1);
  883. $frm->addbreak("Add User");
  884. $frm->addrow("User Name", $frm->text_box("username", $username, 50));
  885. $frm->addrow("Real Name", $frm->text_box("real_name", $real_name, 50));
  886. $frm->addrow("Email", $frm->text_box("email", $email, 50));
  887. $frm->addrow("Password", $frm->text_box("password1","", 0, 0, true));
  888. $frm->addrow("Password (Confirmation)", $frm->text_box("password2","", 0, 0, true));
  889. $frm->addrow("Administrator", $frm->select_tag("admin", array("No", "Yes"), $admin));
  890. $frm->show();
  891. }
  892. ?>