Implemented filtering

This commit is contained in:
Latif Khalifa
2013-10-07 09:47:59 +02:00
parent cd5484d3f4
commit 73c10e7e3b
4 changed files with 189 additions and 7 deletions

View File

@@ -4,9 +4,12 @@ define("SITE_ROOT", realpath(dirname(__file__)));
require_once SITE_ROOT . "/lib/init.php";
$S->requireUser();
$total = CrashReport::getTotal();
$reports = CrashReport::getReports();
$filter = new SearchFilter();
$total = CrashReport::getTotal($filter);
$reports = CrashReport::getReports($filter);
Layout::header();
$filter->render();
?>
<p>Reports <strong><?php echo $total ?></strong></p>

View File

@@ -61,11 +61,12 @@ class CrashReport
}
return $ret;
}
function getTotal()
function getTotal($filter)
{
global $DB;
if (!$res = $DB->query("select count(id) as total from reports") OR !$row = $DB->fetchRow($res))
$where = $filter->getWhere();
if (!$res = $DB->query("select count(id) as total from reports $where") OR !$row = $DB->fetchRow($res))
{
return 0;
}
@@ -75,12 +76,12 @@ class CrashReport
}
}
function getReports($offset = 0, $limit = 100)
function getReports($filter)
{
global $DB;
$ret = array();
if (!$res = $DB->query(kl_str_sql("select * from reports order by id desc limit !i offset !i", $limit, $offset)))
if (!$res = $DB->query("select * from reports " . $filter->getWhere() . kl_str_sql(" order by id desc limit !i offset !i", $filter->limit, $filter->offset)))
{
return $ret;
}

View File

@@ -156,7 +156,7 @@ $().ready(function(){
<a href="<?php echo URL_ROOT ?>"><img src="images/singularity_icon.png" width="150px" height="150px"/></a>
</div>
<div style="display: inline-block;color: #eee; padding: 55px 0 0 30px; vertical-align: top;">
<a href="<?php echo URL_ROOT ?>" style="font-size: 4em; font-weight: bold;">Sigularity Viewer</a>
<a href="<?php echo URL_ROOT ?>" style="font-size: 4em; font-weight: bold;">Singularity Viewer</a>
<br/>
<span style="font-size: 1.6em;">Automated Crash Report Processing</span>
</div>

178
htdocs/lib/SearchFilter.php Normal file
View File

@@ -0,0 +1,178 @@
<?php
class SearchFilter
{
public $os;
public $chan;
public $version;
public $grid;
public $sort_by;
public $sort_order;
public static $sort_keys = array("date", "os", "version", "grid");
public static $sort_orders = array("asc", "desc");
public $limit = 100;
public $offset = 0;
public $page = 0;
function SearchFilter()
{
if (in_array($_GET["sort_by"], self::$sort_keys))
{
$this->sort_by = $_GET["sort_by"];
}
if (in_array($_GET["sort_order"], self::$sort_orders))
{
$this->sort_by = $_GET["sort_order"];
}
if (strlen($_GET["os"]))
{
$this->os = $_GET["os"];
}
if (strlen($_GET["chan"]))
{
$this->chan = $_GET["chan"];
}
if (strlen($_GET["version"]))
{
$this->version = $_GET["version"];
}
if (strlen($_GET["page"]))
{
$this->page = $_GET["page"];
}
if (strlen($_GET["grid"]))
{
$this->grid = $_GET["grid"];
}
}
function getWhere()
{
$cond = array();
if ($this->os) $cond[] = kl_str_sql("os_type=!s", $this->os);
if ($this->version) $cond[] = kl_str_sql("client_version=!s", $this->version);
if ($this->chan) $cond[] = kl_str_sql("client_channel=!s", $this->chan);
if ($this->grid) $cond[] = kl_str_sql("grid=!s", $this->grid);
if (!count($cond)) return "";
return "where " . implode(" and ", $cond);
}
function getVersions()
{
global $DB;
$ret = array();
$where = $this->chan ? kl_str_sql("where client_channel=!s", $this->chan) : '';
$q = "select distinct client_version from reports $where order by client_version desc";
if (!$res = $DB->query($q))
{
return $ret;
}
while ($row = $DB->fetchRow($res))
{
$ret[] = $row["client_version"];
}
return $ret;
}
function getGrids()
{
global $DB;
$ret = array();
$q = "select distinct grid from reports order by grid asc";
if (!$res = $DB->query($q))
{
return $ret;
}
while ($row = $DB->fetchRow($res))
{
$ret[] = $row["grid"];
}
return $ret;
}
function render()
{
$ver = $this->getVersions();
$grids = $this->getGrids();
?>
<script>
$(function() {
$( ".radio" )
.buttonset()
.click(function() {
$(this).closest("form").submit();
});
});
</script>
<form method="get">
<div style="display: inline-block;" class="ui-widget ui-corner-all ui-widget-content">
<div class="ui-widget-header" style="padding: 5px">Filter</div>
<div style="display: inline-block;">
<div class="radio" style="padding: 10px">
Channel<br />
<input type="radio" id="chan1" name="chan" value="" <?php echo !$this->chan ? 'checked="checked"' : '' ?>/><label for="chan1">All</label>
<input type="radio" id="chan2" name="chan" value="Singularity" <?php echo $this->chan == "Singularity" ? 'checked="checked"' : '' ?>/><label for="chan2">Singularity</label>
<input type="radio" id="chan3" name="chan" value="SingularityAlpha" <?php echo $this->chan == "SingularityAlpha" ? 'checked="checked"' : '' ?>/><label for="chan3">SingularityAlpha</label>
</div>
</div>
<div style="display: inline-block;" style="padding: 10px">
Version<br/>
<select class="ui-widget-content" name="version" onchange="this.form.submit();" style="width: 100px;">
<option value="" <?php echo !$this->version ? 'selected="selected"' : '' ?>>All</option>
<?php
for($i = 0; $i < count($ver); $i++)
{
$sel = $this->version == $ver[$i] ? ' selected="selected"' : '';
print '<option value="' . htmlentities($ver[$i]) . '"' . $sel . '>' . htmlentities($ver[$i]). '</option>';
}
?>
</select>
</div>
<div style="display: inline-block;">
<div class="radio" style="padding: 10px">
Operating system<br />
<input type="radio" id="os_all" name="os" value="" <?php echo !$this->os ? 'checked="checked"' : '' ?>/><label for="os_all">All</label>
<input type="radio" id="os_windows" name="os" value="Windows NT" <?php echo $this->os == "Windows NT" ? 'checked="checked"' : '' ?>/><label for="os_windows">Windows</label>
<input type="radio" id="os_linux" name="os" value="Linux" <?php echo $this->os == "Linux" ? 'checked="checked"' : '' ?>/><label for="os_linux">Linux</label>
<input type="radio" id="os_mac" name="os" value="Mac OS X" <?php echo $this->os == "Mac OS X" ? 'checked="checked"' : '' ?> /><label for="os_mac">Mac</label>
</div>
</div>
<div style="display: inline-block;">
Grid<br/>
<select class="ui-widget-content" name="grid" onchange="this.form.submit();" style="width: 200px; margin: 0px 20px 0 0; ">
<option value="" <?php echo !$this->grid ? 'selected="selected"' : '' ?>>All</option>
<?php
for($i = 0; $i < count($grids); $i++)
{
$sel = $this->grid == $grids[$i] ? ' selected="selected"' : '';
print '<option value="' . htmlentities($grids[$i]) . '"' . $sel . '>' . htmlentities($grids[$i]). '</option>';
}
?>
</select>
</div>
</div>
</form>
<?php
}
}