--- MPIWGWeb/MPIWGProjects.py 2004/02/04 10:03:33 1.1 +++ MPIWGWeb/MPIWGProjects.py 2004/03/10 09:17:31 1.5 @@ -6,6 +6,7 @@ from Products.PageTemplates.ZopePageTemp import MPIWGStaff import string import re +from types import * import xmlhelper # Methoden zur Verwaltung der projekt xmls from OFS.SimpleItem import SimpleItem @@ -16,9 +17,32 @@ definedFields=['WEB_title','xdata_01','x checkFields = ['xdata_01'] def sortF(x,y): - + return cmp(x[1],y[1]) +def sortI(x,y): + xsplit=x[1].split(".") + ysplit=y[1].split(".") + xret="" + yret="" + try: + for i in range(5): + try: + yret=yret+"%04i"%int(xsplit[i]) + except: + yret=yret+"%04i"%0 + + try: + xret=xret+"%04i"%int(ysplit[i]) + except: + xret=xret+"%04i"%0 + + + return cmp(int(yret),int(xret)) + except: + return cmp(x[1],y[1]) + + class MPIWGRoot(Folder): """Stammordner für den Web-Server""" @@ -30,7 +54,7 @@ class MPIWGRoot(Folder): self.id=id self.title=title - def getProjectFields(self,fieldName,folder=None): + def getProjectFields(self,fieldName,folder=None,sort=None): """getListofFieldNames""" ret=[] #print "FN",fieldName @@ -40,18 +64,41 @@ class MPIWGRoot(Folder): obj=getattr(folder,object) if hasattr(obj,'meta_type'): - + #print obj.meta_type if obj.meta_type=='MPIWGProject': + if fieldName=="WEB_title_or_short": + #print "HI!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + #print len(obj.getContent('xdata_07')) + if len(obj.getContent('xdata_07'))<3: # hack weil z.Z. manchmal noch ein Trennzeichen ; oder , im Feld statt leer + fieldNameTmp="WEB_title" + else: + fieldNameTmp="xdata_07" + else: + fieldNameTmp=fieldName - ret.append((obj,obj.getContent(fieldName))) + ret.append((obj,obj.getContent(fieldNameTmp))) + if obj.meta_type in self.folders: ret += self.getProjectFields(fieldName,obj) - - ret.sort(sortF) + + if sort=="int": + ret.sort(sortI) + else: + ret.sort(sortF) return ret + def showNewProjects(self): + projects=[] + for objs in self.getProjectFields('WEB_title_or_short'): # Get all Projets + if objs[0].xdata_05[0] == "": + + projects.append(objs) + + return projects + + manage_options = Folder.manage_options+( {'label':'Import Persons','action':'importNamesForm'}, ) @@ -66,7 +113,7 @@ class MPIWGRoot(Folder): project=getattr(self,folderName) for line in fileupload.readlines(): - print line + #print line splitted=line.split(",") if not (splitted[0]==""): newObj=MPIWGStaff.MPIWGStaff(splitted[0],splitted[1],splitted[2]) @@ -77,46 +124,188 @@ class MPIWGRoot(Folder): if RESPONSE is not None: RESPONSE.redirect('manage_main') + def getAllMembers(self): + """give list of all members""" + ret=[] + + for x in self.members.objectValues('MPIWGStaff'): + #print x.title + ret.append(x.title) + + ret.sort() + return ret + + def makeList(self,entry): + """makes a list out of one entry or repeat a list""" + if type(entry) is StringType: + return [entry] + else: + return entry + + + def getTree(self): + """generate Tree from project list""" + returnList=[] + for project in self.getProjectFields('xdata_05',sort="int"): # get Projects sorted by xdata_05 + for idNr in project[1].split(";"): # more than one number + if not idNr=="": + splittedId=idNr.split(".") + depth=len(splittedId) + nr=idNr + title=project[0].WEB_title + returnList.append((depth,nr,title,project[0])) + + return returnList + + def changePosition(self,treeId,select,RESPONSE=None): + """Change Postion Entry""" + numbers=[] + + # Suche hoechste bisherige nummer + projects=self.getProjectFields('xdata_05') # get Projects sorted by xdata_05 + for project in projects: #suche alle subtrees der treeId + #print treeId + + founds=re.match(treeId+"\.(.*)",project[1].split(";")[0]) + if founds: + #print "x",founds.group(0),len(founds.group(0).split(".")) + if len(founds.group(0).split("."))==len(treeId.split("."))+1: # nur ein punkt mehr, d.h. untere ebene + try: + numbers.append(int(founds.group(0).split(".")[len(founds.group(0).split("."))-1])) + except: + numbers.append(0) + numbers.sort() + highest=int(numbers[len(numbers)-1]) + projects=self.showNewProjects() + for i in self.makeList(select): + highest+=10 + projects[int(i)][0].xdata_05=treeId+"."+str(highest) + + + if RESPONSE is not None: + RESPONSE.redirect('showTree') + + def changeTree(self,RESPONSE=None): + """change the complete tree""" + form=self.REQUEST.form + hashList={} + fields=self.getTree() + + + for idNr in form.keys(): + fields[int(idNr)][3].xdata_05=form[idNr] + + + + if RESPONSE is not None: + RESPONSE.redirect('showTree') + + def getProjectWithId(self,id): + fields=self.getProjectFields('xdata_05') + for field in fields: + if field[1]==id: + return field[0] + + return None + + + + + + + def getUrlFromPerson(self,list): + """get urls to person list""" + ret=[] + 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=='': + + 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() + for x in members: + splitted=x.split(",") + + proj=self.ProjectCatalog({'xdata_01':string.join(splitted,' AND')}) + if proj: + ret.append((x,proj)) + return ret def givePersonList(self,name): """check if person is in personfolder and return list of person objects""" - - + + splitted=name.split(",") + if len(splitted)==1: + splitted=name.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=='': + proj=self.MembersCatalog({'title':search}) + + if proj: + return [[x.lastName,x.firstName] for x in proj] + else: + return [] - splitted=name.split(",") # version nachname, vorname... - if len(splitted)>1: - lastName=splitted[0] - firstName=splitted[1] - else: - splitted=name.split(" ") #version vorname irgenwas nachnamae - - lastName=splitted[len(splitted)-1] - firstName=string.join(splitted[0:len(splitted)-1]) - - objs=[] - - print self.members - for x in self.members.__dict__: - obj=getattr(self.members,x) - if hasattr(obj,'lastName') and hasattr(obj,'firstName'): +## splitted=name.split(",") # version nachname, vorname... +## if len(splitted)>1: +## lastName=splitted[0] +## firstName=splitted[1] +## else: +## splitted=name.split(" ") #version vorname irgenwas nachnamae + +## lastName=splitted[len(splitted)-1] +## firstName=string.join(splitted[0:len(splitted)-1]) + +## objs=[] + + #print self.members + ## for x in self.members.__dict__: +## obj=getattr(self.members,x) +## if hasattr(obj,'lastName') and hasattr(obj,'firstName'): - if (re.match(".*"+obj.lastName+".*",lastName) or re.match(".*"+lastName+".*",obj.lastName)) and (re.match(obj.firstName+".*",firstName) or re.match(firstName+".*",obj.firstName)): +## if (re.match(".*"+obj.lastName+".*",lastName) or re.match(".*"+lastName+".*",obj.lastName)) and (re.match(".*"+obj.firstName+".*",firstName) or re.match(".*"+firstName+".*",obj.firstName)): - objs.append((obj,lastName+", "+firstName)) +## objs.append((obj,lastName+", "+firstName)) + return objs def personCheck(self,names): """all persons for list""" - print "names",names + #print "names",names splitted=names.split(";") ret={} for name in splitted: if not (name==""): - ret[name]=self.givePersonList(name) - - print "RET",ret + try: + ret[name]=self.givePersonList(name) + except: + """NOTHIHN""" + #print "RET",ret return ret def giveCheckList(self,person,fieldname): @@ -155,7 +344,25 @@ class MPIWGProject(Folder): meta_type='MPIWGProject' - + def crossLinker(self): + """experimental crosslinker""" + splitted=self.WEB_project_description[0].split() + new=[] + for split in splitted: + try: + found=self.DescriptionCatalog({'fulltext':split}) + + if len(found)>1: + + new.append("%s"%(split,split)) + else: + new.append(split) + except: + new.append(split) + return string.join(new) + + + def generateTemplate(self,RESPONSE=None): """Erzeuge Template für defined fields not_used""" @@ -172,15 +379,18 @@ class MPIWGProject(Folder): if RESPONSE is not None: RESPONSE.redirect('manage_main') - def __init__(self, id, argv): + def __init__(self, id, argv=None): """initieriere classe""" self.id=id self.title=id - for arg in definedFields: + if argv: + for arg in definedFields: + setattr(self,arg,argv[arg]) + else: + for arg in definedFields: + setattr(self,arg,'') - setattr(self,arg,argv[arg]) - """NP""" manage_options = Folder.manage_options+( {'label':'Load New File','action':'loadNewFileForm'}, {'label':'Edit ProjectInfo','action':'editMPIWGProjectForm'}, @@ -219,7 +429,7 @@ class MPIWGProject(Folder): text =x except: text="ERROR" - #print "TEXT",text + #print "TEXT",text.encode('ascii','ignore') return text def show_html(self): @@ -291,16 +501,18 @@ def manage_addMPIWGProjectForm(self): def manage_addMPIWGProject(self,id,RESPONSE=None): """method to add a project""" #print argv - fileupload=self.REQUEST['fileupload'] - if fileupload: - file_name=fileupload.filename - filedata=fileupload.read() - - argv=xmlhelper.proj2hash(filedata) + if self.REQUEST.has_key('fileupload'): + fileupload=self.REQUEST['fileupload'] + if fileupload: + file_name=fileupload.filename + filedata=fileupload.read() - #print argv + argv=xmlhelper.proj2hash(filedata) - newObj=MPIWGProject(id,argv) + #print argv + newObj=MPIWGProject(id,argv) + else: + newObj=MPIWGProject(id) self._setObject(id,newObj)