--- MPIWGWeb/MPIWGProjects.py 2004/02/12 16:51:02 1.4 +++ 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'}, ) @@ -88,6 +135,84 @@ class MPIWGRoot(Folder): 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=[] @@ -254,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'}, @@ -301,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): @@ -373,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)