File:  [Repository] / ZSQLExtend / ZSQLExtend.py
Revision 1.15: download - view: text, annotated - select for diffs - revision graph
Sun Apr 18 08:58:28 2004 UTC (20 years, 2 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
new class ZWSQLBibliography

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

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