--- MPIWGWeb/MPIWGProjects.py 2004/02/09 08:57:27 1.3 +++ 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]) @@ -82,12 +129,90 @@ class MPIWGRoot(Folder): ret=[] for x in self.members.objectValues('MPIWGStaff'): - print x.title + #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=[] @@ -102,8 +227,11 @@ class MPIWGRoot(Folder): del splittedNew[0] search=string.join(splittedNew,' AND ') if not search=='': - proj=self.MembersCatalog({'title':search}) - print search,"PER",person,splittedNew,proj + + try: + proj=self.MembersCatalog({'title':search}) + except: + proj=None if proj: ret.append("%s"%(proj[0].absolute_url,person)) @@ -167,7 +295,7 @@ class MPIWGRoot(Folder): def personCheck(self,names): """all persons for list""" - print "names",names + #print "names",names splitted=names.split(";") ret={} for name in splitted: @@ -177,7 +305,7 @@ class MPIWGRoot(Folder): ret[name]=self.givePersonList(name) except: """NOTHIHN""" - print "RET",ret + #print "RET",ret return ret def giveCheckList(self,person,fieldname): @@ -185,7 +313,7 @@ class MPIWGRoot(Folder): #print "GCL",fieldname if fieldname=='xdata_01': x=self.personCheck(person.getContent(fieldname)) - print "GCLBACKX",x + #print "GCLBACKX",x return x @@ -251,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'}, @@ -298,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): @@ -370,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)