From 2614b60ebc8bf5e22f72405600e6f5df5c96a8d9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bartek=20G=C3=B3rny?= <bartek@gorny.edu.pl>
Date: Tue, 5 Sep 2006 15:27:31 +0000
Subject: [PATCH] Extended search functions (requires SQLCatalog patch)

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@9667 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 .../ExtensionTemplateItem/searchUtils.py      | 13 +++++++++---
 .../erp5_dms/DMS_getAdvancedSearchResults.xml | 20 +++++++++++++++++--
 bt5/erp5_dms/bt/change_log                    |  3 +++
 bt5/erp5_dms/bt/revision                      |  2 +-
 bt5/erp5_dms/bt/version                       |  2 +-
 5 files changed, 33 insertions(+), 7 deletions(-)

diff --git a/bt5/erp5_dms/ExtensionTemplateItem/searchUtils.py b/bt5/erp5_dms/ExtensionTemplateItem/searchUtils.py
index e5dae40e3e..79a393ef68 100644
--- a/bt5/erp5_dms/ExtensionTemplateItem/searchUtils.py
+++ b/bt5/erp5_dms/ExtensionTemplateItem/searchUtils.py
@@ -2,13 +2,17 @@
 import re
 
 # parsing defined here
-r=re.compile('(\w+:"[^"]+"|\w+:[\w\-.]+)')
+simulation_states=('released','public','submitted')
+r=re.compile('(\w+:"[^"]+"|\w+:[\w/\-.]+)')
 filetyper=lambda s:('source_reference','%%.%s' % s)
 filestripper=lambda s: ('source_reference',s.replace('"',''))
-paramsmap=dict(file=filestripper,type='portal_type',reference='reference',filetype=filetyper)
+addarchived=lambda s: ('simulation_state',simulation_states+('archived',))
+paramsmap=dict(file=filestripper,type='portal_type',reference='reference',filetype=filetyper,archived=addarchived,\
+        language='language',version='version')
 
 def analyze(params):
     params['SearchableText']=''
+    params['simulation_state']=simulation_states
     def cutter(s):
         ss=s.split(':')
         if len(ss)==1:
@@ -20,6 +24,8 @@ def analyze(params):
             except TypeError:
                 if paramsmap.has_key(ss[0]):
                     params[paramsmap.get(ss[0])]=ss[1]
+                else:
+                    params[ss[0]]=ss[1]
     return cutter
 
 def parseSearchString(searchstring):
@@ -27,9 +33,10 @@ def parseSearchString(searchstring):
     l=r.split(searchstring)
     print l
     map(analyze(params),l)
+    params['SearchableText']=params['SearchableText'].strip()
     return params
 
 if __name__=='__main__':
     #searchstring='byle cisnie zego file:"ble ble.doc" filetype:doc type:Text poza tym reference:abc-def'
-    searchstring='byle "cisnie zego" file:"ble ble.doc" type:Text poza tym reference:abc-def'
+    searchstring='byle "cisnie zego" file:"ble ble.doc" type:Text poza tym reference:abc-def dupa:kwas/zbita'
     print parseSearchString(searchstring)
diff --git a/bt5/erp5_dms/SkinTemplateItem/portal_skins/erp5_dms/DMS_getAdvancedSearchResults.xml b/bt5/erp5_dms/SkinTemplateItem/portal_skins/erp5_dms/DMS_getAdvancedSearchResults.xml
index a3f68ee009..eeec757a37 100644
--- a/bt5/erp5_dms/SkinTemplateItem/portal_skins/erp5_dms/DMS_getAdvancedSearchResults.xml
+++ b/bt5/erp5_dms/SkinTemplateItem/portal_skins/erp5_dms/DMS_getAdvancedSearchResults.xml
@@ -70,7 +70,17 @@
             <key> <string>_body</string> </key>
             <value> <string encoding="cdata"><![CDATA[
 
-kw.update(context.parseSearchString(kw.get(\'SearchableText\',\'\')))\n
+args=context.parseSearchString(kw.get(\'SearchableText\',\'\'))\n
+args[\'portal_type\']=context.getPortalDocumentTypeList()\n
+cats=[]\n
+bases=context.portal_categories.getBaseCategoryList()\n
+for k,v in args.items():\n
+  if k in bases:\n
+    cats.append(\'/\'.join((k,v)))\n
+if cats!=[]:\n
+  args[\'category\']=cats\n
+context.log(\'args\',args)\n
+kw.update(args)\n
 \n
 cf=kw.get(\'creation_from\')\n
 ct=kw.get(\'creation_to\')\n
@@ -137,13 +147,19 @@ return context.portal_catalog(**kw)\n
                             <string>kw</string>
                             <string>_getattr_</string>
                             <string>context</string>
+                            <string>args</string>
+                            <string>_write_</string>
+                            <string>cats</string>
+                            <string>bases</string>
+                            <string>_getiter_</string>
+                            <string>k</string>
+                            <string>v</string>
                             <string>cf</string>
                             <string>ct</string>
                             <string>mf</string>
                             <string>mt</string>
                             <string>wheres</string>
                             <string>str</string>
-                            <string>_write_</string>
                             <string>_apply_</string>
                           </tuple>
                         </value>
diff --git a/bt5/erp5_dms/bt/change_log b/bt5/erp5_dms/bt/change_log
index 8aad120deb..292d6fe138 100644
--- a/bt5/erp5_dms/bt/change_log
+++ b/bt5/erp5_dms/bt/change_log
@@ -1,3 +1,6 @@
+2006-09-05 BG
+Extended search functions (requires SQLCatalog patch)
+
 2006-08-30 BG
 Added ImageDocument type; assigned types to group dms_document.
 
diff --git a/bt5/erp5_dms/bt/revision b/bt5/erp5_dms/bt/revision
index c9c41087e2..5a396e28e8 100644
--- a/bt5/erp5_dms/bt/revision
+++ b/bt5/erp5_dms/bt/revision
@@ -1 +1 @@
-114
\ No newline at end of file
+121
\ No newline at end of file
diff --git a/bt5/erp5_dms/bt/version b/bt5/erp5_dms/bt/version
index 3c3fca5cde..01661f4493 100644
--- a/bt5/erp5_dms/bt/version
+++ b/bt5/erp5_dms/bt/version
@@ -1 +1 @@
-0.70
\ No newline at end of file
+0.71
\ No newline at end of file
-- 
2.30.9