function display_graph($d)
{
    $total_pages = 0;
    if ($d == 0) {
        $graph = init_pie_graph(660, 400, 5);
        $title = _("Net pages saved so far today");
        for ($rn = 1; $rn <= MAX_NUM_PAGE_EDITING_ROUNDS; $rn++) {
            $round = get_Round_for_round_number($rn);
            $site_stats = get_site_page_tally_summary($round->id);
            $data[] = $pages = $site_stats->curr_day_actual;
            $labels[] = "{$round->id} ({$pages})";
            $total_pages += $pages;
        }
    } else {
        $graph = init_pie_graph(660, 400, 60);
        $title = sprintf(_("Net pages saved in preceding %s days"), $d);
        $now = time();
        for ($rn = 1; $rn <= MAX_NUM_PAGE_EDITING_ROUNDS; $rn++) {
            $round = get_Round_for_round_number($rn);
            $tallyboard = new TallyBoard($round->id, 'S');
            $data[] = $pages = $tallyboard->get_delta_sum(1, $now - 60 * 60 * 24 * $d, $now);
            $labels[] = "{$round->id} ({$pages})";
            $total_pages += $pages;
        }
    }
    if ($total_pages == 0) {
        dpgraph_error(_("No pages saved in specified range"));
    }
    draw_pie_graph($graph, $labels, $data, $title);
}
// where possisble
$width = 300;
$height = 200;
$cache_timeout = 59;
# in minutes
$graph = new Graph($width, $height, get_image_cache_filename(), $cache_timeout);
// Pull all interested phases, primarily all the rounds and PP
$interested_phases = array_keys($Round_for_round_id_);
$interested_phases[] = "PP";
// Pull the stats data out of the database
$stats = get_round_backlog_stats($interested_phases);
// get the total of all phases
$stats_total = array_sum($stats);
// If this is a new system there won't be any stats so don't divide by zero
if ($stats_total == 0) {
    dpgraph_error(_("No pages found."));
}
// calculate the goal percent as 100 / number_of_phases
$goal_percent = ceil(100 / count($stats));
// colors
$barColors = array();
$barColorDefault = "#EEEEEE";
$barColorAboveGoal = "#FF484F";
$goalColor = "#0000FF";
// calculate the percentage of work remaining in each round
// and the color for each bar
foreach ($stats as $phase => $num_pages) {
    $stats_percentage[$phase] = ceil($num_pages / $stats_total * 100);
    if ($stats_percentage[$phase] > $goal_percent) {
        $barColors[] = $barColorAboveGoal;
    } else {
$relPath = "./../../pinc/";
include_once $relPath . 'base.inc';
include_once $relPath . 'misc.inc';
include_once $relPath . 'page_tally.inc';
// $page_tally_names get_pages_per_day_for_past_n_days
include_once 'common.inc';
$valid_tally_names = array_keys($page_tally_names);
$tally_name = get_enumerated_param($_GET, 'tally_name', null, $valid_tally_names);
$holder_type = get_enumerated_param($_GET, 'holder_type', null, array('U', 'T'));
$holder_id = get_integer_param($_GET, 'holder_id', null, 0, null);
if (@$_GET['days_back'] == 'all') {
    $days_back = 'all';
} else {
    $days_back = get_integer_param($_GET, 'days_back', 30, 1, null);
}
// Initialize the graph before anything else.
// This makes use of the jpgraph cache if enabled.
// Last argument to init_simple_bar_graph is the cache timeout in minutes.
$graph = init_simple_bar_graph(600, 300, 60);
$pages_per_day = get_pages_per_day_for_past_n_days($tally_name, $holder_type, $holder_id, $days_back);
$datax = array_keys($pages_per_day);
$datay = array_values($pages_per_day);
$x_text_tick_interval = calculate_text_tick_interval('daily', count($datax));
if (empty($datax) || empty($datay)) {
    $specimen = $holder_type == 'U' ? 'user' : 'team';
    dpgraph_error("This {$specimen} has not completed any pages in this round.", 600, 300);
    die;
}
draw_simple_bar_graph($graph, $datax, $datay, $x_text_tick_interval, _('Pages Completed per Day'), _('Pages'));
// vim: sw=4 ts=4 expandtab