OSI-Certified logo

Source code of file graphpie.php
from the Content Management module for Phprojekt.

<?php
// Content Management System module for PHProjekt (CMS4P).
// Copyright 2002-2005 by Mario A. Valdez-Ramirez
// http://www.mariovaldez.net/

// This program 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.

// This program 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 this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, 
// Boston, MA 02111-1307, USA.

// You can contact Mario A. Valdez-Ramirez by email 
// at mario@mariovaldez.org or paper mail at 
// Olmos 809, San Nicolas, NL. 66495, Mexico.

//session_start();
$file "graphpie";
$path_pre="../";
include_once (
$path_pre "cm/cm_anon.inc.php");
$include_path $path_pre "lib/lib.inc.php";
include_once 
$include_path;
include_once (
$path_pre "cm/cm_lib.inc.php");
fcm_load_secdb ($cm_security);


/*
This script will draw a pie graphic based on the data received via four variables:
$values, $series, $size and $title. The values are numeric values, the series are string values,
the size is the size in pixels and the title is a string. 
The values and series vars are arrays encoded using implode().
To give a softer image, we create a big chart and then we resize it using the imagecopyresampled 
function. If using GD library older than 2.01, we just create the image using more primitive 
functions and we don't resample the image. (The biggest handicap of GD 1.x is the lack of
imagefilledarc function.
Colors are rendered ramdomly.
*/

if ($cm_enable_gd) {
  
$cm_chart_piesizefraction 1.4;
  
$cm_chart_pieposfraction 1.3;
  
$cm_chart_fonttitle 5;
  
$cm_chart_fontlegend 2;
  
$cm_chart_fontfooter 1;
  if (
$cm_jpeg_truecolors) {
    
$cm_chart_reduction 2;
  }
  else {
    
$cm_chart_reduction 1;
  }
  
$cm_chart_minsize 200;
  
$cm_chart_mincolor 100;
  
$cm_chart_maxcolor 250;
  
$cm_chart_forcejpeg false;
  
  
  if (
$size $cm_chart_minsize) {
    
$size $cm_chart_minsize;
  }
  
$cm_chart_X abs (round ($size) * $cm_chart_reduction);
  
$cm_chart_Y abs (round ($size) * $cm_chart_reduction);
  
  
$cm_chart_values explode (","$values);
  
$cm_chart_series explode (","$series);
  
$cm_chart_title fcm_unhtmlentities (urldecode ($title));
  
  
$cm_chart_elements count ($cm_chart_values);
  if (
$cm_chart_elements $cm_max_statlist) {
    
$cm_chart_elements =$cm_max_statlist;
  }
  
$cm_chart_curcolor = array ();
  
$cm_chart_centerX round ($cm_chart_X 2);
  
$cm_chart_centerY round ($cm_chart_Y 2);
  
$cm_chart_finalX round ($cm_chart_X $cm_chart_reduction);
  
$cm_chart_finalY round ($cm_chart_Y $cm_chart_reduction);
  
  
// Create the image set some parameters and colors...
  
if ($cm_jpeg_truecolors) {
    
$cm_chart_pie imagecreatetruecolor ($cm_chart_X$cm_chart_Y);
    
imagealphablending ($cm_chart_pietrue);
    
$cm_chart_backcolor imagecolorexactalpha ($cm_chart_pie2552552550);
    
$cm_chart_outlinecolor imagecolorexactalpha ($cm_chart_pie0000);
    
imagesetthickness ($cm_chart_pie, ($cm_chart_reduction 1));
  }
  else {
    
$cm_chart_pie imagecreate ($cm_chart_X$cm_chart_Y);
    
$cm_chart_backcolor imagecolorallocate ($cm_chart_pie255255255);
    
$cm_chart_outlinecolor imagecolorallocate ($cm_chart_pie000);
  }
  
  
// Draw background and a frame...
  
imagefilledrectangle ($cm_chart_pie00$cm_chart_X 1$cm_chart_Y 1$cm_chart_backcolor);
  
imagerectangle ($cm_chart_pie00$cm_chart_X 1$cm_chart_Y 1$cm_chart_outlinecolor);
  
  
// Generate the random colors...
  
for ($cm_count 0$cm_count $cm_chart_elements$cm_count++) {
    
$cm_chart_curcolor[$cm_count][1] = rand ($cm_chart_mincolor$cm_chart_maxcolor);
    
$cm_chart_curcolor[$cm_count][2] = rand ($cm_chart_mincolor$cm_chart_maxcolor);
    
$cm_chart_curcolor[$cm_count][3] = rand ($cm_chart_mincolor$cm_chart_maxcolor);
    if (
$cm_jpeg_truecolors) {
      
$cm_chart_curcolor[$cm_count][0] = imagecolorexactalpha ($cm_chart_pie$cm_chart_curcolor[$cm_count][1], $cm_chart_curcolor[$cm_count][2], $cm_chart_curcolor[$cm_count][3], 0);
    }
    else {
      
$cm_chart_curcolor[$cm_count][0] = imagecolorallocate ($cm_chart_pie$cm_chart_curcolor[$cm_count][1], $cm_chart_curcolor[$cm_count][2], $cm_chart_curcolor[$cm_count][3]);
    }
  }
  
  
// Draw each pie segments...
  
$cm_chart_curpos 0;
  for (
$cm_count 0$cm_count $cm_chart_elements$cm_count++) {
    if (
$cm_jpeg_truecolors) {
      
$cm_chart_pieval round (3.6 $cm_chart_values[$cm_count]);
      
imagefilledarc ($cm_chart_pieround ($cm_chart_centerX $cm_chart_pieposfraction), round ($cm_chart_centerY $cm_chart_pieposfraction), round ($cm_chart_centerX $cm_chart_pieposfraction), round ($cm_chart_centerY $cm_chart_pieposfraction), $cm_chart_curpos$cm_chart_curpos $cm_chart_pieval$cm_chart_curcolor[$cm_count][0], IMG_ARC_PIE);
      
imagefilledarc ($cm_chart_pieround ($cm_chart_centerX $cm_chart_pieposfraction), round ($cm_chart_centerY $cm_chart_pieposfraction), round ($cm_chart_centerX $cm_chart_pieposfraction), round ($cm_chart_centerY $cm_chart_pieposfraction), $cm_chart_curpos$cm_chart_curpos $cm_chart_pieval$cm_chart_outlinecolorIMG_ARC_EDGED IMG_ARC_NOFILL);
      
$cm_chart_curpos += $cm_chart_pieval;
    }
    else {
      
$cm_chart_pieval round (3.6 $cm_chart_values[$cm_count]);
      
$cm_pieend_x round (($cm_chart_centerX $cm_chart_pieposfraction) + (($cm_chart_centerX $cm_chart_pieposfraction)/2) * cos(($cm_chart_curpos $cm_chart_pieval) * pi() / 180));
      
$cm_pieend_y round (($cm_chart_centerY $cm_chart_pieposfraction) + (($cm_chart_centerY $cm_chart_pieposfraction)/2) * sin(($cm_chart_curpos $cm_chart_pieval) * pi() / 180));
      
imagearc ($cm_chart_pieround ($cm_chart_centerX $cm_chart_pieposfraction), round ($cm_chart_centerY $cm_chart_pieposfraction), round ($cm_chart_centerX $cm_chart_pieposfraction), round ($cm_chart_centerY $cm_chart_pieposfraction), $cm_chart_curpos$cm_chart_curpos $cm_chart_pieval$cm_chart_outlinecolor);
      
imageline ($cm_chart_pieround ($cm_chart_centerX $cm_chart_pieposfraction), round ($cm_chart_centerY $cm_chart_pieposfraction), $cm_pieend_x$cm_pieend_y$cm_chart_outlinecolor);
      
$cm_chart_curpos += $cm_chart_pieval;
    }
  }
  
// if using old GD lib, we need to draw the first line and fill the segments...
  
if (!$cm_jpeg_truecolors) {
    
$cm_pieend_x round (($cm_chart_centerX $cm_chart_pieposfraction) + (($cm_chart_centerX $cm_chart_pieposfraction)/2) * cos(0));
    
$cm_pieend_y round (($cm_chart_centerY $cm_chart_pieposfraction) + (($cm_chart_centerY $cm_chart_pieposfraction)/2) * sin(0));
    
imageline ($cm_chart_pieround ($cm_chart_centerX $cm_chart_pieposfraction), round ($cm_chart_centerY $cm_chart_pieposfraction), $cm_pieend_x$cm_pieend_y$cm_chart_outlinecolor);
    
$cm_chart_curpos 0;
    for (
$cm_count 0$cm_count $cm_chart_elements$cm_count++) {
      
$cm_chart_pieval round (3.6 $cm_chart_values[$cm_count]);
      
$cm_pieend_x round (($cm_chart_centerX $cm_chart_pieposfraction) + ((($cm_chart_centerX $cm_chart_pieposfraction)/2) * cos(($cm_chart_curpos + ($cm_chart_pieval 2)) * pi() / 180) / 2));
      
$cm_pieend_y round (($cm_chart_centerY $cm_chart_pieposfraction) + ((($cm_chart_centerY $cm_chart_pieposfraction)/2) * sin(($cm_chart_curpos + ($cm_chart_pieval 2)) * pi() / 180) / 2));
      
imagefilltoborder ($cm_chart_pie$cm_pieend_x$cm_pieend_y$cm_chart_outlinecolor$cm_chart_curcolor[$cm_count][0]);
      
$cm_chart_curpos += $cm_chart_pieval;
    }
  }
  
  
  if (
$cm_jpeg_truecolors) {
    
$cm_chart_finalpie imagecreatetruecolor ($cm_chart_finalX$cm_chart_finalY);
    
imagealphablending ($cm_chart_finalpietrue);
    
$cm_chart_outlinecolor imagecolorexactalpha ($cm_chart_finalpie0000);
    
$cm_chart_alphacolor imagecolorexactalpha ($cm_chart_finalpie00070);
    
imagecopyresampled ($cm_chart_finalpie$cm_chart_pie0000$cm_chart_finalX$cm_chart_finalY$cm_chart_X$cm_chart_Y);
  }
  else {
    
$cm_chart_finalpie imagecreate ($cm_chart_finalX$cm_chart_finalY);
    
imagecopyresized ($cm_chart_finalpie$cm_chart_pie0000$cm_chart_finalX$cm_chart_finalY$cm_chart_X$cm_chart_Y);
    
imagepalettecopy ($cm_chart_finalpie$cm_chart_pie);
    
$cm_chart_outlinecolor imagecolorallocate ($cm_chart_finalpie000);
    
$cm_chart_alphacolor   imagecolorallocate ($cm_chart_finalpie000);
  }
  
  
imagestring ($cm_chart_finalpie$cm_chart_fonttitle1010$cm_chart_title,  $cm_chart_outlinecolor);
  
imagestring ($cm_chart_finalpie$cm_chart_fontfooter10, ($cm_chart_finalY imagefontheight ($cm_chart_fontfooter) - 5), fcm_curdate_string (),  $cm_chart_outlinecolor);
  
  for (
$cm_count 0$cm_count $cm_chart_elements$cm_count++) {
    
$cm_chart_recX1 10;
    
$cm_chart_recY1 20 15 + ($cm_count imagefontheight ($cm_chart_fontlegend));
    
$cm_chart_recX2 20;
    
$cm_chart_recY2 20 15 + ($cm_count imagefontheight ($cm_chart_fontlegend) + imagefontheight ($cm_chart_fontlegend));
    
imagefilledrectangle ($cm_chart_finalpie$cm_chart_recX1$cm_chart_recY1$cm_chart_recX2$cm_chart_recY2$cm_chart_curcolor[$cm_count][0]);
    
imagerectangle ($cm_chart_finalpie$cm_chart_recX1$cm_chart_recY1$cm_chart_recX2$cm_chart_recY2$cm_chart_outlinecolor);
    
imagestring ($cm_chart_finalpie$cm_chart_fontlegend25$cm_chart_recY1$cm_chart_series[$cm_count] . " (" $cm_chart_values[$cm_count] . "%)"$cm_chart_alphacolor);
  }
  
  
  
imageinterlace($cm_chart_finalpie1);
  if (
function_exists ("imagepng") && ($cm_chart_forcejpeg == false)) {
    
header("Content-type: image/png");
    
header("Content-Disposition: attachment; filename=x.png");
    
imagepng ($cm_chart_finalpie);
  }
  elseif (
function_exists ("imagejpeg")) {
    
header("Content-type: image/jpeg");
    
header("Content-Disposition: filename=x.jpg");
    
imagejpeg ($cm_chart_finalpie""$cm_jpeg_quality);
  }
  else {
    echo 
"<p>{$cm_text["errorcreatingimg"]}</p>";
  }
}
else {
  
header("Content-type: image/gif");
  
header("Content-Disposition: filename=x.gif");
  
readfile ($cm_imgpath "/t.gif");
}

?>
 
 
NA fum/lmd: 2004.09.16
Copyright ©1994-2018 by Mario A. Valdez-Ramírez.
no siga este enlace / do not follow this link