Diff for /ZSQLExtend/ZSQLExtend.py between versions 1.4 and 1.5

version 1.4, 2003/12/23 17:56:01 version 1.5, 2004/01/21 16:54:45
Line 7  import re Line 7  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
   
 def quoteString(name):  def quoteString(name):
     #return re.sub(r'([\(\)\?])',"\\\1",name)      #return re.sub(r'([\(\)\?])',"\\\1",name)
Line 17  class ZSQLExtendFolder(Persistent, Impli Line 18  class ZSQLExtendFolder(Persistent, Impli
     """Folder"""      """Folder"""
     meta_type="ZSQLExtendFolder"      meta_type="ZSQLExtendFolder"
           
     def ZSQLInlineSearch(self,**argv):  
       def lowerEnd(self,path):
           """oinly for demo"""
           return os.path.splitext(path)[0]+".jpg"
           
       def ZSQLisEmpty(self,field):
           """Teste ob Treffer leer"""
           print "field",field
           if not field:
               return 1
           if field=="":
               return 1
           return 0
   
       def ZSQLsearchOptions(self):
           """return HTML Fragment with search options"""
           ret="""<select name="-op">
       <option value="bw">begins with</option>             <!-- begins with / beginnt mit, "Wort*" -->
       <option value="ew">ends with</option>
       <option value="cn">contains</option>                <!-- contains / enthaellt, "Wort" -->
       <option value="eq">equals</option>                  <!-- equals / ist, =Wort -->
   </select>"""
           return ret
       
       def ZSQLInlineSearch(self,storename=None,**argv):
         """inlinesearch"""          """inlinesearch"""
         qs=[]          qs=[]
           if storename:
               """store"""
           else:
               storename="foundCount"
                   
           
   
               #print "INLINE:",argv
         for a in argv.keys():          for a in argv.keys():
             qs.append(a+"="+urllib.quote(str(argv[a])))              qs.append(a+"="+urllib.quote(str(argv[a])))
           #return []  
           return self.parseQueryString(string.join(qs,","),"_",storename=storename)
   
       def ZSQLInlineSearch2(self,query):
           """inlinesearch"""
           qs=[]
   
         return self.parseQueryString(string.join(qs,","),"_")      
   
           #print "INLINE:",query
           
           return self.search(var=query)
           
     def ZSQLAdd(self):      def ZSQLAdd(self):
         """Neuer Eintrag"""          """Neuer Eintrag"""
Line 117  class ZSQLExtendFolder(Persistent, Impli Line 156  class ZSQLExtendFolder(Persistent, Impli
         self.search(var=queryString)          self.search(var=queryString)
         return self.REQUEST.RESPONSE.redirect(format)          return self.REQUEST.RESPONSE.redirect(format)
           
     def ZSQLFind(self,qs="",select="*"):      def ZSQLFind(self,qs="",select="*",storename=None):
         """Find"""          """Find"""
   
   
         if qs=="":          if qs=="":
            if self.REQUEST['QUERY_STRING']:             if self.REQUEST['QUERY_STRING']:
                qs=self.REQUEST['QUERY_STRING']                 qs=self.REQUEST['QUERY_STRING']
                  
                  
                qs=string.join(qs.split("&"),",")                 qs=string.join(qs.split("&"),",")
            else:             else:
                  
                qs=self.REQUEST.SESSION['query']                 qs=self.REQUEST.SESSION['query']
         else:          else:
             qs=string.join(qs.split("&"),",")              qs=string.join(qs.split("&"),",")
         return self.parseQueryString(qs,"-",select=select,storemax="yes")  
   
     def ZSQLFoundCount(self,founds):          qs=re.sub("\\+"," ",qs)# Austauschen da Leerzeichen bei http-get durch + ersetzt wird, generell sollte alles auf post umgeschrieben werden. vom search formular.
         try:          #print "QS",qs
             return len(founds)          if storename:
         except:              """store"""
             return 0          else:
               storename="foundCount"
           
           ret=self.parseQueryString(qs,"-",select=select,storemax="yes",storename=storename)
           #print self.REQUEST.SESSION["foundCount"]
           
           return ret
   
       def ZSQLFoundCountLen(self,var):
           return len(var)
               
       def ZSQLFoundCount(self,qs="",select="*",storename=None):
           
          ##  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']
   
       def ZSQLRangeStart(self,storename=None):
   
     def parseQueryString(self,qs,iCT,storemax="no",select=None):          if storename:
         """analysierren den QueryString"""              """store"""
           else:
               storename="foundCount"
           
           return self.REQUEST.SESSION[storename]['rangeStart']
       
       def ZSQLRangeSize(self,storename=None):
           
           if storename:
               """store"""
           else:
               storename="foundCount"
               
           return self.REQUEST.SESSION[storename]['rangeSize']
   
       def ZSQLRangeEnd(self,storename=None):
           
           if storename:
               """store"""
           else:
               storename="foundCount"
           
           return self.REQUEST.SESSION[storename]['rangeEnd']
       
       def parseQueryString(self,qs,iCT,storemax="no",select=None,nostore=None,storename=None):
           """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 auswählen
         whereList=[]          whereList=[]
         sort=""          sort=""
         op="bw"          op="bw"
         opfields={}          opfields={}
           skip=""
           rangeStart=0
                   
         if not select:          if not select:
             select="*"              select="*"
           #print "Q",nostore,qs
         #check for op in the case of inline search          #check for op in the case of inline search
         if iCT=="_":                      if iCT=="_":            
             for q in qs.split(","):              for q in qs.split(","):
                   
                 name=re.sub("r'+'"," ",q.split("=")[0].lower())                  name=re.sub("r'+'"," ",q.split("=")[0].lower())
                 value=urllib.unquote(q.split("=")[1])                  value=urllib.unquote(q.split("=")[1])
   
Line 162  class ZSQLExtendFolder(Persistent, Impli Line 266  class ZSQLExtendFolder(Persistent, Impli
   
         #now analyse the querystring          #now analyse the querystring
         for q in qs.split(","):          for q in qs.split(","):
             try:              
               
               #try:
   
                 name=re.sub("r'+'"," ",q.split("=")[0].lower())                  name=re.sub("r'+'"," ",q.split("=")[0].lower())
                 value=urllib.unquote(q.split("=")[1])                  value=urllib.unquote(q.split("=")[1])
                 value=quoteString(value)              #value=libpq.PgQuoteString(value)
               
               
                 if name==iCT+"lop":                  if name==iCT+"lop":
                     lop=value                      lop=value
                 elif name==iCT+"table":                  elif name==iCT+"table":
Line 174  class ZSQLExtendFolder(Persistent, Impli Line 282  class ZSQLExtendFolder(Persistent, Impli
                 elif name==iCT+"select":                  elif name==iCT+"select":
                     select=value                      select=value
                 elif name==iCT+"max":                  elif name==iCT+"max":
                     max=str(value)                  max="LIMIT "+str(value)
                   limit=str(value)
               elif name==iCT+"skip":
                   skip="OFFSET "+str(value)
                   rangeStart=str(value)
                 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
                 elif name==iCT+"token":                  elif name==iCT+"token":
                   if not nostore=="yes":
                     self.REQUEST.SESSION['token']=value                      self.REQUEST.SESSION['token']=value
   
                 elif name==iCT+"op":                  elif name==iCT+"op":
Line 189  class ZSQLExtendFolder(Persistent, Impli Line 301  class ZSQLExtendFolder(Persistent, Impli
                                   
   
                 elif (not name[0]==iCT) and (not len(value)==0):                  elif (not name[0]==iCT) and (not len(value)==0):
                   name="LOWER("+name+")"
                   value=value.lower()
                     if opfields.has_key(name):                      if opfields.has_key(name):
                         op=opfields[name]                          op=opfields[name]
                     if op=="ct":                      if op=="ct":
                         whereList.append(name+"~\'.*"+value+".*\'")                      whereList.append(name+" LIKE "+libpq.PgQuoteString("%"+value+"%"))
                     elif op=="gt":                      elif op=="gt":
                         whereList.append(name+">\'"+value+"\'")                      whereList.append(name+">"+libpq.PgQuoteString(value))
                     elif op=="lt":                      elif op=="lt":
                         whereList.append(name+"<\'"+value+"\'")                      whereList.append(name+"<"+libpq.PgQuoteString(value))
                     elif op=="eq":                      elif op=="eq":
                         whereList.append(name+"=\'"+value+"\'")                      whereList.append(name+"="+libpq.PgQuoteString(value))
                     elif op=="bw":                      elif op=="bw":
                         whereList.append(name+"~\'"+value+".*\'")                      whereList.append(name+" LIKE "+libpq.PgQuoteString(value+"%"))
                     elif op=="ew":                      elif op=="ew":
                         whereList.append(name+"~\'.*"+value+"\'")                      whereList.append(name+" LIKE "+libpq.PgQuoteString("%"+value))
                     op="ct"                      op="ct"
             except:              
                 print "END"                      #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=""
         #print "QE",table          #print "QE",table
                   
         query="SELECT %s FROM %s %s %s"%(select,table,where,sort)          query="SELECT %s FROM %s %s %s %s %s"%(select,table,where,sort,max,skip)
           if not nostore=="yes":
   
         self.REQUEST.SESSION['qs']=opfields          self.REQUEST.SESSION['qs']=opfields
           print "IAMHERE again:", query
   
           if storename:
               query2="SELECT count(%s) FROM %s %s"%(select,table,where)
               #print "storing",query2
               #print "QUERYSTRING:",self.REQUEST.SESSION[storename]['queryString2']
               if not self.REQUEST.SESSION.has_key(storename):
                   self.REQUEST.SESSION[storename]={}
               if self.REQUEST.SESSION[storename].has_key('queryString2'):
                   #print "HI",storename
                   if not self.REQUEST.SESSION[storename]['queryString2']==query2:
                       #print "HOOOOO",storename
                       self.REQUEST.SESSION[storename]['queryString2']=query2
                       self.REQUEST.SESSION[storename]['count']=self.search(var=query2)[0].count
                       #print "QUERY",query2,"::::",self.REQUEST.SESSION[storename]['queryString2']
                   
               else:
                   self.REQUEST.SESSION[storename]['queryString2']=query2
                   self.REQUEST.SESSION[storename]['count']=self.search(var=query2)[0].count
                   #print "QUERYNEW",self.REQUEST.SESSION[storename]['queryString2']
               
               
               self.REQUEST.SESSION[storename]['rangeStart']=rangeStart
               if limit=="all":
                   self.REQUEST.SESSION[storename]['rangeEnd']=self.REQUEST.SESSION[storename]['count']
               else:
                   self.REQUEST.SESSION[storename]['rangeEnd']=int(rangeStart)+int(limit)
               self.REQUEST.SESSION[storename]['rangeSize']=limit
               
               
         return self.search(var=query)          return self.search(var=query)
           
     def ZSQLSearch(self):      def ZSQLSearch(self):
Line 241  class ZSQLExtendFolder(Persistent, Impli Line 387  class ZSQLExtendFolder(Persistent, Impli
             return(int(string))              return(int(string))
         except:          except:
             return 0              return 0
     def prevLink(self,html):  
       def nextLink(self,html,storename="foundCount"):
           """nextLink"""
           try:
               limit=self.REQUEST.SESSION[storename]['rangeSize']
               newRangeStart=int(self.REQUEST.SESSION[storename]['rangeStart'])+int(limit)
           except:
               limit=0
               newRangeStart=0
               
           if newRangeStart>self.REQUEST.SESSION[storename]['count']:
               newRangeStart=self.REQUEST.SESSION[storename]['count']-10
   
           
           #create new query string
           
           if self.REQUEST['QUERY_STRING']=="":
               qs=self.REQUEST.SESSION['query']
               
               queries=string.split(qs,",")
               
               
           else:
               qs=self.REQUEST['QUERY_STRING']
               queries=string.split(qs,"&")
               
               
               
           newquery=[]
   
           skipFound=0
           
           for query in queries:
               #print query.split("=")[0]
               if query[0]=="_" : query[0]="-"
   
               if query.split("=")[0].lower()=="-skip":
                   skipFound=1
                   query="-skip=%i"%newRangeStart
               newquery.append(query)
   
           if skipFound==0 :
               query="-skip=%i"%newRangeStart
               newquery.append(query)
                   
           newquerystring=string.join(newquery,"&")
           return "<a href='%s'>%s</a>"%(self.REQUEST['URL0']+"?"+newquerystring,html)
               
           
       def prevLink(self,html,storename="foundCount"):
           """prev link"""
           try:
               limit=self.REQUEST.SESSION[storename]['rangeSize']
               newRangeStart=int(self.REQUEST.SESSION[storename]['rangeStart'])-int(limit)
           except:
               limit=0
               newRangeStart=0
   
           #print "limit",limit,newRangeStart,int(self.REQUEST.SESSION[storename]['rangeStart'])
           
           if newRangeStart<0:
                   newRangeStart=0
   
           #create new query string
           
           if self.REQUEST['QUERY_STRING']=="":
               qs=self.REQUEST.SESSION['query']
               #qs=re.sub(r'_','-',qs) #aendern für query
               queries=string.split(qs,",")
               
               
           else:
               qs=self.REQUEST['QUERY_STRING']
               queries=string.split(qs,"&")
               
               
               
           newquery=[]
           
           skipFound=0
   
           for query in queries:
               #print query.split("=")[0]
   
               if query[0]=="_" : query[0]="-"
               
               if query.split("=")[0].lower()=="-skip":
                   #print"HI"
                   query="-skip=%i"%newRangeStart
                   skipFound=1
               newquery.append(query)
   
           if skipFound==0 :
               query="-skip=%i"%newRangeStart
               newquery.append(query)
               
           newquerystring=string.join(newquery,"&")
           return "<a href='%s'>%s</a>"%(self.REQUEST['URL0']+"?"+newquerystring,html)
       
       def prevLink_old(self,html):
         """prev link"""          """prev link"""
         if self.REQUEST['QUERY_STRING']=="":          if self.REQUEST['QUERY_STRING']=="":
             qs=self.REQUEST.SESSION['query']              qs=self.REQUEST.SESSION['query']
Line 268  class ZSQLExtendFolder(Persistent, Impli Line 513  class ZSQLExtendFolder(Persistent, Impli
             newquerystring=string.join(queries,"&")              newquerystring=string.join(queries,"&")
         return "<a href='%s'>%s</a>"%(self.REQUEST['URL0']+"?"+newquerystring,html)          return "<a href='%s'>%s</a>"%(self.REQUEST['URL0']+"?"+newquerystring,html)
                   
     def nextLink(self,html):      def nextLink_old(self,html):
         """prev link"""          """prev link"""
         if self.REQUEST['QUERY_STRING']=="":          if self.REQUEST['QUERY_STRING']=="":
             qs=self.REQUEST.SESSION['query']              qs=self.REQUEST.SESSION['query']
Line 298  class ZSQLExtendFolder(Persistent, Impli Line 543  class ZSQLExtendFolder(Persistent, Impli
                   
         return "<a href='%s'>%s</a>"%(self.REQUEST['URL0']+"?"+newquerystring,html)          return "<a href='%s'>%s</a>"%(self.REQUEST['URL0']+"?"+newquerystring,html)
                   
     def ZSQLrangeStart(self):  
         if self.REQUEST['QUERY_STRING']=="":  
             qs=self.REQUEST.SESSION['query']  
         else:  
             qs=self.REQUEST['QUERY_STRING']  
         offset=re.search(r'offset\=(.*)\,',qs.lower())  
         if not offset:  
             offset=1  
         return offset  
 #    def search(self,**argv):  
 #        """to be done"""  
   
   
   
 manage_addZSQLExtendFolderForm=DTMLFile('ZSQLExtendFolderAdd', globals())  manage_addZSQLExtendFolderForm=DTMLFile('ZSQLExtendFolderAdd', globals())
   

Removed from v.1.4  
changed lines
  Added in v.1.5


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