View Issue Details

IDProjectCategoryView StatusLast Update
0011128mantisbtattachmentspublic2009-11-06 03:39
Reporterma33 Assigned To 
PrioritynormalSeverityminorReproducibilityhave not tried
Status acknowledgedResolutionopen 
PlatformwindowsOSWindows XP 
Product Version1.2.0rc2 
Summary0011128: 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.
Mantis: UTF-8
An attached file: SJIS

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
1760,1769c1760,1761
< $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 "</span>\n";

                          echo htmlspecialchars( $v_content );
                          echo "</pre></span>\n";

diff ./mantisbt/config_defaults_inc.php ./mantisbt-1.2.0rc2-2009-11-03-master-1.2.x-470ddab/config_defaults_inc.php

1875,1888d1874
< 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="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";
<
< /

Tagspatch
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( '&nbsp;', count( $p_parents ) ) . str_repeat( '&raquo;', 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(( '&nbsp;' ), $t_level ) . str_repeat(( '&raquo;' ), $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&amp;project_id=$t_project_id&amp;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 ) . '&amp;dir=' . $p_dir . '&amp;type=2&amp;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 ) . '&amp;dir=' . $p_dir . '&amp;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 . '&amp;dir=' . $t_dir . '&amp;save=1&amp;hide=' . $p_hide . '&amp;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 . '&amp;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">[&nbsp;' . $p_link . '&nbsp;]</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">[&nbsp;';
	print_link( $p_link, $p_url_text, $p_new_window, $p_class = '' );
	echo '&nbsp;]</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&amp;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&amp;page_number=$i\">$i</a>" );
			} else {
				array_push( $t_items, "<a href=\"$p_page?page_number=$i\">$i</a>" );
			}
		}
	}
	echo implode( '&nbsp;', $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']}&amp;type=bug\">";
			$t_href_end = '</a>';

			$t_href_clicket = " [<a href=\"file_download.php?file_id={$t_attachment['id']}&amp;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 '&nbsp;<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 . '&nbsp;' . $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']}&amp;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>';
		}
	}
}
print_api.php (64,751 bytes)   
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&amp;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&amp;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'
	);
config_defaults_inc.php (115,053 bytes)   

Relationships

has duplicate 0011895 closedatrol Attachments shown inline needs to be converted to UTF-8 

Activities