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