Diff for /ZSQLExtend/ZSQLExtend.py between versions 1.33 and 1.53

version 1.33, 2004/09/12 11:05:43 version 1.53, 2005/01/12 19:13:34
Line 1 Line 1
 from OFS.Folder import Folder  from OFS.Folder import Folder
 from Globals import Persistent  from Globals import Persistent
 from Acquisition import Implicit  from Acquisition import Implicit
 from Globals import DTMLFile  from Globals import DTMLFile,package_home
 import urllib  import urllib
 import re  import re
 import string  import string
 from pyPgSQL import libpq  #from pyPgSQL import libpq
 from AccessControl import getSecurityManager  from AccessControl import getSecurityManager
 import os.path  import os.path
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile  from Products.PageTemplates.PageTemplateFile import PageTemplateFile
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 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 string.find(v, dkey) >= 0:
               v=join(split(v,dkey),quote_dict[dkey])
       return "'%s'" % v
   
 def showSQLConnectionIDs(self):  def showSQLConnectionIDs(self):
     return SQLConnectionIDs(self)      return SQLConnectionIDs(self)
   
Line 28  class ZSQLExtendFolder(Folder,Persistent Line 54  class ZSQLExtendFolder(Folder,Persistent
         classes=['Uruk III','Uruk IV']          classes=['Uruk III','Uruk IV']
         return self.searchRel(relStatement,statement,wherePart,classes)          return self.searchRel(relStatement,statement,wherePart,classes)
           
       def URLquote(self,txt):
           """urlquote"""
           return urllib.quote(txt)
     def searchRel(self,relStatement,statement,wherePart,classes):      def searchRel(self,relStatement,statement,wherePart,classes):
         """suche relative haufigkeiten"""          """suche relative haufigkeiten"""
         ret={}          ret={}
         allRecords=len(self.ZSQLSimpleSearch(statement + " where "+wherePart))          allRecords=len(self.ZSQLSimpleSearch(statement + " where "+wherePart))
         print statement + " where "+wherePart          
         for oneclass in classes:          for oneclass in classes:
             ret[oneclass]=len(self.ZSQLSimpleSearch(statement + " where ("+wherePart+") and "+ relStatement%oneclass))              ret[oneclass]=len(self.ZSQLSimpleSearch(statement + " where ("+wherePart+") and "+ relStatement%oneclass))
             print statement + " where ("+wherePart+") and "+ relStatement%oneclass          
         return (ret,allRecords)          return (ret,allRecords)
                                       
     def content_html(self):      def content_html(self):
Line 45  class ZSQLExtendFolder(Folder,Persistent Line 74  class ZSQLExtendFolder(Folder,Persistent
             obj=getattr(self,"ZSQLBibliography_template")              obj=getattr(self,"ZSQLBibliography_template")
             return obj()              return obj()
         except:          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"              pt.content_type="text/html"
                           
             return pt()              return pt()
Line 78  class ZSQLExtendFolder(Folder,Persistent Line 107  class ZSQLExtendFolder(Folder,Persistent
   
     def changeZSQLExtendForm(self):      def changeZSQLExtendForm(self):
         """change folder config"""          """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()          return pt()
   
   
Line 190  class ZSQLExtendFolder(Folder,Persistent Line 219  class ZSQLExtendFolder(Folder,Persistent
         ret+="""</select>"""          ret+="""</select>"""
         return ret          return ret
   
     def ZSQLOptionsFromSearchList(self,fieldname,results,fieldName,valueName=None,start=None, multiple='',startValue=None):      def ZSQLOptionsFromSearchList(self,fieldname,results,fieldName,valueName=None,start=None, multiple='',startValue=None,additionalSelect=""):
         """generate select oprions form a search list seperated list"""          """generate select options form a search list
           es wird
           <select name=fieldname mutiple>
           <option value=startValue>start</option>
           <option value=result.fieldName>result.fieldValue</option>
           erzeugt.
           
           @parameter fieldname: Name fuer name-wert im select-tag
           @results results: Resultobject einer SQL-suche
           @parameter fieldName: Name des Feldes, das als value in den option-tag geschrieben werden soll.
           @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.
           """
         if not valueName:          if not valueName:
             valueName=fieldName              valueName=fieldName
                           
         ret="""<select name="%s" %s>          ret="""<select name="%s" %s %s>
             """%(fieldname,multiple)              """%(fieldname,multiple,additionalSelect)
         if start:          if start:
         if start==' ':          if start==' ':
         start=''          start=''
Line 207  class ZSQLExtendFolder(Folder,Persistent Line 249  class ZSQLExtendFolder(Folder,Persistent
         for result in results:          for result in results:
             field=getattr(result,fieldName)              field=getattr(result,fieldName)
             fieldValue=getattr(result,valueName)              fieldValue=getattr(result,valueName)
               if fieldValue:
             ret+="""<option value="%s">%s</option>"""%(field,fieldValue)              ret+="""<option value="%s">%s</option>"""%(field,fieldValue)
         ret+="""</select>"""          ret+="""</select>"""
         return ret          return ret
Line 235  class ZSQLExtendFolder(Folder,Persistent Line 278  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 245  class ZSQLExtendFolder(Folder,Persistent Line 289  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 261  class ZSQLExtendFolder(Folder,Persistent Line 310  class ZSQLExtendFolder(Folder,Persistent
   
     def ZSQLSimpleSearch(self,query=None):      def ZSQLSimpleSearch(self,query=None):
         """ returrn SQLSearch"""          """ returrn SQLSearch"""
           #print "hi",query
         if not query:          if not query:
             query=self.query              query=self.query
           if getattr(self,'_v_search',None):
               
               return self._v_search(var=query)
                         
         if self.search.meta_type=="Z SQL Method":          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 294  class ZSQLExtendFolder(Folder,Persistent Line 354  class ZSQLExtendFolder(Folder,Persistent
         valueList=[]          valueList=[]
         for x in addList.keys():          for x in addList.keys():
             keyList.append("\""+x+"\"")              keyList.append("\""+x+"\"")
             valueList.append(libpq.PgQuoteString(addList[x]))              valueList.append(sql_quote(addList[x]))
   
         keyString=string.join(keyList,",")          keyString=string.join(keyList,",")
         valueString=string.join(valueList,",")          valueString=string.join(valueList,",")
Line 304  class ZSQLExtendFolder(Folder,Persistent Line 364  class ZSQLExtendFolder(Folder,Persistent
         return self.REQUEST.RESPONSE.redirect(format)          return self.REQUEST.RESPONSE.redirect(format)
                   
     def ZSQLChange(self,**argv):      def ZSQLChange(self,**argv):
         """Ändern von Einträgen"""          """change entries"""
         #qs=self.REQUEST['QUERY_STRING']          #qs=self.REQUEST['QUERY_STRING']
         # very bad hack          # very bad hack
         qs_temp=[]          qs_temp=[]
Line 327  class ZSQLExtendFolder(Folder,Persistent Line 387  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":  
                 format=urllib.unquote(value)  
             elif (not name[0]=="-") and (not len(value)==0):  
                 changeList.append("\""+name+"\"="+libpq.PgQuoteString(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 ZSQLChange_old(self):  
         """Ändern von Einträgen"""  
         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]+"="+libpq.PgQuoteString(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 364  class ZSQLExtendFolder(Folder,Persistent Line 399  class ZSQLExtendFolder(Folder,Persistent
   
   
   
     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"""          """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=qs,select=select,storename=storename,tableExt=tableList[1],restrictField=restrictField,NoQuery='yes',NoLimit='yes',**argv)
   
         search1= self.ZSQLFind(qs="",select="oid,*",storename=None,tableExt='cdli_cat',restrictField='id_text',NoQuery='yes',NoLimit='yes',**argv)          search2 = self.ZSQLFind(tableExt=tableList[0],qs=qs,select=select,storename=storename,restrictConnect=(tableList[0]+"."+restrictField,search1),**argv)
   
         search2 = self.ZSQLFind(tableExt='cdli_translit',qs="",select="oid,*",storename=None,restrictConnect=('cdli_translit.id_text',search1),**argv)  
         return search2          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):      def ZSQLFind(self,qs="",select="oid,*",storename=None,tableExt=None,NoQuery=None,NoLimit=None,restrictField=None,restrictConnect=None,filter=None,**argv):
         """Find"""          """Find"""
Line 389  class ZSQLExtendFolder(Folder,Persistent Line 420  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 399  class ZSQLExtendFolder(Folder,Persistent Line 432  class ZSQLExtendFolder(Folder,Persistent
                qs=string.join(qs.split("&"),",")                 qs=string.join(qs.split("&"),",")
                                 
                for field in argv.keys():                 for field in argv.keys():
                      if field[0]=="_":
                          fieldTmp="-"+field[1:]
                      else:
                          fieldTmp=field
                                         
                    qs+=",-%s=%s"%(field,argv[field])                     qs+=",%s=%s"%(fieldTmp,argv[field])
                                         
            else:             else:
                                 
                qs=self.REQUEST.SESSION.get('query','')                 qs=self.REQUEST.SESSION.get('query','')
                                 
                for field in argv.keys():                 for field in argv.keys():
                    #print field                     if field[0]=="_":
                    qs+=",-%s=%s"%(field,argv[field])                         fieldTmp="-"+field[1:]
                      else:
                          fieldTmp=field
                      
                      qs+=",%s=%s"%(fieldTmp,argv[field])
   
            
                                 
         else:          else:
             self.REQUEST['QUERY_STRING']=qs              self.REQUEST['QUERY_STRING']=qs
Line 426  class ZSQLExtendFolder(Folder,Persistent Line 469  class ZSQLExtendFolder(Folder,Persistent
         else:          else:
             storename="foundCount"              storename="foundCount"
   
           #store query for further usage
           self.REQUEST.SESSION['query']=qs
   
         #print "calling Query with",repr(NoQuery)          #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)          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"]          #print self.REQUEST.SESSION["foundCount"]
                   
   
   
         return ret          return ret
   
     def ZSQLFoundCountLen(self,var):      def ZSQLFoundCountLen(self,var):
Line 487  class ZSQLExtendFolder(Folder,Persistent Line 533  class ZSQLExtendFolder(Folder,Persistent
                   
         return str(min(int(self.REQUEST.SESSION[storename]['rangeEnd']),int(self.REQUEST.SESSION[storename]['count'])))          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 """<a href="%s"> %s</a>"""%(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):      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"""          """analysieren den QueryString"""
         #print "NO",nostore          
           
         lop="AND" # standardsuche mit and          lop="AND" # standardsuche mit and
         max="ALL" #standard alle auswählen          max="ALL" #standard alle auswaehlen
         maxstr=""          maxstr=""
         whereList=[]          whereList=[]
         sort=""          sort=""
         op="bw"          op="bw"
         opfields={}          opfields={}
         lopfields={} #Verknüpfung bei mehrfachauswahl von einem feld          lopfields={} #Verknuepfung bei mehrfachauswahl von einem feld
           sortfields={} #order of sortfields
           sortAllFields=None
         skip=""          skip=""
         rangeStart=0          rangeStart=0
         limit=0          limit=0
Line 508  class ZSQLExtendFolder(Folder,Persistent Line 608  class ZSQLExtendFolder(Folder,Persistent
         #print "Q",nostore,qs          #print "Q",nostore,qs
         #check for op           #check for op 
                   
   
   
           
     splitted=qs.split(",")      splitted=qs.split(",")
         if tableExt:          if tableExt:
             table=tableExt              table=tableExt
Line 534  class ZSQLExtendFolder(Folder,Persistent Line 637  class ZSQLExtendFolder(Folder,Persistent
   
                     field=name[5:]                      field=name[5:]
                     lopfields[field]=lop                      lopfields[field]=lop
                       
                   if name[0:10]==iCT+"sortorder":
                       #sort=value
                       
                       field=name[11:]
                       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
         #now analyse the querystring          #now analyse the querystring
          
         for q in qs.split(","):          for q in qs.split(","):
                           
                           
Line 548  class ZSQLExtendFolder(Folder,Persistent Line 664  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 569  class ZSQLExtendFolder(Folder,Persistent Line 685  class ZSQLExtendFolder(Folder,Persistent
             elif name==iCT+"join":              elif name==iCT+"join":
                 whereList.append(value)                  whereList.append(value)
             elif name==iCT+"sort":              elif name==iCT+"sort":
                 sort="ORDER BY "+value.replace(' AND ',',')                  sortstrs=[]
                   for word in value.split(','):
                       wordstr=word.lstrip().rstrip()
                       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":              elif name==iCT+"token":
                 if not nostore=="yes":                  if not nostore=="yes":
                     self.REQUEST.SESSION['token']=value                      self.REQUEST.SESSION['token']=value
Line 591  class ZSQLExtendFolder(Folder,Persistent Line 720  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))
                 op="ct"                  elif op=="all":
                       tmps=[]
                       for word in value.split(" "):
                           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+"%"))
   
                 if (not tableExt) or (namealt.split('.')[0]==tableExt):                      tmp=string.join(tmps,' OR ')
                     if searchFields.has_key(name):  
                         searchFields[name]+=lopfields.get(name,'OR')+" "+tmp  
                         searchFieldsOnly[name]+=lopfields.get(name,'OR')+" "+value  
                     else:   
                         searchFields[name]=tmp  
                         searchFieldsOnly[name]=value  
   
                   op="all"
                           
        ##  for name in searchFields.keys():                  if (not tableExt) or (namealt.split('.')[0]==tableExt):
 ##             value=searchFields[name]                      if searchFields.has_key(namealt):
                                           searchFields[namealt]+=lopfields.get(name,'OR')+" "+tmp
 ##             if opfields.has_key(name):                          searchFieldsOnly[namealt]+=lopfields.get(name,'OR')+" "+value
 ##                 op=opfields[name]                      else: 
 ##             else:                          searchFields[namealt]=tmp
 ##                 op="ct"                          searchFieldsOnly[namealt]=value
 ##             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()]
   
Line 660  class ZSQLExtendFolder(Folder,Persistent Line 783  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 674  class ZSQLExtendFolder(Folder,Persistent Line 797  class ZSQLExtendFolder(Folder,Persistent
             #print "QUERYSTRING:",self.REQUEST.SESSION[storename]['queryString2']              #print "QUERYSTRING:",self.REQUEST.SESSION[storename]['queryString2']
             if not self.REQUEST.SESSION.has_key(storename):              if not self.REQUEST.SESSION.has_key(storename):
                 self.REQUEST.SESSION[storename]={}                  self.REQUEST.SESSION[storename]={}
   
               self.REQUEST.SESSION[storename]['qs']=qs #sichere Querystring
   
             if self.REQUEST.SESSION[storename].has_key('queryString2'):              if self.REQUEST.SESSION[storename].has_key('queryString2'):
   
                 if not self.REQUEST.SESSION[storename]['queryString2']==query2:                  if not self.REQUEST.SESSION[storename]['queryString2']==query2:
Line 706  class ZSQLExtendFolder(Folder,Persistent Line 832  class ZSQLExtendFolder(Folder,Persistent
   
             return query              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):      def ZSQLQuery(self,query):
         """query"""          """query"""
   
         return self.ZSQLSimpleSearch(query)          return self.ZSQLSimpleSearch(query)
           
       
     def ZSQLSearch(self):      def ZSQLSearch(self):
         """To be done"""          """To be done"""
         rq=self.REQUEST['QUERY_STRING']          rq=self.REQUEST['QUERY_STRING']
   
         querys=rq.split("&")          querys=rq.split("&")
                   
   
           formatfile=self.REQUEST['URL1'] #generisch redirect zur gleichen url
           
         for querytemp in querys:          for querytemp in querys:
             query=querytemp.split("=")              query=querytemp.split("=")
               
               
   
               
             try:              try:
                 if query[0].lower()=="-format":                  if query[0].lower()=="-format":
                     formatfile=query[1]                      formatfile=query[1]
             except:              except:
                 """nothing"""                  """nothing"""
   
                   
         #print formatfile          #print formatfile
                   
           
         self.REQUEST.SESSION['query']=string.join(self.REQUEST['QUERY_STRING'].split("&"),",")          self.REQUEST.SESSION['query']=string.join(self.REQUEST['QUERY_STRING'].split("&"),",")
         self.REQUEST.SESSION['come_from_search']="yes"          self.REQUEST.SESSION['come_from_search']="yes"
                   
Line 752  class ZSQLExtendFolder(Folder,Persistent Line 902  class ZSQLExtendFolder(Folder,Persistent
                                                                                                   
     def nextLink(self,html,storename="foundCount"):      def nextLink(self,html,storename="foundCount"):
         """nextLink"""          """nextLink"""
   
         try:          try:
             limit=self.REQUEST.SESSION[storename]['rangeSize']              limit=self.REQUEST.SESSION[storename]['rangeSize']
             if int(limit)==0 :              if int(limit)==0 :
Line 770  class ZSQLExtendFolder(Folder,Persistent Line 921  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 785  class ZSQLExtendFolder(Folder,Persistent Line 936  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":
   
Line 799  class ZSQLExtendFolder(Folder,Persistent Line 949  class ZSQLExtendFolder(Folder,Persistent
             newquery.append(query)              newquery.append(query)
                                   
         newquerystring=string.join(newquery,"&")          newquerystring=string.join(newquery,"&")
       return "<a href='%s'>%s</a>"%(self.REQUEST['URL']+"?"+newquerystring,html)
           
         return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)  
                           
                   
     def prevLink(self,html,storename="foundCount"):      def prevLink(self,html,storename="foundCount"):
         """prev link"""          """prev link"""
   
         try:          try:
             limit=self.REQUEST.SESSION[storename]['rangeSize']              limit=self.REQUEST.SESSION[storename]['rangeSize']
             if int(limit)==0 :              if int(limit)==0 :
Line 825  class ZSQLExtendFolder(Folder,Persistent Line 976  class ZSQLExtendFolder(Folder,Persistent
                   
         if self.REQUEST['QUERY_STRING']=="":          if self.REQUEST['QUERY_STRING']=="":
             qs=self.REQUEST.SESSION['query']              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,",")              queries=string.split(qs,",")
                           
                           
Line 856  class ZSQLExtendFolder(Folder,Persistent Line 1007  class ZSQLExtendFolder(Folder,Persistent
                           
         newquerystring=string.join(newquery,"&")          newquerystring=string.join(newquery,"&")
   
         return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)          return "<a href='%s'>%s</a>"%(self.REQUEST['URL']+"?"+newquerystring,html)
   
   
           
Line 981  class ZSQLBibliography(Folder,ZSQLExtend Line 1132  class ZSQLBibliography(Folder,ZSQLExtend
                           
     def changeZSQLBibliographyForm(self):      def changeZSQLBibliographyForm(self):
         """change folder config"""          """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()          return pt()
   
   
Line 992  class ZSQLBibliography(Folder,ZSQLExtend Line 1143  class ZSQLBibliography(Folder,ZSQLExtend
             obj=getattr(self,"ZSQLBibliography_template")              obj=getattr(self,"ZSQLBibliography_template")
             return obj()              return obj()
         except:          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"              pt.content_type="text/html"
             return pt()              return pt()
   
Line 1071  class ZSQLBibliography(Folder,ZSQLExtend Line 1222  class ZSQLBibliography(Folder,ZSQLExtend
   
         return retdata,fieldlist          return retdata,fieldlist
   
       def createRDFTag(self,tag,content):
           """create RDF"""
           if content:
               ret=""" <cdli:%s>%s</cdli:%s>"""%(tag,content,tag)
               return ret.decode('latin-1')
           else:
               return ""
       
     def createIndexTag(self,tag,content):      def createIndexTag(self,tag,content):
         """creste tag"""          """create tag"""
         if content:          if content:
             ret="""<%s>%s</%s>"""%(tag,content,tag)              ret="""<%s>%s</%s>"""%(tag,content,tag)
             return ret              return ret
Line 1085  class ZSQLBibliography(Folder,ZSQLExtend Line 1244  class ZSQLBibliography(Folder,ZSQLExtend
         fn=os.path.splitext(self.REQUEST['fn'])[0]+"."          fn=os.path.splitext(self.REQUEST['fn'])[0]+"."
         self.REQUEST['fn']=fn          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 getMetaDataRDF(self):
           """crate index meta"""
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','record.rdf')).__of__(self)
         pt.content_type="text/xml"          pt.content_type="text/xml"
         return pt()          return pt()
   
     def getMetaDataXML(self):      def getMetaDataXML(self):
         """crate index meta"""          """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"          pt.content_type="text/xml"
         return pt()          return pt()
   
       def createVLMAtripels(self):
           """index"""
           # check if the request's host part was OK
           http_host = self.REQUEST['HTTP_HOST']
           host_port = self.REQUEST['SERVER_PORT']
           fix_host = None
           if http_host and http_host.rfind(host_port) == -1:
               print "HTTP_HOST needs fixing!"
               fix_host = http_host + ":" + host_port
           
           ret=""
           for found in self.ZSQLSimpleSearch("select id_text from %s limit ALL"%'cdli_cat'):
               base_url = self.absolute_url()
               if fix_host:
                   #print "replacing ", http_host, " by ", fix_host
                   base_url = string.replace(base_url, http_host, fix_host, 1)
   
               #found2=self.ZSQLInlineSearchU(_table="cdli_imglist",id_text=found.id_text)
               #create collectionobject info
               subject="http://xserve02.mpiwg-berlin.mpg.de:8880/cdlineu/cdli_coll/cdli2/cdli_templates/cdli_templates/textdisplay.html?-table=cdli_cat&id_text=%s"%found.id_text
               object="http://xserve02:8880/cdlidata/images/getMetaDataRDF?id_text=%s"%found.id_text
               predicate="metadata"
               ret+="%s\t%s\t%s\n"%(subject,object,predicate)
               #create image
               subject="http://xserve02.mpiwg-berlin.mpg.de:8880/cdlineu/cdli_coll/cdli2/cdli_templates/cdli_templates/textdisplay.html?-table=cdli_cat&id_text=%s"%found.id_text
               object="http://nausikaa2.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler?fn=/experimental/cdli/dl/photo/%s&mo=rawfile"%found.id_text
               predicate="image"
               
               ret+="%s\t%s\t%s\n"%(subject,object,predicate)
   
               #create thumb
               subject="http://nausikaa2.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler?fn=/experimental/cdli/dl/photo/%s&mo=rawfile"%found.id_text
               object="http://nausikaa2.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler?fn=/experimental/cdli/dl/photo/%s&dw=100&dh=100"%found.id_text
               predicate="thumb"
               
               ret+="%s\t%s\t%s\n"%(subject,object,predicate)
       
           return ret
   
   
     def getMetaDatasXML(self):      def getMetaDatasXML(self):
         """index"""          """index"""
           # check if the request's host part was OK
           http_host = self.REQUEST['HTTP_HOST']
           host_port = self.REQUEST['SERVER_PORT']
           fix_host = None
           if http_host and http_host.rfind(host_port) == -1:
               print "HTTP_HOST needs fixing!"
               fix_host = http_host + ":" + host_port
           
         ret="""<?xml version="1.0" ?>          ret="""<?xml version="1.0" ?>
                  <index>"""                   <index>"""
         for found in self.ZSQLSimpleSearch("select oid from %s limit ALL"%self.tableName):          for found in self.ZSQLSimpleSearch("select oid from %s limit ALL"%self.tableName):
             link=self.absolute_url()+"/"+"record.html?oid=%i"%found.oid              base_url = self.absolute_url()
             metalink=self.absolute_url()+"/"+"getMetaDataXML?oid=%i"%found.oid              if fix_host:
                   #print "replacing ", http_host, " by ", fix_host
                   base_url = string.replace(base_url, http_host, fix_host, 1)
                   
               link=base_url+"/"+"record.html?oid=%i"%found.oid
               metalink=base_url+"/"+"getMetaDataXML?oid=%i"%found.oid
                           
             ret+="""<resource resourceLink="%s" metaLink="%s"/>\n"""%(link,metalink)              ret+="""<resource resourceLink="%s" metaLink="%s"/>\n"""%(link,metalink)
                           

Removed from v.1.33  
changed lines
  Added in v.1.53


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>