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