File:  [Repository] / ZSQLExtend / ZSQLExtend.py
Revision 1.59: download - view: text, annotated - select for diffs - revision graph
Wed Feb 9 20:10:42 2005 UTC (19 years, 3 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
VLMA added and deleted in ZSQLEextend

    1: from OFS.Folder import Folder
    2: from Acquisition import Implicit
    3: from Globals import DTMLFile,package_home,Persistent
    4: import urllib
    5: import re
    6: import string
    7: import sys
    8: #from pyPgSQL import libpq
    9: from AccessControl import getSecurityManager
   10: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
   11: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
   12: 
   13: from Products.ZSQLMethods.SQL import SQLConnectionIDs
   14: import Shared.DC.ZRDB.DA
   15: import zLOG
   16: import os.path
   17: import os
   18: 
   19: def analyseIntSearch(word):
   20:     #analyse integer searches
   21: 
   22:     splitted=word.split("-")
   23: 
   24:     if len(splitted)==1:
   25:         return "="+splitted[0]
   26:     
   27:     if splitted[0]=="":
   28:         return "< "+splitted[1]
   29: 
   30:     if splitted[1]=='':
   31:         return "> "+splitted[0]
   32:     else:
   33:         return "BETWEEN "+splitted[0]+" AND "+splitted[1]
   34: 
   35:         
   36: 
   37: def sql_quote(v):
   38:     # quote dictionary
   39:     quote_dict = {"\'": "''", "\\": "\\\\"}
   40:     for dkey in quote_dict.keys():
   41:         if string.find(v, dkey) >= 0:
   42:             v=join(split(v,dkey),quote_dict[dkey])
   43:     return "'%s'" % v
   44: 
   45: def showSQLConnectionIDs(self):
   46:     return SQLConnectionIDs(self)
   47: 
   48: class ZSQLExtendFolder(Folder,Persistent, Implicit):
   49:     """Folder"""
   50:     meta_type="ZSQLExtendFolder"
   51: 
   52:     def testneu(self):
   53:         """test"""
   54:         relStatement="""period like '%s%%'"""
   55:         statement="select * from cdli_cat"
   56:         wherePart="museum_no like 'VAT%'"
   57:         classes=['Uruk III','Uruk IV']
   58:         return self.searchRel(relStatement,statement,wherePart,classes)
   59: 
   60:     def URLquote(self,txt):
   61:         """urlquote"""
   62:         return urllib.quote(txt)
   63:     def searchRel(self,relStatement,statement,wherePart,classes):
   64:         """suche relative haufigkeiten"""
   65:         ret={}
   66:         allRecords=len(self.ZSQLSimpleSearch(statement + " where "+wherePart))
   67:         
   68:         for oneclass in classes:
   69:             ret[oneclass]=len(self.ZSQLSimpleSearch(statement + " where ("+wherePart+") and "+ relStatement%oneclass))
   70:         
   71:         return (ret,allRecords)
   72:                   
   73:     def content_html(self):
   74:         """template fuer content"""
   75:         
   76:         try:
   77:             obj=getattr(self,"ZSQLBibliography_template")
   78:             return obj()
   79:         except:
   80:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ZSQLBibliography_template_standard.zpt'),content_type='text/html').__of__(self)
   81:             pt.content_type="text/html"
   82:             
   83:             return pt()
   84: 
   85:         
   86:     def getWeight(self):
   87:         """getLabe"""
   88:         try:
   89:             return self.weight
   90:         except:
   91:             return ""
   92: 
   93:     def getLabel(self):
   94:         """getLabe"""
   95:         try:
   96:             return self.label
   97:         except:
   98:             return ""
   99: 
  100:     def getDescription(self):
  101:         """getLabe"""
  102:         try:
  103:             return self.description
  104:         except:
  105:             return ""
  106: 
  107:     manage_options=Folder.manage_options+(
  108:         {'label':'Main Config','action':'changeZSQLExtendForm'},
  109:        )
  110: 
  111:     def changeZSQLExtendForm(self):
  112:         """change folder config"""
  113:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeZSQLExtendForm.zpt')).__of__(self)
  114:         return pt()
  115: 
  116: 
  117:     def changeZSQLExtend(self,label,description,weight=0,REQUEST=None,connection_id=None):
  118:         """change it"""
  119:         self.connection_id=connection_id
  120:         self.weight=weight
  121:         self.label=label
  122:         self.description=description
  123:         
  124:         if REQUEST is not None:
  125:             return self.manage_main(self, REQUEST)
  126: 
  127:     def formatAscii(self,str,url=None):
  128:         """ersetze ascii umbrueche durch <br>"""
  129:         #url=None
  130:         if url and str:
  131:             
  132:             retStr=""
  133:             words=str.split("\n")
  134:             
  135:             for word in words:
  136:                 strUrl=url%word
  137:                 #print "str",strUrl
  138:                 retStr+="""<a href="%s">%s</a><br/>"""%(strUrl,word)
  139:             str=retStr
  140:         if str:
  141:             return re.sub(r"[\n]","<br/>",str)
  142:         else:
  143:             return ""
  144:         
  145:     def getSAttribute(self,obj,atribute,pref=''):
  146:         """get Attribute or emptystring"""
  147:         
  148:         #print "obj",obj
  149:         try:
  150:             return pref+getattr(obj,atribute)
  151:         except:
  152:             return ""
  153:         
  154:     def getS(self,str):
  155:         """make none to empty string"""
  156:         if str:
  157:             return str
  158:         else:
  159:             return ""
  160: 
  161:     def actualPath(self,url=None):
  162: 	"""path"""
  163: 
  164:         if self.REQUEST['HTTP_X_FORWARDED_SERVER']=='':
  165:             host=self.REQUEST['HTTP_HOST']
  166:         else:
  167:             host=self.REQUEST['HTTP_X_FORWARDED_SERVER']
  168: 	if not url:
  169: 		return "http://"+host+self.REQUEST['PATH_TRANSLATED']
  170:     	else:
  171: 		temp=self.REQUEST[url].split("/")
  172: 		temp[2]=host
  173: 		return string.join(temp,"/")
  174: 
  175:     def getRequest(self):
  176: 	"""request"""
  177: 	return self.REQUEST
  178: 
  179:     def lowerEnd(self,path):
  180:         """oinly for demo"""
  181:         return os.path.splitext(path)[0]+".jpg"
  182:         
  183:     def ZSQLisEmpty(self,field):
  184:         """Teste ob Treffer leer"""
  185:         #print "field",field
  186:         if not field:
  187:             return 1
  188:         if field=="":
  189:             return 1
  190:         return 0
  191: 
  192:     def ZSQLsearchOptions(self,fieldname=""):
  193:         """return HTML Fragment with search options"""
  194: 	
  195:         ret="""<select name="-op_%s">
  196: 	<option value="bw">begins with</option>          	<!-- begins with / beginnt mit, "Wort*" -->
  197: 	<option value="ew">ends with</option>
  198:    	<option value="ct" selected>contains</option>          		<!-- contains / enthaellt, "Wort" -->
  199:     <option value="eq">equals</option>          		<!-- equals / ist, =Wort -->
  200: </select>"""%fieldname
  201:         return ret
  202: 
  203:     def ZSQLSelectionFromCRList(self,fieldname,listField,boxType="checkbox",checked=None):
  204:         """generate select oprions form a cr seperated list"""
  205:         fields=listField.split("\n")
  206:         ret=""
  207:         for field in fields:
  208:             if checked and (field in checked.split("\n")):
  209:                 ret+="""<input name="%s" type="%s" value="%s" checked>%s"""%(fieldname,boxType,field.encode('utf-8'),field.encode('utf-8'))
  210:             else:
  211:                 ret+="""<input name="%s" type="%s" value="%s">%s"""%(fieldname,boxType,field.encode('utf-8'),field.encode('utf-8'))
  212:         return ret
  213: 
  214: 
  215:     def ZSQLOptionsFromCRList(self,fieldname,listField, multiple=''):
  216:         """generate select oprions form a cr seperated list"""
  217:         fields=listField.split("\n")
  218:         ret="""<select name="%s" %s>
  219:             """%(fieldname,multiple)
  220:         for field in fields:
  221:             ret+="""<option value="%s">%s</option>"""%(field.encode('utf-8'),field.encode('utf-8'))
  222:         ret+="""</select>"""
  223:         return ret
  224: 
  225:     def ZSQLOptionsFromSearchList(self,fieldname,results,fieldName,valueName=None,start=None, multiple='',startValue=None,additionalSelect=""):
  226:         """generate select options form a search list
  227:         es wird
  228:         <select name=fieldname mutiple>
  229:         <option value=startValue>start</option>
  230:         <option value=result.fieldName>result.fieldValue</option>
  231:         erzeugt.
  232:         
  233:         @parameter fieldname: Name fuer name-wert im select-tag
  234:         @results results: Resultobject einer SQL-suche
  235:         @parameter fieldName: Name des Feldes, das als value in den option-tag geschrieben werden soll.
  236:         @parameter valueName: (optional) Name des Feldes, dass als im option-tag ausgegeben wird, default wert ist valueName=fieldName
  237:         @start: (optional) falls zusaetzliches option tag erzeugt werden soll, gibt start an was im option tag steht
  238:         @startValue: gibt den entsprechenden Wert an.
  239:         """
  240:         if not valueName:
  241:             valueName=fieldName
  242:             
  243:         ret="""<select name="%s" %s %s>
  244:             """%(fieldname,multiple,additionalSelect)
  245:         if start:
  246: 	    if start==' ':
  247: 		start=''
  248:                 if not startValue:
  249:                     startValue=start
  250:                     
  251:             ret+="""<option value="%s" >%s</option>"""%(startValue,start)
  252:         for result in results:
  253:             field=getattr(result,fieldName)
  254:             fieldValue=getattr(result,valueName)
  255:             if fieldValue:
  256:                 ret+="""<option value="%s">%s</option>"""%(field,fieldValue)
  257:         ret+="""</select>"""
  258:         return ret
  259: 
  260:             
  261:     def ZSQLInlineSearchU(self,storename=None,**argv):
  262:         """one element if exists"""
  263:         qs=[]
  264:         if storename:
  265:             """store"""
  266:         else:
  267:             storename="foundCount"
  268:             
  269:     
  270: 
  271:         #print "INLINE:",argv
  272:         for a in argv.keys():
  273:             qs.append(a+"="+urllib.quote(str(argv[a])))
  274:         #return []  
  275:         ret = self.parseQueryString(string.join(qs,","),"_",storename=storename)
  276: 
  277:         try:
  278:             return ret[0]
  279:         except:
  280:             return None
  281:         
  282:     def ZSQLInlineSearch(self,storename=None,**argv):
  283:         """inlinesearch"""
  284:         
  285:         qs=[]
  286:         if storename:
  287:             """store"""
  288:         else:
  289:             storename="foundCount"
  290:             
  291:     
  292: 
  293:         #print "INLINE:",argv
  294:         for a in argv.keys():
  295:             try:
  296:                 qs.append(a+"="+urllib.quote(str(argv[a])))
  297:             except:
  298:                 import urllib
  299:                 qs.append(a+"="+urllib.quote(str(argv[a])))
  300:                 
  301:         #return []  
  302:         return self.parseQueryString(string.join(qs,","),"_",storename=storename)
  303: 
  304:     def ZSQLInlineSearch2(self,query):
  305:         """inlinesearch"""
  306:         qs=[]
  307:         
  308:     
  309:         
  310:         #print "INLINE:",query
  311:         return self.ZSQLSimpleSearch(query)
  312:         
  313:     def ZSQLSimpleSearch(self,query=None,max_rows=1000000):
  314:         """simple search"""
  315: 
  316:         if not query:
  317:             query=self.query
  318:         
  319:         if (hasattr(self,"_v_searchSQL") and (self._v_searchSQL == None)) or (not hasattr(self,"_v_searchSQL")):
  320:             self._v_searchSQL=Shared.DC.ZRDB.DA.DA("_v_searchSQL","_v_searchSQL",self.connection_id,"var","<dtml-var var>")
  321:             self._v_searchSQL.max_rows_=max_rows
  322:             try:
  323:                 return self._v_searchSQL.__call__(var=query)
  324:             except :
  325:                 if sys.exc_info()[0]=="Database Error":
  326:                     try:
  327:                         getattr(self,self.connection_id).manage_open_connection()
  328:                     except: pass
  329:         else:
  330:             try:
  331:                 self._v_searchSQL.max_rows_=max_rows
  332:                 return self._v_searchSQL.__call__(var=query)
  333:             except :
  334:                 if sys.exc_info()[0]=="Database Error":
  335:                     try:
  336:                         getattr(self,self.connection_id).manage_open_connection()
  337:                     except: pass
  338:                     
  339:     def ZSQLSimpleSearch2(self,query=None):
  340:         """ returrn SQLSearch"""
  341:         #print "hi",query
  342:         if not query:
  343:             query=self.query
  344:         if getattr(self,'_v_search',None):
  345:             
  346:             return self._v_search(var=query)
  347:         
  348:         if hasattr(self,'search') and (self.search.meta_type=="Z SQL Method"):
  349:             self._v_search=self.search
  350:             return self.search(var=query)
  351:         else:
  352:             if hasattr(self.aq_parent.aq_parent,'search') and (self.aq_parent.aq_parent.search.meta_type=="Z SQL Method"):
  353:                 self._v_search=self.aq_parent.aq_parent.search
  354:                 return self.aq_parent.aq_parent.search(var=query)
  355:             else:
  356:                 search=self.ZopeFind(self,obj_metatypes=["Z SQL Method"],search_sub=1)
  357:                 if search:
  358:                     self._v_search=search[0][1]
  359:                     return search[0][1](var=query)
  360:                 else:
  361:                     return []
  362:     
  363:         
  364:         
  365:     def ZSQLAdd(self):
  366:         """Neuer Eintrag"""
  367:         qs=self.REQUEST['QUERY_STRING']
  368:         addList={}
  369:         for q in qs.split("&"):
  370:             name=re.sub("r'+'"," ",q.split("=")[0].lower())
  371:             value=q.split("=")[1]
  372: 	    value=re.sub(r'\+'," ",value)
  373: 	    value=urllib.unquote(value)	
  374:             if name=="-table":
  375:                 table=urllib.unquote(value)
  376:             elif name=="-format":
  377:                 format=urllib.unquote(value)
  378:             elif (not name[0]=="-") and (not len(value)==0):
  379:                 addList[urllib.unquote(name)]=urllib.unquote(value)
  380: 
  381:         keyList=[]
  382:         valueList=[]
  383:         for x in addList.keys():
  384:             keyList.append("\""+x+"\"")
  385:             valueList.append(sql_quote(addList[x]))
  386: 
  387:         keyString=string.join(keyList,",")
  388:         valueString=string.join(valueList,",")
  389:         
  390:         queryString="INSERT INTO %s (%s) VALUES (%s)"%(table,keyString,valueString)
  391:         self.ZSQLSimpleSearch(queryString)
  392:         return self.REQUEST.RESPONSE.redirect(format)
  393:         
  394:     def ZSQLChange(self,**argv):
  395:         """change entries"""
  396:         #qs=self.REQUEST['QUERY_STRING']
  397:         # very bad hack
  398:         qs_temp=[]
  399:     
  400:         for a in self.REQUEST.form.keys():
  401:             qs_temp.append(a+"="+urllib.quote(str(self.REQUEST.form[a])))
  402: 
  403:         qs=string.join(qs_temp,"&")
  404: 
  405:     
  406:         #print "CHANGE QS",self.REQUEST
  407:         #return self.REQUEST
  408:         changeList=[]
  409:         for q in qs.split("&"):
  410:             name=urllib.unquote(re.sub("r'+'"," ",q.split("=")[0].lower()))
  411:             value=q.split("=")[1]
  412:             value=re.sub(r'\+'," ",value)
  413: 	    value=urllib.unquote(value)
  414: 	    if name=="-table":
  415:                 table=urllib.unquote(value)
  416:             elif name=="-identify":
  417:                 identify=urllib.unquote(value)
  418:                 identify=identify.split("=")[0]+"="+sql_quote(identify.split("=")[1])
  419:             elif name=="-format":
  420:                 format=urllib.unquote(value)
  421:             elif (not name[0]=="-") and (not len(value)==0):
  422:                 changeList.append("\""+name+"\"="+sql_quote(urllib.unquote(value)))
  423:         changeString=string.join(changeList,",")
  424:         queryString="UPDATE %s SET %s WHERE %s"%(table,changeString,identify)
  425:         self.ZSQLSimpleSearch(queryString)
  426:         return self.REQUEST.RESPONSE.redirect(format)
  427: 
  428:    
  429: 
  430:     def ZSQLFind2(self,qs="",select="oid,*",storename=None,tableList=['cdli_translit','cdli_cat'],restrictField='id_text',**argv):
  431:         """find2"""
  432: 
  433:         search1= self.ZSQLFind(qs=qs,select=select,storename=storename,tableExt=tableList[1],restrictField=restrictField,NoQuery='yes',NoLimit='yes',**argv)
  434:      
  435:         search2 = self.ZSQLFind(tableExt=tableList[0],qs=qs,select=select,storename=storename,restrictConnect=(tableList[0]+"."+restrictField,search1),**argv)
  436:         return search2
  437:     
  438:       
  439:     
  440:     def ZSQLFind(self,qs="",select="oid,*",storename=None,tableExt=None,NoQuery=None,NoLimit=None,restrictField=None,restrictConnect=None,filter=None,**argv):
  441:         """Find"""
  442: 
  443:         def delEmpty(list):
  444:             ret=[]
  445:             for x in list:
  446:                 splitted=x.split("=")
  447:                 if (len(splitted)>1) and not (splitted[1]==' '):
  448:                     ret.append(x)
  449:             return ret
  450: 
  451: 
  452: 
  453:         #self.REQUEST.SESSION['come_from_search']="no" # zuruecksetzen
  454:         if qs=="":
  455:            
  456:            if self.REQUEST['QUERY_STRING']:
  457:                qs=self.REQUEST['QUERY_STRING']
  458: 
  459:                
  460:                qs=string.join(qs.split("&"),",")
  461: 
  462:                for field in argv.keys():
  463:                    if field[0]=="_":
  464:                        fieldTmp="-"+field[1:]
  465:                    else:
  466:                        fieldTmp=field
  467:                        
  468:                    qs+=",%s=%s"%(fieldTmp,argv[field])
  469:                    
  470:            else:
  471: 
  472:                qs=self.REQUEST.SESSION.get('query','')
  473:                
  474:                for field in argv.keys():
  475:                    if field[0]=="_":
  476:                        fieldTmp="-"+field[1:]
  477:                    else:
  478:                        fieldTmp=field
  479:                    
  480:                    qs+=",%s=%s"%(fieldTmp,argv[field])
  481: 
  482:          
  483: 
  484:         else:
  485:             self.REQUEST['QUERY_STRING']=qs
  486: 
  487:             qs=string.join(qs.split("&"),",")
  488:             
  489:         
  490:         
  491:         qs=re.sub("\\+"," ",qs)# Austauschen da Leerzeichen bei http-get durch + ersetzt wird, generell sollte alles auf post umgeschrieben werden. vom search formular.
  492: 
  493:         qs=string.join(delEmpty(qs.split(",")),",")
  494: 
  495:         if storename:
  496:             """store"""
  497:         else:
  498:             storename="foundCount"
  499: 
  500:         #store query for further usage
  501:         self.REQUEST.SESSION['query']=qs
  502: 
  503:         #print "calling Query with",repr(NoQuery)
  504:         ret=self.parseQueryString(qs,"-",select=select,storemax="yes",storename=storename,tableExt=tableExt,NoQuery=NoQuery,NoLimit=NoLimit,restrictField=restrictField,restrictConnect=restrictConnect,filter=filter)
  505:         #print self.REQUEST.SESSION["foundCount"]
  506:         
  507:         
  508: 
  509:         return ret
  510: 
  511:     def ZSQLFoundCountLen(self,var):
  512:         return len(var)
  513:             
  514:     def ZSQLFoundCount(self,qs="",select="*",storename=None):
  515:         
  516:        ##  if qs=="":
  517:             
  518: ##             if self.REQUEST['QUERY_STRING']:
  519:             
  520: ##                 qs=self.REQUEST['QUERY_STRING']
  521: ##                 qs=string.join(qs.split("&"),",")
  522: ##             else:
  523:             
  524: ##                 qs=self.REQUEST.SESSION['query']
  525: ##         else:
  526: ##             qs=string.join(qs.split("&"),",")
  527: 
  528: 
  529: ##         temp= self.parseQueryString(qs,"-",select=select,storemax="yes",nostore="yes")
  530:         if storename:
  531:             """store"""
  532:         else:
  533:             storename="foundCount"
  534:         
  535:         return self.REQUEST.SESSION[storename]['count']
  536: 
  537:     def ZSQLRangeStart(self,storename=None):
  538:         
  539:         if storename:
  540:             """store"""
  541:         else:
  542:             storename="foundCount"
  543:         
  544:         return int(self.REQUEST.SESSION[storename]['rangeStart'])+1
  545:     
  546:     def ZSQLRangeSize(self,storename=None):
  547:         
  548:         if storename:
  549:             """store"""
  550:         else:
  551:             storename="foundCount"
  552:             
  553:         return self.REQUEST.SESSION[storename]['rangeSize']
  554: 
  555:     def ZSQLRangeEnd(self,storename=None):
  556:         
  557:         if storename:
  558:             """store"""
  559:         else:
  560:             storename="foundCount"
  561:         
  562:         return str(min(int(self.REQUEST.SESSION[storename]['rangeEnd']),int(self.REQUEST.SESSION[storename]['count'])))
  563: 
  564:     def ZSQLNewQuery(self,linkText,storename=None,**argv):
  565:         """suche neu"""
  566:         return self.ZSQLNewSearch(linkText,storename,url=self.REQUEST['URL'],args=argv)
  567:     
  568:     def ZSQLNewSearch(self,linkText,storename=None,url=None,args=None,**argv):
  569:         """suche mit alten parametern bis auf die in argv getauschten"""
  570: 
  571:         if storename: 
  572:             """store"""  
  573:         else:
  574:             storename="foundCount"
  575:         qs=self.REQUEST.SESSION[storename]['qs']
  576: 
  577:         if args:
  578:             argv=args
  579:             
  580:         querys=qs.split(",")
  581:         argList=[]
  582:         arg=""
  583:         queryList=[x.split("=")[0] for x in querys]
  584:         
  585:         for argTmp in argv.keys():
  586:             
  587:             
  588:             arg=argTmp[0:]
  589:             if arg[0]=="_":arg="-"+argTmp[1:] # aender _ in - als standard
  590: 
  591:             if arg not in queryList: # noch nicht drin
  592:                 querys.append("%s=%s"%(arg,argv[argTmp]))
  593:             argList.append(arg)
  594: 
  595: 
  596:         
  597:         newquery=[]
  598:         for query in querys:
  599:             queryArg=query.split("=")[0]
  600:             qarg=queryArg[0:]
  601:             if qarg[0]=="-":qarg="_"+queryArg[1:] # aender _ in - als standard
  602:             
  603:             if  queryArg in argList:
  604:                 newquery.append("%s=%s"%(queryArg,argv[qarg]))
  605:             else:
  606:                 newquery.append(query)
  607: 
  608:         if url:
  609:             str=url+"?"+"&".join(newquery)
  610:         else:
  611:             str="ZSQLSearch?"+"&".join(newquery)
  612:         
  613:         return """<a href="%s"> %s</a>"""%(str,linkText)
  614:     
  615:     def parseQueryString(self,qs,iCT,storemax="no",select=None,nostore=None,storename=None,tableExt=None,NoQuery=None,NoLimit=None,restrictField=None,restrictConnect=None,filter=None):
  616:         """analysieren den QueryString"""
  617:         
  618:         
  619:         lop="AND" # standardsuche mit and
  620:         max="ALL" #standard alle auswaehlen
  621:         maxstr=""
  622:         whereList=[]
  623:         sort=""
  624:         op="bw"
  625:         opfields={}
  626:         lopfields={} #Verknuepfung bei mehrfachauswahl von einem feld
  627:         sortfields={} #order of sortfields
  628:         sortAllFields=None
  629:         skip=""
  630:         rangeStart=0
  631:         limit=0
  632:         searchFields={}
  633:         searchFieldsOnly={}
  634:         if not select:
  635:             select="oid,*"
  636:         #print "Q",nostore,qs
  637:         #check for op 
  638: 
  639: 
  640: 
  641:         
  642: 	splitted=qs.split(",")
  643:         if tableExt:
  644:             table=tableExt
  645: 
  646:         if restrictField:
  647:                     select=restrictField
  648:             
  649:         for q in splitted:
  650:                 
  651:                 name=re.sub("r'+'"," ",q.split("=")[0].lower())
  652:                 try:
  653:                     value=urllib.unquote(q.split("=",1)[1])
  654:                 except:
  655:                     value=""
  656:                 #print "Hi",name[0:3],q
  657:                 if name[0:3]==iCT+"op":
  658:                     op=value
  659: 
  660:                     field=name[4:]
  661:                     opfields[field]=op
  662: 
  663:                 if name[0:4]==iCT+"lop":
  664:                     lop=value
  665: 
  666:                     field=name[5:]
  667:                     lopfields[field]=lop
  668:                     
  669:                 if name[0:10]==iCT+"sortorder":
  670:                     #sort=value
  671:                     
  672:                     field=name[11:]
  673:                     sortAllFields=None
  674:                     #no field selected
  675:                     if field=="":
  676:                         sortAllFields=value
  677:                     else:
  678:                         sortfields[field]=value
  679:                     
  680:                     #print "HI",op,field
  681: 	#print opfieldsa
  682:         #now analyse the querystring
  683:        
  684:         for q in qs.split(","):
  685:        
  686:             
  687:             #try:
  688: 
  689:             name=re.sub("r'+'"," ",q.split("=")[0].lower())
  690:             try:
  691:                 value=urllib.unquote(q.split("=",1)[1])
  692:             except:
  693:                 value=""
  694:             
  695:             #value=sql_quote(value)
  696:             
  697: 
  698:             if name==iCT+"lop":
  699:                 lop=value
  700:             elif name==iCT+"table":
  701:                 if not tableExt: 
  702:                     table=value
  703:             elif name==iCT+"select":
  704:                 if not restrictField:
  705:                     select=value
  706:             elif name==iCT+"max":
  707:                 if not NoLimit:
  708:                     maxstr="LIMIT "+str(value)
  709:                     limit=str(value)
  710:             elif name==iCT+"skip":
  711:                 skip="OFFSET "+str(value)
  712:                 rangeStart=str(value)
  713:             elif name==iCT+"join":
  714:                 whereList.append(value)
  715:             elif name==iCT+"sort":
  716:                 sortstrs=[]
  717:                 for word in value.split(','):
  718:                     wordstr=word.lstrip().rstrip()
  719:                     if sortAllFields:
  720:                         order=sortAllFields
  721:                     else:
  722:                         order=sortfields.get(wordstr,'ASC')
  723:                         
  724:                     if not (wordstr == ""):
  725:                         sortstrs.append(wordstr+" "+order)
  726:                 if len(sortstrs)>0:
  727:                     sort="ORDER BY "+string.join(sortstrs,',')
  728:                     
  729:                     
  730:             elif name==iCT+"token":
  731:                 if not nostore=="yes":
  732:                     self.REQUEST.SESSION['token']=value
  733: 
  734:             elif name==iCT+"op":
  735:                 op=value
  736: 
  737: 
  738: 
  739:             elif (not name[0]==iCT) and (not len(value)==0):
  740: 
  741: 		#print "OP",op,name
  742:                 value=value.lower()
  743:                 tmp=""
  744:                 if opfields.has_key(name):
  745:                     op=opfields[name]
  746:                 else:
  747:                     op="ct"
  748:                 namealt=name
  749:                 name="LOWER("+name+")"    
  750:                 if op=="ct":
  751:                     tmp=(name+" LIKE "+sql_quote("%"+value+"%"))
  752:                 elif op=="gt":
  753:                     tmp=(name+">"+sql_quote(value))
  754:                 elif op=="lt":
  755:                     tmp=(name+"<"+sql_quote(value))
  756:                 elif op=="eq":
  757:                     tmp=(name+"="+sql_quote(value))
  758:                 elif op=="bw":
  759:                     tmp=(name+" LIKE "+sql_quote(value+"%"))
  760:                 elif op=="ew":
  761:                     tmp=(name+" LIKE "+sql_quote("%"+value))
  762:                 elif op=="all":
  763:                     tmps=[]
  764:                     for word in value.split(" "):
  765:                         tmps.append(name+" LIKE "+sql_quote("%"+word+"%"))
  766:                         
  767:                     tmp=string.join(tmps,' AND ')
  768: 
  769:                 elif op=="numerical":
  770:                     term=analyseIntSearch(value)
  771:                     tmp=(name+" "+term)
  772:                 elif op=="grep":
  773:                     tmp=(name+" ~* "+sql_quote(value))
  774:                 elif op=="one":
  775:                     tmps=[]
  776:                     for word in value.split(" "):
  777:                         tmps.append(name+" LIKE "+sql_quote("%"+word+"%"))
  778:                         
  779:                     tmp=string.join(tmps,' OR ')
  780: 
  781:                 op="all"
  782: 
  783:                 if (not tableExt) or (namealt.split('.')[0]==tableExt):
  784:                     if searchFields.has_key(namealt):
  785:                         searchFields[namealt]+=lopfields.get(name,'OR')+" "+tmp
  786:                         searchFieldsOnly[namealt]+=lopfields.get(name,'OR')+" "+value
  787:                     else: 
  788:                         searchFields[namealt]=tmp
  789:                         searchFieldsOnly[namealt]=value
  790: 
  791: 
  792:         whereList=["("+searchFields[x]+")" for x in searchFields.keys()]
  793:         
  794:         if len(whereList)>0:
  795:             if filter:
  796:                 whereStr="("+string.join(whereList," "+lop+" ")+") AND "+filter
  797:             else:
  798:                 whereStr=string.join(whereList," "+lop+" ")
  799:             where="WHERE "+whereStr
  800:         else:
  801:             if filter:
  802:                 where="WHERE "+filter
  803:             else:
  804:                 where=""
  805: 
  806:         if restrictConnect:
  807: 
  808:             if len(where)==0:
  809:                 where="WHERE "+restrictConnect[0]+" in ("+restrictConnect[1]+")"
  810:             else:
  811:                 where+="and "+restrictConnect[0]+" in ("+restrictConnect[1]+")"
  812:                 
  813:         #print "QE",table
  814:         #print (select,table,where,sort,maxstr,skip)
  815:         query="SELECT %s FROM %s %s %s %s %s"%(select,table,where,sort,maxstr,skip)
  816:         
  817:         if not nostore=="yes":
  818:             
  819:             self.REQUEST.SESSION['qs']=opfields
  820:         #print "IAMHERE again:", query
  821: 
  822:         if storename and (not NoQuery):
  823:             query2="SELECT count(*) FROM %s %s"%(table,where)
  824: 
  825:             #print "QUERYSTRING:",self.REQUEST.SESSION[storename]['queryString2']
  826:             if not self.REQUEST.SESSION.has_key(storename):
  827:                 self.REQUEST.SESSION[storename]={}
  828: 
  829:             self.REQUEST.SESSION[storename]['qs']=qs #sichere Querystring
  830: 
  831:             if self.REQUEST.SESSION[storename].has_key('queryString2'):
  832: 
  833:                 if not self.REQUEST.SESSION[storename]['queryString2']==query2:
  834:                     #print "HOOOOO",storename
  835:                     self.REQUEST.SESSION[storename]['queryString2']=query2
  836:                     self.REQUEST.SESSION[storename]['count']=self.ZSQLSimpleSearch(query2)[0].count
  837: 
  838:                     #print "QUERY",query2,"::::",self.REQUEST.SESSION[storename]['queryString2']
  839:                 
  840:             else:
  841: 
  842:                 self.REQUEST.SESSION[storename]['queryString2']=query2
  843:                 self.REQUEST.SESSION[storename]['count']=self.ZSQLSimpleSearch(query2)[0].count
  844:                 #print "QUERYNEW",self.REQUEST.SESSION[storename]['queryString2']
  845:             
  846:             
  847:             self.REQUEST.SESSION[storename]['rangeStart']=rangeStart
  848:             if limit=="all":
  849:                 self.REQUEST.SESSION[storename]['rangeEnd']=self.REQUEST.SESSION[storename]['count']
  850:             else:
  851:                 self.REQUEST.SESSION[storename]['rangeEnd']=int(rangeStart)+int(limit)
  852:             self.REQUEST.SESSION[storename]['rangeSize']=limit
  853:             self.REQUEST.SESSION[storename]['searchFields']=searchFields
  854:             self.REQUEST.SESSION[storename]['searchFieldsOnly']=searchFieldsOnly
  855: 
  856:         if not NoQuery:
  857: 
  858:             return self.ZSQLQuery(query)
  859:         else:
  860: 
  861:             return query
  862: 
  863:     def ZSQLUniqueQuery(self,value,returns):
  864:         """unique relation"""
  865:         if returns:
  866:             statement="""select %s from %s where %s = '%s' """%(returns[1],returns[0],returns[2],value)
  867:             founds=self.ZSQLSimpleSearch(statement)
  868:             if founds:
  869:                 return getattr(founds[0],returns[1])
  870:             else:
  871:                 return value
  872:         else:
  873:             return value
  874:         
  875:     def ZSQLQuery(self,query):
  876:         """query"""
  877: 
  878:         return self.ZSQLSimpleSearch(query)
  879: 
  880:     
  881:     def ZSQLSearch(self):
  882:         """To be done"""
  883:         rq=self.REQUEST['QUERY_STRING']
  884: 
  885:         querys=rq.split("&")
  886:         
  887:         
  888:         formatfile=self.REQUEST['URL1'] #generisch redirect zur gleichen url
  889:         
  890:         for querytemp in querys:
  891:             query=querytemp.split("=")
  892:             
  893:             
  894: 
  895:             
  896:             try:
  897:                 if query[0].lower()=="-format":
  898:                     formatfile=query[1]
  899:             except:
  900:                 """nothing"""
  901: 
  902:                 
  903:         #print formatfile
  904:         
  905:         
  906:         self.REQUEST.SESSION['query']=string.join(self.REQUEST['QUERY_STRING'].split("&"),",")
  907:         self.REQUEST.SESSION['come_from_search']="yes"
  908:         
  909:         return self.REQUEST.RESPONSE.redirect(urllib.unquote(formatfile))
  910: 
  911:     
  912:     def ZSQLint(self,string):
  913:         try:
  914: 
  915:             return(int(string))
  916:         except:
  917:             return 0
  918: 
  919:     def getZSQLSearchFieldsList(self,storename="foundCount"):
  920:         """get searchfieldList"""
  921:         #print self.REQUEST.SESSION[storename]['searchFields'].keys()
  922:         return  self.REQUEST.SESSION[storename]['searchFieldsOnly'].keys()
  923: 
  924:     def getZSQLSearchFields(self,field,storename="foundCount"):
  925:         """get searchfield"""
  926:         #print "SF",self.REQUEST.SESSION[storename]['searchFields']
  927:         
  928:         return  self.REQUEST.SESSION[storename]['searchFieldsOnly'][field]
  929: 
  930:                                                 
  931:     def nextLink(self,html,storename="foundCount"):
  932:         """nextLink"""
  933: 
  934:         try:
  935:             limit=self.REQUEST.SESSION[storename]['rangeSize']
  936:             if int(limit)==0 :
  937:                 limit="1"
  938:             newRangeStart=int(self.REQUEST.SESSION[storename]['rangeStart'])+int(limit)
  939:         except:
  940:             limit=1
  941:             newRangeStart=0
  942:             
  943:         if newRangeStart>=self.REQUEST.SESSION[storename]['count']:
  944:             #newRangeStart=self.REQUEST.SESSION[storename]['count']-1
  945:             return ""
  946:         
  947:         #create new query string
  948:         
  949:         if self.REQUEST['QUERY_STRING']=="":
  950:             qs=self.REQUEST.SESSION['query']
  951:             
  952:             queries=string.split(qs,",")[0:]
  953:             
  954:             
  955:         else:
  956:             qs=self.REQUEST['QUERY_STRING']
  957:             queries=string.split(qs,"&")[0:]
  958:             
  959:             
  960:             
  961:         newquery=[]
  962: 
  963:         skipFound=0
  964:         
  965:         for query in queries:
  966:                         
  967:             if query[0]=="_" : query="-"+query[1:]
  968:             
  969:             if query.split("=")[0].lower()=="-skip":
  970: 
  971:                 skipFound=1
  972:                 query="-skip=%i"%newRangeStart
  973:             newquery.append(query)
  974: 
  975:         if skipFound==0 :
  976:             query="-skip=%i"%newRangeStart
  977:             newquery.append(query)
  978:                 
  979:         newquerystring=string.join(newquery,"&")
  980: 	return "<a href='%s'>%s</a>"%(self.REQUEST['URL']+"?"+newquerystring,html)
  981: 
  982:             
  983:         
  984:     def prevLink(self,html,storename="foundCount"):
  985:         """prev link"""
  986: 
  987:         try:
  988:             limit=self.REQUEST.SESSION[storename]['rangeSize']
  989:             if int(limit)==0 :
  990:                 limit="1"
  991:             newRangeStart=int(self.REQUEST.SESSION[storename]['rangeStart'])-int(limit)
  992:         except:
  993:             limit=1
  994:             newRangeStart=0
  995:         if newRangeStart <0:
  996:             return ""
  997: 
  998:         #print "limit",limit,newRangeStart,int(self.REQUEST.SESSION[storename]['rangeStart'])
  999:         
 1000:         if newRangeStart<0:
 1001:                 newRangeStart=0
 1002: 
 1003:         #create new query string
 1004:         
 1005:         if self.REQUEST['QUERY_STRING']=="":
 1006:             qs=self.REQUEST.SESSION['query']
 1007:             #qs=re.sub(r'_','-',qs) #aendern fuer query
 1008:             queries=string.split(qs,",")
 1009:             
 1010:             
 1011:         else:
 1012:             qs=self.REQUEST['QUERY_STRING']
 1013:             queries=string.split(qs,"&")
 1014:             
 1015:             
 1016:             
 1017:         newquery=[]
 1018:         
 1019:         skipFound=0
 1020: 
 1021:         for query in queries:
 1022:             #print query.split("=")[0]
 1023: 
 1024:             if query[0]=="_" : query[0]="-"
 1025:             
 1026:             if query.split("=")[0].lower()=="-skip":
 1027:                 #print"HI"
 1028:                 query="-skip=%i"%newRangeStart
 1029:                 skipFound=1
 1030:             newquery.append(query)
 1031: 
 1032:         if skipFound==0 :
 1033:             query="-skip=%i"%newRangeStart
 1034:             newquery.append(query)
 1035:             
 1036:         newquerystring=string.join(newquery,"&")
 1037: 
 1038:         return "<a href='%s'>%s</a>"%(self.REQUEST['URL']+"?"+newquerystring,html)
 1039: 
 1040: 
 1041:     
 1042:     def prevLink_old(self,html):
 1043:         """prev link"""
 1044:         if self.REQUEST['QUERY_STRING']=="":
 1045:             qs=self.REQUEST.SESSION['query']
 1046:         else:
 1047:             qs=self.REQUEST['QUERY_STRING']
 1048:         max=re.search(r'max\=(.*)\,',qs.lower())
 1049:         offset=re.search(r'offset\=(.*)\,',qs.lower())
 1050:         if not offset:
 1051:             offsetnew=0
 1052:         else:
 1053:             offsetnew=int(offset)-max
 1054:             if offsetnew<0:
 1055:                 offsetnew=0
 1056:         queries=string.split(qs,",")
 1057:         newquery=[]
 1058:         if offset:
 1059:             for query in queries:
 1060:                 if query.split("=")[0].lower()=="offset":
 1061:                     query="-offset=%i"%offsetnew
 1062:                 newquery.append(query)
 1063:                 newquerystring=string.join(newquery,"&")
 1064:         else:
 1065:             queries.append("-offset=%i"%offsetnew)
 1066:             newquerystring=string.join(queries,"&")
 1067:         return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
 1068:         
 1069:     def nextLink_old(self,html):
 1070:         """prev link"""
 1071:         if self.REQUEST['QUERY_STRING']=="":
 1072:             qs=self.REQUEST.SESSION['query']
 1073:         else:
 1074:             qs=self.REQUEST['QUERY_STRING']
 1075:         max=re.search(r'max\=(.*)\,',qs.lower())
 1076:     
 1077:         offset=re.search(r'offset\=(.*)\,',qs.lower())
 1078:         if not offset:
 1079:             offsetnew=1
 1080:         else:
 1081:             offsetnew=int(offset)+int(max)
 1082:             if offsetnew<0:
 1083:                 offsetnew=0
 1084:         queries=string.split(qs,",")
 1085:         newquery=[]
 1086:         if offset:
 1087:             for query in queries:
 1088: 
 1089:                 if query.split("=")[0].lower()=="-offset":
 1090:                     query="-offset=%i"%offsetnew
 1091:                 newquery.append(query)
 1092:                 newquerystring=string.join(newquery,"&")
 1093:         else:
 1094:             queries.append("-offset=%i"%offsetnew)
 1095:             newquerystring=string.join(queries,"&")
 1096:         
 1097:         return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
 1098:         
 1099:     
 1100: manage_addZSQLExtendFolderForm=DTMLFile('ZSQLExtendFolderAdd', globals())
 1101: 
 1102: def manage_addZSQLExtendFolder(self, id, title='', label='', description='',
 1103:                      createPublic=0,
 1104:                      createUserF=0,
 1105:                      connection_id=None,
 1106:                      REQUEST=None):
 1107:     """Add a new Folder object with id *id*.
 1108: 
 1109:     If the 'createPublic' and 'createUserF' parameters are set to any true
 1110:     value, an 'index_html' and a 'UserFolder' objects are created respectively
 1111:     in the new folder.
 1112:     """
 1113:     
 1114:     
 1115:     ob=ZSQLExtendFolder()
 1116:     ob.id=str(id)
 1117:     ob.title=title
 1118:     self._setObject(id, ob)
 1119:     ob=self._getOb(id)
 1120:     setattr(ob,'label',label)
 1121:     setattr(ob,'description',description)
 1122:     setattr(ob,'connection_id',connection_id)
 1123:     
 1124:     checkPermission=getSecurityManager().checkPermission
 1125: 
 1126:     if createUserF:
 1127:         if not checkPermission('Add User Folders', ob):
 1128:             raise Unauthorized, (
 1129:                   'You are not authorized to add User Folders.'
 1130:                   )
 1131:         ob.manage_addUserFolder()
 1132: 
 1133:     if createPublic:
 1134:         if not checkPermission('Add Page Templates', ob):
 1135:             raise Unauthorized, (
 1136:                   'You are not authorized to add Page Templates.'
 1137:                   )
 1138:         ob.manage_addProduct['PageTemplates'].manage_addPageTemplate(
 1139:             id='index_html', title='')
 1140: 
 1141:     if REQUEST is not None:
 1142:         return self.manage_main(self, REQUEST, update_menu=1)
 1143: 
 1144: 
 1145: 
 1146: class ZSQLBibliography(Folder,ZSQLExtendFolder):
 1147:     """Bibliography"""
 1148:     meta_type="ZSQLBibliography"
 1149:     def getLabel(self):
 1150:         try:
 1151:             return self.label
 1152:         except:
 1153:             return ""
 1154: 
 1155:     def getDescription(self):
 1156:         try:
 1157:             return self.description
 1158:         except:
 1159:             return ""
 1160:             
 1161:     def changeZSQLBibliographyForm(self):
 1162:         """change folder config"""
 1163:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeZSQLBibliographyForm.zpt')).__of__(self)
 1164:         return pt()
 1165: 
 1166: 
 1167:     def content_html(self):
 1168:         """template fuer content"""
 1169:         
 1170:         try:
 1171:             obj=getattr(self,"ZSQLBibliography_template")
 1172:             return obj()
 1173:         except:
 1174:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ZSQLBibliography_template_standard.zpt')).__of__(self)
 1175:             pt.content_type="text/html"
 1176:             return pt()
 1177: 
 1178:     def changeZSQLBibliography(self,tableName,label,description,connection_id=None,REQUEST=None):
 1179:         """change it"""
 1180:         self.connection_id=connection_id
 1181:         self.tableName=tableName
 1182:         self.label=label
 1183:         self.description=description
 1184:         
 1185:         if REQUEST is not None:
 1186:             return self.manage_main(self, REQUEST)
 1187: 
 1188:     manage_options=Folder.manage_options+(
 1189:         {'label':'Main Config','action':'changeZSQLBibliographyForm'},
 1190:         {'label':'Generate RDF Template','action':'generateRDFTemplate'},
 1191:         {'label':'Generate XML Template','action':'generateXMLTemplate'},
 1192:        )
 1193: 
 1194: 
 1195:     def getFieldLabel(self,fields,field):
 1196:         """get labels"""
 1197:         try:
 1198:             ret =fields[0][field]
 1199:             if ret == "":
 1200:                 return field
 1201:             else:
 1202:                 return ret
 1203:         except:
 1204:             return field
 1205:         
 1206:     def getFieldValue(self,found,field):
 1207:         """get value"""
 1208:         try:
 1209:             ret=getattr(found,field)
 1210:             if ret == "":
 1211:                 return None
 1212:             else:
 1213:                 return ret
 1214:         except:
 1215:             return None
 1216: 
 1217:     def findTagsFromMapping(self,referenceType):
 1218:         """gib hash mit label -> generic zurueck"""
 1219:         self.referencetypes=self.ZopeFind(self.standardMD)
 1220:         bibdata={}
 1221:         retdata={}
 1222:         fieldlist=self.standardMD.fieldList
 1223:         
 1224: 	for referenceTypeF in self.referencetypes:
 1225: 		#print referenceType,referenceTypeF[1].title
 1226: 		if referenceTypeF[1].title == referenceType: 
 1227: 			bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
 1228: 			bibdata['data']=referenceTypeF[1]
 1229: 			self.fields=bibdata[referenceType]
 1230:                         for field in fieldlist:
 1231: 		            if referenceTypeF[1].getValue(field)[0]==None:
 1232: 				retdata[field]=field
 1233: 			    else:
 1234:                                 retdata[field]=referenceTypeF[1].getValue(field)[0]
 1235: 
 1236:         return retdata,fieldlist
 1237:         
 1238:     def findLabelsFromMapping(self,referenceType):
 1239:         """gib hash mit label -> generic zurueck"""
 1240:         self.referencetypes=self.ZopeFind(self.standardMD)
 1241:         bibdata={}
 1242:         retdata={}
 1243:         fieldlist=self.standardMD.fieldList
 1244:         
 1245: 	for referenceTypeF in self.referencetypes:
 1246: 		#print referenceType,referenceTypeF[1].title
 1247: 		if referenceTypeF[1].title == referenceType: 
 1248: 			bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
 1249: 			bibdata['data']=referenceTypeF[1]
 1250: 			self.fields=bibdata[referenceType]
 1251:                         for field in fieldlist:
 1252:                             retdata[field]=referenceTypeF[1].getValue(field)[1]
 1253: 
 1254:         return retdata,fieldlist
 1255: 
 1256:     def createRDFTag(self,tag,content):
 1257:         """create RDF"""
 1258:         if content:
 1259:             ret=""" <cdli:%s>%s</cdli:%s>"""%(tag,content,tag)
 1260:             return ret.decode('latin-1')
 1261:         else:
 1262:             return ""
 1263:     
 1264:     def createIndexTag(self,tag,content):
 1265:         """create tag"""
 1266:         if content:
 1267:             ret="""<%s>%s</%s>"""%(tag,content,tag)
 1268:             return ret
 1269:         else:
 1270:             return ""
 1271:     
 1272:     def getMetaDataXML2(self):
 1273:         """crate index meta"""
 1274: 
 1275:         fn=os.path.splitext(self.REQUEST['fn'])[0]+"."
 1276:         self.REQUEST['fn']=fn
 1277: 
 1278:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','record2.xml')).__of__(self)
 1279:         pt.content_type="text/xml"
 1280:         return pt()
 1281: 
 1282: 
 1283:     def generateRDFTemplate(self,REQUEST=None):
 1284:         """generateRDFtemplate"""
 1285:         zt=ZopePageTemplate('record.rdf')
 1286:         self._setObject('record.rdf',zt)
 1287:         default_content_fn = os.path.join(package_home(globals()),
 1288:                                           'zpt','record.rdf')
 1289:         text = open(default_content_fn).read()
 1290:         zt.pt_edit(text, 'text/xml')
 1291: 
 1292: 
 1293:         if REQUEST is not None:
 1294:             return self.manage_main(self, REQUEST)
 1295: 
 1296:     def generateXMLTemplate(self,REQUEST=None):
 1297:         """generateXMLtemplate"""
 1298:         zt=ZopePageTemplate('record.xml')
 1299:         self._setObject('record.xml',zt)
 1300:         default_content_fn = os.path.join(package_home(globals()),
 1301:                                           'zpt','record.xml')
 1302:         text = open(default_content_fn).read()
 1303:         zt.pt_edit(text, 'text/xml')
 1304: 
 1305: 
 1306:         if REQUEST is not None:
 1307:             return self.manage_main(self, REQUEST)
 1308:     def getMetaDataRDF(self):
 1309:         """crate index meta"""
 1310:         find=self.ZopeFind(self,obj_ids=["record.rdf"])
 1311:         if not find:
 1312:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','record.rdf')).__of__(self)
 1313:             pt.content_type="text/xml"
 1314:             return pt()
 1315:         else:
 1316:             return find[0][1]()
 1317: 
 1318:     def getMetaDataXML(self):
 1319:         """crate index meta"""
 1320:         find=self.ZopeFind(self,obj_ids=["record.xml"])
 1321:         if not find:
 1322:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','record.xml')).__of__(self)
 1323:             pt.content_type="text/xml"
 1324:             return pt()
 1325:         else:
 1326:             return find[0][1]()
 1327: 
 1328: 
 1329:     def getMetaDatasXML(self):
 1330:         """index"""
 1331:         # check if the request's host part was OK
 1332:         http_host = self.REQUEST['HTTP_HOST']
 1333:         host_port = self.REQUEST['SERVER_PORT']
 1334:         fix_host = None
 1335:         if http_host and http_host.rfind(host_port) == -1:
 1336:             print "HTTP_HOST needs fixing!"
 1337:             fix_host = http_host + ":" + host_port
 1338:         
 1339:         ret="""<?xml version="1.0" ?>
 1340: 	             <index>"""
 1341:         for found in self.ZSQLSimpleSearch("select oid from %s limit ALL"%self.tableName):
 1342:             base_url = self.absolute_url()
 1343:             if fix_host:
 1344:                 #print "replacing ", http_host, " by ", fix_host
 1345:                 base_url = string.replace(base_url, http_host, fix_host, 1)
 1346:                 
 1347:             link=base_url+"/"+"record.html?oid=%i"%found.oid
 1348:             metalink=base_url+"/"+"getMetaDataXML?oid=%i"%found.oid
 1349:             
 1350:             ret+="""<resource resourceLink="%s" metaLink="%s"/>\n"""%(link,metalink)
 1351:             
 1352:         return ret+"\n</index>"
 1353: 
 1354:     
 1355: manage_addZSQLBibliographyForm=DTMLFile('ZSQLBibliographyAdd', globals())
 1356: 
 1357: def manage_addZSQLBibliography(self, id, tableName,label,description,title='',
 1358:                      createPublic=0,
 1359:                      createUserF=0,
 1360:                      connection_id=None,
 1361:                      REQUEST=None):
 1362:     """Add a new Folder object with id *id*.
 1363: 
 1364:     If the 'createPublic' and 'createUserF' parameters are set to any true
 1365:     value, an 'index_html' and a 'UserFolder' objects are created respectively
 1366:     in the new folder.
 1367:     """
 1368:     
 1369:     
 1370:     ob=ZSQLBibliography()
 1371:     ob.id=str(id)
 1372:     ob.title=title
 1373:     self._setObject(id, ob)
 1374:     ob=self._getOb(id)
 1375:     setattr(ob,'tableName',tableName)
 1376:     setattr(ob,'label',label)
 1377:     setattr(ob,'description',description)
 1378:     setattr(ob,'connection_id',connection_id)
 1379:     
 1380:     checkPermission=getSecurityManager().checkPermission
 1381: 
 1382:     if createUserF:
 1383:         if not checkPermission('Add User Folders', ob):
 1384:             raise Unauthorized, (
 1385:                   'You are not authorized to add User Folders.'
 1386:                   )
 1387:         ob.manage_addUserFolder()
 1388: 
 1389:     if createPublic:
 1390:         if not checkPermission('Add Page Templates', ob):
 1391:             raise Unauthorized, (
 1392:                   'You are not authorized to add Page Templates.'
 1393:                   )
 1394:         ob.manage_addProduct['PageTemplates'].manage_addPageTemplate(
 1395:             id='index_html', title='')
 1396: 
 1397:     if REQUEST is not None:
 1398:         return self.manage_main(self, REQUEST, update_menu=1)
 1399: 
 1400:     
 1401: 
 1402:     

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