File:  [Repository] / MPIWGWeb / MPIWGProjects.py
Revision 1.4: download - view: text, annotated - select for diffs - revision graph
Thu Feb 12 16:51:02 2004 UTC (20 years, 4 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
prints deleted, bug fixed in name search

    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:                 
  106:                 try:
  107:                     proj=self.MembersCatalog({'title':search})
  108:                 except:
  109:                     proj=None
  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
  128:     def givePersonList(self,name):
  129:         """check if person is in personfolder and return list of person objects"""
  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=[]
  157: 
  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'):
  162:                 
  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)):
  164:                     
  165: ##                     objs.append((obj,lastName+", "+firstName))
  166: 
  167:         
  168:         return objs
  169: 
  170: 
  171:     def personCheck(self,names):
  172:         """all persons for list"""
  173:         #print "names",names
  174:         splitted=names.split(";")
  175:         ret={}
  176:         for name in splitted:
  177: 
  178:             if not (name==""):
  179:                 try:
  180:                     ret[name]=self.givePersonList(name)
  181:                 except:
  182:                     """NOTHIHN"""
  183:         #print "RET",ret
  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))
  191:             #print "GCLBACKX",x
  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: 
  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: 
  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>