--- MPIWGWeb/MPIWGProjects.py 2004/05/28 16:45:06 1.8 +++ MPIWGWeb/MPIWGProjects.py 2004/06/28 18:47:14 1.9 @@ -1,4 +1,4 @@ -"""This files contains the class MPIWG Projects +"""This contains the class MPIWG Projects for organizing and maintaining the different projectspages """ @@ -19,10 +19,14 @@ definedFields=['WEB_title','xdata_01','x checkFields = ['xdata_01'] + + def sortF(x,y): + try: + return cmp(x[1],y[1]) + except: + return 0 - return cmp(x[1],y[1]) - def sortI(x,y): xsplit=x[1].split(".") ysplit=y[1].split(".") @@ -49,9 +53,33 @@ def sortI(x,y): class MPIWGRoot(Folder): """Stammordner für den Web-Server""" + fieldLabels={'WEB_title':'WEB_Title','xdata_01':'Responsible Scientists','xdata_02':'Department', + 'xdata_03':'Historical Persons','xdata_04':'Time period', + 'xdata_05':'Sorting number','xdata_06':'Keywords','xdata_07':'Short title', + 'xdata_08':'Other involved scholars' ,'xdata_09':'Part of','xdata_10':'Covered by', + 'xdata_11':'Object Digitallibrary','xdata_12':'Cooperation partners', + 'xdata_13':'Funding institutions','WEB_project_header':'WEB_project_header', + 'WEB_project_description':'WEB_project_description','WEB_related_pub':'WEB_related_pub'} + folders=['MPIWGProject','Folder'] meta_type='MPIWGRoot' + def getValue(self,field): + """Inhalt des Feldes""" + + if type(field)==StringType: + try: + if field[len(field)-1]==";": + field=field[0:len(text)-1] + except: + """nothing""" + + return field.encode('utf-8') + + else: + return field[0].encode('utf-8') + + def sortedNames(self,list): """sort names""" @@ -179,10 +207,42 @@ class MPIWGRoot(Folder): if RESPONSE is not None: RESPONSE.redirect('manage_main') - + def getDisciplineList(self): + """get disciplines as list""" + return self.disciplineList.split("\n") + + def getThemeList(self): + """get themes as list""" + return self.themesList.split("\n") + def test(self): """test""" return self.getProjectsByFieldContent('xdata_09',['biology'])[0].absolute_url + + def getContexts(self,childs=None,parents=None,depth=None): + """childs alle childs, alle parents""" + ret=[] + if parents: + splitted=parents.split(".") + parentId=string.join(splitted[0:len(splitted)-1],".") + + for project in self.getProjectFields('xdata_05',sort='int'): + if project[1]==parentId: + ret.append(project) + + if childs: + for project in self.getProjectFields('xdata_05',sort='int'): + searchStr=childs+"(\..*)" + if re.match(searchStr,project[1]): + + if depth: + print "ho" + if int(depth)>=len(project[1].split("."))-len(childs.split(".")): + + ret.append(project) + else: + ret.append(project) + return ret def getProjectFields(self,fieldName,folder=None,sort=None): """getListofFieldNames""" @@ -232,6 +292,7 @@ class MPIWGRoot(Folder): manage_options = Folder.manage_options+( {'label':'Import Persons','action':'importNamesForm'}, {'label':'Main config','action':'changeMPIWGRootForm'}, + {'label':'Edit Historical Persons','action':'editHistoricalPersonsForm'}, {'label':'Store Historical Persons','action':'storeHistoricalPersons'}, ) @@ -243,16 +304,23 @@ class MPIWGRoot(Folder): def importNames(self,fileupload,folderName,RESPONSE=None): """import komma-sep list email,lastName,firstName""" project=getattr(self,folderName) + load=fileupload.read() - for line in fileupload.readlines(): - #print line + for line in load.split('\r'): + + splitted=line.split(",") + print splitted + if not (splitted[0]==""): newObj=MPIWGStaff.MPIWGStaff(splitted[0],splitted[1],splitted[2]) + try: project._setObject(splitted[0],newObj) + print "done:",splitted[0] except: print "not done:",splitted[0] + if RESPONSE is not None: RESPONSE.redirect('manage_main') @@ -260,13 +328,27 @@ class MPIWGRoot(Folder): """give list of all members""" ret=[] - for x in self.members.objectValues('MPIWGStaff'): + #for x in self.members.objectValues('MPIWGStaff'): #print x.title - ret.append(x.title) + # ret.append(x.title.decode('utf-8')) + + 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 + def printAllMembers(self): + """prin""" + members=self.getAllMembers() + ret="" + for x in members: + ret+="

%s

"%x + return ret + + def makeList(self,entry): """makes a list out of one entry or repeat a list""" if type(entry) is StringType: @@ -285,6 +367,7 @@ class MPIWGRoot(Folder): depth=len(splittedId) nr=idNr title=project[0].WEB_title + returnList.append((depth,nr,title,project[0])) return returnList @@ -355,36 +438,48 @@ class MPIWGRoot(Folder): persons=list.split(";") for person in persons: - 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=='': + 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 ') - try: - proj=self.MembersCatalog({'title':search}) - except: - proj=None - - if proj: - ret.append("%s"%(proj[0].absolute_url,person)) - else: - ret.append("%s"%person) + if not search=='': + + try: + proj=self.MembersCatalog({'title':search}) + except: + proj=None + + if proj: + ret.append("%s"%(proj[0].absolute_url,person)) + else: + ret.append("%s"%person) return string.join(ret,";") def getProjectsOfMembers(self): """give tuple member /projects""" ret=[] members=self.getAllMembers() + #return str(members) for x in members: - splitted=x.split(",") + y=x.encode('utf-8') + splitted=y.split(",") + splitNeu=[] + for s in splitted: + + splitNeu.append("\""+s+"\"") + search=string.join(splitNeu,' AND ') + proj=self.ProjectCatalog({'xdata_01':search}) - proj=self.ProjectCatalog({'xdata_01':string.join(splitted,' AND')}) + print "Search:",search,"Found:",proj if proj: - ret.append((x,proj)) + ret.append((y,proj)) + else: + ret.append((y,None)) return ret def givePersonList(self,name): """check if person is in personfolder and return list of person objects""" @@ -458,6 +553,7 @@ class MPIWGRoot(Folder): return (fieldname in checkFields) + @@ -535,6 +631,7 @@ class MPIWGProject(Folder): {'label':'Edit ProjectInfo','action':'editMPIWGProjectForm'}, {'label':'Edit BasisInfo','action':'editMPIWGBasisForm'}, {'label':'Edit Publications','action':'editMPIWGRelatedPublicationsForm'}, + {'label':'Edit Themes & Disciplines','action':'editMPIWGDisciplinesThemesForm'}, ) def getDataFields(self): @@ -562,14 +659,22 @@ class MPIWGProject(Folder): #print "HIHIIII" try: - text +=x + text +=x.encode('utf-8') except: try: - text =x + text =x.encode('utf-8') except: text="ERROR" - #print "TEXT",text.encode('ascii','ignore') + + #delete separator (;) if is there is one + try: + if text[len(text)-1]==";": + text=text[0:len(text)-1] + except: + """nothing""" + return text + def show_html(self): """simple index""" @@ -582,15 +687,6 @@ class MPIWGProject(Folder): pt=PageTemplateFile('Products/MPIWGWeb/zpt/edit_MPIWGProject.zpt').__of__(self) return pt() - def editMPIWGBasisForm(self): - """editform""" - pt=PageTemplateFile('Products/MPIWGWeb/zpt/edit_MPIWGBasis.zpt').__of__(self) - return pt() - def editMPIWGRelatedPublicationsForm(self): - """Edit related Publications""" - pt=PageTemplateFile('Products/MPIWGWeb/zpt/edit_MPIWGRelatedPublications.zpt').__of__(self) - return pt() - def editMPIWGProject(self,RESPONSE=None): """edit the project""" @@ -598,12 +694,63 @@ class MPIWGProject(Folder): for x in definedFields: if self.REQUEST.has_key(x): - setattr(self,x,[self.REQUEST[x]]) + setattr(self,x,[self.REQUEST[x].decode('utf-8')]) if RESPONSE is not None: RESPONSE.redirect('manage_main') + def editMPIWGDisciplinesThemesForm(self): + """edit the disciplines and themes Form""" + pt=PageTemplateFile('Products/MPIWGWeb/zpt/edit_MPIWGDisciplinesThemes.zpt').__of__(self) + return pt() + + def editMPIWGDisciplinesThemes(self,disciplines=None,themes=None,RESPONSE=None): + """edit disciplin and form""" + if disciplines: + if type(disciplines) is StringType: + self.xdata_09=disciplines + else: + self.xdata_09=string.join(disciplines,";") + else: + self.xdata_09="" + if themes: + if type(themes) is StringType: + self.xdata_10=themes + else: + self.xdata_10=string.join(themes,";") + else: + self.xdata_10="" + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + + + def isChecked(self,wert,list): + """check if wert is in ; seperated list""" + print "W:",wert + print "L:",list,type(list) + #felder sind manchmnal als liste mit einem element definiert + if type(list) is StringType or UnicodeType: + splitted=list.split(";") + else: + splitted=list[0].split(";") + + print splitted + for x in splitted: + if (not x==u'') and x in wert: + return 1 + return 0 + + def editMPIWGBasisForm(self): + """editform""" + pt=PageTemplateFile('Products/MPIWGWeb/zpt/edit_MPIWGBasis.zpt').__of__(self) + return pt() + def editMPIWGRelatedPublicationsForm(self): + """Edit related Publications""" + pt=PageTemplateFile('Products/MPIWGWeb/zpt/edit_MPIWGRelatedPublications.zpt').__of__(self) + return pt() + def loadNewFileForm(self): """Neues XML-File einlesen""" pt=PageTemplateFile('Products/MPIWGWeb/zpt/MPIWGProject_newfile.zpt').__of__(self)