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