search.php
上传用户:gzy2002
上传日期:2010-02-11
资源大小:1785k
文件大小:18k
源码类别:

电子政务应用

开发平台:

Java

  1. <?php
  2. // +-------------------------------------------------------------+
  3. // | DeskPRO v [2.0.1 Production]
  4. // | Copyright (C) 2001 - 2004 Headstart Solutions Limited
  5. // | Supplied by WTN-WDYL
  6. // | Nullified by WTN-WDYL
  7. // | Distribution via WebForum, ForumRU and associated file dumps
  8. // +-------------------------------------------------------------+
  9. // | DESKPRO IS NOT FREE SOFTWARE
  10. // +-------------------------------------------------------------+
  11. // | License ID : Full Enterprise License =) ...
  12. // | License Owner : WTN-WDYL Team
  13. // +-------------------------------------------------------------+
  14. // | $RCSfile: search.php,v $
  15. // | $Date: 2004/02/10 01:34:32 $
  16. // | $Revision: 1.41 $
  17. // +-------------------------------------------------------------+
  18. // | File Details:
  19. // | - User search page.
  20. // +-------------------------------------------------------------+
  21. error_reporting(E_ALL ^ E_NOTICE);
  22. include "./../global.php";
  23. tech_nav('users');
  24. // default do
  25. $_REQUEST['do'] = trim($_REQUEST['do']);
  26. if (!isset($_REQUEST['do']) or $_REQUEST['do'] == "") {
  27. $_REQUEST['do'] = "simple";
  28. }
  29. if ($_REQUEST[variables]) {
  30. $_REQUEST = array_merge(unserialize($_REQUEST[variables]), $_REQUEST);
  31. }
  32. $perpage = 40;
  33. ############################################# BASIC SEARCH ############################################# 
  34. if ($_REQUEST['do'] == "simple" OR $_REQUEST['do'] == "dosimple") {
  35. $table[] = table_midheader('Option 1 : Simple Username / Email Search');
  36. $table[] = array(table_thelp('<b>Username / Email</b>', 'Users', 'Search: Username / Email'),
  37. form_input('text', $_REQUEST[text], 20) . '&nbsp;&nbsp;' .
  38. form_select('field', array('email' => 'email', 'username' => 'username'), NULL, $_REQUEST['field']));
  39. $table[] = table_midheader('Option 2 : Starting Letter Search');
  40. $db->query("SELECT name, display_name, formtype FROM user_def WHERE
  41. tech_viewable ORDER BY displayorder");
  42. while ($result = $db->row_array()) {
  43. if ($result[formtype] == 'input' OR $result[formtype] == 'textarea') {
  44. $display_name = unserialize($result[display_name]);
  45. $display_name = $display_name[$settings[default_language]];
  46. $array_fields[$result[name]] = $display_name;
  47. }
  48. }
  49. $array_fields = array_merge(array('id' => 'id', 'email' => 'email', 'username' => 'username'), $array_fields);
  50. // build form
  51. $table[] = array(table_thelp('<b>Field to Match</b>', 'Users', 'Search: Field to Match'), form_select('field2', $array_fields, '', $_REQUEST['field2']));
  52. // alpha bar
  53. $array = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  54. 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
  55. 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'special');
  56. // build the bar
  57. $tmp .= "<table><tr>";
  58. $i=0;
  59. foreach ($array AS $val) {
  60. if ($i > 17) {
  61. $tmp .= "</tr><tr>";
  62. $i = 0;
  63. }
  64. if (@in_array($val, $_REQUEST[alpha])) {
  65. $selected = ' checked=checked';
  66. } else {
  67. unset($selected);
  68. }
  69. $tmp .= "<td align="center"><b>$val</b><br /><input type="checkbox" name="alpha[$val]" value="$val"$selected></td>";
  70. $i++;
  71. }
  72. $tmp .= "</tr></table>";
  73. $table[] = array(table_thelp('<b>Match Starting Letter</b>', 'Users', 'Search: Match Starting Letter'), $tmp);
  74. unset($tmp);
  75. // some standard fields for 1st time user
  76. if (!is_array($_REQUEST[submit_fields])) {
  77. $_REQUEST[submit_fields] = array('username', 'email');
  78. }
  79. // build the html for which fields to choose
  80. $tmp = "<table><tr>";
  81. $i = 0;
  82. while (list ($key, $var) = each ($array_fields)) {
  83. if ($i > 3) {
  84. $tmp .= "</tr><tr>";
  85. $i=0;
  86. }
  87. $tmp .= "<td><b>$var</b>:</td><td><input type="checkbox" 
  88. name="submit_fields[]" value="$key"" . iff(@in_array($key,
  89. $_REQUEST[submit_fields]), 'checked="checked"', '') . "></td>";
  90. $i++;
  91. }
  92. $tmp .= "</tr></table>";
  93. $table[] = array(table_thelp('<b>Fields to Display</b>', 'Users', 'Search: Fields to Display'), $tmp);
  94. $searchtable = $table;
  95. if ($_REQUEST['do'] != 'dosimple') {
  96. table_header('User Search', 'search.php', array('do' => 'dosimple'));
  97. table_content('', $searchtable);
  98. table_footer('Search');
  99. $shown = 1;
  100. }
  101. unset($table);
  102. }
  103. ############################################# SEARCH RESULTS ############################################# 
  104. if ($_REQUEST['do'] == "dosimple") {
  105. $db->query("SELECT name, display_name FROM user_def WHERE tech_viewable ORDER BY displayorder");
  106. while ($result = $db->row_array()) {
  107. $allowed_fields[] = $result[name];
  108. $data[$result[name]] = $result;
  109. }
  110. $allowed_fields[] = 'id';
  111. $allowed_fields[] = 'username';
  112. $allowed_fields[] = 'email';
  113. // start building query
  114. $query = "SELECT id";
  115. if (!is_array($_REQUEST[submit_fields])) {
  116. $_REQUEST[submit_fields] = array('id');
  117. }
  118. // get the data back (only bit they are allowed to view) and build query.
  119. foreach ($_REQUEST[submit_fields] AS $key => $val) {
  120. if (in_array($val, $allowed_fields)) {
  121. $query .= ", $val";
  122. if ($val == 'username') {
  123. $cols[] = 'Username';
  124. } elseif ($val == 'email') {
  125. $cols[] = 'Email';
  126. } elseif ($val == 'id') {
  127. $cols[] = 'User ID';
  128. } else {
  129. $cols_tmp = unserialize($data[$val]['display_name']);
  130. $cols[] = $cols_tmp[$settings[default_language]];
  131. }
  132. $col_vals[] = $val;
  133. }
  134. }
  135. $col_vals[] = 'tickets';
  136. $col_vals[] = 'edit';
  137. $col_vals[] = 'delete';
  138. // add from statement
  139. $query .= " FROM user ";
  140. //////////////////// SIMPLE SEARCH ////////////////////
  141. if (trim($_REQUEST[text]) != '') {
  142. if ((int)$_REQUEST['text']) {
  143. $query .= " WHERE id = '$_REQUEST[text]'";
  144. } elseif ($_REQUEST[field] == 'username') {
  145. $query .= " WHERE username LIKE '%" . mysql_escape_string(addslashes_like($_REQUEST[text])) . "%'";
  146. } elseif ($_REQUEST[field] == 'email') {
  147. $query .= " WHERE email LIKE '%" . mysql_escape_string(addslashes_like($_REQUEST[text])) . "%'";
  148. } else {
  149. $query .= " WHERE username LIKE '%" . mysql_escape_string(addslashes_like($_REQUEST[text])) . "%' OR email LIKE '%" . mysql_escape_string(addslashes_like($_REQUEST[text])) . "%'";
  150. }
  151. $y = 1;
  152.  
  153. }
  154. //////////////////// ALPHANUMERIC SEARCH ////////////////////
  155. if (is_array($_REQUEST[alpha]) AND in_array($_REQUEST[field2], $allowed_fields)) {
  156. foreach ($_REQUEST[alpha] AS $key => $var) {
  157. if ($var == 'special') {
  158. $term = "$_REQUEST[field2] NOT REGEXP '^[a-z0-9]'";
  159. } else {
  160. $term = "$_REQUEST[field2] LIKE '" .mysql_escape_string(addslashes_like($var)) . "%'";
  161. }
  162. if ($z) {
  163. $query .= " OR $term ";
  164. } elseif ($y) {
  165. $query .= " AND ($term ";
  166. $z = 1;
  167. } else {
  168. $query .= " WHERE ($term ";
  169. $z = 1;
  170. }
  171. }
  172. $query .= ')';
  173. }
  174. //////////////////// LIMIT  ////////////////////
  175. if ($_REQUEST['page']) {
  176. $page = $_REQUEST['page'];
  177. } else {
  178. $page = 1;
  179. }
  180. $start = $perpage * $page;
  181. $start = $start - $perpage;
  182. $limit = " LIMIT $start, $perpage";
  183. //////////////////// RUN QUERY & LOOP ////////////////////
  184. $db->query($query);
  185. $total = $db->num_rows();
  186. while ($result = $db->row_array()) {
  187. if (((!$_REQUEST['field'] OR ($_REQUEST['field'] == 'username')) AND (strtolower(trim($result['username'])) == strtolower(trim($_REQUEST['text']))) AND ($_REQUEST['text'])) OR
  188. ((!$_REQUEST['field'] OR ($_REQUEST['field'] == 'email')) AND (strtolower(trim($result['email'])) == strtolower(trim($_REQUEST['text']))) AND ($_REQUEST['text'])) OR 
  189. ($_REQUEST['text'] == $result['id'])) {
  190. jump("view.php?id=$result[id]", 'Exact match found, viewing...');
  191. exit;
  192. }
  193. }
  194. table_header('User Search', 'search.php', array('do' => 'dosimple'));
  195. table_content('', $searchtable);
  196. table_footer('Search');
  197. $db->query($query . $limit);
  198. while ($result = $db->row_array()) {
  199. foreach ($col_vals AS $key => $val) {
  200. // field types
  201. if ($val == 'edit') {
  202. $table[$i][] = "<center><a href="view.php?id=$result[id]">Edit</a></center>";
  203. } elseif ($val == 'delete') {
  204. if ($user['p_delete_users']) {
  205. $table[$i][] = jprompt('Do you want to delete this user? This will permanently delete ALL tickets and billing information for this user!', "actions.php?do=delete&id=$result[id]", '<center>Delete</center>');
  206. }
  207. } elseif ($val == 'tickets') {
  208. $table[$i][] = "<center><a href="view.php?id=$result[id]">Tickets</a></center>";
  209. } else {
  210. $table[$i][] = $result[$val];
  211. }
  212. }
  213. $i++;
  214. }
  215. $cols[] = "Tickets";
  216. $cols[] = "Edit";
  217. if ($user['p_delete_users']) {
  218. $cols[] = "Delete";
  219. }
  220. if (!$shown) {
  221. table_header('The following users matched your criteria' . iff(($total == 1), " ($total user)", " ($total users)"));
  222. table_content($cols, $table);
  223. table_footer();
  224. }
  225. //////////////////// PAGENAV ////////////////////
  226. if ($total) {
  227. $variables = serialize($_REQUEST);
  228. echo "<form action="search.php" method="post" name="frm">";
  229. echo form_hidden('variables', $variables) . form_hidden('do', 'dosimple');
  230. echo pagenav($total, $perpage, $page, '', 'frm', 'select', 'page');
  231. echo "<span id="hiddenbit"></span></form>";
  232. }
  233. }
  234. ############################################# ADVANCED SEARCH ############################################# 
  235. if ($_REQUEST['do'] == "advanced" OR $_REQUEST['do'] == "doadvanced") {
  236. $table[] = table_midheader('User Properties');
  237. // id range
  238. $bit = form_input('greater', $_REQUEST['greater'], 3) . " < <b>ID</b> > " . form_input('lessthan', $_REQUEST['lessthan'], 3);
  239. $table[] = array(table_thelp('<b>User ID Range</b>', 'Users', 'Search: User ID Range'), $bit);
  240. // user owner
  241. $bit = form_input('username', $_REQUEST['username'], 30);
  242. $table[] = array(table_thelp('<b>Username</b>', 'Users', 'Search: Username'), $bit);
  243. $bit = form_input('email', $_REQUEST['email'], 30);
  244. $table[] = array(table_thelp('<b>E-mail</b>', 'Users', 'Search: User E-mail'), $bit);
  245. // sort dates for display
  246. if ($_REQUEST['ydate_registered_start']) {
  247. $date = @strtotime("$_REQUEST[ydate_registered_start]-$_REQUEST[mdate_registered_start]-$_REQUEST[ddate_registered_start]");
  248. } else {
  249. $date = NULL;
  250. }
  251. if ($_REQUEST['ydate_registered_end']) {
  252. $date2 = @strtotime("$_REQUEST[ydate_registered_end]-$_REQUEST[mdate_registered_end]-$_REQUEST[ddate_registered_end]");
  253. } else {
  254. $date2 = NULL;
  255. }
  256. // date of registration
  257. $bit =  'From ' . form_date('date_registered_start', '', $date, '', 1) . "<a onClick="datePop('searchform', 'date_registered_start')">".html_image('tech/bul102.gif')."</a> To " . form_date('date_registered_end', '', $date2, '', 1) . "<a onClick="datePop('searchform', 'date_registered_end')">".html_image('tech/bul102.gif')."</a>";
  258. $table[] = array(table_thelp('<b>Date Registered</b>', 'Users', 'Search: Date Registered'), $bit);
  259. unset($date, $date2);
  260. $db->query("SELECT * FROM user_def WHERE tech_viewable");
  261. if ($db->num_rows()) {
  262. $table[] = table_midheader('Custom User Fields');
  263. while ($result = $db->row_array()) {
  264. $display_name = unserialize($result[display_name]);
  265. $display_name = $display_name[$settings[default_language]];
  266. $array_fields[$result[name]] = $display_name;
  267. $bit = field_def($result, 'redo', $_REQUEST[custom_fields][$result[name]], $_REQUEST[custom_fields]["extra" . $result[name]], '', 'custom_fields', 1);
  268. $table[] = array("<b>$display_name</b>", $bit);
  269. }
  270. }
  271. $array_fields = array_merge(array('id' => 'id', 'email' => 'email', 'username' => 'username'), $array_fields);
  272. // some standard fields for 1st time user
  273. if (!is_array($_REQUEST[submit_fields])) {
  274. $_REQUEST[submit_fields] = array('username', 'email');
  275. }
  276. // build the html for which fields to choose
  277. $tmp = "<table><tr>";
  278. $i = 0;
  279. while (list ($key, $var) = each ($array_fields)) {
  280. if ($i > 3) {
  281. $tmp .= "</tr><tr>";
  282. $i=0;
  283. }
  284. $tmp .= "<td><b>$var</b>:</td><td><input type="checkbox" name="submit_fields[]" value="$key" " . iff(@in_array($key, $_REQUEST[submit_fields]), 'checked="checked"', '') . "></td>";
  285. $i++;
  286. }
  287. $tmp .= "</tr></table>";
  288. $table[] = table_midheader('Format of Results');
  289. $table[] = array(table_thelp('<b>Fields to Display</b>', 'Users', 'Search: Fields to Display'), $tmp);
  290. $searchtable = $table;
  291. if ($_REQUEST['do'] != 'doadvanced') {
  292. table_header('Search for Users', 'search.php', array('do' => 'doadvanced'), '', 'searchform');
  293. table_content($columns, $searchtable);
  294. table_footer('Search');
  295. $shown = 1;
  296. }
  297. unset($columns, $table);
  298. }
  299. ############################################# SEARCH RESULTS ############################################# 
  300. if ($_REQUEST['do'] == "doadvanced") {
  301. //////////////////// USERID RANGE ////////////////////
  302. give_default($_REQUEST[greater], 0);
  303. $where .= " WHERE id >= '" . mysql_escape_string($_REQUEST[greater]) . "'";
  304. if ($_REQUEST[lessthan]) {
  305. $where .= " AND id <= '" . mysql_escape_string($_REQUEST[lessthan]) . "'";
  306. }
  307. //////////////////// CUSTOM FIELDS ////////////////////
  308. $db->query("SELECT * FROM user_def WHERE tech_viewable ORDER BY displayorder");
  309. while ($result = $db->row_array()) {
  310. $where .= field_search($result, 
  311. $_REQUEST[custom_fields][$result[name]], 
  312. $_REQUEST[custom_fields]['extra' . $result[name]],
  313. 'user',
  314. $_REQUEST[custom_fields][$result[name]."_match"],
  315. $_REQUEST[custom_fields][$result[name]."_not"]);
  316. $allowed_fields[] = $result[name];
  317. $data[$result[name]] = array('display_name' => $result[display_name], 'description' => $result[description]);
  318. }
  319. //////////////////// FIELDS TO DISPLAY ////////////////////
  320. $allowed_fields[] = 'id';
  321. $allowed_fields[] = 'username';
  322. $allowed_fields[] = 'email';
  323. // start building query
  324. $select = "SELECT id";
  325. // add id to the front of the array
  326. if (!is_array($_REQUEST[submit_fields])) {
  327. array_unshift($_REQUEST[submit_fields], 'id');
  328. }
  329. // get the data back (only bit they are allowed to view) and build query.
  330. foreach ($_REQUEST[submit_fields] AS $key => $val) {
  331. if (in_array($val, $allowed_fields)) {
  332. $select .= ", $val";
  333. if ($val == 'username') {
  334. $cols[] = 'Username';
  335. } elseif ($val == 'email') {
  336. $cols[] = 'Email';
  337. } elseif ($val == 'id') {
  338. $cols[] = 'User ID';
  339. } else {
  340. $cols_tmp = unserialize($data[$val]['display_name']);
  341. $cols[] = $cols_tmp[$settings[default_language]];
  342. }
  343. $col_vals[] = $val;
  344. }
  345. }
  346. $col_vals[] = 'tickets';
  347. $col_vals[] = 'edit';
  348. $col_vals[] = 'delete';
  349. // add from statement
  350. $query .= " FROM user ";
  351. //////////////////// EMAIL / USERNAME ////////////////////
  352. if (trim($_REQUEST[username]) != '') {
  353. $where .= " AND username LIKE '%" . mysql_escape_string(addslashes_like($_REQUEST[username])) . "%'";
  354. }
  355. if (trim($_REQUEST[email]) != '') {
  356. $where .= " AND email LIKE '%" . mysql_escape_string(addslashes_like($_REQUEST[email])) . "%'";
  357. }
  358. //////////////////// DATES ////////////////////
  359. // earliest date registered
  360. if ($_REQUEST['ydate_registered_start']) {
  361. $time = mktime(0, 0, 0, $_REQUEST['mdate_registered_start'], $_REQUEST['ddate_registered_start'], $_REQUEST['ydate_registered_start']);
  362. $where .= " AND date_registered >= '$time'";
  363. }
  364. // lastest date registered
  365. if ($_REQUEST['ydate_registered_end']) {
  366. $time = mktime(0, 0, 0, $_REQUEST['mdate_registered_end'], $_REQUEST['ddate_registered_end'], $_REQUEST['ydate_registered_end']);
  367. $where .= " AND date_registered <= '$time'";
  368. }
  369. //////////////////// LIMIT  ////////////////////
  370. if ($_REQUEST['page']) {
  371. $page = $_REQUEST['page'];
  372. } else {
  373. $page = 1;
  374. }
  375. $start = $perpage * $page;
  376. $start = $start - $perpage;
  377. $limit = " LIMIT $start, $perpage";
  378. ////////////////////// LOAD CUSTOM USER FIELD DATA ///////////////////////
  379. $db->query("SELECT * FROM user_def");
  380. $custfields = array();
  381. while ($result = $db->row_array()) {
  382. $custfields[$result['name']] = $result;
  383. }
  384. //////////////////// RUN QUERY & LOOP ////////////////////
  385. $result = $db->query_return("SELECT COUNT(*) AS total FROM user $where");
  386. $total = $result[total];
  387. //////////////////// DISPLAY RESULTs ////////////////////
  388. $cols[] = "Tickets";
  389. $cols[] = "Edit";
  390. $cols[] = "Delete";
  391. $db->query("
  392. $select
  393. FROM user
  394. $where
  395. ");
  396. $total = $db->num_rows();
  397. if ($total == 1) {
  398. $userdata = $db->row_array();
  399. jump("view.php?id=$userdata[id]", 'One user found, viewing...');
  400. exit;
  401. } else {
  402. while ($result = $db->row_array()) {
  403. if ((strtolower(trim($result['username'])) == strtolower(trim($_REQUEST['username']))) OR
  404. (strtolower(trim($result['email'])) == strtolower(trim($_REQUEST['email'])))) {
  405. jump("view.php?id=$result[id]", 'Exact match found, viewing...');
  406. exit;
  407. }
  408. }
  409. }
  410. table_header('Search for Users', 'search.php', array('do' => 'doadvanced'), '', 'searchform');
  411. table_content($columns, $searchtable);
  412. table_footer('Search');
  413. $db->query("
  414. $select
  415. FROM user
  416. $where
  417. $limit
  418. ");
  419. while ($result = $db->row_array()) {
  420. foreach ($col_vals AS $key => $val) {
  421. // field types
  422. if ($val == 'edit') {
  423. $table[$i][] = "<center><a href="view.php?id=$result[id]">Edit</a></center>";
  424. } elseif ($val == 'delete') {
  425. $table[$i][] = jprompt('Do you want to delete this user? This will permanently delete ALL tickets and billing information for this user!', "actions.php?do=delete&id=$result[id]", '<center>Delete</center>');
  426. } elseif ($val == 'tickets') {
  427. $table[$i][] = "<center><a href="view.php?id=$result[id]">Tickets</a></center>";
  428. } else {
  429. if (stristr($val, 'custom')) {
  430. $user_data = $custfields[$val];
  431. $user_data['display_name'] = unserialize($user_data['display_name']);
  432. $user_data['display_name'] = $user_data['display_name'][$settings['default_language']];
  433. $table[$i][] = field_display($user_data, $result[$val]);
  434. } else {
  435. $table[$i][] = $result[$val];
  436. }
  437. }
  438. }
  439. $i++;
  440. }
  441. table_header('The following users matched your criteria' . iff(($total == 1), " ($total user)", " ($total users)"));
  442. table_content($cols, $table);
  443. table_footer();
  444. //////////////////// PAGENAV ////////////////////
  445. if ($_REQUEST[greater] == '0') {
  446. unset($_REQUEST[greater]);
  447. }
  448. if ($total) {
  449. $variables = serialize($_REQUEST);
  450. echo "<form action="search.php" method="post" name="frm">";
  451. echo form_hidden('variables', $variables) . form_hidden('do', 'doadvanced');
  452. echo pagenav($total, $perpage, $page, '', 'frm', 'select', 'page');
  453. echo "<span id="hiddenbit"></span></form>";
  454. }
  455. }
  456. tech_footer();
  457. ?>