瀏覽代碼

Custom filters on the rune upgrade report.

Iñigo Valentin 6 年之前
父節點
當前提交
c0d19e7ee4

+ 81 - 13
application/page/Report_Runeupgrade_Page.php

@@ -1,18 +1,9 @@
  <?php
 
     require_once($path["page"] . "Page.php");
+    require_once($path["entity"] . "Custom_Filter.php");
     require_once($path["entity"] . "Unit.php");
     require_once($path["entity"] . "Rune.php");
-    
-    class Upgrade{
-        private $db;
-        public $unit = null;
-        public $rune = [];
-        
-        public function __construct($db){
-            $this->db = $db;
-        }
-    }
 
     /**
      * Upgradeable runes report page.
@@ -32,9 +23,9 @@
             "rune_min_level" => 0,
             "rune_max_level" => 15,
             "rune_min_quality" => 0,
-            "rune_max_quality" => 4,
+            "rune_max_quality" => 5,
             "rune_min_original_quality" => 0,
-            "rune_max_original_quality" => 4,
+            "rune_max_original_quality" => 5,
             "rune_min_efficiency" => 0,
             "rune_max_efficiency" => 100,
             "rune_min_max_efficiency" => 0,
@@ -47,6 +38,11 @@
             "alternative_source" => 0,
         ];
 
+        /**
+         * Custom filters for this page.
+         */
+        public $custom_filters = [];
+
         /**
          * List of available upgrades. Can be described as:
          * $upgrades = [
@@ -73,10 +69,16 @@
         public function __construct($db){
             global $path;
             global $root;
+            global $UID;
             parent::__construct($db);
             $this->view = $path["view"] . "report_runeupgrade.php";
             $this->parse_filters();
-            $s = $this->build_query();
+            if (!isset($_GET["custom_filter"])){
+                $s = $this->build_query();
+            }
+            else{
+                $s = $this->build_custom_query($_GET["custom_filter"]);
+            }
             $q = $this->db->query($s);
             $prev_monster = "";
             $prev_rune = "";
@@ -121,6 +123,18 @@
             // Last entries
             array_push($upgrade["upgrade"], $rupgrade);
             array_push($this->upgrades, $upgrade);
+            // Get custom filters for the form
+            $s = "
+              SELECT id
+              FROM filter
+              WHERE
+                uid = '$UID' AND
+                page = 'REPORT_RUNEUPGRADE';
+            ";
+            $q = $this->db->query($s);
+            while ($r = $q->fetchArray(SQLITE3_ASSOC)){
+                array_push($this->custom_filters, new Custom_Filter($this->db, $r["id"]));
+            }
             $this->title = "Replaceable runes - SWDB";
             $this->description = "Find equiped runes that can be substituted for better ones.";
             $this->canonical = $root . "report/runeupgrade/";
@@ -213,6 +227,60 @@
             return;
         }
 
+        /**
+         * Builds the query to the rune table using the a custom filter.
+         * 
+         * @param int $filter Custom filter ID.
+         * @return The query to be executed.
+         */
+        private function build_custom_query($filter){
+            global $UID;
+            $s = "
+              SELECT condition
+              FROM filter
+              WHERE
+                uid = '$UID' AND
+                id = $filter;
+            ";
+            $q = $this->db->query($s);
+            $r = $q->fetchArray(SQLITE3_ASSOC);
+            $cond = $r["condition"];
+            $s = "
+              SELECT
+                unit.id AS unit,
+                rune.id AS id,
+                rune_alt.id AS alternative
+              FROM
+                rune,
+                rune rune_alt,
+                unit,
+                k_unit
+              WHERE
+                unit.uid = '$UID' AND
+                rune.uid = '$UID' AND
+                rune_alt.uid = '$UID' AND
+                unit.id = rune.assigned_to AND
+                unit.unit = k_unit.id AND
+                rune.type = rune_alt.type AND 
+                rune.slot = rune_alt.slot AND 
+                rune.main_stat = rune_alt.main_stat AND 
+                rune.id <> rune_alt.id AND
+                (
+                  $cond
+                )
+              ORDER BY
+                unit.stars DESC,
+                unit.level DESC,
+                unit.id,
+                rune.slot,
+                id,
+                rune_alt.stars DESC,
+                rune_alt.original_quality DESC,
+                rune_alt.main_stat_value DESC;
+            ";
+            return $s;
+        }
+
         /**
          * Builds the query for the page, using the providded or default filters.
          *

+ 2 - 3
application/page/Runes_Page.php

@@ -31,9 +31,9 @@
             "sub" => [],
             "slot" => [],
             "min_quality" => 0,
-            "max_quality" => 4,
+            "max_quality" => 5,
             "min_original_quality" => 0,
-            "max_original_quality" => 4,
+            "max_original_quality" => 5,
             "min_stars" => 1,
             "max_stars" => 6,
             "min_level" => 0,
@@ -196,7 +196,6 @@
               )
               ORDER BY  slot, type, stars DESC, original_quality DESC, quality DESC, level;
             ";
-            error_log("CUSTOM QUERY: " . $s);
             return $s;
         }
 

+ 51 - 0
application/view/inc/filter_report_runeupgrade.php

@@ -1,6 +1,57 @@
 <?php
     global $QUALITY;
 ?>
+<?php
+    if (count($custom_filters) > 0){
+?>
+        <script>
+            /**
+             * Changes the filter description.
+             *
+             * @param id Filter id.
+             */
+            function customFilterDescription(id){
+                switch (id){
+<?php
+                    foreach($custom_filters AS $filter){
+?>
+                        case '<?=$filter->id?>':
+                            document.getElementById("custom_filter_description").style.display = 'block';
+                            document.getElementById("custom_filter_description").innerHTML = '<?=$filter->description?>';
+                            break;
+<?php
+                    }
+?>
+                }
+            }
+        </script>
+        <form action='/<?=$UID?>/report/runeupgrade/' method='get' id='custom_filter_runes' class='custom_filter'>
+            <span class='custom_filter_title'>Custom filters:</span>
+            <select name='custom_filter' onChange='customFilterDescription(this.value);' onload='alert("LOAD");customFilterDescription("<?=$_GET["custom_filter"]?>");'>
+                <option> </option>
+<?php
+                 foreach($custom_filters AS $filter){
+                    if ($_GET["custom_filter"] == $filter->id){
+                        $selected = "selected='selected'";
+                    }
+                    else{
+                        $selected = "";
+                    }
+?>
+                    <option value='<?=$filter->id?>' <?=$selected?>><?=$filter->name?></option>
+<?php
+                 }
+?>
+            </select>
+            <input type='submit' value='Apply'/>
+            <p id='custom_filter_description'> </p>
+            <script>
+                customFilterDescription("<?=$_GET["custom_filter"]?>");
+            </script>
+        </form>
+<?php
+    }
+?>
 <form action='/<?=$UID?>/report/runeupgrade/' method='get' id='filter_runeupgrade' class='filter'>
     <table>
         <tr>

+ 0 - 1
application/view/inc/filter_runes.php

@@ -54,7 +54,6 @@
 <?php
     }
 ?>
-</form>
 <form action='/<?=$UID?>/runes/' method='get' id='filter_runes' class='filter'>
     <div class='custom_filters'>
     <table>

+ 1 - 0
application/view/report_runeupgrade.php

@@ -46,6 +46,7 @@
             </h2>
 <?php
             $filters = $page->filters;
+            $custom_filters = $page->custom_filters;
             include __DIR__ . "/inc/filter_report_runeupgrade.php";
 ?>
         </section> <!-- #filters -->