Annotation of OSAS/OSA_system/OSAS_add.py, revision 1.35

1.18      dwinter     1: #Neue Version Begin 5.4.2004
1.1       dwinter     2: 
                      3: 
                      4: """Methoden zum hinzufügen von Dokumenten ins Archiv"""
1.13      dwinter     5: from OSAS_helpers import readArchimedesXML 
1.17      dwinter     6: try:
                      7:    import archive
                      8: except:
                      9:    print "archive not imported"
                     10:    
1.1       dwinter    11: import os
1.21      dwinter    12: 
1.1       dwinter    13: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
                     14: from Products.PageTemplates.PageTemplate import PageTemplate
                     15: import string
                     16: import urllib
                     17: import xml.dom.minidom
1.12      dwinter    18: from time import localtime,strftime
1.18      dwinter    19: from Globals import package_home
1.1       dwinter    20: 
                     21: import re
1.20      dwinter    22: def showHelp(helptext):
                     23:    """show helptext"""
                     24:    return """<html>
                     25:    <body>
                     26:    %
                     27:    </body>
                     28:    </html>"""%helptext
1.1       dwinter    29: def add(self, no_upload=0):
                     30:         """ Add metadata or metadata and documents to the repository
                     31:         no_upload=0 kein upload sonst upload von documententen"""
                     32: 
1.18      dwinter    33:         #self.referencetypes=self.ZopeFind(self,obj_metatypes=['OSAS_MetadataMapping'])
                     34:    self.referencetypes=self.ZopeFind(self)
                     35:    
1.12      dwinter    36:    newtemplate=PageTemplateFile('Products/OSA_system/zpt/OSAS_add_new').__of__(self)
1.1       dwinter    37:         self.REQUEST.SESSION['path']=self.REQUEST['path']
                     38:    if no_upload==0:
                     39:        self.REQUEST.SESSION['no_upload']='yes'
                     40:    else:
                     41:        if self.REQUEST.SESSION.has_key('no_upload'):
                     42:            del self.REQUEST.SESSION['no_upload']
                     43:            
                     44:    return newtemplate()
                     45: 
                     46: 
                     47: 
                     48: def getISO():
1.10      dwinter    49:    """ISO"""
1.9       dwinter    50:    try:
1.18      dwinter    51:        f=file(os.path.join(package_home(globals()),'iso639-1.inc'),'r').readlines()
                     52: 
1.9       dwinter    53:        ret={}
                     54:        for lineraw in f:
                     55:            line=lineraw.encode('ascii','replace')
                     56:            value=string.split(line,'\t')[0].encode('ascii','replace')
                     57:            key=string.split(line,'\t')[1].encode('ascii','replace')
1.10      dwinter    58:            ret[key]=value
1.9       dwinter    59:    except:
                     60:        ret={}
1.21      dwinter    61:    return ret
1.1       dwinter    62: 
1.20      dwinter    63: 
1.1       dwinter    64: def add2(self):
                     65:    self.reftype=self.REQUEST['Reference Type']
1.18      dwinter    66:    self.REQUEST.SESSION['reftype']=self.reftype
                     67:    self.bibdata={}
                     68:    for referenceType in self.referencetypes:
1.20      dwinter    69:        #print referenceType
1.28      dwinter    70:        if referenceType[1].title == self.reftype: 
                     71:            self.bibdata[referenceType[1].title]=referenceType[1].fields
                     72:            self.bibdata['data']=referenceType[1]
                     73:            self.fields=self.bibdata[self.reftype]
1.21      dwinter    74:    
1.1       dwinter    75:    self.isolist=getISO()
1.10      dwinter    76:    tmp=getISO().keys()
                     77:    tmp.sort()
                     78:    self.isokeys=tmp
1.1       dwinter    79:         #listed=[ x for x in self.isolist.keys()]
                     80:    #print listed
                     81:         #sorted=listed.sort()
                     82:    #print sorted
                     83:    
1.12      dwinter    84:    newtemplate=PageTemplateFile('Products/OSA_system/zpt/OSAS_add_bibdata').__of__(self)
1.1       dwinter    85:    return newtemplate()
                     86:    #return self.fields
                     87: 
                     88: 
                     89: def parse_query_string(str):
                     90:    queries={}
                     91:    key=""
                     92:    value=""
                     93:    tmp=""
                     94:    toggle="key"
                     95:    str=urllib.unquote(str)
                     96:    for i in str:
                     97:        if i=="=":
                     98:            key=tmp
                     99:            toggle="value"              
                    100:            tmp=""
                    101:        elif i=="&":
                    102:            queries[key]=tmp
                    103:            tmp=""
                    104:            toggle="key"
                    105:        else:
                    106:            if toggle=="key":
                    107:                if i=="+" : i="-"
                    108:            else:
                    109:                if i=="+" : i=" "
                    110:            tmp=tmp+i
                    111:    queries[key]=tmp
                    112:    return queries
                    113:    
                    114: def add3(self):
                    115:    """Foldername"""
                    116:    metadata=parse_query_string(self.REQUEST['QUERY_STRING'])
                    117:    self.REQUEST.SESSION['metadata']=metadata
1.18      dwinter   118:    vorschlag=[]
                    119:    if metadata.has_key('author'):
                    120:        vorschlag.append(metadata['author'][:5])
                    121:    if metadata.has_key('title'):
                    122:        vorschlag.append(metadata['title'][:5])
                    123:    if metadata.has_key('year'):
                    124:        vorschlag.append(metadata['year'])
                    125:    
                    126:        
                    127:    vorschlag_naming=string.join(vorschlag,"_")
                    128:    
                    129:        
1.17      dwinter   130:    self.vorschlag_naming=unicode(vorschlag_naming,'ascii','ignore')
1.1       dwinter   131:    if self.REQUEST.SESSION.has_key('no_upload'):
                    132:        self.REQUEST.SESSION['folder_name']=self.REQUEST.SESSION['path']
                    133:        return add5(self)
                    134:    else:
1.12      dwinter   135:        newtemplate=PageTemplateFile('Products/OSA_system/zpt/OSAS_add_naming').__of__(self)
1.1       dwinter   136:        return newtemplate()
                    137:    
                    138: 
                    139: def add4(self):
                    140:    self.path=re.search(r"/mpiwg(.*)",self.REQUEST.SESSION['path']).group(1)
                    141:    
                    142:    self.folder_name=self.REQUEST['folder_name']
1.18      dwinter   143:    # next has to be changed -> error if back button is used!!
1.1       dwinter   144:    self.REQUEST.SESSION['folder_name']=self.folder_name
1.32      dwinter   145:    #return self.REQUEST['submit']
                    146:    
                    147:    try:    
                    148:        os.mkdir(self.REQUEST.SESSION['path'])
                    149:        os.chmod(self.REQUEST.SESSION['path'],0774)
                    150:    except:
                    151:        """nothing"""
                    152: 
1.21      dwinter   153:    if self.REQUEST['submit']=="upload images":
                    154:        self.REQUEST.SESSION['path']=os.path.join(self.REQUEST.SESSION['path'],self.REQUEST['folder_name'])
1.30      dwinter   155:        
                    156: 
1.21      dwinter   157:        self.image_folder_name="pageimg"
                    158:        newtemplate=PageTemplateFile('Products/OSA_system/zpt/OSAS_upload').__of__(self)
                    159:        return newtemplate()
1.32      dwinter   160:    
                    161:    elif self.REQUEST['submit']=="upload pdf":
                    162:        os.mkdir(os.path.join(self.REQUEST.SESSION['path'],self.REQUEST['folder_name']))
                    163:        return addPdf(self,os.path.join(self.REQUEST.SESSION['path'],self.REQUEST['folder_name']))
1.21      dwinter   164:    else:
                    165:        os.mkdir(os.path.join(self.REQUEST.SESSION['path'],self.REQUEST['folder_name']))
                    166:        return addText(self,os.path.join(self.REQUEST.SESSION['path'],self.REQUEST['folder_name']))
                    167:    
1.1       dwinter   168:    
                    169: def add5(self):
                    170:    """ADD INDEX.META"""
1.12      dwinter   171:    newtemplate=PageTemplateFile('Products/OSA_system/zpt/OSAS_add_metadata').__of__(self)
1.1       dwinter   172:    return newtemplate()
                    173: 
                    174: def add6(self):
                    175:    metadata=parse_query_string(self.REQUEST['QUERY_STRING'])
                    176:    metadata['archive-path']=os.path.split(self.REQUEST.SESSION['path'])[0]
                    177:    #metadata['folder_name']=self.REQUEST.SESSION['folder_name']
                    178:    metadata['folder_name']=os.path.split(self.REQUEST.SESSION['path'])[1]
                    179:    metadata['content-type']="scanned document"
                    180:    self.reftype=self.REQUEST.SESSION['reftype']
                    181:    self.REQUEST.SESSION['add_metadata']=metadata   
                    182:    self.add_metadata=metadata
                    183:    self.metadata=self.REQUEST.SESSION['metadata']
                    184:    self.metadataprint=""
                    185:    for tag in self.metadata.keys():
1.23      dwinter   186:        if tag!="":
                    187:            self.metadataprint=self.metadataprint+"<"+tag+">"+self.metadata[tag]+"</"+tag+">\n"
1.1       dwinter   188: 
1.12      dwinter   189:    newtemplate=PageTemplateFile('Products/OSA_system/zpt/index_meta').__of__(self)
1.1       dwinter   190:    newtemplate.content_type="text/plain"
1.35    ! dwinter   191:    renderxml = newtemplate(encode='utf-8')
1.1       dwinter   192:    if self.REQUEST.SESSION.has_key('no_upload'):
                    193:        metapath=self.REQUEST.SESSION['path']+"/index.meta"
                    194:    else:
                    195:        metapath=self.add_metadata['archive-path']+"/"+self.add_metadata['folder_name']+"/index.meta"
                    196:    
                    197:    f=open(metapath,'w')
1.35    ! dwinter   198:    f.write(renderxml)
1.1       dwinter   199:    f.close()
1.10      dwinter   200:    os.chmod(metapath,0664)
                    201:    os.popen('chmod -R 0775 %s'%self.add_metadata['archive-path']+"/"+self.add_metadata['folder_name']) 
1.1       dwinter   202:    if self.REQUEST.SESSION.has_key('no_upload'):
                    203:        
                    204:        #newtemplate2=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/done',"text/html").__of__(self)
                    205:        return self.REQUEST.response.redirect(self.REQUEST['URL2']+"?path="+self.REQUEST.SESSION['path'])
                    206:    else:
                    207:                 #print self.add_metadata['archive-path']
1.21      dwinter   208:        self.viewpath=re.search(r"/mpiwg/online/(.*)",self.add_metadata['archive-path']).group(1)
1.30      dwinter   209:    
                    210:    if (self.REQUEST.SESSION.has_key('no_upload')) and (self.REQUEST.SESSION['no_upload']=="text"):
                    211:            """text upload"""
                    212:            return 1
                    213:    else:   
1.21      dwinter   214:            newtemplate2=PageTemplateFile('Products/OSA_system/zpt/OSAS_saved').__of__(self)
                    215:            newtemplate2.content_type="text/html"
                    216:            self.REQUEST.response.setHeader('Content-Type','text/html')
                    217:            return newtemplate2()
1.30      dwinter   218:        
1.12      dwinter   219: 
1.1       dwinter   220: 
                    221: def date(self):
                    222:    return strftime("%d.%m.%Y",localtime()) 
                    223: 
                    224: 
                    225: def addPresentation(self,path):
                    226:    """add presentation to the path"""
                    227:    
                    228:    dom=xml.dom.minidom.parse(path+"/index.meta")
1.3       dwinter   229:    
                    230:    
1.1       dwinter   231:    try:
                    232:        author=archive.getText(dom.getElementsByTagName('author')[0].childNodes)
                    233:    except:
1.9       dwinter   234:        try:
                    235:            author=archive.getText(dom.getElementsByTagName('Author')[0].childNodes)
                    236:        except:
1.21      dwinter   237:            try:
                    238:                author=archive.getText(dom.getElementsByTagName('Editor')[0].childNodes)
                    239:            except:
                    240:                author=""
                    241:    try:
                    242:        title=archive.getText(dom.getElementsByTagName('title')[0].childNodes)
                    243:    except:
                    244:        title=""
                    245:        
1.1       dwinter   246:    try:
                    247:        date=archive.getText(dom.getElementsByTagName('year')[0].childNodes)
                    248:    except:
                    249:        try:
                    250:            date=archive.getText(dom.getElementsByTagName('Year')[0].childNodes)
                    251:        except:
1.21      dwinter   252:            try:
                    253:                date=archive.getText(dom.getElementsByTagName('date')[0].childNodes)
                    254:            except:
                    255:                date=""
1.1       dwinter   256:    i=1
                    257:    while os.path.exists("%02d-presentation"%i):
                    258:        i+=1
                    259:            self.REQUEST.SESSION['presentationname']="%02d-presentation"%i
                    260:    self.REQUEST.SESSION['path']=path
1.35    ! dwinter   261: 
        !           262:    tmpTxt="""<?xml version="1.0" encoding="UTF-8"?>
        !           263:    <info>
1.1       dwinter   264:    <author>%s</author>
                    265:    <title>%s</title>
                    266:    <date>%s</date>
                    267:    <display>yes</display>
                    268: </info>"""%(author,title,date)
                    269:    
1.35    ! dwinter   270:    self.REQUEST.SESSION['xmlvorschlag']=tmpTxt.encode('utf-8')
        !           271:    
1.12      dwinter   272:    newtemplate=PageTemplateFile('Products/OSA_system/zpt/addPresentation').__of__(self)
1.1       dwinter   273:    return newtemplate()
                    274: 
                    275: def addPresentation2(self):
                    276:    """add presentation """
1.2       dwinter   277:    folder_name=self.REQUEST['folder_name']
1.1       dwinter   278:    #print self.REQUEST['folder_name']
1.2       dwinter   279:    content_description=self.REQUEST['content_description']
1.1       dwinter   280: 
1.2       dwinter   281:    path=self.REQUEST.SESSION['path']
1.1       dwinter   282: 
                    283:    if not self.REQUEST.has_key('fileupload'):
1.2       dwinter   284:        xmlinfo=self.REQUEST['xmltext']
1.1       dwinter   285:        file_name="info.xml"
                    286: 
                    287:    else:
                    288:        file_name=self.REQUEST['fileupload'].filename
1.2       dwinter   289:        xmlinfo=self.REQUEST.form['fileupload'].read()
                    290:        # hack Multipart auswertung funktioniert nicht ausser bei mozilla
1.1       dwinter   291:        file_name="info.xml"
1.2       dwinter   292:        xmlinfo=self.REQUEST['xmltext']
1.1       dwinter   293:    try:
1.2       dwinter   294:        os.mkdir(path+"/"+folder_name)
1.1       dwinter   295:    except:
                    296:        """nothing"""
1.5       dwinter   297:    #print "NAME:",file_name
1.2       dwinter   298:    f=open(path+"/"+folder_name+"/"+file_name,"w")
                    299:    f.write(xmlinfo)
1.1       dwinter   300:    f.close()
1.19      dwinter   301:    try:
                    302:        os.chmod(path+"/"+folder_name,0755)
                    303:    except:
                    304:        """NO"""
                    305: 
1.2       dwinter   306:    os.chmod(path+"/"+folder_name+"/"+file_name,0644)
                    307:    addDirsToIndexMeta(path,folder_name,content_description,'presentation')
1.1       dwinter   308:    
1.32      dwinter   309:    return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL2']+'?path='+path)
                    310: 
                    311: 
                    312: def addPdf(self,path,folder=None):
                    313:    """add fulltext to the path"""
                    314:    self.REQUEST.SESSION['existing_names']=['pageimg'] # to be done generate list of existing text files
                    315:    self.REQUEST.SESSION['pathnew']=path
                    316:    newtemplate=PageTemplateFile('Products/OSA_system/zpt/addPdf').__of__(self)
                    317:    return newtemplate()
                    318: 
                    319: def addPdf2(self):
                    320:    """addtext"""
                    321:    folder_name="pdf" # foldername fixed
                    322:    
                    323:    if self.REQUEST['file_name']=="":
                    324:        file_name=self.REQUEST['fileupload'].filename
                    325:    else:
                    326:        file_name=self.REQUEST['file_name']
                    327:        
                    328:    #print self.REQUEST['folder_name']
                    329:    content_description=self.REQUEST['content_description']
                    330:    path=self.REQUEST.SESSION['pathnew']
                    331: 
                    332:    filedata=self.REQUEST.form['fileupload'].read()
                    333:    try:
                    334:        os.mkdir(path+"/"+folder_name)
                    335:    except:
                    336:        """nothing"""
                    337:    f=open(path+"/"+folder_name+"/"+file_name,"w")
                    338:    f.write(filedata)
                    339:    f.close()
                    340:    os.chmod(path+"/"+folder_name,0755)
                    341:    os.chmod(path+"/"+folder_name+"/"+file_name,0644)
                    342:    addDirsToIndexMeta(path,folder_name,content_description,'pdf')
                    343: 
1.2       dwinter   344:    return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL2']+'?path='+path)
1.1       dwinter   345: 
1.21      dwinter   346: def addText(self,path,folder=None):
1.1       dwinter   347:    """add fulltext to the path"""
                    348:    self.REQUEST.SESSION['existing_names']=['pageimg'] # to be done generate list of existing text files
1.27      dwinter   349:    self.REQUEST.SESSION['pathnew']=path
1.12      dwinter   350:    newtemplate=PageTemplateFile('Products/OSA_system/zpt/addText').__of__(self)
1.1       dwinter   351:    return newtemplate()
                    352: 
                    353: def addText2(self):
1.24      dwinter   354:    """addtext"""
1.2       dwinter   355:    folder_name=self.REQUEST['folder_name']
1.1       dwinter   356:    #print self.REQUEST['folder_name']
1.2       dwinter   357:    content_description=self.REQUEST['content_description']
1.27      dwinter   358:    path=self.REQUEST.SESSION['pathnew']
1.2       dwinter   359:    file_name=self.REQUEST['fileupload'].filename
                    360:    filedata=self.REQUEST.form['fileupload'].read()
                    361:    os.mkdir(path+"/"+folder_name)
                    362:    f=open(path+"/"+folder_name+"/"+file_name,"w")
                    363:    f.write(filedata)
1.1       dwinter   364:    f.close()
1.2       dwinter   365:    os.chmod(path+"/"+folder_name,0755)
                    366:    os.chmod(path+"/"+folder_name+"/"+file_name,0644)
                    367:    addDirsToIndexMeta(path,folder_name,content_description,'fulltext')
1.1       dwinter   368: 
1.2       dwinter   369:    return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL2']+'?path='+path)
1.1       dwinter   370: 
                    371: def addTextExternal(self,path,texturl,version):
                    372:    """hinzufügen eines externen textes"""
                    373:    try: #neue text version einlesen
                    374:        texttemp=urllib.urlopen(texturl).readlines()
                    375:        text=""
                    376:        for line in texttemp:
                    377:            text=text+line
                    378:    except: #fehler beim lesen des textes
                    379:        return "ERROR: cannot read: %s"%texturl
                    380:    if TextExternalError(text): #kein xml header
                    381:        return "ERROR: cannot read: %s"%texturl, "received:",text 
                    382:    textpath=getNewTextPath(path) #erzeuge neuen Ornder für den Text
                    383:    splitted=string.split(texturl,"/")
                    384:    name=splitted[len(splitted)-1] #Name des XML-files
                    385:    try:
                    386:        writefile=file(path+"/"+textpath+"/"+name,"w")
                    387:    except:
                    388:        return"ERROR: cannot write: %s"%path+"/"+textpath+"/"+name
                    389:    writefile.write(text)
                    390:    writefile.close()
                    391:    os.chmod(path+"/"+textpath+"/"+name,0644)
                    392: 
                    393:    #add new file to XML
                    394:    dom=xml.dom.minidom.parse(path+"/index.meta")
                    395:    node=dom.getElementsByTagName('resource')[0] #getNode
                    396: 
                    397:    subnode=dom.createElement('dir')
                    398:    
                    399:    namenode=dom.createElement('name')
                    400:    namenodetext=dom.createTextNode(textpath)
                    401:    namenode.appendChild(namenodetext)
                    402:    subnode.appendChild(namenode)
                    403:        
                    404:    descriptionnode=dom.createElement('description')
                    405:    descriptionnodetext=dom.createTextNode('archimedes text:'+version)
                    406:    descriptionnode.appendChild(descriptionnodetext)
                    407:    subnode.appendChild(descriptionnode)
                    408: 
                    409:    contentnode=dom.createElement('content-type')
                    410:    contentnodetext=dom.createTextNode('fulltext')
                    411:    contentnode.appendChild(contentnodetext)
                    412:    subnode.appendChild(contentnode)
                    413:    
                    414:    node.appendChild(subnode)
                    415: 
                    416:    writefile=file(path+"/index.meta","w")
1.35    ! dwinter   417:    writefile.write(dom.toxml(encoding="UTF-8"))
1.1       dwinter   418:    writefile.close()
                    419: 
                    420:    #change texttool tag
                    421:    dom=xml.dom.minidom.parse(path+"/index.meta")
                    422:    node=dom.getElementsByTagName('meta')[0] #getNode
                    423: 
                    424:    try: #texttool existiert schon
                    425:        subnode=node.getElementsByTagName('texttool')[0]
                    426:    except: #wenn nicht Fehler ausgeben
                    427:        return "ERROR:no presentation configured yet, user Web Front End to do so!"
                    428:    
                    429: 
                    430:    try:
                    431:        texttoolnodelist=subnode.getElementsByTagName('text')
                    432:    
                    433:        if not len(texttoolnodelist)==0: #texttool tag existiert schon, dann löschen
                    434:            subsubnode=subnode.removeChild(texttoolnodelist[0])
                    435:            subsubnode.unlink()
                    436:    except:
                    437:        """nothing"""
                    438:    # text neu anlegen
                    439:    textfoldernode=dom.createElement('text')
                    440:    textfoldernodetext=dom.createTextNode(textpath+"/"+name)
                    441:    textfoldernode.appendChild(textfoldernodetext)
                    442:    subnode.appendChild(textfoldernode)
                    443: 
                    444:    #index.meta ausgeben
                    445:    writefile=file(path+"/index.meta","w")
1.35    ! dwinter   446:    writefile.write(dom.toxml(encoding="UTF-8"))
1.1       dwinter   447:    writefile.close()
                    448:    
                    449:    #registrieren
1.6       dwinter   450:    return urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
                    451:    
1.1       dwinter   452:    
                    453: 
                    454: def TextExternalError(text):
                    455:    firsts=text[0:10]
1.5       dwinter   456:    #print firsts
1.1       dwinter   457:    try:
                    458:        match=re.search(r".*<?xml.*",firsts)
                    459:    except:
                    460:        return 1
                    461:    return 0
                    462: 
                    463: def getNewTextPath(path):
                    464:    i=1
                    465:    while os.path.exists(path+"/fulltext%i"%i):
                    466:        i+=1
                    467:    os.mkdir(path+"/fulltext%i"%i)
                    468:    os.chmod(path+"/fulltext%i"%i,0755)
                    469:    return "fulltext%i"%i
                    470: 
                    471: def addImages(self,path):
                    472:    """Imagesfolder to the path"""
                    473:    self.REQUEST.SESSION['existing_names']=['pageimg'] # to be done generate list of existing pageimages files
                    474:    self.REQUEST.SESSION['path']=path
1.12      dwinter   475:    newtemplate=PageTemplateFile('Products/OSA_system/zpt/OSAS_addImages').__of__(self)
1.1       dwinter   476:    return newtemplate()
                    477: 
                    478: def addImages2(self):
1.2       dwinter   479:    
1.1       dwinter   480:    self.image_folder_name=self.REQUEST['folder_name']
                    481:    #print self.REQUEST['folder_name']
                    482:    self.content_description=self.REQUEST['content_description']
                    483:    #self.path=self.REQUEST.SESSION['path']
                    484:    
                    485:    
                    486:    self.content_type='images'
                    487:    addDirsToIndexMeta(self.REQUEST.SESSION['path'],self.image_folder_name,self.content_description,self.content_type)
                    488:    self.REQUEST.SESSION['path']=re.search(r"/mpiwg(.*)",self.REQUEST.SESSION['path']).group(1)
1.12      dwinter   489:    newtemplate=PageTemplateFile('Products/OSA_system/zpt/OSAS_upload2').__of__(self)
1.1       dwinter   490:    return newtemplate()
1.2       dwinter   491:    
1.1       dwinter   492: 
                    493: 
                    494: def addDirsToIndexMeta(path,folder_name,content_description,content_type):
                    495:    #f=file(path+"/index.meta",r)
                    496:    dom=xml.dom.minidom.parse(path+"/index.meta")
                    497:    node=dom.getElementsByTagName('resource')[0] #getNode
                    498: 
                    499:    subnode=dom.createElement('dir')
                    500:    
                    501:    namenode=dom.createElement('name')
                    502:    namenodetext=dom.createTextNode(folder_name)
                    503:    namenode.appendChild(namenodetext)
                    504:    subnode.appendChild(namenode)
                    505:        
                    506:    descriptionnode=dom.createElement('description')
                    507:    descriptionnodetext=dom.createTextNode(content_description)
                    508:    descriptionnode.appendChild(descriptionnodetext)
                    509:    subnode.appendChild(descriptionnode)
                    510: 
                    511:    contentnode=dom.createElement('content-type')
                    512:    contentnodetext=dom.createTextNode(content_type)
                    513:    contentnode.appendChild(contentnodetext)
                    514:    subnode.appendChild(contentnode)
                    515:    
                    516:    node.appendChild(subnode)
                    517: 
                    518:    writefile=file(path+"/index.meta","w")
1.35    ! dwinter   519:    writefile.write(dom.toxml(encoding='UTF-8'))
1.1       dwinter   520:    writefile.close()
                    521: 
1.5       dwinter   522: def readArchimedesXML(folder):
                    523:    """gib URL aus """
                    524:    XML=urllib.urlopen("http://archimedes.mpiwg-berlin.mpg.de/cgi-bin/toc/toc.cgi?step=xmlcorpusmanifest").read()
                    525:    #print XML
                    526:    dom=xml.dom.minidom.parseString(XML)
                    527:    items=dom.getElementsByTagName('item')
                    528:    dict={}
                    529:    
                    530:    for item in items:
                    531:        #print item.attributes['dir'].value
                    532:        try:        
1.6       dwinter   533:            dict[item.attributes['dir'].value]=item.attributes['xml'].value
1.5       dwinter   534:            #print item.attributes['dir'].value,item.attributes['text'].value
                    535:        except:
                    536:            """nothing"""
                    537:        
                    538:    if dict.has_key(folder):
                    539:        return dict[folder]
                    540:    else:
                    541:        return ""
1.12      dwinter   542:    
1.5       dwinter   543: 
1.1       dwinter   544:    
                    545: 
                    546: def combineTextImage2(self,path):
                    547:    """erstellt bzw. ändert texttool meta tag"""
                    548:    dom=xml.dom.minidom.parse(path+"/index.meta")
                    549:    node=dom.getElementsByTagName('meta')[0] #getNode
                    550: 
                    551: 
                    552:    subnodelist=node.getElementsByTagName('texttool')
                    553:    if not len(subnodelist)==0: #texttool tag existiert schon, dann löschen
                    554:        subnode=node.removeChild(subnodelist[0])
                    555:        subnode.unlink()
                    556: 
                    557:    subnode=dom.createElement('texttool') #neu erzeugen
                    558: 
                    559:    
                    560:    presentfile=os.listdir(path+"/"+self.REQUEST['presentation'])[0]
                    561:    
                    562: 
                    563:    displaynode=dom.createElement('display')
                    564:    displaynodetext=dom.createTextNode('yes')
                    565:    displaynode.appendChild(displaynodetext)
                    566:    subnode.appendChild(displaynode)
                    567:    
                    568:    if self.REQUEST.has_key('image'):   
                    569:        namenode=dom.createElement('image')
                    570:        namenodetext=dom.createTextNode(self.REQUEST['image'])
                    571:        namenode.appendChild(namenodetext)
                    572:        subnode.appendChild(namenode)
                    573:        
                    574:    if self.REQUEST.has_key('text'):            
                    575:        textfile=os.listdir(path+"/"+self.REQUEST['text'])[0]
                    576:        textfoldernode=dom.createElement('text')
1.6       dwinter   577:        textfoldernodetext=dom.createTextNode(path+"/"+self.REQUEST['text']+"/"+textfile)
1.1       dwinter   578:        textfoldernode.appendChild(textfoldernodetext)
                    579:        subnode.appendChild(textfoldernode)
                    580: 
1.5       dwinter   581:    if self.REQUEST.has_key('external'):#USE CVS instead of local text
                    582:        textfoldernode=dom.createElement('text')
                    583:        textfoldernodetext=dom.createTextNode(self.REQUEST.SESSION['externxml'])
                    584:        textfoldernode.appendChild(textfoldernodetext)
                    585:        subnode.appendChild(textfoldernode)
                    586:        
1.1       dwinter   587:    if self.REQUEST.has_key('pagebreak'):   
                    588:        pagebreaknode=dom.createElement('pagebreak')
                    589:        pagebreaknodetext=dom.createTextNode(self.REQUEST['pagebreak'])
                    590:        pagebreaknode.appendChild(pagebreaknodetext)
                    591:        subnode.appendChild(pagebreaknode)
                    592: 
                    593:    if self.REQUEST.has_key('presentation'):    
                    594:        presentationnode=dom.createElement('presentation')
                    595:        presentationnodetext=dom.createTextNode(self.REQUEST['presentation']+"/"+presentfile)
                    596:        presentationnode.appendChild(presentationnodetext)
                    597:        subnode.appendChild(presentationnode)
                    598:    
1.8       dwinter   599: 
                    600:    if self.REQUEST.has_key('xslt'):
                    601:        if not self.REQUEST['xslt']=="":
                    602:            xsltnode=dom.createElement('xslt')
                    603:            xsltnodetext=dom.createTextNode(self.REQUEST['xslt'])
                    604:            xsltnode.appendChild(xsltnodetext)
                    605:            subnode.appendChild(xsltnode)
                    606: 
1.13      dwinter   607:    
1.11      dwinter   608:    if self.REQUEST.has_key('thumbtemplate'):
                    609:        if not self.REQUEST['thumbtemplate']=="":
                    610:            xsltnode=dom.createElement('thumbtemplate')
                    611:            xsltnodetext=dom.createTextNode(self.REQUEST['thumbtemplate'])
                    612:            xsltnode.appendChild(xsltnodetext)
                    613:            subnode.appendChild(xsltnode)
                    614: 
                    615:    if self.REQUEST.has_key('topbar'):
                    616:        if not self.REQUEST['topbar']=="":
1.13      dwinter   617:            xsltnode=dom.createElement('toptemplate')
1.11      dwinter   618:            xsltnodetext=dom.createTextNode(self.REQUEST['topbar'])
                    619:            xsltnode.appendChild(xsltnodetext)
                    620:            subnode.appendChild(xsltnode)
                    621: 
1.13      dwinter   622:    if self.REQUEST.has_key('startpage'):
                    623:        if not self.REQUEST['startpage']=="":
                    624:            xsltnode=dom.createElement('startpage')
                    625:            xsltnodetext=dom.createTextNode(self.REQUEST['startpage'])
                    626:            xsltnode.appendChild(xsltnodetext)
                    627:            subnode.appendChild(xsltnode)
                    628: 
                    629:    if self.REQUEST.has_key('project'):
                    630:        if not self.REQUEST['project']=="":
                    631:            xsltnode=dom.createElement('project')
                    632:            xsltnodetext=dom.createTextNode(self.REQUEST['project'])
1.14      dwinter   633:            xsltnode.appendChild(xsltnodetext)
                    634:            subnode.appendChild(xsltnode)
1.31      dwinter   635: 
                    636:    if self.REQUEST.has_key('digiliburlprefix'):
                    637:        if not self.REQUEST['digiliburlprefix']=="":
                    638:            xsltnode=dom.createElement('digiliburlprefix')
                    639:            xsltnodetext=dom.createTextNode(self.REQUEST['digiliburlprefix'])
                    640:            xsltnode.appendChild(xsltnodetext)
                    641:            subnode.appendChild(xsltnode)
1.11      dwinter   642:            
1.1       dwinter   643:    node.appendChild(subnode)
1.6       dwinter   644:    
1.5       dwinter   645:    try:
1.6       dwinter   646:        node2=node.getElementsByTagName('bib')[0]
                    647:        subs=node2.getElementsByTagName('lang')
                    648:        for sub in subs:
                    649:            node2.removeChild(sub)
1.5       dwinter   650:    except:
                    651:        """nothing"""
                    652:    try:
                    653:        main=dom.getElementsByTagName('bib')[0]
                    654:        node=dom.createElement('lang')
                    655:        textnode=dom.createTextNode(self.REQUEST['lang'])
                    656:        node.appendChild(textnode)
                    657:        main.appendChild(node)
                    658:    except:
1.6       dwinter   659:        try:
                    660:            subs=dom.getElementsByTagName('lang')
                    661:            main=dom.getElementsByTagName('resource')[0]
                    662:            for sub in subs:
                    663:                main.removeChild(sub)
                    664:        except:
                    665:            """nothing"""
                    666:        
                    667:        try:
                    668:            main=dom.getElementsByTagName('resource')[0]
                    669:            node=dom.createElement('lang')
                    670:            textnode=dom.createTextNode(self.REQUEST['lang'])
                    671:            #print "LANG:",self.REQUEST['lang']
                    672:            node.appendChild(textnode)
                    673:            main.appendChild(node)
                    674:        except:
                    675:            """nothing"""
                    676:            
1.1       dwinter   677:    writefile=file(path+"/index.meta","w")
1.35    ! dwinter   678:    writefile.write(dom.toxml(encoding="UTF-8"))
1.1       dwinter   679:    writefile.close()
                    680:    
                    681:    
                    682: 
1.25      dwinter   683:    urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
1.22      dwinter   684: 
                    685:    if self.REQUEST.has_key('image'): # falls bilder
1.33      casties   686:        dlpath = re.sub('/mpiwg/online/','',self.REQUEST['path'])+"/"+self.REQUEST['image']
1.34      casties   687:        os.popen("ssh archive@nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat -src=/mpiwg/online -dest=/mpiwg/temp/online/scaled/thumb -dir=%s -scaleto=90 -replace >> /tmp/sc.out &"%dlpath )
1.33      casties   688:            #os.popen("ssh archive@nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/thumb 90 >> /tmp/sc.out &"% re.sub('/mpiwg/online/','',self.REQUEST['path']+"/"+self.REQUEST['image']))
1.24      dwinter   689: 
                    690:    else: # falls keine Bilder (bug in reg.cgi info file ersetzen)
                    691:        f=file("/tmp/tmp_info.xml","w")
                    692:        f.write(patchedInfoXML(self.REQUEST['path']))
                    693:        f.close()
                    694:        splitted=path.split("/")
                    695:        fn=splitted[len(splitted)-1]
1.26      dwinter   696:        remotePath="archive@nausikaa2.rz-berlin.mpg.de:/usr/local/share/archimedes/web/docs/proj/echo/1/docs/"+fn+"/info.xml"
1.24      dwinter   697:        os.popen("scp /tmp/tmp_info.xml %s"%remotePath)
                    698: 
                    699: def patchedInfoXML(path):
                    700:    dom=xml.dom.minidom.parse(path+"/index.meta")
1.3       dwinter   701:    
1.24      dwinter   702:    ret="<info>\n"
                    703:    ret+="<remotetext>%s</remotetext>\n"%archive.getText(dom.getElementsByTagName('text')[0].childNodes)
                    704:    ret+="<pagebreak>%s</pagebreak>\n"%archive.getText(dom.getElementsByTagName('pagebreak')[0].childNodes)
                    705:    ret+="<display>%s</display>\n"%archive.getText(dom.getElementsByTagName('display')[0].childNodes)
                    706:    try:
                    707:        ret+="<toptemplate>%s</toptemplate>\n"%archive.getText(dom.getElementsByTagName('toptemplate')[0].childNodes)
                    708:    except:
                    709:        """not"""
                    710:    try:
                    711:        ret+="<thumbtemplate>%s</thumbtemplate>\n"%archive.getText(dom.getElementsByTagName('thumbtemplate')[0].childNodes)
                    712:    except:
                    713:        """not"""
                    714:    try:
                    715:        ret+="<startpage>%s</startpage>\n"%archive.getText(dom.getElementsByTagName('startpage')[0].childNodes)
                    716:    except:
                    717:        """not"""
                    718:        
                    719:    ret+="<lang>%s</lang>\n"%archive.getText(dom.getElementsByTagName('lang')[0].childNodes)
1.25      dwinter   720:    try:
                    721:        ret+="<author>%s</author>\n"%archive.getText(dom.getElementsByTagName('author')[0].childNodes)
                    722:    except:
                    723:        """not"""
                    724:    try:
                    725:        ret+="<title>%s</title>\n"%archive.getText(dom.getElementsByTagName('title')[0].childNodes)
                    726:    except:
                    727:        """not"""
                    728:        
1.24      dwinter   729:    ret+="</info>"
1.22      dwinter   730: 
1.24      dwinter   731:    return ret

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