Diff for /ZSQLExtend/ZSQLExtend.py between versions 1.28 and 1.32

version 1.28, 2004/07/26 15:43:26 version 1.32, 2004/08/27 23:03:48
Line 162  class ZSQLExtendFolder(Folder,Persistent Line 162  class ZSQLExtendFolder(Folder,Persistent
         return ret          return ret
   
   
     def ZSQLOptionsFromCRList(self,fieldname,listField):      def ZSQLOptionsFromCRList(self,fieldname,listField, multiple=''):
         """generate select oprions form a cr seperated list"""          """generate select oprions form a cr seperated list"""
         fields=listField.split("\n")          fields=listField.split("\n")
         ret="""<select name="%s">          ret="""<select name="%s" %s>
             """%fieldname              """%(fieldname,multiple)
         for field in fields:          for field in fields:
             ret+="""<option value="%s">%s</option>"""%(field.encode('utf-8'),field.encode('utf-8'))              ret+="""<option value="%s">%s</option>"""%(field.encode('utf-8'),field.encode('utf-8'))
         ret+="""</select>"""          ret+="""</select>"""
         return ret          return ret
   
     def ZSQLOptionsFromSearchList(self,fieldname,results,fieldName,valueName=None,start=None):      def ZSQLOptionsFromSearchList(self,fieldname,results,fieldName,valueName=None,start=None, multiple='',startValue=None):
         """generate select oprions form a cr seperated list"""          """generate select oprions form a search list seperated list"""
         if not valueName:          if not valueName:
             valueName=fieldName              valueName=fieldName
                           
         ret="""<select name="%s">          ret="""<select name="%s" %s>
             """%fieldname              """%(fieldname,multiple)
         if start:          if start:
         if start==' ':          if start==' ':
         start=''          start=''
             ret+="""<option value="%s">%s</option>"""%(start,start)                  if not startValue:
                       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)
Line 235  class ZSQLExtendFolder(Folder,Persistent Line 238  class ZSQLExtendFolder(Folder,Persistent
           
   
         #print "INLINE:",query          #print "INLINE:",query
         return self.ZSQLSimpleSearch(var=query)          return self.ZSQLSimpleSearch(query)
                   
   
     def ZSQLSimpleSearch(self,query=None):      def ZSQLSimpleSearch(self,query=None):
Line 279  class ZSQLExtendFolder(Folder,Persistent Line 282  class ZSQLExtendFolder(Folder,Persistent
         valueString=string.join(valueList,",")          valueString=string.join(valueList,",")
                   
         queryString="INSERT INTO %s (%s) VALUES (%s)"%(table,keyString,valueString)          queryString="INSERT INTO %s (%s) VALUES (%s)"%(table,keyString,valueString)
         self.ZSQLSimpleSearch(var=queryString)          self.ZSQLSimpleSearch(queryString)
         return self.REQUEST.RESPONSE.redirect(format)          return self.REQUEST.RESPONSE.redirect(format)
                   
     def ZSQLChange(self,**argv):      def ZSQLChange(self,**argv):
Line 313  class ZSQLExtendFolder(Folder,Persistent Line 316  class ZSQLExtendFolder(Folder,Persistent
                 changeList.append("\""+name+"\"="+libpq.PgQuoteString(urllib.unquote(value)))                  changeList.append("\""+name+"\"="+libpq.PgQuoteString(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(var=queryString)          self.ZSQLSimpleSearch(queryString)
         return self.REQUEST.RESPONSE.redirect(format)          return self.REQUEST.RESPONSE.redirect(format)
   
     def ZSQLChange_old(self):      def ZSQLChange_old(self):
Line 338  class ZSQLExtendFolder(Folder,Persistent Line 341  class ZSQLExtendFolder(Folder,Persistent
                 changeList.append("\""+name+"\"="+libpq.PgQuoteString(urllib.unquote(value)))                  changeList.append("\""+name+"\"="+libpq.PgQuoteString(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(var=queryString)          self.ZSQLSimpleSearch(queryString)
         return self.REQUEST.RESPONSE.redirect(format)          return self.REQUEST.RESPONSE.redirect(format)
           
     def ZSQLFind(self,qs="",select="oid,*",storename=None,**argv):  
   
       def ZSQLFind2(self,qs="",select="oid,*",storename=None,tableList=['cdli_translit','cdli_cat'],**argv):
           """find2"""
           #search1= self.ZSQLFind(qs="",select="oid,*",storename=None,tableExt='cdli_translit',restrictField='id_text',NoQuery='yes',NoLimit='yes',**argv)
   
           
           #search2 = self.ZSQLFind(tableExt='cdli_cat',qs="",select="oid,*",storename=None,restrictConnect=('cdli_cat.id_text',search1),**argv)
   
           search1= self.ZSQLFind(qs="",select="oid,*",storename=None,tableExt='cdli_cat',restrictField='id_text',NoQuery='yes',NoLimit='yes',**argv)
   
           search2 = self.ZSQLFind(tableExt='cdli_translit',qs="",select="oid,*",storename=None,restrictConnect=('cdli_translit.id_text',search1),**argv)
           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,**argv):
         """Find"""          """Find"""
   
         def delEmpty(list):          def delEmpty(list):
Line 352  class ZSQLExtendFolder(Folder,Persistent Line 371  class ZSQLExtendFolder(Folder,Persistent
                     ret.append(x)                      ret.append(x)
             return ret              return ret
                           
           #self.REQUEST.SESSION['come_from_search']="no" # zurücksetzen
         if qs=="":          if qs=="":
              print "HI"
            if self.REQUEST['QUERY_STRING']:             if self.REQUEST['QUERY_STRING']:
                qs=self.REQUEST['QUERY_STRING']                 qs=self.REQUEST['QUERY_STRING']
                                 
Line 362  class ZSQLExtendFolder(Folder,Persistent Line 383  class ZSQLExtendFolder(Folder,Persistent
                for field in argv.keys():                 for field in argv.keys():
                                         
                    qs+=",-%s=%s"%(field,argv[field])                     qs+=",-%s=%s"%(field,argv[field])
                #print qs                     
            else:             else:
                                 
                qs=self.REQUEST.SESSION['query']                 qs=self.REQUEST.SESSION.get('query','')
                  print "QS:",qs
                for field in argv.keys():                 for field in argv.keys():
                    #print field                     #print field
                    qs+=",-%s=%s"%(field,argv[field])                     qs+=",-%s=%s"%(field,argv[field])
Line 387  class ZSQLExtendFolder(Folder,Persistent Line 409  class ZSQLExtendFolder(Folder,Persistent
             storename="foundCount"              storename="foundCount"
   
   
                   print "calling Query with",repr(NoQuery)
         ret=self.parseQueryString(qs,"-",select=select,storemax="yes",storename=storename)          ret=self.parseQueryString(qs,"-",select=select,storemax="yes",storename=storename,tableExt=tableExt,NoQuery=NoQuery,NoLimit=NoLimit,restrictField=restrictField,restrictConnect=restrictConnect)
         #print self.REQUEST.SESSION["foundCount"]          #print self.REQUEST.SESSION["foundCount"]
                   
                   print "called query"
         return ret          return ret
   
     def ZSQLFoundCountLen(self,var):      def ZSQLFoundCountLen(self,var):
Line 447  class ZSQLExtendFolder(Folder,Persistent Line 469  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 parseQueryString(self,qs,iCT,storemax="no",select=None,nostore=None,storename=None):      def parseQueryString(self,qs,iCT,storemax="no",select=None,nostore=None,storename=None,tableExt=None,NoQuery=None,NoLimit=None,restrictField=None,restrictConnect=None):
         """analysieren den QueryString"""          """analysieren den QueryString"""
         #print "NO",nostore          #print "NO",nostore
         lop="AND" # standardsuche mit and          lop="AND" # standardsuche mit and
Line 457  class ZSQLExtendFolder(Folder,Persistent Line 479  class ZSQLExtendFolder(Folder,Persistent
         sort=""          sort=""
         op="bw"          op="bw"
         opfields={}          opfields={}
           lopfields={} #Verknüpfung bei mehrfachauswahl von einem feld
         skip=""          skip=""
         rangeStart=0          rangeStart=0
         limit=0          limit=0
         searchFields={}          searchFields={}
                   searchFieldsOnly={}
         if not select:          if not select:
             select="oid,*"              select="oid,*"
         #print "Q",nostore,qs          #print "Q",nostore,qs
         #check for op in the case of inline search          #check for op 
                   
     splitted=qs.split(",")      splitted=qs.split(",")
           if tableExt:
               table=tableExt
           
           if restrictField:
                       select=restrictField
                           
         for q in splitted:          for q in splitted:
                                   
Line 483  class ZSQLExtendFolder(Folder,Persistent Line 510  class ZSQLExtendFolder(Folder,Persistent
   
                     field=name[4:]                      field=name[4:]
                     opfields[field]=op                      opfields[field]=op
   
                   if name[0:4]==iCT+"lop":
                       lop=value
   
                       field=name[5:]
                       lopfields[field]=lop
                     #print "HI",op,field                      #print "HI",op,field
     #print opfieldsa      #print opfieldsa
         #now analyse the querystring          #now analyse the querystring
Line 503  class ZSQLExtendFolder(Folder,Persistent Line 536  class ZSQLExtendFolder(Folder,Persistent
             if name==iCT+"lop":              if name==iCT+"lop":
                 lop=value                  lop=value
             elif name==iCT+"table":              elif name==iCT+"table":
                   if not tableExt: 
                 table=value                  table=value
             elif name==iCT+"select":              elif name==iCT+"select":
                   if not restrictField:
                 select=value                  select=value
             elif name==iCT+"max":              elif name==iCT+"max":
                   if not NoLimit:
                 maxstr="LIMIT "+str(value)                  maxstr="LIMIT "+str(value)
                 limit=str(value)                  limit=str(value)
             elif name==iCT+"skip":              elif name==iCT+"skip":
Line 515  class ZSQLExtendFolder(Folder,Persistent Line 551  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                  sort="ORDER BY "+value.replace(' AND ',',')
             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 529  class ZSQLExtendFolder(Folder,Persistent Line 565  class ZSQLExtendFolder(Folder,Persistent
                                   
         #print "OP",op,name          #print "OP",op,name
                 value=value.lower()                  value=value.lower()
                   tmp=""
                 searchFields[name]=value  
                   
                 if opfields.has_key(name):                  if opfields.has_key(name):
                     op=opfields[name]                      op=opfields[name]
         else:          else:
             op="ct"              op="ct"
                   namealt=name
         name="LOWER("+name+")"              name="LOWER("+name+")"    
                 if op=="ct":                  if op=="ct":
                     whereList.append(name+" LIKE "+libpq.PgQuoteString("%"+value+"%"))                      tmp=(name+" LIKE "+libpq.PgQuoteString("%"+value+"%"))
                 elif op=="gt":                  elif op=="gt":
                     whereList.append(name+">"+libpq.PgQuoteString(value))                      tmp=(name+">"+libpq.PgQuoteString(value))
                 elif op=="lt":                  elif op=="lt":
                     whereList.append(name+"<"+libpq.PgQuoteString(value))                      tmp=(name+"<"+libpq.PgQuoteString(value))
                 elif op=="eq":                  elif op=="eq":
                     whereList.append(name+"="+libpq.PgQuoteString(value))                      tmp=(name+"="+libpq.PgQuoteString(value))
                 elif op=="bw":                  elif op=="bw":
                     whereList.append(name+" LIKE "+libpq.PgQuoteString(value+"%"))                      tmp=(name+" LIKE "+libpq.PgQuoteString(value+"%"))
                 elif op=="ew":                  elif op=="ew":
                     whereList.append(name+" LIKE "+libpq.PgQuoteString("%"+value))                      tmp=(name+" LIKE "+libpq.PgQuoteString("%"+value))
                 op="ct"                  op="ct"
                   print "TTT",tableExt
                   if (not tableExt) or (namealt.split('.')[0]==tableExt):
                       if searchFields.has_key(name):
                           searchFields[name]+=lopfields.get(name,'OR')+" "+tmp
                           searchFieldsOnly[name]+=lopfields.get(name,'OR')+" "+value
                       else: 
                           searchFields[name]=tmp
                           searchFieldsOnly[name]=value
   
               
          ##  for name in searchFields.keys():
   ##             value=searchFields[name]
                   
   ##             if opfields.has_key(name):
   ##                 op=opfields[name]
   ##             else:
   ##                 op="ct"
   ##             name="LOWER("+name+")"    
   ##             if op=="ct":
   ##                 whereList.append(name+" LIKE "+libpq.PgQuoteString("%"+value+"%"))
   ##             elif op=="gt":
   ##                 whereList.append(name+">"+libpq.PgQuoteString(value))
   ##             elif op=="lt":
   ##                 whereList.append(name+"<"+libpq.PgQuoteString(value))
   ##             elif op=="eq":
   ##                 whereList.append(name+"="+libpq.PgQuoteString(value))
   ##             elif op=="bw":
   ##                 whereList.append(name+" LIKE "+libpq.PgQuoteString(value+"%"))
   ##             elif op=="ew":
   ##                 whereList.append(name+" LIKE "+libpq.PgQuoteString("%"+value))
   ##             op="ct"
               
   ##             #except:
   ##             #    print "END",value,name,Exception      
   
           whereList=["("+searchFields[x]+")" for x in searchFields.keys()]
                           
             #except:  
             #    print "END",value,name,Exception         
         if len(whereList)>0:          if len(whereList)>0:
               
             where="WHERE "+string.join(whereList," "+lop+" ")              where="WHERE "+string.join(whereList," "+lop+" ")
         else:          else:
             where=""              where=""
   
           if restrictConnect:
               print "resticted"
               if len(where)==0:
                   where="WHERE "+restrictConnect[0]+" in ("+restrictConnect[1]+")"
               else:
                   where+="and "+restrictConnect[0]+" in ("+restrictConnect[1]+")"
                   
         #print "QE",table          #print "QE",table
                   
         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)
Line 566  class ZSQLExtendFolder(Folder,Persistent Line 644  class ZSQLExtendFolder(Folder,Persistent
             self.REQUEST.SESSION['qs']=opfields              self.REQUEST.SESSION['qs']=opfields
         #print "IAMHERE again:", query          #print "IAMHERE again:", query
   
         if storename:          if storename and (not NoQuery):
             query2="SELECT count(*) FROM %s %s"%(table,where)              query2="SELECT count(*) FROM %s %s"%(table,where)
             #print "storing",query2              print "storing",query2
             #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]={}
             if self.REQUEST.SESSION[storename].has_key('queryString2'):              if self.REQUEST.SESSION[storename].has_key('queryString2'):
                 #print "HI",storename                  print "HI",storename
                 if not self.REQUEST.SESSION[storename]['queryString2']==query2:                  if not self.REQUEST.SESSION[storename]['queryString2']==query2:
                     #print "HOOOOO",storename                      #print "HOOOOO",storename
                     self.REQUEST.SESSION[storename]['queryString2']=query2                      self.REQUEST.SESSION[storename]['queryString2']=query2
                     self.REQUEST.SESSION[storename]['count']=self.ZSQLSimpleSearch(var=query2)[0].count                      self.REQUEST.SESSION[storename]['count']=self.ZSQLSimpleSearch(query2)[0].count
   
                     #print "QUERY",query2,"::::",self.REQUEST.SESSION[storename]['queryString2']                      #print "QUERY",query2,"::::",self.REQUEST.SESSION[storename]['queryString2']
                                   
             else:              else:
                   print "go"
                 self.REQUEST.SESSION[storename]['queryString2']=query2                  self.REQUEST.SESSION[storename]['queryString2']=query2
                 self.REQUEST.SESSION[storename]['count']=self.ZSQLSimpleSearch(var=query2)[0].count                  self.REQUEST.SESSION[storename]['count']=self.ZSQLSimpleSearch(query2)[0].count
                 #print "QUERYNEW",self.REQUEST.SESSION[storename]['queryString2']                  #print "QUERYNEW",self.REQUEST.SESSION[storename]['queryString2']
                           
                           
Line 593  class ZSQLExtendFolder(Folder,Persistent Line 673  class ZSQLExtendFolder(Folder,Persistent
                 self.REQUEST.SESSION[storename]['rangeEnd']=int(rangeStart)+int(limit)                  self.REQUEST.SESSION[storename]['rangeEnd']=int(rangeStart)+int(limit)
             self.REQUEST.SESSION[storename]['rangeSize']=limit              self.REQUEST.SESSION[storename]['rangeSize']=limit
             self.REQUEST.SESSION[storename]['searchFields']=searchFields              self.REQUEST.SESSION[storename]['searchFields']=searchFields
               self.REQUEST.SESSION[storename]['searchFieldsOnly']=searchFieldsOnly
                           
         #print "Q",query                      if not NoQuery:
               print "noquery",query
         return self.ZSQLQuery(query)          return self.ZSQLQuery(query)
           else:
               print "query"
               return query
   
     def ZSQLQuery(self,query):      def ZSQLQuery(self,query):
         """query"""          """query"""
         return self.ZSQLSimpleSearch(var=query)          return self.ZSQLSimpleSearch(query)
           
     def ZSQLSearch(self):      def ZSQLSearch(self):
         """To be done"""          """To be done"""
Line 615  class ZSQLExtendFolder(Folder,Persistent Line 700  class ZSQLExtendFolder(Folder,Persistent
             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"
           
         return self.REQUEST.RESPONSE.redirect(urllib.unquote(formatfile))          return self.REQUEST.RESPONSE.redirect(urllib.unquote(formatfile))
   
           
Line 629  class ZSQLExtendFolder(Folder,Persistent Line 717  class ZSQLExtendFolder(Folder,Persistent
     def getZSQLSearchFieldsList(self,storename="foundCount"):      def getZSQLSearchFieldsList(self,storename="foundCount"):
         """get searchfieldList"""          """get searchfieldList"""
         #print self.REQUEST.SESSION[storename]['searchFields'].keys()          #print self.REQUEST.SESSION[storename]['searchFields'].keys()
         return  self.REQUEST.SESSION[storename]['searchFields'].keys()          return  self.REQUEST.SESSION[storename]['searchFieldsOnly'].keys()
   
     def getZSQLSearchFields(self,storename="foundCount"):      def getZSQLSearchFields(self,field,storename="foundCount"):
         """get searchfield"""          """get searchfield"""
         #print "SF",self.REQUEST.SESSION[storename]['searchFields']          #print "SF",self.REQUEST.SESSION[storename]['searchFields']
         return  self.REQUEST.SESSION[storename]['searchFields']          
           return  self.REQUEST.SESSION[storename]['searchFieldsOnly'][field]
   
                                                                                                   
     def nextLink(self,html,storename="foundCount"):      def nextLink(self,html,storename="foundCount"):
Line 986  class ZSQLBibliography(Folder,ZSQLExtend Line 1075  class ZSQLBibliography(Folder,ZSQLExtend
         """index"""          """index"""
         ret="""<?xml version="1.0" ?>          ret="""<?xml version="1.0" ?>
                  <index>"""                   <index>"""
         for found in self.ZSQLSimpleSearch(var="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              link=self.absolute_url()+"/"+"record.html?oid=%i"%found.oid
             metalink=self.absolute_url()+"/"+"getMetaDataXML?oid=%i"%found.oid              metalink=self.absolute_url()+"/"+"getMetaDataXML?oid=%i"%found.oid
                           

Removed from v.1.28  
changed lines
  Added in v.1.32


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