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