player.php 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580
  1. <?php
  2. /**
  3. * Home view.
  4. *
  5. * Contains the view layout and some 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 Home_Page $page The page model.
  12. * @var Player_Page $page The page model.
  13. */
  14. ?>
  15. <!DOCTYPE html>
  16. <html lang='en'>
  17. <head>
  18. <?=$page->generate_head()?>
  19. </head>
  20. <body>
  21. <header>
  22. <?php
  23. include __DIR__ . "/inc/header_app.php";
  24. include __DIR__ . "/inc/header_player.php";
  25. ?>
  26. </header>
  27. <aside>
  28. <h2>
  29. <?=get_context()->get_player()->get_name()?>
  30. </h2>
  31. <p>
  32. <?=get_context()->get_player()->get_name()?>'s profile
  33. </p>
  34. <table id='profile'>
  35. <tr>
  36. <td class='label'>
  37. Lv.
  38. </td>
  39. <td class='value'>
  40. <?=get_context()->get_player()->get_level()?>
  41. </td>
  42. </tr>
  43. <tr>
  44. <td class='label'>
  45. Exp.
  46. </td>
  47. <td class='value'>
  48. <?=get_context()->get_player()->get_experience()?>
  49. </td>
  50. </tr>
  51. <tr>
  52. <td class='label'>
  53. Country
  54. </td>
  55. <td class='value'>
  56. <?=get_context()->get_player()->get_country()?>
  57. </td>
  58. </tr>
  59. <tr>
  60. <td class='label'>
  61. Since
  62. </td>
  63. <td class='value'>
  64. <?=get_context()->get_player()->get_joined('Y-m-d')?>
  65. </td>
  66. </tr>
  67. <tr>
  68. <td class='label'>
  69. Days
  70. </td>
  71. <td class='value'>
  72. <?=round((time() - get_context()->get_player()->get_joined('U')) / (60 * 60 * 24))?>
  73. </td>
  74. </tr>
  75. </table>
  76. </aside>
  77. <main>
  78. <section class='content'>
  79. <h2>
  80. <span>
  81. Summoners War DataBase
  82. </span>
  83. </h2>
  84. <article id='profile'>
  85. <div class='panel' id='panel_left'>
  86. <div id='placements' class='profile_section'>
  87. <h4>
  88. Placements
  89. </h4>
  90. <div id='placements_rep'>
  91. <h5>
  92. Rep monster:
  93. </h5>
  94. <div class='monster_panel'>
  95. <?=HTML::unit_panel(get_context()->get_player()->get_rep())?>
  96. </div> <!-- .monster_panel -->
  97. </div>
  98. <div id='placements_arena'>
  99. <h5>
  100. Arena defense:
  101. </h5>
  102. <?php
  103. $first = true;
  104. foreach (get_context()->get_player()->get_arena_defense() as $defense){
  105. if (
  106. $first &&
  107. null != $defense->get_monster()->get_leader_skill() &&
  108. (
  109. $defense->get_monster()->get_leader_skill()->get_area() == EFFECT_AREA_ID::GENERAL ||
  110. $defense->get_monster()->get_leader_skill()->get_area() == EFFECT_AREA_ID::ARENA
  111. )
  112. ){
  113. ?>
  114. <div class='skill'>
  115. <img class='skill_img' title='<?=$defense->get_monster()->get_leader_skill()->get_description()?>' src='<?=$defense->get_monster()->get_leader_skill()->get_image()?>'/>
  116. </div>
  117. <?php
  118. }
  119. $first = false;
  120. ?>
  121. <div class='monster_panel'>
  122. <?=HTML::unit_panel($defense)?>
  123. </div>
  124. <?php
  125. }
  126. ?>
  127. </div>
  128. <div id='placements_gw'>
  129. <h5>
  130. Guild War defense:
  131. </h5>
  132. <?php
  133. $first = true;
  134. // TODO: Watch if null
  135. foreach (get_context()->get_player()->get_gw_defense()[0] as $defense){
  136. if (
  137. $first &&
  138. null != $defense->get_monster()->get_leader_skill() &&
  139. (
  140. $defense->get_monster()->get_leader_skill()->get_area() == EFFECT_AREA_ID::GENERAL ||
  141. $defense->get_monster()->get_leader_skill()->get_area() == EFFECT_AREA_ID::GUILD
  142. )
  143. ){
  144. ?>
  145. <div class='skill'>
  146. <img class='skill_img' title='<?=$defense->get_monster()->get_leader_skill()->get_description()?>' src='<?=$defense->get_monster()->get_leader_skill()->get_image()?>'/>
  147. </div>
  148. <?php
  149. }
  150. $first = false;
  151. ?>
  152. <div class='monster_panel'>
  153. <?=HTML::unit_panel($defense)?>
  154. </div>
  155. <?php
  156. }
  157. ?>
  158. <hr/>
  159. <?php
  160. $first = true;
  161. // TODO: Watch if null
  162. foreach (get_context()->get_player()->get_gw_defense()[1] as $defense){
  163. // TODO: Guild content, not arena.
  164. if (
  165. $first &&
  166. null != $defense->get_monster()->get_leader_skill() &&
  167. (
  168. $defense->get_monster()->get_leader_skill()->get_area() == EFFECT_AREA_ID::GENERAL ||
  169. $defense->get_monster()->get_leader_skill()->get_area() == EFFECT_AREA_ID::GUILD
  170. )
  171. ){
  172. ?>
  173. <div class='skill'>
  174. <img class='skill_img' title='<?=$defense->get_monster()->get_leader_skill()->get_description()?>' src='<?=$defense->get_monster()->get_leader_skill()->get_image()?>'/>
  175. </div>
  176. <?php
  177. }
  178. $first = false;
  179. ?>
  180. <div class='monster_panel'>
  181. <?=HTML::unit_panel($defense)?>
  182. </div>
  183. <?php
  184. }
  185. ?>
  186. </div>
  187. <div id='placements_siege'>
  188. <h5>
  189. Siege Battle defenses:
  190. </h5>
  191. <?php
  192. foreach (get_context()->get_player()->get_siege_defense() as $formation){
  193. $first = true;
  194. foreach($formation as $defense){
  195. if (
  196. $first &&
  197. null != $defense->get_monster()->get_leader_skill() &&
  198. (
  199. $defense->get_monster()->get_leader_skill()->get_area() == EFFECT_AREA_ID::GENERAL ||
  200. $defense->get_monster()->get_leader_skill()->get_area() == EFFECT_AREA_ID::GUILD
  201. )
  202. ){
  203. ?>
  204. <div class='skill'>
  205. <img class='skill_img' title='<?=$defense->get_monster()->get_leader_skill()->get_description()?>' src='<?=$defense->get_monster()->get_leader_skill()->get_image()?>'/>
  206. </div>
  207. <?php
  208. }
  209. $first = false;
  210. ?>
  211. <div class='monster_panel'>
  212. <?=HTML::unit_panel($defense)?>
  213. </div>
  214. <?php
  215. }
  216. ?>
  217. <hr/>
  218. <?php
  219. }
  220. ?>
  221. </div>
  222. </div>
  223. <div id='building' class='profile_section'>
  224. <h4>
  225. Buildings
  226. </h4>
  227. <?php
  228. // Buildings
  229. $half = sizeof(get_context()->get_player()->get_buildings()) / 2;
  230. $i = 0;
  231. foreach (get_context()->get_player()->get_buildings() as $building){
  232. if ($i == $half){
  233. ?>
  234. <br class='desktop'/>
  235. <?php
  236. }
  237. ?>
  238. <?=HTML::building_panel($building)?>
  239. <?php
  240. $i ++;
  241. }
  242. ?>
  243. <br/>
  244. <?php
  245. // Decorations
  246. $half = sizeof(get_context()->get_player()->get_decorations()) / 2;
  247. $i = 0;
  248. foreach (get_context()->get_player()->get_decorations() as $decoration){
  249. if ($i == $half){
  250. ?>
  251. <br class='desktop'/>
  252. <?php
  253. }
  254. ?>
  255. <?=HTML::building_panel($decoration)?>
  256. <?php
  257. $i ++;
  258. }
  259. ?>
  260. </div>
  261. <div class='inventory profile_section' id='inventory'>
  262. <h4>
  263. Inventory
  264. </h4>
  265. <ul>
  266. <li>
  267. <img title='Energy' src='<?=URL::IMG["CURRENCY"]?>energy.png'/>
  268. <?=get_context()->get_player()->get_currencies()["energy"]?> / <?=get_context()->get_player()->get_currencies()["energy_max"]?>
  269. </li>
  270. <li>
  271. <img title='Arena Invitations' src='<?=URL::IMG["CURRENCY"]?>arenaenergy.png'/>
  272. <?=get_context()->get_player()->get_currencies()["arena_energy"]?> / 10
  273. </li>
  274. <li>
  275. <img title='Dimensional Energy' src='<?=URL::IMG["CURRENCY"]?>dimensionenergy.png'/>
  276. <?=get_context()->get_player()->get_currencies()["dimension_energy"]?> / 100
  277. </li>
  278. <li>
  279. <img title='Dimensional Crystal' src='<?=URL::IMG["CURRENCY"]?>darkportalenergy.png'/>
  280. <?=get_context()->get_player()->get_currencies()["darkportal_energy"]?> / 10
  281. </li>
  282. <li>
  283. <img title='Mana' src='<?=URL::IMG["CURRENCY"]?>mana.png'/>
  284. <?=get_context()->get_player()->get_currencies()["mana"]?>
  285. </li>
  286. <li>
  287. <img title='Crystal' src='<?=URL::IMG["CURRENCY"]?>crystal.png'/>
  288. <?=get_context()->get_player()->get_currencies()["crystal"]?>
  289. </li>
  290. <li>
  291. <img title='Social Points' src='<?=URL::IMG["CURRENCY"]?>socialpoint.png'/>
  292. <?=get_context()->get_player()->get_currencies()["social_point"]?>
  293. </li>
  294. <li>
  295. <img title='Honor Points' src='<?=URL::IMG["CURRENCY"]?>honor.png'/>
  296. <?=get_context()->get_player()->get_currencies()["honor_point"]?>
  297. </li>
  298. <li>
  299. <img title='Guild Points' src='<?=URL::IMG["CURRENCY"]?>guildpoint.png'/>
  300. <?=get_context()->get_player()->get_currencies()["guild_point"]?>
  301. </li>
  302. <li>
  303. <img title='Honor Medals' src='<?=URL::IMG["CURRENCY"]?>badge.png'/>
  304. <?=get_context()->get_player()->get_currencies()["honor_medal"]?>
  305. </li>
  306. <li>
  307. <img src='<?=URL::IMG["CURRENCY"]?>mark.png'/>
  308. <?=get_context()->get_player()->get_currencies()["honor_mark"]?>
  309. </li>
  310. <li>
  311. <img title='Ancient Coins' src='<?=URL::IMG["CURRENCY"]?>ancientcoin.png'/>
  312. <?=get_context()->get_player()->get_currencies()["event_coin"]?>
  313. </li>
  314. <li>
  315. <img title='Ancient Crystal' src='<?=URL::IMG["CURRENCY"]?>ancientstone.png'/>
  316. <?=get_context()->get_player()->get_currencies()["ancient_stone"]?>
  317. </li>
  318. <li>
  319. <img title='Shapeshifting Stones' src='<?=URL::IMG["CURRENCY"]?>costumestone.png'/>
  320. <?=get_context()->get_player()->get_currencies()["costume_point"]?>
  321. </li>
  322. </ul>
  323. <?php
  324. // Scrolls
  325. $half = sizeof(get_context()->get_player()->get_scrolls()) / 2;
  326. $i = 0;
  327. foreach (get_context()->get_player()->get_scrolls() as $item){
  328. if ($half > 6 && $i == $half){
  329. ?>
  330. <br class='desktop'/>
  331. <?php
  332. }
  333. ?>
  334. <?=HTML::item_panel($item)?>
  335. <?php
  336. $i ++;
  337. }
  338. ?>
  339. <br/>
  340. <?php
  341. // Rune craft materials
  342. $prev = 0;
  343. foreach (get_context()->get_player()->get_rune_craft_materials() as $item){
  344. ?>
  345. <?=HTML::item_panel($item)?>
  346. <?php
  347. $prev = $item->get_id();
  348. }
  349. ?>
  350. <br/>
  351. <?php
  352. // Other craft materials
  353. $prev = 0;
  354. foreach (get_context()->get_player()->get_craft_materials() as $item){
  355. if ($prev != 0 && $prev < 5000 && $item->get_id() > 5000){
  356. ?>
  357. <br class='desktop'/>
  358. <?php
  359. }
  360. ?>
  361. <?=HTML::item_panel($item)?>
  362. <?php
  363. $prev = $item->get_id();
  364. }
  365. ?>
  366. <br/>
  367. <?php
  368. // Essences
  369. $prev = "";
  370. $i = 0;
  371. foreach (get_context()->get_player()->get_essences() as $item){
  372. //if ($prev != "" && $prev != preg_split('/\s+/', $item->name)[2]){
  373. if ($i > 0 && $i % 6 == 0){
  374. ?>
  375. <br class='desktop'/>
  376. <?php
  377. }
  378. ?>
  379. <?=HTML::item_panel($item)?>
  380. <?php
  381. $prev = preg_split('/\s+/', $item->get_name())[2];
  382. $i ++;
  383. }
  384. ?>
  385. </div>
  386. </div> <!-- #panel_left -->
  387. <div class='panel' id='panel_right'>
  388. <div class='profile_section' id='records'>
  389. <h4>
  390. Records
  391. </h4>
  392. <div class='record'>
  393. <table id='rank_records'>
  394. <tr>
  395. <td class='label'>
  396. Arena
  397. </td>
  398. <td class='value rank'>
  399. <?=HTML::arena_rank_icon(get_context()->get_player()->get_top_rank_arena())?>
  400. </td>
  401. </tr>
  402. <tr>
  403. <td class='label'>
  404. World Arena
  405. </td>
  406. <td class='value rank'>
  407. <?=HTML::arena_rank_icon(get_context()->get_player()->get_top_rank_world_arena())?>
  408. </td>
  409. </tr>
  410. <tr>
  411. <td class='label'>
  412. Special League
  413. </td>
  414. <td class='value rank'>
  415. <?=HTML::arena_rank_icon(get_context()->get_player()->get_top_rank_special_league())?>
  416. </td>
  417. </tr>
  418. <tr>
  419. <td class='label'>
  420. Guild War
  421. </td>
  422. <td class='value rank'>
  423. <?=HTML::arena_rank_icon(get_context()->get_player()->get_top_rank_gw() - 10)?>
  424. </td>
  425. </tr>
  426. <tr>
  427. <td class='label'>
  428. Siege Battle
  429. </td>
  430. <td class='value rank'>
  431. <?=HTML::arena_rank_icon(get_context()->get_player()->get_top_rank_siege())?>
  432. </td>
  433. </tr>
  434. <tr>
  435. <td class='label'>
  436. World Boss
  437. </td>
  438. <td class='value wboss'>
  439. <!-- TODO Rank 12?? -->
  440. <?=WORLD_BOSS_RANK_ID::RANK[get_context()->get_player()->get_top_rank_wboss()]?>
  441. </td>
  442. </tr>
  443. <tr>
  444. <td class='label'>
  445. Trial of Ascension (N)
  446. </td>
  447. <td class='value toa'>
  448. <?=get_context()->get_player()->get_top_rank_toan()?>F
  449. </td>
  450. </tr>
  451. <tr>
  452. <td class='label'>
  453. Trial of Ascension (N)
  454. </td>
  455. <td class='value toa'>
  456. <?=get_context()->get_player()->get_top_rank_toah()?>F
  457. </td>
  458. </tr>
  459. </table>
  460. <table id='battle_records'>
  461. <?php
  462. foreach (get_context()->get_player()->get_records() as $record){
  463. ?>
  464. <tr>
  465. <td class='record_dungeon'>
  466. <img title='<?=$record->get_area()->get_name()?>' class='area' src='<?=$record->get_area()->get_image()?>'/>
  467. </td>
  468. <td class='record_info'>
  469. <span class='title'>
  470. <?php
  471. $title = "";
  472. switch ($record->get_area()->get_type()){
  473. case AREA_TYPE_ID::CAIROS_DUNGEON:
  474. $title = $record->get_area()->get_name() . " " . $record->get_stage() . "F";
  475. break;
  476. case AREA_TYPE_ID::RIFT_DUNGEON:
  477. $title = $record->get_area()->get_name();
  478. break;
  479. case AREA_TYPE_ID::RIFT_RAID:
  480. $title = $record->get_area()->get_name();
  481. }
  482. ?>
  483. <?=$title?>
  484. </span>
  485. <?php
  486. if ($record->get_area()->get_type() == AREA_TYPE_ID::RIFT_DUNGEON){
  487. ?>
  488. <span class='score'>
  489. <?=$record->get_score()?>
  490. </span>
  491. <span class='rank'>
  492. <?=$record->get_rank()?>
  493. </span>
  494. <?php
  495. }
  496. else{
  497. $s = floor($record->get_time() / 1000);
  498. $m = floor($s / 60);
  499. $s = floor($s % 60);
  500. $ms = ($record->get_time() - (1000 * 60 * $m) - (1000 * 60 * $s) / 100);
  501. $s = str_pad($s, 2, '0', STR_PAD_LEFT);
  502. $ms = str_pad($ms, 2, '0', STR_PAD_LEFT);
  503. ?>
  504. <span class='time'>
  505. <?=$m?>:<?=$s?><span class='ms'>.<?=$ms?></span>
  506. </span>
  507. <?php
  508. }
  509. ?>
  510. </td>
  511. <?php
  512. $class_frontline = "";
  513. if ($record->get_area()->get_type() == AREA_TYPE_ID::RIFT_DUNGEON || $record->get_area()->get_type() == AREA_TYPE_ID::RIFT_RAID){
  514. $class_frontline = "frontlines";
  515. }
  516. ?>
  517. <td class='record_party <?=$class_frontline?>'>
  518. <?php
  519. $prev_front = false;
  520. $front = "undefined";
  521. foreach ($record->get_party() as $party){
  522. $front = in_array($party->get_id(), $record->get_frontline());
  523. if ($front != "undefined" && $prev_front != $front){
  524. ?>
  525. <hr class='frontline'/>
  526. <?php
  527. }
  528. if ($party instanceof Monster){
  529. $disabled = "disabled";
  530. }
  531. else{
  532. $disabled = "";
  533. }
  534. if ($disabled == ""){
  535. ?>
  536. <a target='_blank' href='/player/<?=get_context()->get_player()->get_id()?>/units/<?=$party->get_id()?>'>
  537. <?php
  538. }
  539. ?>
  540. <div class='monster_panel <?=$disabled?>'>
  541. <?=HTML::unit_panel($party)?>
  542. <?php
  543. if ($party->get_id() == $record->get_leader()){
  544. ?>
  545. <img alt='Leader' class='leader' src='<?=URL::IMG["ICON"]?>leader.png'/>
  546. <?php
  547. }
  548. ?>
  549. </div>
  550. <?php
  551. if ($disabled == ""){
  552. ?>
  553. </a>
  554. <?php
  555. }
  556. $prev_front = $front;
  557. }
  558. ?>
  559. </td>
  560. </tr>
  561. <?php
  562. }
  563. ?>
  564. </table>
  565. </div>
  566. </div>
  567. </div> <!-- #panel_right -->
  568. </article>
  569. </section>
  570. </main>
  571. <?php
  572. include __DIR__ . "/inc/footer.php";
  573. ?>
  574. </body>
  575. </html>