View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0011128 | mantisbt | attachments | public | 2009-11-06 03:35 | 2009-11-06 03:39 |
| Reporter | ma33 | Assigned To | |||
| Priority | normal | Severity | minor | Reproducibility | have not tried |
| Status | acknowledged | Resolution | open | ||
| Platform | windows | OS | Windows XP | ||
| Product Version | 1.2.0rc2 | ||||
| Summary | 0011128: attached text is garbled by a preview. | ||||
| Description | When I previewed it when the character code of the attached text is different from a character code of Mantis, a garbage occurs. For example, it is the following cases. I made a patch based on version mantisbt-1.2.0rc2-2009-11-03-master-1.2.x-470ddab, I will attach it. diff ./mantisbt/core/print_api.php ./mantisbt-1.2.0rc2-2009-11-03-master-1.2.x-470ddab/core/print_api.php
| ||||
| Tags | patch | ||||
| Attached Files | print_api.php (64,751 bytes)
<?php
# MantisBT - a php based bugtracking system
# MantisBT is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# MantisBT is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with MantisBT. If not, see <http://www.gnu.org/licenses/>.
/**
* this file handles printing functions
* @package CoreAPI
* @subpackage PrintAPI
* @copyright Copyright (C) 2000 - 2002 Kenzaburo Ito - kenito@300baud.org
* @copyright Copyright (C) 2002 - 2009 MantisBT Team - mantisbt-dev@lists.sourceforge.net
* @link http://www.mantisbt.org
*/
/**
* requires current_user_api
*/
require_once( 'current_user_api.php' );
/**
* requires string_api
*/
require_once( 'string_api.php' );
/**
* requires prepare_api
*/
require_once( 'prepare_api.php' );
/**
* requires profile_api
*/
require_once( 'profile_api.php' );
/**
* requires last_visited_api
*/
require_once( 'last_visited_api.php' );
/**
* requires file_api
*/
require_once( 'file_api.php' );
# --------------------
# Print the headers to cause the page to redirect to $p_url
# If $p_die is true (default), terminate the execution of the script
# immediately
# If we have handled any errors on this page and the 'stop_on_errors' config
# option is turned on, return false and don't redirect.
# $p_sanitize - true/false - true in the case where the URL is extracted from GET/POST or untrusted source.
# This would be false if the URL is trusted (e.g. read from config_inc.php).
#
# @param string The page to redirect: has to be a relative path
# @param boolean if true, stop the script after redirecting
# @param boolean apply string_sanitize_url to passed url
# @return boolean
function print_header_redirect( $p_url, $p_die = true, $p_sanitize = false, $p_absolute = false ) {
$t_use_iis = config_get( 'use_iis' );
if( ON == config_get_global( 'stop_on_errors' ) && error_handled() ) {
return false;
}
# validate the url as part of this site before continuing
if( $p_absolute ) {
if( $p_sanitize ) {
$t_url = string_sanitize_url( $p_url );
} else {
$t_url = $p_url;
}
} else {
if( $p_sanitize ) {
$t_url = string_sanitize_url( $p_url, true );
} else {
$t_url = config_get( 'path' ) . $p_url;
}
}
# don't send more headers if they have already been sent (guideweb)
if( !headers_sent() ) {
header( 'Content-Type: text/html; charset=utf-8' );
if( ON == $t_use_iis ) {
header( "Refresh: 0;url=$t_url" );
} else {
header( "Location: $t_url" );
}
} else {
trigger_error( ERROR_PAGE_REDIRECTION, ERROR );
return false;
}
if( $p_die ) {
die;
# additional output can cause problems so let's just stop output here
}
return true;
}
# --------------------
# Print a redirect header to view a bug
function print_header_redirect_view( $p_bug_id ) {
print_header_redirect( string_get_bug_view_url( $p_bug_id ) );
}
# --------------------
# Get a view URL for the bug id based on the user's preference and
# call print_successful_redirect() with that URL
function print_successful_redirect_to_bug( $p_bug_id ) {
$t_url = string_get_bug_view_url( $p_bug_id, auth_get_current_user_id() );
print_successful_redirect( $t_url );
}
# --------------------
# If the show query count is ON, print success and redirect after the
# configured system wait time.
# If the show query count is OFF, redirect right away.
function print_successful_redirect( $p_redirect_to ) {
if( helper_show_queries() ) {
html_page_top( null, $p_redirect_to );
echo '<br /><div class="center">';
echo lang_get( 'operation_successful' ) . '<br />';
print_bracket_link( $p_redirect_to, lang_get( 'proceed' ) );
echo '</div>';
html_page_bottom();
} else {
print_header_redirect( $p_redirect_to );
}
}
# Print avatar image for the given user ID
function print_avatar( $p_user_id, $p_size = 80 ) {
if( !user_exists( $p_user_id ) ) {
return;
}
if( access_has_project_level( config_get( 'show_avatar_threshold' ), null, $p_user_id ) ) {
$t_avatar = user_get_avatar( $p_user_id, $p_size );
if( false !== $t_avatar ) {
$t_avatar_url = $t_avatar[0];
$t_width = $t_avatar[1];
$t_height = $t_avatar[2];
echo '<a rel="nofollow" href="http://site.gravatar.com"><img class="avatar" src="' . $t_avatar_url . '" alt="User avatar" width="' . $t_width . '" height="' . $t_height . '" /></a>';
}
}
}
# --------------------
# prints the name of the user given the id. also makes it an email link.
function print_user( $p_user_id ) {
echo prepare_user_name( $p_user_id );
}
# --------------------
# same as print_user() but fills in the subject with the bug summary
function print_user_with_subject( $p_user_id, $p_bug_id ) {
$c_user_id = db_prepare_int( $p_user_id );
if( NO_USER == $p_user_id ) {
return;
}
$t_username = user_get_name( $p_user_id );
if( user_exists( $p_user_id ) && user_get_field( $p_user_id, 'enabled' ) ) {
$t_email = user_get_email( $p_user_id );
print_email_link_with_subject( $t_email, $t_username, $p_bug_id );
} else {
echo '<font STYLE="text-decoration: line-through">';
echo $t_username;
echo '</font>';
}
}
# --------------------
# print out an email editing input
function print_email_input( $p_field_name, $p_email ) {
$t_limit_email_domain = config_get( 'limit_email_domain' );
if( $t_limit_email_domain ) {
# remove the domain part
$p_email = preg_replace( '/@' . preg_quote( $t_limit_email_domain, '/' ) . '$/i', '', $p_email );
echo '<input type="text" name="' . $p_field_name . '" size="20" maxlength="64" value="' . $p_email . '" />@' . $t_limit_email_domain;
} else {
echo '<input type="text" name="' . $p_field_name . '" size="32" maxlength="64" value="' . $p_email . '" />';
}
}
# --------------------
# print out an email editing input
function print_captcha_input( $p_field_name ) {
echo '<input type="text" name="' . $p_field_name . '" size="5" maxlength="5" value="" />';
}
# ##########################################################################
# Option List Printing API
# ##########################################################################
# --------------------
# This populates an option list with the appropriate users by access level
#
# @todo from print_reporter_option_list
function print_user_option_list( $p_user_id, $p_project_id = null, $p_access = ANYBODY ) {
$t_users = array();
if( null === $p_project_id ) {
$p_project_id = helper_get_current_project();
}
$t_users = project_get_all_user_rows( $p_project_id, $p_access );
# handles ALL_PROJECTS case
$t_display = array();
$t_sort = array();
$t_show_realname = ( ON == config_get( 'show_realname' ) );
$t_sort_by_last_name = ( ON == config_get( 'sort_by_last_name' ) );
foreach( $t_users as $t_user ) {
$t_user_name = string_attribute( $t_user['username'] );
$t_sort_name = utf8_strtolower( $t_user_name );
if( $t_show_realname && ( $t_user['realname'] <> '' ) ) {
$t_user_name = string_attribute( $t_user['realname'] );
if( $t_sort_by_last_name ) {
$t_sort_name_bits = explode( ' ', utf8_strtolower( $t_user_name ), 2 );
$t_sort_name = ( isset( $t_sort_name_bits[1] ) ? $t_sort_name_bits[1] . ', ' : '' ) . $t_sort_name_bits[0];
} else {
$t_sort_name = utf8_strtolower( $t_user_name );
}
}
$t_display[] = $t_user_name;
$t_sort[] = $t_sort_name;
}
array_multisort( $t_sort, SORT_ASC, SORT_STRING, $t_users, $t_display );
$t_count = count( $t_sort );
for( $i = 0;$i < $t_count;$i++ ) {
$t_row = $t_users[$i];
echo '<option value="' . $t_row['id'] . '" ';
check_selected( $p_user_id, $t_row['id'] );
echo '>' . $t_display[$i] . '</option>';
}
}
# --------------------
# ugly functions need to be refactored
# This populates the reporter option list with the appropriate users
#
# @todo This function really ought to print out all the users, I think.
# I just encountered a situation where a project used to be public and
# was made private, so now I can't filter on any of the reporters who
# actually reported the bugs at the time. Maybe we could get all user
# who are listed as the reporter in any bug? It would probably be a
# faster query actually.
function print_reporter_option_list( $p_user_id, $p_project_id = null ) {
print_user_option_list( $p_user_id, $p_project_id, config_get( 'report_bug_threshold' ) );
}
/**
* Print the entire form for attaching a tag to a bug.
* @param integer Bug ID
* @param string Default contents of the input box
*/
function print_tag_attach_form( $p_bug_id, $p_string = '' ) {
?>
<small><?php echo sprintf( lang_get( 'tag_separate_by' ), config_get( 'tag_separator' ) )?></small>
<form method="post" action="tag_attach.php">
<?php echo form_security_field( 'tag_attach' )?>
<input type="hidden" name="bug_id" value="<?php echo $p_bug_id?>" />
<?php
print_tag_input( $p_bug_id, $p_string );
?>
<input type="submit" value="<?php echo lang_get( 'tag_attach' )?>" class="button" />
</form>
<?php
return true;
}
/**
* Print the separator comment, input box, and existing tag dropdown menu.
* @param integer Bug ID
* @param string Default contents of the input box
*/
function print_tag_input( $p_bug_id = 0, $p_string = '' ) {
?>
<input type="hidden" id="tag_separator" value="<?php echo config_get( 'tag_separator' )?>" />
<input type="text" name="tag_string" id="tag_string" size="40" value="<?php echo string_attribute( $p_string )?>" />
<select <?php echo helper_get_tab_index()?> name="tag_select" id="tag_select" onchange="tag_string_append( this.options[ this.selectedIndex ].title );">
<?php print_tag_option_list( $p_bug_id );?>
</select>
<?php
return true;
}
/**
* Print the dropdown combo-box of existing tags.
* When passed a bug ID, the option list will not contain any tags attached to the given bug.
* @param integer Bug ID
*/
function print_tag_option_list( $p_bug_id = 0 ) {
$t_rows = tag_get_candidates_for_bug( $p_bug_id );
echo '<option value="0">', lang_get( 'tag_existing' ), '</option>';
foreach ( $t_rows as $row ) {
$t_string = $row['name'];
if ( !empty( $row['description'] ) ) {
$t_string .= ' - ' . utf8_substr( $row['description'], 0, 20 );
}
echo '<option value="', $row['id'], '" title="', $row['name'], '">', $t_string, '</option>';
}
}
# --------------------
# Get current headlines and id prefix with v_
function print_news_item_option_list() {
$t_mantis_news_table = db_get_table( 'mantis_news_table' );
$t_project_id = helper_get_current_project();
$t_global = access_has_global_level( config_get_global( 'admin_site_threshold' ) );
if( $t_global ) {
$query = "SELECT id, headline, announcement, view_state
FROM $t_mantis_news_table
ORDER BY date_posted DESC";
} else {
$query = "SELECT id, headline, announcement, view_state
FROM $t_mantis_news_table
WHERE project_id=" . db_param() . "
ORDER BY date_posted DESC";
}
$result = db_query_bound( $query, ($t_global == true ? Array() : Array( $t_project_id ) ) );
$news_count = db_num_rows( $result );
for( $i = 0;$i < $news_count;$i++ ) {
$row = db_fetch_array( $result );
$t_headline = string_display( $row['headline'] );
$t_announcement = $row['announcement'];
$t_view_state = $row['view_state'];
$t_id = $row['id'];
$t_notes = array();
$t_note_string = '';
if ( 1 == $t_announcement ) {
array_push( $t_notes, lang_get( 'announcement' ) );
}
if ( VS_PRIVATE == $t_view_state ) {
array_push( $t_notes, lang_get( 'private' ) );
}
if ( count( $t_notes ) > 0 ) {
$t_note_string = ' [' . implode( ' ', $t_notes ) . ']';
}
echo "<option value=\"$t_id\">$t_headline$t_note_string</option>";
}
}
# ---------------
# Constructs the string for one news entry given the row retrieved from the news table.
function print_news_entry( $p_headline, $p_body, $p_poster_id, $p_view_state, $p_announcement, $p_date_posted ) {
$t_headline = string_display_links( $p_headline );
$t_body = string_display_links( $p_body );
$t_date_posted = date( config_get( 'normal_date_format' ), $p_date_posted );
if( VS_PRIVATE == $p_view_state ) {
$t_news_css = 'news-heading-private';
} else {
$t_news_css = 'news-heading-public';
}
$output = '<div align="center">';
$output .= '<table class="width75" cellspacing="0">';
$output .= '<tr>';
$output .= "<td class=\"$t_news_css\">";
$output .= "<span class=\"bold\">$t_headline</span> - ";
$output .= "<span class=\"italic-small\">$t_date_posted</span> - ";
echo $output;
/** @todo eventually we should replace print's with methods to construct the strings. */
print_user( $p_poster_id );
$output = '';
if( 1 == $p_announcement ) {
$output .= ' <span class="small">';
$output .= '[' . lang_get( 'announcement' ) . ']';
$output .= '</span>';
}
if( VS_PRIVATE == $p_view_state ) {
$output .= ' <span class="small">';
$output .= '[' . lang_get( 'private' ) . ']';
$output .= '</span>';
}
$output .= '</td>';
$output .= '</tr>';
$output .= '<tr>';
$output .= "<td class=\"news-body\">$t_body</td>";
$output .= '</tr>';
$output .= '</table>';
$output .= '</div>';
echo $output;
}
# --------------------
# print a news item given a row in the news table.
function print_news_entry_from_row( $p_news_row ) {
$t_headline = $p_news_row['headline'];
$t_body = $p_news_row['body'];
$t_poster_id = $p_news_row['poster_id'];
$t_view_state = $p_news_row['view_state'];
$t_announcement = $p_news_row['announcement'];
$t_date_posted = $p_news_row['date_posted'];
print_news_entry( $t_headline, $t_body, $t_poster_id, $t_view_state, $t_announcement, $t_date_posted );
}
# --------------------
# print a news item
function print_news_string_by_news_id( $p_news_id ) {
$row = news_get_row( $p_news_id );
# only show VS_PRIVATE posts to configured threshold and above
if(( VS_PRIVATE == $row['view_state'] ) && !access_has_project_level( config_get( 'private_news_threshold' ) ) ) {
return;
}
print_news_entry_from_row( $row );
}
# --------------------
function print_assign_to_option_list( $p_user_id = '', $p_project_id = null, $p_threshold = null ) {
if( null === $p_threshold ) {
$p_threshold = config_get( 'handle_bug_threshold' );
}
print_user_option_list( $p_user_id, $p_project_id, $p_threshold );
}
/**
* List projects that the current user has access to.
*
* @param integer $p_project_id The current project id or null to use cookie.
* @param bool $p_include_all_projects true: include "All Projects", otherwise false.
* @param mixed $p_filter_project_id The id of a project to exclude or null.
* @param string $p_trace The current project trace, identifies the sub-project via a path from top to bottom.
* @return void
*/
function print_project_option_list( $p_project_id = null, $p_include_all_projects = true, $p_filter_project_id = null, $p_trace = false ) {
$t_project_ids = current_user_get_accessible_projects();
project_cache_array_rows( $t_project_ids );
if( $p_include_all_projects ) {
echo '<option value="' . ALL_PROJECTS . '"';
check_selected( $p_project_id, ALL_PROJECTS );
echo '>' . lang_get( 'all_projects' ) . '</option>' . "\n";
}
$t_project_count = count( $t_project_ids );
for( $i = 0;$i < $t_project_count;$i++ ) {
$t_id = $t_project_ids[$i];
if( $t_id != $p_filter_project_id ) {
echo '<option value="' . $t_id . '"';
check_selected( $p_project_id, $t_id );
echo '>' . string_html_specialchars( string_strip_hrefs( project_get_field( $t_id, 'name' ) ) ) . '</option>' . "\n";
print_subproject_option_list( $t_id, $p_project_id, $p_filter_project_id, $p_trace, Array() );
}
}
}
# --------------------
# List projects that the current user has access to
function print_subproject_option_list( $p_parent_id, $p_project_id = null, $p_filter_project_id = null, $p_trace = false, $p_parents = Array() ) {
array_push( $p_parents, $p_parent_id );
$t_project_ids = current_user_get_accessible_subprojects( $p_parent_id );
$t_project_count = count( $t_project_ids );
for( $i = 0;$i < $t_project_count;$i++ ) {
$t_full_id = $t_id = $t_project_ids[$i];
if( $t_id != $p_filter_project_id ) {
echo "<option value=\"";
if( $p_trace ) {
$t_full_id = join( $p_parents, ";" ) . ';' . $t_id;
}
echo $t_full_id . '"';
check_selected( $p_project_id, $t_full_id );
echo '>' . str_repeat( ' ', count( $p_parents ) ) . str_repeat( '»', count( $p_parents ) ) . ' ' . string_html_specialchars( string_strip_hrefs( project_get_field( $t_id, 'name' ) ) ) . '</option>' . "\n";
print_subproject_option_list( $t_id, $p_project_id, $p_filter_project_id, $p_trace, $p_parents );
}
}
}
# --------------------
# Print extended project browser
function print_extended_project_browser( $p_trace = Array(), $p_project_id = null ) {
project_cache_all();
$t_project_ids = current_user_get_accessible_projects();
echo '<script type="text/javascript" language="JavaScript">' . "\n";
echo "<!--\n";
echo "var subprojects = new Object();\n";
echo 'function unescapeHTML(html) {' . "\n";
echo ' var htmlNode = document.createElement("DIV");' . "\n";
echo ' htmlNode.innerHTML = html;' . "\n";
echo ' if(htmlNode.innerText)' . "\n";
echo ' return htmlNode.innerText; // IE' . "\n";
echo ' return htmlNode.textContent; // FF' . "\n";
echo '} ' . "\n";
$t_projects = Array();
$t_project_count = count( $t_project_ids );
for( $i = 0;$i < $t_project_count;$i++ ) {
$t_id = $t_project_ids[$i];
echo 'subprojects[\'' . $t_id . '\'] = new Object();' . "\n";
$t_name = project_get_field( $t_id, 'name' );
$c_name = addslashes( $t_name );
echo 'subprojects[\'' . $t_id . '\'][\'' . $t_id . '\'] = \'' . $c_name . '\';' . "\n";
$t_projects[$t_id] = $t_name;
print_extended_project_browser_subproject_javascript( $t_id );
}
echo "\n";
echo 'function setProject(projectVal) {' . "\n";
echo "\t" . 'var spInput = document.form_set_project.project_id;' . "\n";
echo "\t" . 'spInput.options.length = 0' . "\n";
echo "\t" . 'if (projectVal == "' . ALL_PROJECTS . '") {' . "\n";
echo "\t\t" . 'spInput.options[0] = new Option(\'--- All Projects ---\', \'' . ALL_PROJECTS . '\');' . "\n";
echo "\t" . '} else {' . "\n";
echo "\t\t" . 'var i = 0;' . "\n";
echo "\t\t" . 'var project = subprojects[ projectVal ];' . "\n";
echo "\t\t" . 'for ( var sp in project ) {' . "\n";
echo "\t\t\t" . 'spInput.options[ i++ ] = new Option( unescapeHTML(project[sp]), sp );' . "\n";
echo "\t\t" . '}' . "\n";
echo "\t" . '}' . "\n";
echo '}' . "\n";
echo '// --></script>' . "\n";
echo '<select name="top_id" onChange="setProject(this.value); document.form_set_project.submit()" class="small">' . "\n";
echo '<option value="' . ALL_PROJECTS . '"';
echo check_selected( $p_project_id, ALL_PROJECTS );
echo '>' . lang_get( 'all_projects' ) . '</option>' . "\n";
foreach( $t_projects as $t_id => $t_name ) {
$c_name = string_display( $t_name );
echo '<option value="' . $t_id . '"';
echo check_selected( $p_project_id, $t_id );
echo '>' . $c_name . '</option>' . "\n";
}
echo '</select>' . "\n";
if( 0 === count( $p_trace ) ) {
$t_top_id = ALL_PROJECTS;
} else {
$t_top_id = $p_trace[0];
$t_trace_str = join( ';', $p_trace );
}
echo '<select name="project_id" onChange="document.form_set_project.submit()" class="small-subprojects"></select>' . "\n";
echo '<script type="text/javascript" language="JavaScript">' . "\n";
echo '<!--' . "\n";
echo 'document.form_set_project.top_id.value = \'' . $t_top_id . '\';' . "\n";
echo 'setProject(' . $t_top_id . ');' . "\n";
echo 'document.form_set_project.project_id.value = \'' . $t_trace_str . '\';' . "\n";
echo '// --></script>' . "\n";
}
# --------------------
# print the subproject javascript for the extended project browser
function print_extended_project_browser_subproject_javascript( $p_trace ) {
$t_trace_projects = explode( ';', $p_trace );
$t_top_id = $t_trace_projects[0];
$t_level = count( $t_trace_projects );
$t_parent_id = $t_trace_projects[$t_level - 1];
$t_project_ids = current_user_get_accessible_subprojects( $t_parent_id );
$t_project_count = count( $t_project_ids );
for( $i = 0;$i < $t_project_count;$i++ ) {
$t_id = $t_project_ids[$i];
$t_name = addslashes( str_repeat(( ' ' ), $t_level ) . str_repeat(( '»' ), $t_level ) . ' ' . project_get_field( $t_id, 'name' ) );
echo 'subprojects[\'' . $t_top_id . '\'][\'' . $p_trace . ';' . $t_id . '\'] = \'' . $t_name . '\';' . "\n";
print_extended_project_browser_subproject_javascript( $p_trace . ';' . $t_id );
}
}
# --------------------
# prints the profiles given the user id
function print_profile_option_list( $p_user_id, $p_select_id = '', $p_profiles = null ) {
if( '' === $p_select_id ) {
$p_select_id = profile_get_default( $p_user_id );
}
if( $p_profiles != null ) {
$t_profiles = $p_profiles;
} else {
$t_profiles = profile_get_all_for_user( $p_user_id );
}
print_profile_option_list_from_profiles( $t_profiles, $p_select_id );
}
# --------------------
# prints the profiles used in a certain project
function print_profile_option_list_for_project( $p_project_id, $p_select_id = '', $p_profiles = null ) {
if( '' === $p_select_id ) {
$p_select_id = profile_get_default( auth_get_current_user_id() );
}
if( $p_profiles != null ) {
$t_profiles = $p_profiles;
} else {
$t_profiles = profile_get_all_for_project( $p_project_id );
}
print_profile_option_list_from_profiles( $t_profiles, $p_select_id );
}
# --------------------
# print the profile option list from profiles array
function print_profile_option_list_from_profiles( $p_profiles, $p_select_id ) {
echo '<option value=""></option>';
foreach( $p_profiles as $t_profile ) {
extract( $t_profile, EXTR_PREFIX_ALL, 'v' );
$t_platform = string_display( $t_profile['platform'] );
$t_os = string_display( $t_profile['os'] );
$t_os_build = string_display( $t_profile['os_build'] );
echo '<option value="' . $t_profile['id'] . '"';
check_selected( $p_select_id, $t_profile['id'] );
echo '>' . $t_platform . ' ' . $t_os . ' ' . $t_os_build . '</option>';
}
}
# --------------------
# Since categories can be orphaned we need to grab all unique instances of category
# We check in the project category table and in the bug table
# We put them all in one array and make sure the entries are unique
function print_category_option_list( $p_category_id = 0, $p_project_id = null ) {
$t_category_table = db_get_table( 'mantis_category_table' );
$t_project_table = db_get_table( 'mantis_project_table' );
if( null === $p_project_id ) {
$t_project_id = helper_get_current_project();
} else {
$t_project_id = $p_project_id;
}
if( config_get( 'allow_no_category' ) ) {
echo "<option value=\"0\"", check_selected( $p_category_id, 0 ), '>';
echo category_full_name( 0, /* show project */ false ), '</option>';
} else {
if( 0 == $p_category_id ) {
echo "<option value=\"0\"", check_selected( $p_category_id, 0 ), '>';
echo string_attribute( lang_get( 'select_option' ) ), '</option>';
}
}
$cat_arr = category_get_all_rows( $t_project_id, /* inherit */ null, /* sortByProject */ true );
foreach( $cat_arr as $t_category_row ) {
$t_category_id = $t_category_row['id'];
echo "<option value=\"$t_category_id\"", check_selected( $p_category_id, $t_category_id ), '>';
echo category_full_name( $t_category_id, $t_category_row['project_id'] != $t_project_id ), '</option>';
}
}
# Now that categories are identified by numerical ID, we need an old-style name
# based option list to keep existing filter functionality.
function print_category_filter_option_list( $p_category_name = '', $p_project_id = null ) {
$t_category_table = db_get_table( 'mantis_category_table' );
$t_project_table = db_get_table( 'mantis_project_table' );
if( null === $p_project_id ) {
$c_project_id = helper_get_current_project();
} else {
$c_project_id = db_prepare_int( $p_project_id );
}
project_hierarchy_cache();
$t_project_ids = project_hierarchy_inheritance( $c_project_id );
$t_subproject_ids = array();
foreach( $t_project_ids as $t_project_id ) {
$t_subproject_ids = array_merge( $t_subproject_ids, current_user_get_all_accessible_subprojects( $t_project_id ) );
}
$t_project_ids = array_merge( $t_project_ids, $t_subproject_ids );
$t_project_where = ' project_id IN ( ' . implode( ', ', $t_project_ids ) . ' ) ';
# grab all categories in the project category table
$cat_arr = array();
$query = "SELECT DISTINCT name FROM $t_category_table
WHERE $t_project_where
ORDER BY name";
$result = db_query( $query );
while( $row = db_fetch_array( $result ) ) {
$cat_arr[] = $row['name'];
}
sort( $cat_arr );
foreach( $cat_arr as $t_name ) {
echo '<option value="' . $t_name . '"';
check_selected( $p_category_name, $t_name );
echo '>' . $t_name . '</option>';
}
}
# --------------------
# Print the option list for platforms accessible for the specified user.
function print_platform_option_list( $p_platform, $p_user_id = null ) {
$t_platforms_array = profile_get_field_all_for_user( 'platform', $p_user_id );
foreach( $t_platforms_array as $t_platform ) {
echo '<option value="' . $t_platform . '"';
check_selected( $p_platform, $t_platform );
echo '>' . $t_platform . '</option>';
}
}
# --------------------
# Print the option list for OSes accessible for the specified user.
function print_os_option_list( $p_os, $p_user_id = null ) {
$t_os_array = profile_get_field_all_for_user( 'os', $p_user_id );
foreach( $t_os_array as $t_os ) {
echo '<option value="' . $t_os . '"';
check_selected( $p_os, $t_os );
echo '>' .$t_os . '</option>';
}
}
# Print the option list for os_build accessible for the specified user.
function print_os_build_option_list( $p_os_build, $p_user_id = null ) {
$t_os_build_array = profile_get_field_all_for_user( 'os_build', $p_user_id );
foreach( $t_os_build_array as $t_os_build ) {
echo '<option value="' . $t_os_build . '"';
check_selected( $p_os_build, $t_os_build );
echo '>' . $t_os_build . '</option>';
}
}
# Print the option list for versions
# $p_version = currently selected version.
# $p_project_id = project id, otherwise current project will be used.
# $p_released = null to get all, 1: only released, 0: only future versions
# $p_leading_black = allow selection of no version
# $p_with_subs = include subprojects
function print_version_option_list( $p_version = '', $p_project_id = null, $p_released = null, $p_leading_blank = true, $p_with_subs = false ) {
if( null === $p_project_id ) {
$c_project_id = helper_get_current_project();
} else {
$c_project_id = db_prepare_int( $p_project_id );
}
if( $p_with_subs ) {
$versions = version_get_all_rows_with_subs( $c_project_id, $p_released,
/* obsolete */
null );
} else {
$versions = version_get_all_rows( $c_project_id, $p_released,
/* obsolete */
null );
}
if( $p_leading_blank ) {
echo '<option value=""></option>';
}
$t_listed = array();
$t_max_length = config_get( 'max_dropdown_length' );
$t_show_version_dates = access_has_project_level( config_get( 'show_version_dates_threshold' ) );
$t_short_date_format = config_get( 'short_date_format' );
foreach( $versions as $version ) {
# If the current version is obsolete, and current version not equal to $p_version,
# then skip it.
if(( (int) $version['obsolete'] ) == 1 ) {
if( $version['version'] != $p_version ) {
continue;
}
}
$t_version = string_attribute( $version['version'] );
if ( !in_array( $t_version, $t_listed ) ) {
$t_listed[] = $t_version;
echo '<option value="' . $t_version . '"';
check_selected( $p_version, $t_version );
$t_version_string = string_attribute( prepare_version_string( $c_project_id, $version['id'] ) );
echo '>', string_shorten( $t_version_string , $t_max_length ), '</option>';
}
}
}
function print_build_option_list( $p_build = '' ) {
$t_bug_table = db_get_table( 'mantis_bug_table' );
$t_overall_build_arr = array();
$t_project_id = helper_get_current_project();
$t_project_where = helper_project_specific_where( $t_project_id );
# Get the "found in" build list
$query = "SELECT DISTINCT build
FROM $t_bug_table
WHERE $t_project_where
ORDER BY build DESC";
$result = db_query_bound( $query );
$option_count = db_num_rows( $result );
for( $i = 0;$i < $option_count;$i++ ) {
$row = db_fetch_array( $result );
$t_overall_build_arr[] = $row['build'];
}
$t_max_length = config_get( 'max_dropdown_length' );
foreach( $t_overall_build_arr as $t_build ) {
echo "<option value=\"$t_build\"";
check_selected( $p_build, $t_build );
echo ">" . string_shorten( $t_build, $t_max_length ) . "</option>";
}
}
# select the proper enum values based on the input parameter
# $p_enum_name - name of enumeration (eg: status)
# $p_val: current value
function print_enum_string_option_list( $p_enum_name, $p_val = 0 ) {
$t_config_var_name = $p_enum_name . '_enum_string';
$t_config_var_value = config_get( $t_config_var_name );
$t_enum_values = MantisEnum::getValues( $t_config_var_value );
foreach ( $t_enum_values as $t_key ) {
$t_elem2 = get_enum_element( $p_enum_name, $t_key );
echo '<option value="' . $t_key . '"';
check_selected( $p_val, $t_key );
echo '>' . $t_elem2 . '</option>';
}
}
# Select the proper enum values for status based on workflow
# or the input parameter if workflows are not used
# $p_enum_name : name of enumeration (eg: status)
# $p_current_value : current value
function get_status_option_list( $p_user_auth = 0, $p_current_value = 0, $p_show_current = true, $p_add_close = false ) {
$t_config_var_value = config_get( 'status_enum_string' );
$t_enum_workflow = config_get( 'status_enum_workflow' );
if( count( $t_enum_workflow ) < 1 ) {
# workflow not defined, use default enum
$t_enum_values = MantisEnum::getValues( $t_config_var_value );
} else {
# workflow defined - find allowed states
if( isset( $t_enum_workflow[$p_current_value] ) ) {
$t_enum_values = MantisEnum::getValues( $t_enum_workflow[$p_current_value] );
} else {
# workflow was not set for this status, this shouldn't happen
$t_enum_values = MantisEnum::getValues( $t_config_var_value );
}
}
$t_enum_list = array();
foreach ( $t_enum_values as $t_enum_value ) {
if ( ( access_compare_level( $p_user_auth, access_get_status_threshold( $t_enum_value ) ) )
&& ( !(( false == $p_show_current ) && ( $p_current_value == $t_enum_value ) ) ) ) {
$t_enum_list[$t_enum_value] = get_enum_element( 'status', $t_enum_value );
}
}
if ( $p_show_current ) {
$t_enum_list[$p_current_value] = get_enum_element( 'status', $p_current_value );
}
if ( $p_add_close && access_compare_level( $p_current_value, config_get( 'bug_resolved_status_threshold' ) ) ) {
$t_closed = config_get( 'bug_closed_status_threshold' );
$t_enum_list[$t_closed] = get_enum_element( 'status', $t_closed );
}
return $t_enum_list;
}
# print the status option list for the bug_update pages
function print_status_option_list( $p_select_label, $p_current_value = 0, $p_allow_close = false, $p_project_id = null ) {
$t_current_auth = access_get_project_level( $p_project_id );
$t_enum_list = get_status_option_list( $t_current_auth, $p_current_value, true, $p_allow_close );
if( count( $t_enum_list ) > 0 ) {
# resort the list into ascending order
ksort( $t_enum_list );
reset( $t_enum_list );
echo '<select ', helper_get_tab_index(), ' name="' . $p_select_label . '">';
foreach( $t_enum_list as $key => $val ) {
echo '<option value="' . $key . '"';
check_selected( $key, $p_current_value );
echo '>' . $val . '</option>';
}
echo '</select>';
} else {
echo MantisEnum::getLabel( lang_get( 'status_enum_string' ), $p_current_value );
}
}
# prints the list of a project's users
# if no project is specified uses the current project
function print_project_user_option_list( $p_project_id = null ) {
print_user_option_list( 0, $p_project_id );
}
# prints the list of access levels that are less than or equal to the access level of the
# logged in user. This is used when adding users to projects
function print_project_access_levels_option_list( $p_val, $p_project_id = null ) {
$t_current_user_access_level = access_get_project_level( $p_project_id );
$t_access_levels_enum_string = config_get( 'access_levels_enum_string' );
# Add [default access level] to add the user to a project
# with his default access level.
echo '<option value="' . DEFAULT_ACCESS_LEVEL . '"';
echo '>[' . lang_get( 'default_access_level' ) . ']</option>';
$t_enum_values = MantisEnum::getValues( $t_access_levels_enum_string );
foreach ( $t_enum_values as $t_enum_value ) {
# a user must not be able to assign another user an access level that is higher than theirs.
if ( $t_enum_value > $t_current_user_access_level ) {
continue;
}
$t_access_level = get_enum_element( 'access_levels', $t_enum_value );
echo '<option value="' . $t_enum_value . '"';
check_selected( $p_val, $t_enum_value );
echo '>' . $t_access_level . '</option>';
}
}
function print_language_option_list( $p_language ) {
$t_arr = config_get( 'language_choices_arr' );
$enum_count = count( $t_arr );
for( $i = 0;$i < $enum_count;$i++ ) {
$t_language = string_attribute( $t_arr[$i] );
echo '<option value="' . $t_language . '"';
check_selected( $t_language, $p_language );
echo '>' . $t_language . '</option>';
}
}
# @@@ preliminary support for multiple bug actions.
function print_all_bug_action_option_list() {
$commands = array(
'MOVE' => lang_get( 'actiongroup_menu_move' ),
'COPY' => lang_get( 'actiongroup_menu_copy' ),
'ASSIGN' => lang_get( 'actiongroup_menu_assign' ),
'CLOSE' => lang_get( 'actiongroup_menu_close' ),
'DELETE' => lang_get( 'actiongroup_menu_delete' ),
'RESOLVE' => lang_get( 'actiongroup_menu_resolve' ),
'SET_STICKY' => lang_get( 'actiongroup_menu_set_sticky' ),
'UP_PRIOR' => lang_get( 'actiongroup_menu_update_priority' ),
'EXT_UPDATE_SEVERITY' => lang_get( 'actiongroup_menu_update_severity' ),
'UP_STATUS' => lang_get( 'actiongroup_menu_update_status' ),
'UP_CATEGORY' => lang_get( 'actiongroup_menu_update_category' ),
'VIEW_STATUS' => lang_get( 'actiongroup_menu_update_view_status' ),
'EXT_UPDATE_PRODUCT_BUILD' => lang_get( 'actiongroup_menu_update_product_build' ),
'EXT_ADD_NOTE' => lang_get( 'actiongroup_menu_add_note' ),
'EXT_ATTACH_TAGS' => lang_get( 'actiongroup_menu_attach_tags' ),
);
$t_project_id = helper_get_current_project();
if( ALL_PROJECTS != $t_project_id ) {
$t_user_id = auth_get_current_user_id();
if( access_has_project_level( config_get( 'update_bug_threshold' ), $t_project_id ) ) {
$commands['UP_FIXED_IN_VERSION'] = lang_get( 'actiongroup_menu_update_fixed_in_version' );
}
if( access_has_project_level( config_get( 'roadmap_update_threshold' ), $t_project_id ) ) {
$commands['UP_TARGET_VERSION'] = lang_get( 'actiongroup_menu_update_target_version' );
}
$t_custom_field_ids = custom_field_get_linked_ids( $t_project_id );
foreach( $t_custom_field_ids as $t_custom_field_id ) {
# if user has not access right to modify the field, then there is no
# point in showing it.
if( !custom_field_has_write_access_to_project( $t_custom_field_id, $t_project_id, $t_user_id ) ) {
continue;
}
$t_custom_field_def = custom_field_get_definition( $t_custom_field_id );
$t_command_id = 'custom_field_' . $t_custom_field_id;
$t_command_caption = sprintf( lang_get( 'actiongroup_menu_update_field' ), lang_get_defaulted( $t_custom_field_def['name'] ) );
$commands[$t_command_id] = string_display( $t_command_caption );
}
}
$t_custom_group_actions = config_get( 'custom_group_actions' );
foreach( $t_custom_group_actions as $t_custom_group_action ) {
# use label if provided to get the localized text, otherwise fallback to action name.
if( isset( $t_custom_group_action['label'] ) ) {
$commands[$t_custom_group_action['action']] = lang_get_defaulted( $t_custom_group_action['label'] );
} else {
$commands[$t_custom_group_action['action']] = lang_get_defaulted( $t_custom_group_action['action'] );
}
}
while( list( $key, $val ) = each( $commands ) ) {
echo '<option value="' . $key . '">' . $val . '</option>';
}
}
# --------------------
# list of users that are NOT in the specified project and that are enabled
# if no project is specified use the current project
# also exclude any administrators
function print_project_user_list_option_list( $p_project_id = null ) {
$t_mantis_project_user_list_table = db_get_table( 'mantis_project_user_list_table' );
$t_mantis_user_table = db_get_table( 'mantis_user_table' );
if( null === $p_project_id ) {
$p_project_id = helper_get_current_project();
}
$c_project_id = (int) $p_project_id;
$t_adm = config_get_global( 'admin_site_threshold' );
$query = "SELECT DISTINCT u.id, u.username, u.realname
FROM $t_mantis_user_table u
LEFT JOIN $t_mantis_project_user_list_table p
ON p.user_id=u.id AND p.project_id=" . db_param() . "
WHERE u.access_level<" . db_param() . " AND
u.enabled = " . db_param() . " AND
p.user_id IS NULL
ORDER BY u.realname, u.username";
$result = db_query_bound( $query, Array( $c_project_id, $t_adm, true ) );
$t_display = array();
$t_sort = array();
$t_users = array();
$t_show_realname = ( ON == config_get( 'show_realname' ) );
$t_sort_by_last_name = ( ON == config_get( 'sort_by_last_name' ) );
$category_count = db_num_rows( $result );
for( $i = 0;$i < $category_count;$i++ ) {
$row = db_fetch_array( $result );
$t_users[] = $row['id'];
$t_user_name = string_attribute( $row['username'] );
$t_sort_name = $t_user_name;
if(( isset( $row['realname'] ) ) && ( $row['realname'] <> '' ) && $t_show_realname ) {
$t_user_name = string_attribute( $row['realname'] );
if( $t_sort_by_last_name ) {
$t_sort_name_bits = explode( ' ', utf8_strtolower( $t_user_name ), 2 );
$t_sort_name = ( isset( $t_sort_name_bits[1] ) ? $t_sort_name_bits[1] . ', ' : '' ) . $t_sort_name_bits[0];
} else {
$t_sort_name = utf8_strtolower( $t_user_name );
}
}
$t_display[] = $t_user_name;
$t_sort[] = $t_sort_name;
}
array_multisort( $t_sort, SORT_ASC, SORT_STRING, $t_users, $t_display );
$t_count = count( $t_sort );
for( $i = 0;$i < $t_count; $i++ ) {
echo '<option value="' . $t_users[$i] . '">' . $t_display[$i] . '</option>';
}
}
# list of projects that a user is NOT in
function print_project_user_list_option_list2( $p_user_id ) {
$t_mantis_project_user_list_table = db_get_table( 'mantis_project_user_list_table' );
$t_mantis_project_table = db_get_table( 'mantis_project_table' );
$c_user_id = db_prepare_int( $p_user_id );
$query = "SELECT DISTINCT p.id, p.name
FROM $t_mantis_project_table p
LEFT JOIN $t_mantis_project_user_list_table u
ON p.id=u.project_id AND u.user_id=" . db_param() . "
WHERE p.enabled = " . db_param() . " AND
u.user_id IS NULL
ORDER BY p.name";
$result = db_query_bound( $query, Array( $c_user_id, true ) );
$category_count = db_num_rows( $result );
for( $i = 0;$i < $category_count;$i++ ) {
$row = db_fetch_array( $result );
$t_project_name = string_attribute( $row['name'] );
$t_user_id = $row['id'];
echo "<option value=\"$t_user_id\">$t_project_name</option>";
}
}
# list of projects that a user is in
function print_project_user_list( $p_user_id, $p_include_remove_link = true ) {
$t_mantis_project_user_list_table = db_get_table( 'mantis_project_user_list_table' );
$t_mantis_project_table = db_get_table( 'mantis_project_table' );
$c_user_id = db_prepare_int( $p_user_id );
$query = "SELECT DISTINCT p.id, p.name, p.view_state, u.access_level
FROM $t_mantis_project_table p
LEFT JOIN $t_mantis_project_user_list_table u
ON p.id=u.project_id
WHERE p.enabled = '1' AND
u.user_id=" . db_param() . "
ORDER BY p.name";
$result = db_query_bound( $query, Array( $c_user_id ) );
$category_count = db_num_rows( $result );
for( $i = 0;$i < $category_count;$i++ ) {
$row = db_fetch_array( $result );
$t_project_id = $row['id'];
$t_project_name = $row['name'];
$t_view_state = $row['view_state'];
$t_access_level = $row['access_level'];
$t_access_level = get_enum_element( 'access_levels', $t_access_level );
$t_view_state = get_enum_element( 'project_view_state', $t_view_state );
echo $t_project_name . ' [' . $t_access_level . '] (' . $t_view_state . ')';
if( $p_include_remove_link && access_has_project_level( config_get( 'project_user_threshold' ), $t_project_id ) ) {
html_button( 'manage_user_proj_delete.php', lang_get( 'remove_link' ), array( 'project_id' => $t_project_id, 'user_id' => $p_user_id ) );
}
echo '<br />';
}
}
# List of projects with which the specified field id is linked.
# For every project, the project name is listed and then the list of custom
# fields linked in order with their sequence numbers. The specified field
# is always highlighted in italics and project names in bold.
#
# $p_field_id - The field to list the projects associated with.
function print_custom_field_projects_list( $p_field_id ) {
$c_field_id = (integer) $p_field_id;
$t_project_ids = custom_field_get_project_ids( $p_field_id );
$t_security_token = form_security_param( 'manage_proj_custom_field_remove' );
foreach( $t_project_ids as $t_project_id ) {
$t_project_name = project_get_field( $t_project_id, 'name' );
$t_sequence = custom_field_get_sequence( $p_field_id, $t_project_id );
echo '<b>', $t_project_name, '</b>: ';
print_bracket_link( "manage_proj_custom_field_remove.php?field_id=$c_field_id&project_id=$t_project_id&return=custom_field$t_security_token", lang_get( 'remove_link' ) );
echo '<br />- ';
$t_linked_field_ids = custom_field_get_linked_ids( $t_project_id );
$t_current_project_fields = array();
$t_first = true;
foreach( $t_linked_field_ids as $t_current_field_id ) {
if( $t_first ) {
$t_first = false;
} else {
echo ', ';
}
if( $t_current_field_id == $p_field_id ) {
echo '<em>';
}
echo string_display( custom_field_get_field( $t_current_field_id, 'name' ) );
echo ' (', custom_field_get_sequence( $t_current_field_id, $t_project_id ), ')';
if( $t_current_field_id == $p_field_id ) {
echo '</em>';
}
}
echo '<br /><br />';
}
}
/**
* List of priorities that can be assigned to a plugin.
* @param int current priority
*/
function print_plugin_priority_list( $p_priority ) {
if( $p_priority < 1 && $p_priority > 5 ) {
echo '<option value="', $p_priority, '" selected="selected">', $p_priority, '</option>';
}
for( $i = 5;$i >= 1;$i-- ) {
echo '<option value="', $i, '" ', check_selected( $p_priority, $i ), ' >', $i, '</option>';
}
}
# ##########################################################################
# String printing API
# ##########################################################################
# prints a link to VIEW a bug given an ID
# account for the user preference and site override
function print_bug_link( $p_bug_id, $p_detail_info = true ) {
echo string_get_bug_view_link( $p_bug_id, null, $p_detail_info );
}
# formats the priority given the status
# shows the priority in BOLD if the bug is NOT closed and is of significant priority
function print_formatted_priority_string( $p_status, $p_priority ) {
$t_pri_str = get_enum_element( 'priority', $p_priority );
$t_priority_threshold = config_get( 'priority_significant_threshold' );
if( $t_priority_threshold >= 0 &&
$p_priority >= $t_priority_threshold &&
$p_status < config_get( 'bug_closed_status_threshold' ) ) {
echo "<span class=\"bold\">$t_pri_str</span>";
} else {
echo $t_pri_str;
}
}
# formats the severity given the status
# shows the severity in BOLD if the bug is NOT closed and is of significant severity
function print_formatted_severity_string( $p_status, $p_severity ) {
$t_sev_str = get_enum_element( 'severity', $p_severity );
$t_severity_threshold = config_get( 'severity_significant_threshold' );
if( $t_severity_threshold >= 0 &&
$p_severity >= $t_severity_threshold &&
$p_status < config_get( 'bug_closed_status_threshold' ) ) {
echo "<span class=\"bold\">$t_sev_str</span>";
} else {
echo $t_sev_str;
}
}
# ##########################################################################
# Link Printing API
# ##########################################################################
# $p_columns_target: see COLUMNS_TARGET_* in constant_inc.php
function print_view_bug_sort_link( $p_string, $p_sort_field, $p_sort, $p_dir, $p_columns_target = COLUMNS_TARGET_VIEW_PAGE ) {
if( $p_columns_target == COLUMNS_TARGET_PRINT_PAGE ) {
if( $p_sort_field == $p_sort ) {
# We toggle between ASC and DESC if the user clicks the same sort order
if( 'ASC' == $p_dir ) {
$p_dir = 'DESC';
} else {
$p_dir = 'ASC';
}
} else {
# Otherwise always start with ASCending
$t_dir = 'ASC';
}
echo '<a href="view_all_set.php?sort=' . rawurlencode( $p_sort_field ) . '&dir=' . $p_dir . '&type=2&print=1">' . $p_string . '</a>';
}
else if( $p_columns_target == COLUMNS_TARGET_VIEW_PAGE ) {
if( $p_sort_field == $p_sort ) {
# we toggle between ASC and DESC if the user clicks the same sort order
if( 'ASC' == $p_dir ) {
$p_dir = 'DESC';
} else {
$p_dir = 'ASC';
}
} else {
# Otherwise always start with ASCending
$t_dir = 'ASC';
}
echo '<a href="view_all_set.php?sort=' . rawurlencode( $p_sort_field ) . '&dir=' . $p_dir . '&type=2">' . $p_string . '</a>';
} else {
echo $p_string;
}
}
function print_manage_user_sort_link( $p_page, $p_string, $p_field, $p_dir, $p_sort_by, $p_hide = 0, $p_filter = ALL ) {
if( $p_sort_by == $p_field ) {
# If this is the selected field flip the order
if( 'ASC' == $p_dir || ASCENDING == $p_dir ) {
$t_dir = 'DESC';
} else {
$t_dir = 'ASC';
}
} else {
# Otherwise always start with ASCending
$t_dir = 'ASC';
}
echo '<a href="' . $p_page . '?sort=' . $p_field . '&dir=' . $t_dir . '&save=1&hide=' . $p_hide . '&filter=' . $p_filter . '">' . $p_string . '</a>';
}
function print_manage_project_sort_link( $p_page, $p_string, $p_field, $p_dir, $p_sort_by ) {
if( $p_sort_by == $p_field ) {
# If this is the selected field flip the order
if( 'ASC' == $p_dir || ASCENDING == $p_dir ) {
$t_dir = 'DESC';
} else {
$t_dir = 'ASC';
}
} else {
# Otherwise always start with ASCending
$t_dir = 'ASC';
}
echo '<a href="' . $p_page . '?sort=' . $p_field . '&dir=' . $t_dir . '">' . $p_string . '</a>';
}
# print a button which presents a standalone form.
# $p_action_page - The action page
# $p_label - The button label
# $p_args_to_post - An associative array with key => value to be posted, can be null.
function print_button( $p_action_page, $p_label, $p_args_to_post = null ) {
$t_form_name = explode( '.php', $p_action_page, 2 );
# TODO: ensure all uses of print_button supply arguments via $p_args_to_post (POST)
# instead of via $p_action_page (GET). Then only add the CSRF form token if
# arguments are being sent via the POST method.
echo '<form method="post" action="', $p_action_page, '">';
echo form_security_field( $t_form_name[0] );
echo '<input type="submit" class="button-small" value="', $p_label, '" />';
if( $p_args_to_post !== null ) {
foreach( $p_args_to_post as $t_var => $t_value ) {
echo "<input type=\"hidden\" name=\"$t_var\" value=\"$t_value\" />";
}
}
echo '</form>';
}
# print brackets around a pre-prepared link (i.e. '<a href' html tag).
function print_bracket_link_prepared( $p_link ) {
echo '<span class="bracket-link">[ ' . $p_link . ' ]</span> ';
}
# print the bracketed links used near the top
# if the $p_link is blank then the text is printed but no link is created
# if $p_new_window is true, link will open in a new window, default false.
function print_bracket_link( $p_link, $p_url_text, $p_new_window = false, $p_class = '' ) {
echo '<span class="bracket-link">[ ';
print_link( $p_link, $p_url_text, $p_new_window, $p_class = '' );
echo ' ]</span> ';
}
# print a HTML link
function print_link( $p_link, $p_url_text, $p_new_window = false, $p_class = '' ) {
$t_class = $p_class;
if( $p_class !== '' ) {
$t_class = "class='$p_class' ";
}
if( is_blank( $p_link ) ) {
echo "$p_url_text";
} else {
if( $p_new_window === true ) {
echo "<a ${t_class}href=\"$p_link\" target=\"_blank\">$p_url_text</a>";
} else {
echo "<a ${t_class}href=\"$p_link\">$p_url_text</a>";
}
}
}
# print a HTML page link
function print_page_link( $p_page_url, $p_text = '', $p_page_no = 0, $p_page_cur = 0, $p_temp_filter_id = 0 ) {
if( is_blank( $p_text ) ) {
$p_text = $p_page_no;
}
if(( 0 < $p_page_no ) && ( $p_page_no != $p_page_cur ) ) {
if( $p_temp_filter_id !== 0 ) {
echo " <a href=\"$p_page_url?filter=$p_temp_filter_id&page_number=$p_page_no\">$p_text</a> ";
} else {
echo " <a href=\"$p_page_url?page_number=$p_page_no\">$p_text</a> ";
}
} else {
echo " $p_text ";
}
}
# print a list of page number links (eg [1 2 3])
function print_page_links( $p_page, $p_start, $p_end, $p_current, $p_temp_filter_id = 0 ) {
$t_items = array();
$t_link = '';
# Check if we have more than one page,
# otherwise return without doing anything.
if( $p_end - $p_start < 1 ) {
return;
}
# Get localized strings
$t_first = lang_get( 'first' );
$t_last = lang_get( 'last' );
$t_prev = lang_get( 'prev' );
$t_next = lang_get( 'next' );
$t_page_links = 10;
print( "[ " );
# First and previous links
print_page_link( $p_page, $t_first, 1, $p_current, $p_temp_filter_id );
print_page_link( $p_page, $t_prev, $p_current - 1, $p_current, $p_temp_filter_id );
# Page numbers ...
$t_first_page = max( $p_start, $p_current - $t_page_links / 2 );
$t_first_page = min( $t_first_page, $p_end - $t_page_links );
$t_first_page = max( $t_first_page, $p_start );
if( $t_first_page > 1 ) {
print( " ... " );
}
$t_last_page = $t_first_page + $t_page_links;
$t_last_page = min( $t_last_page, $p_end );
for( $i = $t_first_page;$i <= $t_last_page;$i++ ) {
if( $i == $p_current ) {
array_push( $t_items, $i );
} else {
if( $p_temp_filter_id !== 0 ) {
array_push( $t_items, "<a href=\"$p_page?filter=$p_temp_filter_id&page_number=$i\">$i</a>" );
} else {
array_push( $t_items, "<a href=\"$p_page?page_number=$i\">$i</a>" );
}
}
}
echo implode( ' ', $t_items );
if( $t_last_page < $p_end ) {
print( ' ... ' );
}
# Next and Last links
if( $p_current < $p_end ) {
print_page_link( $p_page, $t_next, $p_current + 1, $p_current, $p_temp_filter_id );
} else {
print_page_link( $p_page, $t_next, null, null, $p_temp_filter_id );
}
print_page_link( $p_page, $t_last, $p_end, $p_current, $p_temp_filter_id );
print( ' ]' );
}
# print a mailto: href link
function print_email_link( $p_email, $p_text ) {
echo get_email_link( $p_email, $p_text );
}
# return the mailto: href string link instead of printing it
function get_email_link( $p_email, $p_text ) {
return prepare_email_link( $p_email, $p_text );
}
# print a mailto: href link with subject
function print_email_link_with_subject( $p_email, $p_text, $p_bug_id ) {
$t_subject = email_build_subject( $p_bug_id );
echo get_email_link_with_subject( $p_email, $p_text, $t_subject );
}
# return the mailto: href string link instead of printing it
# add subject line
function get_email_link_with_subject( $p_email, $p_text, $p_summary ) {
if( !access_has_project_level( config_get( 'show_user_email_threshold' ) ) ) {
return $p_text;
}
# If we apply string_url() to the whole mailto: link then the @
# gets turned into a %40 and you can't right click in browsers to
# do Copy Email Address. If we don't apply string_url() to the
# summary text then an ampersand (for example) will truncate the text
$t_summary = string_url( $p_summary );
$t_email = string_url( $p_email );
$t_mailto = string_attribute( "mailto:$t_email?subject=$t_summary" );
$t_text = string_display( $p_text );
return "<a href=\"$t_mailto\">$t_text</a>";
}
# Print a hidden input for each name=>value pair in the array
#
# If a value is an array an input will be created for each item with a name
# that ends with []
# The names and values are passed through htmlspecialchars() before being displayed
function print_hidden_inputs( $p_assoc_array ) {
foreach( $p_assoc_array as $t_key => $t_val ) {
print_hidden_input( $t_key, $t_val );
}
}
function print_hidden_input( $p_field_key, $p_field_val ) {
if( is_array( $p_field_val ) ) {
foreach( $p_field_val AS $t_key => $t_value ) {
if( is_array( $t_value ) ) {
$t_key = string_html_entities( $t_key );
$t_field_key = $p_field_key . '[' . $t_key . ']';
print_hidden_input( $t_field_key, $t_value );
} else {
$t_field_key = $p_field_key . '[' . $t_key . ']';
print_hidden_input( $t_field_key, $t_value );
}
}
} else {
$t_key = string_html_entities( $p_field_key );
$t_val = string_html_entities( $p_field_val );
echo "<input type=\"hidden\" name=\"$t_key\" value=\"$t_val\" />\n";
}
}
# =============================
# Functions that used to be in html_api
# =============================
# This prints the little [?] link for user help
# The $p_a_name is a link into the documentation.html file
function print_documentation_link( $p_a_name = '' ) {
echo lang_get( $p_a_name ) . "\n";
# @@@ Disable documentation links for now. May be re-enabled if linked to new manual.
# echo "<a href=\"doc/documentation.html#$p_a_name\" target=\"_info\">[?]</a>";
}
# print the hr
function print_hr( $p_hr_size = null, $p_hr_width = null ) {
if( null === $p_hr_size ) {
$p_hr_size = config_get( 'hr_size' );
}
if( null === $p_hr_width ) {
$p_hr_width = config_get( 'hr_width' );
}
echo "<hr size=\"$p_hr_size\" width=\"$p_hr_width%\" />";
}
# prints the signup link
function print_signup_link() {
if ( ( ON == config_get_global( 'allow_signup' ) ) &&
( LDAP != config_get_global( 'login_method' ) ) &&
( ON == config_get( 'enable_email_notification' ) )
) {
print_bracket_link( 'signup_page.php', lang_get( 'signup_link' ) );
}
}
# prints the login link
function print_login_link() {
print_bracket_link( 'login_page.php', lang_get( 'login_title' ) );
}
# prints the lost pwd link
function print_lost_password_link() {
# lost password feature disabled or reset password via email disabled -> stop here!
if ( ( LDAP != config_get_global( 'login_method' ) ) &&
( ON == config_get( 'lost_password_feature' ) ) &&
( ON == config_get( 'send_reset_password' ) ) &&
( ON == config_get( 'enable_email_notification' ) ) ) {
print_bracket_link( 'lost_pwd_page.php', lang_get( 'lost_password_link' ) );
}
}
# ===============================
# Deprecated Functions
# ===============================
# print our standard mysql query error
# this function should rarely (if ever) be reached. instead the db_()
# functions should trap (although inelegantly).
function print_sql_error( $p_query ) {
global $g_administrator_email;
$error = error_string( ERROR_SQL );
$error .= lang_get( 'word_separator' );
$error .= sprintf( lang_get( 'please_report' ), prepare_email_link( $g_administrator_email, lang_get( 'administrator' ) ) );
$error .= "<br />$p_query;<br />";
echo $error;
}
# Get icon corresponding to the specified filename
function print_file_icon( $p_filename ) {
$t_file_type_icons = config_get( 'file_type_icons' );
$ext = utf8_strtolower( file_get_extension( $p_filename ) );
if( !isset( $t_file_type_icons[$ext] ) ) {
$ext = '?';
}
$t_name = $t_file_type_icons[$ext];
echo '<img src="' . config_get( 'path' ) . 'images/fileicons/' . $t_name . '" alt="' . $ext . ' file icon" width="16" height="16" border="0" />';
}
# Prints an RSS image that is hyperlinked to an RSS feed.
function print_rss( $p_feed_url, $p_title = '' ) {
$t_path = config_get( 'path' );
echo '<a href="', $p_feed_url, '" title="', $p_title, '"><img src="', $t_path, '/images/', 'rss.png" width="16" height="16" border="0" alt="', $p_title, '" /></a>';
}
# Prints the recently visited issues.
function print_recently_visited() {
if( !last_visited_enabled() ) {
return;
}
$t_ids = last_visited_get_array();
if( count( $t_ids ) == 0 ) {
return;
}
echo '<div align="right"><small>' . lang_get( 'recently_visited' ) . ': ';
$t_first = true;
foreach( $t_ids as $t_id ) {
if( !$t_first ) {
echo ', ';
} else {
$t_first = false;
}
echo string_get_bug_view_link( $t_id );
}
echo '</small></div>';
}
# print a dropdown box from input array
function get_dropdown( $p_control_array, $p_control_name, $p_match = '', $p_add_any = false, $p_multiple = false, $p_change_script = '' ) {
$t_control_array = $p_control_array;
if( $p_multiple ) {
$t_size = ' size="5"';
$t_multiple = ' multiple="multiple"';
} else {
$t_size = '';
$t_multiple = '';
}
$t_script = ( $p_change_script == '' ? '' : ' onchange="' . $p_change_script . '"' );
$t_info = sprintf( "<select %s name=\"%s\" id=\"%s\"%s%s>", $t_multiple, $p_control_name, $p_control_name, $t_size, $t_script );
if( $p_add_any ) {
array_unshift_assoc( $t_control_array, META_FILTER_ANY, lang_trans( '[any]' ) );
}
while( list( $t_name, $t_desc ) = each( $t_control_array ) ) {
$t_sel = '';
if( is_array( $p_match ) ) {
if( in_array( $t_name, array_values( $p_match ) ) || in_array( $t_desc, array_values( $p_match ) ) ) {
$t_sel = ' selected="selected"';
}
} else {
if(( $t_name === $p_match ) || ( $t_desc === $p_match ) ) {
$t_sel = ' selected="selected"';
}
}
$t_info .= sprintf( "<option%s value=\"%s\">%s</option>", $t_sel, $t_name, $t_desc );
}
$t_info .= "</select>\n";
return $t_info;
}
# List the attachments belonging to the specified bug. This is used from within
# bug_view_page.php
function print_bug_attachments_list( $p_bug_id ) {
$t_attachments = file_get_visible_attachments( $p_bug_id );
$t_attachments_count = count( $t_attachments );
$i = 0;
$image_previewed = false;
foreach ( $t_attachments as $t_attachment ) {
$t_file_display_name = string_display_line( $t_attachment['display_name'] );
$t_filesize = number_format( $t_attachment['size'] );
$t_date_added = date( config_get( 'normal_date_format' ), $t_attachment['date_added'] );
if ( $image_previewed ) {
$image_previewed = false;
echo '<br />';
}
if ( $t_attachment['can_download'] ) {
$t_href_start = "<a href=\"file_download.php?file_id={$t_attachment['id']}&type=bug\">";
$t_href_end = '</a>';
$t_href_clicket = " [<a href=\"file_download.php?file_id={$t_attachment['id']}&type=bug\" target=\"_blank\">^</a>]";
} else {
$t_href_start = '';
$t_href_end = '';
$t_href_clicket = '';
}
if ( !$t_attachment['exists'] ) {
print_file_icon( $t_file_display_name );
echo ' <span class="strike">' . $t_file_display_name . '</span> (attachment missing)';
} else {
echo $t_href_start;
print_file_icon( $t_file_display_name );
echo $t_href_end . ' ' . $t_href_start . $t_file_display_name . $t_href_end . $t_href_clicket . ' (' . $t_filesize . ' ' . lang_get( 'bytes' ) . ') ' . '<span class=\"italic\">' . $t_date_added . '</span>';
if ( $t_attachment['can_delete'] ) {
echo " [<a class=\"small\" href=\"bug_file_delete.php?file_id={$t_attachment['id']}" . form_security_param( 'bug_file_delete' ) . "\">" . lang_get( 'delete_link' ) . '</a>]';
}
if ( ( FTP == config_get( 'file_upload_method' ) ) && $t_attachment['exists'] ) {
echo ' (' . lang_get( 'cached' ) . ')';
}
if ( $t_attachment['preview'] && ( $t_attachment['type'] == 'text' ) ) {
$c_id = db_prepare_int( $t_attachment['id'] );
$t_bug_file_table = db_get_table( 'mantis_bug_file_table' );
echo "<script type=\"text/javascript\" language=\"JavaScript\">
<!--
function swap_content( span ) {
displayType = ( document.getElementById( span ).style.display == 'none' ) ? '' : 'none';
document.getElementById( span ).style.display = displayType;
}
-->
</script>";
echo " <span id=\"hideSection_$c_id\">[<a class=\"small\" href='#' id='attmlink_" . $c_id . "' onclick='swap_content(\"hideSection_" . $c_id . "\");swap_content(\"showSection_" . $c_id . "\");return false;'>" . lang_get( 'show_content' ) . "</a>]</span>";
echo " <span style='display:none' id=\"showSection_$c_id\">[<a class=\"small\" href='#' id='attmlink_" . $c_id . "' onclick='swap_content(\"hideSection_" . $c_id . "\");swap_content(\"showSection_" . $c_id . "\");return false;'>" . lang_get( 'hide_content' ) . "</a>]";
echo "<pre>";
/** @todo Refactor into a method that gets contents for download / preview. */
switch( config_get( 'file_upload_method' ) ) {
case DISK:
if ( $t_attachment['exists'] ) {
$v_content = file_get_contents( $t_attachment['diskfile'] );
}
break;
case FTP:
if( file_exists( $t_attachment['exists'] ) ) {
file_get_contents( $t_attachment['diskfile'] );
} else {
$ftp = file_ftp_connect();
file_ftp_get( $ftp, $t_attachment['diskfile'], $t_attachment['diskfile'] );
file_ftp_disconnect( $ftp );
$v_content = file_get_contents( $t_attachment['diskfile'] );
}
break;
default:
$query = "SELECT *
FROM $t_bug_file_table
WHERE id=" . db_param();
$result = db_query_bound( $query, Array( $c_id ) );
$row = db_fetch_array( $result );
$v_content = $row['content'];
}
$t_text_to_encoding = trim(config_get( 'preview_text_to_encoding' ));
$t_text_mixed_from_encoding = trim(config_get( 'preview_text_mixed_from_encoding' ));
if (empty($t_text_to_encoding) || empty($t_text_mixed_from_encoding)) {
echo htmlspecialchars( $v_content );
}else {
echo mb_convert_encoding($v_content,$t_text_to_encoding,$t_text_mixed_from_encoding);
}
PRINT "</pre></span>\n";
}
if ( $t_attachment['can_download'] && $t_attachment['preview'] && $t_attachment['type'] == 'image' ) {
$t_preview_style = 'border: 0;';
$t_max_width = config_get( 'preview_max_width' );
if( $t_max_width > 0 ) {
$t_preview_style .= ' max-width:' . $t_max_width . 'px;';
}
$t_max_height = config_get( 'preview_max_height' );
if( $t_max_height > 0 ) {
$t_preview_style .= ' max-height:' . $t_max_height . 'px;';
}
$t_preview_style = 'style="' . $t_preview_style . '"';
$t_title = file_get_field( $t_attachment['id'], 'title' );
echo "\n<br />$t_href_start<img alt=\"$t_title\" $t_preview_style src=\"file_download.php?file_id={$t_attachment['id']}&type=bug\" />$t_href_end";
$image_previewed = true;
}
}
if ( $i != ( $t_attachments_count - 1 ) ) {
echo "<br />\n";
$i++;
}
}
}
# --------------------
# Print the option list for timezones
function print_timezone_option_list( $p_timezone ) {
if ( !function_exists( 'timezone_identifiers_list' ) ) {
echo '<option value="', $p_timezone, '" selected="selected">', $p_timezone, '</option>';
return;
}
$t_identifiers = timezone_identifiers_list();
foreach ( $t_identifiers as $t_identifier )
{
$t_zone = explode( '/', $t_identifier );
// Only use "friendly" continent names - http://us.php.net/manual/en/timezones.others.php
if ($t_zone[0] == 'Africa' ||
$t_zone[0] == 'America' ||
$t_zone[0] == 'Antarctica' ||
$t_zone[0] == 'Arctic' ||
$t_zone[0] == 'Asia' ||
$t_zone[0] == 'Atlantic' ||
$t_zone[0] == 'Australia' ||
$t_zone[0] == 'Europe' ||
$t_zone[0] == 'Indian' ||
$t_zone[0] == 'Pacific' )
{
if ( isset( $t_zone[1] ) != '' )
{
$t_locations[$t_zone[0]][$t_zone[0] . '/' . $t_zone[1]] = array( str_replace( '_', ' ', $t_zone[1] ), $t_identifier );
}
}
}
foreach( $t_locations as $t_continent => $t_locations ) {
echo '<optgroup label="'.$t_continent.'">';
foreach ( $t_locations as $t_location ) {
echo '<option value="' . $t_location[1] . '"';
check_selected( $p_timezone, $t_location[1] );
echo '>' . $t_location[0] . '</option>';
}
}
}
config_defaults_inc.php (115,053 bytes)
<?php
# MantisBT - a php based bugtracking system
# MantisBT is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# MantisBT is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with MantisBT. If not, see <http://www.gnu.org/licenses/>.
/**
* Default Configuration Variables
*
* This file should not be changed. If you want to override any of the values
* defined here, define them in a file called config_inc.php, which will
* be loaded after this file.
*
* In general a value of OFF means the feature is disabled and ON means the
* feature is enabled. Any other cases will have an explanation.
*
* For more details see http://www.mantisbt.org/docs/master-1.2.x/
*
* @package MantisBT
* @copyright Copyright (C) 2000 - 2002 Kenzaburo Ito - kenito@300baud.org
* @copyright Copyright (C) 2002 - 2009 MantisBT Team - mantisbt-dev@lists.sourceforge.net
* @link http://www.mantisbt.org
*/
/******************************
* MantisBT Database Settings *
******************************/
/**
* hostname should be either a hostname or connection string to supply to adodb.
* For example, if you would like to connect to a database server on the local machine,
* set hostname to 'localhost'
* If you need to supply a port to connect to, set hostname as 'localhost:3306'.
* @global string $g_hostname
*/
$g_hostname = 'localhost';
/**
* User name to use for connecting to the database. The user needs to have read/write access to the MantisBT database.
* The default user name is "root".
* @global string $g_db_username
*/
$g_db_username = 'root';
/**
* Password for the specified user name. The default password is empty.
* @global string $g_db_password
*/
$g_db_password = '';
/**
* Name of database that contains MantisBT tables.
* The default database name is "bugtracker".
* @global string $g_database_name
*/
$g_database_name = 'bts_1_2';
/**
* Database Schema Name - used in the case of db2.
* @global string $g_db_schema
*/
$g_db_schema = '';
/**
* Defines the database type. The supported default is 'mysql'.
* Supported types: 'mysql' or 'mysqli' for MySQL, 'pgsql' for PostgreSQL,
* 'odbc_mssql', 'mssql' for MS SQL Server, 'oci8' for Oracle, and 'db2' for DB2.
* @global string $g_db_type
*/
$g_db_type = 'mysql';
/**************************
* MantisBT Path Settings *
**************************/
if ( isset ( $_SERVER['SCRIPT_NAME'] ) ) {
$t_protocol = 'http';
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) ) {
$t_protocol= $_SERVER['HTTP_X_FORWARDED_PROTO'];
} else if ( isset( $_SERVER['HTTPS'] ) && ( strtolower( $_SERVER['HTTPS'] ) != 'off' ) ) {
$t_protocol = 'https';
}
# $_SERVER['SERVER_PORT'] is not defined in case of php-cgi.exe
if ( isset( $_SERVER['SERVER_PORT'] ) ) {
$t_port = ':' . $_SERVER['SERVER_PORT'];
if ( ( ':80' == $t_port && 'http' == $t_protocol )
|| ( ':443' == $t_port && 'https' == $t_protocol )) {
$t_port = '';
}
} else {
$t_port = '';
}
if ( isset( $_SERVER['HTTP_X_FORWARDED_HOST'] ) ) { // Support ProxyPass
$t_hosts = explode( ',', $_SERVER['HTTP_X_FORWARDED_HOST'] );
$t_host = $t_hosts[0];
} else if ( isset( $_SERVER['HTTP_HOST'] ) ) {
$t_host = $_SERVER['HTTP_HOST'];
} else if ( isset( $_SERVER['SERVER_NAME'] ) ) {
$t_host = $_SERVER['SERVER_NAME'] . $t_port;
} else if ( isset( $_SERVER['SERVER_ADDR'] ) ) {
$t_host = $_SERVER['SERVER_ADDR'] . $t_port;
} else {
$t_host = 'www.example.com';
}
// Get server root to compare with path to this file
if( !isset( $_SERVER['DOCUMENT_ROOT'] ) ) {
if( isset( $_SERVER['SCRIPT_FILENAME'] ) ) {
$_SERVER['DOCUMENT_ROOT'] = str_replace( '\\', '/', substr( $_SERVER['SCRIPT_FILENAME'], 0, 0 - strlen( $_SERVER['SCRIPT_NAME'] ) ) );
}
}
if( !isset( $_SERVER['DOCUMENT_ROOT'] ) ) {
if( isset( $_SERVER['PATH_TRANSLATED'] ) ) {
$_SERVER['DOCUMENT_ROOT'] = str_replace( '\\', '/', substr( str_replace( '\\\\', '\\', $_SERVER['PATH_TRANSLATED'] ), 0, 0 - strlen( $_SERVER['SCRIPT_NAME'] ) ) );
}
}
$t_docroot = rtrim( $_SERVER['DOCUMENT_ROOT'], '/' );
$t_file_path = str_replace( DIRECTORY_SEPARATOR, '/', __FILE__ );
// Extract the unique directory path of this file relative to the server's documunt root
if ( preg_match( '@' . preg_quote( $t_docroot ) . '(.*)@', $t_file_path, $t_matches ) ) {
$t_path = dirname( strip_tags( $t_matches[1] ) );
} else {
$t_path = dirname( strip_tags( $_SERVER['SCRIPT_NAME'] ) );
if ( '/' == $t_path || '\\' == $t_path ) {
$t_path = '';
}
}
$t_path = rtrim($t_path, '/');
$inc_files = get_included_files();
$t_relative_path = str_replace( dirname($t_file_path), '', str_replace( DIRECTORY_SEPARATOR, '/', dirname($inc_files[0])));
$t_path = str_replace( $t_relative_path, '', $t_path );
$t_url = $t_protocol . '://' . $t_host . $t_path.'/';
} else {
$t_path = '';
$t_host = '';
$t_protocol = '';
}
/**
* path to your installation as seen from the web browser
* requires trailing /
* @global string $g_path
*/
$g_path = isset( $t_url ) ? $t_url : 'http://www.example.com/mantisbt/';
/**
* path to your images directory (for icons)
* requires trailing /
* @global string $g_icon_path
*/
$g_icon_path = '%path%images/';
/**
* Short web path without the domain name
* requires trailing /
* @global string $g_short_path
*/
$g_short_path = $t_path . '/';
/**
* absolute path to your installation. Requires trailing / or \
* @global string $g_absolute_path
*/
$g_absolute_path = dirname( __FILE__ ) . DIRECTORY_SEPARATOR;
/**
* absolute patch to your core files. The default is usually OK,
* unless you moved the 'core' directory out of your webroot (recommended).
* @global string $g_core_path
*/
$g_core_path = $g_absolute_path . 'core' . DIRECTORY_SEPARATOR;
/**
* absolute path to class files. Requires trailing / or \
* @global string $g_class_path
*/
$g_class_path = $g_core_path . 'classes' . DIRECTORY_SEPARATOR;
/**
* Used to link to manual for User Documentation.
* @global string $g_manual_url
*/
$g_manual_url = 'http://www.mantisbt.org/docs/master-1.2.x/';
/**************
* Web Server *
**************/
if ( isset( $_SERVER['SERVER_SOFTWARE'] ) ) { // SERVER_SOFTWARE not defined in case of php-cgi.exe
$t_use_iis = ( strstr( $_SERVER['SERVER_SOFTWARE'], 'IIS' ) !== false ) ? ON : OFF;
} else {
$t_use_iis = OFF;
}
/**
* Using Microsoft Internet Information Server (IIS)
* ON or OFF
* @global int $g_use_iis
*/
$g_use_iis = $t_use_iis;
/**
* Session handler. Possible values:
* 'php' -> Default PHP filesystem sessions
* 'adodb' -> Database storage sessions
* 'memcached' -> Memcached storage sessions
* @global string $g_session_handler
*/
$g_session_handler = 'php';
/**
* Session key name. Should be unique between multiple installations to prevent conflicts.
* @global string $g_session_key
*/
$g_session_key = 'MantisBT';
/**
* Session save path. If false, uses default value as set by session handler.
* @global bool $g_session_save_path
*/
$g_session_save_path = false;
/**
* Session validation
* WARNING: Disabling this could be a potential security risk!!
* @global int $g_session_validation
*/
$g_session_validation = ON;
/**
* Form security validation.
* This protects against Cross-Site Request Forgery, but some proxy servers may
* not correctly work with this option enabled because they cache pages incorrectly.
* WARNING: Disabling this IS a security risk!!
*/
$g_form_security_validation = ON;
/****************************
* Signup and Lost Password *
****************************/
/**
* allow users to signup for their own accounts.
* Mail settings must be correctly configured in order for this to work
* @global int $g_allow_signup
*/
$g_allow_signup = ON;
/**
* Max. attempts to login using a wrong password before lock the account.
* When locked, it's required to reset the password (lost password)
* Value resets to zero at each successfully login
* Set to OFF to disable this control
* @global int $g_max_failed_login_count
*/
$g_max_failed_login_count = OFF;
/**
* access level required to be notified when a new user has been created using the "signup form"
* @global int $g_notify_new_user_created_threshold_min
*/
$g_notify_new_user_created_threshold_min = ADMINISTRATOR;
/**
* if ON users will be sent their password when reset.
* if OFF the password will be set to blank. If set to ON, mail settings must be
* correctly configured.
* @global int $g_send_reset_password
*/
$g_send_reset_password = ON;
/**
* String used to generate the confirm_hash for the 'lost password' feature and captcha code for 'signup'
* ATTENTION: CHANGE IT TO WHATEVER VALUE YOU PREFER
* @global int $g_password_confirm_hash_magic_string
* @todo randomize + admin check
*/
$g_password_confirm_hash_magic_string = 'blowfish';
/**
* use captcha image to validate subscription it requires GD library installed
* @global int $g_signup_use_captcha
*/
$g_signup_use_captcha = ON;
/**
* absolute path (with trailing slash!) to folder which contains your TrueType-Font files
* used to create the captcha image and since 0.19.3 for the Relationship Graphs
* @global string $g_system_font_folder
*/
$g_system_font_folder = '';
/**
* font name used to create the captcha image. i.e. arial.ttf
* (the font file has to exist in the system_font_folder)
* @global string $g_font_per_captcha
*/
$g_font_per_captcha = 'arial.ttf';
/**
* Setting to disable the 'lost your password' feature.
* @global int $g_lost_password_feature
*/
$g_lost_password_feature = ON;
/**
* Max. simultaneous requests of 'lost password'
* When this value is reached, it's no longer possible to request new password reset
* Value resets to zero at each successfully login
* @global int $g_max_lost_password_in_progress_count
*/
$g_max_lost_password_in_progress_count = 3;
/***************************
* MantisBT Email Settings *
***************************/
/**
* Administrator Email address
* @global string $g_administrator_email
*/
$g_administrator_email = 'administrator@example.com';
/**
* Webmaster email
* @global string $g_webmaster_email
*/
$g_webmaster_email = 'webmaster@example.com';
/**
* the sender email, part of 'From: ' header in emails
* @global string $g_from_email
*/
$g_from_email = 'noreply@example.com';
/**
* the sender name, part of 'From: ' header in emails
* @global string $g_from_name
*/
$g_from_name = 'Mantis Bug Tracker';
/**
* the return address for bounced mail
* @global string $g_return_path_email
*/
$g_return_path_email = 'admin@example.com';
/**
* Allow email notification.
* Set to ON to enable email notifications, OFF to disable them. Note that
* disabling email notifications has no effect on emails generated as part
* of the user signup process. When set to OFF, the password reset feature
* is disabled. Additionally, notifications of administrators updating
* accounts are not sent to users.
* @global int $g_enable_email_notification
*/
$g_enable_email_notification = ON;
/**
* The following two config options allow you to control who should get email
* notifications on different actions/statuses. The first option (default_notify_flags)
* sets the default values for different user categories. The user categories
* are:
*
* 'reporter': the reporter of the bug
* 'handler': the handler of the bug
* 'monitor': users who are monitoring a bug
* 'bugnotes': users who have added a bugnote to the bug
* 'explicit': users who are explicitly specified by the code based on the action (e.g. user added to monitor list).
* 'threshold_max': all users with access <= max
* 'threshold_min': ..and with access >= min
*
* The second config option (notify_flags) sets overrides for specific actions/statuses.
* If a user category is not listed for an action, the default from the config
* option above is used. The possible actions are:
*
* 'new': a new bug has been added
* 'owner': a bug has been assigned to a new owner
* 'reopened': a bug has been reopened
* 'deleted': a bug has been deleted
* 'updated': a bug has been updated
* 'bugnote': a bugnote has been added to a bug
* 'sponsor': sponsorship has changed on this bug
* 'relation': a relationship has changed on this bug
* 'monitor': an issue is monitored.
* '<status>': eg: 'resolved', 'closed', 'feedback', 'acknowledged', ...etc.
* this list corresponds to $g_status_enum_string
*
* If you wanted to have all developers get notified of new bugs you might add
* the following lines to your config file:
*
* $g_notify_flags['new']['threshold_min'] = DEVELOPER;
* $g_notify_flags['new']['threshold_max'] = DEVELOPER;
*
* You might want to do something similar so all managers are notified when a
* bug is closed. If you didn't want reporters to be notified when a bug is
* closed (only when it is resolved) you would use:
*
* $g_notify_flags['closed']['reporter'] = OFF;
*
* @global array $g_default_notify_flags
*/
$g_default_notify_flags = array('reporter' => ON,
'handler' => ON,
'monitor' => ON,
'bugnotes' => ON,
'explicit' => ON,
'threshold_min' => NOBODY,
'threshold_max' => NOBODY);
/**
* We don't need to send these notifications on new bugs
* (see above for info on this config option)
* @todo (though I'm not sure they need to be turned off anymore
* - there just won't be anyone in those categories)
* I guess it serves as an example and a placeholder for this
* config option
* @see $g_default_notify_flags
* @global array $g_notify_flags
*/
$g_notify_flags['new'] = array('bugnotes' => OFF,
'monitor' => OFF);
$g_notify_flags['monitor'] = array( 'reporter' => OFF,
'handler' => OFF,
'monitor' => OFF,
'bugnotes' => OFF,
'explicit' => ON,
'threshold_min' => NOBODY,
'threshold_max' => NOBODY);
/**
* Whether user's should receive emails for their own actions
* @global int $g_email_receive_own
*/
$g_email_receive_own = OFF;
/**
* set to OFF to disable email check
* @global int $g_validate_email
*/
$g_validate_email = ON;
/**
* set to OFF to disable email check
* @global int $g_check_mx_record
*/
$g_check_mx_record = OFF;
/**
* if ON, allow the user to omit an email field
* note if you allow users to create their own accounts, they
* must specify an email at that point, no matter what the value
* of this option is. Otherwise they wouldn't get their passwords.
* @global int $g_allow_blank_email
*/
$g_allow_blank_email = OFF;
/**
* Only allow and send email to addresses in the given domain
* For example:
* $g_limit_email_domain = 'users.sourceforge.net';
* @global string|int $g_limit_email_domain
*/
$g_limit_email_domain = OFF;
/**
* This specifies the access level that is needed to get the mailto: links.
* @global int $g_show_user_email_threshold
*/
$g_show_user_email_threshold = NOBODY;
/**
* This specifies the access level that is needed to see realnames on user view page
* @global int $g_show_user_realname_threshold
*/
$g_show_user_realname_threshold = NOBODY;
/**
* If use_x_priority is set to ON, what should the value be?
* Urgent = 1, Not Urgent = 5, Disable = 0
* Note: some MTAs interpret X-Priority = 0 to mean 'Very Urgent'
* @global int $g_mail_priority
*/
$g_mail_priority = 3;
/**
* select the method to mail by:
* PHPMAILER_METHOD_MAIL - mail()
* PHPMAILER_METHOD_SENDMAIL - sendmail
* PHPMAILER_METHOD_SMTP - SMTP
* @global int $g_phpMailer_method
*/
$g_phpMailer_method = PHPMAILER_METHOD_MAIL;
/**
* This option allows you to use a remote SMTP host. Must use the phpMailer script
* One or more hosts, separated by a semicolon, can be listed.
* You can also specify a different port for each host by using this
* format: [hostname:port] (e.g. "smtp1.example.com:25;smtp2.example.com").
* Hosts will be tried in order.
* @global string $g_smtp_host
*/
$g_smtp_host = 'localhost';
/**
* These options allow you to use SMTP Authentication when you use a remote
* SMTP host with phpMailer. If smtp_username is not '' then the username
* and password will be used when logging in to the SMTP server.
* @global string $g_smtp_username
*/
$g_smtp_username = '';
/**
* SMTP Server Authentication password
* @global string $g_smtp_password
*/
$g_smtp_password = '';
/**
* This control the connection mode to SMTP server. Can be 'ssl' or 'tls'
* @global string $g_smtp_connection_mode
*/
$g_smtp_connection_mode = '';
/**
* The smtp port to use. The typical SMTP ports are 25 and 587. The port to use
* will depend on the SMTP server configuration and hence others may be used.
* @global int $g_smtp_port
*/
$g_smtp_port = 25;
/**
* It is recommended to use a cronjob or a scheduler task to send emails.
* The cronjob should typically run every 5 minutes. If no cronjob is used,
* then user will have to wait for emails to be sent after performing an action
* which triggers notifications. This slows user performance.
* @global int $g_email_send_using_cronjob
*/
$g_email_send_using_cronjob = OFF;
/**
* Specify whether e-mails should be sent with the category set or not. This is tested
* with Microsoft Outlook. More testing for this feature + other formats will be added
* in the future.
* OFF, EMAIL_CATEGORY_PROJECT_CATEGORY (format: [Project] Category)
* @global int $g_email_set_category
*/
$g_email_set_category = OFF;
/**
* email separator and padding
* @global string $g_email_separator1
*/
$g_email_separator1 = str_pad('', 70, '=');
/**
* email separator and padding
* @global string $g_email_separator2
*/
$g_email_separator2 = str_pad('', 70, '-');
/**
* email separator and padding
* @global int $g_email_padding_length
*/
$g_email_padding_length = 28;
/***************************
* MantisBT Version String *
***************************/
/**
* Set to off by default to not expose version to users
* @global int $g_show_version
*/
$g_show_version = OFF;
/**
* String appended to the MantisBT version when displayed to the user
* @global string $g_version_suffix
*/
$g_version_suffix = '2009-11-03-master-1.2.x-470ddab';
/******************************
* MantisBT Language Settings *
******************************/
/**
* If the language is set to 'auto', the actual
* language is determined by the user agent (web browser)
* language preference.
* @global string $g_default_language
*/
$g_default_language = 'english';
/**
* list the choices that the users are allowed to choose
* @global array $g_language_choices_arr
*/
$g_language_choices_arr = array(
'auto',
'arabic',
'arabicegyptianspoken',
'bulgarian',
'catalan',
'chinese_simplified',
'chinese_traditional',
'croatian',
'czech',
'danish',
'dutch',
'english',
'estonian',
'finnish',
'french',
'galician',
'german',
'german_eintrag',
'greek',
'hebrew',
'hungarian',
'icelandic',
'italian',
'japanese',
'korean',
'latvian',
'lithuanian',
'norwegian_bokmal',
'norwegian_nynorsk',
'occitan',
'polish',
'portuguese_brazil',
'portuguese_standard',
'ripoarisch',
'romanian',
'russian',
'serbian',
'slovak',
'slovene',
'spanish',
'swissgerman',
'swedish',
'tagalog',
'turkish',
'ukrainian',
'urdu',
'volapuk',
);
/**
* Browser language mapping for 'auto' language selection
* @global array $g_language_auto_map
*/
$g_language_auto_map = array(
'ar' => 'arabic',
'arz' => 'arabicegyptianspoken',
'bg' => 'bulgarian',
'ca' => 'catalan',
'zh-cn, zh-sg, zh' => 'chinese_simplified',
'zh-hk, zh-tw' => 'chinese_traditional',
'cs' => 'czech',
'da' => 'danish',
'nl-be, nl' => 'dutch',
'en-us, en-gb, en-au, en' => 'english',
'et' => 'estonian',
'fi' => 'finnish',
'fr-ca, fr-be, fr-ch, fr' => 'french',
'gl' => 'galician',
'gsw' => 'swissgerman',
'de-de, de-at, de-ch, de' => 'german',
'he' => 'hebrew',
'hu' => 'hungarian',
'hr' => 'croatian',
'is' => 'icelandic',
'it-ch, it' => 'italian',
'ja' => 'japanese',
'ko' => 'korean',
'ksh' => 'ripoarisch',
'lt' => 'lithuanian',
'lv' => 'latvian',
'no' => 'norwegian_bokmal',
'nn' => 'norwegian_nynorsk',
'oc' => 'occitan',
'pl' => 'polish',
'pt-br' => 'portuguese_brazil',
'pt' => 'portuguese_standard',
'ro-mo, ro' => 'romanian',
'ru-mo, ru-ru, ru-ua, ru' => 'russian',
'sr' => 'serbian',
'sk' => 'slovak',
'sl' => 'slovene',
'es-mx, es-co, es-ar, es-cl, es-pr, es' => 'spanish',
'sv-fi, sv' => 'swedish',
'tl' => 'tagalog',
'tr' => 'turkish',
'uk' => 'ukrainian',
'vo' => 'volapuk',
);
/**
* Fallback for automatic language selection
* @global string $g_fallback_language
*/
$g_fallback_language = 'english';
/*****************************
* MantisBT Display Settings *
*****************************/
/**
* browser window title
* @global string $g_window_title
*/
$g_window_title = 'MantisBT';
/**
* title at top of html page (empty by default, since there is a logo now)
* @global string $g_page_title
*/
$g_page_title = '';
/**
* Check for admin directory, database upgrades, etc.
* @global int $g_admin_checks
*/
$g_admin_checks = ON;
/**
* Favicon image
* @global string $g_favicon_image
*/
$g_favicon_image = 'images/favicon.ico';
/**
* Logo
* @global string $g_logo_image
*/
$g_logo_image = 'images/mantis_logo.gif';
/**
* Logo URL link
* @global string $g_logo_url
*/
$g_logo_url = '%default_home_page%';
/**
* Re-authentication required for admin areas
* @global int $g_reauthentication
*/
$g_reauthentication = ON;
/**
*
* @global int $g_reauthentication_expiry
*/
$g_reauthentication_expiry = TOKEN_EXPIRY_AUTHENTICATED;
/**
* Specifies whether to enable support for project documents or not.
* This feature is deprecated and is expected to be moved to a plugin
* in the future.
* @global int $g_enable_project_documentation
*/
$g_enable_project_documentation = OFF;
/**
* Display another instance of the menu at the bottom. The top menu will still remain.
* @global int $g_show_footer_menu
*/
$g_show_footer_menu = OFF;
/**
* show extra menu bar with all available projects
* @global int $g_show_project_menu_bar
*/
$g_show_project_menu_bar = OFF;
/**
* show assigned to names
* This is in the view all pages
* @global int $g_show_assigned_names
*/
$g_show_assigned_names = ON;
/**
* show priority as icon
* OFF: Shows priority as icon in view all bugs page
* ON: Shows priority as text in view all bugs page
* @global int $g_show_priority_text
*/
$g_show_priority_text = OFF;
/**
* Define the priority level at which a bug becomes significant.
* Significant bugs are displayed with emphasis. Set this value to -1 to
* disable the feature.
* @global int $g_priority_significant_threshold
*/
$g_priority_significant_threshold = HIGH;
/**
* Define the severity level at which a bug becomes significant.
* Significant bugs are displayed with emphasis. Set this value to -1 to
* disable the feature.
* @global int $g_severity_significant_threshold
*/
$g_severity_significant_threshold = MAJOR;
/**
* The default columns to be included in the View Issues Page.
* This can be overriden using Manage -> Manage Configuration -> Manage Columns
* Also each user can configure their own columns using My Account -> Manage Columns
* Some of the columns specified here can be removed automatically if they conflict with other configuration.
* Or if the current user doesn't have the necessary access level to view them.
* For example, sponsorship_total will be removed if sponsorships are disabled.
* To include custom field 'xyz', include the column name as 'custom_xyz'.
*
* Standard Column Names (i.e. names to choose from):
* selection, edit, id, project_id, reporter_id, handler_id, priority, reproducibility, projection, eta,
* resolution, fixed_in_version, view_state, os, os_build, build (for product build), platform, version, date_submitted, attachment,
* category, sponsorship_total, severity, status, last_updated, summary, bugnotes_count, description,
* steps_to_reproduce, additional_information
*
* @global array $g_view_issues_page_columns
*/
$g_view_issues_page_columns = array ( 'selection', 'edit', 'priority', 'id', 'sponsorship_total', 'bugnotes_count', 'attachment', 'category_id', 'severity', 'status', 'last_updated', 'summary' );
/**
* The default columns to be included in the Print Issues Page.
* This can be overriden using Manage -> Manage Configuration -> Manage Columns
* Also each user can configure their own columns using My Account -> Manage Columns
* @global array $g_print_issues_page_columns
*/
$g_print_issues_page_columns = array ( 'selection', 'priority', 'id', 'sponsorship_total', 'bugnotes_count', 'attachment', 'category_id', 'severity', 'status', 'last_updated', 'summary' );
/**
* The default columns to be included in the CSV export.
* This can be overriden using Manage -> Manage Configuration -> Manage Columns
* Also each user can configure their own columns using My Account -> Manage Columns
* @global array $g_csv_columns
*/
$g_csv_columns = array ( 'id', 'project_id', 'reporter_id', 'handler_id', 'priority', 'severity', 'reproducibility', 'version', 'projection', 'category_id', 'date_submitted', 'eta', 'os', 'os_build', 'platform', 'view_state', 'last_updated', 'summary', 'status', 'resolution', 'fixed_in_version' );
/**
* The default columns to be included in the Excel export.
* This can be overriden using Manage -> Manage Configuration -> Manage Columns
* Also each user can configure their own columns using My Account -> Manage Columns
* @global array $g_excel_columns
*/
$g_excel_columns = array ( 'id', 'project_id', 'reporter_id', 'handler_id', 'priority', 'severity', 'reproducibility', 'version', 'projection', 'category_id', 'date_submitted', 'eta', 'os', 'os_build', 'platform', 'view_state', 'last_updated', 'summary', 'status', 'resolution', 'fixed_in_version' );
/**
* show projects when in All Projects mode
* @global int $g_show_bug_project_links
*/
$g_show_bug_project_links = ON;
/**
* Position of the status colour legend, can be: POSITION_*
* see constant_inc.php. (*: TOP , BOTTOM , or BOTH)
* @global int $g_status_legend_position
*/
$g_status_legend_position = STATUS_LEGEND_POSITION_BOTTOM;
/**
* Show a legend with percentage of bug status
* x% of all bugs are new, y% of all bugs are assigned and so on.
* If set to ON it will printed below the status colour legend.
* @global int $g_status_percentage_legend
*/
$g_status_percentage_legend = OFF;
/**
* Position of the filter box, can be: POSITION_*
* POSITION_TOP, POSITION_BOTTOM, or POSITION_NONE for none.
* @global int $g_filter_position
*/
$g_filter_position = FILTER_POSITION_TOP;
/**
* Position of action buttons when viewing issues.
* Can be: POSITION_TOP, POSITION_BOTTOM, or POSITION_BOTH.
* @global int $g_action_button_position
*/
$g_action_button_position = POSITION_BOTTOM;
/**
* show product versions in create, view and update screens
* ON forces display even if none are defined
* OFF suppresses display
* AUTO suppresses the display if there are no versions defined for the project
* @global int $g_show_product_version
*/
$g_show_product_version = AUTO;
/**
* The access level threshold at which users will see the date of release
* for product versions. Dates will be shown next to the product version,
* target version and fixed in version fields. Set this threshold to NOBODY
* to disable the feature.
* @global int $g_show_version_dates_threshold
*/
$g_show_version_dates_threshold = NOBODY;
/**
* show users with their real name or not
* @global int $g_show_realname
*/
$g_show_realname = OFF;
/**
* leave off for now
* @global int $g_differentiate_duplicates
*/
$g_differentiate_duplicates = OFF;
/**
* sorting for names in dropdown lists. If turned on, "Jane Doe" will be sorted with the "D"s
* @global int $g_sort_by_last_name
*/
$g_sort_by_last_name = OFF;
/**
* Show user avatar
* the current implementation is based on http://www.gravatar.com
* users will need to register there the same address used in
* this MantisBT installation to have their avatar shown
* Please note: upon registration or avatar change, it takes some time for
* the updated gravatar images to show on sites
* @global int $g_show_avatar
*/
$g_show_avatar = OFF;
/**
* Only users above this threshold will have their avatar shown
* @global int $g_show_avatar_threshold
*/
$g_show_avatar_threshold = DEVELOPER;
/**
* Default avatar for users without a gravatar account
* @global string $g_default_avatar
*/
$g_default_avatar = "%path%images/no_avatar.png";
/**
* Show release dates on changelog
* @global int $g_show_changelog_dates
*/
$g_show_changelog_dates = ON;
/**
* Show release dates on roadmap
* @global int $g_show_roadmap_dates
*/
$g_show_roadmap_dates = ON;
/**************************
* MantisBT Time Settings *
**************************/
/**
* time for 'permanent' cookie to live in seconds (1 year)
* @global int $g_cookie_time_length
*/
$g_cookie_time_length = 30000000;
/**
* minutes to wait before document is stale (in minutes)
* @global int $g_content_expire
*/
$g_content_expire = 0;
/**
* The time (in seconds) to allow for page execution during long processes
* such as upgrading your database.
* The default value of 0 indicates that the page should be allowed to
* execute until it is finished.
* @global int $g_long_process_timeout
*/
$g_long_process_timeout = 0;
/**************************
* MantisBT Date Settings *
**************************/
/**
* date format strings defaults to ISO 8601 formatting
* go to http://www.php.net/manual/en/function.date.php
* for detailed instructions on date formatting
* @global string $g_short_date_format
*/
$g_short_date_format = 'Y-m-d';
/**
* date format strings defaults to ISO 8601 formatting
* go to http://www.php.net/manual/en/function.date.php
* for detailed instructions on date formatting
* @global string $g_normal_date_format
*/
$g_normal_date_format = 'Y-m-d H:i';
/**
* date format strings defaults to ISO 8601 formatting
* go to http://www.php.net/manual/en/function.date.php
* for detailed instructions on date formatting
* @global string $g_complete_date_format
*/
$g_complete_date_format = 'Y-m-d H:i T';
/**
* jscalendar date format string
* go to http://www.php.net/manual/en/function.date.php
* for detailed instructions on date formatting
* @global string $g_calendar_js_date_format
*/
$g_calendar_js_date_format = '\%Y-\%m-\%d \%H:\%M';
/**
* jscalendar date format string
* go to http://www.php.net/manual/en/function.date.php
* for detailed instructions on date formatting
* @global string $g_calendar_date_format
*/
$g_calendar_date_format = 'Y-m-d H:i';
/**************************
* MantisBT TimeZone Settings *
**************************/
/**
* Default timezone to use in mantis.
* See http://us.php.net/manual/en/timezones.php
* for a list of valid timezones.
* Note: if this is left blank, we use the result of
* date_default_timezone_get() i.e. in order:
* 1. Reading the TZ environment variable (if non empty)
* 2. Reading the value of the date.timezone php.ini option (if set)
* 3. Querying the host operating system (if supported and allowed by the OS)
* 4. If none of the above succeed, will return a default timezone of UTC.
* @global string $g_default_timezone
*/
$g_default_timezone = '';
/**************************
* MantisBT News Settings *
**************************/
/**
* Indicates whether the news feature should be enabled or disabled.
* This feature is deprecated and is expected to be moved to a plugin
* in the future.
*/
$g_news_enabled = OFF;
/**
* Limit News Items
* limit by entry count or date
* BY_LIMIT - entry limit
* BY_DATE - by date
* @global int $g_news_limit_method
*/
$g_news_limit_method = BY_LIMIT;
/**
* limit by last X entries
* @global int $g_news_view_limit
*/
$g_news_view_limit = 7;
/**
* limit by days
* @global int $g_news_view_limit_days
*/
$g_news_view_limit_days = 30;
/**
* threshold for viewing private news
* @global int $g_private_news_threshold
*/
$g_private_news_threshold = DEVELOPER;
/********************************
* MantisBT Default Preferences *
********************************/
/**
* signup default
* look in constant_inc.php for values
* @global int $g_default_new_account_access_level
*/
$g_default_new_account_access_level = REPORTER;
/**
* Default Bug View Status (VS_PUBLIC or VS_PRIVATE)
* @global int $g_default_bug_view_status
*/
$g_default_bug_view_status = VS_PUBLIC;
/**
* Default value for steps to reproduce field.
* @global string $g_default_bug_steps_to_reproduce
*/
$g_default_bug_steps_to_reproduce = '';
/**
* Default value for addition information field.
* @global string $g_default_bug_additional_info
*/
$g_default_bug_additional_info = '';
/**
* Default Bugnote View Status (VS_PUBLIC or VS_PRIVATE)
* @global int $g_default_bugnote_view_status
*/
$g_default_bugnote_view_status = VS_PUBLIC;
/**
* Default bug resolution when reporting a new bug
* @global int $g_default_bug_resolution
*/
$g_default_bug_resolution = OPEN;
/**
* Default bug severity when reporting a new bug
* @global int $g_default_bug_severity
*/
$g_default_bug_severity = MINOR;
/**
* Default bug priority when reporting a new bug
* @global int $g_default_bug_priority
*/
$g_default_bug_priority = NORMAL;
/**
* Default bug reproducibility when reporting a new bug
* @global int $g_default_bug_reproducibility
*/
$g_default_bug_reproducibility = REPRODUCIBILITY_HAVENOTTRIED;
/**
* Default bug projection when reporting a new bug
* @global int $g_default_bug_projection
*/
$g_default_bug_projection = PROJECTION_NONE;
/**
* Default bug ETA when reporting a new bug
* @global int $g_default_bug_eta
*/
$g_default_bug_eta = ETA_NONE;
/**
*
* @global int $g_default_limit_view
*/
$g_default_limit_view = 50;
/**
*
* @global int $g_default_show_changed
*/
$g_default_show_changed = 6;
/**
*
* @global int $g_hide_status_default
*/
$g_hide_status_default = CLOSED;
/**
*
* @global string $g_show_sticky_issues
*/
$g_show_sticky_issues = ON;
/**
* make sure people aren't refreshing too often
* in minutes
* @global int $g_min_refresh_delay
*/
$g_min_refresh_delay = 10;
/**
* in minutes
* @global int $g_default_refresh_delay
*/
$g_default_refresh_delay = 30;
/**
* in seconds
* @global int $g_default_redirect_delay
*/
$g_default_redirect_delay = 2;
/**
*
* @global string $g_default_bugnote_order
*/
$g_default_bugnote_order = 'ASC';
/**
*
* @global int $g_default_email_on_new
*/
$g_default_email_on_new = ON;
/**
*
* @global int $g_default_email_on_assigned
*/
$g_default_email_on_assigned = ON;
/**
*
* @global int $g_default_email_on_feedback
*/
$g_default_email_on_feedback = ON;
/**
*
* @global int $g_default_email_on_resolved
*/
$g_default_email_on_resolved = ON;
/**
*
* @global int $g_default_email_on_closed
*/
$g_default_email_on_closed = ON;
/**
*
* @global int $g_default_email_on_reopened
*/
$g_default_email_on_reopened = ON;
/**
*
* @global int $g_default_email_on_bugnote
*/
$g_default_email_on_bugnote = ON;
/**
* @todo Unused
* @global int $g_default_email_on_status
*/
$g_default_email_on_status = 0;
/**
* @todo Unused
* @global int $g_default_email_on_priority
*/
$g_default_email_on_priority = 0;
/**
* 'any'
* @global int $g_default_email_on_new_minimum_severity
*/
$g_default_email_on_new_minimum_severity = OFF;
/**
* 'any'
* @global int $g_default_email_on_assigned_minimum_severity
*/
$g_default_email_on_assigned_minimum_severity = OFF;
/**
* 'any'
* @global int $g_default_email_on_feedback_minimum_severity
*/
$g_default_email_on_feedback_minimum_severity = OFF;
/**
* 'any'
* @global int $g_default_email_on_resolved_minimum_severity
*/
$g_default_email_on_resolved_minimum_severity = OFF;
/**
* 'any'
* @global int $g_default_email_on_closed_minimum_severity
*/
$g_default_email_on_closed_minimum_severity = OFF;
/**
* 'any'
* @global int $g_default_email_on_reopened_minimum_severity
*/
$g_default_email_on_reopened_minimum_severity = OFF;
/**
* 'any'
* @global int $g_default_email_on_bugnote_minimum_severity
*/
$g_default_email_on_bugnote_minimum_severity = OFF;
/**
* 'any'
* @global int $g_default_email_on_status_minimum_severity
*/
$g_default_email_on_status_minimum_severity = OFF;
/**
* @todo Unused
* @global int $g_default_email_on_priority_minimum_severity
*/
$g_default_email_on_priority_minimum_severity = OFF;
/**
*
* @global int $g_default_email_bugnote_limit
*/
$g_default_email_bugnote_limit = 0;
/*****************************
* MantisBT Summary Settings *
*****************************/
/**
* how many reporters to show
* this is useful when there are hundreds of reporters
* @global int $g_reporter_summary_limit
*/
$g_reporter_summary_limit = 10;
/**
* summary date displays
* date lengths to count bugs by (in days)
* @global array $g_date_partitions
*/
$g_date_partitions = array( 1, 2, 3, 7, 30, 60, 90, 180, 365);
/**
* shows project '[project] category' when 'All Projects' is selected
* otherwise only 'category name'
* @global int $g_summary_category_include_project
*/
$g_summary_category_include_project = OFF;
/**
* threshold for viewing summary
* @global int $g_view_summary_threshold
*/
$g_view_summary_threshold = MANAGER;
/**
* Define the multipliers which are used to determine the effectiveness
* of reporters based on the severity of bugs. Higher multipliers will
* result in an increase in reporter effectiveness.
* @global array $g_severity_multipliers
*/
$g_severity_multipliers = array( FEATURE => 1,
TRIVIAL => 2,
TEXT => 3,
TWEAK => 2,
MINOR => 5,
MAJOR => 8,
CRASH => 8,
BLOCK => 10 );
/**
* Define the resolutions which are used to determine the effectiveness
* of reporters based on the resolution of bugs. Higher multipliers will
* result in a decrease in reporter effectiveness. The only resolutions
* that need to be defined here are those which match or exceed
* $g_bug_resolution_not_fixed_threshold.
* @global array $g_resolution_multipliers
*/
$g_resolution_multipliers = array( UNABLE_TO_DUPLICATE => 2,
NOT_FIXABLE => 1,
DUPLICATE => 3,
NOT_A_BUG => 5,
SUSPENDED => 1,
WONT_FIX => 1 );
/*****************************
* MantisBT Bugnote Settings *
*****************************/
/**
* bugnote ordering
* change to ASC or DESC
* @global string $g_bugnote_order
*/
$g_bugnote_order = 'DESC';
/*********************************
* MantisBT Bug History Settings *
*********************************/
/**
* bug history visible by default when you view a bug
* change to ON or OFF
* @global int $g_history_default_visible
*/
$g_history_default_visible = ON;
/**
* bug history ordering
* change to ASC or DESC
* @global string $g_history_order
*/
$g_history_order = 'ASC';
/******************************
* MantisBT Reminder Settings *
******************************/
/**
* are reminders stored as bugnotes
* @global int $g_store_reminders
*/
$g_store_reminders = ON;
/**
* Automatically add recipients of reminders to monitor list, if they are not
* the handler or the reporter (since they automatically get notified, if required)
* If recipients of the reminders are below the monitor threshold, they will not be added.
* @global int $g_reminder_recipients_monitor_bug
*/
$g_reminder_recipients_monitor_bug = ON;
/**
* Default Reminder View Status (VS_PUBLIC or VS_PRIVATE)
* @global int $g_default_reminder_view_status
*/
$g_default_reminder_view_status = VS_PUBLIC;
/**
* The minimum access level required to show up in the list of users who can receive a reminder.
* The access level is that of the project to which the issue belongs.
* @global int $g_reminder_receive_threshold
*/
$g_reminder_receive_threshold = DEVELOPER;
/*********************************
* MantisBT Sponsorship Settings *
*********************************/
/**
* Whether to enable/disable the whole issue sponsorship feature
* @global int $g_enable_sponsorship
*/
$g_enable_sponsorship = OFF;
/**
* Currency used for all sponsorships.
* @global string $g_sponsorship_currency
*/
$g_sponsorship_currency = 'US$';
/**
* Access level threshold needed to view the total sponsorship for an issue by all users.
* @global int $g_view_sponsorship_total_threshold
*/
$g_view_sponsorship_total_threshold = VIEWER;
/**
* Access level threshold needed to view the users sponsoring an issue and the sponsorship
* amount for each.
* @global int $g_view_sponsorship_details_threshold
*/
$g_view_sponsorship_details_threshold = VIEWER;
/**
* Access level threshold needed to allow user to sponsor issues.
* @global int $g_sponsor_threshold
*/
$g_sponsor_threshold = REPORTER;
/**
* Access level required to be able to handle sponsored issues.
* @global int $g_handle_sponsored_bugs_threshold
*/
$g_handle_sponsored_bugs_threshold = DEVELOPER;
/**
* Access level required to be able to assign a sponsored issue to a user with access level
* greater or equal to 'handle_sponsored_bugs_threshold'.
* @global int $g_assign_sponsored_bugs_threshold
*/
$g_assign_sponsored_bugs_threshold = MANAGER;
/**
* Minimum sponsorship amount. If the user enters a value less than this, an error will be prompted.
* @global int $g_minimum_sponsorship_amount
*/
$g_minimum_sponsorship_amount = 5;
/*********************************
* MantisBT File Upload Settings *
*********************************/
/**
* --- file upload settings --------
* This is the master setting to disable *all* file uploading functionality
*
* If you want to allow file uploads, you must also make sure that they are
* enabled in php. You may need to add 'file_uploads = TRUE' to your php.ini
*
* See also: $g_upload_project_file_threshold, $g_upload_bug_file_threshold,
* $g_allow_reporter_upload
* @global int $g_allow_file_upload
*/
$g_allow_file_upload = ON;
/**
* Upload destination: specify actual location in project settings
* DISK, DATABASE, or FTP.
* @global int $g_file_upload_method
*/
$g_file_upload_method = DATABASE;
/**
* When using FTP or DISK for storing uploaded files, this setting control
* the access permissions they will have on the web server: with the default
* value (0400) files will be read-only, and accessible only by the user
* running the apache process (probably "apache" in Linux and "Administrator"
* in Windows).
* For more details on unix style permissions:
* http://www.perlfect.com/articles/chmod.shtml
* @global int $g_attachments_file_permissions
*/
$g_attachments_file_permissions = 0400;
/**
* FTP settings, used if $g_file_upload_method = FTP
* @global string $g_file_upload_ftp_server
*/
$g_file_upload_ftp_server = 'ftp.myserver.com';
/**
*
* @global string $g_file_upload_ftp_user
*/
$g_file_upload_ftp_user = 'readwriteuser';
/**
*
* @global string $g_file_upload_ftp_pass
*/
$g_file_upload_ftp_pass = 'readwritepass';
/**
* Maximum file size that can be uploaded
* Also check your PHP settings (default is usually 2MBs)
* @global int $g_max_file_size
*/
$g_max_file_size = 5000000;
/**
* Files that are allowed or not allowed. Separate items by commas.
* eg. 'php,html,java,exe,pl'
* if $g_allowed_files is filled in NO other file types will be allowed.
* $g_disallowed_files takes precedence over $g_allowed_files
* @global string $g_allowed_files
*/
$g_allowed_files = '';
/**
*
* @global string $g_disallowed_files
*/
$g_disallowed_files = '';
/**
* prefix to be used for the file system names of files uploaded to projects.
* Eg: doc-001-myprojdoc.zip
* @global string $g_document_files_prefix
*/
$g_document_files_prefix = 'doc';
/**
* absolute path to the default upload folder. Requires trailing / or \
* @global string $g_absolute_path_default_upload_folder
*/
$g_absolute_path_default_upload_folder = '';
/**************************
* MantisBT HTML Settings *
**************************/
/**
* html tags
* Set this flag to automatically convert www URLs and
* email adresses into clickable links
* @global int $g_html_make_links
*/
$g_html_make_links = ON;
/**
* These are the valid html tags for multi-line fields (e.g. description)
* do NOT include href or img tags here
* do NOT include tags that have parameters (eg. <font face="arial">)
* @global string $g_html_valid_tags
*/
$g_html_valid_tags = 'p, li, ul, ol, br, pre, i, b, u, em';
/**
* These are the valid html tags for single line fields (e.g. issue summary).
* do NOT include href or img tags here
* do NOT include tags that have parameters (eg. <font face="arial">)
* @global string $g_html_valid_tags_single_line
*/
$g_html_valid_tags_single_line = 'i, b, u, em';
/**
* maximum length of the description in a dropdown menu (for search)
* set to 0 to disable truncations
* @global int $g_max_dropdown_length
*/
$g_max_dropdown_length = 40;
/**
* This flag conntrolls whether pre-formatted text (delimited by <pre> tags
* is wrapped to a maximum linelength (defaults to 100 chars in strings_api)
* If turned off, the display may be wide when viewing the text
* @global int $g_wrap_in_preformatted_text
*/
$g_wrap_in_preformatted_text = ON;
/************************
* MantisBT HR Settings *
************************/
/**
* Horizontal Rule Size
* @global int $g_hr_size
*/
$g_hr_size = 1;
/**
* Horizontal Rule Width
* @global int $g_hr_width
*/
$g_hr_width = 50;
/**************************
* MantisBT LDAP Settings *
**************************/
/**
*
* @global string $g_ldap_server
*/
$g_ldap_server = 'ldaps://ldap.example.com.au/';
/**
* LDAP port (default 389). If this doesn't work, try 636.
*
* @global integer $g_ldap_port
*/
$g_ldap_port = 389;
/**
*
* @global string $g_ldap_root_dn
*/
$g_ldap_root_dn = 'dc=example,dc=com,dc=au';
/**
* e.g. '(organizationname=*Traffic)'
* @global string $g_ldap_organization
*/
$g_ldap_organization = '';
/**
* Use 'sAMAccountName' for Active Directory
* @global string $g_ldap_uid_field
*/
$g_ldap_uid_field = 'uid';
/**
* The LDAP field for real name (i.e. common name).
* @global string $g_ldap_uid_field
*/
$g_ldap_realname_field = 'cn';
/**
* The distinguished of the user account to use for binding to the LDAP server.
* For example, 'CN=ldap,OU=Administrators,DC=example,DC=com'.
*
* @global string $g_ldap_bind_dn
*/
$g_ldap_bind_dn = '';
/**
* The password for the service account to be used for connecting to the LDAP server.
*
* @global string $g_ldap_bind_passwd
*/
$g_ldap_bind_passwd = '';
/**
* Should we send to the LDAP email address or what MySql tells us
* @global int $g_use_ldap_email
*/
$g_use_ldap_email = OFF;
/**
* Whether or not to pull the real name from LDAP.
* ON from LDAP, OFF from database.
* @global int $g_use_ldap_realname
*/
$g_use_ldap_realname = OFF;
/**
* The LDAP Protocol Version, if 0, then the protocol version is not set. For Active Directory use version 3.
*
* @global int $g_ldap_protocol_version
*/
$g_ldap_protocol_version = 0;
/**
* Determines whether the LDAP library automatically follows referrals returned by LDAP servers or not.
* This maps to LDAP_OPT_REFERRALS ldap library option. For Active Directory, this should be set to OFF.
*
* @global int $g_ldap_follow_referrals
*/
$g_ldap_follow_referrals = ON;
/**
* For development purposes, this is a configuration option that allows replacing
* the ldap communication with a comma separated text file. The text file has a line per user.
* Each line includes: user name, user real name, email, password. For production
* systems this option should be set to ''.
*/
$g_ldap_simulation_file_path = '';
/*******************
* Status Settings *
*******************/
/**
* Status to assign to the bug when submitted.
* @global int $g_bug_submit_status
*/
$g_bug_submit_status = NEW_;
/**
* Status to assign to the bug when assigned.
* @global int $g_bug_assigned_status
*/
$g_bug_assigned_status = ASSIGNED;
/**
* Status to assign to the bug when reopened.
* @global int $g_bug_reopen_status
*/
$g_bug_reopen_status = FEEDBACK;
/**
* Status to assign to the bug when feedback is required from the issue reporter.
* Once the reporter adds a note the status moves back from feedback to $g_bug_assigned_status
* or $g_bug_submit_status.
* @global int $g_bug_feedback_status
*/
$g_bug_feedback_status = FEEDBACK;
/**
* Resolution to assign to the bug when reopened.
* @global int $g_bug_reopen_resolution
*/
$g_bug_reopen_resolution = REOPENED;
/**
* Bug becomes readonly if its status is >= this status. The bug becomes read/write again if re-opened and its
* status becomes less than this threshold.
* @global int $g_bug_readonly_status_threshold
*/
$g_bug_readonly_status_threshold = RESOLVED;
/**
* Bug is resolved, ready to be closed or reopened. In some custom installations a bug
* may be considered as resolved when it is moved to a custom (FIXED or TESTED) status.
* @global int $g_bug_resolved_status_threshold
*/
$g_bug_resolved_status_threshold = RESOLVED;
/**
* Threshold resolution which denotes that a bug has been resolved and
* successfully fixed by developers. Resolutions above this threshold
* and below $g_bug_resolution_not_fixed_threshold are considered to be
* resolved successfully.
* @global int $g_bug_resolution_fixed_threshold
*/
$g_bug_resolution_fixed_threshold = FIXED;
/**
* Threshold resolution which denotes that a bug has been resolved without
* being successfully fixed by developers. Resolutions above this
* threshold are considered to be resolved in an unsuccessful way.
* @global int $g_bug_resolution_not_fixed_threshold
*/
$g_bug_resolution_not_fixed_threshold = UNABLE_TO_DUPLICATE;
/**
* Bug is closed. In some custom installations a bug may be considered as closed when
* it is moved to a custom (COMPLETED or IMPLEMENTED) status.
* @global int $g_bug_closed_status_threshold
*/
$g_bug_closed_status_threshold = CLOSED;
/**
* Automatically set status to ASSIGNED whenever a bug is assigned to a person.
* This is useful for installations where assigned status is to be used when
* the bug is in progress, rather than just put in a person's queue.
* @global int $g_auto_set_status_to_assigned
*/
$g_auto_set_status_to_assigned = ON;
/**
* 'status_enum_workflow' defines the workflow, and reflects a simple
* 2-dimensional matrix. For each existing status, you define which
* statuses you can go to from that status, e.g. from NEW_ you might list statuses
* '10:new,20:feedback,30:acknowledged' but not higher ones.
* The following example can be transferred to config_inc.php
* $g_status_enum_workflow[NEW_]='20:feedback,30:acknowledged,40:confirmed,50:assigned,80:resolved';
* $g_status_enum_workflow[FEEDBACK] ='10:new,30:acknowledged,40:confirmed,50:assigned,80:resolved';
* $g_status_enum_workflow[ACKNOWLEDGED] ='20:feedback,40:confirmed,50:assigned,80:resolved';
* $g_status_enum_workflow[CONFIRMED] ='20:feedback,50:assigned,80:resolved';
* $g_status_enum_workflow[ASSIGNED] ='20:feedback,80:resolved,90:closed';
* $g_status_enum_workflow[RESOLVED] ='50:assigned,90:closed';
* $g_status_enum_workflow[CLOSED] ='50:assigned';
* @global array $g_status_enum_workflow
*/
$g_status_enum_workflow = array();
/****************************
* Bug Attachments Settings *
****************************/
/**
* Specify the filename of the magic database file. This is used by
* PHP 5.3.0 (or earlier versions with the fileinfo PECL extension) to
* guess what the MIME type of a file is. Usually it is safe to leave this
* setting as the default (blank) as PHP is usually able to find this file
* by itself.
* @global string $g_fileinfo_magic_db_file
*/
$g_fileinfo_magic_db_file = '';
/**
* Specifies the maximum size (in bytes) below which an attachment is
* previewed in the bug view pages.
* To disable the previewing of attachments, set max size to 0.
* @global int $g_preview_attachments_inline_max_size
*/
$g_preview_attachments_inline_max_size = 256 * 1024;
/**
* Extensions for text files that can be expanded inline.
* @global array $g_preview_text_extensions
*/
$g_preview_text_extensions = array( '', 'txt', 'diff', 'patch' );
/**
* setting encoding of the conversion future of the file.
* @see http://php.net/manual/ja/function.mb-convert-encoding.php
* @global string $g_preview_text_to_encoding
*/
$g_preview_text_to_encoding="";
# $g_preview_text_to_encoding="UTF-8";
/**
* setting encoding of the origin of conversion of the file.
* @see http://php.net/manual/ja/function.mb-convert-encoding.php
* @global string $g_preview_text_mixed_from_encoding
*/
$g_preview_text_mixed_from_encoding="SJIS, EUC-JP,UTF-8";
/**
* Extensions for images that can be expanded inline.
* @global array $g_preview_image_extensions
*/
$g_preview_image_extensions = array( 'bmp', 'png', 'gif', 'jpg', 'jpeg' );
/**
* Specifies the maximum width for the auto-preview feature. If no maximum width should be imposed
* then it should be set to 0.
* @global int $g_preview_max_width
*/
$g_preview_max_width = 0;
/**
* Specifies the maximum height for the auto-preview feature. If no maximum height should be imposed
* then it should be set to 0.
* @global int $g_preview_max_height
*/
$g_preview_max_height = 250;
/**
* Show an attachment indicator on bug list
* Show a clickable attachment indicator on the bug
* list page if the bug has one or more files attached.
* Note: This option is disabled by default since it adds
* 1 database query per bug listed and thus might slow
* down the page display.
*
* @global int $g_show_attachment_indicator
*/
$g_show_attachment_indicator = OFF;
/**
* access level needed to view bugs attachments. View means to see the file names
* sizes, and timestamps of the attachments.
* @global int $g_view_attachments_threshold
*/
$g_view_attachments_threshold = VIEWER;
/**
* list of filetypes to view inline. This is a string of extentions separated by commas
* This is used when downloading an attachment. Rather than downloading, the attachment
* is viewed in the browser.
* @global string $g_inline_file_exts
*/
$g_inline_file_exts = 'gif,png,jpg,jpeg,bmp';
/**
* access level needed to download bug attachments
* @global int $g_download_attachments_threshold
*/
$g_download_attachments_threshold = VIEWER;
/**
* access level needed to delete bug attachments
* @global int $g_delete_attachments_threshold
*/
$g_delete_attachments_threshold = DEVELOPER;
/**
* allow users to view attachments uploaded by themselves even if their access
* level is below view_attachments_threshold.
* @global int $g_allow_view_own_attachments
*/
$g_allow_view_own_attachments = ON;
/**
* allow users to download attachments uploaded by themselves even if their access
* level is below download_attachments_threshold.
* @global int $g_allow_download_own_attachments
*/
$g_allow_download_own_attachments = ON;
/**
* allow users to delete attachments uploaded by themselves even if their access
* level is below delete_attachments_threshold.
* @global int $g_allow_delete_own_attachments
*/
$g_allow_delete_own_attachments = OFF;
/**********************
* Field Visibility
**********************/
/**
* Enable or disable usage of the ETA field.
* @global int $g_enable_eta
*/
$g_enable_eta = OFF;
/**
* Enable or disable usage of the Projection field.
* @global int $g_enable_projection
*/
$g_enable_projection = OFF;
/**
* Enable or disable usage of the Product Build field.
* @global int $g_enable_product_build
*/
$g_enable_product_build = OFF;
/**
* An array of the fields to show on the bug report page.
*
* The following fields can not be included:
* BUG_FIELD_ID, BUG_FIELD_PROJECT, BUG_FIELD_DATE_SUBMITTED, BUG_FIELD_LAST_UPDATED, BUG_FIELD_STATUS,
* BUG_FIELD_RESOLUTION, BUG_FIELD_TAGS, BUG_FIELD_FIXED_IN_VERSION, BUG_FIELD_PROJECTION, BUG_FIELD_ETA,
* BUG_FIELD_REPORTER.
*
* The following fields must be included:
* BUG_FIELD_CATEGORY, BUG_FIELD_SUMMARY, BUG_FIELD_DESCRIPTION.
*
* To overload this setting per project, then the settings must be included in the database through
* the generic configuration form. Note that the array in the database should consistent of the values
* of the constants. For example, replace BUG_FIELD_CATEGORY with 'category_id'. See constant_inc.php
* for the values of the constants.
*
* @global array $g_bug_report_page_fields
*/
$g_bug_report_page_fields = array(
BUG_FIELD_CATEGORY,
BUG_FIELD_VIEW_STATE,
BUG_FIELD_HANDLER,
BUG_FIELD_PRIORITY,
BUG_FIELD_SEVERITY,
BUG_FIELD_REPRODUCIBILITY,
BUG_FIELD_PLATFORM,
BUG_FIELD_OS,
BUG_FIELD_OS_VERSION,
BUG_FIELD_PRODUCT_VERSION,
BUG_FIELD_PRODUCT_BUILD,
BUG_FIELD_TARGET_VERSION,
BUG_FIELD_SUMMARY,
BUG_FIELD_DESCRIPTION,
BUG_FIELD_ADDITIONAL_INFO,
BUG_FIELD_STEPS_TO_REPRODUCE,
BUG_FIELD_ATTACHMENTS,
BUG_FIELD_DUE_DATE,
);
/**
* An array of the fields to show on the bug view page.
*
* To overload this setting per project, then the settings must be included in the database through
* the generic configuration form. Note that the array in the database should consistent of the values
* of the constants. For example, replace BUG_FIELD_CATEGORY with 'category_id'. See constant_inc.php
* for the values of the constants.
*
* @global array $g_bug_view_page_fields
*/
$g_bug_view_page_fields = array (
BUG_FIELD_ID,
BUG_FIELD_PROJECT,
BUG_FIELD_CATEGORY,
BUG_FIELD_VIEW_STATE,
BUG_FIELD_DATE_SUBMITTED,
BUG_FIELD_LAST_UPDATED,
BUG_FIELD_REPORTER,
BUG_FIELD_HANDLER,
BUG_FIELD_PRIORITY,
BUG_FIELD_SEVERITY,
BUG_FIELD_REPRODUCIBILITY,
BUG_FIELD_STATUS,
BUG_FIELD_RESOLUTION,
BUG_FIELD_PROJECTION,
BUG_FIELD_ETA,
BUG_FIELD_PLATFORM,
BUG_FIELD_OS,
BUG_FIELD_OS_VERSION,
BUG_FIELD_PRODUCT_VERSION,
BUG_FIELD_PRODUCT_BUILD,
BUG_FIELD_TARGET_VERSION,
BUG_FIELD_FIXED_IN_VERSION,
BUG_FIELD_SUMMARY,
BUG_FIELD_DESCRIPTION,
BUG_FIELD_ADDITIONAL_INFO,
BUG_FIELD_STEPS_TO_REPRODUCE,
BUG_FIELD_TAGS,
BUG_FIELD_ATTACHMENTS,
BUG_FIELD_DUE_DATE,
);
/**
* An array of the fields to show on the bug print page.
* @global array $g_bug_print_page_fields
*/
$g_bug_print_page_fields = array (
BUG_FIELD_ID,
BUG_FIELD_PROJECT,
BUG_FIELD_CATEGORY,
BUG_FIELD_VIEW_STATE,
BUG_FIELD_DATE_SUBMITTED,
BUG_FIELD_LAST_UPDATED,
BUG_FIELD_REPORTER,
BUG_FIELD_HANDLER,
BUG_FIELD_PRIORITY,
BUG_FIELD_SEVERITY,
BUG_FIELD_REPRODUCIBILITY,
BUG_FIELD_STATUS,
BUG_FIELD_RESOLUTION,
BUG_FIELD_PROJECTION,
BUG_FIELD_ETA,
BUG_FIELD_PLATFORM,
BUG_FIELD_OS,
BUG_FIELD_OS_VERSION,
BUG_FIELD_PRODUCT_VERSION,
BUG_FIELD_PRODUCT_BUILD,
BUG_FIELD_TARGET_VERSION,
BUG_FIELD_FIXED_IN_VERSION,
BUG_FIELD_SUMMARY,
BUG_FIELD_DESCRIPTION,
BUG_FIELD_ADDITIONAL_INFO,
BUG_FIELD_STEPS_TO_REPRODUCE,
BUG_FIELD_TAGS,
BUG_FIELD_ATTACHMENTS,
BUG_FIELD_DUE_DATE,
);
/**
* An array of the fields to show on the bug update page.
*
* To overload this setting per project, then the settings must be included in the database through
* the generic configuration form. Note that the array in the database should consistent of the values
* of the constants. For example, replace BUG_FIELD_CATEGORY with 'category_id'. See constant_inc.php
* for the values of the constants.
*
* @global array $g_bug_update_page_fields
*/
$g_bug_update_page_fields = array (
BUG_FIELD_ID,
BUG_FIELD_PROJECT,
BUG_FIELD_CATEGORY,
BUG_FIELD_VIEW_STATE,
BUG_FIELD_DATE_SUBMITTED,
BUG_FIELD_LAST_UPDATED,
BUG_FIELD_REPORTER,
BUG_FIELD_HANDLER,
BUG_FIELD_PRIORITY,
BUG_FIELD_SEVERITY,
BUG_FIELD_REPRODUCIBILITY,
BUG_FIELD_STATUS,
BUG_FIELD_RESOLUTION,
BUG_FIELD_PROJECTION,
BUG_FIELD_ETA,
BUG_FIELD_PLATFORM,
BUG_FIELD_OS,
BUG_FIELD_OS_VERSION,
BUG_FIELD_PRODUCT_VERSION,
BUG_FIELD_PRODUCT_BUILD,
BUG_FIELD_TARGET_VERSION,
BUG_FIELD_FIXED_IN_VERSION,
BUG_FIELD_SUMMARY,
BUG_FIELD_DESCRIPTION,
BUG_FIELD_ADDITIONAL_INFO,
BUG_FIELD_STEPS_TO_REPRODUCE,
BUG_FIELD_ATTACHMENTS,
BUG_FIELD_DUE_DATE,
);
/**
* An array of the fields to show on the bug change status page.
*
* To overload this setting per project, then the settings must be included in the database through
* the generic configuration form. Note that the array in the database should consistent of the values
* of the constants. For example, replace BUG_FIELD_CATEGORY with 'category_id'. See constant_inc.php
* for the values of the constants.
*
* @global array $g_bug_change_status_page_fields
*/
$g_bug_change_status_page_fields = array (
BUG_FIELD_ID,
BUG_FIELD_PROJECT,
BUG_FIELD_CATEGORY,
BUG_FIELD_VIEW_STATE,
BUG_FIELD_DATE_SUBMITTED,
BUG_FIELD_LAST_UPDATED,
BUG_FIELD_REPORTER,
BUG_FIELD_HANDLER,
BUG_FIELD_PRIORITY,
BUG_FIELD_SEVERITY,
BUG_FIELD_REPRODUCIBILITY,
BUG_FIELD_STATUS,
BUG_FIELD_RESOLUTION,
BUG_FIELD_PROJECTION,
BUG_FIELD_ETA,
BUG_FIELD_PLATFORM,
BUG_FIELD_OS,
BUG_FIELD_OS_VERSION,
BUG_FIELD_PRODUCT_VERSION,
BUG_FIELD_PRODUCT_BUILD,
BUG_FIELD_TARGET_VERSION,
BUG_FIELD_FIXED_IN_VERSION,
BUG_FIELD_SUMMARY,
BUG_FIELD_DESCRIPTION,
BUG_FIELD_ADDITIONAL_INFO,
BUG_FIELD_STEPS_TO_REPRODUCE,
BUG_FIELD_TAGS,
BUG_FIELD_ATTACHMENTS,
BUG_FIELD_DUE_DATE,
);
/**************************
* MantisBT Misc Settings *
**************************/
/**
* access level needed to report a bug
* @global int $g_report_bug_threshold
*/
$g_report_bug_threshold = REPORTER;
/**
* access level needed to update bugs (i.e., the update_bug_page)
* This controls whether the user sees the "Update Bug" button in bug_view*_page
* and the pencil icon in view_all_bug_page
* @global int $g_update_bug_threshold
*/
$g_update_bug_threshold = UPDATER;
/**
* Access level needed to monitor bugs.
* Look in the constant_inc.php file if you want to set a different value.
* @global int $g_monitor_bug_threshold
*/
$g_monitor_bug_threshold = REPORTER;
/**
* Access level needed to add other users to the list of users monitoring
* a bug.
* Look in the constant_inc.php file if you want to set a different value.
* @global int $g_monitor_add_others_bug_threshold
*/
$g_monitor_add_others_bug_threshold = DEVELOPER;
/**
* Access level needed to delete other users from the list of users
* monitoring a bug.
* Look in the constant_inc.php file if you want to set a different value.
* @global int $g_monitor_add_others_bug_threshold
*/
$g_monitor_delete_others_bug_threshold = DEVELOPER;
/**
* access level needed to view private bugs
* Look in the constant_inc.php file if you want to set a different value
* @global int $g_private_bug_threshold
*/
$g_private_bug_threshold = DEVELOPER;
/**
* access level needed to be able to be listed in the assign to field.
* @global int $g_handle_bug_threshold
*/
$g_handle_bug_threshold = DEVELOPER;
/**
* access level needed to show the Assign To: button bug_view*_page or
* the Assigned list in bug_update*_page.
* This allows control over who can route bugs
* This defaults to $g_handle_bug_threshold
* @global int $g_update_bug_assign_threshold
*/
$g_update_bug_assign_threshold = '%handle_bug_threshold%';
/**
* access level needed to view private bugnotes
* Look in the constant_inc.php file if you want to set a different value
* @global int $g_private_bugnote_threshold
*/
$g_private_bugnote_threshold = DEVELOPER;
/**
* access level needed to view handler in bug reports and notification email
* @todo yarick123: now it is implemented for notification email only
* @global int $g_view_handler_threshold
*/
$g_view_handler_threshold = VIEWER;
/**
* access level needed to view history in bug reports and notification email
* @todo yarick123: now it is implemented for notification email only
* @global int $g_view_history_threshold
*/
$g_view_history_threshold = VIEWER;
/**
* access level needed to send a reminder from the bug view pages
* set to NOBODY to disable the feature
* @global int $g_bug_reminder_threshold
*/
$g_bug_reminder_threshold = DEVELOPER;
/**
* Access lever required to drop bug history revisions
* @global int $g_bug_revision_drop_threshold
*/
$g_bug_revision_drop_threshold = MANAGER;
/**
* access level needed to upload files to the project documentation section
* You can set this to NOBODY to prevent uploads to projects
* See also: $g_upload_bug_file_threshold, $g_allow_file_upload
* @global int $g_upload_project_file_threshold
*/
$g_upload_project_file_threshold = MANAGER;
/**
* access level needed to upload files to attach to a bug
* You can set this to NOBODY to prevent uploads to bugs but note that
* the reporter of the bug will still be able to upload unless you set
* $g_allow_reporter_upload or $g_allow_file_upload to OFF
* See also: $g_upload_project_file_threshold, $g_allow_file_upload,
* $g_allow_reporter_upload
* @global int $g_upload_bug_file_threshold
*/
$g_upload_bug_file_threshold = REPORTER;
/**
* Add bugnote threshold
* @global int $g_add_bugnote_threshold
*/
$g_add_bugnote_threshold = REPORTER;
/**
* Update bugnote threshold (if the bugnote is not your own)
* @global int $g_update_bugnote_threshold
*/
$g_update_bugnote_threshold = DEVELOPER;
/**
* Threshold needed to view project documentation
* @global int $g_view_proj_doc_threshold
*/
$g_view_proj_doc_threshold = ANYBODY;
/**
* Site manager
* @global int $g_manage_site_threshold
*/
$g_manage_site_threshold = MANAGER;
/**
* Threshold at which a user is considered to be a site administrator.
* These users have "superuser" access to all aspects of Mantis including
* the admin/ directory. WARNING: DO NOT CHANGE THIS VALUE UNLESS YOU
* ABSOLUTELY KNOW WHAT YOU'RE DOING! Users at this access level have the
* ability to damage your Mantis installation and data within the database.
* It is strongly advised you leave this option alone.
* @global int $g_admin_site_threshold
*/
$g_admin_site_threshold = ADMINISTRATOR;
/**
* Threshold needed to manage a project: edit project
* details (not to add/delete projects) ...etc.
* @global int $g_manage_project_threshold
*/
$g_manage_project_threshold = MANAGER;
/**
* Threshold needed to add/delete/modify news
* @global int $g_manage_news_threshold
*/
$g_manage_news_threshold = MANAGER;
/**
* Threshold required to delete a project
* @global int $g_delete_project_threshold
*/
$g_delete_project_threshold = ADMINISTRATOR;
/**
* Threshold needed to create a new project
* @global int $g_create_project_threshold
*/
$g_create_project_threshold = ADMINISTRATOR;
/**
* Threshold needed to be automatically included in private projects
* @global int $g_private_project_threshold
*/
$g_private_project_threshold = ADMINISTRATOR;
/**
* Threshold needed to manage user access to a project
* @global int $g_project_user_threshold
*/
$g_project_user_threshold = MANAGER;
/**
* Threshold needed to manage user accounts
* @global int $g_manage_user_threshold
*/
$g_manage_user_threshold = ADMINISTRATOR;
/**
* Delete bug threshold
* @global int $g_delete_bug_threshold
*/
$g_delete_bug_threshold = DEVELOPER;
/**
* Delete bugnote threshold
* @global string $g_delete_bugnote_threshold
*/
$g_delete_bugnote_threshold = '%delete_bug_threshold%';
/**
* Are users allowed to change and delete their own bugnotes?
* @global int $g_bugnote_allow_user_edit_delete
*/
$g_bugnote_allow_user_edit_delete = ON;
/**
* Move bug threshold
* @global int $g_move_bug_threshold
*/
$g_move_bug_threshold = DEVELOPER;
/**
* Threshold needed to set the view status while reporting a bug or a bug note.
* @global int $g_set_view_status_threshold
*/
$g_set_view_status_threshold = REPORTER;
/**
* Threshold needed to update the view status while updating a bug or a bug note.
* This threshold should be greater or equal to $g_set_view_status_threshold.
* @global int $g_change_view_status_threshold
*/
$g_change_view_status_threshold = UPDATER;
/**
* Threshold needed to show the list of users montoring a bug on the bug view pages.
* @global int $g_show_monitor_list_threshold
*/
$g_show_monitor_list_threshold = DEVELOPER;
/**
* Threshold needed to be able to use stored queries
* @global int $g_stored_query_use_threshold
*/
$g_stored_query_use_threshold = REPORTER;
/**
* Threshold needed to be able to create stored queries
* @global int $g_stored_query_create_threshold
*/
$g_stored_query_create_threshold = DEVELOPER;
/**
* Threshold needed to be able to create shared stored queries
* @global int $g_stored_query_create_shared_threshold
*/
$g_stored_query_create_shared_threshold = MANAGER;
/**
* Threshold needed to update readonly bugs. Readonly bugs are identified via
* $g_bug_readonly_status_threshold.
* @global int $g_update_readonly_bug_threshold
*/
$g_update_readonly_bug_threshold = MANAGER;
/**
* threshold for viewing changelog
* @global int $g_view_changelog_threshold
*/
$g_view_changelog_threshold = VIEWER;
/**
* threshold for viewing roadmap
* @global int $g_roadmap_view_threshold
*/
$g_roadmap_view_threshold = VIEWER;
/**
* threshold for updating roadmap, target_version, etc
* @global int $g_roadmap_update_threshold
*/
$g_roadmap_update_threshold = DEVELOPER;
/**
* status change thresholds
* @global int $g_update_bug_status_threshold
*/
$g_update_bug_status_threshold = DEVELOPER;
/**
* access level needed to re-open bugs
* @global int $g_reopen_bug_threshold
*/
$g_reopen_bug_threshold = DEVELOPER;
/**
* access level needed to assign bugs to unreleased product versions
* @global int $g_report_issues_for_unreleased_versions_threshold
*/
$g_report_issues_for_unreleased_versions_threshold = DEVELOPER;
/**
* access level needed to set a bug sticky
* @global int $g_set_bug_sticky_threshold
*/
$g_set_bug_sticky_threshold = MANAGER;
/**
* The minimum access level for someone to be a member of the development team
* and appear on the project information page.
* @global int $g_development_team_threshold
*/
$g_development_team_threshold = DEVELOPER;
/**
* this array sets the access thresholds needed to enter each status listed.
* if a status is not listed, it falls back to $g_update_bug_status_threshold
* example: $g_set_status_threshold = array( ACKNOWLEDGED => MANAGER, CONFIRMED => DEVELOPER, CLOSED => MANAGER );
* @global array $g_set_status_threshold
*/
$g_set_status_threshold = array();
/**
* Allow a bug to have no category
* @global int $g_allow_no_category
*/
$g_allow_no_category = OFF;
/**
* login method
* CRYPT or PLAIN or MD5 or LDAP or BASIC_AUTH
* You can simply change this at will. MantisBT will try to figure out how the passwords were encrypted.
* @global int $g_login_method
*/
$g_login_method = MD5;
/**
* limit reporters
* Set to ON if you wish to limit reporters to only viewing bugs that they report.
* @global int $g_limit_reporters
*/
$g_limit_reporters = OFF;
/**
* close immediately
* Allow developers and above to close bugs immediately when resolving bugs
* @global int $g_allow_close_immediately
*/
$g_allow_close_immediately = OFF;
/**
* reporter can close
* Allow reporters to close the bugs they reported, after they're marked resolved.
* @global int $g_allow_reporter_close
*/
$g_allow_reporter_close = OFF;
/**
* reporter can reopen
* Allow reporters to reopen the bugs they reported, after they're marked resolved.
* @global int $g_allow_reporter_reopen
*/
$g_allow_reporter_reopen = ON;
/**
* reporter can upload
* Allow reporters to upload attachments to bugs they reported.
* @global int $g_allow_reporter_upload
*/
$g_allow_reporter_upload = ON;
/**
* account delete
* Allow users to delete their own accounts
* @global int $g_allow_account_delete
*/
$g_allow_account_delete = OFF;
/**
* Enable anonymous access to Mantis. You must also specify
* $g_anonymous_account as the account which anonymous users will browse
* Mantis with. The default setting is OFF.
* @global int $g_allow_anonymous_login
*/
$g_allow_anonymous_login = OFF;
/**
* Define the account which anonymous users will assume when using Mantis.
* You only need to define this setting when $g_allow_anonymous_login is
* set to ON. This account will always be treated as a protected account
* and thus anonymous users will not be able to update the preferences or
* settings of this account. It is suggested that the access level of this
* account have read only access to your Mantis installation (VIEWER).
* Please read the documentation on this topic before setting up anonymous
* access to your Mantis installation.
* @global string $g_anonymous_account
*/
$g_anonymous_account = '';
/**
* CVS linking
* insert the URL to your CVSweb or ViewCVS
* eg: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/mantisbt/mantisbt/
* @global string $g_cvs_web
*/
$g_cvs_web = '';
/**
* For open source projects it is expected that the notes be public, however,
* for non-open source it will probably be VS_PRIVATE.
* @global int $g_source_control_notes_view_status
*/
$g_source_control_notes_view_status = VS_PRIVATE;
/**
* Account to be used by the source control script. The account must be enabled
* and must have the appropriate access level to add notes to all issues even
* private ones (DEVELOPER access recommended).
* @global string $g_source_control_account
*/
$g_source_control_account = '';
/**
* If set to a status, then after a checkin with a log message that matches the regular expression in
* $g_source_control_fixed_regexp, the issue status is set to the specified status. If set to OFF, the
* issue status is not changed.
* @global int $g_source_control_set_status_to
*/
$g_source_control_set_status_to = OFF;
/**
* Whenever an issue status is set to $g_source_control_set_status_to, the issue resolution is set to
* the value specified for this configuration.
* @global int $g_source_control_set_resolution_to
*/
$g_source_control_set_resolution_to = FIXED;
/**
* Regular expression used to detect issue ids within checkin comments.
* see preg_match_all() documentation at
* http://www.php.net/manual/en/function.preg-match-all.php
* @global string $g_source_control_regexp
*/
$g_source_control_regexp = "/\bissue [#]{0,1}(\d+)\b/i";
/**
* Regular expression used to detect the fact that an issue is fixed and extracts
* its issue id. If there is a match to this regular expression, then the issue
* will be marked as resolved and the resolution will be set to fixed.
* @global string $g_source_control_fixed_regexp
*/
$g_source_control_fixed_regexp = "%source_control_regexp%";
/**
* Bug Linking
* if a number follows this tag it will create a link to a bug.
* eg. for # a link would be #45
* eg. for bug: a link would be bug:98
* @global string $g_bug_link_tag
*/
$g_bug_link_tag = '#';
/**
* Bugnote Linking
* if a number follows this tag it will create a link to a bugnote.
* eg. for ~ a link would be ~45
* eg. for bugnote: a link would be bugnote:98
* @global string $g_bugnote_link_tag
*/
$g_bugnote_link_tag = '~';
/**
* Bug Count Linking
* this is the prefix to use when creating links to bug views from bug counts (eg. on the main
* page and the summary page).
* Default is a temporary filter
* only change the filter this time - 'view_all_set.php?type=1&temporary=y'
* permanently change the filter - 'view_all_set.php?type=1';
* @global string $g_bug_count_hyperlink_prefix
*/
$g_bug_count_hyperlink_prefix = 'view_all_set.php?type=1&temporary=y';
/**
* The regular expression to use when validating new user login names
* The default regular expression allows a-z, A-Z, 0-9, +, -, dot, space and
* underscore. If you change this, you may want to update the
* ERROR_USER_NAME_INVALID string in the language files to explain
* the rules you are using on your site
* See http://en.wikipedia.org/wiki/Regular_Expression for more details about regular expressions.
* For testing regular expressions, use http://rubular.com/.
* @global string $g_user_login_valid_regex
*/
$g_user_login_valid_regex = '/^([a-z\d\-.+_ ]+(@[a-z\d\-.]+\.[a-z]{2,4})?)$/i';
/**
* Default user name prefix used to filter the list of users in
* manage_user_page.php. Change this to 'A' (or any other
* letter) if you have a lot of users in the system and loading
* the manage users page takes a long time.
* @global string $g_default_manage_user_prefix
*/
$g_default_manage_user_prefix = 'ALL';
/**
* Default tag prefix used to filter the list of tags in
* manage_tags_page.php. Change this to 'A' (or any other
* letter) if you have a lot of tags in the system and loading
* the manage tags page takes a long time.
* @global string $g_default_manage_tag_prefix
*/
$g_default_manage_tag_prefix = 'ALL';
/**
* CSV Export
* Set the csv separator
* @global string $g_csv_separator
*/
$g_csv_separator = ',';
/**
* threshold for users to view the system configurations
* @global int $g_view_configuration_threshold
*/
$g_view_configuration_threshold = DEVELOPER;
/**
* threshold for users to set the system configurations generically via MantisBT web interface.
* WARNING: Users who have access to set configuration via the interface MUST be trusted. This is due
* to the fact that such users can set configurations to PHP code and hence there can be a security
* risk if such users are not trusted.
* @global int $g_set_configuration_threshold
*/
$g_set_configuration_threshold = ADMINISTRATOR;
/************************************
* MantisBT Look and Feel Variables *
************************************/
/**
* status color codes, using the Tango color palette
* @global array $g_status_colors
*/
$g_status_colors = array( 'new' => '#fcbdbd', // red (scarlet red #ef2929)
'feedback' => '#e3b7eb', // purple (plum #75507b)
'acknowledged' => '#ffcd85', // orange (orango #f57900)
'confirmed' => '#fff494', // yellow (butter #fce94f)
'assigned' => '#c2dfff', // blue (sky blue #729fcf)
'resolved' => '#d2f5b0', // green (chameleon #8ae234)
'closed' => '#c9ccc4'); // grey (aluminum #babdb6)
/**
* The padding level when displaying project ids
* The bug id will be padded with 0's up to the size given
* @global int $g_display_project_padding
*/
$g_display_project_padding = 3;
/**
* The padding level when displaying bug ids
* The bug id will be padded with 0's up to the size given
* @global int $g_display_bug_padding
*/
$g_display_bug_padding = 7;
/**
* The padding level when displaying bugnote ids
* The bugnote id will be padded with 0's up to the size given
* @global int $g_display_bugnote_padding
*/
$g_display_bugnote_padding = 7;
/**
* colours for configuration display
* @global string $g_colour_project
*/
$g_colour_project = 'LightGreen';
/**
* colours for configuration display
* @global string $g_colour_global
*/
$g_colour_global = 'LightBlue';
/*****************************
* MantisBT Cookie Variables *
*****************************/
/**
* --- cookie path ---------------
* set this to something more restrictive if needed
* http://www.php.net/manual/en/function.setcookie.php
* @global string $g_cookie_path
*/
$g_cookie_path = '/';
/**
*
* @global string $g_cookie_domain
*/
$g_cookie_domain = '';
/**
* cookie version for view_all_page
* @global string $g_cookie_version
*/
$g_cookie_version = 'v8';
/**
* --- cookie prefix ---------------
* set this to a unique identifier. No spaces.
* @global string $g_cookie_prefix
*/
$g_cookie_prefix = 'MANTIS';
/**
*
* @global string $g_string_cookie
*/
$g_string_cookie = '%cookie_prefix%_STRING_COOKIE';
/**
*
* @global string $g_project_cookie
*/
$g_project_cookie = '%cookie_prefix%_PROJECT_COOKIE';
/**
*
* @global string $g_view_all_cookie
*/
$g_view_all_cookie = '%cookie_prefix%_VIEW_ALL_COOKIE';
/**
*
* @global string $g_manage_cookie
*/
$g_manage_cookie = '%cookie_prefix%_MANAGE_COOKIE';
/**
*
* @global string $g_logout_cookie
*/
$g_logout_cookie = '%cookie_prefix%_LOGOUT_COOKIE';
/**
*
* @global string $g_bug_list_cookie
*/
$g_bug_list_cookie = '%cookie_prefix%_BUG_LIST_COOKIE';
/*****************************
* MantisBT Filter Variables *
*****************************/
/**
*
* @global int $g_filter_by_custom_fields
*/
$g_filter_by_custom_fields = ON;
/**
*
* @global int $g_filter_custom_fields_per_row
*/
$g_filter_custom_fields_per_row = 8;
/**
*
* @global int $g_view_filters
*/
$g_view_filters = SIMPLE_DEFAULT;
/**
* This switch enables the use of xmlhttprequest protocol to speed up the filter display.
* Rather than launching a separate page, the filters are updated in-line in the
* view_all_bugs_page.
* @global int $g_dhtml_filters
*/
$g_dhtml_filters = ON;
/**
* The threshold required for users to be able to create permalinks. To turn of this feature use NOBODY.
* @global int $g_create_permalink_threshold
*/
$g_create_permalink_threshold = DEVELOPER;
/**
* The service to use to create a short URL. The %s will be replaced by the long URL.
* To disable the feature set to ''.
* @global string $g_create_short_url
*/
$g_create_short_url = 'http://tinyurl.com/create.php?url=%s';
/*************************************
* MantisBT Database Table Variables *
*************************************/
/**
* table prefix
* @global string $g_db_table_prefix
*/
$g_db_table_prefix = 'mantis';
/**
* table suffix
* @global string $g_db_table_suffix
*/
$g_db_table_suffix = '_table';
/**
* table names
* @global array $g_db_table
*/
$g_db_table['mantis_bug_file_table'] = '%db_table_prefix%_bug_file%db_table_suffix%';
$g_db_table['mantis_bug_history_table'] = '%db_table_prefix%_bug_history%db_table_suffix%';
$g_db_table['mantis_bug_monitor_table'] = '%db_table_prefix%_bug_monitor%db_table_suffix%';
$g_db_table['mantis_bug_relationship_table'] = '%db_table_prefix%_bug_relationship%db_table_suffix%';
$g_db_table['mantis_bug_revision_table'] = '%db_table_prefix%_bug_revision%db_table_suffix%';
$g_db_table['mantis_bug_table'] = '%db_table_prefix%_bug%db_table_suffix%';
$g_db_table['mantis_bug_tag_table'] = '%db_table_prefix%_bug_tag%db_table_suffix%';
$g_db_table['mantis_bug_text_table'] = '%db_table_prefix%_bug_text%db_table_suffix%';
$g_db_table['mantis_bugnote_table'] = '%db_table_prefix%_bugnote%db_table_suffix%';
$g_db_table['mantis_bugnote_text_table'] = '%db_table_prefix%_bugnote_text%db_table_suffix%';
$g_db_table['mantis_category_table'] = '%db_table_prefix%_category%db_table_suffix%';
$g_db_table['mantis_news_table'] = '%db_table_prefix%_news%db_table_suffix%';
$g_db_table['mantis_plugin_table'] = '%db_table_prefix%_plugin%db_table_suffix%';
$g_db_table['mantis_project_category_table'] = '%db_table_prefix%_project_category%db_table_suffix%';
$g_db_table['mantis_project_file_table'] = '%db_table_prefix%_project_file%db_table_suffix%';
$g_db_table['mantis_project_table'] = '%db_table_prefix%_project%db_table_suffix%';
$g_db_table['mantis_project_user_list_table'] = '%db_table_prefix%_project_user_list%db_table_suffix%';
$g_db_table['mantis_project_version_table'] = '%db_table_prefix%_project_version%db_table_suffix%';
$g_db_table['mantis_tag_table'] = '%db_table_prefix%_tag%db_table_suffix%';
$g_db_table['mantis_user_table'] = '%db_table_prefix%_user%db_table_suffix%';
$g_db_table['mantis_user_profile_table'] = '%db_table_prefix%_user_profile%db_table_suffix%';
$g_db_table['mantis_user_pref_table'] = '%db_table_prefix%_user_pref%db_table_suffix%';
$g_db_table['mantis_user_print_pref_table'] = '%db_table_prefix%_user_print_pref%db_table_suffix%';
$g_db_table['mantis_custom_field_project_table'] = '%db_table_prefix%_custom_field_project%db_table_suffix%';
$g_db_table['mantis_custom_field_table'] = '%db_table_prefix%_custom_field%db_table_suffix%';
$g_db_table['mantis_custom_field_string_table'] = '%db_table_prefix%_custom_field_string%db_table_suffix%';
$g_db_table['mantis_upgrade_table'] = '%db_table_prefix%_upgrade%db_table_suffix%';
$g_db_table['mantis_filters_table'] = '%db_table_prefix%_filters%db_table_suffix%';
$g_db_table['mantis_sponsorship_table'] = '%db_table_prefix%_sponsorship%db_table_suffix%';
$g_db_table['mantis_tokens_table'] = '%db_table_prefix%_tokens%db_table_suffix%';
$g_db_table['mantis_project_hierarchy_table'] = '%db_table_prefix%_project_hierarchy%db_table_suffix%';
$g_db_table['mantis_config_table'] = '%db_table_prefix%_config%db_table_suffix%';
$g_db_table['mantis_email_table'] = '%db_table_prefix%_email%db_table_suffix%';
/*************************
* MantisBT Enum Strings *
*************************/
/**
* status from $g_status_index-1 to 79 are used for the onboard customization (if enabled)
* directly use MantisBT to edit them.
* @global string $g_access_levels_enum_string
*/
$g_access_levels_enum_string = '10:viewer,25:reporter,40:updater,55:developer,70:manager,90:administrator';
/**
*
* @global string $g_project_status_enum_string
*/
$g_project_status_enum_string = '10:development,30:release,50:stable,70:obsolete';
/**
*
* @global string $g_project_view_state_enum_string
*/
$g_project_view_state_enum_string = '10:public,50:private';
/**
*
* @global string $g_view_state_enum_string
*/
$g_view_state_enum_string = '10:public,50:private';
/**
*
* @global string $g_priority_enum_string
*/
$g_priority_enum_string = '10:none,20:low,30:normal,40:high,50:urgent,60:immediate';
/**
*
* @global string $g_severity_enum_string
*/
$g_severity_enum_string = '10:feature,20:trivial,30:text,40:tweak,50:minor,60:major,70:crash,80:block';
/**
*
* @global string $g_reproducibility_enum_string
*/
$g_reproducibility_enum_string = '10:always,30:sometimes,50:random,70:have not tried,90:unable to duplicate,100:N/A';
/**
*
* @global string $g_status_enum_string
*/
$g_status_enum_string = '10:new,20:feedback,30:acknowledged,40:confirmed,50:assigned,80:resolved,90:closed';
/**
* @@@ for documentation, the values in this list are also used to define variables in the language files
* (e.g., $s_new_bug_title referenced in bug_change_status_page.php )
* Embedded spaces are converted to underscores (e.g., "working on" references $s_working_on_bug_title).
* they are also expected to be english names for the states
* @global string $g_resolution_enum_string
*/
$g_resolution_enum_string = '10:open,20:fixed,30:reopened,40:unable to duplicate,50:not fixable,60:duplicate,70:not a bug,80:suspended,90:wont fix';
/**
*
* @global string $g_projection_enum_string
*/
$g_projection_enum_string = '10:none,30:tweak,50:minor fix,70:major rework,90:redesign';
/**
*
* @global string $g_eta_enum_string
*/
$g_eta_enum_string = '10:none,20:< 1 day,30:2-3 days,40:< 1 week,50:< 1 month,60:> 1 month';
/**
*
* @global string $g_sponsorship_enum_string
*/
$g_sponsorship_enum_string = '0:Unpaid,1:Requested,2:Paid';
/**
*
* @global string $g_custom_field_type_enum_string
*/
$g_custom_field_type_enum_string = '0:string,1:numeric,2:float,3:enum,4:email,5:checkbox,6:list,7:multiselection list,8:date,9:radio';
/*********************************
* MantisBT Javascript Variables *
*********************************/
/**
* allow the use of Javascript?
* @global int $g_use_javascript
*/
$g_use_javascript = ON;
/*******************************
* MantisBT Speed Optimisation *
*******************************/
/**
* Use compression of generated html if browser supports it
* If you already have compression enabled in your php.ini file
* (either with zlib.output_compression or
* output_handler=ob_gzhandler) this option will be ignored.
*
* If you do not have zlib enabled in your PHP installation
* this option will also be ignored. PHP 4.3.0 and later have
* zlib included by default. Windows users should uncomment
* the appropriate line in their php.ini files to load
* the zlib DLL. You can check what extensions are loaded
* by running "php -m" at the command line (look for 'zlib')
* @global int $g_compress_html
*/
$g_compress_html = ON;
/**
* Use persistent database connections
* @global int $g_use_persistent_connections
*/
$g_use_persistent_connections = OFF;
/*****************
* Include files *
*****************/
/**
* Specify your top/bottom include file (logos, banners, etc)
* @global string $g_bottom_include_page
*/
$g_bottom_include_page = '%absolute_path%';
/**
* Specify your top/bottom include file (logos, banners, etc)
* if a top file is supplied, the default MantisBT logo at the top will be hidden
* @global string $g_top_include_page
*/
$g_top_include_page = '%absolute_path%';
/**
* CSS file
* @global string $g_css_include_file
*/
$g_css_include_file = 'css/default.css';
/**
* RTL CSS file
* @global string $g_css_rtl_include_file
*/
$g_css_rtl_include_file = 'css/rtl.css';
/**
* meta tags
* @global string $g_meta_include_file
*/
$g_meta_include_file = '%absolute_path%meta_inc.php';
/****************
* Redirections *
****************/
/**
* Default page after Login or Set Project
* @global string $g_default_home_page
*/
$g_default_home_page = 'my_view_page.php';
/**
* Specify where the user should be sent after logging out.
* @global string $g_logout_redirect_page
*/
$g_logout_redirect_page = 'login_page.php';
/***********
* Headers *
***********/
/**
* An array of headers to be sent with each page.
* For example, to allow your MantisBT installation to be viewed in a frame in IE 6
* when the frameset is not at the same hostname as the MantisBT install, you need
* to add a P3P header. You could try something like 'P3P: CP="CUR ADM"' in your
* config file, but make sure to check that the your policy actually matches with
* what you are promising. See
* http://msdn.microsoft.com/en-us/library/ms537343.aspx
* for more information.
* @global array $g_custom_headers
*/
$g_custom_headers = array();
/**
* Browser Caching Control
* By default, we try to prevent the browser from caching anything. These two settings
* will defeat this for some cases.
*
* Browser Page caching - This will allow the browser to cache all pages. The upside will
* be better performance, but there may be cases where obsolete information is displayed.
* Note that this will be bypassed (and caching is allowed) for the bug report pages.
*
* @global int $g_allow_browser_cache
*/
// $g_allow_browser_cache = ON;
/**
* File caching - This will allow the browser to cache downloaded files. Without this set,
* there may be issues with IE receiving files, and launching support programs.
* @global int $g_allow_file_cache
*/
// $g_allow_file_cache = ON;
/*****************
* Custom Fields *
*****************/
/**
* Threshold needed to manage custom fields
* @global int $g_manage_custom_fields_threshold
*/
$g_manage_custom_fields_threshold = ADMINISTRATOR;
/**
* Threshold needed to link/unlink custom field to/from a project
* @global int $g_custom_field_link_threshold
*/
$g_custom_field_link_threshold = MANAGER;
/**
* Whether to start editng a custom field immediately after creating it
* @global int $g_custom_field_edit_after_create
*/
$g_custom_field_edit_after_create = ON;
/****************
* Custom Menus *
****************/
/**
* Add custom options to the main menu. For example:
* $g_main_menu_custom_options = array( array( "My Link", MANAGER, 'my_link.php' ),
* array( "My Link2", ADMINISTRATOR, 'my_link2.php' ) );
* Note that if the caption is found in custom_strings_inc.php, then it will be replaced by the
* translated string. Options will only be added to the menu if the current logged in user has
* the appropriate access level.
* @global array $g_main_menu_custom_options
*/
$g_main_menu_custom_options = array();
/*********
* Icons *
*********/
/**
* Maps a file extension to a file type icon. These icons are printed
* next to project documents and bug attachments.
* Note:
* - Extensions must be in lower case
* - All icons will be displayed as 16x16 pixels.
* @global array $g_file_type_icons
*/
$g_file_type_icons = array(
'' => 'text.gif',
'7z' => 'zip.gif',
'ace' => 'zip.gif',
'arj' => 'zip.gif',
'bz2' => 'zip.gif',
'c' => 'cpp.gif',
'chm' => 'chm.gif',
'cpp' => 'cpp.gif',
'css' => 'css.gif',
'csv' => 'csv.gif',
'cxx' => 'cpp.gif',
'diff' => 'text.gif',
'doc' => 'doc.gif',
'docx' => 'doc.gif',
'dot' => 'doc.gif',
'eml' => 'eml.gif',
'htm' => 'html.gif',
'html' => 'html.gif',
'gif' => 'gif.gif',
'gz' => 'zip.gif',
'jpe' => 'jpg.gif',
'jpg' => 'jpg.gif',
'jpeg' => 'jpg.gif',
'log' => 'text.gif',
'lzh' => 'zip.gif',
'mhtml' => 'html.gif',
'mid' => 'mid.gif',
'midi' => 'mid.gif',
'mov' => 'mov.gif',
'msg' => 'eml.gif',
'one' => 'one.gif',
'patch' => 'text.gif',
'pcx' => 'pcx.gif',
'pdf' => 'pdf.gif',
'png' => 'png.gif',
'pot' => 'pot.gif',
'pps' => 'pps.gif',
'ppt' => 'ppt.gif',
'pptx' => 'ppt.gif',
'pub' => 'pub.gif',
'rar' => 'zip.gif',
'reg' => 'reg.gif',
'rtf' => 'doc.gif',
'tar' => 'zip.gif',
'tgz' => 'zip.gif',
'txt' => 'text.gif',
'uc2' => 'zip.gif',
'vsd' => 'vsd.gif',
'vsl' => 'vsl.gif',
'vss' => 'vsd.gif',
'vst' => 'vst.gif',
'vsu' => 'vsd.gif',
'vsw' => 'vsd.gif',
'vsx' => 'vsd.gif',
'vtx' => 'vst.gif',
'wav' => 'wav.gif',
'wbk' => 'wbk.gif',
'wma' => 'wav.gif',
'wmv' => 'mov.gif',
'wri' => 'wri.gif',
'xlk' => 'xls.gif',
'xls' => 'xls.gif',
'xlsx' => 'xls.gif',
'xlt' => 'xlt.gif',
'xml' => 'xml.gif',
'zip' => 'zip.gif',
'?' => 'generic.gif' );
/**
* Icon associative arrays
* Status to icon mapping
* @global array $g_status_icon_arr
*/
$g_status_icon_arr = array (
NONE => '',
LOW => 'priority_low_1.gif',
NORMAL => 'priority_normal.gif',
HIGH => 'priority_1.gif',
URGENT => 'priority_2.gif',
IMMEDIATE => 'priority_3.gif'
);
/**
* Sort direction to icon mapping
* @global array $g_sort_icon_arr
*/
$g_sort_icon_arr = array (
ASCENDING => 'up.gif',
DESCENDING => 'down.gif'
);
/**
* Read status to icon mapping
* @global array $g_unread_icon_arr
*/
$g_unread_icon_arr = array (
READ => 'mantis_space.gif',
UNREAD => 'unread.gif'
);
/********************
* My View Settings *
********************/
/**
* Number of bugs shown in each box
* @global int $g_my_view_bug_count
*/
$g_my_view_bug_count = 10;
/**
* Boxes to be shown and their order
* A box that is not to be shown can have its value set to 0
* @global array $g_my_view_boxes
*/
$g_my_view_boxes = array (
'assigned' => '1',
'unassigned' => '2',
'reported' => '3',
'resolved' => '4',
'recent_mod' => '5',
'monitored' => '6',
'feedback' => '0',
'verify' => '0',
'my_comments' => '0'
);
/**
* Toggle whether 'My View' boxes are shown in a fixed position (i.e. adjacent boxes start at the same vertical position)
* @global int $g_my_view_boxes_fixed_position
*/
$g_my_view_boxes_fixed_position = ON;
/*************
* RSS Feeds *
*************/
/**
* This flag enables or disables RSS syndication. In the case where RSS syndication is not used,
* it is recommended to set it to OFF.
* @global int $g_rss_enabled
*/
$g_rss_enabled = ON;
/**
* This seed is used as part of the inputs for calculating the authentication key for the RSS feeds.
* If this seed changes, all the existing keys for the RSS feeds will become invalid. This is
* defaulted to the database user name, but it is recommended to overwrite it with a specific value
* on installation.
* @global string $g_rss_key_seed
*/
$g_rss_key_seed = '%db_username%';
/*********************
* Bug Relationships *
*********************/
/**
* Enable relationship graphs support.
* Show issue relationships using graphs.
*
* In order to use this feature, you must first install either GraphViz
* (all OSs except Windows) or WinGraphviz (only Windows).
*
* Graphviz homepage: http://www.research.att.com/sw/tools/graphviz/
* WinGraphviz homepage: http://home.so-net.net.tw/oodtsen/wingraphviz/
*
* Refer to the notes near the top of core/graphviz_api.php and
* core/relationship_graph_api.php for more information.
* @global int $g_relationship_graph_enable
*/
$g_relationship_graph_enable = OFF;
/**
* Font name and size, as required by Graphviz. If Graphviz fails to run
* for you, you are probably using a font name that gd can't find. On
* Linux, try the name of the font file without the extension.
* @global string $g_relationship_graph_fontname
*/
$g_relationship_graph_fontname = 'Arial';
/**
*
* @global int $g_relationship_graph_fontsize
*/
$g_relationship_graph_fontsize = 8;
/**
* Default dependency orientation. If you have issues with lots of childs
* or parents, leave as 'horizontal', otherwise, if you have lots of
* "chained" issue dependencies, change to 'vertical'.
* @global string $g_relationship_graph_orientation
*/
$g_relationship_graph_orientation = 'horizontal';
/**
* Max depth for relation graphs. This only affects relation graphs,
* dependency graphs are drawn to the full depth. A value of 3 is already
* enough to show issues really unrelated to the one you are currently
* viewing.
* @global int $g_relationship_graph_max_depth
*/
$g_relationship_graph_max_depth = 2;
/**
* If set to ON, clicking on an issue on the relationship graph will open
* the bug view page for that issue, otherwise, will navigate to the
* relationship graph for that issue.
*
* @global int $g_relationship_graph_view_on_click
*/
$g_relationship_graph_view_on_click = OFF;
/**
* Complete path to dot and neato tools. Your webserver must have execute
* permission to these programs in order to generate relationship graphs.
* NOTE: These are meaningless under Windows! Just ignore them!
* @global string $g_dot_tool
*/
$g_dot_tool = '/usr/bin/dot';
/**
* Complete path to dot and neato tools. Your webserver must have execute
* permission to these programs in order to generate relationship graphs.
* NOTE: These are meaningless under Windows! Just ignore them!
* @global string $g_neato_tool
*/
$g_neato_tool = '/usr/bin/neato';
/**
* Number of years in the past that custom date fields will display in
* drop down boxes.
* @global int $g_backward_year_count
*/
$g_backward_year_count = 4;
/**
* Number of years in the future that custom date fields will display in
* drop down boxes.
* @global int $g_forward_year_count
*/
$g_forward_year_count = 4;
/**
* Custom Group Actions
*
* This extensibility model allows developing new group custom actions. This
* can be implemented with a totally custom form and action pages or with a
* pre-implemented form and action page and call-outs to some functions. These
* functions are to be implemented in a predefined file whose name is based on
* the action name. For example, for an action to add a note, the action would
* be EXT_ADD_NOTE and the file implementing it would be bug_actiongroup_add_note_inc.php.
* See implementation of this file for details.
*
* Sample:
*
* array(
* array( 'action' => 'my_custom_action',
* 'label' => 'my_label', // string to be passed to lang_get_defaulted()
* 'form_page' => 'my_custom_action_page.php',
* 'action_page' => 'my_custom_action.php'
* )
* array( 'action' => 'my_custom_action2',
* 'form_page' => 'my_custom_action2_page.php',
* 'action_page' => 'my_custom_action2.php'
* )
* array( 'action' => 'EXT_ADD_NOTE', // you need to implement bug_actiongroup_<action_without_'EXT_')_inc.php
* 'label' => 'actiongroup_menu_add_note' // see strings_english.txt for this label
* )
* );
* @global array $g_custom_group_actions
*/
$g_custom_group_actions = array();
/********************
* Wiki Integration *
********************/
/**
* Wiki Integration Enabled?
* @global int $g_wiki_enable
*/
$g_wiki_enable = OFF;
/**
* Wiki Engine (supported engines: 'dokuwiki', 'mediawiki', 'twiki', 'wikka', 'xwiki')
* @global string $g_wiki_engine
*/
$g_wiki_engine = '';
/**
* Wiki namespace to be used as root for all pages relating to this MantisBT installation.
* @global string $g_wiki_root_namespace
*/
$g_wiki_root_namespace = 'mantis';
/**
* URL under which the wiki engine is hosted. Must be on the same server.
* @global string $g_wiki_engine_url
*/
$g_wiki_engine_url = $t_protocol . '://' . $t_host . '/%wiki_engine%/';
/********************
* Recently Visited *
********************/
/**
* Whether to show the most recently visited issues or not. At the moment we always track them even if this flag is off.
* @global int $g_recently_visited
*/
$g_recently_visited = ON;
/**
* The maximum number of issues to keep in the recently visited list.
* @global int $g_recently_visited_count
*/
$g_recently_visited_count = 5;
/***************
* Bug Tagging *
***************/
/**
* String that will separate tags as entered for input
* @global int $g_tag_separator
*/
$g_tag_separator = ',';
/**
* Access level required to view tags attached to a bug
* @global int $g_tag_view_threshold
*/
$g_tag_view_threshold = VIEWER;
/**
* Access level required to attach tags to a bug
* @global int $g_tag_attach_threshold
*/
$g_tag_attach_threshold = REPORTER;
/**
* Access level required to detach tags from a bug
* @global int $g_tag_detach_threshold
*/
$g_tag_detach_threshold = DEVELOPER;
/**
* Access level required to detach tags attached by the same user
* @global int $g_tag_detach_own_threshold
*/
$g_tag_detach_own_threshold = REPORTER;
/**
* Access level required to create new tags
* @global int $g_tag_create_threshold
*/
$g_tag_create_threshold = REPORTER;
/**
* Access level required to edit tag names and descriptions
* @global int $g_tag_edit_threshold
*/
$g_tag_edit_threshold = DEVELOPER;
/**
* Access level required to edit descriptions by the creating user
* @global int $g_tag_edit_own_threshold
*/
$g_tag_edit_own_threshold = REPORTER;
/*****************
* Time tracking *
*****************/
/**
* Turn on Time Tracking accounting
* @global int $g_time_tracking_enabled
*/
$g_time_tracking_enabled = OFF;
/**
* A billing sums
* @global int $g_time_tracking_with_billing
*/
$g_time_tracking_with_billing = OFF;
/**
* Stop watch to build time tracking field
* @global int $g_time_tracking_stopwatch
*/
$g_time_tracking_stopwatch = OFF;
/**
* access level required to view time tracking information
* @global int $g_time_tracking_view_threshold
*/
$g_time_tracking_view_threshold = DEVELOPER;
/**
* access level required to add/edit time tracking information
* @global int $g_time_tracking_edit_threshold
*/
$g_time_tracking_edit_threshold = DEVELOPER;
/**
* access level required to run reports
* @global int $g_time_tracking_reporting_threshold
*/
$g_time_tracking_reporting_threshold = MANAGER;
/**
* allow time tracking to be recorded without a bugnote
* @global int $g_time_tracking_without_note
*/
$g_time_tracking_without_note = ON;
/****************************
* Profile Related Settings *
****************************/
/**
* Enable Profiles
* @global int $g_enable_profiles
*/
$g_enable_profiles = ON;
/**
* Add profile threshold
* @global int $g_add_profile_threshold
*/
$g_add_profile_threshold = REPORTER;
/**
* Threshold needed to be able to create and modify global profiles
* @global int $g_manage_global_profile_threshold
*/
$g_manage_global_profile_threshold = MANAGER;
/**
* Allows the users to enter free text when reporting/updating issues
* for the profile related fields (i.e. platform, os, os build)
* @global int $g_allow_freetext_in_profile_fields
*/
$g_allow_freetext_in_profile_fields = ON;
/********************
* Twitter Settings *
********************/
/**
* The integration with twitter allows for a MantisBT installation to post
* updates to a twitter account. This feature will be disabled if username
* is empty or if the curl extension is not enabled.
*
* The twitter account user name.
* @global string $g_twitter_username
*/
$g_twitter_username = '';
/**
* The twitter account password.
* @global string $g_twitter_password
*/
$g_twitter_password = '';
/*****************
* Plugin System *
*****************/
/**
* enable/disable plugins
* @global int $g_plugins_enabled
*/
$g_plugins_enabled = ON;
/**
* absolute path to plugin files.
* @global string $g_plugin_path
*/
$g_plugin_path = $g_absolute_path . 'plugins' . DIRECTORY_SEPARATOR;
/**
* management threshold.
* @global int $g_manage_plugin_threshold
*/
$g_manage_plugin_threshold = ADMINISTRATOR;
/************
* Due Date *
************/
/**
* threshold to update due date submitted
* @global int $g_due_date_update_threshold
*/
$g_due_date_update_threshold = NOBODY;
/**
* threshold to see due date
* @global int $g_due_date_view_threshold
*/
$g_due_date_view_threshold = NOBODY;
/*****************
* Sub-projects
*****************
/**
* show extra dropdown for subprojects
* Shows only top projects in the project dropdown and adds an extra dropdown for subprojects.
* @global int $g_show_extended_project_browser
*/
$g_show_extended_project_browser = OFF;
/**
* Sub-projects should inherit categories from parent projects.
*/
$g_subprojects_inherit_categories = ON;
/**
* Sub-projects should inherit versions from parent projects.
*/
$g_subprojects_inherit_versions = ON;
/**********************************
* Debugging / Developer Settings *
**********************************/
/**
* Time page loads. Shows at the bottom of the page.
* @global int $g_show_timer
*/
$g_show_timer = OFF;
/**
* used for development only. Leave OFF
* @global int $g_debug_timer
*/
$g_debug_timer = OFF;
/**
* Used for debugging e-mail feature, when set to OFF the emails work as normal.
* when set to e-mail address, all e-mails are sent to this address with the
* original To, Cc, Bcc included in the message body.
* @global int $g_debug_email
*/
$g_debug_email = OFF;
/**
* Shows the total number/unique number of queries executed to serve the page.
* @global int $g_show_queries_count
*/
$g_show_queries_count = OFF;
/**
* Indicates the access level required for a user to see the queries count / list.
* This only has an effect if $g_show_queries_count is ON. Note that this threshold
* is compared against the user's default global access level rather than the
* threshold based on the current active project.
*
* @global int $g_show_queries_threshold
*/
$g_show_queries_threshold = ADMINISTRATOR;
/**
* Shows the list of all queries that are executed in chronological order from top
* to bottom. This option is only effective when $g_show_queries_count is ON.
* WARNING: Potential security hazard. Only turn this on when you really
* need it (for debugging/profiling)
* @global int $g_show_queries_list
*/
$g_show_queries_list = OFF;
/**
* --- detailed error messages -----
* Shows a list of variables and their values when an error is triggered
* Only applies to error types configured to 'halt' in $g_display_errors, below
* WARNING: Potential security hazard. Only turn this on when you really
* need it for debugging
* @global int $g_show_detailed_errors
*/
$g_show_detailed_errors = OFF;
/**
* --- error display ---
* what errors are displayed and how?
* The options for display are:
* 'halt' - stop and display traceback
* 'inline' - display 1 line error and continue
* 'none' - no error displayed
* A developer might set this in config_inc.php as:
* $g_display_errors = array(
* E_WARNING => 'halt',
* E_NOTICE => 'halt',
* E_USER_ERROR => 'halt',
* E_USER_WARNING => 'none',
* E_USER_NOTICE => 'none'
* );
* @global array $g_display_errors
*/
$g_display_errors = array(
E_WARNING => 'inline',
E_NOTICE => 'none',
E_USER_ERROR => 'halt',
E_USER_WARNING => 'inline',
E_USER_NOTICE => 'none'
);
/**
* --- debug messages ---
* If this option is turned OFF (default) page redirects will continue to
* function even if a non-fatal error occurs. For debugging purposes, you
* can set this to ON so that any non-fatal error will prevent page redirection,
* allowing you to see the errors.
* Only turn this option on for debugging
* @global int $g_stop_on_errors
*/
$g_stop_on_errors = OFF;
/**
* --- system logging ---
* This controls the logging of information to a separate file for debug or audit
* $g_log_level controls what information is logged
* see constant_inc.php for details on the log channels available
* e.g., $g_log_level = LOG_EMAIL | LOG_EMAIL_RECIPIENT | LOG_FILTERING | LOG_AJAX;
*
* $g_log_destination specifies the file where the data goes
* right now, only "file:<file path>" is supported
* e.g. (Linux), $g_log_destination = 'file:/tmp/mantisbt.log';
* e.g. (Windows), $g_log_destination = 'file:c:/temp/mantisbt.log';
* see http://www.php.net/error_log for details
* @global int $g_log_level
*/
$g_log_level = LOG_NONE;
/**
*
* @global string $g_log_destination
*/
$g_log_destination = '';
/**
* if OFF, will include original javascript files
* if ON, will include javascript files that have been compressed by yuicompressor if available
* @global int $g_minimal_jscss
*/
$g_minimal_jscss = ON;
/**************************
* Configuration Settings *
**************************/
/**
* The following list of variables should never be in the database.
* These patterns will be concatenated and used as a regular expression
* to bypass the database lookup and look here for appropriate global settings.
* @global array $g_global_settings
*/
$g_global_settings = array(
'_table$', 'cookie', '^db_', 'hostname', 'allow_signup', 'database_name', 'show_queries_count', 'admin_checks', 'version_suffix', 'global_settings',
'_path$', 'use_iis', 'language', 'use_javascript', 'minimal_jscss', 'display_errors', 'show_detailed_errors', 'stop_on_errors', 'login_method', '_file$',
'anonymous', 'content_expire', 'html_valid_tags', 'custom_headers', 'rss_key_seed', 'plugins_enabled', 'session_', 'form_security_', 'compress_html'
);
| ||||