Diff for /ZSQLExtend/ZSQLExtend.py between versions 1.92 and 1.111

version 1.92, 2006/09/16 15:17:24 version 1.111, 2007/04/18 15:09:52
Line 1 Line 1
   
 from OFS.Folder import Folder  from OFS.Folder import Folder
 from Acquisition import Implicit  from Acquisition import Implicit
 from Globals import DTMLFile,package_home,Persistent  from Globals import DTMLFile,package_home,Persistent
 import urllib  import urllib
 import re  import re
 import string  import string
 import sys  
 #from pyPgSQL import libpq  #from pyPgSQL import libpq
 from AccessControl import getSecurityManager  from AccessControl import getSecurityManager,Unauthorized
 from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate  from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile  from Products.PageTemplates.PageTemplateFile import PageTemplateFile
   
Line 15  from Products.ZSQLMethods.SQL import SQL Line 13  from Products.ZSQLMethods.SQL import SQL
 from xml.sax.saxutils import escape  from xml.sax.saxutils import escape
 from types import *  from types import *
 import Shared.DC.ZRDB.DA  import Shared.DC.ZRDB.DA
 import zLOG  import logging
 import os.path  import os.path
 import os  import os
 import copy  import copy
   import unicodedata
   import tempfile
   import sys
   
   #ersetzt logging
   def logger(txt,method,txt2):
       """logging""" 
       logging.info(txt+ txt2)
   
   
 from OFS.SimpleItem import SimpleItem  from OFS.SimpleItem import SimpleItem
   
   def getTextFromNode(nodename):
       """get the cdata content of a node"""
       if nodename is None:
           return ""
       nodelist=nodename.childNodes
       rc = ""
       for node in nodelist:
           if node.nodeType == node.TEXT_NODE:
              rc = rc + node.data
       return rc
   
 def analyseIntSearch(word):  def analyseIntSearch(word):
     #analyse integer searches      #analyse integer searches
   
Line 51  def sql_quote(v): Line 69  def sql_quote(v):
 def showSQLConnectionIDs(self):  def showSQLConnectionIDs(self):
     return SQLConnectionIDs(self)      return SQLConnectionIDs(self)
   
   class Options:
       """options class"""
       
 class ZSQLIndex(SimpleItem):  class ZSQLIndex(SimpleItem):
     """index"""      """index"""
     meta_type="ZSQLIndex"      meta_type="ZSQLIndex"
Line 150  class ZSQLExtendFolder(Folder,Persistent Line 171  class ZSQLExtendFolder(Folder,Persistent
         #from xml.dom.minidom import parseString,parse          #from xml.dom.minidom import parseString,parse
                   
         from Ft.Xml import Parse          from Ft.Xml import Parse
         zLOG.LOG("import xsd",zLOG.INFO,"called")          logger("import xsd",logging.INFO,"called")
         #fh=file("/tmp/fmpxml.xml")          #fh=file("/tmp/fmpxml.xml")
         import bz2          import bz2
         import base64          import base64
Line 160  class ZSQLExtendFolder(Folder,Persistent Line 181  class ZSQLExtendFolder(Folder,Persistent
         if data:          if data:
           data=bz2.decompress(base64.decodestring(data))            data=bz2.decompress(base64.decodestring(data))
                   
           #zLOG.LOG("import xsd",zLOG.INFO,"received file")            #logger("import xsd",logging.INFO,"received file")
           doc=Parse(data)            doc=Parse(data)
           #zLOG.LOG("import xsd",zLOG.INFO,"parsed file")            #logger("import xsd",logging.INFO,"parsed file")
                   
         elif filename:          elif filename:
           fh=file(filename)            fh=file(filename)
           txt=fh.read()            txt=fh.read()
                       
           doc=Parse(txt)            doc=Parse(txt)
           #zLOG.LOG("import xsd",zLOG.INFO,"parsed file")            #logger("import xsd",logging.INFO,"parsed file")
                   
                   
         Nss={'xsd':'http://www.w3.org/2001/XMLSchema'}          Nss={'xsd':'http://www.w3.org/2001/XMLSchema'}
Line 188  class ZSQLExtendFolder(Folder,Persistent Line 209  class ZSQLExtendFolder(Folder,Persistent
         else:          else:
             create=False              create=False
                           
             zLOG.LOG("update xsd: fieldnames",zLOG.INFO,repr(fieldNames))                                     logger("update xsd: fieldnames",logging.INFO,repr(fieldNames))                       
             qstr="""select attname from pg_attribute, pg_class where attrelid = pg_class.oid and relname = '%s' """              qstr="""select attname from pg_attribute, pg_class where attrelid = pg_class.oid and relname = '%s' """
             columns=[x.attname for x in self.ZSQLSimpleSearch(qstr%table)]                          columns=[x.attname for x in self.ZSQLSimpleSearch(qstr%table)]            
                   
Line 203  class ZSQLExtendFolder(Folder,Persistent Line 224  class ZSQLExtendFolder(Folder,Persistent
         for fieldName in fieldNames:          for fieldName in fieldNames:
             if type(fieldName) is UnicodeType:              if type(fieldName) is UnicodeType:
                 fieldName=fieldName.encode('utf-8')                  fieldName=fieldName.encode('utf-8')
             zLOG.LOG("update xml: fieldname",zLOG.INFO,repr(fieldName))                                   logging.info("update xml: fieldname",logging.INFO,repr(fieldName))                     
             if fieldName.lower() not in columns:              if fieldName.lower() not in columns:
                                   
                 if create:# table does not exist therefore create with one column                  if create:# table does not exist therefore create with one column
Line 213  class ZSQLExtendFolder(Folder,Persistent Line 234  class ZSQLExtendFolder(Folder,Persistent
                     qstr="""alter table %s add %s %s"""                      qstr="""alter table %s add %s %s"""
                                   
                 self.ZSQLSimpleSearch(qstr%(table,fieldName,'text'))                  self.ZSQLSimpleSearch(qstr%(table,fieldName,'text'))
                 zLOG.LOG("update xsd: fieldname add",zLOG.INFO,qstr%(table,fieldName,'text'))                                         logger("update xsd: fieldname add",logging.INFO,qstr%(table,fieldName,'text'))                       
         
   
     def importXMLFileAccess(self,table,container,data=None,identify=None,filename=None,RESPONSE=None):      def importXMLFileAccess(self,table,container,data=None,identify=None,filename=None,RESPONSE=None):
Line 227  class ZSQLExtendFolder(Folder,Persistent Line 248  class ZSQLExtendFolder(Folder,Persistent
         '''          '''
         from xml.dom.pulldom import parseString,parse          from xml.dom.pulldom import parseString,parse
                   
         zLOG.LOG("import xml",zLOG.INFO,"called")          logger("import xml",logging.INFO,"called")
         #fh=file("/tmp/fmpxml.xml")          #fh=file("/tmp/fmpxml.xml")
         import bz2          import bz2
         import base64          import base64
Line 236  class ZSQLExtendFolder(Folder,Persistent Line 257  class ZSQLExtendFolder(Folder,Persistent
         if data:          if data:
           data=bz2.decompress(base64.decodestring(data))            data=bz2.decompress(base64.decodestring(data))
                   
           zLOG.LOG("import xml",zLOG.INFO,"received file")            logger("import xml",logging.INFO,"received file")
           doc=parseString(data)            doc=parseString(data)
           zLOG.LOG("import xml",zLOG.INFO,"parsed file")            logger("import xml",logging.INFO,"parsed file")
   
         elif filename:          elif filename:
           fh=file(filename)            fh=file(filename)
           doc=parse(fh)            doc=parse(fh)
           zLOG.LOG("import xml",zLOG.INFO,"parsed file")            logger("import xml",logging.INFO,"parsed file")
         while 1:          while 1:
             node=doc.getEvent()              node=doc.getEvent()
   
Line 266  class ZSQLExtendFolder(Folder,Persistent Line 287  class ZSQLExtendFolder(Folder,Persistent
                         field=dataSet[identify]                          field=dataSet[identify]
   
                         searchStr="""select %s from %s where %s = '%s'"""%(identify,table,identify,field)                          searchStr="""select %s from %s where %s = '%s'"""%(identify,table,identify,field)
                         zLOG.LOG("import xml",zLOG.INFO,searchStr)                          logger("import xml",logging.INFO,searchStr)
                         search=self.ZSQLSimpleSearch(searchStr)                          search=self.ZSQLSimpleSearch(searchStr)
                         if search:                          if search:
                             update=True                              update=True
Line 280  class ZSQLExtendFolder(Folder,Persistent Line 301  class ZSQLExtendFolder(Folder,Persistent
                         field=dataSet[identify]                          field=dataSet[identify]
                                       
                         queryStr="""UPDATE %s SET %s WHERE %s = '%s' """%(table,setStr,identify,field)                          queryStr="""UPDATE %s SET %s WHERE %s = '%s' """%(table,setStr,identify,field)
                         zLOG.LOG("update xml",zLOG.INFO,queryStr)                          logger("update xml",logging.INFO,queryStr)
                         self.ZSQLSimpleSearch(queryStr)                          self.ZSQLSimpleSearch(queryStr)
                         ret+="ud: %s \n"%field                          ret+="ud: %s \n"%field
                     else:                      else:
Line 292  class ZSQLExtendFolder(Folder,Persistent Line 313  class ZSQLExtendFolder(Folder,Persistent
                                                   
                         queryStr="""INSERT INTO %s  (%s) VALUES (%s)"""%(table,fields,values)                          queryStr="""INSERT INTO %s  (%s) VALUES (%s)"""%(table,fields,values)
                         self.ZSQLSimpleSearch(queryStr)                          self.ZSQLSimpleSearch(queryStr)
                         zLOG.LOG("update xml",zLOG.INFO,queryStr)                          logger("update xml",logging.INFO,queryStr)
                                                   
                                                   
                                                   
Line 300  class ZSQLExtendFolder(Folder,Persistent Line 321  class ZSQLExtendFolder(Folder,Persistent
         return ret          return ret
                   
           
     def importXMLFile(self,table,data=None,identify=None,filename=None,RESPONSE=None):      def importXMLFile(self,table,containerTagName,fieldNames,data=None,identify=None,filename=None,RESPONSE=None):
         #TODO: finish importXMLFile          #TODO: finish importXMLFile
         '''          '''
         Import XML file into the table          Import XML file into the table
Line 310  class ZSQLExtendFolder(Folder,Persistent Line 331  class ZSQLExtendFolder(Folder,Persistent
         @param identify: (optional) field res. tag which identifies a entry uniquely for updating purposes.          @param identify: (optional) field res. tag which identifies a entry uniquely for updating purposes.
         @param RESPONSE: (optional)          @param RESPONSE: (optional)
         '''          '''
           ret=""
         from xml.dom.pulldom import parseString          from xml.dom.pulldom import parseString
   
         doc=parseString(file.read())          doc=parseString(file.read())
Line 321  class ZSQLExtendFolder(Folder,Persistent Line 343  class ZSQLExtendFolder(Folder,Persistent
             else:              else:
                 if node[1].nodeName==containerTagName:                  if node[1].nodeName==containerTagName:
                     doc.expandNode(node[1])                      doc.expandNode(node[1])
                       cols=node[1].getElementsByTagName('COL')
                       dataSet=[]
                       for col in cols:
                           data=col.getElementsByTagName('DATA')
                           dataSet.append(getTextFromNode(data[0]))
                       update=False
                       if identify:
   
                           nr=fieldNames.index(identify)
                           field=dataSet[nr]
   
                           searchStr="""select %s from %s where %s = '%s'"""%(identify,table,identify,field)
                           logger("import xml",logging.INFO,searchStr)
                           search=self.ZSQLSimpleSearch(searchStr)
                           if search:
                               update=True
                       
                       if update:
                           tmp=[]
                           for fieldName in fieldNames:
                               tmp.append("""%s = %s"""%(fieldName,self.ZSQLQuote(dataSet[fieldNames.index(fieldName)])))
                           setStr=",".join(tmp)
                           nr=fieldNames.index(identify)
                           field=dataSet[nr]
                     
                           queryStr="""UPDATE %s SET %s WHERE %s = '%s' """%(table,setStr,identify,field)
                           logger("update xml",logging.INFO,queryStr)
                           self.ZSQLSimpleSearch(queryStr)
                           ret+="ud: %s \n"%field
                       else:
   
                          
                           fields=",".join(fieldNames)
                           values=",".join([""" %s """%self.ZSQLQuote(x) for x in dataSet])
                     
                           
                           queryStr="""INSERT INTO %s  (%s) VALUES (%s)"""%(table,fields,values)
                           self.ZSQLSimpleSearch(queryStr)
                           logger("update xml",logging.INFO,queryStr)
                           ret+="ad: %s \n"%field
                           
                   elif node[1].nodeName=="METADATA":
                       fieldNames=[]
                       doc.expandNode(node[1])
                   
                       names=node[1].getElementsByTagName('FIELD')
   
                       for name in names:
                           fieldNames.append(name.getAttribute('NAME'))
                       
                       logger("update xml: fieldnames",logging.INFO,repr(fieldNames))                       
                       qstr="""select attname from pg_attribute, pg_class where attrelid = pg_class.oid and relname = '%s' """
                       columns=[x.attname for x in self.ZSQLSimpleSearch(qstr%table)]
                    
                       for fieldName in fieldNames:
                           logger("update xml: fieldname",logging.INFO,repr(fieldName))                     
                           if fieldName not in columns:
                               qstr="""alter table %s add %s %s"""
                               self.ZSQLSimpleSearch(qstr%(table,fieldName,'text'))
                               logger("update xml: fieldname add",logging.INFO,qstr%(table,fieldName,'text'))                       
                 #fn=node[1].getAttribute("xml:id")                  #fn=node[1].getAttribute("xml:id")
                 #nf=file("xtf/"+fn+".xtf",'w')                  #nf=file("xtf/"+fn+".xtf",'w')
                 #nf.write("""<texts xmlns="http://emegir.info/xtf" xmlns:lem="http://emegir.info/lemma" >"""+node[1].toxml()+"</texts>")                  #nf.write("""<texts xmlns="http://emegir.info/xtf" xmlns:lem="http://emegir.info/lemma" >"""+node[1].toxml()+"</texts>")
                 #print "wrote: %s"%fn                  #print "wrote: %s"%fn
                                   
                   
       def importXMLFileFMP(self,table,dsn=None,uploadfile=None,update_fields=None,id_field=None,sync_mode=False,replace=False,redirect_url=None,ascii_db=False,RESPONSE=None):
           '''
           Import FileMaker XML file (FMPXMLRESULT format) into the table.
           @param dsn: database connection string
           @param table: name of the table the xml shall be imported into
           @param uploadfile: xmlfile file
           @param update_fields: (optional) list of fields to update; default is to create all fields
           @param id_field: (optional) field which uniquely identifies an entry for updating purposes.
           @param sync_mode: (optional) really synchronise, i.e. delete entries not in XML file
           @param RESPONSE: (optional)
           @param redirect_url: (optional) url for redirecting after the upload is done
           '''
           
           tfilehd,filename=tempfile.mkstemp()
           tfile=os.fdopen(tfilehd,'w')
           logging.error("import %s"%uploadfile)
           for c in uploadfile.read():
               tfile.write(c)
           tfile.close()  
           
           from importFMPXML import importFMPXML
           
           if not dsn:
               dsn=self.getConnectionObj().connection_string
               
           options=Options()
           options.dsn=dsn
           options.table=table
           options.filename=filename
           options.update_fields=update_fields
           options.id_field=id_field
           options.sync_mode=sync_mode
           options.replace_table=replace
           options.lc_names=True
       options.ascii_db=ascii_db
           importFMPXML(options)
           
           os.remove(filename)
           
           if RESPONSE and redirect_url:
               RESPONSE.redirect(redirect_url)
               
     def generateIndex(self,field,index_name,table,RESPONSE=None):      def generateIndex(self,field,index_name,table,RESPONSE=None):
         """erzeuge index aus feld"""          """erzeuge index aus feld"""
         index={}          index={}
Line 495  class ZSQLExtendFolder(Folder,Persistent Line 619  class ZSQLExtendFolder(Folder,Persistent
         #print "field",field          #print "field",field
         if not field:          if not field:
             return 1              return 1
         if field=="":          if field.strip()=="":
             return 1              return 1
         return 0          return 0
   
Line 562  class ZSQLExtendFolder(Folder,Persistent Line 686  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,additionalSelect="",size=None,linelen=None,selected=None):      def ZSQLOptionsFromSearchList(self,fieldname,
                                     results,fieldName,
                                     valueName=None,start=None, 
                                     multiple='',startValue=None,
                                     additionalSelect="",size=None,
                                     linelen=None,selected=None,
                                     clear=False):
         """generate select options form a search list          """generate select options form a search list
         es wird          es wird
         <select name=fieldname mutiple>          <select name=fieldname mutiple>
Line 570  class ZSQLExtendFolder(Folder,Persistent Line 700  class ZSQLExtendFolder(Folder,Persistent
         <option value=result.fieldName>result.fieldValue</option>          <option value=result.fieldName>result.fieldValue</option>
         erzeugt.          erzeugt.
                   
         @parameter fieldname: Name fuer name-wert im select-tag          @param fieldname: Name fuer name-wert im select-tag
         @results results: Resultobject einer SQL-suche          @param results: Resultobject einer SQL-suche
         @parameter fieldName: Name des Feldes, das als value in den option-tag geschrieben werden soll.          @param 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          @param 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          @param start: (optional) falls zusaetzliches option tag erzeugt werden soll, gibt start an was im option tag steht
         @startValue: gibt den entsprechenden Wert an.          @param startValue (optional): gibt den entsprechenden Wert an.
           @param selected (optional): Wert der ausgewaehlt sein soll.
           @param linelen: (optional) maximale laenge eines Eintrages 
                       der im Klappmenue noch angezeigt wird, laengeres wird abgeschnitten.
           @param addionalSaelect (optional): zusaetzlicher text fuer den select tag
           @param clear (optional): setze auf den startwert. 
         """          """
         if not valueName:          if not valueName:
             valueName=fieldName              valueName=fieldName
Line 592  class ZSQLExtendFolder(Folder,Persistent Line 727  class ZSQLExtendFolder(Folder,Persistent
             if not startValue:              if not startValue:
                     startValue=start                      startValue=start
                                                           
               if clear:
                   ret+="""<option selected value="%s" >%s</option>"""%(startValue,start)
               else:
             ret+="""<option value="%s" >%s</option>"""%(startValue,start)              ret+="""<option value="%s" >%s</option>"""%(startValue,start)
                   
         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:  
   
                 if not linelen:  
   
               if linelen and fieldValue and (len(fieldValue) > string.atoi(linelen)):
                   displayValue = fieldValue[:string.atoi(linelen)]
               else: 
                   displayValue = fieldValue
                                           
               if displayValue: #show only if value not none
                     if field == selected:                      if field == selected:
   
                         ret+="""<option value="%s" selected>%s</option>"""%(field,fieldValue)                      ret+="""<option value="%s" selected>%s</option>"""%(field,displayValue)
                     else:                      else:
                         ret+="""<option value="%s">%s</option>"""%(field,fieldValue)                      ret+="""<option value="%s">%s</option>"""%(field,displayValue)
   
                 else:  
                     mist = """%s"""%(fieldValue)  
                     if len(mist) > string.atoi(linelen):  
                         mist = mist[:string.atoi(linelen)]  
                     ret+="""<option value="%s">%s</option>"""%(field,mist)  
         ret+="""</select>"""          ret+="""</select>"""
         return ret          return ret
   
Line 633  class ZSQLExtendFolder(Folder,Persistent Line 769  class ZSQLExtendFolder(Folder,Persistent
   
         #print "INLINE:",argv          #print "INLINE:",argv
         for a in argTmp.keys():          for a in argTmp.keys():
             qs.append(a+"="+urllib.quote(str(argTmp[a])))          aFiltered=re.sub(r"^-","_",a) # beginning of a command should always be "_"
               qs.append(aFiltered+"="+urllib.quote(str(argTmp[a])))
         #return []            #return []  
         ret = self.parseQueryString(string.join(qs,","),"_",storename=storename)          ret = self.parseQueryString(string.join(qs,","),"_",storename=storename)
   
Line 659  class ZSQLExtendFolder(Folder,Persistent Line 796  class ZSQLExtendFolder(Folder,Persistent
             argTmp2['_op_'+field[0]]=field[1]              argTmp2['_op_'+field[0]]=field[1]
             argTmp2['_table']=field[2]              argTmp2['_table']=field[2]
                           
             ret[field[0]]=(self.ZSQLInlineSearch(storename=storename,args=argTmp2),field[3],field[4])              ret[field[0]]=(self.ZSQLInlineSearch(storename=storename,args=argTmp2),field[3],field[4],field[5],field[6])
                   
         return ret          return ret
       
       
     def ZSQLInlineSearch(self,storename=None,args=None,**argv):      def ZSQLInlineSearch(self,storename=None,args=None,**argv):
         """inlinesearch"""          """inlinesearch"""
                   
Line 681  class ZSQLExtendFolder(Folder,Persistent Line 820  class ZSQLExtendFolder(Folder,Persistent
   
         #print "INLINE:",argv          #print "INLINE:",argv
         for a in argTmp.keys():          for a in argTmp.keys():
             try:              aFiltered=re.sub(r"^-","_",a) # beginning of a command should always be "_"
                 qs.append(a+"="+urllib.quote(str(argTmp[a])))        
             except:              if type(argTmp[a]) is ListType: # ein parameter zweimal
                 import urllib                      value=""
                 qs.append(a+"="+urllib.quote(str(argTmp[a])))                      #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 []            #return []  
   
Line 704  class ZSQLExtendFolder(Folder,Persistent Line 851  class ZSQLExtendFolder(Folder,Persistent
         try:          try:
             self.getConnectionObj().manage_close_connection()              self.getConnectionObj().manage_close_connection()
         except:          except:
             zLOG.LOG("ZSQLResetConnection",zLOG.ERROR, '%s %s'%sys.exc_info()[:2])              logger("ZSQLResetConnection",logging.ERROR, '%s %s'%sys.exc_info()[:2])
         try:          try:
             self.getConnectionObj().manage_open_connection()              self.getConnectionObj().manage_open_connection()
         except:          except:
             zLOG.LOG("ZSQLResetConnection",zLOG.ERROR, '%s %s'%sys.exc_info()[:2])              logger("ZSQLResetConnection",logging.ERROR, '%s %s'%sys.exc_info()[:2])
   
     def ZSQLSimpleSearch(self,query=None,max_rows=1000000):      def ZSQLSimpleSearch(self,query=None,max_rows=1000000):
         """simple search"""          """simple search"""
               logging.error("ZSQLSimpleSearch X %s"%query)
           #print query
         if not query:          if not query:
             query=self.query              query=self.query
                   
Line 724  class ZSQLExtendFolder(Folder,Persistent Line 871  class ZSQLExtendFolder(Folder,Persistent
                           
             self._v_searchSQL.max_rows_=max_rows              self._v_searchSQL.max_rows_=max_rows
             try:              try:
                 return self._v_searchSQL.__call__(var=query)                  logging.error("I am here")
                   t=self._v_searchSQL.__call__(var=query)
                   logging.error("I am here %s"%t)
                   return t
             except :              except :
                   logger("ZSQLSimpleSearch ERROR1",logging.ERROR, '%s %s'%sys.exc_info()[:2])
                 if sys.exc_info()[0]=="Database Error":                  if sys.exc_info()[0]=="Database Error":
                     try:                      try:
                         self.getConnectionObj().manage_open_connection()                          self.getConnectionObj().manage_open_connection()
                     except:                      except:
                         zLOG.LOG("ZSQLSimpleSearch",zLOG.ERROR, '%s %s'%sys.exc_info()[:2])                          logger("ZSQLSimpleSearch ERROR2",logging.ERROR, '%s %s'%sys.exc_info()[:2])
         else:          else:
             try:              try:
   
Line 739  class ZSQLExtendFolder(Folder,Persistent Line 889  class ZSQLExtendFolder(Folder,Persistent
                                   
                 return self._v_searchSQL.__call__(var=query)                  return self._v_searchSQL.__call__(var=query)
             except :              except :
                   logger("ZSQLSimpleSearch ERROR2",logging.ERROR, '%s %s'%sys.exc_info()[:2])
                 if sys.exc_info()[0]=="Database Error":                  if sys.exc_info()[0]=="Database Error":
                     try:                      try:
                         self.getConnectionObj().manage_open_connection()                          self.getConnectionObj().manage_open_connection()
                     except:                      except:
                         zLOG.LOG("ZSQLSimpleSearch",zLOG.ERROR, '%s %s'%sys.exc_info()[:2])                          logger("ZSQLSimpleSearch",logging.ERROR, '%s %s'%sys.exc_info()[:2])
   
     def getConnectionObj(self):      def getConnectionObj(self):
         if hasattr(self,'connection_id'):          if hasattr(self,'connection_id'):
Line 832  class ZSQLExtendFolder(Folder,Persistent Line 982  class ZSQLExtendFolder(Folder,Persistent
         else:          else:
             return True              return True
                   
     def ZSQLChange(self,format=None,RESPONSE=None,USE_FORM=None,**argv):      def ZSQLChange(self,format=None,RESPONSE=None,USE_FORM=None,args=None,**argv):
         """change entries"""          """change entries"""
         #qs=self.REQUEST['QUERY_STRING']          #qs=self.REQUEST['QUERY_STRING']
         # very bad hack          # very bad hack
Line 844  class ZSQLExtendFolder(Folder,Persistent Line 994  class ZSQLExtendFolder(Folder,Persistent
                 qs_temp.append(a+"="+urllib.quote(str(self.REQUEST.form[a])))                  qs_temp.append(a+"="+urllib.quote(str(self.REQUEST.form[a])))
   
                   
           if args:
               arg_tmp=args
           else:
               arg_tmp=argv
                   
         for field in argv.keys():          for field in arg_tmp.keys():
                                   
                    if field[0]=="_":                     if field[0]=="_":
                        fieldTmp="-"+field[1:]                         fieldTmp="-"+field[1:]
                    else:                     else:
                        fieldTmp=field                         fieldTmp=field
                                                 
                    qs_temp.append("%s=%s"%(fieldTmp,argv[field]))                     qs_temp.append("%s=%s"%(fieldTmp,arg_tmp[field]))
                   
                   
         changeList=[]          changeList=[]
                   logging.info("ZSQLChange qs_temp: %s"%repr(qs_temp))
         for q in qs_temp:          for q in qs_temp:
                 
             name=urllib.unquote(re.sub("r'+'"," ",q.split("=")[0].lower()))              name=urllib.unquote(re.sub("r'+'"," ",q.split("=")[0].lower()))
Line 868  class ZSQLExtendFolder(Folder,Persistent Line 1022  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]+"="+sql_quote(identify.split("=")[1])                  identify="lower("+identify.split("=")[0]+")="+sql_quote(identify.split("=")[1].lower())
             elif name=="-format":              elif name=="-format":
                 format=urllib.unquote(value)                  format=urllib.unquote(value)
             #elif (not (name[0]=="-" or name[0]=="_")) and (not len(value)==0):              #elif (not (name[0]=="-" or name[0]=="_")) and (not len(value)==0):
             elif (not (name[0]=="-" or name[0]=="_")):              elif (not (name[0]=="-" or name[0]=="_")):
   
           if value=="":
                       changeList.append("\""+name+"\"=null")
           else:
                 changeList.append("\""+name+"\"="+sql_quote(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)
         zLOG.LOG("ZSQLExtend",zLOG.INFO,"CHANGE: "+queryString)          logger("ZSQLExtend",logging.INFO,"CHANGE: "+queryString)
   
         self.ZSQLSimpleSearch(queryString)          self.ZSQLSimpleSearch(queryString)
                   
Line 890  class ZSQLExtendFolder(Folder,Persistent Line 1047  class ZSQLExtendFolder(Folder,Persistent
             return True              return True
         
   
     def ZSQLFindIndexed(self,qs="",select="oid,*",storename=None,indexedFields=['data_line'],restrictField='id_text',**argv):      def ZSQLFindIndexed(self,tableList=[],qs="",select="oid,*",storename=None,indexedFields=['data_line'],restrictField='id_text',**argv):
         """find2"""          """find2"""
                   
         for index in self.ZopeFind(self,obj_ids=indexedFields):          for index in self.ZopeFind(self,obj_ids=indexedFields):
Line 913  class ZSQLExtendFolder(Folder,Persistent Line 1070  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"""          """search in database"""
   
         def delEmpty(list):          def delEmpty(list):
Line 965  class ZSQLExtendFolder(Folder,Persistent Line 1122  class ZSQLExtendFolder(Folder,Persistent
   
         qs=string.join(delEmpty(qs.split(",")),",")          qs=string.join(delEmpty(qs.split(",")),",")
   
         if storename:  
             """store"""  
         else:  
             storename="foundCount"  
   
         #store query for further usage          #store query for further usage
           #TODO: erste der beiden ist ueberfluessig
         self.REQUEST.SESSION['query']=qs          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)          #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"]
                   
Line 984  class ZSQLExtendFolder(Folder,Persistent Line 1144  class ZSQLExtendFolder(Folder,Persistent
     def ZSQLFoundCountLen(self,var):      def ZSQLFoundCountLen(self,var):
         return len(var)          return len(var)
                           
     def ZSQLFoundCount(self,qs="",select="*",storename=None):      def ZSQLFoundCount(self,qs="",select="*",storename="foundCount"):
           
        ##  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"  
                   
         return self.REQUEST.SESSION[storename]['count']          return self.REQUEST.SESSION[storename]['count']
   
     def ZSQLRangeStart(self,storename=None):      def ZSQLRangeStart(self,storename="foundCount"):
           
         if storename:  
             """store"""  
         else:  
             storename="foundCount"  
                   
         return int(self.REQUEST.SESSION[storename]['rangeStart'])+1          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']          return self.REQUEST.SESSION[storename]['rangeSize']
   
     def ZSQLRangeEnd(self,storename=None):      def ZSQLRangeEnd(self,storename="foundCount"):
           
         if storename:  
             """store"""  
         else:  
             storename="foundCount"  
                   
         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):      def ZSQLNewQuery(self,linkText,storename="foundCount",**argv):
         """suche neu"""          """suche neu"""
         return self.ZSQLNewSearch(linkText,storename,url=self.REQUEST['URL'],args=argv)          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"""          """suche mit alten parametern bis auf die in argv getauschten"""
           str = self.ZSQLNewSearchURL(storename, url, args, **argv)
           return """<a href="%s"> %s</a>"""%(str,linkText)
   
         if storename:   
             """store"""    
         else:  
             storename="foundCount"  
         qs=self.REQUEST.SESSION[storename]['qs']  
   
       def ZSQLNewSearchURL(self, storename="foundCount",url=None,args=None,**argv):
           """suche mit alten parametern bis auf die in argv getauschten"""
         if args:          if args:
             argv=args              argv=args
                           
           #get the old queries
           qs=self.REQUEST.SESSION[storename]['qs']
         querys=qs.split(",")          querys=qs.split(",")
         argList=[]  
         arg=""  
         queryList=[x.split("=")[0] for x in querys]  
                   
         for argTmp in argv.keys():          #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]
                           
             arg=argTmp[0:]  
             if arg[0]=="_":arg="-"+argTmp[1:] # aender _ in - als standard  
   
             if arg not in queryList: # noch nicht drin          argList=[]
                 querys.append("%s=%s"%(arg,argv[argTmp]))          arg=""
             argList.append(arg)  
   
   
                   
         newquery=[]          #gehe durch die zu aendernden Argumente
         for query in querys:          for argTmp in argv.keys():
             queryArg=query.split("=")[0]  
             qarg=queryArg[0:]  
             if qarg[0]=="-":qarg="_"+queryArg[1:] # aender _ in - als standard  
                           
             if  queryArg in argList:              arg=argTmp[0:]# sicherstellen, dass der string auh kopiert wird
                 newquery.append("%s=%s"%(queryArg,argv[qarg]))              if arg[0]=="_": arg="-"+arg[1:] # sicherstellen, dass an Anfang stets "_"            
             else:  
                 newquery.append(query)              queryList[arg]=argv[argTmp]
   
         if url:          if url:
             str=url+"?"+"&".join(newquery)              str=url+"?"+urllib.urlencode(queryList)
         else:          else:
             str="ZSQLSearch?"+"&".join(newquery)              str="ZSQLSearch?"+urllib.urlencode(queryList)
                   
         return """<a href="%s"> %s</a>"""%(str,linkText)          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"""          """analysieren den QueryString"""
                   
                   
Line 1100  class ZSQLExtendFolder(Folder,Persistent Line 1223  class ZSQLExtendFolder(Folder,Persistent
         opfields={}          opfields={}
         lopfields={} #Verknuepfung bei mehrfachauswahl von einem feld          lopfields={} #Verknuepfung bei mehrfachauswahl von einem feld
         sortfields={} #order of sortfields          sortfields={} #order of sortfields
           diacritics={} #diacritische zeichen, falls "no", dann werden diese fuer das feld gefiltert.
         sortAllFields=None          sortAllFields=None
         skip=""          skip=""
         rangeStart=0          rangeStart=0
Line 1107  class ZSQLExtendFolder(Folder,Persistent Line 1231  class ZSQLExtendFolder(Folder,Persistent
         searchFields={}          searchFields={}
         searchFieldsOnly={}          searchFieldsOnly={}
         queryTemplate=[]          queryTemplate=[]
           outerjoin=""
           debug=None
                   
         if not select:          if not select:
             select="oid,*"              select="oid,*"
Line 1125  class ZSQLExtendFolder(Folder,Persistent Line 1251  class ZSQLExtendFolder(Folder,Persistent
         for q in splitted:          for q in splitted:
                                   
                 name=re.sub("r'+'"," ",q.split("=")[0].lower())                  name=re.sub("r'+'"," ",q.split("=")[0].lower())
                   if name=="_debug":
                       debug=True
                       
                 try:                  try:
                     value=urllib.unquote(q.split("=",1)[1])                      value=urllib.unquote(q.split("=",1)[1])
                 except:                  except:
Line 1142  class ZSQLExtendFolder(Folder,Persistent Line 1271  class ZSQLExtendFolder(Folder,Persistent
                     field=name[5:]                      field=name[5:]
                     lopfields[field]=lop                      lopfields[field]=lop
                                           
                   if name[0:11]==iCT+"diacritics":
                       field=name[12:]
                       diacritics[field]=value
                       
                 if name[0:10]==iCT+"sortorder":                  if name[0:10]==iCT+"sortorder":
                     #sort=value                      #sort=value
                                           
Line 1159  class ZSQLExtendFolder(Folder,Persistent Line 1292  class ZSQLExtendFolder(Folder,Persistent
                           
                       
             name=re.sub("r'+'"," ",q.split("=")[0].lower())              name=re.sub("r'+'"," ",q.split("=")[0].lower())
              
             try:              try:
                 value=urllib.unquote(q.split("=",1)[1])                  value=urllib.unquote(q.split("=",1)[1])
               
             except:              except:
                 value=""                  value=""
                           
             punktsplit=name.split(".")   #sonderfall feld mit punkten(tabelle.suchFeld.ausgewaehltesFeld,feldinoriginal), d.h. suche in anderer tabelle:                                    punktsplit=name.split(".")   #sonderfall feld mit punkten(tabelle.suchFeld.ausgewaehltesFeld,feldinoriginal), d.h. suche in anderer tabelle:                      
                     
             #analysiere alle anderen faelle              #analysiere alle anderen faelle
               
               if diacritics.get(name,'yes')=='no':
                   """filter diacritische zeichen"""
                   value=unicodedata.normalize('NFKD', value.decode('utf-8')).encode('ASCII', 'ignore')
                   
             if name==iCT+"lop":              if name==iCT+"lop":
                 lop=value                  lop=value
             elif name==iCT+"table":              elif name==iCT+"table":
Line 1183  class ZSQLExtendFolder(Folder,Persistent Line 1323  class ZSQLExtendFolder(Folder,Persistent
                 skip="OFFSET "+str(value)                  skip="OFFSET "+str(value)
                 rangeStart=str(value)                  rangeStart=str(value)
             elif name==iCT+"join":              elif name==iCT+"join":
                   
                 whereList.append(value)                  whereList.append(value)
               elif name==iCT+"outerjoin":
                   
                   outerjoin=value
             elif name==iCT+"sort":              elif name==iCT+"sort":
                 sortstrs=[]                  sortstrs=[]
            
                 for word in value.split(','):                  for word in value.split(','):
                     wordstr=word.lstrip().rstrip()                      wordstr=word.lstrip().rstrip()
                     if sortAllFields:                      if sortAllFields:
Line 1207  class ZSQLExtendFolder(Folder,Persistent Line 1352  class ZSQLExtendFolder(Folder,Persistent
                 op=value                  op=value
   
   
               #sonderfall Name hat das Format: 
               #TABELLE.SUCHFELD_IN_DIESER_TABELLE.SELECT_FIELD.IDENTIFIER_IN_TABELLE_-table
               #i.e. erzeugt wird
               #das Statement 
               #WHERE IDENTIFIER_IN_TABELLE in (select * from SELECT_FIELD
               #where LOWER(SUCHFELD_IN_DIESER_TABELLE) something  value)
               #something is defined by _op_TABELLE.SUCHFELD_IN_DIESER_TABELLE.SELECT_FIELD.IDENTIFIER_IN_TABELLE
                           
             elif (not name[0]==iCT) and len(punktsplit)==4:              elif (not name[0]==iCT) and len(punktsplit)==4:
                   
                 if opfields.has_key(name):                  if opfields.has_key(name):
                     op=opfields[name]                      op=opfields[name]
                 else:                  else:
                     op="ct"                      op="ct"
                 namealt=name                  namealt=name
                 name="LOWER("+punktsplit[1]+")"                   name="LOWER("+punktsplit[1]+")" 
                   value=value.lower()
                 if op=="ct":                  if op=="ct":
                     tmp=(name+" LIKE "+sql_quote("%"+value+"%"))                      tmp=(name+" LIKE "+sql_quote("%"+value+"%"))
                 elif op=="gt":                  elif op=="gt":
Line 1249  class ZSQLExtendFolder(Folder,Persistent Line 1402  class ZSQLExtendFolder(Folder,Persistent
   
                 op="all"                  op="all"
   
                   if value!='': #lehre Werte werde nicht hinzugefuegt
                 searchTmp="""%s in (select %s from %s where %s)"""%(punktsplit[3],punktsplit[2],punktsplit[0],tmp)                  searchTmp="""%s in (select %s from %s where %s)"""%(punktsplit[3],punktsplit[2],punktsplit[0],tmp)
   
                 queryTemplate.append(searchTmp)                  queryTemplate.append(searchTmp)
Line 1258  class ZSQLExtendFolder(Folder,Persistent Line 1411  class ZSQLExtendFolder(Folder,Persistent
   
                 #print "OP",op,name                  #print "OP",op,name
                 value=value.lower()                  value=value.lower()
                   
                 tmp=""                  tmp=""
                 if opfields.has_key(name):                  if opfields.has_key(name):
                     op=opfields[name]                      op=opfields[name]
Line 1298  class ZSQLExtendFolder(Folder,Persistent Line 1452  class ZSQLExtendFolder(Folder,Persistent
   
                 op="all"                  op="all"
   
                 if (not tableExt) or (namealt.split('.')[0]==tableExt):                  if (value!='') and ((not tableExt) or (namealt.split('.')[0]==tableExt)): #keine leeren werde und keine auschluss
                     if searchFields.has_key(namealt):                      if searchFields.has_key(namealt):
                         searchFields[namealt]+=lopfields.get(name,'OR')+" "+tmp                          searchFields[namealt]+=lopfields.get(name,'OR')+" "+tmp
                         searchFieldsOnly[namealt]+=lopfields.get(name,'OR')+" "+value                          searchFieldsOnly[namealt]+=lopfields.get(name,'OR')+" "+value
Line 1331  class ZSQLExtendFolder(Folder,Persistent Line 1485  class ZSQLExtendFolder(Folder,Persistent
                                   
         #print "QE",table          #print "QE",table
         #print (select,table,where,sort,maxstr,skip)          #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 %s"%(select,table,outerjoin,where,sort,maxstr,skip)
   
         if not nostore=="yes":          if not nostore=="yes":
                           
             self.REQUEST.SESSION['qs']=opfields              self.REQUEST.SESSION['qs']=opfields
         #print "IAMHERE again:", query          #print "IAMHERE again:", query
   
         if storename and (not NoQuery):          if not NoQuery:
   
             query2="SELECT count(*) FROM %s %s"%(table,where)              query2="SELECT count(*) FROM %s %s"%(table,where)
                           
Line 1363  class ZSQLExtendFolder(Folder,Persistent Line 1517  class ZSQLExtendFolder(Folder,Persistent
   
                 self.REQUEST.SESSION[storename]['queryString2']=query2                  self.REQUEST.SESSION[storename]['queryString2']=query2
                 if self.ZSQLSimpleSearch(query2):                  if self.ZSQLSimpleSearch(query2):
           
                     self.REQUEST.SESSION[storename]['count']=self.ZSQLSimpleSearch(query2)[0].count                      self.REQUEST.SESSION[storename]['count']=self.ZSQLSimpleSearch(query2)[0].count
                 else:                  else:
                     self.REQUEST.SESSION[storename]['count']=0                      self.REQUEST.SESSION[storename]['count']=0
Line 1370  class ZSQLExtendFolder(Folder,Persistent Line 1525  class ZSQLExtendFolder(Folder,Persistent
                           
                           
             self.REQUEST.SESSION[storename]['rangeStart']=rangeStart              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']                  self.REQUEST.SESSION[storename]['rangeEnd']=self.REQUEST.SESSION[storename]['count']
             else:              else:
                 self.REQUEST.SESSION[storename]['rangeEnd']=int(rangeStart)+int(limit)                  self.REQUEST.SESSION[storename]['rangeEnd']=int(rangeStart)+int(limit)
Line 1379  class ZSQLExtendFolder(Folder,Persistent Line 1538  class ZSQLExtendFolder(Folder,Persistent
   
             self.REQUEST.SESSION[storename]['searchFieldsOnly']=searchFieldsOnly              self.REQUEST.SESSION[storename]['searchFieldsOnly']=searchFieldsOnly
   
           if debug:
               logging.error("ZSQLSimpleSearch %s"%query)
         if not NoQuery:          if not NoQuery:
   
             return self.ZSQLQuery(query)              return self.ZSQLQuery(query)
Line 1401  class ZSQLExtendFolder(Folder,Persistent Line 1562  class ZSQLExtendFolder(Folder,Persistent
     def ZSQLQuery(self,query,debug=None):      def ZSQLQuery(self,query,debug=None):
         """query"""          """query"""
         if debug:          if debug:
             zLOG.LOG("ZSQLQuery", zLOG.INFO, query)              logger("ZSQLQuery", logging.INFO, query)
                           
         return self.ZSQLSimpleSearch(query)          return self.ZSQLSimpleSearch(query)
   
Line 1429  class ZSQLExtendFolder(Folder,Persistent Line 1590  class ZSQLExtendFolder(Folder,Persistent
         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"
                   
         return self.REQUEST.RESPONSE.redirect(urllib.unquote(formatfile))          return self.REQUEST.RESPONSE.redirect(urllib.unquote(formatfile)+"?"+rq)
   
           
     def ZSQLint(self,string):      def ZSQLint(self,string):
Line 1463  class ZSQLExtendFolder(Folder,Persistent Line 1624  class ZSQLExtendFolder(Folder,Persistent
             limit=1              limit=1
             newRangeStart=0              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              #newRangeStart=self.REQUEST.SESSION[storename]['count']-1
             return ""              return ""
                   
Line 1562  class ZSQLExtendFolder(Folder,Persistent Line 1723  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 "<a href='%s'>%s</a>"%(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 "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)  
           
           
 manage_addZSQLExtendFolderForm=DTMLFile('ZSQLExtendFolderAdd', globals())  manage_addZSQLExtendFolderForm=DTMLFile('ZSQLExtendFolderAdd', globals())
   

Removed from v.1.92  
changed lines
  Added in v.1.111


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