Annotation of ZSQLExtend/ZSQLExtend.py, revision 1.22
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.22 ! dwinter 330: for field in argv.keys():
! 331: #print field
! 332: qs+=",-%s=%s"%(field,argv[field])
1.21 dwinter 333:
1.1 dwinter 334: else:
1.13 dwinter 335: self.REQUEST['QUERY_STRING']=qs
1.22 ! dwinter 336:
1.1 dwinter 337: qs=string.join(qs.split("&"),",")
1.13 dwinter 338:
1.21 dwinter 339:
340:
341: 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 342:
1.21 dwinter 343: qs=string.join(delEmpty(qs.split(",")),",")
1.13 dwinter 344:
1.5 dwinter 345: if storename:
346: """store"""
347: else:
348: storename="foundCount"
1.21 dwinter 349:
350:
351:
1.5 dwinter 352: ret=self.parseQueryString(qs,"-",select=select,storemax="yes",storename=storename)
353: #print self.REQUEST.SESSION["foundCount"]
354:
1.21 dwinter 355:
1.5 dwinter 356: return ret
357:
358: def ZSQLFoundCountLen(self,var):
359: return len(var)
360:
361: def ZSQLFoundCount(self,qs="",select="*",storename=None):
362:
363: ## if qs=="":
364:
365: ## if self.REQUEST['QUERY_STRING']:
366:
367: ## qs=self.REQUEST['QUERY_STRING']
368: ## qs=string.join(qs.split("&"),",")
369: ## else:
370:
371: ## qs=self.REQUEST.SESSION['query']
372: ## else:
373: ## qs=string.join(qs.split("&"),",")
374:
375:
376: ## temp= self.parseQueryString(qs,"-",select=select,storemax="yes",nostore="yes")
377: if storename:
378: """store"""
379: else:
380: storename="foundCount"
381:
382: return self.REQUEST.SESSION[storename]['count']
383:
384: def ZSQLRangeStart(self,storename=None):
385:
386: if storename:
387: """store"""
388: else:
389: storename="foundCount"
390:
1.18 dwinter 391: return int(self.REQUEST.SESSION[storename]['rangeStart'])+1
1.5 dwinter 392:
393: def ZSQLRangeSize(self,storename=None):
394:
395: if storename:
396: """store"""
397: else:
398: storename="foundCount"
399:
400: return self.REQUEST.SESSION[storename]['rangeSize']
1.1 dwinter 401:
1.5 dwinter 402: def ZSQLRangeEnd(self,storename=None):
403:
404: if storename:
405: """store"""
406: else:
407: storename="foundCount"
408:
409: return self.REQUEST.SESSION[storename]['rangeEnd']
410:
411: def parseQueryString(self,qs,iCT,storemax="no",select=None,nostore=None,storename=None):
412: """analysieren den QueryString"""
413: #print "NO",nostore
1.1 dwinter 414: lop="AND" # standardsuche mit and
415: max="ALL" #standard alle auswählen
1.11 dwinter 416: maxstr=""
1.1 dwinter 417: whereList=[]
418: sort=""
419: op="bw"
1.2 dwinter 420: opfields={}
1.5 dwinter 421: skip=""
422: rangeStart=0
1.11 dwinter 423: limit=0
424: searchFields={}
1.2 dwinter 425:
1.1 dwinter 426: if not select:
1.10 dwinter 427: select="oid,*"
1.5 dwinter 428: #print "Q",nostore,qs
1.2 dwinter 429: #check for op in the case of inline search
1.6 dwinter 430:
431: splitted=qs.split(",")
432:
433:
434: for q in splitted:
1.5 dwinter 435:
1.2 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=""
1.16 dwinter 441: #print "Hi",name[0:3],q
1.2 dwinter 442: if name[0:3]==iCT+"op":
443: op=value
1.14 dwinter 444:
1.2 dwinter 445: field=name[4:]
446: opfields[field]=op
1.14 dwinter 447: #print "HI",op,field
1.6 dwinter 448: #print opfieldsa
1.2 dwinter 449: #now analyse the querystring
1.1 dwinter 450: for q in qs.split(","):
1.5 dwinter 451:
452:
453: #try:
1.1 dwinter 454:
1.5 dwinter 455: name=re.sub("r'+'"," ",q.split("=")[0].lower())
1.14 dwinter 456: try:
457: value=urllib.unquote(q.split("=",1)[1])
458: except:
459: value=""
460:
1.5 dwinter 461: #value=libpq.PgQuoteString(value)
462:
463:
464: if name==iCT+"lop":
465: lop=value
466: elif name==iCT+"table":
467: table=value
468: elif name==iCT+"select":
469: select=value
470: elif name==iCT+"max":
1.11 dwinter 471: maxstr="LIMIT "+str(value)
1.5 dwinter 472: limit=str(value)
473: elif name==iCT+"skip":
474: skip="OFFSET "+str(value)
475: rangeStart=str(value)
476: elif name==iCT+"join":
477: whereList.append(value)
478: elif name==iCT+"sort":
479: sort="ORDER BY "+value
480: elif name==iCT+"token":
481: if not nostore=="yes":
1.1 dwinter 482: self.REQUEST.SESSION['token']=value
483:
1.5 dwinter 484: elif name==iCT+"op":
485: op=value
486:
487:
1.1 dwinter 488:
1.5 dwinter 489: elif (not name[0]==iCT) and (not len(value)==0):
1.6 dwinter 490:
491: #print "OP",op,name
1.5 dwinter 492: value=value.lower()
1.11 dwinter 493:
494: searchFields[name]=value
495:
1.5 dwinter 496: if opfields.has_key(name):
497: op=opfields[name]
1.6 dwinter 498: else:
499: op="ct"
500: name="LOWER("+name+")"
1.5 dwinter 501: if op=="ct":
502: whereList.append(name+" LIKE "+libpq.PgQuoteString("%"+value+"%"))
503: elif op=="gt":
504: whereList.append(name+">"+libpq.PgQuoteString(value))
505: elif op=="lt":
506: whereList.append(name+"<"+libpq.PgQuoteString(value))
507: elif op=="eq":
508: whereList.append(name+"="+libpq.PgQuoteString(value))
509: elif op=="bw":
510: whereList.append(name+" LIKE "+libpq.PgQuoteString(value+"%"))
511: elif op=="ew":
512: whereList.append(name+" LIKE "+libpq.PgQuoteString("%"+value))
1.6 dwinter 513: op="ct"
1.5 dwinter 514:
515: #except:
516: # print "END",value,name,Exception
1.1 dwinter 517: if len(whereList)>0:
518: where="WHERE "+string.join(whereList," "+lop+" ")
519: else:
520: where=""
521: #print "QE",table
522:
1.11 dwinter 523: query="SELECT %s FROM %s %s %s %s %s"%(select,table,where,sort,maxstr,skip)
1.13 dwinter 524:
1.5 dwinter 525: if not nostore=="yes":
526:
527: self.REQUEST.SESSION['qs']=opfields
1.7 dwinter 528: #print "IAMHERE again:", query
1.5 dwinter 529:
530: if storename:
1.7 dwinter 531: query2="SELECT count(*) FROM %s %s"%(table,where)
1.5 dwinter 532: #print "storing",query2
533: #print "QUERYSTRING:",self.REQUEST.SESSION[storename]['queryString2']
534: if not self.REQUEST.SESSION.has_key(storename):
535: self.REQUEST.SESSION[storename]={}
536: if self.REQUEST.SESSION[storename].has_key('queryString2'):
537: #print "HI",storename
538: if not self.REQUEST.SESSION[storename]['queryString2']==query2:
539: #print "HOOOOO",storename
540: self.REQUEST.SESSION[storename]['queryString2']=query2
541: self.REQUEST.SESSION[storename]['count']=self.search(var=query2)[0].count
542: #print "QUERY",query2,"::::",self.REQUEST.SESSION[storename]['queryString2']
543:
544: else:
545: self.REQUEST.SESSION[storename]['queryString2']=query2
546: self.REQUEST.SESSION[storename]['count']=self.search(var=query2)[0].count
547: #print "QUERYNEW",self.REQUEST.SESSION[storename]['queryString2']
548:
549:
550: self.REQUEST.SESSION[storename]['rangeStart']=rangeStart
551: if limit=="all":
552: self.REQUEST.SESSION[storename]['rangeEnd']=self.REQUEST.SESSION[storename]['count']
553: else:
554: self.REQUEST.SESSION[storename]['rangeEnd']=int(rangeStart)+int(limit)
555: self.REQUEST.SESSION[storename]['rangeSize']=limit
1.11 dwinter 556: self.REQUEST.SESSION[storename]['searchFields']=searchFields
1.5 dwinter 557:
1.22 ! dwinter 558: #print "Q",query
1.16 dwinter 559: return self.ZSQLQuery(query)
560:
561: def ZSQLQuery(self,query):
562: """query"""
1.1 dwinter 563: return self.search(var=query)
564:
565: def ZSQLSearch(self):
566: """To be done"""
567: rq=self.REQUEST['QUERY_STRING']
568: querys=rq.split("&")
569:
570:
571: for querytemp in querys:
572: query=querytemp.split("=")
573: try:
574: if query[0].lower()=="-format":
575: formatfile=query[1]
576: except:
577: """nothing"""
578: #print formatfile
579: self.REQUEST.SESSION['query']=string.join(self.REQUEST['QUERY_STRING'].split("&"),",")
580: return self.REQUEST.RESPONSE.redirect(urllib.unquote(formatfile))
581:
582:
583: def ZSQLint(self,string):
584: try:
585:
586: return(int(string))
587: except:
588: return 0
1.5 dwinter 589:
1.11 dwinter 590: def getZSQLSearchFieldsList(self,storename="foundCount"):
591: """get searchfieldList"""
1.13 dwinter 592: #print self.REQUEST.SESSION[storename]['searchFields'].keys()
1.11 dwinter 593: return self.REQUEST.SESSION[storename]['searchFields'].keys()
594:
595: def getZSQLSearchFields(self,storename="foundCount"):
596: """get searchfield"""
1.13 dwinter 597: #print "SF",self.REQUEST.SESSION[storename]['searchFields']
1.11 dwinter 598: return self.REQUEST.SESSION[storename]['searchFields']
599:
600:
1.5 dwinter 601: def nextLink(self,html,storename="foundCount"):
602: """nextLink"""
603: try:
604: limit=self.REQUEST.SESSION[storename]['rangeSize']
1.21 dwinter 605: if int(limit)==0 :
606: limit="1"
1.5 dwinter 607: newRangeStart=int(self.REQUEST.SESSION[storename]['rangeStart'])+int(limit)
608: except:
609: limit=0
610: newRangeStart=0
611:
612: if newRangeStart>self.REQUEST.SESSION[storename]['count']:
613: newRangeStart=self.REQUEST.SESSION[storename]['count']-10
614:
615:
616: #create new query string
617:
618: if self.REQUEST['QUERY_STRING']=="":
619: qs=self.REQUEST.SESSION['query']
620:
621: queries=string.split(qs,",")
622:
623:
624: else:
625: qs=self.REQUEST['QUERY_STRING']
626: queries=string.split(qs,"&")
627:
628:
629:
630: newquery=[]
631:
632: skipFound=0
633:
634: for query in queries:
1.22 ! dwinter 635:
1.5 dwinter 636: #print query.split("=")[0]
637: if query[0]=="_" : query[0]="-"
638:
639: if query.split("=")[0].lower()=="-skip":
1.21 dwinter 640: print "d", newRangeStart
1.5 dwinter 641: skipFound=1
642: query="-skip=%i"%newRangeStart
643: newquery.append(query)
644:
645: if skipFound==0 :
646: query="-skip=%i"%newRangeStart
647: newquery.append(query)
648:
649: newquerystring=string.join(newquery,"&")
1.9 dwinter 650:
651: return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
1.5 dwinter 652:
653:
654: def prevLink(self,html,storename="foundCount"):
655: """prev link"""
656: try:
657: limit=self.REQUEST.SESSION[storename]['rangeSize']
1.21 dwinter 658: if int(limit)==0 :
659: limit="1"
1.5 dwinter 660: newRangeStart=int(self.REQUEST.SESSION[storename]['rangeStart'])-int(limit)
661: except:
662: limit=0
663: newRangeStart=0
664:
665: #print "limit",limit,newRangeStart,int(self.REQUEST.SESSION[storename]['rangeStart'])
666:
667: if newRangeStart<0:
668: newRangeStart=0
669:
670: #create new query string
671:
672: if self.REQUEST['QUERY_STRING']=="":
673: qs=self.REQUEST.SESSION['query']
674: #qs=re.sub(r'_','-',qs) #aendern für query
675: queries=string.split(qs,",")
676:
677:
678: else:
679: qs=self.REQUEST['QUERY_STRING']
680: queries=string.split(qs,"&")
681:
682:
683:
684: newquery=[]
685:
686: skipFound=0
687:
688: for query in queries:
689: #print query.split("=")[0]
690:
691: if query[0]=="_" : query[0]="-"
692:
693: if query.split("=")[0].lower()=="-skip":
694: #print"HI"
695: query="-skip=%i"%newRangeStart
696: skipFound=1
697: newquery.append(query)
698:
699: if skipFound==0 :
700: query="-skip=%i"%newRangeStart
701: newquery.append(query)
702:
703: newquerystring=string.join(newquery,"&")
1.9 dwinter 704:
705: return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
706:
707:
1.5 dwinter 708:
709: def prevLink_old(self,html):
1.1 dwinter 710: """prev link"""
711: if self.REQUEST['QUERY_STRING']=="":
712: qs=self.REQUEST.SESSION['query']
713: else:
714: qs=self.REQUEST['QUERY_STRING']
715: max=re.search(r'max\=(.*)\,',qs.lower())
716: offset=re.search(r'offset\=(.*)\,',qs.lower())
717: if not offset:
718: offsetnew=0
719: else:
720: offsetnew=int(offset)-max
721: if offsetnew<0:
722: offsetnew=0
723: queries=string.split(qs,",")
724: newquery=[]
725: if offset:
726: for query in queries:
727: if query.split("=")[0].lower()=="offset":
728: query="-offset=%i"%offsetnew
729: newquery.append(query)
730: newquerystring=string.join(newquery,"&")
731: else:
732: queries.append("-offset=%i"%offsetnew)
733: newquerystring=string.join(queries,"&")
1.9 dwinter 734: return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
1.1 dwinter 735:
1.5 dwinter 736: def nextLink_old(self,html):
1.1 dwinter 737: """prev link"""
738: if self.REQUEST['QUERY_STRING']=="":
739: qs=self.REQUEST.SESSION['query']
740: else:
741: qs=self.REQUEST['QUERY_STRING']
742: max=re.search(r'max\=(.*)\,',qs.lower())
743:
744: offset=re.search(r'offset\=(.*)\,',qs.lower())
745: if not offset:
746: offsetnew=1
747: else:
748: offsetnew=int(offset)+int(max)
749: if offsetnew<0:
750: offsetnew=0
751: queries=string.split(qs,",")
752: newquery=[]
753: if offset:
754: for query in queries:
755:
756: if query.split("=")[0].lower()=="-offset":
757: query="-offset=%i"%offsetnew
758: newquery.append(query)
759: newquerystring=string.join(newquery,"&")
760: else:
761: queries.append("-offset=%i"%offsetnew)
762: newquerystring=string.join(queries,"&")
763:
1.9 dwinter 764: return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
1.1 dwinter 765:
1.5 dwinter 766:
1.1 dwinter 767: manage_addZSQLExtendFolderForm=DTMLFile('ZSQLExtendFolderAdd', globals())
768:
1.16 dwinter 769: def manage_addZSQLExtendFolder(self, id, title='', label='', description='',
1.1 dwinter 770: createPublic=0,
771: createUserF=0,
772: REQUEST=None):
773: """Add a new Folder object with id *id*.
774:
775: If the 'createPublic' and 'createUserF' parameters are set to any true
776: value, an 'index_html' and a 'UserFolder' objects are created respectively
777: in the new folder.
778: """
779:
780:
781: ob=ZSQLExtendFolder()
782: ob.id=str(id)
783: ob.title=title
784: self._setObject(id, ob)
785: ob=self._getOb(id)
1.16 dwinter 786: setattr(ob,'label',label)
787: setattr(ob,'description',description)
788:
1.1 dwinter 789: checkPermission=getSecurityManager().checkPermission
790:
791: if createUserF:
792: if not checkPermission('Add User Folders', ob):
793: raise Unauthorized, (
794: 'You are not authorized to add User Folders.'
795: )
796: ob.manage_addUserFolder()
797:
798: if createPublic:
799: if not checkPermission('Add Page Templates', ob):
800: raise Unauthorized, (
801: 'You are not authorized to add Page Templates.'
802: )
803: ob.manage_addProduct['PageTemplates'].manage_addPageTemplate(
804: id='index_html', title='')
805:
806: if REQUEST is not None:
807: return self.manage_main(self, REQUEST, update_menu=1)
1.15 dwinter 808:
809:
810:
1.16 dwinter 811: class ZSQLBibliography(Folder,ZSQLExtendFolder):
1.15 dwinter 812: """Bibliography"""
813: meta_type="ZSQLBibliography"
814: def getLabel(self):
815: try:
816: return self.label
817: except:
818: return ""
819:
820: def getDescription(self):
821: try:
822: return self.description
823: except:
824: return ""
825:
826: def changeZSQLBibliographyForm(self):
827: """change folder config"""
828: pt=PageTemplateFile('Products/ZSQLExtend/zpt/changeZSQLBibliographyForm.zpt').__of__(self)
829: return pt()
830:
831:
832: def content_html(self):
833: """template fuer content"""
834:
835: try:
836: obj=getattr(self,"ZSQLBibliography_template")
837: return obj()
838: except:
839: pt=PageTemplateFile('Products/ZSQLExtend/zpt/ZSQLBibliography_template_standard.zpt').__of__(self)
840: pt.content_type="text/html"
841: return pt()
842:
843: def changeZSQLBibliography(self,tableName,label,description,REQUEST=None):
844: """change it"""
845: self.tableName=tableName
846: self.label=label
847: self.description=description
848:
849: if REQUEST is not None:
850: return self.manage_main(self, REQUEST)
851:
1.16 dwinter 852: manage_options=Folder.manage_options+(
853: {'label':'Main Config','action':'changeZSQLBibliographyForm'},
1.15 dwinter 854: )
855:
856:
857: def getFieldLabel(self,fields,field):
858: """get labels"""
859: try:
860: ret =fields[0][field]
861: if ret == "":
862: return field
863: else:
864: return ret
865: except:
866: return field
867:
868: def getFieldValue(self,found,field):
869: """get value"""
870: try:
871: ret=getattr(found,field)
872: if ret == "":
873: return None
874: else:
875: return ret
876: except:
877: return None
1.18 dwinter 878:
1.21 dwinter 879: def findTagsFromMapping(self,referenceType):
880: """gib hash mit label -> generic zurueck"""
881: self.referencetypes=self.ZopeFind(self.standardMD)
882: bibdata={}
883: retdata={}
884: fieldlist=self.standardMD.fieldList
885:
886: for referenceTypeF in self.referencetypes:
887: #print referenceType,referenceTypeF[1].title
888: if referenceTypeF[1].title == referenceType:
889: bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
890: bibdata['data']=referenceTypeF[1]
891: self.fields=bibdata[referenceType]
892: for field in fieldlist:
893: retdata[field]=referenceTypeF[1].getValue(field)[0]
894:
895: return retdata,fieldlist
896:
1.15 dwinter 897: def findLabelsFromMapping(self,referenceType):
898: """gib hash mit label -> generic zurueck"""
899: self.referencetypes=self.ZopeFind(self.standardMD)
900: bibdata={}
901: retdata={}
902: fieldlist=self.standardMD.fieldList
903:
904: for referenceTypeF in self.referencetypes:
1.18 dwinter 905: #print referenceType,referenceTypeF[1].title
1.15 dwinter 906: if referenceTypeF[1].title == referenceType:
907: bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
908: bibdata['data']=referenceTypeF[1]
909: self.fields=bibdata[referenceType]
910: for field in fieldlist:
911: retdata[field]=referenceTypeF[1].getValue(field)[1]
912:
913: return retdata,fieldlist
914:
1.21 dwinter 915: def createIndexTag(self,tag,content):
916: """creste tag"""
917: if content:
918: ret="""<%s>%s</%s>"""%(tag,content,tag)
919: return ret
920: else:
921: return ""
922:
923: def getMetaDataXML(self):
924: """crate index meta"""
925: pt=PageTemplateFile('Products/ZSQLExtend/zpt/record.xml').__of__(self)
926: pt.content_type="text/xml"
927: return pt()
928:
929: def getMetaDatasXML(self):
930: """index"""
931: ret="""<?xml version="1.0" ?>
932: <index>"""
933: for found in self.search(var="select oid from %s"%self.tableName):
934: link=self.absolute_url()+"/"+"record.html?oid=%i"%found.oid
935: metalink=self.absolute_url()+"/"+"getMetaDataXML?oid=%i"%found.oid
936:
937: ret+="""<resource resourceLink="%s" metaLink="%s"/>\n"""%(link,metalink)
938:
939: return ret+"\n</index>"
940:
1.15 dwinter 941: manage_addZSQLBibliographyForm=DTMLFile('ZSQLBibliographyAdd', globals())
942:
943: def manage_addZSQLBibliography(self, id, tableName,label,description,title='',
944: createPublic=0,
945: createUserF=0,
946: REQUEST=None):
947: """Add a new Folder object with id *id*.
948:
949: If the 'createPublic' and 'createUserF' parameters are set to any true
950: value, an 'index_html' and a 'UserFolder' objects are created respectively
951: in the new folder.
952: """
953:
954:
955: ob=ZSQLBibliography()
956: ob.id=str(id)
957: ob.title=title
958: self._setObject(id, ob)
959: ob=self._getOb(id)
960: setattr(ob,'tableName',tableName)
961: setattr(ob,'label',label)
962: setattr(ob,'description',description)
963:
964: checkPermission=getSecurityManager().checkPermission
965:
966: if createUserF:
967: if not checkPermission('Add User Folders', ob):
968: raise Unauthorized, (
969: 'You are not authorized to add User Folders.'
970: )
971: ob.manage_addUserFolder()
972:
973: if createPublic:
974: if not checkPermission('Add Page Templates', ob):
975: raise Unauthorized, (
976: 'You are not authorized to add Page Templates.'
977: )
978: ob.manage_addProduct['PageTemplates'].manage_addPageTemplate(
979: id='index_html', title='')
980:
981: if REQUEST is not None:
982: return self.manage_main(self, REQUEST, update_menu=1)
983:
984:
1.1 dwinter 985:
986:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>