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>