= ADMINISTRATOR) { continue; } # Decide if this user is a manager. Collect all Project IDs for # which they are a manager $t_manage_ids = array(); if ($t_user['access_level'] >= MANAGER) { $t_manage_ids = $t_project_ids; } else { $t_proj_user_list = config_get( 'mantis_project_user_list_table' ); $query = "SELECT DISTINCT project_id FROM $t_proj_user_list WHERE " . "user_id = " . $t_user['id'] . " AND " . "access_level > " . MANAGER; $result = db_query( $query ); $count = db_num_rows( $result ); for ( $i = 0; $i < $count; $i++ ) { $row = db_fetch_array( $result ); $t_manage_ids[] = (int)$row['project_id']; } } user_nag_message($t_user, $t_project_ids, $t_manage_ids); } ############################################################################## # F U N C T I O N S ############################################################################## # Return all info on all users function user_get_all_rows() { $t_user_table = config_get( 'mantis_user_table' ); $query = "SELECT * FROM $t_user_table WHERE enabled = 1"; $result = db_query( $query ); $count = db_num_rows( $result ); for ( $i = 0; $i < $count; $i++ ) { $row = db_fetch_array( $result ); $t_users[(int)$row['id']] = $row; } return $t_users; } # user_get_all_rows # Given a user, look through all issues in enabled projects # for three lists: # # 1. Issues owned (Handled By) this user, which need to # be resolved. # # 2. Issues reported by this user which have been resolved. # The user needs to close these issues. # # 3. If the user is a manager for any project, look for # unassigned new issues. Remind manager to find # an owner for these. # function user_nag_message( $p_user, $p_proj_ids, $p_manage_ids ) { global $g_all_projects; global $g_debug; $open_count = 0; $resolved_count = 0; $new_count = 0; echo "Checking issues for " . $p_user['realname'] . "\n"; $t_bug_table = config_get( 'mantis_bug_table' ); # Open issues which need to be resolved $query = "SELECT id, summary " . "FROM $t_bug_table WHERE status < " . RESOLVED . " AND " . "handler_id = " . $p_user['id'] . " AND " . "project_id in (" . implode(",", $p_proj_ids) . ") " . "ORDER BY priority DESC, id"; $result = db_query( $query ); $open_count = db_num_rows( $result ); for ( $i = 0; $i< $open_count; $i++ ) { $row = db_fetch_array( $result ); $t_open[(int)$row['id']] = $row; if ($g_debug) { echo " Open issue " . $row['id'] . "\n"; } } # Resolved issues which need to be closed $query = "SELECT id, summary " . "FROM $t_bug_table WHERE status IN (" . RESOLVED . ") AND " . "reporter_id = " . $p_user['id'] . " AND " . "project_id in (" . implode(",", $p_proj_ids) . ") " . "ORDER BY priority DESC, id"; $result = db_query( $query ); $resolved_count = db_num_rows( $result ); for ( $i = 0; $i< $resolved_count; $i++ ) { $row = db_fetch_array( $result ); $t_resolved[(int)$row['id']] = $row; if ($g_debug) { echo " Resolved issue " . $row['id'] . "\n"; } } # New issues which need to be assigned if (count($p_manage_ids) > 0) { $query = "SELECT id, summary " . "FROM $t_bug_table WHERE status IN (" . NEW_ . ") AND " . "project_id in (" . implode(",", $p_manage_ids) . ") " . "ORDER BY priority DESC, id"; $result = db_query( $query ); $new_count = db_num_rows( $result ); for ( $i = 0; $i< $new_count; $i++ ) { $row = db_fetch_array( $result ); $t_new[(int)$row['id']] = $row; if ($g_debug) { echo " New issue " . $row['id'] . "\n"; } } } # If nothing worth nagging about has been found, just return if ($open_count == 0 && $resolved_count == 0 && $new_count == 0) { return; } # # ...otherwise, construct the nag message !! # $t_padding = config_get( 'display_bug_padding' ); $t_host = getenv('HOSTNAME'); $subject = "Mantis reminder"; $message = "This message is a reminder from Mantis on " . $t_host . ".\n\n"; # %%% FIXME: URL should be generic $message .= " http://wally/mantis/" . config_get( 'default_home_page' ); $message .= "\n\n\n"; $message .= "The issues listed below are sorted in priority order.\n\n\n"; if ($open_count > 0) { $message .= "The following open issues need to be resolved: \n"; $message .= str_pad('', 78, '-') . "\n"; foreach ($t_open as $issue) { $message .= str_pad( $issue['id'], $t_padding, ' ', STR_PAD_LEFT ) . " "; $message .= $issue['summary']; $message .= "\n"; } $message .= "\n\n"; } if ($resolved_count > 0) { $message .= "The following resolved issues need to be closed: \n"; $message .= str_pad('', 78, '-') . "\n"; foreach ($t_resolved as $issue) { $message .= str_pad( $issue['id'], $t_padding, ' ', STR_PAD_LEFT ) . " "; $message .= $issue['summary']; $message .= "\n"; } $message .= "\n\n"; } if ($new_count > 0) { $message .= "The following NEW issues need to be assigned: \n"; $message .= str_pad('', 78, '-') . "\n"; foreach ($t_new as $issue) { $message .= str_pad( $issue['id'], $t_padding, ' ', STR_PAD_LEFT ) . " "; $message .= $issue['summary']; $message .= "\n"; } $message .= "\n\n"; } if ($g_debug) { echo $message; } else { email_send( $p_user['email'], $subject, $message, "", "", false); } } # user_nag_message ?>