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

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

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