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 getAllMembers(self):
81: """give list of all members"""
82: ret=[]
83:
84: for x in self.members.objectValues('MPIWGStaff'):
85: print x.title
86: ret.append(x.title)
87:
88: ret.sort()
89: return ret
90:
91: def getUrlFromPerson(self,list):
92: """get urls to person list"""
93: ret=[]
94: persons=list.split(";")
95: for person in persons:
96:
97: splitted=person.split(",")
98: if len(splitted)==1:
99: splitted=person.split(" ")
100: splittedNew=[re.sub(r'\s(.*)','$1',split) for split in splitted]
101: if splittedNew[0]=='':
102: del splittedNew[0]
103: search=string.join(splittedNew,' AND ')
104: if not search=='':
105: proj=self.MembersCatalog({'title':search})
106: print search,"PER",person,splittedNew,proj
107:
108: if proj:
109: ret.append("<a href=%s >%s</a>"%(proj[0].absolute_url,person))
110: else:
111: ret.append("%s"%person)
112: return string.join(ret,";")
113:
114: def getProjectsOfMembers(self):
115: """give tuple member /projects"""
116: ret=[]
117: members=self.getAllMembers()
118: for x in members:
119: splitted=x.split(",")
120:
121: proj=self.ProjectCatalog({'xdata_01':string.join(splitted,' AND')})
122: if proj:
123: ret.append((x,proj))
124: return ret
125: def givePersonList(self,name):
126: """check if person is in personfolder and return list of person objects"""
127:
128: splitted=name.split(",")
129: if len(splitted)==1:
130: splitted=name.split(" ")
131: splittedNew=[re.sub(r'\s(.*)','$1',split) for split in splitted]
132: if splittedNew[0]=='':
133: del splittedNew[0]
134: search=string.join(splittedNew,' AND ')
135: if not search=='':
136: proj=self.MembersCatalog({'title':search})
137:
138: if proj:
139: return [[x.lastName,x.firstName] for x in proj]
140: else:
141: return []
142:
143: ## splitted=name.split(",") # version nachname, vorname...
144: ## if len(splitted)>1:
145: ## lastName=splitted[0]
146: ## firstName=splitted[1]
147: ## else:
148: ## splitted=name.split(" ") #version vorname irgenwas nachnamae
149:
150: ## lastName=splitted[len(splitted)-1]
151: ## firstName=string.join(splitted[0:len(splitted)-1])
152:
153: ## objs=[]
154:
155: #print self.members
156: ## for x in self.members.__dict__:
157: ## obj=getattr(self.members,x)
158: ## if hasattr(obj,'lastName') and hasattr(obj,'firstName'):
159:
160: ## if (re.match(".*"+obj.lastName+".*",lastName) or re.match(".*"+lastName+".*",obj.lastName)) and (re.match(".*"+obj.firstName+".*",firstName) or re.match(".*"+firstName+".*",obj.firstName)):
161:
162: ## objs.append((obj,lastName+", "+firstName))
163:
164:
165: return objs
166:
167:
168: def personCheck(self,names):
169: """all persons for list"""
170: print "names",names
171: splitted=names.split(";")
172: ret={}
173: for name in splitted:
174:
175: if not (name==""):
176: try:
177: ret[name]=self.givePersonList(name)
178: except:
179: """NOTHIHN"""
180: print "RET",ret
181: return ret
182:
183: def giveCheckList(self,person,fieldname):
184: """return checklist"""
185: #print "GCL",fieldname
186: if fieldname=='xdata_01':
187: x=self.personCheck(person.getContent(fieldname))
188: print "GCLBACKX",x
189: return x
190:
191:
192: def isCheckField(self,fieldname):
193: """return chechfield"""
194:
195: return (fieldname in checkFields)
196:
197:
198:
199:
200: def manage_addMPIWGRootForm(self):
201: """form for adding the root"""
202: pt=PageTemplateFile('Products/MPIWGWeb/zpt/addMPIWGRootForm.zpt').__of__(self)
203: return pt()
204:
205: def manage_addMPIWGRoot(self,id,title,RESPONSE=None):
206: """add a root folder"""
207: newObj=MPIWGRoot(id,title)
208: self._setObject(id,newObj)
209:
210: if RESPONSE is not None:
211: RESPONSE.redirect('manage_main')
212:
213:
214: class MPIWGProject(Folder):
215: """Class for Projects"""
216:
217: meta_type='MPIWGProject'
218:
219: def crossLinker(self):
220: """experimental crosslinker"""
221: splitted=self.WEB_project_description[0].split()
222: new=[]
223: for split in splitted:
224: try:
225: found=self.DescriptionCatalog({'fulltext':split})
226:
227: if len(found)>1:
228:
229: new.append("<a href=%s>%s</a>"%(split,split))
230: else:
231: new.append(split)
232: except:
233: new.append(split)
234: return string.join(new)
235:
236:
237:
238:
239: def generateTemplate(self,RESPONSE=None):
240: """Erzeuge Template für defined fields not_used"""
241:
242: id="index_html"
243: title=id
244: if self._getOb('index_html'):
245: self._delObject('index_html')
246:
247:
248: newObj=ZopePageTemplate(id,'TEXT')
249: self._setObject(id,newObj)
250: #self.manage_addPageTemplate(id,title)
251: if RESPONSE is not None:
252: RESPONSE.redirect('manage_main')
253:
254: def __init__(self, id, argv):
255: """initieriere classe"""
256:
257: self.id=id
258: self.title=id
259: for arg in definedFields:
260:
261: setattr(self,arg,argv[arg])
262: """NP"""
263: manage_options = Folder.manage_options+(
264: {'label':'Load New File','action':'loadNewFileForm'},
265: {'label':'Edit ProjectInfo','action':'editMPIWGProjectForm'},
266: {'label':'Edit BasisInfo','action':'editMPIWGBasisForm'},
267: {'label':'Edit Publications','action':'editMPIWGRelatedPublicationsForm'},
268: )
269:
270: def getDataFields(self):
271: """giveListofDatafields"""
272: ret=[]
273: for x in range(1,14):
274: ret.append('xdata_%02i'%x)
275: return ret
276:
277: def getDefinedFields(self):
278: """show all defined fields"""
279:
280: return definedFields
281:
282: def getAttribute(self,field):
283: """get attrbiute"""
284: return getattr(self,field)
285:
286: def getContent(self,field):
287: """Inhalt des Feldes"""
288:
289: text=u''
290: #print "FIELD",field
291: for x in getattr(self,field):
292: #print "HIHIIII"
293:
294: try:
295: text +=x
296: except:
297: try:
298: text =x
299: except:
300: text="ERROR"
301: #print "TEXT",text
302: return text
303:
304: def show_html(self):
305: """simple index"""
306: #return "HI"
307: pt=PageTemplateFile('Products/MPIWGWeb/zpt/MPIWGProject_index.zpt').__of__(self)
308: return pt()
309:
310: def editMPIWGProjectForm(self):
311: """editform"""
312: pt=PageTemplateFile('Products/MPIWGWeb/zpt/edit_MPIWGProject.zpt').__of__(self)
313: return pt()
314:
315: def editMPIWGBasisForm(self):
316: """editform"""
317: pt=PageTemplateFile('Products/MPIWGWeb/zpt/edit_MPIWGBasis.zpt').__of__(self)
318: return pt()
319: def editMPIWGRelatedPublicationsForm(self):
320: """Edit related Publications"""
321: pt=PageTemplateFile('Products/MPIWGWeb/zpt/edit_MPIWGRelatedPublications.zpt').__of__(self)
322: return pt()
323:
324: def editMPIWGProject(self,RESPONSE=None):
325: """edit the project"""
326:
327: #return self.REQUEST
328: for x in definedFields:
329: if self.REQUEST.has_key(x):
330:
331: setattr(self,x,[self.REQUEST[x]])
332:
333: if RESPONSE is not None:
334: RESPONSE.redirect('manage_main')
335:
336:
337: def loadNewFileForm(self):
338: """Neues XML-File einlesen"""
339: pt=PageTemplateFile('Products/MPIWGWeb/zpt/MPIWGProject_newfile.zpt').__of__(self)
340: return pt()
341:
342: def loadNewFile(self,RESPONSE=None):
343: """einlesen des neuen files"""
344: fileupload=self.REQUEST['fileupload']
345: if fileupload:
346: file_name=fileupload.filename
347: filedata=fileupload.read()
348:
349: argv=xmlhelper.proj2hash(filedata)
350: #print argv.keys()
351: for arg in definedFields:
352:
353: #print arg,argv[arg],getattr(self,arg)
354: try:
355: temp=argv[arg][0:]
356: #old=getattr(self,arg)
357: setattr(self,arg,temp)
358: #print old,getattr(self,arg)
359: except:
360: """nothing"""
361:
362: if RESPONSE is not None:
363: RESPONSE.redirect('manage_main')
364:
365: def manage_addMPIWGProjectForm(self):
366: """form for adding the project"""
367: pt=PageTemplateFile('Products/MPIWGWeb/zpt/addMPIWGProjectForm.zpt').__of__(self)
368: return pt()
369:
370: def manage_addMPIWGProject(self,id,RESPONSE=None):
371: """method to add a project"""
372: #print argv
373: fileupload=self.REQUEST['fileupload']
374: if fileupload:
375: file_name=fileupload.filename
376: filedata=fileupload.read()
377:
378: argv=xmlhelper.proj2hash(filedata)
379:
380: #print argv
381:
382: newObj=MPIWGProject(id,argv)
383:
384: self._setObject(id,newObj)
385:
386:
387: if RESPONSE is not None:
388: RESPONSE.redirect('manage_main')
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>