--- MPIWGWeb/MPIWGProjects.py 2004/07/05 14:22:31 1.10
+++ MPIWGWeb/MPIWGProjects.py 2004/07/29 07:36:16 1.15
@@ -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']
@@ -50,7 +54,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 +68,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 +99,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 +139,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 +166,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 +176,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 +197,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 +282,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)
@@ -366,7 +412,9 @@ 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]))
@@ -430,6 +478,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 +532,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 +545,45 @@ 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"""
+
+ return cmp(x.xdata_05,y.xdata_05)
+
+
+ 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))
+
+ proj=self.ProjectCatalog({'xdata_08':search})
+ if proj:
+ proj2=[x for x in proj]
+ proj2.sort(sortP)
+ ret.append((y,proj2))
+
+
+ return ret
+
def givePersonList(self,name):
"""check if person is in personfolder and return list of person objects"""
@@ -666,12 +767,12 @@ 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"""