--- ZSQLExtend/ZSQLExtend.py 2004/10/21 15:58:29 1.43 +++ ZSQLExtend/ZSQLExtend.py 2004/12/04 21:33:12 1.52 @@ -1,7 +1,7 @@ from OFS.Folder import Folder from Globals import Persistent from Acquisition import Implicit -from Globals import DTMLFile +from Globals import DTMLFile,package_home import urllib import re import string @@ -18,6 +18,9 @@ def analyseIntSearch(word): splitted=word.split("-") + if len(splitted)==1: + return "="+splitted[0] + if splitted[0]=="": return "< "+splitted[1] @@ -50,7 +53,10 @@ class ZSQLExtendFolder(Folder,Persistent wherePart="museum_no like 'VAT%'" classes=['Uruk III','Uruk IV'] return self.searchRel(relStatement,statement,wherePart,classes) - + + def URLquote(self,txt): + """urlquote""" + return urllib.quote(txt) def searchRel(self,relStatement,statement,wherePart,classes): """suche relative haufigkeiten""" ret={} @@ -68,7 +74,7 @@ class ZSQLExtendFolder(Folder,Persistent obj=getattr(self,"ZSQLBibliography_template") return obj() except: - pt=PageTemplateFile('Products/ZSQLExtend/zpt/ZSQLBibliography_template_standard.zpt',content_type='text/htm').__of__(self) + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ZSQLBibliography_template_standard.zpt'),content_type='text/html').__of__(self) pt.content_type="text/html" return pt() @@ -101,7 +107,7 @@ class ZSQLExtendFolder(Folder,Persistent def changeZSQLExtendForm(self): """change folder config""" - pt=PageTemplateFile('Products/ZSQLExtend/zpt/changeZSQLExtendForm.zpt').__of__(self) + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeZSQLExtendForm.zpt')).__of__(self) return pt() @@ -213,24 +219,38 @@ class ZSQLExtendFolder(Folder,Persistent ret+="""""" return ret - def ZSQLOptionsFromSearchList(self,fieldname,results,fieldName,valueName=None,start=None, multiple='',startValue=None): - """generate select oprions form a search list seperated list""" + def ZSQLOptionsFromSearchList(self,fieldname,results,fieldName,valueName=None,start=None, multiple='',startValue=None,additionalSelect=""): + """generate select options form a search list + es wird + - """%(fieldname,multiple) + ret="""""" return ret @@ -377,46 +397,17 @@ class ZSQLExtendFolder(Folder,Persistent self.ZSQLSimpleSearch(queryString) return self.REQUEST.RESPONSE.redirect(format) - def ZSQLChange_old(self): - """change entries""" - qs=self.REQUEST['QUERY_STRING'] - #print "CHANGE QS",self.REQUEST - #return self.REQUEST - changeList=[] - for q in qs.split("&"): - name=urllib.unquote(re.sub("r'+'"," ",q.split("=")[0].lower())) - value=q.split("=")[1] - value=re.sub(r'\+'," ",value) - value=urllib.unquote(value) - if name=="-table": - table=urllib.unquote(value) - elif name=="-identify": - identify=urllib.unquote(value) - identify=identify.split("=")[0]+"="+sql_quote(identify.split("=")[1]) - elif name=="-format": - format=urllib.unquote(value) - elif (not name[0]=="-") and (not len(value)==0): - changeList.append("\""+name+"\"="+sql_quote(urllib.unquote(value))) - changeString=string.join(changeList,",") - queryString="UPDATE %s SET %s WHERE %s"%(table,changeString,identify) - self.ZSQLSimpleSearch(queryString) - return self.REQUEST.RESPONSE.redirect(format) + - - - def ZSQLFind2(self,qs="",select="oid,*",storename=None,tableList=['cdli_translit','cdli_cat'],**argv): + def ZSQLFind2(self,qs="",select="oid,*",storename=None,tableList=['cdli_translit','cdli_cat'],restrictField='id_text',**argv): """find2""" - #search1= self.ZSQLFind(qs="",select="oid,*",storename=None,tableExt='cdli_translit',restrictField='id_text',NoQuery='yes',NoLimit='yes',**argv) - - - #search2 = self.ZSQLFind(tableExt='cdli_cat',qs="",select="oid,*",storename=None,restrictConnect=('cdli_cat.id_text',search1),**argv) - search1= self.ZSQLFind(qs="",select="oid,*",storename=None,tableExt='cdli_cat',restrictField='id_text',NoQuery='yes',NoLimit='yes',**argv) - - search2 = self.ZSQLFind(tableExt='cdli_translit',qs="",select="oid,*",storename=None,restrictConnect=('cdli_translit.id_text',search1),**argv) + search1= self.ZSQLFind(qs=qs,select=select,storename=storename,tableExt=tableList[1],restrictField=restrictField,NoQuery='yes',NoLimit='yes',**argv) + + search2 = self.ZSQLFind(tableExt=tableList[0],qs=qs,select=select,storename=storename,restrictConnect=(tableList[0]+"."+restrictField,search1),**argv) return search2 - #return self.ZSQLFind(qs="",select="oid,*",storename=None,tableExt=None,NoQuery=None,**argv) + def ZSQLFind(self,qs="",select="oid,*",storename=None,tableExt=None,NoQuery=None,NoLimit=None,restrictField=None,restrictConnect=None,filter=None,**argv): """Find""" @@ -428,7 +419,9 @@ class ZSQLExtendFolder(Folder,Persistent if (len(splitted)>1) and not (splitted[1]==' '): ret.append(x) return ret - + + + #self.REQUEST.SESSION['come_from_search']="no" # zuruecksetzen if qs=="": @@ -437,19 +430,29 @@ class ZSQLExtendFolder(Folder,Persistent qs=string.join(qs.split("&"),",") - + for field in argv.keys(): - - qs+=",-%s=%s"%(field,argv[field]) + if field[0]=="_": + fieldTmp="-"+field[1:] + else: + fieldTmp=field + + qs+=",%s=%s"%(fieldTmp,argv[field]) else: - + qs=self.REQUEST.SESSION.get('query','') for field in argv.keys(): - #print field - qs+=",-%s=%s"%(field,argv[field]) - + if field[0]=="_": + fieldTmp="-"+field[1:] + else: + fieldTmp=field + + qs+=",%s=%s"%(fieldTmp,argv[field]) + + + else: self.REQUEST['QUERY_STRING']=qs @@ -466,11 +469,14 @@ class ZSQLExtendFolder(Folder,Persistent else: storename="foundCount" + #store query for further usage + self.REQUEST.SESSION['query']=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 @@ -526,18 +532,70 @@ class ZSQLExtendFolder(Folder,Persistent storename="foundCount" return str(min(int(self.REQUEST.SESSION[storename]['rangeEnd']),int(self.REQUEST.SESSION[storename]['count']))) + + def ZSQLNewQuery(self,linkText,storename=None,**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): + """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 + + querys=qs.split(",") + argList=[] + arg="" + queryList=[x.split("=")[0] for x in querys] + + for argTmp in argv.keys(): + + + arg=argTmp[0:] + if arg[0]=="_":arg="-"+argTmp[1:] # aender _ in - als standard + + 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) + + if url: + str=url+"?"+"&".join(newquery) + else: + str="ZSQLSearch?"+"&".join(newquery) + + return """ %s"""%(str,linkText) 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): """analysieren den QueryString""" - #print "NO",nostore + + lop="AND" # standardsuche mit and - max="ALL" #standard alle auswählen + max="ALL" #standard alle auswaehlen maxstr="" whereList=[] sort="" op="bw" opfields={} - lopfields={} #Verknüpfung bei mehrfachauswahl von einem feld + lopfields={} #Verknuepfung bei mehrfachauswahl von einem feld sortfields={} #order of sortfields sortAllFields=None skip="" @@ -549,6 +607,9 @@ class ZSQLExtendFolder(Folder,Persistent select="oid,*" #print "Q",nostore,qs #check for op + + + splitted=qs.split(",") if tableExt: @@ -591,8 +652,9 @@ class ZSQLExtendFolder(Folder,Persistent #print "HI",op,field #print opfieldsa #now analyse the querystring + for q in qs.split(","): - + #try: @@ -601,10 +663,10 @@ class ZSQLExtendFolder(Folder,Persistent value=urllib.unquote(q.split("=",1)[1]) except: value="" - - #value=sql_quote(value) + #value=sql_quote(value) + if name==iCT+"lop": lop=value elif name==iCT+"table": @@ -647,7 +709,7 @@ class ZSQLExtendFolder(Folder,Persistent elif (not name[0]==iCT) and (not len(value)==0): - + #print "OP",op,name value=value.lower() tmp="" @@ -688,18 +750,19 @@ class ZSQLExtendFolder(Folder,Persistent tmp=string.join(tmps,' OR ') - op="ct" + op="all" if (not tableExt) or (namealt.split('.')[0]==tableExt): - if searchFields.has_key(name): - searchFields[name]+=lopfields.get(name,'OR')+" "+tmp - searchFieldsOnly[name]+=lopfields.get(name,'OR')+" "+value + if searchFields.has_key(namealt): + searchFields[namealt]+=lopfields.get(name,'OR')+" "+tmp + searchFieldsOnly[namealt]+=lopfields.get(name,'OR')+" "+value else: - searchFields[name]=tmp - searchFieldsOnly[name]=value + searchFields[namealt]=tmp + searchFieldsOnly[namealt]=value - whereList=["("+searchFields[x]+")" for x in searchFields.keys()] + whereList=["("+searchFields[x]+")" for x in searchFields.keys()] + if len(whereList)>0: if filter: whereStr="("+string.join(whereList," "+lop+" ")+") AND "+filter @@ -713,7 +776,7 @@ class ZSQLExtendFolder(Folder,Persistent where="" if restrictConnect: - + if len(where)==0: where="WHERE "+restrictConnect[0]+" in ("+restrictConnect[1]+")" else: @@ -734,6 +797,9 @@ class ZSQLExtendFolder(Folder,Persistent #print "QUERYSTRING:",self.REQUEST.SESSION[storename]['queryString2'] if not self.REQUEST.SESSION.has_key(storename): 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: @@ -765,27 +831,50 @@ class ZSQLExtendFolder(Folder,Persistent else: return query - + + def ZSQLUniqueQuery(self,value,returns): + """unique relation""" + if returns: + statement="""select %s from %s where %s = '%s' """%(returns[1],returns[0],returns[2],value) + founds=self.ZSQLSimpleSearch(statement) + if founds: + return getattr(founds[0],returns[1]) + else: + return value + else: + return value + def ZSQLQuery(self,query): """query""" - #print "hi",query + return self.ZSQLSimpleSearch(query) + def ZSQLSearch(self): """To be done""" rq=self.REQUEST['QUERY_STRING'] + querys=rq.split("&") - + + formatfile=self.REQUEST['URL1'] #generisch redirect zur gleichen url + for querytemp in querys: query=querytemp.split("=") + + + + try: if query[0].lower()=="-format": formatfile=query[1] except: """nothing""" + + #print formatfile + self.REQUEST.SESSION['query']=string.join(self.REQUEST['QUERY_STRING'].split("&"),",") self.REQUEST.SESSION['come_from_search']="yes" @@ -860,8 +949,8 @@ 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"): @@ -887,7 +976,7 @@ class ZSQLExtendFolder(Folder,Persistent if self.REQUEST['QUERY_STRING']=="": qs=self.REQUEST.SESSION['query'] - #qs=re.sub(r'_','-',qs) #aendern für query + #qs=re.sub(r'_','-',qs) #aendern fuer query queries=string.split(qs,",") @@ -918,7 +1007,7 @@ class ZSQLExtendFolder(Folder,Persistent newquerystring=string.join(newquery,"&") - return "%s"%(self.actualPath()+"?"+newquerystring,html) + return "%s"%(self.REQUEST['URL']+"?"+newquerystring,html) @@ -1043,7 +1132,7 @@ class ZSQLBibliography(Folder,ZSQLExtend def changeZSQLBibliographyForm(self): """change folder config""" - pt=PageTemplateFile('Products/ZSQLExtend/zpt/changeZSQLBibliographyForm.zpt').__of__(self) + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeZSQLBibliographyForm.zpt')).__of__(self) return pt() @@ -1054,7 +1143,7 @@ class ZSQLBibliography(Folder,ZSQLExtend obj=getattr(self,"ZSQLBibliography_template") return obj() except: - pt=PageTemplateFile('Products/ZSQLExtend/zpt/ZSQLBibliography_template_standard.zpt').__of__(self) + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ZSQLBibliography_template_standard.zpt')).__of__(self) pt.content_type="text/html" return pt() @@ -1147,13 +1236,13 @@ class ZSQLBibliography(Folder,ZSQLExtend fn=os.path.splitext(self.REQUEST['fn'])[0]+"." self.REQUEST['fn']=fn - pt=PageTemplateFile('Products/ZSQLExtend/zpt/record2.xml').__of__(self) + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','record2.xml')).__of__(self) pt.content_type="text/xml" return pt() def getMetaDataXML(self): """crate index meta""" - pt=PageTemplateFile('Products/ZSQLExtend/zpt/record.xml').__of__(self) + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','record.xml')).__of__(self) pt.content_type="text/xml" return pt()