source: cpc/trunk/project/plugins/xsPChartPlugin/lib/pChart/pChart/pData.class @ 504

Last change on this file since 504 was 504, checked in by MrLapinot, 12 years ago

Corrige le bug précédent plutôt que de le masquer.
http://sourceforge.net/forum/forum.php?thread_id=3314907&forum_id=822590

File size: 7.0 KB
Line 
1<?php
2 /*
3     pData - Simplifying data population for pChart
4     Copyright (C) 2008 Jean-Damien POGOLOTTI
5     Version  1.13 last updated on 08/17/08
6
7     http://pchart.sourceforge.net
8
9     This program is free software: you can redistribute it and/or modify
10     it under the terms of the GNU General Public License as published by
11     the Free Software Foundation, either version 1,2,3 of the License, or
12     (at your option) any later version.
13
14     This program is distributed in the hope that it will be useful,
15     but WITHOUT ANY WARRANTY; without even the implied warranty of
16     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17     GNU General Public License for more details.
18
19     You should have received a copy of the GNU General Public License
20     along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
22     Class initialisation :
23      pData()
24     Data populating methods :
25      ImportFromCSV($FileName,$Delimiter=",",$DataColumns=-1,$HasHeader=FALSE,$DataName=-1)
26      AddPoint($Value,$Serie="Serie1",$Description="")
27     Series manipulation methods :
28      AddSerie($SerieName="Serie1")
29      AddAllSeries()
30      RemoveSerie($SerieName="Serie1")
31      SetAbsciseLabelSerie($SerieName = "Name")
32      SetSerieName($Name,$SerieName="Serie1")
33      SetXAxisName($Name="X Axis")
34      SetYAxisName($Name="Y Axis")
35      SetXAxisFormat($Format="number")
36      SetYAxisFormat($Format="number")
37      SetXAxisUnit($Unit="")
38      SetYAxisUnit($Unit="")
39      removeSerieName($SerieName)
40      removeAllSeries()
41     Data retrieval methods :
42      GetData()
43      GetDataDescription()
44 */
45
46 /* pData class definition */
47 class pData
48  {
49   var $Data;
50   var $DataDescription;
51
52   function pData()
53    {
54     $this->Data                           = array();
55     $this->DataDescription                = array();
56     $this->DataDescription["Position"]    = "Name";
57     $this->DataDescription["Format"]["X"] = "number";
58     $this->DataDescription["Format"]["Y"] = "number";
59     $this->DataDescription["Unit"]["X"]   = NULL;
60     $this->DataDescription["Unit"]["Y"]   = NULL;
61    }
62
63   function ImportFromCSV($FileName,$Delimiter=",",$DataColumns=-1,$HasHeader=FALSE,$DataName=-1)
64    {
65     $handle = @fopen($FileName,"r");
66     if ($handle)
67      {
68       $HeaderParsed = FALSE;
69       while (!feof($handle))
70        {
71         $buffer = fgets($handle, 4096);
72         $buffer = str_replace(chr(10),"",$buffer);
73         $buffer = str_replace(chr(13),"",$buffer);
74         $Values = split($Delimiter,$buffer);
75
76         if ( $buffer != "" )
77          {
78           if ( $HasHeader == TRUE && $HeaderParsed == FALSE )
79            {
80             if ( $DataColumns == -1 )
81              {
82               $ID = 1;
83               foreach($Values as $key => $Value)
84                { $this->SetSerieName($Value,"Serie".$ID); $ID++; }
85              }
86             else
87              {
88               $SerieName = "";
89
90               foreach($DataColumns as $key => $Value)
91                $this->SetSerieName($Values[$Value],"Serie".$Value);
92              }
93             $HeaderParsed = TRUE;
94            }
95           else
96            {
97             if ( $DataColumns == -1 )
98              {
99               $ID = 1;
100               foreach($Values as $key => $Value)
101                { $this->AddPoint(intval($Value),"Serie".$ID); $ID++; }
102              }
103             else
104              {
105               $SerieName = "";
106               if ( $DataName != -1 )
107                $SerieName = $Values[$DataName];
108
109               foreach($DataColumns as $key => $Value)
110                $this->AddPoint($Values[$Value],"Serie".$Value,$SerieName);
111              }
112            }
113          }
114        }
115       fclose($handle);
116      }
117    }
118
119   function AddPoint($Value,$Serie="Serie1",$Description="")
120    {
121     if (is_array($Value) && count($Value) == 1)
122      $Value = $Value[0];
123
124     $ID = 0;
125     for($i=0;$i<=count($this->Data);$i++)
126      { if(isset($this->Data[$i][$Serie])) { $ID = $i+1; } }
127     if ( count($Value) == 1 )
128      {
129       $this->Data[$ID][$Serie] = $Value;
130       if ( $Description != "" )
131        $this->Data[$ID]["Name"] = $Description;
132       elseif (!isset($this->Data[$ID]["Name"]))
133        $this->Data[$ID]["Name"] = $ID;
134      }
135     else
136      {
137       foreach($Value as $key => $Val)
138        {
139         $this->Data[$ID][$Serie] = $Val;
140         if (!isset($this->Data[$ID]["Name"]))
141          $this->Data[$ID]["Name"] = $ID;
142         $ID++;
143        }
144      }
145    }
146
147   function AddSerie($SerieName="Serie1")
148    {
149     if ( !isset($this->DataDescription["Values"]) )
150      {
151       $this->DataDescription["Values"][] = $SerieName;
152      }
153     else
154      {
155       $Found = FALSE;
156       foreach($this->DataDescription["Values"] as $key => $Value )
157        if ( $Value == $SerieName ) { $Found = TRUE; }
158
159       if ( !$Found )
160        $this->DataDescription["Values"][] = $SerieName;
161      }
162    }
163
164   function AddAllSeries()
165    {
166     unset($this->DataDescription["Values"]);
167
168     if ( isset($this->Data[0]) )
169      {
170       foreach($this->Data[0] as $Key => $Value)
171        {
172         if ( $Key != "Name" )
173          $this->DataDescription["Values"][] = $Key;
174        }
175      }
176    }
177
178   function RemoveSerie($SerieName="Serie1")
179    {
180     if ( !isset($this->DataDescription["Values"]) )
181      return(0);
182
183     $Found = FALSE;
184     foreach($this->DataDescription["Values"] as $key => $Value )
185      {
186       if ( $Value == $SerieName )
187        unset($this->DataDescription["Values"][$key]);
188      }
189    }
190
191   function SetAbsciseLabelSerie($SerieName = "Name")
192    {
193     $this->DataDescription["Position"] = $SerieName;
194    }
195
196   function SetSerieName($Name,$SerieName="Serie1")
197    {
198     $this->DataDescription["Description"][$SerieName] = $Name;
199    }
200
201   function SetXAxisName($Name="X Axis")
202    {
203     $this->DataDescription["Axis"]["X"] = $Name;
204    }
205
206   function SetYAxisName($Name="Y Axis")
207    {
208     $this->DataDescription["Axis"]["Y"] = $Name;
209    }
210
211   function SetXAxisFormat($Format="number")
212    {
213     $this->DataDescription["Format"]["X"] = $Format;
214    }
215
216   function SetYAxisFormat($Format="number")
217    {
218     $this->DataDescription["Format"]["Y"] = $Format;
219    }
220
221   function SetXAxisUnit($Unit="")
222    {
223     $this->DataDescription["Unit"]["X"] = $Unit;
224    }
225
226   function SetYAxisUnit($Unit="")
227    {
228     $this->DataDescription["Unit"]["Y"] = $Unit;
229    }
230
231   function removeSerieName($SerieName)
232    {
233     if ( isset($this->DataDescription["Description"][$SerieName]) )
234      unset($this->DataDescription["Description"][$SerieName]);
235    }
236
237   function removeAllSeries()
238    {
239     foreach($this->DataDescription["Values"] as $Key => $Value)
240      unset($this->DataDescription["Values"][$Key]);
241    }
242
243   function GetData()
244    {
245     return($this->Data);
246    }
247
248   function GetDataDescription()
249    {
250     return($this->DataDescription);
251    }
252  }
253?>
Note: See TracBrowser for help on using the repository browser.