File:  [Repository] / MPIWGWeb / MPIWGProjects.py
Revision 1.33: download - view: text, annotated - select for diffs - revision graph
Fri Oct 1 12:08:49 2004 UTC (19 years, 8 months ago) by casties
Branches: MAIN
CVS tags: HEAD
changed index_html to use project_main as a template!

    1: """This contains the class MPIWG Projects
    2: for organizing and maintaining the different projectspages
    3: 
    4: """
    5: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
    6: from Products.PageTemplates.PageTemplate import PageTemplate
    7: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
    8: from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder
    9: 
   10: import urllib
   11: import MPIWGStaff
   12: import string
   13: import re
   14: from types import *
   15: 
   16: import xmlhelper # Methoden zur Verwaltung der projekt xmls
   17: from OFS.SimpleItem import SimpleItem
   18: from OFS.Folder import Folder
   19: 
   20: from bibliography import *
   21: 
   22: 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']
   23: 
   24: checkFields = ['xdata_01']
   25: 
   26: 
   27: 
   28: def sortF(x,y):
   29:     try:
   30:         return cmp(x[1],y[1])
   31:     except:
   32:         try:
   33:             return cmp(str(x[1]),str(y[1]))
   34:         except:           
   35:             print "error",x[1],y[1]
   36:             return 0 
   37:     
   38: def sortI(x,y):
   39:     xsplit=x[1].split(".")
   40:     ysplit=y[1].split(".")
   41:     xret=""
   42:     yret=""
   43:     try:
   44:         for i in range(5):
   45:             try:
   46:                 yret=yret+"%04i"%int(xsplit[i])
   47:             except:
   48:                 yret=yret+"%04i"%0
   49: 
   50:             try:
   51:                 xret=xret+"%04i"%int(ysplit[i])
   52:             except:
   53:                 xret=xret+"%04i"%0
   54:                 
   55:         
   56:         return cmp(int(yret),int(xret))
   57:     except:
   58:         return cmp(x[1],y[1])
   59: 
   60:     
   61: class MPIWGRoot(ZSQLExtendFolder):
   62:     """Stammordner für den Web-Server"""
   63: 
   64:     fieldLabels={'WEB_title':'WEB_Title','xdata_01':'Responsible Scientists','xdata_02':'Department',
   65:              'xdata_03':'Historical Persons','xdata_04':'Time period',
   66:              'xdata_05':'Sorting number','xdata_06':'Keywords','xdata_07':'Short title',
   67:              'xdata_08':'Other involved scholars' ,'xdata_09':'Part of','xdata_10':'Covered by',
   68:              'xdata_11':'Object Digitallibrary','xdata_12':'Cooperation partners',
   69:              'xdata_13':'Funding institutions','WEB_project_header':'WEB_project_header',
   70:              'WEB_project_description':'WEB_project_description','WEB_related_pub':'WEB_related_pub'}
   71:     
   72:     folders=['MPIWGProject','Folder']
   73:     meta_type='MPIWGRoot'
   74: 
   75:     def patchProjects(self,RESPONSE):
   76:         """patch"""
   77:         projects=self.ZopeFind(self.projects,obj_metatypes=['MPIWGProject'])
   78:         for project in projects:
   79: 		tmp=project[1].WEB_project_description[0].replace("/CD/projects/","")[0:]
   80:             	setattr(project[1],'WEB_project_description',[tmp[0:]])
   81:             	RESPONSE.write("<p>%s</p>\n"%project[0])
   82:             
   83:     def replaceNotEmpty(self,format,field):
   84:         """replace not empty"""
   85:         if field and (not field==''):
   86:             return format%field
   87:         else:
   88:             return ""
   89:         
   90: 
   91:     def redirectIndex_html(self,request):
   92:         #return request['URL1']+'/index_html'
   93:         
   94:         return urllib.urlopen(request['URL1']+'/index_html').read()
   95: 
   96:     
   97:     def formatBibliography(self,here,found):
   98:         """format"""
   99:         return formatBibliography(here,found)
  100:     
  101:     def getValue(self,fieldStr):
  102:         """Inhalt des Feldes"""
  103:         
  104:         if type(fieldStr)==StringType:
  105:             field=fieldStr
  106:         else:
  107:             field=fieldStr[0]
  108:         try:
  109:             if field[len(field)-1]==";":
  110:                 field=field[0:len(field)-1]
  111:         except:
  112: 
  113:             """nothing"""
  114:         field=re.sub(r';([^\s])','; \g<1>',field)
  115:         return field.encode('utf-8')
  116: 
  117: 
  118:     
  119:     def sortedNames(self,list):
  120:         """sort names"""
  121: 
  122:         def sortLastName(x_c,y_c):
  123:             try:
  124:                 x=urllib.unquote(x_c).encode('utf-8','ignore')
  125:             except:
  126:                 x=urllib.unquote(x_c)
  127: 
  128:             try:
  129:                 y=urllib.unquote(y_c).encode('utf-8','ignore')
  130:             except:
  131:                 x=urllib.unquote(y_c)
  132:                 
  133: 
  134:             
  135:             try:
  136:                 last_x=x.split()[len(x.split())-1]
  137:                 last_y=y.split()[len(y.split())-1]
  138: 
  139:             except:
  140: 
  141:                 last_x=""
  142:                 last_y=""
  143:             
  144:             
  145:             
  146:             if last_x<last_y:
  147:                 return 1
  148:             elif last_x>last_y:
  149:                 return -1
  150:             else:
  151:                 return 0
  152:             
  153:         list.sort(sortLastName)
  154:         list.reverse()
  155:         
  156:         return list
  157:     
  158:     def __init__(self, id, title):
  159:         """init"""
  160:         self.id=id
  161:         self.title=title
  162: 
  163:     def urlQuote(self,str):
  164:         """quote"""
  165:         return urllib.quote(str)
  166: 
  167:     def urlUnQuote(self,str):
  168:         """quote"""
  169:         return urllib.unquote(str)
  170:     
  171:     def harvestHistoricalPersons(self):
  172:         """erstelle liste aller erwaehnten actors"""
  173: 
  174:         def normalize(str):
  175:             """loesche fuhrendes space"""
  176:             if (len(str)>1) and (str[0]==" "):
  177:                 ret=str[1:]
  178:             else:
  179:                 ret=str
  180:             return ret
  181:         
  182:         list={}
  183:         projects=self.ZopeFind(self.projects,obj_metatypes=['MPIWGProject'])
  184:         
  185:         for project in projects:
  186:             lg=len(project[1].xdata_03[0])-1
  187: 
  188:             if (lg>1) and (project[1].xdata_03[0][lg]==";"):
  189:                 project[1].xdata_03[0]=project[1].xdata_03[0][0:lg]
  190: 
  191:           
  192:      
  193:                 
  194:             try:
  195:                 if len(project[1].xdata_03[0].split(";"))>1: # guess if separator is ;
  196:                     for person in project[1].xdata_03[0].split(";"):
  197:                         personNormal=normalize(person)
  198:                         if personNormal in list.keys():
  199:                             list[urllib.quote(personNormal)][1].append(project[1])
  200:                         else:
  201:                             list[urllib.quote(personNormal)]=(personNormal,[project[1]])
  202:                 else: #guess , is sepeator
  203:                     for person in project[1].xdata_03[0].split(","):
  204:                         personNormal=normalize(person)
  205:                         if urllib.quote(personNormal) in list.keys():
  206:                             list[urllib.quote(personNormal)][1].append(project[1])
  207:                         else:
  208:                             list[urllib.quote(personNormal)]=(personNormal,[project[1]])
  209: 
  210:             except:
  211:                 print "ERROR",project
  212:                 
  213:         return list
  214: 
  215:     def storeHistoricalPersons(self,RESPONSE=None):
  216:         """store persons"""
  217:         self.personDict={}
  218:         personDict=self.harvestHistoricalPersons()
  219:         for person in personDict.keys():
  220:             for project in personDict[person][1]:
  221:                 if person in self.personDict.keys():
  222:                     self.personDict[person][1].append((project.absolute_url(),project.WEB_title[0],project.xdata_01[0]))
  223:                 else:
  224:                     self.personDict[person]=(personDict[person][0],[(project.absolute_url(),project.WEB_title[0],project.xdata_01[0])])
  225: 
  226:         if RESPONSE is not None:
  227:             RESPONSE.redirect("showHistoricalPersons")
  228:             
  229: 
  230:     def getPersonDict(self,name):
  231:         """name von dict"""
  232: 
  233:         try:
  234:             return self.personDict[name][0].encode('utf-8')
  235:         except:
  236:             return self.personDict[name][0]
  237:             return self.personDict[name][0].decode('latin-1').encode('utf-8')
  238:         
  239: 
  240:     def showHistoricalPersons(self):
  241:         """show persons"""
  242:         pt=PageTemplateFile('Products/MPIWGWeb/zpt/showHistoricalPersons').__of__(self)
  243:         return pt()
  244: 
  245:         
  246:     def editHistoricalPersonsForm(self):
  247:         """edit historical persons for consistency"""
  248:         pt=PageTemplateFile('Products/MPIWGWeb/zpt/editHistoricalPersonsForm').__of__(self)
  249:         return pt()
  250: 
  251:     def getProjectsByFieldContent(self,fieldName,fieldContentsEntry):
  252:         """gib alle Projekte aus mit Value von field mit fieldName enthält ein Element der Liste fieldContents"""
  253:         if type(fieldContentsEntry) is StringType:
  254:             fieldContents=[fieldContentsEntry]
  255:         else:
  256:             fieldContents=fieldContentsEntry
  257:             
  258:         projects=self.ProjectCatalog({fieldName:string.join(fieldContents,' OR')})
  259:         #print projects
  260:         return projects
  261: 
  262:     def changeMPIWGRootForm(self):
  263:         """edit"""
  264:         pt=PageTemplateFile('Products/MPIWGWeb/zpt/changeMPIWGRootForm').__of__(self)
  265:         return pt()
  266: 
  267:     def changeMPIWGRoot(self,title,disciplineList,themesList,RESPONSE=None):
  268:         """change"""
  269:         self.title=title
  270:         self.disciplineList=disciplineList
  271:         self.themesList=themesList
  272: 
  273:         if RESPONSE is not None:
  274:             RESPONSE.redirect('manage_main')
  275: 
  276:     def getDisciplineList(self):
  277:         """get disciplines as list"""
  278:         return self.disciplineList.split("\n")
  279:     
  280:     def getThemeList(self):
  281:         """get themes as list"""
  282:         return self.themesList.split("\n")
  283:     
  284:     def test(self):
  285:         """test"""
  286:         return self.getProjectsByFieldContent('xdata_09',['biology'])[0].absolute_url
  287: 
  288:     def getContexts(self,childs=None,parents=None,depth=None):
  289:         """childs alle childs, alle parents"""
  290:         ret=[]
  291:         if parents:
  292:             splitted=parents.split(".")
  293:             parentId=string.join(splitted[0:len(splitted)-1],".")
  294:         
  295:             for project in self.getProjectFields('xdata_05',sort='int'):
  296:                 if project[1]==parentId:
  297:                     ret.append(project)
  298: 
  299:         if childs:
  300:             for project in self.getProjectFields('xdata_05',sort='int'):
  301:                 searchStr=childs+"(\..*)"
  302:                 if re.match(searchStr,project[1]):
  303:                     
  304:                     if depth:
  305: 
  306:                         if int(depth)>=len(project[1].split("."))-len(childs.split(".")):
  307:                     
  308:                             ret.append(project)
  309:                     else:
  310:                         ret.append(project)
  311:         return ret
  312:     
  313:     def getProjectFields(self,fieldName,folder=None,sort=None):
  314:         """getListofFieldNames"""
  315:         ret=[]
  316:         #print "FN",fieldName
  317:         if not folder:
  318:             folder=self
  319:         for object in folder.__dict__:
  320: 
  321:             obj=getattr(folder,object)
  322:             if hasattr(obj,'meta_type'):
  323:                 #print obj.meta_type
  324:                 if obj.meta_type=='MPIWGProject':
  325:                     if fieldName=="WEB_title_or_short":
  326:                         #print "HI!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
  327:                         #print len(obj.getContent('xdata_07'))
  328:                         if len(obj.getContent('xdata_07'))<3: # hack weil z.Z. manchmal noch ein Trennzeichen ; oder , im Feld statt leer
  329:                             fieldNameTmp="WEB_title"
  330:                         else:
  331:                             fieldNameTmp="xdata_07"
  332:                     else:
  333:                         fieldNameTmp=fieldName
  334:                     
  335:                     ret.append((obj,obj.getContent(fieldNameTmp)))
  336: 
  337:                 if obj.meta_type in self.folders:
  338:                     
  339:                     ret += self.getProjectFields(fieldName,obj)
  340: 
  341:         if sort=="int":
  342:             ret.sort(sortI)
  343:         else:
  344:             ret.sort(sortF)
  345:         
  346:         return ret
  347: 
  348:     def showNewProjects(self):
  349:         projects=[]
  350:         for objs in self.getProjectFields('WEB_title_or_short'): # Get all Projets
  351:             if objs[0].xdata_05[0] == "":
  352:                 
  353:                 projects.append(objs)
  354:                 
  355:         return projects
  356:     
  357:         
  358:     manage_options = Folder.manage_options+(
  359:         {'label':'Import Persons','action':'importNamesForm'},
  360:         {'label':'Main config','action':'changeMPIWGRootForm'},
  361:         {'label':'Edit Historical Persons','action':'editHistoricalPersonsForm'},
  362:         {'label':'Store Historical Persons','action':'storeHistoricalPersons'},
  363:         )
  364:     
  365:     def importNamesForm(self):
  366:         """Form"""
  367:         pt=PageTemplateFile('Products/MPIWGWeb/zpt/MPIWGNamesForm.zpt').__of__(self)
  368:         return pt()
  369: 
  370:     def importNames(self,fileupload,folderName,RESPONSE=None):
  371:         """import komma-sep list email,lastName,firstName"""
  372:         project=getattr(self,folderName)
  373:         load=fileupload.read()
  374:         
  375:         for line in load.split('\r'):
  376:             
  377:             
  378:             splitted=line.split(",")
  379:            # print splitted
  380:         
  381:             if not (splitted[0]==""):
  382:                 newObj=MPIWGStaff.MPIWGStaff(splitted[0],splitted[1],splitted[2])
  383:                 
  384:                 try:
  385:                     project._setObject(splitted[0],newObj)
  386:                     #print "done:",splitted[0]
  387:                 except:
  388:                     print "not done:",splitted[0]
  389:                     
  390:         if RESPONSE is not None:
  391:             RESPONSE.redirect('manage_main')
  392: 
  393:     def getAllMembers(self):
  394:         """give list of all members"""
  395:         ret=[]
  396: 
  397:         #for x in self.members.objectValues('MPIWGStaff'):
  398:             #print x.title
  399:         #    ret.append(x.title.decode('utf-8'))
  400: 
  401:         for x in self.ZopeFind(self.members,obj_metatypes=['MPIWGStaff']):
  402:                                ret.append(x[1].title.decode('utf-8'))
  403:             
  404:         ret.sort()
  405:         #print ret
  406:   
  407:         return ret
  408: 
  409:     def printAllMembers(self):
  410:         """prin"""
  411:         members=self.getAllMembers()
  412:         ret=""
  413:         for x in members:
  414:             ret+="<p>%s</p>"%x
  415:         return ret
  416:     
  417:         
  418:     def makeList(self,entry):
  419:         """makes a list out of one entry or repeat a list"""
  420:         if type(entry) is StringType:
  421:             return [entry]
  422:         else:
  423:             return entry
  424: 
  425: 
  426:     def getTree(self):
  427:         """generate Tree from project list"""
  428:         returnList=[]
  429:         for project in self.getProjectFields('xdata_05',sort="int"): # get Projects sorted by xdata_05
  430:             for idNr in project[1].split(";"): # more than one number
  431:                 if not idNr=="":
  432:                     splittedId=idNr.split(".")
  433:                     depth=len(splittedId)
  434:                     nr=idNr
  435:                     #title=project[0].WEB_title
  436:                     title=[project[0].getContent('WEB_title')]
  437:                     #print title
  438:                     returnList.append((depth,nr,title,project[0]))
  439:         
  440:         return returnList
  441: 
  442: 
  443:     def formatElementForOverview(self,element):
  444:         """format the element for output in overview"""
  445:         if element[0]==1: #department
  446:             #print element[3].getContent('xdata_05')
  447:             if element[3].getContent('xdata_05') == "4":
  448:                 return """<h2 class="hier"><a href="%s">Ind. Research Group I: %s</a></h2>"""%(element[3].absolute_url()+"/index.html",element[3].getContent('WEB_title'))
  449:             if element[3].getContent('xdata_05') == "5":
  450:                 return """<h2 class="hier"><a href="%s">Ind. Research Group II: %s</a></h2>"""%(element[3].absolute_url()+"/index.html",element[3].getContent('WEB_title'))
  451:             
  452:             return """<h2 class="hier"><a href="%s">Department %s: %s</a></h2>"""%(element[3].absolute_url()+"/index.html",element[3].getContent('xdata_05'),element[3].getContent('WEB_title'))
  453: 
  454:         elif element[0]==2: #mainprojects
  455:             return """<h3 class="hier"><a href="%s">%s</a></h3><p>"""%(element[3].absolute_url()+"/index.html",element[3].getContent('WEB_title'))
  456: 
  457:         elif element[0]==3:
  458:             return """<p class="hier"><a href="%s">%s</a></p>"""%(element[3].absolute_url()+"/index.html",element[3].getContent('WEB_title'))
  459: 
  460:         
  461:     def changePosition(self,treeId,select,RESPONSE=None):
  462:         """Change Postion Entry"""
  463:         numbers=[]
  464: 
  465:         # Suche hoechste bisherige nummer
  466:         projects=self.getProjectFields('xdata_05') # get Projects sorted by xdata_05
  467:         #print "pj",projects
  468:         for project in projects: #suche alle subtrees der treeId
  469:             #print treeId
  470:             
  471:             founds=re.match(treeId+"\.(.*)",project[1].split(";")[0])
  472:             if founds:
  473:                 #print "x",founds.group(0),len(founds.group(0).split("."))
  474:                 if len(founds.group(0).split("."))==len(treeId.split("."))+1: # nur ein punkt mehr, d.h. untere ebene
  475:                     try:
  476:                         numbers.append(int(founds.group(0).split(".")[len(founds.group(0).split("."))-1]))
  477:                     except:
  478:                         numbers.append(int(0))
  479: 
  480:         try:
  481:             highest=max(numbers)
  482:         except:
  483:             highest=0
  484:         projects=self.showNewProjects()
  485:         for i in self.makeList(select):
  486:             highest+=10
  487:             projects[int(i)][0].xdata_05=treeId+"."+str(highest)
  488: 
  489: 
  490:         if RESPONSE is not None:
  491:             RESPONSE.redirect('showTree')
  492:         
  493:     def changeTree(self,RESPONSE=None):
  494:         """change the complete tree"""
  495:         form=self.REQUEST.form
  496:         hashList={}
  497:         fields=self.getTree()
  498: 
  499:         
  500:         for idNr in form.keys():
  501:             fields[int(idNr)][3].xdata_05=form[idNr]
  502: 
  503:         
  504: 
  505:         if RESPONSE is not None:
  506:             RESPONSE.redirect('showTree')
  507: 
  508:     def getProjectWithId(self,id):
  509:         fields=self.getProjectFields('xdata_05')
  510:         for field in fields:
  511:             if field[1]==id:
  512:                 return field[0]
  513: 
  514:         return None
  515:             
  516:         
  517:             
  518:         
  519:     def getRelativeUrlFromPerson(self,list):
  520:         """get urls to person list"""
  521:         ret=[]
  522:         persons=list.split(";")
  523:         for person in persons:
  524:             
  525:             if len(person)>1: #nicht nur Trennzeichen
  526:                 splitted=person.split(",")
  527:                 if len(splitted)==1:
  528:                     splitted=person.split(" ")
  529:                 splittedNew=[re.sub(r'\s(.*)','$1',split) for split in splitted]
  530:                 if splittedNew[0]=='':
  531:                     del splittedNew[0]
  532:                 search=string.join(splittedNew,' AND ')
  533:                 
  534:                 if not search=='':
  535: 
  536:                     try:
  537:                         proj=self.MembersCatalog({'title':search})
  538:                     except:
  539:                         proj=None
  540: 
  541:                 if proj:
  542:                     #ret.append("<a href=%s >%s</a>"%(proj[0].absolute_url,person.encode('utf-8')))
  543:                     ret.append("<a href=%s >%s</a>"%('members/'+proj[0].id+'/index.html',person))
  544:                 else:
  545:                     #ret.append("%s"%person.encode('utf-8'))
  546:                     ret.append("%s"%person)
  547:         return string.join(ret,";")
  548:         
  549:             
  550:     def getUrlFromPerson(self,list):
  551:         """get urls to person list"""
  552:         ret=[]
  553:         persons=list.split(";")
  554:         for person in persons:
  555:             
  556:             if len(person)>1: #nicht nur Trennzeichen
  557:                 splitted=person.split(",")
  558:                 if len(splitted)==1:
  559:                     splitted=person.lstrip().rstrip().split(" ")
  560:                 splittedNew=[re.sub(r'\s(.*)','$1',split) for split in splitted]
  561:                 if splittedNew[0]=='':
  562:                     del splittedNew[0]
  563:                 search=string.join(splittedNew,' AND ')
  564:                 
  565:                 if not search=='':
  566: 
  567:                     try:
  568:                         proj=self.MembersCatalog({'title':search})
  569:                     except:
  570:                         proj=None
  571: 
  572:                 if proj:
  573:                     #ret.append("<a href=%s >%s</a>"%(proj[0].absolute_url,person.encode('utf-8')))
  574:                     ret.append("<a href=%s >%s</a>"%(proj[0].absolute_url+"/index.html",person))
  575:                 else:
  576:                     #ret.append("%s"%person.encode('utf-8'))
  577:                     ret.append("%s"%person)
  578:         return string.join(ret,";")
  579:                          
  580:     def getProjectsOfMembers(self):
  581:         """give tuple member /projects"""
  582:         ret=[]
  583:         members=self.getAllMembers()
  584:         #return str(members)
  585:         for x in members:
  586:             ret+=self.getProjectsOfMember(name=x)
  587:             
  588:         return ret
  589: 
  590:     def getProjectsOfMember(self,name=None,email=None):
  591:         """get project of a member"""
  592:         def sortP(x,y):
  593:             """sort by sorting number"""
  594:             #print x.xdata_05,y.xdata_05
  595:             return cmp(x.WEB_title,y.WEB_title)
  596:         
  597:        
  598:         ret=[]
  599:         splitNeu=[]
  600:         if email:
  601:             members=self.ZopeFind(self.members,obj_metatypes=['MPIWGStaff'],obj_ids=[email])
  602:             name =  members[0][1].title.decode('utf-8')
  603: 
  604:         y=name
  605:         splitted=y.split(",")
  606:         #XXXX
  607:         splitNeu=["\'"+splitted[1]+" "+splitted[0]+"\'"]
  608:         
  609:         #for s in splitted:
  610:         #    splitNeu.append("\""+s+"\"")
  611:         search=string.join(splitNeu,' AND ')
  612:         
  613:         proj=self.ProjectCatalog({'xdata_01':search})
  614: 
  615:         if proj:
  616:             proj2=[]
  617:             for x in proj:
  618:              
  619:                 if not((splitted[1]==" Christoph") and (splitted[0]=="Hoffmann") and (str(x.WEB_title).find('Einstein')>0)):
  620:                        
  621:                        #print repr(splitted[1]),repr(splitted[0]),repr(x.WEB_title)
  622:                        proj2.append(x)
  623:         #    proj2.sort(sortP)
  624:         #    ret.append((y,proj2))
  625:         else:
  626:             proj2=[]
  627:             
  628:         proj=self.ProjectCatalog({'xdata_08':search})
  629:         if proj:
  630:             names=[x.WEB_title for x in proj]
  631:             for x in proj:
  632:                 if not x.WEB_title in names:
  633:                     proj2.append(x)
  634: 
  635: 
  636:         proj2.sort(sortP)
  637: 
  638:         if len(proj2)>0:
  639:             ret.append((y,proj2))
  640: 
  641:         return ret
  642:      
  643:     def givePersonList(self,name):
  644:         """check if person is in personfolder and return list of person objects"""
  645:         
  646:         splitted=name.split(",")
  647:         if len(splitted)==1:
  648:             splitted=name.lstrip().rstrip().split(" ")
  649:         splittedNew=[split.lstrip() for split in splitted]
  650:         
  651:         if splittedNew[0]=='':
  652:             del splittedNew[0]
  653:         search=string.join(splittedNew,' AND ')
  654:         if not search=='':
  655:             proj=self.MembersCatalog({'title':search})
  656: 
  657:         if proj:
  658:             return [[x.lastName,x.firstName] for x in proj]
  659:         else:
  660:             return []
  661:             
  662: ##         splitted=name.split(",") # version nachname, vorname...
  663: ##         if len(splitted)>1:
  664: ##             lastName=splitted[0] 
  665: ##             firstName=splitted[1]
  666: ##         else: 
  667: ##             splitted=name.split(" ") #version vorname irgenwas nachnamae
  668:         
  669: ##             lastName=splitted[len(splitted)-1]
  670: ##             firstName=string.join(splitted[0:len(splitted)-1])
  671: 
  672: ##         objs=[]
  673: 
  674:         #print  self.members 
  675:       ##   for x in self.members.__dict__:
  676: ##             obj=getattr(self.members,x)
  677: ##             if hasattr(obj,'lastName') and hasattr(obj,'firstName'):
  678:                 
  679: ##                 if (re.match(".*"+obj.lastName+".*",lastName) or re.match(".*"+lastName+".*",obj.lastName)) and (re.match(".*"+obj.firstName+".*",firstName) or re.match(".*"+firstName+".*",obj.firstName)):
  680:                     
  681: ##                     objs.append((obj,lastName+", "+firstName))
  682: 
  683:         
  684:         return objs
  685: 
  686: 
  687:     def personCheck(self,names):
  688:         """all persons for list"""
  689:         #print "names",names
  690:         splitted=names.split(";")
  691:         ret={}
  692:         for name in splitted:
  693: 
  694:             if not (name==""):
  695:                 try:
  696:                     ret[name]=self.givePersonList(name)
  697:                 except:
  698:                     """NOTHIHN"""
  699:         #print "RET",ret
  700:         return ret
  701: 
  702:     def giveCheckList(self,person,fieldname):
  703:         """return checklist"""
  704:         #print "GCL",fieldname
  705:         if fieldname=='xdata_01':
  706:             x=self.personCheck(person.getContent(fieldname))
  707:             #print "GCLBACKX",x
  708:             return x
  709:         
  710: 
  711:     def isCheckField(self,fieldname):
  712:         """return chechfield"""
  713:         
  714:         return (fieldname in checkFields)
  715: 
  716: 
  717:     
  718:     
  719:         
  720: def manage_addMPIWGRootForm(self):
  721:     """form for adding the root"""
  722:     pt=PageTemplateFile('Products/MPIWGWeb/zpt/addMPIWGRootForm.zpt').__of__(self)
  723:     return pt()
  724: 
  725: def manage_addMPIWGRoot(self,id,title,RESPONSE=None):
  726:     """add a root folder"""
  727:     newObj=MPIWGRoot(id,title)
  728:     self._setObject(id,newObj)
  729: 
  730:     if RESPONSE is not None:
  731:         RESPONSE.redirect('manage_main')
  732:         
  733: 
  734: class MPIWGProject(Folder):
  735:     """Class for Projects"""
  736: 
  737:     meta_type='MPIWGProject'
  738: 
  739:     def crossLinker(self):
  740:         """experimental crosslinker"""
  741:         splitted=self.WEB_project_description[0].split()
  742:         new=[]
  743:         for split in splitted:
  744:             try:
  745:                 found=self.DescriptionCatalog({'fulltext':split})
  746:           
  747:                 if len(found)>1:
  748:              
  749:                     new.append("<a href=%s>%s</a>"%(split,split))
  750:                 else:
  751:                     new.append(split)
  752:             except:
  753:                 new.append(split)
  754:         return string.join(new)
  755:             
  756:             
  757: 
  758: 
  759:     def generateTemplate(self,RESPONSE=None):
  760:         """Erzeuge Template für defined fields not_used"""
  761: 
  762:         id="index_html"
  763:         title=id
  764:         if self._getOb('index_html'):
  765:             self._delObject('index_html')
  766: 
  767:         
  768:         newObj=ZopePageTemplate(id,'TEXT')
  769:         self._setObject(id,newObj)
  770:         #self.manage_addPageTemplate(id,title)
  771:         if RESPONSE is not None:
  772:             RESPONSE.redirect('manage_main')
  773:             
  774:     def __init__(self, id, argv=None):
  775:         """initieriere classe"""
  776:         
  777:         self.id=id
  778:         self.title=id
  779:         if argv:
  780:             for arg in definedFields:
  781: 		try:
  782:                 	setattr(self,arg,argv[arg])
  783: 		except:
  784: 			setattr(self,arg,"")
  785:         else:
  786:             for arg in definedFields:
  787:                 setattr(self,arg,'')
  788:             
  789:     manage_options = Folder.manage_options+(
  790:         {'label':'Load New File','action':'loadNewFileForm'},
  791:         {'label':'Edit ProjectInfo','action':'editMPIWGProjectForm'},
  792:         {'label':'Edit BasisInfo','action':'editMPIWGBasisForm'},
  793:         {'label':'Edit Publications','action':'editMPIWGRelatedPublicationsForm'},
  794:         {'label':'Edit Themes & Disciplines','action':'editMPIWGDisciplinesThemesForm'},
  795:         )
  796: 
  797: 
  798:     def index_html(self):
  799:         """show homepage"""
  800: 	ext=self.ZopeFind(self.aq_parent,obj_ids=["project_main"])
  801: 
  802:         if ext:
  803:             return getattr(self,ext[0][1].getId())()
  804: 
  805:         pt=PageTemplateFile('Products/MPIWGWeb/zpt/project_main').__of__(self)
  806:         return pt()
  807: 
  808:     def getDataFields(self):
  809:         """giveListofDatafields"""
  810:         ret=[]
  811:         for x in range(1,14):
  812:             if not x in [6,10,9]: # not used fields
  813:                 ret.append('xdata_%02i'%x)
  814:         return ret
  815:             
  816:     def getDefinedFields(self):
  817:         """show all defined fields"""
  818:         
  819:         return definedFields
  820: 
  821:     def getAttribute(self,field):
  822:         """get attrbiute"""
  823:         return getattr(self,field)
  824: 
  825:     def getContent(self,field):
  826:         """Inhalt des Feldes"""
  827:         
  828:         text=u''
  829:         #print "FIELD",field
  830:         for x in getattr(self,field):
  831:             #print "HIHIIII"
  832:             
  833:             try:
  834:                 text +=x.encode('utf-8')
  835:             except:
  836:                 try:
  837:                     text =x.encode('utf-8')
  838:                 except:
  839:                     text=x.decode('latin-1').encode('utf-8')
  840:         
  841:         #delete separator (;) if  is there is one
  842:         ## try:
  843: ##             print text, text[len(text)-1]
  844: ##         except:
  845: ##             print "error:",text
  846:         try:
  847:             if text[len(text)-1]==";":
  848:                 text=text[0:len(text)-1]
  849:           
  850:                 
  851:         except:
  852:             """nothing"""
  853: 
  854:         text2=re.sub(r';([^\s])','; \g<1>',text)
  855:         #teste ob ergebnis leer und header dann nehme title
  856:         
  857:         if (text2=='') and (field=='WEB_project_header'):
  858:             return self.getContent('WEB_title')
  859: 
  860:         #teste ob WEB_project_description und keine führenden p tags
  861:         if (len(text2)>4) and (not text2[0:3]=='<p>') and (field=='WEB_project_description'):
  862:             return "<p>"+text2+"</p>"
  863:         
  864:         return text2
  865:     
  866:     def show_html(self):
  867:         """simple index"""
  868:         #return "HI"
  869:         pt=PageTemplateFile('Products/MPIWGWeb/zpt/MPIWGProject_index.zpt').__of__(self)
  870:         return pt()
  871: 
  872:     def editMPIWGProjectForm(self):
  873:         """editform"""
  874:         pt=PageTemplateFile('Products/MPIWGWeb/zpt/edit_MPIWGProject.zpt').__of__(self)
  875:         return pt()
  876: 
  877:     def editMPIWGProject(self,RESPONSE=None):
  878:         """edit the project"""
  879: 
  880:         #return self.REQUEST
  881:         for x in definedFields:
  882:             if self.REQUEST.has_key(x):
  883:                 
  884:                 setattr(self,x,[self.REQUEST[x].decode('utf-8')])
  885:             
  886:         if RESPONSE is not None:
  887:             RESPONSE.redirect('manage_main')
  888: 
  889:     def editMPIWGDisciplinesThemesForm(self):
  890:         """edit the disciplines and themes Form"""
  891:         pt=PageTemplateFile('Products/MPIWGWeb/zpt/edit_MPIWGDisciplinesThemes.zpt').__of__(self)
  892:         return pt()
  893: 
  894:     def editMPIWGDisciplinesThemes(self,disciplines=None,themes=None,RESPONSE=None):
  895:         """edit disciplin and form"""
  896:         if disciplines:
  897:             if type(disciplines) is StringType:
  898:                 self.xdata_09=disciplines
  899:             else:
  900:                 self.xdata_09=string.join(disciplines,";")
  901:         else:
  902:                 self.xdata_09=""
  903:         if themes:
  904:             if type(themes) is StringType:
  905:                 self.xdata_10=themes
  906:             else:
  907:                 self.xdata_10=string.join(themes,";")
  908:         else:
  909:             self.xdata_10=""
  910:             
  911:         if RESPONSE is not None:
  912:             RESPONSE.redirect('manage_main')
  913: 
  914: 
  915:     def isChecked(self,wert,list):
  916:         """check if wert is in ; seperated list"""
  917:         print "W:",wert
  918:         print "L:",list,type(list)
  919:         #felder sind manchmnal als liste mit einem element definiert
  920:         if type(list) is StringType or UnicodeType: 
  921:             splitted=list.split(";")
  922:         else:
  923:             splitted=list[0].split(";")
  924: 
  925:         print splitted
  926:         for x in splitted:
  927:             if (not x==u'') and x in wert:
  928:                 return 1
  929:         return 0
  930:     
  931:     def editMPIWGBasisForm(self):
  932:         """editform"""
  933:         pt=PageTemplateFile('Products/MPIWGWeb/zpt/edit_MPIWGBasis.zpt').__of__(self)
  934:         return pt()
  935:     def editMPIWGRelatedPublicationsForm(self):
  936:         """Edit related Publications"""
  937:         pt=PageTemplateFile('Products/MPIWGWeb/zpt/edit_MPIWGRelatedPublications.zpt').__of__(self)
  938:         return pt()
  939:         
  940:     
  941:     def loadNewFileForm(self):
  942:         """Neues XML-File einlesen"""
  943:         pt=PageTemplateFile('Products/MPIWGWeb/zpt/MPIWGProject_newfile.zpt').__of__(self)
  944:         return pt()
  945: 
  946:     def loadNewFile(self,RESPONSE=None):
  947:         """einlesen des neuen files"""
  948:         fileupload=self.REQUEST['fileupload']
  949:         if fileupload:
  950:             file_name=fileupload.filename
  951:             filedata=fileupload.read()
  952: 
  953:             argv=xmlhelper.proj2hash(filedata)
  954:             #print argv.keys()
  955:             for arg in definedFields:
  956:                 
  957:                 #print arg,argv[arg],getattr(self,arg)
  958:                 try:
  959:                     temp=argv[arg][0:]
  960:                     #old=getattr(self,arg)
  961:                     setattr(self,arg,temp)
  962:                     #print old,getattr(self,arg)
  963:                 except:
  964:                     """nothing"""
  965:                     
  966:         if RESPONSE is not None:
  967:             RESPONSE.redirect('manage_main')
  968: 
  969: def manage_addMPIWGProjectForm(self):
  970:     """form for adding the project"""
  971:     pt=PageTemplateFile('Products/MPIWGWeb/zpt/addMPIWGProjectForm.zpt').__of__(self)
  972:     return pt()
  973: 
  974: def manage_addMPIWGProject(self,id,RESPONSE=None):
  975:     """method to add a project"""
  976:     #print argv
  977:     fileupload=self.REQUEST.get('fileupload',None)
  978:     if fileupload:
  979:         print fileupload
  980:         file_name=fileupload.filename
  981:         filedata=fileupload.read()
  982:         
  983:         argv=xmlhelper.proj2hash(filedata)
  984:         
  985:         #print argv
  986:         newObj=MPIWGProject(id,argv)
  987:     else:
  988:         newObj=MPIWGProject(id)
  989: 
  990:     self._setObject(id,newObj)
  991: 
  992: 
  993:     if RESPONSE is not None:
  994:         RESPONSE.redirect('manage_main')

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>