Browse Source

Merge pull request #436 from danbarretodev/CT7383

Fix CT#7383
Yannick Warnier 10 years ago
parent
commit
9184a14ef8

+ 60 - 18
main/inc/lib/pchart/pChart.class.php

@@ -586,7 +586,6 @@
      /* Horizontal Axis */
      $XPos = $this->GArea_X1 + $this->GAreaXOffset;
      $ID = 1; $YMax = NULL;
-     $maxTextHeight = 0;
      foreach ( $Data as $Key => $Values )
       {
        if ( $ID % $SkipLabels == 0 )
@@ -608,10 +607,6 @@
          $TextWidth  = abs($Position[2])+abs($Position[0]);
          $TextHeight = abs($Position[1])+abs($Position[3]);
 
-            // Save max text height
-            if ($maxTextHeight < $TextHeight) {
-                $maxTextHeight = $TextHeight;
-            }
          if ( $Angle == 0 )
           {
            $YPos = $this->GArea_Y2+18;
@@ -619,13 +614,51 @@
           }
          else
           {
-           $YPos = $this->GArea_Y2+10;
-              // If rotation is top down, then add TextHeight;
-              $YPos = (sin($Angle) < 0) ? $YPos + $TextHeight : $YPos;
-           if ( $Angle <= 90 )
-            imagettftext($this->Picture,$this->FontSize,$Angle,floor($XPos)-$TextWidth+5,$YPos,$C_TextColor,$this->FontName,$Value);
-           else
-            imagettftext($this->Picture,$this->FontSize,$Angle,floor($XPos)+$TextWidth+5,$YPos,$C_TextColor,$this->FontName,$Value);
+              // Will change XY positions to show the right label position
+              // To detect side of cartesian plane XY where angles ends
+              // e.g 60 degree is in Quadrant I, 120 degree is Quadrant II
+              $isYpositive = sin(deg2rad($Angle)) >= 0;
+              $isXpositive = cos(deg2rad($Angle)) >= 0;
+              $YPos = $this->GArea_Y2 + 10;
+              if ($isYpositive && $isXpositive) {
+                  // For Quadrant I
+                  $YPos += $TextHeight;
+                  $XPos -= $TextWidth;
+              } elseif ($isYpositive && !$isXpositive) {
+                  // For Quadrant II
+                  $YPos += $TextHeight;
+                  $XPos += $TextWidth;
+              } elseif (!$isYpositive && !$isXpositive) {
+                  // For Quadrant III
+                  // Nothing to do
+              } else {
+                  // For Quadrant IV
+                  // Nothing to do
+              }
+              imagettftext(
+                  $this->Picture,
+                  $this->FontSize,
+                  $Angle,
+                  $XPos,
+                  $YPos,
+                  $C_TextColor,
+                  $this->FontName,
+                  $Value
+              );
+              // post update XY position
+              if ($isYpositive && $isXpositive) {
+                  // For Quadrant I
+                  $XPos += $TextWidth;
+              } elseif ($isYpositive && !$isXpositive) {
+                  // For Quadrant II
+                  $XPos -= $TextWidth;
+              } elseif (!$isYpositive && !$isXpositive) {
+                  // For Quadrant III
+                  $YPos += $TextHeight;
+              } else {
+                  // For Quadrant IV
+                  $YPos += $TextHeight;
+              }
           }
          if ( $YMax < $YPos || $YMax == NULL ) { $YMax = $YPos; }
         }
@@ -635,12 +668,21 @@
       }
 
     /* Write the X Axis caption if set */
-    if ( isset($DataDescription["Axis"]["X"]) )
-      {
-       $Position   = imageftbbox($this->FontSize,90,$this->FontName,$DataDescription["Axis"]["X"]);
-       $TextWidth  = abs($Position[2])+abs($Position[0]);
-       $TextLeft   = (($this->GArea_X2 - $this->GArea_X1) / 2) + $this->GArea_X1 + ($TextWidth/2);
-       imagettftext($this->Picture,$this->FontSize,0,$TextLeft,$YMax+$this->FontSize+5+$maxTextHeight,$C_TextColor,$this->FontName,$DataDescription["Axis"]["X"]);
+    if (isset($DataDescription["Axis"]["X"]))
+      {
+       $Position   = imageftbbox($this->FontSize, 0, $this->FontName, $DataDescription["Axis"]["X"]);
+       $TextWidth  = abs($Position[2]) + abs($Position[0]);
+       $TextLeft   = (($this->GArea_X2 + $this->GArea_X1) / 2) - ($TextWidth/2);
+       imagettftext(
+           $this->Picture,
+           $this->FontSize,
+           0,
+           $TextLeft,
+           $YMax+$this->FontSize+5,
+           $C_TextColor,
+           $this->FontName,
+           $DataDescription["Axis"]["X"]
+       );
       }
     }
 

+ 13 - 9
plugin/dashboard/block_evaluation_graph/block_evaluation_graph.class.php

@@ -174,7 +174,7 @@ class BlockEvaluationGraph extends Block
                                 $data_set->GetDataDescription(),
                                 $angle
                             );
-                            $test->setGraphArea(50, 30, $this->bg_width-75, $test->YSize - 75);
+                            $test->setGraphArea(50, 30, $this->bg_width-75, $this->bg_height - 75);
                             $test->drawFilledRoundedRectangle(
                                 7,
                                 7,
@@ -294,15 +294,19 @@ class BlockEvaluationGraph extends Block
 							} else {
 								// Initialise the graph
                                 $angle = -30;
-							    $test = new pChart($this->bg_width,$this->bg_height);
-							    $test->setFontProperties(api_get_path(LIBRARY_PATH).'pchart/fonts/tahoma.ttf',8);
-                                $test->fixHeightByRotation($data_set->GetData(), $data_set->GetDataDescription(), $angle);
-                                $test->setGraphArea(50, 30, $this->bg_width-75, $test->YSize-75);
+							    $test = new pChart($this->bg_width, $this->bg_height);
+							    $test->setFontProperties(api_get_path(LIBRARY_PATH) . 'pchart/fonts/tahoma.ttf', 8);
+                                $test->fixHeightByRotation(
+                                    $data_set->GetData(),
+                                    $data_set->GetDataDescription(),
+                                    $angle
+                                );
+                                $test->setGraphArea(50, 30, $this->bg_width - 75, $this->bg_height - 75);
                                 $test->drawFilledRoundedRectangle(
                                     7,
                                     7,
-                                    $this->bg_width-20,
-                                    $test->YSize-20,
+                                    $this->bg_width - 20,
+                                    $test->YSize - 20,
                                     5,
                                     240,
                                     240,
@@ -311,8 +315,8 @@ class BlockEvaluationGraph extends Block
                                 $test->drawRoundedRectangle(
                                     5,
                                     5,
-                                    $this->bg_width-18,
-                                    $test->YSize-18,
+                                    $this->bg_width - 18,
+                                    $test->YSize - 18,
                                     5,
                                     230,
                                     230,