--- MPIWGWeb/MPIWGProjects.py 2004/07/06 16:49:36 1.11 +++ MPIWGWeb/MPIWGProjects.py 2004/07/29 16:39:20 1.18 @@ -7,6 +7,7 @@ from Products.PageTemplates.PageTemplate from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder +import urllib import MPIWGStaff import string import re @@ -28,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(".") @@ -98,7 +103,19 @@ class MPIWGRoot(ZSQLExtendFolder): 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] @@ -126,7 +143,15 @@ class MPIWGRoot(ZSQLExtendFolder): """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""" @@ -145,7 +170,7 @@ class MPIWGRoot(ZSQLExtendFolder): 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] @@ -155,16 +180,16 @@ class MPIWGRoot(ZSQLExtendFolder): 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 @@ -176,16 +201,26 @@ class MPIWGRoot(ZSQLExtendFolder): 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) @@ -251,7 +286,7 @@ class MPIWGRoot(ZSQLExtendFolder): if re.match(searchStr,project[1]): if depth: - print "ho" + if int(depth)>=len(project[1].split("."))-len(childs.split(".")): ret.append(project) @@ -350,7 +385,7 @@ class MPIWGRoot(ZSQLExtendFolder): 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 @@ -381,12 +416,24 @@ class MPIWGRoot(ZSQLExtendFolder): 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 "
"%(element[3].getContent('WEB_title'))
+
+ elif element[0]==3:
+ return "
%s"%(element[3].getContent('WEB_title'))
+
def changePosition(self,treeId,select,RESPONSE=None):
"""Change Postion Entry"""
numbers=[]
@@ -445,6 +492,35 @@ class MPIWGRoot(ZSQLExtendFolder):
+ 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):
@@ -470,8 +546,10 @@ class MPIWGRoot(ZSQLExtendFolder):
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,";")
@@ -482,17 +560,17 @@ class MPIWGRoot(ZSQLExtendFolder):
#return str(members)
for x in members:
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"""
-
- return cmp(x.xdata_05,y.xdata_05)
+ #print x.xdata_05,y.xdata_05
+ return cmp(x.WEB_title,y.WEB_title)
-
+
ret=[]
splitNeu=[]
if email:
@@ -508,16 +586,24 @@ class MPIWGRoot(ZSQLExtendFolder):
proj=self.ProjectCatalog({'xdata_01':search})
if proj:
proj2=[x for x in proj]
- proj2.sort(sortP)
- ret.append((y,proj2))
-
+ # proj2.sort(sortP)
+ # ret.append((y,proj2))
+ else:
+ proj2=[]
+
proj=self.ProjectCatalog({'xdata_08':search})
if proj:
- proj2=[x for x in proj]
- proj2.sort(sortP)
+ 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):
@@ -677,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):
@@ -703,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):