chart.class.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. <?php
  2. // Documentation
  3. // https://www.chartjs.org/docs/2.6.0/
  4. class chart
  5. {
  6. public static function printCanvas(array $_config)
  7. {
  8. $id = $_config["id"];
  9. $width = (isset($_config["width"])) ? $_config["width"] : 600;
  10. $height = (isset($_config["height"])) ? $_config["height"] : 400;
  11. echo '<canvas id="' . $id . '" width="' . $width . '" height="' . $height . '" style="display: block; width: ' . $width . 'px; height: ' . $height . 'px;" class="chartjs-render-monitor"></canvas>';
  12. switch ($_config["charts"]) {
  13. case "doughnut":
  14. echo self::javascriptDoughnut($_config);
  15. break;
  16. case "bar":
  17. echo self::javascriptBar($_config);
  18. break;
  19. case "line":
  20. echo self::javascriptLine($_config);
  21. break;
  22. default:
  23. break;
  24. }
  25. }
  26. private static function constructData(array $_data)
  27. {
  28. $label = $nb = $backgroundColor = $borderColor = "";
  29. $opacity = 0.5;
  30. $nbData = count($_data);
  31. $data["backgroundColor"] = array(
  32. "rgba(242, 84, 84, 0.6)",
  33. "rgba(242, 132, 84, 0.6)",
  34. "rgba(242, 179, 84, 0.6)",
  35. "rgba(242, 226, 84, 0.6)",
  36. "rgba(210, 242, 84, 0.6)",
  37. "rgba(163, 242, 84, 0.6)",
  38. "rgba(116, 242, 84, 0.6)",
  39. "rgba(84, 242, 100, 0.6)",
  40. "rgba(84, 242, 147, 0.6)",
  41. "rgba(84, 242, 195, 0.6)",
  42. "rgba(84, 242, 242, 0.6)",
  43. "rgba(84, 195, 242, 0.6)",
  44. "rgba(84, 147, 242, 0.6)",
  45. "rgba(84, 100, 242, 0.6)",
  46. "rgba(116, 84, 242, 0.6)",
  47. "rgba(163, 84, 242, 0.6)",
  48. "rgba(210, 84, 242, 0.6)",
  49. "rgba(242, 84, 226, 0.6)",
  50. "rgba(242, 84, 179, 0.6)",
  51. "rgba(242, 84, 132, 0.6)"
  52. );
  53. $data["borderColor"] = array(
  54. "rgba(242, 84, 84, 1.0)",
  55. "rgba(242, 132, 84, 1.0)",
  56. "rgba(242, 179, 84, 1.0)",
  57. "rgba(242, 226, 84, 1.0)",
  58. "rgba(210, 242, 84, 1.0)",
  59. "rgba(163, 242, 84, 1.0)",
  60. "rgba(116, 242, 84, 1.0)",
  61. "rgba(84, 242, 100, 1.0)",
  62. "rgba(84, 242, 147, 1.0)",
  63. "rgba(84, 242, 195, 1.0)",
  64. "rgba(84, 242, 242, 1.0)",
  65. "rgba(84, 195, 242, 1.0)",
  66. "rgba(84, 147, 242, 1.0)",
  67. "rgba(84, 100, 242, 1.0)",
  68. "rgba(116, 84, 242, 1.0)",
  69. "rgba(163, 84, 242, 1.0)",
  70. "rgba(210, 84, 242, 1.0)",
  71. "rgba(242, 84, 226, 1.0)",
  72. "rgba(242, 84, 179, 1.0)",
  73. "rgba(242, 84, 132, 1.0)"
  74. );
  75. for ($i = 0; $i < $nbData; $i++) {
  76. $backgroundColor .= '"' . $data["backgroundColor"][$i] . '"';
  77. if ($i != $nbData) {
  78. $backgroundColor .= ", ";
  79. }
  80. }
  81. for ($i = 0; $i < $nbData; $i++) {
  82. $borderColor .= '"' . $data["borderColor"][$i] . '"';
  83. if ($i != $nbData) {
  84. $borderColor .= ", ";
  85. }
  86. }
  87. for ($i = 0; $i < $nbData; $i++) {
  88. $label .= '"' . $_data[$i]["label"] . '"';
  89. if ($i != $nbData) {
  90. $label .= ", ";
  91. }
  92. }
  93. for ($i = 0; $i < $nbData; $i++) {
  94. $nb .= '"' . $_data[$i]["nb"] . '"';
  95. if ($i != $nbData) {
  96. $nb .= ", ";
  97. }
  98. }
  99. return array("label" => $label, "nb" => $nb, "backgroundColor" => $backgroundColor, "borderColor" => $borderColor);
  100. }
  101. private static function javascriptDoughnut(array $_config)
  102. {
  103. $sort = self::constructData($_config["data"]);
  104. return '<script>
  105. var ctx = document.getElementById("' . $_config["id"] . '");
  106. var myChart = new Chart(ctx, {
  107. type: "doughnut",
  108. data: {
  109. labels: [' . $sort["label"] . '],
  110. datasets: [{
  111. label: "' . $_config["label"] . '",
  112. data: [' . $sort["nb"] . '],
  113. backgroundColor: [' . $sort["backgroundColor"] . '],
  114. borderColor: [' . $sort["borderColor"] . '],
  115. borderWidth: 1
  116. }]
  117. }
  118. });
  119. </script>';
  120. }
  121. private static function javascriptBar(array $_config)
  122. {
  123. $sort = self::constructData($_config["data"]);
  124. return '<script>
  125. var ctx = document.getElementById("' . $_config["id"] . '");
  126. var myChart = new Chart(ctx, {
  127. type: "bar",
  128. data: {
  129. labels: [' . $sort["label"] . '],
  130. datasets: [{
  131. label: "' . $_config["label"] . '",
  132. data: [' . $sort["nb"] . '],
  133. backgroundColor: [' . $sort["backgroundColor"] . '],
  134. borderColor: [' . $sort["borderColor"] . '],
  135. borderWidth: 1
  136. }]
  137. }
  138. });
  139. </script>';
  140. }
  141. private static function constructDataLine(array $_data)
  142. {
  143. $return["labels"] = $return["data"] = NULL;
  144. foreach ($_data[0] as $key => $value) {
  145. $return["labels"] .= '"' . $key . '", ';
  146. $return["data"] .= $value . ', ';
  147. }
  148. return $return;
  149. }
  150. private static function javascriptLine(array $_config)
  151. {
  152. $sort = self::constructDataLine($_config["data"]);
  153. return '<script>
  154. var ctx = document.getElementById("' . $_config["id"] . '");
  155. var myChart = new Chart(ctx, {
  156. type: "line",
  157. data: {
  158. "labels":[' . $sort["labels"] . '],
  159. datasets: [{
  160. "label":"' . $_config["label"] . '",
  161. "data":[' . $sort["data"] . '],
  162. "fill":false,
  163. "borderColor":"rgb(75, 192, 192)",
  164. "lineTension":0.1
  165. }],
  166. "options":{}
  167. }
  168. });
  169. </script>';
  170. }
  171. }