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