Annotation of ZSQLExtend/ZSQLExtend.py, revision 1.15
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
1.5 dwinter 10: import os.path
1.15 ! dwinter 11: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
1.1 dwinter 12:
1.2 dwinter 13: def quoteString(name):
14: #return re.sub(r'([\(\)\?])',"\\\1",name)
15: #return "Euklid"
16: return name
17:
1.15 ! dwinter 18:
! 19:
1.1 dwinter 20: class ZSQLExtendFolder(Persistent, Implicit, Folder):
21: """Folder"""
22: meta_type="ZSQLExtendFolder"
1.9 dwinter 23:
1.15 ! dwinter 24:
1.14 dwinter 25: def formatAscii(self,str,url=None):
26: """ersetze ascii umbrueche durch <br>"""
27: #url=None
28: if url:
29:
30: retStr=""
31: words=str.split("\n")
32:
33: for word in words:
34: strUrl=url%word
35: #print "str",strUrl
36: retStr+="""<a href="%s">%s</a><br/>"""%(strUrl,word)
37: str=retStr
38: if str:
39: return re.sub(r"[\n]","<br/>",str)
40: else:
41: return ""
42:
1.12 dwinter 43: def getSAttribute(self,obj,atribute,pref=''):
44: """get Attribute or emptystring"""
45:
1.13 dwinter 46: #print "obj",obj
1.12 dwinter 47: try:
48: return pref+getattr(obj,atribute)
49: except:
50: return ""
51:
52: def getS(self,str):
53: """make none to empty string"""
54: if str:
55: return str
56: else:
57: return ""
58:
1.9 dwinter 59: def actualPath(self,url=None):
60: """path"""
1.10 dwinter 61:
62: if self.REQUEST['HTTP_X_FORWARDED_SERVER']=='':
63: host=self.REQUEST['HTTP_HOST']
64: else:
65: host=self.REQUEST['HTTP_X_FORWARDED_SERVER']
1.9 dwinter 66: if not url:
1.10 dwinter 67: return "http://"+host+self.REQUEST['PATH_TRANSLATED']
1.9 dwinter 68: else:
69: temp=self.REQUEST[url].split("/")
1.10 dwinter 70: temp[2]=host
1.9 dwinter 71: return string.join(temp,"/")
72:
73: def getRequest(self):
74: """request"""
75: return self.REQUEST
1.5 dwinter 76:
77: def lowerEnd(self,path):
78: """oinly for demo"""
79: return os.path.splitext(path)[0]+".jpg"
80:
81: def ZSQLisEmpty(self,field):
82: """Teste ob Treffer leer"""
1.7 dwinter 83: #print "field",field
1.5 dwinter 84: if not field:
85: return 1
86: if field=="":
87: return 1
88: return 0
89:
1.6 dwinter 90: def ZSQLsearchOptions(self,fieldname=""):
1.5 dwinter 91: """return HTML Fragment with search options"""
1.6 dwinter 92:
93: ret="""<select name="-op_%s">
1.5 dwinter 94: <option value="bw">begins with</option> <!-- begins with / beginnt mit, "Wort*" -->
95: <option value="ew">ends with</option>
1.7 dwinter 96: <option value="ct" selected>contains</option> <!-- contains / enthaellt, "Wort" -->
1.5 dwinter 97: <option value="eq">equals</option> <!-- equals / ist, =Wort -->
1.6 dwinter 98: </select>"""%fieldname
1.5 dwinter 99: return ret
100:
101: def ZSQLInlineSearch(self,storename=None,**argv):
1.1 dwinter 102: """inlinesearch"""
103: qs=[]
1.5 dwinter 104: if storename:
105: """store"""
106: else:
107: storename="foundCount"
108:
1.2 dwinter 109:
110:
1.5 dwinter 111: #print "INLINE:",argv
1.1 dwinter 112: for a in argv.keys():
113: qs.append(a+"="+urllib.quote(str(argv[a])))
1.9 dwinter 114: #return []
1.5 dwinter 115: return self.parseQueryString(string.join(qs,","),"_",storename=storename)
1.1 dwinter 116:
1.5 dwinter 117: def ZSQLInlineSearch2(self,query):
118: """inlinesearch"""
119: qs=[]
120:
121:
122:
123: #print "INLINE:",query
124:
125: return self.search(var=query)
1.1 dwinter 126:
127: def ZSQLAdd(self):
128: """Neuer Eintrag"""
129: qs=self.REQUEST['QUERY_STRING']
130: addList={}
131: for q in qs.split("&"):
132: name=re.sub("r'+'"," ",q.split("=")[0].lower())
133: value=q.split("=")[1]
134: value=re.sub(r'\+'," ",value)
135: value=urllib.unquote(value)
136: if name=="-table":
137: table=urllib.unquote(value)
138: elif name=="-format":
139: format=urllib.unquote(value)
140: elif (not name[0]=="-") and (not len(value)==0):
141: addList[urllib.unquote(name)]=urllib.unquote(value)
142:
143: keyList=[]
144: valueList=[]
145: for x in addList.keys():
146: keyList.append("\""+x+"\"")
1.3 dwinter 147: valueList.append(libpq.PgQuoteString(addList[x]))
1.1 dwinter 148:
149: keyString=string.join(keyList,",")
150: valueString=string.join(valueList,",")
151:
152: queryString="INSERT INTO %s (%s) VALUES (%s)"%(table,keyString,valueString)
153: self.search(var=queryString)
154: return self.REQUEST.RESPONSE.redirect(format)
155:
1.4 dwinter 156: def ZSQLChange(self,**argv):
157: """Ändern von Einträgen"""
158: #qs=self.REQUEST['QUERY_STRING']
159: # very bad hack
160: qs_temp=[]
161:
162: for a in self.REQUEST.form.keys():
163: qs_temp.append(a+"="+urllib.quote(str(self.REQUEST.form[a])))
164:
165: qs=string.join(qs_temp,"&")
166:
167:
168: #print "CHANGE QS",self.REQUEST
169: #return self.REQUEST
170: changeList=[]
171: for q in qs.split("&"):
172: name=urllib.unquote(re.sub("r'+'"," ",q.split("=")[0].lower()))
173: value=q.split("=")[1]
174: value=re.sub(r'\+'," ",value)
175: value=urllib.unquote(value)
176: if name=="-table":
177: table=urllib.unquote(value)
178: elif name=="-identify":
179: identify=urllib.unquote(value)
180: identify=identify.split("=")[0]+"="+libpq.PgQuoteString(identify.split("=")[1])
181: elif name=="-format":
182: format=urllib.unquote(value)
183: elif (not name[0]=="-") and (not len(value)==0):
184: changeList.append("\""+name+"\"="+libpq.PgQuoteString(urllib.unquote(value)))
185: changeString=string.join(changeList,",")
186: queryString="UPDATE %s SET %s WHERE %s"%(table,changeString,identify)
187: self.search(var=queryString)
188: return self.REQUEST.RESPONSE.redirect(format)
189:
190: def ZSQLChange_old(self):
1.1 dwinter 191: """Ändern von Einträgen"""
192: qs=self.REQUEST['QUERY_STRING']
193: #print "CHANGE QS",self.REQUEST
194: #return self.REQUEST
195: changeList=[]
196: for q in qs.split("&"):
197: name=urllib.unquote(re.sub("r'+'"," ",q.split("=")[0].lower()))
198: value=q.split("=")[1]
199: value=re.sub(r'\+'," ",value)
200: value=urllib.unquote(value)
201: if name=="-table":
202: table=urllib.unquote(value)
203: elif name=="-identify":
204: identify=urllib.unquote(value)
1.3 dwinter 205: identify=identify.split("=")[0]+"="+libpq.PgQuoteString(identify.split("=")[1])
1.1 dwinter 206: elif name=="-format":
207: format=urllib.unquote(value)
208: elif (not name[0]=="-") and (not len(value)==0):
1.3 dwinter 209: changeList.append("\""+name+"\"="+libpq.PgQuoteString(urllib.unquote(value)))
1.1 dwinter 210: changeString=string.join(changeList,",")
211: queryString="UPDATE %s SET %s WHERE %s"%(table,changeString,identify)
212: self.search(var=queryString)
213: return self.REQUEST.RESPONSE.redirect(format)
214:
1.10 dwinter 215: def ZSQLFind(self,qs="",select="oid,*",storename=None):
1.1 dwinter 216: """Find"""
217:
218:
219: if qs=="":
220: if self.REQUEST['QUERY_STRING']:
221: qs=self.REQUEST['QUERY_STRING']
1.5 dwinter 222:
223:
1.1 dwinter 224: qs=string.join(qs.split("&"),",")
225: else:
1.5 dwinter 226:
1.1 dwinter 227: qs=self.REQUEST.SESSION['query']
228: else:
1.13 dwinter 229: self.REQUEST['QUERY_STRING']=qs
1.1 dwinter 230: qs=string.join(qs.split("&"),",")
1.13 dwinter 231:
1.1 dwinter 232:
1.5 dwinter 233: qs=re.sub("\\+"," ",qs)# Austauschen da Leerzeichen bei http-get durch + ersetzt wird, generell sollte alles auf post umgeschrieben werden. vom search formular.
1.13 dwinter 234:
1.5 dwinter 235: if storename:
236: """store"""
237: else:
238: storename="foundCount"
1.13 dwinter 239: #print "QS",qs
1.5 dwinter 240: ret=self.parseQueryString(qs,"-",select=select,storemax="yes",storename=storename)
241: #print self.REQUEST.SESSION["foundCount"]
242:
243: return ret
244:
245: def ZSQLFoundCountLen(self,var):
246: return len(var)
247:
248: def ZSQLFoundCount(self,qs="",select="*",storename=None):
249:
250: ## if qs=="":
251:
252: ## if self.REQUEST['QUERY_STRING']:
253:
254: ## qs=self.REQUEST['QUERY_STRING']
255: ## qs=string.join(qs.split("&"),",")
256: ## else:
257:
258: ## qs=self.REQUEST.SESSION['query']
259: ## else:
260: ## qs=string.join(qs.split("&"),",")
261:
262:
263: ## temp= self.parseQueryString(qs,"-",select=select,storemax="yes",nostore="yes")
264: if storename:
265: """store"""
266: else:
267: storename="foundCount"
268:
269: return self.REQUEST.SESSION[storename]['count']
270:
271: def ZSQLRangeStart(self,storename=None):
272:
273: if storename:
274: """store"""
275: else:
276: storename="foundCount"
277:
1.15 ! dwinter 278: return self.REQUEST.SESSION[storename]['rangeStart']+1
1.5 dwinter 279:
280: def ZSQLRangeSize(self,storename=None):
281:
282: if storename:
283: """store"""
284: else:
285: storename="foundCount"
286:
287: return self.REQUEST.SESSION[storename]['rangeSize']
1.1 dwinter 288:
1.5 dwinter 289: def ZSQLRangeEnd(self,storename=None):
290:
291: if storename:
292: """store"""
293: else:
294: storename="foundCount"
295:
296: return self.REQUEST.SESSION[storename]['rangeEnd']
297:
298: def parseQueryString(self,qs,iCT,storemax="no",select=None,nostore=None,storename=None):
299: """analysieren den QueryString"""
300: #print "NO",nostore
1.1 dwinter 301: lop="AND" # standardsuche mit and
302: max="ALL" #standard alle auswählen
1.11 dwinter 303: maxstr=""
1.1 dwinter 304: whereList=[]
305: sort=""
306: op="bw"
1.2 dwinter 307: opfields={}
1.5 dwinter 308: skip=""
309: rangeStart=0
1.11 dwinter 310: limit=0
311: searchFields={}
1.2 dwinter 312:
1.1 dwinter 313: if not select:
1.10 dwinter 314: select="oid,*"
1.5 dwinter 315: #print "Q",nostore,qs
1.2 dwinter 316: #check for op in the case of inline search
1.6 dwinter 317:
318: splitted=qs.split(",")
319:
320:
321: for q in splitted:
1.5 dwinter 322:
1.2 dwinter 323: name=re.sub("r'+'"," ",q.split("=")[0].lower())
1.14 dwinter 324: try:
325: value=urllib.unquote(q.split("=",1)[1])
326: except:
327: value=""
1.2 dwinter 328: if name[0:3]==iCT+"op":
329: op=value
1.14 dwinter 330:
1.2 dwinter 331: field=name[4:]
332: opfields[field]=op
1.14 dwinter 333: #print "HI",op,field
1.6 dwinter 334: #print opfieldsa
1.2 dwinter 335: #now analyse the querystring
1.1 dwinter 336: for q in qs.split(","):
1.5 dwinter 337:
338:
339: #try:
1.1 dwinter 340:
1.5 dwinter 341: name=re.sub("r'+'"," ",q.split("=")[0].lower())
1.14 dwinter 342: try:
343: value=urllib.unquote(q.split("=",1)[1])
344: except:
345: value=""
346:
1.5 dwinter 347: #value=libpq.PgQuoteString(value)
348:
349:
350: if name==iCT+"lop":
351: lop=value
352: elif name==iCT+"table":
353: table=value
354: elif name==iCT+"select":
355: select=value
356: elif name==iCT+"max":
1.11 dwinter 357: maxstr="LIMIT "+str(value)
1.5 dwinter 358: limit=str(value)
359: elif name==iCT+"skip":
360: skip="OFFSET "+str(value)
361: rangeStart=str(value)
362: elif name==iCT+"join":
363: whereList.append(value)
364: elif name==iCT+"sort":
365: sort="ORDER BY "+value
366: elif name==iCT+"token":
367: if not nostore=="yes":
1.1 dwinter 368: self.REQUEST.SESSION['token']=value
369:
1.5 dwinter 370: elif name==iCT+"op":
371: op=value
372:
373:
1.1 dwinter 374:
1.5 dwinter 375: elif (not name[0]==iCT) and (not len(value)==0):
1.6 dwinter 376:
377: #print "OP",op,name
1.5 dwinter 378: value=value.lower()
1.11 dwinter 379:
380: searchFields[name]=value
381:
1.5 dwinter 382: if opfields.has_key(name):
383: op=opfields[name]
1.6 dwinter 384: else:
385: op="ct"
386: name="LOWER("+name+")"
1.5 dwinter 387: if op=="ct":
388: whereList.append(name+" LIKE "+libpq.PgQuoteString("%"+value+"%"))
389: elif op=="gt":
390: whereList.append(name+">"+libpq.PgQuoteString(value))
391: elif op=="lt":
392: whereList.append(name+"<"+libpq.PgQuoteString(value))
393: elif op=="eq":
394: whereList.append(name+"="+libpq.PgQuoteString(value))
395: elif op=="bw":
396: whereList.append(name+" LIKE "+libpq.PgQuoteString(value+"%"))
397: elif op=="ew":
398: whereList.append(name+" LIKE "+libpq.PgQuoteString("%"+value))
1.6 dwinter 399: op="ct"
1.5 dwinter 400:
401: #except:
402: # print "END",value,name,Exception
1.1 dwinter 403: if len(whereList)>0:
404: where="WHERE "+string.join(whereList," "+lop+" ")
405: else:
406: where=""
407: #print "QE",table
408:
1.11 dwinter 409: query="SELECT %s FROM %s %s %s %s %s"%(select,table,where,sort,maxstr,skip)
1.13 dwinter 410:
1.5 dwinter 411: if not nostore=="yes":
412:
413: self.REQUEST.SESSION['qs']=opfields
1.7 dwinter 414: #print "IAMHERE again:", query
1.5 dwinter 415:
416: if storename:
1.7 dwinter 417: query2="SELECT count(*) FROM %s %s"%(table,where)
1.5 dwinter 418: #print "storing",query2
419: #print "QUERYSTRING:",self.REQUEST.SESSION[storename]['queryString2']
420: if not self.REQUEST.SESSION.has_key(storename):
421: self.REQUEST.SESSION[storename]={}
422: if self.REQUEST.SESSION[storename].has_key('queryString2'):
423: #print "HI",storename
424: if not self.REQUEST.SESSION[storename]['queryString2']==query2:
425: #print "HOOOOO",storename
426: self.REQUEST.SESSION[storename]['queryString2']=query2
427: self.REQUEST.SESSION[storename]['count']=self.search(var=query2)[0].count
428: #print "QUERY",query2,"::::",self.REQUEST.SESSION[storename]['queryString2']
429:
430: else:
431: self.REQUEST.SESSION[storename]['queryString2']=query2
432: self.REQUEST.SESSION[storename]['count']=self.search(var=query2)[0].count
433: #print "QUERYNEW",self.REQUEST.SESSION[storename]['queryString2']
434:
435:
436: self.REQUEST.SESSION[storename]['rangeStart']=rangeStart
437: if limit=="all":
438: self.REQUEST.SESSION[storename]['rangeEnd']=self.REQUEST.SESSION[storename]['count']
439: else:
440: self.REQUEST.SESSION[storename]['rangeEnd']=int(rangeStart)+int(limit)
441: self.REQUEST.SESSION[storename]['rangeSize']=limit
1.11 dwinter 442: self.REQUEST.SESSION[storename]['searchFields']=searchFields
1.5 dwinter 443:
1.13 dwinter 444: #print "Q",query
1.1 dwinter 445: return self.search(var=query)
1.11 dwinter 446:
1.1 dwinter 447:
448: def ZSQLSearch(self):
449: """To be done"""
450: rq=self.REQUEST['QUERY_STRING']
451: querys=rq.split("&")
452:
453:
454: for querytemp in querys:
455: query=querytemp.split("=")
456: try:
457: if query[0].lower()=="-format":
458: formatfile=query[1]
459: except:
460: """nothing"""
461: #print formatfile
462: self.REQUEST.SESSION['query']=string.join(self.REQUEST['QUERY_STRING'].split("&"),",")
463: return self.REQUEST.RESPONSE.redirect(urllib.unquote(formatfile))
464:
465:
466: def ZSQLint(self,string):
467: try:
468:
469: return(int(string))
470: except:
471: return 0
1.5 dwinter 472:
1.11 dwinter 473: def getZSQLSearchFieldsList(self,storename="foundCount"):
474: """get searchfieldList"""
1.13 dwinter 475: #print self.REQUEST.SESSION[storename]['searchFields'].keys()
1.11 dwinter 476: return self.REQUEST.SESSION[storename]['searchFields'].keys()
477:
478: def getZSQLSearchFields(self,storename="foundCount"):
479: """get searchfield"""
1.13 dwinter 480: #print "SF",self.REQUEST.SESSION[storename]['searchFields']
1.11 dwinter 481: return self.REQUEST.SESSION[storename]['searchFields']
482:
483:
1.5 dwinter 484: def nextLink(self,html,storename="foundCount"):
485: """nextLink"""
486: try:
487: limit=self.REQUEST.SESSION[storename]['rangeSize']
488: newRangeStart=int(self.REQUEST.SESSION[storename]['rangeStart'])+int(limit)
489: except:
490: limit=0
491: newRangeStart=0
492:
493: if newRangeStart>self.REQUEST.SESSION[storename]['count']:
494: newRangeStart=self.REQUEST.SESSION[storename]['count']-10
495:
496:
497: #create new query string
498:
499: if self.REQUEST['QUERY_STRING']=="":
500: qs=self.REQUEST.SESSION['query']
501:
502: queries=string.split(qs,",")
503:
504:
505: else:
506: qs=self.REQUEST['QUERY_STRING']
507: queries=string.split(qs,"&")
508:
509:
510:
511: newquery=[]
512:
513: skipFound=0
514:
515: for query in queries:
516: #print query.split("=")[0]
517: if query[0]=="_" : query[0]="-"
518:
519: if query.split("=")[0].lower()=="-skip":
520: skipFound=1
521: query="-skip=%i"%newRangeStart
522: newquery.append(query)
523:
524: if skipFound==0 :
525: query="-skip=%i"%newRangeStart
526: newquery.append(query)
527:
528: newquerystring=string.join(newquery,"&")
1.9 dwinter 529:
530: return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
1.5 dwinter 531:
532:
533: def prevLink(self,html,storename="foundCount"):
534: """prev link"""
535: try:
536: limit=self.REQUEST.SESSION[storename]['rangeSize']
537: newRangeStart=int(self.REQUEST.SESSION[storename]['rangeStart'])-int(limit)
538: except:
539: limit=0
540: newRangeStart=0
541:
542: #print "limit",limit,newRangeStart,int(self.REQUEST.SESSION[storename]['rangeStart'])
543:
544: if newRangeStart<0:
545: newRangeStart=0
546:
547: #create new query string
548:
549: if self.REQUEST['QUERY_STRING']=="":
550: qs=self.REQUEST.SESSION['query']
551: #qs=re.sub(r'_','-',qs) #aendern für query
552: queries=string.split(qs,",")
553:
554:
555: else:
556: qs=self.REQUEST['QUERY_STRING']
557: queries=string.split(qs,"&")
558:
559:
560:
561: newquery=[]
562:
563: skipFound=0
564:
565: for query in queries:
566: #print query.split("=")[0]
567:
568: if query[0]=="_" : query[0]="-"
569:
570: if query.split("=")[0].lower()=="-skip":
571: #print"HI"
572: query="-skip=%i"%newRangeStart
573: skipFound=1
574: newquery.append(query)
575:
576: if skipFound==0 :
577: query="-skip=%i"%newRangeStart
578: newquery.append(query)
579:
580: newquerystring=string.join(newquery,"&")
1.9 dwinter 581:
582: return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
583:
584:
1.5 dwinter 585:
586: def prevLink_old(self,html):
1.1 dwinter 587: """prev link"""
588: if self.REQUEST['QUERY_STRING']=="":
589: qs=self.REQUEST.SESSION['query']
590: else:
591: qs=self.REQUEST['QUERY_STRING']
592: max=re.search(r'max\=(.*)\,',qs.lower())
593: offset=re.search(r'offset\=(.*)\,',qs.lower())
594: if not offset:
595: offsetnew=0
596: else:
597: offsetnew=int(offset)-max
598: if offsetnew<0:
599: offsetnew=0
600: queries=string.split(qs,",")
601: newquery=[]
602: if offset:
603: for query in queries:
604: if query.split("=")[0].lower()=="offset":
605: query="-offset=%i"%offsetnew
606: newquery.append(query)
607: newquerystring=string.join(newquery,"&")
608: else:
609: queries.append("-offset=%i"%offsetnew)
610: newquerystring=string.join(queries,"&")
1.9 dwinter 611: return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
1.1 dwinter 612:
1.5 dwinter 613: def nextLink_old(self,html):
1.1 dwinter 614: """prev link"""
615: if self.REQUEST['QUERY_STRING']=="":
616: qs=self.REQUEST.SESSION['query']
617: else:
618: qs=self.REQUEST['QUERY_STRING']
619: max=re.search(r'max\=(.*)\,',qs.lower())
620:
621: offset=re.search(r'offset\=(.*)\,',qs.lower())
622: if not offset:
623: offsetnew=1
624: else:
625: offsetnew=int(offset)+int(max)
626: if offsetnew<0:
627: offsetnew=0
628: queries=string.split(qs,",")
629: newquery=[]
630: if offset:
631: for query in queries:
632:
633: if query.split("=")[0].lower()=="-offset":
634: query="-offset=%i"%offsetnew
635: newquery.append(query)
636: newquerystring=string.join(newquery,"&")
637: else:
638: queries.append("-offset=%i"%offsetnew)
639: newquerystring=string.join(queries,"&")
640:
1.9 dwinter 641: return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
1.1 dwinter 642:
1.5 dwinter 643:
1.1 dwinter 644: manage_addZSQLExtendFolderForm=DTMLFile('ZSQLExtendFolderAdd', globals())
645:
646: def manage_addZSQLExtendFolder(self, id, title='',
647: createPublic=0,
648: createUserF=0,
649: REQUEST=None):
650: """Add a new Folder object with id *id*.
651:
652: If the 'createPublic' and 'createUserF' parameters are set to any true
653: value, an 'index_html' and a 'UserFolder' objects are created respectively
654: in the new folder.
655: """
656:
657:
658: ob=ZSQLExtendFolder()
659: ob.id=str(id)
660: ob.title=title
661: self._setObject(id, ob)
662: ob=self._getOb(id)
663:
664: checkPermission=getSecurityManager().checkPermission
665:
666: if createUserF:
667: if not checkPermission('Add User Folders', ob):
668: raise Unauthorized, (
669: 'You are not authorized to add User Folders.'
670: )
671: ob.manage_addUserFolder()
672:
673: if createPublic:
674: if not checkPermission('Add Page Templates', ob):
675: raise Unauthorized, (
676: 'You are not authorized to add Page Templates.'
677: )
678: ob.manage_addProduct['PageTemplates'].manage_addPageTemplate(
679: id='index_html', title='')
680:
681: if REQUEST is not None:
682: return self.manage_main(self, REQUEST, update_menu=1)
1.15 ! dwinter 683:
! 684:
! 685:
! 686: class ZSQLBibliography(ZSQLExtendFolder):
! 687: """Bibliography"""
! 688: meta_type="ZSQLBibliography"
! 689: def getLabel(self):
! 690: try:
! 691: return self.label
! 692: except:
! 693: return ""
! 694:
! 695: def getDescription(self):
! 696: try:
! 697: return self.description
! 698: except:
! 699: return ""
! 700:
! 701: def changeZSQLBibliographyForm(self):
! 702: """change folder config"""
! 703: pt=PageTemplateFile('Products/ZSQLExtend/zpt/changeZSQLBibliographyForm.zpt').__of__(self)
! 704: return pt()
! 705:
! 706:
! 707: def content_html(self):
! 708: """template fuer content"""
! 709:
! 710: try:
! 711: obj=getattr(self,"ZSQLBibliography_template")
! 712: return obj()
! 713: except:
! 714: pt=PageTemplateFile('Products/ZSQLExtend/zpt/ZSQLBibliography_template_standard.zpt').__of__(self)
! 715: pt.content_type="text/html"
! 716: return pt()
! 717:
! 718: def changeZSQLBibliography(self,tableName,label,description,REQUEST=None):
! 719: """change it"""
! 720: self.tableName=tableName
! 721: self.label=label
! 722: self.description=description
! 723:
! 724: if REQUEST is not None:
! 725: return self.manage_main(self, REQUEST)
! 726:
! 727: manage_options=ZSQLExtendFolder.manage_options+(
! 728: {'label':'Edit Biblio','action':'changeZSQLBibliographyForm'},
! 729: )
! 730:
! 731:
! 732: def getFieldLabel(self,fields,field):
! 733: """get labels"""
! 734: try:
! 735: ret =fields[0][field]
! 736: if ret == "":
! 737: return field
! 738: else:
! 739: return ret
! 740: except:
! 741: return field
! 742:
! 743: def getFieldValue(self,found,field):
! 744: """get value"""
! 745: try:
! 746: ret=getattr(found,field)
! 747: if ret == "":
! 748: return None
! 749: else:
! 750: return ret
! 751: except:
! 752: return None
! 753: def findLabelsFromMapping(self,referenceType):
! 754: """gib hash mit label -> generic zurueck"""
! 755: self.referencetypes=self.ZopeFind(self.standardMD)
! 756: bibdata={}
! 757: retdata={}
! 758: fieldlist=self.standardMD.fieldList
! 759:
! 760: for referenceTypeF in self.referencetypes:
! 761: print referenceType,referenceTypeF[1].title
! 762: if referenceTypeF[1].title == referenceType:
! 763: bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
! 764: bibdata['data']=referenceTypeF[1]
! 765: self.fields=bibdata[referenceType]
! 766: for field in fieldlist:
! 767: retdata[field]=referenceTypeF[1].getValue(field)[1]
! 768:
! 769: return retdata,fieldlist
! 770:
! 771:
! 772:
! 773: manage_addZSQLBibliographyForm=DTMLFile('ZSQLBibliographyAdd', globals())
! 774:
! 775: def manage_addZSQLBibliography(self, id, tableName,label,description,title='',
! 776: createPublic=0,
! 777: createUserF=0,
! 778: REQUEST=None):
! 779: """Add a new Folder object with id *id*.
! 780:
! 781: If the 'createPublic' and 'createUserF' parameters are set to any true
! 782: value, an 'index_html' and a 'UserFolder' objects are created respectively
! 783: in the new folder.
! 784: """
! 785:
! 786:
! 787: ob=ZSQLBibliography()
! 788: ob.id=str(id)
! 789: ob.title=title
! 790: self._setObject(id, ob)
! 791: ob=self._getOb(id)
! 792: setattr(ob,'tableName',tableName)
! 793: setattr(ob,'label',label)
! 794: setattr(ob,'description',description)
! 795:
! 796: checkPermission=getSecurityManager().checkPermission
! 797:
! 798: if createUserF:
! 799: if not checkPermission('Add User Folders', ob):
! 800: raise Unauthorized, (
! 801: 'You are not authorized to add User Folders.'
! 802: )
! 803: ob.manage_addUserFolder()
! 804:
! 805: if createPublic:
! 806: if not checkPermission('Add Page Templates', ob):
! 807: raise Unauthorized, (
! 808: 'You are not authorized to add Page Templates.'
! 809: )
! 810: ob.manage_addProduct['PageTemplates'].manage_addPageTemplate(
! 811: id='index_html', title='')
! 812:
! 813: if REQUEST is not None:
! 814: return self.manage_main(self, REQUEST, update_menu=1)
! 815:
! 816:
1.1 dwinter 817:
818:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>