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