Windows 7 // Windows Server 2003 Service Pack 4 => Windows Server 2003 function trim_os_versions($os_values) { $new_values = array(); foreach ($os_values as $os_name=>$os_count) { $os_count = intval($os_count); $os_name_parts = explode(" ", $os_name); if (count($os_name_parts) > 2) { if (strpos($os_name, ' NT') > 0 || strpos($os_name, ' Server') > 0) $os_name = $os_name_parts[0].' '.$os_name_parts[1].' '.$os_name_parts[2]; else $os_name = $os_name_parts[0].' '.$os_name_parts[1]; } if (isset($new_values[$os_name])) $new_values[$os_name] += $os_count; else $new_values[$os_name] = $os_count; } return $new_values; } function create_common_image($title, $width, $height, $data, $chart_type = 'line') { global $pchart_path; /* Create the pChart object */ $myPicture = new pImage($width, $height, $data); /* Draw the background */ $Settings = array("R"=>255, "G"=>255, "B"=>255, "Dash"=>1, "DashR"=>185, "DashG"=>225, "DashB"=>255); $myPicture->drawFilledRectangle(0,0,$width,$height,$Settings); /* Overlay with a gradient */ $Settings = array("StartR"=>206, "StartG"=>235, "StartB"=>235, "EndR"=>71, "EndG"=>150, "EndB"=>205, "Alpha"=>50); $myPicture->drawGradientArea(0,0,$width,$height,DIRECTION_VERTICAL,$Settings); $myPicture->drawGradientArea(0,0,$width,20,DIRECTION_VERTICAL,array("StartR"=>0,"StartG"=>0,"StartB"=>0,"EndR"=>50,"EndG"=>50,"EndB"=>50,"Alpha"=>80)); /* Add a border to the picture */ $myPicture->drawRectangle(0,0,$width-1,$height-1,array("R"=>0,"G"=>0,"B"=>0)); /* Write the picture title */ $myPicture->setFontProperties(array("FontName"=>$pchart_path."/fonts/arialbd.ttf","FontSize"=>9)); $myPicture->drawText(24, 12, win2uni($title),array("R"=>255,"G"=>255,"B"=>255, "Align"=>TEXT_ALIGN_MIDDLELEFT)); $myPicture->drawFromPNG(4, 4, "includes/design/images/chart_pie.png"); if ($chart_type == 'line') { $myPicture->setFontProperties(array("FontName"=>$pchart_path."/fonts/arial.ttf","FontSize"=>8)); /* Draw the scale and the 1st chart */ $myPicture->setGraphArea(60, 64, 450+200, 190); $myPicture->drawFilledRectangle(60, 50, 450+200, 190, array("R"=>255,"G"=>255,"B"=>255,"Surrounding"=>-255,"Alpha"=>60)); $myPicture->drawScale(array("Mode"=>SCALE_MODE_START0, "DrawSubTicks"=>FALSE, "GridR"=>151, "GridG"=>197, "GridB"=>254, "GridAlpha"=>30)); $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>10)); } $myPicture->setFontProperties(array("FontName"=>$pchart_path."/fonts/pf_arma_five.ttf","FontSize"=>6)); return $myPicture; } if ($admin_routine == 'last_24_hours') { $ftp_count = array(); if (!$pony_db->get_ftp_count_last_24_hours($ftp_count)) die(); $report_count = array(); if (!$pony_db->get_report_count_last_24_hours($report_count)) die(); $http_count = array(); if (!$pony_db->get_http_count_last_24_hours($http_count)) die(); $email_count = array(); if (!$pony_db->get_email_count_last_24_hours($email_count)) die(); $chart_ftp_values = array(); $chart_http_values = array(); $chart_email_values = array(); $points_reports = array(); $MyData = new pData(); $cur_time = time(); $hour_labels = array(); for ($i = 23; $i >= 0; $i--) { array_push($hour_labels, date('H', $cur_time-3600*$i)); if (!isset($ftp_count[intval(date('H', $cur_time-3600*$i))])) array_push($chart_ftp_values, NULL); else array_push($chart_ftp_values, $ftp_count[intval(date('H', $cur_time-3600*$i))]); if (!isset($http_count[intval(date('H', $cur_time-3600*$i))])) array_push($chart_http_values, NULL); else array_push($chart_http_values, $http_count[intval(date('H', $cur_time-3600*$i))]); if (!isset($email_count[intval(date('H', $cur_time-3600*$i))])) array_push($chart_email_values, NULL); else array_push($chart_email_values, $email_count[intval(date('H', $cur_time-3600*$i))]); if (!isset($report_count[intval(date('H', $cur_time-3600*$i))])) array_push($points_reports, NULL); else array_push($points_reports, $report_count[intval(date('H', $cur_time-3600*$i))]); } if (count($ftp_count) == 0 && count($report_count) == 0) $chart_ftp_values[0] = 0; $legend_offset = 415+165; $MyData->addPoints($points_reports, "Reports"); $MyData->setPalette("Reports",array("R"=>220,"G"=>82,"B"=>91,"Alpha"=>100)); $MyData->addPoints($chart_ftp_values, "FTP"); $MyData->setPalette("FTP",array("R"=>0,"G"=>39,"B"=>94,"Alpha"=>100)); if ($enable_http_mode && ($show_http_to_users || $pony_db->priv_is_admin())) { $MyData->addPoints($chart_http_values, "HTTP"); $MyData->setPalette("HTTP",array("R"=>150,"G"=>10,"B"=>150,"Alpha"=>100)); $legend_offset -= 35; } if ($enable_email_mode && ($show_email_to_users || $pony_db->priv_is_admin())) { $MyData->addPoints($chart_email_values, "E-mail"); $MyData->setPalette("E-mail",array("R"=>10,"G"=>150,"B"=>10,"Alpha"=>100)); $legend_offset -= 40; } $MyData->setAxisName(0, win2uni($lang['Count'])); $MyData->addPoints($hour_labels, "Labels"); $MyData->setSerieDescription("Labels", win2uni($lang['Hours'])); $MyData->setAbscissa("Labels"); $MyData->setAbscissaName(win2uni($lang['Hours'])); $MyData->setAxisDisplay(0, AXIS_FORMAT_METRIC); $myPicture = create_common_image($lang['New password additions in the past 24 hours'], 680, 230, $MyData); $myPicture->drawLineChart(array("DisplayValues"=>TRUE,"DisplayColor"=>DISPLAY_AUTO)); $myPicture->drawLegend($legend_offset,215,array("Style"=>LEGEND_NOBORDER,"Mode"=>LEGEND_HORIZONTAL)); $myPicture->stroke(); } else if ($admin_routine == 'last_month') { $day_ftp_count = array(); if (!$pony_db->get_ftp_count_last_month($day_ftp_count)) die(); $report_count = array(); if (!$pony_db->get_report_count_last_month($report_count)) die(); $http_count = array(); if (!$pony_db->get_http_count_last_month($http_count)) die(); $email_count = array(); if (!$pony_db->get_email_count_last_month($email_count)) die(); $MyData = new pData(); $cur_time = time(); $chart_day_labels = array(); $reports_array = array(); for ($i = 27; $i >= 0; $i--) { $day = (intval(date('d', $cur_time-24*3600*$i))); array_push($chart_day_labels, $day); } $ftp_count_values = array(); $http_count_values = array(); $email_count_values = array(); for ($i = 27; $i >= 0; $i--) { $day = (intval(date('d', $cur_time-24*3600*$i))); if (!isset($day_ftp_count[strval($day)])) array_push($ftp_count_values, NULL); else array_push($ftp_count_values, $day_ftp_count[strval($day)]); if (!isset($report_count[strval($day)])) array_push($reports_array, NULL); else array_push($reports_array, $report_count[strval($day)]); if (!isset($http_count[strval($day)])) array_push($http_count_values, NULL); else array_push($http_count_values, $http_count[strval($day)]); if (!isset($email_count[strval($day)])) array_push($email_count_values, NULL); else array_push($email_count_values, $email_count[strval($day)]); } if (count($day_ftp_count) == 0 && count($report_count) == 0) { $ftp_count_values[0] = 0; } $legend_offset = 415+165; $MyData->addPoints($reports_array, "Reports"); $MyData->setPalette("Reports",array("R"=>220,"G"=>82,"B"=>91,"Alpha"=>100)); $MyData->addPoints($ftp_count_values, "FTP"); $MyData->setPalette("FTP",array("R"=>0,"G"=>39,"B"=>94,"Alpha"=>100)); if ($enable_http_mode && ($show_http_to_users || $pony_db->priv_is_admin())) { $MyData->addPoints($http_count_values, "HTTP"); $MyData->setPalette("HTTP",array("R"=>150,"G"=>10,"B"=>150,"Alpha"=>100)); $legend_offset -= 35; } if ($enable_email_mode && ($show_email_to_users || $pony_db->priv_is_admin())) { $MyData->addPoints($email_count_values, "E-mail"); $MyData->setPalette("E-mail",array("R"=>10,"G"=>150,"B"=>10,"Alpha"=>100)); $legend_offset -= 40; } $MyData->setAxisName(0, win2uni($lang['Count'])); $MyData->addPoints($chart_day_labels, "Labels"); $MyData->setSerieDescription("Labels", win2uni($lang['Days'])); $MyData->setAbscissa("Labels"); $MyData->setAbscissaName(win2uni($lang['Days'])); $MyData->setAxisDisplay(0, AXIS_FORMAT_METRIC); $myPicture = create_common_image($lang['New password additions in the past month'], 680, 230, $MyData); $myPicture->drawLineChart(array("DisplayValues"=>TRUE, "DisplayColor"=>DISPLAY_AUTO)); $myPicture->drawLegend($legend_offset, 215, array("Style"=>LEGEND_NOBORDER,"Mode"=>LEGEND_HORIZONTAL)); $myPicture->stroke(); } else if ($admin_routine == 'os') { $os_list = array(); if (!$pony_db->get_os_stats($os_list)) die(); if ($trim_os_versions) $os_list = trim_os_versions($os_list); if (count($os_list)) { $points_labels = array(); $points_values = array(); $sum = 0; foreach ($os_list as $name=>$count) $sum += $count; if ($sum == 0) $sum = 1; foreach ($os_list as $os_name=>$count) { $os_name = trim($os_name); if (trim($os_name) == '') $os_name = 'Unknown'; array_push($points_labels, $os_name.' ('.sprintf("%01.2f", $count/$sum*100).'%)'); array_push($points_values, $count); } $MyDataOS = new pData(); $MyDataOS->addPoints($points_values, "OS values"); $MyDataOS->setSerieDescription("OS values", "Application A"); $MyDataOS->addPoints($points_labels, "Labels"); $MyDataOS->setAbscissa("Labels"); $myPicture = create_common_image($lang['OS popularity'], 680, 250, $MyDataOS, 'pie'); $myPicture->setShadow(TRUE,array("X"=>2,"Y"=>2,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>50)); $PieChart = new pPie($myPicture, $MyDataOS); $PieChart->draw2DPie(220,125,array("ValueR"=>0, "ValueG"=>0, "ValueB"=>0, "ValueAlpha"=>80, "ValuePosition"=>PIE_VALUE_OUTSIDE, "LabelStacked"=>TRUE, "DrawLabels"=>TRUE, "DataGapAngle"=>8,"DataGapRadius"=>6,"Border"=>TRUE,"BorderR"=>255,"BorderG"=>255,"BorderB"=>255)); $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20)); $myPicture->drawText(220,230,"Operating systems",array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Align"=>TEXT_ALIGN_TOPMIDDLE)); // Additional OS statistics $win64_list = array(); if (!$pony_db->get_64bit_stats($win64_list)) die(); if (!isset($win64_list['0'])) $win64_list['0'] = '0'; if (!isset($win64_list['1'])) $win64_list['1'] = '0'; $admin_list = array(); if (!$pony_db->get_admin_stats($admin_list)) die(); if (!isset($admin_list['0'])) $admin_list['0'] = '0'; if (!isset($admin_list['1'])) $admin_list['1'] = '0'; if (count($win64_list) && count($admin_list)) { $MyData = new pData(); $MyData->addPoints(array($win64_list['0'], $admin_list['1']),"Probe 1"); $MyData->addPoints(array($win64_list['1'], $admin_list['0']),"Probe 2"); $MyData->addPoints(array('Architecture', 'Privileges'), "Labels"); $MyData->setAbscissa("Labels"); $MyData->normalize(100,"%"); $x = 460; $y = 60; $myPicture->setDataSet($MyData); $myPicture->setShadow(FALSE); $myPicture->setGraphArea($x,$y,$x+200,190); $myPicture->drawFilledRectangle($x,$y,$x+200,190,array("R"=>255,"G"=>255,"B"=>255,"Surrounding"=>-255,"Alpha"=>20)); $AxisBoundaries = array(0=>array("Min"=>0,"Max"=>100)); $ScaleSettings = array("YMargin"=>10, "Mode"=>SCALE_MODE_MANUAL,"ManualScale"=>$AxisBoundaries,"DrawSubTicks"=>TRUE,"DrawArrows"=>FALSE); $myPicture->drawScale($ScaleSettings); $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>10)); $settings = array("Gradient"=>TRUE, "DisplayPos"=>LABEL_POS_OUTSIDE, "DisplayValues"=>TRUE, "DisplayR"=>0, "DisplayG"=>0, "DisplayB"=>0, "DisplayShadow"=>TRUE, "Surrounding"=>30); $myPicture->drawBarChart($settings); $myPicture->setShadow(FALSE); $myPicture->drawText($x+30, 183, '32-bit', array("Align"=>TEXT_ALIGN_TOPMIDDLE, "R"=>0,"G"=>0,"B"=>0)); $myPicture->drawText($x+30+40, 183, '64-bit', array("Align"=>TEXT_ALIGN_TOPMIDDLE, "R"=>0,"G"=>0,"B"=>0)); $myPicture->drawText($x+30+100, 183, 'admin', array("Align"=>TEXT_ALIGN_TOPMIDDLE, "R"=>0,"G"=>0,"B"=>0)); $myPicture->drawText($x+30+140, 183, 'user', array("Align"=>TEXT_ALIGN_TOPMIDDLE, "R"=>0,"G"=>0,"B"=>0)); $myPicture->setShadow(TRUE, array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20)); $myPicture->drawText($x+100,230,"Additional OS statistics",array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Align"=>TEXT_ALIGN_TOPMIDDLE)); } } else { $myPicture = create_common_image($lang['OS popularity'], 680, 250, NULL, 'pie'); } $myPicture->stroke(); }