Relationship Graph
View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0007937 | mantisbt | reports | public | 2007-05-05 11:09 | 2017-01-31 04:05 |
| Reporter | deboutv | Assigned To | atrol | ||
| Priority | normal | Severity | minor | Reproducibility | always |
| Status | closed | Resolution | no change required | ||
| Product Version | 1.1.0a2 | ||||
| Summary | 0007937: Special characters not correctly displayed in graphs | ||||
| Description | In the different graph of the Summary pages, the legends, labels and title are displayed in UTF-8 (that is not really readable). | ||||
| Additional Information | Joined file is the patched version that decode UTF-8 strings. | ||||
| Tags | No tags attached. | ||||
| Attached Files | graph_api.php (22,513 bytes)
<?php
# Mantis - a php based bugtracking system
# Copyright (C) 2000 - 2002 Kenzaburo Ito - kenito@300baud.org
# Copyright (C) 2002 - 2004 Mantis Team - mantisbt-dev@lists.sourceforge.net
# This program is distributed under the terms and conditions of the GPL
# See the README and LICENSE files for details
# --------------------------------------------------------
# $Id: graph_api.php,v 1.33 2006/04/19 00:50:18 thraxisp Exp $
# --------------------------------------------------------
if ( ON == config_get( 'use_jpgraph' ) ) {
$t_jpgraph_path = config_get( 'jpgraph_path' );
require_once( $t_jpgraph_path.'jpgraph.php' );
require_once( $t_jpgraph_path.'jpgraph_line.php' );
require_once( $t_jpgraph_path.'jpgraph_bar.php' );
require_once( $t_jpgraph_path.'jpgraph_pie.php' );
require_once( $t_jpgraph_path.'jpgraph_pie3d.php' );
require_once( $t_jpgraph_path.'jpgraph_canvas.php' );
}
function utf8_array_decode( $p_array ) {
$t_result = array();
foreach( $p_array as $t_key => $t_value ) {
if ( is_array( $t_value ) ) {
$t_result[$t_key] = utf8_array_decode( $t_value );
} else {
$t_result[$t_key] = utf8_decode( $t_value );
}
}
return $t_result;
}
function graph_get_font() {
$t_font_map = array(
'arial' => FF_ARIAL,
'verdana' => FF_VERDANA,
'courier' => FF_COURIER,
'comic' => FF_COMIC,
'times' => FF_TIMES,
'georgia' => FF_GEORGIA,
'trebuche' => FF_TREBUCHE,
'vera' => FF_VERA,
'veramono' => FF_VERAMONO,
'veraserif' => FF_VERASERIF );
$t_font = config_get( 'graph_font', '');
if ( isset( $t_font_map[$t_font] ) ) {
return $t_font_map[$t_font];
} else {
return FF_FONT1;
}
}
### Graph API ###
# --------------------
# graphing routines
# --------------------
function graph_bar( $p_metrics, $p_title='', $p_graph_width = 350, $p_graph_height = 400 ){
$t_graph_font = graph_get_font();
error_check( is_array( $p_metrics ) ? array_sum( $p_metrics ) : 0, $p_title );
$graph = new Graph( $p_graph_width, $p_graph_height );
$graph->img->SetMargin(40,40,40,170);
//$graph->img->SetAntiAliasing();
$graph->SetScale('textlin');
$graph->SetMarginColor('white');
$graph->SetFrame(false);
$graph->title->Set( utf8_decode( $p_title ));
$graph->title->SetFont( $t_graph_font, FS_BOLD );
$graph->xaxis->SetTickLabels( utf8_array_decode( array_keys( $p_metrics ) ) );
if ( FF_FONT2 <= $t_graph_font ) {
$graph->xaxis->SetLabelAngle(60);
} else {
$graph->xaxis->SetLabelAngle(90); # can't rotate non truetype fonts
}
$graph->xaxis->SetFont( $t_graph_font );
$graph->legend->SetFont( $t_graph_font );
$graph->yaxis->scale->ticks->SetDirection(-1);
$graph->yaxis->SetFont( $t_graph_font );
$p1 = new BarPlot( array_values( $p_metrics ) );
$p1->SetFillColor('yellow');
$p1->SetWidth(0.8);
$graph->Add($p1);
if ( ON == config_get( 'show_queries_count' ) ) {
$graph->subtitle->Set( db_count_queries() . ' queries (' . db_count_unique_queries() . ' unique) (' . db_time_queries() . 'sec)' );
$graph->subtitle->SetFont( $t_graph_font, FS_NORMAL, 8 );
}
$graph->Stroke();
}
# Function which displays the charts using the absolute values according to the status (opened/closed/resolved)
function graph_group( $p_metrics, $p_title='', $p_graph_width = 350, $p_graph_height = 400, $p_baseline = 100 ){
# $p_metrics is an array of three arrays
# $p_metrics['open'] = array( 'enum' => value, ...)
# $p_metrics['resolved']
# $p_metrics['closed']
$t_graph_font = graph_get_font();
# count up array portions that are set
$t_count = 0;
foreach ( array( 'open', 'resolved', 'closed' ) as $t_label ) {
if ( is_array( $p_metrics[$t_label] ) ) {
$t_count += array_sum( $p_metrics[$t_label] );
}
}
error_check( $t_count, $p_title );
# calculate totals
$total = graph_total_metrics( $p_metrics );
#defines margin according to height
$graph = new Graph( $p_graph_width, $p_graph_height );
$graph->img->SetMargin( 45, 35, 35, $p_baseline );
//$graph->img->SetAntiAliasing();
$graph->SetScale('textlin');
$graph->SetMarginColor('white');
$graph->SetFrame(false);
$graph->title->SetFont( $t_graph_font, FS_BOLD );
$graph->title->Set( utf8_decode( $p_title ));
$graph->xaxis->SetTickLabels( utf8_array_decode( array_keys( $p_metrics['open'] ) ) );
if ( FF_FONT2 <= $t_graph_font ) {
$graph->xaxis->SetLabelAngle(60);
} else {
$graph->xaxis->SetLabelAngle(90); # can't rotate non truetype fonts
}
$graph->xaxis->SetFont( $t_graph_font );
$graph->legend->Pos(0.05, 0.08);
$graph->legend->SetFont( $t_graph_font );
$graph->yaxis->scale->ticks->SetDirection(-1);
$graph->yaxis->SetFont( $t_graph_font );
$graph->yscale->SetGrace(10);
#adds on the same graph
$tot = new BarPlot( array_values( $total ) );
$tot->SetFillColor('lightblue');
$tot->SetWidth(0.7);
$tot->SetLegend( utf8_decode( lang_get( 'legend_total' ) ) );
$graph->Add($tot);
$p1 = new BarPlot( array_values( $p_metrics['open'] ) );
$p1->SetFillColor('yellow');
$p1->SetWidth(1);
$p1->SetLegend( utf8_decode( lang_get( 'legend_opened' ) ) );
$p2 = new BarPlot( array_values( $p_metrics['closed'] ) );
$p2->SetFillColor('blue');
$p2->SetWidth(1);
$p2->SetLegend( utf8_decode( lang_get( 'legend_closed' ) ) );
$p3 = new BarPlot( array_values( $p_metrics['resolved'] ) );
$p3->SetFillColor('red');
$p3->SetWidth(1);
$p3->SetLegend( utf8_decode( lang_get( 'legend_resolved' ) ) );
$gbplot = new GroupBarPlot(array($p1,$p3,$p2));
$graph->Add($gbplot);
if ( ON == config_get( 'show_queries_count' ) ) {
$graph->subtitle->Set( db_count_queries() . ' queries (' . db_count_unique_queries() . ' unique) (' . db_time_queries() . 'sec)' );
$graph->subtitle->SetFont( $t_graph_font, FS_NORMAL, 8 );
}
$graph->Stroke();
}
# --------------------
# Function that displays charts in % according to the status
# @@@ this function is not used...
function graph_group_pct( $p_title='', $p_graph_width = 350, $p_graph_height = 400 ){
global $enum_name, $enum_name_count;
global $open_bug_count, $closed_bug_count, $resolved_bug_count;
error_check( $open_bug_count + $closed_bug_count + $resolved_bug_count, $p_title );
$graph = new Graph(250,400);
$graph->img->SetMargin(35,35,35,150);
//$graph->img->SetAntiAliasing();
$graph->SetScale('textlin');
$graph->SetMarginColor('white');
$graph->SetFrame(false);
$graph->title->Set(utf8_decode( $p_title ));
$graph->xaxis->SetTickLabels(utf8_array_decode( $enum_name ));
$graph->xaxis->SetLabelAngle(90);
$graph->yaxis->scale->ticks->SetDirection(-1);
$p1 = new BarPlot($open_bug_count);
$p1->SetFillColor('yellow');
$p1->SetWidth(0.8);
$p1->SetLegend( utf8_decode( lang_get( 'legend_opened' ) ) );
$p2 = new BarPlot($closed_bug_count);
$p2->SetFillColor('blue');
$p2->SetWidth(0.8);
$p2->SetLegend( utf8_decode( lang_get( 'legend_closed' ) ) );
$p3 = new BarPlot($resolved_bug_count);
$p3->SetFillColor('red');
$p3->SetWidth(0.8);
$p3->SetLegend( utf8_decode( lang_get( 'legend_resolved' ) ) );
$gbplot = new GroupBarPlot(array($p1,$p2,$p3));
$graph->Add($gbplot);
if ( ON == config_get( 'show_queries_count' ) ) {
$graph->subtitle->Set( db_count_queries() . ' queries (' . db_count_unique_queries() . ' unique)' );
}
$graph->Stroke();
}
# --------------------
# Function that displays pie charts
function graph_pie( $p_metrics, $p_title='',
$p_graph_width = 500, $p_graph_height = 350, $p_center = 0.4, $p_poshorizontal = 0.10, $p_posvertical = 0.09 ){
$t_graph_font = graph_get_font();
error_check( is_array( $p_metrics ) ? array_sum( $p_metrics ) : 0, $p_title );
$graph = new PieGraph( $p_graph_width, $p_graph_height);
$graph->img->SetMargin(40,40,40,100);
$graph->title->Set(utf8_decode( $p_title ));
$graph->title->SetFont( $t_graph_font, FS_BOLD );
$graph->SetMarginColor('white');
$graph->SetFrame(false);
$graph->legend->Pos($p_poshorizontal, $p_posvertical);
$graph->legend->SetFont( $t_graph_font );
$p1 = new PiePlot3d( array_values( $p_metrics ) ); // should be reversed?
$p1->SetTheme('earth');
#$p1->SetTheme("sand");
$p1->SetCenter($p_center);
$p1->SetAngle(60);
$p1->SetLegends( utf8_array_decode( array_keys( $p_metrics ) ) );
# Label format
$p1->value->SetFormat('%2.0f');
$p1->value->Show();
$p1->value->SetFont( $t_graph_font );
$graph->Add($p1);
if ( ON == config_get( 'show_queries_count' ) ) {
$graph->subtitle->Set( db_count_queries() . ' queries (' . db_count_unique_queries() . ' unique) (' . db_time_queries() . 'sec)' );
$graph->subtitle->SetFont( $t_graph_font, FS_NORMAL, 8 );
}
$graph->Stroke();
}
# --------------------
function graph_cumulative_bydate( $p_metrics, $p_graph_width = 300, $p_graph_height = 380 ){
$t_graph_font = graph_get_font();
error_check( is_array( $p_metrics ) ? count($p_metrics) : 0, lang_get( 'cumulative' ) . ' ' . lang_get( 'by_date' ) );
foreach ($p_metrics as $i=>$vals) {
if ( $i > 0 ) {
$plot_date[] = $i;
$reported_plot[] = $p_metrics[$i][0];
$resolved_plot[] = $p_metrics[$i][1];
$still_open_plot[] = $p_metrics[$i][2];
}
}
$graph = new Graph( $p_graph_width, $p_graph_height );
$graph->img->SetMargin(40,40,40,170);
//$graph->img->SetAntiAliasing();
$graph->SetScale('linlin');
$graph->SetMarginColor('white');
$graph->SetFrame(false);
$graph->title->Set( utf8_decode( lang_get( 'cumulative' ) . ' ' . lang_get( 'by_date' ) ) );
$graph->title->SetFont( $t_graph_font, FS_BOLD );
$graph->legend->Pos(0.05,0.9,'right','bottom');
$graph->legend->SetShadow(false);
$graph->legend->SetFillColor('white');
$graph->legend->SetLayout(LEGEND_HOR);
$graph->legend->SetFont( $t_graph_font );
$graph->yaxis->scale->ticks->SetDirection(-1);
$graph->yaxis->SetFont( $t_graph_font );
if ( FF_FONT2 <= $t_graph_font ) {
$graph->xaxis->SetLabelAngle(60);
} else {
$graph->xaxis->SetLabelAngle(90); # can't rotate non truetype fonts
}
$graph->xaxis->SetLabelFormatCallback('graph_date_format');
$graph->xaxis->SetFont( $t_graph_font );
$p1 = new LinePlot($reported_plot, $plot_date);
$p1->SetColor('blue');
$p1->SetCenter();
$p1->SetLegend( utf8_decode( lang_get( 'legend_reported' ) ) );
$graph->Add($p1);
$p3 = new LinePlot($still_open_plot, $plot_date);
$p3->SetColor('red');
$p3->SetCenter();
$p3->SetLegend( utf8_decode( lang_get( 'legend_still_open' ) ) );
$graph->Add($p3);
$p2 = new LinePlot($resolved_plot, $plot_date);
$p2->SetColor('black');
$p2->SetCenter();
$p2->SetLegend( utf8_decode( lang_get( 'legend_resolved' ) ) );
$graph->Add($p2);
if ( ON == config_get( 'show_queries_count' ) ) {
$graph->subtitle->Set( db_count_queries() . ' queries (' . db_count_unique_queries() . ' unique) (' . db_time_queries() . 'sec)' );
$graph->subtitle->SetFont( $t_graph_font, FS_NORMAL, 8 );
}
$graph->Stroke();
}
# --------------------
# utilities
# --------------------
function graph_total_metrics( $p_metrics ){
foreach ( $p_metrics['open'] as $t_enum => $t_value ) {
$total[$t_enum] = $t_value + $p_metrics['resolved'][$t_enum] + $p_metrics['closed'][$t_enum];
}
return $total;
}
# --------------------
# Data Extractions
# --------------------
# --------------------
# summarize metrics by a single field in the bug table
function create_bug_enum_summary( $p_enum_string, $p_enum ) {
$t_project_id = helper_get_current_project();
$t_bug_table = config_get( 'mantis_bug_table' );
$t_user_id = auth_get_current_user_id();
$specific_where = " AND " . helper_project_specific_where( $t_project_id, $t_user_id );
$t_arr = explode_enum_string( $p_enum_string );
$enum_count = count( $t_arr );
for ($i=0;$i<$enum_count;$i++) {
$t_s = explode_enum_arr( $t_arr[$i] );
$c_s[0] = addslashes($t_s[0]);
$t_key = get_enum_to_string( $p_enum_string, $t_s[0] );
$query = "SELECT COUNT(*)
FROM $t_bug_table
WHERE $p_enum='$c_s[0]' $specific_where";
$result = db_query( $query );
$t_metrics[$t_key] = db_result( $result, 0 );
} # end for
return $t_metrics;
}
# Function which gives the absolute values according to the status (opened/closed/resolved)
function enum_bug_group( $p_enum_string, $p_enum ) {
$t_bug_table = config_get( 'mantis_bug_table' );
$t_project_id = helper_get_current_project();
$t_bug_table = config_get( 'mantis_bug_table' );
$t_user_id = auth_get_current_user_id();
$t_res_val = config_get( 'bug_resolved_status_threshold' );
$t_clo_val = CLOSED;
$specific_where = " AND " . helper_project_specific_where( $t_project_id, $t_user_id );
$t_arr = explode_enum_string( $p_enum_string );
$enum_count = count( $t_arr );
for ( $i=0; $i < $enum_count; $i++) {
$t_s = explode( ':', $t_arr[$i] );
$t_key = get_enum_to_string( $p_enum_string, $t_s[0] );
# Calculates the number of bugs opened and puts the results in a table
$query = "SELECT COUNT(*)
FROM $t_bug_table
WHERE $p_enum='$t_s[0]' AND
status<'$t_res_val' $specific_where";
$result2 = db_query( $query );
$t_metrics['open'][$t_key] = db_result( $result2, 0, 0);
# Calculates the number of bugs closed and puts the results in a table
$query = "SELECT COUNT(*)
FROM $t_bug_table
WHERE $p_enum='$t_s[0]' AND
status='$t_clo_val' $specific_where";
$result2 = db_query( $query );
$t_metrics['closed'][$t_key] = db_result( $result2, 0, 0);
# Calculates the number of bugs resolved and puts the results in a table
$query = "SELECT COUNT(*)
FROM $t_bug_table
WHERE $p_enum='$t_s[0]' AND
status>='$t_res_val' AND
status<'$t_clo_val' $specific_where";
$result2 = db_query( $query );
$t_metrics['resolved'][$t_key] = db_result( $result2, 0, 0);
} ### end for
return $t_metrics;
}
# --------------------
function create_developer_summary() {
$t_project_id = helper_get_current_project();
$t_user_table = config_get( 'mantis_user_table' );
$t_bug_table = config_get( 'mantis_bug_table' );
$t_user_id = auth_get_current_user_id();
$specific_where = " AND " . helper_project_specific_where( $t_project_id, $t_user_id );
$t_res_val = config_get( 'bug_resolved_status_threshold' );
$t_clo_val = CLOSED;
$query = "SELECT handler_id, status
FROM $t_bug_table
WHERE handler_id != '' $specific_where";
$result = db_query( $query );
$t_total_handled = db_num_rows( $result );
$t_handler_arr = array();
for ( $i = 0; $i < $t_total_handled; $i++ ) {
$row = db_fetch_array( $result );
if ( !isset( $t_handler_arr[$row['handler_id']] ) ) {
$t_handler_arr[$row['handler_id']]['res'] = 0;
$t_handler_arr[$row['handler_id']]['open'] = 0;
$t_handler_arr[$row['handler_id']]['close'] = 0;
}
if ( $row['status'] >= $t_res_val ) {
if ( $row['status'] >= $t_clo_val ) {
$t_handler_arr[$row['handler_id']]['close']++;
} else {
$t_handler_arr[$row['handler_id']]['res']++;
}
} else {
$t_handler_arr[$row['handler_id']]['open']++;
}
}
if ( count( $t_handler_arr ) == 0 ) {
return array( 'open' => array() );
}
$t_imploded_handlers = implode( ',', array_keys( $t_handler_arr ) );
$query = "SELECT id, username
FROM $t_user_table
WHERE id IN ($t_imploded_handlers)
ORDER BY username";
$result = db_query( $query );
$user_count = db_num_rows( $result );
for ($i=0;$i<$user_count;$i++) {
$row = db_fetch_array( $result );
extract( $row, EXTR_PREFIX_ALL, 'v' );
$t_metrics['open'][$v_username] = $t_handler_arr[$v_id]['open'];
$t_metrics['resolved'][$v_username] = $t_handler_arr[$v_id]['res'];
$t_metrics['closed'][$v_username] = $t_handler_arr[$v_id]['close'];
} # end for
return $t_metrics;
}
# --------------------
function create_reporter_summary() {
global $reporter_name, $reporter_count;
$t_project_id = helper_get_current_project();
$t_user_table = config_get( 'mantis_user_table' );
$t_bug_table = config_get( 'mantis_bug_table' );
$t_user_id = auth_get_current_user_id();
$specific_where = " AND " . helper_project_specific_where( $t_project_id, $t_user_id );
$query = "SELECT reporter_id
FROM $t_bug_table
WHERE id != '' $specific_where";
$result = db_query( $query );
$t_total_reported = db_num_rows( $result );
$t_reporter_arr = array();
for ( $i = 0; $i < $t_total_reported; $i++ ) {
$row = db_fetch_array( $result );
if ( isset( $t_reporter_arr[$row['reporter_id']] ) ) {
$t_reporter_arr[$row['reporter_id']]++;
} else {
$t_reporter_arr[$row['reporter_id']] = 1;
}
}
if ( count( $t_reporter_arr ) == 0 ) {
return array();
}
$t_imploded_reporters = implode( ',', array_keys( $t_reporter_arr ) );
$query = "SELECT id, username
FROM $t_user_table
WHERE id IN ($t_imploded_reporters)
ORDER BY username";
$result = db_query( $query );
$user_count = db_num_rows( $result );
for ($i=0;$i<$user_count;$i++) {
$row = db_fetch_array( $result );
extract( $row, EXTR_PREFIX_ALL, 'v' );
$t_metrics[$v_username] = $t_reporter_arr[$v_id];
} # end for
return $t_metrics;
}
# --------------------
function create_category_summary() {
global $category_name, $category_bug_count;
$t_project_id = helper_get_current_project();
$t_cat_table = config_get( 'mantis_project_category_table' );
$t_bug_table = config_get( 'mantis_bug_table' );
$t_user_id = auth_get_current_user_id();
$specific_where = helper_project_specific_where( $t_project_id, $t_user_id );
$query = "SELECT DISTINCT category
FROM $t_cat_table
WHERE $specific_where
ORDER BY category";
$result = db_query( $query );
$category_count = db_num_rows( $result );
if ( 0 == $category_count ) {
return array();
}
for ($i=0;$i<$category_count;$i++) {
$row = db_fetch_array( $result );
$t_cat_name = $row['category'];
$c_category_name = addslashes($t_cat_name);
$query = "SELECT COUNT(*)
FROM $t_bug_table
WHERE category='$c_category_name' AND $specific_where";
$result2 = db_query( $query );
$t_metrics[$t_cat_name] = db_result( $result2, 0, 0 );
} # end for
return $t_metrics;
}
# --------------------
function cmp_dates($a, $b){
if ($a[0] == $b[0]) {
return 0;
}
return ( $a[0] < $b[0] ) ? -1 : 1;
}
# --------------------
function find_date_in_metrics($aDate){
global $metrics;
$index = -1;
for ($i=0;$i<count($metrics);$i++) {
if ($aDate == $metrics[$i][0]){
$index = $i;
break;
}
}
return $index;
}
# --------------------
function create_cumulative_bydate(){
$t_clo_val = CLOSED;
$t_res_val = config_get( 'bug_resolved_status_threshold' );
$t_bug_table = config_get( 'mantis_bug_table' );
$t_history_table = config_get( 'mantis_bug_history_table' );
$t_project_id = helper_get_current_project();
$t_user_id = auth_get_current_user_id();
$specific_where = helper_project_specific_where( $t_project_id, $t_user_id );
# Get all the submitted dates
$query = "SELECT date_submitted
FROM $t_bug_table
WHERE $specific_where
ORDER BY date_submitted";
$result = db_query( $query );
$bug_count = db_num_rows( $result );
for ($i=0;$i<$bug_count;$i++) {
$row = db_fetch_array( $result );
# rationalise the timestamp to a day to reduce the amount of data
$t_date = db_unixtimestamp( $row['date_submitted'] );
$t_date = (int) ( $t_date / 86400 );
if ( isset( $metrics[$t_date] ) ){
$metrics[$t_date][0]++;
} else {
$metrics[$t_date] = array( 1, 0, 0 );
}
}
### Get all the dates where a transition from not resolved to resolved may have happened
# also, get the last updated date for the bug as this may be all the information we have
$query = "SELECT $t_bug_table.id, last_updated, date_modified, new_value, old_value
FROM $t_bug_table LEFT JOIN $t_history_table
ON $t_bug_table.id = $t_history_table.bug_id
WHERE $specific_where
AND $t_bug_table.status >= '$t_res_val'
AND ( ( $t_history_table.new_value >= '$t_res_val'
AND $t_history_table.field_name = 'status' )
OR $t_history_table.id is NULL )
ORDER BY $t_bug_table.id, date_modified ASC";
$result = db_query( $query );
$bug_count = db_num_rows( $result );
$t_last_id = 0;
for ($i=0;$i<$bug_count;$i++) {
$row = db_fetch_array( $result );
$t_id = $row['id'];
# if h_last_updated is NULL, there were no appropriate history records
# (i.e. pre 0.18 data), use last_updated from bug table instead
if (NULL == $row['date_modified']) {
$t_date = db_unixtimestamp( $row['last_updated'] );
} else {
if ( $t_res_val > $row['old_value'] ) {
$t_date = db_unixtimestamp( $row['date_modified'] );
}
}
if ( $t_id <> $t_last_id ) {
if ( 0 <> $t_last_id ) {
# rationalise the timestamp to a day to reduce the amount of data
$t_date_index = (int) ( $t_last_date / 86400 );
if ( isset( $metrics[$t_date_index] ) ){
$metrics[$t_date_index][1]++;
} else {
$metrics[$t_date_index] = array( 0, 1, 0 );
}
}
$t_last_id = $t_id;
}
$t_last_date = $t_date;
}
ksort($metrics);
$metrics_count = count($metrics);
$t_last_opened = 0;
$t_last_resolved = 0;
foreach ($metrics as $i=>$vals) {
$t_date = $i * 86400;
$t_metrics[$t_date][0] = $t_last_opened = $metrics[$i][0] + $t_last_opened;
$t_metrics[$t_date][1] = $t_last_resolved = $metrics[$i][1] + $t_last_resolved;
$t_metrics[$t_date][2] = $t_metrics[$t_date][0] - $t_metrics[$t_date][1];
}
return $t_metrics;
}
function graph_date_format ($p_date) {
return date( config_get( 'short_date_format' ), $p_date );
}
# ----------------------------------------------------
#
# Check that there is enough data to create graph
#
# ----------------------------------------------------
function error_check( $bug_count, $title ) {
if ( 0 == $bug_count ) {
$t_graph_font = graph_get_font();
$graph = new CanvasGraph(300,380);
$txt = new Text( lang_get( 'not_enough_data' ), 150, 100);
$txt->Align("center","center","center");
$txt->SetFont( $t_graph_font, FS_BOLD );
$graph->title->Set( $title );
$graph->title->SetFont( $t_graph_font, FS_BOLD );
$graph->AddText($txt);
$graph->Stroke();
die();
}
}
?>
| ||||
| has duplicate | 0005815 | closed | vboctor | Inccorect display of "Ã " in graphs |
| has duplicate | 0012510 | closed | vboctor | Font display for JpGraph (Japanese) |
| has duplicate | 0003655 | closed | vboctor | Graph display wrong chinese word |
| has duplicate | 0011168 | closed | vboctor | Graph plugin doesn't gracefully handle Asian fonts that lack a bold style |
| has duplicate | 0011169 | closed | vboctor | Add support for some of the East-asians (Japanese, Korean, Chinese) fonts to mantisgraph |
| has duplicate | 0011588 | closed | vboctor | Graphical statistical reports can not be displayed in Chinese |
|
My understanding for jpgraph was that you had to download ttf fonts (see http://www.aditus.nu/jpgraph/jpdownload.php ) to get UTF8 support. Paul |
|
|
I only add "$g_graph_font = 'arial';" in my config_inc.php and all works! ;-) I think some typefaces don't work in UTF-8. Right? Gôm |
|
|
We are resolving this issue as "no change required", because it was reported against an old version of MantisBT which is no longer supported. Graphs have been rewritten in version 2.0.0 using another technology, jpgraph and graph_font are no longer used. We recommend that you upgrade to the latest stable version [1]; if after doing so the problem still exists, do not hesitate to reopen the issue. |
|
related to
child of
duplicate of