#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 from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Products.PageTemplates.PageTemplate import PageTemplate import string import urllib import xml.dom.minidom from time import localtime,strftime from Globals import package_home 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('Products/OSA_system/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') 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('Products/OSA_system/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('Products/OSA_system/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 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('Products/OSA_system/zpt/OSAS_upload').__of__(self) return newtemplate() 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""" newtemplate=PageTemplateFile('Products/OSA_system/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('Products/OSA_system/zpt/index_meta').__of__(self) newtemplate.content_type="text/plain" renderxml = newtemplate() 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') f.writelines(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 not (self.REQUEST.SESSION['no_upload']=="text"): newtemplate2=PageTemplateFile('Products/OSA_system/zpt/OSAS_saved').__of__(self) newtemplate2.content_type="text/html" self.REQUEST.response.setHeader('Content-Type','text/html') return newtemplate2() else: """text upload""" return 1 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("%02d-presentation"%i): i+=1 self.REQUEST.SESSION['presentationname']="%02d-presentation"%i self.REQUEST.SESSION['path']=path self.REQUEST.SESSION['xmlvorschlag']=""" %s %s %s yes """%(author,title,date) newtemplate=PageTemplateFile('Products/OSA_system/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,0755) except: """NO""" os.chmod(path+"/"+folder_name+"/"+file_name,0644) addDirsToIndexMeta(path,folder_name,content_description,'presentation') 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('Products/OSA_system/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().encode('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().encode('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 &"% re.sub('/mpiwg/online/','',self.REQUEST['path']+"/"+self.REQUEST['image'])) else: # falls keine Bilder (bug in reg.cgi info file ersetzen) f=file("/tmp/tmp_info.xml","w") f.write(patchedInfoXML(self.REQUEST['path'])) 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