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