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

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

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