report_skillup.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. <?php
  2. /**
  3. * Skillup report view.
  4. *
  5. * Contains the view layout and ome code to present the data.
  6. *
  7. * @author Iñigo Valentin <i@inigovalentin.com>
  8. * @license https://www.gnu.org/licenses/gpl-3.0.en.html GNU General Public License V3
  9. * @package SWDB
  10. * @category View
  11. * @property Report_Skillup_Page $page The page model.
  12. * @var Report_Skillup_Page $page The page model.
  13. */
  14. ?>
  15. <!DOCTYPE html>
  16. <html lang='en'>
  17. <head>
  18. <?=$page->generate_head()?>
  19. </head>
  20. <body id='body_report_skillup'>
  21. <header>
  22. <?php
  23. include __DIR__ . "/inc/header_app.php";
  24. include __DIR__ . "/inc/header_player.php";
  25. ?>
  26. </header>
  27. <aside class='content filters' id='filters'>
  28. <h2 id='filters_title'>
  29. Report filters
  30. </h2>
  31. <article id='filters_content'>
  32. <form action='/player/<?=get_context()->get_player()->get_id()?>/report/skillup/' method='get' id='filter_skillup' class='filter'>
  33. <table>
  34. <tr>
  35. <td class='filter' id='filter_stars'>
  36. Stars:
  37. </td>
  38. <td>
  39. <input type='number' name='min_stars' min='1' max='6' value='<?=$page->get_filter("MIN_STARS")?>'/>
  40. -
  41. <input type='number' name='max_stars' min='1' max='6' value='<?=$page->get_filter("MAX_STARS")?>'/>
  42. </td>
  43. </tr>
  44. <tr>
  45. <td class='filter' id='filter_stars'>
  46. Natural stars:
  47. </td>
  48. <td>
  49. <input type='number' name='min_natural_stars' min='1' max='5' value='<?=$page->get_filter("MIN_NATURAL_STARS")?>'/>
  50. -
  51. <input type='number' name='max_natural_stars' min='1' max='5' value='<?=$page->get_filter("MAX_NATURAL_STARS")?>'/>
  52. </td>
  53. </tr>
  54. <tr>
  55. <td class='filter'>
  56. Show units:
  57. </td>
  58. <td>
  59. <?php
  60. $selected = Array("", "", "", "", "");
  61. $selected[$page->get_filter("UNIT")] = "selected";
  62. ?>
  63. <select name='unit'>
  64. <option value='0' <?=$selected[0]?>>All</option>
  65. <option value='1' <?=$selected[1]?>>In teams</option>
  66. <option value='2' <?=$selected[2]?>>In teams (score > 0)</option>
  67. </select>
  68. </td>
  69. </tr>
  70. <tr>
  71. <td rowspan='2' class='filter'>
  72. Ponderation:
  73. <div class='help_tooltip'>
  74. <p>
  75. Skill weight in the calculation based on it's position.
  76. </p>
  77. </div>
  78. </td>
  79. <td class='filter'>
  80. &nbsp;S1:<input type='number' step='0.1' min='0' max='4' name='pond_1' id='pond_1' value='<?=$page->get_filter("PONDERATION")[0]?>'/>
  81. &nbsp;S2:<input type='number' step='0.1' min='0' max='4' name='pond_2' id='pond_2' value='<?=$page->get_filter("PONDERATION")[1]?>'/>
  82. </td>
  83. </tr>
  84. <tr>
  85. <td class='filter'>
  86. &nbsp;S3:<input type='number' step='0.1' min='0' max='4' name='pond_3' id='pond_3' value='<?=$page->get_filter("PONDERATION")[2]?>'/>
  87. &nbsp;S4:<input type='number' step='0.1' min='0' max='4' name='pond_4' id='pond_4' value='<?=$page->get_filter("PONDERATION")[3]?>'/>
  88. </td>
  89. </tr>
  90. <tr>
  91. <td class='filter' colspan='2'>
  92. <?php
  93. $checked = "";
  94. if ($page->get_filter("FAMILY")){
  95. $checked = "checked";
  96. }
  97. ?>
  98. <input type='checkbox' name='family' id='filter_family' <?=$checked?>/>
  99. <label for='filter_family'>Mons. with lower grade siblings.</label>
  100. <div class='help_tooltip'>
  101. <p>
  102. Include monsters that have family members with less stars than seleced in the stars filters.
  103. </p>
  104. </div>
  105. </td>
  106. </tr>
  107. <tr>
  108. <td class='filter' colspan='2'>
  109. <?php
  110. $checked = "";
  111. if ($page->get_filter("2A")){
  112. $checked = "checked";
  113. }
  114. ?>
  115. <input type='checkbox' name='2a' id='filter_2a'<?=$checked?>/>
  116. <label for='filter_2a'>Include second-awakened monsters.</label>
  117. </td>
  118. </tr>
  119. <tr>
  120. <td class='filter' colspan='2'>
  121. <?php
  122. $checked = "";
  123. if ($page->get_filter("HOMUNCULUS")){
  124. $checked = "checked";
  125. }
  126. ?>
  127. <input type='checkbox' name='homunculus' id='filter_homunculus' <?=$checked?>/>
  128. <label for='filter_homunculus'>Include Homunculus.</label>
  129. </td>
  130. </tr>
  131. <tr>
  132. <td class='filter' colspan='2'>
  133. <?php
  134. $checked = "";
  135. if ($page->get_filter("IN_STORAGE")){
  136. $checked = "checked";
  137. }
  138. ?>
  139. <input type='checkbox' name='in_storage' id='filter_in_storage' <?=$checked?>/>
  140. <label for='filter_in_storage'>Show monsters in storage.</label>
  141. </td>
  142. </tr>
  143. <tr>
  144. <td class='filter' colspan='2'>
  145. <?php
  146. $checked = "";
  147. if ($page->get_filter("WITHOUT_RUNES")){
  148. $checked = "checked";
  149. }
  150. ?>
  151. <input type='checkbox' name='without_runes' id='filter_without_runes' <?=$checked?>/>
  152. <label for='filter_without_runes'>Show monsters without runes.</label>
  153. </td>
  154. </tr>
  155. <tr>
  156. <td class='filter' colspan='2'>
  157. <?php
  158. $checked = "";
  159. if ($page->get_filter("MAXED")){
  160. $checked = "checked";
  161. }
  162. ?>
  163. <input type='checkbox' name='maxed' id='filter_maxed' <?=$checked?>/>
  164. <label for='filter_maxed'>Show fully skilled-up monster</label>
  165. </td>
  166. </tr>
  167. </table>
  168. <input type='submit' value='Apply'/>
  169. </form>
  170. </article>
  171. </aside> <!-- #filters -->
  172. <main>
  173. <section class='content' id='results'>
  174. <h2>
  175. <span>
  176. Results
  177. </span>
  178. </h2>
  179. <table id='results'>
  180. <?php
  181. $index = 1;
  182. foreach ($page->get_units() as $unit){
  183. switch ($index % 10){
  184. case 1:
  185. $index_title = $index . "<span class='superindex'>st</span> - " . $unit->get_title();
  186. break;
  187. case 2:
  188. $index_title = $index . "<span class='superindex'>nd</span> - " . $unit->get_title();
  189. break;
  190. case 3:
  191. $index_title = $index . "<span class='superindex'>rd</span> - " . $unit->get_title();
  192. break;
  193. default:
  194. $index_title = $index . "<span class='superindex'>th</span> - " . $unit->get_title();
  195. break;
  196. }
  197. switch ($index % 100){
  198. case 11:
  199. case 12:
  200. case 13:
  201. $index_title = $index . "<span class='superindex'>th</span> - " . $unit->get_title();
  202. break;
  203. }
  204. ?>
  205. <tr>
  206. <td colspan='7' class='header'>
  207. <?=$index_title?>
  208. </td>
  209. </tr>
  210. <tr>
  211. <td rowspan='3' class='img'>
  212. <a href='/player/<?=get_context()->get_player()->get_id()?>/units/<?=$unit->get_id()?>/' target='_blank'>
  213. <div class='monster_panel'>
  214. <?=HTML::unit_panel($unit)?>
  215. </div>
  216. </a>
  217. </td>
  218. <?php
  219. $skill_num = 1;
  220. $absolute_level = 0;
  221. $absolute_max_level = 0;
  222. $ponderated_level = 0.0;
  223. $ponderated_max_level = 0.0;
  224. foreach ($unit->get_monster()->get_skills() as $skill){
  225. if ($skill->get_max_level() > 1){
  226. $absolute_max_level += $skill->get_max_level() - 1;
  227. }
  228. $cur_lvl = $unit->get_skill_levels()[$skill_num - 1];
  229. if ($skill->get_max_level() > 1){
  230. $absolute_level += ($cur_lvl - 1);
  231. $ponderated_level += ($cur_lvl - 1) * $page->get_filter("PONDERATION")[$skill_num - 1];//$cur_lvl * (($skill_num + 1) / 2.0);
  232. $ponderated_max_level += ($skill->get_max_level() - 1) * $page->get_filter("PONDERATION")[$skill_num - 1];//$skill->get_max_level() * (($skill_num + 1) / 2.0);
  233. }
  234. $max_lvl = $skill->get_max_level();
  235. if ($max_lvl == $cur_lvl){
  236. $maxed = "maxed";
  237. }
  238. else{
  239. $maxed = "";
  240. }
  241. ?>
  242. <td rowspan='3' class='skill'>
  243. <img title='<?=$skill->get_description()?>' src='<?=$skill->get_image()?>'/>
  244. <span class='skill_level <?=$maxed?>'>
  245. <?=$cur_lvl?>/<?=$max_lvl?>
  246. </span>
  247. <span class='skill_name'>
  248. <?=$skill->get_name()?>
  249. </span>
  250. </td>
  251. <?php
  252. $skill_num ++;
  253. }
  254. while ($skill_num < 5){
  255. ?>
  256. <td rowspan='3' class='skill empty'>
  257. </td>
  258. <?php
  259. $skill_num ++;
  260. }
  261. ?>
  262. <td class='label'>
  263. <span class='desktop'>
  264. Absolute skill-ups:
  265. </span>
  266. <span class='mobile'>
  267. Abs:
  268. </span>
  269. </td>
  270. <td class='value'>
  271. <?=number_format($absolute_level * 100 / $absolute_max_level, 2)?>%
  272. </td>
  273. </tr>
  274. <tr>
  275. <td class='label'>
  276. <span class='desktop'>
  277. Ponderated skill-ups:
  278. </span>
  279. <span class='mobile'>
  280. Pond:
  281. </span>
  282. </td>
  283. <td class='value'>
  284. <?=number_format($ponderated_level * 100 / $ponderated_max_level, 2)?>%
  285. </td>
  286. </tr>
  287. <tr>
  288. <td class='label'>
  289. <span class='desktop'>
  290. Remaining skill-ups:
  291. </span>
  292. <span class='mobile'>
  293. Left:
  294. </span>
  295. </td>
  296. <td class='value'>
  297. <?=$absolute_max_level - $absolute_level?>&nbsp;
  298. </td>
  299. </tr>
  300. <?php
  301. $index ++;
  302. }
  303. ?>
  304. </table>
  305. </section>
  306. </main>
  307. <?php
  308. include __DIR__ . "/inc/footer.php";
  309. ?>
  310. </body>
  311. </html>