#BAUSTELLE """Methoden zum hinzufügen von Dokumenten ins Archiv""" import archive import os from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Products.PageTemplates.PageTemplate import PageTemplate import string import urllib import xml.dom.minidom #referencetypes=['Book','Bic','Journal Article','Manuscript','jiji'] import re 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=['Book','Journal Article','Manuscript'] newtemplate=PageTemplateFile('Products/OSA_system/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() return self.referencetypes def getISO(): f=file('/usr/local/mpiwg/Zope/lib/python/Products/OSA_system/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 return ret def add2(self): self.reftype=self.REQUEST['Reference Type'] self.REQUEST.SESSION['reftype']=self.reftype self.bibdata={'Book':['author','year','title','series editor','series title','series volume','number of pages','city','publisher','edition','number of volumes','translator','ISBN ISSN'], 'Journal Article':['author','year','title','journal','volume','issue','pages','alternate journal','call number'], 'Manuscript':['author','year','title','location','signature','pages','editorial remarks','description','keywords']} self.fields=self.bibdata[self.reftype] self.isolist=getISO() #listed=[ x for x in self.isolist.keys()] #print listed #sorted=listed.sort() #print sorted newtemplate=PageTemplateFile('Products/OSA_system/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_naming=metadata['author'][:5]+"_"+metadata['title'][:5]+"_"+metadata['year'] self.vorschlag_naming=vorschlag_naming.decode('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/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'] # netx has to be changed -> error if back button is used!! self.REQUEST.SESSION['path']=self.REQUEST.SESSION['path']+"/"+self.REQUEST['folder_name'] self.REQUEST.SESSION['folder_name']=self.folder_name self.image_folder_name="pageimg" newtemplate=PageTemplateFile('Products/OSA_system/OSAS_upload').__of__(self) return newtemplate() def add5(self): """ADD INDEX.META""" newtemplate=PageTemplateFile('Products/OSA_system/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(): self.metadataprint=self.metadataprint+"<"+tag+">"+self.metadata[tag]+"\n" newtemplate=PageTemplateFile('Products/OSA_system/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,0644) 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) newtemplate2=PageTemplateFile('Products/OSA_system/OSAS_saved').__of__(self) newtemplate2.content_type="text/html" self.REQUEST.response.setHeader('Content-Type','text/html') return newtemplate2() from time import localtime,strftime 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: author=archive.getText(dom.getElementsByTagName('Author')[0].childNodes) title=archive.getText(dom.getElementsByTagName('title')[0].childNodes) try: date=archive.getText(dom.getElementsByTagName('year')[0].childNodes) except: try: date=archive.getText(dom.getElementsByTagName('Year')[0].childNodes) except: date=archive.getText(dom.getElementsByTagName('date')[0].childNodes) 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/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() os.chmod(path+"/"+folder_name,0755) 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): """add fulltext to the path""" self.REQUEST.SESSION['existing_names']=['pageimg'] # to be done generate list of existing text files self.REQUEST.SESSION['path']=path newtemplate=PageTemplateFile('Products/OSA_system/addText').__of__(self) return newtemplate() def addText2(self): folder_name=self.REQUEST['folder_name'] #print self.REQUEST['folder_name'] content_description=self.REQUEST['content_description'] path=self.REQUEST.SESSION['path'] 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'])) #return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL2']+'?path='+self.REQUEST['path'])