--- MPIWGWeb/MPIWGProjects.py 2004/07/05 14:22:31 1.10 +++ MPIWGWeb/MPIWGProjects.py 2004/08/10 13:27:25 1.20 @@ -5,7 +5,9 @@ for organizing and maintaining the diffe from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Products.PageTemplates.PageTemplate import PageTemplate from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate +from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder +import urllib import MPIWGStaff import string import re @@ -15,6 +17,8 @@ import xmlhelper # Methoden zur Verwaltu from OFS.SimpleItem import SimpleItem from OFS.Folder import Folder +from bibliography import * + 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'] checkFields = ['xdata_01'] @@ -25,7 +29,11 @@ def sortF(x,y): try: return cmp(x[1],y[1]) except: - return 0 + try: + return cmp(str(x[1]),str(y[1])) + except: + print "error",x[1],y[1] + return 0 def sortI(x,y): xsplit=x[1].split(".") @@ -50,7 +58,7 @@ def sortI(x,y): return cmp(x[1],y[1]) -class MPIWGRoot(Folder): +class MPIWGRoot(ZSQLExtendFolder): """Stammordner für den Web-Server""" fieldLabels={'WEB_title':'WEB_Title','xdata_01':'Responsible Scientists','xdata_02':'Department', @@ -64,6 +72,18 @@ class MPIWGRoot(Folder): folders=['MPIWGProject','Folder'] meta_type='MPIWGRoot' + def replaceNotEmpty(self,format,field): + """replace not empty""" + if field and (not field==''): + return format%field + else: + return "" + + + def formatBibliography(self,here,found): + """format""" + return formatBibliography(here,found) + def getValue(self,field): """Inhalt des Feldes""" @@ -83,7 +103,19 @@ class MPIWGRoot(Folder): def sortedNames(self,list): """sort names""" - def sortLastName(x,y): + def sortLastName(x_c,y_c): + try: + x=urllib.unquote(x_c).encode('utf-8','ignore') + except: + x=urllib.unquote(x_c) + + try: + y=urllib.unquote(y_c).encode('utf-8','ignore') + except: + x=urllib.unquote(y_c) + + + try: last_x=x.split()[len(x.split())-1] last_y=y.split()[len(y.split())-1] @@ -111,7 +143,15 @@ class MPIWGRoot(Folder): """init""" self.id=id self.title=title - + + def urlQuote(self,str): + """quote""" + return urllib.quote(str) + + def urlUnQuote(self,str): + """quote""" + return urllib.unquote(str) + def harvestHistoricalPersons(self): """erstelle liste aller erwaehnten actors""" @@ -130,7 +170,7 @@ class MPIWGRoot(Folder): lg=len(project[1].xdata_03[0])-1 if (lg>1) and (project[1].xdata_03[0][lg]==";"): - project[1].xdata_03[0]=project[1].xdata_03[0][0:lg-1] + project[1].xdata_03[0]=project[1].xdata_03[0][0:lg] @@ -140,16 +180,16 @@ class MPIWGRoot(Folder): for person in project[1].xdata_03[0].split(";"): personNormal=normalize(person) if personNormal in list.keys(): - list[personNormal].append(project[1]) + list[urllib.quote(personNormal)][1].append(project[1]) else: - list[personNormal]=[project[1]] + list[urllib.quote(personNormal)]=(personNormal,[project[1]]) else: #guess , is sepeator for person in project[1].xdata_03[0].split(","): personNormal=normalize(person) - if personNormal in list.keys(): - list[personNormal].append(project[1]) + if urllib.quote(personNormal) in list.keys(): + list[urllib.quote(personNormal)][1].append(project[1]) else: - list[personNormal]=[project[1]] + list[urllib.quote(personNormal)]=(personNormal,[project[1]]) except: print "ERROR",project @@ -161,16 +201,26 @@ class MPIWGRoot(Folder): self.personDict={} personDict=self.harvestHistoricalPersons() for person in personDict.keys(): - for project in personDict[person]: + for project in personDict[person][1]: if person in self.personDict.keys(): - self.personDict[person].append((project.absolute_url(),project.WEB_title[0],project.xdata_01[0])) + self.personDict[person][1].append((project.absolute_url(),project.WEB_title[0],project.xdata_01[0])) else: - self.personDict[person]=[(project.absolute_url(),project.WEB_title[0],project.xdata_01[0])] + self.personDict[person]=(personDict[person][0],[(project.absolute_url(),project.WEB_title[0],project.xdata_01[0])]) if RESPONSE is not None: RESPONSE.redirect("showHistoricalPersons") + def getPersonDict(self,name): + """name von dict""" + + try: + return self.personDict[name][0].encode('utf-8') + except: + return self.personDict[name][0] + return self.personDict[name][0].decode('latin-1').encode('utf-8') + + def showHistoricalPersons(self): """show persons""" pt=PageTemplateFile('Products/MPIWGWeb/zpt/showHistoricalPersons').__of__(self) @@ -236,7 +286,7 @@ class MPIWGRoot(Folder): if re.match(searchStr,project[1]): if depth: - print "ho" + if int(depth)>=len(project[1].split("."))-len(childs.split(".")): ret.append(project) @@ -335,7 +385,7 @@ class MPIWGRoot(Folder): for x in self.ZopeFind(self.members,obj_metatypes=['MPIWGStaff']): ret.append(x[1].title.decode('utf-8')) - #ret.sort() + ret.sort() #print ret return ret @@ -366,12 +416,24 @@ class MPIWGRoot(Folder): splittedId=idNr.split(".") depth=len(splittedId) nr=idNr - title=project[0].WEB_title - + #title=project[0].WEB_title + title=[project[0].getContent('WEB_title')] + #print title returnList.append((depth,nr,title,project[0])) return returnList + def formatElementForOverview(self,element): + """format the element for output in overview""" + if element[0]==1: #department + return """

Department %s: %s

"""%(element[3].absolute_url(),element[3].getContent('xdata_05'),element[3].getContent('WEB_title')) + + elif element[0]==2: #mainprojects + return """

%s

"""%(element[3].absolute_url(),element[3].getContent('WEB_title')) + + elif element[0]==3: + return """
%s"""%(element[3].absolute_url(),element[3].getContent('WEB_title')) + def changePosition(self,treeId,select,RESPONSE=None): """Change Postion Entry""" numbers=[] @@ -430,6 +492,35 @@ class MPIWGRoot(Folder): + def getRelativeUrlFromPerson(self,list): + """get urls to person list""" + ret=[] + persons=list.split(";") + for person in persons: + + if len(person)>1: #nicht nur Trennzeichen + splitted=person.split(",") + if len(splitted)==1: + splitted=person.split(" ") + splittedNew=[re.sub(r'\s(.*)','$1',split) for split in splitted] + if splittedNew[0]=='': + del splittedNew[0] + search=string.join(splittedNew,' AND ') + + if not search=='': + + try: + proj=self.MembersCatalog({'title':search}) + except: + proj=None + + if proj: + #ret.append("%s"%(proj[0].absolute_url,person.encode('utf-8'))) + ret.append("%s"%('members/'+proj[0].id,person)) + else: + #ret.append("%s"%person.encode('utf-8')) + ret.append("%s"%person) + return string.join(ret,";") def getUrlFromPerson(self,list): @@ -455,8 +546,10 @@ class MPIWGRoot(Folder): proj=None if proj: + #ret.append("%s"%(proj[0].absolute_url,person.encode('utf-8'))) ret.append("%s"%(proj[0].absolute_url,person)) else: + #ret.append("%s"%person.encode('utf-8')) ret.append("%s"%person) return string.join(ret,";") @@ -466,23 +559,53 @@ class MPIWGRoot(Folder): members=self.getAllMembers() #return str(members) for x in members: - #y=x.encode('utf-8') - y=x - splitted=y.split(",") - splitNeu=[] - for s in splitted: - splitNeu.append("\""+s+"\"") - search=string.join(splitNeu,' AND ') - - proj=self.ProjectCatalog({'xdata_01':search}) - if proj: - ret.append((y,proj)) - - proj=self.ProjectCatalog({'xdata_08':search}) - if proj: - ret.append((y,proj)) + ret+=self.getProjectsOfMember(name=x) + + return ret + + def getProjectsOfMember(self,name=None,email=None): + """get project of a member""" + def sortP(x,y): + """sort by sorting number""" + #print x.xdata_05,y.xdata_05 + return cmp(x.WEB_title,y.WEB_title) + + + ret=[] + splitNeu=[] + if email: + members=self.ZopeFind(self.members,obj_metatypes=['MPIWGStaff'],obj_ids=[email]) + name = members[0][1].title.decode('utf-8') + + y=name + splitted=y.split(",") + for s in splitted: + splitNeu.append("\""+s+"\"") + search=string.join(splitNeu,' AND ') + + proj=self.ProjectCatalog({'xdata_01':search}) + if proj: + proj2=[x for x in proj] + # proj2.sort(sortP) + # ret.append((y,proj2)) + else: + proj2=[] + + proj=self.ProjectCatalog({'xdata_08':search}) + if proj: + names=[x.WEB_title for x in proj] + for x in proj: + if not x.WEB_title in names: + proj2.append(x) + + + proj2.sort(sortP) + + if len(proj2)>0: + ret.append((y,proj2)) return ret + def givePersonList(self,name): """check if person is in personfolder and return list of person objects""" @@ -640,7 +763,8 @@ class MPIWGProject(Folder): """giveListofDatafields""" ret=[] for x in range(1,14): - ret.append('xdata_%02i'%x) + if not x in [6,10,9]: # not used fields + ret.append('xdata_%02i'%x) return ret def getDefinedFields(self): @@ -666,16 +790,19 @@ class MPIWGProject(Folder): try: text =x.encode('utf-8') except: - text="ERROR" + text=x.decode('latin-1').encode('utf-8') #delete separator (;) if is there is one try: if text[len(text)-1]==";": - text=text[0:len(text)-1] + text=text[0:len(text)-1].encode('utf-8') except: """nothing""" - - return text + + if (type(text)==StringType) or (type(text)==UnicodeType): + return text + else: + return text[0] def show_html(self): @@ -789,15 +916,15 @@ def manage_addMPIWGProjectForm(self): def manage_addMPIWGProject(self,id,RESPONSE=None): """method to add a project""" #print argv - if self.REQUEST.has_key('fileupload'): - fileupload=self.REQUEST['fileupload'] - if fileupload: - file_name=fileupload.filename - filedata=fileupload.read() - - argv=xmlhelper.proj2hash(filedata) - - #print argv + fileupload=self.REQUEST.get('fileupload',None) + if fileupload: + print fileupload + file_name=fileupload.filename + filedata=fileupload.read() + + argv=xmlhelper.proj2hash(filedata) + + #print argv newObj=MPIWGProject(id,argv) else: newObj=MPIWGProject(id)