Annotation of MPIWGWeb/MPIWGProjects.py, revision 1.3
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:
1.3 ! dwinter 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
1.1 dwinter 125: def givePersonList(self,name):
126: """check if person is in personfolder and return list of person objects"""
1.3 ! dwinter 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=[]
1.1 dwinter 154:
1.3 ! dwinter 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'):
1.1 dwinter 159:
1.3 ! dwinter 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)):
1.1 dwinter 161:
1.3 ! dwinter 162: ## objs.append((obj,lastName+", "+firstName))
1.1 dwinter 163:
1.3 ! dwinter 164:
1.1 dwinter 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==""):
1.3 ! dwinter 176: try:
! 177: ret[name]=self.givePersonList(name)
! 178: except:
! 179: """NOTHIHN"""
1.1 dwinter 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))
1.3 ! dwinter 188: print "GCLBACKX",x
1.1 dwinter 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:
1.3 ! dwinter 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:
1.1 dwinter 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>