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>