Annotation of ECHO_content/ECHO_movie.py, revision 1.8

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

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