File:  [Repository] / MPIWGWeb / MPIWGProjects.py
Revision 1.3: download - view: text, annotated - select for diffs - revision graph
Mon Feb 9 08:57:27 2004 UTC (20 years, 4 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
new name recognition

    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>