|
|
| version 1.35, 2004/09/27 20:31:40 | version 1.41, 2004/10/19 11:24:12 |
|---|---|
| Line 13 from Products.PageTemplates.PageTemplate | Line 13 from Products.PageTemplates.PageTemplate |
| from Products.ZSQLMethods.SQL import SQLConnectionIDs | from Products.ZSQLMethods.SQL import SQLConnectionIDs |
| import Shared.DC.ZRDB.DA | import Shared.DC.ZRDB.DA |
| def sql_quote(self, v): | def sql_quote(v): |
| # quote dictionary | # quote dictionary |
| quote_dict = {"\'": "''", "\\": "\\\\"} | quote_dict = {"\'": "''", "\\": "\\\\"} |
| for dkey in quote_dict.keys(): | 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]) | v=join(split(v,dkey),quote_dict[dkey]) |
| return "'%s'" % v | return "'%s'" % v |
| Line 243 class ZSQLExtendFolder(Folder,Persistent | Line 243 class ZSQLExtendFolder(Folder,Persistent |
| def ZSQLInlineSearch(self,storename=None,**argv): | def ZSQLInlineSearch(self,storename=None,**argv): |
| """inlinesearch""" | """inlinesearch""" |
| qs=[] | qs=[] |
| if storename: | if storename: |
| """store""" | """store""" |
| Line 253 class ZSQLExtendFolder(Folder,Persistent | Line 254 class ZSQLExtendFolder(Folder,Persistent |
| #print "INLINE:",argv | #print "INLINE:",argv |
| for a in argv.keys(): | for a in argv.keys(): |
| try: | |
| qs.append(a+"="+urllib.quote(str(argv[a]))) | qs.append(a+"="+urllib.quote(str(argv[a]))) |
| except: | |
| import urllib | |
| qs.append(a+"="+urllib.quote(str(argv[a]))) | |
| #return [] | #return [] |
| return self.parseQueryString(string.join(qs,","),"_",storename=storename) | return self.parseQueryString(string.join(qs,","),"_",storename=storename) |
| Line 269 class ZSQLExtendFolder(Folder,Persistent | Line 275 class ZSQLExtendFolder(Folder,Persistent |
| def ZSQLSimpleSearch(self,query=None): | def ZSQLSimpleSearch(self,query=None): |
| """ returrn SQLSearch""" | """ returrn SQLSearch""" |
| #print query | |
| if not query: | if not query: |
| query=self.query | query=self.query |
| if getattr(self,'_v_search',None): | |
| if self.search.meta_type=="Z SQL Method": | 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) | return self.search(var=query) |
| else: | 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) | return self.aq_parent.aq_parent.search(var=query) |
| else: | else: |
| 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 [] | return [] |
| Line 335 class ZSQLExtendFolder(Folder,Persistent | Line 352 class ZSQLExtendFolder(Folder,Persistent |
| table=urllib.unquote(value) | table=urllib.unquote(value) |
| elif name=="-identify": | elif name=="-identify": |
| identify=urllib.unquote(value) | identify=urllib.unquote(value) |
| identify=identify.split("=")[0]+"="+libpq.PgQuoteString(identify.split("=")[1]) | identify=identify.split("=")[0]+"="+sql_quote(identify.split("=")[1]) |
| elif name=="-format": | elif name=="-format": |
| format=urllib.unquote(value) | format=urllib.unquote(value) |
| elif (not name[0]=="-") and (not len(value)==0): | elif (not name[0]=="-") and (not len(value)==0): |
| changeList.append("\""+name+"\"="+libpq.PgQuoteString(urllib.unquote(value))) | changeList.append("\""+name+"\"="+sql_quote(urllib.unquote(value))) |
| changeString=string.join(changeList,",") | changeString=string.join(changeList,",") |
| queryString="UPDATE %s SET %s WHERE %s"%(table,changeString,identify) | queryString="UPDATE %s SET %s WHERE %s"%(table,changeString,identify) |
| self.ZSQLSimpleSearch(queryString) | self.ZSQLSimpleSearch(queryString) |
| return self.REQUEST.RESPONSE.redirect(format) | return self.REQUEST.RESPONSE.redirect(format) |
| def ZSQLChange_old(self): | def ZSQLChange_old(self): |
| """Ändern von Einträgen""" | """change entries""" |
| qs=self.REQUEST['QUERY_STRING'] | qs=self.REQUEST['QUERY_STRING'] |
| #print "CHANGE QS",self.REQUEST | #print "CHANGE QS",self.REQUEST |
| #return self.REQUEST | #return self.REQUEST |
| Line 360 class ZSQLExtendFolder(Folder,Persistent | Line 377 class ZSQLExtendFolder(Folder,Persistent |
| table=urllib.unquote(value) | table=urllib.unquote(value) |
| elif name=="-identify": | elif name=="-identify": |
| identify=urllib.unquote(value) | identify=urllib.unquote(value) |
| identify=identify.split("=")[0]+"="+libpq.PgQuoteString(identify.split("=")[1]) | identify=identify.split("=")[0]+"="+sql_quote(identify.split("=")[1]) |
| elif name=="-format": | elif name=="-format": |
| format=urllib.unquote(value) | format=urllib.unquote(value) |
| elif (not name[0]=="-") and (not len(value)==0): | elif (not name[0]=="-") and (not len(value)==0): |
| changeList.append("\""+name+"\"="+libpq.PgQuoteString(urllib.unquote(value))) | changeList.append("\""+name+"\"="+sql_quote(urllib.unquote(value))) |
| changeString=string.join(changeList,",") | changeString=string.join(changeList,",") |
| queryString="UPDATE %s SET %s WHERE %s"%(table,changeString,identify) | queryString="UPDATE %s SET %s WHERE %s"%(table,changeString,identify) |
| self.ZSQLSimpleSearch(queryString) | self.ZSQLSimpleSearch(queryString) |
| Line 397 class ZSQLExtendFolder(Folder,Persistent | Line 414 class ZSQLExtendFolder(Folder,Persistent |
| ret.append(x) | ret.append(x) |
| return ret | return ret |
| #self.REQUEST.SESSION['come_from_search']="no" # zurücksetzen | #self.REQUEST.SESSION['come_from_search']="no" # zuruecksetzen |
| if qs=="": | if qs=="": |
| if self.REQUEST['QUERY_STRING']: | if self.REQUEST['QUERY_STRING']: |
| Line 507 class ZSQLExtendFolder(Folder,Persistent | Line 524 class ZSQLExtendFolder(Folder,Persistent |
| opfields={} | opfields={} |
| lopfields={} #Verknüpfung bei mehrfachauswahl von einem feld | lopfields={} #Verknüpfung bei mehrfachauswahl von einem feld |
| sortfields={} #order of sortfields | sortfields={} #order of sortfields |
| sortAllFields=None | |
| skip="" | skip="" |
| rangeStart=0 | rangeStart=0 |
| limit=0 | limit=0 |
| Line 545 class ZSQLExtendFolder(Folder,Persistent | Line 563 class ZSQLExtendFolder(Folder,Persistent |
| lopfields[field]=lop | lopfields[field]=lop |
| if name[0:10]==iCT+"sortorder": | if name[0:10]==iCT+"sortorder": |
| sort=value | #sort=value |
| field=name[11:] | field=name[11:] |
| sortfields[field]=sort | sortAllFields=None |
| #no field selected | |
| if field=="": | |
| sortAllFields=value | |
| else: | |
| sortfields[field]=value | |
| #print "HI",op,field | #print "HI",op,field |
| #print opfieldsa | #print opfieldsa |
| Line 564 class ZSQLExtendFolder(Folder,Persistent | Line 587 class ZSQLExtendFolder(Folder,Persistent |
| except: | except: |
| value="" | value="" |
| #value=libpq.PgQuoteString(value) | #value=sql_quote(value) |
| if name==iCT+"lop": | if name==iCT+"lop": |
| Line 588 class ZSQLExtendFolder(Folder,Persistent | Line 611 class ZSQLExtendFolder(Folder,Persistent |
| sortstrs=[] | sortstrs=[] |
| for word in value.split(','): | for word in value.split(','): |
| wordstr=word.lstrip().rstrip() | wordstr=word.lstrip().rstrip() |
| if sortAllFields: | |
| order=sortAllFields | |
| else: | |
| order=sortfields.get(wordstr,'ASC') | order=sortfields.get(wordstr,'ASC') |
| if not (wordstr == ""): | |
| sortstrs.append(wordstr+" "+order) | sortstrs.append(wordstr+" "+order) |
| if len(sortstrs)>0: | if len(sortstrs)>0: |
| sort="ORDER BY "+string.join(sortstrs,',') | sort="ORDER BY "+string.join(sortstrs,',') |
| elif name==iCT+"token": | elif name==iCT+"token": |
| if not nostore=="yes": | if not nostore=="yes": |
| self.REQUEST.SESSION['token']=value | self.REQUEST.SESSION['token']=value |
| Line 614 class ZSQLExtendFolder(Folder,Persistent | Line 643 class ZSQLExtendFolder(Folder,Persistent |
| namealt=name | namealt=name |
| name="LOWER("+name+")" | name="LOWER("+name+")" |
| if op=="ct": | if op=="ct": |
| tmp=(name+" LIKE "+libpq.PgQuoteString("%"+value+"%")) | tmp=(name+" LIKE "+sql_quote("%"+value+"%")) |
| elif op=="gt": | elif op=="gt": |
| tmp=(name+">"+libpq.PgQuoteString(value)) | tmp=(name+">"+sql_quote(value)) |
| elif op=="lt": | elif op=="lt": |
| tmp=(name+"<"+libpq.PgQuoteString(value)) | tmp=(name+"<"+sql_quote(value)) |
| elif op=="eq": | elif op=="eq": |
| tmp=(name+"="+libpq.PgQuoteString(value)) | tmp=(name+"="+sql_quote(value)) |
| elif op=="bw": | elif op=="bw": |
| tmp=(name+" LIKE "+libpq.PgQuoteString(value+"%")) | tmp=(name+" LIKE "+sql_quote(value+"%")) |
| elif op=="ew": | elif op=="ew": |
| tmp=(name+" LIKE "+libpq.PgQuoteString("%"+value)) | tmp=(name+" LIKE "+sql_quote("%"+value)) |
| elif op=="all": | elif op=="all": |
| tmps=[] | tmps=[] |
| for word in value.split(" "): | for word in value.split(" "): |
| tmps.append(name+" LIKE "+libpq.PgQuoteString("%"+word+"%")) | tmps.append(name+" LIKE "+sql_quote("%"+word+"%")) |
| tmp=string.join(tmps,' AND ') | tmp=string.join(tmps,' AND ') |
| Line 642 class ZSQLExtendFolder(Folder,Persistent | Line 671 class ZSQLExtendFolder(Folder,Persistent |
| searchFields[name]=tmp | searchFields[name]=tmp |
| searchFieldsOnly[name]=value | 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 "+libpq.PgQuoteString("%"+value+"%")) | |
| ## elif op=="gt": | |
| ## whereList.append(name+">"+libpq.PgQuoteString(value)) | |
| ## elif op=="lt": | |
| ## whereList.append(name+"<"+libpq.PgQuoteString(value)) | |
| ## elif op=="eq": | |
| ## whereList.append(name+"="+libpq.PgQuoteString(value)) | |
| ## elif op=="bw": | |
| ## whereList.append(name+" LIKE "+libpq.PgQuoteString(value+"%")) | |
| ## elif op=="ew": | |
| ## whereList.append(name+" LIKE "+libpq.PgQuoteString("%"+value)) | |
| ## op="ct" | |
| ## #except: | |
| ## # print "END",value,name,Exception | |
| whereList=["("+searchFields[x]+")" for x in searchFields.keys()] | whereList=["("+searchFields[x]+")" for x in searchFields.keys()] |
| if len(whereList)>0: | if len(whereList)>0: |
| Line 690 class ZSQLExtendFolder(Folder,Persistent | Line 693 class ZSQLExtendFolder(Folder,Persistent |
| where+="and "+restrictConnect[0]+" in ("+restrictConnect[1]+")" | where+="and "+restrictConnect[0]+" in ("+restrictConnect[1]+")" |
| #print "QE",table | #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) | query="SELECT %s FROM %s %s %s %s %s"%(select,table,where,sort,maxstr,skip) |
| if not nostore=="yes": | if not nostore=="yes": |
| Line 738 class ZSQLExtendFolder(Folder,Persistent | Line 741 class ZSQLExtendFolder(Folder,Persistent |
| def ZSQLQuery(self,query): | def ZSQLQuery(self,query): |
| """query""" | """query""" |
| #print "hi",query | |
| return self.ZSQLSimpleSearch(query) | return self.ZSQLSimpleSearch(query) |
| def ZSQLSearch(self): | def ZSQLSearch(self): |
| Line 800 class ZSQLExtendFolder(Folder,Persistent | Line 804 class ZSQLExtendFolder(Folder,Persistent |
| if self.REQUEST['QUERY_STRING']=="": | if self.REQUEST['QUERY_STRING']=="": |
| qs=self.REQUEST.SESSION['query'] | qs=self.REQUEST.SESSION['query'] |
| queries=string.split(qs,",") | queries=string.split(qs,",")[0:] |
| else: | else: |
| qs=self.REQUEST['QUERY_STRING'] | qs=self.REQUEST['QUERY_STRING'] |
| queries=string.split(qs,"&") | queries=string.split(qs,"&")[0:] |
| Line 815 class ZSQLExtendFolder(Folder,Persistent | Line 819 class ZSQLExtendFolder(Folder,Persistent |
| for query in queries: | for query in queries: |
| #print query.split("=")[0] | if query[0]=="_" : query="-"+query[1:] |
| if query[0]=="_" : query[0]="-" | |
| if query.split("=")[0].lower()=="-skip": | if query.split("=")[0].lower()=="-skip": |