Return to MPIWGProjects.py CVS log | Up to [Repository] / MPIWGWeb |
1.1 dwinter 1: """This files contains the class MPIWG Projects"""
2: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
3: from Products.PageTemplates.PageTemplate import PageTemplate
4: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
5:
6: import MPIWGStaff
7: import string
8: import re
9:
10: import xmlhelper # Methoden zur Verwaltung der projekt xmls
11: from OFS.SimpleItem import SimpleItem
12: from OFS.Folder import Folder
13:
14: 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']
15:
16: checkFields = ['xdata_01']
17:
18: def sortF(x,y):
19:
20: return cmp(x[1],y[1])
21:
22: class MPIWGRoot(Folder):
23: """Stammordner für den Web-Server"""
24:
25: folders=['MPIWGProject','Folder']
26: meta_type='MPIWGRoot'
27:
28: def __init__(self, id, title):
29: """init"""
30: self.id=id
31: self.title=title
32:
33: def getProjectFields(self,fieldName,folder=None):
34: """getListofFieldNames"""
35: ret=[]
36: #print "FN",fieldName
37: if not folder:
38: folder=self
39: for object in folder.__dict__:
40:
41: obj=getattr(folder,object)
42: if hasattr(obj,'meta_type'):
43:
44: if obj.meta_type=='MPIWGProject':
45:
46: ret.append((obj,obj.getContent(fieldName)))
47: if obj.meta_type in self.folders:
48:
49: ret += self.getProjectFields(fieldName,obj)
50:
51: ret.sort(sortF)
52:
53: return ret
54:
55: manage_options = Folder.manage_options+(
56: {'label':'Import Persons','action':'importNamesForm'},
57: )
58:
59: def importNamesForm(self):
60: """Form"""
61: pt=PageTemplateFile('Products/MPIWGWeb/zpt/MPIWGNamesForm.zpt').__of__(self)
62: return pt()
63:
64: def importNames(self,fileupload,folderName,RESPONSE=None):
65: """import komma-sep list email,lastName,firstName"""
66: project=getattr(self,folderName)
67:
68: for line in fileupload.readlines():
69: print line
70: splitted=line.split(",")
71: if not (splitted[0]==""):
72: newObj=MPIWGStaff.MPIWGStaff(splitted[0],splitted[1],splitted[2])
73: try:
74: project._setObject(splitted[0],newObj)
75: except:
76: print "not done:",splitted[0]
77: if RESPONSE is not None:
78: RESPONSE.redirect('manage_main')
79:
80: def givePersonList(self,name):
81: """check if person is in personfolder and return list of person objects"""
82:
83:
84:
85: splitted=name.split(",") # version nachname, vorname...
86: if len(splitted)>1:
87: lastName=splitted[0]
88: firstName=splitted[1]
89: else:
90: splitted=name.split(" ") #version vorname irgenwas nachnamae
91:
92: lastName=splitted[len(splitted)-1]
93: firstName=string.join(splitted[0:len(splitted)-1])
94:
95: objs=[]
96:
97: print self.members
98: for x in self.members.__dict__:
99: obj=getattr(self.members,x)
100: if hasattr(obj,'lastName') and hasattr(obj,'firstName'):
101:
1.2 ! dwinter 102: if (re.match(".*"+obj.lastName+".*",lastName) or re.match(".*"+lastName+".*",obj.lastName)) and (re.match(".*"+obj.firstName+".*",firstName) or re.match(".*"+firstName+".*",obj.firstName)):
1.1 dwinter 103:
104: objs.append((obj,lastName+", "+firstName))
105:
106: return objs
107:
108:
109: def personCheck(self,names):
110: """all persons for list"""
111: print "names",names
112: splitted=names.split(";")
113: ret={}
114: for name in splitted:
115:
116: if not (name==""):
117: ret[name]=self.givePersonList(name)
118:
119: print "RET",ret
120: return ret
121:
122: def giveCheckList(self,person,fieldname):
123: """return checklist"""
124: #print "GCL",fieldname
125: if fieldname=='xdata_01':
126: x=self.personCheck(person.getContent(fieldname))
127: #print "GCLBACKX",x
128: return x
129:
130:
131: def isCheckField(self,fieldname):
132: """return chechfield"""
133:
134: return (fieldname in checkFields)
135:
136:
137:
138:
139: def manage_addMPIWGRootForm(self):
140: """form for adding the root"""
141: pt=PageTemplateFile('Products/MPIWGWeb/zpt/addMPIWGRootForm.zpt').__of__(self)
142: return pt()
143:
144: def manage_addMPIWGRoot(self,id,title,RESPONSE=None):
145: """add a root folder"""
146: newObj=MPIWGRoot(id,title)
147: self._setObject(id,newObj)
148:
149: if RESPONSE is not None:
150: RESPONSE.redirect('manage_main')
151:
152:
153: class MPIWGProject(Folder):
154: """Class for Projects"""
155:
156: meta_type='MPIWGProject'
157:
158:
159:
160: def generateTemplate(self,RESPONSE=None):
161: """Erzeuge Template für defined fields not_used"""
162:
163: id="index_html"
164: title=id
165: if self._getOb('index_html'):
166: self._delObject('index_html')
167:
168:
169: newObj=ZopePageTemplate(id,'TEXT')
170: self._setObject(id,newObj)
171: #self.manage_addPageTemplate(id,title)
172: if RESPONSE is not None:
173: RESPONSE.redirect('manage_main')
174:
175: def __init__(self, id, argv):
176: """initieriere classe"""
177:
178: self.id=id
179: self.title=id
180: for arg in definedFields:
181:
182: setattr(self,arg,argv[arg])
183: """NP"""
184: manage_options = Folder.manage_options+(
185: {'label':'Load New File','action':'loadNewFileForm'},
186: {'label':'Edit ProjectInfo','action':'editMPIWGProjectForm'},
187: {'label':'Edit BasisInfo','action':'editMPIWGBasisForm'},
188: {'label':'Edit Publications','action':'editMPIWGRelatedPublicationsForm'},
189: )
190:
191: def getDataFields(self):
192: """giveListofDatafields"""
193: ret=[]
194: for x in range(1,14):
195: ret.append('xdata_%02i'%x)
196: return ret
197:
198: def getDefinedFields(self):
199: """show all defined fields"""
200:
201: return definedFields
202:
203: def getAttribute(self,field):
204: """get attrbiute"""
205: return getattr(self,field)
206:
207: def getContent(self,field):
208: """Inhalt des Feldes"""
209:
210: text=u''
211: #print "FIELD",field
212: for x in getattr(self,field):
213: #print "HIHIIII"
214:
215: try:
216: text +=x
217: except:
218: try:
219: text =x
220: except:
221: text="ERROR"
222: #print "TEXT",text
223: return text
224:
225: def show_html(self):
226: """simple index"""
227: #return "HI"
228: pt=PageTemplateFile('Products/MPIWGWeb/zpt/MPIWGProject_index.zpt').__of__(self)
229: return pt()
230:
231: def editMPIWGProjectForm(self):
232: """editform"""
233: pt=PageTemplateFile('Products/MPIWGWeb/zpt/edit_MPIWGProject.zpt').__of__(self)
234: return pt()
235:
236: def editMPIWGBasisForm(self):
237: """editform"""
238: pt=PageTemplateFile('Products/MPIWGWeb/zpt/edit_MPIWGBasis.zpt').__of__(self)
239: return pt()
240: def editMPIWGRelatedPublicationsForm(self):
241: """Edit related Publications"""
242: pt=PageTemplateFile('Products/MPIWGWeb/zpt/edit_MPIWGRelatedPublications.zpt').__of__(self)
243: return pt()
244:
245: def editMPIWGProject(self,RESPONSE=None):
246: """edit the project"""
247:
248: #return self.REQUEST
249: for x in definedFields:
250: if self.REQUEST.has_key(x):
251:
252: setattr(self,x,[self.REQUEST[x]])
253:
254: if RESPONSE is not None:
255: RESPONSE.redirect('manage_main')
256:
257:
258: def loadNewFileForm(self):
259: """Neues XML-File einlesen"""
260: pt=PageTemplateFile('Products/MPIWGWeb/zpt/MPIWGProject_newfile.zpt').__of__(self)
261: return pt()
262:
263: def loadNewFile(self,RESPONSE=None):
264: """einlesen des neuen files"""
265: fileupload=self.REQUEST['fileupload']
266: if fileupload:
267: file_name=fileupload.filename
268: filedata=fileupload.read()
269:
270: argv=xmlhelper.proj2hash(filedata)
271: #print argv.keys()
272: for arg in definedFields:
273:
274: #print arg,argv[arg],getattr(self,arg)
275: try:
276: temp=argv[arg][0:]
277: #old=getattr(self,arg)
278: setattr(self,arg,temp)
279: #print old,getattr(self,arg)
280: except:
281: """nothing"""
282:
283: if RESPONSE is not None:
284: RESPONSE.redirect('manage_main')
285:
286: def manage_addMPIWGProjectForm(self):
287: """form for adding the project"""
288: pt=PageTemplateFile('Products/MPIWGWeb/zpt/addMPIWGProjectForm.zpt').__of__(self)
289: return pt()
290:
291: def manage_addMPIWGProject(self,id,RESPONSE=None):
292: """method to add a project"""
293: #print argv
294: fileupload=self.REQUEST['fileupload']
295: if fileupload:
296: file_name=fileupload.filename
297: filedata=fileupload.read()
298:
299: argv=xmlhelper.proj2hash(filedata)
300:
301: #print argv
302:
303: newObj=MPIWGProject(id,argv)
304:
305: self._setObject(id,newObj)
306:
307:
308: if RESPONSE is not None:
309: RESPONSE.redirect('manage_main')