Annotation of ZSQLExtend/ZSQLExtend.py, revision 1.1.1.1

1.1       dwinter     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>