PageRenderTime 45ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/manage_user_page.php

https://github.com/fusenigk/mantisbt-1
PHP | 356 lines | 269 code | 39 blank | 48 comment | 46 complexity | 999e095bf2145cb0c8162bee744daf57 MD5 | raw file
  1. <?php
  2. # MantisBT - A PHP based bugtracking system
  3. # MantisBT is free software: you can redistribute it and/or modify
  4. # it under the terms of the GNU General Public License as published by
  5. # the Free Software Foundation, either version 2 of the License, or
  6. # (at your option) any later version.
  7. #
  8. # MantisBT is distributed in the hope that it will be useful,
  9. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. # GNU General Public License for more details.
  12. #
  13. # You should have received a copy of the GNU General Public License
  14. # along with MantisBT. If not, see <http://www.gnu.org/licenses/>.
  15. /**
  16. * @package MantisBT
  17. * @copyright Copyright (C) 2000 - 2002 Kenzaburo Ito - kenito@300baud.org
  18. * @copyright Copyright (C) 2002 - 2011 MantisBT Team - mantisbt-dev@lists.sourceforge.net
  19. * @link http://www.mantisbt.org
  20. *
  21. * @uses core.php
  22. * @uses access_api.php
  23. * @uses authentication_api.php
  24. * @uses config_api.php
  25. * @uses constant_inc.php
  26. * @uses database_api.php
  27. * @uses gpc_api.php
  28. * @uses helper_api.php
  29. * @uses html_api.php
  30. * @uses icon_api.php
  31. * @uses lang_api.php
  32. * @uses print_api.php
  33. * @uses string_api.php
  34. * @uses utility_api.php
  35. */
  36. /**
  37. * MantisBT Core API's
  38. */
  39. require_once( 'core.php' );
  40. require_api( 'access_api.php' );
  41. require_api( 'authentication_api.php' );
  42. require_api( 'config_api.php' );
  43. require_api( 'constant_inc.php' );
  44. require_api( 'database_api.php' );
  45. require_api( 'gpc_api.php' );
  46. require_api( 'helper_api.php' );
  47. require_api( 'html_api.php' );
  48. require_api( 'icon_api.php' );
  49. require_api( 'lang_api.php' );
  50. require_api( 'print_api.php' );
  51. require_api( 'string_api.php' );
  52. require_api( 'utility_api.php' );
  53. auth_reauthenticate();
  54. access_ensure_global_level( config_get( 'manage_user_threshold' ) );
  55. $f_sort = gpc_get_string( 'sort', 'username' );
  56. $f_dir = gpc_get_string( 'dir', 'ASC' );
  57. $f_hide = gpc_get_bool( 'hide' );
  58. $f_save = gpc_get_bool( 'save' );
  59. $f_filter = utf8_strtoupper( gpc_get_string( 'filter', config_get( 'default_manage_user_prefix' ) ) );
  60. $f_page_number = gpc_get_int( 'page_number', 1 );
  61. $t_user_table = db_get_table( 'user' );
  62. $t_cookie_name = config_get( 'manage_cookie' );
  63. $t_lock_image = '<img src="' . config_get( 'icon_path' ) . 'protected.gif" width="8" height="15" alt="' . lang_get( 'protected' ) . '" />';
  64. $c_filter = '';
  65. # Clean up the form variables
  66. if ( !db_field_exists( $f_sort, $t_user_table ) ) {
  67. $c_sort = 'username';
  68. } else {
  69. $c_sort = addslashes($f_sort);
  70. }
  71. if ($f_dir == 'ASC') {
  72. $c_dir = 'ASC';
  73. } else {
  74. $c_dir = 'DESC';
  75. }
  76. if ($f_hide == 0) { # a 0 will turn it off
  77. $c_hide = 0;
  78. } else { # anything else (including 'on') will turn it on
  79. $c_hide = 1;
  80. }
  81. $t_hide_filter = '&amp;hide=' . $c_hide;
  82. # set cookie values for hide, sort by, and dir
  83. if ( $f_save ) {
  84. $t_manage_string = $c_hide.':'.$c_sort.':'.$c_dir;
  85. gpc_set_cookie( $t_cookie_name, $t_manage_string, true );
  86. } else if ( !is_blank( gpc_get_cookie( $t_cookie_name, '' ) ) ) {
  87. $t_manage_arr = explode( ':', gpc_get_cookie( $t_cookie_name ) );
  88. $f_hide = $t_manage_arr[0];
  89. if ( isset( $t_manage_arr[1] ) ) {
  90. $f_sort = $t_manage_arr[1];
  91. } else {
  92. $f_sort = 'username';
  93. }
  94. if ( isset( $t_manage_arr[2] ) ) {
  95. $f_dir = $t_manage_arr[2];
  96. } else {
  97. $f_dir = 'DESC';
  98. }
  99. }
  100. html_page_top( lang_get( 'manage_users_link' ) );
  101. print_manage_menu( 'manage_user_page.php' );
  102. # New Accounts Form BEGIN
  103. $days_old = 7 * SECONDS_PER_DAY;
  104. $query = "SELECT *
  105. FROM $t_user_table
  106. WHERE ".db_helper_compare_days("" . db_now() . "","date_created","<= $days_old")."
  107. ORDER BY date_created DESC";
  108. $result = db_query_bound( $query );
  109. $g_db->debug=false;
  110. $new_user_count = db_num_rows( $result);
  111. # Never Logged In Form BEGIN
  112. $query = "SELECT *
  113. FROM $t_user_table
  114. WHERE ( login_count = 0 ) AND ( date_created = last_visit )
  115. ORDER BY date_created DESC";
  116. $result = db_query_bound( $query );
  117. $unused_user_count = db_num_rows( $result );
  118. # Manage Form BEGIN
  119. $t_prefix_array = array();
  120. $t_prefix_array['ALL'] = lang_get( 'show_all_users' );
  121. for ( $i = 'A'; $i != 'AA'; $i++ ) {
  122. $t_prefix_array[$i] = $i;
  123. }
  124. for ( $i = 0; $i <= 9; $i++ ) {
  125. $t_prefix_array["$i"] = "$i";
  126. }
  127. $t_prefix_array['UNUSED'] = lang_get( 'users_unused' );
  128. $t_prefix_array['NEW'] = lang_get( 'users_new' );
  129. echo '<div id="manage-user-filter-menu">';
  130. echo '<ul class="menu">';
  131. foreach ( $t_prefix_array as $t_prefix => $t_caption ) {
  132. echo '<li>';
  133. if ( $t_prefix === 'UNUSED' ) {
  134. $t_title = ' title="[' . $unused_user_count . '] (' . lang_get( 'never_logged_in_title' ) . ')"';
  135. } else if ( $t_prefix === 'NEW' ) {
  136. $t_title = ' title="[' . $new_user_count . '] (' . lang_get( '1_week_title' ) . ')"';
  137. } else {
  138. $t_title = '';
  139. }
  140. if ( $t_prefix === $f_filter ) {
  141. $c_filter = $f_filter;
  142. echo '<span class="current-filter">' . $t_caption . '</span>';
  143. } else {
  144. echo '<a' . $t_title . ' href="manage_user_page.php?sort=' . $c_sort . '&amp;dir=' . $c_dir . '&amp;save=1' . $t_hide_filter . '&amp;filter=' . $t_prefix . '">' . $t_caption . '</a>';
  145. }
  146. echo '</li>';
  147. }
  148. echo '</ul>';
  149. echo '</div>';
  150. $t_where_params = null;
  151. if ( $f_filter === 'ALL' ) {
  152. $t_where = '(1 = 1)';
  153. } else if ( $f_filter === 'UNUSED' ) {
  154. $t_where = '(login_count = 0) AND ( date_created = last_visit )';
  155. } else if ( $f_filter === 'NEW' ) {
  156. $t_where = db_helper_compare_days("" . db_now() . "","date_created","<= $days_old");
  157. } else {
  158. $c_prefix = db_prepare_string($f_filter);
  159. $t_where = "(username like '$c_prefix%')";
  160. }
  161. $p_per_page = 50;
  162. $t_offset = ( ( $f_page_number - 1 ) * $p_per_page );
  163. $total_user_count = 0;
  164. # Get the user data in $c_sort order
  165. $result = '';
  166. if ( 0 == $c_hide ) {
  167. $query = "SELECT count(*) as usercnt
  168. FROM $t_user_table
  169. WHERE $t_where";
  170. $result = db_query_bound($query, $t_where_params);
  171. $row = db_fetch_array( $result );
  172. $total_user_count = $row['usercnt'];
  173. } else {
  174. $query = "SELECT count(*) as usercnt
  175. FROM $t_user_table
  176. WHERE $t_where AND " . db_helper_compare_days("" . db_now() . "","last_visit","< $days_old");
  177. $result = db_query_bound($query, $t_where_params);
  178. $row = db_fetch_array( $result );
  179. $total_user_count = $row['usercnt'];
  180. }
  181. $t_page_count = ceil($total_user_count / $p_per_page);
  182. if ( $t_page_count < 1 ) {
  183. $t_page_count = 1;
  184. }
  185. # Make sure $p_page_number isn't past the last page.
  186. if ( $f_page_number > $t_page_count ) {
  187. $f_page_number = $t_page_count;
  188. }
  189. # Make sure $p_page_number isn't before the first page
  190. if ( $f_page_number < 1 ) {
  191. $f_page_number = 1;
  192. }
  193. if ( 0 == $c_hide ) {
  194. $query = "SELECT *
  195. FROM $t_user_table
  196. WHERE $t_where
  197. ORDER BY $c_sort $c_dir";
  198. $result = db_query_bound($query, $t_where_params, $p_per_page, $t_offset);
  199. } else {
  200. $query = "SELECT *
  201. FROM $t_user_table
  202. WHERE $t_where AND " . db_helper_compare_days( "" . db_now() . "", "last_visit", "< $days_old" ) . "
  203. ORDER BY $c_sort $c_dir";
  204. $result = db_query_bound($query, $t_where_params, $p_per_page, $t_offset );
  205. }
  206. $user_count = db_num_rows( $result );
  207. ?>
  208. <div id="manage-user-div" class="form-container">
  209. <h2><?php echo lang_get( 'manage_accounts_title' ) ?></h2> [<?php echo $total_user_count ?>]
  210. <?php print_button( 'manage_user_create_page.php', lang_get( 'create_new_account_link' ) ) ?>
  211. <?php if ( $f_filter === 'UNUSED' ) echo print_button( 'manage_user_prune.php', lang_get( 'prune_accounts' ) ); ?>
  212. <form id="manage-user-filter" method="post" action="manage_user_page.php">
  213. <fieldset>
  214. <?php # CSRF protection not required here - form does not result in modifications ?>
  215. <input type="hidden" name="sort" value="<?php echo $c_sort ?>" />
  216. <input type="hidden" name="dir" value="<?php echo $c_dir ?>" />
  217. <input type="hidden" name="save" value="1" />
  218. <input type="hidden" name="filter" value="<?php echo $c_filter ?>" />
  219. <input type="checkbox" name="hide" value="1" <?php check_checked( $c_hide, 1 ); ?> /> <?php echo lang_get( 'hide_inactive' ) ?>
  220. <input type="submit" class="button" value="<?php echo lang_get( 'filter_button' ) ?>" />
  221. </fieldset>
  222. </form>
  223. <table cellspacing="1" cellpadding="5" border="1">
  224. <tr class="row-category">
  225. <td><?php
  226. print_manage_user_sort_link( 'manage_user_page.php', lang_get( 'username' ), 'username', $c_dir, $c_sort, $c_hide, $c_filter );
  227. print_sort_icon( $c_dir, $c_sort, 'username' ); ?>
  228. </td>
  229. <td><?php
  230. print_manage_user_sort_link( 'manage_user_page.php', lang_get( 'realname' ), 'realname', $c_dir, $c_sort, $c_hide, $c_filter );
  231. print_sort_icon( $c_dir, $c_sort, 'realname' ); ?>
  232. </td>
  233. <td><?php
  234. print_manage_user_sort_link( 'manage_user_page.php', lang_get( 'email' ), 'email', $c_dir, $c_sort, $c_hide, $c_filter );
  235. print_sort_icon( $c_dir, $c_sort, 'email' ); ?>
  236. </td>
  237. <td><?php
  238. print_manage_user_sort_link( 'manage_user_page.php', lang_get( 'access_level' ), 'access_level', $c_dir, $c_sort, $c_hide, $c_filter );
  239. print_sort_icon( $c_dir, $c_sort, 'access_level' ); ?>
  240. </td>
  241. <td><?php
  242. print_manage_user_sort_link( 'manage_user_page.php', lang_get( 'enabled' ), 'enabled', $c_dir, $c_sort, $c_hide, $c_filter );
  243. print_sort_icon( $c_dir, $c_sort, 'enabled' ); ?>
  244. </td>
  245. <td><?php
  246. print_manage_user_sort_link( 'manage_user_page.php', $t_lock_image, 'protected', $c_dir, $c_sort, $c_hide, $c_filter );
  247. print_sort_icon( $c_dir, $c_sort, 'protected' ); ?>
  248. </td>
  249. <td><?php
  250. print_manage_user_sort_link( 'manage_user_page.php', lang_get( 'date_created' ), 'date_created', $c_dir, $c_sort, $c_hide, $c_filter );
  251. print_sort_icon( $c_dir, $c_sort, 'date_created' ); ?>
  252. </td>
  253. <td><?php
  254. print_manage_user_sort_link( 'manage_user_page.php', lang_get( 'last_visit' ), 'last_visit', $c_dir, $c_sort, $c_hide, $c_filter );
  255. print_sort_icon( $c_dir, $c_sort, 'last_visit' ); ?>
  256. </td>
  257. </tr><?php
  258. $t_date_format = config_get( 'normal_date_format' );
  259. $t_access_level = Array();
  260. for ($i=0;$i<$user_count;$i++) {
  261. # prefix user data with u_
  262. $row = db_fetch_array($result);
  263. extract( $row, EXTR_PREFIX_ALL, 'u' );
  264. $u_date_created = date( $t_date_format, $u_date_created );
  265. $u_last_visit = date( $t_date_format, $u_last_visit );
  266. if( !isset( $t_access_level[$u_access_level] ) ) {
  267. $t_access_level[$u_access_level] = get_enum_element( 'access_levels', $u_access_level );
  268. } ?>
  269. <tr <?php echo helper_alternate_class( $i ) ?>>
  270. <td><?php
  271. if ( access_has_global_level( $u_access_level ) ) { ?>
  272. <a href="manage_user_edit_page.php?user_id=<?php echo $u_id ?>"><?php echo string_display_line( $u_username ) ?></a><?php
  273. } else {
  274. echo string_display_line( $u_username );
  275. } ?>
  276. </td>
  277. <td><?php echo string_display_line( $u_realname ) ?></td>
  278. <td><?php print_email_link( $u_email, $u_email ) ?></td>
  279. <td><?php echo $t_access_level[$u_access_level] ?></td>
  280. <td><?php echo trans_bool( $u_enabled ) ?></td>
  281. <td class="center"><?php
  282. if ( $u_protected ) {
  283. echo " $t_lock_image";
  284. } else {
  285. echo '&#160;';
  286. } ?>
  287. </td>
  288. <td><?php echo $u_date_created ?></td>
  289. <td><?php echo $u_last_visit ?></td>
  290. </tr><?php
  291. } # end for ?>
  292. </table>
  293. <div class="pager-links">
  294. <?php
  295. /* @todo hack - pass in the hide inactive filter via cheating the actual filter value */
  296. print_page_links( 'manage_user_page.php', 1, $t_page_count, (int)$f_page_number, $c_filter . $t_hide_filter . "&amp;sort=$c_sort&amp;dir=$c_dir");
  297. ?>
  298. </div>
  299. </div>
  300. <?php
  301. # Manage Form END
  302. helper_alternate_class_no_attribute(0);
  303. ?>
  304. <div id="manage-user-edit-div" class="form-container">
  305. <form id="manage-user-edit-form" method="get" action="manage_user_edit_page.php"<?php # CSRF protection not required here - form does not result in modifications ?>>
  306. <fieldset>
  307. <div class="field-container <?php echo helper_alternate_class_no_attribute(); ?>">
  308. <label for="username"><span><?php echo lang_get( 'username' ) ?></span></label>
  309. <span class="input"><input id="username" type="text" name="username" value="" /></span>
  310. <span class="label-style"></span>
  311. </div>
  312. <span class="submit-button"><input type="submit" class="button" value="<?php echo lang_get( 'manage_user' ) ?>" /></span>
  313. </fieldset>
  314. </form>
  315. </div>
  316. <?php
  317. html_page_bottom();