File:  [Repository] / ECHO_content / ECHO_collection.py
Revision 1.83: download - view: text, annotated - select for diffs - revision graph
Wed May 12 15:41:55 2004 UTC (20 years, 1 month ago) by dwinter
Branches: MAIN
CVS tags: HEAD
getFullTextXML and getFullTextsXML added

    1: """New version of the product started February, 8th. Without scientific classification, use content-type for further classification."""
    2: """Echo collection provides the classes for the ECHO content web-site.
    3: 
    4: class ECHO_collection is the basis class for an ECHO collection.
    5: 
    6: class ECHO_resource contains information on ECHO resources (e.g. an Display environment for Metadata
    7: 
    8: class ECHO_externalLink contains information on externalLinks
    9: 
   10: 
   11: """
   12: import string
   13: import re
   14: import os
   15: import OFS.Image
   16: from types import *
   17: from OFS.Image import Image
   18: from Globals import DTMLFile
   19: from OFS.Folder import Folder
   20: from OFS.SimpleItem import SimpleItem
   21: from AccessControl import ClassSecurityInfo
   22: from Globals import InitializeClass
   23: from Globals import DTMLFile
   24: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
   25: from Products.PageTemplates.PageTemplate import PageTemplate
   26: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
   27: from Globals import Persistent, package_home
   28: from Acquisition import Implicit
   29: from ECHO_helpers import displayTypes
   30: try:
   31: 	from psycopg import libpq
   32: except:
   33: 	try:
   34: 		from pyPgSQL import libpq
   35: 	except:
   36: 		print "ECHO_collection: Warning - No libpq imported!"
   37: 		
   38: import xml.dom.minidom
   39: 
   40: import urllib
   41: import xml.dom.minidom
   42: from ECHO_graphicalOverview import javaHandler,javaScriptMain
   43: import ECHO_helpers
   44: 
   45: #List of different types for the graphical linking viewer
   46: viewClassificationListMaster=['view point','area']
   47: 
   48: def checkDiffs(self,metadict):
   49: 	    """check differences"""
   50: 
   51: 	    def NoneToEmpty(obj):
   52: 		    if obj:
   53: 			    return obj
   54: 		    else:
   55: 			    return ""
   56: 	    
   57: 	    diffs={}
   58: 	    tags=self.findTagsFromMapping(self.contentType)
   59: 	    for field in tags[1]:
   60: 		    try:
   61: 			    if (NoneToEmpty(self.getFieldValue(self.getFieldTag(tags,field)))==metadict[self.getFieldTag(tags,field)]):
   62: 				    diffs[self.getFieldTag(tags,field)]=1
   63: 			    else:
   64: 				    print "DIFF",field,self.getFieldValue(self.getFieldTag(tags,field)),metadict[self.getFieldTag(tags,field)]
   65: 				    diffs[self.getFieldTag(tags,field)]=0
   66: 		    except:
   67: 			    diffs[self.getFieldTag(tags,field)]=0
   68: 			    print "EX",field
   69: 	    return diffs
   70:     
   71: def content_html(self,type):
   72:         """template fuer content"""
   73:         #templates = self.ZopeFind(self.aq_parent,obj_ids=[type+"_template"])
   74:         #
   75:         #if templates:
   76:         #    return templates[0][1]()
   77: 
   78:         try:
   79:             obj=getattr(self,type+"_template")
   80:             return obj()
   81:         except:
   82:             pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_%s_template_standard.zpt'%type).__of__(self)
   83:             pt.content_type="text/html"
   84:             return pt()
   85:     
   86: def toList(field):
   87:     """Einzelfeld in Liste umwandeln"""
   88:     if type(field)==StringType:
   89:         return [field]
   90:     else:
   91:         return field
   92:     
   93: def getText(nodelist):
   94: 
   95:     rc = ""
   96:     for node in nodelist:
   97:     	if node.nodeType == node.TEXT_NODE:
   98:            rc = rc + node.data
   99:     return rc
  100: 
  101: 
  102: def sendFile(self, filename, type):
  103:     """sends an object or a local file (in the product) as response"""
  104:     paths = filename.split('/')
  105:     object = self
  106:     # look for an object called filename
  107:     for path in paths:
  108:         if hasattr(object, path):
  109: 	    object = getattr(object, path)
  110: 	else:
  111: 	    object = None
  112: 	    break
  113:     if object:
  114: 	# if the object exists then send it
  115: 	return object.index_html(self.REQUEST.REQUEST, self.REQUEST.RESPONSE)
  116:     else:
  117: 	# send a local file with the given content-type
  118: 	fn = os.path.join(package_home(globals()), filename)
  119: 	self.REQUEST.RESPONSE.setHeader("Content-Type", type)
  120: 	self.REQUEST.RESPONSE.write(file(fn).read())
  121:     return
  122: 
  123: 
  124: def writeMetadata(url,metadict):
  125: 	"""Einlesen der Metadaten und und erstellen des geänderten XML file"""
  126: 
  127: 	try:
  128: 		geturl=""
  129: 		for line in urllib.urlopen(url).readlines():
  130: 			geturl=geturl+line
  131:         
  132:         
  133: 	except:
  134: 		return (None,"Cannot open: "+url)
  135: 
  136: 	try:
  137: 		dom=xml.dom.minidom.parseString(geturl)
  138: 	except:
  139: 		return (None,"Cannot parse: "+url+"<br>"+geturl)
  140: 
  141: 	metanodes=dom.getElementsByTagName('bib')
  142: 
  143: 	if not metanodes:
  144: 		metanodes=dom.getElementsByTagName('archimedes')
  145: 
  146: 	metanode=metanodes[0]
  147: 
  148: 	for metaData in metadict.keys():
  149: 		print metaData,metanode
  150: 		try:
  151: 			nodeOld=metanode.getElementsByTagName(metaData)
  152: 		except:
  153: 			nodeOld=None
  154: 			
  155: 		if nodeOld:
  156: 			metanode.removeChild(nodeOld[0]).unlink()
  157: 		else:
  158: 			# try also old writing rule - instead of _:
  159: 			try:
  160: 				nodeOld=metanode.getElementsByTagName(re.sub('_','-',metaData))
  161: 			except:
  162: 				nodeOld=None
  163: 				
  164: 			if nodeOld:
  165: 				metanode.removeChild(nodeOld[0]).unlink()
  166: 
  167: 		metanodeneu=dom.createElement(metaData)
  168: 		metanodetext=dom.createTextNode(unicode(metadict[metaData],"utf8"))
  169: 		metanodeneu.appendChild(metanodetext)
  170: 		metanode.appendChild(metanodeneu)
  171: 
  172: 	
  173: 	return dom.topxml().encode('utf-8')
  174: 
  175: def readMetadata(url):
  176:     """Methode zum Auslesen der Metadateninformation zu einer Resource
  177:     Vorerst noch Typ bib"""
  178:     
  179:     metadict={}
  180:     try:
  181:         geturl=""
  182:         for line in urllib.urlopen(url).readlines():
  183:             geturl=geturl+line
  184:         
  185:         
  186:     except:
  187:         return (None,"Cannot open: "+url)
  188: 
  189:     try:
  190:         dom=xml.dom.minidom.parseString(geturl)
  191:     except:
  192:         return (None,"Cannot parse: "+url+"<br>"+geturl)
  193: 
  194:     metanode=dom.getElementsByTagName('bib')
  195:     metadict['bib_type']='Book'
  196:     if len(metanode)==0:
  197:         metanode=dom.getElementsByTagName('archimedes')
  198:         metadict['bib_type']='Archimedes'
  199:         #print "HELLO"
  200:         
  201:     if not len(metanode)==0:    
  202:         metacontent=metanode[0].childNodes
  203:     
  204:         try:
  205:             metadict['bib_type']=getText(dom.getElementsByTagName('bib')[0].attributes['type'].childNodes)
  206:         except:
  207:             """nothing"""
  208:         
  209:         for node in metacontent:
  210:             try:
  211:                 metadict[re.sub('-','_',node.tagName.lower())]=getText(node.childNodes)
  212:             except:
  213:                 """nothing"""
  214: 
  215: 
  216:     return metadict,""
  217:     
  218: 
  219: def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs,viewClassification=""):
  220: 
  221:         """Allegemeine Informationen zu einer ECHO Collection"""
  222: 
  223:         self.viewClassification=viewClassification
  224: 
  225:         self.label = label
  226:         self.title=title
  227:         self.description=description
  228:         self.contentType=contentType
  229:         self.responsible=responsible
  230:         self.credits=toList(credits)
  231:         self.weight=weight
  232: 
  233:         coords=[]
  234:         #coordinates of for rectangles
  235: 
  236:         #print "cs", coordstrs
  237:         if coordstrs:
  238:             for coordstr in coordstrs:
  239:                 #print "cs", coordstr
  240:                 try:
  241:                     temco=coordstr.split(",")
  242:                 except:
  243:                     temco=[]
  244:                 #temco.append(angle)
  245:                 coords.append(temco)
  246: 
  247: 
  248:         self.coords=coords[0:]
  249:             
  250: 
  251: class scientificClassification(SimpleItem,Persistent,Implicit):
  252:     """outdated will be deleeted in the next versions: subclass"""
  253:     security=ClassSecurityInfo()
  254:     
  255:     def __init__(self,context,science,practice):
  256:         self.context=context
  257:         self.science=science
  258:         self.practice=practice
  259:         self.id="scientific_Classification"
  260:         
  261:     security.declarePublic('get_context')
  262:     def get_context(self):
  263:         return self.context
  264:     
  265:     security.declarePublic('get_science')
  266:     def get_science(self):
  267:         return self.science
  268:         
  269:     security.declarePublic('get_practice')
  270:     def get_practice(self):
  271:         return self.practice
  272:     
  273:                 
  274: class scientificInformation(Folder,Persistent,Implicit):
  275:     """outdated will be deleted in the next versions: subclass scientificInformation"""
  276:     security=ClassSecurityInfo()
  277:     
  278:     
  279:     
  280:     def __init__(self,source_type,period):
  281: 
  282:         self.id="scientific_Information"
  283:         self.source_type=source_type
  284:         self.period=period
  285:         
  286: 
  287: 
  288:     security.declarePublic('get_source_type')
  289:     def get_source_type(self):
  290:         return self.source_type
  291:     
  292:     security.declarePublic('get_period')
  293:     def get_period(self):
  294:         return self.period
  295: 
  296: class ECHO_layoutTemplate(ZopePageTemplate):
  297:     """Create a layout Template for different purposes"""
  298: 
  299:     meta_type="ECHO_layoutTemplate"
  300: 
  301:     def __init__(self, id, text=None, content_type=None,EchoType=None):
  302:         self.id = str(id)
  303: 
  304: 
  305: 
  306:         self.ZBindings_edit(self._default_bindings)
  307:         if text is None:
  308:             self._default_content_fn = os.path.join(package_home(globals()),
  309:                                                'zpt/ECHO_%s_template_standard.zpt'%EchoType)
  310:             text = open(self._default_content_fn).read()
  311:         self.pt_edit(text, content_type)
  312: 
  313:     
  314:         """change form"""
  315: 
  316: 
  317: def manage_addECHO_layoutTemplateForm(self):
  318:     """Form for adding"""
  319:     pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_layoutTemplate.zpt').__of__(self)
  320:     return pt()
  321: 
  322: from urllib import quote
  323: 
  324: 
  325: def manage_addECHO_layoutTemplate(self, EchoType,title=None,REQUEST=None):
  326:     "Add a Page Template with optional file content."
  327:     if type(EchoType)==StringType:
  328:         EchoTypes=[EchoType]
  329:     else:
  330:         EchoTypes=EchoType
  331:         
  332:     for singleType in EchoTypes:
  333: 
  334:         id = str(singleType)+"_template"
  335:         if REQUEST is None:
  336:             self._setObject(id, ECHO_layoutTemplate(id, text,EchoType=singleType))
  337:             ob = getattr(self, id)
  338:             
  339:             if title:
  340:                 ob.pt_setTitle(title)
  341:             return ob
  342:         else:
  343:             file = REQUEST.form.get('file')
  344:             headers = getattr(file, 'headers', None)
  345:             if headers is None or not file.filename:
  346:                 zpt = ECHO_layoutTemplate(id,EchoType=singleType)
  347:             else:
  348:                 zpt = ECHO_layoutTemplate(id, file, headers.get('content_type'))
  349: 
  350:             self._setObject(id, zpt)
  351:             ob = getattr(self, id)
  352:             if title:
  353:                 ob.pt_setTitle(title)
  354: 
  355:             try:
  356:                 u = self.DestinationURL()
  357:             except AttributeError:
  358:                 u = REQUEST['URL1']
  359: 
  360:             
  361:     REQUEST.RESPONSE.redirect(u+'/manage_main')
  362:     return ''
  363: 
  364: class ECHO_resource(Folder):
  365:     """ECHO Ressource"""
  366:     meta_type='ECHO_resource'
  367: 
  368:     viewClassificationList=viewClassificationListMaster
  369: 
  370:     getSubCols = ECHO_helpers.getSubCols
  371:     def getTitle(self):
  372: 	"""title"""
  373: 	return self.title.encode('utf-8') 
  374: 
  375:     def getLabel(self):
  376: 	"""title"""
  377: 	return self.label.encode('utf-8') 
  378: 
  379:     def content_html(self):
  380:         """template fuer content"""
  381:         return content_html(self,'resource')
  382:     
  383:     def getViewClassification(self):
  384:         if hasattr(self,'viewClassification'):
  385:             return self.viewClassification
  386:         else:
  387:             return ""
  388: 
  389:     def getFullTextXML(self,noredirect=None):
  390: 	    """getFullTextXML"""
  391: 	    try:
  392: 		    fh=urllib.urlopen(self.metalink)
  393: 		    dom=xml.dom.minidom.parse(fh)
  394: 		    texttools=dom.getElementsByTagName('texttool')
  395: 		    text=texttools[0].getElementsByTagName('text')
  396: 		    texturl=getText(text[0].childNodes)
  397: 		    if not noredirect:
  398: 			    self.REQUEST.RESPONSE.redirect(texturl)
  399: 		    else:
  400: 			    return texturl
  401: 	    except:
  402: 		    return None
  403:     
  404:     def getCredits(self):
  405:         """Ausgabe der credits"""
  406:         if self.credits:
  407:             return self.credits
  408:         else:
  409:             return []
  410:     
  411:     def __init__(self,id,link,metalink,title,label,description,contentType,responsible,credits,weight,coords):
  412: 
  413:         self.id = id
  414:         """Festlegen der ID"""
  415:         
  416:         self.label = label
  417:         self.link= link
  418:         self.metalink=metalink
  419:         self.title=title
  420:         self.weight=weight
  421:         self.credits=toList(credits)
  422:         self.description=description
  423:         self.contentType=contentType
  424:         self.responsible=responsible
  425:         
  426:         if coords:
  427:             coordsnew=[ string.split(x,",") for x in coords]
  428:         else:
  429:             coordsnew=[]
  430:         
  431:         self.coords=coordsnew
  432: 
  433: 
  434:     def getCoords(self):
  435: 	    """gibt coordinaten als String zurück und löscht zugleich einträge die keine Koordinaten sind, letzteres zur korrektur der Eingabe der alten version"""
  436: 	    retList=[]
  437: 	    if hasattr(self,'coords'):
  438: 		    for x in self.coords:
  439: 			if len(x)>1:
  440: 				retList.append(string.join(x,","))
  441: 	    return retList
  442: 
  443:     
  444: 
  445:     def getContentType(self):
  446: 	    try:
  447: 		    return self.contentType
  448: 	    except:
  449: 		    return ""
  450: 
  451:     def getCopyrightType(self):
  452: 	    try:
  453: 		    return self.copyrightType
  454: 	    except:
  455: 		    return ""
  456: 
  457:     def getRenderingType(self):
  458: 	    try:
  459: 		    return self.renderingType
  460: 	    except:
  461: 		    return ""
  462: 
  463:     def ECHO_resource_config(self):
  464:         """Main configuration"""
  465: 
  466:         if not hasattr(self,'weight'):
  467:             self.weight=""
  468: 
  469:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource.zpt').__of__(self)
  470:         return pt()
  471:     
  472: 
  473:     def ECHO_resource_config_main(self):
  474:         """Main configuration"""
  475: 
  476:         if not hasattr(self,'weight'):
  477:             self.weight=""
  478: 
  479:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_main.zpt').__of__(self)
  480:         return pt()
  481: 
  482:     def ECHO_resource_config_coords(self):
  483:         """Coords configuration """
  484: 
  485:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_coords.zpt').__of__(self)
  486:         return pt()
  487: 
  488:     def ECHO_resource_config_credits(self):
  489:         """Main configuration"""
  490: 
  491:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_credits.zpt').__of__(self)
  492:         return pt()
  493: 
  494:     def ECHO_resource_config_metadata(self):
  495:         """Main configuration"""
  496: 
  497: 	if (hasattr(self,'metadata')) and not (hasattr(self,'metaDataHash')):
  498: 		self.metaDataHash={}
  499: 		self.contentType=self.bib_type
  500: 		for data in self.metadata:
  501: 			data_neu=re.sub('-','_',data)
  502: 			self.metaDataHash[data_neu]=getattr(self,data)
  503: 			#print data_neu, getattr(self,data)
  504: 		#print self.metaDataHash,self.metadata
  505: 	
  506:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_metadata.zpt').__of__(self)
  507:         return pt()
  508: 
  509: 
  510:     
  511: 
  512:     def changeECHO_resource_main(self,metalink,link,title,label,description,contentType,renderingType,weight,resourceID,RESPONSE=None):
  513:         """Änderung der Properties"""
  514: 	self.resourceID=resourceID
  515: 	self.title=title
  516: 	self.label=label
  517: 	self.description=description
  518: 
  519: 	self.contentType=contentType
  520: 	self.renderingType=renderingType
  521: 	self.weight=weight
  522: 	
  523:         self.link=link
  524:         self.metalink=metalink
  525:         
  526:         if RESPONSE is not None:
  527:             RESPONSE.redirect('manage_main')
  528: 
  529: 
  530:     def changeECHO_resource_coords(self,coords,viewClassification,RESPONSE=None):
  531:         """Änderung der Properties - coords"""
  532: 
  533: 	if type(coords)==StringType:
  534:         	coords=[coords]
  535: 
  536:        	try:        
  537:         	coordsnew=[ string.split(x,",") for x in coords]
  538:         except:
  539: 		coordsnew=[]	
  540: 
  541: 	self.coords=coordsnew[0:]
  542: 	self.viewClassification=viewClassification
  543:         
  544:         if RESPONSE is not None:
  545:             RESPONSE.redirect('manage_main')
  546: 
  547:     def changeECHO_resource_credits(self,credits,responsible,copyrightType,RESPONSE=None):
  548:         """Änderung der Properties"""
  549: 	self.credits=credits
  550: 	self.responsible=responsible
  551: 	self.copyrightType=copyrightType
  552:         
  553:         if RESPONSE is not None:
  554:             RESPONSE.redirect('manage_main')
  555: 
  556: 
  557:     def changeECHO_resource_metadata(self,RESPONSE=None):
  558: 	    """change metadata"""
  559: 	    tags=self.findTagsFromMapping(self.contentType)
  560: 	    self.OSAS_meta={}
  561: 	    for field in tags[1]:
  562: 		    try:
  563: 			    self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)]
  564: 			    self.OSAS_meta[self.getFieldTag(tags,field)]=self.REQUEST.form['OSAS_%s'%self.getFieldTag(tags,field)]
  565: 		    except:
  566: 			    """nothing"""
  567: 
  568: 	    return urllib.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML')).read()
  569: 	    
  570: 	    if RESPONSE is not None:
  571: 		    RESPONSE.redirect('manage_main')
  572: 
  573: 
  574:     def newMetaXML(self):
  575: 	    """new index.meta"""
  576: 	    self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
  577: 	    return writeMetadata(self.metalink,self.OSAS_meta)
  578: 
  579:     
  580:     def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,viewClassification="",coords=None,credits=None,RESPONSE=None):
  581:         """Änderung der Properties"""
  582:         
  583: 	try:        
  584:         	coordsnew=[ string.split(x,",") for x in coords]
  585:         except:
  586: 		coordsnew=[]	
  587:         
  588:         setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
  589: 	self.viewClassification=viewClassification
  590:         self.coords=coordsnew[0:]
  591:         self.link=link
  592:         self.metalink=metalink
  593:         
  594:         if RESPONSE is not None:
  595:             RESPONSE.redirect('manage_main')
  596:             
  597:             
  598:     manage_options = Folder.manage_options+(
  599:         {'label':'Main Config','action':'ECHO_resource_config_main'},
  600: 	{'label':'Change Credits & Copyright','action':'ECHO_resource_config_credits'},
  601: 	{'label':'Change Metadata','action':'ECHO_resource_config_metadata'},
  602: 	{'label':'Change Coords','action':'ECHO_resource_config_coords'},
  603: 	{'label':'Add coords','action':'ECHO_graphicEntry'},
  604:         {'label':'Sync Metadata','action':'ECHO_getResourceMD'},
  605: 	)
  606: 
  607:     def getOverview(self):
  608:         """overview graphics"""
  609:         
  610:         return self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])[0][1]
  611: 
  612:     def ECHO_graphicEntry(self):
  613:         """DO nothing"""
  614:         overview = self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])
  615:         if overview: 
  616:             pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_draw.zpt').__of__(self)
  617:             return pt()
  618:         else:
  619:             return "NO OVERVIEW GRAPHICS"
  620: 
  621:     def ECHO_enterCoords(self,coordstr,angle="",RESPONSE=None):
  622:         """Enter coords"""
  623:         coords=self.coords
  624:         temco=coordstr.split(",")
  625:         temco.append(angle)
  626:         coords.append(temco)
  627:         
  628:         self.coords=coords[0:]
  629: 
  630:         if RESPONSE is not None:
  631:             RESPONSE.redirect('ECHO_graphicEntry')
  632: 
  633: 
  634:     def isDefinedInThisSet(self,fields,field):
  635: 	    """checks if field is defined in fields"""
  636: 	    if (fields[0].has_key(field)) and not (fields[0][field]==""):
  637: 		    return 1
  638: 	    else:
  639: 		  
  640: 		    return 0
  641: 	    
  642:     def getFieldLabel(self,fields,field):
  643:         """get labels"""
  644:         try:
  645:             ret =fields[0][field]
  646:             if ret == "":
  647:                 return field
  648:             else:
  649:                 return ret
  650:         except:
  651:             return field
  652: 
  653: 
  654: 
  655:     def getFieldTag(self,fields,field):
  656:         """get labels"""
  657:         try:
  658:             ret =fields[0][field]
  659:             if ret == "":
  660:                 return field
  661:             else:
  662:                 return ret
  663:         except:
  664:             return field
  665: 
  666:     
  667:         
  668:     def getFieldValue(self,field):
  669:         """get value"""
  670: 	#print field
  671:         try:
  672: 	
  673:             ret=self.metaDataHash[field]
  674:             if ret == "":
  675:                 return None
  676:             else:
  677:                 return ret
  678:         except:
  679:             return None
  680: 
  681:     def findLabelsFromMapping(self,referenceType):
  682:         """gib hash mit label -> generic zurueck"""
  683:         self.referencetypes=self.ZopeFind(self.standardMD)
  684: 	#print "RT",referenceType
  685: 	
  686:         bibdata={}
  687:         retdata={}
  688:         fieldlist=self.standardMD.fieldList
  689:         
  690: 	for referenceTypeF in self.referencetypes:
  691: 		#print referenceTypeF[1].title,referenceType	
  692: 		if referenceTypeF[1].title == referenceType:
  693: 			#print "OK"
  694: 			bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
  695: 			bibdata['data']=referenceTypeF[1]
  696: 			self.fields=bibdata[referenceType]
  697:                         for field in fieldlist:
  698:                             retdata[field]=referenceTypeF[1].getValue(field)[1]
  699: 	#print retdata,fieldlist
  700:         return retdata,fieldlist
  701: 
  702:     def findTagsFromMapping(self,referenceType):
  703:         """gib hash mit label -> generic zurueck"""
  704:         self.referencetypes=self.ZopeFind(self.standardMD)
  705: 	
  706: 	
  707:         bibdata={}
  708:         retdata={}
  709:         fieldlist=self.standardMD.fieldList
  710:         
  711: 	for referenceTypeF in self.referencetypes:
  712: 	
  713: 		if referenceTypeF[1].title == referenceType: 
  714: 			bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
  715: 			bibdata['data']=referenceTypeF[1]
  716: 			self.fields=bibdata[referenceType]
  717:                         for field in fieldlist:
  718:                             retdata[field]=referenceTypeF[1].getValue(field)[0]
  719: 	
  720:         return retdata,fieldlist
  721: 
  722:     
  723:     
  724: 		    
  725:     def ECHO_getResourceMD(self,template="yes"):
  726:         """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource"""
  727:         (metadict, error)=readMetadata(self.metalink)
  728: 
  729: 
  730: 
  731:         if not error=="": #Fehler beim Auslesen des Metafiles
  732: 		return "ERROR:",error
  733: 	
  734: 
  735: 	if not (metadict['bib_type']==self.contentType):
  736: 		self.REQUEST.SESSION['contentStorage']=metadict['bib_type']
  737: 		self.REQUEST.SESSION['contentZope']=self.contentType
  738: 
  739: 		return PageTemplateFile('Products/ECHO_content/zpt/ECHO_getResourceMDErrorContentType.zpt').__of__(self)()
  740: 		
  741:         self.REQUEST.SESSION['metadict']=metadict
  742: 
  743: 	self.REQUEST.SESSION['diffs']=checkDiffs(self,metadict)
  744: 
  745: 		
  746:         if template=="yes":
  747:             pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_resourceMD.zpt').__of__(self)
  748:             return pt()
  749: 
  750: 
  751:     
  752:     
  753:     def ECHO_getMD(self,item):
  754:         """Ausgabe der MD"""
  755:         return getattr(self,item)
  756:         
  757:     def index_html(self):
  758:         """standard page"""
  759:         
  760:         return self.REQUEST.RESPONSE.redirect(self.link)
  761: 
  762:     def generate_label(self):
  763:         """Erzeugt_standard_Label aus Template"""
  764:         pt=getattr(self,"label_template_"+self.bib_type)
  765: 
  766:         return pt()
  767: 
  768: def manage_addECHO_resourceForm(self):
  769:         """Form for adding a ressource"""
  770:         pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_resourceForm.zpt').__of__(self)
  771:         return pt()
  772: 
  773: 
  774: 
  775: def manage_addECHO_resource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None):
  776:     """addaresource"""
  777: 
  778:     newObj=ECHO_resource(id,link,metalink,title,label,description,contentType,responsible,credits,weight,coords)
  779: 
  780:     self._setObject(id,newObj)
  781: 
  782:     if RESPONSE is not None:
  783:         RESPONSE.redirect('manage_main')
  784:  
  785: 
  786: class ECHO_externalLink(Folder):
  787:     """Link zu einer externen Ressource"""
  788:     security=ClassSecurityInfo()
  789:     meta_type='ECHO_externalLink'
  790: 
  791:     def getTitle(self):
  792: 	"""title"""
  793: 	return self.title.encode('utf-8') 
  794: 
  795:     def getLabel(self):
  796: 	"""title"""
  797: 	return self.label.encode('utf-8') 
  798: 
  799:     def content_html(self):
  800:         """template fuer content"""
  801:         return content_html(self,'externalLink')
  802:     
  803:     def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords):
  804: 
  805:         self.id = id
  806:         """Festlegen der ID"""
  807: 
  808:         self.credits=toList(credits)
  809:         self.label = label
  810:         self.link= link
  811:         self.title=title
  812:         self.weight=weight
  813:         self.description=description
  814:         self.contentType=contentType
  815:         self.responsible=responsible
  816:         coordsnew=[ string.split(x,",") for x in coords]
  817:         self.coords=coordsnew
  818: 
  819:     def ECHO_externalLink_config(self):
  820:         """Main configuration"""
  821: 
  822:         if not hasattr(self,'weight'):
  823:             self.weight=""
  824:         if not hasattr(self,'coords'):
  825:             
  826:             self.coords=['']
  827:             #print "G",self.coords
  828: 
  829:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_externalLink.zpt').__of__(self)
  830:         return pt()
  831:     
  832: 
  833:     def changeECHO_externalLink(self,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None):
  834: 
  835:         """Änderung der Properties"""
  836: 	try:
  837: 		coordsnew=[ string.split(x,",") for x in coords]
  838: 	except:
  839: 		coordsnew=[]
  840: 
  841:         setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coords)
  842: 
  843:         self.coords=coordsnew[0:]
  844:         self.link=link
  845:         if RESPONSE is not None:
  846:             RESPONSE.redirect('manage_main')
  847:             
  848:             
  849:     manage_options = Folder.manage_options+(
  850:         {'label':'Main Config','action':'ECHO_externalLink_config'},
  851:         )
  852: 
  853:     def getCredits(self):
  854:         """Ausgabe der credits"""
  855:         if self.credits:
  856:             return self.credits
  857:         else:
  858:             return []
  859:         
  860:     def index_html(self):
  861:         """standard page"""
  862:         
  863:         return self.REQUEST.RESPONSE.redirect(self.link)
  864: 
  865: def manage_addECHO_externalLinkForm(self):
  866:         """Form for external Links"""
  867:         pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_externalLinkForm.zpt').__of__(self)
  868:         return pt()
  869: 
  870: 
  871: def manage_addECHO_externalLink(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None):
  872:     """Add an external Link"""
  873: 
  874:     newObj=ECHO_externalLink(id,link,title,label,description,contentType,responsible,credits,weight,coords)
  875: 
  876:     self._setObject(id,newObj)
  877: 
  878:     if RESPONSE is not None:
  879:         RESPONSE.redirect('manage_main')
  880:  
  881: 
  882: class ECHO_link(ECHO_externalLink):
  883: 	"""external_link"""
  884: 
  885: 	meta_type="ECHO_link"
  886: 	
  887: 
  888: 	def content_html(self):
  889: 		"""template fuer link"""
  890: 		if hasattr(self,"link_template"):
  891: 			return content_html(self,'link')
  892: 		else:
  893: 			return content_html(self,'collection')
  894: 	
  895: def manage_addECHO_linkForm(self):
  896:         """Form for external Links"""
  897:         pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_linkForm.zpt').__of__(self)
  898:         return pt()
  899: 
  900: 
  901: def manage_addECHO_link(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None):
  902:     """Add an external Link"""
  903: 
  904:     newObj=ECHO_link(id,link,title,label,description,contentType,responsible,credits,weight,coords)
  905: 
  906:     self._setObject(id,newObj)
  907: 
  908:     if RESPONSE is not None:
  909:         RESPONSE.redirect('manage_main')
  910: 	
  911: 
  912: class ECHO_collection(Folder, Persistent, Implicit):
  913:     """ECHO Collection"""
  914:     security=ClassSecurityInfo()
  915:     meta_type='ECHO_collection'
  916:     viewClassificationList=viewClassificationListMaster
  917:     displayTypes=displayTypes
  918: 
  919:     def getViewClassification(self):
  920:         if hasattr(self,'viewClassification'):
  921:             return self.viewClassification
  922:         else:
  923:             return ""
  924: 
  925:     def getTitle(self):
  926: 	"""title"""
  927: 	return self.title.encode('utf-8') 
  928: 
  929:     def getLabel(self):
  930: 	"""title"""
  931: 	return self.label.encode('utf-8') 
  932: 
  933:     
  934: 	    
  935:     def createRessourcesFromXMLForm(self):
  936: 	    """form"""
  937: 	    pt=PageTemplateFile('Products/ECHO_content/zpt/createRessourcesFromXMLForm.zpt').__of__(self)
  938: 	    return pt()
  939: 
  940:     def createRessourcesFromXML(self,fileupload):
  941: 	    """read an XML file for generating resources"""
  942: 	    dom=xml.dom.minidom.parse(fileupload)
  943: 	    ret="<h2>Added</h2>"
  944: 	    for resource in dom.getElementsByTagName('resource'):
  945: 		    link=getText(resource.getElementsByTagName('link')[0].childNodes)
  946: 		    label=getText(resource.getElementsByTagName('label')[0].childNodes)
  947: 		    #splitted=link.split("?")[0].split("/")
  948: 		    #id=splitted[len(splitted)-1].encode('ascii')
  949: 		    id=re.sub(" ","_",label).encode('ascii')
  950: 		    
  951: 		    ret+="<p>"+label+"</p>"
  952: 		    manage_addECHO_resource(self,id,label.encode('ascii'),label.encode('ascii'),"","","",link.encode('ascii'),"","")
  953: 	    return ret
  954:     def getImageTag(self):
  955:         """GetTag"""
  956:         try:
  957:             return self.imageTag
  958:         except:
  959:             return ""
  960: 
  961:     def addResource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None):
  962:         """SSS"""
  963:         try:
  964:             manage_addECHO_resource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None)
  965:             return "done"
  966:         except:
  967:             return None
  968: 
  969:     def getSecondaryLink(self):
  970:         """secondary link"""
  971:         try:
  972:             return self.secondaryLink
  973:         except:
  974:             return ""
  975: 
  976:     def getSecondaryLinkTitle(self):
  977:         """secondary link"""
  978:         try:
  979:             return self.secondaryLinkTitle
  980:         except:
  981:             return ""
  982:         
  983:     def getCollectionTreeXML(self):
  984:         """Tree as XML"""
  985: 
  986:         def getCollection(object,depth=0):
  987:             depth+=1
  988:             collections=""
  989:             for entry in object.__dict__.keys():
  990:                 element=getattr(object,entry)
  991:                 try:
  992:                     if element.meta_type in ["ECHO_collection","ECHO_group"]:
  993:                         collections+="<element name=\""+quote(element.title)+"\" url=\""+element.absolute_url()+"\">"
  994:                         collections+=getCollection(element,depth)+"</element>\n"
  995:                 except:
  996:                     """nothing"""
  997:             return collections
  998:         
  999: 	ret="""<?xml version="1.0" encoding="utf-8" ?>"""
 1000:         return ret+"<collection>"+getCollection(self)+"</collection>"
 1001:     
 1002:     def createJavaScript(self):
 1003:         """CreateJava"""
 1004:         ret=javaScriptMain
 1005: 
 1006:         dynamical="\n"
 1007:         for ob in self.getGraphicCoords():
 1008: 	    if ob[4][4] == "":	
 1009: 	        dynamical+="""Coords.push(new Coord('%s', Img, %s));\n"""%(ob[1],ob[0])
 1010: 	    else:
 1011: 		dynamical+="""Coords.push(new Coord('%s', Img, %s));//%s\n"""%(ob[1],ob[0],ob[4][4])
 1012: 		dynamical+="ShowArrow(new getObj('i.%s'),Img,%s);\n"%(ob[1],ob[0])
 1013: 	ret+=javaHandler%dynamical
 1014:         return ret
 1015: 
 1016:     def createJSAreas(self):
 1017:         """new version of createJavaScript"""
 1018:         dynamical="\n"
 1019:         for ob in self.getGraphicCoords():
 1020: 	    if ob[5] == "area":
 1021: 	        dynamical+="""addArea('%s', 'overview', %s, 'area');\n"""%(ob[1],ob[0])
 1022: 	    else:
 1023: 	        dynamical+="""addArea('%s', 'overview', %s, 'arrow');\n"""%(ob[1],ob[0])
 1024:         return dynamical
 1025: 
 1026:     def createMapHead(self):
 1027:         """generate divs"""
 1028:         pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/ECHO_content_map_frag_js')).__of__(self)
 1029:         return pt()
 1030:         
 1031:     def createMapLink(self, ob, text=None):
 1032: 	"""generate map link"""
 1033: 	id = ob[1]
 1034: 	link = ob[1]
 1035: 	if text == None:
 1036: 	    text = ob[2]
 1037: 	tag = '<a id="a.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="_blank"'%(id,id,id,link)
 1038: 	if ob[3].contentType == 'text-popup':
 1039: 	    tag += ' title="%s"'%ob[3].description
 1040: 	tag += ">" + text + "</a>"
 1041: 	return tag
 1042: 
 1043:     def createMapAux(self, ob, arrowsrc="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?dw=15&fn=icons/pfeil"):
 1044: 	"""generate map link image, text and other stuff"""
 1045: 	id = ob[1]
 1046: 	link = ob[1]
 1047: 	vtype = ob[5]
 1048: 	ctype = ob[3].contentType
 1049: 	
 1050: 	tag = '<a id="b.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="_blank">'%(id,id,id,link)
 1051: 	if vtype == "view point":
 1052: 	    rot = ob[4][4]
 1053: 	    tag += '<img id="i.%s" src="%s&rot=%s" border="1" style="position:absolute; top:-100px; left:-100px; border-style:none" />'%(id,arrowsrc,rot)
 1054: 	else:
 1055: 	    tag += '<span id="i.%s" style="position:absolute; top:-100px; left:-100px; border-style:none"'%(id)
 1056: 	    if ctype == "text-popup":
 1057: 		desc = ob[3].description
 1058: 		tag += ' title="%s"'%desc
 1059: 	    tag += ' />'
 1060: 	tag += '</a>'
 1061: 	return tag
 1062: 
 1063:     
 1064:     security.declarePublic('getCreditObject')
 1065:     def getCreditObject(self,name):
 1066:         """credit id to credititem"""
 1067:         try:
 1068:             return getattr(self.partners,name)
 1069:         except:
 1070:             return ""
 1071: 
 1072:     security.declarePublic('ECHO_generateNavBar')
 1073:     def ECHO_generateNavBar(self):
 1074:         """Erzeuge Navigationsbar"""
 1075:         link=""
 1076:         object="self"
 1077:         ret=[]
 1078:         path=self.getPhysicalPath()
 1079:         for element in path:
 1080:             
 1081:            
 1082:             if not element=="":
 1083:                 object+="."+element
 1084:                 
 1085:                 label=eval(object).label
 1086:                 link+="/"+element
 1087:                 if not label=="":
 1088:                     ret.append((label,link))
 1089:         return ret
 1090:     
 1091:     security.declarePublic('ECHO_rerenderLinksMD')
 1092: 
 1093:     def ECHO_rerenderLinksMD(self,obj=None):
 1094:         """Rerender all Links"""
 1095:         if not obj:
 1096:             obj = self
 1097:             
 1098:         entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection'])
 1099: 
 1100:         for entry in entries:
 1101: 		if entry[1].meta_type == 'ECHO_resource':
 1102: 			entry[1].ECHO_getResourceMD(template="no")
 1103: 			#print "rerender",entry[1].getId()
 1104: 		else:
 1105: 		   self.ECHO_rerenderLinksMD(entry[1])
 1106: 
 1107:                 
 1108:                 
 1109:         return "Rerenderd all links to resources in: "+self.title
 1110: 
 1111:     security.declarePublic('ECHO_newViewerLink')
 1112:     
 1113: 
 1114:     def getCoords(self):
 1115:         try:
 1116:             
 1117:             x=  [string.join(x,",") for x in self.coords]  
 1118:             return x
 1119: 
 1120:         except:
 1121: 
 1122:             return []
 1123:         
 1124:     def __init__(self,id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle,secondaryLink,imageTag="",bgcolour=""):
 1125:         #print "CO",coords
 1126: 
 1127:         self.id = id
 1128:         """Festlegen der ID"""
 1129:         self.credits=toList(credits)
 1130:         self.label = label
 1131:         self.title=title
 1132:         self.description=description
 1133:         self.contentType=contentType
 1134:         self.responsible=responsible
 1135:         self.imageTag=imageTag
 1136:         self.weight=weight
 1137:         self.sortfield=sortfield
 1138:         coordsnew=[ string.split(x,",") for x in coords]
 1139:         self.coords=coordsnew
 1140:         self.secondaryLinkTitle=secondaryLinkTitle
 1141:         self.secondaryLink=secondaryLink
 1142: 	self.bgcolour=bgcolour
 1143:         
 1144: 
 1145:     manage_options = Folder.manage_options+(
 1146:         {'label':'Main Config','action':'ECHO_collection_config'},
 1147:         {'label':'Rerender Links','action':'ECHO_rerenderLinksMD'},
 1148:         {'label':'Graphics','action':'ECHO_graphicEntry'},
 1149: 	{'label':'create resources from XML','action':'createRessourcesFromXMLForm'},
 1150: 
 1151:         )
 1152: 
 1153:     def getOverview(self):
 1154:         """overview graphics"""
 1155:         
 1156:         return self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])[0][1]
 1157:     
 1158:     
 1159:     def ECHO_graphicEntry(self):
 1160:         """DO nothing"""
 1161:         overview = self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])
 1162:         
 1163:     
 1164:         if overview:
 1165:             pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_draw.zpt').__of__(self)
 1166:             return pt()
 1167:         else:
 1168:             return "NO OVERVIEW GRAPHICS"
 1169: 
 1170:     def ECHO_enterCoords(self,coordstr,angle="",RESPONSE=None):
 1171:         """Enter coords"""
 1172:         coords=self.coords
 1173:         temco=coordstr.split(",")
 1174:         temco.append(angle)
 1175:         coords.append(temco)
 1176:         self.coords=coords[0:]
 1177: 
 1178:         if RESPONSE is not None:
 1179:             RESPONSE.redirect('ECHO_graphicEntry')
 1180: 
 1181:     
 1182:     security.declarePublic('ECHO_collection_config')
 1183:     def ECHO_collection_config(self):
 1184:         """Main configuration"""
 1185: 
 1186:         if not hasattr(self,'weight'):
 1187:             self.weight=""
 1188: 
 1189:         if not hasattr(self,'sortfield'):
 1190:             self.sortfield="weight"
 1191:   
 1192:         if not hasattr(self,'coords'):
 1193:             self.coords=[]
 1194: 
 1195:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_collection.zpt').__of__(self)
 1196:         return pt()
 1197: 
 1198: 
 1199:     security.declarePublic('changeECHO_collection')
 1200: 
 1201: 
 1202:     def getBgcolour(self):
 1203: 	    """colour"""
 1204: 	    if hasattr(self,'bgcolour') and not (self.bgcolour==""):
 1205: 		    return self.bgcolour
 1206: 	    else:
 1207: 		    return "#dddddd"
 1208: 	    
 1209:     def changeECHO_collection(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",viewClassification=None):
 1210:         """Aenderung der Properties"""
 1211: 
 1212:         self.secondaryLink=secondaryLink
 1213:         self.secondaryLinkTitle=secondaryLinkTitle
 1214:         self.imageTag=imageTag
 1215: 	self.bgcolour=bgcolour
 1216:         self.viewClassification=viewClassification
 1217: 	
 1218:         if coords:
 1219:             coordsnew=[ string.split(x,",") for x in coords]
 1220:             self.coords=coordsnew[0:]
 1221:         else:
 1222:             coordsnew=None
 1223:             self.coords=None
 1224:             
 1225:         setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
 1226: 	try:
 1227: 		self.coords=coordsnew[0:] # HACK fehler in setECHO_collection
 1228:         except:
 1229: 		"""none"""
 1230: 		
 1231:         self.sortfield=sortfield
 1232: 
 1233:         if RESPONSE is not None:
 1234:             RESPONSE.redirect('manage_main')
 1235:             
 1236:     security.declarePublic('index_html')
 1237: 
 1238: 
 1239:     def showOverview(self):
 1240:         """overview"""
 1241:         if 'ECHO_overview.html' in self.__dict__.keys():
 1242:             return getattr(self,'ECHO_overview.html')()
 1243:         pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_content_overview.zpt').__of__(self)
 1244:         return pt()
 1245: 
 1246:     
 1247:     def index_html(self):
 1248:         """standard page"""
 1249:         
 1250:         if 'index.html' in self.__dict__.keys():
 1251:             return getattr(self,'index.html')()
 1252:         
 1253:         elif 'overview' in self.__dict__.keys():
 1254:             return self.showOverview()
 1255:         elif hasattr(self,'collection_index_template'):
 1256:             return self.collection_index_template()    
 1257:         elif hasattr(self,'main_index_template'):
 1258:             return self.main_index_template()    
 1259:         
 1260:         pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_main_index_template_standard.zpt').__of__(self)
 1261:         pt.content_type="text/html"
 1262:         return pt()
 1263: 
 1264:     def content_html(self):
 1265:         """template fuer content"""
 1266:         return content_html(self,'collection')
 1267:     
 1268:     def getCredits(self):
 1269:         """Ausgabe der credits"""
 1270:         if self.credits:
 1271:             return self.credits
 1272:         else:
 1273:             return []
 1274: 
 1275:     def area_img(self):
 1276:         """area image"""
 1277:         return sendFile(self, 'images/red.gif', 'image/gif')
 1278: 
 1279:     def hl_lib_js(self):
 1280:         """javascript"""
 1281:         return sendFile(self, 'js/hl_lib.js', 'text/plain')
 1282: 
 1283:     def js_lib_js(self):
 1284:         """javascript"""
 1285:         return sendFile(self, 'js/js_lib.js', 'text/plain')
 1286: 
 1287:     def getGraphicCoords(self):
 1288:         """Give list of coordinates"""
 1289:         subColTypes=['ECHO_collection','ECHO_resource']
 1290:         ids=[]
 1291:         for entrySearch in self.ZopeFind(self,obj_metatypes=subColTypes):
 1292:             object=entrySearch[1]
 1293:             if hasattr(object,'coords'):
 1294:                 for coordtemp in object.coords:
 1295:                     if len(coordtemp)>3:
 1296:                         coord=coordtemp[0:4]
 1297:                         label=""
 1298: 			vc=""
 1299:                         if hasattr(object,'label') and not object.label=="":
 1300:                             label=object.label
 1301:                         elif hasattr(object,'title') and not object.title=="":
 1302:                             label=object.title
 1303:                         else:
 1304:                             label=object.getId()
 1305: 			if object.viewClassification != "":
 1306: 			    vc=object.viewClassification
 1307: 			else:
 1308: 			    if len(coordtemp) > 4 and coordtemp[4] != "":
 1309: 				vc="view point"
 1310: 			    else:
 1311: 				vc="area"
 1312:                         ids.append([string.join(coord,", "),object.getId(),label,object,coordtemp,vc])
 1313:         return ids
 1314:     
 1315: 
 1316: 
 1317: 
 1318:     getSubCols = ECHO_helpers.getSubCols
 1319:      
 1320:                 
 1321:     
 1322:     
 1323: def manage_addECHO_collectionForm(self):
 1324:         """Add collection form"""
 1325:         pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_collectionForm.zpt').__of__(self)
 1326:         return pt()
 1327: 
 1328: 
 1329: def manage_addECHO_collection(self,id,title,label,description,contentType,responsible,weight,sortfield,coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour=""):
 1330:     """add a echo collection"""
 1331:     
 1332: 
 1333:     newObj=ECHO_collection(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")
 1334: 
 1335:     self._setObject(id,newObj)
 1336: 
 1337:     if RESPONSE is not None:
 1338:         RESPONSE.redirect('manage_main')
 1339: 
 1340: class ECHO_group(ECHO_collection):
 1341: 	"""ECHO Gruppe"""
 1342: 	meta_type="ECHO_group"
 1343: 
 1344: 	manage_options = Folder.manage_options+(
 1345: 		{'label':'Main Config','action':'ECHO_group_config'},
 1346: 		{'label':'Rerender Links','action':'ECHO_rerenderLinksMD'},
 1347: 		{'label':'Graphics','action':'ECHO_graphicEntry'},
 1348: 		)
 1349: 
 1350: 	def index_html(self):
 1351: 		"""standard page"""
 1352: 		displayedObjects=self.ZopeFind(self,obj_metatypes=displayTypes)
 1353: 		#if (len(displayedObjects)==1) and (displayedObjects[0][1].meta_type=="ECHO_collection"): # nur ein Object dann redirect auf dieses Object
 1354: 		#	return self.REQUEST.RESPONSE.redirect(displayedObjects[0][1].absolute_url())
 1355: 		
 1356: 		if 'index.html' in self.__dict__.keys():
 1357: 			return getattr(self,'index.html')()
 1358: 		
 1359: 		elif 'overview' in self.__dict__.keys():
 1360: 			return self.showOverview()
 1361: 		elif hasattr(self,'group_index_template'):
 1362: 			return self.group_index_template()
 1363: 		elif hasattr(self,'collection_index_template'):
 1364: 			return self.collection_index_template()    
 1365: 		elif hasattr(self,'main_index_template'):
 1366: 		    return self.main_index_template()    
 1367: 
 1368: 		pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_main_index_template_standard.zpt').__of__(self)
 1369: 		pt.content_type="text/html"
 1370: 		return pt()
 1371: 
 1372: 	def ECHO_group_config(self):
 1373: 		"""Main configuration"""
 1374: 		
 1375: 		if not hasattr(self,'weight'):
 1376: 			self.weight=""
 1377: 			
 1378: 		if not hasattr(self,'sortfield'):
 1379: 			self.sortfield="weight"
 1380: 				
 1381: 		if not hasattr(self,'coords'):
 1382: 			self.coords=[]
 1383: 
 1384: 		pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_group.zpt').__of__(self)
 1385: 		return pt()
 1386: 
 1387: 	def changeECHO_group(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",logo=""):
 1388: 		"""Änderung der Properties"""
 1389: 
 1390: 		self.secondaryLink=secondaryLink
 1391: 		self.secondaryLinkTitle=secondaryLinkTitle
 1392: 		self.imageTag=imageTag
 1393: 		self.bgcolour=bgcolour
 1394:                 self.logo=logo
 1395:                 
 1396: 		if coords:
 1397: 		    coordsnew=[ string.split(x,",") for x in coords]
 1398: 		    self.coords=coordsnew[0:]
 1399: 		else:
 1400: 		    coordsnew=None
 1401: 		    self.coords=None
 1402: 
 1403: 		setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
 1404: 
 1405: 
 1406: 
 1407: 		self.sortfield=sortfield
 1408: 
 1409: 		if RESPONSE is not None:
 1410: 		    RESPONSE.redirect('manage_main')
 1411: 
 1412: 	def getLogo(self):    
 1413: 		"""logo ausgeben"""
 1414:                 try:
 1415:                     return self.logo
 1416:                 except:
 1417:                     return "ECHO_groups"
 1418: 
 1419: 	def content_html(self):
 1420: 		"""template fuer content"""
 1421: 		return content_html(self,'group')
 1422:     
 1423: 
 1424: 
 1425: def manage_addECHO_groupForm(self):
 1426:         """Add group form"""
 1427:         pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_groupForm.zpt').__of__(self)
 1428:         return pt()
 1429: 
 1430: 
 1431: def manage_addECHO_group(self,id,title,label,description,contentType,responsible,weight,sortfield,coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour="",logo=""):
 1432:     """add a echo group"""
 1433:     
 1434: 
 1435:     newObj=ECHO_group(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")
 1436: 
 1437:     setattr(newObj,'logo',logo)
 1438:     self._setObject(id,newObj)
 1439:     
 1440:     if RESPONSE is not None:
 1441:         RESPONSE.redirect('manage_main')
 1442: 
 1443: 
 1444: 	
 1445: class ECHO_root(Folder,Persistent,Implicit):
 1446:     """ECHO Root Folder"""
 1447:     meta_type="ECHO_root"
 1448: 
 1449:     
 1450:     def getImageTag(self):
 1451: 	    """needed by main_template"""
 1452: 	    return ""
 1453:     secondaryLink="" #needed by main_template
 1454:     secondaryLinkTitle="" #needed by main_template
 1455:     
 1456:     def getBgcolour(self):
 1457: 	"""hack"""
 1458: 	return "#dddddd"
 1459: 
 1460:     def contentTypeSelector_HTML(self,selected=None):
 1461:         """give type selector"""
 1462:         if not selected:
 1463:             retStr="<option selected>\n"
 1464:         else:
 1465:             retStr="<option>\n"
 1466:             
 1467:         try: # erste version contentTypes exists
 1468:             for contentType in self.ZopeFind(self.contentTypes,obj_metatypes=["ECHO_contentType","OSAS_MetadataMapping"]):
 1469:                 if selected and (contentType[0]==selected):
 1470:                     retStr+="""<option selected value="%s">%s\n"""%(contentType[0],contentType[0])
 1471:                 else:                
 1472:                     retStr+="""<option value="%s">%s\n"""%(contentType[0],contentType[0])
 1473:         except:
 1474: 		try:
 1475: 			for contentType in self.ZopeFind(self.standardMD,obj_metatypes=["OSAS_MetadataMapping"]):
 1476: 				if selected and (contentType[0]==selected):
 1477: 					retStr+="""<option selected value="%s">%s\n"""%(contentType[0],contentType[0])
 1478: 				else:                
 1479: 					retStr+="""<option value="%s">%s\n"""%(contentType[0],contentType[0])
 1480: 		except:
 1481: 			"""nothing"""
 1482: 			    
 1483: 	return retStr
 1484: 
 1485:     def renderingTypeSelector_HTML(self,selected=None):
 1486:          """give type selector"""
 1487: 	 if not selected:
 1488: 		 retStr="<option selected>\n"
 1489: 	 else:
 1490: 		 retStr="<option>\n"
 1491: 		 
 1492: 	 try: # erste version renderingTypes exists
 1493: 		 for renderingType in self.ZopeFind(self.renderingTypes,obj_metatypes=["ECHO_renderingType"]):
 1494: 			 if selected and (renderingType[0]==selected):
 1495: 				 retStr+="""<option selected value="%s">%s\n"""%(renderingType[0],renderingType[0])
 1496: 			 else:                
 1497: 				 retStr+="""<option value="%s">%s\n"""%(renderingType[0],renderingType[0])
 1498: 	 except:
 1499: 		 """nothing"""
 1500: 	 return retStr
 1501: 
 1502:     def renderingTypeSelector_HTML(self,selected=None):
 1503:          """give type selector"""
 1504: 	 if not selected:
 1505: 		 retStr="<option selected>\n"
 1506: 	 else:
 1507: 		 retStr="<option>\n"
 1508: 		 
 1509: 	 try: # erste version renderingTypes exists
 1510: 		 for renderingType in self.ZopeFind(self.renderingTypes,obj_metatypes=["ECHO_renderingType"]):
 1511: 			 if selected and (renderingType[0]==selected):
 1512: 				 retStr+="""<option selected value="%s">%s\n"""%(renderingType[0],renderingType[0])
 1513: 			 else:                
 1514: 				 retStr+="""<option value="%s">%s\n"""%(renderingType[0],renderingType[0])
 1515: 	 except:
 1516: 		 """nothing"""
 1517: 	 return retStr
 1518: 
 1519: 
 1520:     def copyrightTypeSelector_HTML(self,selected=None):
 1521:          """give type selector"""
 1522: 	 if not selected:
 1523: 		 retStr="<option selected>\n"
 1524: 	 else:
 1525: 		 retStr="<option>\n"
 1526: 		 
 1527: 	 try: # erste version copyrightTypes exists
 1528: 		 for copyrightType in self.ZopeFind(self.copyrightTypes,obj_metatypes=["ECHO_copyrightType"]):
 1529: 			 if selected and (copyrightType[0]==selected):
 1530: 				 retStr+="""<option selected value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
 1531: 			 else:                
 1532: 				 retStr+="""<option value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
 1533: 	 except:
 1534: 		 """nothing"""
 1535: 	 return retStr
 1536: 
 1537:             
 1538:     def patchContentType(self,obj=None):
 1539:         """austauschen content_type with contentType (patch bei umstieg von alter Version)"""
 1540:     
 1541: 
 1542:         if not obj:
 1543:             obj = self
 1544:             
 1545:         entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_externalLink','ECHO_pageTemplate'])
 1546: 
 1547:         for entry in entries:
 1548:                 setattr(entry[1],'contentType',entry[1].content_type)
 1549:                 #entry[1].contentType == entry[1].content_type
 1550: 
 1551:                 if entry[1].meta_type == 'ECHO_collection':
 1552:                     entry[1].patchContentType(entry[1])    
 1553: 
 1554:                 
 1555:         return "changed all contenttypes in: "+self.title
 1556: 
 1557: 
 1558:     def patchViewClassification(self,obj=None):
 1559:         """setze viewClassification heuristisch"""
 1560: 
 1561: 	def checkIfArrow(obj):
 1562: 		if hasattr(obj,'coords'):
 1563: 			for coordtemp in obj.coords:
 1564: 				#print obj.title,len(coordtemp)
 1565: 				if (len(coordtemp)>4) and not (coordtemp[4]==''):
 1566: 					return 4
 1567: 			return None
 1568: 		return None
 1569: 	
 1570:         if not obj:
 1571:             obj = self
 1572:             
 1573:         entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_group'])
 1574: 
 1575:         for entry in entries:
 1576: 		
 1577: 		if checkIfArrow(entry[1]):
 1578: 			setattr(entry[1],'viewClassification','view point')
 1579: 		else:
 1580: 			setattr(entry[1],'viewClassification','area')
 1581: 
 1582:                 #entry[1].contentType == entry[1].content_type
 1583: 
 1584:                 if entry[1].meta_type in ['ECHO_collection','ECHO_group']:
 1585:                     entry[1].patchViewClassification(entry[1])    
 1586: 
 1587:                 
 1588:         return "changed all contenttypes in: "+self.title
 1589: 
 1590:     def ECHO_newViewerLink(self,obj=None):
 1591:         """change links (:86 faellt weg)"""
 1592: 
 1593:         if not obj:
 1594:             obj = self
 1595:             
 1596:         entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection'])
 1597: 
 1598:         for entry in entries:
 1599:                 
 1600:                 if entry[1].meta_type == 'ECHO_resource':
 1601:                     
 1602:                     entry[1].link=re.sub('\:86','',entry[1].link)
 1603: 
 1604:                 else:
 1605:                     
 1606:                     entry[1].ECHO_newViewerLink(entry[1])
 1607:                 
 1608:         return "Rerenderd all links to resources in: "+self.title
 1609: 
 1610:     def __init__(self,id,title):
 1611:         """init"""
 1612:         self.id = id
 1613:         self.title=title
 1614: 
 1615:     def deleteSpace(self,str):
 1616:         """delete space at the end of a line"""
 1617:         if str[len(str)-1]==" ":
 1618:             return str[0:len(str)-1]
 1619:         else:
 1620:             return str
 1621:         
 1622:     
 1623: 
 1624:     # zusaetliche methoden fuer das vlp muessen in ein eigenes produkt
 1625: 
 1626:     def formatAscii(self,str,url=None):
 1627:         """ersetze ascii umbrueche durch <br>"""
 1628:         #url=None
 1629:         if url:
 1630:             
 1631:             retStr=""
 1632:             words=str.split("\n")
 1633:             
 1634:             for word in words:
 1635:                 strUrl=url%word
 1636:                 #print "str",strUrl
 1637:                 retStr+="""<a href="%s">%s</a><br/>"""%(strUrl,word)
 1638:             str=retStr
 1639:         if str:
 1640:             return re.sub(r"[\n]","<br/>",str)
 1641:         else:
 1642:             return ""
 1643:         
 1644:     def link2html(self,str):
 1645:         """link2html fuer VLP muss hier noch raus"""
 1646:         if str:
 1647:             #print str
 1648:             str=re.sub("\&","&amp;",str)
 1649:             dom=xml.dom.minidom.parseString("<?xml version='1.0' ?><txt>"+str+"</txt>")
 1650:             links=dom.getElementsByTagName("link")
 1651:             
 1652:             #print "link",links
 1653:             for link in links:
 1654:                 link.tagName="a"
 1655:                 ref=link.getAttribute("ref")
 1656:                 if self.checkRef(ref):
 1657:                     link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)
 1658: 
 1659:             return dom.toxml('utf-8')
 1660:         return ""
 1661: 
 1662: 
 1663:     def checkRef(self,ref):
 1664:         dbs={'vl_literature':'AND CD LIKE \'%lise%\'','vl_technology':'','vl_people':''}
 1665:         res=None
 1666:         for db in dbs.keys():
 1667:             #print ref,"select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db])
 1668: 
 1669:             res=res or self.search(var=str("select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db])))
 1670:         return res
 1671:                                     
 1672:     #Ende Methode fuer vlp
 1673: 
 1674:     def PgQuoteString(self,string):
 1675:         """Quote string"""
 1676:         #print "PG",string
 1677:         return libpq.PgQuoteString(string)
 1678:         
 1679:     def getPartners(self):
 1680:         """Get list of Partners. Presently only from a subfolder partners"""
 1681:                     
 1682:         return [ item[1] for item in self.partners.ZopeFind(self.partners,obj_metatypes=['ECHO_partner'])]
 1683:                 
 1684:                 
 1685:                    
 1686: 
 1687:     
 1688:     def getPartnersXML(self):
 1689:         """partner liste als xml""" 
 1690:         partners=self.getPartners()
 1691:         ret="""<?xml version="1.0" encoding="utf-8" ?>
 1692: 	<partners>"""
 1693:         
 1694: 	for partner in partners:
 1695:             ret+="""<partner id="%s" title="%s"/>\n"""%(partner.getId(),unicode(partner.title,'utf-8','replace'))
 1696: 
 1697:         return ret+"\n</partners>"
 1698:     
 1699:     def getCollectionTree(self):
 1700:         """get the collection tree (list of triples (parent,child, depth)"""
 1701: 
 1702:         def getCollection(object,depth=0):
 1703:             depth+=1
 1704:             collections=[]
 1705:             for entry in object.__dict__.keys():
 1706:                 element=getattr(object,entry)
 1707:                 try:
 1708:                     if element.meta_type=="ECHO_collection":
 1709:                         collections.append((object,element,depth))
 1710:                         collections+=getCollection(element,depth)
 1711:                 except:
 1712:                     """nothing"""
 1713:             return collections
 1714:         
 1715: 
 1716:         return getCollection(self)
 1717:     
 1718:     def getCollectionTreeIds(self):
 1719:         """Show the IDs of the Tree"""
 1720:         ret=[]
 1721:         for collection in self.getCollectionTree():
 1722:             ret.append((collection[0].getId(),collection[1].getId(),collection[2]))
 1723:         return ret
 1724: 
 1725:     def getResourcesHTML(self,viewerType=None,filter=None):
 1726: 	    """gebe all ressourcen aus"""
 1727: 
 1728: 	    def sortHTML(x,y):
 1729: 		    return cmp(x[1].title,y[1].title)
 1730: 	    
 1731: 	    ret="""<html><body><h2>Resources in ECHO</h3>"""
 1732: 	    
 1733: 	    resources = self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
 1734: 	    ret+="""<h3>Found %i resources</h3>"""%len(resources)
 1735: 	    resources.sort(sortHTML)
 1736: 	    for resource in resources:
 1737: 		    echo_url=resource[1].absolute_url()
 1738: 		    
 1739: 		    if hasattr(resource[1],'title'):
 1740: 			    title=resource[1].title
 1741: 		    else:
 1742: 			    title="None"
 1743: 		    if filter:
 1744: 			    if re.search(filter,title):
 1745: 				    ret+="""\n<p><a href="%s">%s</a></p>"""%(echo_url,title)
 1746: 		    else:
 1747: 			    ret+="""\n<p><a href="%s">%s</a></p>"""%(echo_url,title)
 1748: 
 1749: 	    ret +="""\n</body></html>"""
 1750: 	    
 1751: 	    #self.REQUEST.RESPONSE.setHeader("Content-Type", "text/html")
 1752: 	    #self.REQUEST.RESPONSE.write(ret)
 1753:     	    return ret
 1754:     
 1755:     def getResourcesXML(self,viewerType=None,filter=None):
 1756: 	    """gebe all ressourcen aus"""
 1757: 	    ret="""<?xml version="1.0" ?>
 1758: 	             <index>"""
 1759: 	    for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
 1760: 
 1761: 		    echo_url=resource[1].absolute_url()
 1762: 		    if hasattr(resource[1],'link'):
 1763: 			    viewer_url=resource[1].link
 1764: 		    else:
 1765: 			    viewer_url="NO URL"
 1766: 		    if filter:
 1767: 			    if re.search(filter,viewer_url):
 1768: 				    ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
 1769: 		    else:
 1770: 			    ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
 1771: 	    ret +="""\n</index>"""
 1772: 	    
 1773: 	    self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
 1774: 	    self.REQUEST.RESPONSE.write(ret)
 1775: 
 1776:     def getFullTextsXML(self,viewerType=None,filter=None):
 1777: 	    """gebe all ressourcen aus"""
 1778: 	    ret="""<?xml version="1.0" ?>
 1779: 	             <index>"""
 1780: 	    for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
 1781: 
 1782: 		    echo_url=resource[1].absolute_url()
 1783: 		    if resource[1].getFullTextXML(noredirect="yes"):
 1784: 			    if hasattr(resource[1],'link'):
 1785: 				    viewer_url=echo_url+"/getFullTextXML"
 1786: 			    else:
 1787: 				    viewer_url="NO URL"
 1788: 			    if filter:
 1789: 				    if re.search(filter,viewer_url):
 1790: 					    ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
 1791: 			    else:
 1792: 				    ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
 1793: 	    ret +="""\n</index>"""
 1794: 	    print ret
 1795: 	    
 1796: 	    self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
 1797: 	    self.REQUEST.RESPONSE.write(ret)
 1798:         
 1799: def manage_addECHO_root(self,id,title,RESPONSE=None):
 1800:     """Add an ECHO_root"""
 1801:     self._setObject(id,ECHO_root(id,title))
 1802:     
 1803:     if RESPONSE is not None:
 1804:         RESPONSE.redirect('manage_main')
 1805: 
 1806: def manage_addECHO_rootForm(self):
 1807:         """Nothing yet"""
 1808:         pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_root.zpt').__of__(self)
 1809:         return pt()
 1810:  
 1811: class ECHO_partner(Image,Persistent):
 1812:     """ECHO Partner"""
 1813: 
 1814:     meta_type="ECHO_partner"
 1815: 
 1816:     def __init__(self, id, title,url, file, content_type='', precondition=''):
 1817:         self.__name__=id
 1818:         self.title=title
 1819:         self.url=url
 1820:         self.precondition=precondition
 1821: 
 1822:         data, size = self._read_data(file)
 1823:         content_type=self._get_content_type(file, data, id, content_type)
 1824:         self.update_data(data, content_type, size)
 1825: 
 1826:     manage_options = Image.manage_options+(
 1827:         {'label':'Partner Information','action':'ECHO_partner_config'},
 1828:         )
 1829: 
 1830:     def changeECHO_partner(self,url,RESPONSE=None):
 1831:         """Change main information"""
 1832:         self.url=url
 1833:         if RESPONSE is not None:
 1834:             RESPONSE.redirect('manage_main')
 1835:             
 1836:             
 1837: 
 1838:     def ECHO_partner_config(self):
 1839:         """Main configuration"""
 1840:         if not hasattr(self,'url'):
 1841:             self.url=""
 1842:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_partner.zpt').__of__(self)
 1843:         return pt()
 1844: 
 1845:         
 1846: manage_addECHO_partnerForm=DTMLFile('dtml/ECHO_partnerAdd',globals(),
 1847:                              Kind='ECHO_partner',kind='ECHO_partner')
 1848: 
 1849: 
 1850: 
 1851: def manage_addECHO_partner(self, id, file,url, title='', precondition='', content_type='',
 1852:                     REQUEST=None):
 1853:     """
 1854:     Add a new ECHO_partner object.
 1855: 
 1856:     Creates a new ECHO_partner object 'id' with the contents of 'file'.
 1857:     Based on Image.manage_addImage
 1858:     """
 1859: 
 1860:     id=str(id)
 1861:     title=str(title)
 1862:     content_type=str(content_type)
 1863:     precondition=str(precondition)
 1864: 
 1865:     id, title = OFS.Image.cookId(id, title, file)
 1866: 
 1867:     self=self.this()
 1868: 
 1869:     # First, we create the image without data:
 1870:     self._setObject(id, ECHO_partner(id,title,url,'',content_type, precondition))
 1871: 
 1872:     # Now we "upload" the data.  By doing this in two steps, we
 1873:     # can use a database trick to make the upload more efficient.
 1874:     if file:
 1875:         self._getOb(id).manage_upload(file)
 1876:     if content_type:
 1877:         self._getOb(id).content_type=content_type
 1878: 
 1879:     if REQUEST is not None:
 1880:         try:    url=self.DestinationURL()
 1881:         except: url=REQUEST['URL1']
 1882:         REQUEST.RESPONSE.redirect('%s/manage_main' % url)
 1883:     return id
 1884: 
 1885: 

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