--- ZSQLExtend/ZSQLExtend.py 2004/09/27 20:45:45 1.37
+++ ZSQLExtend/ZSQLExtend.py 2004/10/25 13:13:48 1.45
@@ -13,11 +13,29 @@ from Products.PageTemplates.PageTemplate
from Products.ZSQLMethods.SQL import SQLConnectionIDs
import Shared.DC.ZRDB.DA
+def analyseIntSearch(word):
+ #analyse integer searches
+
+ splitted=word.split("-")
+
+ if len(splitted)==1:
+ return "="+splitted[0]
+
+ if splitted[0]=="":
+ return "< "+splitted[1]
+
+ if splitted[1]=='':
+ return "> "+splitted[0]
+ else:
+ return "BETWEEN "+splitted[0]+" AND "+splitted[1]
+
+
+
def sql_quote(v):
# quote dictionary
quote_dict = {"\'": "''", "\\": "\\\\"}
for dkey in quote_dict.keys():
- if find(v, dkey) >= 0:
+ if string.find(v, dkey) >= 0:
v=join(split(v,dkey),quote_dict[dkey])
return "'%s'" % v
@@ -40,10 +58,10 @@ class ZSQLExtendFolder(Folder,Persistent
"""suche relative haufigkeiten"""
ret={}
allRecords=len(self.ZSQLSimpleSearch(statement + " where "+wherePart))
- print statement + " where "+wherePart
+
for oneclass in classes:
ret[oneclass]=len(self.ZSQLSimpleSearch(statement + " where ("+wherePart+") and "+ relStatement%oneclass))
- print statement + " where ("+wherePart+") and "+ relStatement%oneclass
+
return (ret,allRecords)
def content_html(self):
@@ -243,6 +261,7 @@ class ZSQLExtendFolder(Folder,Persistent
def ZSQLInlineSearch(self,storename=None,**argv):
"""inlinesearch"""
+
qs=[]
if storename:
"""store"""
@@ -253,7 +272,12 @@ class ZSQLExtendFolder(Folder,Persistent
#print "INLINE:",argv
for a in argv.keys():
- qs.append(a+"="+urllib.quote(str(argv[a])))
+ try:
+ qs.append(a+"="+urllib.quote(str(argv[a])))
+ except:
+ import urllib
+ qs.append(a+"="+urllib.quote(str(argv[a])))
+
#return []
return self.parseQueryString(string.join(qs,","),"_",storename=storename)
@@ -262,23 +286,34 @@ class ZSQLExtendFolder(Folder,Persistent
qs=[]
-
+
#print "INLINE:",query
return self.ZSQLSimpleSearch(query)
def ZSQLSimpleSearch(self,query=None):
""" returrn SQLSearch"""
+ #print "hi",query
if not query:
query=self.query
-
- if self.search.meta_type=="Z SQL Method":
+ if getattr(self,'_v_search',None):
+
+ return self._v_search(var=query)
+
+ if hasattr(self,'search') and (self.search.meta_type=="Z SQL Method"):
+ self._v_search=self.search
return self.search(var=query)
else:
- if self.aq_parent.aq_parent.search.meta_type=="Z SQL Method":
+ if hasattr(self.aq_parent.aq_parent,'search') and (self.aq_parent.aq_parent.search.meta_type=="Z SQL Method"):
+ self._v_search=self.aq_parent.aq_parent.search
return self.aq_parent.aq_parent.search(var=query)
else:
- return []
+ search=self.ZopeFind(self,obj_metatypes=["Z SQL Method"],search_sub=1)
+ if search:
+ self._v_search=search[0][1]
+ return search[0][1](var=query)
+ else:
+ return []
@@ -397,7 +432,7 @@ class ZSQLExtendFolder(Folder,Persistent
ret.append(x)
return ret
- #self.REQUEST.SESSION['come_from_search']="no" # zurücksetzen
+ #self.REQUEST.SESSION['come_from_search']="no" # zuruecksetzen
if qs=="":
if self.REQUEST['QUERY_STRING']:
@@ -507,6 +542,7 @@ class ZSQLExtendFolder(Folder,Persistent
opfields={}
lopfields={} #Verknüpfung bei mehrfachauswahl von einem feld
sortfields={} #order of sortfields
+ sortAllFields=None
skip=""
rangeStart=0
limit=0
@@ -545,10 +581,15 @@ class ZSQLExtendFolder(Folder,Persistent
lopfields[field]=lop
if name[0:10]==iCT+"sortorder":
- sort=value
-
+ #sort=value
+
field=name[11:]
- sortfields[field]=sort
+ sortAllFields=None
+ #no field selected
+ if field=="":
+ sortAllFields=value
+ else:
+ sortfields[field]=value
#print "HI",op,field
#print opfieldsa
@@ -588,11 +629,17 @@ class ZSQLExtendFolder(Folder,Persistent
sortstrs=[]
for word in value.split(','):
wordstr=word.lstrip().rstrip()
- order=sortfields.get(wordstr,'ASC')
- sortstrs.append(wordstr+" "+order)
+ if sortAllFields:
+ order=sortAllFields
+ else:
+ order=sortfields.get(wordstr,'ASC')
+
+ if not (wordstr == ""):
+ sortstrs.append(wordstr+" "+order)
if len(sortstrs)>0:
sort="ORDER BY "+string.join(sortstrs,',')
-
+
+
elif name==iCT+"token":
if not nostore=="yes":
self.REQUEST.SESSION['token']=value
@@ -631,7 +678,19 @@ class ZSQLExtendFolder(Folder,Persistent
tmps.append(name+" LIKE "+sql_quote("%"+word+"%"))
tmp=string.join(tmps,' AND ')
-
+
+ elif op=="numerical":
+ term=analyseIntSearch(value)
+ tmp=(name+" "+term)
+ elif op=="grep":
+ tmp=(name+" ~* "+sql_quote(value))
+ elif op=="one":
+ tmps=[]
+ for word in value.split(" "):
+ tmps.append(name+" LIKE "+sql_quote("%"+word+"%"))
+
+ tmp=string.join(tmps,' OR ')
+
op="ct"
if (not tableExt) or (namealt.split('.')[0]==tableExt):
@@ -642,32 +701,6 @@ class ZSQLExtendFolder(Folder,Persistent
searchFields[name]=tmp
searchFieldsOnly[name]=value
-
- ## for name in searchFields.keys():
-## value=searchFields[name]
-
-## if opfields.has_key(name):
-## op=opfields[name]
-## else:
-## op="ct"
-## name="LOWER("+name+")"
-## if op=="ct":
-## whereList.append(name+" LIKE "+sql_quote("%"+value+"%"))
-## elif op=="gt":
-## whereList.append(name+">"+sql_quote(value))
-## elif op=="lt":
-## whereList.append(name+"<"+sql_quote(value))
-## elif op=="eq":
-## whereList.append(name+"="+sql_quote(value))
-## elif op=="bw":
-## whereList.append(name+" LIKE "+sql_quote(value+"%"))
-## elif op=="ew":
-## whereList.append(name+" LIKE "+sql_quote("%"+value))
-## op="ct"
-
-## #except:
-## # print "END",value,name,Exception
-
whereList=["("+searchFields[x]+")" for x in searchFields.keys()]
if len(whereList)>0:
@@ -690,7 +723,7 @@ class ZSQLExtendFolder(Folder,Persistent
where+="and "+restrictConnect[0]+" in ("+restrictConnect[1]+")"
#print "QE",table
-
+ #print (select,table,where,sort,maxstr,skip)
query="SELECT %s FROM %s %s %s %s %s"%(select,table,where,sort,maxstr,skip)
if not nostore=="yes":
@@ -728,7 +761,7 @@ class ZSQLExtendFolder(Folder,Persistent
self.REQUEST.SESSION[storename]['rangeSize']=limit
self.REQUEST.SESSION[storename]['searchFields']=searchFields
self.REQUEST.SESSION[storename]['searchFieldsOnly']=searchFieldsOnly
-
+
if not NoQuery:
return self.ZSQLQuery(query)
@@ -738,6 +771,7 @@ class ZSQLExtendFolder(Folder,Persistent
def ZSQLQuery(self,query):
"""query"""
+ #print "hi",query
return self.ZSQLSimpleSearch(query)
def ZSQLSearch(self):
@@ -782,6 +816,7 @@ class ZSQLExtendFolder(Folder,Persistent
def nextLink(self,html,storename="foundCount"):
"""nextLink"""
+
try:
limit=self.REQUEST.SESSION[storename]['rangeSize']
if int(limit)==0 :
@@ -800,12 +835,12 @@ class ZSQLExtendFolder(Folder,Persistent
if self.REQUEST['QUERY_STRING']=="":
qs=self.REQUEST.SESSION['query']
- queries=string.split(qs,",")
+ queries=string.split(qs,",")[0:]
else:
qs=self.REQUEST['QUERY_STRING']
- queries=string.split(qs,"&")
+ queries=string.split(qs,"&")[0:]
@@ -814,10 +849,9 @@ class ZSQLExtendFolder(Folder,Persistent
skipFound=0
for query in queries:
+
+ if query[0]=="_" : query="-"+query[1:]
- #print query.split("=")[0]
- if query[0]=="_" : query[0]="-"
-
if query.split("=")[0].lower()=="-skip":
skipFound=1
@@ -829,12 +863,13 @@ class ZSQLExtendFolder(Folder,Persistent
newquery.append(query)
newquerystring=string.join(newquery,"&")
-
- return "%s"%(self.actualPath()+"?"+newquerystring,html)
+ return "%s"%(self.REQUEST['URL']+"?"+newquerystring,html)
+
def prevLink(self,html,storename="foundCount"):
"""prev link"""
+
try:
limit=self.REQUEST.SESSION[storename]['rangeSize']
if int(limit)==0 :
@@ -886,7 +921,7 @@ class ZSQLExtendFolder(Folder,Persistent
newquerystring=string.join(newquery,"&")
- return "%s"%(self.actualPath()+"?"+newquerystring,html)
+ return "%s"%(self.REQUEST['URL']+"?"+newquerystring,html)