chart.class.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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(255, 99, 132, " . $opacity . ")", // Red
  33. "rgba(54, 162, 235, " . $opacity . ")", // Blue
  34. "rgba(255, 206, 86, " . $opacity . ")", // Yellow
  35. "rgba(75, 192, 192, " . $opacity . ")", // Green,
  36. "rgba(153, 102, 255, " . $opacity . ")", // Purple
  37. "rgba(255, 159, 64, " . $opacity . ")" // Orange
  38. );
  39. $data["borderColor"] = array(
  40. "rgba(255,99,132,1)", // Red
  41. "rgba(54, 162, 235, 1)", // Blue
  42. "rgba(255, 206, 86, 1)", // Yellow
  43. "rgba(75, 192, 192, 1)", // Green
  44. "rgba(153, 102, 255, 1)", // Purple
  45. "rgba(255, 159, 64, 1)" // Orange
  46. );
  47. for ($i = 0; $i < $nbData; $i++) {
  48. $backgroundColor .= '"' . $data["backgroundColor"][$i] . '"';
  49. if ($i != $nbData) {
  50. $backgroundColor .= ", ";
  51. }
  52. }
  53. for ($i = 0; $i < $nbData; $i++) {
  54. $borderColor .= '"' . $data["borderColor"][$i] . '"';
  55. if ($i != $nbData) {
  56. $borderColor .= ", ";
  57. }
  58. }
  59. for ($i = 0; $i < $nbData; $i++) {
  60. $label .= '"' . $_data[$i]["label"] . '"';
  61. if ($i != $nbData) {
  62. $label .= ", ";
  63. }
  64. }
  65. for ($i = 0; $i < $nbData; $i++) {
  66. $nb .= '"' . $_data[$i]["nb"] . '"';
  67. if ($i != $nbData) {
  68. $nb .= ", ";
  69. }
  70. }
  71. return array("label" => $label, "nb" => $nb, "backgroundColor" => $backgroundColor, "borderColor" => $borderColor);
  72. }
  73. private static function javascriptDoughnut(array $_config)
  74. {
  75. $sort = self::constructData($_config["data"]);
  76. return '<script>
  77. var ctx = document.getElementById("' . $_config["id"] . '");
  78. var myChart = new Chart(ctx, {
  79. type: "doughnut",
  80. data: {
  81. labels: [' . $sort["label"] . '],
  82. datasets: [{
  83. label: "' . $_config["label"] . '",
  84. data: [' . $sort["nb"] . '],
  85. backgroundColor: [' . $sort["backgroundColor"] . '],
  86. borderColor: [' . $sort["borderColor"] . '],
  87. borderWidth: 1
  88. }]
  89. }
  90. });
  91. </script>';
  92. }
  93. private static function javascriptBar(array $_config)
  94. {
  95. $sort = self::constructData($_config["data"]);
  96. return '<script>
  97. var ctx = document.getElementById("' . $_config["id"] . '");
  98. var myChart = new Chart(ctx, {
  99. type: "bar",
  100. data: {
  101. labels: [' . $sort["label"] . '],
  102. datasets: [{
  103. label: "' . $_config["label"] . '",
  104. data: [' . $sort["nb"] . '],
  105. backgroundColor: [' . $sort["backgroundColor"] . '],
  106. borderColor: [' . $sort["borderColor"] . '],
  107. borderWidth: 1
  108. }]
  109. }
  110. });
  111. </script>';
  112. }
  113. private static function constructDataLine(array $_data)
  114. {
  115. $return["labels"] = $return["data"] = NULL;
  116. foreach ($_data[0] as $key => $value) {
  117. $return["labels"] .= '"' . $key . '", ';
  118. $return["data"] .= $value . ', ';
  119. }
  120. return $return;
  121. }
  122. private static function javascriptLine(array $_config)
  123. {
  124. $sort = self::constructDataLine($_config["data"]);
  125. return '<script>
  126. var ctx = document.getElementById("' . $_config["id"] . '");
  127. var myChart = new Chart(ctx, {
  128. type: "line",
  129. data: {
  130. "labels":[' . $sort["labels"] . '],
  131. datasets: [{
  132. "label":"' . $_config["label"] . '",
  133. "data":[' . $sort["data"] . '],
  134. "fill":false,
  135. "borderColor":"rgb(75, 192, 192)",
  136. "lineTension":0.1
  137. }],
  138. "options":{}
  139. }
  140. });
  141. </script>';
  142. }
  143. }