File:  [Repository] / ZSQLExtend / ZSQLExtend.py
Revision 1.19: download - view: text, annotated - select for diffs - revision graph
Fri Jun 11 15:13:20 2004 UTC (20 years ago) by dwinter
Branches: MAIN
CVS tags: HEAD
minor

    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
    8: from pyPgSQL import libpq
    9: from AccessControl import getSecurityManager
   10: import os.path
   11: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
   12: 
   13: def quoteString(name):
   14:     #return re.sub(r'([\(\)\?])',"\\\1",name)
   15:     #return "Euklid"
   16:     return name
   17: 
   18: 
   19: 
   20: class ZSQLExtendFolder(Persistent, Implicit, Folder):
   21:     """Folder"""
   22:     meta_type="ZSQLExtendFolder"
   23: 
   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 getWeight(self):
   37:         """getLabe"""
   38:         try:
   39:             return self.weight
   40:         except:
   41:             return ""
   42: 
   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: 
   67:     def changeZSQLExtend(self,label,description,weight=0,REQUEST=None):
   68:         """change it"""
   69: 
   70:         self.weight=weight
   71:         self.label=label
   72:         self.description=description
   73:         
   74:         if REQUEST is not None:
   75:             return self.manage_main(self, REQUEST)
   76: 
   77:     def formatAscii(self,str,url=None):
   78:         """ersetze ascii umbrueche durch <br>"""
   79:         #url=None
   80:         if url and str:
   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:         
   95:     def getSAttribute(self,obj,atribute,pref=''):
   96:         """get Attribute or emptystring"""
   97:         
   98:         #print "obj",obj
   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: 
  111:     def actualPath(self,url=None):
  112: 	"""path"""
  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']
  118: 	if not url:
  119: 		return "http://"+host+self.REQUEST['PATH_TRANSLATED']
  120:     	else:
  121: 		temp=self.REQUEST[url].split("/")
  122: 		temp[2]=host
  123: 		return string.join(temp,"/")
  124: 
  125:     def getRequest(self):
  126: 	"""request"""
  127: 	return self.REQUEST
  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"""
  135:         #print "field",field
  136:         if not field:
  137:             return 1
  138:         if field=="":
  139:             return 1
  140:         return 0
  141: 
  142:     def ZSQLsearchOptions(self,fieldname=""):
  143:         """return HTML Fragment with search options"""
  144: 	
  145:         ret="""<select name="-op_%s">
  146: 	<option value="bw">begins with</option>          	<!-- begins with / beginnt mit, "Wort*" -->
  147: 	<option value="ew">ends with</option>
  148:    	<option value="ct" selected>contains</option>          		<!-- contains / enthaellt, "Wort" -->
  149:     <option value="eq">equals</option>          		<!-- equals / ist, =Wort -->
  150: </select>"""%fieldname
  151:         return ret
  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")):
  159:                 ret+="""<input name="%s" type="%s" value="%s" checked>%s"""%(fieldname,boxType,field,field)
  160:             else:
  161:                 ret+="""<input name="%s" type="%s" value="%s">%s"""%(fieldname,boxType,field,field)
  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:
  171:             ret+="""<option value="%s">%s</option>"""%(field.encode('utf-8'),field.encode('utf-8'))
  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:
  181: 	    if start==' ':
  182: 		start=''
  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:             
  191:     
  192:     def ZSQLInlineSearch(self,storename=None,**argv):
  193:         """inlinesearch"""
  194:         qs=[]
  195:         if storename:
  196:             """store"""
  197:         else:
  198:             storename="foundCount"
  199:             
  200:     
  201: 
  202:         #print "INLINE:",argv
  203:         for a in argv.keys():
  204:             qs.append(a+"="+urllib.quote(str(argv[a])))
  205:         #return []  
  206:         return self.parseQueryString(string.join(qs,","),"_",storename=storename)
  207: 
  208:     def ZSQLInlineSearch2(self,query):
  209:         """inlinesearch"""
  210:         qs=[]
  211:         
  212:     
  213: 
  214:         #print "INLINE:",query
  215:         
  216:         return self.search(var=query)
  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+"\"")
  238:             valueList.append(libpq.PgQuoteString(addList[x]))
  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:         
  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):
  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)
  296:                 identify=identify.split("=")[0]+"="+libpq.PgQuoteString(identify.split("=")[1])
  297:             elif name=="-format":
  298:                 format=urllib.unquote(value)
  299:             elif (not name[0]=="-") and (not len(value)==0):
  300:                 changeList.append("\""+name+"\"="+libpq.PgQuoteString(urllib.unquote(value)))
  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:     
  306:     def ZSQLFind(self,qs="",select="oid,*",storename=None,**argv):
  307:         """Find"""
  308: 
  309: 
  310:         if qs=="":
  311:            if self.REQUEST['QUERY_STRING']:
  312:                qs=self.REQUEST['QUERY_STRING']
  313:                
  314:                
  315:                qs=string.join(qs.split("&"),",")
  316:                for field in argv.keys():
  317:                    qs+=",-%s=%s"%(field,argv[field])
  318:                #print qs
  319:            else:
  320:                
  321:                qs=self.REQUEST.SESSION['query']
  322:         else:
  323:             self.REQUEST['QUERY_STRING']=qs
  324:             qs=string.join(qs.split("&"),",")
  325:             
  326: 
  327:         qs=re.sub("\\+"," ",qs)# Austauschen da Leerzeichen bei http-get durch + ersetzt wird, generell sollte alles auf post umgeschrieben werden. vom search formular.
  328: 
  329:         if storename:
  330:             """store"""
  331:         else:
  332:             storename="foundCount"
  333:         #print "QS",qs
  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:         
  372:         return int(self.REQUEST.SESSION[storename]['rangeStart'])+1
  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']
  382: 
  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
  395:         lop="AND" # standardsuche mit and
  396:         max="ALL" #standard alle auswählen
  397:         maxstr=""
  398:         whereList=[]
  399:         sort=""
  400:         op="bw"
  401:         opfields={}
  402:         skip=""
  403:         rangeStart=0
  404:         limit=0
  405:         searchFields={}
  406:         
  407:         if not select:
  408:             select="oid,*"
  409:         #print "Q",nostore,qs
  410:         #check for op in the case of inline search
  411:         
  412: 	splitted=qs.split(",")
  413: 	
  414:             
  415:         for q in splitted:
  416:                 
  417:                 name=re.sub("r'+'"," ",q.split("=")[0].lower())
  418:                 try:
  419:                     value=urllib.unquote(q.split("=",1)[1])
  420:                 except:
  421:                     value=""
  422:                 #print "Hi",name[0:3],q
  423:                 if name[0:3]==iCT+"op":
  424:                     op=value
  425: 
  426:                     field=name[4:]
  427:                     opfields[field]=op
  428:                     #print "HI",op,field
  429: 	#print opfieldsa
  430:         #now analyse the querystring
  431:         for q in qs.split(","):
  432:             
  433:             
  434:             #try:
  435: 
  436:             name=re.sub("r'+'"," ",q.split("=")[0].lower())
  437:             try:
  438:                 value=urllib.unquote(q.split("=",1)[1])
  439:             except:
  440:                 value=""
  441:                 
  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":
  452:                 maxstr="LIMIT "+str(value)
  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":
  463:                     self.REQUEST.SESSION['token']=value
  464: 
  465:             elif name==iCT+"op":
  466:                 op=value
  467: 
  468: 
  469: 
  470:             elif (not name[0]==iCT) and (not len(value)==0):
  471:                 
  472: 		#print "OP",op,name
  473:                 value=value.lower()
  474: 
  475:                 searchFields[name]=value
  476:                 
  477:                 if opfields.has_key(name):
  478:                     op=opfields[name]
  479: 		else:
  480: 		    op="ct"
  481: 		name="LOWER("+name+")"    
  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))
  494:                 op="ct"
  495:             
  496:             #except:
  497:             #    print "END",value,name,Exception       
  498:         if len(whereList)>0:
  499:             where="WHERE "+string.join(whereList," "+lop+" ")
  500:         else:
  501:             where=""
  502:         #print "QE",table
  503:         
  504:         query="SELECT %s FROM %s %s %s %s %s"%(select,table,where,sort,maxstr,skip)
  505:         
  506:         if not nostore=="yes":
  507:             
  508:             self.REQUEST.SESSION['qs']=opfields
  509:         #print "IAMHERE again:", query
  510: 
  511:         if storename:
  512:             query2="SELECT count(*) FROM %s %s"%(table,where)
  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
  537:             self.REQUEST.SESSION[storename]['searchFields']=searchFields
  538:             
  539: 	#print "Q",query            
  540:         return self.ZSQLQuery(query)
  541: 
  542:     def ZSQLQuery(self,query):
  543:         """query"""
  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
  570: 
  571:     def getZSQLSearchFieldsList(self,storename="foundCount"):
  572:         """get searchfieldList"""
  573:         #print self.REQUEST.SESSION[storename]['searchFields'].keys()
  574:         return  self.REQUEST.SESSION[storename]['searchFields'].keys()
  575: 
  576:     def getZSQLSearchFields(self,storename="foundCount"):
  577:         """get searchfield"""
  578:         #print "SF",self.REQUEST.SESSION[storename]['searchFields']
  579:         return  self.REQUEST.SESSION[storename]['searchFields']
  580: 
  581:                                                 
  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,"&")
  627: 	
  628:         return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
  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,"&")
  679: 
  680:         return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
  681: 
  682: 
  683:     
  684:     def prevLink_old(self,html):
  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,"&")
  709:         return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
  710:         
  711:     def nextLink_old(self,html):
  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:         
  739:         return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
  740:         
  741:     
  742: manage_addZSQLExtendFolderForm=DTMLFile('ZSQLExtendFolderAdd', globals())
  743: 
  744: def manage_addZSQLExtendFolder(self, id, title='', label='', description='',
  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)
  761:     setattr(ob,'label',label)
  762:     setattr(ob,'description',description)
  763:     
  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)
  783: 
  784: 
  785: 
  786: class ZSQLBibliography(Folder,ZSQLExtendFolder):
  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: 
  827:     manage_options=Folder.manage_options+(
  828:         {'label':'Main Config','action':'changeZSQLBibliographyForm'},
  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
  853: 
  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:
  862: 		#print referenceType,referenceTypeF[1].title
  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:     
  918: 
  919:     

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>