= 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 { db_param_push(); $query = "SELECT DISTINCT project_id FROM {project_user_list} WHERE " . "user_id = " . db_param() . " AND " . "access_level > " . db_param(); $result = db_query($query, array($t_user['id'], MANAGER)); $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); } if ( !$is_cli ) { layout_page_end(); } ############################################################################## # F U N C T I O N S ############################################################################## # Return all info on all users function user_get_all_rows() { db_param_push(); $query = "SELECT * FROM {user} WHERE enabled = " . db_param(); $result = db_query($query, array(1)); $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; global $is_cli; $open_count = 0; $resolved_count = 0; $new_count = 0; echo "Checking issues for " . $p_user['realname'] . ($is_cli ? "\n" : "
"); # Open issues which need to be resolved db_param_push(); $query = "SELECT id, summary " . "FROM {bug} WHERE status < " . db_param() . " AND " . "handler_id = " . db_param() . " AND " . "project_id in (" . implode(",", $p_proj_ids) . ") " . "ORDER BY priority DESC, id"; $result = db_query($query, array(RESOLVED, $p_user['id'])); $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 db_param_push(); $query = "SELECT id, summary " . "FROM {bug} WHERE status IN (" . db_param() . ") AND " . "reporter_id = " . db_param() . " AND " . "project_id in (" . implode(",", $p_proj_ids) . ") " . "ORDER BY priority DESC, id"; $result = db_query($query, array(RESOLVED, $p_user['id'])); $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 {bug} WHERE status IN (" . db_param() . ") AND " . "project_id in (" . implode(",", $p_manage_ids) . ") " . "ORDER BY priority DESC, id"; $result = db_query($query, array( NEW_ )); $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.\n\n"; $t_url = config_get_global( 'path' ) . config_get_global( 'default_home_page' ); $message .= " $t_url"; $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 .= "(" . string_get_bug_view_url_with_fqdn($issue['id']) . ")"; $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 .= "(" . string_get_bug_view_url_with_fqdn($issue['id']) . ")"; $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 .= "(" . string_get_bug_view_url_with_fqdn($issue['id']) . ")"; $message .= "\n"; } $message .= "\n\n"; } if ($g_debug) { echo $message; } else { $emailData = new EmailData(); $emailData->email = $p_user['email']; $emailData->subject = $subject; $emailData->body = $message; email_send($emailData); } } # user_nag_message ?>