Annotation of ECHO_content/ECHO_movie.py, revision 1.2

1.1       dwinter     1: """preliminary object for displaying movies as part of a collection, shall be exchanged by a generalized ressource object"""
                      2: 
                      3: import string
                      4: import tempfile
                      5: import re
                      6: import os
                      7: import OFS.Image
                      8: from types import *
                      9: from OFS.Cache import Cacheable
                     10: from OFS.Image import Image
                     11: from Globals import DTMLFile
                     12: from OFS.Folder import Folder
                     13: from OFS.SimpleItem import SimpleItem
                     14: from AccessControl import ClassSecurityInfo
                     15: from AccessControl.User import UserFolder
                     16: from Globals import InitializeClass
                     17: from Globals import DTMLFile
                     18: import Globals
                     19: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
                     20: from Products.PageTemplates.PageTemplate import PageTemplate
                     21: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
                     22: from Globals import Persistent, package_home
                     23: from Acquisition import Implicit
                     24: 
                     25: import urllib
                     26: import smtplib
                     27: import time
                     28: from Ft.Xml.Domlette import NonvalidatingReader
                     29: from Ft.Xml.Domlette import PrettyPrint
                     30: from Ft.Xml import EMPTY_NAMESPACE
                     31: 
                     32: import Ft.Xml.XPath
                     33: import cStringIO
                     34: import zLOG
                     35: 
                     36: try:
                     37:    from psycopg import libpq
                     38: except:
                     39:    try:
                     40:        from pyPgSQL import libpq
                     41:    except:
                     42:        print "ECHO_collection: Warning - No libpq imported!"
                     43:        
                     44: import xml.dom.minidom
                     45: 
                     46: import urllib
                     47: import xml.dom.minidom
                     48: import ECHO_helpers
                     49: from ECHO_helpers import *
                     50: from ECHO_language import *
                     51: 
                     52: 
                     53: class ECHO_movie(Folder,Persistent,ECHO_basis):
                     54:     """ECHO Ressource"""
                     55:     security=ClassSecurityInfo()
                     56:     meta_type='ECHO_movie'
                     57: 
                     58: #    viewClassificationList=viewClassificationListMaster
                     59: 
                     60:     getSubCols = ECHO_helpers.getSubCols
                     61: 
                     62:     security.declareProtected('View','index_html')
                     63: 
                     64:     
                     65:   
                     66:     security.declareProtected('View','createPDF')
                     67:   
                     68: 
                     69:     def getRDF(self,urn=None):
                     70:        """rdf"""
                     71:        ret=getRDFDescription(self,self.link,urn=urn)
                     72:        return ret+self.createSubElementRDF(urn=urn) 
                     73: 
                     74:   
                     75:     def getAccessRightSelectorHTML(self,outlook="select"):
                     76:        """htmlselector"""
                     77:        values=['free','mpiwg']
                     78:        
                     79:        if outlook=="select":
                     80:            ret="""<select name="%s">"""%self.getId()
                     81: 
                     82:            for value in values:
                     83:                if value==self.getAccessRightMD():
                     84:                    ret+="<option selected>%s</option>"%value
                     85:                else:
                     86:                    ret+="<option>%s</option>"%value
                     87:            return ret+"</select>"
                     88: 
                     89:        else:
                     90:            ret=""
                     91:            for value in values:
                     92:                
                     93:                if value==self.getAccessRightMD():
                     94:                    ret+="""<input type="radio" name="%s" value="%s" checked>%s"""%(self.getId(),value,value)
                     95:                else:
                     96:                    ret+="""<input type="radio" name="%s" value="%s">%s"""%(self.getId(),value,value)
                     97:            return ret
                     98: 
                     99: 
                    100:     
                    101:     def getAccessRightMD(self):
                    102:        """set accessright"""
                    103:        url=self.metalink
                    104: 
                    105:        try:
                    106:            geturl=""
                    107:            for line in ECHO_helpers.urlopen(url).readlines():
                    108:                geturl=geturl+line
                    109: 
                    110: 
                    111:        except:
                    112:            return (None,"Cannot open: "+url)
                    113: 
                    114:        try:
                    115:            dom=xml.dom.minidom.parseString(geturl)
                    116:            root=dom.getElementsByTagName('resource')[0]
                    117:        except:
                    118:            return (None,"Cannot parse: "+url+"<br>"+geturl)
                    119: 
                    120:        internal=dom.getElementsByTagName('internal')
                    121:        if internal:
                    122:            institution=dom.getElementsByTagName('institution')
                    123:            return getText(institution[0].childNodes)
                    124:        
                    125:        free=dom.getElementsByTagName('free')
                    126:        if free:
                    127:            return "free"
                    128: 
                    129:        return "free" #default free
                    130: 
                    131:     def changeAccessRightMD(self,accessright,RESPONSE=None):
                    132:        """change the rights"""
                    133:        
                    134:        params="accessright=%s"%accessright
                    135: 
                    136: 
                    137:        #print ECHO_helpers.urlopen(self.absolute_url()+'/setAccessRightXML'+'?'+params).read()
                    138: 
                    139:        
                    140:        ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/setAccessRightXML'+urllib.quote('?'+params))).read()
                    141: 
                    142:      
                    143:        if RESPONSE is not None:
                    144:            RESPONSE.redirect('manage_main')
                    145: 
                    146:        
                    147:     def setAccessRightXML(self,accessright):
                    148:        """set accessright"""
                    149:        url=self.metalink
                    150: 
                    151:        try:
                    152:            geturl=""
                    153:            for line in ECHO_helpers.urlopen(url).readlines():
                    154:                geturl=geturl+line 
                    155: 
                    156: 
                    157:        except:
                    158:            return (None,"Cannot open: "+url)
                    159: 
                    160:        try:
                    161:            dom=xml.dom.minidom.parseString(geturl)
                    162:            root=dom.getElementsByTagName('resource')[0]
                    163:        except:
                    164:            return (None,"Cannot parse: "+url+"<br>"+geturl)
                    165: 
                    166:        metanodes=dom.getElementsByTagName('access-conditions')
                    167: 
                    168:        if not metanodes:
                    169:            nodenew=dom.createElement('access-conditions')
                    170:            root.appendChild(nodenew)
                    171:            metanode=nodenew
                    172:        else:
                    173:            metanode=metanodes[0]
                    174: 
                    175:        accesses=metanode.getElementsByTagName('access')
                    176: 
                    177:        if not accesses:
                    178:            nodenew2=dom.createElement('access')
                    179:            metanode.appendChild(nodenew2)
                    180:            metanode2=nodenew2
                    181:        else:
                    182:            metanode2=accesses[0]
                    183: 
                    184:        internal=metanode.getElementsByTagName('internal')
                    185: 
                    186:        if internal:
                    187:            metanode2.removeChild(internal[0]).unlink()
                    188: 
                    189:        free=metanode.getElementsByTagName('free')
                    190:        
                    191:        if free:
                    192:            metanode2.removeChild(internal[0]).unlink()
                    193: 
                    194: 
                    195:        if accessright=='free':
                    196:            nodenew3=dom.createElement('free')
                    197:            metanode2.appendChild(nodenew3)
                    198:        elif accessright=='mpiwg':
                    199:            nodenew3=dom.createElement('internal')
                    200:            nodenew4=dom.createElement('institution')
                    201:            metanodetext=dom.createTextNode('mpiwg')
                    202:            nodenew4.appendChild(metanodetext)
                    203:            nodenew3.appendChild(nodenew4)
                    204:            metanode2.appendChild(nodenew3)
                    205: 
                    206:        return dom.toxml().encode('utf-8')
                    207: 
                    208:   
                    209:   
                    210:     def copyTitleToInfoXML(self,RESPONSE=None):
                    211:        """copy title from the resource"""
                    212:        presentationXML=readFieldFromXML(self.metalink,'texttool','presentation')
                    213:        resourcepath=readFieldFromXML(self.metalink,'resource','archive-path')
                    214:        if (not presentationXML) or (not resourcepath): 
                    215:        if RESPONSE:
                    216:            RESPONSE.write("Error: %s\n"%self.getId())
                    217:        else:
                    218:            return None,self.absolute_url()
                    219: 
                    220:        try:
                    221:            fh=file(os.path.join(resourcepath,presentationXML),'w')
                    222:            fh.write("""<info>
                    223:            <author></author>
                    224:            <title>%s</title>
                    225:            <date></date>
                    226:            <display>yes</display>
                    227:            </info>"""%self.title)
                    228:            fh.close()
                    229:            return 1,self.getId()
                    230:        except:
                    231:            if RESPONSE:
                    232:                RESPONSE.write("Error: %s\n"%self.getId())
                    233:            else:
                    234:                return None,self.absolute_url()
                    235: 
                    236: 
                    237:    
                    238: 
                    239:     security.declarePublic('content_html') 
                    240:     def content_html(self):
                    241:         """template fuer content"""
                    242:         return ECHO_basis.content_html(self,'movie')
                    243:     
                    244: #    def getViewClassification(self):
                    245: #        if hasattr(self,'viewClassification'):
                    246: #            return self.viewClassification
                    247: #        else:
                    248: #            return ""
                    249: 
                    250:     
                    251:     def getCopyrightsHTML(self):
                    252:        """gib (link auf copyright link, mediatyp, institution, copyrightType, label von copyrightType) aus"""
                    253:        
                    254:        if hasattr(self,'copyrightModel'):
                    255:            obj=self.copyrightModel
                    256:            
                    257:        else:
                    258:            return "ERROR"
                    259:        ret=[]
                    260:        
                    261:        for copyright in obj.getCopyrights(): #copyright - media / partner / copyrightID
                    262:            
                    263:            
                    264:            try:
                    265:                if hasattr(self.copyrightTypes,copyright[2]):
                    266:                     copyrightTypeObj=getattr(self.copyrightTypes,copyright[2])
                    267:                     link="copyrightTypes/"+copyright[2]+'/copyright.html'
                    268:                else:
                    269:                     copyrightTypeObj=getattr(obj,copyright[2])
                    270:                     link="copyrightModel/"+copyright[2]+'/copyright.html'
                    271:                     
                    272:                label=copyrightTypeObj.label
                    273:                url=getattr(copyrightTypeObj, 'url', '')
                    274:                
                    275:                if url!='':
                    276:                     ret.append((url,copyright[0],copyright[1],copyright[2],label))
                    277:                else:
                    278:                    if hasattr(copyrightTypeObj, 'copyright.html'):
                    279:                         ret.append(("""%s?partner=%s"""%(link,copyright[1]),copyright[0],copyright[1],copyright[2],label))
                    280:                    else:
                    281:                         ret.append(('empty',copyright[0],copyright[1],copyright[2],label))
                    282:            except:
                    283:                """nothing"""
                    284:            
                    285:        return ret
                    286:        
                    287:     def getInstitutionsHTML(self):
                    288:        """gibt Liste der foerdernden Institutionen aus"""
                    289:        
                    290:        if hasattr(self,'support'):
                    291:            obj=self.support
                    292:            ret=obj.getSupporter()
                    293:            return ret
                    294:        else:
                    295:            return ''
                    296:            
                    297:     
                    298:     def getCredits(self):
                    299:         """Ausgabe der credits"""
                    300:         if self.credits:
                    301:             return self.credits
                    302:         else:
                    303:             return []
                    304: 
                    305: 
                    306:     
                    307:     def __init__(self,id,link,thumbUrl,rawFile,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords):
                    308: 
                    309:         self.id = id
                    310:         """Festlegen der ID"""
                    311:         
                    312:         self.label = label
                    313:         self.link= link
                    314:         self.metalink=metalink
                    315:         self.title=title
                    316:         self.weight=weight
                    317:         self.credits=toList(credits)
                    318:         self.description=description
                    319:         self.contentType=contentType
                    320:    self.copyrightType=copyrightType
                    321:    self.renderingType=renderingType
                    322:         self.responsible=responsible
                    323:         self.resourceID=resourceID
                    324:         self.thumbUrl=thumbUrl
                    325:         self.rawFile=rawFile
                    326:    
                    327:         if coords:
                    328:             coordsnew=[ string.split(x,",") for x in coords]
                    329:         else:
                    330:             coordsnew=[]
                    331:         
                    332:         self.coords=coordsnew
                    333: #  self.viewClassification=""
                    334: 
                    335: 
                    336: 
                    337:     def getContentType(self):
                    338:        try:
                    339:            return self.contentType
                    340:        except:
                    341:            return ""
                    342: 
                    343:     def getCopyrightType(self):
                    344:        try:
                    345:            return self.copyrightType
                    346:        except:
                    347:            return ""
                    348: 
                    349:     def getRenderingType(self):
                    350:        try:
                    351:            return self.renderingType
                    352:        except:
                    353:            return ""
                    354: 
                    355:     def ECHO_movie_config(self):
                    356:         """Main configuration"""
                    357: 
                    358:         if not hasattr(self,'weight'):
                    359:             self.weight=""
                    360: 
                    361:         pt=zptFile(self, 'zpt/ChangeECHO_movie.zpt')
                    362:         return pt()
                    363:     
                    364: 
                    365:     def ECHO_movie_config_main(self):
                    366:         """Main configuration"""
                    367:         if not hasattr(self,'weight'):
                    368:             self.weight=""
                    369:         pt=zptFile(self, 'zpt/ChangeECHO_movie_main.zpt')
                    370:         return pt()
                    371: 
                    372:     def ECHO_movie_config_coords(self):
                    373:         """Coords configuration """
                    374:         pt=zptFile(self, 'zpt/ChangeECHO_movie_coords.zpt')
                    375:         return pt()
                    376: 
                    377:     def ECHO_movie_config_credits(self):
                    378:         """Main configuration"""
                    379:         pt=zptFile(self, 'zpt/ChangeECHO_movie_credits.zpt')
                    380:         return pt()
                    381: 
                    382:     def ECHO_resource_config_metadata(self):
                    383:         """Main configuration"""
                    384:    if (hasattr(self,'metadata')) and not (hasattr(self,'metaDataHash')):
                    385:        self.metaDataHash={}
                    386:        self.contentType=self.bib_type
                    387:        for data in self.metadata:
                    388:            data_neu=re.sub('-','_',data)
                    389:            self.meta
                    390:                         DataHash[data_neu]=getattr(self,data)[0:]
                    391: 
                    392:    
                    393:         pt=zptFile(self, 'zpt/ChangeECHO_resource_metadata.zpt')
                    394:         return pt()
                    395: 
                    396: 
                    397:     
1.2     ! dwinter   398:     def changeECHO_movie_main(self,metalink,link,rawFile,thumbUrl,title,label,description,contentType,renderingType="",weight="",resourceID="",RESPONSE=None):
1.1       dwinter   399:         """Aenderung der Properties"""
                    400:    self.resourceID=resourceID
                    401:    self.title=title
                    402:    self.label=label
                    403:    self.description=description
                    404: 
                    405:    self.contentType=contentType
                    406:    self.renderingType=renderingType
                    407:    self.weight=weight
                    408:    
                    409:         self.link=link
                    410:         self.thumbUrl=thumbUrl
                    411:         self.rawFile=rawFile
                    412:        
                    413:         self.metalink=metalink
                    414:         
                    415:         if RESPONSE is not None:
                    416:             RESPONSE.redirect('manage_main')
                    417: 
                    418: 
                    419:     def changeECHO_movie_coords(self,RESPONSE=None):
                    420:         """Aenderung der Properties - coords"""
                    421:    #return self.REQUEST
                    422:    for area in self.getMapAreas():
                    423:        id = area.getId()
                    424:        if self.REQUEST.has_key('del.'+id):
                    425:        # delete this area
                    426:        self._delObject(id)
                    427:        # return to same menu
                    428:        if RESPONSE is not None:
                    429:            RESPONSE.redirect('ECHO_movie_config_coords')
                    430:        return
                    431:        # modify this area
                    432:        coordstring = self.REQUEST.get('coords.'+id, '')
                    433:        coords = string.split(coordstring, ',')
                    434:        angle = self.REQUEST.get('angle.'+id, '0')
                    435:        type = self.REQUEST.get('type.'+id, 'area')
                    436:        if len(coords) == 4:
                    437:        area.setCoordString(coordstring)
                    438:        area.setAngle(angle)
                    439:        area.setType(type)
                    440:    # return to main menu    
                    441:    if RESPONSE is not None:
                    442:        RESPONSE.redirect('manage_main')
                    443: 
                    444: 
                    445:     def changeECHO_movie_credits(self,credits,responsible,copyrightType,RESPONSE=None):
                    446:         """Aenderung der Properties"""
                    447:    self.credits=credits
                    448:    self.responsible=responsible
                    449:    self.copyrightType=copyrightType
                    450:         
                    451:         if RESPONSE is not None:
                    452:             RESPONSE.redirect('manage_main')
                    453: 
                    454: 
                    455:     def changeECHO_resource_metadata_local(self,RESPONSE=None):
                    456:        """change metadata"""
                    457:        tags=self.findTagsFromMapping(self.contentType)
                    458:        for field in tags[1]:
                    459:            self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)][0:]
                    460:            
                    461: 
                    462:                
                    463:        if RESPONSE is not None:
                    464:            RESPONSE.redirect('manage_main')
                    465: 
                    466:     def changeECHO_resource_metadata(self,RESPONSE=None):
                    467:        """change metadata"""
                    468:        tags=self.findTagsFromMapping(self.contentType)
                    469:        self.OSAS_meta={}
                    470:        for field in tags[1]:
                    471:            try:
                    472:                self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)]
                    473:                self.OSAS_meta[self.getFieldTag(tags,field)]=self.REQUEST.form['OSAS_%s'%self.getFieldTag(tags,field)]
                    474:            except:
                    475:                """nothing"""
                    476: 
                    477:        ECHO_helpers.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()
                    478: 
                    479: 
                    480:        if RESPONSE is not None:
                    481:            RESPONSE.redirect('manage_main')
                    482: 
                    483: 
                    484:     def getMDValue(self,fieldName,empty=None):
                    485:        if not empty:
                    486:            return self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType)
                    487:        
                    488:        else:
                    489:            return self.metaDataHash.get(fieldName,empty)
                    490:        
                    491:     def newMetaXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None,digiliburlprefix=None):
                    492:        """new index.meta"""
                    493:        self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
                    494: 
                    495:        if not hasattr(self,'metaDataHash'):
                    496:        
                    497:            self.copyIndex_meta2echo_resource()
                    498:        try:
                    499:            return writeMetadata(self.metalink,self.OSAS_meta,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix=digiliburlprefix)
                    500:        except:
                    501:            return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix=digiliburlprefix)
                    502: 
                    503:     def showMetaDataXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None):
                    504:        """schreibe md"""
                    505:        
                    506:        try:
                    507:            
                    508:            return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,xmlfrag="yes")
                    509:        except:
                    510:            return "<error> no metadata stored</error>"
                    511:     
                    512:     def getMetaDataXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None):
                    513:        """prints out metadata as stored in the echo environment, format is the index.meta format"""
                    514:        self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
                    515:        return writeMetadata(self.metalink,self.metaDataHash)
                    516: 
                    517:     def changeECHO_movie(self,metalink,link,thumbUrl,rawFile,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None):
                    518:         """Aenderung der Properties"""
                    519:         
                    520:         setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight)
                    521:         self.link=link
                    522:         self.metalink=metalink
                    523:         self.thumbUrl=thumbUrl
                    524:         self.rawFile=rawFile
                    525:         
                    526:         
                    527:         if RESPONSE is not None:
                    528:             RESPONSE.redirect('manage_main')
                    529:             
                    530:             
                    531:     manage_options = Folder.manage_options+(
                    532:         {'label':'Main Config','action':'ECHO_movie_config_main'},
                    533:    {'label':'Change Metadata','action':'ECHO_movie_config_metadata'},
                    534:    {'label':'Graphic Coords','action':'ECHO_graphicEntry'},
                    535:         {'label':'Sync Metadata','action':'ECHO_getResourceMD'},
                    536:    {'label':'Change TemplateSets and Image Viewer','action':'changeViewerTemplateSetForm'},
                    537:    {'label':'set/change startpage','action':'setStartPageForm'},
                    538:    {'label':'Copy MD for indexing and search','action':'copySearchFields'},
                    539:    )
                    540: 
                    541: 
                    542:     def isDefinedInThisSet(self,fields,field):
                    543:        """checks if field is defined in fields"""
                    544:        if (fields[0].has_key(field)) and not (fields[0][field]==""):
                    545:            return 1
                    546:        else:
                    547:          
                    548:            return 0
                    549:        
                    550:     def getFieldLabel(self,fields,field):
                    551:         """get labels"""
                    552:         try:
                    553:             ret =fields[0][field]
                    554:             if ret == "":
                    555:                 return field
                    556:             else:
                    557:                 return ret
                    558:         except:
                    559:             return field
                    560: 
                    561: 
                    562: 
                    563:     def getFieldTag(self,fields,field):
                    564:         """get labels"""
                    565:         try:
                    566:             ret =fields[0][field]
                    567:             if ret == "":
                    568:                 return field
                    569:             else:
                    570:                 return ret
                    571:         except:
                    572:             return field
                    573: 
                    574:     
                    575:         
                    576:     def getFieldValue(self,field):
                    577:         """get value"""
                    578:    
                    579:         try:
                    580:    
                    581:             ret=self.metaDataHash[field]
                    582:             if ret == "":
                    583:                 return None
                    584:             else:
                    585:            
                    586:            return ret
                    587:         except:
                    588:             return None
                    589: 
                    590:     def getMetaDataHash(self):
                    591:        """md hash"""
                    592:        return self.metaDataHash
                    593:     
                    594:     def setFieldValue(self,field,value):
                    595:         """get value"""
                    596:    
                    597:    if not hasattr(self,'metaDataHash'):
                    598:        setattr(self,'metaDataHash',{})
                    599:    self.metaDataHash[field]=value[0:]
                    600:    
                    601: 
                    602:     def copySearchFields(self):
                    603:        """copys metadatafields to the object"""
                    604:        fields=['author','title','year']
                    605:        for field in fields:
                    606:            setattr(self,'MD_'+field,self.getFieldValue(field))
                    607:     
                    608: 
                    609:     def findLabelsFromMapping(self,referenceType):
                    610:         """gib hash mit label -> generic zurueck"""
                    611:    #return {},[]
                    612: 
                    613:         temp=self.ZopeFind(self.standardMD)
                    614: 
                    615:    if referenceType=="":
                    616:        referenceType="book"
                    617:    
                    618:    
                    619:         bibdata={}
                    620:         retdata={}
                    621:    fields=[]
                    622:         fieldlist=self.standardMD.fieldList
                    623: 
                    624:         tags=self.findTagsFromMapping(self.contentType)
                    625:    self.referencetypes=tags[2]
                    626:    for referenceTypeF in self.referencetypes:
                    627: 
                    628:        if referenceTypeF[1].title.lower() == referenceType.lower():
                    629: 
                    630:            try:
                    631:                bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
                    632:                referenceType=referenceTypeF[1].title
                    633:            except:
                    634:                bibdata[referenceType]=referenceTypeF[1].fields
                    635:        
                    636: 
                    637:            bibdata['data']=referenceTypeF[1]
                    638:            fields=bibdata[referenceType]
                    639:                         for field in fieldlist:
                    640:                             retdata[field]=referenceTypeF[1].getValue(field)[1]
                    641: 
                    642:         return retdata,fieldlist,temp,fields
                    643: 
                    644:     def findTagsFromMapping(self,referenceType):
                    645:         """gib hash mit label -> generic zurueck"""
                    646:    
                    647: 
                    648:    if referenceType=="":
                    649:        referenceType="book"
                    650:    
                    651:    temp =  self.ZopeFind(self.standardMD)[0:]
                    652: 
                    653:    
                    654:    #self.referencetypes=temp[0:]
                    655:    
                    656:    
                    657:    
                    658: 
                    659:    
                    660: 
                    661:         bibdata={}
                    662:         retdata={}
                    663:         fieldlist=self.standardMD.fieldList
                    664:         fields=[]
                    665:    for referenceTypeF in temp:
                    666:        #print referenceType
                    667:    
                    668:        if referenceTypeF[1].title.lower() == referenceType.lower(): 
                    669:            try:
                    670:                bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
                    671:                referenceType=referenceTypeF[1].title
                    672:            except:
                    673:                bibdata[referenceType]=referenceTypeF[1].fields
                    674:            bibdata['data']=referenceTypeF[1]
                    675:            fields=bibdata[referenceType]
                    676:                         for field in fieldlist:
                    677:                             retdata[field]=referenceTypeF[1].getValue(field)[0]
                    678:    
                    679:         return retdata,fieldlist,temp,fields
                    680: 
                    681:     
                    682:     security.declarePublic('copyIndex_meta2echo_resource') # has to be change, presentlyset because of OSAS koordination
                    683:     def copyIndex_meta2echo_resource(self,RESPONSE=None):
                    684:        """copy MD von Index_meta to the echo_resource"""
                    685:        
                    686:        (metadict, error)=readMetadata(self.metalink)
                    687: 
                    688: 
                    689:        
                    690:        self.metaDataHash={}
                    691:        if not error=="": #Fehler beim Auslesen des Metafiles
                    692:            
                    693:            return "ERROR:",error,self.absolute_url()
                    694:        
                    695:        self.contentType=metadict['bib_type'][0:]
                    696:        fields=self.findTagsFromMapping(self.contentType)
                    697:        
                    698:        #fields=self.findLabelsFromMapping(self.contentType)
                    699:        for field in fields[1]:
                    700:            
                    701:            if self.isDefinedInThisSet(fields,field):
                    702:                #print urllib.unquote(metadict.get(self.getFieldTag(fields,field),''))
                    703:                self.setFieldValue(self.getFieldTag(fields,field),metadict.get(self.getFieldTag(fields,field),''))
                    704: 
                    705:        
                    706:        
                    707:        if RESPONSE:
                    708:            return RESPONSE.redirect('manage_main')
                    709:        
                    710:     def ECHO_getResourceMD(self,template="yes",back=None):
                    711:         """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource"""
                    712:         (metadict, error)=readMetadata(self.metalink)
                    713: 
                    714:         if back:
                    715:             self.REQUEST.SESSION['back']=back
                    716: 
                    717:         if not error=="": #Fehler beim Auslesen des Metafiles
                    718:        return "ERROR:",error
                    719:    
                    720: 
                    721:    if not (metadict['bib_type'].lower()==self.contentType.lower()):
                    722:        self.REQUEST.SESSION['contentStorage']=metadict['bib_type']
                    723:        self.REQUEST.SESSION['contentZope']=self.contentType
                    724: 
                    725:        return zptFile(self, 'zpt/ECHO_getResourceMDErrorContentType.zpt')()
                    726: 
                    727:    self.REQUEST.SESSION['metadict']=metadict
                    728: 
                    729:    
                    730:    
                    731:    self.REQUEST.SESSION['diffs']=checkDiffs(self,self.REQUEST.SESSION['metadict'])
                    732:    
                    733: 
                    734:        
                    735:         if template=="yes":
                    736:        pt=zptFile(self, 'zpt/ECHO_resourceMD.zpt')
                    737:        return pt()
                    738: 
                    739:    
                    740: 
                    741:     
                    742:     
                    743:     def ECHO_getMD(self,item):
                    744:         """Ausgabe der MD"""
                    745:         return getattr(self,item)
                    746: 
                    747:     def checkRDF(self,path):
                    748:        """check if pdf in the path"""
                    749:        try:
                    750:            for fileName in os.listdir(path):
                    751:                if os.path.splitext(fileName)[1]==".pdf":
                    752:                    return os.path.join(path,fileName)
                    753:            return None
                    754:        except:
                    755:            return None
                    756:        
                    757:        
                    758:     def index_html(self):
                    759:         """standard page"""
                    760:         pdf=self.checkRDF(self.link)
                    761:    if pdf:
                    762:        fh=file(pdf,'r').read()
                    763:        self.REQUEST.RESPONSE.setHeader('Content-Type','application/pdf')
                    764:        self.REQUEST.RESPONSE.write(fh)
                    765:        self.REQUEST.RESPONSE.close()
                    766:        return 
                    767:         return self.REQUEST.RESPONSE.redirect(self.link)
                    768: 
                    769: 
                    770:     security.declarePublic('generate_label') # has to be change, presentlyset because of OSAS koordination
                    771: 
                    772:     def generate_label(self):
                    773:         """Erzeugt_standard_Label aus Template"""
                    774:         pt=getattr(self,"label_template_"+self.contentType.lower())
                    775: 
                    776:    self.label=pt()[0:]
                    777:         return pt()
                    778: 
                    779:     security.declarePublic('generate_title') # has to be change, presentlyset because of OSAS koordination
                    780: 
                    781:     def generate_title(self,RESPONSE=None):
                    782:         """Erzeugt_standard_Label aus Template"""
                    783:         pt=getattr(self,"label_template_"+self.contentType.lower())
                    784: 
                    785:    self.title=pt()[0:]
                    786:    
                    787:         return pt()
                    788: 
                    789: Globals.InitializeClass(ECHO_movie)
                    790: 
                    791: def manage_addECHO_movieForm(self):
                    792:         """Form for adding a ressource"""
                    793:         pt=zptFile(self, 'zpt/AddECHO_movieForm.zpt')
                    794:         return pt()
                    795: 
                    796: 
                    797: 
                    798: def manage_addECHO_movie(self,id,title,label,description="",responsible="",link="",thumbUrl="",rawFile="",metalink="",weight="",copyrightType=None,resourceID=None,contentType=None,renderingType=None,credits=None,coords=None,RESPONSE=None):
                    799:     """addaresource"""
                    800: 
                    801:     newObj=ECHO_movie(id,link,thumbUrl,rawFile,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords)
                    802: 
                    803:     self._setObject(id,newObj)
                    804: 
                    805:     if RESPONSE is not None:
                    806:         RESPONSE.redirect('manage_main')
                    807:  

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