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