Annotation of OSAS/OSA_system/OSAS_addfiles.py, revision 1.53

1.1       dwinter     1: # Methoden und Classen zum Hinzufuegen von Dokumenten
                      2: 
1.18      dwinter     3: 
1.27      dwinter     4: from OSAS_helpers import readArchimedesXML, getText
1.18      dwinter     5: import os
1.7       dwinter     6: import xml.dom.minidom
1.24      dwinter     7: import re
1.3       dwinter     8: import urllib
1.1       dwinter     9: import OSAS_add
1.9       dwinter    10: import OSAS_show
1.5       dwinter    11: import string
1.1       dwinter    12: from OFS.Folder import Folder
                     13: from AccessControl import ClassSecurityInfo
                     14: from Globals import InitializeClass
                     15: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
                     16: from Products.PageTemplates.PageTemplate import PageTemplate
1.18      dwinter    17: import archive # check if this is necessary
1.40      dwinter    18: from Globals import package_home
1.21      dwinter    19: 
                     20: from xml.sax import make_parser
                     21: from xml.sax.handler import ContentHandler
1.44      dwinter    22: import sys
1.51      dwinter    23: import logging
1.52      dwinter    24: import xmlrpclib
1.51      dwinter    25: #ersetzt logging
                     26: def logger(txt,method,txt2):
                     27:     """logging"""
                     28:     logging.info(txt+ txt2)
                     29: 
                     30: 
1.21      dwinter    31: 
                     32: def spaces(depth):
                     33:     """needed in XMLtoTree"""
                     34:     tmp=""
                     35:     k=0
                     36:     while k<2*depth:
                     37:         k+=1
                     38:         tmp=tmp+"&nbsp;"+"&nbsp;"
                     39:     return tmp
                     40: 
                     41: 
1.1       dwinter    42: class OSAS_add_Document(Folder):
                     43:     """Hinzufuegen eines Dokumentes zum Storage"""
                     44:     security=ClassSecurityInfo()
                     45: 
                     46:     def __init__(self,id):
                     47:         """initialize a new instance"""
                     48:         self.id = id
                     49:         
                     50:         
                     51:     meta_type='OSAS_add_Document'    
                     52:     manage_options = Folder.manage_options+(
                     53:             {'label':'Main Config','action':'add_Document_config'},
                     54:             )
                     55:         
                     56:      
                     57:         
                     58:     security.declarePublic('add_Document_config')
                     59:     def add_Document_config(self):
                     60:         """Main configuration"""
1.40      dwinter    61:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeOSAS_addDocument.zpt')).__of__(self)
1.1       dwinter    62:         return pt()
                     63:     
                     64:     security.declarePublic('change_OSAS_add_Document')
                     65:     def change_OSAS_add_Document(self,RESPONSE=None):
                     66:         """Change"""
                     67: #        self.RootFolderName=RootFolderName
                     68:         if RESPONSE is not None:
                     69:             RESPONSE.redirect('manage_main')
                     70: 
                     71:     security.declarePublic('index_html')
                     72:     def index_html(self):
                     73:         """stantard aufruf"""
1.24      dwinter    74:         return OSAS_add.add(self.standardMD,no_upload=1)
1.1       dwinter    75: 
                     76: 
                     77:     security.declarePublic('add2')
                     78:     def add2(self):
                     79:         """ anlegen naechster schritt"""
1.24      dwinter    80:         return OSAS_add.add2(self.standardMD)
1.1       dwinter    81: 
                     82:     def add3(self):
                     83:         """Foldername"""
                     84:         return OSAS_add.add3(self)
                     85: 
                     86:     def add4(self):
                     87:         """Applet"""
1.41      dwinter    88:         
1.1       dwinter    89:         return OSAS_add.add4(self)
                     90: 
                     91:     def add5(self):
                     92:         """Foldername"""
                     93:         return OSAS_add.add5(self)
                     94: 
                     95:     def add6(self):
                     96:         """write new index.meta file"""
                     97:         return OSAS_add.add6(self)
                     98: 
1.27      dwinter    99:     def addText2(self):
                    100:         """add only a text"""
                    101:         metadata=OSAS_add.parse_query_string(self.REQUEST['QUERY_STRING'])
                    102:         metadata['archive-creation-date']=OSAS_add.date(self)
                    103:         metadata['creator']=self.REQUEST['creator']
                    104:         metadata['description']=self.REQUEST['content_description']
1.41      dwinter   105:         metadata['archive-path']=os.path.split(self.REQUEST.SESSION['pathnew'])[0]
                    106:         #metadata['folder_name']=self.REQUEST.SESSION['folder_name']
                    107:         metadata['folder_name']=os.path.split(self.REQUEST.SESSION['pathnew'])[1]
                    108:         metadata['content-type']="fulltext document"
                    109:         self.reftype=self.REQUEST.SESSION['reftype']
                    110:         self.REQUEST.SESSION['add_metadata']=metadata   
                    111:         self.add_metadata=metadata
                    112:         self.metadata=self.REQUEST.SESSION['metadata']
                    113:         self.metadataprint=""
                    114:         for tag in self.metadata.keys():
1.36      dwinter   115:             
                    116:             #print str(self.metadata[tag]).decode('utf-8').encode('utf-8')
                    117:             self.metadataprint=self.metadataprint+"<"+tag+">"+self.metadata[tag]+"</"+tag+">\n"
1.27      dwinter   118: 
1.41      dwinter   119:         newtemplate=PageTemplateFile(os.path.join(package_home(globals()),'zpt','index_meta')).__of__(self)
                    120:         newtemplate.content_type="text/plain"
                    121:         renderxml = newtemplate(encoding='utf-8')
1.36      dwinter   122:         #return renderxml
1.30      dwinter   123:         metapath=self.REQUEST.SESSION['pathnew']+"/index.meta"
1.41      dwinter   124:         
                    125:         f=open(metapath,'w')
1.36      dwinter   126: 
1.41      dwinter   127:         f.write(renderxml)
                    128:         f.close()
                    129:         os.chmod(metapath,0664)
                    130:         os.popen('chmod -R 0775 %s'%self.add_metadata['archive-path']+"/"+self.add_metadata['folder_name']) 
                    131:         
1.27      dwinter   132:         return OSAS_add.addText2(self)
1.1       dwinter   133: 
1.35      dwinter   134:     def addPdf2(self):
                    135:         """add only a pdf"""
                    136:         metadata=OSAS_add.parse_query_string(self.REQUEST['QUERY_STRING'])
                    137:         metadata['archive-creation-date']=OSAS_add.date(self)
                    138:         metadata['creator']=self.REQUEST['creator']
                    139:         metadata['description']=self.REQUEST['content_description']
1.41      dwinter   140:         metadata['archive-path']=os.path.split(self.REQUEST.SESSION['pathnew'])[0]
                    141:         #metadata['folder_name']=self.REQUEST.SESSION['folder_name']
                    142:         metadata['folder_name']=os.path.split(self.REQUEST.SESSION['pathnew'])[1]
                    143:         metadata['content-type']="fulltext document"
                    144:         self.reftype=self.REQUEST.SESSION['reftype']
                    145:         self.REQUEST.SESSION['add_metadata']=metadata   
                    146:         self.add_metadata=metadata
                    147:         self.metadata=self.REQUEST.SESSION['metadata']
                    148:         self.metadataprint=""
                    149:         for tag in self.metadata.keys():
                    150:                 self.metadataprint=self.metadataprint+"<"+tag+">"+self.metadata[tag]+"</"+tag+">\n"
                    151: 
                    152:         newtemplate=PageTemplateFile(os.path.join(package_home(globals()),'zpt','index_meta')).__of__(self)
                    153:         newtemplate.content_type="text/plain"
                    154:         renderxml = newtemplate(encoding='utf-8')
1.35      dwinter   155:         metapath=self.REQUEST.SESSION['pathnew']+"/index.meta"
1.41      dwinter   156:         
                    157:         
                    158:         f=open(metapath,'w')
                    159:         f.write(renderxml)
                    160:         f.close()
                    161:         os.chmod(metapath,0664)
                    162:         os.popen('chmod -R 0775 %s'%self.add_metadata['archive-path']+"/"+self.add_metadata['folder_name']) 
                    163:         
1.35      dwinter   164:         return OSAS_add.addPdf2(self)
                    165: 
1.1       dwinter   166:     def addImages(self,path):
1.53    ! casties   167:         """Hinzufuegen eines neuen Imagesfolders"""
1.1       dwinter   168:         return OSAS_add.addImages(self,path)
                    169: 
                    170:     def addImages2(self):
                    171:         """Upload des neuen Imagefolders"""
1.2       dwinter   172:         return OSAS_add.addImages2(self)
                    173: 
1.1       dwinter   174:     
                    175: def manage_AddOSAS_add_DocumentForm(self):
                    176:     """interface for adding the OSAS_add_Metadata"""
1.40      dwinter   177:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddOSAS_document.zpt')).__of__(self)
1.1       dwinter   178:     return pt()
                    179: 
                    180: def manage_AddOSAS_add_Document(self,id,RESPONSE=None):
                    181:     """add the OSAS_root"""
                    182:     newObj=OSAS_add_Document(id)
                    183:     self.Destination()._setObject(id,newObj)
                    184:     if RESPONSE is not None:
                    185:         RESPONSE.redirect('manage_main')
                    186: 
                    187:             
                    188: InitializeClass(OSAS_add_Document)
                    189: 
1.2       dwinter   190: 
                    191: class OSAS_add_Text(Folder):
                    192:     """Hinzufuegen eines Text-Dokumentes zum Storage"""
                    193:     security=ClassSecurityInfo()
                    194: 
                    195:     def __init__(self,id):
                    196:         """initialize a new instance"""
                    197:         self.id = id
                    198:         
                    199:         
                    200:     meta_type='OSAS_add_Text'    
                    201:     manage_options = Folder.manage_options+(
                    202:             {'label':'Main Config','action':'add_Text_config'},
                    203:             )
                    204:         
                    205:      
                    206:         
                    207:     security.declarePublic('add_Text_config')
                    208:     def add_Text_config(self):
                    209:         """Main configuration"""
1.40      dwinter   210:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeOSAS_addText.zpt')).__of__(self)
1.2       dwinter   211:         return pt()
                    212:     
                    213:     security.declarePublic('change_OSAS_add_Text')
                    214:     def change_OSAS_add_Text(self,RESPONSE=None):
                    215:         """Change"""
                    216: #        self.RootFolderName=RootFolderName
                    217:         if RESPONSE is not None:
                    218:             RESPONSE.redirect('manage_main')
                    219: 
1.35      dwinter   220:     def addPdf(self,path):
                    221:         """Add a pdf"""
                    222:         return OSAS_add.addPdf(self,path)
                    223: 
                    224:     def addPdf2(self):
                    225:         """Read the file and store it"""
                    226:         return OSAS_add.addPdf2(self)
                    227:     
1.2       dwinter   228:     def addText(self,path):
                    229:         """Add a fulltext"""
                    230:         return OSAS_add.addText(self,path)
                    231: 
                    232:     def addText2(self):
                    233:         """Read the file and store it"""
                    234:         return OSAS_add.addText2(self)
1.35      dwinter   235:     
1.2       dwinter   236: def manage_AddOSAS_add_TextForm(self):
                    237:     """interface for adding the OSAS_add_Metadata"""
1.40      dwinter   238:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddOSAS_text.zpt')).__of__(self)
1.2       dwinter   239:     return pt()
                    240: 
                    241: def manage_AddOSAS_add_Text(self,id,RESPONSE=None):
                    242:     """add the OSAS_root"""
                    243:     newObj=OSAS_add_Text(id)
                    244:     self.Destination()._setObject(id,newObj)
                    245:     if RESPONSE is not None:
                    246:         RESPONSE.redirect('manage_main')
                    247: 
                    248:             
                    249: InitializeClass(OSAS_add_Text)
1.3       dwinter   250: 
1.21      dwinter   251: 
1.3       dwinter   252: class OSAS_add_contextData(Folder):
                    253:     """Einfuegen eines Documentes in eine Collection"""
                    254:     
                    255:     security=ClassSecurityInfo()
                    256: 
                    257:             
                    258:     meta_type='OSAS_add_contextData'    
                    259: 
1.38      dwinter   260:     def XmlToTree(self,URL,pwstr=None):
1.21      dwinter   261:         """Collection XML to Tree"""
                    262:         
                    263:         class requestHandler(ContentHandler):
                    264:             def __init__(self):
                    265:                 self.depth=0
                    266:                 self.retStr=""
                    267:                 
                    268:             def startElement(self,name,attrs):
                    269:                 if name=="element":
                    270:                     self.depth+=1
1.24      dwinter   271:                     begin=""
                    272:                     end=""
                    273:                     if self.depth==1:
                    274:                         begin="<b>"
                    275:                         end="</b>"
                    276:                         
1.32      dwinter   277:                     self.retStr+=spaces(self.depth)+"<input type='radio' name='collection' value='%s'>%s</input>"%(attrs.get('url'),begin+urllib.unquote(attrs.get('name'))+end)+"<br>\n"
1.21      dwinter   278: 
                    279: 
                    280:                     
                    281:             def endElement(self,name):
                    282:                 if name=="element":
                    283:                     self.depth-=1
                    284: 
1.38      dwinter   285:         if pwstr=="":
                    286:             pwstr=None
                    287:             
1.23      dwinter   288:         try:
1.38      dwinter   289:             if pwstr:
                    290:                 URL+="/getCollectionTreeXML?pwstr=%s"%pwstr    
                    291:             else:
                    292:                 URL+="/getCollectionTreeXML"
1.23      dwinter   293:             parser=make_parser()
                    294:             curHandler=requestHandler()
                    295:             parser.setContentHandler(curHandler)
                    296: 
                    297:             parser.parse(urllib.urlopen(URL))
                    298:             return curHandler.retStr
1.37      dwinter   299: 
1.23      dwinter   300:         except:
1.41      dwinter   301:             return URL
1.23      dwinter   302:             return urllib.urlopen(URL).read()
1.41      dwinter   303:             
1.32      dwinter   304:       
1.3       dwinter   305:     def __init__(self,id,collection):
                    306:         self.id=id
                    307:         self.collection=collection
                    308: 
1.23      dwinter   309:   
                    310:    
                    311: 
                    312:     def getPartners(self,URL):
                    313:         """Zeige Partnerliste"""
                    314:         class requestHandler(ContentHandler):
                    315:             def __init__(self):
                    316:                 self.ret=[]
1.5       dwinter   317:                 
1.23      dwinter   318:             def startElement(self,name,attrs):
                    319:                 if name=="partner":
1.37      dwinter   320:                     self.ret.append((attrs.get('id'),attrs.get('title').encode('utf-8')))
1.23      dwinter   321: 
                    322: 
                    323:         URL+="/getPartnersXML"
1.41      dwinter   324:         parser=make_parser()    
                    325:         curHandler=requestHandler()
1.37      dwinter   326:         parser.setContentHandler(curHandler)
1.41      dwinter   327:         parser.parse(urllib.urlopen(URL))               
                    328:         try:    
1.37      dwinter   329:                   
1.41      dwinter   330:                 return curHandler.ret
1.23      dwinter   331:         except:
1.41      dwinter   332:                 return [("",URL)]
                    333:             
1.21      dwinter   334:     
1.5       dwinter   335:     def addContextData(self,path):
1.32      dwinter   336:         """Hinzufuegen zu einer Sammlung"""
1.42      dwinter   337:         
                    338:         server=getattr(self,'serverUrl',self.REQUEST['SERVER_URL'])
1.44      dwinter   339:         if path[0]=="/": #strip leading slash
                    340:        urlpath=path[1:]
                    341:    else:
                    342:        urlpath=path
1.6       dwinter   343:         try:
1.44      dwinter   344:             urllib.urlopen(server+"/"+urlpath+"/index.meta")
1.9       dwinter   345:             
1.6       dwinter   346:         except:
1.51      dwinter   347:             logger("OSAS_addfiles (addContextData)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2])
1.44      dwinter   348:             return server+"/"+urlpath+"/index.meta file has to exist!"
1.3       dwinter   349: 
1.47      casties   350:         # old version for foxridge storage viewer
                    351:         #links=[(path,'storage server view')]
1.46      casties   352:         # libcoll viewer with imagepath: needs pageimg directory
1.48      casties   353:         links=[('http://libcoll.mpiwg-berlin.mpg.de/libview?mode=imagepath&url=%s/pageimg'%path,'libcoll standard viewer (pageimg)')]
1.50      casties   354:         # libcoll viewer with texttool: needs texttool tag
1.49      casties   355:         links+=[('http://libcoll.mpiwg-berlin.mpg.de/libview?mode=texttool&url=%s/index.meta'%path,'libcoll standard viewer (texttool)')]
1.46      casties   356:                 
1.32      dwinter   357:         links+=OSAS_show.readContexts(path) # auslesen von contexten fuer den link
1.10      dwinter   358:         #print "LINK",links
1.15      dwinter   359:         #return links
1.9       dwinter   360:         self.REQUEST.SESSION['links']=links
1.40      dwinter   361:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','contextDataMain.zpt')).__of__(self)
1.9       dwinter   362:         return pt()
1.5       dwinter   363:     
1.37      dwinter   364:    
1.25      dwinter   365:     def addContextData2(self,path,collection,link,label,description,content_type,responsible,weight,credits=None):
1.5       dwinter   366:         """Hinzufuegen der Resource"""
                    367:         splitted=path.split("/")
1.13      dwinter   368:         #print "BLU"
1.5       dwinter   369:         id=splitted[len(splitted)-1]
                    370:         title=splitted[len(splitted)-1]
1.42      dwinter   371:         server=getattr(self,'serverUrl',self.REQUEST['SERVER_URL'])
1.44      dwinter   372:         if path[0]=="/": #strip leading slash
                    373:        urlpath=path[1:]
                    374:    else:
                    375:        urlpath=path
                    376: 
                    377: 
                    378:         metalink=server+"/"+urlpath+"/index.meta"
1.13      dwinter   379:         
1.9       dwinter   380:         #link=TOBEDONE"
1.37      dwinter   381:         """Hinzufuegen der Ressource"""
1.3       dwinter   382: 
1.26      dwinter   383:         params=urllib.urlencode({'id':id,'title':title,'link':link,'label':label,'description':description,'contentType':content_type,'responsible':responsible,'weight':weight,'credits':credits,'metalink':metalink})
1.21      dwinter   384: 
1.52      dwinter   385:         server=xmlrpclib.ServerProxy(collection,allow_none=True)   
1.39      dwinter   386:         try:
1.52      dwinter   387:             #retStr=urllib.urlopen(collection+"/addResource",params).read()
                    388:             
                    389:             retStr=server.addResource(id,title,label,description,content_type,responsible,link,metalink,weight,credits)
                    390:               
1.39      dwinter   391:         except:
1.52      dwinter   392:             return "An Error occured adding the resource A\n", collection,params,str(sys.exc_info()[0]),str(sys.exc_info()[1])
1.39      dwinter   393:         
1.41      dwinter   394:         #print "added"
1.52      dwinter   395:         logging.debug("Add an resource:"+repr(retStr))
1.41      dwinter   396:         if not retStr:
1.52      dwinter   397:             return "An Error occured adding the resource B\n", collection,params
1.41      dwinter   398:         
1.37      dwinter   399:         #print collection+"/"+id+"/copyIndex_meta2echo_resource"
1.45      dwinter   400:         #TODO: fehler falls generate label oder title nicht funktioniert abfangen, bei ECHO geht das z.B. manchmal nicht.
1.52      dwinter   401:         #server=xmlrpclib.ServerProxy(collection+"/"+id,allow_none=True)
                    402:         #server2=getattr(server,id)
                    403:         #server2.copyIndex_meta2echo_resource()
                    404:         #urllib.urlopen(collection+"/"+id+"/copyIndex_meta2echo_resource").read()
1.41      dwinter   405:         #print "copy2res"
1.52      dwinter   406:    #try:
                    407:            #urllib.urlopen(collection+"/"+id+"/generate_label").read()
                    408:    #         server2.generate_label()
                    409:       #  except:
                    410:     #        logger("OSAS_addfiles (addContextData2,label not generated)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2])
                    411:    #try:
                    412:            #urllib.urlopen(collection+"/"+id+"/generate_title").read()
                    413:    #         server2.generate_title()
                    414:    #except:
                    415:    #    logger("OSAS_addfiles (addContextData2,title not generated)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2])
1.44      dwinter   416:            
                    417: 
1.5       dwinter   418:         return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL2']+'?path='+path)
                    419:         
1.3       dwinter   420:     manage_options = Folder.manage_options+(
                    421:             {'label':'Main Config','action':'add_contextData_config'},
                    422:             )
                    423:         
                    424:      
                    425:     def add_contextData_config(self):
                    426:         """Main configuration"""
1.40      dwinter   427:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeOSAS_add_contextData.zpt')).__of__(self)
1.3       dwinter   428:         return pt()
                    429:     
                    430:     
1.42      dwinter   431:     def change_OSAS_add_contextData(self,collection,serverUrl,pwstr=None,RESPONSE=None):
1.3       dwinter   432:         """Change"""
1.38      dwinter   433:         self.pwstr=pwstr
1.3       dwinter   434:         self.collection=collection
1.42      dwinter   435:         self.serverUrl=serverUrl
1.3       dwinter   436:         if RESPONSE is not None:
                    437:             RESPONSE.redirect('manage_main')
                    438:             
                    439: def manage_AddOSAS_add_contextDataForm(self):
                    440:     """interface for adding the OSAS_add_Metadata"""
1.40      dwinter   441:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddOSAS_contextData.zpt')).__of__(self)
1.3       dwinter   442:     return pt()
                    443: 
                    444: def manage_AddOSAS_add_contextData(self,id,collection,RESPONSE=None):
                    445:     """add the OSAS_root"""
                    446:     newObj=OSAS_add_contextData(id,collection)
                    447:     self.Destination()._setObject(id,newObj)
                    448:     if RESPONSE is not None:
                    449:         RESPONSE.redirect('manage_main')
                    450: 
                    451:             
                    452: InitializeClass(OSAS_add_contextData)
1.2       dwinter   453: 
                    454: class OSAS_add_Presentation(Folder):
1.53    ! casties   455:     """Hinzufuegen der Presentationsinformationen"""
1.2       dwinter   456:     security=ClassSecurityInfo()
                    457: 
                    458:     def __init__(self,id):
                    459:         """initialize a new instance"""
                    460:         self.id = id
                    461:         
                    462:         
                    463:     meta_type='OSAS_add_Presentation'    
                    464:     manage_options = Folder.manage_options+(
                    465:             {'label':'Main Config','action':'add_Presentation_config'},
                    466:             )
                    467:         
                    468:      
                    469:         
                    470:     security.declarePublic('add_Presentation_config')
                    471:     def add_Presentation_config(self):
                    472:         """Main configuration"""
1.40      dwinter   473:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeOSAS_addPresentation.zpt')).__of__(self)
1.2       dwinter   474:         return pt()
                    475:     
                    476:     security.declarePublic('change_OSAS_add_Presentation')
                    477:     def change_OSAS_add_Presentation(self,RESPONSE=None):
                    478:         """Change"""
                    479: #        self.RootFolderName=RootFolderName
                    480:         if RESPONSE is not None:
                    481:             RESPONSE.redirect('manage_main')
                    482: 
                    483:     def addPresentation(self,path):
1.53    ! casties   484:         """Hinzufuegen der Presenationsinformation"""
1.2       dwinter   485:         return OSAS_add.addPresentation(self,path)
                    486: 
                    487:     def addPresentation2(self):
                    488:         """Eingabe von Metadateninformationen"""
                    489:         return OSAS_add.addPresentation2(self)
                    490:     
                    491: def manage_AddOSAS_add_PresentationForm(self):
                    492:     """interface for adding the OSAS_add_Metadata"""
1.40      dwinter   493:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddOSAS_presentation.zpt')).__of__(self)
1.2       dwinter   494:     return pt()
                    495: 
                    496: def manage_AddOSAS_add_Presentation(self,id,RESPONSE=None):
                    497:     """add the OSAS_root"""
                    498:     newObj=OSAS_add_Presentation(id)
                    499:     self.Destination()._setObject(id,newObj)
                    500:     if RESPONSE is not None:
                    501:         RESPONSE.redirect('manage_main')
                    502: 
                    503:             
                    504: InitializeClass(OSAS_add_Presentation)
                    505: 
                    506: class OSAS_combineTextImage(Folder):
1.53    ! casties   507:     """Hinzufuege der Combine Text und Image"""
1.2       dwinter   508:     security=ClassSecurityInfo()
                    509: 
                    510:     def __init__(self,id):
                    511:         """initialize a new instance"""
                    512:         self.id = id
                    513:         
                    514:         
                    515:     meta_type='OSAS_combineTextImage'    
                    516:     manage_options = Folder.manage_options+(
                    517:             {'label':'Main Config','action':'combineTextImage_config'},
                    518:             )
                    519:         
1.15      dwinter   520: 
1.2       dwinter   521:         
                    522:     security.declarePublic('combineTextImage_config')
                    523:     def combineTextImage_config(self):
                    524:         """Main configuration"""
1.40      dwinter   525:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeOSAS_combineTextImage.zpt')).__of__(self)
1.2       dwinter   526:         return pt()
                    527:     
                    528:     security.declarePublic('change_OSAS_combineTextImage')
                    529:     def change_OSAS_combineTextImage(self,RESPONSE=None):
                    530:         """Change"""
                    531: #        self.RootFolderName=RootFolderName
                    532:         if RESPONSE is not None:
                    533:             RESPONSE.redirect('manage_main')
                    534:             
                    535:     security.declarePublic('combineTextImage')
                    536:     def combineTextImage(self,path):
1.53    ! casties   537:         """Hinzufuegen der Presenationsinformation"""
1.18      dwinter   538:         """gibt input formular zur erstellung des texttools meta tag aus"""
1.41      dwinter   539:         files = os.listdir(path)
                    540:         
                    541:         texts=[]
                    542:         imagefolders=[]
                    543:         presentationfolders=[]
                    544: 
                    545:         splitted=path.split("/")
                    546:         externxml=readArchimedesXML(splitted[len(splitted)-1])
                    547:         
                    548:         for filename in files:
                    549:                 #print "FN",filename
                    550:                 if archive.isdigilib2(path+"/"+filename):
                    551:                         imagefolders.append(filename)
                    552:                         
                    553:                 if archive.isFullText(path,filename):
                    554:                         #print "HI"
                    555:                         texts.append(filename)
                    556:                 if archive.isPresentation(path,filename):
                    557:                         presentationfolders.append(filename)
                    558:         
                    559:         dom=xml.dom.minidom.parse(path+"/index.meta")
                    560:         try:
                    561:                 filelanguage=archive.getText(dom.getElementsByTagName('lang')[0].childNodes)
                    562:         except:
                    563:                 filelanguage=""
1.18      dwinter   564:                 
1.41      dwinter   565:         self.REQUEST.SESSION['isolist']=OSAS_add.getISO()
                    566:         
                    567:         tmp=self.REQUEST.SESSION['isolist'].keys()
                    568:         tmp.sort()
                    569:         self.REQUEST.SESSION['isolistsort']=tmp
                    570:         self.REQUEST.SESSION['path']=path
                    571:         self.REQUEST.SESSION['texts']=texts
                    572:         self.REQUEST.SESSION['imagefolders']=imagefolders
                    573:         self.REQUEST.SESSION['presentationfolders']=presentationfolders
                    574:         self.REQUEST.SESSION['filelanguage']=filelanguage
                    575:         self.REQUEST.SESSION['externxml']=externxml
                    576: 
                    577:         newtemplate=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ImageandText')).__of__(self)
                    578:         return newtemplate()
1.28      dwinter   579:         
1.33      dwinter   580:     def getViewerTemplateSets(self,obj_ids=None):
                    581:         """Get the ViewerTemplateSet title for configuration"""
1.18      dwinter   582:         ret=[]
1.33      dwinter   583:         viewerTemplateSets=self.ZopeFind(self.viewerTemplateSets,obj_metatypes=['OSAS_viewerTemplateSet'],obj_ids=obj_ids)#assumes viewerTemplateSets folder somewhere in the hierarchie.
                    584: 
1.18      dwinter   585:         try:
1.33      dwinter   586:             viewerTemplateSets=self.ZopeFind(self.viewerTemplateSets,obj_metatypes=['OSAS_viewerTemplateSet'],obj_ids=obj_ids)#assumes viewerTemplateSets folder somewhere in the hierarchie.
1.28      dwinter   587:             
1.33      dwinter   588:             for viewerTemplateSet in viewerTemplateSets:
                    589:                 ret.append((viewerTemplateSet[1].title,viewerTemplateSet[0],viewerTemplateSet[1]))
1.28      dwinter   590:             
1.18      dwinter   591:             return ret
                    592:         
                    593:         except:
1.33      dwinter   594:             return [('no ViewerTemplateSetfolders','')]
1.18      dwinter   595: 
                    596:     def getTextToolsField(self,path,name,default=''):
                    597:         """Lese Textoolsfelder aus index.meta im path aus"""
                    598:         
                    599:         try:
                    600:             dom=xml.dom.minidom.parse(path+"/index.meta")
                    601:             node=dom.getElementsByTagName('texttool')[0] #getNode
                    602:             subnode=node.getElementsByTagName(name)[0]
1.31      dwinter   603: 
                    604:             # bei text wird nur der Folder gebraucht
                    605:             if name=="text":
                    606:                 splitted=getText(subnode.childNodes).split("/")
                    607:                 return splitted[len(splitted)-2]
                    608:             else:
                    609:                 return getText(subnode.childNodes)
1.18      dwinter   610:         except:
                    611:             return default
1.31      dwinter   612:    
1.2       dwinter   613: 
                    614:     def combineTextImage2(self,path):
                    615:         """Eingabe von Metadateninformationen"""
1.41      dwinter   616:         
                    617:         # correct path
                    618:         path=re.sub("//","/",path)
1.7       dwinter   619:         OSAS_add.combineTextImage2(self,path) # Add images
                    620:         splitted=path.split("/")
                    621:         linkPath=splitted[len(splitted)-1]
1.28      dwinter   622:         linkViewerEnvironmentImages="http://nausikaa2.mpiwg-berlin.mpg.de/cgi-bin/toc/toc.x.cgi?dir=%s&step=thumb" % linkPath
                    623:         linkViewerEnvironmentOnlyText="http://nausikaa2.mpiwg-berlin.mpg.de/cgi-bin/toc/toc.x.cgi?dir=%s&step=textonly" % linkPath
                    624: 
                    625:         if self.REQUEST.has_key('image'): # bilder vorhanden
                    626:             linkViewerEnvironment=linkViewerEnvironmentImages
                    627:         else:
                    628:             linkViewerEnvironment=linkViewerEnvironmentOnlyText
                    629:             
1.7       dwinter   630:         self.REQUEST.SESSION['linkViewerEnvironment']=linkViewerEnvironment
1.28      dwinter   631:         
1.24      dwinter   632:         writeToContext(path,linkViewerEnvironment,"ECHO standard environment",unique="yes")
1.7       dwinter   633:         
1.40      dwinter   634:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddOSAS_combineTextImageFinal.zpt')).__of__(self)
1.7       dwinter   635: 
                    636:         return pt()
                    637: 
1.33      dwinter   638:     def isSelectedViewerTemplateSet(self,obj,id):
1.53    ! casties   639:         """is ausgewaehlt"""
1.18      dwinter   640:         
1.33      dwinter   641:         if self.REQUEST['viewerTemplateSet']==id:
1.18      dwinter   642:             return 1
                    643:         else:
                    644:             return None
1.7       dwinter   645: 
1.24      dwinter   646: def writeToContext(path,link,description,unique="no"):
1.7       dwinter   647:     """Created an additional entry to the index.meta file of path"""
                    648:     dom=xml.dom.minidom.parse(path+"/index.meta")
                    649:     node=dom.getElementsByTagName('resource')[0]
                    650: 
1.24      dwinter   651:     if unique=="yes":
                    652:         
                    653:         contexts=node.getElementsByTagName('context')
                    654:         for context in contexts:
                    655:             nameTag=getText(context.getElementsByTagName('name')[0].childNodes)
                    656:             linkTag=getText(context.getElementsByTagName('link')[0].childNodes)
                    657:             
1.28      dwinter   658:             
1.24      dwinter   659:             linkTag=re.sub("\:86","",linkTag) # alter port 86 gleich ohne port nummer (hack)
                    660:             if (nameTag==description) and (linkTag==link):
                    661:                 node.removeChild(context).unlink()
                    662:                     
1.7       dwinter   663:     subnode=dom.createElement('context')
                    664: 
                    665:     linknode=dom.createElement('link')
                    666:     namelinknode=dom.createTextNode(link)
                    667:     linknode.appendChild(namelinknode)
                    668:     subnode.appendChild(linknode)
                    669: 
                    670:     linknode=dom.createElement('name')
                    671:     namelinknode=dom.createTextNode(description)
                    672:     linknode.appendChild(namelinknode)
                    673:     subnode.appendChild(linknode)
                    674: 
                    675:     node.appendChild(subnode)
                    676:     
                    677:     writefile=file(path+"/index.meta","w")
                    678:     #print path+"/index.meta"
1.36      dwinter   679:     writefile.write(dom.toxml(encoding="UTF-8"))
1.7       dwinter   680:     writefile.close()
1.2       dwinter   681: 
                    682: def manage_AddOSAS_combineTextImageForm(self):
                    683:     """interface for adding the OSAS_add_Metadata"""
1.40      dwinter   684:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddOSAS_combineTextImage.zpt')).__of__(self)
1.2       dwinter   685:     return pt()
                    686: 
                    687: def manage_AddOSAS_combineTextImage(self,id,RESPONSE=None):
                    688:     """add the OSAS_root"""
                    689:     newObj=OSAS_combineTextImage(id)
                    690:     self.Destination()._setObject(id,newObj)
                    691:     if RESPONSE is not None:
                    692:         RESPONSE.redirect('manage_main')
                    693: 
                    694:             
                    695: InitializeClass(OSAS_combineTextImage)

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