home.php 30 KB

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