2
0

chart.class.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  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. if(!empty($_config["config"])){
  12. $_config["config"] = core::extractArrayInArray($_config["config"]);
  13. } else {
  14. $_config["config"] = NULL;
  15. }
  16. echo '<canvas id="' . $id . '" width="' . $width . '" height="' . $height . '" style="display: block; width: ' . $width . 'px; height: ' . $height . 'px;" class="chartjs-render-monitor"></canvas>';
  17. switch ($_config["charts"]) {
  18. case "doughnut":
  19. echo self::javascriptDoughnut($_config);
  20. break;
  21. case "bar":
  22. echo self::javascriptBar($_config);
  23. break;
  24. case "line":
  25. echo self::javascriptLine($_config);
  26. break;
  27. case "pie":
  28. echo self::javascriptPie($_config);
  29. break;
  30. default:
  31. break;
  32. }
  33. }
  34. private static function constructData(array $_data, ?array $_config = NULL)
  35. {
  36. $label = $nb = $backgroundColor = $borderColor = "";
  37. $nbData = count($_data);
  38. if(empty($_config["backgroundColor"])){
  39. $data["backgroundColor"] = array(
  40. "rgba(242, 84, 84, 0.6)",
  41. "rgba(242, 132, 84, 0.6)",
  42. "rgba(242, 179, 84, 0.6)",
  43. "rgba(242, 226, 84, 0.6)",
  44. "rgba(210, 242, 84, 0.6)",
  45. "rgba(163, 242, 84, 0.6)",
  46. "rgba(116, 242, 84, 0.6)",
  47. "rgba(84, 242, 100, 0.6)",
  48. "rgba(84, 242, 147, 0.6)",
  49. "rgba(84, 242, 195, 0.6)",
  50. "rgba(84, 242, 242, 0.6)",
  51. "rgba(84, 195, 242, 0.6)",
  52. "rgba(84, 147, 242, 0.6)",
  53. "rgba(84, 100, 242, 0.6)",
  54. "rgba(116, 84, 242, 0.6)",
  55. "rgba(163, 84, 242, 0.6)",
  56. "rgba(210, 84, 242, 0.6)",
  57. "rgba(242, 84, 226, 0.6)",
  58. "rgba(242, 84, 179, 0.6)",
  59. "rgba(242, 84, 132, 0.6)"
  60. );
  61. } else {
  62. $data["backgroundColor"] = $_config["backgroundColor"];
  63. }
  64. if(empty($_config["borderColor"])){
  65. $data["borderColor"] = array(
  66. "rgba(242, 84, 84, 1.0)",
  67. "rgba(242, 132, 84, 1.0)",
  68. "rgba(242, 179, 84, 1.0)",
  69. "rgba(242, 226, 84, 1.0)",
  70. "rgba(210, 242, 84, 1.0)",
  71. "rgba(163, 242, 84, 1.0)",
  72. "rgba(116, 242, 84, 1.0)",
  73. "rgba(84, 242, 100, 1.0)",
  74. "rgba(84, 242, 147, 1.0)",
  75. "rgba(84, 242, 195, 1.0)",
  76. "rgba(84, 242, 242, 1.0)",
  77. "rgba(84, 195, 242, 1.0)",
  78. "rgba(84, 147, 242, 1.0)",
  79. "rgba(84, 100, 242, 1.0)",
  80. "rgba(116, 84, 242, 1.0)",
  81. "rgba(163, 84, 242, 1.0)",
  82. "rgba(210, 84, 242, 1.0)",
  83. "rgba(242, 84, 226, 1.0)",
  84. "rgba(242, 84, 179, 1.0)",
  85. "rgba(242, 84, 132, 1.0)"
  86. );
  87. } else {
  88. $data["borderColor"] = $_config["borderColor"];
  89. }
  90. for ($i = 0; $i < $nbData; $i++) {
  91. $backgroundColor .= '"' . $data["backgroundColor"][$i] . '"';
  92. if ($i != $nbData) {
  93. $backgroundColor .= ", ";
  94. }
  95. }
  96. for ($i = 0; $i < $nbData; $i++) {
  97. $borderColor .= '"' . $data["borderColor"][$i] . '"';
  98. if ($i != $nbData) {
  99. $borderColor .= ", ";
  100. }
  101. }
  102. for ($i = 0; $i < $nbData; $i++) {
  103. $label .= ($_data[$i]["nb"] > 0) ? '"' . $_data[$i]["label"] . '"' : '"Aucun(e)s ' . $_data[$i]["label"] . '"';
  104. if ($i != $nbData) {
  105. $label .= ", ";
  106. }
  107. }
  108. for ($i = 0; $i < $nbData; $i++) {
  109. $nb .= '"' . $_data[$i]["nb"] . '"';
  110. if ($i != $nbData) {
  111. $nb .= ", ";
  112. }
  113. }
  114. return array("label" => $label, "nb" => $nb, "backgroundColor" => $backgroundColor, "borderColor" => $borderColor);
  115. }
  116. private static function javascriptPie(array $_config)
  117. {
  118. $sort = self::constructData($_config["data"], $_config["config"]);
  119. return '<script>
  120. var ctx = document.getElementById("' . $_config["id"] . '");
  121. var myChart = new Chart(ctx, {
  122. type: "pie",
  123. data: {
  124. labels: [' . $sort["label"] . '],
  125. datasets: [{
  126. label: "' . $_config["label"] . '",
  127. data: [' . $sort["nb"] . '],
  128. backgroundColor: [' . $sort["backgroundColor"] . '],
  129. borderColor: [' . $sort["borderColor"] . '],
  130. borderWidth: 1
  131. }]
  132. }
  133. });
  134. </script>';
  135. }
  136. private static function javascriptDoughnut(array $_config)
  137. {
  138. $sort = self::constructData($_config["data"], $_config["config"]);
  139. return '<script>
  140. var ctx = document.getElementById("' . $_config["id"] . '");
  141. var myChart = new Chart(ctx, {
  142. type: "doughnut",
  143. data: {
  144. labels: [' . $sort["label"] . '],
  145. datasets: [{
  146. label: "' . $_config["label"] . '",
  147. data: [' . $sort["nb"] . '],
  148. backgroundColor: [' . $sort["backgroundColor"] . '],
  149. borderColor: [' . $sort["borderColor"] . '],
  150. borderWidth: 1
  151. }]
  152. }
  153. });
  154. </script>';
  155. }
  156. private static function javascriptBar(array $_config)
  157. {
  158. $sort = self::constructData($_config["data"], $_config["config"]);
  159. return '<script>
  160. var ctx = document.getElementById("' . $_config["id"] . '");
  161. var myChart = new Chart(ctx, {
  162. type: "bar",
  163. data: {
  164. labels: [' . $sort["label"] . '],
  165. datasets: [{
  166. label: "' . $_config["label"] . '",
  167. data: [' . $sort["nb"] . '],
  168. backgroundColor: [' . $sort["backgroundColor"] . '],
  169. borderColor: [' . $sort["borderColor"] . '],
  170. borderWidth: 1
  171. }]
  172. }
  173. });
  174. </script>';
  175. }
  176. private static function constructDataLine(array $_data)
  177. {
  178. $return["labels"] = $return["data"] = NULL;
  179. foreach ($_data[0] as $key => $value) {
  180. $return["labels"] .= '"' . $key . '", ';
  181. $return["data"] .= $value . ', ';
  182. }
  183. return $return;
  184. }
  185. private static function javascriptLine(array $_config)
  186. {
  187. $sort = self::constructDataLine($_config["data"]);
  188. return '<script>
  189. var ctx = document.getElementById("' . $_config["id"] . '");
  190. var myChart = new Chart(ctx, {
  191. type: "line",
  192. data: {
  193. "labels":[' . $sort["labels"] . '],
  194. datasets: [{
  195. "label":"' . $_config["label"] . '",
  196. "data":[' . $sort["data"] . '],
  197. "fill":false,
  198. "borderColor":"rgb(75, 192, 192)",
  199. "lineTension":0.1
  200. }],
  201. "options":{}
  202. }
  203. });
  204. </script>';
  205. }
  206. }