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>