File:  [Repository] / ZSQLExtend / ZSQLExtend.py
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Fri Nov 28 15:03:10 2003 UTC (20 years, 7 months ago) by dwinter
Branches: dwinter
CVS tags: first
Erweiterte ZSQLMEthoden erster Import

    1: from OFS.Folder import Folder
    2: from Globals import Persistent
    3: from Acquisition import Implicit
    4: from Globals import DTMLFile
    5: import urllib
    6: import re
    7: import string
    8: from AccessControl import getSecurityManager
    9: 
   10: class ZSQLExtendFolder(Persistent, Implicit, Folder):
   11:     """Folder"""
   12:     meta_type="ZSQLExtendFolder"
   13:     
   14:     def ZSQLInlineSearch(self,**argv):
   15:         """inlinesearch"""
   16:         qs=[]
   17:         
   18:             
   19:         for a in argv.keys():
   20:             qs.append(a+"="+urllib.quote(str(argv[a])))
   21: 
   22:         return self.parseQueryString(string.join(qs,","),"_")
   23:     
   24:     def ZSQLAdd(self):
   25:         """Neuer Eintrag"""
   26:         qs=self.REQUEST['QUERY_STRING']
   27:         addList={}
   28:         for q in qs.split("&"):
   29:             name=re.sub("r'+'"," ",q.split("=")[0].lower())
   30:             value=q.split("=")[1]
   31: 	    value=re.sub(r'\+'," ",value)
   32: 	    value=urllib.unquote(value)	
   33:             if name=="-table":
   34:                 table=urllib.unquote(value)
   35:             elif name=="-format":
   36:                 format=urllib.unquote(value)
   37:             elif (not name[0]=="-") and (not len(value)==0):
   38:                 addList[urllib.unquote(name)]=urllib.unquote(value)
   39: 
   40:         keyList=[]
   41:         valueList=[]
   42:         for x in addList.keys():
   43:             keyList.append("\""+x+"\"")
   44:             valueList.append("\'"+addList[x]+"\'")
   45: 
   46:         keyString=string.join(keyList,",")
   47:         valueString=string.join(valueList,",")
   48:         
   49:         queryString="INSERT INTO %s (%s) VALUES (%s)"%(table,keyString,valueString)
   50:         self.search(var=queryString)
   51:         return self.REQUEST.RESPONSE.redirect(format)
   52:         
   53:     def ZSQLChange(self):
   54:         """Ändern von Einträgen"""
   55:         qs=self.REQUEST['QUERY_STRING']
   56:         #print "CHANGE QS",self.REQUEST
   57:         #return self.REQUEST
   58:         changeList=[]
   59:         for q in qs.split("&"):
   60:             name=urllib.unquote(re.sub("r'+'"," ",q.split("=")[0].lower()))
   61:             value=q.split("=")[1]
   62:             value=re.sub(r'\+'," ",value)
   63: 	    value=urllib.unquote(value)
   64: 	    if name=="-table":
   65:                 table=urllib.unquote(value)
   66:             elif name=="-identify":
   67:                 identify=urllib.unquote(value)
   68:                 identify=identify.split("=")[0]+"=\'"+identify.split("=")[1]+"\'"
   69:             elif name=="-format":
   70:                 format=urllib.unquote(value)
   71:             elif (not name[0]=="-") and (not len(value)==0):
   72:                 changeList.append("\""+name+"\"=\'"+urllib.unquote(value)+"\'")
   73:         changeString=string.join(changeList,",")
   74:         queryString="UPDATE %s SET %s WHERE %s"%(table,changeString,identify)
   75:         self.search(var=queryString)
   76:         return self.REQUEST.RESPONSE.redirect(format)
   77:     
   78:     def ZSQLFind(self,qs="",select="*"):
   79:         """Find"""
   80: 
   81: 
   82:         if qs=="":
   83:            if self.REQUEST['QUERY_STRING']:
   84:                qs=self.REQUEST['QUERY_STRING']
   85:                qs=string.join(qs.split("&"),",")
   86:            else:
   87:                qs=self.REQUEST.SESSION['query']
   88:         else:
   89:             qs=string.join(qs.split("&"),",")
   90:         return self.parseQueryString(qs,"-",select=select,storemax="yes")
   91: 
   92:     def ZSQLFoundCount(self,founds):
   93:         try:
   94:             return len(founds)
   95:         except:
   96:             return 0
   97: 
   98:     def parseQueryString(self,qs,iCT,storemax="no",select=None):
   99:         """analysierren den QueryString"""
  100:         lop="AND" # standardsuche mit and
  101:         max="ALL" #standard alle auswählen
  102:         whereList=[]
  103:         sort=""
  104:         op="bw"
  105: 
  106:         if not select:
  107:             select="*"
  108:         
  109:         for q in qs.split(","):
  110:             try:
  111: 
  112:                 name=re.sub("r'+'"," ",q.split("=")[0].lower())
  113:                 value=urllib.unquote(q.split("=")[1])
  114: 
  115:                 if name==iCT+"lop":
  116:                     lop=value
  117:                 elif name==iCT+"table":
  118:                     table=value
  119:                 elif name==iCT+"select":
  120:                     select=value
  121:                 elif name==iCT+"max":
  122:                     max=str(value)
  123: 
  124:                 elif name==iCT+"join":
  125:                     whereList.append(value)
  126:                 elif name==iCT+"sort":
  127:                     sort="ORDER BY "+value
  128:                 elif name==iCT+"token":
  129:                     self.REQUEST.SESSION['token']=value
  130: 
  131:                 elif name==iCT+"op":
  132:                     op=value
  133: 
  134:                 elif (not name[0]==iCT) and (not len(value)==0):
  135:                     if op=="ct":
  136:                         whereList.append(name+"~\'.*"+value+".*\'")
  137:                     elif op=="gt":
  138:                         whereList.append(name+">\'"+value+"\'")
  139:                     elif op=="lt":
  140:                         whereList.append(name+"<\'"+value+"\'")
  141:                     elif op=="eq":
  142:                         whereList.append(name+"=\'"+value+"\'")
  143:                     elif op=="bw":
  144:                         whereList.append(name+"~\'"+value+".*\'")
  145:                     elif op=="ew":
  146:                         whereList.append(name+"~\'.*"+value+"\'")
  147:                     op="ct"
  148:             except:
  149:                 print "END"        
  150:         if len(whereList)>0:
  151:             where="WHERE "+string.join(whereList," "+lop+" ")
  152:         else:
  153:             where=""
  154:         #print "QE",table
  155:         
  156:         query="SELECT %s FROM %s %s %s"%(select,table,where,sort)
  157: 
  158:         return self.search(var=query)
  159:     
  160:     def ZSQLSearch(self):
  161:         """To be done"""
  162:         rq=self.REQUEST['QUERY_STRING']
  163:         querys=rq.split("&")
  164:         
  165: 
  166:         for querytemp in querys:
  167:             query=querytemp.split("=")
  168:             try:
  169:                 if query[0].lower()=="-format":
  170:                     formatfile=query[1]
  171:             except:
  172:                 """nothing"""
  173:         #print formatfile        
  174:         self.REQUEST.SESSION['query']=string.join(self.REQUEST['QUERY_STRING'].split("&"),",")
  175:         return self.REQUEST.RESPONSE.redirect(urllib.unquote(formatfile))
  176: 
  177:     
  178:     def ZSQLint(self,string):
  179:         try:
  180: 
  181:             return(int(string))
  182:         except:
  183:             return 0
  184:     def prevLink(self,html):
  185:         """prev link"""
  186:         if self.REQUEST['QUERY_STRING']=="":
  187:             qs=self.REQUEST.SESSION['query']
  188:         else:
  189:             qs=self.REQUEST['QUERY_STRING']
  190:         max=re.search(r'max\=(.*)\,',qs.lower())
  191:         offset=re.search(r'offset\=(.*)\,',qs.lower())
  192:         if not offset:
  193:             offsetnew=0
  194:         else:
  195:             offsetnew=int(offset)-max
  196:             if offsetnew<0:
  197:                 offsetnew=0
  198:         queries=string.split(qs,",")
  199:         newquery=[]
  200:         if offset:
  201:             for query in queries:
  202:                 if query.split("=")[0].lower()=="offset":
  203:                     query="-offset=%i"%offsetnew
  204:                 newquery.append(query)
  205:                 newquerystring=string.join(newquery,"&")
  206:         else:
  207:             queries.append("-offset=%i"%offsetnew)
  208:             newquerystring=string.join(queries,"&")
  209:         return "<a href='%s'>%s</a>"%(self.REQUEST['URL0']+"?"+newquerystring,html)
  210:         
  211:     def nextLink(self,html):
  212:         """prev link"""
  213:         if self.REQUEST['QUERY_STRING']=="":
  214:             qs=self.REQUEST.SESSION['query']
  215:         else:
  216:             qs=self.REQUEST['QUERY_STRING']
  217:         max=re.search(r'max\=(.*)\,',qs.lower())
  218:     
  219:         offset=re.search(r'offset\=(.*)\,',qs.lower())
  220:         if not offset:
  221:             offsetnew=1
  222:         else:
  223:             offsetnew=int(offset)+int(max)
  224:             if offsetnew<0:
  225:                 offsetnew=0
  226:         queries=string.split(qs,",")
  227:         newquery=[]
  228:         if offset:
  229:             for query in queries:
  230: 
  231:                 if query.split("=")[0].lower()=="-offset":
  232:                     query="-offset=%i"%offsetnew
  233:                 newquery.append(query)
  234:                 newquerystring=string.join(newquery,"&")
  235:         else:
  236:             queries.append("-offset=%i"%offsetnew)
  237:             newquerystring=string.join(queries,"&")
  238:         
  239:         return "<a href='%s'>%s</a>"%(self.REQUEST['URL0']+"?"+newquerystring,html)
  240:         
  241:     def ZSQLrangeStart(self):
  242:         if self.REQUEST['QUERY_STRING']=="":
  243:             qs=self.REQUEST.SESSION['query']
  244:         else:
  245:             qs=self.REQUEST['QUERY_STRING']
  246:         offset=re.search(r'offset\=(.*)\,',qs.lower())
  247:         if not offset:
  248:             offset=1
  249:         return offset
  250: #    def search(self,**argv):
  251: #        """to be done"""
  252: 
  253: 
  254: 
  255: manage_addZSQLExtendFolderForm=DTMLFile('ZSQLExtendFolderAdd', globals())
  256: 
  257: def manage_addZSQLExtendFolder(self, id, title='',
  258:                      createPublic=0,
  259:                      createUserF=0,
  260:                      REQUEST=None):
  261:     """Add a new Folder object with id *id*.
  262: 
  263:     If the 'createPublic' and 'createUserF' parameters are set to any true
  264:     value, an 'index_html' and a 'UserFolder' objects are created respectively
  265:     in the new folder.
  266:     """
  267:     
  268:     
  269:     ob=ZSQLExtendFolder()
  270:     ob.id=str(id)
  271:     ob.title=title
  272:     self._setObject(id, ob)
  273:     ob=self._getOb(id)
  274: 
  275:     checkPermission=getSecurityManager().checkPermission
  276: 
  277:     if createUserF:
  278:         if not checkPermission('Add User Folders', ob):
  279:             raise Unauthorized, (
  280:                   'You are not authorized to add User Folders.'
  281:                   )
  282:         ob.manage_addUserFolder()
  283: 
  284:     if createPublic:
  285:         if not checkPermission('Add Page Templates', ob):
  286:             raise Unauthorized, (
  287:                   'You are not authorized to add Page Templates.'
  288:                   )
  289:         ob.manage_addProduct['PageTemplates'].manage_addPageTemplate(
  290:             id='index_html', title='')
  291: 
  292:     if REQUEST is not None:
  293:         return self.manage_main(self, REQUEST, update_menu=1)
  294: 
  295:     

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