--- ZSQLExtend/ZSQLExtend.py 2007/02/20 16:00:03 1.103
+++ ZSQLExtend/ZSQLExtend.py 2007/02/22 13:23:20 1.105
@@ -798,6 +798,8 @@ class ZSQLExtendFolder(Folder,Persistent
@parameter valueName: (optional) Name des Feldes, dass als im option-tag ausgegeben wird, default wert ist valueName=fieldName
@start: (optional) falls zusaetzliches option tag erzeugt werden soll, gibt start an was im option tag steht
@startValue: gibt den entsprechenden Wert an.
+ @linelen: (optional) maximale laenge eines Eintrages
+ der im Klappmenue noch angezeigt wird, laengeres wird abgeschnitten.
"""
if not valueName:
valueName=fieldName
@@ -890,7 +892,7 @@ class ZSQLExtendFolder(Folder,Persistent
def ZSQLInlineSearch(self,storename=None,args=None,**argv):
"""inlinesearch"""
-
+
qs=[]
if storename:
"""store"""
@@ -908,7 +910,16 @@ class ZSQLExtendFolder(Folder,Persistent
#print "INLINE:",argv
for a in argTmp.keys():
aFiltered=re.sub(r"^-","_",a) # beginning of a command should always be "_"
- qs.append(aFiltered+"="+urllib.quote(str(argTmp[a])))
+
+ if type(argTmp[a]) is ListType: # ein parameter zweimal
+ value=""
+ #TODO find a better solution, currently only the last non empty entry is used.
+ for x in argTmp[a]:
+ if x:
+ value=x
+ else:
+ value=str(argTmp[a])
+ qs.append(aFiltered+"="+urllib.quote(value))
#return []
@@ -1144,7 +1155,7 @@ class ZSQLExtendFolder(Folder,Persistent
- def ZSQLFind(self,qs="",select="oid,*",storename=None,tableExt=None,NoQuery=None,NoLimit=None,restrictField=None,restrictConnect=None,filter=None,**argv):
+ def ZSQLFind(self,qs="",select="oid,*",storename="foundCount",tableExt=None,NoQuery=None,NoLimit=None,restrictField=None,restrictConnect=None,filter=None,**argv):
"""search in database"""
def delEmpty(list):
@@ -1196,136 +1207,94 @@ class ZSQLExtendFolder(Folder,Persistent
qs=string.join(delEmpty(qs.split(",")),",")
- if storename:
- """store"""
- else:
- storename="foundCount"
#store query for further usage
+ #TODO: erste der beiden ist ueberfluessig
self.REQUEST.SESSION['query']=qs
-
+ if not self.REQUEST.SESSION.has_key(storename):
+ self.REQUEST.SESSION[storename]={}
+
+ self.REQUEST.SESSION[storename]['qs']=qs
+
+
#print "calling Query with",repr(NoQuery)
ret=self.parseQueryString(qs,"-",select=select,storemax="yes",storename=storename,tableExt=tableExt,NoQuery=NoQuery,NoLimit=NoLimit,restrictField=restrictField,restrictConnect=restrictConnect,filter=filter)
#print self.REQUEST.SESSION["foundCount"]
-
return ret
def ZSQLFoundCountLen(self,var):
return len(var)
- def ZSQLFoundCount(self,qs="",select="*",storename=None):
-
- ## if qs=="":
-
-## if self.REQUEST['QUERY_STRING']:
-
-## qs=self.REQUEST['QUERY_STRING']
-## qs=string.join(qs.split("&"),",")
-## else:
-
-## qs=self.REQUEST.SESSION['query']
-## else:
-## qs=string.join(qs.split("&"),",")
-
-
-## temp= self.parseQueryString(qs,"-",select=select,storemax="yes",nostore="yes")
- if storename:
- """store"""
- else:
- storename="foundCount"
-
+ def ZSQLFoundCount(self,qs="",select="*",storename="foundCount"):
+
return self.REQUEST.SESSION[storename]['count']
- def ZSQLRangeStart(self,storename=None):
-
- if storename:
- """store"""
- else:
- storename="foundCount"
-
+ def ZSQLRangeStart(self,storename="foundCount"):
+
return int(self.REQUEST.SESSION[storename]['rangeStart'])+1
- def ZSQLRangeSize(self,storename=None):
+ def ZSQLRangeSize(self,storename="foundCount"):
- if storename:
- """store"""
- else:
- storename="foundCount"
-
return self.REQUEST.SESSION[storename]['rangeSize']
- def ZSQLRangeEnd(self,storename=None):
-
- if storename:
- """store"""
- else:
- storename="foundCount"
-
+ def ZSQLRangeEnd(self,storename="foundCount"):
+
return str(min(int(self.REQUEST.SESSION[storename]['rangeEnd']),int(self.REQUEST.SESSION[storename]['count'])))
- def ZSQLNewQuery(self,linkText,storename=None,**argv):
+ def ZSQLNewQuery(self,linkText,storename="foundCount",**argv):
"""suche neu"""
return self.ZSQLNewSearch(linkText,storename,url=self.REQUEST['URL'],args=argv)
- def ZSQLNewSearch(self,linkText,storename=None,url=None,args=None,**argv):
+ def ZSQLNewSearch(self,linkText,storename="foundCount",url=None,args=None,**argv):
"""suche mit alten parametern bis auf die in argv getauschten"""
str = self.ZSQLNewSearchURL(storename, url, args, **argv)
return """ %s"""%(str,linkText)
- def ZSQLNewSearchURL(self, storename=None,url=None,args=None,**argv):
+ def ZSQLNewSearchURL(self, storename="foundCount",url=None,args=None,**argv):
"""suche mit alten parametern bis auf die in argv getauschten"""
-
- if storename:
- """store"""
- else:
- storename="foundCount"
- qs=self.REQUEST.SESSION[storename]['qs']
-
if args:
argv=args
-
+
+ #get the old queries
+ qs=self.REQUEST.SESSION[storename]['qs']
querys=qs.split(",")
+
+ #which arguments are in the old query string
+
+ queryList={}
+ for query in querys:
+ arg=query.split("=")[0]
+ if arg[0]=="_": arg="-"+arg[1:] # sicherstellen, dass an Anfang stets "_"
+ queryList[arg]=query.split("=")[1]
+
+
argList=[]
arg=""
- queryList=[x.split("=")[0] for x in querys]
+
+
+ #gehe durch die zu aendernden Argumente
for argTmp in argv.keys():
-
- arg=argTmp[0:]
-
+ arg=argTmp[0:]# sicherstellen, dass der string auh kopiert wird
+ if arg[0]=="_": arg="-"+arg[1:] # sicherstellen, dass an Anfang stets "_"
- if arg not in queryList: # noch nicht drin
- querys.append("%s=%s"%(arg,argv[argTmp]))
- argList.append(arg)
-
-
-
- newquery=[]
- for query in querys:
- queryArg=query.split("=")[0]
- qarg=queryArg[0:]
- if qarg[0]=="-":qarg="_"+queryArg[1:] # aender _ in - als standard
-
- if queryArg in argList:
- newquery.append("%s=%s"%(queryArg,argv[qarg]))
- else:
- newquery.append(query)
+ queryList[arg]=argv[argTmp]
if url:
- str=url+"?"+"&".join(newquery)
+ str=url+"?"+urllib.urlencode(queryList)
else:
- str="ZSQLSearch?"+"&".join(newquery)
+ str="ZSQLSearch?"+urllib.urlencode(queryList)
return str
- def parseQueryString(self,qs,iCT,storemax="no",select=None,nostore=None,storename=None,tableExt=None,NoQuery=None,NoLimit=None,restrictField=None,restrictConnect=None,filter=None):
+ def parseQueryString(self,qs,iCT,storemax="no",select=None,nostore=None,storename="foundCount",tableExt=None,NoQuery=None,NoLimit=None,restrictField=None,restrictConnect=None,filter=None):
"""analysieren den QueryString"""
-
+
#setzte generische werte
lop="AND" # standardsuche mit and
@@ -1402,8 +1371,10 @@ class ZSQLExtendFolder(Folder,Persistent
name=re.sub("r'+'"," ",q.split("=")[0].lower())
+
try:
value=urllib.unquote(q.split("=",1)[1])
+
except:
value=""
@@ -1518,6 +1489,7 @@ class ZSQLExtendFolder(Folder,Persistent
#print "OP",op,name
value=value.lower()
+
tmp=""
if opfields.has_key(name):
op=opfields[name]
@@ -1598,7 +1570,7 @@ class ZSQLExtendFolder(Folder,Persistent
self.REQUEST.SESSION['qs']=opfields
#print "IAMHERE again:", query
- if storename and (not NoQuery):
+ if not NoQuery:
query2="SELECT count(*) FROM %s %s"%(table,where)
@@ -1607,9 +1579,9 @@ class ZSQLExtendFolder(Folder,Persistent
self.REQUEST.SESSION[storename]={}
self.REQUEST.SESSION[storename]['qs']=qs #sichere Querystring
-
+
if self.REQUEST.SESSION[storename].has_key('queryString2'):
-
+
if not self.REQUEST.SESSION[storename]['queryString2']==query2:
#print "HOOOOO",storename
self.REQUEST.SESSION[storename]['queryString2']=query2
@@ -1620,9 +1592,10 @@ class ZSQLExtendFolder(Folder,Persistent
#print "QUERY",query2,"::::",self.REQUEST.SESSION[storename]['queryString2']
else:
-
+
self.REQUEST.SESSION[storename]['queryString2']=query2
if self.ZSQLSimpleSearch(query2):
+
self.REQUEST.SESSION[storename]['count']=self.ZSQLSimpleSearch(query2)[0].count
else:
self.REQUEST.SESSION[storename]['count']=0
@@ -1630,7 +1603,11 @@ class ZSQLExtendFolder(Folder,Persistent
self.REQUEST.SESSION[storename]['rangeStart']=rangeStart
- if limit=="all":
+
+
+ self.REQUEST.SESSION[storename]['rangeEnd']=self.REQUEST.SESSION[storename]['count']
+
+ if (limit=="all") or (limit==int(limit)):
self.REQUEST.SESSION[storename]['rangeEnd']=self.REQUEST.SESSION[storename]['count']
else:
self.REQUEST.SESSION[storename]['rangeEnd']=int(rangeStart)+int(limit)
@@ -1723,7 +1700,7 @@ class ZSQLExtendFolder(Folder,Persistent
limit=1
newRangeStart=0
- if newRangeStart>=self.REQUEST.SESSION[storename]['count']:
+ if (newRangeStart>=self.REQUEST.SESSION[storename]['count']) or (self.REQUEST.SESSION[storename]['count']==self.REQUEST.SESSION[storename]['rangeEnd']):
#newRangeStart=self.REQUEST.SESSION[storename]['count']-1
return ""
@@ -1822,64 +1799,7 @@ class ZSQLExtendFolder(Folder,Persistent
- def prevLink_old(self,html):
- """prev link"""
- if self.REQUEST['QUERY_STRING']=="":
- qs=self.REQUEST.SESSION['query']
- else:
- qs=self.REQUEST['QUERY_STRING']
- max=re.search(r'max\=(.*)\,',qs.lower())
- offset=re.search(r'offset\=(.*)\,',qs.lower())
- if not offset:
- offsetnew=0
- else:
- offsetnew=int(offset)-max
- if offsetnew<0:
- offsetnew=0
- queries=string.split(qs,",")
- newquery=[]
- if offset:
- for query in queries:
- if query.split("=")[0].lower()=="offset":
- query="-offset=%i"%offsetnew
- newquery.append(query)
- newquerystring=string.join(newquery,"&")
- else:
- queries.append("-offset=%i"%offsetnew)
- newquerystring=string.join(queries,"&")
- return "%s"%(self.actualPath()+"?"+newquerystring,html)
-
- def nextLink_old(self,html):
- """prev link"""
- if self.REQUEST['QUERY_STRING']=="":
- qs=self.REQUEST.SESSION['query']
- else:
- qs=self.REQUEST['QUERY_STRING']
- max=re.search(r'max\=(.*)\,',qs.lower())
-
- offset=re.search(r'offset\=(.*)\,',qs.lower())
- if not offset:
- offsetnew=1
- else:
- offsetnew=int(offset)+int(max)
- if offsetnew<0:
- offsetnew=0
- queries=string.split(qs,",")
- newquery=[]
- if offset:
- for query in queries:
-
- if query.split("=")[0].lower()=="-offset":
- query="-offset=%i"%offsetnew
- newquery.append(query)
- newquerystring=string.join(newquery,"&")
- else:
- queries.append("-offset=%i"%offsetnew)
- newquerystring=string.join(queries,"&")
-
- return "%s"%(self.actualPath()+"?"+newquerystring,html)
-
-
+
manage_addZSQLExtendFolderForm=DTMLFile('ZSQLExtendFolderAdd', globals())
def manage_addZSQLExtendFolder(self, id, title='', label='', description='',