Преглед изворни кода

Home (profile) page, guild page, code simplifications.

Iñigo Valentin пре 7 година
родитељ
комит
8b000fe98a
46 измењених фајлова са 1671 додато и 1345 уклоњено
  1. 40 0
      application/Constant.php
  2. 5 0
      application/Controller.php
  3. 120 0
      application/entity/Guild.php
  4. 115 0
      application/entity/Guild_Member.php
  5. 63 0
      application/entity/K_Guild_Skill.php
  6. 89 0
      application/entity/K_Guild_Skill_Group.php
  7. 19 0
      application/entity/K_Unit.php
  8. 3 4
      application/entity/Rune.php
  9. 18 4
      application/entity/Unit.php
  10. 255 0
      application/helper/html.php
  11. 6 133
      application/helper/text.php
  12. 62 0
      application/page/Guild_Page.php
  13. 102 1
      application/page/Home_Page.php
  14. 20 7
      application/page/Report_Skillup_Page.php
  15. 287 0
      application/view/guild.php
  16. 111 0
      application/view/home.php
  17. 3 0
      application/view/inc/header.php
  18. 6 274
      application/view/monster.php
  19. 15 61
      application/view/monsters.php
  20. 64 843
      application/view/report_runeupgrade.php
  21. 9 9
      application/view/report_skillup.php
  22. 44 0
      data.sql
  23. 34 3
      install_base.py
  24. 60 6
      install_user.py
  25. 115 0
      public/css/guild.css
  26. 6 0
      public/css/home.css
  27. BIN
      public/img/layout/currency/darkportalenergy.png
  28. BIN
      public/img/layout/icon/leader.png
  29. BIN
      public/img/layout/icon/lock.png
  30. BIN
      public/img/layout/icon/nok.png
  31. BIN
      public/img/layout/icon/ok.png
  32. BIN
      public/img/layout/icon/rank_beg.png
  33. BIN
      public/img/layout/icon/rank_cha1.png
  34. BIN
      public/img/layout/icon/rank_cha2.png
  35. BIN
      public/img/layout/icon/rank_cha3.png
  36. BIN
      public/img/layout/icon/rank_con1.png
  37. BIN
      public/img/layout/icon/rank_con2.png
  38. BIN
      public/img/layout/icon/rank_con3.png
  39. BIN
      public/img/layout/icon/rank_fig1.png
  40. BIN
      public/img/layout/icon/rank_fig2.png
  41. BIN
      public/img/layout/icon/rank_fig3.png
  42. BIN
      public/img/layout/icon/rank_gua1.png
  43. BIN
      public/img/layout/icon/rank_gua2.png
  44. BIN
      public/img/layout/icon/rank_gua3.png
  45. BIN
      public/img/layout/icon/rank_leg.png
  46. BIN
      public/img/layout/icon/viceleader.png

+ 40 - 0
application/Constant.php

@@ -234,4 +234,44 @@
         "IMMEMORIAL_GRINDSTONE" => 4,
         "IMMEMORIAL_GRINDSTONE" => 4,
     ];
     ];
 
 
+    $GUILD_MEMBER_GRADE = [
+        "LEADER" => 1,
+        "VICELEADER" => 3,
+        "NORMAL" => 2
+    ];
+
+    $ARENA_RANKING_POINTS = [
+        "BEGINER" => 0,
+        "CHALLENGER_1" => 900,
+        "CHALLENGER_2" => 1000,
+        "CHALLENGER_3" => 1100,
+        "FIGHTER_1" => 1200,
+        "FIGHTER_2" => 1300,
+        "FIGHTER_3" => 1400,
+        "CONQUEROR_1" => 1500,
+        "CONQUEROR_2" => 1600,
+        "CONQUEROR_3" => 1700,
+        "GUARDIAN_1" => 1700,
+        "GUARDIAN_2" => 1700,
+        "GUARDIAN_3" => 1700,
+        "LEGEND" => 1700,
+    ];
+
+    $ARENA_RANKING_RANK = [
+        "BEGINER" => null,
+        "CHALLENGER_1" => null,
+        "CHALLENGER_2" => null,
+        "CHALLENGER_3" => null,
+        "FIGHTER_1" => null,
+        "FIGHTER_2" => null,
+        "FIGHTER_3" => null,
+        "CONQUEROR_1" => 10000,
+        "CONQUEROR_2" => 3000,
+        "CONQUEROR_3" => 1000,
+        "GUARDIAN_1" => 300,
+        "GUARDIAN_2" => 100,
+        "GUARDIAN_3" => 30,
+        "LEGEND" => 1,
+    ];
+
 ?>
 ?>

+ 5 - 0
application/Controller.php

@@ -4,6 +4,7 @@
     require_once($path["helper"] . "db.php");
     require_once($path["helper"] . "db.php");
     require_once($path["helper"] . "text.php");
     require_once($path["helper"] . "text.php");
     require_once($path["helper"] . "net.php");
     require_once($path["helper"] . "net.php");
+    require_once($path["helper"] . "html.php");
     require_once(__DIR__ . "/Constant.php");
     require_once(__DIR__ . "/Constant.php");
 
 
     /**
     /**
@@ -51,6 +52,10 @@
                     require_once($path["page"] . "Runes_Page.php");
                     require_once($path["page"] . "Runes_Page.php");
                     $page = new Runes_Page($db);
                     $page = new Runes_Page($db);
                 }
                 }
+                elseif (strtoupper($pars[0]) == "GUILD"){
+                    require_once($path["page"] . "Guild_Page.php");
+                    $page = new Guild_Page($db);
+                }
                 elseif (strtoupper($pars[0]) == "MONSTERS"){
                 elseif (strtoupper($pars[0]) == "MONSTERS"){
                     if (count($pars) == 1){
                     if (count($pars) == 1){
                         require_once($path["page"] . "Monsters_Page.php");
                         require_once($path["page"] . "Monsters_Page.php");

+ 120 - 0
application/entity/Guild.php

@@ -0,0 +1,120 @@
+<?php
+
+    require_once($path["entity"] . "Entity.php");
+    require_once($path["entity"] . "Guild_Member.php");
+
+
+    /**
+     * Guild.
+     *
+     * Represents an object from the table 'guild'.
+     */
+    class Guild extends Entity{
+
+        /**
+         * Guild identifier.
+         */
+        public $id;
+
+        /**
+         * Guild name.
+         */
+        public $name;
+
+        /**
+         * Guild level.
+         */
+        public $level;
+
+        /**
+         * Guild total experience.
+         */
+        public $experience;
+
+        /**
+         * Indicates if the guild is ecruiting.
+         */
+        public $recruiting;
+
+        /**
+         * Number of members.
+         */
+        public $total_members;
+
+        /**
+         * Leader {@see Guild_Member}.
+         */
+        public $leader;
+
+        /**
+         * Guild comment.
+         */
+        public $comment;
+
+        /**
+         * Guild notice.
+         */
+        public $notice;
+
+        /**
+         * List of {@see Guild_Member}s.
+         */
+        public $members = [];
+
+        /**
+         * Constructor.
+         *
+         * Searches the database and retrieves the information about the
+         * guild, populating it and it's items.
+         *
+         * @param SQLite3 $db Connection to the database.
+         * @param int $id Guild identifier.
+         */
+        public function __construct($db, $id){
+            global $path;
+            parent::__construct($db);
+            $s =
+              "SELECT " .
+              "  id, " .
+              "  name, " .
+              "  name, " .
+              "  level, " .
+              "  experience, " .
+              "  recruiting, " .
+              "  members, " .
+              "  leader, " .
+              "  comment, " .
+              "  notice " .
+              "FROM guild " .
+              "WHERE id = $id; ";
+            $q = $this->db->query($s);
+            $r = $q->fetchArray(SQLITE3_ASSOC);
+            if ($r){
+                $this->id = $r["id"];
+                $this->name = $r["name"];
+                $this->level = $r["level"];
+                $this->experience = $r["experience"];
+                $this->recruiting = $r["recruiting"];
+                $this->total_members = $r["members"];
+                $this->leader = $r["leader"];
+                $this->comment = $r["comment"];
+                $this->notice = $r["notice"];
+            }
+            $s =
+              "SELECT id " .
+              "FROM guild_member " .
+              "WHERE guild = $this->id " .
+              "ORDER BY " .
+              "  grade = 1 DESC, " .
+              "  grade = 3 DESC, " .
+              "  grade = 2 DESC, " .
+              "  arena_score DESC; ";
+            $q = $this->db->query($s);
+            while ($r = $q->fetchArray(SQLITE3_ASSOC)){
+                array_push($this->members, new Guild_Member($db, $r["id"]));
+            }
+        }
+
+
+    }
+?>

+ 115 - 0
application/entity/Guild_Member.php

@@ -0,0 +1,115 @@
+<?php
+
+    require_once($path["entity"] . "Entity.php");
+
+
+    /**
+     * Guild.
+     *
+     * Represents an object from the table 'guild'.
+     */
+    class Guild_Member extends Entity{
+
+        /**
+         * Member identifier.
+         */
+        public $id;
+
+        /**
+         * Guild id.
+         */
+        public $guild;
+
+        /**
+         * Member name.
+         */
+        public $name;
+
+        /**
+         * Member level.
+         */
+        public $level;
+
+        /**
+         * Member grade.
+         */
+        public $grade;
+
+        /**
+         * Memeber rating.
+         */
+        public $rating;
+
+        /**
+         * Memebr arena score.
+         */
+        public $arena_score;
+
+        /**
+         * Timestam the user joined the guild.
+         */
+        public $joined;
+
+        /**
+         * Timestamp the user last log on.
+         */
+        public $last_login;
+
+        /**
+         * Indicates if the member is included in guild wars.
+         */
+        public $in_war;
+
+        /**
+         * Indicates if the member has set guild wars defenses.
+         */
+        public $has_defense;
+
+
+        /**
+         * Constructor.
+         *
+         * Searches the database and retrieves the information about the
+         * guild, populating it and it's items.
+         *
+         * @param SQLite3 $db Connection to the database.
+         * @param int $id Guild identifier.
+         */
+        public function __construct($db, $id){
+            global $path;
+            parent::__construct($db);
+            $s =
+              "SELECT " .
+              "  id, " .
+              "  guild, " .
+              "  name, " .
+              "  level, " .
+              "  grade, " .
+              "  rating, " .
+              "  arena_score, " .
+              "  joined, " .
+              "  last_login, " .
+              "  in_war, " .
+              "  has_defense " .
+              "FROM guild_member " .
+              "WHERE id = $id; ";
+            $q = $this->db->query($s);
+            $r = $q->fetchArray(SQLITE3_ASSOC);
+            if ($r){
+                $this->id = $r["id"];
+                $this->guild = $r["guild"];
+                $this->name = $r["name"];
+                $this->level = $r["level"];
+                $this->grade = $r["grade"];
+                $this->rating = $r["rating"];
+                $this->arena_score = $r["arena_score"];
+                $this->joined = $r["joined"];
+                $this->last_login = $r["last_login"];
+                $this->in_war = $r["in_war"];
+                $this->has_defense = $r["has_defense"];
+            }
+        }
+
+
+    }
+?>

+ 63 - 0
application/entity/K_Guild_Skill.php

@@ -0,0 +1,63 @@
+<?php
+
+    require_once($path["entity"] . "Entity.php");
+
+    /**
+     * Guild skill.
+     *
+     * Represents an object from the table 'k_guild_skill'.
+     */
+    class K_Guild_Skill extends Entity{
+
+        /**
+         * Skill identifier.
+         */
+        public $id;
+
+        /**
+         * Skill group (id).
+         */
+        public $group;
+
+        /**
+         * Level at which the skill becames available.
+         */
+        public $level;
+
+        /**
+         * Skill description.
+         */
+        public $effect;
+
+        /**
+         * Constructor.
+         *
+         * Searches the database and retrieves the information about the
+         * skill, populating it and it's items.
+         *
+         * @param SQLite3 $db Connection to the database.
+         * @param int $id Skill identifier.
+         */
+        public function __construct($db, $id){
+            global $path;
+            parent::__construct($db);
+            $s =
+              "SELECT " .
+              "  id, " .
+              "  skill_group, " .
+              "  level, " .
+              "  effect " .
+              "FROM k_guild_skill " .
+              "WHERE id = $id; ";
+            $q = $this->db->query($s);
+            $r = $q->fetchArray(SQLITE3_ASSOC);
+            if ($r){
+                $this->id = $r["id"];
+                $this->group = $r["skill_group"];
+                $this->level = $r["level"];
+                $this->effect = $r["effect"];
+            }
+        }
+
+    }
+?>

+ 89 - 0
application/entity/K_Guild_Skill_Group.php

@@ -0,0 +1,89 @@
+<?php
+
+    require_once($path["entity"] . "Entity.php");
+    require_once($path["entity"] . "K_Guild_Skill.php");
+
+    /**
+     * Guild skill group.
+     *
+     * Represents an object from the table 'k_guild_skill_group'.
+     */
+    class K_Guild_Skill_Group extends Entity{
+
+        /**
+         * Group identifier.
+         */
+        public $id;
+
+        /**
+         * Group name.
+         */
+        public $name;
+
+        /**
+         * Group description.
+         */
+        public $description;
+        
+        /**
+         * List of {@see K_Guild_Skill}s in the group.
+         */
+        public $skills = [];
+
+        /**
+         * Constructor.
+         *
+         * Searches the database and retrieves the information about the
+         * skill group, populating it and it's items.
+         *
+         * @param SQLite3 $db Connection to the database.
+         * @param int $id Skill group identifier.
+         */
+        public function __construct($db, $id){
+            global $path;
+            parent::__construct($db);
+            $s =
+              "SELECT " .
+              "  id, " .
+              "  name, " .
+              "  description " .
+              "FROM k_guild_skill_group " .
+              "WHERE id = $id; ";
+            $q = $this->db->query($s);
+            $r = $q->fetchArray(SQLITE3_ASSOC);
+            if ($r){
+                $this->id = $r["id"];
+                $this->name = $r["name"];
+                $this->description = $r["description"];
+            }
+            $s =
+              "SELECT id " .
+              "FROM k_guild_skill " .
+              "WHERE skill_group = $this->id; ";
+            $q = $this->db->query($s);
+            while ($r = $q->fetchArray(SQLITE3_ASSOC)){
+                array_push($this->skills, new K_Guild_Skill($db, $r["id"]));
+            }
+        }
+
+        /**
+         * Gets the pathto the monster image. The image must be in the
+         * img/content/monster/ directory, and its name must be the monster id,
+         * padded with '0' to 1 digits, and the extension must be '.png'.
+         *
+         * @return path to the image, or a path to a fixed unknown image if it
+         *         doesn't exist.
+         */
+        public function get_image(){
+            global $base_dir;
+            global $path;
+            if (file_exists($base_dir . "img/content/skill_guild/" . str_pad($this->id, 1, '0', STR_PAD_LEFT) . ".png")){
+                return $path["img"]["content"] . "skill_guild/" . str_pad($this->id, 1, '0', STR_PAD_LEFT) . ".png";
+            }
+            else{
+                return $path["img"]["layout"] . "unknown.png";
+            }
+        }
+
+    }
+?>

+ 19 - 0
application/entity/K_Unit.php

@@ -198,6 +198,13 @@
          */
          */
         public $sources = [];
         public $sources = [];
 
 
+        /**
+         * Unit title.
+         * If awakened, it will be the awakened from name.
+         * If unawakened, it will be <element> <name>.
+         */
+        public $title;
+
         /**
         /**
          * Constructor.
          * Constructor.
          *
          *
@@ -324,6 +331,18 @@
                 $this->load_skills();
                 $this->load_skills();
                 $this->load_sources();
                 $this->load_sources();
             }
             }
+            if ($this->awakens_from == "" && $this->awakens_to == ""){
+                // No to, no from, silver monster.
+                $this->title = $this->element . " " . $this->name;
+            }
+            elseif ($this->awakens_from =! "" && $this->awakens_to == ""){
+                // Already awakened
+                $this->title = $this->name;
+            }
+            elseif ($this->awakens_to =! ""){
+                // Awakeable.
+                $this->title = $this->element . " " . $this->name;
+            }
         }
         }
 
 
         /**
         /**

+ 3 - 4
application/entity/Rune.php

@@ -40,11 +40,11 @@
          * Rune stars.
          * Rune stars.
          */
          */
         public $stars;
         public $stars;
-        
+
         /**
         /**
-         * Indicates if the rune is legendary.
+         * Indicates if the rune is ancient.
          */
          */
-        public $legendary;
+        public $ancient;
 
 
         /**
         /**
          * Level of the rune.
          * Level of the rune.
@@ -338,7 +338,6 @@
          * @return string Quality (Uppercase)
          * @return string Quality (Uppercase)
          */
          */
         private function quality_name($q){
         private function quality_name($q){
-        error_log("QQQ ". $q);
             global $QUALITY;
             global $QUALITY;
             switch ($q){
             switch ($q){
                 case $QUALITY["NORMAL"]:
                 case $QUALITY["NORMAL"]:

+ 18 - 4
application/entity/Unit.php

@@ -116,7 +116,7 @@
          * Datetime the unit was obtained.
          * Datetime the unit was obtained.
          */
          */
         public $create_time;
         public $create_time;
-        
+
         /**
         /**
          * Indicates if the unit is a Homunculus
          * Indicates if the unit is a Homunculus
          */
          */
@@ -126,7 +126,7 @@
          * Indicates the Homunculus name
          * Indicates the Homunculus name
          */
          */
         public $homunculus_name;
         public $homunculus_name;
-        
+
         /**
         /**
          * Indicates if the monster is locked.
          * Indicates if the monster is locked.
          */
          */
@@ -181,7 +181,7 @@
          * Equiped {@see Rune}s
          * Equiped {@see Rune}s
          */
          */
         public $rune = [];
         public $rune = [];
-        
+
         /**
         /**
          * Array with the levels of the skills.
          * Array with the levels of the skills.
          */
          */
@@ -197,6 +197,14 @@
          */
          */
         public $experience_level_up = 0;
         public $experience_level_up = 0;
 
 
+        /**
+         * Unit title.
+         * If Homunculus,it will be it's name.
+         * If awakened, it will be the awakened from name.
+         * If unawakened, it will be <element> <name>.
+         */
+        public $title;
+
 
 
         /**
         /**
          * Constructor.
          * Constructor.
@@ -276,7 +284,7 @@
             #$this->notes = $r["notes"];
             #$this->notes = $r["notes"];
             if ($complete){
             if ($complete){
                 $this->load_runes();
                 $this->load_runes();
-                $s = 
+                $s =
                   "SELECT level " .
                   "SELECT level " .
                   "FROM " .
                   "FROM " .
                   "  unit_skill, " .
                   "  unit_skill, " .
@@ -300,6 +308,12 @@
                 $this->experience_level = $r["exp"];
                 $this->experience_level = $r["exp"];
                 $this->experience_level_up = $r["exp"] - $this->exp_gained;
                 $this->experience_level_up = $r["exp"] - $this->exp_gained;
             }
             }
+            if ($this->homunculus){
+                $this->title = $this->homunculus_name;
+            }
+            else{
+                $this->title = $this->unit->title;
+            }
         }
         }
 
 
         /**
         /**

+ 255 - 0
application/helper/html.php

@@ -0,0 +1,255 @@
+<?php
+
+    /**
+     * Generates a monster panel.
+     * 
+     * @param unit Unit/K_Unit Entity to get the info from.
+     * @return string HTML content for a monster panel. Empty on error.
+     */
+    function html_unit_panel($unit) {
+        global $path;
+        if ($unit instanceof Unit){
+            $k = $unit->unit;
+            $stars = $unit->stars;
+            $level = true;
+        }
+        elseif ($unit instanceof K_Unit){
+            $k = $unit;
+            $stars = $unit->base_stars;
+            $level = $false;
+        }
+        else{
+            return "";
+        }
+        $html = "";
+        if ($k->awakens_from == "" && $k->awakens_to == ""){
+            // No to, no from, silver monster.
+            $star_class ="star_silver";
+        }
+        elseif ($k->awakens_from =! "" && $unit->unit->awakens_to == ""){
+            // Already awakened
+            if ($k->base_stars - $k->natural_stars == 1){
+                // Normal awaken.
+                $star_class ="star_purple";
+            }
+            else{
+                // Second awaken.
+                $star_class ="star_red";
+            }
+        }
+        elseif ($k->awakens_to =! ""){
+            // Awakeable.
+            $star_class ="star_gold";
+        }
+        $html .= "<span class='stars'>\n";
+        for ($i = 0; $i < $stars; $i ++){
+            $html .= "<img class='star $star_class' src='" . $path["img"]["layout"] . "icon/star.png'/>\n";
+        }
+        $html .= "</span>\n";
+        $html .= "<img title='" . $unit->title . "' class='monster border_" . $k->element_name . "' src='" . $k->get_image() . "'/>\n";
+        if ($level){
+            $html .= "<span class='level'>\n";
+            $html .= $unit->level . "\n";
+            $html .= "</span>\n";
+        }
+        return $html;
+    }
+
+    /**
+     * Generates a rune panel.
+     * 
+     * @param Rune rune Entity to get the info from.
+     * @param Unit unit Optional. The unit the rune is assigned to.
+     * @return string HTML content for a rune panel. Empty on error.
+     */
+    function html_rune_panel($rune, $unit = null) {
+        global $path;
+        if (!($rune instanceof Rune)){
+            return "";
+        }
+        $html = "";
+        $html .= "<div class='rune_panel rune_slot_" . $rune->slot . " rune_level_" . $rune->level . " rune_quality_" . strtolower($rune->quality_name) . " rune_original_quality_" . strtolower($rune->original_quality_name) . " rune_ancient_" . $rune->ancient . "'>\n";
+        $html .= "<img class='rune_base' src='" . $path["img"]["layout"] . "rune/base.png'/>\n";
+        $html .= "<img class='rune_icon' src='" . $rune->type->get_image() . "'/>\n";
+        $html .= "<span class='rune_stars'>\n";
+        for ($i = 0; $i < $rune->stars; $i ++){
+            $html .= "<img class='star' src='" . $path["img"]["layout"] . "icon/star.png'/>\n";
+        }
+        $html .= "</span>\n";
+        $html .= "<span class='rune_level'>\n";
+        $html .= $rune->level . "\n";
+        $html .= "</span>\n";
+        $html .= "</div>\n";
+        if ($unit instanceof Unit){
+            $html .= "<div class='assigned'>\n";
+            $html .= "<a target='blank' href='/monsters/<?=$unit->id?>'>\n";
+            $html .= "<img title='<?=$unit->title?>' class='monster_image border_<?=$unit->unit->element_name?>' src='<?=$unit->unit->get_image()?>'/>\n";
+            $html .= "</a>\n";
+            $html .= "</div>\n";
+        }
+        return $html;
+    }
+
+    /**
+     * Generates a rune table.
+     * 
+     * @param Rune rune Entity to get the info from.
+     * @param Unit unit Optional. The unit the rune is assigned to.
+     * @return string HTML content for a rune table. Empty on error.
+     */
+    function html_rune_table($rune, $unit = null) {
+        global $path;
+        if (!($rune instanceof Rune)){
+            return "";
+        }
+        $html = "";
+        $html .= "<table class='rune'>\n";
+        $html .= "<tr>\n";
+        $html .= "<td class='icon'>\n";
+        $html .= html_rune_panel($rune, $unit) . "\n";
+        $html .= "</td>\n";
+        $html .= "<td class='stats'>\n";
+        $html .= "<table>\n";
+        // Main stat
+        $html .= "<tr class='main_stat'>\n";
+        $html .= "<td class='stat'>\n";
+        if (in_array($rune->main_stat_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
+            $stat_name = str_replace("%", "", $rune->main_stat_name);
+            $stat_value = "+ " . $rune->main_stat_value . "%";
+        }
+        else{
+            $stat_name = $rune->main_stat_name;
+            $stat_value = "+ " . $rune->main_stat_value;
+        }
+        $html .= $stat_name . "\n";
+        $html .= "</td>\n";
+        $html .= "<td class='value'>\n";
+        $html .= $stat_value . "\n";
+        $html .= "<td>\n";
+        $html .= "</tr>\n";
+        // Innate stat
+        $html .= "<tr class='innate_stat'>\n";
+        $html .= "<td class='stat'>\n";
+        if (strlen($rune->innate_stat) == 0){
+            $stat_name = "&nbsp;";
+            $stat_value = "";
+        }
+        elseif (in_array($rune->innate_stat_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
+            $stat_name = str_replace("%", "", $rune->innate_stat_name);
+            $stat_value = "+ " . $rune->innate_stat_value . "%";
+        }
+        else{
+            $stat_name = $rune->innate_stat_name;
+            $stat_value = "+ " . $rune->innate_stat_value;
+        }
+        $html .= $stat_name . "\n";
+        $html .= "</td>\n";
+        $html .= "<td class='value'>\n";
+        $html .= $stat_value . "\n";
+        $html .= "<td>\n";
+        $html .= "</tr>\n";
+        $substats = array($rune->substat_1, $rune->substat_2, $rune->substat_3, $rune->substat_4);
+        $substats_name = array($rune->substat_1_name, $rune->substat_2_name, $rune->substat_3_name, $rune->substat_4_name);
+        $substats_value = array($rune->substat_1_value, $rune->substat_2_value, $rune->substat_3_value, $rune->substat_4_value);
+        $substats_grind = array($rune->substat_1_grind, $rune->substat_2_grind, $rune->substat_3_grind, $rune->substat_4_grind);
+        $substats_enchant = array($rune->substat_1_enchant, $rune->substat_2_enchant, $rune->substat_3_enchant, $rune->substat_4_enchant);
+        for ($i = 0; $i < 4; $i ++){
+            if (strlen($substats_name[$i]) == 0){
+                $stat_name = "&nbsp;";
+                $stat_value = "";
+            }
+            elseif (in_array($substats_name[$i], array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
+                $stat_name = str_replace("%", "", $substats_name[$i]);
+                $stat_value = "+ " . $substats_value[$i] . "%";
+            }
+            else{
+                $stat_name = $substats_name[$i];
+                $stat_value = "+ " . $substats_value[$i];
+            }
+            $grind = "";
+            if ($substats_grind[$i] > 0){
+                $grind = "+" . $substats_grind[$i];
+                if (in_array($substats_name[$i], array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
+                    $grind = $grind . "%";
+                }
+            }
+            $html .= "<tr class=substat>\n";
+            $html .= "<td class='stat'>\n";
+            $html .= $stat_name . "\n";
+            $html .= "</td>\n";
+            $html .= "<td class='value'>\n";
+            $html .= $stat_value . "\n";
+            $html .= "<span class='grind grind_$grind'>\n";
+            $html .= $grind . "\n";
+            $html .= "</span>\n";
+            if ($substats_enchant[$i] == 1){
+                $html .= "<img title='Enchanted' src='" . $path["img"]["layout"] . "rune/enchanted.png'/>\n";
+            }
+            $html .= "</td>\n";
+            $html .= "</tr>\n";
+        }
+        $html .= "</table>\n";
+        $html .= "</td>\n";
+        // Details
+        $html .= "<td class='details'>\n";
+        $html .= "<table class='table_details'>\n";
+        $html .= "<tr>\n";
+        $html .= "<td class='title'>\n";
+        $html .= "Quality:\n";
+        $html .= "</td>\n";
+        $html .= "<td class='value'>\n";
+        $html .= "<span class='quality quality_" . strtolower($rune->quality_name) . "'>\n";
+        $html .= $rune->quality_name . "\n";
+        $html .= "</span>\n";
+        $html .= "</td>\n";
+        $html .= "</tr>\n";
+        $html .= "<tr>\n";
+        $html .= "<td class='title'>\n";
+        $html .= "Origina q.:\n";
+        $html .= "</td>\n";
+        $html .= "<td class='value'>\n";
+        $html .= "<span class='quality quality_" . strtolower($rune->original_quality_name) . "'>\n";
+        $html .= $rune->original_quality_name . "\n";
+        $html .= "</span>\n";
+        $html .= "</td>\n";
+        $html .= "</tr>\n";
+        $html .= "<tr>\n";
+        $html .= "<td class='title'>\n";
+        $html .= "Value:\n";
+        $html .= "</td>\n";
+        $html .= "<td class='value'>\n";
+        $html .= number_format($rune->value, 0, ".", ",") . "\n";
+        $html .= "</td>\n";
+        $html .= "</tr>\n";
+        $html .= "<tr>\n";
+        $html .= "<td class='title'>\n";
+        $html .= "Efficiency:\n";
+        $html .= "</td>\n";
+        $html .= "<td class='value'>\n";
+        $html .= number_format($rune->efficiency, 2, ".", ",") . "\n";
+        $html .= "</td>\n";
+        $html .= "</tr>\n";
+        $html .= "<tr>\n";
+        $html .= "<td class='title'>\n";
+        $html .= "Max. eff.:\n";
+        $html .= "</td>\n";
+        $html .= "<td class='value'>\n";
+        $html .= number_format($rune->max_efficiency, 2, ".", ",") . "\n";
+        $html .= "</td>\n";
+        $html .= "</tr>\n";
+        $html .= "<tr>\n";
+        $html .= "<td class='title'>\n";
+        $html .= "Reached. eff.:\n";
+        $html .= "</td>\n";
+        $html .= "<td class='value'>\n";
+        $html .= number_format($rune->efficiency * 100 / $rune->max_efficiency, 2, ".", ",") . "\n";
+        $html .= "</td>\n";
+        $html .= "</tr>\n";
+        $html .= "</table>\n";
+        $html .= "</td>\n";
+        $html .= "</tr>\n";
+        $html .= "</table>\n";
+        return $html;
+    }
+
+?>

+ 6 - 133
application/helper/text.php

@@ -1,93 +1,11 @@
 <?php
 <?php
 
 
 
 
-    /**
-     * Selects the language the page will be displayed on.
-     * 
-     * First, it tries to read the language cookie in the client. If none is
-     * set, get the browser language preference list. If none is provided or
-     * they are not supported, it will use the default language.
-     * 
-     * @param MySQL_connection $db Connection to the database.
-     * @return string Lowercase, two-letter language code.
-     */
-    function select_language($db){
-
-        // Get available languages from db
-        $available_languages = array();
-        $q_lang = mysqli_query($db, "SELECT code FROM lang WHERE active = 1;");
-        while ($r_lang = mysqli_fetch_array($q_lang)){
-            array_push($available_languages, $r_lang["code"]);
-        }
-
-        // Is there a language cookie installed on the client?.
-        header("Cache-control: private");
-        if (isSet($_COOKIE["lang"])){
-            $lang = $_COOKIE["lang"];
-            if (in_array($lang, $available_languages)){
-                header("Location: " . get_protocol() . $_SERVER["HTTP_HOST"] . "/" . $lang . $_SERVER["REQUEST_URI"]);
-                return $lang;
-            }
-        }
-
-        // If no cookie, select from client browser preferences.
-        $lang = prefered_language($available_languages, $_SERVER["HTTP_ACCEPT_LANGUAGE"]);
-        if (in_array($lang, $available_languages)){
-            header("Location: " . get_protocol() . $_SERVER["HTTP_HOST"] . "/" . $lang . $_SERVER["REQUEST_URI"]);
-            return $lang;
-        }
-
-        // If no method was succesfull, default language
-        $lang = $available_languages[0];
-        header("Location: " . get_protocol() . $_SERVER["HTTP_HOST"] . "/" . $lang . $_SERVER["REQUEST_URI"]);
-        return $lang;
-    }
-
-
-    /**
-     * Parses the language prefrences of the client broser, comparing them to
-     * the languages offered by the site and selects the prefered one among
-     * the ones supported.
-     * 
-     * @param string[] available_languages List of lowercase, two-letter
-     *                                      language codes allowed by the site.
-     * @param string http_accept_language Raw header with info about client
-     *                                    language preferences.
-     * @return string Lowercase, two-letter code of the prefered available
-     *                language.
-     */
-    function prefered_language(array $available_languages, $http_accept_language) {
-
-        $available_languages = array_flip($available_languages);
-
-        $langs;
-        preg_match_all("~([\w-]+)(?:[^,\d]+([\d.]+))?~", strtolower($http_accept_language), $matches, PREG_SET_ORDER);
-        foreach($matches as $match) {
-
-            list($a, $b) = explode("-", $match[1]) + array("", "");
-            $value = isset($match[2]) ? (float) $match[2] : 1.0;
-
-            if(isset($available_languages[$match[1]])) {
-                $langs[$match[1]] = $value;
-                continue;
-            }
-
-            if(isset($available_languages[$a])) {
-                $langs[$a] = $value - 0.1;
-            }
-
-        }
-        arsort($langs);
-        return $langs[0];
-    }
-
-
     /**
     /**
      * Tturns a date string into a human readable string on the specified
      * Tturns a date string into a human readable string on the specified
      * language. Only works for spanish, basque and english.
      * language. Only works for spanish, basque and english.
      * 
      * 
      * @param string $str_date Date string ('yyyy-mm-dd' or 'yyyy-mm-dd HH:MM:SS')
      * @param string $str_date Date string ('yyyy-mm-dd' or 'yyyy-mm-dd HH:MM:SS')
-     * @param string $lang Language code (es, en, eu).
      * @param string $time Append the time at the end.
      * @param string $time Append the time at the end.
      * @return string Formatted date string.
      * @return string Formatted date string.
      */
      */
@@ -101,61 +19,17 @@
         $wday --;
         $wday --;
         $hour = date("H", $date);
         $hour = date("H", $date);
         $minute = date("i", $date);
         $minute = date("i", $date);
-        switch ($lang){
-            case "en":
-                $week = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
-                $months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
-                if ($time){
-                    $str = "$week[$wday], $months[$month] $day, $year at $hour:$minute";
-                }
-                else{
-                    $str = "$week[$wday], $months[$month] $day, $year";
-                }
-                break;
-            case "eu":
-                $week = ["astelehena", "asteartea", "asteazkena", "osteguna", "ostirala", "larumbata", "igandea"];
-                $months = ["urtarrilaren", "otsailaren", "martxoaren", "apirilaren", "maiatzaren", "ekainaren", "uztailaren", "abuztuaren", "irailaren", "urriaren", "azaroaren", "abenduaren"];
-                if ($time){
-                    $str = $year . "ko $months[$month] $day" . "an, $week[$wday], $hour:$minute";
-                }
-                else{
-                    $str = $year . "ko $months[$month] $day" . "an, $week[$wday]";
-                }
-                break;
-            default:
-                $week = ["Lunes", "Martes", "Mi&eacute;rcoles", "Jueves", "Viernes", "S&aacute;bado", "Domingo"];
-                $months = ["enero", " febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"];
-                if ($time){
-                    $str = "$week[$wday] $day de $months[$month] de $year a las $hour:$minute";
-                }
-                else{
-                    $str = "$week[$wday] $day de $months[$month] de $year";
-                }
-        }
-        return $str;
-    }
-
-
-    /**
-     * Retrieves a text fragment from the database.
-     * 
-     * @param Page|Entity $model An initialized data model.
-     * @param string $id Text identifier.
-     * @returns string The text.
-     */
-    function text($model, $id){
-        global $path;
-        $q = mysqli_query($model->db, "SELECT text, file FROM text WHERE id = '$id' AND lang = '" . $model->lang . "';");
-        $r = mysqli_fetch_array($q);
-        if (strlen($r["file"]) > 0){
-            return file_get_contents($path["string"] . $r["file"]);
+        $week = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
+        $months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
+        if ($time){
+            $str = "$week[$wday], $months[$month] $day, $year at $hour:$minute";
         }
         }
         else{
         else{
-            return $r["text"];
+            $str = "$week[$wday], $months[$month] $day, $year";
         }
         }
+        return $str;
     }
     }
 
 
-
     /**
     /**
      * This function closes all the opened HTML tags in a given string.
      * This function closes all the opened HTML tags in a given string.
      * 
      * 
@@ -183,7 +57,6 @@
         return $html;
         return $html;
     }
     }
 
 
-
     /**
     /**
      * Text shortener. Given a string, it trims in the proximity of the
      * Text shortener. Given a string, it trims in the proximity of the
      * desired string, up to the next white character. If indicated, it will
      * desired string, up to the next white character. If indicated, it will

+ 62 - 0
application/page/Guild_Page.php

@@ -0,0 +1,62 @@
+ <?php
+
+    require_once($path["page"] . "Page.php");
+    require_once($path["entity"] . "Guild.php");
+    require_once($path["entity"] . "K_Guild_Skill_Group.php");
+
+    /**
+     * Guild page.
+     */
+    class Guild_Page extends Page{
+
+        /**
+         * @{see Guild}.
+         */
+        public $guild = [];
+
+        /**
+         * List of {@see K_Guild_Skill_Group}s.
+         */
+        public $skill_groups = [];
+
+        /**
+         * Constructor.
+         *
+         * Retrieves the data and initializes the variables.
+         *
+         * @param SQLite3 $db Connection to the database.
+         */
+        public function __construct($db){
+            global $path;
+            global $root;
+            parent::__construct($db);
+            $this->view = $path["view"] . "guild.php";
+            $s =
+              "SELECT DISTINCT guild AS id " .
+              "FROM " .
+              "  guild_member " .
+              "  guild; ";
+            // TODO: Where guild.member.player = ...
+            $q = $this->db->query($s);
+            $r = $q->fetchArray(SQLITE3_ASSOC);
+            if ($r){
+                $this->guild = new Guild($db, $r["id"]);
+                $this->title = $this->guild->name . " - SWDB";
+                $this->description = $this->guild->name . " Guild details";
+                $s =
+                  "SELECT id " .
+                  "FROM k_guild_skill_group " .
+                  "ORDER BY id; ";
+                $q = $this->db->query($s);
+                while ($r = $q->fetchArray(SQLITE3_ASSOC)){
+                    array_push($this->skill_groups, new K_Guild_Skill_Group($db, $r["id"]));
+                }
+            }
+            else{
+                $this->title = "Guild - SWDB";
+                $this->description = "No guild";
+            }
+            $this->canonical = $root . "guild/";
+        }
+    }
+?>

+ 102 - 1
application/page/Home_Page.php

@@ -1,6 +1,7 @@
 <?php
 <?php
 
 
     require_once($path["page"] . "Page.php");
     require_once($path["page"] . "Page.php");
+    require_once($path["entity"] . "Unit.php");
 
 
 
 
     /**
     /**
@@ -8,8 +9,54 @@
      */
      */
     class Home_Page extends Page{
     class Home_Page extends Page{
 
 
-        private $max_projects = 3;
+        /**
+         * Player ID.
+         */
+        public $uid;
+
+        /**
+         * Player name.
+         */
+        public $name;
+
+        /**
+         * Player country (XX).
+         */
+        public $country;
 
 
+        /**
+         * Total experience.
+         */
+         public $experience;
+
+        /**
+         * Representative {@see Unit}.
+         */
+        public $rep;
+
+        /**
+         * Currency
+         */
+        public $currency = [
+            "mana" => 0,
+            "crystal" => 0,
+            "energy" => 0,
+            "energy_max" => 0,
+            "arena_energy" => 0,
+            "arena_energy_max" => 0,
+            "darkportal_energy" => 0,
+            "darkportal_energy_max" => 0,
+            "dimension_energy" => 0,
+            "dimension_energy_max" => 0,
+            "honor_point" => 0,
+            "guild_point" => 0,
+            "honor_medal" => 0,
+            "honor_mark" => 0,
+            "event_coin" => 0,
+            "social_point" => 0,
+            "ancient_stone" => 0,
+            "costume_point" => 0,
+        ];
 
 
         /**
         /**
          * Constructor.
          * Constructor.
@@ -24,6 +71,60 @@
             global $root;
             global $root;
             parent::__construct($db);
             parent::__construct($db);
             $this->view = $path["view"] . "home.php";
             $this->view = $path["view"] . "home.php";
+            // TODO:Filter by player?
+            $s =
+              "SELECT " .
+              "  uid, " .
+              "  name, " .
+              "  country, " .
+              "  experience, " .
+              "  rep, " .
+              "  mana, " .
+              "  crystal, " .
+              "  energy, " .
+              "  energy_max, " .
+              "  arena_energy, " .
+              "  arena_energy_max, " .
+              "  darkportal_energy, " .
+              "  darkportal_energy_max, " .
+              "  dimension_energy, " .
+              "  dimension_energy_max, " .
+              "  honor_point, " .
+              "  guild_point, " .
+              "  honor_medal, " .
+              "  honor_mark, " .
+              "  event_coin, " .
+              "  social_point, " .
+              "  costume_point " .
+              "FROM player ";
+            $q = $this->db->query($s);
+            $r = $q->fetchArray(SQLITE3_ASSOC);
+            if ($r){
+                $this->uid = $r["uid"];
+                $this->name = $r["name"];
+                $this->country = $r["country"];
+                $this->experience = $r["experience"];
+                if (strlen($r["rep"]) > 0){
+                    $this->rep = new Unit($this->db, $r["rep"]);
+                }
+                $this->currency["mana"] = $r["mana"];
+                $this->currency["crystal"] = $r["crystal"];
+                $this->currency["energy"] = $r["energy"];
+                $this->currency["energy_max"] = $r["energy_max"];
+                $this->currency["arena_energy"] = $r["arena_energy"];
+                $this->currency["arena_energy_max"] = $r["arena_energy_max"];
+                $this->currency["darkportal_energy"] = $r["darkportal_energy"];
+                $this->currency["darkportal_energy_max"] = $r["darkportal_energy_max"];
+                $this->currency["dimension_energy"] = $r["dimension_energy"];
+                $this->currency["dimension_energy_max"] = $r["dimension_energy_max"];
+                $this->currency["honor_point"] = $r["honor_point"];
+                $this->currency["guild_point"] = $r["guild_point"];
+                $this->currency["honor_medal"] = $r["honor_medal"];
+                $this->currency["honor_mark"] = $r["honor_mark"];
+                $this->currency["event_coin"] = $r["event_coin"];
+                $this->currency["social_point"] = $r["social_point"];
+                $this->currency["costume_point"] = $r["costume_point"];
+            }
             $this->title = "SWDB";
             $this->title = "SWDB";
             $this->description = "Summoners War DataBase";
             $this->description = "Summoners War DataBase";
             $this->canonical = $root;
             $this->canonical = $root;

+ 20 - 7
application/page/Report_Skillup_Page.php

@@ -119,9 +119,22 @@
               "  k_unit.id = k_unit_skill.unit AND " .
               "  k_unit.id = k_unit_skill.unit AND " .
               "  k_skill.id = k_unit_skill.skill AND " .
               "  k_skill.id = k_unit_skill.skill AND " .
               "  unit.stars >= " . $this->filters["min_stars"] . " AND " .
               "  unit.stars >= " . $this->filters["min_stars"] . " AND " .
-              "  unit.stars <= " . $this->filters["max_stars"] . " AND " .
-              "  k_unit.natural_stars >= " . $this->filters["min_natural_stars"] . " AND " .
-              "  k_unit.natural_stars <= " . $this->filters["max_natural_stars"] . " ";
+              "  unit.stars <= " . $this->filters["max_stars"] . " ";
+            if ($this->filters["2a"]){
+                error_log("2A - ACTIVE");
+                $s = $s .
+                  "  AND (( " .
+                  "    k_unit.natural_stars >= " . $this->filters["min_natural_stars"] . " AND " .
+                  "    k_unit.natural_stars <= " . $this->filters["max_natural_stars"] . " " .
+                  "  ) OR ( " .
+                  "    k_unit.base_stars - k_unit.natural_stars > 1 " .
+                  "  )) ";
+            }
+            else{
+                $s = $s .
+                  "  AND k_unit.natural_stars >= " . $this->filters["min_natural_stars"] . " AND " .
+                  "  k_unit.natural_stars <= " . $this->filters["max_natural_stars"] . " ";
+            }
             if (!$this->filters["in_storage"]){
             if (!$this->filters["in_storage"]){
                 // TODO
                 // TODO
                 //$s = $s . " AND unit.in_storage = 0 ";
                 //$s = $s . " AND unit.in_storage = 0 ";
@@ -129,7 +142,7 @@
             if (!$this->filters["without_runes"]){
             if (!$this->filters["without_runes"]){
                 $s = $s . " AND unit.id IN (SELECT DISTINCT assigned_to FROM rune) ";
                 $s = $s . " AND unit.id IN (SELECT DISTINCT assigned_to FROM rune) ";
             }
             }
-            if ($this->filters["family"]){
+            if (!$this->filters["family"]){
                 $s = $s . " AND unit.unit NOT IN (SELECT id FROM k_unit m WHERE family IN (SELECT family FROM k_unit k WHERE k.family = m.family AND k.natural_stars < m.natural_stars AND k.natural_stars < " . $this->filters["min_natural_stars"] . ")) ";
                 $s = $s . " AND unit.unit NOT IN (SELECT id FROM k_unit m WHERE family IN (SELECT family FROM k_unit k WHERE k.family = m.family AND k.natural_stars < m.natural_stars AND k.natural_stars < " . $this->filters["min_natural_stars"] . ")) ";
                 // Special case: Eirgar (Dark Vampire lord). Nat5 can be powered with 4 star Vampires.
                 // Special case: Eirgar (Dark Vampire lord). Nat5 can be powered with 4 star Vampires.
                 if ($this->filters["min_natural_stars"] >= 5){
                 if ($this->filters["min_natural_stars"] >= 5){
@@ -140,9 +153,9 @@
                     $s = $s . " AND k_unit.id <> 23015 AND k_unit.id <> 23005 ";
                     $s = $s . " AND k_unit.id <> 23015 AND k_unit.id <> 23005 ";
                 }
                 }
             }
             }
-            if (!$this->filters["2a"]){
-                $s = $s . " AND (k_unit.awakens_from IS NULL OR k_unit.awakens_to IS NOT NULL OR k_unit.base_stars - k_unit.natural_stars = 1) ";
-            }
+            //if (!$this->filters["2a"]){
+            //    $s = $s . " AND (k_unit.awakens_from IS NULL OR k_unit.awakens_to IS NOT NULL OR k_unit.base_stars - k_unit.natural_stars = 1) ";
+            //}
             if (!$this->filters["homunculus"]){
             if (!$this->filters["homunculus"]){
                 $s = $s . " AND k_unit.homunculus <> 1 ";
                 $s = $s . " AND k_unit.homunculus <> 1 ";
             }
             }

+ 287 - 0
application/view/guild.php

@@ -0,0 +1,287 @@
+<?php
+    global $GUILD_MEMBER_GRADE;
+    global $ARENA_RANKING_POINTS;
+    global $ARENA_RANKING_RANK;
+?>
+<!DOCTYPE html>
+<html lang='en'>
+    <head>
+        <meta content='text/html; charset=utf-8' http-equiv='content-type'/>
+        <meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1'/>
+        <title><?=$page->title?></title>
+        <link rel='shortcut icon' href='<?=$page->favicon?>'/>
+        <!-- CSS files -->
+        <link rel='stylesheet' type='text/css' href='<?=$path["css"]?>ui.css'/>
+        <link rel='stylesheet' type='text/css' href='<?=$path["css"]?>guild.css'/>
+        <!-- Script files -->
+        <script src="<?=$path["js"]?>ui.js"></script>
+        <!-- Meta tags -->
+        <link rel='canonical' href='<?=$page->canonical?>'/>
+        <link rel='author' href='<?=$page->author?>'/>
+        <link rel='publisher' href='<?=$page->author?>'/>
+        <meta name='description' content='<?=$page->description?>'/>
+        <meta property='og:title' content='<?=$page->title?>'/>
+        <meta property='og:url' content='<?=$page->canonical?>'/>
+        <meta property='og:description' content='<?=$page->description?>'/>
+        <meta property='og:image' content='<?=$page->icon?>'/>
+        <meta property='og:site_name' content='<?=$page->name?>'/>
+        <meta property='og:type' content='website'/>
+        <meta property='og:locale' content='en'/>
+        <meta name='twitter:card' content='summary'/>
+        <meta name='twitter:title' content='<?=$page->title?>'/>
+        <meta name='twitter:description' content='<?=$page->description?>'/>
+        <meta name='twitter:image' content='<?=$page->icon?>'/>
+        <meta name='twitter:url' content='<?=$page->canonical?>'/>
+        <meta name='robots' content='index follow'/>
+    </head>
+    <body>
+<?php
+        include __DIR__ . "/inc/header.php";
+        if (!isset($page->guild)){
+?>
+            <section id='no_guild'>
+                <h2>
+                    Guild
+                </h2>
+                You are not currently in a guild.
+            </section>
+<?php
+        }
+        else{
+?>
+            <section id='guild_info' class='content'>
+                <h2>
+                    <?=$page->guild->name?>
+                </h2>
+                <div id='guild_details'>
+                    <span id='guild_level'>
+                        Lv. <?=$page->guild->level?>
+                    </span>
+                    <span id='guild_experience'>
+                        (Exp: <?=$page->guild->experience?>)
+                    </span>
+                    <p id='guild_comment'>
+                        <?=$page->guild->comment?>
+                    </p>
+                    <p id='guild_notice'>
+                        <?=$page->guild->notice?>
+                    </p>
+                    <div id='guild_skills'>
+<?php
+                        foreach ($page->skill_groups as $group){
+?>
+                            <div class='skill_group'>
+                                <span class='skill_group_title'>
+                                    <?=$group->name?>
+                                </span>
+                                <img class='skill_group_image' alt='<?=$group->name?>' src='<?=$group->get_image()?>'/>
+                                <ul>
+                                    <li class='description'>
+                                        <?=$group->description?>
+                                    </li>
+<?php
+                                    foreach ($group->skills as $skill){
+                                        if ($skill->level > $page->guild->level){
+                                            $unavailable = "unavailable";
+                                        }
+                                        else{
+                                            $unavailable = "";
+                                        }
+?>
+                                        <li class='<?=$unavailable?>'>
+                                            Lv. <?=$skill->level?>: <?=$skill->effect?>
+                                        </li>
+<?php
+                                    }
+?>
+                                </ul>
+                            </div>
+<?php
+                        }
+?>
+                    </div>
+                </div>
+                <table id='guild_members'>
+                    <tr>
+                        <th>
+                            &nbsp;
+                        </th>
+                        <th>
+                            Name
+                        </th>
+                        <th>
+                            Lv.
+                        </th>
+                        <th colspan='2'>
+                            Arena
+                        </th>
+                        <th>
+                            War
+                        </th>
+                        <th>
+                            Def
+                        </th>
+                        <th>
+                            Login
+                        </th>
+                    </tr>
+<?php
+                    $odd = "";
+                    foreach ($page->guild->members as $member){
+?>
+                        <tr>
+                            <td class='grade <?=$odd?>'>
+<?php
+                                if ($member->grade == $GUILD_MEMBER_GRADE["LEADER"]){
+?>
+                                    <img alt='yes' src='<?=$path["img"]["layout"] . "icon/leader.png"?>'/>
+<?php
+                                }
+                                elseif ($member->grade == $GUILD_MEMBER_GRADE["VICELEADER"]){
+?>
+                                    <img alt='yes' src='<?=$path["img"]["layout"] . "icon/viceleader.png"?>'/>
+<?php
+                                }
+?>
+                            </td>
+                            <td class='name <?=$odd?>'>
+                                <?=$member->name?>
+                            </td>
+                            <td class='level <?=$odd?>'>
+                                <?=$member->level?>
+                            </td>
+                            <td class='score <?=$odd?>'>
+                                <?=$member->arena_score?>
+                            </td>
+                            <td class='score_icon <?=$odd?>'>
+<?php
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["BEGINER"] && ($ARENA_RANKING_RANK["BEGINER"] == null || $member->rating <= $ARENA_RANKING_RANK["BEGINER"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_beg.png";
+                                    $tit = "Beginer";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["CHALLENGER_1"] && ($ARENA_RANKING_RANK["CHALLENGER_1"] == null || $member->rating <= $ARENA_RANKING_RANK["CHALLENGER_1"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_cha1.png";
+                                    $tit = "Challenger 1";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["CHALLENGER_2"] && ($ARENA_RANKING_RANK["CHALLENGER_2"] == null || $member->rating <= $ARENA_RANKING_RANK["CHALLENGER_2"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_cha2.png";
+                                    $tit = "Challenger 2";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["CHALLENGER_3"] && ($ARENA_RANKING_RANK["CHALLENGER_3"] == null || $member->rating <= $ARENA_RANKING_RANK["CHALLENGER_3"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_cha3.png";
+                                    $tit = "Challenger 3";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["FIGHTER_1"] && ($ARENA_RANKING_RANK["FIGHTER_1"] == null || $member->rating <= $ARENA_RANKING_RANK["FIGHTER_1"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_fig1.png";
+                                    $tit = "Fighter 1";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["FIGHTER_2"] && ($ARENA_RANKING_RANK["FIGHTER_2"] == null || $member->rating <= $ARENA_RANKING_RANK["FIGHTER_2"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_fig2.png";
+                                    $tit = "Fighter 2";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["FIGHTER_3"] && ($ARENA_RANKING_RANK["FIGHTER_3"] == null || $member->rating <= $ARENA_RANKING_RANK["FIGHTER_3"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_fig3.png";
+                                    $tit = "Fighter 3";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["CONQUEROR_1"] && ($ARENA_RANKING_RANK["CONQUEROR_1"] == null || $member->rating <= $ARENA_RANKING_RANK["CONQUEROR_1"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_con1.png";
+                                    $tit = "Conqueror 1";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["CONQUEROR_2"] && ($ARENA_RANKING_RANK["CONQUEROR_2"] == null || $member->rating <= $ARENA_RANKING_RANK["CONQUEROR_2"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_con2.png";
+                                    $tit = "Conqueror 2";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["CONQUEROR_3"] && ($ARENA_RANKING_RANK["CONQUEROR_3"] == null || $member->rating <= $ARENA_RANKING_RANK["CONQUEROR_3"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_con3.png";
+                                    $tit = "Conqueror 3";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["GUARDIAN_1"] && ($ARENA_RANKING_RANK["GUARDIAN_1"] == null || $member->rating <= $ARENA_RANKING_RANK["GUARDIAN_1"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_gua1.png";
+                                    $tit = "Guardian 1";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["GUARDIAN_2"] && ($ARENA_RANKING_RANK["GUARDIAN_2"] == null || $member->rating <= $ARENA_RANKING_RANK["GUARDIAN_2"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_gua2.png";
+                                    $tit = "Guardian 2";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["GUARDIAN_3"] && ($ARENA_RANKING_RANK["GUARDIAN_3"] == null || $member->rating <= $ARENA_RANKING_RANK["GUARDIAN_3"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_gua3.png";
+                                    $tit = "Guardian 3";
+                                }
+                                if ($member->arena_score >= $ARENA_RANKING_POINTS["LEGEND"] && ($ARENA_RANKING_RANK["LEGEND"] == null || $member->rating <= $ARENA_RANKING_RANK["LEGEND"])){
+                                    $src = $path["img"]["layout"] . "icon/rank_leg.png";
+                                    $tit = "Legend";
+                                }
+?>
+                                <img alt='<?=$tit?>' src='<?=$src?>'/>
+                            </td>
+                            <td class='war <?=$odd?>'>
+<?php
+                                if ($member->in_war){
+?>
+                                    <img alt='yes' src='<?=$path["img"]["layout"] . "icon/ok.png"?>'/>
+<?php
+                                }
+?>
+                            </td>
+                            <td class='defense <?=$odd?>'>
+<?php
+                                if ($member->has_defense){
+?>
+                                    <img alt='yes' src='<?=$path["img"]["layout"] . "icon/ok.png"?>'/>
+<?php
+                                }
+?>
+                            </td>
+<?php
+                            $now = time();
+                            $date = (new DateTime("@$member->last_login"))->format('Y-m-d H:i:s');
+                            $days = $now - strtotime($date);
+                            $days = floor($days / (60 * 60 * 24));
+                            if ($days == 0){
+                                $hours = floor($days / (60 * 60));
+                                if ($hours == 0){
+                                    $last_login = "Online";
+                                }
+                                else if ($hours == 1){
+                                    $last_login = "1 hour";
+                                }
+                                else{
+                                    $last_login = floor($days / (60 * 60)) . " hours";
+                                }
+                                $warning = "";
+                            }
+                            else{
+                                $last_login = "$days days";
+                                if ($days < 2){
+                                    $last_login = "$days day";
+                                    $warning = "";
+                                }
+                                elseif ($days < 5){
+                                    $warning = "warning";
+                                }
+                                else{
+                                    $warning = "danger";
+                                }
+                            }
+?>
+                            <td class='last_login <?=$odd?> <?=$warning?>'>
+                                <?=$last_login?>
+                            </td>
+                        </tr>
+<?php
+                        if ($odd == ""){
+                            $odd = "odd";
+                        }
+                        else{
+                            $odd = "";
+                        }
+                    }
+?>
+                </table>
+            </section>
+<?php
+        }
+        include __DIR__ . "/inc/footer.php";
+?>
+    </body>
+</html>

+ 111 - 0
application/view/home.php

@@ -39,6 +39,117 @@
                     Summoners War DataBase
                     Summoners War DataBase
                 </span>
                 </span>
             </h2>
             </h2>
+            <article id='profile'>
+                <h3>
+                    <?=$page->name?>
+                </h3>
+                <div id='info'>
+<?php
+                    //if (isset($page->rep)){
+                        if ($page->rep->unit->awakens_from == "" && $page->rep->unit->awakens_to == ""){
+                            // No to, no from, silver monster.
+                            $star_class ="star_silver";
+                            $mon_title = $page->rep->unit->element . " " . $page->rep->unit->name;
+                        }
+                        elseif ($page->rep->unit->awakens_from =! "" && $page->rep->unit->awakens_to == ""){
+                            // Already awakened
+                            if ($page->rep->unit->base_stars - $page->rep->unit->natural_stars == 1){
+                                // Normal awaken.
+                                $star_class ="star_purple";
+                            }
+                            else{
+                                // Second awaken.
+                                $star_class ="star_red";
+                            }
+                            $mon_title = $page->rep->unit->name;
+                        }
+                        elseif ($page->rep->unit->awakens_to =! ""){
+                            // Awakeable.
+                            $star_class ="star_gold";
+                            $mon_title = $page->rep->unit->element . " " . $page->rep->unit->name;
+                        }
+?>
+
+                        <div class='monster_panel'>
+                            <span class='stars'>
+<?php
+                                for ($i = 0; $i < $page->rep->stars; $i ++){
+?>
+                                    <img class='star <?=$star_class?>' src='<?=$path["img"]["layout"] . "icon/star.png"?>'/>
+<?php
+                                }
+?>
+                            </span>
+                            <img title='<?=$mon_title?>' class='monster border_<?=$page->rep->unit->element_name?>' src='<?=$page->rep->unit->get_image()?>'/>
+                            <span class='level'>
+                                <?=$page->rep->level?>
+                            </span>
+                        </div> <!-- .monster_panel -->
+<?php
+                   // } // if (isset($page->rep))
+?>
+                </div>
+                <div id='currency'>
+                    <ul>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/energy.png'/>
+                            <?=$page->currency["energy"]?> / <?=$page->currency["energy_max"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/arenaenergy.png'/>
+                            <?=$page->currency["arena_energy"]?> / <?=$page->currency["arena_energy_max"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/dimensionenergy.png'/>
+                            <?=$page->currency["dimension_energy"]?> / <?=$page->currency["dimension_energy_max"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/darkportalenergy.png'/>
+                            <?=$page->currency["darkportal_energy"]?> / <?=$page->currency["darkportal_energy_max"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/mana.png'/>
+                            <?=$page->currency["mana"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/crystal.png'/>
+                            <?=$page->currency["crystal"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/socialpoint.png'/>
+                            <?=$page->currency["social_point"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/honor.png'/>
+                            <?=$page->currency["honor_point"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/guildpoint.png'/>
+                            <?=$page->currency["guild_point"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/badge.png'/>
+                            <?=$page->currency["honor_medal"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/mark.png'/>
+                            <?=$page->currency["honor_mark"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/ancientcoin.png'/>
+                            <?=$page->currency["event_coin"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/ancientstone.png'/>
+                            <?=$page->currency["ancient_stone"]?>
+                        </li>
+                        <li>
+                            <img src='<?=$path["img"]["layout"]?>currency/costumestone.png'/>
+                            <?=$page->currency["costume_point"]?>
+                        </li>
+                    </ul>
+                </div>
+            </article>
             <article>
             <article>
                 <h3>
                 <h3>
                     <a href='/catalog'>
                     <a href='/catalog'>

+ 3 - 0
application/view/inc/header.php

@@ -24,6 +24,9 @@
         <a href='/fusion'>
         <a href='/fusion'>
             Fusion
             Fusion
         </a>
         </a>
+        <a href='/guild'>
+            Guild
+        </a>
         <a href='/report'>
         <a href='/report'>
             Reports
             Reports
         </a>
         </a>

+ 6 - 274
application/view/monster.php

@@ -34,51 +34,15 @@
         include __DIR__ . "/inc/header.php";
         include __DIR__ . "/inc/header.php";
 ?>
 ?>
         <section id='monster' class='content'>
         <section id='monster' class='content'>
-<?php
-            if ($page->unit->unit->awakens_from == "" && $page->unit->unit->awakens_to == ""){
-                // No to, no from, silver monster.
-                $star_class ="star_silver";
-                $mon_title = $page->unit->unit->element . " " . $page->unit->unit->name;
-            }
-            elseif ($page->unit->unit->awakens_from =! "" && $page->unit->unit->awakens_to == ""){
-                // Already awakened
-                if ($page->unit->unit->base_stars - $page->unit->unit->natural_stars == 1){
-                    // Normal awaken.
-                    $star_class ="star_purple";
-                }
-                else{
-                    // Second awaken.
-                    $star_class ="star_red";
-                }
-                $mon_title = $page->unit->unit->name;
-            }
-            elseif ($page->unit->unit->awakens_to =! ""){
-                // Awakeable.
-                $star_class ="star_gold";
-                $mon_title = $page->unit->unit->element . " " . $page->unit->unit->name;
-            }
-?>
             <h2>
             <h2>
                 <span>
                 <span>
-                    <?=$mon_title?>
+                    <?=$page->unit->title?>
                 </span>
                 </span>
             </h2>
             </h2>
             <article id='profile'>
             <article id='profile'>
                 <div id='monster_info'>
                 <div id='monster_info'>
                     <div class='monster_panel'>
                     <div class='monster_panel'>
-                        <span class='stars'>
-<?php
-                            for ($i = 0; $i < $page->unit->stars; $i ++){
-?>
-                                <img class='star <?=$star_class?>' src='<?=$path["img"]["layout"] . "icon/star.png"?>'/>
-<?php
-                            }
-?>
-                        </span>
-                        <img title='<?=$mon_title?>' class='monster border_<?=$page->unit->unit->element_name?>' src='<?=$page->unit->unit->get_image()?>'/>
-                        <span class='level'>
-                            <?=$page->unit->level?>
-                        </span>
+                        <?=html_unit_panel($page->unit)?>
                     </div>
                     </div>
 <?php
 <?php
                     if ($page->unit->experience_level != 0){
                     if ($page->unit->experience_level != 0){
@@ -90,8 +54,9 @@
                         $exp_txt = "MAX";
                         $exp_txt = "MAX";
                     }
                     }
                     $now = time();
                     $now = time();
-                    $datediff = $now - $page->unit->create_time;
-                    $datediff = floor($datediff / (60 * 60 * 24 * 1000));
+                    //$datediff = $now - $page->unit->create_time->getTimestamp();
+                    $datediff = $now - strtotime($page->unit->create_time->format('Y-m-d H:i:s'));
+                    $datediff = floor($datediff / (60 * 60 * 24));
 ?>
 ?>
                     <div id='monster_details'>
                     <div id='monster_details'>
                         <div id='exp'>
                         <div id='exp'>
@@ -412,240 +377,7 @@
                 $total_runes ++;
                 $total_runes ++;
 ?>
 ?>
                 <article>
                 <article>
-                    <table class='rune'>
-                        <tr>
-                            <td class='icon'>
-                                <div class='rune_panel rune_slot_<?=$rune->slot?> rune_level_<?=$rune->level?> rune_quality_<?=strtolower($rune->quality_name)?> rune_original_quality_<?=strtolower($rune->original_quality_name)?> rune_ancient_<?=$rune->ancient?>'>
-                                    <img class='rune_base' src=<?=$path["img"]["layout"]?>rune/base.png/>
-                                    <img class='rune_icon' src='<?=$rune->type->get_image()?>'/>
-                                    <span class='rune_stars'>
-<?php
-                                        for ($i = 0; $i < $rune->stars; $i ++){
-?>
-                                            <img class='star' src='<?=$path["img"]["layout"] . "icon/star.png"?>'/>
-<?php
-                                        }
-?>
-                                    </span>
-                                    <span class='rune_level'>
-                                        <?=$rune->level?>
-                                    </span>
-                                </div>
-                            </td>
-                            <td class='stats'>
-                                <table>
-                                    <tr class='main_stat'>
-                                        <td class='stat'>
-<?php
-                                            if (in_array($rune->main_stat_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                $stat_name = str_replace("%", "", $rune->main_stat_name);
-                                                $stat_value = "+ " . $rune->main_stat_value . "%";
-                                            }
-                                            else{
-                                                $stat_name = $rune->main_stat_name;
-                                                $stat_value = "+ " . $rune->main_stat_value;
-                                            }
-?>
-                                            <?=$stat_name?>
-                                        </td>
-                                        <td class='value'>
-                                            <?=$stat_value?>
-                                        <td>
-                                    </tr>
-                                    <tr class='innate_stat'>
-                                        <td class='stat'>
-<?php
-                                            if (strlen($rune->innate_stat) == 0){
-                                                $stat_name = "&nbsp;";
-                                                $stat_value = "";
-                                            }
-                                            elseif (in_array($rune->innate_stat_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                $stat_name = str_replace("%", "", $rune->innate_stat_name);
-                                                $stat_value = "+ " . $rune->innate_stat_value . "%";
-                                            }
-                                            else{
-                                                $stat_name = $rune->innate_stat_name;
-                                                $stat_value = "+ " . $rune->innate_stat_value;
-                                            }
-?>
-                                            <?=$stat_name?>
-                                        </td>
-                                        <td class='value'>
-                                            <?=$stat_value?>
-                                        <td>
-                                    </tr>
-                                    <tr class=substat>
-                                        <td class='stat'>
-<?php
-                                            if (strlen($rune->substat_1) == 0){
-                                                $stat_name = "&nbsp;";
-                                                $stat_value = "";
-                                            }
-                                            elseif (in_array($rune->substat_1_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                $stat_name = str_replace("%", "", $rune->substat_1_name);
-                                                $stat_value = "+ " . $rune->substat_1_value . "%";
-                                            }
-                                            else{
-                                                $stat_name = $rune->substat_1;
-                                                $stat_value = "+ " . $rune->substat_1_value;
-                                            }
-                                            if ($rune->substat_1_craft == 1){
-                                                $craft = "craft";
-                                            }
-                                            else{
-                                                $craft = "";
-                                            }
-?>
-                                            <?=$stat_name?>
-                                        </td>
-                                        <td class='value <?=$craft?>'>
-                                            <?=$stat_value?>
-                                        <td>
-                                    </tr>
-                                    <tr class=substat>
-                                        <td class='stat'>
-<?php
-                                            if (strlen($rune->substat_2) == 0){
-                                                $stat_name = "&nbsp;";
-                                                $stat_value = "";
-                                            }
-                                            elseif (in_array($rune->substat_2_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                $stat_name = str_replace("%", "", $rune->substat_2_name);
-                                                $stat_value = "+ " . $rune->substat_2_value . "%";
-                                            }
-                                            else{
-                                                $stat_name = $rune->substat_2_name;
-                                                $stat_value = "+ " . $rune->substat_2_value;
-                                            }
-                                            if ($rune->substat_2_craft == 1){
-                                                $craft = "craft";
-                                            }
-                                            else{
-                                                $craft = "";
-                                            }
-?>
-                                            <?=$stat_name?>
-                                        </td>
-                                        <td class='value <?=$craft?>'>
-                                            <?=$stat_value?>
-                                        <td>
-                                    </tr>
-                                    <tr class=substat>
-                                        <td class='stat'>
-<?php
-                                            if (strlen($rune->substat_3) == 0){
-                                                $stat_name = "&nbsp;";
-                                                $stat_value = "";
-                                            }
-                                            elseif (in_array($rune->substat_3_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                $stat_name = str_replace("%", "", $rune->substat_3_name);
-                                                $stat_value = "+ " . $rune->substat_3_value . "%";
-                                            }
-                                            else{
-                                                $stat_name = $rune->substat_3_name;
-                                                $stat_value = "+ " . $rune->substat_3_value;
-                                            }
-                                            if ($rune->substat_3_craft == 1){
-                                                $craft = "craft";
-                                            }
-                                            else{
-                                                $craft = "";
-                                            }
-?>
-                                            <?=$stat_name?>
-                                        </td>
-                                        <td class='value <?=$craft?>'>
-                                            <?=$stat_value?>
-                                        <td>
-                                    </tr>
-                                    <tr class=substat>
-                                        <td class='stat'>
-<?php
-                                            if (strlen($rune->substat_4) == 0){
-                                                $stat_name = "&nbsp;";
-                                                $stat_value = "";
-                                            }
-                                            elseif (in_array($rune->substat_4_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                $stat_name = str_replace("%", "", $rune->substat_4_name);
-                                                $stat_value = "+ " . $rune->substat_4_value . "%";
-                                            }
-                                            else{
-                                                $stat_name = $rune->substat_4_name;
-                                                $stat_value = "+ " . $rune->substat_4_value;
-                                            }
-                                            if ($rune->substat_4_craft == 1){
-                                                $craft = "craft";
-                                            }
-                                            else{
-                                                $craft = "";
-                                            }
-?>
-                                            <?=$stat_name?>
-                                        </td>
-                                        <td class='value <?=$craft?>'>
-                                            <?=$stat_value?>
-                                        <td>
-                                    </tr>
-                                </table>
-                            </td>
-                            <td class='details'>
-                                <table class='table_details'>
-                                    <tr>
-                                        <td class='title'>
-                                            Quality:
-                                        </td>
-                                        <td class='value'>
-                                            <span class='quality quality_<?=strtolower($rune->quality_name)?>'>
-                                                <?=$rune->quality_name?>
-                                            </span>
-                                        </td>
-                                    </tr>
-                                    <tr>
-                                        <td class='title'>
-                                            Original quality:
-                                        </td>
-                                        <td class='value'>
-                                            <span class='quality quality_<?=strtolower($rune->original_quality_name)?>'>
-                                                <?=$rune->original_quality_name?>
-                                            </span>
-                                        </td>
-                                    </tr>
-                                    <tr>
-                                        <td class='title'>
-                                            Value:
-                                        </td>
-                                        <td class='value'>
-                                            <?=$rune->value?>
-                                        </td>
-                                    </tr>
-                                    <tr>
-                                        <td class='title'>
-                                            Efficiency:
-                                        </td>
-                                        <td class='value'>
-                                            <?=number_format($rune->efficiency, 2)?>%
-                                        </td>
-                                    </tr>
-                                    <tr>
-                                        <td class='title'>
-                                            Max. efficiency:
-                                        </td>
-                                        <td class='value'>
-                                            <?=number_format($rune->max_efficiency, 2)?>%
-                                        </td>
-                                    </tr>
-                                    <tr>
-                                        <td class='title'>
-                                            Reached efficiency:
-                                        </td>
-                                        <td class='value'>
-                                            <?=number_format($rune->efficiency * 100 / $rune->max_efficiency)?>%
-                                        </td>
-                                    </tr>
-                                </table>
-                            </td>
-                        </tr>
-                    </table>
+                    <?=html_rune_table($rune)?>
                 </article>
                 </article>
 <?php
 <?php
             }
             }

+ 15 - 61
application/view/monsters.php

@@ -1,3 +1,6 @@
+<?php
+    global $ELEMENT;
+?>
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang='en'>
 <html lang='en'>
     <head>
     <head>
@@ -49,30 +52,30 @@
                                 $light_selected = "";
                                 $light_selected = "";
                                 $dark_selected = "";
                                 $dark_selected = "";
                                 switch (strtoupper($page->filters["element"])){
                                 switch (strtoupper($page->filters["element"])){
-                                    case "FIRE":
+                                    case $ELEMENT["FIRE"]:
                                         $fire_selected = "selected='selected'";
                                         $fire_selected = "selected='selected'";
                                         break;
                                         break;
-                                    case "WATER":
+                                    case $ELEMENT["WATER"]:
                                         $water_selected = "selected='selected'";
                                         $water_selected = "selected='selected'";
                                         break;
                                         break;
-                                    case "WIND":
+                                    case $ELEMENT["WIND"]:
                                         $wind_selected = "selected='selected'";
                                         $wind_selected = "selected='selected'";
                                         break;
                                         break;
-                                    case "LIGHT":
+                                    case $ELEMENT["LIGHT"]:
                                         $light_selected = "selected='selected'";
                                         $light_selected = "selected='selected'";
                                         break;
                                         break;
-                                    case "DARK":
+                                    case $ELEMENT["DARK"]:
                                         $dark_selected = "selected='selected'";
                                         $dark_selected = "selected='selected'";
                                         break;
                                         break;
                                 }
                                 }
 ?>
 ?>
                                 <select name='element' id='filter_type'>
                                 <select name='element' id='filter_type'>
                                     <option value=''>All</option>
                                     <option value=''>All</option>
-                                    <option value='Fire' <?=$fire_selected?>>Fire</option>
-                                    <option value='Water' <?=$water_selected?>>Water</option>
-                                    <option value='Wind' <?=$wind_selected?>>Wind</option>
-                                    <option value='Light' <?=$light_selected?>>Light</option>
-                                    <option value='Dark' <?=$dark_selected?>>Dark</option>
+                                    <option value='<?=$ELEMENT["FIRE"]?>' <?=$fire_selected?>>Fire</option>
+                                    <option value='<?=$ELEMENT["WATER"]?>' <?=$water_selected?>>Water</option>
+                                    <option value='<?=$ELEMENT["WIND"]?>' <?=$wind_selected?>>Wind</option>
+                                    <option value='<?=$ELEMENT["LIGHT"]?>' <?=$light_selected?>>Light</option>
+                                    <option value='<?=$ELEMENT["DARK"]?>' <?=$dark_selected?>>Dark</option>
                                 </select>
                                 </select>
                             </td>
                             </td>
                             <td class='filter' id='filter_stars'>
                             <td class='filter' id='filter_stars'>
@@ -125,50 +128,16 @@
                 <article>
                 <article>
 <?php
 <?php
                     foreach ($page->monsters as $mon){
                     foreach ($page->monsters as $mon){
-                        if ($mon->unit->awakens_from == "" && $mon->unit->awakens_to == ""){
-                            // No to, no from, silver monster.
-                            $star_class ="star_silver";
-                            $mon_title = $mon->unit->element . " " . $mon->unit->name;
-                        }
-                        elseif ($mon->unit->awakens_from =! "" && $mon->unit->awakens_to == ""){
-                            // Already awakened
-                            if ($mon->unit->base_stars - $mon->unit->natural_stars == 1){
-                                // Normal awaken.
-                                $star_class ="star_purple";
-                            }
-                            else{
-                                // Second awaken.
-                                $star_class ="star_red";
-                            }
-                            $mon_title = $mon->unit->name;
-                        }
-                        elseif ($mon->unit->awakens_to =! ""){
-                            // Awakeable.
-                            $star_class ="star_gold";
-                            $mon_title = $mon->unit->element . " " . $mon->unit->name;
-                        }
 ?>
 ?>
                         <div class='monster'>
                         <div class='monster'>
                             <a href='/monsters/<?=$mon->id?>'>
                             <a href='/monsters/<?=$mon->id?>'>
                                 <div class='monster_panel'>
                                 <div class='monster_panel'>
-                                    <span class='stars'>
-<?php
-                                        for ($i = 0; $i < $mon->stars; $i ++){
-?>
-                                            <img class='star <?=$star_class?>' src='<?=$path["img"]["layout"] . "icon/star.png"?>'/>
-<?php
-                                        }
-?>
-                                    </span>
-                                    <img title='<?=$mon_title?>' class='monster border_<?=$mon->unit->element_name?>' src='<?=$mon->unit->get_image()?>'/>
-                                    <span class='level'>
-                                        <?=$mon->level?>
-                                    </span>
+                                    <?=html_unit_panel($mon)?>
                                 </div>
                                 </div>
                             </a>
                             </a>
                             <div class='monster_tooltip'>
                             <div class='monster_tooltip'>
                                 <h4>
                                 <h4>
-                                    <?=$mon_title?>
+                                    <?=$mon->title?>
                                 </h4>
                                 </h4>
 <?php
 <?php
                                 $building_attack = floor(($mon->attack * $page->building_stats["atk"] / 100) + ($mon->attack * $page->building_stats["elm"][$mon->unit->element] / 100));
                                 $building_attack = floor(($mon->attack * $page->building_stats["atk"] / 100) + ($mon->attack * $page->building_stats["elm"][$mon->unit->element] / 100));
@@ -340,21 +309,6 @@
                                     $skill_num = 0;
                                     $skill_num = 0;
                                     foreach ($mon->unit->skill as $skill){
                                     foreach ($mon->unit->skill as $skill){
                                         $cur_lvl = $mon->skill_levels[$skill_num];
                                         $cur_lvl = $mon->skill_levels[$skill_num];
-                                        /*switch ($skill_num){
-                                            
-                                            case 1:
-                                                $cur_lvl = $mon->skill_1_level;
-                                                break;
-                                            case 2:
-                                                $cur_lvl = $mon->skill_2_level;
-                                                break;
-                                            case 3:
-                                                $cur_lvl = $mon->skill_3_level;
-                                                break;
-                                            case 4:
-                                                $cur_lvl = $mon->skill_4_level;
-                                                break;
-                                        }*/
                                         $max_lvl = $skill->max_level;
                                         $max_lvl = $skill->max_level;
                                         if ($max_lvl == $cur_lvl){
                                         if ($max_lvl == $cur_lvl){
                                             $maxed = "maxed";
                                             $maxed = "maxed";

+ 64 - 843
application/view/report_runeupgrade.php

@@ -93,125 +93,44 @@
                             <span>Slot:</span>
                             <span>Slot:</span>
                             <select multiple name='rune_slot[]' id='filter_slot'>
                             <select multiple name='rune_slot[]' id='filter_slot'>
 <?php
 <?php
-                                if (in_array(1, $page->filters["rune_slot"])){
-                                    $selected = "selected='selected'";
-                                }
-                                else{
-                                    $selected = "";
-                                }
-?>
-                                <option value='1' <?=$selected?>>1</option>
-<?php
-                                if (in_array(2, $page->filters["rune_slot"])){
-                                    $selected = "selected='selected'";
-                                }
-                                else{
-                                    $selected = "";
-                                }
-?>
-                                <option value='2' <?=$selected?>>2</option>
-<?php
-                                if (in_array(3, $page->filters["rune_slot"])){
-                                    $selected = "selected='selected'";
-                                }
-                                else{
-                                    $selected = "";
-                                }
-?>
-                                <option value='3' <?=$selected?>>3</option>
-<?php
-                                if (in_array(4, $page->filters["rune_slot"])){
-                                    $selected = "selected='selected'";
-                                }
-                                else{
-                                    $selected = "";
-                                }
-?>
-                                <option value='4' <?=$selected?>>4</option>
-<?php
-                                if (in_array(5, $page->filters["rune_slot"])){
-                                    $selected = "selected='selected'";
-                                }
-                                else{
-                                    $selected = "";
-                                }
+                                for ($i = 0; $i < 6; $i ++){
+                                    if (in_array($i, $page->filters["rune_slot"])){
+                                        $selected = "selected='selected'";
+                                    }
+                                    else{
+                                        $selected = "";
+                                    }
 ?>
 ?>
-                                <option value='5' <?=$selected?>>5</option>
+                                    <option value='$i' <?=$selected?>>%i</option>
 <?php
 <?php
-                                if (in_array(6, $page->filters["rune_slot"])){
-                                    $selected = "selected='selected'";
                                 }
                                 }
-                                else{
-                                    $selected = "";
-                                }
-?>
-                                <option value='6' <?=$selected?>>6</option>
                             </select>
                             </select>
                         </td>
                         </td>
                         <td class='filter' colspan='3'>
                         <td class='filter' colspan='3'>
                             <span>Quality:</span>
                             <span>Quality:</span>
 <?php
 <?php
-                            $selected_0 = "";
-                            $selected_1 = "";
-                            $selected_2 = "";
-                            $selected_3 = "";
-                            $selected_4 = "";
-                            switch (strtoupper($page->filters["rune_min_quality"])){
-                                case 0:
-                                    $selected_0 = "selected";
-                                    break;
-                                case 1:
-                                    $selected_1 = "selected";
-                                    break;
-                                case 2:
-                                    $selected_2 = "selected";
-                                    break;
-                                case 3:
-                                    $selected_3 = "selected";
-                                    break;
-                                case 4:
-                                    $selected_4 = "selected";
-                                    break;
-                            }
+
+                            $selected = Array("", "", "", "", "");
+                            $selected[$page->filters["rune_min_quality"]] = "selected";
 ?>
 ?>
                             <select name='rune_min_quality' id='filter_quality_min'>
                             <select name='rune_min_quality' id='filter_quality_min'>
-                                <option value='0' <?=$selected_0?>>Normal</option>
-                                <option value='1' <?=$selected_1?>>Magic</option>
-                                <option value='2' <?=$selected_2?>>Rare</option>
-                                <option value='3' <?=$selected_3?>>Hero</option>
-                                <option value='4' <?=$selected_4?>>Legend</option>
+                                <option value='0' <?=$selected[0]?>>Normal</option>
+                                <option value='1' <?=$selected[1]?>>Magic</option>
+                                <option value='2' <?=$selected[2]?>>Rare</option>
+                                <option value='3' <?=$selected[3]?>>Hero</option>
+                                <option value='4' <?=$selected[4]?>>Legend</option>
                             </select>
                             </select>
                             -
                             -
 <?php
 <?php
-                            $selected_0 = "";
-                            $selected_1 = "";
-                            $selected_2 = "";
-                            $selected_3 = "";
-                            $selected_4 = "";
-                            switch (strtoupper($page->filters["rune_max_quality"])){
-                                case 0:
-                                    $selected_0 = "selected";
-                                    break;
-                                case 1:
-                                    $selected_1 = "selected";
-                                    break;
-                                case 2:
-                                    $selected_2 = "selected";
-                                    break;
-                                case 3:
-                                    $selected_3 = "selected";
-                                    break;
-                                case 4:
-                                    $selected_4 = "selected";
-                                    break;
-                            }
+                            $selected = Array("", "", "", "", "");
+                            $selected[$page->filters["rune_max_quality"]] = "selected";
 ?>
 ?>
                             <select name='rune_max_quality' id='filter_quality_max'>
                             <select name='rune_max_quality' id='filter_quality_max'>
-                                <option value='0' <?=$selected_0?>>Normal</option>
-                                <option value='1' <?=$selected_1?>>Magic</option>
-                                <option value='2' <?=$selected_2?>>Rare</option>
-                                <option value='3' <?=$selected_3?>>Hero</option>
-                                <option value='4' <?=$selected_4?>>Legend</option>
+                                <option value='0' <?=$selected[0]?>>Normal</option>
+                                <option value='1' <?=$selected[1]?>>Magic</option>
+                                <option value='2' <?=$selected[2]?>>Rare</option>
+                                <option value='3' <?=$selected[3]?>>Hero</option>
+                                <option value='4' <?=$selected[4]?>>Legend</option>
                             </select>
                             </select>
                         </td>
                         </td>
                     </tr>
                     </tr>
@@ -219,67 +138,27 @@
                         <td class='filter' colspan='3'>
                         <td class='filter' colspan='3'>
                             <span>Original quality:</span>
                             <span>Original quality:</span>
 <?php
 <?php
-                            $selected_0 = "";
-                            $selected_1 = "";
-                            $selected_2 = "";
-                            $selected_3 = "";
-                            $selected_4 = "";
-                            switch (strtoupper($page->filters["rune_min_original_quality"])){
-                                case 0:
-                                    $selected_0 = "selected";
-                                    break;
-                                case 1:
-                                    $selected_1 = "selected";
-                                    break;
-                                case 2:
-                                    $selected_2 = "selected";
-                                    break;
-                                case 3:
-                                    $selected_3 = "selected";
-                                    break;
-                                case 4:
-                                    $selected_4 = "selected";
-                                    break;
-                            }
+                            $selected = Array("", "", "", "", "");
+                            $selected[$page->filters["rune_min_original_quality"]] = "selected";
 ?>
 ?>
                             <select name='rune_min_original_quality' id='filter_original_quality_min'>
                             <select name='rune_min_original_quality' id='filter_original_quality_min'>
-                                <option value='0' <?=$selected_0?>>Normal</option>
-                                <option value='1' <?=$selected_1?>>Magic</option>
-                                <option value='2' <?=$selected_2?>>Rare</option>
-                                <option value='3' <?=$selected_3?>>Hero</option>
-                                <option value='4' <?=$selected_4?>>Legend</option>
+                                <option value='0' <?=$selected[0]?>>Normal</option>
+                                <option value='1' <?=$selected[1]?>>Magic</option>
+                                <option value='2' <?=$selected[2]?>>Rare</option>
+                                <option value='3' <?=$selected[3]?>>Hero</option>
+                                <option value='4' <?=$selected[4]?>>Legend</option>
                             </select>
                             </select>
                             -
                             -
 <?php
 <?php
-                            $selected_0 = "";
-                            $selected_1 = "";
-                            $selected_2 = "";
-                            $selected_3 = "";
-                            $selected_4 = "";
-                            switch (strtoupper($page->filters["rune_max_quality"])){
-                                case 0:
-                                    $selected_0 = "selected";
-                                    break;
-                                case 1:
-                                    $selected_1 = "selected";
-                                    break;
-                                case 2:
-                                    $selected_2 = "selected";
-                                    break;
-                                case 3:
-                                    $selected_3 = "selected";
-                                    break;
-                                case 4:
-                                    $selected_4 = "selected";
-                                    break;
-                            }
+                            $selected = Array("", "", "", "", "");
+                            $selected[$page->filters["rune_max_original_quality"]] = "selected";
 ?>
 ?>
                             <select name='rune_max_original_quality' id='filter_original_quality_max'>
                             <select name='rune_max_original_quality' id='filter_original_quality_max'>
-                                <option value='0' <?=$selected_0?>>Normal</option>
-                                <option value='1' <?=$selected_1?>>Magic</option>
-                                <option value='2' <?=$selected_2?>>Rare</option>
-                                <option value='3' <?=$selected_3?>>Hero</option>
-                                <option value='4' <?=$selected_4?>>Legend</option>
+                                <option value='0' <?=$selected[0]?>>Normal</option>
+                                <option value='1' <?=$selected[1]?>>Magic</option>
+                                <option value='2' <?=$selected[2]?>>Rare</option>
+                                <option value='3' <?=$selected[3]?>>Hero</option>
+                                <option value='4' <?=$selected[4]?>>Legend</option>
                             </select>
                             </select>
                         </td>
                         </td>
                     </tr>
                     </tr>
@@ -312,35 +191,15 @@
                         <td class='filter filter_separator' colspan='2'>
                         <td class='filter filter_separator' colspan='2'>
                             <span>Min. O. quality:</span>
                             <span>Min. O. quality:</span>
 <?php
 <?php
-                            $selected_0 = "";
-                            $selected_1 = "";
-                            $selected_2 = "";
-                            $selected_3 = "";
-                            $selected_4 = "";
-                            switch (strtoupper($page->filters["alternative_min_original_quality"])){
-                                case 0:
-                                    $selected_0 = "selected";
-                                    break;
-                                case 1:
-                                    $selected_1 = "selected";
-                                    break;
-                                case 2:
-                                    $selected_2 = "selected";
-                                    break;
-                                case 3:
-                                    $selected_3 = "selected";
-                                    break;
-                                case 4:
-                                    $selected_4 = "selected";
-                                    break;
-                            }
+                            $selected = Array("", "", "", "", "");
+                            $selected[$page->filters["alternative_min_original_quality"]] = "selected";
 ?>
 ?>
                             <select name='alternative_min_original_quality' id='filter_original_quality_min'>
                             <select name='alternative_min_original_quality' id='filter_original_quality_min'>
-                                <option value='0' <?=$selected_0?>>Normal</option>
-                                <option value='1' <?=$selected_1?>>Magic</option>
-                                <option value='2' <?=$selected_2?>>Rare</option>
-                                <option value='3' <?=$selected_3?>>Hero</option>
-                                <option value='4' <?=$selected_4?>>Legend</option>
+                                <option value='0' <?=$selected[0]?>>Normal</option>
+                                <option value='1' <?=$selected[1]?>>Magic</option>
+                                <option value='2' <?=$selected[2]?>>Rare</option>
+                                <option value='3' <?=$selected[3]?>>Hero</option>
+                                <option value='4' <?=$selected[4]?>>Legend</option>
                             </select>
                             </select>
                         </td>
                         </td>
                         <td class='filter filter_separator'>
                         <td class='filter filter_separator'>
@@ -352,40 +211,17 @@
                         <td class='filter' colspan='4'>
                         <td class='filter' colspan='4'>
                             <span>Condition:</span>
                             <span>Condition:</span>
 <?php
 <?php
-                            $selected_0 = "";
-                            $selected_1 = "";
-                            $selected_2 = "";
-                            $selected_3 = "";
-                            $selected_4 = "";
-                            $selected_5 = "";
-                            switch (strtoupper($page->filters["alternative_condition"])){
-                                case 0:
-                                    $selected_0 = "selected";
-                                    break;
-                                case 1:
-                                    $selected_1 = "selected";
-                                    break;
-                                case 2:
-                                    $selected_2 = "selected";
-                                    break;
-                                case 3:
-                                    $selected_3 = "selected";
-                                    break;
-                                case 4:
-                                    $selected_4 = "selected";
-                                    break;
-                                case 5:
-                                    $selected_5 = "selected";
-                                    break;
-                            }
+                            $selected = Array("", "", "", "", "");
+                            $selected[$page->filters["alternative_condition"]] = "selected";
+
 ?>
 ?>
                             <select name='alternative_condition'>
                             <select name='alternative_condition'>
-                                <option value='0' <?=$selected_0?>>Higher grade, any quality
-                                <option value='1' <?=$selected_1?>>Higher grade or higher quality
-                                <option value='2' <?=$selected_2?>>Equal or higher grade and equal or higher quality</option>
-                                <option value='3' <?=$selected_3?>>Equal or higher grade and higher quality</option>
-                                <option value='4' <?=$selected_4?>>Equal grade and equal or higher quality</option>
-                                <option value='5' <?=$selected_5?>>Higher grade and higher quality</option>
+                                <option value='0' <?=$selected[0]?>>Higher grade, any quality
+                                <option value='1' <?=$selected[1]?>>Higher grade or higher quality
+                                <option value='2' <?=$selected[2]?>>Equal or higher grade and equal or higher quality</option>
+                                <option value='3' <?=$selected[3]?>>Equal or higher grade and higher quality</option>
+                                <option value='4' <?=$selected[4]?>>Equal grade and equal or higher quality</option>
+                                <option value='5' <?=$selected[5]?>>Higher grade and higher quality</option>
                             </select>
                             </select>
                         </td>
                         </td>
                     </tr>
                     </tr>
@@ -393,29 +229,13 @@
                         <td class='filter' colspan='4'>
                         <td class='filter' colspan='4'>
                             <span>Source:</span>
                             <span>Source:</span>
 <?php
 <?php
-                            $selected_0 = "";
-                            $selected_1 = "";
-                            $selected_2 = "";
-                            $selected_3 = "";
-                            switch (strtoupper($page->filters["alternative_source"])){
-                                case 0:
-                                    $selected_0 = "selected";
-                                    break;
-                                case 1:
-                                    $selected_1 = "selected";
-                                    break;
-                                case 2:
-                                    $selected_2 = "selected";
-                                    break;
-                                case 3:
-                                    $selected_3 = "selected";
-                                    break;
-                            }
+                            $selected = Array("", "", "", "");
+                            $selected[$page->filters["alternative_source"]] = "selected";
 ?>
 ?>
                             <select name='alternative_source'>
                             <select name='alternative_source'>
-                                <option value='0' <?=$selected_0?>>Inventory only</option>
-                                <option value='1' <?=$selected_1?>>Inventory or assigned to a lower grade monster</option>
-                                <option value='2' <?=$selected_2?>>Any</option>
+                                <option value='0' <?=$selected[0]?>>Inventory only</option>
+                                <option value='1' <?=$selected[1]?>>Inventory or assigned to a lower grade monster</option>
+                                <option value='2' <?=$selected[2]?>>Any</option>
                             </select>
                             </select>
                         </td>
                         </td>
                     </tr>
                     </tr>
@@ -427,52 +247,18 @@
         </section> <!-- #filters -->
         </section> <!-- #filters -->
 <?php
 <?php
             foreach ($page->upgrades as $upgrade){
             foreach ($page->upgrades as $upgrade){
-                if ($upgrade["unit"]->unit->awakens_from == "" && $upgrade["unit"]->unit->awakens_to == ""){
-                    // No to, no from, silver monster.
-                    $star_class ="star_silver";
-                    $mon_title = $upgrade["unit"]->unit->element_name . " " . $upgrade["unit"]->unit->name;
-                }
-                elseif ($upgrade["unit"]->unit->awakens_from =! "" && $upgrade["unit"]->unit->awakens_to == ""){
-                    // Already awakened
-                    if ($upgrade["unit"]->unit->base_stars - $upgrade["unit"]->unit->natural_stars == 1){
-                        // Normal awaken.
-                        $star_class ="star_purple";
-                    }
-                    else{
-                        // Second awaken.
-                        $star_class ="star_red";
-                    }
-                    $mon_title = $upgrade["unit"]->unit->name;
-                }
-                elseif ($upgrade["unit"]->unit->awakens_to =! ""){
-                    // Awakeable.
-                    $star_class ="star_gold";
-                    $mon_title = $upgrade["unit"]->unit->element . " " . $upgrade["unit"]->unit->name;
-                }
 ?>
 ?>
             <section class='content'>
             <section class='content'>
                 <h2>
                 <h2>
                     <span>
                     <span>
-                        <?=$mon_title?>
+                        <?=$upgrade["unit"]->title?>
                     </span>
                     </span>
                 </h2>
                 </h2>
                 <article>
                 <article>
                     <div class='monster'>
                     <div class='monster'>
                         <div class='profile'>
                         <div class='profile'>
                             <div class='monster_panel'>
                             <div class='monster_panel'>
-                                <span class='stars'>
-<?php
-                                        for ($i = 0; $i < $upgrade["unit"]->stars; $i ++){
-?>
-                                        <img class='star <?=$star_class?>' src='<?=$path["img"]["layout"] . "icon/star.png"?>'/>
-<?php
-                                        }
-?>
-                                </span>
-                                <img title='<?=$mon_title?>' class='monster border_<?=$upgrade["unit"]->unit->element_name?>' src='<?=$upgrade["unit"]->unit->get_image()?>'/>
-                                <span class='level'>
-                                    Lv. <?=$upgrade["unit"]->level?>
-                                </span>
+                                <?=html_unit_panel($upgrade["unit"])?>
                             </div>
                             </div>
                         </div> <!-- .profile -->
                         </div> <!-- .profile -->
                     </div>
                     </div>
@@ -480,581 +266,16 @@
 <?php
 <?php
                         foreach ($upgrade["upgrade"] as $rupgrade){
                         foreach ($upgrade["upgrade"] as $rupgrade){
 ?>
 ?>
-                        <table class='rune'>
-                            <tr>
-                                <td class='icon'>
-                                    <div class='rune_panel rune_slot_<?=$rupgrade["rune"]->slot?> rune_level_<?=$rupgrade["rune"]->level?> rune_quality_<?=strtolower($rupgrade["rune"]->quality_name)?> rune_original_quality_<?=strtolower($rupgrade["rune"]->original_quality_name)?> rune_ancient_<?=$rupgrade["rune"]->ancient?>'>
-                                        <img class='rune_base' src='<?=$path["img"]["layout"]?>rune/base.png'/>
-                                        <img class='rune_icon' src='<?=$rupgrade["rune"]->type->get_image()?>'/>
-                                        <span class='rune_stars'>
-<?php
-                                                for ($i = 0; $i < $rupgrade["rune"]->stars; $i ++){
-?>
-                                                <img class='star' src='<?=$path["img"]["layout"] . "icon/star.png"?>'/>
-<?php
-                                                }
-?>
-                                        </span>
-                                        <span class='rune_level'>
-                                            <?=$rupgrade["rune"]->level?>
-                                        </span>
-                                    </div> <!-- .rune_panel -->
-                                </td>
-                                <td class='stats'>
-                                    <table>
-                                        <tr class='main_stat'>
-                                            <td class='stat'>
-<?php
-                                                if (in_array($rupgrade["rune"]->main_stat_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                    $stat_name = str_replace("%", "", $rupgrade["rune"]->main_stat_name);
-                                                    $stat_value = "+ " . $rupgrade["rune"]->main_stat_value . "%";
-                                                }
-                                                else{
-                                                    $stat_name = $rupgrade["rune"]->main_stat_name;
-                                                    $stat_value = "+ " . $rupgrade["rune"]->main_stat_value;
-                                                }
-?>
-                                                <?=$stat_name?>
-                                            </td>
-                                            <td class='value'>
-                                                <?=$stat_value?>
-                                            </td>
-                                        </tr>
-                                        <tr class='innate_stat'>
-                                            <td class='stat'>
-<?php
-                                                if (strlen($rupgrade["rune"]->innate_stat_name) == 0){
-                                                    $stat_name = "&nbsp;";
-                                                    $stat_value = "";
-                                                }
-                                                elseif (in_array($rupgrade["rune"]->innate_stat_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                    $stat_name = str_replace("%", "", $rupgrade["rune"]->innate_stat_name);
-                                                    $stat_value = "+ " . $rupgrade["rune"]->innate_stat_value . "%";
-                                                }
-                                                else{
-                                                    $stat_name = $rupgrade["rune"]->innate_stat_name;
-                                                    $stat_value = "+ " . $rupgrade["rune"]->innate_stat_value;
-                                                }
-?>
-                                                <?=$stat_name?>
-                                            </td>
-                                            <td class='value'>
-                                                <?=$stat_value?>
-                                            </td>
-                                        </tr>
-                                        <tr class=substat>
-                                            <td class='stat'>
-<?php
-                                                    if (strlen($rupgrade["rune"]->substat_1_name) == 0){
-                                                        $stat_name = "&nbsp;";
-                                                        $stat_value = "";
-                                                    }
-                                                    elseif (in_array($rupgrade["rune"]->substat_1_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                        $stat_name = str_replace("%", "", $rupgrade["rune"]->substat_1_name);
-                                                        $stat_value = "+ " . $rupgrade["rune"]->substat_1_value . "%";
-                                                    }
-                                                    else{
-                                                        $stat_name = $rupgrade["rune"]->substat_1_name;
-                                                        $stat_value = "+ " . $rupgrade["rune"]->substat_1_value;
-                                                    }
-                                                    $grind = "";
-                                                    if ($rupgrade["rune"]->substat_1_grind > 0){
-                                                        $grind = "+" . $rupgrade["rune"]->substat_1_grind;
-                                                        if (in_array($rupgrade["rune"]->substat_1_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                            $grind = $grind . "%";
-                                                        }
-                                                    }
-?>
-                                                <?=$stat_name?>
-                                            </td>
-                                            <td class='value'>
-                                                <?=$stat_value?>
-                                                <span class='grind grind_<?=$grind?>'>
-                                                    <?=$grind?>
-                                                </span>
-<?php
-                                                if ($rupgrade["rune"]->substat_1_enchant == 1){
-?>
-                                                    <img title='Enchanted' src='<?=$path["img"]["layout"]?>rune/enchanted.png'/>
-<?php
-                                                }
-?>
-                                            </td>
-                                        </tr>
-                                        <tr class=substat>
-                                            <td class='stat'>
-<?php
-                                                if (strlen($rupgrade["rune"]->substat_2_name) == 0){
-                                                    $stat_name = "&nbsp;";
-                                                    $stat_value = "";
-                                                }
-                                                elseif (in_array($rupgrade["rune"]->substat_2_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                    $stat_name = str_replace("%", "", $rupgrade["rune"]->substat_2_name);
-                                                    $stat_value = "+ " . $rupgrade["rune"]->substat_2_value . "%";
-                                                }
-                                                else{
-                                                    $stat_name = $rupgrade["rune"]->substat_2_name;
-                                                    $stat_value = "+ " . $rupgrade["rune"]->substat_2_value;
-                                                }
-                                                $grind = "";
-                                                if ($rupgrade["rune"]->substat_2_grind > 0){
-                                                    $grind = "+" . $rupgrade["rune"]->substat_2_grind;
-                                                    if (in_array($rupgrade["rune"]->substat_2_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                        $grind = $grind . "%";
-                                                    }
-                                                }
-?>
-                                                <?=$stat_name?>
-                                            </td>
-                                            <td class='value'>
-                                                <?=$stat_value?>
-                                                <span class='grind grind_<?=$grind?>'>
-                                                    <?=$grind?>
-                                                </span>
-<?php
-                                                if ($rupgrade["rune"]->substat_2_enchant == 1){
-?>
-                                                    <img title='Enchanted' src='<?=$path["img"]["layout"]?>rune/enchanted.png'/>
-<?php
-                                                }
-?>
-                                            </td>
-                                        </tr>
-                                        <tr class=substat>
-                                            <td class='stat'>
-<?php
-                                                if (strlen($rupgrade["rune"]->substat_3_name) == 0){
-                                                    $stat_name = "&nbsp;";
-                                                    $stat_value = "";
-                                                }
-                                                elseif (in_array($rupgrade["rune"]->substat_3_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                    $stat_name = str_replace("%", "", $rupgrade["rune"]->substat_3_name);
-                                                    $stat_value = "+ " . $rupgrade["rune"]->substat_3_value . "%";
-                                                }
-                                                else{
-                                                    $stat_name = $rupgrade["rune"]->substat_3_name;
-                                                    $stat_value = "+ " . $rupgrade["rune"]->substat_3_value;
-                                                }
-                                                $grind = "";
-                                                if ($rupgrade["rune"]->substat_3_grind > 0){
-                                                    $grind = "+" . $rupgrade["rune"]->substat_3_grind;
-                                                    if (in_array($rupgrade["rune"]->substat_3_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                        $grind = $grind . "%";
-                                                    }
-                                                }
-?>
-                                                <?=$stat_name?>
-                                            </td>
-                                            <td class='value'>
-                                                <?=$stat_value?>
-                                                <span class='grind grind_<?=$grind?>'>
-                                                    <?=$grind?>
-                                                </span>
-<?php
-                                                if ($rupgrade["rune"]->substat_3_enchant == 1){
-?>
-                                                    <img title='Enchanted' src='<?=$path["img"]["layout"]?>rune/enchanted.png'/>
-<?php
-                                                }
-?>
-                                            </td>
-                                        </tr>
-                                        <tr class=substat>
-                                            <td class='stat'>
-<?php
-                                                if (strlen($rupgrade["rune"]->substat_4_name) == 0){
-                                                    $stat_name = "&nbsp;";
-                                                    $stat_value = "";
-                                                }
-                                                elseif (in_array($rupgrade["rune"]->substat_4_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                    $stat_name = str_replace("%", "", $rupgrade["rune"]->substat_4_name);
-                                                    $stat_value = "+ " . $rupgrade["rune"]->substat_4_value . "%";
-                                                }
-                                                else{
-                                                    $stat_name = $rupgrade["rune"]->substat_4_name;
-                                                    $stat_value = "+ " . $rupgrade["rune"]->substat_4_value;
-                                                }
-                                                $grind = "";
-                                                if ($rupgrade["rune"]->substat_4_grind > 0){
-                                                    $grind = "+" . $rupgrade["rune"]->substat_4_grind;
-                                                    if (in_array($rupgrade["rune"]->substat_4_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                        $grind = $grind . "%";
-                                                    }
-                                                }
-                                                ?>
-                                                <?=$stat_name?>
-                                            </td>
-                                            <td class='value'>
-                                                <?=$stat_value?>
-                                                <span class='grind grind_<?=$grind?>'>
-                                                    <?=$grind?>
-                                                </span>
-<?php
-                                                if ($rupgrade["rune"]->substat_4_enchant == 1){
-?>
-                                                    <img title='Enchanted' src='<?=$path["img"]["layout"]?>rune/enchanted.png'/>
-<?php
-                                                }
-?>
-                                            </td>
-                                        </tr>
-                                    </table>
-                                </td>
-                                <td class='details'>
-                                    <table class='table_details'>
-                                        <tr>
-                                            <td class='title'>
-                                                Quality:
-                                            </td>
-                                            <td class='value'>
-                                                <span class='quality quality_<?=strtolower($rupgrade["rune"]->quality_name)?>'>
-                                                    <?=$rupgrade["rune"]->quality_name?>
-                                                </span>
-                                            </td>
-                                        </tr>
-                                        <tr>
-                                            <td class='title'>
-                                                Original quality:
-                                            </td>
-                                            <td class='value'>
-                                                <span class='quality quality_<?=strtolower($rupgrade["rune"]->original_quality_name)?>'>
-                                                    <?=$rupgrade["rune"]->original_quality_name?>
-                                                </span>
-                                            </td>
-                                        </tr>
-                                        <tr>
-                                            <td class='title'>
-                                                Value:
-                                            </td>
-                                            <td class='value'>
-                                                <?=$rupgrade["rune"]->value?>
-                                            </td>
-                                        </tr>
-                                        <tr>
-                                            <td class='title'>
-                                                Efficiency:
-                                            </td>
-                                            <td class='value'>
-                                                <?=number_format($rupgrade["rune"]->efficiency, 2)?>%
-                                            </td>
-                                        </tr>
-                                        <tr>
-                                            <td class='title'>
-                                                Max. efficiency:
-                                            </td>
-                                            <td class='value'>
-                                                <?=number_format($rupgrade["rune"]->max_efficiency, 2)?>%
-                                            </td>
-                                        </tr>
-                                        <tr>
-                                            <td class='title'>
-                                                Reached efficiency:
-                                            </td>
-                                            <td class='value'>
-                                                <?=number_format($rupgrade["rune"]->efficiency * 100 / $rupgrade["rune"]->max_efficiency)?>%
-                                            </td>
-                                        </tr>
-                                    </table>
-                                </td>
-                            </tr>
-                        </table> <!-- .rune -->
-                        <div class='alternatives'>
+                            <?=html_rune_table($rupgrade["rune"])?>
+                            <div class='alternatives'>
 <?php
 <?php
                                 foreach ($rupgrade["alternative"] as $alternative){
                                 foreach ($rupgrade["alternative"] as $alternative){
 ?>
 ?>
-                                <table class='rune alternative'>
-                                    <tr>
-                                        <td class='icon'>
-                                            <div class='rune_panel rune_slot_<?=$alternative->slot?> rune_level_<?=$alternative->level?> rune_quality_<?=strtolower($alternative->quality_name)?> rune_original_quality_<?=strtolower($alternative->original_quality_name)?> rune_ancient_<?=$alternative->ancient?>'>
-                                                <img class='rune_base' src='<?=$path["img"]["layout"]?>rune/base.png'/>
-                                                <img class='rune_icon' src='<?=$alternative->type->get_image()?>'/>
-                                                <span class='rune_stars'>
-<?php
-                                                        for ($i = 0; $i < $alternative->stars; $i ++){
-?>
-                                                        <img class='star' src='<?=$path["img"]["layout"] . "icon/star.png"?>'/>
-<?php
-                                                        }
-?>
-                                                </span>
-                                                <span class='rune_level'>
-                                                    <?=$alternative->level?>
-                                                </span>
-                                            </div> <!-- .rune_panel -->
-<?php
-                                            if ($page->filters["alternative_source"] > 0 && null != $alternative->assigned_to){
-?>
-                                                <div class='assigned'>
-                                                    <a target='blank' href='/monsters/<?=$alternative->assigned_to->id?>'>
-                                                        <img title='<?=$alternative->assigned_to->unit->name?>' class='monster_image border_<?=$alternative->assigned_to->unit->element?>' src='<?=$alternative->assigned_to->unit->get_image()?>'/>
-                                                    </a>
-                                                </div>
-<?php
-                                            }
-?>
-                                        </td>
-                                        <td class='stats'>
-                                            <table>
-                                                <tr class='main_stat'>
-                                                    <td class='stat'>
-<?php
-                                                            if (in_array($alternative->main_stat_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                                $stat_name = str_replace("%", "", $alternative->main_stat_name);
-                                                                $stat_value = "+ " . $alternative->main_stat_value . "%";
-                                                            }
-                                                            else{
-                                                                $stat_name = $alternative->main_stat_name;
-                                                                $stat_value = "+ " . $alternative->main_stat_value;
-                                                            }
-?>
-                                                        <?=$stat_name?>
-                                                    </td>
-                                                    <td class='value'>
-                                                        <?=$stat_value?>
-                                                    </td>
-                                                </tr>
-                                                <tr class='innate_stat'>
-                                                    <td class='stat'>
-<?php
-                                                            if (strlen($alternative->innate_stat_name) == 0){
-                                                                $stat_name = "&nbsp;";
-                                                                $stat_value = "";
-                                                            }
-                                                            elseif (in_array($alternative->innate_stat_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                                $stat_name = str_replace("%", "", $alternative->innate_stat_name);
-                                                                $stat_value = "+ " . $alternative->innate_stat_value . "%";
-                                                            }
-                                                            else{
-                                                                $stat_name = $alternative->innate_stat_name;
-                                                                $stat_value = "+ " . $alternative->innate_stat_value;
-                                                            }
-?>
-                                                        <?=$stat_name?>
-                                                    </td>
-                                                    <td class='value'>
-                                                        <?=$stat_value?>
-                                                    </td>
-                                                </tr>
-                                                <tr class=substat>
-                                                    <td class='stat'>
-<?php
-                                                            if (strlen($alternative->substat_1_name) == 0){
-                                                                $stat_name = "&nbsp;";
-                                                                $stat_value = "";
-                                                            }
-                                                            elseif (in_array($alternative->substat_1_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                                $stat_name = str_replace("%", "", $alternative->substat_1_name);
-                                                                $stat_value = "+ " . $alternative->substat_1_value . "%";
-                                                            }
-                                                            else{
-                                                                $stat_name = $alternative->substat_1_name;
-                                                                $stat_value = "+ " . $alternative->substat_1_value;
-                                                            }
-                                                            $grind = "";
-                                                            if ($alternative->substat_1_grind > 0){
-                                                                $grind = "+" . $alternative->substat_1_grind;
-                                                                if (in_array($alternative->substat_1_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                                    $grind = $grind . "%";
-                                                                }
-                                                            }
-?>
-                                                        <?=$stat_name?>
-                                                    </td>
-                                                    <td class='value'>
-                                                        <?=$stat_value?>
-                                                        <span class='grind grind_<?=$grind?>'>
-                                                            <?=$grind?>
-                                                        </span>
-<?php
-                                                        if ($alternative->substat_1_enchant == 1){
-?>
-                                                            <img title='Enchanted' src='<?=$path["img"]["layout"]?>rune/enchanted.png'/>
-<?php
-                                                        }
-?>
-                                                    </td>
-                                                </tr>
-                                                <tr class=substat>
-                                                    <td class='stat'>
-<?php
-                                                            if (strlen($alternative->substat_2_name) == 0){
-                                                                $stat_name = "&nbsp;";
-                                                                $stat_value = "";
-                                                            }
-                                                            elseif (in_array($alternative->substat_2_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                                $stat_name = str_replace("%", "", $alternative->substat_2_name);
-                                                                $stat_value = "+ " . $alternative->substat_2_value . "%";
-                                                            }
-                                                            else{
-                                                                $stat_name = $alternative->substat_2_name;
-                                                                $stat_value = "+ " . $alternative->substat_2_value;
-                                                            }
-                                                            $grind = "";
-                                                            if ($alternative->substat_2_grind > 0){
-                                                                $grind = "+" . $alternative->substat_2_grind;
-                                                                if (in_array($alternative->substat_2_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                                    $grind = $grind . "%";
-                                                                }
-                                                            }
-                                                            ?>
-                                                        <?=$stat_name?>
-                                                    </td>
-                                                    <td class='value'>
-                                                        <?=$stat_value?>
-                                                        <span class='grind grind_<?=$grind?>'>
-                                                            <?=$grind?>
-                                                        </span>
-<?php
-                                                        if ($alternative->substat_2_enchant == 1){
-?>
-                                                            <img title='Enchanted' src='<?=$path["img"]["layout"]?>rune/enchanted.png'/>
-<?php
-                                                        }
-?>
-                                                    </td>
-                                                </tr>
-                                                <tr class=substat>
-                                                    <td class='stat'>
-<?php
-                                                            if (strlen($alternative->substat_3_name) == 0){
-                                                                $stat_name = "&nbsp;";
-                                                                $stat_value = "";
-                                                            }
-                                                            elseif (in_array($alternative->substat_3_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                                $stat_name = str_replace("%", "", $alternative->substat_3_name);
-                                                                $stat_value = "+ " . $alternative->substat_3_value . "%";
-                                                            }
-                                                            else{
-                                                                $stat_name = $alternative->substat_3_name;
-                                                                $stat_value = "+ " . $alternative->substat_3_value;
-                                                            }
-                                                            $grind = "";
-                                                            if ($alternative->substat_3_grind > 0){
-                                                                $grind = "+" . $alternative->substat_3_grind;
-                                                                if (in_array($alternative->substat_3_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                                    $grind = $grind . "%";
-                                                                }
-                                                            }
-                                                            ?>
-                                                        <?=$stat_name?>
-                                                    </td>
-                                                    <td class='value'>
-                                                        <?=$stat_value?>
-                                                        <span class='grind grind_<?=$grind?>'>
-                                                            <?=$grind?>
-                                                        </span>
-<?php
-                                                        if ($alternative->substat_3_enchant == 1){
-?>
-                                                            <img title='Enchanted' src='<?=$path["img"]["layout"]?>rune/enchanted.png'/>
-<?php
-                                                        }
-?>
-                                                    </td>
-                                                </tr>
-                                                <tr class=substat>
-                                                    <td class='stat'>
-<?php
-                                                            if (strlen($alternative->substat_4_name) == 0){
-                                                                $stat_name = "&nbsp;";
-                                                                $stat_value = "";
-                                                            }
-                                                            elseif (in_array($alternative->substat_4_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                                $stat_name = str_replace("%", "", $alternative->substat_4_name);
-                                                                $stat_value = "+ " . $alternative->substat_4_value . "%";
-                                                            }
-                                                            else{
-                                                                $stat_name = $alternative->substat_4_name;
-                                                                $stat_value = "+ " . $alternative->substat_4_value;
-                                                            }
-                                                            $grind = "";
-                                                            if ($alternative->substat_4_grind > 0){
-                                                                $grind = "+" . $alternative->substat_4_grind;
-                                                                if (in_array($alternative->substat_4_name, array("CRR", "CRD", "RES", "ACC", "HP%", "ATK%", "DEF%"))){
-                                                                    $grind = $grind . "%";
-                                                                }
-                                                            }
-                                                            ?>
-                                                        <?=$stat_name?>
-                                                    </td>
-                                                    <td class='value'>
-                                                        <?=$stat_value?>
-                                                        <span class='grind grind_<?=$grind?>'>
-                                                            <?=$grind?>
-                                                        </span>
-<?php
-                                                        if ($alternative->substat_4_enchant == 1){
-?>
-                                                            <img title='Enchanted' src='<?=$path["img"]["layout"]?>rune/enchanted.png'/>
-<?php
-                                                        }
-?>
-                                                    </td>
-                                                </tr>
-                                            </table>
-                                        </td>
-                                        <td class='details'>
-                                            <table class='table_details'>
-                                                <tr>
-                                                    <td class='title'>
-                                                        Quality:
-                                                    </td>
-                                                    <td class='value'>
-                                                        <span class='quality quality_<?=strtolower($alternative->quality_name)?>'>
-                                                            <?=$alternative->quality_name?>
-                                                        </span>
-                                                    </td>
-                                                </tr>
-                                                <tr>
-                                                    <td class='title'>
-                                                        Original quality:
-                                                    </td>
-                                                    <td class='value'>
-                                                        <span class='quality quality_<?=strtolower($alternative->original_quality_name)?>'>
-                                                            <?=$alternative->original_quality_name?>
-                                                        </span>
-                                                    </td>
-                                                </tr>
-                                                <tr>
-                                                    <td class='title'>
-                                                        Value:
-                                                    </td>
-                                                    <td class='value'>
-                                                        <?=$alternative->value?>
-                                                    </td>
-                                                </tr>
-                                                <tr>
-                                                    <td class='title'>
-                                                        Efficiency:
-                                                    </td>
-                                                    <td class='value'>
-                                                        <?=number_format($alternative->efficiency, 2)?>%
-                                                    </td>
-                                                </tr>
-                                                <tr>
-                                                    <td class='title'>
-                                                        Max. efficiency:
-                                                    </td>
-                                                    <td class='value'>
-                                                        <?=number_format($alternative->max_efficiency, 2)?>%
-                                                    </td>
-                                                </tr>
-                                                <tr>
-                                                    <td class='title'>
-                                                        Reached efficiency:
-                                                    </td>
-                                                    <td class='value'>
-                                                        <?=number_format($alternative->efficiency * 100 / $alternative->max_efficiency)?>%
-                                                    </td>
-                                                </tr>
-                                            </table>
-                                        </td>
-                                    </tr>
-                                </table> <!-- .alternative -->
+                                    <?=html_rune_table($alternative, $alternative->assigned_to)?>
 <?php
 <?php
                                 }
                                 }
 ?>
 ?>
-                        </div>
+                            </div>
 <?php
 <?php
                         }
                         }
 ?>
 ?>

+ 9 - 9
application/view/report_skillup.php

@@ -230,15 +230,15 @@
                                     $maxed = "";
                                     $maxed = "";
                                 }
                                 }
 ?>
 ?>
-                            <div class='skill'>
-                                <img title='<?=$skill->description?>' src='<?=$skill->get_image()?>'/>
-                                <span class='skill_level <?=$maxed?>'>
-                                    <?=$cur_lvl?>/<?=$max_lvl?>
-                                </span>
-                                <span class='skill_name'>
-                                    <?=$skill->name?>
-                                </span>
-                            </div>
+                                <div class='skill'>
+                                    <img title='<?=$skill->description?>' src='<?=$skill->get_image()?>'/>
+                                    <span class='skill_level <?=$maxed?>'>
+                                        <?=$cur_lvl?>/<?=$max_lvl?>
+                                    </span>
+                                    <span class='skill_name'>
+                                        <?=$skill->name?>
+                                    </span>
+                                </div>
 <?php
 <?php
                                 $skill_num ++;
                                 $skill_num ++;
                             }
                             }

+ 44 - 0
data.sql

@@ -32,6 +32,10 @@ CREATE TABLE IF NOT EXISTS k_craft(id INT, name TEXT);
 
 
 CREATE TABLE IF NOT EXISTS k_experience(stars INT, level INT, exp INT);
 CREATE TABLE IF NOT EXISTS k_experience(stars INT, level INT, exp INT);
 
 
+CREATE TABLE IF NOT EXISTS k_guild_skill_group(id INT, name TEXT, description TEXT);
+
+CREATE TABLE IF NOT EXISTS k_guild_skill(id INT, skill_group INT, level INT, effect TEXT);
+
 
 
 INSERT INTO k_difficulty VALUES (0, 'Easy');
 INSERT INTO k_difficulty VALUES (0, 'Easy');
 INSERT INTO k_difficulty VALUES (1, 'Normal');
 INSERT INTO k_difficulty VALUES (1, 'Normal');
@@ -621,3 +625,43 @@ INSERT INTO k_experience VALUES (6, 37, 92332);
 INSERT INTO k_experience VALUES (6, 38, 101712);
 INSERT INTO k_experience VALUES (6, 38, 101712);
 INSERT INTO k_experience VALUES (6, 39, 112046);
 INSERT INTO k_experience VALUES (6, 39, 112046);
 INSERT INTO k_experience VALUES (6, 40, 0);
 INSERT INTO k_experience VALUES (6, 40, 0);
+
+INSERT INTO k_guild_skill_group VALUES (1, 'Crest of Punishment', 'Increases the stats of ally Monsters in Cairos Dungeon');
+INSERT INTO k_guild_skill_group VALUES (2, 'Aura of Purification', 'Increases the stats of ally Monsters in Rift Beast Battles');
+INSERT INTO k_guild_skill_group VALUES (3, 'Pavement of Ancient', 'Increases the stats of ally Monsters in Labyrinths');
+INSERT INTO k_guild_skill_group VALUES (4, 'Pledge of Faith', 'Increases the stats of ally Monsters in Rift Raid Battles');
+INSERT INTO k_guild_skill_group VALUES (5, 'Trade association Alliance', 'Unlocks an aditional slot in the Guild Magic Shop');
+INSERT INTO k_guild_skill_group VALUES (6, 'Mana Purifier', 'Increases the amount of Mana Stones you acquire in all battles');
+INSERT INTO k_guild_skill_group VALUES (7, 'EXP Amplifier', 'Increases the amount of EXP  that all Monsters acquire in battles');
+
+INSERT INTO k_guild_skill VALUES (1, 1, 1, 'HP +2%');
+INSERT INTO k_guild_skill VALUES (2, 1, 6, 'DEF +2%');
+INSERT INTO k_guild_skill VALUES (3, 1, 11, 'ATK +2%');
+INSERT INTO k_guild_skill VALUES (4, 1, 16, 'HP +2%');
+INSERT INTO k_guild_skill VALUES (5, 1, 21, 'DEF +2%');
+INSERT INTO k_guild_skill VALUES (6, 1, 26, 'ATK +2%');
+INSERT INTO k_guild_skill VALUES (7, 2, 2, 'HP +2%');
+INSERT INTO k_guild_skill VALUES (8, 2, 7, 'DEF +2%');
+INSERT INTO k_guild_skill VALUES (9, 2, 12, 'ATK +2%');
+INSERT INTO k_guild_skill VALUES (10, 2, 17, 'HP +2%');
+INSERT INTO k_guild_skill VALUES (11, 2, 22, 'DEF +2%');
+INSERT INTO k_guild_skill VALUES (12, 2, 27, 'ATK +2%');
+INSERT INTO k_guild_skill VALUES (13, 3, 3, 'HP +2%');
+INSERT INTO k_guild_skill VALUES (14, 3, 8, 'DEF +2%');
+INSERT INTO k_guild_skill VALUES (15, 3, 13, 'ATK +2%');
+INSERT INTO k_guild_skill VALUES (16, 3, 18, 'HP +2%');
+INSERT INTO k_guild_skill VALUES (17, 3, 23, 'DEF +2%');
+INSERT INTO k_guild_skill VALUES (18, 3, 28, 'ATK +2%');
+INSERT INTO k_guild_skill VALUES (19, 4, 4, 'HP +2%');
+INSERT INTO k_guild_skill VALUES (20, 4, 9, 'DEF +2%');
+INSERT INTO k_guild_skill VALUES (21, 4, 14, 'ATK +2%');
+INSERT INTO k_guild_skill VALUES (22, 4, 19, 'HP +2%');
+INSERT INTO k_guild_skill VALUES (23, 4, 24, 'DEF +2%');
+INSERT INTO k_guild_skill VALUES (24, 4, 29, 'ATK +2%');
+INSERT INTO k_guild_skill VALUES (25, 5, 5, 'Add 1 more Guild Magic Shop slot');
+INSERT INTO k_guild_skill VALUES (26, 5, 10, 'Add 1 more Guild Magic Shop slot');
+INSERT INTO k_guild_skill VALUES (27, 5, 15, 'Add 1 more Guild Magic Shop slot');
+INSERT INTO k_guild_skill VALUES (28, 5, 20, 'Add 1 more Guild Magic Shop slot');
+INSERT INTO k_guild_skill VALUES (29, 6, 15, 'Gain 5% additional Mana Stones');
+INSERT INTO k_guild_skill VALUES (30, 7, 30, 'Gain 5% additional EXP');
+

+ 34 - 3
install_base.py

@@ -214,11 +214,15 @@ def createDatabase(name):
                 guild_point INT,
                 guild_point INT,
                 darkportal_energy INT,
                 darkportal_energy INT,
                 darkportal_energy_max INT,
                 darkportal_energy_max INT,
+                dimension_energy INT,
+                dimension_energy_max INT,
                 costume_point INT,
                 costume_point INT,
                 costume_point_max INT,
                 costume_point_max INT,
                 honor_medal INT,
                 honor_medal INT,
                 honor_mark INT,
                 honor_mark INT,
-                event_coin INT
+                event_coin INT,
+                storage_slots INT,
+                island INT
             );
             );
         ''')
         ''')
         cursor.execute('''
         cursor.execute('''
@@ -269,8 +273,7 @@ def createDatabase(name):
                 create_time DATETIME,
                 create_time DATETIME,
                 homunculus INT,
                 homunculus INT,
                 homunculus_name TEXT,
                 homunculus_name TEXT,
-                lock INT,
-                notes TEXT
+                lock INT
             );
             );
         ''')
         ''')
         cursor.execute('''
         cursor.execute('''
@@ -346,6 +349,34 @@ def createDatabase(name):
                 unit TEXT
                 unit TEXT
             );
             );
         ''')
         ''')
+        cursor.execute('''
+            CREATE TABLE IF NOT EXISTS guild(
+                id TEXT,
+                name TEXT,
+                level INT,
+                experience INT,
+                recruiting INT,
+                members INT,
+                leader INT,
+                comment TEXT,
+                notice TEXT
+            );
+        ''')
+        cursor.execute('''
+            CREATE TABLE IF NOT EXISTS guild_member(
+                id TEXT,
+                guild TEXT,
+                grade INT,
+                name TEXT,
+                level INT,
+                rating INT,
+                arena_score INT,
+                joined TIMESTAMP,
+                last_login TIMESTAMP,
+                in_war INT,
+                has_defense INT
+            );
+        ''')
         db.commit()
         db.commit()
         cursor.close()
         cursor.close()
         return db
         return db

+ 60 - 6
install_user.py

@@ -33,12 +33,15 @@ def openDatabase(name):
         cursor.execute('''DELETE FROM scenario''')
         cursor.execute('''DELETE FROM scenario''')
         cursor.execute('''DELETE FROM defense''')
         cursor.execute('''DELETE FROM defense''')
         cursor.execute('''DELETE FROM unit''')
         cursor.execute('''DELETE FROM unit''')
+        cursor.execute('''DELETE FROM unit_skill''')
         cursor.execute('''DELETE FROM rune''')
         cursor.execute('''DELETE FROM rune''')
         cursor.execute('''DELETE FROM player''')
         cursor.execute('''DELETE FROM player''')
         cursor.execute('''DELETE FROM building''')
         cursor.execute('''DELETE FROM building''')
         cursor.execute('''DELETE FROM decoration''')
         cursor.execute('''DELETE FROM decoration''')
         cursor.execute('''DELETE FROM inventory''')
         cursor.execute('''DELETE FROM inventory''')
         cursor.execute('''DELETE FROM summon_special''')
         cursor.execute('''DELETE FROM summon_special''')
+        cursor.execute('''DELETE FROM guild''')
+        cursor.execute('''DELETE FROM guild_member''')
         db.commit()
         db.commit()
         cursor.close()
         cursor.close()
         return db
         return db
@@ -99,12 +102,19 @@ def parsePlayer(db, data):
     guild_point = data["wizard_info"]["guild_point"]
     guild_point = data["wizard_info"]["guild_point"]
     darkportal_energy = data["wizard_info"]["darkportal_energy"]
     darkportal_energy = data["wizard_info"]["darkportal_energy"]
     darkportal_energy_max = data["wizard_info"]["darkportal_energy_max"]
     darkportal_energy_max = data["wizard_info"]["darkportal_energy_max"]
+    dimension_energy = data["dimension_hole_info"]["energy"]
+    dimension_energy_max = data["dimension_hole_info"]["energy_max"]
     costume_point = data["wizard_info"]["costume_point"]
     costume_point = data["wizard_info"]["costume_point"]
     costume_point_max = data["wizard_info"]["costume_point_max"]
     costume_point_max = data["wizard_info"]["costume_point_max"]
     honor_medal = data["wizard_info"]["honor_medal"]
     honor_medal = data["wizard_info"]["honor_medal"]
     honor_mark = data["wizard_info"]["honor_mark"]
     honor_mark = data["wizard_info"]["honor_mark"]
     event_coin = data["wizard_info"]["event_coin"]
     event_coin = data["wizard_info"]["event_coin"]
-    insert(db, "player", (uid, name, mana, crystal, country, lang, level, experience, energy, energy_max, energy_per_min, arena_energy, arena_energy_max, rep, social_point, honor_point, guild_point, darkportal_energy, darkportal_energy_max, costume_point, costume_point_max, honor_medal, honor_medal, event_coin))
+    storage_slots = data["unit_depository_slots"]["number"]
+    island_upgrade = 0
+    for island in data["island_info"]:
+        if island["id"] <= 7 and island["open"] == 1:
+            island_upgrade = island["id"]
+    insert(db, "player", (uid, name, mana, crystal, country, lang, level, experience, energy, energy_max, energy_per_min, arena_energy, arena_energy_max, rep, social_point, honor_point, guild_point, darkportal_energy, darkportal_energy_max, dimension_energy, dimension_energy_max, costume_point, costume_point_max, honor_medal, honor_medal, event_coin, storage_slots, island_upgrade))
     db.commit()
     db.commit()
 
 
 """
 """
@@ -181,6 +191,7 @@ Parses unit data (tables unit, unit_skill).
 def parseUnits(db, data):
 def parseUnits(db, data):
     print("Parsing monsters...")
     print("Parsing monsters...")
     uid = data["wizard_info"]["wizard_id"]
     uid = data["wizard_info"]["wizard_id"]
+    lock_list = data["unit_lock_list"]
     for mon in data["unit_list"]:
     for mon in data["unit_list"]:
         id = mon["unit_id"]
         id = mon["unit_id"]
         building = mon["building_id"]
         building = mon["building_id"]
@@ -204,7 +215,10 @@ def parseUnits(db, data):
         create_time = mon["create_time"]
         create_time = mon["create_time"]
         homunculus = mon["homunculus"]
         homunculus = mon["homunculus"]
         homunculus_name = mon["homunculus_name"]
         homunculus_name = mon["homunculus_name"]
-        insert(db, "unit", (uid, id, building, monster, level, stars, hp, attack, defense, speed, crit_rate, crit_damage, resistance, accuracy, experience, exp_gained, exp_gain_rate, costume, attribute, source, create_time, homunculus, homunculus_name, 0, None))
+        lock = 0
+        if id in lock_list:
+            lock = 1
+        insert(db, "unit", (uid, id, building, monster, level, stars, hp, attack, defense, speed, crit_rate, crit_damage, resistance, accuracy, experience, exp_gained, exp_gain_rate, costume, attribute, source, create_time, homunculus, homunculus_name, lock))
         for skill in mon["skills"]:
         for skill in mon["skills"]:
             skill_id = skill[0]
             skill_id = skill[0]
             skill_level = skill[1]
             skill_level = skill[1]
@@ -423,11 +437,50 @@ def parseRunes(db, data):
             insert(db, "rune", (uid, id, assigned_to, runeset, slot, stars, ancient, level, quality, original_quality, value, efficiency, max_efficiency, main_stat, main_stat_value, innate_stat, innate_stat_value, substat_1, substat_1_value, substat_1_enchant, substat_1_grind, substat_2, substat_2_value, substat_2_enchant, substat_2_grind, substat_3, substat_3_value, substat_3_enchant, substat_3_grind, substat_4, substat_4_value, substat_4_enchant, substat_4_grind))
             insert(db, "rune", (uid, id, assigned_to, runeset, slot, stars, ancient, level, quality, original_quality, value, efficiency, max_efficiency, main_stat, main_stat_value, innate_stat, innate_stat_value, substat_1, substat_1_value, substat_1_enchant, substat_1_grind, substat_2, substat_2_value, substat_2_enchant, substat_2_grind, substat_3, substat_3_value, substat_3_enchant, substat_3_grind, substat_4, substat_4_value, substat_4_enchant, substat_4_grind))
     db.commit()
     db.commit()
 
 
+"""
+Parses guild data (tables guild, guild_member).
 
 
-
-
-
-
+:param db: Sqlite database connection.
+:param data: Data in SWEX json file.
+"""
+def parseGuild(db, data):
+    print("Parsing guild...")
+    if len(data["guild"]["guild_info"]) < 1:
+        return
+    guild = data["guild"]["guild_info"]
+    id = guild["guild_id"]
+    name = guild["name"]
+    level = guild["level"]
+    experience = guild["experience"]
+    recruiting = guild["recruit_status"]
+    members = guild["member_now"]
+    leader = guild["master_wizard_id"]
+    comment = guild["comment"]
+    notice = guild["notice"]
+    insert(db, "guild", (id, name, level, experience, recruiting, members, leader, comment, notice))
+    # Single quates ahead, dirty fix
+    for k, member in data["guild"]["guild_members"].items():
+        m = json.loads(str(member).replace("'", '"'))        
+        id = m["wizard_id"]
+        guild = member["guild_id"]
+        grade = member["grade"]
+        name = member["wizard_name"]
+        level = member["wizard_level"]
+        rating = member["rating_id"]
+        arena_score = member["arena_score"]
+        joined = member["join_timestamp"]
+        last_login = member["last_login_timestamp"]
+        in_war = 0 # Checked later
+        has_defense = 0 # Checked later
+        insert(db, "guild_member", (id, guild, grade, name, level, rating, arena_score, joined, last_login, in_war, has_defense))
+    cursor = db.cursor()
+    for war in data["guildwar_member_list"]:
+        cursor.execute("UPDATE guild_member SET in_war = 1 WHERE guild = ? AND id = ?;", (war["guild_id"], war["wizard_id"]))
+    for defense in data["guild_member_defense_list"]:
+        if len(defense["unit_list"]) > 0:
+            cursor.execute("UPDATE guild_member SET has_defense = 1 WHERE id = '" + str(defense["wizard_id"]) + "';")
+    db.commit()
+    cursor.close()
 
 
 """
 """
 Begin script
 Begin script
@@ -444,5 +497,6 @@ parseUnits(db, data)
 parseSummonSpecial(db, data)
 parseSummonSpecial(db, data)
 parseInventory(db, data)
 parseInventory(db, data)
 parseRunes(db, data)
 parseRunes(db, data)
+parseGuild(db, data)
 # TODO rune_craft_item_list
 # TODO rune_craft_item_list
 
 

+ 115 - 0
public/css/guild.css

@@ -0,0 +1,115 @@
+div#guild_details{
+    color: #ffffff;
+    display: inline-block;
+    width: 50%;
+    vertical-align: top;
+}
+div#guild_details span#guild_level{
+    font-size: 300%;
+}
+div#guild_details span#guild_experience{
+    font-style: italic;
+    padding-left: 2em;
+}
+div#guild_details p#guild_comment{
+    color: #00ff00;
+    font-style: italic;
+    margin: 0.5em 1em;
+}
+div#guild_details p#guild_notice{
+    color: #ff00ab;
+    font-style: italic;
+    font-weight: bold;
+    margin: 0.5em 1em;
+}
+div#guild_details div#guild_skills{
+    display: inline-block;
+}
+
+div#guild_details div#guild_skills div.skill_group{
+    border: 0.2em solid #f2c920;
+    border-radius: 0.5em;
+    background-color: #00000044;
+    margin: 0.2em 0.2em 0.5em 1em;
+    text-align: left;
+}
+
+div#guild_details div#guild_skills div.skill_group span.skill_group_title{
+    display: block;
+    font-size: 110%;
+    font-weight: bold;
+    text-align: center;
+}
+
+div#guild_details div#guild_skills div.skill_group span.skill_group_description{
+    display: block;
+    font-size: 90%;
+    font-style: italic;
+    text-align: center;
+}
+
+div#guild_details div#guild_skills div.skill_group img.skill_group_image{
+    display: inline-block;
+    vertical-align: middle;
+    width: 5em;
+    height: 5em;
+    border: 0.1em solid #f2c920;
+    border-radius: 0.5em;
+    margin: 0.2em 0.2em 0.5em 1em;
+}
+
+div#guild_details div#guild_skills div.skill_group ul{
+    display: inline-block;
+    font-weight: bold;
+    font-size: 70%;
+    vertical-align: middle;
+    margin: 0;
+}
+div#guild_details div#guild_skills div.skill_group ul li{
+    margin: -0.3em;
+}
+div#guild_details div#guild_skills div.skill_group ul li.description{
+    list-style-type: none;
+    margin: -0.3em 0.3em 0.1em -3em;
+}
+
+div#guild_details div#guild_skills div.skill_group ul li.unavailable{
+    color: #888888;
+}
+
+
+
+table#guild_members{
+    display: inline-block;
+    width: 40%;
+    vertical-align: top;
+    border-collapse: collapse;
+    color: #ffffff;
+}
+table#guild_members th{
+    background-color: #00000088;
+    font-weight: bold;
+    font-size: 90%;
+}
+
+table#guild_members td{
+    background-color: #00000022;
+    height: 1.5em;
+}
+table#guild_members td.odd{
+    background-color: #00000044;
+}
+
+table#guild_members td img{
+    height: 1.5em;
+}
+
+table#guild_members td.last_login{
+    color: #00ff00;
+}
+table#guild_members td.last_login.warning{
+    color: #ffff00;
+}
+table#guild_members td.last_login.danger{
+    color: #ff0000;
+}

+ 6 - 0
public/css/home.css

@@ -19,6 +19,12 @@ article{
     }
     }
 }
 }
 
 
+article#profile div#currency ul li img{
+    height: 1.2em;
+    width: 1.2em;
+    vertical-align: middle;
+}
+
 article h3{
 article h3{
     margin: -1em -0.75em 0.5em -0.75em;
     margin: -1em -0.75em 0.5em -0.75em;
     border-bottom: 0.1em solid #f2c920;
     border-bottom: 0.1em solid #f2c920;

BIN
public/img/layout/currency/darkportalenergy.png


BIN
public/img/layout/icon/leader.png


BIN
public/img/layout/icon/lock.png


BIN
public/img/layout/icon/nok.png


BIN
public/img/layout/icon/ok.png


BIN
public/img/layout/icon/rank_beg.png


BIN
public/img/layout/icon/rank_cha1.png


BIN
public/img/layout/icon/rank_cha2.png


BIN
public/img/layout/icon/rank_cha3.png


BIN
public/img/layout/icon/rank_con1.png


BIN
public/img/layout/icon/rank_con2.png


BIN
public/img/layout/icon/rank_con3.png


BIN
public/img/layout/icon/rank_fig1.png


BIN
public/img/layout/icon/rank_fig2.png


BIN
public/img/layout/icon/rank_fig3.png


BIN
public/img/layout/icon/rank_gua1.png


BIN
public/img/layout/icon/rank_gua2.png


BIN
public/img/layout/icon/rank_gua3.png


BIN
public/img/layout/icon/rank_leg.png


BIN
public/img/layout/icon/viceleader.png