#Neue Version Begin 5.4.2004 """Methoden zum hinzufügen von Dokumenten ins Archiv""" from OSAS_helpers import readArchimedesXML try: import archive except: print "archive not imported" import os import os.path from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Products.PageTemplates.PageTemplate import PageTemplate import string import urllib import zLOG import xml.dom.minidom from time import localtime,strftime from Globals import package_home from types import * import re def showHelp(helptext): """show helptext""" return """ % """%helptext def add(self, no_upload=0): """ Add metadata or metadata and documents to the repository no_upload=0 kein upload sonst upload von documententen""" #self.referencetypes=self.ZopeFind(self,obj_metatypes=['OSAS_MetadataMapping']) self.referencetypes=self.ZopeFind(self) newtemplate=PageTemplateFile(os.path.join(package_home(globals()),'zpt','OSAS_add_new')).__of__(self) self.REQUEST.SESSION['path']=self.REQUEST['path'] if no_upload==0: self.REQUEST.SESSION['no_upload']='yes' else: if self.REQUEST.SESSION.has_key('no_upload'): del self.REQUEST.SESSION['no_upload'] return newtemplate() def getISO(): """ISO""" try: f=file(os.path.join(package_home(globals()),'iso639-1.inc'),'r').readlines() ret={} for lineraw in f: line=lineraw.encode('ascii','replace').strip() value=string.split(line,'\t')[0].encode('ascii','replace') key=string.split(line,'\t')[1].encode('ascii','replace') ret[key]=value except: ret={} return ret def add2(self): self.reftype=self.REQUEST['Reference Type'] self.REQUEST.SESSION['reftype']=self.reftype self.bibdata={} for referenceType in self.referencetypes: #print referenceType if referenceType[1].title == self.reftype: self.bibdata[referenceType[1].title]=referenceType[1].fields self.bibdata['data']=referenceType[1] self.fields=self.bibdata[self.reftype] self.isolist=getISO() tmp=getISO().keys() tmp.sort() self.isokeys=tmp #listed=[ x for x in self.isolist.keys()] #print listed #sorted=listed.sort() #print sorted newtemplate=PageTemplateFile(os.path.join(package_home(globals()),'zpt','OSAS_add_bibdata')).__of__(self) return newtemplate() #return self.fields def parse_query_string(str): queries={} key="" value="" tmp="" toggle="key" str=urllib.unquote(str) for i in str: if i=="=": key=tmp toggle="value" tmp="" elif i=="&": queries[key]=tmp tmp="" toggle="key" else: if toggle=="key": if i=="+" : i="-" else: if i=="+" : i=" " tmp=tmp+i queries[key]=tmp return queries def add3(self): """Foldername""" metadata=parse_query_string(self.REQUEST['QUERY_STRING']) self.REQUEST.SESSION['metadata']=metadata vorschlag=[] if metadata.has_key('author'): vorschlag.append(metadata['author'][:5]) if metadata.has_key('title'): vorschlag.append(metadata['title'][:5]) if metadata.has_key('year'): vorschlag.append(metadata['year']) vorschlag_naming=string.join(vorschlag,"_") self.vorschlag_naming=unicode(vorschlag_naming,'ascii','ignore') if self.REQUEST.SESSION.has_key('no_upload'): self.REQUEST.SESSION['folder_name']=self.REQUEST.SESSION['path'] return add5(self) else: newtemplate=PageTemplateFile(os.path.join(package_home(globals()),'zpt','OSAS_add_naming')).__of__(self) return newtemplate() def add4(self): self.path=re.search(r"/mpiwg(.*)",self.REQUEST.SESSION['path']).group(1) self.folder_name=self.REQUEST['folder_name'] # next has to be changed -> error if back button is used!! self.REQUEST.SESSION['folder_name']=self.folder_name #return self.REQUEST['submit'] try: #os.popen('mkdir '+self.REQUEST.SESSION['path']) os.mkdir(os.path.join(self.REQUEST.SESSION['path'],self.REQUEST['folder_name'])) os.chmod(os.path.join(self.REQUEST.SESSION['path'],self.REQUEST['folder_name']),0775) except: """nothing""" if self.REQUEST['submit']=="upload images": self.REQUEST.SESSION['path']=os.path.join(self.REQUEST.SESSION['path'],self.REQUEST['folder_name']) self.image_folder_name="pageimg" newtemplate=PageTemplateFile(os.path.join(package_home(globals()),'zpt','OSAS_upload')).__of__(self) return newtemplate() elif self.REQUEST['submit']=="upload pdf": os.mkdir(os.path.join(self.REQUEST.SESSION['path'],self.REQUEST['folder_name'])) return addPdf(self,os.path.join(self.REQUEST.SESSION['path'],self.REQUEST['folder_name'])) else: os.mkdir(os.path.join(self.REQUEST.SESSION['path'],self.REQUEST['folder_name'])) return addText(self,os.path.join(self.REQUEST.SESSION['path'],self.REQUEST['folder_name'])) def add5(self): """ADD INDEX.META""" try: os.chmod(self.REQUEST.SESSION['path'],0775) except: pass newtemplate=PageTemplateFile(os.path.join(package_home(globals()),'zpt','OSAS_add_metadata')).__of__(self) return newtemplate() def add6(self): metadata=parse_query_string(self.REQUEST['QUERY_STRING']) metadata['archive-path']=os.path.split(self.REQUEST.SESSION['path'])[0] #metadata['folder_name']=self.REQUEST.SESSION['folder_name'] metadata['folder_name']=os.path.split(self.REQUEST.SESSION['path'])[1] metadata['content-type']="scanned document" self.reftype=self.REQUEST.SESSION['reftype'] self.REQUEST.SESSION['add_metadata']=metadata self.add_metadata=metadata self.metadata=self.REQUEST.SESSION['metadata'] self.metadataprint="" for tag in self.metadata.keys(): if tag!="": self.metadataprint=self.metadataprint+"<"+tag+">"+self.metadata[tag]+"\n" newtemplate=PageTemplateFile(os.path.join(package_home(globals()),'zpt','index_meta')).__of__(self) newtemplate.content_type="text/plain" renderxml = newtemplate(encode='utf-8') if self.REQUEST.SESSION.has_key('no_upload'): metapath=self.REQUEST.SESSION['path']+"/index.meta" else: metapath=self.add_metadata['archive-path']+"/"+self.add_metadata['folder_name']+"/index.meta" f=open(metapath,'w') try: f.write(renderxml.encode('utf-8')) except: f.write(unicode(renderxml,'latin-1').encode('utf-8')) #f.write(renderxml) f.close() os.chmod(metapath,0664) os.popen('chmod -R 0775 %s'%self.add_metadata['archive-path']+"/"+self.add_metadata['folder_name']) if self.REQUEST.SESSION.has_key('no_upload'): #newtemplate2=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/done',"text/html").__of__(self) return self.REQUEST.response.redirect(self.REQUEST['URL2']+"?path="+self.REQUEST.SESSION['path']) else: #print self.add_metadata['archive-path'] self.viewpath=re.search(r"/mpiwg/online/(.*)",self.add_metadata['archive-path']).group(1) if (self.REQUEST.SESSION.has_key('no_upload')) and (self.REQUEST.SESSION['no_upload']=="text"): """text upload""" return 1 else: newtemplate2=PageTemplateFile(os.path.join(package_home(globals()),'zpt','OSAS_saved')).__of__(self) newtemplate2.content_type="text/html" self.REQUEST.response.setHeader('Content-Type','text/html') return newtemplate2() def date(self): return strftime("%d.%m.%Y",localtime()) def addPresentation(self,path): """add presentation to the path""" dom=xml.dom.minidom.parse(path+"/index.meta") try: author=archive.getText(dom.getElementsByTagName('author')[0].childNodes) except: try: author=archive.getText(dom.getElementsByTagName('Author')[0].childNodes) except: try: author=archive.getText(dom.getElementsByTagName('Editor')[0].childNodes) except: author="" try: title=archive.getText(dom.getElementsByTagName('title')[0].childNodes) except: title="" try: date=archive.getText(dom.getElementsByTagName('year')[0].childNodes) except: try: date=archive.getText(dom.getElementsByTagName('Year')[0].childNodes) except: try: date=archive.getText(dom.getElementsByTagName('date')[0].childNodes) except: date="" i=1 while os.path.exists(path+"/%02d-presentation"%i): i+=1 self.REQUEST.SESSION['presentationname']="%02d-presentation"%i self.REQUEST.SESSION['path']=path tmpTxt=""" %s %s %s yes """%(author,title,date) self.REQUEST.SESSION['xmlvorschlag']=tmpTxt.encode('utf-8') newtemplate=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addPresentation')).__of__(self) return newtemplate() def addPresentation2(self): """add presentation """ folder_name=self.REQUEST['folder_name'] #print self.REQUEST['folder_name'] content_description=self.REQUEST['content_description'] path=self.REQUEST.SESSION['path'] if not self.REQUEST.has_key('fileupload'): xmlinfo=self.REQUEST['xmltext'] file_name="info.xml" else: file_name=self.REQUEST['fileupload'].filename xmlinfo=self.REQUEST.form['fileupload'].read() # hack Multipart auswertung funktioniert nicht ausser bei mozilla file_name="info.xml" xmlinfo=self.REQUEST['xmltext'] try: os.mkdir(path+"/"+folder_name) except: """nothing""" #print "NAME:",file_name f=open(path+"/"+folder_name+"/"+file_name,"w") f.write(xmlinfo) f.close() try: os.chmod(path+"/"+folder_name,0775) except: """NO""" os.chmod(path+"/"+folder_name+"/"+file_name,0664) addDirsToIndexMeta(path,folder_name,content_description,'presentation') return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL2']+'?path='+path) def addPdf(self,path,folder=None): """add fulltext to the path""" self.REQUEST.SESSION['existing_names']=['pageimg'] # to be done generate list of existing text files self.REQUEST.SESSION['pathnew']=path newtemplate=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addPdf')).__of__(self) return newtemplate() def addPdf2(self): """addtext""" folder_name="pdf" # foldername fixed if self.REQUEST['file_name']=="": file_name=self.REQUEST['fileupload'].filename else: file_name=self.REQUEST['file_name'] #print self.REQUEST['folder_name'] content_description=self.REQUEST['content_description'] path=self.REQUEST.SESSION['pathnew'] filedata=self.REQUEST.form['fileupload'].read() try: os.mkdir(path+"/"+folder_name) except: """nothing""" f=open(path+"/"+folder_name+"/"+file_name,"w") f.write(filedata) f.close() os.chmod(path+"/"+folder_name,0755) os.chmod(path+"/"+folder_name+"/"+file_name,0644) addDirsToIndexMeta(path,folder_name,content_description,'pdf') return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL2']+'?path='+path) def addText(self,path,folder=None): """add fulltext to the path""" self.REQUEST.SESSION['existing_names']=['pageimg'] # to be done generate list of existing text files self.REQUEST.SESSION['pathnew']=path newtemplate=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addText')).__of__(self) return newtemplate() def addText2(self): """addtext""" folder_name=self.REQUEST['folder_name'] #print self.REQUEST['folder_name'] content_description=self.REQUEST['content_description'] path=self.REQUEST.SESSION['pathnew'] file_name=self.REQUEST['fileupload'].filename filedata=self.REQUEST.form['fileupload'].read() os.mkdir(path+"/"+folder_name) f=open(path+"/"+folder_name+"/"+file_name,"w") f.write(filedata) f.close() os.chmod(path+"/"+folder_name,0755) os.chmod(path+"/"+folder_name+"/"+file_name,0644) addDirsToIndexMeta(path,folder_name,content_description,'fulltext') return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL2']+'?path='+path) def addTextExternal(self,path,texturl,version): """hinzufügen eines externen textes""" try: #neue text version einlesen texttemp=urllib.urlopen(texturl).readlines() text="" for line in texttemp: text=text+line except: #fehler beim lesen des textes return "ERROR: cannot read: %s"%texturl if TextExternalError(text): #kein xml header return "ERROR: cannot read: %s"%texturl, "received:",text textpath=getNewTextPath(path) #erzeuge neuen Ornder für den Text splitted=string.split(texturl,"/") name=splitted[len(splitted)-1] #Name des XML-files try: writefile=file(path+"/"+textpath+"/"+name,"w") except: return"ERROR: cannot write: %s"%path+"/"+textpath+"/"+name writefile.write(text) writefile.close() os.chmod(path+"/"+textpath+"/"+name,0644) #add new file to XML dom=xml.dom.minidom.parse(path+"/index.meta") node=dom.getElementsByTagName('resource')[0] #getNode subnode=dom.createElement('dir') namenode=dom.createElement('name') namenodetext=dom.createTextNode(textpath) namenode.appendChild(namenodetext) subnode.appendChild(namenode) descriptionnode=dom.createElement('description') descriptionnodetext=dom.createTextNode('archimedes text:'+version) descriptionnode.appendChild(descriptionnodetext) subnode.appendChild(descriptionnode) contentnode=dom.createElement('content-type') contentnodetext=dom.createTextNode('fulltext') contentnode.appendChild(contentnodetext) subnode.appendChild(contentnode) node.appendChild(subnode) writefile=file(path+"/index.meta","w") writefile.write(dom.toxml(encoding="UTF-8")) writefile.close() #change texttool tag dom=xml.dom.minidom.parse(path+"/index.meta") node=dom.getElementsByTagName('meta')[0] #getNode try: #texttool existiert schon subnode=node.getElementsByTagName('texttool')[0] except: #wenn nicht Fehler ausgeben return "ERROR:no presentation configured yet, user Web Front End to do so!" try: texttoolnodelist=subnode.getElementsByTagName('text') if not len(texttoolnodelist)==0: #texttool tag existiert schon, dann löschen subsubnode=subnode.removeChild(texttoolnodelist[0]) subsubnode.unlink() except: """nothing""" # text neu anlegen textfoldernode=dom.createElement('text') textfoldernodetext=dom.createTextNode(textpath+"/"+name) textfoldernode.appendChild(textfoldernodetext) subnode.appendChild(textfoldernode) #index.meta ausgeben writefile=file(path+"/index.meta","w") writefile.write(dom.toxml(encoding="UTF-8")) writefile.close() #registrieren return urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines() def TextExternalError(text): firsts=text[0:10] #print firsts try: match=re.search(r".*> /tmp/sc.out &"%dlpath ) 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() zLOG.LOG('OSAS (combine)',zLOG.INFO,ret) else: # falls keine Bilder (bug in reg.cgi info file ersetzen) f=file("/tmp/tmp_info.xml","w") tmp=patchedInfoXML(self.REQUEST['path']) f.write(tmp.encode('utf-8')) f.close() splitted=path.split("/") fn=splitted[len(splitted)-1] remotePath="archive@nausikaa2.rz-berlin.mpg.de:/usr/local/share/archimedes/web/docs/proj/echo/1/docs/"+fn+"/info.xml" os.popen("scp /tmp/tmp_info.xml %s"%remotePath) def patchedInfoXML(path): dom=xml.dom.minidom.parse(path+"/index.meta") ret="\n" ret+="%s\n"%archive.getText(dom.getElementsByTagName('text')[0].childNodes) ret+="%s\n"%archive.getText(dom.getElementsByTagName('pagebreak')[0].childNodes) ret+="%s\n"%archive.getText(dom.getElementsByTagName('display')[0].childNodes) try: ret+="%s\n"%archive.getText(dom.getElementsByTagName('toptemplate')[0].childNodes) except: """not""" try: ret+="%s\n"%archive.getText(dom.getElementsByTagName('thumbtemplate')[0].childNodes) except: """not""" try: ret+="%s\n"%archive.getText(dom.getElementsByTagName('startpage')[0].childNodes) except: """not""" ret+="%s\n"%archive.getText(dom.getElementsByTagName('lang')[0].childNodes) try: ret+="%s\n"%archive.getText(dom.getElementsByTagName('author')[0].childNodes) except: """not""" try: ret+="%s\n"%archive.getText(dom.getElementsByTagName('title')[0].childNodes) except: """not""" ret+="" return ret