Annotation of ZSQLExtend/ZSQLExtend.py, revision 1.20
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
1.18 dwinter 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")):
1.20 ! dwinter 159: ret+="""<input name="%s" type="%s" value="%s" checked>%s"""%(fieldname,boxType,field.encode('utf-8'),field.encode('utf-8'))
1.18 dwinter 160: else:
1.20 ! dwinter 161: ret+="""<input name="%s" type="%s" value="%s">%s"""%(fieldname,boxType,field.encode('utf-8'),field.encode('utf-8'))
1.18 dwinter 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:
1.19 dwinter 171: ret+="""<option value="%s">%s</option>"""%(field.encode('utf-8'),field.encode('utf-8'))
1.18 dwinter 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:
1.19 dwinter 181: if start==' ':
182: start=''
1.18 dwinter 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:
1.5 dwinter 191:
192: def ZSQLInlineSearch(self,storename=None,**argv):
1.1 dwinter 193: """inlinesearch"""
194: qs=[]
1.5 dwinter 195: if storename:
196: """store"""
197: else:
198: storename="foundCount"
199:
1.2 dwinter 200:
201:
1.5 dwinter 202: #print "INLINE:",argv
1.1 dwinter 203: for a in argv.keys():
204: qs.append(a+"="+urllib.quote(str(argv[a])))
1.9 dwinter 205: #return []
1.5 dwinter 206: return self.parseQueryString(string.join(qs,","),"_",storename=storename)
1.1 dwinter 207:
1.5 dwinter 208: def ZSQLInlineSearch2(self,query):
209: """inlinesearch"""
210: qs=[]
211:
212:
213:
214: #print "INLINE:",query
215:
216: return self.search(var=query)
1.1 dwinter 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+"\"")
1.3 dwinter 238: valueList.append(libpq.PgQuoteString(addList[x]))
1.1 dwinter 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:
1.4 dwinter 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):
1.1 dwinter 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)
1.3 dwinter 296: identify=identify.split("=")[0]+"="+libpq.PgQuoteString(identify.split("=")[1])
1.1 dwinter 297: elif name=="-format":
298: format=urllib.unquote(value)
299: elif (not name[0]=="-") and (not len(value)==0):
1.3 dwinter 300: changeList.append("\""+name+"\"="+libpq.PgQuoteString(urllib.unquote(value)))
1.1 dwinter 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:
1.17 dwinter 306: def ZSQLFind(self,qs="",select="oid,*",storename=None,**argv):
1.1 dwinter 307: """Find"""
308:
309:
310: if qs=="":
311: if self.REQUEST['QUERY_STRING']:
312: qs=self.REQUEST['QUERY_STRING']
1.5 dwinter 313:
314:
1.1 dwinter 315: qs=string.join(qs.split("&"),",")
1.17 dwinter 316: for field in argv.keys():
317: qs+=",-%s=%s"%(field,argv[field])
1.18 dwinter 318: #print qs
1.1 dwinter 319: else:
1.5 dwinter 320:
1.1 dwinter 321: qs=self.REQUEST.SESSION['query']
322: else:
1.13 dwinter 323: self.REQUEST['QUERY_STRING']=qs
1.1 dwinter 324: qs=string.join(qs.split("&"),",")
1.13 dwinter 325:
1.1 dwinter 326:
1.5 dwinter 327: 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 328:
1.5 dwinter 329: if storename:
330: """store"""
331: else:
332: storename="foundCount"
1.13 dwinter 333: #print "QS",qs
1.5 dwinter 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:
1.18 dwinter 372: return int(self.REQUEST.SESSION[storename]['rangeStart'])+1
1.5 dwinter 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']
1.1 dwinter 382:
1.5 dwinter 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
1.1 dwinter 395: lop="AND" # standardsuche mit and
396: max="ALL" #standard alle auswählen
1.11 dwinter 397: maxstr=""
1.1 dwinter 398: whereList=[]
399: sort=""
400: op="bw"
1.2 dwinter 401: opfields={}
1.5 dwinter 402: skip=""
403: rangeStart=0
1.11 dwinter 404: limit=0
405: searchFields={}
1.2 dwinter 406:
1.1 dwinter 407: if not select:
1.10 dwinter 408: select="oid,*"
1.5 dwinter 409: #print "Q",nostore,qs
1.2 dwinter 410: #check for op in the case of inline search
1.6 dwinter 411:
412: splitted=qs.split(",")
413:
414:
415: for q in splitted:
1.5 dwinter 416:
1.2 dwinter 417: name=re.sub("r'+'"," ",q.split("=")[0].lower())
1.14 dwinter 418: try:
419: value=urllib.unquote(q.split("=",1)[1])
420: except:
421: value=""
1.16 dwinter 422: #print "Hi",name[0:3],q
1.2 dwinter 423: if name[0:3]==iCT+"op":
424: op=value
1.14 dwinter 425:
1.2 dwinter 426: field=name[4:]
427: opfields[field]=op
1.14 dwinter 428: #print "HI",op,field
1.6 dwinter 429: #print opfieldsa
1.2 dwinter 430: #now analyse the querystring
1.1 dwinter 431: for q in qs.split(","):
1.5 dwinter 432:
433:
434: #try:
1.1 dwinter 435:
1.5 dwinter 436: name=re.sub("r'+'"," ",q.split("=")[0].lower())
1.14 dwinter 437: try:
438: value=urllib.unquote(q.split("=",1)[1])
439: except:
440: value=""
441:
1.5 dwinter 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":
1.11 dwinter 452: maxstr="LIMIT "+str(value)
1.5 dwinter 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":
1.1 dwinter 463: self.REQUEST.SESSION['token']=value
464:
1.5 dwinter 465: elif name==iCT+"op":
466: op=value
467:
468:
1.1 dwinter 469:
1.5 dwinter 470: elif (not name[0]==iCT) and (not len(value)==0):
1.6 dwinter 471:
472: #print "OP",op,name
1.5 dwinter 473: value=value.lower()
1.11 dwinter 474:
475: searchFields[name]=value
476:
1.5 dwinter 477: if opfields.has_key(name):
478: op=opfields[name]
1.6 dwinter 479: else:
480: op="ct"
481: name="LOWER("+name+")"
1.5 dwinter 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))
1.6 dwinter 494: op="ct"
1.5 dwinter 495:
496: #except:
497: # print "END",value,name,Exception
1.1 dwinter 498: if len(whereList)>0:
499: where="WHERE "+string.join(whereList," "+lop+" ")
500: else:
501: where=""
502: #print "QE",table
503:
1.11 dwinter 504: query="SELECT %s FROM %s %s %s %s %s"%(select,table,where,sort,maxstr,skip)
1.13 dwinter 505:
1.5 dwinter 506: if not nostore=="yes":
507:
508: self.REQUEST.SESSION['qs']=opfields
1.7 dwinter 509: #print "IAMHERE again:", query
1.5 dwinter 510:
511: if storename:
1.7 dwinter 512: query2="SELECT count(*) FROM %s %s"%(table,where)
1.5 dwinter 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
1.11 dwinter 537: self.REQUEST.SESSION[storename]['searchFields']=searchFields
1.5 dwinter 538:
1.13 dwinter 539: #print "Q",query
1.16 dwinter 540: return self.ZSQLQuery(query)
541:
542: def ZSQLQuery(self,query):
543: """query"""
1.1 dwinter 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
1.5 dwinter 570:
1.11 dwinter 571: def getZSQLSearchFieldsList(self,storename="foundCount"):
572: """get searchfieldList"""
1.13 dwinter 573: #print self.REQUEST.SESSION[storename]['searchFields'].keys()
1.11 dwinter 574: return self.REQUEST.SESSION[storename]['searchFields'].keys()
575:
576: def getZSQLSearchFields(self,storename="foundCount"):
577: """get searchfield"""
1.13 dwinter 578: #print "SF",self.REQUEST.SESSION[storename]['searchFields']
1.11 dwinter 579: return self.REQUEST.SESSION[storename]['searchFields']
580:
581:
1.5 dwinter 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,"&")
1.9 dwinter 627:
628: return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
1.5 dwinter 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,"&")
1.9 dwinter 679:
680: return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
681:
682:
1.5 dwinter 683:
684: def prevLink_old(self,html):
1.1 dwinter 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,"&")
1.9 dwinter 709: return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
1.1 dwinter 710:
1.5 dwinter 711: def nextLink_old(self,html):
1.1 dwinter 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:
1.9 dwinter 739: return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
1.1 dwinter 740:
1.5 dwinter 741:
1.1 dwinter 742: manage_addZSQLExtendFolderForm=DTMLFile('ZSQLExtendFolderAdd', globals())
743:
1.16 dwinter 744: def manage_addZSQLExtendFolder(self, id, title='', label='', description='',
1.1 dwinter 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)
1.16 dwinter 761: setattr(ob,'label',label)
762: setattr(ob,'description',description)
763:
1.1 dwinter 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)
1.15 dwinter 783:
784:
785:
1.16 dwinter 786: class ZSQLBibliography(Folder,ZSQLExtendFolder):
1.15 dwinter 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:
1.16 dwinter 827: manage_options=Folder.manage_options+(
828: {'label':'Main Config','action':'changeZSQLBibliographyForm'},
1.15 dwinter 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
1.18 dwinter 853:
1.15 dwinter 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:
1.18 dwinter 862: #print referenceType,referenceTypeF[1].title
1.15 dwinter 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:
1.1 dwinter 918:
919:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>