AutorÃa | Ultima modificación | Ver Log |
<?php/*pStock - class to draw stock chartsVersion : 2.1.4Made by : Jean-Damien POGOLOTTILast Update : 19/01/2014This file can be distributed under the license you can find at :http://www.pchart.net/licenseYou can find the whole class documentation on the pChart web site.*/define("STOCK_MISSING_SERIE", 180001);/* pStock class definition */class pStock{var $pChartObject;var $pDataObject;/* Class creator */function __construct($pChartObject, $pDataObject){$this->pChartObject = $pChartObject;$this->pDataObject = $pDataObject;}/* Draw a stock chart */function drawStockChart(array $Format = []){$SerieOpen = "Open";$SerieClose = "Close";$SerieMin = "Min";$SerieMax = "Max";$SerieMedian = NULL;$LineWidth = 1;$LineR = 0;$LineG = 0;$LineB = 0;$LineAlpha = 100;$ExtremityWidth = 1;$ExtremityLength = 3;$ExtremityR = 0;$ExtremityG = 0;$ExtremityB = 0;$ExtremityAlpha = 100;$BoxWidth = 8;$BoxUpR = isset($Format["BoxUpR"]) ? $Format["BoxUpR"] : 188;$BoxUpG = isset($Format["BoxUpG"]) ? $Format["BoxUpG"] : 224;$BoxUpB = isset($Format["BoxUpB"]) ? $Format["BoxUpB"] : 46;$BoxUpAlpha = 100;$BoxUpSurrounding = NULL;$BoxUpBorderR = $BoxUpR - 20;$BoxUpBorderG = $BoxUpG - 20;$BoxUpBorderB = $BoxUpB - 20;$BoxUpBorderAlpha = 100;$BoxDownR = isset($Format["BoxDownR"]) ? $Format["BoxDownR"] : 224;$BoxDownG = isset($Format["BoxDownG"]) ? $Format["BoxDownG"] : 100;$BoxDownB = isset($Format["BoxDownB"]) ? $Format["BoxDownB"] : 46;$BoxDownAlpha = 100;$BoxDownSurrounding = NULL;$BoxDownBorderR = $BoxDownR - 20;$BoxDownBorderG = $BoxDownG - 20;$BoxDownBorderB = $BoxDownB - 20;$BoxDownBorderAlpha = 100;$ShadowOnBoxesOnly = TRUE;$MedianR = 255;$MedianG = 0;$MedianB = 0;$MedianAlpha = 100;$RecordImageMap = FALSE;$ImageMapTitle = "Stock Chart";/* Override defaults */extract($Format);/* Data Processing */$Data = $this->pDataObject->getData();$Palette = $this->pDataObject->getPalette();if ($BoxUpSurrounding != NULL) {$BoxUpBorderR = $BoxUpR + $BoxUpSurrounding;$BoxUpBorderG = $BoxUpG + $BoxUpSurrounding;$BoxUpBorderB = $BoxUpB + $BoxUpSurrounding;}if ($BoxDownSurrounding != NULL) {$BoxDownBorderR = $BoxDownR + $BoxDownSurrounding;$BoxDownBorderG = $BoxDownG + $BoxDownSurrounding;$BoxDownBorderB = $BoxDownB + $BoxDownSurrounding;}if ($LineWidth != 1) {$LineOffset = $LineWidth / 2;}$BoxOffset = $BoxWidth / 2;$Data = $this->pChartObject->DataSet->getData();list($XMargin, $XDivs) = $this->pChartObject->scaleGetXSettings();if (!isset($Data["Series"][$SerieOpen]) || !isset($Data["Series"][$SerieClose]) || !isset($Data["Series"][$SerieMin]) || !isset($Data["Series"][$SerieMax])) {return STOCK_MISSING_SERIE;}$Plots = [];foreach($Data["Series"][$SerieOpen]["Data"] as $Key => $Value) {$Point = [];if (isset($Data["Series"][$SerieClose]["Data"][$Key]) || isset($Data["Series"][$SerieMin]["Data"][$Key]) || isset($Data["Series"][$SerieMax]["Data"][$Key])) {$Point = array($Value,$Data["Series"][$SerieClose]["Data"][$Key],$Data["Series"][$SerieMin]["Data"][$Key],$Data["Series"][$SerieMax]["Data"][$Key]);}if ($SerieMedian != NULL && isset($Data["Series"][$SerieMedian]["Data"][$Key])) {$Point[] = $Data["Series"][$SerieMedian]["Data"][$Key];}$Plots[] = $Point;}$AxisID = $Data["Series"][$SerieOpen]["Axis"];$Mode = $Data["Axis"][$AxisID]["Display"];$Format = $Data["Axis"][$AxisID]["Format"];$Unit = $Data["Axis"][$AxisID]["Unit"];$YZero = $this->pChartObject->scaleComputeY(0, ["AxisID" => $AxisID]);$XStep = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1 - $XMargin * 2) / $XDivs;$X = $this->pChartObject->GraphAreaX1 + $XMargin;$Y = $this->pChartObject->GraphAreaY1 + $XMargin;$LineSettings = ["R" => $LineR,"G" => $LineG,"B" => $LineB,"Alpha" => $LineAlpha];$ExtremitySettings = ["R" => $ExtremityR,"G" => $ExtremityG,"B" => $ExtremityB, "Alpha" => $ExtremityAlpha];$BoxUpSettings = ["R" => $BoxUpR,"G" => $BoxUpG,"B" => $BoxUpB,"Alpha" => $BoxUpAlpha,"BorderR" => $BoxUpBorderR,"BorderG" => $BoxUpBorderG,"BorderB" => $BoxUpBorderB,"BorderAlpha" => $BoxUpBorderAlpha];$BoxDownSettings = ["R" => $BoxDownR,"G" => $BoxDownG,"B" => $BoxDownB,"Alpha" => $BoxDownAlpha,"BorderR" => $BoxDownBorderR,"BorderG" => $BoxDownBorderG,"BorderB" => $BoxDownBorderB,"BorderAlpha" => $BoxDownBorderAlpha];$MedianSettings = ["R" => $MedianR,"G" => $MedianG,"B" => $MedianB,"Alpha" => $MedianAlpha];foreach($Plots as $Key => $Points) {$PosArray = $this->pChartObject->scaleComputeY($Points, ["AxisID" => $AxisID]);$Values = "Open :" . $Data["Series"][$SerieOpen]["Data"][$Key] . "<br />Close : " . $Data["Series"][$SerieClose]["Data"][$Key] . "<br />Min : " . $Data["Series"][$SerieMin]["Data"][$Key] . "<br />Max : " . $Data["Series"][$SerieMax]["Data"][$Key] . "<br />";if ($SerieMedian != NULL) {$Values = $Values . "Median : " . $Data["Series"][$SerieMedian]["Data"][$Key] . "<br />";}if ($PosArray[0] > $PosArray[1]) {$ImageMapColor = $this->pChartObject->toHTMLColor($BoxUpR, $BoxUpG, $BoxUpB);} else {$ImageMapColor = $this->pChartObject->toHTMLColor($BoxDownR, $BoxDownG, $BoxDownB);}if ($Data["Orientation"] == SCALE_POS_LEFTRIGHT) {if ($YZero > $this->pChartObject->GraphAreaY2 - 1) {$YZero = $this->pChartObject->GraphAreaY2 - 1;}if ($YZero < $this->pChartObject->GraphAreaY1 + 1) {$YZero = $this->pChartObject->GraphAreaY1 + 1;}if ($XDivs == 0) {$XStep = 0;} else {$XStep = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1 - $XMargin * 2) / $XDivs;}if ($ShadowOnBoxesOnly) {$RestoreShadow = $this->pChartObject->Shadow;$this->pChartObject->Shadow = FALSE;}if ($LineWidth == 1) {$this->pChartObject->drawLine($X, $PosArray[2], $X, $PosArray[3], $LineSettings);} else {$this->pChartObject->drawFilledRectangle($X - $LineOffset, $PosArray[2], $X + $LineOffset, $PosArray[3], $LineSettings);}if ($ExtremityWidth == 1) {$this->pChartObject->drawLine($X - $ExtremityLength, $PosArray[2], $X + $ExtremityLength, $PosArray[2], $ExtremitySettings);$this->pChartObject->drawLine($X - $ExtremityLength, $PosArray[3], $X + $ExtremityLength, $PosArray[3], $ExtremitySettings);if ($RecordImageMap) {$this->pChartObject->addToImageMap("RECT", floor($X - $ExtremityLength) . "," . floor($PosArray[2]) . "," . floor($X + $ExtremityLength) . "," . floor($PosArray[3]) , $ImageMapColor, $ImageMapTitle, $Values);}} else {$this->pChartObject->drawFilledRectangle($X - $ExtremityLength, $PosArray[2], $X + $ExtremityLength, $PosArray[2] - $ExtremityWidth, $ExtremitySettings);$this->pChartObject->drawFilledRectangle($X - $ExtremityLength, $PosArray[3], $X + $ExtremityLength, $PosArray[3] + $ExtremityWidth, $ExtremitySettings);if ($RecordImageMap) {$this->pChartObject->addToImageMap("RECT", floor($X - $ExtremityLength) . "," . floor($PosArray[2] - $ExtremityWidth) . "," . floor($X + $ExtremityLength) . "," . floor($PosArray[3] + $ExtremityWidth) , $ImageMapColor, $ImageMapTitle, $Values);}}if ($ShadowOnBoxesOnly) {$this->pChartObject->Shadow = $RestoreShadow;}if ($PosArray[0] > $PosArray[1]) {$this->pChartObject->drawFilledRectangle($X - $BoxOffset, $PosArray[0], $X + $BoxOffset, $PosArray[1], $BoxUpSettings);} else {$this->pChartObject->drawFilledRectangle($X - $BoxOffset, $PosArray[0], $X + $BoxOffset, $PosArray[1], $BoxDownSettings);}if (isset($PosArray[4])) {$this->pChartObject->drawLine($X - $ExtremityLength, $PosArray[4], $X + $ExtremityLength, $PosArray[4], $MedianSettings);}$X = $X + $XStep;} elseif ($Data["Orientation"] == SCALE_POS_TOPBOTTOM) {if ($YZero > $this->pChartObject->GraphAreaX2 - 1) {$YZero = $this->pChartObject->GraphAreaX2 - 1;}if ($YZero < $this->pChartObject->GraphAreaX1 + 1) {$YZero = $this->pChartObject->GraphAreaX1 + 1;}if ($XDivs == 0) {$XStep = 0;} else {$XStep = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1 - $XMargin * 2) / $XDivs;}if ($LineWidth == 1) {$this->pChartObject->drawLine($PosArray[2], $Y, $PosArray[3], $Y, $LineSettings);} else {$this->pChartObject->drawFilledRectangle($PosArray[2], $Y - $LineOffset, $PosArray[3], $Y + $LineOffset, $LineSettings);}if ($ShadowOnBoxesOnly) {$RestoreShadow = $this->pChartObject->Shadow;$this->pChartObject->Shadow = FALSE;}if ($ExtremityWidth == 1) {$this->pChartObject->drawLine($PosArray[2], $Y - $ExtremityLength, $PosArray[2], $Y + $ExtremityLength, $ExtremitySettings);$this->pChartObject->drawLine($PosArray[3], $Y - $ExtremityLength, $PosArray[3], $Y + $ExtremityLength, $ExtremitySettings);if ($RecordImageMap) {$this->pChartObject->addToImageMap("RECT", floor($PosArray[2]) . "," . floor($Y - $ExtremityLength) . "," . floor($PosArray[3]) . "," . floor($Y + $ExtremityLength) , $ImageMapColor, $ImageMapTitle, $Values);}} else {$this->pChartObject->drawFilledRectangle($PosArray[2], $Y - $ExtremityLength, $PosArray[2] - $ExtremityWidth, $Y + $ExtremityLength, $ExtremitySettings);$this->pChartObject->drawFilledRectangle($PosArray[3], $Y - $ExtremityLength, $PosArray[3] + $ExtremityWidth, $Y + $ExtremityLength, $ExtremitySettings);if ($RecordImageMap) {$this->pChartObject->addToImageMap("RECT", floor($PosArray[2] - $ExtremityWidth) . "," . floor($Y - $ExtremityLength) . "," . floor($PosArray[3] + $ExtremityWidth) . "," . floor($Y + $ExtremityLength) , $ImageMapColor, $ImageMapTitle, $Values);}}if ($ShadowOnBoxesOnly) {$this->pChartObject->Shadow = $RestoreShadow;}if ($PosArray[0] < $PosArray[1]) {$this->pChartObject->drawFilledRectangle($PosArray[0], $Y - $BoxOffset, $PosArray[1], $Y + $BoxOffset, $BoxUpSettings);} else {$this->pChartObject->drawFilledRectangle($PosArray[0], $Y - $BoxOffset, $PosArray[1], $Y + $BoxOffset, $BoxDownSettings);}if (isset($PosArray[4])) {$this->pChartObject->drawLine($PosArray[4], $Y - $ExtremityLength, $PosArray[4], $Y + $ExtremityLength, $MedianSettings);}$Y = $Y + $XStep;}}}}?>