--- MPIWGWeb/MPIWGProjects.py 2005/10/12 19:35:38 1.47.2.28 +++ MPIWGWeb/MPIWGProjects.py 2005/10/17 10:59:06 1.47.2.34 @@ -3,6 +3,8 @@ for organizing and maintaining the diffe """ #TODO: mechanismus fur links to personen ueberarbeiten, da jetzt alle e_mails als members auftauchen unabhaengig vom status publish_the_data +#TODO: was passiert wenn aenderungen von jochen im filemaker nicht mit den aenderungen im sql uebereinstimmen +#TODO: in einzelnen projecte steht als pfad auf die bilder noch wwwneu statt www from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Products.PageTemplates.PageTemplate import PageTemplate @@ -27,6 +29,10 @@ from bibliography import * import time import xml.dom.minidom import sys +from Ft.Xml.XPath import Evaluate +from Ft.Xml.XPath.Context import Context +from Ft.Xml.Domlette import NonvalidatingReader,PrettyPrint, Print +from Ft.Xml import EMPTY_NAMESPACE definedFields=['WEB_title','xdata_01','xdata_02','xdata_03','xdata_04','xdata_05','xdata_06','xdata_07','xdata_08','xdata_09','xdata_10','xdata_11','xdata_12','xdata_13','WEB_project_header','WEB_project_description','WEB_related_pub'] @@ -291,12 +297,12 @@ class MPIWGRoot(ZSQLExtendFolder): ids=[int(x.id[1:]) for x in founds] maximum=max(ids) - id_raw=self.ZSQLQuery("select nextval('id_raw_test')",debug=debug) + id_raw=self.ZSQLQuery("select nextval('id_raw')",debug=debug) if id_raw: - self.ZSQLQuery("drop sequence id_raw_test",debug=debug) + self.ZSQLQuery("drop sequence id_raw",debug=debug) - self.ZSQLQuery("create sequence id_raw_test start %i"%(maximum+1),debug=debug) + self.ZSQLQuery("create sequence id_raw start %i"%(maximum+1),debug=debug) def queryLink(self,link): @@ -531,7 +537,7 @@ class MPIWGRoot(ZSQLExtendFolder): list[urllib.quote(personNormal)]=(personNormal,[project[1]]) except: - zLOG.LOG("MPIWG Web (harvestHistoricalPerson)",zLOG.ERROR,"cannot annalyize: %s"%repr(project)) + zLOG.LOG("MPIWG Web (harvestHistoricalPerson)",zLOG.ERROR,"cannot analyize: %s"%repr(project)) return list @@ -695,10 +701,11 @@ class MPIWGRoot(ZSQLExtendFolder): manage_options = Folder.manage_options+( - {'label':'Update Personal Homepages','action':'updateHomepages'}, + {'label':'Update personal homepages','action':'updateHomepages'}, + {'label':'Reindex catalogs','action':'reindexCatalogs'}, {'label':'Main config','action':'changeMPIWGRootForm'}, - {'label':'Edit Historical Persons','action':'editHistoricalPersonsForm'}, - {'label':'Store Historical Persons','action':'storeHistoricalPersons'}, + #{'label':'Edit Historical Persons','action':'editHistoricalPersonsForm'}, + #{'label':'Store Historical Persons','action':'storeHistoricalPersons'}, ) def importNamesForm(self): @@ -739,8 +746,9 @@ class MPIWGRoot(ZSQLExtendFolder): founds = self.ZSQLInlineSearch(_table="publications") for found in founds: - - if found.id_institutsbibliographie and (not found.id_institutsbibliographie ==""): + + if found.id_institutsbibliographie and (not found.id_institutsbibliographie =="") and (not found.id_institutsbibliographie =="0"): + entries = self.ZSQLInlineSearch(_table="institutsbiblio",id=found.id_institutsbibliographie) for entry in entries: self.ZSQLChange(_table='publications',_identify='oid=%s' % found.oid,year=entry.year,referencetype=entry.reference_type) @@ -752,44 +760,53 @@ class MPIWGRoot(ZSQLExtendFolder): return True - def updateHomepage_neu(self,RESPONSE=None): + def updateHomepages(self,RESPONSE=None): """ update""" + #FIXME: seite wird hinter apache mehrfach ausgefŸhrt + RESPONSE.setHeader('Content-type', 'text/html') RESPONSE.write("\n") url="http://itgroup.mpiwg-berlin.mpg.de:8050/FMPro?-db=personal-www&-format=-dso_xml&-lay=sql_export&-max=10000&-findall" - fh=urllib.urlopen(url) - dom=xml.dom.minidom.parse(fh) + dom = NonvalidatingReader.parseUri(url) + #fh=urllib.urlopen(url) + #dom=xml.dom.minidom.parse(fh) + RESPONSE.write("got_xml_File\n") memberFolder=getattr(self,'members') members=memberFolder.ZopeFind(memberFolder,obj_metatypes=["MPIWGStaff"]) memberList=[x[0] for x in members] - - for row in dom.getElementsByTagName('ROW'): - username=getTextFromNode(row.getElementsByTagName('username')[0]) - id=getTextFromNode(row.getElementsByTagName('ID')[0]) - name=getTextFromNode(row.getElementsByTagName('Name')[0]) - vorname=getTextFromNode(row.getElementsByTagName('Vorname')[0]) - title=getTextFromNode(row.getElementsByTagName('Title')[0]) - e_mail=getTextFromNode(row.getElementsByTagName('e_mail')[0]) - e_mail_p=getTextFromNode(row.getElementsByTagName('e_mail_p')[0]) - date_from=getTextFromNode(row.getElementsByTagName('Date_from')[0]) - date_to=getTextFromNode(row.getElementsByTagName('Date_to')[0]) - abteilung=getTextFromNode(row.getElementsByTagName('Abteilung')[0]) - heimat_inst=getTextFromNode(row.getElementsByTagName('heimat_inst')[0]) - funded_by=getTextFromNode(row.getElementsByTagName('funded_by')[0]) - e_mail2=getTextFromNode(row.getElementsByTagName('e_mail2')[0]) - publish_the_data=getTextFromNode(row.getElementsByTagName('publish_the_data')[0]) + #print dom + #ctx=Context(dom,processorNss={EMPTY_NAMESPACE:'http://www.filemaker.com/fmpdsoresult'}) + # Evaluate(u".//dn:ROW",contextNode=dom,explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'}) + #print dom.xpath(u'.//dn:ROW',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'}) + for row in dom.xpath(u'.//dn:ROW',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'}): + + username=getTextFromNode(row.xpath('./dn:username',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + id=getTextFromNode(row.xpath('./dn:ID',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + name=getTextFromNode(row.xpath('./dn:Name',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + vorname=getTextFromNode(row.xpath('./dn:Vorname',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + title=getTextFromNode(row.xpath('./dn:Title',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + e_mail=getTextFromNode(row.xpath('./dn:e_mail',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + e_mail_p=getTextFromNode(row.xpath('./dn:e_mail_p',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + date_from=getTextFromNode(row.xpath('./dn:Date_from',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + date_to=getTextFromNode(row.xpath('./dn:Date_to',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + abteilung=getTextFromNode(row.xpath('./dn:Abteilung',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + heimat_inst=getTextFromNode(row.xpath('./dn:heimat_inst',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + funded_by=getTextFromNode(row.xpath('./dn:funded_by',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + e_mail2=getTextFromNode(row.xpath('./dn:e_mail2',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + publish_the_data=getTextFromNode(row.xpath('./dn:publish_the_data',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) - cwNode=row.getElementsByTagName('current_work.current')[0] - cw=cwNode.getElementsByTagName('DATA') + #cwNode=row.xpath('./dn:current_work.current',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0] + cw=row.xpath('./dn:current_work/dn:DATA',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'}) if cw: txt=getTextFromNode(cw[0]) else: txt="" - cwNode=row.getElementsByTagName('current_work.publish')[0] - cw=cwNode.getElementsByTagName('DATA') + #cwNode=row.xpath('.//dn:current_work.publish',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0] + cw=row.xpath('./dn:current_work/dn:DATA',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'}) + if cw: txt_p=getTextFromNode(cw[0]) else: @@ -798,31 +815,72 @@ class MPIWGRoot(ZSQLExtendFolder): project=getattr(self,'members') if not (username in memberList):#neuer eintrag + try: - newObj=MPIWGStaff.MPIWGStaff(str(username),name,vorname) + newObj=MPIWGStaff.MPIWGStaff(str(username),name.encode('utf-8'),vorname.encode('utf-8')) memberFolder._setObject(str(username),newObj) RESPONSE.write("

new:%s

\n"%username.encode('utf-8')) obj=getattr(memberFolder,username) - obj.createNewDBEntry(publish_the_data,id,name, - vorname,title,e_mail, + ret=obj.createNewDBEntry(publish_the_data,id,name, + vorname,username,title,e_mail, e_mail_p,date_from,date_to, abteilung,heimat_inst,funded_by, e_mail2,txt,txt_p) + RESPONSE.write("""

%s

"""%ret[1].encode('utf-8')) except: RESPONSE.write("

ERROR:%s %s %s

\n"%(username.encode('utf-8'),name.encode('utf-8'),vorname.encode('utf-8'))) RESPONSE.write("

: %s %s"%sys.exc_info()[:2]) else: RESPONSE.write("

update:%s

\n"%username.encode('utf-8')) - self.ZSQLChange(_table="personal_www",_identify="id=%s"%id,publish_the_data=publish_the_data, + + xquery=".//dn:ROW[dn:username='%s']"%username + results=dom.xpath(xquery,explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'}) + if len(results)>1: + RESPONSE.write("

WARNING (update): username %s not unique

\n"%username.encode('utf-8')) + xquery=".//dn:ROW[dn:publish_the_data='yes' and dn:username='%s']"%username + rd=dom.xpath(xquery,explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'}) + if len(rd)>1:#mehrere published + RESPONSE.write("

ERROR (update): username %s not unique and more then one date set to be published

\n"%username.encode('utf-8')) +# elif len(rd)==1:#nur einer published, kein published dann mache nichts +# publish_the_data=getTextFromNode(rd[0].xpath('./dn:publish_the_data',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) +# date_from=getTextFromNode(rd[0].xpath('./dn:Date_from',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) +# date_to=getTextFromNode(rd[0].xpath('./dn:Date_to',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) +# + + obj=getattr(memberFolder,username) + + obj.updateDBEntry(DBid=id,publish_the_data=publish_the_data, date_from=date_from, date_to=date_to) - - + + self.reindexCatalogs(RESPONSE) + + self.updatePublicationDB() + + RESPONSE.write("

Done

") + + + + def reindexCatalogs(self,RESPONSE=None): + """reindex members and project catalog""" + + + try: + self.MembersCatalog.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1']) + self.ProjectCatalog.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1']) + except: + zLOG.LOG("MPIWG Root (updatehomepage)",zLOG.WARNING," %s %s"%sys.exc_info()[:2]) + + + - return True + if RESPONSE: + RESPONSE.redirect('manage_main') + - def updateHomepages(self,RESPONSE): - """lege members an""" + + def updateHomepages_old(self,RESPONSE): + """lege members an, alte version vollstaendige kopie aller fm-dateien per fm.jar""" self.upDateSQL('personalwww.xml') founds=self.ZSQLInlineSearch(_table='personal_www',publish_the_data='yes') project=getattr(self,'members') @@ -869,6 +927,7 @@ class MPIWGRoot(ZSQLExtendFolder): # ret.append(x.title.decode('utf-8')) for x in self.ZopeFind(self.members,obj_metatypes=['MPIWGStaff']): + if x[1].isPublished(): ret.append(x[1].title.decode('utf-8')) ret.sort() @@ -1096,7 +1155,7 @@ class MPIWGRoot(ZSQLExtendFolder): except: proj=None - if proj: + if proj and (proj[0].getObject().isPublished()): if person =="Otto Sibum" : person="H. Otto Sibum" if person =="Norton Wise" : person="M. Norton Wise" #ret.append("%s"%(proj[0].absolute_url,person.encode('utf-8'))) @@ -1337,6 +1396,7 @@ class MPIWGProject(CatalogAware,Folder): def copyImageToMargin(self,RESPONSE=None): + #TODO: copy more than one image """copy inline images to marginal images""" self.getContent('WEB_project_description',filter='yes') @@ -1349,8 +1409,17 @@ class MPIWGProject(CatalogAware,Folder): self.addImage(None,self.imagecap,filename=filename) #hole die bilddaten aus der url - data=urllib.urlopen(self.absolute_url()+"/"+self.imageURL).read() - + url=self.absolute_url()+"/"+self.imageURL + #url=self.absolute_url()+"/"+filename + + try:#relative url + data=urllib.urlopen(url).read() + except: + try:#absolute + data=urllib.urlopen(self.imageURL).read() + except: + zLOG.LOG("MPIWG Project",zLOG.ERROR,"can't open: %s"%url) + obj=getattr(self,filename) obj.update_data(data) @@ -1847,7 +1916,7 @@ class MPIWGProject(CatalogAware,Folder): return True - security.declareProtected('View managment screens','edit') + security.declareProtected('View management screens','edit') def edit(self,western=None): """Edit pages""" if western: @@ -1974,6 +2043,7 @@ class MPIWGProject(CatalogAware,Folder): splitted=[y.rstrip().lstrip() for y in splitted] for x in splitted: + x=re.sub(r"[^A-z]","",x) if (not x==u'') and x in wert: return 1 return 0 @@ -1984,13 +2054,13 @@ class MPIWGProject(CatalogAware,Folder): pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGBasisNeu.zpt')).__of__(self) return pt() - + security.declareProtected('View management screens','editMPIWGBasisForm') def editMPIWGBasisForm(self): """editform""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGBasis.zpt')).__of__(self) return pt() - + security.declareProtected('View management screens','editMPIWGRelatedPublicationsForm') def editMPIWGRelatedPublicationsForm(self): """Edit related Publications""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGRelatedPublications.zpt')).__of__(self)