PageRenderTime 52ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/index.php

https://github.com/csmith/WeightTracker
PHP | 154 lines | 137 code | 17 blank | 0 comment | 43 complexity | ef7861f3f6d9f8ba0509ab1fe815a367 MD5 | raw file
  1. <?PHP require('data.php'); ?>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  3. <html>
  4. <head>
  5. <title>Weight Tracking</title>
  6. <style type="text/css">
  7. table { width: 100%; border-collapse: collapse; margin-bottom: 10px; }
  8. td, th { border: 1px solid black; padding: 5px; }
  9. div#stats { margin-left: 810px; margin-right: 5px; padding-top: 1px; }
  10. td { text-align: right; }
  11. th { font-weight: bold; color: #fff; background-color: #000; border: 1px solid #666; }
  12. tr.vbad td, td.bad { background-color: #f99; }
  13. tr.bad td { background-color: #fdd; }
  14. tr.ok td { background-color: #fff; }
  15. tr.good td { background-color: #dfd; }
  16. tr.vgood td, td.good { background-color: #9f9; }
  17. </style>
  18. </head>
  19. <body>
  20. <div id="graph" style="float: left;">
  21. <img src="newergraph.php" alt="Graph of weight">
  22. </div>
  23. <div id="stats">
  24. <table>
  25. <tr>
  26. <th rowspan="2">Wk</th><th rowspan="2">Mass</th><th rowspan="2">BMI</th>
  27. <th colspan="2">&Delta;Mass</th><th colspan="2">&Sigma;&Delta;Mass</th>
  28. </tr><tr>
  29. <th>kg</th><th>st</th><th>kg</th><th>st</th>
  30. </tr>
  31. <?PHP
  32. $last = 0;
  33. $first = 0;
  34. $number = 18;
  35. for ($i = count($data) - 1; $i > count($data) - $number; $i--) {
  36. if (isset($skips[$i])) { $number++; }
  37. }
  38. foreach ($data as $week => $weight) {
  39. $week++;
  40. if ($first == 0) {
  41. $first = $weight;
  42. }
  43. if ($last != 0) { $diffs[] = $weight - $last; }
  44. if ($week > count($data) - $number) {
  45. $diff = $weight - $last;
  46. if ($diff > 0.5) {
  47. $class = 'vbad';
  48. } else if ($diff > 0) {
  49. $class = 'bad';
  50. } else if ($diff == 0) {
  51. $class = 'ok';
  52. } else if ($diff > -1) {
  53. $class = 'good';
  54. } else {
  55. $class = 'vgood';
  56. }
  57. if (!isset($skips[$week - 1])) {
  58. echo '<tr class="', $class, '"><td>', $week, '</td><td>', sprintf('%01.1f', $weight), '</td><td>';
  59. echo sprintf('%01.1f', $weight / (HEIGHT * HEIGHT), 1), '</td><td>';
  60. if ($last == 0) {
  61. echo '-';
  62. } else {
  63. if ($weight - $last > 0) {
  64. echo '<span style="color: red;">';
  65. }
  66. echo sprintf('%01.1f', $weight - $last);
  67. }
  68. echo '</td><td>';
  69. if ($last == 0) {
  70. echo '-';
  71. } else {
  72. if ($weight - $last > 0) {
  73. echo '<span style="color: red;">';
  74. }
  75. echo sprintf('%01.1f', 0.157473044 * ($weight - $last));
  76. }
  77. echo '</td><td>', sprintf('%01.1f', $weight - $first), '</td>';
  78. echo '<td>', sprintf('%01.1f', 0.157473044 * ($weight - $first)), '</td></tr>';
  79. }
  80. }
  81. $last = $weight;
  82. }
  83. $a1 = array_sum($diffs) / count($diffs);
  84. $a2 = array_sum(array_slice($diffs, -4)) / 4;
  85. $a3 = array_pop($diffs);
  86. $bmi = $last / (HEIGHT * HEIGHT);
  87. $target = 5 * floor($bmi/5);
  88. $target2 = $target - 5;
  89. $targs = array($target, $target2);
  90. $tweeks = array();
  91. foreach ($targets as $targ) {
  92. list($tweek, $tbmi) = $targ;
  93. if ($bmi > $tbmi && $tweek > $week) {
  94. $tweeks[$tbmi] = $tweek;
  95. $targs[] = $tbmi;
  96. }
  97. }
  98. rsort($targs);
  99. $target = array_shift($targs);
  100. $target2 = array_shift($targs);
  101. $b35 = $target * HEIGHT * HEIGHT - $last;
  102. $b30 = ($target2) * HEIGHT * HEIGHT - $last;
  103. $target_s = $target . ' (' . round($target * HEIGHT * HEIGHT, 1) . ')';
  104. $target2_s = $target2 . ' (' . round($target2 * HEIGHT * HEIGHT, 1) . ')';
  105. ?>
  106. </table>
  107. <table>
  108. <tr><th rowspan="2">Timespan</th><th rowspan="2"><span style="border-top: 1px solid white;">&Delta;Mass</span></th><th colspan="2">ETA &rarr; BMI (KG)</th></tr>
  109. <tr><th><?PHP echo $target_s; ?></th><th><?PHP echo $target2_s; ?></th></tr>
  110. <tr><td>All time</td><td><?PHP printf('%01.1f', $a1); ?></td>
  111. <td class="<?PHP if (isset($tweeks[$target])) { echo ($a1 < 0 && ceil(abs($b35 / $a1)) < $tweeks[$target] - count($data)) ? 'good' : 'bad'; } ?>">
  112. <?PHP echo $a1 >= 0 ? 'Never' : date('d M y', strtotime('+'.ceil(abs($b35 / $a1)).'weeks')); ?></td>
  113. <td class="<?PHP if (isset($tweeks[$target2])) { echo ($a1 < 0 && ceil(abs($b30 / $a1)) < $tweeks[$target2] - count($data)) ? 'good' : 'bad'; } ?>">
  114. <?PHP echo $a1 >= 0 ? 'Never' : date('d M y', strtotime('+'.ceil(abs($b30 / $a1)).'weeks')); ?></td>
  115. </tr>
  116. <tr><td>Last month</td><td><?PHP printf('%01.1f', $a2); ?></td>
  117. <td class="<?PHP if (isset($tweeks[$target])) { echo ($a2 < 0 && ceil(abs($b35 / $a2)) < $tweeks[$target] - count($data)) ? 'good' : 'bad'; } ?>">
  118. <?PHP echo $a2 >= 0 ? 'Never' : date('d M y', strtotime('+'.ceil(abs($b35 / $a2)).'weeks')); ?></td>
  119. <td class="<?PHP if (isset($tweeks[$target2])) { echo ($a2 < 0 && ceil(abs($b30 / $a2)) < $tweeks[$target2] - count($data)) ? 'good' : 'bad'; } ?>">
  120. <?PHP echo $a2 >= 0 ? 'Never' : date('d M y', strtotime('+'.ceil(abs($b30 / $a2)).'weeks')); ?></td>
  121. </tr>
  122. <tr><td>Last week</td><td><?PHP printf('%01.1f', $a3); ?></td>
  123. <td class="<?PHP if (isset($tweeks[$target])) { echo ($a3 < 0 && ceil(abs($b35 / $a3)) < $tweeks[$target] - count($data)) ? 'good' : 'bad'; } ?>">
  124. <?PHP echo $a3 >= 0 ? 'Never' : date('d M y', strtotime('+'.ceil(abs($b35 / $a3)).'weeks')); ?></td>
  125. <td class="<?PHP if (isset($tweeks[$target2])) { echo ($a3 < 0 && ceil(abs($b30 / $a3)) < $tweeks[$target2] - count($data)) ? 'good' : 'bad'; } ?>">
  126. <?PHP echo $a3 >= 0 ? 'Never' : date('d M y', strtotime('+'.ceil(abs($b30 / $a3)).'weeks')); ?></td>
  127. </tr>
  128. <tr><th>Average</th><td><?PHP printf('%01.1f', ($a1 + $a2 + $a3)/3); ?></td>
  129. <td class="<?PHP if (isset($tweeks[$target])) { echo ($a1 + $a2 + $a3 < 0 && ceil(abs($b35 / (($a1 + $a2 + $a3)/3))) < $tweeks[$target] - count($data)) ? 'good' : 'bad'; } ?>">
  130. <?PHP echo $a1 + $a2 + $a3 >= 0 ? 'Never' : date('d M y', strtotime('+'.ceil(abs($b35 / (($a1 + $a2 + $a3)/3))).'weeks')); ?></td>
  131. <td class="<?PHP if (isset($tweeks[$target2])) { echo ($a1 + $a2 + $a3 < 0 && ceil(abs($b30 / (($a1 + $a2 + $a3)/3))) < $tweeks[$target2] - count($data)) ? 'good' : 'bad'; } ?>">
  132. <?PHP echo $a1 + $a2 + $a3 >= 0 ? 'Never' : date('d M y', strtotime('+'.ceil(abs($b30 / (($a1 + $a2 + $a3)/3))).'weeks')); ?></td>
  133. </tr>
  134. </table>
  135. </div>
  136. </body>
  137. </html>