Index: bug_view_advanced_page.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/bug_view_advanced_page.php,v
retrieving revision 1.50
diff -u -r1.50 bug_view_advanced_page.php
--- bug_view_advanced_page.php 5 Feb 2004 12:45:19 -0000 1.50
+++ bug_view_advanced_page.php 26 May 2004 18:12:52 -0000
@@ -17,6 +17,7 @@
require_once( $t_core_path.'bug_api.php' );
require_once( $t_core_path.'custom_field_api.php' );
require_once( $t_core_path.'file_api.php' );
+ require_once( $t_core_path.'group_api.php');
require_once( $t_core_path.'compress_api.php' );
require_once( $t_core_path.'date_api.php' );
require_once( $t_core_path.'relationship_api.php' );
@@ -502,6 +503,98 @@
# User list monitoring the bug
include( $t_mantis_dir . 'bug_monitor_list_view_inc.php' );
+
+
+?>
+
+
+
+
+
+
';
print_bracket_link( $t_manage_user_page, lang_get( 'manage_users_link' ) );
+ print_bracket_link( $t_manage_group_page, lang_get( 'manage_groups_link' ) );
print_bracket_link( $t_manage_project_menu_page, lang_get( 'manage_projects_link' ) );
print_bracket_link( $t_manage_custom_field_page, lang_get( 'manage_custom_field_link' ) );
print_bracket_link( $t_documentation_page, lang_get( 'documentation_link' ) );
Index: core/print_api.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/core/print_api.php,v
retrieving revision 1.72
diff -u -r1.72 print_api.php
--- core/print_api.php 5 Feb 2004 01:17:13 -0000 1.72
+++ core/print_api.php 26 May 2004 18:12:54 -0000
@@ -697,6 +697,117 @@
PRINT $t_project_name.' ['.$t_access_level.'] ('.$t_view_state.') [
'. lang_get( 'remove_link' ).']
';
}
}
+
+
+ # --------------------
+ # list of users that are NOT in the specified group and that are enabled
+ function print_group_user_list_option_list( $p_group_id=null ) {
+ global $g_mantis_group_user_list_table, $g_mantis_user_table;
+
+ if ( null == $p_group_id ) {
+ return;
+ }
+ $c_group_id = (integer)$p_group_id;
+
+ $t_adm = ADMINISTRATOR;
+ $query = "SELECT DISTINCT u.id, u.username
+ FROM $g_mantis_user_table u
+ LEFT JOIN $g_mantis_group_user_list_table g
+ ON g.user_id=u.id AND g.group_id='$c_group_id'
+ WHERE u.access_level<$t_adm AND
+ u.enabled = 1 AND
+ g.user_id IS NULL AND
+ u.access_level<'$t_adm'
+ ORDER BY u.username";
+ $result = db_query( $query );
+ $category_count = db_num_rows( $result );
+ for ($i=0;$i<$category_count;$i++) {
+ $row = db_fetch_array( $result );
+ $t_username = $row['username'];
+ $t_user_id = $row['id'];
+ PRINT "
";
+ }
+ }
+
+ # --------------------
+ # list of groups that a user is NOT in
+ function print_group_user_list_option_list2( $p_user_id ) {
+ global $g_mantis_group_user_list_table, $g_mantis_group_table;
+
+ $c_user_id = db_prepare_int( $p_user_id );
+
+ $query = "SELECT DISTINCT g.id, g.groupname
+ FROM $g_mantis_group_table g
+ LEFT JOIN $g_mantis_group_user_list_table u
+ ON g.id=u.group_id AND u.user_id='$c_user_id'
+ WHERE g.enabled=1 AND
+ u.user_id IS NULL
+ ORDER BY g.groupname";
+ $result = db_query( $query );
+ $category_count = db_num_rows( $result );
+ for ($i=0;$i<$category_count;$i++) {
+ $row = db_fetch_array( $result );
+ $t_group_name = $row['groupname'];
+ $t_user_id = $row['id'];
+ PRINT "
";
+ }
+ }
+ # --------------------
+ # list of groups that a user is NOT in
+ function print_group_user_list( $p_user_id ) {
+ global $g_mantis_group_user_list_table, $g_mantis_group_table;
+
+ $c_user_id = db_prepare_int( $p_user_id );
+
+ $query = "SELECT DISTINCT g.id, g.groupname
+ FROM $g_mantis_group_table g
+ LEFT JOIN $g_mantis_group_user_list_table u
+ ON g.id=u.group_id
+ WHERE g.enabled=1 AND
+ u.user_id='$c_user_id'
+ ORDER BY g.groupname";
+ $result = db_query( $query );
+ $category_count = db_num_rows( $result );
+ for ($i=0;$i<$category_count;$i++) {
+ $row = db_fetch_array( $result );
+ $t_group_id = $row['id'];
+ $t_group_name = $row['groupname'];
+ PRINT $t_group_name.' ['.$t_access_level.'] ('.$t_view_state.') [
'. lang_get( 'remove_link' ).']
';
+ }
+ }
+
+
+ # --------------------
+ # list of users that are NOT in the specified group and that are enabled
+ function print_bug_group_list_option_list( $p_bug_id=null ) {
+ global $g_mantis_bug_group_list_table, $g_mantis_group_table;
+
+ if ( null == $p_bug_id ) {
+ return;
+ }
+ $c_bug_id = (integer)$p_bug_id;
+
+ $t_adm = ADMINISTRATOR;
+ $query = "SELECT DISTINCT u.id, u.groupname
+ FROM $g_mantis_group_table u
+ LEFT JOIN $g_mantis_bug_group_list_table g
+ ON g.group_id=u.id AND g.bug_id='$c_bug_id'
+ WHERE u.access_level<$t_adm AND
+ u.enabled = 1 AND
+ g.group_id IS NULL AND
+ u.access_level<'$t_adm'
+ ORDER BY u.groupname";
+ $result = db_query( $query );
+ $category_count = db_num_rows( $result );
+ for ($i=0;$i<$category_count;$i++) {
+ $row = db_fetch_array( $result );
+ $t_groupname = $row['groupname'];
+ $t_group_id = $row['id'];
+ PRINT "
";
+ }
+ }
+
+
# --------------------
###########################################################################
Index: lang/strings_english.txt
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/lang/strings_english.txt,v
retrieving revision 1.154
diff -u -r1.154 strings_english.txt
--- lang/strings_english.txt 22 Feb 2004 04:26:48 -0000 1.154
+++ lang/strings_english.txt 26 May 2004 18:12:55 -0000
@@ -203,6 +203,9 @@
$MANTIS_ERROR[ERROR_VERSION_NOT_FOUND] = 'Version not found.';
$MANTIS_ERROR[ERROR_USER_NAME_INVALID] = 'The username is invalid. Usernames may only contain letters, numbers, spaces, hyphens, and underscores.';
$MANTIS_ERROR[ERROR_USER_DOES_NOT_HAVE_REQ_ACCESS] = 'User does not have required access level';
+$MANTIS_ERROR[ERROR_GROUP_NAME_INVALID] = 'ERROR: The groupname is invalid.';
+$MANTIS_ERROR[ERROR_GROUP_NOT_FOUND] = 'ERROR: The group was not found.';
+$MANTIS_ERROR[ERROR_GROUP_NAME_NOT_UNIQUE] = 'ERROR: The groupname is not unique.';
$s_login_error = 'ERROR: your account may be disabled or the username/password you entered is incorrect.';
$s_login_cookies_disabled = 'ERROR: Your browser either doesn\'t know how to handle cookies, or refuses to handle them.';
@@ -532,6 +535,24 @@
$s_last_visit = 'Last Visit';
$s_edit_user_link = 'Edit User';
+# manage_group_page.php
+$s_manage_groups_link = 'Manage Groups';
+$s_manage_groups_title = 'Manage Groups';
+$s_new_groups_title = 'New Groups';
+$s_create_new_group_link = 'Create New Group';
+$s_groupname = 'Groupname';
+$s_update_group_button = 'Update Group';
+$s_group_level = 'Group Level';
+
+# manage_group_create_page.php
+$s_create_new_group_title = 'Create New Group';
+$s_create_group_button = 'Create Group';
+$s_group_add_user_title = 'Add User to Group';
+
+# manage_create_new_group.php
+$s_created_group_part1 = 'Created group';
+$s_created_group_part2 = 'with an access level of';
+
# manage_proj_add.php
$s_project_added_msg = 'Project has been successfully added...';
@@ -634,6 +655,14 @@
$s_manage_user_protected_msg = 'Account protected. Access level and enabled protected. Otherwise, account has been updated...';
$s_manage_user_updated_msg = 'Account successfully updated...';
+# manage_group_page.php
+$s_edit_group_title = 'Edit Group';
+$s_delete_group_button = 'Delete Group';
+
+# manage_group_update.php
+$s_manage_group_protected_msg = 'Group protected. Access level and enabled protected. Otherwise, account has been updated...';
+$s_manage_group_updated_msg = 'Group successfully updated...';
+
# menu_inc.php
$s_main_link = 'Main';
$s_view_bugs_link = 'View Bugs';
@@ -724,6 +753,12 @@
# proj_user_update.php
$s_updated_user_msg = 'Successfully updated user';
+# bug_group_add
+$s_bug_add_group_title = 'Add Group to View List';
+$s_bug_group_list_title = 'Group View List';
+$s_add_group_button = 'Add Group';
+$s_manage_view_list_title = 'Manage View List';
+
# report_add.php
$s_must_enter_category = 'You must select a category';
$s_must_enter_severity = 'You must select a severity';
Index: bug_group_add.php
===================================================================
RCS file: bug_group_add.php
diff -N bug_group_add.php
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ bug_group_add.php 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,25 @@
+
+
+
Index: bug_group_remove.php
===================================================================
RCS file: bug_group_remove.php
diff -N bug_group_remove.php
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ bug_group_remove.php 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,22 @@
+
+
+
Index: manage_group_create.php
===================================================================
RCS file: manage_group_create.php
diff -N manage_group_create.php
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ manage_group_create.php 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+' . $f_groupname . ' ' . lang_get( 'created_group_part2' ) . ' ' . $t_access_level . '
';
+
+ print_bracket_link( $t_redirect_url, lang_get( 'proceed' ) );
+?>
+
+
+
Index: manage_group_create_page.php
===================================================================
RCS file: manage_group_create_page.php
diff -N manage_group_create_page.php
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ manage_group_create_page.php 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
Index: manage_group_edit_page.php
===================================================================
RCS file: manage_group_edit_page.php
diff -N manage_group_edit_page.php
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ manage_group_edit_page.php 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,187 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+ |
+
+
+ |
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ >
+ |
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+
+
Index: manage_group_page.php
===================================================================
RCS file: manage_group_page.php
diff -N manage_group_page.php
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ manage_group_page.php 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,173 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+ () []
+ |
+
+>
+ |
+
+ |
+
+
+
+
+
+
+
+
+
+
+ |
+ []
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+ |
+
+
+
+ |
+
+
+
+ |
+
+
+
+ |
+
+
+>
+ |
+
+ |
+ |
+ |
+ |
+ |
+
+
+
+
+
+
Index: manage_group_update.php
===================================================================
RCS file: manage_group_update.php
diff -N manage_group_update.php
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ manage_group_update.php 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+';
+ } else if ( $result ) { # SUCCESS
+ echo lang_get( 'operation_successful' ) . '
';
+ } else { # FAILURE
+ print_sql_error( $query );
+ }
+
+ print_bracket_link( $t_redirect_url, lang_get( 'proceed' ) );
+?>
+
+
+
Index: manage_group_user_add.php
===================================================================
RCS file: manage_group_user_add.php
diff -N manage_group_user_add.php
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ manage_group_user_add.php 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,25 @@
+
+
+
Index: manage_group_user_remove.php
===================================================================
RCS file: manage_group_user_remove.php
diff -N manage_group_user_remove.php
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ manage_group_user_remove.php 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,27 @@
+
+
+
Index: core/group_api.php
===================================================================
RCS file: core/group_api.php
diff -N core/group_api.php
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ core/group_api.php 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,606 @@
+ 0 ) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ # --------------------
+ # Check if the groupname is unique and trigger an ERROR if it isn't
+ function group_ensure_name_unique( $p_groupname ) {
+ if ( ! group_is_name_unique( $p_groupname ) ) {
+ trigger_error( ERROR_USER_NAME_NOT_UNIQUE, ERROR );
+ }
+ }
+
+ # --------------------
+ # Check if the groupname is a valid username (does not account for uniqueness)
+ # Return true if it is, false otherwise
+ function group_is_name_valid( $p_groupname ) {
+ # The DB field is only 32 characters
+ if ( strlen( $p_groupname ) > 32 ) {
+ return false;
+ }
+
+ # Only allow a basic set of characters
+ if ( 0 == preg_match( '/^\w+$/', $p_groupname ) ) {
+ return false;
+ }
+
+ # We have a valid groupname
+ return true;
+ }
+
+ # --------------------
+ # Check if the groupname is a valid groupname (does not account for uniqueness)
+ # Trigger an error if the username is not valid
+ function group_ensure_name_valid( $p_groupname ) {
+ if ( ! group_is_name_valid( $p_groupname ) ) {
+ trigger_error( ERROR_USER_NAME_INVALID, ERROR );
+ }
+ }
+
+ # --------------------
+ # return whether user is monitoring bug for the user id and bug id
+ # -- NOT IMPLEMENTED YET --- dwoods
+ /*
+ function group_is_monitoring_bug( $p_group_id, $p_bug_id ) {
+ $c_group_id = db_prepare_int( $p_group_id );
+ $c_bug_id = db_prepare_int( $p_bug_id );
+
+ $t_bug_monitor_table = config_get( 'mantis_bug_monitor_table' );
+
+ $query = "SELECT COUNT(*)
+ FROM $t_bug_monitor_table
+ WHERE user_id='$c_group_id' AND bug_id='$c_bug_id'";
+
+ $result = db_query( $query );
+
+ if ( 0 == db_result( $result ) ) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ */
+
+ # --------------------
+ # return true if the user has access of ADMINISTRATOR or higher, false otherwise
+ # --- NOT IMPLEMENTED YET --- dwoods
+ /*
+ function group_is_development( $p_group_id ) {
+ $t_access_level = user_get_field( $p_group_id, 'access_level' );
+
+ if ( $t_access_level >= DEVELOPER ) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ */
+
+ # --------------------
+ # return true is the group account is protected, false otherwise
+ function group_is_protected( $p_group_id ) {
+ return ( ON == group_get_field( $p_group_id, 'protected' ) );
+ }
+
+ # --------------------
+ # Trigger an ERROR if the group is protected
+ function group_ensure_unprotected( $p_group_id ) {
+ if ( group_is_protected( $p_group_id ) ) {
+ trigger_error( ERROR_PROTECTED_ACCOUNT, ERROR );
+ }
+ }
+
+ # --------------------
+ # return true is the group is enabled, false otherwise
+ function group_is_enabled( $p_group_id ) {
+ return ( ON == group_get_field( $p_group_id, 'enabled' ) );
+ }
+
+ #===================================
+ # Creation / Deletion / Updating
+ #===================================
+
+ # --------------------
+ # Create a user.
+ # returns false if error, the generated cookie string if ok
+ function group_create( $p_groupname, $p_access_level=null, $p_protected=false, $p_enabled=true ) {
+ if ( null === $p_access_level ) {
+ $p_access_level = config_get( 'default_new_group_access_level');
+ }
+
+ $c_groupname = db_prepare_string( $p_groupname );
+ $c_access_level = db_prepare_int( $p_access_level );
+ $c_protected = db_prepare_bool( $p_protected );
+ $c_enabled = db_prepare_bool( $p_enabled );
+
+ group_ensure_name_valid( $p_groupname );
+ group_ensure_name_unique( $p_groupname );
+
+ $t_seed = $p_username;
+ $t_cookie_string = auth_generate_unique_cookie_string( $t_seed );
+
+ $t_group_table = config_get( 'mantis_group_table' );
+
+ $query = "INSERT INTO $t_group_table
+ ( id, groupname, date_created, enabled, protected,
+ access_level, cookie_string )
+ VALUES
+ ( null, '$c_groupname', NOW(), $c_enabled, $c_protected,
+ $c_access_level, '$t_cookie_string')";
+ db_query( $query );
+
+ return $t_cookie_string;
+ }
+
+ # --------------------
+ # delete agroup
+ # returns true when the account was successfully deleted
+ function group_delete( $p_group_id ) {
+ $c_group_id = db_prepare_int($p_group_id);
+
+ group_ensure_unprotected( $p_group_id );
+
+ $t_group_table = config_get('mantis_group_table');
+ $t_group_user_list_table = config_get('mantis_group_user_list_table');
+
+ # Remove account
+ $query = "DELETE
+ FROM $t_group_table
+ WHERE id='$c_group_id'";
+ db_query( $query );
+
+ $query = "DELETE
+ FROM $t_group_user_list_table
+ WHERE group_id='$c_group_id'";
+ db_query( $query );
+
+ group_clear_cache( $p_group_id );
+
+ return true;
+ }
+
+ #===================================
+ # Data Access
+ #===================================
+
+ # --------------------
+ # get a group id from a groupname
+ # return false if the groupname does not exist
+ function group_get_id_by_name( $p_groupname ) {
+ $c_groupname = db_prepare_string( $p_groupname );
+
+ $t_group_table = config_get( 'mantis_group_table' );
+
+ $query = "SELECT id
+ FROM $t_group_table
+ WHERE groupname='$c_groupname'";
+ $result = db_query( $query );
+
+ if ( 0 == db_num_rows( $result ) ) {
+ return false;
+ } else {
+ return db_result( $result );
+ }
+ }
+
+ # --------------------
+ # return all data associated with a particular group name
+ # return false if the groupname does not exist
+ function group_get_row_by_name( $p_groupname ) {
+ $t_group_id = group_get_id_by_name( $p_groupname );
+
+ if ( false === $t_group_id ) {
+ return false;
+ }
+
+ $row = group_get_row( $t_group_id );
+
+ return $row;
+ }
+
+ # --------------------
+ # return a group row
+ function group_get_row( $p_group_id ) {
+ return group_cache_row( $p_group_id );
+ }
+
+ # --------------------
+ # return the specified group field for the group id
+ function group_get_field( $p_group_id, $p_field_name ) {
+ if ( NO_GROUP == $p_group_id ) {
+ trigger_error( 'group_get_field() for NO_GROUP', WARNING );
+ return "@null@";
+ }
+
+ $row = group_get_row( $p_group_id );
+
+ if ( isset( $row[$p_field_name] ) ) {
+ return $row[$p_field_name];
+ } else {
+ trigger_error( ERROR_DB_FIELD_NOT_FOUND, WARNING );
+ return '';
+ }
+ }
+
+ # --------------------
+ # return the groupname or a string saying "group no longer exists"
+ # if the group does not exist
+ function group_get_name( $p_group_id ) {
+ $row = group_cache_row( $p_group_id, false );
+
+ if ( false == $row ) {
+ return lang_get( 'prefix_for_deleted_groups' ) . (integer)$p_group_id;
+ } else {
+ return $row['groupname'];
+ }
+ }
+
+ # --------------------
+ # return the groups's access level
+ function group_get_access_level( $p_group_id ) {
+ $t_access_level = group_get_field( $p_group_id, 'access_level' );
+
+ return $t_access_level;
+ }
+
+ # --------------------
+ # check to see if the user/group combo already exists
+ # returns true is duplicate is found, otherwise false
+ function group_includes_user( $p_group_id, $p_user_id ) {
+ $t_group_user_list_table = config_get( 'mantis_group_user_list_table' );
+
+ $c_group_id = db_prepare_int( $p_group_id );
+ $c_user_id = db_prepare_int( $p_user_id );
+
+ $query = "SELECT COUNT(*)
+ FROM $t_group_user_list_table
+ WHERE group_id='$c_group_id' AND
+ user_id='$c_user_id'";
+ $result = db_query( $query );
+
+ if ( 0 == db_result( $result ) ) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ # --------------------
+ # Return an array of info about users who are part of the given group
+ # For each user we have 'id', 'username', and 'access_level' (overall access level)
+ # If the second parameter is given, return only users with an access level
+ # higher than the given value.
+ function group_get_all_user_rows( $p_group_id, $p_access_level=ANYBODY ) {
+ $c_group_id = db_prepare_int( $p_group_id );
+
+ # Optimization when access_level is NOBODY
+ if ( NOBODY == $p_access_level ) {
+ return array();
+ }
+
+ $t_user_table = config_get( 'mantis_user_table' );
+ $t_group_user_list_table = config_get( 'mantis_group_user_list_table' );
+
+ $t_on = ON;
+
+ $t_access_level = $p_access_level;
+
+ $t_access_clause = '';
+
+ if ( $t_access_level > 0 ) {
+ $t_access_clause = ' AND access_level >= ' . $t_access_level;
+ }
+
+ $t_users = array();
+
+ $query = "SELECT id, username, access_level
+ FROM $t_user_table
+ WHERE enabled = $t_on
+ $t_access_clause
+ ORDER BY username";
+
+ $result = db_query( $query );
+ $t_row_count = db_num_rows( $result );
+ for ( $i=0 ; $i < $t_row_count ; $i++ ) {
+ $row = db_fetch_array( $result );
+ $t_users[$row['id']] = $row;
+ }
+
+ $query = "SELECT u.id, u.username
+ FROM $t_group_user_list_table l, $t_user_table u
+ WHERE l.user_id = u.id
+ AND u.enabled = $t_on
+ AND l.group_id = $c_group_id
+ ORDER BY u.username";
+
+ $result = db_query( $query );
+ $t_row_count = db_num_rows( $result );
+ for ( $i=0 ; $i < $t_row_count ; $i++ ) {
+ $row = db_fetch_array( $result );
+ $f_access_level = $t_users[$row['id']]['access_level'];
+ if ( $f_access_level >= $p_access_level ) {
+ $t_users[$row['id']] = $row;
+ $t_users[$row['id']]['access_level'] = $f_access_level;
+ } else {
+ # If user's overridden level is lower than required, so remove
+ # them from the list if they were previously there
+ unset( $t_users[$row['id']] );
+ }
+ }
+
+ return multi_sort( array_values($t_users), 'username' );
+ }
+
+ # --------------------
+ # Return an array of user_id's that belong to the given group, if their access
+ # level is above the access given.
+ function group_get_users( $p_group_id, $p_access_level=ANYBODY ) {
+ $c_group_id = db_prepare_int( $p_group_id );
+
+ # Optimization when access_level is NOBODY
+ if ( NOBODY == $p_access_level ) {
+ return array();
+ }
+
+ $t_user_table = config_get( 'mantis_user_table' );
+ $t_group_user_list_table = config_get( 'mantis_group_user_list_table' );
+
+ $t_on = ON;
+
+ $t_access_level = $p_access_level;
+
+ $t_access_clause = '';
+
+ if ( $t_access_level > 0 ) {
+ $t_access_clause = ' AND access_level >= ' . $t_access_level;
+ }
+
+ $t_users = array();
+
+ // Get the project overrides
+ $query = "SELECT u.id, u.username
+ FROM $t_group_user_list_table l, $t_user_table u
+ WHERE l.user_id = u.id
+ AND u.enabled = $t_on
+ AND l.group_id = $c_group_id
+ ORDER BY u.username";
+
+ $result = db_query( $query );
+ $t_row_count = db_num_rows( $result );
+ for ( $i=0 ; $i < $t_row_count ; $i++ ) {
+ $row = db_fetch_array( $result );
+
+ if ( $f_access_level >= $p_access_level ) {
+ $t_users[$row['id']] = $row;
+ array_push( $t_users, $row['id'] );
+ }
+ }
+
+ return $t_users;
+ }
+
+
+ #===================================
+ # Data Modification
+ #===================================
+
+ # --------------------
+ # add user to a group
+ function group_add_user( $p_group_id, $p_user_id ) {
+ $t_group_user_list_table = config_get( 'mantis_group_user_list_table' );
+
+ $c_group_id = db_prepare_int( $p_group_id );
+ $c_user_id = db_prepare_int( $p_user_id );
+
+ $query = "INSERT
+ INTO $t_group_user_list_table
+ ( group_id, user_id )
+ VALUES
+ ( '$c_group_id', '$c_user_id' )";
+
+ db_query( $query );
+
+ # db_query errors on failure so:
+ return true;
+ }
+
+ # --------------------
+ # remove user from group
+ function group_remove_user( $p_group_id, $p_user_id ) {
+ $t_group_user_list_table = config_get( 'mantis_group_user_list_table' );
+
+ $c_group_id = db_prepare_int( $p_group_id );
+ $c_user_id = db_prepare_int( $p_user_id );
+
+ $query = "DELETE FROM $t_group_user_list_table
+ WHERE group_id='$c_group_id' AND
+ user_id='$c_user_id'";
+
+ db_query( $query );
+
+ # db_query errors on failure so:
+ return true;
+ }
+
+ # --------------------
+ # delete all users from the group user list for a given group
+ # this is useful when deleting a group
+ function group_remove_all_users( $p_group_id ) {
+ $t_group_user_list_table = config_get( 'mantis_group_user_list_table' );
+
+ $c_group_id = db_prepare_int( $p_group_id );
+
+ $query = "DELETE FROM $t_group_user_list_table
+ WHERE group_id='$c_group_id'";
+
+ db_query( $query );
+
+ # db_query errors on failure so:
+ return true;
+ }
+
+ # --------------------
+ # Set a group field
+ function group_set_field( $p_group_id, $p_field_name, $p_field_value ) {
+ $c_group_id = db_prepare_int( $p_group_id );
+ $c_field_name = db_prepare_string( $p_field_name );
+ $c_field_value = db_prepare_string( $p_field_value );
+
+ group_ensure_unprotected( $p_group_id );
+
+ $t_group_table = config_get( 'mantis_group_table' );
+
+ $query = "UPDATE $t_group_table
+ SET $c_field_name='$c_field_value'
+ WHERE id='$c_group_id'";
+
+ db_query( $query );
+
+ group_clear_cache( $p_group_id );
+
+ #db_query() errors on failure so:
+ return true;
+ }
+
+ # --------------------
+ #
+
+ # --------------------
+ # Set the user's groupname to the given string after checking that it is valid
+ function group_set_name( $p_group_id, $p_groupname ) {
+ group_ensure_name_valid( $p_groupname );
+ group_ensure_name_unique( $p_groupname );
+
+ return group_set_field( $p_group_id, 'groupname', $p_groupname );
+ }
+
+
+?>