Module: appdb Branch: master Commit: 628bc7c7673d57e4f15f91c53a71400641705b48 URL: http://source.winehq.org/git/appdb.git/?a=commit;h=628bc7c7673d57e4f15f91c53...
Author: Alexander Nicolaysen Sørnes alex@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 {