"""This files contains the class MPIWG Projects""" from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Products.PageTemplates.PageTemplate import PageTemplate from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate import MPIWGStaff import string import re import xmlhelper # Methoden zur Verwaltung der projekt xmls from OFS.SimpleItem import SimpleItem from OFS.Folder import Folder 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'] def sortF(x,y): return cmp(x[1],y[1]) class MPIWGRoot(Folder): """Stammordner für den Web-Server""" folders=['MPIWGProject','Folder'] meta_type='MPIWGRoot' def __init__(self, id, title): """init""" self.id=id self.title=title def getProjectFields(self,fieldName,folder=None): """getListofFieldNames""" ret=[] #print "FN",fieldName if not folder: folder=self for object in folder.__dict__: obj=getattr(folder,object) if hasattr(obj,'meta_type'): if obj.meta_type=='MPIWGProject': ret.append((obj,obj.getContent(fieldName))) if obj.meta_type in self.folders: ret += self.getProjectFields(fieldName,obj) ret.sort(sortF) return ret manage_options = Folder.manage_options+( {'label':'Import Persons','action':'importNamesForm'}, ) def importNamesForm(self): """Form""" pt=PageTemplateFile('Products/MPIWGWeb/zpt/MPIWGNamesForm.zpt').__of__(self) return pt() def importNames(self,fileupload,folderName,RESPONSE=None): """import komma-sep list email,lastName,firstName""" project=getattr(self,folderName) for line in fileupload.readlines(): print line splitted=line.split(",") if not (splitted[0]==""): newObj=MPIWGStaff.MPIWGStaff(splitted[0],splitted[1],splitted[2]) try: project._setObject(splitted[0],newObj) except: print "not done:",splitted[0] if RESPONSE is not None: RESPONSE.redirect('manage_main') def givePersonList(self,name): """check if person is in personfolder and return list of person objects""" 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)): objs.append((obj,lastName+", "+firstName)) return objs def personCheck(self,names): """all persons for list""" print "names",names splitted=names.split(";") ret={} for name in splitted: if not (name==""): ret[name]=self.givePersonList(name) print "RET",ret return ret def giveCheckList(self,person,fieldname): """return checklist""" #print "GCL",fieldname if fieldname=='xdata_01': x=self.personCheck(person.getContent(fieldname)) #print "GCLBACKX",x return x def isCheckField(self,fieldname): """return chechfield""" return (fieldname in checkFields) def manage_addMPIWGRootForm(self): """form for adding the root""" pt=PageTemplateFile('Products/MPIWGWeb/zpt/addMPIWGRootForm.zpt').__of__(self) return pt() def manage_addMPIWGRoot(self,id,title,RESPONSE=None): """add a root folder""" newObj=MPIWGRoot(id,title) self._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main') class MPIWGProject(Folder): """Class for Projects""" meta_type='MPIWGProject' def generateTemplate(self,RESPONSE=None): """Erzeuge Template für defined fields not_used""" id="index_html" title=id if self._getOb('index_html'): self._delObject('index_html') newObj=ZopePageTemplate(id,'TEXT') self._setObject(id,newObj) #self.manage_addPageTemplate(id,title) if RESPONSE is not None: RESPONSE.redirect('manage_main') def __init__(self, id, argv): """initieriere classe""" self.id=id self.title=id for arg in definedFields: setattr(self,arg,argv[arg]) """NP""" manage_options = Folder.manage_options+( {'label':'Load New File','action':'loadNewFileForm'}, {'label':'Edit ProjectInfo','action':'editMPIWGProjectForm'}, {'label':'Edit BasisInfo','action':'editMPIWGBasisForm'}, {'label':'Edit Publications','action':'editMPIWGRelatedPublicationsForm'}, ) def getDataFields(self): """giveListofDatafields""" ret=[] for x in range(1,14): ret.append('xdata_%02i'%x) return ret def getDefinedFields(self): """show all defined fields""" return definedFields def getAttribute(self,field): """get attrbiute""" return getattr(self,field) def getContent(self,field): """Inhalt des Feldes""" text=u'' #print "FIELD",field for x in getattr(self,field): #print "HIHIIII" try: text +=x except: try: text =x except: text="ERROR" #print "TEXT",text return text def show_html(self): """simple index""" #return "HI" pt=PageTemplateFile('Products/MPIWGWeb/zpt/MPIWGProject_index.zpt').__of__(self) return pt() def editMPIWGProjectForm(self): """editform""" 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""" #return self.REQUEST for x in definedFields: if self.REQUEST.has_key(x): setattr(self,x,[self.REQUEST[x]]) if RESPONSE is not None: RESPONSE.redirect('manage_main') def loadNewFileForm(self): """Neues XML-File einlesen""" pt=PageTemplateFile('Products/MPIWGWeb/zpt/MPIWGProject_newfile.zpt').__of__(self) return pt() def loadNewFile(self,RESPONSE=None): """einlesen des neuen files""" fileupload=self.REQUEST['fileupload'] if fileupload: file_name=fileupload.filename filedata=fileupload.read() argv=xmlhelper.proj2hash(filedata) #print argv.keys() for arg in definedFields: #print arg,argv[arg],getattr(self,arg) try: temp=argv[arg][0:] #old=getattr(self,arg) setattr(self,arg,temp) #print old,getattr(self,arg) except: """nothing""" if RESPONSE is not None: RESPONSE.redirect('manage_main') def manage_addMPIWGProjectForm(self): """form for adding the project""" pt=PageTemplateFile('Products/MPIWGWeb/zpt/addMPIWGProjectForm.zpt').__of__(self) return pt() 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) #print argv newObj=MPIWGProject(id,argv) self._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main')