Mercurial > hg > MPIWGThesaurus
comparison MPIWGThesaurus.py @ 45:efdbe9eb2403
thesaurus jetzt in datenbank
author | dwinter |
---|---|
date | Mon, 25 Nov 2013 08:12:11 +0100 |
parents | a30307377ed9 |
children | 7c1782d65c9b cb20308fe412 |
comparison
equal
deleted
inserted
replaced
44:a30307377ed9 | 45:efdbe9eb2403 |
---|---|
1 #Klasse zum Taggen und Anzeigen der Tags von Projekte bzw. allgemein Webseiten des Institutes | 1 #Klasse zum Taggen und Anzeigen der Tags von Projekte bzw. allgemein Webseiten des Institutes |
2 #Tags werden in der Instanz abgespeichert | 2 #Tags werden in der Instanz abgespeichert |
3 #Personenname kommen aus dem Virtuoso-Triplestore , lokal erzeugte zusaetliche Name werden dort abgespeichert | 3 #Personenname kommen aus dem Virtuoso-Triplestore , lokal erzeugte zusaetliche Name werden dort abgespeichert |
4 #Fuer die Suche ueber die Personenname wird das MetaDataManagerRestlet benoetigt. | 4 #Fuer die Suche ueber die Personenname wird das MetaDataManagerRestlet benoetigt. |
5 #TODO: Zur Zeit werden die entsprechenden Server URLs hier in der Klasse definiert. | 5 #TODO: Zur Zeit werden die entsprechenden Server URLs hier in der Klasse definiert. |
6 | |
7 | 6 |
8 # TODO: generell verwaltung der tags im triple store und nicht in zope. | 7 # TODO: generell verwaltung der tags im triple store und nicht in zope. |
9 # TODO: mache server und namespaces konfigurierbar im project | 8 # TODO: mache server und namespaces konfigurierbar im project |
10 | 9 |
11 | 10 |
13 from Globals import package_home | 12 from Globals import package_home |
14 from Products.PageTemplates.PageTemplateFile import PageTemplateFile | 13 from Products.PageTemplates.PageTemplateFile import PageTemplateFile |
15 from BTrees.OOBTree import OOBTree | 14 from BTrees.OOBTree import OOBTree |
16 from BTrees.OOBTree import OOSet | 15 from BTrees.OOBTree import OOSet |
17 from AccessControl import ClassSecurityInfo | 16 from AccessControl import ClassSecurityInfo |
17 from Products.ZDBInterface.ZDBInterfaceFolder import ZDBInterfaceFolder | |
18 | 18 |
19 #import os | 19 #import os |
20 import re | 20 import re |
21 import os.path | 21 import os.path |
22 import logging | 22 import logging |
25 from types import ListType | 25 from types import ListType |
26 import transaction | 26 import transaction |
27 import random | 27 import random |
28 import urllib2 | 28 import urllib2 |
29 import urllib | 29 import urllib |
30 import json | |
30 | 31 |
31 from SrvTxtUtils import utf8ify | 32 from SrvTxtUtils import utf8ify |
32 | 33 |
33 class projectHolder: | 34 class projectHolder: |
34 projectHolder="" | 35 projectHolder="" |
66 self.comment=comment | 67 self.comment=comment |
67 self.type=type | 68 self.type=type |
68 self.userName=userName | 69 self.userName=userName |
69 | 70 |
70 | 71 |
71 class MPIWGThesaurus(Folder): | 72 class MPIWGThesaurus(ZDBInterfaceFolder, Folder): |
72 """MPIWGThesaurus main folder""" | 73 """MPIWGThesaurus main folder""" |
73 security=ClassSecurityInfo() | 74 security=ClassSecurityInfo() |
74 | 75 |
75 meta_type="MPIWGThesaurus" | 76 meta_type="MPIWGThesaurus" |
76 | 77 |
94 | 95 |
95 logpathDefault="/var/tmp/tagchanges.log" | 96 logpathDefault="/var/tmp/tagchanges.log" |
96 | 97 |
97 #BTrees fuer die Tags | 98 #BTrees fuer die Tags |
98 | 99 |
99 projectPersons= OOBTree() #project --> personen IDs | 100 #projectPersons= OOBTree() #project --> personen IDs |
100 projectObjects= OOBTree() #project --> objects | 101 #projectObjects= OOBTree() #project --> objects |
101 projectHistoricalPlaces= OOBTree() | 102 #projectHistoricalPlaces= OOBTree() |
102 projectSuggestedTags= OOBTree() | 103 projectSuggestedTags= OOBTree() |
103 persons2Projects= OOBTree() #personenID --> projects | 104 #persons2Projects= OOBTree() #personenID --> projects |
104 objects2Projects=OOBTree() #objects --> projects | 105 #objects2Projects=OOBTree() #objects --> projects |
105 historicalPlaces2Projects=OOBTree() | 106 #historicalPlaces2Projects=OOBTree() |
106 suggestedTags2Projects=OOBTree() | 107 suggestedTags2Projects=OOBTree() |
107 personIDtoNames=OOBTree() # weist den personenIDs Klartextnamen aus dem Triplestore zu | 108 ##personIDtoNames=OOBTree() # weist den personenIDs Klartextnamen aus dem Triplestore zu |
108 personsIDForSort=[] # liste personenID sortiert nach dem tupel (nachname,vorname) | 109 ##personsIDForSort=[] # liste personenID sortiert nach dem tupel (nachname,vorname) |
109 personsIDForSortFull=[] # liste (personenID,(nachname,vorname)) nicht sortiert! | 110 ##personsIDForSortFull=[] # liste (personenID,(nachname,vorname)) nicht sortiert! |
110 | 111 |
111 suggestedPersons= OOBTree(); #TODO: das sollte die ueberfluessig werde und nur im triple store stehen. | 112 suggestedPersons= OOBTree(); #TODO: das sollte die ueberfluessig werde und nur im triple store stehen. |
112 | 113 |
113 tagList=[] | 114 tagList=[] |
114 | 115 |
174 | 175 |
175 | 176 |
176 | 177 |
177 | 178 |
178 | 179 |
179 manage_options = Folder.manage_options+( | 180 manage_options = ZDBInterfaceFolder.manage_options+( |
180 {'label':'Thesaurus entries','action':'changeMPIWGThesaurusForm'}, | 181 {'label':'Thesaurus entries','action':'changeMPIWGThesaurusForm'}, |
181 {'label':'Manage Thesaurus','action':'manageMPIWGThesaurus'}, | 182 {'label':'Manage Thesaurus','action':'manageMPIWGThesaurus'}, |
182 {'label':'Thesaurus Log','action':'manageMPIWGThesaurusLogs'}, | 183 {'label':'Thesaurus Log','action':'manageMPIWGThesaurusLogs'}, |
183 #{'label':'Change Publications Special','action':'changePublications_specialForm'}, | 184 #{'label':'Change Publications Special','action':'changePublications_specialForm'}, |
184 ) | 185 ) |
325 | 326 |
326 ret+="\t".join(retarray)+"\n" | 327 ret+="\t".join(retarray)+"\n" |
327 | 328 |
328 return ret | 329 return ret |
329 | 330 |
330 | 331 def getTags(self,projectID,projectTags,RESPONSE=None): |
332 """get all selected tagList""" | |
333 | |
334 #projectTags = self.getProjectsAndTags() | |
335 #logging.debug(projectTags) | |
336 | |
337 project = projectTags.get(projectID) | |
338 if project is None: | |
339 project = projectTags.get("/en/research/projects/"+projectID) #TODO fix this projectTag list from getProjectsAndTags()contains fullpath | |
340 if project is None: | |
341 return [] | |
342 retarray=[] | |
343 for tagType in self.tags.keys(): | |
344 tags = project.tags.get(tagType,['']) | |
345 retarray.append(utf8ify(";".join(tags))) | |
346 | |
347 | |
348 return retarray | |
331 def getAllProjectsAndTagsAsCSV(self,active=0,archived=0,RESPONSE=None): | 349 def getAllProjectsAndTagsAsCSV(self,active=0,archived=0,RESPONSE=None): |
332 """alle projekte auch die nicht getaggten""" | 350 """alle projekte auch die nicht getaggten""" |
333 retList=[] | 351 retList=[] |
334 headers=['projectId','sortingNumber','projectName','scholars','startedAt','completedAt','lastChangeThesaurusAt','lastChangeProjectAt','projectCreatedAt','active','persons','objects'] | 352 headers=['projectId','sortingNumber','projectName','scholars','startedAt','completedAt','lastChangeThesaurusAt','lastChangeProjectAt','projectCreatedAt','active','persons','objects'] |
335 headers.extend(list(self.tags.keys())) | 353 headers.extend(list(self.tags.keys())) |
351 n = re.sub("[:\- ]","",str(changeDate)) | 369 n = re.sub("[:\- ]","",str(changeDate)) |
352 retProj.append(n) | 370 retProj.append(n) |
353 retProj.append(utf8ify(getattr(proj,'creationTime','20050101000000'))) | 371 retProj.append(utf8ify(getattr(proj,'creationTime','20050101000000'))) |
354 retProj.append("")#TODO: project created at | 372 retProj.append("")#TODO: project created at |
355 retProj.append(str(proj.isActiveProject())) | 373 retProj.append(str(proj.isActiveProject())) |
356 retProj.append(";".join([person[1] for person in self.getPersonsFromProject(proj.getId())])) | 374 #retProj.append(";".join([person[1] for person in self.getPersonsFromProject(proj.getId())])) |
357 #retProj.append(";".join([person[1] for person in self.thesaurus.getHistoricalPlacesFromProject(proj.getId())])) | 375 #retProj.append(";".join([person[1] for person in self.thesaurus.getHistoricalPlacesFromProject(proj.getId())])) |
358 retProj.append(";".join([person[1] for person in self.getObjectsFromProject(proj.getId())])) | 376 #retProj.append(";".join([person[1] for person in self.getObjectsFromProject(proj.getId())])) |
359 retProj+=self.getTags(proj.getId(),projectTags) | 377 retProj+=self.getTags(proj.getId(),projectTags) |
360 retList.append("\t".join(retProj)) | 378 retList.append("\t".join(retProj)) |
361 | 379 |
362 if RESPONSE: | 380 if RESPONSE: |
363 RESPONSE.setHeader('Content-Disposition','attachment; filename="ProjectsAndTags.tab"') | 381 RESPONSE.setHeader('Content-Disposition','attachment; filename="ProjectsAndTags.tab"') |
406 return txt | 424 return txt |
407 | 425 |
408 #In der Anzeige soll der Name der zitierten Personen in Klartext angezeigt werden, ausserdem die Varianten, wie sie tatsaechlich | 426 #In der Anzeige soll der Name der zitierten Personen in Klartext angezeigt werden, ausserdem die Varianten, wie sie tatsaechlich |
409 #in den Projekten benutzt werden | 427 #in den Projekten benutzt werden |
410 | 428 |
411 | 429 # |
412 def addPersonAndFirstNameFromTripleStore(self, personID): | 430 # def addPersonAndFirstNameFromTripleStore(self, personID): |
413 mainName, sortName = self.getMainNameFromTripleStore(personID) # hole die hauptbezeichnung aus dem triplestore | 431 # mainName, sortName = self.getMainNameFromTripleStore(personID) # hole die hauptbezeichnung aus dem triplestore |
414 personNames = [] | 432 # personNames = [] |
415 logging.debug("get person:"+ personID) | 433 # logging.debug("get person:"+ personID) |
416 logging.debug("names:"+repr(mainName)+":"+ repr(sortName)) | 434 # logging.debug("names:"+repr(mainName)+":"+ repr(sortName)) |
417 | 435 # |
418 projects=self.persons2Projects.get(personID) | 436 # projects=self.persons2Projects.get(personID) |
419 logging.debug(repr(projects)) | 437 # logging.debug(repr(projects)) |
420 if projects is None: | 438 # if projects is None: |
421 projects=[] | 439 # projects=[] |
422 | 440 # |
423 for project in projects: #hole die personen aus dem projekte | 441 # for project in projects: #hole die personen aus dem projekte |
424 logging.debug("Found:project:" + project) | 442 # logging.debug("Found:project:" + project) |
425 namesInProject = self.projectPersons.get(project) | 443 # namesInProject = self.projectPersons.get(project) |
426 for nameInProjectTuple in namesInProject: | 444 # for nameInProjectTuple in namesInProject: |
427 logging.debug(repr(nameInProjectTuple)) | 445 # logging.debug(repr(nameInProjectTuple)) |
428 nameInProject = nameInProjectTuple[1] | 446 # nameInProject = nameInProjectTuple[1] |
429 logging.debug(nameInProjectTuple[0] + "??" + personID) | 447 # logging.debug(nameInProjectTuple[0] + "??" + personID) |
430 if nameInProjectTuple[0] == personID: | 448 # if nameInProjectTuple[0] == personID: |
431 logging.debug("changing") | 449 # logging.debug("changing") |
432 if mainName == "": # es gibt keinen Eintrag im Triplestore fuer name (sollte eigentlich nicht sein, ist dann ein Fehler dort) | 450 # if mainName == "": # es gibt keinen Eintrag im Triplestore fuer name (sollte eigentlich nicht sein, ist dann ein Fehler dort) |
433 mainName = nameInProject #nimm dann aber den ersten aus den projekten | 451 # mainName = nameInProject #nimm dann aber den ersten aus den projekten |
434 if nameInProject != mainName: | 452 # if nameInProject != mainName: |
435 personNames.append(nameInProject) | 453 # personNames.append(nameInProject) |
436 | 454 # |
437 logging.debug(str(mainName) + "- foundalso :" + ",".join(personNames)) | 455 # logging.debug(str(mainName) + "- foundalso :" + ",".join(personNames)) |
438 self.personIDtoNames.update({personID:(mainName, personNames)}) | 456 # self.personIDtoNames.update({personID:(mainName, personNames)}) |
439 self.personsIDForSortFull.append((personID, sortName)) | 457 # self.personsIDForSortFull.append((personID, sortName)) |
440 | 458 # |
441 | 459 # |
442 | 460 # |
443 def generateSortingOrderForPersonIDs(self): | 461 # def generateSortingOrderForPersonIDs(self): |
444 def sort(x,y): | 462 # def sort(x,y): |
445 logging.debug("sort:") | 463 # logging.debug("sort:") |
446 logging.debug((x[1][0],y[1][0])) | 464 # logging.debug((x[1][0],y[1][0])) |
447 return cmp(x[1][0],y[1][0]) | 465 # return cmp(x[1][0],y[1][0]) |
448 | 466 # |
449 self.personsIDForSortFull.sort(cmp=sort) | 467 # self.personsIDForSortFull.sort(cmp=sort) |
450 | |
451 self.personsIDForSort=[x[0] for x in self.personsIDForSortFull] | |
452 | |
453 self.personIDtoNames=self.personIDtoNames # make clear that it has changed #TODO: change this to variablen with names _p | |
454 | |
455 security.declareProtected('View management screens','collectPersonNamesToIds') | |
456 def collectPersonNamesToIds(self): | |
457 """Ordne Namen aus dem Triplestore bzw. die vergebenenden Label den Personen-Ids zu.""" | |
458 #sollte z.B. gemacht werden, wenn im Triplestore editiert wurde. | |
459 self.personIDtoNames=OOBTree() # loesche alle | |
460 self.personsIDForSort=[] | |
461 self.personsIDForSortFull=[] | |
462 for personID in self.persons2Projects: | |
463 self.addPersonAndFirstNameFromTripleStore(personID) | |
464 | |
465 | |
466 | |
467 | |
468 #sortiere personIDs nach erstmal nach Nachnamene TODO: sortiere nach name,vorname | |
469 | |
470 self.generateSortingOrderForPersonIDs(); | |
471 # def sort(x,y): | |
472 # logging.debug("sort:") | |
473 # logging.debug((x[1][0],y[1][0])) | |
474 # return cmp(x[1][0],y[1][0]) | |
475 # | 468 # |
476 # self.personsIDForSortFull.sort(cmp=sort) | 469 # self.personsIDForSort=[x[0] for x in self.personsIDForSortFull] |
470 # | |
471 # self.personIDtoNames=self.personIDtoNames # make clear that it has changed #TODO: change this to variablen with names _p | |
472 # | |
473 # security.declareProtected('View management screens','collectPersonNamesToIds') | |
474 # def collectPersonNamesToIds(self): | |
475 # """Ordne Namen aus dem Triplestore bzw. die vergebenenden Label den Personen-Ids zu.""" | |
476 # #sollte z.B. gemacht werden, wenn im Triplestore editiert wurde. | |
477 # self.personIDtoNames=OOBTree() # loesche alle | |
478 # self.personsIDForSort=[] | |
479 # self.personsIDForSortFull=[] | |
480 # for personID in self.persons2Projects: | |
481 # self.addPersonAndFirstNameFromTripleStore(personID) | |
482 # | |
477 # | 483 # |
478 # self.personsIDForSort=[x[0] for x in self.personsIDForSortFull] | 484 # |
479 # | 485 # |
480 # self.personIDtoNames=self.personIDtoNames # make clear that it has changed #TODO: change this to variablen with names _p | 486 # #sortiere personIDs nach erstmal nach Nachnamene TODO: sortiere nach name,vorname |
481 # | 487 # |
482 #Hole die Namen, die einer personID zugeordnet sind. | 488 # self.generateSortingOrderForPersonIDs(); |
483 def getNamesFromID(self,personID): | 489 # # def sort(x,y): |
484 personID=personID.rstrip().lstrip() #make sure no spaces | 490 # # logging.debug("sort:") |
485 logging.debug("<"+personID+">") | 491 # # logging.debug((x[1][0],y[1][0])) |
486 retStr="" | 492 # # return cmp(x[1][0],y[1][0]) |
487 | 493 # # |
488 retStr+=self.personIDtoNames.get(personID,[personID])[0] # hole die Hauptbezeichnung, falls keine angeben ist, wird die ID ausgegeben, das is jedoch ein Felher in den Daten!! | 494 # # self.personsIDForSortFull.sort(cmp=sort) |
489 #additionalNames = self.personIDtoNames.get(personID,['',[]])[1] | 495 # # |
490 #if len(additionalNames)>0: | 496 # # self.personsIDForSort=[x[0] for x in self.personsIDForSortFull] |
491 # retStr+=" ("+",".join(additionalNames)+","+")" | 497 # # |
492 return retStr | 498 # # self.personIDtoNames=self.personIDtoNames # make clear that it has changed #TODO: change this to variablen with names _p |
493 | 499 # # |
494 | 500 # #Hole die Namen, die einer personID zugeordnet sind. |
495 #Hole die Hauptnamemsansetzung aus dem Triplestore ),falls vorhanden, wenn nicht ist der String leer. | 501 # # def getNamesFromID(self,personID): |
496 #ausserdem einen Namen zum sortieren, = Tupel(nachname, vorname) | 502 # # personID=personID.rstrip().lstrip() #make sure no spaces |
503 # # logging.debug("<"+personID+">") | |
504 # # retStr="" | |
505 # # | |
506 # # retStr+=self.personIDtoNames.get(personID,[personID])[0] # hole die Hauptbezeichnung, falls keine angeben ist, wird die ID ausgegeben, das is jedoch ein Felher in den Daten!! | |
507 # # #additionalNames = self.personIDtoNames.get(personID,['',[]])[1] | |
508 # # #if len(additionalNames)>0: | |
509 # # # retStr+=" ("+",".join(additionalNames)+","+")" | |
510 # # return retStr | |
511 # # | |
512 # # | |
513 # #Hole die Hauptnamemsansetzung aus dem Triplestore ),falls vorhanden, wenn nicht ist der String leer. | |
514 # #ausserdem einen Namen zum sortieren, = Tupel(nachname, vorname) | |
497 def getMainNameFromTripleStore(self,personID): | 515 def getMainNameFromTripleStore(self,personID): |
498 | 516 |
499 | 517 |
500 cmdString ="""select * where { <%s> <http://xmlns.com/foaf/0.1/name> ?name}"""%personID | 518 cmdString ="""select * where { <%s> <http://xmlns.com/foaf/0.1/name> ?name}"""%personID |
501 | 519 |
580 return names[1].replace('"','') # wir nehmen nur den ersten treffer | 598 return names[1].replace('"','') # wir nehmen nur den ersten treffer |
581 | 599 |
582 | 600 |
583 security.declareProtected('View management screens','changeTags') | 601 security.declareProtected('View management screens','changeTags') |
584 def changeTags(self,projectID,approaches=[],disciplines=[],periods=[],spaces=[],technologies=[],transfers=[],RESPONSE=None): | 602 def changeTags(self,projectID,approaches=[],disciplines=[],periods=[],spaces=[],technologies=[],transfers=[],RESPONSE=None): |
585 """change tags""" | 603 """Aendert die Tags im angegebenen Project""" |
586 self.changeTagFromList(projectID,"approaches", approaches) | 604 self.changeTagFromList(projectID,"approaches", approaches) |
587 self.changeTagFromList(projectID,"disciplines", disciplines) | 605 self.changeTagFromList(projectID,"disciplines", disciplines) |
588 self.changeTagFromList(projectID,"periods", periods) | 606 self.changeTagFromList(projectID,"periods", periods) |
589 self.changeTagFromList(projectID,"spaces", spaces) | 607 self.changeTagFromList(projectID,"spaces", spaces) |
590 self.changeTagFromList(projectID,"technologies", technologies) | 608 self.changeTagFromList(projectID,"technologies", technologies) |
591 self.changeTagFromList(projectID,"transfers", transfers) | 609 self.changeTagFromList(projectID,"transfers", transfers) |
592 | 610 |
593 self.projectObjects=self.projectObjects #necessesary to make the object persistent after the first call | 611 self.projectObjects=self.projectObjects #necessesary to make the object persistent after the first call |
594 self.projectHistoricalPlaces=self.projectHistoricalPlaces #necessesary to make the object persistent after the first call | 612 #self.projectHistoricalPlaces=self.projectHistoricalPlaces #necessesary to make the object persistent after the first call |
595 self.projectPersons=self.projectPersons #necessesary to make the object persistent after the first call | 613 self.projectPersons=self.projectPersons #necessesary to make the object persistent after the first call |
596 self.projectSuggestedTags=self.projectSuggestedTags | 614 self.projectSuggestedTags=self.projectSuggestedTags |
597 | 615 |
598 self.persons2Projects=self.persons2Projects | 616 self.persons2Projects=self.persons2Projects |
599 self.objects2Projects=self.objects2Projects | 617 self.objects2Projects=self.objects2Projects |
600 self.historicalPlaces2Projects=self.historicalPlaces2Projects | 618 #self.historicalPlaces2Projects=self.historicalPlaces2Projects |
601 self.suggestedTags2Projects=self.suggestedTags2Projects; | 619 self.suggestedTags2Projects=self.suggestedTags2Projects; |
602 | 620 |
603 self.suggestedPersons=self.suggestedPersons; | 621 self.suggestedPersons=self.suggestedPersons; |
604 | 622 |
605 security.declareProtected('View management screens','deleteAllTags') | 623 security.declareProtected('View management screens','deleteAllTags') |
606 def deleteAllTags(self): | 624 def deleteAllTags(self): |
607 """deleteAllTags - TODO: take this out!!,""" | 625 """deleteAllTags - TODO: take this out!!,""" |
608 setattr(self,"tags",None) | |
609 | 626 |
610 return "DONE!" | 627 return "DONE!" |
611 | 628 |
612 security.declareProtected('View management screens','deleteAllPersons') | 629 security.declareProtected('View management screens','deleteAllPersons') |
613 def deleteAllPersons(self): | 630 def deleteAllPersons(self): |
618 self.suggestedPersons= OOBTree(); #TODO: das sollte die ueberfluessig werde und nur im triple store stehen. | 635 self.suggestedPersons= OOBTree(); #TODO: das sollte die ueberfluessig werde und nur im triple store stehen. |
619 | 636 |
620 | 637 |
621 return "DONE!" | 638 return "DONE!" |
622 | 639 |
623 security.declareProtected('View management screens','deleteAllObjects') | 640 |
624 def deleteAllObjects(self): | |
625 """deleteAllTags - TODO: take this out!!,""" | |
626 logging.debug("delete all objects") | |
627 self.projectObjects= OOBTree() | |
628 self.objects2Projects=OOBTree() | |
629 | |
630 | |
631 return "DONE!" | |
632 | |
633 def changeTagFromList(self,projectID,tagType,tagList): | 641 def changeTagFromList(self,projectID,tagType,tagList): |
634 | 642 |
635 logging.debug("changing:"+projectID) | 643 |
636 logging.debug("asking tag::"+tagType) | 644 #hole alle tags des projektID vom Typ tagaTyle |
637 if type(tagList) is not ListType: | 645 if isinstance(tagList,str): |
638 tagList=[tagList] | 646 tagList=[tagList] |
639 | 647 |
640 | 648 tggsOfProject = self.getTagsFromDB(projectID,tagType) |
641 tags = getattr(self,"tags",None) | 649 for tagOfProject in tggsOfProject: |
642 if tags is None: | 650 if tagOfProject in tagList: |
643 logging.debug("Create new tags") | 651 #schon getagged |
644 tags=OOBTree() | 652 #nichts mehr zu tun spater |
645 setattr(self,"tags",tags) | 653 tagList.remove(tagOfProject) |
646 | |
647 | |
648 tagsStored=tags.get(tagType,None) | |
649 if tagsStored is None: | |
650 tagsStored=OOBTree(); | |
651 | |
652 | |
653 | |
654 for tag in tagsStored.keys(): #gehe durch alle gespeichteren tags | |
655 logging.debug("checking:"+tag) | |
656 projectsOfTag = tagsStored.get(tag,None) | |
657 logging.debug(projectsOfTag) | |
658 if projectsOfTag is None: | |
659 projectsOfTag=OOSet() | |
660 | |
661 if tag in tagList: #dieser ist getagged | |
662 projectsOfTag.update([projectID]); | |
663 self.storeChange("added",projectID,tag) | |
664 tagList.remove(tag); | |
665 else: | 654 else: |
666 if projectsOfTag.has_key(projectID): | 655 #nicht mehr getaggt |
667 projectsOfTag.remove(projectID); | 656 #delete Entry from database |
668 self.storeChange("remove",projectID,tag) | 657 self.deleteTagInDB(projectID,tagType,tagOfProject) |
669 | 658 |
670 tagsStored.update({tag:projectsOfTag}); | 659 |
671 | 660 |
672 for tag in tagList: # alle Tags, die nicht abgearbeitet worden sind, muessen noch angelegt werden | 661 #in der taglList sind jetzt nur noch die Tags uebrig die hinzugegefuegt werden muessen |
673 logging.debug("adding:"+tag) | 662 for tag in tagList: |
674 newApproach=OOSet() | 663 self.addTagToDB(projectID,tagType=tagType,tag=tag) |
675 newApproach.update([projectID]); | |
676 tagsStored.insert(tag, newApproach); | |
677 | |
678 tags.update({tagType:tagsStored}) | |
679 | 664 |
680 transaction.commit() | 665 transaction.commit() |
681 | 666 |
667 | |
668 def getTagsFromDB(self,projectID=None,tagType=None,startsWith=""): | |
669 # hole alle tags vom typ tagType des projectes mit ID | |
670 ql =[] | |
671 | |
672 if tagType is not None: | |
673 qs="select tag_name from thesaurus_tags where tag_type = %s" | |
674 ql.append(tagType) | |
675 else: | |
676 qs="select tag_name from thesaurus_tags" | |
677 | |
678 if projectID is not None: | |
679 qs=qs + " and id in (select tag_id as id from thesaurus_projects_tags where project_id = %s)" | |
680 ql.append(projectID) | |
681 | |
682 | |
683 res =self.executeZSQL(qs,ql) | |
684 | |
685 | |
686 if (startsWith is None) or (startsWith ==""): | |
687 ret = [r.tag_name for r in res] | |
688 else: | |
689 ret=[] | |
690 for r in res: | |
691 if r.tag_name.lower().startswith(startsWith): | |
692 ret.append(r.tag_name) | |
693 | |
694 logging.debug(ret) | |
695 return ret | |
696 | |
697 | |
698 def deleteTagInDB(self,projectID,tagType,tag): | |
699 # loesche den tag von typ tagType aus der dem Project | |
700 | |
701 # first get tag_id | |
702 | |
703 qs = "select id from thesaurus_tags where tag_type = %s and tag_name= %s" | |
704 logging.debug("DELETE") | |
705 ids = self.executeZSQL(qs,[tagType,tag]) | |
706 | |
707 for idR in ids: | |
708 qs = "delete from thesaurus_projects_tags where project_id=%s and tag_id=%s" | |
709 self.executeZSQL(qs,[projectID,idR.id]) | |
710 | |
711 logging.debug("DELETE-END") | |
712 return | |
713 | |
714 def addTagToDB(self,projectID,tagType=None,tag=None,tag_ID=None): | |
715 """fuege den tag vom typ tagType zum Project hinzu, wenn tag_ID wird zuerst genommen, die anderen Felder werden | |
716 nur genommen falls tag_ID None ist. | |
717 """ | |
718 | |
719 # schaue on es den tag schon gibt, wenn nicht anlegen | |
720 | |
721 if tag_ID is None and tagType is None and tag is None: | |
722 raise Exception("either tag_id or tag_type and tag shouldn't be None") | |
723 | |
724 | |
725 if tag_ID is not None: | |
726 qsSelect = "select id from thesaurus_tags where id = %s " | |
727 ids = self.executeZSQL(qsSelect,tag_ID) | |
728 else: | |
729 if tagType is None or tag is None: | |
730 raise Exception("tag_type and tag shouldn't be None") | |
731 | |
732 else: | |
733 qsSelect = "select id from thesaurus_tags where tag_type = %s and tag_name= %s" | |
734 ids = self.executeZSQL(qsSelect,[tagType,tag]) | |
735 | |
736 | |
737 logging.debug(ids) | |
738 logging.debug(len(ids)) | |
739 | |
740 | |
741 | |
742 | |
743 if len(ids) == 0: | |
744 if tag_ID is None: | |
745 qs = "insert into thesaurus_tags (tag_type,tag_name) values (%s,%s)" | |
746 self.executeZSQL(qs,[tagType,tag]) # anlegen | |
747 transaction.commit() | |
748 ids = self.executeZSQL(qsSelect,[tagType,tag]) #ids holen | |
749 | |
750 else: | |
751 raise Exception("no tag with tag_id: %s"%tag_ID) | |
752 | |
753 | |
754 for idResult in ids: | |
755 | |
756 #check if already in | |
757 qsSelect = "select id from thesaurus_projects_tags where project_id = %s and tag_id= %s" | |
758 | |
759 tag_ids = self.executeZSQL(qsSelect,[projectID,idResult.id]) | |
760 | |
761 if len (tag_ids) == 0: | |
762 | |
763 qs="insert into thesaurus_projects_tags (project_id,tag_id) values (%s,%s)" | |
764 | |
765 self.executeZSQL(qs,[projectID,idResult.id]) | |
766 | |
767 | |
768 | |
769 return ids[0].id #sollte eigentlich auch nur genau einen geben. | |
770 | |
771 | |
772 | |
682 def getTitle(self,entry): | 773 def getTitle(self,entry): |
683 return entry.title | 774 return entry.title |
684 | 775 |
685 def thes_quote(self,txt): | 776 def thes_quote(self,txt): |
686 import md5 | 777 import md5 |
751 | 842 |
752 def getTagsAsHash(self,projectID,tagType=None): | 843 def getTagsAsHash(self,projectID,tagType=None): |
753 """get all tags as hash or None if no tag exists""" | 844 """get all tags as hash or None if no tag exists""" |
754 retHash={} | 845 retHash={} |
755 | 846 |
756 tagCnt=0 | |
757 tags = getattr(self,"tags",None) | |
758 | |
759 if tags is None: | |
760 return; | |
761 | |
762 #falls nicht gesetzt | 847 #falls nicht gesetzt |
763 if tagType is None: | 848 if tagType is None: |
764 tagTypes = tags.keys() | 849 |
850 | |
851 tagTypes = [tag.tag_type for tag in self.executeZSQL("select distinct tag_type from thesaurus_tags")] | |
852 #tagTypes = tags.keys() | |
765 else: | 853 else: |
766 tagTypes = [tagType] | 854 tagTypes = [tagType] |
767 | 855 |
856 tagCnt=0 | |
768 for tagType in tagTypes: | 857 for tagType in tagTypes: |
769 tagsStored=tags.get(tagType,None) | 858 |
770 | 859 #retHash[tagType]=[] |
771 if tagsStored is None: | 860 tagCnt=0 |
772 # WTF: was: return | 861 |
773 continue | 862 tags =self.getTagsFromDB(projectID, tagType) |
774 | 863 if len(tags) !=0: |
775 retHash[tagType]=[] | 864 retHash[tagType] = [self.getLabel(tag,tagType) for tag in tags] |
776 | 865 tagCnt+=1 |
777 for tag in tagsStored.keys(): #gehe durch alle gespeichteren approached | 866 |
778 logging.debug("checking:"+tag) | |
779 currentTag = tagsStored.get(tag,None) | |
780 if currentTag is None: | |
781 continue | |
782 if currentTag.has_key(projectID): | |
783 tagCnt+=1 | |
784 retHash[tagType].append("""%s"""%tag) | |
785 | |
786 if len(retHash[tagType]) == 0: | |
787 # empty tag list | |
788 del retHash[tagType] | |
789 | 867 |
790 if tagCnt==0: | 868 if tagCnt==0: |
791 return None | 869 return None |
792 | 870 |
793 return retHash | 871 return retHash |
794 | 872 |
795 | 873 |
796 | 874 |
797 | 875 |
798 | 876 |
799 def getTagsJSON(self,projectID,tagType,RESPONSE=None): | 877 def getTagsJSON(self,projectID=None,tagType=None,startWith="",RESPONSE=None): |
800 """get all selected tagList""" | 878 """get all selected tags returs them as a list""" |
801 #logging.debug("asking:"+projectID) | 879 |
802 #logging.debug("asking tag::"+tagType) | 880 tags = self.getTagsFromDB(projectID, tagType,startWith) |
803 retList=[] | 881 |
804 tags = getattr(self,"tags",None) | |
805 if tags is None: | |
806 return; | |
807 | |
808 tagsStored=tags.get(tagType,None) | |
809 if tagsStored is None: | |
810 return; | |
811 | |
812 for tag in tagsStored.keys(): #gehe durch alle gespeichteren approached | |
813 logging.debug("checking:"+tag) | |
814 currentTag = tagsStored.get(tag,None) | |
815 if currentTag is None: | |
816 continue | |
817 if currentTag.has_key(projectID): | |
818 retList.append(""" "%s" """%tag) | |
819 | 882 |
820 if RESPONSE: | 883 if RESPONSE: |
821 RESPONSE.setHeader('Content-Type', "application/json") | 884 RESPONSE.setHeader('Content-Type', "application/json") |
822 | 885 |
823 logging.debug(retList) | 886 ret = json.dumps(tags) |
824 return "["+",".join(retList)+"]" | 887 |
888 | |
889 logging.debug(ret) | |
890 return ret | |
825 | 891 |
826 | 892 |
827 | 893 |
828 | 894 |
829 def getTags(self,projectID,projectTags,RESPONSE=None): | 895 |
830 """get all selected tagList""" | |
831 | |
832 #projectTags = self.getProjectsAndTags() | |
833 #logging.debug(projectTags) | |
834 | |
835 project = projectTags.get(projectID) | |
836 if project is None: | |
837 project = projectTags.get("/en/research/projects/"+projectID) #TODO fix this projectTag list from getProjectsAndTags()contains fullpath | |
838 if project is None: | |
839 return [] | |
840 retarray=[] | |
841 for tagType in self.tags.keys(): | |
842 tags = project.tags.get(tagType,['']) | |
843 retarray.append(utf8ify(";".join(tags))) | |
844 | |
845 | |
846 return retarray | |
847 # logging.debug("asking:"+projectID) | |
848 # | |
849 # | |
850 # apps = self.getApproaches()+ self.getDisciplines(); | |
851 # retList=[] | |
852 # for tagType in self.tags.keys(): | |
853 # | |
854 # logging.debug("asking tag::"+repr(tagType)) | |
855 # | |
856 # tags = getattr(self,"tags",None) | |
857 # if tags is None: | |
858 # continue; | |
859 # | |
860 # tagsStored=tags.get(tagType,None) | |
861 # if tagsStored is None: | |
862 # continue; | |
863 # | |
864 # for tag in tagsStored.keys(): #gehe durch alle gespeichteren approached | |
865 # logging.debug("checking:"+tag) | |
866 # currentTag = tagsStored.get(tag,None) | |
867 # if currentTag is None: | |
868 # continue | |
869 # if currentTag.has_key(projectID): | |
870 # retList.append(""" "%s" """%tag) | |
871 # | |
872 # if RESPONSE: | |
873 # RESPONSE.setHeader('Content-Type', "application/json") | |
874 # | |
875 # logging.debug(retList) | |
876 # return retList | |
877 | |
878 def getDisciplines(self): | 896 def getDisciplines(self): |
879 | 897 |
880 self.disciplines=self.getEntriesFromTxt(self.disciplinesTxt) | 898 self.disciplines=self.getEntriesFromTxt(self.disciplinesTxt) |
881 return self.disciplines | 899 return self.disciplines |
882 | 900 |
883 | 901 |
884 def getObjectsJSON(self,term="",RESPONSE=None): | 902 def getObjectsJSON(self,term="",RESPONSE=None): |
885 """ get all stored objects as json list starting with term""" | 903 """ get all stored objects as json list starting with term, |
904 need this for autocompletion from JQUERY which ads ?term= to the URL""" | |
886 term=term.lower(); | 905 term=term.lower(); |
887 logging.debug("Asking:"+term) | 906 |
888 #objectList=["baus","berg","lurg"] | 907 return self.getTagsJSON(tagType="object", startWith=term, RESPONSE=RESPONSE) |
889 objects = self.objects2Projects; | 908 |
890 | 909 |
891 objectList= [x for x in objects.keys()] | 910 # |
892 | 911 # logging.debug("Asking:"+term) |
893 logging.debug("Create:"+repr(objectList)) | 912 # #objectList=["baus","berg","lurg"] |
894 retList=[] | 913 # objects = self.objects2Projects; |
895 for object in objectList: | 914 # |
896 if object.find(term)>-1: | 915 # objectList= [x for x in objects.keys()] |
897 retList.append(""" "%s" """%object) | 916 # |
898 ret="[" | 917 # logging.debug("Create:"+repr(objectList)) |
899 ret+=",".join(retList) | 918 # retList=[] |
900 ret+="]" | 919 # for object in objectList: |
901 logging.debug("Objects:"+ret) | 920 # if object.find(term)>-1: |
902 if RESPONSE: | 921 # retList.append(""" "%s" """%object) |
903 RESPONSE.setHeader('Content-Type', "application/json") | 922 # ret="[" |
904 return ret | 923 # ret+=",".join(retList) |
905 | 924 # ret+="]" |
906 | 925 # logging.debug("Objects:"+ret) |
907 def getHistoricalPlacesJSON(self,term="",RESPONSE=None): | 926 # if RESPONSE: |
908 """ get all stored historicalPlaces as json list starting with term""" | 927 # RESPONSE.setHeader('Content-Type', "application/json") |
909 term=term.lower(); | 928 # return ret |
910 logging.debug("Asking:"+term) | 929 # |
911 #historicalPlaceList=["baus","berg","lurg"] | 930 |
912 historicalPlaces = self.historicalPlaces2Projects; | 931 # def getHistoricalPlacesJSON(self,term="",RESPONSE=None): |
913 | 932 # """ get all stored historicalPlaces as json list starting with term""" |
914 historicalPlaceList= [x for x in historicalPlaces.keys()] | 933 # term=term.lower(); |
915 | 934 # logging.debug("Asking:"+term) |
916 logging.debug("Create:"+repr(historicalPlaceList)) | 935 # #historicalPlaceList=["baus","berg","lurg"] |
917 retList=[] | 936 # historicalPlaces = self.historicalPlaces2Projects; |
918 for historicalPlace in historicalPlaceList: | 937 # |
919 if historicalPlace.find(term)>-1: | 938 # historicalPlaceList= [x for x in historicalPlaces.keys()] |
920 retList.append(""" "%s" """%historicalPlace) | 939 # |
921 ret="[" | 940 # logging.debug("Create:"+repr(historicalPlaceList)) |
922 ret+=",".join(retList) | 941 # retList=[] |
923 ret+="]" | 942 # for historicalPlace in historicalPlaceList: |
924 logging.debug("historicalPlaces:"+ret) | 943 # if historicalPlace.find(term)>-1: |
925 if RESPONSE: | 944 # retList.append(""" "%s" """%historicalPlace) |
926 RESPONSE.setHeader('Content-Type', "application/json") | 945 # ret="[" |
927 return ret | 946 # ret+=",".join(retList) |
947 # ret+="]" | |
948 # logging.debug("historicalPlaces:"+ret) | |
949 # if RESPONSE: | |
950 # RESPONSE.setHeader('Content-Type', "application/json") | |
951 # return ret | |
928 | 952 |
929 | 953 |
930 def getPeriods(self): | 954 def getPeriods(self): |
931 | 955 |
932 self.periodes=self.getEntriesFromTxt(self.periodsTxt) | 956 self.periodes=self.getEntriesFromTxt(self.periodsTxt) |
946 | 970 |
947 self.knowledgeTransfers=self.getEntriesFromTxt(self.knowledgeTransfersTxt) | 971 self.knowledgeTransfers=self.getEntriesFromTxt(self.knowledgeTransfersTxt) |
948 return self.knowledgeTransfers | 972 return self.knowledgeTransfers |
949 | 973 |
950 | 974 |
951 def getObjectsFromProject(self,projectID): | 975 # def getObjectsFromProject(self,projectID): |
952 return self.getFromProject(self.projectObjects,projectID); | 976 # return self.getFromProject(self.projectObjects,projectID); |
953 | 977 # |
954 def getHistoricalPlacesFromProject(self,projectID): | 978 # def getHistoricalPlacesFromProject(self,projectID): |
955 return self.getFromProject(self.projectHistoricalPlaces,projectID); | 979 # return self.getFromProject(self.projectHistoricalPlaces,projectID); |
956 | 980 |
957 def getSuggestedTagsFromProject(self,projectID): | 981 def getSuggestedTagsFromProject(self,projectID): |
958 return self.getFromProject(self.projectSuggestedTags,projectID); | 982 return self.getFromProject(self.projectSuggestedTags,projectID); |
959 | 983 |
960 | 984 |
961 def getPersonsFromProject(self,projectID): | 985 # def getPersonsFromProject(self,projectID): |
962 #hole alle personenID die zu einem Projekt gehoeren. | 986 # #hole alle personenID die zu einem Projekt gehoeren. |
963 #zurueckgegeben wird ein OOSet() | 987 # #zurueckgegeben wird ein OOSet() |
964 return self.getFromProject(self.projectPersons,projectID); | 988 # return self.getFromProject(self.projectPersons,projectID); |
965 | 989 # |
966 def getFromProject(self,objects,projectID): | 990 def getFromProject(self,objects,projectID): |
967 #holt die zu projectID gehoerigen objekte aus dem objects-set. | 991 #holt die zur projectID gehoerigen objekte aus dem objects-set. |
968 #oder legt einen neuen leeren Satz zu dieser ProjektID an. | 992 #oder legt einen neuen leeren Satz zu dieser ProjektID an. |
969 #zuruecgegeben wird ein OOSet() | 993 #zuruecgegeben wird ein OOSet() |
970 if objects.has_key(projectID): #wenn zu der ProjektID schon etwas abgespeichter ist, gieb es zurueck | 994 if objects.has_key(projectID): #wenn zu der ProjektID schon etwas abgespeichter ist, gibt es zurueck |
971 logging.debug("key exists:"+projectID) | 995 logging.debug("key exists:"+projectID) |
972 persons=objects.get(projectID); | 996 entries=objects.get(projectID); |
973 else: # andernfalls lege einen neuen Satz an. | 997 else: # andernfalls lege einen neuen Satz an. |
974 persons=OOSet() | 998 entries=OOSet() |
975 objects.update({projectID:persons}) | 999 objects.update({projectID:entries}) |
976 logging.debug("key does not exists:"+projectID) | 1000 logging.debug("key does not exists:"+projectID) |
977 | 1001 |
978 | 1002 |
979 return persons | 1003 return entries |
980 | 1004 |
981 def getHistoricalPlacesFromProjectAsHTML(self,projectID): | 1005 # def getHistoricalPlacesFromProjectAsHTML(self,projectID): |
982 """gertobjects""" | 1006 # """gertobjects""" |
983 return self.getFromProjectAsHTML(self.projectHistoricalPlaces, projectID, "HistoricalPlace"); | 1007 # return self.getFromProjectAsHTML(self.projectHistoricalPlaces, projectID, "HistoricalPlace"); |
984 | 1008 |
985 def getObjectsFromProjectAsHTML(self,projectID): | 1009 def getObjectsFromProjectAsHTML(self,projectID): |
986 """gertobjects""" | 1010 """gertobjects""" |
987 return self.getFromProjectAsHTML(self.projectObjects, projectID, "Object"); | 1011 return self.getFromProjectAsHTML( projectID, "object"); |
988 | 1012 |
989 def getPersonsFromProjectAsHTML(self,projectID): | 1013 def getPersonsFromProjectAsHTML(self,projectID): |
990 """getpersons""" | 1014 """getpersons""" |
991 return self.getFromProjectAsHTML(self.projectPersons, projectID, "Person"); | 1015 return self.getFromProjectAsHTML(projectID, "person"); |
992 | 1016 |
993 | 1017 |
994 def getFromProjectAsHTML(self,objects,projectID,type): | 1018 def getLabel(self,tag,tagType): |
995 """getpersons""" | 1019 |
1020 qsSelect = "select tag_label from thesaurus_tags where tag_type = %s and tag_name= %s" | |
1021 | |
1022 ids = self.executeZSQL(qsSelect,[tagType,tag]) #ids holen | |
1023 | |
1024 | |
1025 if len(ids)==0: #sollte eigentlich nicht sein | |
1026 return None | |
1027 | |
1028 #es sollte nur genau einen geben, alle anderen werden ignoriert- | |
1029 | |
1030 if ids[0].tag_label is None or ids[0].tag_label == '': | |
1031 return tag | |
1032 | |
1033 else: | |
1034 return ids[0].tag_label | |
1035 | |
1036 | |
1037 | |
1038 | |
1039 | |
1040 def addLabel(self,tagID,label): | |
1041 """Fuege zu einem tag mit tagID den Label hinzu""" | |
1042 qs = "update thesaurus_tags set tag_label=%s where id=%s" | |
1043 | |
1044 self.executeZSQL(qs,[label,tagID]) # anlegen | |
1045 transaction.commit() | |
1046 | |
1047 | |
1048 | |
1049 | |
1050 | |
1051 | |
1052 def getFromProjectAsHTML(self,projectID,tagType): | |
1053 """Hole die Tags vom entsprechenden Tag-Type aus der Datenbank""" | |
996 ret="" | 1054 ret="" |
997 if objects.has_key(projectID): | 1055 |
998 persons=objects.get(projectID); | 1056 tags = self.getTagsFromDB(projectID, tagType, None); |
999 else: | 1057 |
1000 persons=OOSet() | 1058 for tag in tags: |
1001 | 1059 |
1002 | 1060 tagLabel = self.getLabel(tag,tagType) |
1003 for person in persons: | 1061 |
1004 ret+="""<div class="removeButton"> | 1062 ret+="""<div class="removeButton"> |
1005 <span>%s </span><div style="display:inline" class="remove%s"><span style="display:none" class="removeValue">%s</span>remove</div> | 1063 <span>%s </span><div style="display:inline" class="remove%s"><span style="display:none" class="removeValue">%s</span>remove</div> |
1006 </div>"""%(person[1],type,person[0]) | 1064 </div>"""%(tagLabel,tagType,tag) |
1007 | 1065 |
1008 | 1066 |
1009 # ret+="""<div> | 1067 # ret+="""<div> |
1010 # <input type="checkbox" name="persons_remove" | 1068 # <input tagType="checkbox" name="persons_remove" |
1011 # value="%s"> | 1069 # value="%s"> |
1012 # <span>%s</span> | 1070 # <span>%s</span> |
1013 # </div>"""%(person[0],person[1]) | 1071 # </div>"""%(person[0],person[1]) |
1014 # | 1072 # |
1015 logging.debug(type+":"+ret) | 1073 logging.debug(tagType+":"+ret) |
1016 return ret | 1074 return ret |
1017 | 1075 |
1018 security.declareProtected('View management screens','removeHistoricalPlaceFromProject') | 1076 # security.declareProtected('View management screens','removeHistoricalPlaceFromProject') |
1019 def removeHistoricalPlaceFromProject(self,projectID,value): | 1077 # def removeHistoricalPlaceFromProject(self,projectID,value): |
1020 """remove""" | 1078 # """remove""" |
1021 logging.debug("removeHP:"+projectID+":"+value); | 1079 # logging.debug("removeHP:"+projectID+":"+value); |
1022 | 1080 # |
1023 HistoricalPlaces = self.getHistoricalPlacesFromProject(projectID) | 1081 # HistoricalPlaces = self.getHistoricalPlacesFromProject(projectID) |
1024 for HistoricalPlace in HistoricalPlaces.keys(): | 1082 # for HistoricalPlace in HistoricalPlaces.keys(): |
1025 | 1083 # |
1026 logging.debug("trying:"+repr(HistoricalPlace[0])+"::"+repr(value)+"__") | 1084 # logging.debug("trying:"+repr(HistoricalPlace[0])+"::"+repr(value)+"__") |
1027 if HistoricalPlace[0]==value: | 1085 # if HistoricalPlace[0]==value: |
1028 logging.debug("---removed!") | 1086 # logging.debug("---removed!") |
1029 HistoricalPlaces.remove(HistoricalPlace) | 1087 # HistoricalPlaces.remove(HistoricalPlace) |
1030 | 1088 # |
1031 self.projectHistoricalPlaces.update({projectID:HistoricalPlaces}) | 1089 # self.projectHistoricalPlaces.update({projectID:HistoricalPlaces}) |
1032 retstring = self.getHistoricalPlacesFromProjectAsHTML(projectID) | 1090 # retstring = self.getHistoricalPlacesFromProjectAsHTML(projectID) |
1033 logging.debug(retstring) | 1091 # logging.debug(retstring) |
1034 return retstring | 1092 # return retstring |
1035 | 1093 # |
1036 security.declareProtected('View management screens','removeObjectFromProject') | 1094 security.declareProtected('View management screens','removeObjectFromProject') |
1037 def removeObjectFromProject(self,projectID,value): | 1095 def removeObjectFromProject(self,projectID,value): |
1038 """remove""" | 1096 """remove an object from the list""" |
1039 logging.debug("remove:"+projectID+":"+value); | 1097 logging.debug("remove:"+projectID+":"+value); |
1040 | 1098 |
1041 | 1099 |
1042 self.storeChange("removeObject",projectID,value) | 1100 self.storeChange("removeObject",projectID,value) |
1043 | 1101 |
1044 objects = self.getObjectsFromProject(projectID) | 1102 self.deleteTagInDB(projectID, "object", value) |
1045 for object in objects.keys(): | 1103 |
1046 | |
1047 logging.debug("trying:"+repr(object[0])+"::"+repr(value)+"__") | |
1048 if object[0]==value: | |
1049 logging.debug("---removed!") | |
1050 objects.remove(object) | |
1051 | |
1052 #now also delete the project from the object. | |
1053 objectsOfPerson=self.objects2Projects.get(object[0]) | |
1054 | |
1055 | |
1056 if projectID in list(objectsOfPerson): | |
1057 objectsOfPerson.remove(projectID) | |
1058 #self.persons2Projects.update({person:projectsList}) | |
1059 if (len(objectsOfPerson)==0): #loesche person aus der liste wenn keine Projekte dazu existieren. | |
1060 del self.objects2Projects[object[0]] | |
1061 | |
1062 self.projectObjects.update({projectID:objects}) | |
1063 retstring = self.getObjectsFromProjectAsHTML(projectID) | 1104 retstring = self.getObjectsFromProjectAsHTML(projectID) |
1064 logging.debug(retstring) | 1105 logging.debug(retstring) |
1065 return retstring | 1106 return retstring |
1107 | |
1066 | 1108 |
1067 security.declareProtected('View management screens','removePersonFromProject') | 1109 security.declareProtected('View management screens','removePersonFromProject') |
1068 def removePersonFromProject(self,projectID,value): | 1110 def removePersonFromProject(self,projectID,value): |
1069 """remove a person from the projeckt""" | 1111 """remove a person from the projeckt""" |
1070 logging.debug("remove:"+projectID+":"+value); | 1112 logging.debug("remove:"+projectID+":"+value); |
1071 self.storeChange("removePerson",projectID,value) | 1113 self.storeChange("removePerson",projectID,value) |
1072 | 1114 |
1073 persons = self.getPersonsFromProject(projectID) # hole alle personen die mit dem Projekt verbunden sind. | 1115 |
1074 for person in persons.keys(): | 1116 self.deleteTagInDB(projectID, "person", value) |
1075 | 1117 |
1076 logging.debug("trying:"+repr(person[0])+"::"+repr(value)+"__") | |
1077 if person[0]==value:#person ist die zuloeschende, dann raus damit | |
1078 | |
1079 logging.debug("---removed!") | |
1080 persons.remove(person) | |
1081 | |
1082 #now also delete the project from the person. | |
1083 projectsOfPerson=self.persons2Projects.get(person[0]) | |
1084 logging.debug(projectsOfPerson) | |
1085 if projectID in list(projectsOfPerson): | |
1086 projectsOfPerson.remove(projectID) | |
1087 #self.persons2Projects.update({person:projectsList}) | |
1088 if (len(projectsOfPerson)==0): #loesche person aus der liste wenn keine Projekte dazu existieren. | |
1089 del self.persons2Projects[person[0]] | |
1090 | |
1091 | |
1092 #self.projectPersons.update({projectID:persons}) | |
1093 retstring = self.getPersonsFromProjectAsHTML(projectID) | 1118 retstring = self.getPersonsFromProjectAsHTML(projectID) |
1094 logging.debug(retstring) | 1119 logging.debug(retstring) |
1095 return retstring | 1120 return retstring |
1096 | 1121 |
1097 | 1122 |
1109 security.declareProtected('View management screens','addPersonToProject') | 1134 security.declareProtected('View management screens','addPersonToProject') |
1110 def addPersonToProject(self,projectID,value,label): | 1135 def addPersonToProject(self,projectID,value,label): |
1111 """ add a person so the project""" | 1136 """ add a person so the project""" |
1112 self.storeChange("addPerson",projectID,value+":"+label) | 1137 self.storeChange("addPerson",projectID,value+":"+label) |
1113 | 1138 |
1114 persons=self.getPersonsFromProject(projectID); | 1139 |
1115 | |
1116 logging.debug("adding:"+projectID+":"+value+":"+label); | 1140 logging.debug("adding:"+projectID+":"+value+":"+label); |
1117 | 1141 |
1118 persons.insert([value,label]) | 1142 personID = self.addTagToDB(projectID, tagType="person", tag=value) ##lege neue Person an oder gib exitierende ID |
1119 self.projectPersons.update({projectID:persons}) | 1143 |
1120 | 1144 self.addLabel(personID,label) |
1121 for personTuple in persons: | 1145 |
1122 #hole die abgespeicherten Projekte zu einer Person | 1146 |
1123 person=personTuple[0] #hole die ID | |
1124 | |
1125 | |
1126 if getattr(self,"persons2Projects",None)==None: | |
1127 setattr(self,"persons2Projects",OOBTree()) | |
1128 | |
1129 projects = self.persons2Projects.get(person,None) | |
1130 logging.debug("found projects:"+ repr(projects)) | |
1131 if projects is None: #person hatte noch keine projekte | |
1132 projects=OOSet(); | |
1133 | |
1134 projects.insert(projectID ) | |
1135 logging.debug("update:"+person) | |
1136 self.persons2Projects.update({person:projects}) | |
1137 | |
1138 self.addPersonAndFirstNameFromTripleStore(person) | |
1139 self.generateSortingOrderForPersonIDs(); | |
1140 | |
1141 self.addNameTOPersonIDNames(value,label) | |
1142 retstring = self.getPersonsFromProjectAsHTML(projectID) | 1147 retstring = self.getPersonsFromProjectAsHTML(projectID) |
1143 logging.debug(retstring) | 1148 logging.debug(retstring) |
1144 transaction.commit() | 1149 transaction.commit() |
1145 return retstring | 1150 return retstring |
1146 | 1151 |
1147 | 1152 |
1148 | 1153 |
1149 def rearangePersonIDsHTML(self,REQUEST=None): | 1154 # def rearangePersonIDsHTML(self,REQUEST=None): |
1150 """setze neue ID zu personen""" | 1155 # """setze neue ID zu personen""" |
1151 ret=[] | 1156 # ret=[] |
1152 for personID in self.persons2Projects.keys(): | 1157 # for personID in self.persons2Projects.keys(): |
1153 logging.debug(personID) | 1158 # logging.debug(personID) |
1154 | 1159 # |
1155 masterID,name=self.findMasterIDAndName(personID.rstrip().lstrip()) | 1160 # masterID,name=self.findMasterIDAndName(personID.rstrip().lstrip()) |
1156 logging.debug(" masterID -appending") | 1161 # logging.debug(" masterID -appending") |
1157 logging.debug(repr(name)) | 1162 # logging.debug(repr(name)) |
1158 if len(name)==0: | 1163 # if len(name)==0: |
1159 name=[''] | 1164 # name=[''] |
1160 ret.append((personID,self.personIDtoNames.get(personID,[''])[0],masterID,self.personIDtoNames.get(masterID,name)[0])) | 1165 # ret.append((personID,self.personIDtoNames.get(personID,[''])[0],masterID,self.personIDtoNames.get(masterID,name)[0])) |
1161 | 1166 # |
1162 | 1167 # |
1163 if REQUEST: | 1168 # if REQUEST: |
1164 pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','rearrangePersons.zpt')).__of__(self) | 1169 # pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','rearrangePersons.zpt')).__of__(self) |
1165 return pt(changeList=ret,lookupUrl=self.PERSONS_LOOKUP_URL,editURL=self.EDIT_URL); | 1170 # return pt(changeList=ret,lookupUrl=self.PERSONS_LOOKUP_URL,editURL=self.EDIT_URL); |
1166 else: | 1171 # else: |
1167 return ret; | 1172 # return ret; |
1168 | 1173 # |
1169 def rearangePersonIDs(self,REQUEST): | 1174 # def rearangePersonIDs(self,REQUEST): |
1170 """unify a list of persons""" | 1175 # """unify a list of persons""" |
1171 | 1176 # |
1172 argv=REQUEST.form; | 1177 # argv=REQUEST.form; |
1173 logging.debug(repr(argv)) | 1178 # logging.debug(repr(argv)) |
1174 changes=argv['changes'] | 1179 # changes=argv['changes'] |
1175 if isinstance(changes,str): | 1180 # if isinstance(changes,str): |
1176 changes=[changes] | 1181 # changes=[changes] |
1177 | 1182 # |
1178 changeList=self.rearangePersonIDsHTML() | 1183 # changeList=self.rearangePersonIDsHTML() |
1179 personToMaster={} | 1184 # personToMaster={} |
1180 logging.debug("changelist:"+repr(changeList)) | 1185 # logging.debug("changelist:"+repr(changeList)) |
1181 #aendere person2project | 1186 # #aendere person2project |
1182 for change in changes: | 1187 # for change in changes: |
1183 changeItem=changeList[int(change)]; | 1188 # changeItem=changeList[int(change)]; |
1184 masterID=argv['newID_'+change].lstrip().rstrip() #make sure no spaces | 1189 # masterID=argv['newID_'+change].lstrip().rstrip() #make sure no spaces |
1185 personID=changeItem[0] | 1190 # personID=changeItem[0] |
1186 | 1191 # |
1187 personToMaster[personID]=masterID | 1192 # personToMaster[personID]=masterID |
1188 masterIDProjects = self.persons2Projects.get(masterID,None); | 1193 # masterIDProjects = self.persons2Projects.get(masterID,None); |
1189 if masterIDProjects==None: | 1194 # if masterIDProjects==None: |
1190 masterIDProjects=OOSet(); | 1195 # masterIDProjects=OOSet(); |
1191 #ret.append((personID,self.personIDtoNames.get(personID,[''])[0],masterID,self.personIDtoNames.get(masterID,[''])[0])) | 1196 # #ret.append((personID,self.personIDtoNames.get(personID,[''])[0],masterID,self.personIDtoNames.get(masterID,[''])[0])) |
1192 | 1197 # |
1193 oldProjects= self.persons2Projects.get(personID) | 1198 # oldProjects= self.persons2Projects.get(personID) |
1194 logging.debug("personID:"+repr(personID)) | 1199 # logging.debug("personID:"+repr(personID)) |
1195 logging.debug("masterID:"+repr(masterID)) | 1200 # logging.debug("masterID:"+repr(masterID)) |
1196 logging.debug("keys:"+repr(self.persons2Projects.keys())) | 1201 # logging.debug("keys:"+repr(self.persons2Projects.keys())) |
1197 logging.debug("oldProjects:"+repr(oldProjects)) | 1202 # logging.debug("oldProjects:"+repr(oldProjects)) |
1198 masterIDProjects.update(oldProjects) | 1203 # masterIDProjects.update(oldProjects) |
1199 self.persons2Projects.update({masterID:masterIDProjects}) | 1204 # self.persons2Projects.update({masterID:masterIDProjects}) |
1200 self.persons2Projects.pop(personID) | 1205 # self.persons2Projects.pop(personID) |
1201 | 1206 # |
1202 self.addPersonAndFirstNameFromTripleStore(masterID) #addpersontotiplestore | 1207 # self.addPersonAndFirstNameFromTripleStore(masterID) #addpersontotiplestore |
1203 | 1208 # |
1204 logging.debug("Change:" +personID+":"+ masterID) | 1209 # logging.debug("Change:" +personID+":"+ masterID) |
1205 | 1210 # |
1206 if personID!=masterID: | 1211 # if personID!=masterID: |
1207 self.addSameAsRelationToTripleStore(personID,masterID) | 1212 # self.addSameAsRelationToTripleStore(personID,masterID) |
1208 | 1213 # |
1209 #aendere nun projectperson | 1214 # #aendere nun projectperson |
1210 logging.debug(personToMaster) | 1215 # logging.debug(personToMaster) |
1211 for project in self.projectPersons.keys(): | 1216 # for project in self.projectPersons.keys(): |
1212 personsNew=OOSet() | 1217 # personsNew=OOSet() |
1213 | 1218 # |
1214 persons=self.projectPersons.get(project) | 1219 # persons=self.projectPersons.get(project) |
1215 for person in persons: | 1220 # for person in persons: |
1216 personsNew.insert([personToMaster.get(person[0],person[0]),person[1]]) | 1221 # personsNew.insert([personToMaster.get(person[0],person[0]),person[1]]) |
1217 logging.debug("REPLACE in:"+project+":" +repr(person)+" by "+ repr(personToMaster.get(person[0],person[0]))) | 1222 # logging.debug("REPLACE in:"+project+":" +repr(person)+" by "+ repr(personToMaster.get(person[0],person[0]))) |
1218 self.projectPersons.update({project:personsNew}) | 1223 # self.projectPersons.update({project:personsNew}) |
1219 | 1224 # |
1220 self.generateSortingOrderForPersonIDs(); #now sort the new names | 1225 # self.generateSortingOrderForPersonIDs(); #now sort the new names |
1221 return personToMaster | 1226 # return personToMaster |
1222 #fuehre personen zusammen die ueber owl:sameAs verbunden sind | 1227 # #fuehre personen zusammen die ueber owl:sameAs verbunden sind |
1223 def getUnifyPersonsList(self,REQUEST=None): | 1228 # def getUnifyPersonsList(self,REQUEST=None): |
1224 """vereinheitlichung der personen auf eine ID aus der GND, wenn moeglich""" | 1229 # """vereinheitlichung der personen auf eine ID aus der GND, wenn moeglich""" |
1225 ret=[] | 1230 # ret=[] |
1226 for personID in self.persons2Projects.keys(): | 1231 # for personID in self.persons2Projects.keys(): |
1227 masterID,name=self.findMasterIDAndName(personID) | 1232 # masterID,name=self.findMasterIDAndName(personID) |
1228 logging.debug("masterID:"+masterID) | 1233 # logging.debug("masterID:"+masterID) |
1229 if (masterID is not None) and (masterID is not "") and (not personID==masterID): | 1234 # if (masterID is not None) and (masterID is not "") and (not personID==masterID): |
1230 #masterIDProjects = self.persons2Projects.get(masterID,None); | 1235 # #masterIDProjects = self.persons2Projects.get(masterID,None); |
1231 ##if masterIDProjects==None: | 1236 # ##if masterIDProjects==None: |
1232 # masterIDProjects=OOSet(); | 1237 # # masterIDProjects=OOSet(); |
1233 logging.debug(" masterID -appending") | 1238 # logging.debug(" masterID -appending") |
1234 logging.debug(repr(name)) | 1239 # logging.debug(repr(name)) |
1235 | 1240 # |
1236 | 1241 # |
1237 ret.append((personID,self.personIDtoNames.get(personID,[''])[0],masterID,self.personIDtoNames.get(masterID,name)[0])) | 1242 # ret.append((personID,self.personIDtoNames.get(personID,[''])[0],masterID,self.personIDtoNames.get(masterID,name)[0])) |
1238 #masterIDProjects.update(self.persons2Projects.get(personID)); | 1243 # #masterIDProjects.update(self.persons2Projects.get(personID)); |
1239 #self.persons2Projects.update({masterID:masterIDProjects}); | 1244 # #self.persons2Projects.update({masterID:masterIDProjects}); |
1240 | 1245 # |
1241 | 1246 # |
1242 if REQUEST: | 1247 # if REQUEST: |
1243 pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','unifyPersons.zpt')).__of__(self) | 1248 # pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','unifyPersons.zpt')).__of__(self) |
1244 return pt(changeList=ret); | 1249 # return pt(changeList=ret); |
1245 | 1250 # |
1246 else: | 1251 # else: |
1247 return ret; | 1252 # return ret; |
1248 | 1253 # |
1249 def unifyPersons(self,changes,REQUEST=None): | 1254 # def unifyPersons(self,changes,REQUEST=None): |
1250 """unify a list of persons""" | 1255 # """unify a list of persons""" |
1251 | 1256 # |
1252 if isinstance(changes,str): | 1257 # if isinstance(changes,str): |
1253 changes=[changes] | 1258 # changes=[changes] |
1254 | 1259 # |
1255 changeList=self.getUnifyPersonsList(); | 1260 # changeList=self.getUnifyPersonsList(); |
1256 personToMaster={} | 1261 # personToMaster={} |
1257 logging.debug("changelist:"+repr(changeList)) | 1262 # logging.debug("changelist:"+repr(changeList)) |
1258 #aendere person2project | 1263 # #aendere person2project |
1259 for change in changes: | 1264 # for change in changes: |
1260 changeItem=changeList[int(change)]; | 1265 # changeItem=changeList[int(change)]; |
1261 masterID=changeItem[2] | 1266 # masterID=changeItem[2] |
1262 personID=changeItem[0] | 1267 # personID=changeItem[0] |
1263 | 1268 # |
1264 personToMaster[personID]=masterID | 1269 # personToMaster[personID]=masterID |
1265 masterIDProjects = self.persons2Projects.get(masterID,None); | 1270 # masterIDProjects = self.persons2Projects.get(masterID,None); |
1266 if masterIDProjects==None: | 1271 # if masterIDProjects==None: |
1267 masterIDProjects=OOSet(); | 1272 # masterIDProjects=OOSet(); |
1268 #ret.append((personID,self.personIDtoNames.get(personID,[''])[0],masterID,self.personIDtoNames.get(masterID,[''])[0])) | 1273 # #ret.append((personID,self.personIDtoNames.get(personID,[''])[0],masterID,self.personIDtoNames.get(masterID,[''])[0])) |
1269 | 1274 # |
1270 oldProjects= self.persons2Projects.get(personID) | 1275 # oldProjects= self.persons2Projects.get(personID) |
1271 logging.debug("personID:"+repr(personID)) | 1276 # logging.debug("personID:"+repr(personID)) |
1272 logging.debug("masterID:"+repr(masterID)) | 1277 # logging.debug("masterID:"+repr(masterID)) |
1273 logging.debug("keys:"+repr(self.persons2Projects.keys())) | 1278 # logging.debug("keys:"+repr(self.persons2Projects.keys())) |
1274 logging.debug("oldProjects:"+repr(oldProjects)) | 1279 # logging.debug("oldProjects:"+repr(oldProjects)) |
1275 masterIDProjects.update(oldProjects) | 1280 # masterIDProjects.update(oldProjects) |
1276 self.persons2Projects.update({masterID:masterIDProjects}) | 1281 # self.persons2Projects.update({masterID:masterIDProjects}) |
1277 self.persons2Projects.pop(personID) | 1282 # self.persons2Projects.pop(personID) |
1278 | 1283 # |
1279 self.addPersonAndFirstNameFromTripleStore(masterID) #addpersontotiplestore | 1284 # self.addPersonAndFirstNameFromTripleStore(masterID) #addpersontotiplestore |
1280 | 1285 # |
1281 logging.debug("Change:" +personID+":"+ masterID) | 1286 # logging.debug("Change:" +personID+":"+ masterID) |
1282 | 1287 # |
1283 #aendere nun projectperson | 1288 # #aendere nun projectperson |
1284 logging.debug(personToMaster) | 1289 # logging.debug(personToMaster) |
1285 for project in self.projectPersons.keys(): | 1290 # for project in self.projectPersons.keys(): |
1286 personsNew=OOSet() | 1291 # personsNew=OOSet() |
1287 | 1292 # |
1288 persons=self.projectPersons.get(project) | 1293 # persons=self.projectPersons.get(project) |
1289 for person in persons: | 1294 # for person in persons: |
1290 personsNew.insert([personToMaster.get(person[0],person[0]),person[1]]) | 1295 # personsNew.insert([personToMaster.get(person[0],person[0]),person[1]]) |
1291 logging.debug("REPLACE in:"+project+":" +repr(person)+" by "+ repr(personToMaster.get(person[0],person[0]))) | 1296 # logging.debug("REPLACE in:"+project+":" +repr(person)+" by "+ repr(personToMaster.get(person[0],person[0]))) |
1292 self.projectPersons.update({project:personsNew}) | 1297 # self.projectPersons.update({project:personsNew}) |
1293 | 1298 # |
1294 self.generateSortingOrderForPersonIDs(); #now sort the new names | 1299 # self.generateSortingOrderForPersonIDs(); #now sort the new names |
1295 return personToMaster | 1300 # return personToMaster |
1296 | 1301 # |
1297 | 1302 # |
1298 | 1303 |
1299 def findMasterIDAndName(self,ressourceID): | 1304 def findMasterIDAndName(self,ressourceID): |
1300 queryString="""select * | 1305 queryString="""select * |
1301 FROM <file://mpiwg_persons_dnb.rdf> | 1306 FROM <file://mpiwg_persons_dnb.rdf> |
1302 FROM <file://mpiwg_persons_2.rdf> | 1307 FROM <file://mpiwg_persons_2.rdf> |
1319 if len(entries)>0: | 1324 if len(entries)>0: |
1320 return entries[0][0],entries[0][5:8] #nur den ersten Treffer und nur die personID | 1325 return entries[0][0],entries[0][5:8] #nur den ersten Treffer und nur die personID |
1321 | 1326 |
1322 | 1327 |
1323 return None,None | 1328 return None,None |
1324 | 1329 |
1330 | |
1331 | |
1332 def getPersonsWithProjectsSortedkeys(self): | |
1333 | |
1334 def sortF(x,y): | |
1335 return cmp(x.lower(),y.lower()) | |
1336 keys = [x for x in self.getPersonsWithProjects().keys()] | |
1337 keys.sort(sortF) | |
1338 return keys | |
1339 | |
1325 security.declareProtected('View','getPersonsWithProjectIDs') | 1340 security.declareProtected('View','getPersonsWithProjectIDs') |
1326 def getPersonsWithProjectIDs(self,check=False): | 1341 |
1342 def getPersonsWithProjects(self,check=False): | |
1327 """holt die getaggted Personen mit Projekten""" | 1343 """holt die getaggted Personen mit Projekten""" |
1344 | |
1345 | |
1346 objs = self.getTagsFromDB(None, "person", "") | |
1347 | |
1348 ret={} | |
1349 #fuege jetzt die projekt informationen an | |
1350 for obj in objs: | |
1351 obs = self.getProjectsWithTag("person", obj) | |
1352 if len(obs)> 0: | |
1353 ret[obj]=obs | |
1354 | |
1355 return ret | |
1356 | |
1357 | |
1358 | |
1359 | |
1360 | |
1328 persons = self.persons2Projects; | 1361 persons = self.persons2Projects; |
1329 ret={} | 1362 ret={} |
1330 | 1363 |
1331 logging.debug("Check Person:"+repr(persons.keys())) | 1364 logging.debug("Check Person:"+repr(persons.keys())) |
1332 personsList=[x for x in persons.keys()] | 1365 personsList=[x for x in persons.keys()] |
1382 | 1415 |
1383 logging.debug("AFTERSORT-ret***") | 1416 logging.debug("AFTERSORT-ret***") |
1384 logging.debug(ret.keys()) | 1417 logging.debug(ret.keys()) |
1385 return ret,personsList | 1418 return ret,personsList |
1386 | 1419 |
1387 def getHistoricalPlacesWithProjectIDs(self): | 1420 # def getHistoricalPlacesWithProjectIDs(self): |
1388 """holt die getaggted Personen mit Projekten""" | 1421 # """holt die getaggted Personen mit Projekten""" |
1389 HistoricalPlaces = self.HistoricalPlaces2Projects; | 1422 # HistoricalPlaces = self.HistoricalPlaces2Projects; |
1390 ret={} | 1423 # ret={} |
1391 logging.debug("Check HistoricalPlace:"+repr(HistoricalPlaces.keys())) | 1424 # logging.debug("Check HistoricalPlace:"+repr(HistoricalPlaces.keys())) |
1392 for HistoricalPlace in HistoricalPlaces.keys(): | 1425 # for HistoricalPlace in HistoricalPlaces.keys(): |
1393 logging.debug("Check:"+HistoricalPlace) | 1426 # logging.debug("Check:"+HistoricalPlace) |
1394 #TODO: HistoricalPlace muss duch den namen von provuder geholt werden | 1427 # #TODO: HistoricalPlace muss duch den namen von provuder geholt werden |
1395 list=[] | 1428 # list=[] |
1396 for projectID in HistoricalPlaces.get(HistoricalPlace): | 1429 # for projectID in HistoricalPlaces.get(HistoricalPlace): |
1397 list.append(self.getProjectDetails(projectID)) | 1430 # list.append(self.getProjectDetails(projectID)) |
1398 | 1431 # |
1399 ret[HistoricalPlace]=list[0:] | 1432 # ret[HistoricalPlace]=list[0:] |
1400 return ret | 1433 # return ret |
1401 | 1434 # |
1402 def getObjectsWithProjectIDsSortedkeys(self): | 1435 def getObjectsWithProjectsSortedkeys(self): |
1403 | 1436 |
1404 def sortF(x,y): | 1437 def sortF(x,y): |
1405 return cmp(x.lower(),y.lower()) | 1438 return cmp(x.lower(),y.lower()) |
1406 keys = [x for x in self.getObjectsWithProjectIDs().keys()] | 1439 keys = [x for x in self.getObjectsWithProjects().keys()] |
1407 keys.sort(sortF) | 1440 keys.sort(sortF) |
1408 return keys | 1441 return keys |
1409 | 1442 |
1410 def getObjectsWithProjectIDs(self): | 1443 def getObjectsWithProjects(self): |
1411 """holt die getagten Personen mit Projekten""" | 1444 """holt die getagten Objekte mit Projekten""" |
1412 objects = self.objects2Projects; | 1445 |
1446 #hole all objekte | |
1447 objs = self.getTagsFromDB(None, "object", "") | |
1448 | |
1413 ret={} | 1449 ret={} |
1414 logging.debug("Check Object:"+repr(objects.keys())) | 1450 #fuege jetzt die projekt informationen an |
1415 for object in objects.keys(): | 1451 for obj in objs: |
1416 logging.debug("Check:"+object) | 1452 obs = self.getProjectsWithTag("object", obj) |
1417 #TODO: object muss duch den namen von provuder geholt werden | 1453 if len(obs)> 0: |
1418 list=[] | 1454 ret[obj]=obs |
1419 for projectID in objects.get(object): | 1455 |
1420 list.append(self.getProjectDetails(projectID)) | |
1421 | |
1422 ret[object]=list[0:] | |
1423 | |
1424 logging.debug(ret) | |
1425 return ret | 1456 return ret |
1457 | |
1458 | |
1426 | 1459 |
1427 security.declareProtected('View management screens','listAllSuggestedTags') | 1460 security.declareProtected('View management screens','listAllSuggestedTags') |
1428 def listAllSuggestedTags(self): | 1461 def listAllSuggestedTags(self): |
1429 """list all tags""" | 1462 """list all tags""" |
1430 ret="<html><body>" | 1463 ret="<html><body>" |
1477 | 1510 |
1478 | 1511 |
1479 | 1512 |
1480 #return retstring | 1513 #return retstring |
1481 | 1514 |
1482 security.declareProtected('View management screens','addHistoricalPlaceToProject') | 1515 # security.declareProtected('View management screens','addHistoricalPlaceToProject') |
1483 def addHistoricalPlaceToProject(self,projectID,value): | 1516 # def addHistoricalPlaceToProject(self,projectID,value): |
1484 """ add a person so the project""" | 1517 # """ add a person so the project""" |
1485 HistoricalPlaces=self.getHistoricalPlacesFromProject(projectID); | 1518 # HistoricalPlaces=self.getHistoricalPlacesFromProject(projectID); |
1486 | 1519 # |
1487 logging.debug("adding:"+projectID+":"+value); | 1520 # logging.debug("adding:"+projectID+":"+value); |
1488 | 1521 # |
1489 | 1522 # |
1490 #TODO: Im moment noch keine Zuordnung zu einer ID. | 1523 # #TODO: Im moment noch keine Zuordnung zu einer ID. |
1491 HistoricalPlaces.insert([value,value]) | 1524 # HistoricalPlaces.insert([value,value]) |
1492 self.projectHistoricalPlaces.update({projectID:HistoricalPlaces}) | 1525 # self.projectHistoricalPlaces.update({projectID:HistoricalPlaces}) |
1493 | 1526 # |
1494 | 1527 # |
1495 | 1528 # |
1496 for HistoricalPlaceTuple in HistoricalPlaces: | 1529 # for HistoricalPlaceTuple in HistoricalPlaces: |
1497 #hole die abgespeicherten Projekte zu einer Person | 1530 # #hole die abgespeicherten Projekte zu einer Person |
1498 person=HistoricalPlaceTuple[0] #hile die ID | 1531 # person=HistoricalPlaceTuple[0] #hile die ID |
1499 | 1532 # |
1500 | 1533 # |
1501 if getattr(self,"HistoricalPlaces2Projects",None)==None: | 1534 # if getattr(self,"HistoricalPlaces2Projects",None)==None: |
1502 setattr(self,"HistoricalPlaces2Projects",OOBTree()) | 1535 # setattr(self,"HistoricalPlaces2Projects",OOBTree()) |
1503 | 1536 # |
1504 projects = self.HistoricalPlaces2Projects.get(person,None) | 1537 # projects = self.HistoricalPlaces2Projects.get(person,None) |
1505 | 1538 # |
1506 if projects==None: | 1539 # if projects==None: |
1507 projects=OOSet(); | 1540 # projects=OOSet(); |
1508 | 1541 # |
1509 projects.insert(projectID ) | 1542 # projects.insert(projectID ) |
1510 logging.debug("update:"+person) | 1543 # logging.debug("update:"+person) |
1511 self.HistoricalPlaces2Projects.update({person:projects}) | 1544 # self.HistoricalPlaces2Projects.update({person:projects}) |
1512 | 1545 # |
1513 | 1546 # |
1514 | 1547 # |
1515 retstring = self.getHistoricalPlacesFromProjectAsHTML(projectID) | 1548 # retstring = self.getHistoricalPlacesFromProjectAsHTML(projectID) |
1516 logging.debug(retstring) | 1549 # logging.debug(retstring) |
1517 | 1550 # |
1518 | 1551 # |
1519 | 1552 # |
1520 return retstring | 1553 # return retstring |
1521 | 1554 # |
1522 security.declareProtected('View management screens','addObjectToProject') | 1555 security.declareProtected('View management screens','addObjectToProject') |
1523 def addObjectToProject(self,projectID,value): | 1556 def addObjectToProject(self,projectID,value): |
1524 """ add a person so the project""" | 1557 """ add a person so the project""" |
1525 objects=self.getObjectsFromProject(projectID); | 1558 #objects=self.getObjectsFromProject(projectID); |
1526 | 1559 logging.debug("adding:"+projectID+":"+value); |
1527 logging.debug("adding:"+projectID+":"+value); | |
1528 | |
1529 self.storeChange("addObject",projectID,value) | 1560 self.storeChange("addObject",projectID,value) |
1530 | 1561 |
1531 #TODO: Im moment noch keine Zuordnung zu einer ID. | 1562 #TODO: Im moment noch keine Zuordnung zu einer ID. |
1532 objects.insert([value,value]) | |
1533 self.projectObjects.update({projectID:objects}) | |
1534 | |
1535 | |
1536 | |
1537 for objectTuple in objects: | |
1538 #hole die abgespeicherten Projekte zu einer Person | |
1539 person=objectTuple[0] #hile die ID | |
1540 | |
1541 | |
1542 if getattr(self,"objects2Projects",None)==None: | |
1543 setattr(self,"objects2Projects",OOBTree()) | |
1544 | 1563 |
1545 projects = self.objects2Projects.get(person,None) | 1564 self.addTagToDB(projectID, tagType="object", tag=value) |
1546 | 1565 |
1547 if projects==None: | |
1548 projects=OOSet(); | |
1549 | |
1550 projects.insert(projectID ) | |
1551 logging.debug("update:"+person) | |
1552 self.objects2Projects.update({person:projects}) | |
1553 | |
1554 | |
1555 | |
1556 retstring = self.getObjectsFromProjectAsHTML(projectID) | 1566 retstring = self.getObjectsFromProjectAsHTML(projectID) |
1557 logging.debug(retstring) | 1567 logging.debug(retstring) |
1558 | 1568 |
1559 | 1569 |
1560 | |
1561 return retstring | 1570 return retstring |
1562 | 1571 |
1563 | 1572 |
1564 def getProjectsWithTag(self,tagType,tagName): | 1573 def getProjectsWithTag(self,tagType,tagName): |
1565 tags = getattr(self,"tags",None) | 1574 """hole alle projekte mit tags vom typ tagType and tagName""" |
1566 if tags is None: | 1575 |
1567 logging.debug("can't find Tags") | 1576 qs = """select distinct project_id from thesaurus_projects_tags where tag_id in |
1568 return [] | 1577 (select id as tag_id from thesaurus_tags where tag_type = %s and tag_name = %s) |
1569 | 1578 """ |
1570 tagsStored=tags.get(tagType,None) | 1579 |
1571 if tagsStored is None: | 1580 |
1572 logging.debug("can't find Tag:"+tagType) | 1581 #hole alle projecte |
1573 return [] | |
1574 | |
1575 projects = tagsStored.get(tagName,None) | |
1576 if projects is None: | |
1577 logging.debug("can't find any projects for Tag:"+tagName+"("+tagType+")") | |
1578 return [] | |
1579 | 1582 |
1580 ret=[] | 1583 ret=[] |
1581 for project in projects: | 1584 for projectRes in self.executeZSQL(qs,[tagType,tagName]): |
1585 | |
1586 project = projectRes.project_id | |
1587 | |
1582 logging.debug("found:"+project) | 1588 logging.debug("found:"+project) |
1583 proj =self.getProjectDetails(project); | 1589 proj =self.getProjectDetails(project); |
1584 if proj is not None: | 1590 if proj is not None: |
1585 ret.append(proj) | 1591 ret.append(proj) |
1586 | 1592 |