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