Look: Si PHP suprieur 4.2, alors on utlise PHPlot 5.0 pour gnrer les graphes plutot que PHPlot 4.4.6
This commit is contained in:
parent
3d2c071c22
commit
8d2b289619
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.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
|
||||
@ -18,7 +18,6 @@
|
||||
*
|
||||
* $Id$
|
||||
* $Source$
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
@ -33,7 +32,7 @@ require_once(DOL_DOCUMENT_ROOT."/comm/propal/stats/propalestats.class.php");
|
||||
require_once(DOL_DOCUMENT_ROOT."/dolgraph.class.php");
|
||||
|
||||
$WIDTH=500;
|
||||
$HEIGHT=250;
|
||||
$HEIGHT=200;
|
||||
|
||||
|
||||
llxHeader();
|
||||
@ -44,7 +43,7 @@ $stats = new PropaleStats($db);
|
||||
$year = strftime("%Y", time());
|
||||
$data = $stats->getNbByMonthWithPrevYear($year);
|
||||
|
||||
if (! is_dir($conf->propal->dir_images)) { mkdir($conf->propal->dir_images); }
|
||||
create_exdir($conf->propal->dir_images);
|
||||
|
||||
if (!$user->rights->commercial->client->voir || $user->societe_id)
|
||||
{
|
||||
@ -67,6 +66,9 @@ if (! $mesg)
|
||||
$px->SetMaxValue($px->GetCeilMaxValue());
|
||||
$px->SetWidth($WIDTH);
|
||||
$px->SetHeight($HEIGHT);
|
||||
$px->SetShading(5);
|
||||
$px->SetHorizTickIncrement(1);
|
||||
$px->SetPrecisionY(0);
|
||||
$px->draw($filename);
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.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
|
||||
@ -18,7 +18,6 @@
|
||||
*
|
||||
* $Id$
|
||||
* $Source$
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
@ -42,7 +41,7 @@ $mesg.= $langs->trans("Year")." $year";
|
||||
$mesg.= ' <a href="month.php?year='.($year + 1).'">'.img_next().'</a>';
|
||||
|
||||
$WIDTH=500;
|
||||
$HEIGHT=250;
|
||||
$HEIGHT=200;
|
||||
|
||||
/*
|
||||
*
|
||||
@ -76,6 +75,9 @@ if (! $mesg)
|
||||
$px->SetMaxValue($px->GetCeilMaxValue());
|
||||
$px->SetWidth($WIDTH);
|
||||
$px->SetHeight($HEIGHT);
|
||||
$px->SetShading(5);
|
||||
$px->SetHorizTickIncrement(1);
|
||||
$px->SetPrecisionY(0);
|
||||
$px->draw($filename);
|
||||
}
|
||||
|
||||
@ -109,6 +111,9 @@ if (! $mesg)
|
||||
$px->SetMaxValue($px->GetCeilMaxValue());
|
||||
$px->SetWidth($WIDTH);
|
||||
$px->SetHeight($HEIGHT);
|
||||
$px->SetShading(5);
|
||||
$px->SetHorizTickIncrement(1);
|
||||
$px->SetPrecisionY(0);
|
||||
$px->draw($filename_amount, $data, $year);
|
||||
}
|
||||
$res = $stats->getAverageByMonth($year);
|
||||
@ -141,6 +146,9 @@ if (! $mesg)
|
||||
$px->SetMaxValue($px->GetCeilMaxValue());
|
||||
$px->SetWidth($WIDTH);
|
||||
$px->SetHeight($HEIGHT);
|
||||
$px->SetShading(5);
|
||||
$px->SetHorizTickIncrement(1);
|
||||
$px->SetPrecisionY(0);
|
||||
$px->draw($filename_avg);
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/* Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (c) 2004-2005 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (c) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.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
|
||||
@ -33,7 +33,7 @@ require_once(DOL_DOCUMENT_ROOT."/commande/stats/commandestats.class.php");
|
||||
require_once(DOL_DOCUMENT_ROOT."/dolgraph.class.php");
|
||||
|
||||
$WIDTH=500;
|
||||
$HEIGHT=250;
|
||||
$HEIGHT=200;
|
||||
|
||||
if (!$user->rights->commande->lire) accessforbidden();
|
||||
|
||||
@ -85,7 +85,10 @@ if (! $mesg)
|
||||
$px->SetLegend(array($year - 1, $year));
|
||||
$px->SetWidth($WIDTH);
|
||||
$px->SetHeight($HEIGHT);
|
||||
$px->SetYLabel("Nombre de commande");
|
||||
$px->SetYLabel($langs->trans("NbOfOrder"));
|
||||
$px->SetShading(5);
|
||||
$px->SetHorizTickIncrement(1);
|
||||
$px->SetPrecisionY(0);
|
||||
$px->draw($filename);
|
||||
}
|
||||
$rows = $stats->getNbByYear();
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/* Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (c) 2004 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (c) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.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
|
||||
@ -18,7 +18,6 @@
|
||||
*
|
||||
* $Id$
|
||||
* $Source$
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
@ -49,7 +48,7 @@ $mesg.= $langs->trans("Year")." $year";
|
||||
$mesg.= ' <a href="month.php?year='.($year + 1).'">'.img_next().'</a>';
|
||||
|
||||
$WIDTH=500;
|
||||
$HEIGHT=250;
|
||||
$HEIGHT=200;
|
||||
|
||||
/*
|
||||
*
|
||||
@ -79,11 +78,13 @@ $mesg = $px->isGraphKo();
|
||||
if (! $mesg)
|
||||
{
|
||||
$px->SetData($data);
|
||||
$px->SetPrecisionY(0);
|
||||
$px->SetMaxValue($px->GetCeilMaxValue());
|
||||
$px->SetWidth($WIDTH);
|
||||
$px->SetHeight($HEIGHT);
|
||||
$px->SetYLabel("Nombre de commande");
|
||||
$px->SetYLabel($langs->trans("NbOfOrders"));
|
||||
$px->SetShading(5);
|
||||
$px->SetHorizTickIncrement(1);
|
||||
$px->SetPrecisionY(0);
|
||||
$px->draw($filename);
|
||||
}
|
||||
|
||||
@ -112,11 +113,13 @@ $mesg = $px->isGraphKo();
|
||||
if (! $mesg)
|
||||
{
|
||||
$px->SetData($data);
|
||||
$px->SetPrecisionY(0);
|
||||
$px->SetMaxValue($px->GetCeilMaxValue());
|
||||
$px->SetWidth($WIDTH);
|
||||
$px->SetHeight($HEIGHT);
|
||||
$px->SetYLabel($langs->trans("AmountTotal"));
|
||||
$px->SetShading(5);
|
||||
$px->SetHorizTickIncrement(1);
|
||||
$px->SetPrecisionY(0);
|
||||
$px->draw($filename_amount);
|
||||
}
|
||||
$res = $stats->getAverageByMonth($year);
|
||||
@ -144,11 +147,13 @@ $mesg = $px->isGraphKo();
|
||||
if (! $mesg)
|
||||
{
|
||||
$px->SetData($data);
|
||||
$px->SetPrecisionY(0);
|
||||
$px->SetMaxValue($px->GetCeilMaxValue());
|
||||
$px->SetWidth($WIDTH);
|
||||
$px->SetHeight($HEIGHT);
|
||||
$px->SetYLabel($langs->trans("AmountAverage"));
|
||||
$px->SetShading(5);
|
||||
$px->SetHorizTickIncrement(1);
|
||||
$px->SetPrecisionY(0);
|
||||
$px->draw($filename_avg);
|
||||
}
|
||||
|
||||
|
||||
@ -51,8 +51,8 @@ if ($account > 0)
|
||||
$acct->fetch($account);
|
||||
|
||||
// Definition de $width et $height
|
||||
$width = 750;
|
||||
$height = 280;
|
||||
$width = 700;
|
||||
$height = 200;
|
||||
|
||||
// Calcul de $min et $max
|
||||
$sql = "SELECT min(".$db->pdate("datev")."),max(".$db->pdate("datev").")";
|
||||
@ -147,18 +147,20 @@ if ($account > 0)
|
||||
$graph_datas=array();
|
||||
foreach($datas as $i => $val)
|
||||
{
|
||||
$graph_datas[$i]=array("$labels[$i]",$datas[$i]);
|
||||
$graph_datas[$i]=array($labels[$i],$datas[$i]);
|
||||
}
|
||||
$px = new DolGraph();
|
||||
$px->SetData($graph_datas);
|
||||
$px->SetLegend(array($langs->trans("Balance")));
|
||||
$px->SetMaxValue($px->GetCeilMaxValue());
|
||||
$px->SetMinValue($px->GetFloorMinValue());
|
||||
$px->SetMaxValue($px->GetCeilMaxValue()<0?0:$px->GetCeilMaxValue());
|
||||
$px->SetMinValue($px->GetFloorMinValue()>0?0:$px->GetFloorMinValue());
|
||||
$px->SetTitle($title);
|
||||
$px->SetWidth($width);
|
||||
$px->SetHeight($height);
|
||||
$px->SetType('lines');
|
||||
$px->setBgColor('onglet');
|
||||
$px->SetHorizTickIncrement(1);
|
||||
$px->SetPrecisionY(0);
|
||||
$px->draw($file);
|
||||
|
||||
|
||||
@ -226,7 +228,7 @@ if ($account > 0)
|
||||
}
|
||||
if (strftime("%d",$day) == 15)
|
||||
{
|
||||
$labels[$i] = strftime("%m",$day);
|
||||
$labels[$i] = dolibarr_print_date($day,"%b");
|
||||
}
|
||||
$day += 86400;
|
||||
$xyear = strftime("%Y",$day);
|
||||
@ -244,12 +246,15 @@ if ($account > 0)
|
||||
$px = new DolGraph();
|
||||
$px->SetData($graph_datas);
|
||||
$px->SetLegend(array($langs->trans("Balance")));
|
||||
$px->SetMaxValue($px->GetCeilMaxValue());
|
||||
$px->SetMaxValue($px->GetCeilMaxValue()<0?0:$px->GetCeilMaxValue());
|
||||
$px->SetMinValue($px->GetFloorMinValue()>0?0:$px->GetFloorMinValue());
|
||||
$px->SetTitle($title);
|
||||
$px->SetWidth($width);
|
||||
$px->SetHeight($height);
|
||||
$px->SetType('lines');
|
||||
$px->setBgColor('onglet');
|
||||
$px->SetHorizTickIncrement(30.41); // 30.41 jours/mois en moyenne
|
||||
$px->SetPrecisionY(0);
|
||||
$px->draw($file);
|
||||
|
||||
|
||||
@ -287,7 +292,7 @@ if ($account > 0)
|
||||
$subtotal = 0;
|
||||
$day = $min;
|
||||
$i = 0;
|
||||
while ($day <= ($max+1000000)) // On va bien au dela du dernier jour
|
||||
while ($day <= ($max+86400)) // On va au dela du dernier jour
|
||||
{
|
||||
$subtotal = $subtotal + (isset($amounts[strftime("%Y%m%d",$day)]) ? $amounts[strftime("%Y%m%d",$day)] : 0);
|
||||
//print strftime ("%e %d %m %y",$day)." ".$subtotal."\n<br>";
|
||||
@ -318,13 +323,14 @@ if ($account > 0)
|
||||
$px = new DolGraph();
|
||||
$px->SetData($graph_datas);
|
||||
$px->SetLegend(array($langs->trans("Balance")));
|
||||
$px->SetMaxValue($px->GetCeilMaxValue());
|
||||
$px->SetMinValue($px->GetFloorMinValue());
|
||||
$px->SetMaxValue($px->GetCeilMaxValue()<0?0:$px->GetCeilMaxValue());
|
||||
$px->SetMinValue($px->GetFloorMinValue()>0?0:$px->GetFloorMinValue());
|
||||
$px->SetTitle($title);
|
||||
$px->SetWidth($width);
|
||||
$px->SetHeight($height);
|
||||
$px->SetType('lines');
|
||||
$px->setBgColor('onglet');
|
||||
$px->SetPrecisionY(0);
|
||||
$px->draw($file);
|
||||
|
||||
|
||||
@ -380,7 +386,7 @@ if ($account > 0)
|
||||
{
|
||||
$data_credit[$i] = isset($credits[substr("0".($i+1),-2)]) ? $credits[substr("0".($i+1),-2)] : 0;
|
||||
$data_debit[$i] = isset($debits[substr("0".($i+1),-2)]) ? $debits[substr("0".($i+1),-2)] : 0;
|
||||
$labels[$i] = $i+1;
|
||||
$labels[$i] = strftime("%b",mktime(1,1,1,$i+1,1,2000));
|
||||
}
|
||||
|
||||
// Fabrication tableau 4
|
||||
@ -394,22 +400,30 @@ if ($account > 0)
|
||||
$px = new DolGraph();
|
||||
$px->SetData($graph_datas);
|
||||
$px->SetLegend(array($langs->trans("Debit"),$langs->trans("Credit")));
|
||||
$px->SetMaxValue($px->GetCeilMaxValue());
|
||||
$px->SetMinValue($px->GetFloorMinValue());
|
||||
$px->SetMaxValue($px->GetCeilMaxValue()<0?0:$px->GetCeilMaxValue());
|
||||
$px->SetMinValue($px->GetFloorMinValue()>0?0:$px->GetFloorMinValue());
|
||||
$px->SetTitle($title);
|
||||
$px->SetWidth($width);
|
||||
$px->SetHeight($height);
|
||||
$px->SetType('bars');
|
||||
$px->SetShading(8);
|
||||
$px->setBgColor('onglet');
|
||||
$px->SetHorizTickIncrement(1);
|
||||
$px->SetPrecisionY(0);
|
||||
$px->draw($file);
|
||||
|
||||
|
||||
// Onglets
|
||||
$head=bank_prepare_head($acct);
|
||||
dolibarr_fiche_head($head,'graph',$langs->trans("FinancialAccount"),0);
|
||||
|
||||
print '<table class="notopnoleftnoright" width="100%">';
|
||||
|
||||
print '<tr><td align="center">';
|
||||
$file = "mouvement.$account.$year.png";
|
||||
print '<img src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=bank&file='.$file.'" alt="" title="">';
|
||||
print '</td></tr>';
|
||||
|
||||
print '<tr><td align="center">';
|
||||
$file = "solde.$account.$year.$month.png";
|
||||
print '<img src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=bank&file='.$file.'" alt="" title="">';
|
||||
@ -425,11 +439,6 @@ if ($account > 0)
|
||||
print '<img src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=bank&file='.$file.'" alt="" title="">';
|
||||
print '</td></tr>';
|
||||
|
||||
print '<tr><td align="center">';
|
||||
$file = "mouvement.$account.$year.png";
|
||||
print '<img src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=bank&file='.$file.'" alt="" title="">';
|
||||
print '</td></tr>';
|
||||
|
||||
|
||||
print '</table>';
|
||||
|
||||
|
||||
@ -31,7 +31,7 @@ require("./pre.inc.php");
|
||||
require_once(DOL_DOCUMENT_ROOT."/dolgraph.class.php");
|
||||
|
||||
$WIDTH=500;
|
||||
$HEIGHT=250;
|
||||
$HEIGHT=200;
|
||||
|
||||
// Sécurité accés client
|
||||
if ($user->societe_id > 0)
|
||||
@ -63,7 +63,9 @@ if (! $mesg)
|
||||
$px->SetLegend(array($year - 1, $year));
|
||||
$px->SetWidth($WIDTH);
|
||||
$px->SetHeight($HEIGHT);
|
||||
$px->SetShading(4);
|
||||
$px->SetShading(5);
|
||||
$px->SetHorizTickIncrement(1);
|
||||
$px->SetPrecisionY(0);
|
||||
$px->draw($filename);
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (c) 2004-2005 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (c) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.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
|
||||
@ -18,7 +18,6 @@
|
||||
*
|
||||
* $Id$
|
||||
* $Source$
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
@ -31,18 +30,17 @@
|
||||
require("./pre.inc.php");
|
||||
require_once(DOL_DOCUMENT_ROOT."/dolgraph.class.php");
|
||||
|
||||
$GRAPHHEIGHT=250;
|
||||
$GRAPHWIDTH=500;
|
||||
$GRAPHHEIGHT=200;
|
||||
|
||||
/*
|
||||
* Sécurité accés client
|
||||
*/
|
||||
// Sécurité accés client
|
||||
if ($user->societe_id > 0)
|
||||
{
|
||||
$action = '';
|
||||
$socidp = $user->societe_id;
|
||||
}
|
||||
|
||||
|
||||
llxHeader();
|
||||
|
||||
$year = isset($_GET["year"])?$_GET["year"]:date("Y",time());
|
||||
@ -70,6 +68,9 @@ if (! $mesg)
|
||||
$px->SetPrecisionY(0);
|
||||
$px->SetWidth($GRAPHWIDTH);
|
||||
$px->SetHeight($GRAPHHEIGHT);
|
||||
$px->SetShading(5);
|
||||
$px->SetHorizTickIncrement(1);
|
||||
$px->SetPrecisionY(0);
|
||||
$px->draw($filename);
|
||||
}
|
||||
|
||||
@ -95,6 +96,9 @@ if (! $mesg)
|
||||
$px->SetPrecisionY(0);
|
||||
$px->SetWidth($GRAPHWIDTH);
|
||||
$px->SetHeight($GRAPHHEIGHT);
|
||||
$px->SetShading(5);
|
||||
$px->SetHorizTickIncrement(1);
|
||||
$px->SetPrecisionY(0);
|
||||
$px->draw($filename_amount);
|
||||
}
|
||||
$res = $stats->getAverageByMonth($year);
|
||||
@ -119,6 +123,9 @@ if (! $mesg)
|
||||
$px->SetMaxValue($px->GetCeilMaxValue());
|
||||
$px->SetWidth($GRAPHWIDTH);
|
||||
$px->SetHeight($GRAPHHEIGHT);
|
||||
$px->SetShading(5);
|
||||
$px->SetHorizTickIncrement(1);
|
||||
$px->SetPrecisionY(0);
|
||||
$px->draw($filename_avg);
|
||||
}
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
/* Copyright (c) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (c) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.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
|
||||
@ -24,7 +24,7 @@
|
||||
\file htdocs/dolgraph.class.php
|
||||
\brief Fichier de la classe mère de gestion des graph phplot
|
||||
\version $Revision$
|
||||
\remarks Usage:
|
||||
\remarks Usage:
|
||||
$graph_data = array(array('labelA',yA),array('labelB',yB));
|
||||
array(array('labelA',yA1,...,yAn),array('labelB',yB1,...yBn));
|
||||
$px = new DolGraph();
|
||||
@ -54,17 +54,19 @@ class DolGraph
|
||||
var $MinValue=0;
|
||||
var $SetShading=0;
|
||||
var $PrecisionY=-1;
|
||||
|
||||
var $SetHorizTickIncrement=-1;
|
||||
var $SetNumXTicks=-1;
|
||||
|
||||
var $graph; // Objet PHPlot
|
||||
|
||||
|
||||
var $error;
|
||||
|
||||
|
||||
|
||||
|
||||
function DolGraph()
|
||||
{
|
||||
global $conf;
|
||||
global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet;
|
||||
|
||||
|
||||
// Test si module GD présent
|
||||
$modules_list = get_loaded_extensions();
|
||||
$isgdinstalled=0;
|
||||
@ -77,19 +79,20 @@ class DolGraph
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Vérifie que chemin vers PHPLOT_PATH est connu et defini $graphpath
|
||||
// Vérifie que chemin vers PHPLOT_PATH est connu et definie $graphpath
|
||||
$graphpathdir=DOL_DOCUMENT_ROOT."/includes/phplot";
|
||||
if (defined('PHPLOT_PATH')) $graphpathdir=PHPLOT_PATH;
|
||||
if ($conf->global->PHPLOT_PATH) $graphpathdir=$conf->global->PHPLOT_PATH;
|
||||
if (! eregi('[\\\/]$',$graphpathdir)) $graphpathdir.='/';
|
||||
|
||||
include_once($graphpathdir.'phplot.php');
|
||||
|
||||
|
||||
|
||||
|
||||
// Défini propriétés de l'objet graphe
|
||||
$this->bordercolor = array(235,235,224);
|
||||
$this->datacolor = array(array(120,130,150), array(160,160,180), array(190,190,220));
|
||||
$this->bgcolor = array(235,235,224);
|
||||
|
||||
|
||||
$color_file = DOL_DOCUMENT_ROOT."/theme/".$conf->theme."/graph-color.php";
|
||||
if (is_readable($color_file))
|
||||
{
|
||||
@ -101,14 +104,14 @@ class DolGraph
|
||||
//print 'bgcolor: '.join(',',$this->bgcolor).'<br>';
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
function isGraphKo()
|
||||
{
|
||||
return $this->error;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* \brief Génère le fichier graphique sur le disque
|
||||
* \param file Nom du fichier image
|
||||
@ -117,11 +120,11 @@ class DolGraph
|
||||
{
|
||||
// Prepare parametres
|
||||
$this->prepare($file);
|
||||
|
||||
|
||||
// Génère le fichier $file
|
||||
$this->graph->DrawGraph();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* \brief Prépare l'objet PHPlot
|
||||
* \param file Nom du fichier image à générer
|
||||
@ -130,8 +133,12 @@ class DolGraph
|
||||
{
|
||||
// Define the object
|
||||
$this->graph = new PHPlot($this->width, $this->height);
|
||||
|
||||
$phplotversion=4;
|
||||
if (defined('TOTY')) $phplotversion=5;
|
||||
|
||||
$this->graph->SetIsInline(1);
|
||||
|
||||
|
||||
$this->graph->SetPlotType($this->type);
|
||||
$this->graph->SetDataValues($this->data);
|
||||
|
||||
@ -139,20 +146,46 @@ class DolGraph
|
||||
if ($this->PrecisionY > -1)
|
||||
{
|
||||
$this->graph->SetPrecisionY($this->PrecisionY);
|
||||
// Si precision de 0
|
||||
if ($this->PrecisionY == 0)
|
||||
if ($this->PrecisionY == 0) // Si precision de 0
|
||||
{
|
||||
$maxval=$this->getCeilMaxValue();
|
||||
if (abs($maxval) < 2)
|
||||
// Determine un nombre de ticks qui permet decoupage qui tombe juste
|
||||
$maxval=$this->getMaxValue();
|
||||
$minval=$this->getMinValue();
|
||||
if ($maxval * $minval >= 0) // Si du meme signe
|
||||
{
|
||||
$this->SetMaxValue(2);
|
||||
$this->graph->SetNumVertTicks(2);
|
||||
$plage=$maxval;
|
||||
}
|
||||
else
|
||||
{
|
||||
$maxticks=min(10,$maxval);
|
||||
$this->graph->SetNumVertTicks($maxticks);
|
||||
$plage=$maxval-$minval;
|
||||
}
|
||||
if (abs($plage) <= 2)
|
||||
{
|
||||
$this->SetMaxValue(2);
|
||||
$maxticks=2;
|
||||
}
|
||||
else
|
||||
{
|
||||
$maxticks=10;
|
||||
if (substr($plage,0,1) == 3 || substr($plage,0,1) == 6)
|
||||
{
|
||||
$maxticks=min(6,$plage);
|
||||
}
|
||||
elseif (substr($plage,0,1) == 4 || substr($plage,0,1) == 8)
|
||||
{
|
||||
$maxticks=min(8,$plage);
|
||||
}
|
||||
elseif (substr($plage,0,1) == 7)
|
||||
{
|
||||
$maxticks=min(7,$plage);
|
||||
}
|
||||
elseif (substr($plage,0,1) == 9)
|
||||
{
|
||||
$maxticks=min(9,$plage);
|
||||
}
|
||||
}
|
||||
$this->graph->SetNumVertTicks($maxticks);
|
||||
// print 'minval='.$minval.' - maxval='.$maxval.' - plage='.$plage.' - maxticks='.$maxticks.'<br>';
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -160,21 +193,23 @@ class DolGraph
|
||||
$this->graph->SetPrecisionY(3-strlen(round($this->GetMaxValueInData())));
|
||||
}
|
||||
$this->graph->SetPrecisionX(0);
|
||||
|
||||
|
||||
// Set areas
|
||||
$top_space=40;
|
||||
if ($phplotversion >= 5) $top_space=25;
|
||||
$left_space=80; // For y labels
|
||||
$right_space=10; // If no legend
|
||||
if (isset($this->Legend)) $right_space=70; // For legend
|
||||
|
||||
$this->graph->SetNewPlotAreaPixels($left_space, 40, $this->width-$right_space, $this->height-40);
|
||||
$this->graph->SetNewPlotAreaPixels($left_space, $top_space, $this->width-$right_space, $this->height-40);
|
||||
if (isset($this->MaxValue))
|
||||
{
|
||||
$this->graph->SetPlotAreaWorld(0,$this->MinValue,sizeof($this->data),$this->MaxValue);
|
||||
}
|
||||
|
||||
// Define title
|
||||
if (strlen($this->title)) $this->graph->SetTitle($this->title);
|
||||
|
||||
if (isset($this->title)) $this->graph->SetTitle($this->title);
|
||||
|
||||
// Défini position du graphe (et legende) au sein de l'image
|
||||
if (isset($this->Legend))
|
||||
{
|
||||
@ -191,66 +226,123 @@ class DolGraph
|
||||
$this->graph->SetBackgroundColor($this->bgcolor);
|
||||
$this->graph->SetDataColors($this->datacolor, $this->bordercolor);
|
||||
|
||||
//$this->graph->SetDrawHorizTicks(true); // Pour avoir les ticks axe x (phplot 5)
|
||||
$this->graph->SetHorizTickIncrement(1);
|
||||
if ($this->SetNumXTicks > -1)
|
||||
{
|
||||
if ($phplotversion >= 5) // If PHPlot 5, for compatibility
|
||||
{
|
||||
$this->graph->SetXLabelType('');
|
||||
$this->graph->SetNumXTicks($this->SetNumXTicks);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->graph->SetNumHorizTicks($this->SetNumXTicks);
|
||||
}
|
||||
}
|
||||
if ($this->SetHorizTickIncrement > -1)
|
||||
{
|
||||
// Les ticks sont en mode forcé
|
||||
$this->graph->SetHorizTickIncrement($this->SetHorizTickIncrement);
|
||||
if ($phplotversion >= 5) // If PHPlot 5, for compatibility
|
||||
{
|
||||
$this->graph->SetXLabelType('');
|
||||
$this->graph->SetXTickLabelPos('none');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Les ticks sont en mode automatique
|
||||
if ($phplotversion >= 5) // If PHPlot 5, for compatibility
|
||||
{
|
||||
$this->graph->SetXDataLabelPos('none');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//$this->graph->SetXGridLabelType('data');
|
||||
//$this->graph->SetXGridLabelType('');
|
||||
//$this->graph->SetXGridLabelType('title');
|
||||
if ($phplotversion >= 5)
|
||||
{
|
||||
// Ne gere pas la transparence
|
||||
// $this->graph->SetBgImage(DOL_DOCUMENT_ROOT.'/theme/dolibarr_logo_2.png','tile');
|
||||
$this->graph->SetDrawPlotAreaBackground(array(255,255,255));
|
||||
}
|
||||
|
||||
$this->graph->SetPlotBorderType("left"); // Affiche axe y a gauche uniquement
|
||||
$this->graph->SetVertTickPosition('plotleft'); // Affiche tick axe y a gauche uniquement
|
||||
|
||||
|
||||
$this->graph->SetOutputFile($file);
|
||||
}
|
||||
|
||||
|
||||
function SetPrecisionY($which_prec)
|
||||
{
|
||||
$this->PrecisionY = $which_prec;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
\remarks Utiliser SetNumTicks ou SetHorizTickIncrement mais pas les 2
|
||||
*/
|
||||
function SetHorizTickIncrement($xi)
|
||||
{
|
||||
$this->SetHorizTickIncrement = $xi;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
\remarks Utiliser SetNumTicks ou SetHorizTickIncrement mais pas les 2
|
||||
*/
|
||||
function SetNumXTicks($xt)
|
||||
{
|
||||
$this->SetNumXTicks = $xt;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
function SetYLabel($label)
|
||||
{
|
||||
$this->YLabel = $label;
|
||||
}
|
||||
|
||||
|
||||
function SetWidth($w)
|
||||
{
|
||||
$this->width = $w;
|
||||
}
|
||||
|
||||
|
||||
function SetTitle($title)
|
||||
{
|
||||
$this->title = $title;
|
||||
}
|
||||
|
||||
|
||||
function SetData($data)
|
||||
{
|
||||
$this->data = $data;
|
||||
}
|
||||
|
||||
|
||||
function SetType($type)
|
||||
{
|
||||
$this->type = $type;
|
||||
}
|
||||
|
||||
|
||||
function SetLegend($legend)
|
||||
{
|
||||
$this->Legend = $legend;
|
||||
}
|
||||
|
||||
|
||||
function SetMaxValue($max)
|
||||
{
|
||||
$this->MaxValue = $max;
|
||||
}
|
||||
function GetMaxValue()
|
||||
{
|
||||
return $this->MaxValue;
|
||||
}
|
||||
|
||||
function SetMinValue($min)
|
||||
{
|
||||
$this->MinValue = $min;
|
||||
}
|
||||
|
||||
function GetMinValue()
|
||||
{
|
||||
return $this->MinValue;
|
||||
}
|
||||
|
||||
function SetHeight($h)
|
||||
{
|
||||
$this->height = $h;
|
||||
@ -260,12 +352,12 @@ class DolGraph
|
||||
{
|
||||
$this->SetShading = $s;
|
||||
}
|
||||
|
||||
|
||||
function ResetBgColor()
|
||||
{
|
||||
unset($this->bgcolor);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* \brief Definie la couleur de fond du graphique
|
||||
* \param bg_color array(R,G,B) ou 'onglet' ou 'default'
|
||||
@ -290,7 +382,7 @@ class DolGraph
|
||||
$this->bgcolor = $bg_color;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function ResetDataColor()
|
||||
{
|
||||
unset($this->datacolor);
|
||||
@ -300,10 +392,10 @@ class DolGraph
|
||||
{
|
||||
$k = 0;
|
||||
$vals = array();
|
||||
|
||||
|
||||
$nblines = sizeof($this->data);
|
||||
$nbvalues = sizeof($this->data[0]) - 1;
|
||||
|
||||
|
||||
for ($j = 0 ; $j < $nblines ; $j++)
|
||||
{
|
||||
for ($i = 0 ; $i < $nbvalues ; $i++)
|
||||
@ -315,15 +407,15 @@ class DolGraph
|
||||
rsort($vals);
|
||||
return $vals[0];
|
||||
}
|
||||
|
||||
|
||||
function GetMinValueInData()
|
||||
{
|
||||
$k = 0;
|
||||
$vals = array();
|
||||
|
||||
|
||||
$nblines = sizeof($this->data);
|
||||
$nbvalues = sizeof($this->data[0]) - 1;
|
||||
|
||||
|
||||
for ($j = 0 ; $j < $nblines ; $j++)
|
||||
{
|
||||
for ($i = 0 ; $i < $nbvalues ; $i++)
|
||||
@ -335,10 +427,11 @@ class DolGraph
|
||||
sort($vals);
|
||||
return $vals[0];
|
||||
}
|
||||
|
||||
|
||||
function GetCeilMaxValue()
|
||||
{
|
||||
$max = $this->GetMaxValueInData();
|
||||
if ($max != 0) $max++;
|
||||
$size=strlen(abs(ceil($max)));
|
||||
$factor=1;
|
||||
for ($i=0; $i < ($size-1); $i++)
|
||||
@ -346,7 +439,7 @@ class DolGraph
|
||||
$factor*=10;
|
||||
}
|
||||
$res=ceil($max/$factor)*$factor;
|
||||
|
||||
|
||||
//print "max=".$max." res=".$res;
|
||||
return $res;
|
||||
}
|
||||
@ -354,6 +447,7 @@ class DolGraph
|
||||
function GetFloorMinValue()
|
||||
{
|
||||
$min = $this->GetMinValueInData();
|
||||
if ($min != 0) $min--;
|
||||
$size=strlen(abs(floor($min)));
|
||||
$factor=1;
|
||||
for ($i=0; $i < ($size-1); $i++)
|
||||
@ -361,7 +455,7 @@ class DolGraph
|
||||
$factor*=10;
|
||||
}
|
||||
$res=floor($min/$factor)*$factor;
|
||||
|
||||
|
||||
//print "min=".$min." res=".$res;
|
||||
return $res;
|
||||
}
|
||||
|
||||
2
htdocs/includes/phplot5/.cvsignore
Normal file
2
htdocs/includes/phplot5/.cvsignore
Normal file
@ -0,0 +1,2 @@
|
||||
doc
|
||||
examples
|
||||
1610
htdocs/includes/phplot5/ChangeLog
Normal file
1610
htdocs/includes/phplot5/ChangeLog
Normal file
File diff suppressed because it is too large
Load Diff
340
htdocs/includes/phplot5/LICENSE.GPL
Normal file
340
htdocs/includes/phplot5/LICENSE.GPL
Normal file
@ -0,0 +1,340 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
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
|
||||
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
||||
68
htdocs/includes/phplot5/LICENSE.PHP_3_0
Normal file
68
htdocs/includes/phplot5/LICENSE.PHP_3_0
Normal file
@ -0,0 +1,68 @@
|
||||
--------------------------------------------------------------------
|
||||
The PHP License, version 3.0
|
||||
Copyright (c) 1999 - 2003 The PHP Group. All rights reserved.
|
||||
--------------------------------------------------------------------
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, is permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
|
||||
3. The name "PHP" must not be used to endorse or promote products
|
||||
derived from this software without prior written permission. For
|
||||
written permission, please contact group@php.net.
|
||||
|
||||
4. Products derived from this software may not be called "PHP", nor
|
||||
may "PHP" appear in their name, without prior written permission
|
||||
from group@php.net. You may indicate that your software works in
|
||||
conjunction with PHP by saying "Foo for PHP" instead of calling
|
||||
it "PHP Foo" or "phpfoo"
|
||||
|
||||
5. The PHP Group may publish revised and/or new versions of the
|
||||
license from time to time. Each version will be given a
|
||||
distinguishing version number.
|
||||
Once covered code has been published under a particular version
|
||||
of the license, you may always continue to use it under the terms
|
||||
of that version. You may also choose to use such covered code
|
||||
under the terms of any subsequent version of the license
|
||||
published by the PHP Group. No one other than the PHP Group has
|
||||
the right to modify the terms applicable to covered code created
|
||||
under this License.
|
||||
|
||||
6. Redistributions of any form whatsoever must retain the following
|
||||
acknowledgment:
|
||||
"This product includes PHP, freely available from
|
||||
<http://www.php.net/>".
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE PHP DEVELOPMENT TEAM ``AS IS'' AND
|
||||
ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PHP
|
||||
DEVELOPMENT TEAM OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
--------------------------------------------------------------------
|
||||
|
||||
This software consists of voluntary contributions made by many
|
||||
individuals on behalf of the PHP Group.
|
||||
|
||||
The PHP Group can be contacted via Email at group@php.net.
|
||||
|
||||
For more information on the PHP Group and the PHP project,
|
||||
please see <http://www.php.net>.
|
||||
|
||||
This product includes the Zend Engine, freely available at
|
||||
<http://www.zend.com>.
|
||||
45
htdocs/includes/phplot5/README.txt
Normal file
45
htdocs/includes/phplot5/README.txt
Normal file
@ -0,0 +1,45 @@
|
||||
This is a class for creating scientific and business charts.
|
||||
To start extract the files with
|
||||
|
||||
tar zxvf phplot-5.0rc2.tar.gz
|
||||
|
||||
and then point your browser to
|
||||
|
||||
doc/index.php.
|
||||
|
||||
There are some configuration settings that you will need to make
|
||||
based on your setup.
|
||||
|
||||
1. File Type: Depending on the version of GD you are using,
|
||||
you may or may not be able to use GIF or PNG. That is
|
||||
set with the function.
|
||||
|
||||
SetFileFormat("<filetype>") where <filetype> is png, gif, jpeg, ...
|
||||
|
||||
or edit the file phplot.php and change the line
|
||||
|
||||
var $file_format = "<filetype>";
|
||||
|
||||
2. TTF: If you have TTF installed then use (and read the docs)
|
||||
|
||||
SetUseTTF(TRUE);
|
||||
|
||||
otherwise use
|
||||
|
||||
SetUseTTF(FALSE);
|
||||
|
||||
Everything else should be independent of what version you are using.
|
||||
This has been tested with PHP3, PHP4, GD1.2 and GD 3.8.
|
||||
|
||||
To start please see doc/index.php. There you'll find examples, tests and
|
||||
some introductory documents.
|
||||
|
||||
--------------------------
|
||||
|
||||
This is distributed with NO WARRANTY and under the terms of the GNU GPL
|
||||
and PHP licenses. If you use it - a cookie or some credit would be nice.
|
||||
|
||||
You can get a copy of the GNU GPL at http://www.gnu.org/copyleft/gpl.html
|
||||
You can get a copy of the PHP License at http://www.php.net/license.html
|
||||
|
||||
See http://www.sourceforge.net/projects/phplot/ for the latest changes.
|
||||
4455
htdocs/includes/phplot5/phplot.php
Normal file
4455
htdocs/includes/phplot5/phplot.php
Normal file
File diff suppressed because it is too large
Load Diff
258
htdocs/includes/phplot5/phplot_data.php
Normal file
258
htdocs/includes/phplot5/phplot_data.php
Normal file
@ -0,0 +1,258 @@
|
||||
<?php
|
||||
/* $Id$
|
||||
*
|
||||
* Copyright (C) 2000 Afan Ottenheimer. Released under
|
||||
* the GPL and PHP licenses as stated in the the README file which
|
||||
* should have been included with this document.
|
||||
|
||||
* This is an subclass for phplot.php and should only be
|
||||
* called after phplot.ini has been called. This extends
|
||||
* phplot by adding additional routines that can be used
|
||||
* to modify the data arrays.
|
||||
*
|
||||
* Data must be a *numerical* array, this is enforced in SetDataValues()
|
||||
*/
|
||||
|
||||
require_once("phplot.php");
|
||||
|
||||
class PHPlot_Data extends PHPlot
|
||||
{
|
||||
/*!
|
||||
* Constructor
|
||||
*/
|
||||
function PHPlot_Data($which_width=600, $which_height=400, $which_output_file=NULL, $which_input_file=NULL)
|
||||
{
|
||||
if (! isset($this->img)) {
|
||||
$this->PHPlot($which_width, $which_height, $which_output_file, $which_input_file);
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* Will scale all data rows
|
||||
* Maybe later I will do a function that only scales some rows
|
||||
* if $even is TRUE, data will be scaled with "even" factors.
|
||||
* \note Original code by Thiemo Nagel
|
||||
*/
|
||||
function DoScaleData($even, $show_in_legend)
|
||||
{
|
||||
$offset = 0; // We use this not to read labels in text-data
|
||||
|
||||
if ($this->data_type == 'text-data') {
|
||||
$offset = 1;
|
||||
} elseif ($this->data_type != 'data-data') {
|
||||
$this->DrawError('wrong data type!!');
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Determine maxima for each data row in array $max
|
||||
// Put maximum of the maxima in $maxmax
|
||||
$maxmax = 0;
|
||||
for($i=0; $i < $this->num_data_rows; $i++) {
|
||||
$rowsize = count($this->data[$i]);
|
||||
for ($j=$offset; $j < $rowsize; $j++) {
|
||||
if ($this->data[$i][$j] > @ $max[$j])
|
||||
$max[$j] = $this->data[$i][$j];
|
||||
if (@ $max[$j] > $maxmax)
|
||||
$maxmax = $max[$j];
|
||||
}
|
||||
}
|
||||
|
||||
// determine amplification factor $amplify
|
||||
$end = count($max) + $offset;
|
||||
for ($i=$offset; $i < $end; $i++) {
|
||||
if ($max[$i] == 0 || $max[$i] == $maxmax) {
|
||||
$amplify[$i] = 1; // no divide by zero
|
||||
} else {
|
||||
if ($even) {
|
||||
$amp = pow(10,round(log10($maxmax / $max[$i]))-1);
|
||||
if ($amp * $max[$i] * 5 < $maxmax) {
|
||||
$amp *= 5;
|
||||
} elseif ($amp * $max[$i] * 2 < $maxmax) {
|
||||
$amp *= 2;
|
||||
}
|
||||
} else {
|
||||
$amp = $maxmax / $max[$i];
|
||||
$digits = floor(log10($amp));
|
||||
$amp = round($amp/pow(10,$digits-1))*pow(10,$digits-1);
|
||||
}
|
||||
$amplify[$i] = $amp;
|
||||
}
|
||||
if ($amplify[$i] != 1 && $show_in_legend)
|
||||
@ $this->legend[$i] .= "*$amplify[$i]";
|
||||
}
|
||||
|
||||
// Amplify data
|
||||
// On my machine, running 1000 iterations over 1000 rows of 12 elements each,
|
||||
// the for loops were 43.2% faster (MBD)
|
||||
for ($i = 0; $i < $this->num_data_rows; $i++) {
|
||||
$rowsize = count($this->data[$i]);
|
||||
for ($j=$offset; $j < $rowsize; $j++) {
|
||||
$this->data[$i][$j] *= $amplify[$j];
|
||||
}
|
||||
}
|
||||
|
||||
//Re-Scale Vertical Ticks if not already set
|
||||
if ( ! $this->y_tick_increment) {
|
||||
$this->SetYTickIncrement() ;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
} //function DoScaleData
|
||||
|
||||
|
||||
/*!
|
||||
* Computes a moving average of strength $interval for
|
||||
* data row number $datarow, where 0 denotes the first
|
||||
* row of y-data.
|
||||
*
|
||||
* \param int datarow Index of the row whereupon to make calculations
|
||||
* \param int interval Number of elements to use in average ("strength")
|
||||
* \param bool show Whether to tell about the moving average in the legend.
|
||||
* \param string color Color for the line to be drawn. This color is darkened.
|
||||
* Can be named or #RRGGBB.
|
||||
* \param int width Width of the line to be drawn.
|
||||
*
|
||||
* \note Original idea by Theimo Nagel
|
||||
*/
|
||||
function DoMovingAverage($datarow, $interval, $show=TRUE, $color=NULL, $width=NULL)
|
||||
{
|
||||
$off = 1; // Skip record #0 (data label)
|
||||
|
||||
$this->PadArrays();
|
||||
|
||||
if ($interval == 0) {
|
||||
$this->DrawError('DoMovingAverage(): interval can\'t be 0');
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ($datarow >= $this->records_per_group) {
|
||||
$this->DrawError("DoMovingAverage(): Data row out of bounds ($datarow >= $this->records_per_group)");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ($this->data_type == 'text-data') {
|
||||
// Ok. No need to set the offset to skip more records.
|
||||
} elseif ($this->data_type == 'data-data') {
|
||||
$off++; // first Y value at $data[][2]
|
||||
} else {
|
||||
$this->DrawError('DoMovingAverage(): wrong data type!!');
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Set color:
|
||||
if ($color) {
|
||||
array_push($this->ndx_data_colors, $this->SetIndexDarkColor($color));
|
||||
} else {
|
||||
array_push($this->ndx_data_colors, $this->SetIndexDarkColor($this->data_colors[$datarow]));
|
||||
}
|
||||
// Set line width:
|
||||
if ($width) {
|
||||
array_push($this->line_widths, $width);
|
||||
} else {
|
||||
array_push($this->line_widths, $this->line_widths[$datarow] * 2);
|
||||
}
|
||||
// Show in legend?
|
||||
if ($show) {
|
||||
$this->legend[$this->records_per_group-1] = "(MA[$datarow]:$interval)";
|
||||
}
|
||||
|
||||
$datarow += $off;
|
||||
for ($i = 0; $i < $this->num_data_rows; $i++) {
|
||||
$storage[$i % $interval] = @ $this->data[$i][$datarow];
|
||||
$ma = array_sum($storage);
|
||||
$ma /= count($storage);
|
||||
array_push($this->data[$i], $ma); // Push the data onto the array
|
||||
$this->num_recs[$i]++; // Tell the drawing functions it is there
|
||||
}
|
||||
$this->records_per_group++;
|
||||
// $this->FindDataLimits();
|
||||
return TRUE;
|
||||
} //function DoMovingAverage()
|
||||
|
||||
|
||||
/**
|
||||
* Computes an exponentially smoothed moving average.
|
||||
* @param int perc "smoothing percentage"
|
||||
* FIXME!!! I haven't checked this.
|
||||
*/
|
||||
function DoExponentialMovingAverage($datarow, $perc, $show_in_legend)
|
||||
{
|
||||
if ($this->data_type == 'text-data') {
|
||||
$datarow++;
|
||||
} elseif ($this->data_type != 'data-data') {
|
||||
$this->DrawError('DoWeightedMovingAverage(): wrong data type!!');
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ($show_in_legend) {
|
||||
$this->legend[$datarow] .= " (MA: $interval)";
|
||||
}
|
||||
|
||||
$storage[0] = $this->data[0][$datarow];
|
||||
for ($i=1;$i < $this->num_data_rows; $i++) {
|
||||
$storage[$i] = @ $storage[$i-1] + $perc * ($this->data[$i][$datarow] - $storage[$i-1]);
|
||||
$ma = array_sum($storage);
|
||||
$ma /= count($storage);
|
||||
$this->data[$i][$datarow] = $ma;
|
||||
}
|
||||
return TRUE;
|
||||
} // function DoExponentialMovingAverage()
|
||||
|
||||
|
||||
/*!
|
||||
* Removes the DataSet of number $index
|
||||
*/
|
||||
function DoRemoveDataSet($index)
|
||||
{
|
||||
$offset = 1;
|
||||
if ($this->data_type == 'data-data') {
|
||||
$offset++;
|
||||
} elseif ($this->data_type != 'text-data') {
|
||||
$this->DrawError('wrong data type!!');
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
$index += $offset;
|
||||
foreach ($this->data as $key=>$val) {
|
||||
foreach ($val as $key2=>$val2) {
|
||||
if ($key2 >= $index) {
|
||||
if (isset($this->data[$key][$key2+1])) {
|
||||
$this->data[$key][$key2] = $this->data[$key][$key2+1];
|
||||
} else {
|
||||
unset($this->data[$key][$key2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} // function DoRemoveDataSet
|
||||
|
||||
|
||||
/*!
|
||||
* Computes row x divided by row y, stores the result in row x
|
||||
* and deletes row y
|
||||
*/
|
||||
function DoDivision($x,$y)
|
||||
{
|
||||
$offset = 1;
|
||||
if ($this->data_type == 'data-data') {
|
||||
$offset++;
|
||||
} elseif ($this->data_type != 'text-data') {
|
||||
$this->DrawError('wrong data type!!');
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
$x += $offset; $y += $offset;
|
||||
reset($this->data);
|
||||
while (list($key, $val) = each($this->data)) {
|
||||
if ($this->data[$key][$y] == 0) {
|
||||
$this->data[$key][$x] = 0;
|
||||
} else {
|
||||
$this->data[$key][$x] /= $this->data[$key][$y];
|
||||
}
|
||||
}
|
||||
|
||||
$this->DoRemoveDataSet($y-$offset);
|
||||
} // function DoDivision
|
||||
|
||||
} // class PHPlot_Data extends PHPlot
|
||||
?>
|
||||
744
htdocs/includes/phplot5/rgb.inc.php
Normal file
744
htdocs/includes/phplot5/rgb.inc.php
Normal file
@ -0,0 +1,744 @@
|
||||
<?php
|
||||
//Looking forward to the day when memory is so
|
||||
//plentiful to be able to set gigantic arrays,
|
||||
//we offer this taken from PHPLOT.
|
||||
$ColorArray = array(
|
||||
"snow" => array(255, 250, 250),
|
||||
"ghost white" => array(248, 248, 255),
|
||||
"GhostWhite" => array(248, 248, 255),
|
||||
"white smoke" => array(245, 245, 245),
|
||||
"WhiteSmoke" => array(245, 245, 245),
|
||||
"gainsboro" => array(220, 220, 220),
|
||||
"floral white" => array(255, 250, 240),
|
||||
"FloralWhite" => array(255, 250, 240),
|
||||
"old lace" => array(253, 245, 230),
|
||||
"OldLace" => array(253, 245, 230),
|
||||
"linen" => array(250, 240, 230),
|
||||
"antique white" => array(250, 235, 215),
|
||||
"AntiqueWhite" => array(250, 235, 215),
|
||||
"papaya whip" => array(255, 239, 213),
|
||||
"PapayaWhip" => array(255, 239, 213),
|
||||
"blanched almond" => array(255, 235, 205),
|
||||
"BlanchedAlmond" => array(255, 235, 205),
|
||||
"bisque" => array(255, 228, 196),
|
||||
"peach puff" => array(255, 218, 185),
|
||||
"PeachPuff" => array(255, 218, 185),
|
||||
"navajo white" => array(255, 222, 173),
|
||||
"NavajoWhite" => array(255, 222, 173),
|
||||
"moccasin" => array(255, 228, 181),
|
||||
"cornsilk" => array(255, 248, 220),
|
||||
"ivory" => array(255, 255, 240),
|
||||
"lemon chiffon" => array(255, 250, 205),
|
||||
"LemonChiffon" => array(255, 250, 205),
|
||||
"seashell" => array(255, 245, 238),
|
||||
"honeydew" => array(240, 255, 240),
|
||||
"mint cream" => array(245, 255, 250),
|
||||
"MintCream" => array(245, 255, 250),
|
||||
"azure" => array(240, 255, 255),
|
||||
"alice blue" => array(240, 248, 255),
|
||||
"AliceBlue" => array(240, 248, 255),
|
||||
"lavender" => array(230, 230, 250),
|
||||
"lavender blush" => array(255, 240, 245),
|
||||
"LavenderBlush" => array(255, 240, 245),
|
||||
"misty rose" => array(255, 228, 225),
|
||||
"MistyRose" => array(255, 228, 225),
|
||||
"white" => array(255, 255, 255),
|
||||
"black" => array( 0, 0, 0),
|
||||
"dark slate gray" => array( 47, 79, 79),
|
||||
"DarkSlateGray" => array( 47, 79, 79),
|
||||
"dark slate grey" => array( 47, 79, 79),
|
||||
"DarkSlateGrey" => array( 47, 79, 79),
|
||||
"dim gray" => array(105, 105, 105),
|
||||
"DimGray" => array(105, 105, 105),
|
||||
"dim grey" => array(105, 105, 105),
|
||||
"DimGrey" => array(105, 105, 105),
|
||||
"slate gray" => array(112, 128, 144),
|
||||
"SlateGray" => array(112, 128, 144),
|
||||
"slate grey" => array(112, 128, 144),
|
||||
"SlateGrey" => array(112, 128, 144),
|
||||
"light slate gray" => array(119, 136, 153),
|
||||
"LightSlateGray" => array(119, 136, 153),
|
||||
"light slate grey" => array(119, 136, 153),
|
||||
"LightSlateGrey" => array(119, 136, 153),
|
||||
"gray" => array(190, 190, 190),
|
||||
"grey" => array(190, 190, 190),
|
||||
"light grey" => array(211, 211, 211),
|
||||
"LightGrey" => array(211, 211, 211),
|
||||
"light gray" => array(211, 211, 211),
|
||||
"LightGray" => array(211, 211, 211),
|
||||
"midnight blue" => array( 25, 25, 112),
|
||||
"MidnightBlue" => array( 25, 25, 112),
|
||||
"navy" => array( 0, 0, 128),
|
||||
"navy blue" => array( 0, 0, 128),
|
||||
"NavyBlue" => array( 0, 0, 128),
|
||||
"cornflower blue" => array(100, 149, 237),
|
||||
"CornflowerBlue" => array(100, 149, 237),
|
||||
"dark slate blue" => array( 72, 61, 139),
|
||||
"DarkSlateBlue" => array( 72, 61, 139),
|
||||
"slate blue" => array(106, 90, 205),
|
||||
"SlateBlue" => array(106, 90, 205),
|
||||
"medium slate blue" => array(123, 104, 238),
|
||||
"MediumSlateBlue" => array(123, 104, 238),
|
||||
"light slate blue" => array(132, 112, 255),
|
||||
"LightSlateBlue" => array(132, 112, 255),
|
||||
"medium blue" => array( 0, 0, 205),
|
||||
"MediumBlue" => array( 0, 0, 205),
|
||||
"royal blue" => array( 65, 105, 225),
|
||||
"RoyalBlue" => array( 65, 105, 225),
|
||||
"blue" => array( 0, 0, 255),
|
||||
"dodger blue" => array( 30, 144, 255),
|
||||
"DodgerBlue" => array( 30, 144, 255),
|
||||
"deep sky blue" => array( 0, 191, 255),
|
||||
"DeepSkyBlue" => array( 0, 191, 255),
|
||||
"sky blue" => array(135, 206, 235),
|
||||
"SkyBlue" => array(135, 206, 235),
|
||||
"light sky blue" => array(135, 206, 250),
|
||||
"LightSkyBlue" => array(135, 206, 250),
|
||||
"steel blue" => array( 70, 130, 180),
|
||||
"SteelBlue" => array( 70, 130, 180),
|
||||
"light steel blue" => array(176, 196, 222),
|
||||
"LightSteelBlue" => array(176, 196, 222),
|
||||
"light blue" => array(173, 216, 230),
|
||||
"LightBlue" => array(173, 216, 230),
|
||||
"powder blue" => array(176, 224, 230),
|
||||
"PowderBlue" => array(176, 224, 230),
|
||||
"pale turquoise" => array(175, 238, 238),
|
||||
"PaleTurquoise" => array(175, 238, 238),
|
||||
"dark turquoise" => array( 0, 206, 209),
|
||||
"DarkTurquoise" => array( 0, 206, 209),
|
||||
"medium turquoise" => array( 72, 209, 204),
|
||||
"MediumTurquoise" => array( 72, 209, 204),
|
||||
"turquoise" => array( 64, 224, 208),
|
||||
"cyan" => array( 0, 255, 255),
|
||||
"light cyan" => array(224, 255, 255),
|
||||
"LightCyan" => array(224, 255, 255),
|
||||
"cadet blue" => array( 95, 158, 160),
|
||||
"CadetBlue" => array( 95, 158, 160),
|
||||
"medium aquamarine" => array(102, 205, 170),
|
||||
"MediumAquamarine" => array(102, 205, 170),
|
||||
"aquamarine" => array(127, 255, 212),
|
||||
"dark green" => array( 0, 100, 0),
|
||||
"DarkGreen" => array( 0, 100, 0),
|
||||
"dark olive green" => array( 85, 107, 47),
|
||||
"DarkOliveGreen" => array( 85, 107, 47),
|
||||
"dark sea green" => array(143, 188, 143),
|
||||
"DarkSeaGreen" => array(143, 188, 143),
|
||||
"sea green" => array( 46, 139, 87),
|
||||
"SeaGreen" => array( 46, 139, 87),
|
||||
"medium sea green" => array( 60, 179, 113),
|
||||
"MediumSeaGreen" => array( 60, 179, 113),
|
||||
"light sea green" => array( 32, 178, 170),
|
||||
"LightSeaGreen" => array( 32, 178, 170),
|
||||
"pale green" => array(152, 251, 152),
|
||||
"PaleGreen" => array(152, 251, 152),
|
||||
"spring green" => array( 0, 255, 127),
|
||||
"SpringGreen" => array( 0, 255, 127),
|
||||
"lawn green" => array(124, 252, 0),
|
||||
"LawnGreen" => array(124, 252, 0),
|
||||
"green" => array( 0, 255, 0),
|
||||
"chartreuse" => array(127, 255, 0),
|
||||
"medium spring green" => array( 0, 250, 154),
|
||||
"MediumSpringGreen" => array( 0, 250, 154),
|
||||
"green yellow" => array(173, 255, 47),
|
||||
"GreenYellow" => array(173, 255, 47),
|
||||
"lime green" => array( 50, 205, 50),
|
||||
"LimeGreen" => array( 50, 205, 50),
|
||||
"yellow green" => array(154, 205, 50),
|
||||
"YellowGreen" => array(154, 205, 50),
|
||||
"forest green" => array( 34, 139, 34),
|
||||
"ForestGreen" => array( 34, 139, 34),
|
||||
"olive drab" => array(107, 142, 35),
|
||||
"OliveDrab" => array(107, 142, 35),
|
||||
"dark khaki" => array(189, 183, 107),
|
||||
"DarkKhaki" => array(189, 183, 107),
|
||||
"khaki" => array(240, 230, 140),
|
||||
"pale goldenrod" => array(238, 232, 170),
|
||||
"PaleGoldenrod" => array(238, 232, 170),
|
||||
"light goldenrod yellow" => array(250, 250, 210),
|
||||
"LightGoldenrodYellow" => array(250, 250, 210),
|
||||
"light yellow" => array(255, 255, 224),
|
||||
"LightYellow" => array(255, 255, 224),
|
||||
"yellow" => array(255, 255, 0),
|
||||
"gold" => array(255, 215, 0),
|
||||
"light goldenrod" => array(238, 221, 130),
|
||||
"LightGoldenrod" => array(238, 221, 130),
|
||||
"goldenrod" => array(218, 165, 32),
|
||||
"dark goldenrod" => array(184, 134, 11),
|
||||
"DarkGoldenrod" => array(184, 134, 11),
|
||||
"rosy brown" => array(188, 143, 143),
|
||||
"RosyBrown" => array(188, 143, 143),
|
||||
"indian red" => array(205, 92, 92),
|
||||
"IndianRed" => array(205, 92, 92),
|
||||
"saddle brown" => array(139, 69, 19),
|
||||
"SaddleBrown" => array(139, 69, 19),
|
||||
"sienna" => array(160, 82, 45),
|
||||
"peru" => array(205, 133, 63),
|
||||
"burlywood" => array(222, 184, 135),
|
||||
"beige" => array(245, 245, 220),
|
||||
"wheat" => array(245, 222, 179),
|
||||
"sandy brown" => array(244, 164, 96),
|
||||
"SandyBrown" => array(244, 164, 96),
|
||||
"tan" => array(210, 180, 140),
|
||||
"chocolate" => array(210, 105, 30),
|
||||
"firebrick" => array(178, 34, 34),
|
||||
"brown" => array(165, 42, 42),
|
||||
"dark salmon" => array(233, 150, 122),
|
||||
"DarkSalmon" => array(233, 150, 122),
|
||||
"salmon" => array(250, 128, 114),
|
||||
"light salmon" => array(255, 160, 122),
|
||||
"LightSalmon" => array(255, 160, 122),
|
||||
"orange" => array(255, 165, 0),
|
||||
"dark orange" => array(255, 140, 0),
|
||||
"DarkOrange" => array(255, 140, 0),
|
||||
"coral" => array(255, 127, 80),
|
||||
"light coral" => array(240, 128, 128),
|
||||
"LightCoral" => array(240, 128, 128),
|
||||
"tomato" => array(255, 99, 71),
|
||||
"orange red" => array(255, 69, 0),
|
||||
"OrangeRed" => array(255, 69, 0),
|
||||
"red" => array(255, 0, 0),
|
||||
"hot pink" => array(255, 105, 180),
|
||||
"HotPink" => array(255, 105, 180),
|
||||
"deep pink" => array(255, 20, 147),
|
||||
"DeepPink" => array(255, 20, 147),
|
||||
"pink" => array(255, 192, 203),
|
||||
"light pink" => array(255, 182, 193),
|
||||
"LightPink" => array(255, 182, 193),
|
||||
"pale violet red" => array(219, 112, 147),
|
||||
"PaleVioletRed" => array(219, 112, 147),
|
||||
"maroon" => array(176, 48, 96),
|
||||
"medium violet red" => array(199, 21, 133),
|
||||
"MediumVioletRed" => array(199, 21, 133),
|
||||
"violet red" => array(208, 32, 144),
|
||||
"VioletRed" => array(208, 32, 144),
|
||||
"magenta" => array(255, 0, 255),
|
||||
"violet" => array(238, 130, 238),
|
||||
"plum" => array(221, 160, 221),
|
||||
"orchid" => array(218, 112, 214),
|
||||
"medium orchid" => array(186, 85, 211),
|
||||
"MediumOrchid" => array(186, 85, 211),
|
||||
"dark orchid" => array(153, 50, 204),
|
||||
"DarkOrchid" => array(153, 50, 204),
|
||||
"dark violet" => array(148, 0, 211),
|
||||
"DarkViolet" => array(148, 0, 211),
|
||||
"blue violet" => array(138, 43, 226),
|
||||
"BlueViolet" => array(138, 43, 226),
|
||||
"purple" => array(160, 32, 240),
|
||||
"medium purple" => array(147, 112, 219),
|
||||
"MediumPurple" => array(147, 112, 219),
|
||||
"thistle" => array(216, 191, 216),
|
||||
"snow1" => array(255, 250, 250),
|
||||
"snow2" => array(238, 233, 233),
|
||||
"snow3" => array(205, 201, 201),
|
||||
"snow4" => array(139, 137, 137),
|
||||
"seashell1" => array(255, 245, 238),
|
||||
"seashell2" => array(238, 229, 222),
|
||||
"seashell3" => array(205, 197, 191),
|
||||
"seashell4" => array(139, 134, 130),
|
||||
"AntiqueWhite1" => array(255, 239, 219),
|
||||
"AntiqueWhite2" => array(238, 223, 204),
|
||||
"AntiqueWhite3" => array(205, 192, 176),
|
||||
"AntiqueWhite4" => array(139, 131, 120),
|
||||
"bisque1" => array(255, 228, 196),
|
||||
"bisque2" => array(238, 213, 183),
|
||||
"bisque3" => array(205, 183, 158),
|
||||
"bisque4" => array(139, 125, 107),
|
||||
"PeachPuff1" => array(255, 218, 185),
|
||||
"PeachPuff2" => array(238, 203, 173),
|
||||
"PeachPuff3" => array(205, 175, 149),
|
||||
"PeachPuff4" => array(139, 119, 101),
|
||||
"NavajoWhite1" => array(255, 222, 173),
|
||||
"NavajoWhite2" => array(238, 207, 161),
|
||||
"NavajoWhite3" => array(205, 179, 139),
|
||||
"NavajoWhite4" => array(139, 121, 94),
|
||||
"LemonChiffon1" => array(255, 250, 205),
|
||||
"LemonChiffon2" => array(238, 233, 191),
|
||||
"LemonChiffon3" => array(205, 201, 165),
|
||||
"LemonChiffon4" => array(139, 137, 112),
|
||||
"cornsilk1" => array(255, 248, 220),
|
||||
"cornsilk2" => array(238, 232, 205),
|
||||
"cornsilk3" => array(205, 200, 177),
|
||||
"cornsilk4" => array(139, 136, 120),
|
||||
"ivory1" => array(255, 255, 240),
|
||||
"ivory2" => array(238, 238, 224),
|
||||
"ivory3" => array(205, 205, 193),
|
||||
"ivory4" => array(139, 139, 131),
|
||||
"honeydew1" => array(240, 255, 240),
|
||||
"honeydew2" => array(224, 238, 224),
|
||||
"honeydew3" => array(193, 205, 193),
|
||||
"honeydew4" => array(131, 139, 131),
|
||||
"LavenderBlush1" => array(255, 240, 245),
|
||||
"LavenderBlush2" => array(238, 224, 229),
|
||||
"LavenderBlush3" => array(205, 193, 197),
|
||||
"LavenderBlush4" => array(139, 131, 134),
|
||||
"MistyRose1" => array(255, 228, 225),
|
||||
"MistyRose2" => array(238, 213, 210),
|
||||
"MistyRose3" => array(205, 183, 181),
|
||||
"MistyRose4" => array(139, 125, 123),
|
||||
"azure1" => array(240, 255, 255),
|
||||
"azure2" => array(224, 238, 238),
|
||||
"azure3" => array(193, 205, 205),
|
||||
"azure4" => array(131, 139, 139),
|
||||
"SlateBlue1" => array(131, 111, 255),
|
||||
"SlateBlue2" => array(122, 103, 238),
|
||||
"SlateBlue3" => array(105, 89, 205),
|
||||
"SlateBlue4" => array( 71, 60, 139),
|
||||
"RoyalBlue1" => array( 72, 118, 255),
|
||||
"RoyalBlue2" => array( 67, 110, 238),
|
||||
"RoyalBlue3" => array( 58, 95, 205),
|
||||
"RoyalBlue4" => array( 39, 64, 139),
|
||||
"blue1" => array( 0, 0, 255),
|
||||
"blue2" => array( 0, 0, 238),
|
||||
"blue3" => array( 0, 0, 205),
|
||||
"blue4" => array( 0, 0, 139),
|
||||
"DodgerBlue1" => array( 30, 144, 255),
|
||||
"DodgerBlue2" => array( 28, 134, 238),
|
||||
"DodgerBlue3" => array( 24, 116, 205),
|
||||
"DodgerBlue4" => array( 16, 78, 139),
|
||||
"SteelBlue1" => array( 99, 184, 255),
|
||||
"SteelBlue2" => array( 92, 172, 238),
|
||||
"SteelBlue3" => array( 79, 148, 205),
|
||||
"SteelBlue4" => array( 54, 100, 139),
|
||||
"DeepSkyBlue1" => array( 0, 191, 255),
|
||||
"DeepSkyBlue2" => array( 0, 178, 238),
|
||||
"DeepSkyBlue3" => array( 0, 154, 205),
|
||||
"DeepSkyBlue4" => array( 0, 104, 139),
|
||||
"SkyBlue1" => array(135, 206, 255),
|
||||
"SkyBlue2" => array(126, 192, 238),
|
||||
"SkyBlue3" => array(108, 166, 205),
|
||||
"SkyBlue4" => array( 74, 112, 139),
|
||||
"LightSkyBlue1" => array(176, 226, 255),
|
||||
"LightSkyBlue2" => array(164, 211, 238),
|
||||
"LightSkyBlue3" => array(141, 182, 205),
|
||||
"LightSkyBlue4" => array( 96, 123, 139),
|
||||
"SlateGray1" => array(198, 226, 255),
|
||||
"SlateGray2" => array(185, 211, 238),
|
||||
"SlateGray3" => array(159, 182, 205),
|
||||
"SlateGray4" => array(108, 123, 139),
|
||||
"LightSteelBlue1" => array(202, 225, 255),
|
||||
"LightSteelBlue2" => array(188, 210, 238),
|
||||
"LightSteelBlue3" => array(162, 181, 205),
|
||||
"LightSteelBlue4" => array(110, 123, 139),
|
||||
"LightBlue1" => array(191, 239, 255),
|
||||
"LightBlue2" => array(178, 223, 238),
|
||||
"LightBlue3" => array(154, 192, 205),
|
||||
"LightBlue4" => array(104, 131, 139),
|
||||
"LightCyan1" => array(224, 255, 255),
|
||||
"LightCyan2" => array(209, 238, 238),
|
||||
"LightCyan3" => array(180, 205, 205),
|
||||
"LightCyan4" => array(122, 139, 139),
|
||||
"PaleTurquoise1" => array(187, 255, 255),
|
||||
"PaleTurquoise2" => array(174, 238, 238),
|
||||
"PaleTurquoise3" => array(150, 205, 205),
|
||||
"PaleTurquoise4" => array(102, 139, 139),
|
||||
"CadetBlue1" => array(152, 245, 255),
|
||||
"CadetBlue2" => array(142, 229, 238),
|
||||
"CadetBlue3" => array(122, 197, 205),
|
||||
"CadetBlue4" => array( 83, 134, 139),
|
||||
"turquoise1" => array( 0, 245, 255),
|
||||
"turquoise2" => array( 0, 229, 238),
|
||||
"turquoise3" => array( 0, 197, 205),
|
||||
"turquoise4" => array( 0, 134, 139),
|
||||
"cyan1" => array( 0, 255, 255),
|
||||
"cyan2" => array( 0, 238, 238),
|
||||
"cyan3" => array( 0, 205, 205),
|
||||
"cyan4" => array( 0, 139, 139),
|
||||
"DarkSlateGray1" => array(151, 255, 255),
|
||||
"DarkSlateGray2" => array(141, 238, 238),
|
||||
"DarkSlateGray3" => array(121, 205, 205),
|
||||
"DarkSlateGray4" => array( 82, 139, 139),
|
||||
"aquamarine1" => array(127, 255, 212),
|
||||
"aquamarine2" => array(118, 238, 198),
|
||||
"aquamarine3" => array(102, 205, 170),
|
||||
"aquamarine4" => array( 69, 139, 116),
|
||||
"DarkSeaGreen1" => array(193, 255, 193),
|
||||
"DarkSeaGreen2" => array(180, 238, 180),
|
||||
"DarkSeaGreen3" => array(155, 205, 155),
|
||||
"DarkSeaGreen4" => array(105, 139, 105),
|
||||
"SeaGreen1" => array( 84, 255, 159),
|
||||
"SeaGreen2" => array( 78, 238, 148),
|
||||
"SeaGreen3" => array( 67, 205, 128),
|
||||
"SeaGreen4" => array( 46, 139, 87),
|
||||
"PaleGreen1" => array(154, 255, 154),
|
||||
"PaleGreen2" => array(144, 238, 144),
|
||||
"PaleGreen3" => array(124, 205, 124),
|
||||
"PaleGreen4" => array( 84, 139, 84),
|
||||
"SpringGreen1" => array( 0, 255, 127),
|
||||
"SpringGreen2" => array( 0, 238, 118),
|
||||
"SpringGreen3" => array( 0, 205, 102),
|
||||
"SpringGreen4" => array( 0, 139, 69),
|
||||
"green1" => array( 0, 255, 0),
|
||||
"green2" => array( 0, 238, 0),
|
||||
"green3" => array( 0, 205, 0),
|
||||
"green4" => array( 0, 139, 0),
|
||||
"chartreuse1" => array(127, 255, 0),
|
||||
"chartreuse2" => array(118, 238, 0),
|
||||
"chartreuse3" => array(102, 205, 0),
|
||||
"chartreuse4" => array( 69, 139, 0),
|
||||
"OliveDrab1" => array(192, 255, 62),
|
||||
"OliveDrab2" => array(179, 238, 58),
|
||||
"OliveDrab3" => array(154, 205, 50),
|
||||
"OliveDrab4" => array(105, 139, 34),
|
||||
"DarkOliveGreen1" => array(202, 255, 112),
|
||||
"DarkOliveGreen2" => array(188, 238, 104),
|
||||
"DarkOliveGreen3" => array(162, 205, 90),
|
||||
"DarkOliveGreen4" => array(110, 139, 61),
|
||||
"khaki1" => array(255, 246, 143),
|
||||
"khaki2" => array(238, 230, 133),
|
||||
"khaki3" => array(205, 198, 115),
|
||||
"khaki4" => array(139, 134, 78),
|
||||
"LightGoldenrod1" => array(255, 236, 139),
|
||||
"LightGoldenrod2" => array(238, 220, 130),
|
||||
"LightGoldenrod3" => array(205, 190, 112),
|
||||
"LightGoldenrod4" => array(139, 129, 76),
|
||||
"LightYellow1" => array(255, 255, 224),
|
||||
"LightYellow2" => array(238, 238, 209),
|
||||
"LightYellow3" => array(205, 205, 180),
|
||||
"LightYellow4" => array(139, 139, 122),
|
||||
"yellow1" => array(255, 255, 0),
|
||||
"yellow2" => array(238, 238, 0),
|
||||
"yellow3" => array(205, 205, 0),
|
||||
"yellow4" => array(139, 139, 0),
|
||||
"gold1" => array(255, 215, 0),
|
||||
"gold2" => array(238, 201, 0),
|
||||
"gold3" => array(205, 173, 0),
|
||||
"gold4" => array(139, 117, 0),
|
||||
"goldenrod1" => array(255, 193, 37),
|
||||
"goldenrod2" => array(238, 180, 34),
|
||||
"goldenrod3" => array(205, 155, 29),
|
||||
"goldenrod4" => array(139, 105, 20),
|
||||
"DarkGoldenrod1" => array(255, 185, 15),
|
||||
"DarkGoldenrod2" => array(238, 173, 14),
|
||||
"DarkGoldenrod3" => array(205, 149, 12),
|
||||
"DarkGoldenrod4" => array(139, 101, 8),
|
||||
"RosyBrown1" => array(255, 193, 193),
|
||||
"RosyBrown2" => array(238, 180, 180),
|
||||
"RosyBrown3" => array(205, 155, 155),
|
||||
"RosyBrown4" => array(139, 105, 105),
|
||||
"IndianRed1" => array(255, 106, 106),
|
||||
"IndianRed2" => array(238, 99, 99),
|
||||
"IndianRed3" => array(205, 85, 85),
|
||||
"IndianRed4" => array(139, 58, 58),
|
||||
"sienna1" => array(255, 130, 71),
|
||||
"sienna2" => array(238, 121, 66),
|
||||
"sienna3" => array(205, 104, 57),
|
||||
"sienna4" => array(139, 71, 38),
|
||||
"burlywood1" => array(255, 211, 155),
|
||||
"burlywood2" => array(238, 197, 145),
|
||||
"burlywood3" => array(205, 170, 125),
|
||||
"burlywood4" => array(139, 115, 85),
|
||||
"wheat1" => array(255, 231, 186),
|
||||
"wheat2" => array(238, 216, 174),
|
||||
"wheat3" => array(205, 186, 150),
|
||||
"wheat4" => array(139, 126, 102),
|
||||
"tan1" => array(255, 165, 79),
|
||||
"tan2" => array(238, 154, 73),
|
||||
"tan3" => array(205, 133, 63),
|
||||
"tan4" => array(139, 90, 43),
|
||||
"chocolate1" => array(255, 127, 36),
|
||||
"chocolate2" => array(238, 118, 33),
|
||||
"chocolate3" => array(205, 102, 29),
|
||||
"chocolate4" => array(139, 69, 19),
|
||||
"firebrick1" => array(255, 48, 48),
|
||||
"firebrick2" => array(238, 44, 44),
|
||||
"firebrick3" => array(205, 38, 38),
|
||||
"firebrick4" => array(139, 26, 26),
|
||||
"brown1" => array(255, 64, 64),
|
||||
"brown2" => array(238, 59, 59),
|
||||
"brown3" => array(205, 51, 51),
|
||||
"brown4" => array(139, 35, 35),
|
||||
"salmon1" => array(255, 140, 105),
|
||||
"salmon2" => array(238, 130, 98),
|
||||
"salmon3" => array(205, 112, 84),
|
||||
"salmon4" => array(139, 76, 57),
|
||||
"LightSalmon1" => array(255, 160, 122),
|
||||
"LightSalmon2" => array(238, 149, 114),
|
||||
"LightSalmon3" => array(205, 129, 98),
|
||||
"LightSalmon4" => array(139, 87, 66),
|
||||
"orange1" => array(255, 165, 0),
|
||||
"orange2" => array(238, 154, 0),
|
||||
"orange3" => array(205, 133, 0),
|
||||
"orange4" => array(139, 90, 0),
|
||||
"DarkOrange1" => array(255, 127, 0),
|
||||
"DarkOrange2" => array(238, 118, 0),
|
||||
"DarkOrange3" => array(205, 102, 0),
|
||||
"DarkOrange4" => array(139, 69, 0),
|
||||
"coral1" => array(255, 114, 86),
|
||||
"coral2" => array(238, 106, 80),
|
||||
"coral3" => array(205, 91, 69),
|
||||
"coral4" => array(139, 62, 47),
|
||||
"tomato1" => array(255, 99, 71),
|
||||
"tomato2" => array(238, 92, 66),
|
||||
"tomato3" => array(205, 79, 57),
|
||||
"tomato4" => array(139, 54, 38),
|
||||
"OrangeRed1" => array(255, 69, 0),
|
||||
"OrangeRed2" => array(238, 64, 0),
|
||||
"OrangeRed3" => array(205, 55, 0),
|
||||
"OrangeRed4" => array(139, 37, 0),
|
||||
"red1" => array(255, 0, 0),
|
||||
"red2" => array(238, 0, 0),
|
||||
"red3" => array(205, 0, 0),
|
||||
"red4" => array(139, 0, 0),
|
||||
"DeepPink1" => array(255, 20, 147),
|
||||
"DeepPink2" => array(238, 18, 137),
|
||||
"DeepPink3" => array(205, 16, 118),
|
||||
"DeepPink4" => array(139, 10, 80),
|
||||
"HotPink1" => array(255, 110, 180),
|
||||
"HotPink2" => array(238, 106, 167),
|
||||
"HotPink3" => array(205, 96, 144),
|
||||
"HotPink4" => array(139, 58, 98),
|
||||
"pink1" => array(255, 181, 197),
|
||||
"pink2" => array(238, 169, 184),
|
||||
"pink3" => array(205, 145, 158),
|
||||
"pink4" => array(139, 99, 108),
|
||||
"LightPink1" => array(255, 174, 185),
|
||||
"LightPink2" => array(238, 162, 173),
|
||||
"LightPink3" => array(205, 140, 149),
|
||||
"LightPink4" => array(139, 95, 101),
|
||||
"PaleVioletRed1" => array(255, 130, 171),
|
||||
"PaleVioletRed2" => array(238, 121, 159),
|
||||
"PaleVioletRed3" => array(205, 104, 137),
|
||||
"PaleVioletRed4" => array(139, 71, 93),
|
||||
"maroon1" => array(255, 52, 179),
|
||||
"maroon2" => array(238, 48, 167),
|
||||
"maroon3" => array(205, 41, 144),
|
||||
"maroon4" => array(139, 28, 98),
|
||||
"VioletRed1" => array(255, 62, 150),
|
||||
"VioletRed2" => array(238, 58, 140),
|
||||
"VioletRed3" => array(205, 50, 120),
|
||||
"VioletRed4" => array(139, 34, 82),
|
||||
"magenta1" => array(255, 0, 255),
|
||||
"magenta2" => array(238, 0, 238),
|
||||
"magenta3" => array(205, 0, 205),
|
||||
"magenta4" => array(139, 0, 139),
|
||||
"orchid1" => array(255, 131, 250),
|
||||
"orchid2" => array(238, 122, 233),
|
||||
"orchid3" => array(205, 105, 201),
|
||||
"orchid4" => array(139, 71, 137),
|
||||
"plum1" => array(255, 187, 255),
|
||||
"plum2" => array(238, 174, 238),
|
||||
"plum3" => array(205, 150, 205),
|
||||
"plum4" => array(139, 102, 139),
|
||||
"MediumOrchid1" => array(224, 102, 255),
|
||||
"MediumOrchid2" => array(209, 95, 238),
|
||||
"MediumOrchid3" => array(180, 82, 205),
|
||||
"MediumOrchid4" => array(122, 55, 139),
|
||||
"DarkOrchid1" => array(191, 62, 255),
|
||||
"DarkOrchid2" => array(178, 58, 238),
|
||||
"DarkOrchid3" => array(154, 50, 205),
|
||||
"DarkOrchid4" => array(104, 34, 139),
|
||||
"purple1" => array(155, 48, 255),
|
||||
"purple2" => array(145, 44, 238),
|
||||
"purple3" => array(125, 38, 205),
|
||||
"purple4" => array( 85, 26, 139),
|
||||
"MediumPurple1" => array(171, 130, 255),
|
||||
"MediumPurple2" => array(159, 121, 238),
|
||||
"MediumPurple3" => array(137, 104, 205),
|
||||
"MediumPurple4" => array( 93, 71, 139),
|
||||
"thistle1" => array(255, 225, 255),
|
||||
"thistle2" => array(238, 210, 238),
|
||||
"thistle3" => array(205, 181, 205),
|
||||
"thistle4" => array(139, 123, 139),
|
||||
"gray0" => array( 0, 0, 0),
|
||||
"grey0" => array( 0, 0, 0),
|
||||
"gray1" => array( 3, 3, 3),
|
||||
"grey1" => array( 3, 3, 3),
|
||||
"gray2" => array( 5, 5, 5),
|
||||
"grey2" => array( 5, 5, 5),
|
||||
"gray3" => array( 8, 8, 8),
|
||||
"grey3" => array( 8, 8, 8),
|
||||
"gray4" => array( 10, 10, 10),
|
||||
"grey4" => array( 10, 10, 10),
|
||||
"gray5" => array( 13, 13, 13),
|
||||
"grey5" => array( 13, 13, 13),
|
||||
"gray6" => array( 15, 15, 15),
|
||||
"grey6" => array( 15, 15, 15),
|
||||
"gray7" => array( 18, 18, 18),
|
||||
"grey7" => array( 18, 18, 18),
|
||||
"gray8" => array( 20, 20, 20),
|
||||
"grey8" => array( 20, 20, 20),
|
||||
"gray9" => array( 23, 23, 23),
|
||||
"grey9" => array( 23, 23, 23),
|
||||
"gray10" => array( 26, 26, 26),
|
||||
"grey10" => array( 26, 26, 26),
|
||||
"gray11" => array( 28, 28, 28),
|
||||
"grey11" => array( 28, 28, 28),
|
||||
"gray12" => array( 31, 31, 31),
|
||||
"grey12" => array( 31, 31, 31),
|
||||
"gray13" => array( 33, 33, 33),
|
||||
"grey13" => array( 33, 33, 33),
|
||||
"gray14" => array( 36, 36, 36),
|
||||
"grey14" => array( 36, 36, 36),
|
||||
"gray15" => array( 38, 38, 38),
|
||||
"grey15" => array( 38, 38, 38),
|
||||
"gray16" => array( 41, 41, 41),
|
||||
"grey16" => array( 41, 41, 41),
|
||||
"gray17" => array( 43, 43, 43),
|
||||
"grey17" => array( 43, 43, 43),
|
||||
"gray18" => array( 46, 46, 46),
|
||||
"grey18" => array( 46, 46, 46),
|
||||
"gray19" => array( 48, 48, 48),
|
||||
"grey19" => array( 48, 48, 48),
|
||||
"gray20" => array( 51, 51, 51),
|
||||
"grey20" => array( 51, 51, 51),
|
||||
"gray21" => array( 54, 54, 54),
|
||||
"grey21" => array( 54, 54, 54),
|
||||
"gray22" => array( 56, 56, 56),
|
||||
"grey22" => array( 56, 56, 56),
|
||||
"gray23" => array( 59, 59, 59),
|
||||
"grey23" => array( 59, 59, 59),
|
||||
"gray24" => array( 61, 61, 61),
|
||||
"grey24" => array( 61, 61, 61),
|
||||
"gray25" => array( 64, 64, 64),
|
||||
"grey25" => array( 64, 64, 64),
|
||||
"gray26" => array( 66, 66, 66),
|
||||
"grey26" => array( 66, 66, 66),
|
||||
"gray27" => array( 69, 69, 69),
|
||||
"grey27" => array( 69, 69, 69),
|
||||
"gray28" => array( 71, 71, 71),
|
||||
"grey28" => array( 71, 71, 71),
|
||||
"gray29" => array( 74, 74, 74),
|
||||
"grey29" => array( 74, 74, 74),
|
||||
"gray30" => array( 77, 77, 77),
|
||||
"grey30" => array( 77, 77, 77),
|
||||
"gray31" => array( 79, 79, 79),
|
||||
"grey31" => array( 79, 79, 79),
|
||||
"gray32" => array( 82, 82, 82),
|
||||
"grey32" => array( 82, 82, 82),
|
||||
"gray33" => array( 84, 84, 84),
|
||||
"grey33" => array( 84, 84, 84),
|
||||
"gray34" => array( 87, 87, 87),
|
||||
"grey34" => array( 87, 87, 87),
|
||||
"gray35" => array( 89, 89, 89),
|
||||
"grey35" => array( 89, 89, 89),
|
||||
"gray36" => array( 92, 92, 92),
|
||||
"grey36" => array( 92, 92, 92),
|
||||
"gray37" => array( 94, 94, 94),
|
||||
"grey37" => array( 94, 94, 94),
|
||||
"gray38" => array( 97, 97, 97),
|
||||
"grey38" => array( 97, 97, 97),
|
||||
"gray39" => array( 99, 99, 99),
|
||||
"grey39" => array( 99, 99, 99),
|
||||
"gray40" => array(102, 102, 102),
|
||||
"grey40" => array(102, 102, 102),
|
||||
"gray41" => array(105, 105, 105),
|
||||
"grey41" => array(105, 105, 105),
|
||||
"gray42" => array(107, 107, 107),
|
||||
"grey42" => array(107, 107, 107),
|
||||
"gray43" => array(110, 110, 110),
|
||||
"grey43" => array(110, 110, 110),
|
||||
"gray44" => array(112, 112, 112),
|
||||
"grey44" => array(112, 112, 112),
|
||||
"gray45" => array(115, 115, 115),
|
||||
"grey45" => array(115, 115, 115),
|
||||
"gray46" => array(117, 117, 117),
|
||||
"grey46" => array(117, 117, 117),
|
||||
"gray47" => array(120, 120, 120),
|
||||
"grey47" => array(120, 120, 120),
|
||||
"gray48" => array(122, 122, 122),
|
||||
"grey48" => array(122, 122, 122),
|
||||
"gray49" => array(125, 125, 125),
|
||||
"grey49" => array(125, 125, 125),
|
||||
"gray50" => array(127, 127, 127),
|
||||
"grey50" => array(127, 127, 127),
|
||||
"gray51" => array(130, 130, 130),
|
||||
"grey51" => array(130, 130, 130),
|
||||
"gray52" => array(133, 133, 133),
|
||||
"grey52" => array(133, 133, 133),
|
||||
"gray53" => array(135, 135, 135),
|
||||
"grey53" => array(135, 135, 135),
|
||||
"gray54" => array(138, 138, 138),
|
||||
"grey54" => array(138, 138, 138),
|
||||
"gray55" => array(140, 140, 140),
|
||||
"grey55" => array(140, 140, 140),
|
||||
"gray56" => array(143, 143, 143),
|
||||
"grey56" => array(143, 143, 143),
|
||||
"gray57" => array(145, 145, 145),
|
||||
"grey57" => array(145, 145, 145),
|
||||
"gray58" => array(148, 148, 148),
|
||||
"grey58" => array(148, 148, 148),
|
||||
"gray59" => array(150, 150, 150),
|
||||
"grey59" => array(150, 150, 150),
|
||||
"gray60" => array(153, 153, 153),
|
||||
"grey60" => array(153, 153, 153),
|
||||
"gray61" => array(156, 156, 156),
|
||||
"grey61" => array(156, 156, 156),
|
||||
"gray62" => array(158, 158, 158),
|
||||
"grey62" => array(158, 158, 158),
|
||||
"gray63" => array(161, 161, 161),
|
||||
"grey63" => array(161, 161, 161),
|
||||
"gray64" => array(163, 163, 163),
|
||||
"grey64" => array(163, 163, 163),
|
||||
"gray65" => array(166, 166, 166),
|
||||
"grey65" => array(166, 166, 166),
|
||||
"gray66" => array(168, 168, 168),
|
||||
"grey66" => array(168, 168, 168),
|
||||
"gray67" => array(171, 171, 171),
|
||||
"grey67" => array(171, 171, 171),
|
||||
"gray68" => array(173, 173, 173),
|
||||
"grey68" => array(173, 173, 173),
|
||||
"gray69" => array(176, 176, 176),
|
||||
"grey69" => array(176, 176, 176),
|
||||
"gray70" => array(179, 179, 179),
|
||||
"grey70" => array(179, 179, 179),
|
||||
"gray71" => array(181, 181, 181),
|
||||
"grey71" => array(181, 181, 181),
|
||||
"gray72" => array(184, 184, 184),
|
||||
"grey72" => array(184, 184, 184),
|
||||
"gray73" => array(186, 186, 186),
|
||||
"grey73" => array(186, 186, 186),
|
||||
"gray74" => array(189, 189, 189),
|
||||
"grey74" => array(189, 189, 189),
|
||||
"gray75" => array(191, 191, 191),
|
||||
"grey75" => array(191, 191, 191),
|
||||
"gray76" => array(194, 194, 194),
|
||||
"grey76" => array(194, 194, 194),
|
||||
"gray77" => array(196, 196, 196),
|
||||
"grey77" => array(196, 196, 196),
|
||||
"gray78" => array(199, 199, 199),
|
||||
"grey78" => array(199, 199, 199),
|
||||
"gray79" => array(201, 201, 201),
|
||||
"grey79" => array(201, 201, 201),
|
||||
"gray80" => array(204, 204, 204),
|
||||
"grey80" => array(204, 204, 204),
|
||||
"gray81" => array(207, 207, 207),
|
||||
"grey81" => array(207, 207, 207),
|
||||
"gray82" => array(209, 209, 209),
|
||||
"grey82" => array(209, 209, 209),
|
||||
"gray83" => array(212, 212, 212),
|
||||
"grey83" => array(212, 212, 212),
|
||||
"gray84" => array(214, 214, 214),
|
||||
"grey84" => array(214, 214, 214),
|
||||
"gray85" => array(217, 217, 217),
|
||||
"grey85" => array(217, 217, 217),
|
||||
"gray86" => array(219, 219, 219),
|
||||
"grey86" => array(219, 219, 219),
|
||||
"gray87" => array(222, 222, 222),
|
||||
"grey87" => array(222, 222, 222),
|
||||
"gray88" => array(224, 224, 224),
|
||||
"grey88" => array(224, 224, 224),
|
||||
"gray89" => array(227, 227, 227),
|
||||
"grey89" => array(227, 227, 227),
|
||||
"gray90" => array(229, 229, 229),
|
||||
"grey90" => array(229, 229, 229),
|
||||
"gray91" => array(232, 232, 232),
|
||||
"grey91" => array(232, 232, 232),
|
||||
"gray92" => array(235, 235, 235),
|
||||
"grey92" => array(235, 235, 235),
|
||||
"gray93" => array(237, 237, 237),
|
||||
"grey93" => array(237, 237, 237),
|
||||
"gray94" => array(240, 240, 240),
|
||||
"grey94" => array(240, 240, 240),
|
||||
"gray95" => array(242, 242, 242),
|
||||
"grey95" => array(242, 242, 242),
|
||||
"gray96" => array(245, 245, 245),
|
||||
"grey96" => array(245, 245, 245),
|
||||
"gray97" => array(247, 247, 247),
|
||||
"grey97" => array(247, 247, 247),
|
||||
"gray98" => array(250, 250, 250),
|
||||
"grey98" => array(250, 250, 250),
|
||||
"gray99" => array(252, 252, 252),
|
||||
"grey99" => array(252, 252, 252),
|
||||
"gray100" => array(255, 255, 255)
|
||||
);
|
||||
?>
|
||||
@ -108,19 +108,26 @@ if (isset($_POST['action']) && $_POST['action'] == 'upgrade')
|
||||
* Pour utiliser d'autres versions des librairies externes que les
|
||||
* versions embarquées dans Dolibarr, définir les constantes adequates:
|
||||
* Pour FPDF: FPDF_PATH
|
||||
* Pour PEAR: PEAR_PATH
|
||||
* Pour Pear: PEAR_PATH
|
||||
* Pour PHP_WriteExcel: PHP_WRITEEXCEL_PATH
|
||||
* Pour PHPlot: PHPLOT_PATH
|
||||
* Pour MagpieRss: MAGPIERSS_PATH
|
||||
* Pour PHPlot: PHPLOT_PATH
|
||||
* Pour JPGraph: JPGRAPH_PATH
|
||||
* Pour NuSOAP: NUSOAP_PATH
|
||||
* Pour TCPDF: TCPDF_PATH
|
||||
*/
|
||||
if (! defined('FPDF_PATH')) { define('FPDF_PATH', DOL_DOCUMENT_ROOT .'/includes/fpdf/fpdf/'); }
|
||||
if (! defined('PEAR_PATH')) { define('PEAR_PATH', DOL_DOCUMENT_ROOT .'/includes/pear/'); }
|
||||
if (! defined('PHP_WRITEEXCEL_PATH')) { define('PHP_WRITEEXCEL_PATH',DOL_DOCUMENT_ROOT .'/includes/php_writeexcel/'); }
|
||||
if (! defined('PHPLOT_PATH')) { define('PHPLOT_PATH', DOL_DOCUMENT_ROOT .'/includes/phplot/'); }
|
||||
if (! defined('MAGPIERSS_PATH')) { define('MAGPIERSS_PATH', DOL_DOCUMENT_ROOT .'/includes/magpierss/'); }
|
||||
if (! defined('PHPLOT_PATH')) { define('PHPLOT_PATH', DOL_DOCUMENT_ROOT .'/includes/phplot/'); }
|
||||
if (! defined('JPGRAPH_PATH')) { define('JPGRAPH_PATH', DOL_DOCUMENT_ROOT .'/includes/jpgraph/'); }
|
||||
define('FPDF_FONTPATH', FPDF_PATH . 'font/');
|
||||
define('MAGPIE_DIR', MAGPIERSS_PATH);
|
||||
if (! defined('NUSOAP_PATH')) { define('NUSOAP_PATH', DOL_DOCUMENT_ROOT .'/includes/nusoap/lib/'); }
|
||||
if (! defined('TCPDF_PATH')) { define('TCPDF_PATH', DOL_DOCUMENT_ROOT .'/includes/fpdf/tcpdf/'); }
|
||||
// Les autres path
|
||||
if (! defined('FPDF_FONTPATH')) { define('FPDF_FONTPATH', FPDF_PATH . 'font/'); }
|
||||
if (! defined('MAGPIE_DIR')) { define('MAGPIE_DIR', MAGPIERSS_PATH); }
|
||||
if (! defined('MAGPIE_CACHE_DIR')) { define('MAGPIE_CACHE_DIR', DOL_DATA_ROOT .'/rsscache'); }
|
||||
|
||||
|
||||
/***************************************************************************************
|
||||
|
||||
@ -140,10 +140,10 @@ $langs->setPhpLang($conf->global->MAIN_LANG_DEFAULT);
|
||||
* Pour utiliser d'autres versions des librairies externes que les
|
||||
* versions embarquées dans Dolibarr, définir les constantes adequates:
|
||||
* Pour FPDF: FPDF_PATH
|
||||
* Pour PEAR: PEAR_PATH
|
||||
* Pour Pear: PEAR_PATH
|
||||
* Pour PHP_WriteExcel: PHP_WRITEEXCEL_PATH
|
||||
* Pour PHPlot: PHPLOT_PATH
|
||||
* Pour MagpieRss: MAGPIERSS_PATH
|
||||
* Pour PHPlot: PHPLOT_PATH
|
||||
* Pour JPGraph: JPGRAPH_PATH
|
||||
* Pour NuSOAP: NUSOAP_PATH
|
||||
* Pour TCPDF: TCPDF_PATH
|
||||
@ -152,8 +152,18 @@ $langs->setPhpLang($conf->global->MAIN_LANG_DEFAULT);
|
||||
if (! defined('FPDF_PATH')) { define('FPDF_PATH', DOL_DOCUMENT_ROOT .'/includes/fpdf/fpdf/'); }
|
||||
if (! defined('PEAR_PATH')) { define('PEAR_PATH', DOL_DOCUMENT_ROOT .'/includes/pear/'); }
|
||||
if (! defined('PHP_WRITEEXCEL_PATH')) { define('PHP_WRITEEXCEL_PATH',DOL_DOCUMENT_ROOT .'/includes/php_writeexcel/'); }
|
||||
if (! defined('PHPLOT_PATH')) { define('PHPLOT_PATH', DOL_DOCUMENT_ROOT .'/includes/phplot/'); }
|
||||
if (! defined('MAGPIERSS_PATH')) { define('MAGPIERSS_PATH', DOL_DOCUMENT_ROOT .'/includes/magpierss/'); }
|
||||
if (! defined('PHPLOT_PATH'))
|
||||
{
|
||||
if (versioncompare(versionphp(),array(4,2,0)) >= 0)
|
||||
{
|
||||
define('PHPLOT_PATH', DOL_DOCUMENT_ROOT .'/includes/phplot5/');
|
||||
}
|
||||
else
|
||||
{
|
||||
define('PHPLOT_PATH', DOL_DOCUMENT_ROOT .'/includes/phplot/');
|
||||
}
|
||||
}
|
||||
if (! defined('JPGRAPH_PATH')) { define('JPGRAPH_PATH', DOL_DOCUMENT_ROOT .'/includes/jpgraph/'); }
|
||||
if (! defined('NUSOAP_PATH')) { define('NUSOAP_PATH', DOL_DOCUMENT_ROOT .'/includes/nusoap/lib/'); }
|
||||
if (! defined('TCPDF_PATH')) { define('TCPDF_PATH', DOL_DOCUMENT_ROOT .'/includes/fpdf/tcpdf/'); }
|
||||
|
||||
@ -1204,71 +1204,69 @@ class Product
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* \brief Renvoie le nombre de factures dans lesquelles figure le produit par mois
|
||||
* \param socid id societe
|
||||
* \return array nombre de factures par mois
|
||||
*/
|
||||
|
||||
function get_num_vente($socid=0)
|
||||
{
|
||||
global $conf;
|
||||
global $user;
|
||||
|
||||
$sql = "SELECT count(*), date_format(f.datef, '%Y%m') ";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."facturedet as d, ".MAIN_DB_PREFIX."facture as f";
|
||||
if (!$user->rights->commercial->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
|
||||
$sql .= " WHERE f.rowid = d.fk_facture AND d.fk_product =".$this->id;
|
||||
if (!$user->rights->commercial->client->voir && !$socid) $sql .= " AND f.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
|
||||
if ($socid > 0)
|
||||
/**
|
||||
* \brief Renvoie le nombre de factures dans lesquelles figure le produit par mois
|
||||
* \param socid id societe
|
||||
* \return array nombre de factures par mois
|
||||
*/
|
||||
function get_num_vente($socid=0)
|
||||
{
|
||||
$sql .= " AND f.fk_soc = $socid";
|
||||
global $conf;
|
||||
global $user;
|
||||
|
||||
$sql = "SELECT count(*), date_format(f.datef, '%Y%m') ";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."facturedet as d, ".MAIN_DB_PREFIX."facture as f";
|
||||
if (!$user->rights->commercial->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
|
||||
$sql .= " WHERE f.rowid = d.fk_facture AND d.fk_product =".$this->id;
|
||||
if (!$user->rights->commercial->client->voir && !$socid) $sql .= " AND f.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
|
||||
if ($socid > 0)
|
||||
{
|
||||
$sql .= " AND f.fk_soc = $socid";
|
||||
}
|
||||
$sql .= " GROUP BY date_format(f.datef,'%Y%m') DESC ;";
|
||||
|
||||
return $this->_get_stats($sql);
|
||||
}
|
||||
$sql .= " GROUP BY date_format(f.datef,'%Y%m') DESC ;";
|
||||
|
||||
return $this->_get_stats($sql);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* \brief Renvoie le nombre de propales dans lesquelles figure le produit par mois
|
||||
* \param socid id societe
|
||||
* \return array nombre de propales par mois
|
||||
*/
|
||||
|
||||
function get_num_propal($socid=0)
|
||||
{
|
||||
global $conf;
|
||||
global $user;
|
||||
|
||||
$sql = "SELECT count(*), date_format(p.datep, '%Y%m') ";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."propaldet as d, ".MAIN_DB_PREFIX."propal as p";
|
||||
if (!$user->rights->commercial->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
|
||||
$sql .= " WHERE p.rowid = d.fk_propal and d.fk_product =".$this->id;
|
||||
if (!$user->rights->commercial->client->voir && !$socid) $sql .= " AND p.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
|
||||
if ($socid > 0)
|
||||
|
||||
|
||||
/**
|
||||
* \brief Renvoie le nombre de propales dans lesquelles figure le produit par mois
|
||||
* \param socid id societe
|
||||
* \return array nombre de propales par mois
|
||||
*/
|
||||
function get_num_propal($socid=0)
|
||||
{
|
||||
$sql .= " AND p.fk_soc = $socid";
|
||||
global $conf;
|
||||
global $user;
|
||||
|
||||
$sql = "SELECT count(*), date_format(p.datep, '%Y%m') ";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."propaldet as d, ".MAIN_DB_PREFIX."propal as p";
|
||||
if (!$user->rights->commercial->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
|
||||
$sql .= " WHERE p.rowid = d.fk_propal and d.fk_product =".$this->id;
|
||||
if (!$user->rights->commercial->client->voir && !$socid) $sql .= " AND p.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
|
||||
if ($socid > 0)
|
||||
{
|
||||
$sql .= " AND p.fk_soc = $socid";
|
||||
}
|
||||
$sql .= " GROUP BY date_format(p.datep,'%Y%m') DESC ;";
|
||||
|
||||
return $this->_get_stats($sql);
|
||||
}
|
||||
$sql .= " GROUP BY date_format(p.datep,'%Y%m') DESC ;";
|
||||
|
||||
return $this->_get_stats($sql);
|
||||
}
|
||||
/**
|
||||
* \brief Lie un sousproduit au produit/service
|
||||
* \param id_pere Id du produit auquel sera lié le produit à lier
|
||||
* \param id_fils Id du produit à lier
|
||||
* \return int < 0 si erreur, > 0 si ok
|
||||
*/
|
||||
|
||||
function add_sousproduit($id_pere, $id_fils,$qty)
|
||||
{
|
||||
/**
|
||||
* \brief Lie un sousproduit au produit/service
|
||||
* \param id_pere Id du produit auquel sera lié le produit à lier
|
||||
* \param id_fils Id du produit à lier
|
||||
* \return int < 0 si erreur, > 0 si ok
|
||||
*/
|
||||
function add_sousproduit($id_pere, $id_fils,$qty)
|
||||
{
|
||||
$sql = 'delete from '.MAIN_DB_PREFIX.'product_association';
|
||||
$sql .= ' WHERE fk_product_pere = "'.$id_pere.'" and fk_product_fils = "'.$id_fils.'"';
|
||||
if (! $this->db->query($sql))
|
||||
{
|
||||
dolibarr_print_error($this->db);
|
||||
return -1;
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1277,12 +1275,12 @@ class Product
|
||||
if (! $this->db->query($sql))
|
||||
{
|
||||
dolibarr_print_error($this->db);
|
||||
return -1;
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$result = $this->db->query($sql) ;
|
||||
if ($result)
|
||||
if ($result)
|
||||
{
|
||||
$num = $this->db->num_rows($result);
|
||||
if($num > 0)
|
||||
@ -1292,119 +1290,119 @@ class Product
|
||||
}
|
||||
else
|
||||
{
|
||||
$sql = 'insert into '.MAIN_DB_PREFIX.'product_association(fk_product_pere,fk_product_fils,qty)';
|
||||
$sql .= ' VALUES ("'.$id_pere.'","'.$id_fils.'","'.$qty.'")';
|
||||
if (! $this->db->query($sql))
|
||||
{
|
||||
dolibarr_print_error($this->db);
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
$sql = 'insert into '.MAIN_DB_PREFIX.'product_association(fk_product_pere,fk_product_fils,qty)';
|
||||
$sql .= ' VALUES ("'.$id_pere.'","'.$id_fils.'","'.$qty.'")';
|
||||
if (! $this->db->query($sql))
|
||||
{
|
||||
dolibarr_print_error($this->db);
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
/**
|
||||
* \brief retire le lien entre un sousproduit et un produit/service
|
||||
* \param id_pere Id du produit auquel ne sera plus lié le produit lié
|
||||
* \param id_fils Id du produit à ne plus lié
|
||||
* \return int < 0 si erreur, > 0 si ok
|
||||
*/
|
||||
|
||||
function del_sousproduit($id_pere, $id_fils)
|
||||
{
|
||||
$sql = 'delete from '.MAIN_DB_PREFIX.'product_association';
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief retire le lien entre un sousproduit et un produit/service
|
||||
* \param id_pere Id du produit auquel ne sera plus lié le produit li
|
||||
* \param id_fils Id du produit à ne plus li
|
||||
* \return int < 0 si erreur, > 0 si ok
|
||||
*/
|
||||
function del_sousproduit($id_pere, $id_fils)
|
||||
{
|
||||
$sql = 'delete from '.MAIN_DB_PREFIX.'product_association';
|
||||
$sql .= ' WHERE fk_product_pere = "'.$id_pere.'" and fk_product_fils = "'.$id_fils.'"';
|
||||
if (! $this->db->query($sql))
|
||||
{
|
||||
dolibarr_print_error($this->db);
|
||||
return -1;
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
/**
|
||||
* \brief retire le lien entre un sousproduit et un produit/service
|
||||
* \param id_pere Id du produit auquel ne sera plus lié le produit lié
|
||||
* \param id_fils Id du produit à ne plus lié
|
||||
* \return int < 0 si erreur, > 0 si ok
|
||||
*/
|
||||
|
||||
function is_sousproduit($id_pere, $id_fils)
|
||||
{
|
||||
$sql = 'select fk_product_pere,qty from '.MAIN_DB_PREFIX.'product_association';
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief retire le lien entre un sousproduit et un produit/service
|
||||
* \param id_pere Id du produit auquel ne sera plus lié le produit li
|
||||
* \param id_fils Id du produit à ne plus li
|
||||
* \return int < 0 si erreur, > 0 si ok
|
||||
*/
|
||||
function is_sousproduit($id_pere, $id_fils)
|
||||
{
|
||||
$sql = 'select fk_product_pere,qty from '.MAIN_DB_PREFIX.'product_association';
|
||||
$sql .= ' WHERE fk_product_pere = "'.$id_pere.'" and fk_product_fils = "'.$id_fils.'"';
|
||||
if (! $this->db->query($sql))
|
||||
{
|
||||
dolibarr_print_error($this->db);
|
||||
return -1;
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$result = $this->db->query($sql) ;
|
||||
if ($result)
|
||||
{
|
||||
$num = $this->db->num_rows($result);
|
||||
if ($result)
|
||||
{
|
||||
$num = $this->db->num_rows($result);
|
||||
if($num > 0)
|
||||
{
|
||||
$obj = $this->db->fetch_object($result);
|
||||
$this->is_sousproduit_qty = $obj->qty;
|
||||
|
||||
$this->is_sousproduit_qty = $obj->qty;
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* \brief Lie un fournisseur au produit/service
|
||||
* \param user Utilisateur qui fait le lien
|
||||
* \param id_fourn Id du fournisseur
|
||||
* \param ref_fourn Reference chez le fournisseur
|
||||
* \return int < 0 si erreur, > 0 si ok
|
||||
*/
|
||||
|
||||
function add_fournisseur($user, $id_fourn, $ref_fourn)
|
||||
{
|
||||
$sql = "SELECT count(*) as nb";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur";
|
||||
$sql.= " WHERE fk_product = ".$this->id." AND fk_soc = ".$id_fourn;
|
||||
//$sql.= " AND ref_fourn = '".$ref_fourn."'"; // crée des doublons
|
||||
|
||||
$resql=$this->db->query($sql);
|
||||
if ($resql)
|
||||
{
|
||||
$obj = $this->db->fetch_object($resql);
|
||||
if ($obj->nb == 0)
|
||||
{
|
||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX."product_fournisseur ";
|
||||
$sql .= " (datec, fk_product, fk_soc, ref_fourn, fk_user_author)";
|
||||
$sql .= " VALUES (now(), $this->id, $id_fourn, '$ref_fourn', $user->id)";
|
||||
|
||||
if ($this->db->query($sql))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->error=$this->db->error();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
$this->db->free($resql);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->error=$this->db->error();
|
||||
return -2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Lie un fournisseur au produit/service
|
||||
* \param user Utilisateur qui fait le lien
|
||||
* \param id_fourn Id du fournisseur
|
||||
* \param ref_fourn Reference chez le fournisseur
|
||||
* \return int < 0 si erreur, > 0 si ok
|
||||
*/
|
||||
function add_fournisseur($user, $id_fourn, $ref_fourn)
|
||||
{
|
||||
$sql = "SELECT count(*) as nb";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur";
|
||||
$sql.= " WHERE fk_product = ".$this->id." AND fk_soc = ".$id_fourn;
|
||||
//$sql.= " AND ref_fourn = '".$ref_fourn."'"; // crée des doublons
|
||||
|
||||
$resql=$this->db->query($sql);
|
||||
if ($resql)
|
||||
{
|
||||
$obj = $this->db->fetch_object($resql);
|
||||
if ($obj->nb == 0)
|
||||
{
|
||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX."product_fournisseur ";
|
||||
$sql .= " (datec, fk_product, fk_soc, ref_fourn, fk_user_author)";
|
||||
$sql .= " VALUES (now(), $this->id, $id_fourn, '$ref_fourn', $user->id)";
|
||||
|
||||
if ($this->db->query($sql))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->error=$this->db->error();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
$this->db->free($resql);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->error=$this->db->error();
|
||||
return -2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@ -99,11 +99,13 @@ if ($_GET["id"] || $_GET["ref"])
|
||||
{
|
||||
$graph_data = $product->get_num_vente($socid);
|
||||
$px->SetData($graph_data);
|
||||
$px->SetMaxValue($px->GetCeilMaxValue());
|
||||
$px->SetMaxValue($px->GetCeilMaxValue()<0?0:$px->GetCeilMaxValue());
|
||||
$px->SetMinValue($px->GetFloorMinValue()>0?0:$px->GetFloorMinValue());
|
||||
$px->SetWidth($WIDTH);
|
||||
$px->SetHeight($HEIGHT);
|
||||
$px->SetHorizTickIncrement(1);
|
||||
$px->SetPrecisionY(0);
|
||||
$px->SetShading(6);
|
||||
$px->SetShading(5);
|
||||
$px->draw($filenbvente);
|
||||
}
|
||||
|
||||
@ -113,11 +115,13 @@ if ($_GET["id"] || $_GET["ref"])
|
||||
{
|
||||
$graph_data = $product->get_nb_vente($socid);
|
||||
$px->SetData($graph_data);
|
||||
$px->SetMaxValue($px->GetCeilMaxValue());
|
||||
$px->SetMaxValue($px->GetCeilMaxValue()<0?0:$px->GetCeilMaxValue());
|
||||
$px->SetMinValue($px->GetFloorMinValue()>0?0:$px->GetFloorMinValue());
|
||||
$px->SetWidth($WIDTH);
|
||||
$px->SetHeight($HEIGHT);
|
||||
$px->SetHorizTickIncrement(1);
|
||||
$px->SetPrecisionY(0);
|
||||
$px->SetShading(6);
|
||||
$px->SetShading(5);
|
||||
$px->draw($filenbpiece);
|
||||
}
|
||||
|
||||
@ -127,11 +131,13 @@ if ($_GET["id"] || $_GET["ref"])
|
||||
{
|
||||
$graph_data = $product->get_num_propal($socid);
|
||||
$px->SetData($graph_data);
|
||||
$px->SetMaxValue($px->GetCeilMaxValue());
|
||||
$px->SetMaxValue($px->GetCeilMaxValue()<0?0:$px->GetCeilMaxValue());
|
||||
$px->SetMinValue($px->GetFloorMinValue()>0?0:$px->GetFloorMinValue());
|
||||
$px->SetWidth($WIDTH);
|
||||
$px->SetHeight($HEIGHT);
|
||||
$px->SetHorizTickIncrement(1);
|
||||
$px->SetPrecisionY(0);
|
||||
$px->SetShading(6);
|
||||
$px->SetShading(5);
|
||||
$px->draw($filenbpropal);
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user