Annotation of ECHO_content/ECHO_collection.py, revision 1.100

1.13      dwinter     1: """New version of the product started February, 8th. Without scientific classification, use content-type for further classification."""
1.1       casties     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
1.14      dwinter    13: import re
1.29      dwinter    14: import os
1.1       casties    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
1.85      dwinter    22: from AccessControl.User import UserFolder
1.1       casties    23: from Globals import InitializeClass
                     24: from Globals import DTMLFile
1.84      dwinter    25: import Globals
1.1       casties    26: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
                     27: from Products.PageTemplates.PageTemplate import PageTemplate
1.29      dwinter    28: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
                     29: from Globals import Persistent, package_home
1.1       casties    30: from Acquisition import Implicit
1.52      dwinter    31: from ECHO_helpers import displayTypes
1.84      dwinter    32: 
                     33: 
1.50      dwinter    34: try:
                     35:    from psycopg import libpq
                     36: except:
                     37:    try:
                     38:        from pyPgSQL import libpq
                     39:    except:
                     40:        print "ECHO_collection: Warning - No libpq imported!"
                     41:        
1.14      dwinter    42: import xml.dom.minidom
1.1       casties    43: 
                     44: import urllib
                     45: import xml.dom.minidom
1.23      dwinter    46: from ECHO_graphicalOverview import javaHandler,javaScriptMain
1.41      dwinter    47: import ECHO_helpers
1.1       casties    48: 
1.98      dwinter    49: def getCopyrightsFromForm(argv):
                     50:    medias={}
                     51:    partners={}
                     52:    copyrights={}
                     53:    
                     54:    copyrightsFinal=[]
                     55:    for arg in argv.keys():
                     56:        print arg
                     57:        if arg[0:5]=='media':
                     58:            nm=int(arg[5:])
                     59:            medias[nm]=argv[arg]
                     60:        elif arg[0:5]=='partn':
                     61:            nm=int(arg[5:])
                     62:            partners[nm]=argv[arg]
                     63:        elif arg[0:5]=='copyr':
                     64:            nm=int(arg[5:])
                     65:            copyrights[nm]=argv[arg]
                     66: 
                     67:    copyrightsList=[(medias[nm],partners[nm],copyrights[nm]) for nm in medias.keys()]
                     68:    for copyright in copyrightsList:
                     69:        if not copyright[0]=='':
                     70:            copyrightsFinal.append(copyright)
                     71:    return copyrightsFinal
                     72: 
1.6       dwinter    73: #List of different types for the graphical linking viewer
                     74: viewClassificationListMaster=['view point','area']
                     75: 
1.98      dwinter    76: 
1.73      dwinter    77: def checkDiffs(self,metadict):
                     78:        """check differences"""
                     79: 
1.90      dwinter    80:        
                     81: 
                     82:     
1.73      dwinter    83:        def NoneToEmpty(obj):
                     84:            if obj:
                     85:                return obj
                     86:            else:
                     87:                return ""
1.90      dwinter    88: 
                     89:        
1.73      dwinter    90:        
                     91:        diffs={}
1.90      dwinter    92:        
1.73      dwinter    93:        tags=self.findTagsFromMapping(self.contentType)
1.90      dwinter    94:        self.referencetypes=tags[2]
                     95:        self.fields=tags[3]
                     96:        
                     97:     
1.73      dwinter    98:        for field in tags[1]:
                     99:            try:
                    100:                if (NoneToEmpty(self.getFieldValue(self.getFieldTag(tags,field)))==metadict[self.getFieldTag(tags,field)]):
                    101:                    diffs[self.getFieldTag(tags,field)]=1
                    102:                else:
1.91      dwinter   103:                    
1.73      dwinter   104:                    diffs[self.getFieldTag(tags,field)]=0
                    105:            except:
                    106:                diffs[self.getFieldTag(tags,field)]=0
1.91      dwinter   107:                
1.73      dwinter   108:        return diffs
                    109:     
1.29      dwinter   110: def content_html(self,type):
                    111:         """template fuer content"""
                    112:         #templates = self.ZopeFind(self.aq_parent,obj_ids=[type+"_template"])
                    113:         #
                    114:         #if templates:
                    115:         #    return templates[0][1]()
1.97      dwinter   116:    
                    117:         if hasattr(self,type+"_template"):
1.29      dwinter   118:             obj=getattr(self,type+"_template")
                    119:             return obj()
1.96      dwinter   120:         else:
1.29      dwinter   121:             pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_%s_template_standard.zpt'%type).__of__(self)
                    122:             pt.content_type="text/html"
                    123:             return pt()
                    124:     
1.1       casties   125: def toList(field):
                    126:     """Einzelfeld in Liste umwandeln"""
                    127:     if type(field)==StringType:
                    128:         return [field]
                    129:     else:
                    130:         return field
                    131:     
                    132: def getText(nodelist):
                    133: 
                    134:     rc = ""
                    135:     for node in nodelist:
                    136:        if node.nodeType == node.TEXT_NODE:
                    137:            rc = rc + node.data
                    138:     return rc
                    139: 
                    140: 
1.65      casties   141: def sendFile(self, filename, type):
                    142:     """sends an object or a local file (in the product) as response"""
                    143:     paths = filename.split('/')
                    144:     object = self
                    145:     # look for an object called filename
                    146:     for path in paths:
                    147:         if hasattr(object, path):
                    148:        object = getattr(object, path)
                    149:    else:
                    150:        object = None
                    151:        break
                    152:     if object:
                    153:    # if the object exists then send it
1.76      casties   154:    return object.index_html(self.REQUEST.REQUEST, self.REQUEST.RESPONSE)
1.65      casties   155:     else:
                    156:    # send a local file with the given content-type
                    157:    fn = os.path.join(package_home(globals()), filename)
                    158:    self.REQUEST.RESPONSE.setHeader("Content-Type", type)
                    159:    self.REQUEST.RESPONSE.write(file(fn).read())
                    160:     return
                    161: 
1.87      casties   162: class BrowserCheck:
                    163:     """check the browsers request to find out the browser type"""
                    164:     
                    165:     def __init__(self, zope):
                    166:    self.ua = zope.REQUEST.get_header("HTTP_USER_AGENT")
                    167:    self.isN4 = (string.find(self.ua, 'Mozilla/4.') > -1) and (string.find(self.ua, 'MSIE') < 0)
                    168:    self.isIE = string.find(self.ua, 'MSIE') > -1
                    169:    self.nav = self.ua[string.find(self.ua, '('):]
                    170:    ie = string.split(self.nav, "; ")[1]
                    171:    if string.find(ie, "MSIE") > -1:
                    172:        self.versIE = string.split(ie, " ")[1]
                    173:    self.isMac = string.find(self.ua, 'Macintosh') > -1
                    174:    self.isWin = string.find(self.ua, 'Windows') > -1
                    175:    self.isIEWin = self.isIE and self.isWin
                    176:    self.isIEMac = self.isIE and self.isMac
                    177: 
1.65      casties   178: 
1.73      dwinter   179: def writeMetadata(url,metadict):
1.87      casties   180:    """Einlesen der Metadaten und und erstellen des geaenderten XML file"""
1.73      dwinter   181: 
                    182:    try:
                    183:        geturl=""
                    184:        for line in urllib.urlopen(url).readlines():
                    185:            geturl=geturl+line
                    186:         
                    187:         
                    188:    except:
                    189:        return (None,"Cannot open: "+url)
                    190: 
                    191:    try:
                    192:        dom=xml.dom.minidom.parseString(geturl)
                    193:    except:
                    194:        return (None,"Cannot parse: "+url+"<br>"+geturl)
                    195: 
                    196:    metanodes=dom.getElementsByTagName('bib')
                    197: 
                    198:    if not metanodes:
                    199:        metanodes=dom.getElementsByTagName('archimedes')
                    200: 
                    201:    metanode=metanodes[0]
                    202: 
                    203:    for metaData in metadict.keys():
1.90      dwinter   204:        
1.73      dwinter   205:        try:
                    206:            nodeOld=metanode.getElementsByTagName(metaData)
                    207:        except:
                    208:            nodeOld=None
                    209:            
                    210:        if nodeOld:
                    211:            metanode.removeChild(nodeOld[0]).unlink()
                    212:        else:
                    213:            # try also old writing rule - instead of _:
                    214:            try:
                    215:                nodeOld=metanode.getElementsByTagName(re.sub('_','-',metaData))
                    216:            except:
                    217:                nodeOld=None
                    218:                
                    219:            if nodeOld:
                    220:                metanode.removeChild(nodeOld[0]).unlink()
                    221: 
                    222:        metanodeneu=dom.createElement(metaData)
1.90      dwinter   223:        try:
                    224:            metanodetext=dom.createTextNode(unicode(metadict[metaData],"utf-8"))
                    225:        except:
                    226:            metanodetext=dom.createTextNode(metadict[metaData].encode('utf-8'))
1.73      dwinter   227:        metanodeneu.appendChild(metanodetext)
                    228:        metanode.appendChild(metanodeneu)
                    229: 
                    230:    
1.90      dwinter   231:    return dom.toxml().encode('utf-8')
1.73      dwinter   232: 
1.90      dwinter   233:    
                    234:    
1.1       casties   235: def readMetadata(url):
1.73      dwinter   236:     """Methode zum Auslesen der Metadateninformation zu einer Resource
1.1       casties   237:     Vorerst noch Typ bib"""
                    238:     
                    239:     metadict={}
                    240:     try:
                    241:         geturl=""
                    242:         for line in urllib.urlopen(url).readlines():
                    243:             geturl=geturl+line
                    244:         
                    245:         
                    246:     except:
                    247:         return (None,"Cannot open: "+url)
                    248: 
                    249:     try:
                    250:         dom=xml.dom.minidom.parseString(geturl)
                    251:     except:
                    252:         return (None,"Cannot parse: "+url+"<br>"+geturl)
                    253: 
                    254:     metanode=dom.getElementsByTagName('bib')
                    255:     metadict['bib_type']='Book'
                    256:     if len(metanode)==0:
                    257:         metanode=dom.getElementsByTagName('archimedes')
                    258:         metadict['bib_type']='Archimedes'
1.91      dwinter   259:         
1.1       casties   260:         
                    261:     if not len(metanode)==0:    
                    262:         metacontent=metanode[0].childNodes
                    263:     
                    264:         try:
                    265:             metadict['bib_type']=getText(dom.getElementsByTagName('bib')[0].attributes['type'].childNodes)
                    266:         except:
                    267:             """nothing"""
                    268:         
                    269:         for node in metacontent:
                    270:             try:
1.95      dwinter   271:            #print urllib.unquote(getText(node.childNodes)),getText(node.childNodes)
1.91      dwinter   272:            metadict[re.sub('-','_',node.tagName.lower())]=urllib.unquote(getText(node.childNodes))
1.1       casties   273:             except:
                    274:                 """nothing"""
                    275: 
1.73      dwinter   276: 
1.1       casties   277:     return metadict,""
                    278:     
                    279: 
1.27      dwinter   280: def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs,viewClassification=""):
1.1       casties   281: 
                    282:         """Allegemeine Informationen zu einer ECHO Collection"""
                    283: 
1.6       dwinter   284:         self.viewClassification=viewClassification
                    285: 
1.1       casties   286:         self.label = label
                    287:         self.title=title
                    288:         self.description=description
1.27      dwinter   289:         self.contentType=contentType
1.1       casties   290:         self.responsible=responsible
                    291:         self.credits=toList(credits)
                    292:         self.weight=weight
                    293: 
1.5       dwinter   294:         coords=[]
1.1       casties   295:         #coordinates of for rectangles
1.10      dwinter   296: 
1.91      dwinter   297:         
1.9       dwinter   298:         if coordstrs:
                    299:             for coordstr in coordstrs:
1.91      dwinter   300:         
1.9       dwinter   301:                 try:
                    302:                     temco=coordstr.split(",")
                    303:                 except:
                    304:                     temco=[]
1.91      dwinter   305:         
1.9       dwinter   306:                 coords.append(temco)
                    307: 
1.10      dwinter   308: 
1.5       dwinter   309:         self.coords=coords[0:]
1.1       casties   310:             
1.98      dwinter   311: class ECHO_copyright(Folder):
                    312:    """Copyright informationen"""
                    313:    meta_type="ECHO_copyright"
                    314:    
                    315:    
                    316:    
                    317:    def __init__(self,id,title,copyrights):
                    318:        """init"""
                    319:        self.title=title
                    320:        self.id=id
                    321:        self.copyrights=copyrights[0:]
                    322: 
                    323:    def getCopyrights(self):
                    324:        """return coyprights"""
                    325:        return self.copyrights
                    326:            
                    327:    manage_options = Folder.manage_options+(
                    328:        {'label':'Main Config','action':'ECHO_copyright_configForm'},
                    329:        )
                    330: 
                    331:    def ECHO_copyright_configForm(self):
                    332:        """change form"""
                    333:        pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_copyright').__of__(self)
                    334:        pt.content_type="text/html"
                    335:        return pt()
                    336: 
                    337:    def ECHO_copyright_config(self,title,RESPONSE):
                    338:        """change"""
                    339:        self.title=title
                    340:        self.copyrights=[]
                    341:        self.copyrights=getCopyrightsFromForm(self.REQUEST.form)[0:]
1.1       casties   342: 
1.98      dwinter   343:        if RESPONSE is not None:
                    344:            RESPONSE.redirect('manage_main')
                    345: 
                    346:        
                    347: def manage_addECHO_copyrightForm(self):
                    348:     """Form for adding"""
                    349:     pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_copyright.zpt').__of__(self)
                    350:     return pt()
1.1       casties   351: 
1.98      dwinter   352: def manage_addECHO_copyright(self, id,title,RESPONSE=None):
                    353:    """add the copyright"""
1.1       casties   354: 
1.98      dwinter   355:    meta_type="ECHO_copyright"
                    356:    
                    357:    #first generate copyrights as list of tripels (mediaType,partner,copyrightType)
                    358:    
                    359:        
1.1       casties   360: 
1.98      dwinter   361:    self._setObject(id, ECHO_copyright(id, title,getCopyrightsFromForm(self.REQUEST.form)))
1.1       casties   362: 
1.98      dwinter   363:    if RESPONSE is not None:
                    364:        RESPONSE.redirect('manage_main')
                    365:    
1.29      dwinter   366: class ECHO_layoutTemplate(ZopePageTemplate):
                    367:     """Create a layout Template for different purposes"""
                    368: 
                    369:     meta_type="ECHO_layoutTemplate"
                    370: 
                    371:     def __init__(self, id, text=None, content_type=None,EchoType=None):
                    372:         self.id = str(id)
                    373: 
                    374: 
                    375: 
                    376:         self.ZBindings_edit(self._default_bindings)
                    377:         if text is None:
                    378:             self._default_content_fn = os.path.join(package_home(globals()),
                    379:                                                'zpt/ECHO_%s_template_standard.zpt'%EchoType)
                    380:             text = open(self._default_content_fn).read()
                    381:         self.pt_edit(text, content_type)
                    382: 
1.32      dwinter   383:     
1.29      dwinter   384:         """change form"""
                    385: 
                    386: 
                    387: def manage_addECHO_layoutTemplateForm(self):
                    388:     """Form for adding"""
                    389:     pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_layoutTemplate.zpt').__of__(self)
                    390:     return pt()
                    391: 
                    392: from urllib import quote
                    393: 
                    394: 
                    395: def manage_addECHO_layoutTemplate(self, EchoType,title=None,REQUEST=None):
                    396:     "Add a Page Template with optional file content."
                    397:     if type(EchoType)==StringType:
                    398:         EchoTypes=[EchoType]
                    399:     else:
                    400:         EchoTypes=EchoType
                    401:         
                    402:     for singleType in EchoTypes:
1.32      dwinter   403: 
1.29      dwinter   404:         id = str(singleType)+"_template"
                    405:         if REQUEST is None:
                    406:             self._setObject(id, ECHO_layoutTemplate(id, text,EchoType=singleType))
                    407:             ob = getattr(self, id)
                    408:             
                    409:             if title:
                    410:                 ob.pt_setTitle(title)
                    411:             return ob
                    412:         else:
                    413:             file = REQUEST.form.get('file')
                    414:             headers = getattr(file, 'headers', None)
                    415:             if headers is None or not file.filename:
                    416:                 zpt = ECHO_layoutTemplate(id,EchoType=singleType)
                    417:             else:
                    418:                 zpt = ECHO_layoutTemplate(id, file, headers.get('content_type'))
                    419: 
                    420:             self._setObject(id, zpt)
                    421:             ob = getattr(self, id)
                    422:             if title:
                    423:                 ob.pt_setTitle(title)
                    424: 
                    425:             try:
                    426:                 u = self.DestinationURL()
                    427:             except AttributeError:
                    428:                 u = REQUEST['URL1']
                    429: 
                    430:             
                    431:     REQUEST.RESPONSE.redirect(u+'/manage_main')
                    432:     return ''
1.1       casties   433: 
1.90      dwinter   434: class ECHO_resource(Folder,Persistent):
1.1       casties   435:     """ECHO Ressource"""
                    436:     meta_type='ECHO_resource'
                    437: 
1.6       dwinter   438:     viewClassificationList=viewClassificationListMaster
1.1       casties   439: 
1.41      dwinter   440:     getSubCols = ECHO_helpers.getSubCols
1.98      dwinter   441: 
                    442:     
1.48      dwinter   443:     def getTitle(self):
                    444:    """title"""
                    445:    return self.title.encode('utf-8') 
                    446: 
                    447:     def getLabel(self):
                    448:    """title"""
                    449:    return self.label.encode('utf-8') 
1.41      dwinter   450: 
1.29      dwinter   451:     def content_html(self):
                    452:         """template fuer content"""
                    453:         return content_html(self,'resource')
                    454:     
1.6       dwinter   455:     def getViewClassification(self):
                    456:         if hasattr(self,'viewClassification'):
                    457:             return self.viewClassification
                    458:         else:
                    459:             return ""
1.83      dwinter   460: 
                    461:     def getFullTextXML(self,noredirect=None):
1.90      dwinter   462:        """getFullTextXML; gives the FullText as an XML Document, and <error></error> if somthing goes wrong."""
1.83      dwinter   463:        try:
                    464:            fh=urllib.urlopen(self.metalink)
                    465:            dom=xml.dom.minidom.parse(fh)
                    466:            texttools=dom.getElementsByTagName('texttool')
                    467:            text=texttools[0].getElementsByTagName('text')
                    468:            texturl=getText(text[0].childNodes)
1.90      dwinter   469:            self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
1.83      dwinter   470:            if not noredirect:
                    471:                self.REQUEST.RESPONSE.redirect(texturl)
                    472:            else:
                    473:                return texturl
                    474:        except:
1.90      dwinter   475: 
                    476:            if not noredirect:
                    477:                self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
                    478:                self.REQUEST.RESPONSE.write("<error>no fulltext available</error>")
                    479:            else:
                    480:                return "<error>no fulltext available</error>"
1.92      dwinter   481: 
                    482:     def getCopyright(self):
                    483:        """gib link auf copyright notiz aus"""
1.97      dwinter   484:        if hasattr(self,'copyrightType') and hasattr(self.copyrightTypes,self.copyrightType):
                    485:            obj=getattr(self.copyrightTypes,self.copyrightType)
1.94      dwinter   486:        else:
                    487:            obj=getattr(self.copyrightTypes,'generic')
                    488: 
                    489:        label=obj.label
                    490:        link="copyrightTypes/"+obj.getId()+'/copyright.html'
                    491:        
1.95      dwinter   492:        return """<a target="_blank" href="%s">%s</a>"""%(link,label)
1.83      dwinter   493:     
1.9       dwinter   494:     def getCredits(self):
                    495:         """Ausgabe der credits"""
                    496:         if self.credits:
                    497:             return self.credits
                    498:         else:
                    499:             return []
1.6       dwinter   500:     
1.94      dwinter   501:     def __init__(self,id,link,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords):
1.1       casties   502: 
                    503:         self.id = id
                    504:         """Festlegen der ID"""
                    505:         
                    506:         self.label = label
                    507:         self.link= link
                    508:         self.metalink=metalink
                    509:         self.title=title
                    510:         self.weight=weight
                    511:         self.credits=toList(credits)
                    512:         self.description=description
1.27      dwinter   513:         self.contentType=contentType
1.94      dwinter   514:    self.copyrightType=copyrightType
1.90      dwinter   515:    self.renderingType=renderingType
1.1       casties   516:         self.responsible=responsible
1.90      dwinter   517:         self.resourceID=resourceID
                    518:    
1.9       dwinter   519:         if coords:
                    520:             coordsnew=[ string.split(x,",") for x in coords]
                    521:         else:
                    522:             coordsnew=[]
                    523:         
1.1       casties   524:         self.coords=coordsnew
                    525: 
1.3       dwinter   526: 
                    527:     def getCoords(self):
1.73      dwinter   528:        """gibt coordinaten als String zurück und löscht zugleich einträge die keine Koordinaten sind, letzteres zur korrektur der Eingabe der alten version"""
                    529:        retList=[]
                    530:        if hasattr(self,'coords'):
                    531:            for x in self.coords:
                    532:            if len(x)>1:
                    533:                retList.append(string.join(x,","))
                    534:        return retList
                    535: 
                    536:     
1.3       dwinter   537: 
1.49      dwinter   538:     def getContentType(self):
                    539:        try:
                    540:            return self.contentType
                    541:        except:
                    542:            return ""
1.1       casties   543: 
1.73      dwinter   544:     def getCopyrightType(self):
                    545:        try:
                    546:            return self.copyrightType
                    547:        except:
                    548:            return ""
                    549: 
                    550:     def getRenderingType(self):
                    551:        try:
                    552:            return self.renderingType
                    553:        except:
                    554:            return ""
                    555: 
1.1       casties   556:     def ECHO_resource_config(self):
                    557:         """Main configuration"""
                    558: 
                    559:         if not hasattr(self,'weight'):
                    560:             self.weight=""
                    561: 
1.13      dwinter   562:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource.zpt').__of__(self)
1.1       casties   563:         return pt()
                    564:     
                    565: 
1.73      dwinter   566:     def ECHO_resource_config_main(self):
                    567:         """Main configuration"""
                    568: 
                    569:         if not hasattr(self,'weight'):
                    570:             self.weight=""
                    571: 
                    572:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_main.zpt').__of__(self)
                    573:         return pt()
                    574: 
                    575:     def ECHO_resource_config_coords(self):
                    576:         """Coords configuration """
                    577: 
                    578:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_coords.zpt').__of__(self)
                    579:         return pt()
                    580: 
                    581:     def ECHO_resource_config_credits(self):
                    582:         """Main configuration"""
                    583: 
                    584:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_credits.zpt').__of__(self)
                    585:         return pt()
                    586: 
                    587:     def ECHO_resource_config_metadata(self):
                    588:         """Main configuration"""
                    589: 
                    590:    if (hasattr(self,'metadata')) and not (hasattr(self,'metaDataHash')):
                    591:        self.metaDataHash={}
                    592:        self.contentType=self.bib_type
                    593:        for data in self.metadata:
                    594:            data_neu=re.sub('-','_',data)
                    595:            self.metaDataHash[data_neu]=getattr(self,data)
1.91      dwinter   596: 
1.73      dwinter   597:    
                    598:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_metadata.zpt').__of__(self)
                    599:         return pt()
                    600: 
                    601: 
                    602:     
                    603: 
                    604:     def changeECHO_resource_main(self,metalink,link,title,label,description,contentType,renderingType,weight,resourceID,RESPONSE=None):
                    605:         """Änderung der Properties"""
                    606:    self.resourceID=resourceID
                    607:    self.title=title
                    608:    self.label=label
                    609:    self.description=description
                    610: 
                    611:    self.contentType=contentType
                    612:    self.renderingType=renderingType
                    613:    self.weight=weight
                    614:    
                    615:         self.link=link
                    616:         self.metalink=metalink
                    617:         
                    618:         if RESPONSE is not None:
                    619:             RESPONSE.redirect('manage_main')
                    620: 
                    621: 
                    622:     def changeECHO_resource_coords(self,coords,viewClassification,RESPONSE=None):
                    623:         """Änderung der Properties - coords"""
                    624: 
1.78      dwinter   625:    if type(coords)==StringType:
                    626:            coords=[coords]
                    627: 
1.79      casties   628:            try:        
1.73      dwinter   629:            coordsnew=[ string.split(x,",") for x in coords]
                    630:         except:
                    631:        coordsnew=[]    
                    632: 
                    633:    self.coords=coordsnew[0:]
                    634:    self.viewClassification=viewClassification
                    635:         
                    636:         if RESPONSE is not None:
                    637:             RESPONSE.redirect('manage_main')
                    638: 
                    639:     def changeECHO_resource_credits(self,credits,responsible,copyrightType,RESPONSE=None):
                    640:         """Änderung der Properties"""
                    641:    self.credits=credits
                    642:    self.responsible=responsible
                    643:    self.copyrightType=copyrightType
                    644:         
                    645:         if RESPONSE is not None:
                    646:             RESPONSE.redirect('manage_main')
                    647: 
                    648: 
1.90      dwinter   649:     def changeECHO_resource_metadata_local(self,RESPONSE=None):
                    650:        """change metadata"""
                    651:        tags=self.findTagsFromMapping(self.contentType)
                    652:        for field in tags[1]:
                    653:            self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)]
                    654:            
                    655: 
                    656:                
                    657:        if RESPONSE is not None:
                    658:            RESPONSE.redirect('manage_main')
                    659: 
1.73      dwinter   660:     def changeECHO_resource_metadata(self,RESPONSE=None):
                    661:        """change metadata"""
                    662:        tags=self.findTagsFromMapping(self.contentType)
1.75      dwinter   663:        self.OSAS_meta={}
1.73      dwinter   664:        for field in tags[1]:
                    665:            try:
                    666:                self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)]
                    667:                self.OSAS_meta[self.getFieldTag(tags,field)]=self.REQUEST.form['OSAS_%s'%self.getFieldTag(tags,field)]
                    668:            except:
                    669:                """nothing"""
                    670: 
1.75      dwinter   671:        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()
1.73      dwinter   672:        
                    673:        if RESPONSE is not None:
                    674:            RESPONSE.redirect('manage_main')
                    675: 
                    676: 
1.90      dwinter   677:     def getMDValue(self,fieldName):
                    678:        return self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType)
                    679:                     
1.73      dwinter   680:     def newMetaXML(self):
1.75      dwinter   681:        """new index.meta"""
1.73      dwinter   682:        self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
                    683:        return writeMetadata(self.metalink,self.OSAS_meta)
                    684: 
1.90      dwinter   685: 
                    686:     def getMetaDataXML(self):
                    687:        """prints out metadata as stored in the echo environment, format is the index.meta format"""
                    688:        self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
                    689:        return writeMetadata(self.metalink,self.metaDataHash)
                    690: 
1.27      dwinter   691:     def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,viewClassification="",coords=None,credits=None,RESPONSE=None):
1.1       casties   692:         """Änderung der Properties"""
                    693:         
1.33      dwinter   694:    try:        
                    695:            coordsnew=[ string.split(x,",") for x in coords]
                    696:         except:
                    697:        coordsnew=[]    
1.21      dwinter   698:         
1.27      dwinter   699:         setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
1.62      dwinter   700:    self.viewClassification=viewClassification
1.21      dwinter   701:         self.coords=coordsnew[0:]
1.1       casties   702:         self.link=link
                    703:         self.metalink=metalink
                    704:         
                    705:         if RESPONSE is not None:
                    706:             RESPONSE.redirect('manage_main')
                    707:             
                    708:             
                    709:     manage_options = Folder.manage_options+(
1.73      dwinter   710:         {'label':'Main Config','action':'ECHO_resource_config_main'},
                    711:    {'label':'Change Metadata','action':'ECHO_resource_config_metadata'},
                    712:    {'label':'Change Coords','action':'ECHO_resource_config_coords'},
                    713:    {'label':'Add coords','action':'ECHO_graphicEntry'},
                    714:         {'label':'Sync Metadata','action':'ECHO_getResourceMD'},
                    715:    )
1.1       casties   716: 
1.20      dwinter   717:     def getOverview(self):
                    718:         """overview graphics"""
                    719:         
                    720:         return self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])[0][1]
                    721: 
1.3       dwinter   722:     def ECHO_graphicEntry(self):
                    723:         """DO nothing"""
1.20      dwinter   724:         overview = self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])
1.19      dwinter   725:         if overview: 
1.13      dwinter   726:             pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_draw.zpt').__of__(self)
1.3       dwinter   727:             return pt()
                    728:         else:
                    729:             return "NO OVERVIEW GRAPHICS"
                    730: 
1.4       dwinter   731:     def ECHO_enterCoords(self,coordstr,angle="",RESPONSE=None):
1.3       dwinter   732:         """Enter coords"""
                    733:         coords=self.coords
1.4       dwinter   734:         temco=coordstr.split(",")
                    735:         temco.append(angle)
                    736:         coords.append(temco)
                    737:         
1.3       dwinter   738:         self.coords=coords[0:]
1.13      dwinter   739: 
1.3       dwinter   740:         if RESPONSE is not None:
                    741:             RESPONSE.redirect('ECHO_graphicEntry')
                    742: 
1.73      dwinter   743: 
                    744:     def isDefinedInThisSet(self,fields,field):
                    745:        """checks if field is defined in fields"""
                    746:        if (fields[0].has_key(field)) and not (fields[0][field]==""):
                    747:            return 1
                    748:        else:
                    749:          
                    750:            return 0
                    751:        
                    752:     def getFieldLabel(self,fields,field):
                    753:         """get labels"""
                    754:         try:
                    755:             ret =fields[0][field]
                    756:             if ret == "":
                    757:                 return field
                    758:             else:
                    759:                 return ret
                    760:         except:
                    761:             return field
                    762: 
                    763: 
                    764: 
                    765:     def getFieldTag(self,fields,field):
                    766:         """get labels"""
                    767:         try:
                    768:             ret =fields[0][field]
                    769:             if ret == "":
                    770:                 return field
                    771:             else:
                    772:                 return ret
                    773:         except:
                    774:             return field
                    775: 
                    776:     
                    777:         
                    778:     def getFieldValue(self,field):
                    779:         """get value"""
1.91      dwinter   780:    
1.73      dwinter   781:         try:
                    782:    
                    783:             ret=self.metaDataHash[field]
                    784:             if ret == "":
                    785:                 return None
                    786:             else:
                    787:                 return ret
                    788:         except:
                    789:             return None
                    790: 
1.90      dwinter   791:     def getMetaDataHash(self):
                    792:        """md hash"""
                    793:        return self.metaDataHash
                    794:     
                    795:     def setFieldValue(self,field,value):
                    796:         """get value"""
1.91      dwinter   797:    
1.90      dwinter   798:    if not hasattr(self,'metaDataHash'):
                    799:        setattr(self,'metaDataHash',{})
                    800:    self.metaDataHash[field]=value[0:]
                    801:    
                    802: 
                    803: 
1.73      dwinter   804:     def findLabelsFromMapping(self,referenceType):
                    805:         """gib hash mit label -> generic zurueck"""
1.90      dwinter   806:    #return {},[]
                    807: 
                    808:         temp=self.ZopeFind(self.standardMD)
                    809: 
                    810:    if referenceType=="":
                    811:        referenceType="book"
                    812:    
1.73      dwinter   813:    
                    814:         bibdata={}
                    815:         retdata={}
1.90      dwinter   816:    fields=[]
1.73      dwinter   817:         fieldlist=self.standardMD.fieldList
                    818:         
                    819:    for referenceTypeF in self.referencetypes:
1.91      dwinter   820: 
1.86      dwinter   821:        if referenceTypeF[1].title.lower() == referenceType.lower():
1.91      dwinter   822: 
1.86      dwinter   823:            try:
                    824:                bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
                    825:                referenceType=referenceTypeF[1].title
                    826:            except:
                    827:                bibdata[referenceType]=referenceTypeF[1].fields
                    828:        
                    829: 
1.73      dwinter   830:            bibdata['data']=referenceTypeF[1]
1.90      dwinter   831:            fields=bibdata[referenceType]
1.73      dwinter   832:                         for field in fieldlist:
                    833:                             retdata[field]=referenceTypeF[1].getValue(field)[1]
1.91      dwinter   834: 
1.90      dwinter   835:         return retdata,fieldlist,temp,fields
1.73      dwinter   836: 
                    837:     def findTagsFromMapping(self,referenceType):
                    838:         """gib hash mit label -> generic zurueck"""
1.90      dwinter   839:    
                    840: 
                    841:    if referenceType=="":
                    842:        referenceType="book"
                    843:    
                    844:    temp =  self.ZopeFind(self.standardMD)[0:]
                    845: 
                    846:    
                    847:    #self.referencetypes=temp[0:]
                    848:    
1.73      dwinter   849:    
                    850:    
1.90      dwinter   851: 
                    852:    
                    853: 
1.73      dwinter   854:         bibdata={}
                    855:         retdata={}
                    856:         fieldlist=self.standardMD.fieldList
                    857:         
1.90      dwinter   858:    for referenceTypeF in temp:
1.73      dwinter   859:    
1.86      dwinter   860:        if referenceTypeF[1].title.lower() == referenceType.lower(): 
                    861:            try:
                    862:                bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
                    863:                referenceType=referenceTypeF[1].title
                    864:            except:
                    865:                bibdata[referenceType]=referenceTypeF[1].fields
1.73      dwinter   866:            bibdata['data']=referenceTypeF[1]
1.90      dwinter   867:            fields=bibdata[referenceType]
1.73      dwinter   868:                         for field in fieldlist:
                    869:                             retdata[field]=referenceTypeF[1].getValue(field)[0]
                    870:    
1.90      dwinter   871:         return retdata,fieldlist,temp,fields
1.73      dwinter   872: 
                    873:     
1.90      dwinter   874: 
                    875:     def copyIndex_meta2echo_resource(self,RESPONSE=None):
                    876:        """copy MD von Index_meta to the echo_resource"""
1.95      dwinter   877:        
1.90      dwinter   878:        (metadict, error)=readMetadata(self.metalink)
                    879:        
                    880:        self.metaDataHash={}
                    881:        if not error=="": #Fehler beim Auslesen des Metafiles
                    882:            return "ERROR:",error
                    883:        fields=self.findTagsFromMapping(self.contentType)
1.95      dwinter   884:        
1.90      dwinter   885:        #fields=self.findLabelsFromMapping(self.contentType)
                    886:        for field in fields[1]:
1.95      dwinter   887:            
1.90      dwinter   888:            if self.isDefinedInThisSet(fields,field):
1.95      dwinter   889:                #print urllib.unquote(metadict.get(self.getFieldTag(fields,field),''))
1.90      dwinter   890:                self.setFieldValue(self.getFieldTag(fields,field),metadict.get(self.getFieldTag(fields,field),''))
                    891: 
                    892:        
                    893:        
                    894:        if RESPONSE:
                    895:            return RESPONSE.redirect('manage_main')
                    896:        
1.1       casties   897:     def ECHO_getResourceMD(self,template="yes"):
                    898:         """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource"""
                    899:         (metadict, error)=readMetadata(self.metalink)
                    900: 
1.90      dwinter   901:    
1.1       casties   902: 
                    903:         if not error=="": #Fehler beim Auslesen des Metafiles
1.73      dwinter   904:        return "ERROR:",error
                    905:    
                    906: 
1.86      dwinter   907:    if not (metadict['bib_type'].lower()==self.contentType.lower()):
1.73      dwinter   908:        self.REQUEST.SESSION['contentStorage']=metadict['bib_type']
                    909:        self.REQUEST.SESSION['contentZope']=self.contentType
1.1       casties   910: 
1.73      dwinter   911:        return PageTemplateFile('Products/ECHO_content/zpt/ECHO_getResourceMDErrorContentType.zpt').__of__(self)()
1.1       casties   912: 
1.90      dwinter   913:    self.REQUEST.SESSION['metadict']=metadict
                    914: 
                    915:    
                    916:    
                    917:    self.REQUEST.SESSION['diffs']=checkDiffs(self,self.REQUEST.SESSION['metadict'])
                    918:    
1.13      dwinter   919: 
1.73      dwinter   920:        
1.1       casties   921:         if template=="yes":
1.90      dwinter   922:        pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_resourceMD.zpt').__of__(self)
                    923:        return pt()
1.73      dwinter   924: 
1.90      dwinter   925:    
1.73      dwinter   926: 
                    927:     
1.1       casties   928:     
                    929:     def ECHO_getMD(self,item):
                    930:         """Ausgabe der MD"""
                    931:         return getattr(self,item)
                    932:         
                    933:     def index_html(self):
                    934:         """standard page"""
                    935:         
                    936:         return self.REQUEST.RESPONSE.redirect(self.link)
                    937: 
1.90      dwinter   938:     def startpage_html(self):
                    939:        """prints out a startpage for a resource for use e.g. in the BVE"""
                    940: 
                    941:        # suche ob startpage.html in dem Ordner vorhanden ist, dann wir diese angezeigt
                    942: 
                    943:        sp=self.ZopeFind(self,obj_ids=['startpage.html'])
                    944: 
                    945:        if sp:
                    946:            return sp[1]()
                    947: 
                    948:             #prüfen ob irgendwo ein template
                    949:        if hasattr(self,'startpage_index_template'): 
                    950:            return self.startpage_index_template()
                    951: 
                    952:        #generisches template ausgeben
                    953:        
                    954:        pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_startpage_index_template_standard.zpt').__of__(self)
                    955:        pt.content_type="text/html"
                    956:        return pt()
                    957: 
                    958:     def toc_html(self):
                    959:        
                    960:        sp=self.ZopeFind(self,obj_ids=['toc.html'])
                    961:            
                    962:        if sp:
                    963:            return sp[0][1]()
                    964: 
                    965: 
                    966:            
1.1       casties   967:     def generate_label(self):
                    968:         """Erzeugt_standard_Label aus Template"""
                    969:         pt=getattr(self,"label_template_"+self.bib_type)
1.13      dwinter   970: 
1.1       casties   971:         return pt()
                    972: 
1.90      dwinter   973:     def generate_title(self,RESPONSE=None):
                    974:         """Erzeugt_standard_Label aus Template"""
                    975:         pt=getattr(self,"label_template_"+self.contentType)
                    976: 
                    977:    self.title=pt()
                    978:    
                    979:         return pt()
                    980: 
1.13      dwinter   981: def manage_addECHO_resourceForm(self):
                    982:         """Form for adding a ressource"""
                    983:         pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_resourceForm.zpt').__of__(self)
1.1       casties   984:         return pt()
                    985: 
                    986: 
1.10      dwinter   987: 
1.94      dwinter   988: def manage_addECHO_resource(self,id,title,label,description,responsible,link,metalink,weight,copyrightType=None,resourceID=None,contentType=None,renderingType=None,credits=None,coords=None,RESPONSE=None):
1.13      dwinter   989:     """addaresource"""
1.1       casties   990: 
1.94      dwinter   991:     newObj=ECHO_resource(id,link,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords)
1.1       casties   992: 
                    993:     self._setObject(id,newObj)
1.13      dwinter   994: 
1.1       casties   995:     if RESPONSE is not None:
                    996:         RESPONSE.redirect('manage_main')
                    997:  
                    998: 
                    999: class ECHO_externalLink(Folder):
                   1000:     """Link zu einer externen Ressource"""
                   1001:     security=ClassSecurityInfo()
                   1002:     meta_type='ECHO_externalLink'
                   1003: 
1.48      dwinter  1004:     def getTitle(self):
                   1005:    """title"""
                   1006:    return self.title.encode('utf-8') 
                   1007: 
                   1008:     def getLabel(self):
                   1009:    """title"""
                   1010:    return self.label.encode('utf-8') 
                   1011: 
1.29      dwinter  1012:     def content_html(self):
                   1013:         """template fuer content"""
                   1014:         return content_html(self,'externalLink')
                   1015:     
1.27      dwinter  1016:     def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords):
1.1       casties  1017: 
                   1018:         self.id = id
                   1019:         """Festlegen der ID"""
                   1020: 
                   1021:         self.credits=toList(credits)
                   1022:         self.label = label
                   1023:         self.link= link
                   1024:         self.title=title
                   1025:         self.weight=weight
                   1026:         self.description=description
1.27      dwinter  1027:         self.contentType=contentType
1.1       casties  1028:         self.responsible=responsible
                   1029:         coordsnew=[ string.split(x,",") for x in coords]
                   1030:         self.coords=coordsnew
                   1031: 
                   1032:     def ECHO_externalLink_config(self):
                   1033:         """Main configuration"""
                   1034: 
                   1035:         if not hasattr(self,'weight'):
                   1036:             self.weight=""
                   1037:         if not hasattr(self,'coords'):
1.9       dwinter  1038:             
1.1       casties  1039:             self.coords=['']
1.91      dwinter  1040: 
1.1       casties  1041: 
1.13      dwinter  1042:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_externalLink.zpt').__of__(self)
1.1       casties  1043:         return pt()
                   1044:     
                   1045: 
1.37      dwinter  1046:     def changeECHO_externalLink(self,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None):
1.1       casties  1047: 
                   1048:         """Änderung der Properties"""
1.36      dwinter  1049:    try:
                   1050:        coordsnew=[ string.split(x,",") for x in coords]
                   1051:    except:
                   1052:        coordsnew=[]
1.1       casties  1053: 
1.27      dwinter  1054:         setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coords)
1.1       casties  1055: 
1.21      dwinter  1056:         self.coords=coordsnew[0:]
1.1       casties  1057:         self.link=link
                   1058:         if RESPONSE is not None:
                   1059:             RESPONSE.redirect('manage_main')
                   1060:             
                   1061:             
                   1062:     manage_options = Folder.manage_options+(
                   1063:         {'label':'Main Config','action':'ECHO_externalLink_config'},
                   1064:         )
1.17      dwinter  1065: 
                   1066:         
1.1       casties  1067:     def index_html(self):
                   1068:         """standard page"""
                   1069:         
                   1070:         return self.REQUEST.RESPONSE.redirect(self.link)
                   1071: 
1.13      dwinter  1072: def manage_addECHO_externalLinkForm(self):
                   1073:         """Form for external Links"""
                   1074:         pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_externalLinkForm.zpt').__of__(self)
1.1       casties  1075:         return pt()
                   1076: 
                   1077: 
1.27      dwinter  1078: def manage_addECHO_externalLink(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None):
1.13      dwinter  1079:     """Add an external Link"""
1.1       casties  1080: 
1.27      dwinter  1081:     newObj=ECHO_externalLink(id,link,title,label,description,contentType,responsible,credits,weight,coords)
1.1       casties  1082: 
                   1083:     self._setObject(id,newObj)
1.13      dwinter  1084: 
1.1       casties  1085:     if RESPONSE is not None:
                   1086:         RESPONSE.redirect('manage_main')
                   1087:  
1.24      dwinter  1088: 
1.51      dwinter  1089: class ECHO_link(ECHO_externalLink):
                   1090:    """external_link"""
                   1091: 
                   1092:    meta_type="ECHO_link"
                   1093:    
                   1094: 
1.53      dwinter  1095:    def content_html(self):
1.80      dwinter  1096:        """template fuer link"""
                   1097:        if hasattr(self,"link_template"):
                   1098:            return content_html(self,'link')
                   1099:        else:
                   1100:            return content_html(self,'collection')
1.53      dwinter  1101:    
1.51      dwinter  1102: def manage_addECHO_linkForm(self):
                   1103:         """Form for external Links"""
                   1104:         pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_linkForm.zpt').__of__(self)
                   1105:         return pt()
                   1106: 
                   1107: 
                   1108: def manage_addECHO_link(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None):
                   1109:     """Add an external Link"""
                   1110: 
                   1111:     newObj=ECHO_link(id,link,title,label,description,contentType,responsible,credits,weight,coords)
                   1112: 
                   1113:     self._setObject(id,newObj)
                   1114: 
                   1115:     if RESPONSE is not None:
                   1116:         RESPONSE.redirect('manage_main')
                   1117:    
1.24      dwinter  1118: 
1.1       casties  1119: class ECHO_collection(Folder, Persistent, Implicit):
                   1120:     """ECHO Collection"""
1.84      dwinter  1121: 
1.1       casties  1122:     security=ClassSecurityInfo()
                   1123:     meta_type='ECHO_collection'
1.69      dwinter  1124:     viewClassificationList=viewClassificationListMaster
                   1125:     displayTypes=displayTypes
                   1126: 
1.98      dwinter  1127:     def getPartnerCopyright(self,name,sonst="generic"):
                   1128:        """gibt generisches copyright eines partners aus, sonst behalte jetzige einsteillung"""
                   1129:        #print "hi",name,sonst
                   1130:        #print getattr(self.partners,name).copyrightType
                   1131:        try:
                   1132:            partner=getattr(self.partners,name)
                   1133:            return partner.copyrightType
                   1134:        except:
                   1135:            print "error"
                   1136:            return sonst
                   1137: 
                   1138:     def partnerSelector_HTML(self,selected=None):
                   1139:          """give type selector"""
                   1140:     if not selected:
                   1141:         retStr="<option selected>\n"
                   1142:     else:
                   1143:         retStr="<option>\n"
                   1144:         
                   1145:     try: # erste version copyrightTypes exists
                   1146:         for partner in self.credits:
                   1147:             if selected and (partner==selected):
                   1148:                 retStr+="""<option selected value="%s">%s\n"""%(partner,partner)
                   1149:             else:                
                   1150:                 retStr+="""<option value="%s">%s\n"""%(partner,partner)
                   1151:     except:
                   1152:         """nothing"""
                   1153:     return retStr
                   1154:  
1.69      dwinter  1155:     def getViewClassification(self):
                   1156:         if hasattr(self,'viewClassification'):
                   1157:             return self.viewClassification
                   1158:         else:
                   1159:             return ""
1.48      dwinter  1160: 
                   1161:     def getTitle(self):
                   1162:    """title"""
                   1163:    return self.title.encode('utf-8') 
                   1164: 
                   1165:     def getLabel(self):
                   1166:    """title"""
                   1167:    return self.label.encode('utf-8') 
1.1       casties  1168: 
1.83      dwinter  1169:     
                   1170:        
1.45      dwinter  1171:     def createRessourcesFromXMLForm(self):
                   1172:        """form"""
                   1173:        pt=PageTemplateFile('Products/ECHO_content/zpt/createRessourcesFromXMLForm.zpt').__of__(self)
                   1174:        return pt()
1.83      dwinter  1175: 
1.45      dwinter  1176:     def createRessourcesFromXML(self,fileupload):
                   1177:        """read an XML file for generating resources"""
                   1178:        dom=xml.dom.minidom.parse(fileupload)
                   1179:        ret="<h2>Added</h2>"
                   1180:        for resource in dom.getElementsByTagName('resource'):
                   1181:            link=getText(resource.getElementsByTagName('link')[0].childNodes)
                   1182:            label=getText(resource.getElementsByTagName('label')[0].childNodes)
                   1183:            #splitted=link.split("?")[0].split("/")
                   1184:            #id=splitted[len(splitted)-1].encode('ascii')
                   1185:            id=re.sub(" ","_",label).encode('ascii')
                   1186:            
                   1187:            ret+="<p>"+label+"</p>"
1.46      dwinter  1188:            manage_addECHO_resource(self,id,label.encode('ascii'),label.encode('ascii'),"","","",link.encode('ascii'),"","")
1.45      dwinter  1189:        return ret
1.25      dwinter  1190:     def getImageTag(self):
                   1191:         """GetTag"""
                   1192:         try:
                   1193:             return self.imageTag
                   1194:         except:
                   1195:             return ""
                   1196: 
1.27      dwinter  1197:     def addResource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None):
1.24      dwinter  1198:         """SSS"""
                   1199:         try:
1.27      dwinter  1200:             manage_addECHO_resource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None)
1.24      dwinter  1201:             return "done"
                   1202:         except:
                   1203:             return None
1.32      dwinter  1204: 
                   1205:     def getSecondaryLink(self):
                   1206:         """secondary link"""
                   1207:         try:
                   1208:             return self.secondaryLink
                   1209:         except:
                   1210:             return ""
                   1211: 
                   1212:     def getSecondaryLinkTitle(self):
                   1213:         """secondary link"""
                   1214:         try:
                   1215:             return self.secondaryLinkTitle
                   1216:         except:
                   1217:             return ""
                   1218:         
1.24      dwinter  1219:     def getCollectionTreeXML(self):
                   1220:         """Tree as XML"""
                   1221: 
                   1222:         def getCollection(object,depth=0):
                   1223:             depth+=1
                   1224:             collections=""
                   1225:             for entry in object.__dict__.keys():
                   1226:                 element=getattr(object,entry)
                   1227:                 try:
1.40      dwinter  1228:                     if element.meta_type in ["ECHO_collection","ECHO_group"]:
1.60      dwinter  1229:                         collections+="<element name=\""+quote(element.title)+"\" url=\""+element.absolute_url()+"\">"
1.24      dwinter  1230:                         collections+=getCollection(element,depth)+"</element>\n"
                   1231:                 except:
                   1232:                     """nothing"""
                   1233:             return collections
                   1234:         
1.60      dwinter  1235:    ret="""<?xml version="1.0" encoding="utf-8" ?>"""
                   1236:         return ret+"<collection>"+getCollection(self)+"</collection>"
1.24      dwinter  1237:     
1.23      dwinter  1238:     def createJavaScript(self):
1.88      casties  1239:         """OLD CreateJava"""
1.72      casties  1240:         ret=javaScriptMain
1.23      dwinter  1241: 
1.65      casties  1242:         dynamical="\n"
1.23      dwinter  1243:         for ob in self.getGraphicCoords():
1.47      casties  1244:        if ob[4][4] == "":  
1.72      casties  1245:            dynamical+="""Coords.push(new Coord('%s', Img, %s));\n"""%(ob[1],ob[0])
                   1246:        else:
                   1247:        dynamical+="""Coords.push(new Coord('%s', Img, %s));//%s\n"""%(ob[1],ob[0],ob[4][4])
                   1248:        dynamical+="ShowArrow(new getObj('i.%s'),Img,%s);\n"%(ob[1],ob[0])
                   1249:    ret+=javaHandler%dynamical
                   1250:         return ret
                   1251: 
                   1252:     def createJSAreas(self):
1.88      casties  1253:         """create area calls for JavaScript"""
1.72      casties  1254:         dynamical="\n"
                   1255:         for ob in self.getGraphicCoords():
1.74      casties  1256:        if ob[5] == "area":
1.65      casties  1257:            dynamical+="""addArea('%s', 'overview', %s, 'area');\n"""%(ob[1],ob[0])
1.47      casties  1258:        else:
1.65      casties  1259:            dynamical+="""addArea('%s', 'overview', %s, 'arrow');\n"""%(ob[1],ob[0])
1.72      casties  1260:         return dynamical
1.74      casties  1261: 
                   1262:     def createMapHead(self):
1.88      casties  1263:         """create javascript include and script tags for head"""
1.74      casties  1264:         pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/ECHO_content_map_frag_js')).__of__(self)
                   1265:         return pt()
1.87      casties  1266: 
                   1267:     def createMapImg(self):
                   1268:    """generate img-tag for map"""
                   1269:    bt = BrowserCheck(self)
                   1270:    tag = ""
                   1271:    src = self.REQUEST['URL1'] + "/overview"
                   1272:    if bt.isN4:
                   1273:        tag += '<ilayer id="overview" visibility="show"><img src="%s"></ilayer>'%src
                   1274:    else:
                   1275:        tag += '<img id="overview" src="%s" />'%src
                   1276:    return tag
1.74      casties  1277:         
                   1278:     def createMapLink(self, ob, text=None):
                   1279:    """generate map link"""
1.87      casties  1280:    bt = BrowserCheck(self)
1.74      casties  1281:    id = ob[1]
                   1282:    link = ob[1]
                   1283:    if text == None:
                   1284:        text = ob[2]
1.87      casties  1285:    tag = ""
                   1286:    if bt.isN4:
                   1287:        tag += '<ilayer id="a.%s"><a onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="_blank"'%(id,id,id,link)
                   1288:        tag += ">" + text + "</a></ilayer>"
                   1289:    else:
                   1290:        tag = '<a id="a.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="_blank"'%(id,id,id,link)
                   1291:        if ob[3].contentType == 'text-popup':
                   1292:        tag += ' title="%s"'%ob[3].description
                   1293:        tag += ">" + text + "</a>"
1.74      casties  1294:    return tag
                   1295: 
                   1296:     def createMapAux(self, ob, arrowsrc="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?dw=15&fn=icons/pfeil"):
                   1297:    """generate map link image, text and other stuff"""
                   1298:    id = ob[1]
                   1299:    link = ob[1]
                   1300:    vtype = ob[5]
                   1301:    ctype = ob[3].contentType
1.87      casties  1302:    bt = BrowserCheck(self)
                   1303:    tag = ""
                   1304: 
                   1305:    if bt.isN4:
                   1306:        tag += '<layer id="i.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)">'%(id,id,id)
                   1307:        if vtype == "view point":
                   1308:            rot = ob[4][4]
                   1309:        tag += '<a href="%s"><img border="0" src="%s&rot=%s" /></a>'%(link,arrowsrc,rot)
                   1310:        else:
                   1311:        tag += '<a href="%s"><img border="0" width="1000" height="1000" src="trans_img"'%(link)
                   1312:        if ctype == "text-popup":
                   1313:            desc = ob[3].description
                   1314:            tag += ' alt="%s"'%desc
                   1315:        tag += ' /></a>'
                   1316:        tag += '</layer>'
1.74      casties  1317:    else:
1.87      casties  1318:        tag = '<a id="b.%s" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="_blank">'%(id,id,id,link)
                   1319:        if vtype == "view point":
                   1320:        rot = ob[4][4]
                   1321:        if bt.isIEWin and bt.versIE > 5:
                   1322:            tag += '<span id="i.%s" style="position:absolute; top:-100px; left:-100px; border-style:none; border-width=1px; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'%s&rot=%s\');"><img style="visibility:hidden" src="%s&rot=%s" /></span>'%(id,arrowsrc,rot,arrowsrc,rot)
                   1323:        else:
                   1324:            tag += '<img id="i.%s" src="%s&rot=%s" border="1" style="position:absolute; top:-100px; left:-100px; border-style:none;" />'%(id,arrowsrc,rot)
                   1325:        else:
                   1326:        if bt.isIEWin:
                   1327:            tag += '<div id="i.%s" style="position:absolute; top:-100px; left:-100px;background:url(area_img)"'%(id)
                   1328:        else:
                   1329:            tag += '<div id="i.%s" style="position:absolute; top:-100px; left:-100px;"'%(id)
                   1330:        if ctype == "text-popup":
                   1331:            desc = ob[3].description
                   1332:            tag += ' title="%s"'%desc
                   1333:        tag += '> </div>'
                   1334:        tag += '</a>'
1.74      casties  1335:    return tag
                   1336: 
1.1       casties  1337:     
                   1338:     security.declarePublic('getCreditObject')
                   1339:     def getCreditObject(self,name):
                   1340:         """credit id to credititem"""
1.15      dwinter  1341:         try:
                   1342:             return getattr(self.partners,name)
                   1343:         except:
                   1344:             return ""
1.17      dwinter  1345: 
1.1       casties  1346:     security.declarePublic('ECHO_generateNavBar')
                   1347:     def ECHO_generateNavBar(self):
                   1348:         """Erzeuge Navigationsbar"""
                   1349:         link=""
                   1350:         object="self"
                   1351:         ret=[]
                   1352:         path=self.getPhysicalPath()
                   1353:         for element in path:
                   1354:             
                   1355:            
                   1356:             if not element=="":
                   1357:                 object+="."+element
                   1358:                 
                   1359:                 label=eval(object).label
                   1360:                 link+="/"+element
                   1361:                 if not label=="":
                   1362:                     ret.append((label,link))
                   1363:         return ret
                   1364:     
                   1365:     security.declarePublic('ECHO_rerenderLinksMD')
1.73      dwinter  1366: 
1.49      dwinter  1367:     def ECHO_rerenderLinksMD(self,obj=None):
1.1       casties  1368:         """Rerender all Links"""
1.49      dwinter  1369:         if not obj:
                   1370:             obj = self
1.1       casties  1371:             
1.49      dwinter  1372:         entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection'])
                   1373: 
                   1374:         for entry in entries:
                   1375:        if entry[1].meta_type == 'ECHO_resource':
                   1376:            entry[1].ECHO_getResourceMD(template="no")
1.91      dwinter  1377: 
1.49      dwinter  1378:        else:
                   1379:           self.ECHO_rerenderLinksMD(entry[1])
                   1380: 
1.1       casties  1381:                 
                   1382:                 
                   1383:         return "Rerenderd all links to resources in: "+self.title
1.19      dwinter  1384: 
                   1385:     security.declarePublic('ECHO_newViewerLink')
1.1       casties  1386:     
                   1387: 
                   1388:     def getCoords(self):
                   1389:         try:
1.11      dwinter  1390:             
                   1391:             x=  [string.join(x,",") for x in self.coords]  
                   1392:             return x
1.4       dwinter  1393: 
1.11      dwinter  1394:         except:
1.4       dwinter  1395: 
1.1       casties  1396:             return []
1.3       dwinter  1397:         
1.34      dwinter  1398:     def __init__(self,id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle,secondaryLink,imageTag="",bgcolour=""):
1.91      dwinter  1399: 
1.1       casties  1400: 
                   1401:         self.id = id
                   1402:         """Festlegen der ID"""
                   1403:         self.credits=toList(credits)
                   1404:         self.label = label
                   1405:         self.title=title
                   1406:         self.description=description
1.27      dwinter  1407:         self.contentType=contentType
1.1       casties  1408:         self.responsible=responsible
1.25      dwinter  1409:         self.imageTag=imageTag
1.1       casties  1410:         self.weight=weight
                   1411:         self.sortfield=sortfield
                   1412:         coordsnew=[ string.split(x,",") for x in coords]
                   1413:         self.coords=coordsnew
1.32      dwinter  1414:         self.secondaryLinkTitle=secondaryLinkTitle
                   1415:         self.secondaryLink=secondaryLink
1.35      dwinter  1416:    self.bgcolour=bgcolour
1.32      dwinter  1417:         
1.1       casties  1418: 
                   1419:     manage_options = Folder.manage_options+(
1.13      dwinter  1420:         {'label':'Main Config','action':'ECHO_collection_config'},
1.1       casties  1421:         {'label':'Rerender Links','action':'ECHO_rerenderLinksMD'},
                   1422:         {'label':'Graphics','action':'ECHO_graphicEntry'},
1.45      dwinter  1423:    {'label':'create resources from XML','action':'createRessourcesFromXMLForm'},
1.1       casties  1424: 
                   1425:         )
                   1426: 
1.19      dwinter  1427:     def getOverview(self):
                   1428:         """overview graphics"""
1.20      dwinter  1429:         
                   1430:         return self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])[0][1]
                   1431:     
1.19      dwinter  1432:     
1.1       casties  1433:     def ECHO_graphicEntry(self):
                   1434:         """DO nothing"""
1.20      dwinter  1435:         overview = self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])
1.19      dwinter  1436:         
1.20      dwinter  1437:     
1.19      dwinter  1438:         if overview:
1.13      dwinter  1439:             pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_draw.zpt').__of__(self)
1.1       casties  1440:             return pt()
                   1441:         else:
                   1442:             return "NO OVERVIEW GRAPHICS"
                   1443: 
1.4       dwinter  1444:     def ECHO_enterCoords(self,coordstr,angle="",RESPONSE=None):
1.1       casties  1445:         """Enter coords"""
1.2       dwinter  1446:         coords=self.coords
1.4       dwinter  1447:         temco=coordstr.split(",")
                   1448:         temco.append(angle)
                   1449:         coords.append(temco)
1.2       dwinter  1450:         self.coords=coords[0:]
1.13      dwinter  1451: 
1.2       dwinter  1452:         if RESPONSE is not None:
                   1453:             RESPONSE.redirect('ECHO_graphicEntry')
1.1       casties  1454: 
                   1455:     
1.13      dwinter  1456:     security.declarePublic('ECHO_collection_config')
                   1457:     def ECHO_collection_config(self):
1.1       casties  1458:         """Main configuration"""
                   1459: 
                   1460:         if not hasattr(self,'weight'):
                   1461:             self.weight=""
                   1462: 
                   1463:         if not hasattr(self,'sortfield'):
                   1464:             self.sortfield="weight"
1.13      dwinter  1465:   
1.1       casties  1466:         if not hasattr(self,'coords'):
                   1467:             self.coords=[]
                   1468: 
1.13      dwinter  1469:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_collection.zpt').__of__(self)
1.1       casties  1470:         return pt()
                   1471: 
                   1472: 
1.13      dwinter  1473:     security.declarePublic('changeECHO_collection')
1.1       casties  1474: 
1.10      dwinter  1475: 
1.34      dwinter  1476:     def getBgcolour(self):
                   1477:        """colour"""
                   1478:        if hasattr(self,'bgcolour') and not (self.bgcolour==""):
                   1479:            return self.bgcolour
                   1480:        else:
                   1481:            return "#dddddd"
                   1482:        
1.69      dwinter  1483:     def changeECHO_collection(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",viewClassification=None):
1.71      casties  1484:         """Aenderung der Properties"""
1.10      dwinter  1485: 
1.32      dwinter  1486:         self.secondaryLink=secondaryLink
                   1487:         self.secondaryLinkTitle=secondaryLinkTitle
1.25      dwinter  1488:         self.imageTag=imageTag
1.34      dwinter  1489:    self.bgcolour=bgcolour
1.69      dwinter  1490:         self.viewClassification=viewClassification
1.34      dwinter  1491:    
1.32      dwinter  1492:         if coords:
                   1493:             coordsnew=[ string.split(x,",") for x in coords]
                   1494:             self.coords=coordsnew[0:]
                   1495:         else:
                   1496:             coordsnew=None
                   1497:             self.coords=None
                   1498:             
                   1499:         setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
1.44      dwinter  1500:    try:
                   1501:        self.coords=coordsnew[0:] # HACK fehler in setECHO_collection
                   1502:         except:
                   1503:        """none"""
                   1504:        
1.1       casties  1505:         self.sortfield=sortfield
                   1506: 
                   1507:         if RESPONSE is not None:
                   1508:             RESPONSE.redirect('manage_main')
                   1509:             
1.23      dwinter  1510: 
                   1511:     def showOverview(self):
                   1512:         """overview"""
                   1513:         if 'ECHO_overview.html' in self.__dict__.keys():
                   1514:             return getattr(self,'ECHO_overview.html')()
                   1515:         pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_content_overview.zpt').__of__(self)
                   1516:         return pt()
                   1517: 
1.84      dwinter  1518:     security.declareProtected('View','index_html')
1.1       casties  1519:     
                   1520:     def index_html(self):
                   1521:         """standard page"""
                   1522:         
                   1523:         if 'index.html' in self.__dict__.keys():
                   1524:             return getattr(self,'index.html')()
1.32      dwinter  1525:         
1.1       casties  1526:         elif 'overview' in self.__dict__.keys():
                   1527:             return self.showOverview()
1.32      dwinter  1528:         elif hasattr(self,'collection_index_template'):
                   1529:             return self.collection_index_template()    
1.54      dwinter  1530:         elif hasattr(self,'main_index_template'):
1.55      dwinter  1531:             return self.main_index_template()    
1.1       casties  1532:         
1.54      dwinter  1533:         pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_main_index_template_standard.zpt').__of__(self)
1.29      dwinter  1534:         pt.content_type="text/html"
1.1       casties  1535:         return pt()
                   1536: 
1.29      dwinter  1537:     def content_html(self):
                   1538:         """template fuer content"""
                   1539:         return content_html(self,'collection')
                   1540:     
1.11      dwinter  1541:     def getCredits(self):
                   1542:         """Ausgabe der credits"""
                   1543:         if self.credits:
                   1544:             return self.credits
                   1545:         else:
                   1546:             return []
1.1       casties  1547: 
1.65      casties  1548:     def area_img(self):
                   1549:         """area image"""
1.88      casties  1550:    bt = BrowserCheck(self)
1.89      casties  1551:    if bt.isIE or bt.isN4:
1.88      casties  1552:        return sendFile(self, 'images/red.gif', 'image/gif')
                   1553:    else:
                   1554:        return sendFile(self, 'images/reda.png', 'image/png')
1.87      casties  1555: 
                   1556:     def trans_img(self):
                   1557:         """empty image"""
                   1558:         return sendFile(self, 'images/trans.gif', 'image/gif')
1.65      casties  1559: 
                   1560:     def hl_lib_js(self):
                   1561:         """javascript"""
1.79      casties  1562:         return sendFile(self, 'js/hl_lib.js', 'text/plain')
1.65      casties  1563: 
                   1564:     def js_lib_js(self):
                   1565:         """javascript"""
1.79      casties  1566:         return sendFile(self, 'js/js_lib.js', 'text/plain')
1.23      dwinter  1567: 
1.1       casties  1568:     def getGraphicCoords(self):
                   1569:         """Give list of coordinates"""
1.68      casties  1570:         subColTypes=['ECHO_collection','ECHO_resource']
1.1       casties  1571:         ids=[]
1.67      casties  1572:         for entrySearch in self.ZopeFind(self,obj_metatypes=subColTypes):
1.66      dwinter  1573:             object=entrySearch[1]
                   1574:             if hasattr(object,'coords'):
                   1575:                 for coordtemp in object.coords:
                   1576:                     if len(coordtemp)>3:
                   1577:                         coord=coordtemp[0:4]
                   1578:                         label=""
1.70      casties  1579:            vc=""
1.66      dwinter  1580:                         if hasattr(object,'label') and not object.label=="":
                   1581:                             label=object.label
                   1582:                         elif hasattr(object,'title') and not object.title=="":
                   1583:                             label=object.title
                   1584:                         else:
                   1585:                             label=object.getId()
1.70      casties  1586:            if object.viewClassification != "":
                   1587:                vc=object.viewClassification
                   1588:            else:
                   1589:                if len(coordtemp) > 4 and coordtemp[4] != "":
                   1590:                vc="view point"
                   1591:                else:
                   1592:                vc="area"
                   1593:                         ids.append([string.join(coord,", "),object.getId(),label,object,coordtemp,vc])
1.1       casties  1594:         return ids
                   1595:     
1.42      dwinter  1596: 
                   1597: 
                   1598: 
1.41      dwinter  1599:     getSubCols = ECHO_helpers.getSubCols
1.84      dwinter  1600: 
                   1601: Globals.InitializeClass(ECHO_collection)
1.1       casties  1602:     
1.13      dwinter  1603: def manage_addECHO_collectionForm(self):
                   1604:         """Add collection form"""
                   1605:         pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_collectionForm.zpt').__of__(self)
1.1       casties  1606:         return pt()
                   1607: 
                   1608: 
1.34      dwinter  1609: def manage_addECHO_collection(self,id,title,label,description,contentType,responsible,weight,sortfield,coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour=""):
1.13      dwinter  1610:     """add a echo collection"""
1.1       casties  1611:     
                   1612: 
1.34      dwinter  1613:     newObj=ECHO_collection(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")
1.1       casties  1614: 
                   1615:     self._setObject(id,newObj)
1.13      dwinter  1616: 
1.1       casties  1617:     if RESPONSE is not None:
                   1618:         RESPONSE.redirect('manage_main')
                   1619: 
1.38      dwinter  1620: class ECHO_group(ECHO_collection):
                   1621:    """ECHO Gruppe"""
1.84      dwinter  1622:    security=ClassSecurityInfo()
1.38      dwinter  1623:    meta_type="ECHO_group"
                   1624: 
                   1625:    manage_options = Folder.manage_options+(
                   1626:        {'label':'Main Config','action':'ECHO_group_config'},
                   1627:        {'label':'Rerender Links','action':'ECHO_rerenderLinksMD'},
                   1628:        {'label':'Graphics','action':'ECHO_graphicEntry'},
                   1629:        )
1.84      dwinter  1630:    
                   1631:    security.declareProtected('View','index_html')
1.52      dwinter  1632:    def index_html(self):
                   1633:        """standard page"""
                   1634:        displayedObjects=self.ZopeFind(self,obj_metatypes=displayTypes)
1.61      dwinter  1635:        #if (len(displayedObjects)==1) and (displayedObjects[0][1].meta_type=="ECHO_collection"): # nur ein Object dann redirect auf dieses Object
                   1636:        #   return self.REQUEST.RESPONSE.redirect(displayedObjects[0][1].absolute_url())
1.52      dwinter  1637:        
                   1638:        if 'index.html' in self.__dict__.keys():
                   1639:            return getattr(self,'index.html')()
1.56      dwinter  1640:        
1.52      dwinter  1641:        elif 'overview' in self.__dict__.keys():
1.56      dwinter  1642:            return self.showOverview()
1.52      dwinter  1643:        elif hasattr(self,'group_index_template'):
1.56      dwinter  1644:            return self.group_index_template()
                   1645:        elif hasattr(self,'collection_index_template'):
                   1646:            return self.collection_index_template()    
1.54      dwinter  1647:        elif hasattr(self,'main_index_template'):
1.55      dwinter  1648:            return self.main_index_template()    
1.52      dwinter  1649: 
1.54      dwinter  1650:        pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_main_index_template_standard.zpt').__of__(self)
1.52      dwinter  1651:        pt.content_type="text/html"
                   1652:        return pt()
                   1653: 
1.38      dwinter  1654:    def ECHO_group_config(self):
                   1655:        """Main configuration"""
                   1656:        
                   1657:        if not hasattr(self,'weight'):
                   1658:            self.weight=""
                   1659:            
                   1660:        if not hasattr(self,'sortfield'):
                   1661:            self.sortfield="weight"
                   1662:                
                   1663:        if not hasattr(self,'coords'):
                   1664:            self.coords=[]
                   1665: 
                   1666:        pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_group.zpt').__of__(self)
                   1667:        return pt()
                   1668: 
1.43      dwinter  1669:    def changeECHO_group(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",logo=""):
1.38      dwinter  1670:        """Änderung der Properties"""
                   1671: 
                   1672:        self.secondaryLink=secondaryLink
                   1673:        self.secondaryLinkTitle=secondaryLinkTitle
                   1674:        self.imageTag=imageTag
                   1675:        self.bgcolour=bgcolour
1.43      dwinter  1676:                 self.logo=logo
                   1677:                 
1.38      dwinter  1678:        if coords:
                   1679:            coordsnew=[ string.split(x,",") for x in coords]
                   1680:            self.coords=coordsnew[0:]
                   1681:        else:
                   1682:            coordsnew=None
                   1683:            self.coords=None
                   1684: 
                   1685:        setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
                   1686: 
                   1687: 
                   1688: 
                   1689:        self.sortfield=sortfield
                   1690: 
                   1691:        if RESPONSE is not None:
                   1692:            RESPONSE.redirect('manage_main')
1.40      dwinter  1693: 
                   1694:    def getLogo(self):    
                   1695:        """logo ausgeben"""
1.43      dwinter  1696:                 try:
                   1697:                     return self.logo
                   1698:                 except:
                   1699:                     return "ECHO_groups"
1.40      dwinter  1700: 
1.38      dwinter  1701:    def content_html(self):
                   1702:        """template fuer content"""
                   1703:        return content_html(self,'group')
                   1704:     
                   1705: 
                   1706: 
                   1707: def manage_addECHO_groupForm(self):
                   1708:         """Add group form"""
                   1709:         pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_groupForm.zpt').__of__(self)
                   1710:         return pt()
                   1711: 
                   1712: 
1.43      dwinter  1713: def manage_addECHO_group(self,id,title,label,description,contentType,responsible,weight,sortfield,coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour="",logo=""):
1.38      dwinter  1714:     """add a echo group"""
                   1715:     
                   1716: 
                   1717:     newObj=ECHO_group(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")
                   1718: 
1.43      dwinter  1719:     setattr(newObj,'logo',logo)
1.38      dwinter  1720:     self._setObject(id,newObj)
1.43      dwinter  1721:     
1.38      dwinter  1722:     if RESPONSE is not None:
                   1723:         RESPONSE.redirect('manage_main')
                   1724: 
1.84      dwinter  1725: Globals.InitializeClass(ECHO_group)
1.85      dwinter  1726: 
                   1727: 
                   1728: class ECHO_userFolder(UserFolder):
                   1729:    """User folder for Intranet"""
                   1730:    _domain_auth_mode=1 # Identification via domain
                   1731:    meta_type="ECHO_userFolder"
1.38      dwinter  1732:    
1.85      dwinter  1733:    def authenticate(self, name, password, request):
                   1734:        emergency = self._emergency_user
                   1735:        if name is None:
                   1736:            return None
                   1737:        if emergency and name==emergency.getUserName():
                   1738:            user = emergency
                   1739:        else:
                   1740:            user = self.getUser(name)
                   1741:        if user is not None and user.authenticate(password, request):
                   1742:            return user
                   1743:        else:
                   1744:            return None
                   1745: 
                   1746:    def domainSpecMatch(self,spec, request):
                   1747:        host=''
                   1748:        addr=''
                   1749: 
                   1750:        # Fast exit for the match-all case
                   1751:        if len(spec) == 1 and spec[0] == '*':
                   1752:        return 1
                   1753: 
                   1754:        if request.has_key('REMOTE_HOST'):
                   1755:        host=request['REMOTE_HOST']
                   1756: 
                   1757:        if request.has_key('REMOTE_ADDR'):
                   1758:        addr=request['REMOTE_ADDR']
                   1759: 
                   1760:        if request.has_key('HTTP_X_FORWARDED_FOR'):
                   1761:        addr=request['HTTP_X_FORWARDED_FOR']
                   1762: 
                   1763:        
                   1764:        if not host and not addr:
                   1765:        return 0
                   1766: 
                   1767:        if not host:
                   1768:        try:    host=socket.gethostbyaddr(addr)[0]
                   1769:        except: pass
                   1770:        if not addr:
                   1771:        try:    addr=socket.gethostbyname(host)
                   1772:        except: pass
                   1773: 
                   1774: 
                   1775:        _host=host.split('.')
                   1776:        _addr=addr.split('.')
                   1777:        _hlen=len(_host)
                   1778:        _alen=len(_addr)
                   1779: 
                   1780:        for ob in spec:
                   1781:        sz=len(ob)
                   1782:        _ob=ob.split('.')
                   1783:        _sz=len(_ob)
                   1784: 
                   1785:        mo = addr_match(ob)
                   1786:        if mo is not None:
                   1787:            if mo.end(0)==sz:
                   1788:            fail=0
                   1789:            for i in range(_sz):
                   1790:                a=_addr[i]
                   1791:                o=_ob[i]
                   1792:                if (o != a) and (o != '*'):
                   1793:                fail=1
                   1794:                break
                   1795:            if fail:
                   1796:                continue
                   1797:            return 1
                   1798: 
                   1799:        mo = host_match(ob)
                   1800:        if mo is not None:
                   1801:            if mo.end(0)==sz:
                   1802:            if _hlen < _sz:
                   1803:                continue
                   1804:            elif _hlen > _sz:
                   1805:                _item=_host[-_sz:]
                   1806:            else:
                   1807:                _item=_host
                   1808:            fail=0
                   1809:            for i in range(_sz):
                   1810:                h=_item[i]
                   1811:                o=_ob[i]
                   1812:                if (o != h) and (o != '*'):
                   1813:                fail=1
                   1814:                break
                   1815:            if fail:
                   1816:                continue
                   1817:            return 1
                   1818:        return 0
                   1819: 
                   1820: Globals.default__class_init__(ECHO_userFolder)
                   1821: 
                   1822: 
                   1823: 
                   1824: def manage_addECHO_userFolder(self,dtself=None,REQUEST=None,**ignored):
                   1825:     """add a user folder """
                   1826:     f=ECHO_userFolder()
                   1827:     self=self.this()
                   1828:     try:    self._setObject('acl_users', f)
                   1829:     except: return MessageDialog(
                   1830:                    title  ='Item Exists',
                   1831:                    message='This object already contains a User Folder',
                   1832:                    action ='%s/manage_main' % REQUEST['URL1'])
                   1833:     self.__allow_groups__=f
                   1834:     if REQUEST is not None:
                   1835:         REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main')
                   1836: 
                   1837: def manage_addECHO_userFolderForm(self):
                   1838:    """add a user folder form"""
                   1839:    return manage_addECHO_userFolder(self)
                   1840: 
1.1       casties  1841: class ECHO_root(Folder,Persistent,Implicit):
                   1842:     """ECHO Root Folder"""
1.85      dwinter  1843: 
                   1844:     security=ClassSecurityInfo()
                   1845:     
1.1       casties  1846:     meta_type="ECHO_root"
1.90      dwinter  1847: 
                   1848: 
                   1849:     def getBibTag(self,tag,content):
                   1850:        """get field tag für index-meta-generation"""
                   1851:        if not content or content=="":
                   1852:            return ""
                   1853:        ret="<%s>"%tag
1.95      dwinter  1854:        #ret+=urllib.quote(content)
                   1855:        ret+=content
                   1856: 
1.90      dwinter  1857:        ret+="</%s>"%tag
                   1858:        return ret
                   1859: 
                   1860:     def getValueFromClass(self,field,found):
                   1861:        """retattribute falss existing"""
                   1862:        try:
1.95      dwinter  1863:            
                   1864:            return getattr(found,field).decode('ascii','ignore')
1.90      dwinter  1865:        except:
                   1866:            return ""
1.49      dwinter  1867:     
                   1868:     def getImageTag(self):
                   1869:        """needed by main_template"""
                   1870:        return ""
                   1871:     secondaryLink="" #needed by main_template
                   1872:     secondaryLinkTitle="" #needed by main_template
                   1873:     
1.35      dwinter  1874:     def getBgcolour(self):
                   1875:    """hack"""
                   1876:    return "#dddddd"
1.28      dwinter  1877: 
                   1878:     def contentTypeSelector_HTML(self,selected=None):
                   1879:         """give type selector"""
                   1880:         if not selected:
                   1881:             retStr="<option selected>\n"
                   1882:         else:
                   1883:             retStr="<option>\n"
                   1884:             
1.62      dwinter  1885:         try: # erste version contentTypes exists
1.73      dwinter  1886:             for contentType in self.ZopeFind(self.contentTypes,obj_metatypes=["ECHO_contentType","OSAS_MetadataMapping"]):
1.28      dwinter  1887:                 if selected and (contentType[0]==selected):
                   1888:                     retStr+="""<option selected value="%s">%s\n"""%(contentType[0],contentType[0])
                   1889:                 else:                
                   1890:                     retStr+="""<option value="%s">%s\n"""%(contentType[0],contentType[0])
                   1891:         except:
1.62      dwinter  1892:        try:
                   1893:            for contentType in self.ZopeFind(self.standardMD,obj_metatypes=["OSAS_MetadataMapping"]):
                   1894:                if selected and (contentType[0]==selected):
                   1895:                    retStr+="""<option selected value="%s">%s\n"""%(contentType[0],contentType[0])
                   1896:                else:                
                   1897:                    retStr+="""<option value="%s">%s\n"""%(contentType[0],contentType[0])
                   1898:        except:
                   1899:            """nothing"""
                   1900:                
1.73      dwinter  1901:    return retStr
                   1902: 
                   1903:     def renderingTypeSelector_HTML(self,selected=None):
                   1904:          """give type selector"""
                   1905:     if not selected:
                   1906:         retStr="<option selected>\n"
                   1907:     else:
                   1908:         retStr="<option>\n"
                   1909:         
                   1910:     try: # erste version renderingTypes exists
                   1911:         for renderingType in self.ZopeFind(self.renderingTypes,obj_metatypes=["ECHO_renderingType"]):
                   1912:             if selected and (renderingType[0]==selected):
                   1913:                 retStr+="""<option selected value="%s">%s\n"""%(renderingType[0],renderingType[0])
                   1914:             else:                
                   1915:                 retStr+="""<option value="%s">%s\n"""%(renderingType[0],renderingType[0])
                   1916:     except:
                   1917:         """nothing"""
                   1918:     return retStr
                   1919: 
                   1920:     def renderingTypeSelector_HTML(self,selected=None):
                   1921:          """give type selector"""
                   1922:     if not selected:
                   1923:         retStr="<option selected>\n"
                   1924:     else:
                   1925:         retStr="<option>\n"
                   1926:         
                   1927:     try: # erste version renderingTypes exists
                   1928:         for renderingType in self.ZopeFind(self.renderingTypes,obj_metatypes=["ECHO_renderingType"]):
                   1929:             if selected and (renderingType[0]==selected):
                   1930:                 retStr+="""<option selected value="%s">%s\n"""%(renderingType[0],renderingType[0])
                   1931:             else:                
                   1932:                 retStr+="""<option value="%s">%s\n"""%(renderingType[0],renderingType[0])
                   1933:     except:
                   1934:         """nothing"""
                   1935:     return retStr
                   1936: 
                   1937: 
                   1938:     def copyrightTypeSelector_HTML(self,selected=None):
                   1939:          """give type selector"""
                   1940:     if not selected:
                   1941:         retStr="<option selected>\n"
                   1942:     else:
                   1943:         retStr="<option>\n"
1.98      dwinter  1944: 
                   1945:     
                   1946:     try: # erste version copyrightTypes exists
                   1947:         for copyrightType in self.ZopeFind(self.copyrightTypes,obj_metatypes=["ECHO_copyrightType"]):
                   1948:             if selected and (copyrightType[0]==selected):
                   1949:                 retStr+="""<option selected value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
                   1950:             else:                
                   1951:                 retStr+="""<option value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
                   1952:     except:
                   1953:         """nothing"""
                   1954:     return retStr
                   1955: 
                   1956:     def partnerSelector_HTML(self,selected=None):
                   1957:          """give type selector"""
                   1958:     if not selected:
                   1959:         retStr="<option selected>\n"
                   1960:     else:
                   1961:         retStr="<option>\n"
1.73      dwinter  1962:         
                   1963:     try: # erste version copyrightTypes exists
1.98      dwinter  1964:         for copyrightType in self.ZopeFind(self.partners,obj_metatypes=["ECHO_partner"]):
1.73      dwinter  1965:             if selected and (copyrightType[0]==selected):
                   1966:                 retStr+="""<option selected value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
                   1967:             else:                
                   1968:                 retStr+="""<option value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
                   1969:     except:
                   1970:         """nothing"""
                   1971:     return retStr
1.98      dwinter  1972:  
                   1973:     mediaTypes=['all','text','images','sound','video'] # konfigurierbar in neuer version über echoroot??
                   1974: 
                   1975:     def mediaTypeSelector_HTML(self,selected=None):
                   1976:          """give type selector"""
                   1977:     if not selected:
                   1978:         retStr="<option selected>\n"
                   1979:     else:
                   1980:         retStr="<option>\n"
                   1981:     
                   1982:     try: # erste version mediatypesTypes exists
                   1983:         for mediaType in self.mediaTypes:
                   1984:             if selected and (mediaType in selected):
                   1985:                 retStr+="""<option selected value="%s">%s\n"""%(mediaType,mediaType)
                   1986:             else:                
                   1987:                 retStr+="""<option value="%s">%s\n"""%(mediaType,mediaType)
                   1988:     except:
                   1989:         """nothing"""
                   1990:     return retStr
1.73      dwinter  1991: 
1.28      dwinter  1992:             
1.27      dwinter  1993:     def patchContentType(self,obj=None):
                   1994:         """austauschen content_type with contentType (patch bei umstieg von alter Version)"""
                   1995:     
                   1996: 
                   1997:         if not obj:
                   1998:             obj = self
                   1999:             
1.30      dwinter  2000:         entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_externalLink','ECHO_pageTemplate'])
1.27      dwinter  2001: 
                   2002:         for entry in entries:
1.31      dwinter  2003:                 setattr(entry[1],'contentType',entry[1].content_type)
                   2004:                 #entry[1].contentType == entry[1].content_type
1.27      dwinter  2005: 
                   2006:                 if entry[1].meta_type == 'ECHO_collection':
                   2007:                     entry[1].patchContentType(entry[1])    
1.19      dwinter  2008: 
1.27      dwinter  2009:                 
1.49      dwinter  2010:         return "changed all contenttypes in: "+self.title
1.63      dwinter  2011: 
                   2012: 
                   2013:     def patchViewClassification(self,obj=None):
                   2014:         """setze viewClassification heuristisch"""
                   2015: 
                   2016:    def checkIfArrow(obj):
                   2017:        if hasattr(obj,'coords'):
                   2018:            for coordtemp in obj.coords:
1.91      dwinter  2019: 
1.64      dwinter  2020:                if (len(coordtemp)>4) and not (coordtemp[4]==''):
1.63      dwinter  2021:                    return 4
                   2022:            return None
                   2023:        return None
                   2024:    
                   2025:         if not obj:
                   2026:             obj = self
                   2027:             
                   2028:         entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_group'])
                   2029: 
                   2030:         for entry in entries:
                   2031:        
1.64      dwinter  2032:        if checkIfArrow(entry[1]):
1.63      dwinter  2033:            setattr(entry[1],'viewClassification','view point')
                   2034:        else:
                   2035:            setattr(entry[1],'viewClassification','area')
                   2036: 
                   2037:                 #entry[1].contentType == entry[1].content_type
                   2038: 
                   2039:                 if entry[1].meta_type in ['ECHO_collection','ECHO_group']:
                   2040:                     entry[1].patchViewClassification(entry[1])    
                   2041: 
                   2042:                 
                   2043:         return "changed all contenttypes in: "+self.title
                   2044: 
1.19      dwinter  2045:     def ECHO_newViewerLink(self,obj=None):
                   2046:         """change links (:86 faellt weg)"""
                   2047: 
                   2048:         if not obj:
                   2049:             obj = self
                   2050:             
                   2051:         entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection'])
                   2052: 
                   2053:         for entry in entries:
                   2054:                 
                   2055:                 if entry[1].meta_type == 'ECHO_resource':
                   2056:                     
                   2057:                     entry[1].link=re.sub('\:86','',entry[1].link)
                   2058: 
                   2059:                 else:
                   2060:                     
                   2061:                     entry[1].ECHO_newViewerLink(entry[1])
                   2062:                 
                   2063:         return "Rerenderd all links to resources in: "+self.title
1.1       casties  2064: 
                   2065:     def __init__(self,id,title):
                   2066:         """init"""
                   2067:         self.id = id
                   2068:         self.title=title
1.13      dwinter  2069: 
1.14      dwinter  2070:     def deleteSpace(self,str):
                   2071:         """delete space at the end of a line"""
                   2072:         if str[len(str)-1]==" ":
                   2073:             return str[0:len(str)-1]
                   2074:         else:
                   2075:             return str
                   2076:         
                   2077:     
                   2078: 
                   2079:     # zusaetliche methoden fuer das vlp muessen in ein eigenes produkt
                   2080: 
                   2081:     def formatAscii(self,str,url=None):
                   2082:         """ersetze ascii umbrueche durch <br>"""
                   2083:         #url=None
                   2084:         if url:
                   2085:             
                   2086:             retStr=""
                   2087:             words=str.split("\n")
                   2088:             
                   2089:             for word in words:
                   2090:                 strUrl=url%word
1.91      dwinter  2091: 
1.14      dwinter  2092:                 retStr+="""<a href="%s">%s</a><br/>"""%(strUrl,word)
                   2093:             str=retStr
                   2094:         if str:
                   2095:             return re.sub(r"[\n]","<br/>",str)
                   2096:         else:
                   2097:             return ""
                   2098:         
                   2099:     def link2html(self,str):
                   2100:         """link2html fuer VLP muss hier noch raus"""
                   2101:         if str:
1.91      dwinter  2102: 
1.14      dwinter  2103:             str=re.sub("\&","&amp;",str)
                   2104:             dom=xml.dom.minidom.parseString("<?xml version='1.0' ?><txt>"+str+"</txt>")
                   2105:             links=dom.getElementsByTagName("link")
                   2106:             
1.91      dwinter  2107: 
1.14      dwinter  2108:             for link in links:
                   2109:                 link.tagName="a"
                   2110:                 ref=link.getAttribute("ref")
                   2111:                 if self.checkRef(ref):
                   2112:                     link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)
                   2113: 
                   2114:             return dom.toxml('utf-8')
                   2115:         return ""
                   2116: 
                   2117: 
                   2118:     def checkRef(self,ref):
                   2119:         dbs={'vl_literature':'AND CD LIKE \'%lise%\'','vl_technology':'','vl_people':''}
                   2120:         res=None
                   2121:         for db in dbs.keys():
                   2122: 
                   2123:             res=res or self.search(var=str("select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db])))
                   2124:         return res
                   2125:                                     
                   2126:     #Ende Methode fuer vlp
                   2127: 
1.13      dwinter  2128:     def PgQuoteString(self,string):
                   2129:         """Quote string"""
1.91      dwinter  2130: 
1.13      dwinter  2131:         return libpq.PgQuoteString(string)
1.1       casties  2132:         
                   2133:     def getPartners(self):
                   2134:         """Get list of Partners. Presently only from a subfolder partners"""
1.26      dwinter  2135:                     
                   2136:         return [ item[1] for item in self.partners.ZopeFind(self.partners,obj_metatypes=['ECHO_partner'])]
1.13      dwinter  2137:                 
1.1       casties  2138:                 
1.26      dwinter  2139:                    
1.1       casties  2140: 
1.24      dwinter  2141:     
1.26      dwinter  2142:     def getPartnersXML(self):
                   2143:         """partner liste als xml""" 
                   2144:         partners=self.getPartners()
1.60      dwinter  2145:         ret="""<?xml version="1.0" encoding="utf-8" ?>
                   2146:    <partners>"""
                   2147:         
                   2148:    for partner in partners:
                   2149:             ret+="""<partner id="%s" title="%s"/>\n"""%(partner.getId(),unicode(partner.title,'utf-8','replace'))
1.26      dwinter  2150: 
                   2151:         return ret+"\n</partners>"
1.24      dwinter  2152:     
1.1       casties  2153:     def getCollectionTree(self):
                   2154:         """get the collection tree (list of triples (parent,child, depth)"""
                   2155: 
                   2156:         def getCollection(object,depth=0):
                   2157:             depth+=1
                   2158:             collections=[]
                   2159:             for entry in object.__dict__.keys():
                   2160:                 element=getattr(object,entry)
                   2161:                 try:
                   2162:                     if element.meta_type=="ECHO_collection":
                   2163:                         collections.append((object,element,depth))
                   2164:                         collections+=getCollection(element,depth)
                   2165:                 except:
                   2166:                     """nothing"""
                   2167:             return collections
                   2168:         
                   2169: 
                   2170:         return getCollection(self)
                   2171:     
                   2172:     def getCollectionTreeIds(self):
                   2173:         """Show the IDs of the Tree"""
                   2174:         ret=[]
                   2175:         for collection in self.getCollectionTree():
                   2176:             ret.append((collection[0].getId(),collection[1].getId(),collection[2]))
                   2177:         return ret
                   2178: 
1.82      dwinter  2179:     def getResourcesHTML(self,viewerType=None,filter=None):
                   2180:        """gebe all ressourcen aus"""
1.81      dwinter  2181: 
1.82      dwinter  2182:        def sortHTML(x,y):
                   2183:            return cmp(x[1].title,y[1].title)
                   2184:        
                   2185:        ret="""<html><body><h2>Resources in ECHO</h3>"""
                   2186:        
                   2187:        resources = self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
                   2188:        ret+="""<h3>Found %i resources</h3>"""%len(resources)
                   2189:        resources.sort(sortHTML)
                   2190:        for resource in resources:
                   2191:            echo_url=resource[1].absolute_url()
                   2192:            
                   2193:            if hasattr(resource[1],'title'):
                   2194:                title=resource[1].title
                   2195:            else:
                   2196:                title="None"
                   2197:            if filter:
                   2198:                if re.search(filter,title):
                   2199:                    ret+="""\n<p><a href="%s">%s</a></p>"""%(echo_url,title)
                   2200:            else:
                   2201:                ret+="""\n<p><a href="%s">%s</a></p>"""%(echo_url,title)
                   2202: 
                   2203:        ret +="""\n</body></html>"""
                   2204:        
                   2205:        #self.REQUEST.RESPONSE.setHeader("Content-Type", "text/html")
                   2206:        #self.REQUEST.RESPONSE.write(ret)
                   2207:            return ret
                   2208:     
1.81      dwinter  2209:     def getResourcesXML(self,viewerType=None,filter=None):
                   2210:        """gebe all ressourcen aus"""
                   2211:        ret="""<?xml version="1.0" ?>
                   2212:                 <index>"""
                   2213:        for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
                   2214: 
                   2215:            echo_url=resource[1].absolute_url()
                   2216:            if hasattr(resource[1],'link'):
                   2217:                viewer_url=resource[1].link
                   2218:            else:
                   2219:                viewer_url="NO URL"
                   2220:            if filter:
                   2221:                if re.search(filter,viewer_url):
                   2222:                    ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
                   2223:            else:
                   2224:                ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
                   2225:        ret +="""\n</index>"""
                   2226:        
                   2227:        self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
                   2228:        self.REQUEST.RESPONSE.write(ret)
1.83      dwinter  2229: 
                   2230:     def getFullTextsXML(self,viewerType=None,filter=None):
                   2231:        """gebe all ressourcen aus"""
                   2232:        ret="""<?xml version="1.0" ?>
                   2233:                 <index>"""
                   2234:        for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
                   2235: 
                   2236:            echo_url=resource[1].absolute_url()
                   2237:            if resource[1].getFullTextXML(noredirect="yes"):
                   2238:                if hasattr(resource[1],'link'):
                   2239:                    viewer_url=echo_url+"/getFullTextXML"
                   2240:                else:
                   2241:                    viewer_url="NO URL"
                   2242:                if filter:
                   2243:                    if re.search(filter,viewer_url):
                   2244:                        ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
                   2245:                else:
                   2246:                    ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
                   2247:        ret +="""\n</index>"""
1.90      dwinter  2248:        
1.81      dwinter  2249:        
1.83      dwinter  2250:        self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
                   2251:        self.REQUEST.RESPONSE.write(ret)
1.1       casties  2252:         
1.13      dwinter  2253: def manage_addECHO_root(self,id,title,RESPONSE=None):
1.1       casties  2254:     """Add an ECHO_root"""
                   2255:     self._setObject(id,ECHO_root(id,title))
                   2256:     
                   2257:     if RESPONSE is not None:
                   2258:         RESPONSE.redirect('manage_main')
                   2259: 
1.13      dwinter  2260: def manage_addECHO_rootForm(self):
1.1       casties  2261:         """Nothing yet"""
1.13      dwinter  2262:         pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_root.zpt').__of__(self)
1.1       casties  2263:         return pt()
1.93      dwinter  2264: 
                   2265: class ECHO_copyrightType(Folder):
                   2266:    """copyright typ"""
                   2267: 
                   2268:    meta_type="ECHO_copyrightType"
                   2269:    
                   2270:    def __init__(self,id,title,label):
                   2271:        """init"""
                   2272:        self.id=id
                   2273:        self.title=title
                   2274:        self.label=label
                   2275: 
                   2276:    manage_options = Folder.manage_options+(
                   2277:         {'label':'Main Config','action':'ECHO_copyrightType_config_mainForm'},
                   2278:    )
                   2279: 
                   2280:    def ECHO_copyrightType_config_mainForm(self):
                   2281:        """change form"""
                   2282:        pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_copyrightType').__of__(self)
                   2283:        pt.content_type="text/html"
                   2284:        return pt()
                   2285: 
                   2286:    def ECHO_copyrightType_config_main(self,title,label,RESPONSE=None):
                   2287:        """change"""
                   2288:        self.title=title
                   2289:        self.label=label
                   2290: 
                   2291:        if RESPONSE is not None:
                   2292:            RESPONSE.redirect('manage_main')
                   2293: 
                   2294: def manage_addECHO_copyrightTypeForm(self):
                   2295:         """Form for adding a ressource"""
                   2296:         pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_copyrightTypeForm.zpt').__of__(self)
                   2297:         return pt()
                   2298: 
                   2299: 
                   2300: def manage_addECHO_copyrightType(self,id,title,label,RESPONSE=None):
                   2301:     """addaresource"""
                   2302: 
                   2303:     newObj=ECHO_copyrightType(id,title,label)
                   2304: 
                   2305:     self._setObject(id,newObj)
                   2306: 
                   2307:     if RESPONSE is not None:
                   2308:         RESPONSE.redirect('manage_main')
                   2309:  
                   2310: 
1.1       casties  2311:  
                   2312: class ECHO_partner(Image,Persistent):
                   2313:     """ECHO Partner"""
                   2314: 
                   2315:     meta_type="ECHO_partner"
                   2316: 
1.99      jdamerow 2317:     def __init__(self, id, title,url, file, copyrightType, person, email, country, content_type='', precondition=''):
1.1       casties  2318:         self.__name__=id
                   2319:         self.title=title
                   2320:         self.url=url
1.99      jdamerow 2321:         self.person=person
                   2322:         self.email=email
                   2323:         self.country=country
1.1       casties  2324:         self.precondition=precondition
1.99      jdamerow 2325:        self.copyrightType=copyrightType
1.1       casties  2326:         data, size = self._read_data(file)
1.29      dwinter  2327:         content_type=self._get_content_type(file, data, id, content_type)
                   2328:         self.update_data(data, content_type, size)
1.1       casties  2329: 
                   2330:     manage_options = Image.manage_options+(
                   2331:         {'label':'Partner Information','action':'ECHO_partner_config'},
                   2332:         )
                   2333: 
1.98      dwinter  2334:     
1.99      jdamerow 2335:     def changeECHO_partner(self,url,copyrightType,person, email, country, RESPONSE=None):
1.1       casties  2336:         """Change main information"""
                   2337:         self.url=url
1.99      jdamerow 2338:         self.person=person
                   2339:         self.email=email
                   2340:         self.country=country
1.100   ! jdamerow 2341:         self.copyrightType=copyrightType
1.1       casties  2342:         if RESPONSE is not None:
                   2343:             RESPONSE.redirect('manage_main')
                   2344:             
                   2345:             
                   2346: 
                   2347:     def ECHO_partner_config(self):
                   2348:         """Main configuration"""
                   2349:         if not hasattr(self,'url'):
                   2350:             self.url=""
1.13      dwinter  2351:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_partner.zpt').__of__(self)
1.1       casties  2352:         return pt()
                   2353: 
                   2354:         
1.13      dwinter  2355: manage_addECHO_partnerForm=DTMLFile('dtml/ECHO_partnerAdd',globals(),
1.1       casties  2356:                              Kind='ECHO_partner',kind='ECHO_partner')
                   2357: 
                   2358: 
                   2359: 
1.99      jdamerow 2360: def manage_addECHO_partner(self, id, file,url, person, email, country, title='', precondition='', content_type='',
1.1       casties  2361:                     REQUEST=None):
                   2362:     """
                   2363:     Add a new ECHO_partner object.
                   2364: 
                   2365:     Creates a new ECHO_partner object 'id' with the contents of 'file'.
                   2366:     Based on Image.manage_addImage
                   2367:     """
                   2368: 
                   2369:     id=str(id)
                   2370:     title=str(title)
1.29      dwinter  2371:     content_type=str(content_type)
1.1       casties  2372:     precondition=str(precondition)
                   2373: 
                   2374:     id, title = OFS.Image.cookId(id, title, file)
                   2375: 
                   2376:     self=self.this()
                   2377: 
                   2378:     # First, we create the image without data:
1.99      jdamerow 2379:     self._setObject(id, ECHO_partner(id,title,url,'',person, email, country, content_type, precondition))
1.1       casties  2380: 
                   2381:     # Now we "upload" the data.  By doing this in two steps, we
                   2382:     # can use a database trick to make the upload more efficient.
                   2383:     if file:
                   2384:         self._getOb(id).manage_upload(file)
1.29      dwinter  2385:     if content_type:
                   2386:         self._getOb(id).content_type=content_type
1.1       casties  2387: 
                   2388:     if REQUEST is not None:
                   2389:         try:    url=self.DestinationURL()
                   2390:         except: url=REQUEST['URL1']
                   2391:         REQUEST.RESPONSE.redirect('%s/manage_main' % url)
                   2392:     return id
                   2393: 
                   2394: 

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