Alexander Nicolaysen Sørnes : browse apps: Add support for filtering by name
Chris Morgan
cmorgan at winehq.org
Sun Jun 15 20:19:16 CDT 2008
Module: appdb
Branch: master
Commit: 628bc7c7673d57e4f15f91c53a71400641705b48
URL: http://source.winehq.org/git/appdb.git/?a=commit;h=628bc7c7673d57e4f15f91c53a71400641705b48
Author: Alexander Nicolaysen Sørnes <alex at thehandofagony.com>
Date: Sun Jun 15 20:38:27 2008 +0200
browse apps: Add support for filtering by name
---
include/application.php | 1 +
include/db_filter.php | 36 +++++++++++++++++++++++++++++-------
include/db_filter_ui.php | 16 +++++++++++-----
3 files changed, 41 insertions(+), 12 deletions(-)
diff --git a/include/application.php b/include/application.php
index 0b2a13d..44bc97b 100644
--- a/include/application.php
+++ b/include/application.php
@@ -1035,6 +1035,7 @@ class Application {
$oFilter->AddFilterInfo('appVersion.rating', 'Rating', array(FILTER_EQUALS), FILTER_VALUES_ENUM, array('Platinum', 'Gold', 'Silver', 'Bronze', 'Garbage'));
$oFilter->AddFilterInfo('appFamily.catId', 'Category', array(FILTER_EQUALS), FILTER_VALUES_ENUM, $aCatIds, $aCatNames);
$oFilter->AddFilterInfo('appVersion.license', 'License', array(FILTER_EQUALS), FILTER_VALUES_ENUM, $aLicenses);
+ $oFilter->AddFilterInfo('appFamily.appName', 'Name', array(FILTER_CONTAINS, FILTER_STARTS_WITH, FILTER_ENDS_WITH), FILTER_VALUES_NORMAL);
$oFilter->AddFilterInfo('onlyDownloadable', 'Only show downloadable apps', array(FILTER_OPTION_BOOL), FILTER_VALUES_OPTION_BOOL, array('false','true'));
return $oFilter;
}
diff --git a/include/db_filter.php b/include/db_filter.php
index 09fa909..fa5a0b7 100644
--- a/include/db_filter.php
+++ b/include/db_filter.php
@@ -9,12 +9,15 @@
*/
define('FILTER_LIKE', 1);
-define('FILTER_EQUALS', 2);
-define('FILTER_GREATER_THAN', 3);
-define('FILTER_LESS_THAN', 4);
-define('FILTER_NOT_EQUALS', 5);
-define('FILTER_NOT_LIKE', 6);
-define('FILTER_OPTION_BOOL', 7);
+define('FILTER_CONTAINS', 2); // Same as LIKE, but value is wrapped by wildcards
+define('FILTER_STARTS_WITH', 3); // Same as LIKE, but with a prepended wildcard
+define('FILTER_ENDS_WITH', 4); // Same as LIKE, but with an appended wildcard
+define('FILTER_EQUALS', 5);
+define('FILTER_GREATER_THAN', 6);
+define('FILTER_LESS_THAN', 7);
+define('FILTER_NOT_EQUALS', 8);
+define('FILTER_NOT_LIKE', 9);
+define('FILTER_OPTION_BOOL', 10);
/* A filter as part of an SQL query, such as something = 'somevalue' */
class Filter
@@ -55,6 +58,9 @@ class Filter
switch($this->iType)
{
case FILTER_LIKE:
+ case FILTER_CONTAINS:
+ case FILTER_STARTS_WITH:
+ case FILTER_ENDS_WITH:
return 'LIKE';
case FILTER_EQUALS:
return '=';
@@ -79,9 +85,25 @@ class Filter
if($this->iType == FILTER_OPTION_BOOL)
return '';
+ $sData = $this->sData;
+
+ /* Add wildcards if required */
+ switch($this->iType)
+ {
+ case FILTER_CONTAINS:
+ $sData = "%$sData%";
+ break;
+ case FILTER_STARTS_WITH:
+ $sData = "$sData%";
+ break;
+ case FILTER_ENDS_WITH:
+ $sData = "%$sData";
+ break;
+ }
+
$sOp = $this->getOperator();
- return "{$this->sColumn} $sOp '{$this->sData}'";
+ return "{$this->sColumn} $sOp '$sData'";
}
}
diff --git a/include/db_filter_ui.php b/include/db_filter_ui.php
index a301d5b..271ccba 100644
--- a/include/db_filter_ui.php
+++ b/include/db_filter_ui.php
@@ -10,10 +10,10 @@
require_once('db_filter.php');
-define(FILTER_VALUES_NORMAL, 1);
-define(FILTER_VALUES_ENUM, 2);
-define(FILTER_VALUES_BOOL, 3);
-define(FILTER_VALUES_OPTION, 4);
+define('FILTER_VALUES_NORMAL', 1);
+define('FILTER_VALUES_ENUM', 2);
+define('FILTER_VALUES_BOOL', 3);
+define('FILTER_VALUES_OPTION', 4);
/* Info describing an available filter: what column it applies to,
and what comparison options are available */
@@ -78,6 +78,12 @@ class FilterInfo
return 'equal to';
case FILTER_LIKE:
return 'like';
+ case FILTER_CONTAINS:
+ return 'contains';
+ case FILTER_STARTS_WITH:
+ return 'starts with';
+ case FILTER_ENDS_WITH:
+ return 'ends with';
case FILTER_NOT_LIKE:
return 'not like';
case FILTER_NOT_EQUALS:
@@ -216,7 +222,7 @@ class FilterInterface
if($iId == -1)
{
- $sText = 'select';
+ $sText = 'criteria';
$sSel = " selected='selected'";
} else
{
More information about the wine-cvs
mailing list