PageRenderTime 41ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/mods/_core/users/users.php

https://github.com/harriswong/ATutor
PHP | 246 lines | 204 code | 26 blank | 16 comment | 82 complexity | 4716eea66273bd325ac11f2a3c07f78e MD5 | raw file
  1. <?php
  2. /****************************************************************/
  3. /* ATutor */
  4. /****************************************************************/
  5. /* Copyright (c) 2002-2010 */
  6. /* Inclusive Design Institute */
  7. /* http://atutor.ca */
  8. /* */
  9. /* This program is free software. You can redistribute it and/or*/
  10. /* modify it under the terms of the GNU General Public License */
  11. /* as published by the Free Software Foundation. */
  12. /****************************************************************/
  13. // $Id$
  14. define('AT_INCLUDE_PATH', '../../../include/');
  15. require(AT_INCLUDE_PATH.'vitals.inc.php');
  16. admin_authenticate(AT_ADMIN_PRIV_USERS);
  17. if ( (isset($_GET['edit']) || isset($_GET['password']) || isset($_GET['enrollment'])) && (isset($_GET['id']) && count($_GET['id']) > 1) ) {
  18. $msg->addError('SELECT_ONE_ITEM');
  19. } else if (isset($_GET['edit'], $_GET['id'])) {
  20. header('Location: edit_user.php?id='.$_GET['id'][0]);
  21. exit;
  22. } else if (isset($_GET['password'], $_GET['id'])) {
  23. header('Location: password_user.php?id='.$_GET['id'][0]);
  24. exit;
  25. } else if (isset($_GET['enrollment'], $_GET['id'])) {
  26. header('Location: user_enrollment.php?id='.$_GET['id'][0]);
  27. exit;
  28. } else if ( isset($_GET['apply']) && isset($_GET['id']) && $_GET['change_status'] >= -1) {
  29. $ids = implode(',', $_GET['id']);
  30. $status = intval($_GET['change_status']);
  31. if ($status == -1) {
  32. header('Location: admin_delete.php?id='.$ids);
  33. exit;
  34. } else {
  35. header('Location: user_status.php?ids='.$ids.'&status='.$status);
  36. exit;
  37. }
  38. } else if ( (isset($_GET['apply']) || isset($_GET['apply_all'])) && $_GET['change_status'] < -1) {
  39. $msg->addError('NO_ACTION_SELECTED');
  40. } else if (isset($_GET['apply']) || isset($_GET['edit']) || isset($_GET['delete']) || isset($_GET['password'])) {
  41. $msg->addError('NO_ITEM_SELECTED');
  42. }
  43. if ($_GET['reset_filter']) {
  44. unset($_GET);
  45. }
  46. $page_string = '';
  47. $orders = array('asc' => 'desc', 'desc' => 'asc');
  48. $cols = array('login' => 1, 'public_field' => 1, 'first_name' => 1, 'second_name' => 1, 'last_name' => 1, 'email' => 1, 'status' => 1, 'last_login' => 1, 'creation_date' => 1);
  49. if (isset($_GET['asc'])) {
  50. $order = 'asc';
  51. $col = isset($cols[$_GET['asc']]) ? $_GET['asc'] : 'login';
  52. } else if (isset($_GET['desc'])) {
  53. $order = 'desc';
  54. $col = isset($cols[$_GET['desc']]) ? $_GET['desc'] : 'login';
  55. } else {
  56. // no order set
  57. $order = 'asc';
  58. $col = 'login';
  59. }
  60. if (isset($_GET['status']) && ($_GET['status'] != '')) {
  61. $_GET['status'] = intval($_GET['status']);
  62. $status = '=' . intval($_GET['status']);
  63. $page_string .= SEP.'status'.$status;
  64. } else {
  65. $status = '<>-1';
  66. $_GET['status'] = '';
  67. }
  68. if (isset($_GET['last_login_days'], $_GET['last_login_have']) && ($_GET['last_login_have'] >= 0) && $_GET['last_login_days']) {
  69. $have = intval($_GET['last_login_have']);
  70. $days = intval($_GET['last_login_days']);
  71. $page_string .= SEP.'last_login_have='.$have;
  72. $page_string .= SEP.'last_login_days='.$days;
  73. if ($have) {
  74. $ll = " >= TO_DAYS(NOW())-$days)";
  75. } else {
  76. $ll = " < TO_DAYS(NOW())-$days OR last_login+0=0)";
  77. }
  78. $last_login_days = '(TO_DAYS(last_login)'.$ll;
  79. } else {
  80. $last_login_days = '1';
  81. }
  82. if (isset($_GET['include']) && $_GET['include'] == 'one') {
  83. $checked_include_one = ' checked="checked"';
  84. $page_string .= SEP.'include=one';
  85. } else {
  86. $_GET['include'] = 'all';
  87. $checked_include_all = ' checked="checked"';
  88. $page_string .= SEP.'include=all';
  89. }
  90. if ($_GET['search']) {
  91. $page_string .= SEP.'search='.urlencode($stripslashes($_GET['search']));
  92. $search = $addslashes($_GET['search']);
  93. $search = explode(' ', $search);
  94. if ($_GET['include'] == 'all') {
  95. $predicate = 'AND ';
  96. } else {
  97. $predicate = 'OR ';
  98. }
  99. $sql = '';
  100. foreach ($search as $term) {
  101. $term = trim($term);
  102. $term = str_replace(array('%','_'), array('\%', '\_'), $term);
  103. if ($term) {
  104. $term = '%'.$term.'%';
  105. $sql .= "((M.first_name LIKE '$term') OR (M.second_name LIKE '$term') OR (M.last_name LIKE '$term') OR (M.email LIKE '$term') OR (M.login LIKE '$term')) $predicate";
  106. }
  107. }
  108. $sql = '('.substr($sql, 0, -strlen($predicate)).')';
  109. $search = $sql;
  110. } else {
  111. $search = '1';
  112. }
  113. if ($_GET['searchid']) {
  114. $_GET['searchid'] = trim($_GET['searchid']);
  115. $page_string .= SEP.'searchid='.urlencode($_GET['searchid']);
  116. $searchid = $addslashes($_GET['searchid']);
  117. $searchid = explode(',', $searchid);
  118. $sql = '';
  119. foreach ($searchid as $term) {
  120. $term = trim($term);
  121. $term = str_replace(array('%','_'), array('\%', '\_'), $term);
  122. if ($term) {
  123. if (strpos($term, '-') === FALSE) {
  124. $term = '%'.$term.'%';
  125. $sql .= "(L.public_field LIKE '$term') OR ";
  126. } else {
  127. // range search
  128. $range = explode('-', $term, 2);
  129. $range[0] = trim($range[0]);
  130. $range[1] = trim($range[1]);
  131. if (is_numeric($range[0]) && is_numeric($range[1])) {
  132. $sql .= "(L.public_field >= $range[0] AND L.public_field <= $range[1]) OR ";
  133. } else {
  134. $sql .= "(L.public_field >= '$range[0]' AND L.public_field <= '$range[1]') OR ";
  135. }
  136. }
  137. }
  138. }
  139. $sql = '('.substr($sql, 0, -3).')';
  140. $searchid = $sql;
  141. } else {
  142. $searchid = '1';
  143. }
  144. if (defined('AT_MASTER_LIST') && AT_MASTER_LIST) {
  145. $sql = "SELECT COUNT(M.member_id) AS cnt FROM ".TABLE_PREFIX."members M LEFT JOIN (SELECT * FROM ".TABLE_PREFIX."master_list WHERE member_id <> 0) L USING (member_id) WHERE M.status $status AND $search AND $searchid AND $last_login_days";
  146. } else {
  147. $sql = "SELECT COUNT(member_id) AS cnt FROM ".TABLE_PREFIX."members M WHERE status $status AND $search AND $last_login_days";
  148. }
  149. $result = mysql_query($sql, $db);
  150. if ($result){
  151. $row = mysql_fetch_assoc($result);
  152. $num_results = $row['cnt'];
  153. } else {
  154. $num_results = 0;
  155. }
  156. $results_per_page = 50;
  157. $num_pages = max(ceil($num_results / $results_per_page), 1);
  158. $page = intval($_GET['p']);
  159. if (!$page) {
  160. $page = 1;
  161. }
  162. $count = (($page-1) * $results_per_page) + 1;
  163. $offset = ($page-1)*$results_per_page;
  164. if ( isset($_GET['apply_all']) && $_GET['change_status'] >= -1) {
  165. $offset = 0;
  166. $results_per_page = 999999;
  167. }
  168. if (defined('AT_MASTER_LIST') && AT_MASTER_LIST) {
  169. $sql = "SELECT M.member_id, M.login, M.first_name, M.second_name, M.last_name, M.email, M.status, M.last_login+0 AS last_login, M.creation_date, L.public_field FROM ".TABLE_PREFIX."members M LEFT JOIN (SELECT * FROM ".TABLE_PREFIX."master_list WHERE member_id <> 0) L USING (member_id) WHERE M.status $status AND $search AND $searchid AND $last_login_days ORDER BY $col $order LIMIT $offset, $results_per_page";
  170. } else {
  171. $sql = "SELECT M.member_id, M.login, M.first_name, M.second_name, M.last_name, M.email, M.status, M.last_login+0 AS last_login, M.creation_date FROM ".TABLE_PREFIX."members M WHERE M.status $status AND $search AND $last_login_days ORDER BY $col $order LIMIT $offset, $results_per_page";
  172. }
  173. $result = mysql_query($sql, $db);
  174. if ( isset($_GET['apply_all']) && $_GET['change_status'] >= -1) {
  175. $ids = '';
  176. while ($row = mysql_fetch_assoc($result)) {
  177. $ids .= $row['member_id'].',';
  178. }
  179. $ids = substr($ids,0,-1);
  180. $status = intval($_GET['change_status']);
  181. if ($status==-1) {
  182. header('Location: admin_delete.php?id='.$ids);
  183. exit;
  184. } else {
  185. header('Location: user_status.php?ids='.$ids.'&status='.$status);
  186. exit;
  187. }
  188. }
  189. require(AT_INCLUDE_PATH.'header.inc.php');
  190. ?>
  191. <script language="JavaScript" type="text/javascript">
  192. //<!--
  193. function CheckAll() {
  194. for (var i=0;i<document.form.elements.length;i++) {
  195. var e = document.form.elements[i];
  196. if ((e.name == 'id[]') && (e.type=='checkbox')) {
  197. e.checked = document.form.selectall.checked;
  198. togglerowhighlight(document.getElementById("r" + e.id), e.id);
  199. }
  200. }
  201. }
  202. function togglerowhighlight(obj, boxid) {
  203. if (document.getElementById(boxid).checked) {
  204. obj.className = 'selected';
  205. } else {
  206. obj.className = '';
  207. }
  208. }
  209. //-->
  210. </script>
  211. <?php
  212. $savant->assign('result', $result);
  213. $savant->assign('results_per_page', $results_per_page);
  214. $savant->assign('page', $page);
  215. $savant->assign('orders', $orders);
  216. $savant->assign('order', $order);
  217. $savant->assign('page_string', $page_string);
  218. $savant->assign('num_results', $num_results);
  219. $savant->display('admin/users/users.tmpl.php');
  220. require(AT_INCLUDE_PATH.'footer.inc.php'); ?>