Mercurial > hg > MPIWGThesaurus
comparison MPIWGThesaurus.py @ 5:2773140337ad
Mangement der People f?r Tagging: verbessert.
Im Triplestore eingetragenen Personen mit Vor- und Nachnamen werden jetzt nach Nachnamen sortiert.
Personen verschwinden aus der Tagging-?bersicht, wenn keine Projekte mehr dazugeh?ren.
| author | dwinter |
|---|---|
| date | Wed, 12 Oct 2011 16:01:05 +0200 |
| parents | fa8d698958f7 |
| children | fcab446bca79 |
comparison
equal
deleted
inserted
replaced
| 4:fa8d698958f7 | 5:2773140337ad |
|---|---|
| 82 persons2Projects= OOBTree() | 82 persons2Projects= OOBTree() |
| 83 objects2Projects=OOBTree() | 83 objects2Projects=OOBTree() |
| 84 historicalPlaces2Projects=OOBTree() | 84 historicalPlaces2Projects=OOBTree() |
| 85 suggestedTags2Projects=OOBTree() | 85 suggestedTags2Projects=OOBTree() |
| 86 personIDtoNames=OOBTree() # weist den personenIDs Klartextnamen aus dem Triplestore zu | 86 personIDtoNames=OOBTree() # weist den personenIDs Klartextnamen aus dem Triplestore zu |
| 87 personsIDForSort=[] # liste (personenID,(nachname,vorname) sortiert nach dem tupel (nachname,vorname) | 87 personsIDForSort=[] # liste personenID sortiert nach dem tupel (nachname,vorname) |
| 88 personsIDForSortFull=[] # liste (personenID,(nachname,vorname)) nicht sortiert! | |
| 89 | |
| 88 suggestedPersons= OOBTree(); #TODO: das sollte die ueberfluessig werde und nur im triple store stehen. | 90 suggestedPersons= OOBTree(); #TODO: das sollte die ueberfluessig werde und nur im triple store stehen. |
| 89 | 91 |
| 90 tagList=[] | 92 tagList=[] |
| 91 | 93 |
| 92 #default liste fuer tags, wird ueber das Managementinterface ueberschrieben | 94 #default liste fuer tags, wird ueber das Managementinterface ueberschrieben |
| 196 redirect(RESPONSE,'manage_main') | 198 redirect(RESPONSE,'manage_main') |
| 197 | 199 |
| 198 #In der Anzeige soll der Name der zitierten Personen in Klartext angezeigt werden, ausserdem die Varianten, wie sie tatsaechlich | 200 #In der Anzeige soll der Name der zitierten Personen in Klartext angezeigt werden, ausserdem die Varianten, wie sie tatsaechlich |
| 199 #in den Projekten benutzt werden | 201 #in den Projekten benutzt werden |
| 200 | 202 |
| 201 security.declareProtected('View management screens','collectPersonNamesToIds') | 203 |
| 202 def collectPersonNamesToIds(self): | 204 |
| 203 """Ordne Namen aus dem Triplestore bzw. die vergebenenden Label den Personen-Ids zu.""" | 205 def addPersonAndFirstNameFromTripleStore(self, personID): |
| 204 self.personIDtoNames=OOBTree() # loesche alle | 206 mainName, sortName = self.getMainNameFromTripleStore(personID) # hole die hauptbezeichnung aus dem triplestore |
| 205 self.personsIDForSort=[] | 207 personNames = [] |
| 206 personsIDForSortTmp=[] | 208 for project in self.persons2Projects.get(personID): #hole die personen aus dem projekte |
| 207 for personID in self.persons2Projects: | 209 logging.debug("Found:project:" + project) |
| 208 mainName,sortName=self.getMainNameFromTripleStore(personID); # hole die hauptbezeichnung aus dem triplestore | 210 namesInProject = self.projectPersons.get(project) |
| 209 | 211 for nameInProjectTuple in namesInProject: |
| 210 personNames=[] | 212 logging.debug(repr(nameInProjectTuple)) |
| 211 for project in self.persons2Projects.get(personID): | 213 nameInProject = nameInProjectTuple[1] |
| 212 #hole die personen aus dem projekte | 214 logging.debug(nameInProjectTuple[0] + "??" + personID) |
| 213 logging.debug("Found:project:"+project) | 215 if nameInProjectTuple[0] == personID: |
| 214 namesInProject = self.projectPersons.get(project) | 216 logging.debug("changing") |
| 215 | 217 if mainName == "": # es gibt keinen Eintrag im Triplestore fuer name (sollte eigentlich nicht sein, ist dann ein Fehler dort) |
| 216 for nameInProjectTuple in namesInProject: | 218 mainName = nameInProject #nimm dann aber den ersten aus den projekten |
| 217 logging.debug(repr(nameInProjectTuple)) | 219 if nameInProject != mainName: |
| 218 nameInProject=nameInProjectTuple[1] | 220 personNames.append(nameInProject) |
| 219 logging.debug(nameInProjectTuple[0]+"??"+personID) | 221 |
| 220 if nameInProjectTuple[0]==personID: | 222 logging.debug(str(mainName) + "- foundalso :" + ",".join(personNames)) |
| 221 logging.debug("changing") | 223 self.personIDtoNames.update({personID:(mainName, personNames)}) |
| 222 if mainName=="": # es gibt keinen Eintrag im Triplestore fuer name (sollte eigentlich nicht sein, ist dann ein Fehler dort) | 224 self.personsIDForSortFull.append((personID, sortName)) |
| 223 mainName=nameInProject #nimm dann aber den ersten aus den projekten | 225 |
| 224 if nameInProject!=mainName: | 226 |
| 225 personNames.append(nameInProject) | 227 |
| 226 | 228 def generateSortingOrderForPersonIDs(self): |
| 227 logging.debug(str(mainName)+"- foundalso :"+",".join(personNames)) | |
| 228 self.personIDtoNames.update({personID:(mainName,personNames)}) | |
| 229 personsIDForSortTmp.append((personID,sortName)) | |
| 230 | |
| 231 | |
| 232 | |
| 233 | |
| 234 #sortiere personIDs nach erstmal nach Nachnamene TODO: sortiere nach name,vorname | |
| 235 def sort(x,y): | 229 def sort(x,y): |
| 236 logging.debug("sort:") | 230 logging.debug("sort:") |
| 237 logging.debug((x[1][0],y[1][0])) | 231 logging.debug((x[1][0],y[1][0])) |
| 238 return cmp(x[1][0],y[1][0]) | 232 return cmp(x[1][0],y[1][0]) |
| 239 | 233 |
| 240 personsIDForSortTmp.sort(cmp=sort) | 234 self.personsIDForSortFull.sort(cmp=sort) |
| 241 | 235 |
| 242 self.personsIDForSort=[x[0] for x in personsIDForSortTmp] | 236 self.personsIDForSort=[x[0] for x in self.personsIDForSortFull] |
| 243 | 237 |
| 244 self.personIDtoNames=self.personIDtoNames # make clear that it has changed #TODO: change this to variablen with names _p | 238 self.personIDtoNames=self.personIDtoNames # make clear that it has changed #TODO: change this to variablen with names _p |
| 245 | 239 |
| 240 security.declareProtected('View management screens','collectPersonNamesToIds') | |
| 241 def collectPersonNamesToIds(self): | |
| 242 """Ordne Namen aus dem Triplestore bzw. die vergebenenden Label den Personen-Ids zu.""" | |
| 243 #sollte z.B. gemacht werden, wenn im Triplestore editiert wurde. | |
| 244 self.personIDtoNames=OOBTree() # loesche alle | |
| 245 self.personsIDForSort=[] | |
| 246 self.personsIDForSortFull=[] | |
| 247 for personID in self.persons2Projects: | |
| 248 self.addPersonAndFirstNameFromTripleStore(personID,self.personsIDForSortFull) | |
| 249 | |
| 250 | |
| 251 | |
| 252 | |
| 253 #sortiere personIDs nach erstmal nach Nachnamene TODO: sortiere nach name,vorname | |
| 254 | |
| 255 self.generateSortingOrderForPersonIDs(); | |
| 256 # def sort(x,y): | |
| 257 # logging.debug("sort:") | |
| 258 # logging.debug((x[1][0],y[1][0])) | |
| 259 # return cmp(x[1][0],y[1][0]) | |
| 260 # | |
| 261 # self.personsIDForSortFull.sort(cmp=sort) | |
| 262 # | |
| 263 # self.personsIDForSort=[x[0] for x in self.personsIDForSortFull] | |
| 264 # | |
| 265 # self.personIDtoNames=self.personIDtoNames # make clear that it has changed #TODO: change this to variablen with names _p | |
| 266 # | |
| 246 #Hole die Namen, die einer personID zugeordnet sind. | 267 #Hole die Namen, die einer personID zugeordnet sind. |
| 247 def getNamesFromID(self,personID): | 268 def getNamesFromID(self,personID): |
| 248 retStr="" | 269 retStr="" |
| 249 retStr+=self.personIDtoNames.get(personID)[0] # hole die Hauptbezeichnung | 270 retStr+=self.personIDtoNames.get(personID)[0] # hole die Hauptbezeichnung |
| 250 additionalNames = self.personIDtoNames.get(personID)[1] | 271 additionalNames = self.personIDtoNames.get(personID)[1] |
| 557 def getSuggestedTagsFromProject(self,projectID): | 578 def getSuggestedTagsFromProject(self,projectID): |
| 558 return self.getFromProject(self.projectSuggestedTags,projectID); | 579 return self.getFromProject(self.projectSuggestedTags,projectID); |
| 559 | 580 |
| 560 | 581 |
| 561 def getPersonsFromProject(self,projectID): | 582 def getPersonsFromProject(self,projectID): |
| 583 #hole alle personenID die zu einem Projekt gehoeren. | |
| 584 #zurueckgegeben wird ein OOSet() | |
| 562 return self.getFromProject(self.projectPersons,projectID); | 585 return self.getFromProject(self.projectPersons,projectID); |
| 563 | 586 |
| 564 def getFromProject(self,objects,projectID): | 587 def getFromProject(self,objects,projectID): |
| 565 if objects.has_key(projectID): | 588 #holt die zu projectID gehoerigen objekte aus dem objects-set. |
| 589 #oder legt einen neuen leeren Satz zu dieser ProjektID an. | |
| 590 #zuruecgegeben wird ein OOSet() | |
| 591 if objects.has_key(projectID): #wenn zu der ProjektID schon etwas abgespeichter ist, gieb es zurueck | |
| 566 logging.debug("key exists:"+projectID) | 592 logging.debug("key exists:"+projectID) |
| 567 persons=objects.get(projectID); | 593 persons=objects.get(projectID); |
| 568 else: | 594 else: # andernfalls lege einen neuen Satz an. |
| 569 persons=OOSet() | 595 persons=OOSet() |
| 570 objects.update({projectID:persons}) | 596 objects.update({projectID:persons}) |
| 571 logging.debug("key does not exists:"+projectID) | 597 logging.debug("key does not exists:"+projectID) |
| 572 | 598 |
| 573 | 599 |
| 646 logging.debug(retstring) | 672 logging.debug(retstring) |
| 647 return retstring | 673 return retstring |
| 648 | 674 |
| 649 security.declareProtected('View management screens','removePersonFromProject') | 675 security.declareProtected('View management screens','removePersonFromProject') |
| 650 def removePersonFromProject(self,projectID,value): | 676 def removePersonFromProject(self,projectID,value): |
| 651 """remove""" | 677 """remove a person from the projeckt""" |
| 652 logging.debug("remove:"+projectID+":"+value); | 678 logging.debug("remove:"+projectID+":"+value); |
| 653 | 679 |
| 654 persons = self.getPersonsFromProject(projectID) | 680 persons = self.getPersonsFromProject(projectID) # hole alle personen die mit dem Projekt verbunden sind. |
| 655 for person in persons.keys(): | 681 for person in persons.keys(): |
| 656 | 682 |
| 657 logging.debug("trying:"+repr(person[0])+"::"+repr(value)+"__") | 683 logging.debug("trying:"+repr(person[0])+"::"+repr(value)+"__") |
| 658 if person[0]==value: | 684 if person[0]==value:#person ist die zuloeschende, dann raus damit |
| 685 | |
| 659 logging.debug("---removed!") | 686 logging.debug("---removed!") |
| 660 persons.remove(person) | 687 persons.remove(person) |
| 661 | 688 |
| 662 self.projectPersons.update({projectID:persons}) | 689 #now also delete the project from the person. |
| 690 projectsOfPerson=self.persons2Projects.get(person[0]) | |
| 691 logging.debug(projectsOfPerson) | |
| 692 if projectID in list(projectsOfPerson): | |
| 693 projectsOfPerson.remove(projectID) | |
| 694 #self.persons2Projects.update({person:projectsList}) | |
| 695 if (len(projectsOfPerson)==0): #loesche person aus der liste wenn keine Projekte dazu existieren. | |
| 696 del self.persons2Projects[person[0]] | |
| 697 | |
| 698 | |
| 699 #self.projectPersons.update({projectID:persons}) | |
| 663 retstring = self.getPersonsFromProjectAsHTML(projectID) | 700 retstring = self.getPersonsFromProjectAsHTML(projectID) |
| 664 logging.debug(retstring) | 701 logging.debug(retstring) |
| 665 return retstring | 702 return retstring |
| 666 | 703 |
| 667 #fuegt die neue Person zur personIDtoNames hinzu, für die spätere Anzeige in der Personenliste | 704 #fuegt die neue Person zur personIDtoNames hinzu, für die spätere Anzeige in der Personenliste |
| 693 if getattr(self,"persons2Projects",None)==None: | 730 if getattr(self,"persons2Projects",None)==None: |
| 694 setattr(self,"persons2Projects",OOBTree()) | 731 setattr(self,"persons2Projects",OOBTree()) |
| 695 | 732 |
| 696 projects = self.persons2Projects.get(person,None) | 733 projects = self.persons2Projects.get(person,None) |
| 697 | 734 |
| 698 if projects==None: | 735 if projects==None: #person hatte noch keine projekte |
| 699 projects=OOSet(); | 736 projects=OOSet(); |
| 700 | 737 self.addPersonAndFirstNameFromTripleStore(person) |
| 738 self.generateSortingOrderForPersonIDs(); | |
| 739 | |
| 701 projects.insert(projectID ) | 740 projects.insert(projectID ) |
| 702 logging.debug("update:"+person) | 741 logging.debug("update:"+person) |
| 703 self.persons2Projects.update({person:projects}) | 742 self.persons2Projects.update({person:projects}) |
| 704 | 743 |
| 705 self.addNameTOPersonIDNames(value,label) | 744 self.addNameTOPersonIDNames(value,label) |
| 706 retstring = self.getPersonsFromProjectAsHTML(projectID) | 745 retstring = self.getPersonsFromProjectAsHTML(projectID) |
| 707 logging.debug(retstring) | 746 logging.debug(retstring) |
| 708 transaction.commit() | 747 transaction.commit() |
| 709 return retstring | 748 return retstring |
| 710 | 749 |
| 711 | 750 security.declareProtected('View management screens','getPersonsWithProjectIDs') |
| 712 def getPersonsWithProjectIDs(self): | 751 def getPersonsWithProjectIDs(self,check=False): |
| 713 """holt die getaggted Personen mit Projekten""" | 752 """holt die getaggted Personen mit Projekten""" |
| 714 persons = self.persons2Projects; | 753 persons = self.persons2Projects; |
| 715 ret={} | 754 ret={} |
| 716 | 755 |
| 717 logging.debug("Check Person:"+repr(persons.keys())) | 756 logging.debug("Check Person:"+repr(persons.keys())) |
| 733 logging.debug("AFTERSORT***") | 772 logging.debug("AFTERSORT***") |
| 734 logging.debug(personsList) | 773 logging.debug(personsList) |
| 735 for person in personsList: | 774 for person in personsList: |
| 736 logging.debug("Check:"+person) | 775 logging.debug("Check:"+person) |
| 737 #TODO: person muss duch den namen von provider geholt werden | 776 #TODO: person muss duch den namen von provider geholt werden |
| 738 list=[] | 777 retlist=[] |
| 739 for projectID in persons.get(person): | 778 projectsList=persons.get(person) |
| 740 list.append(self.getProjectDetails(projectID)) | 779 |
| 741 | 780 for projectID in list(projectsList): #list notwendig da projectList in der folgenden iteration veraendert wird. |
| 742 ret[person]=list[0:] | 781 if check: #teste ob im Projekt noch ein Verweis auf den Namen steht |
| 782 #sollte eigentlich nicht sein. | |
| 783 personsProjects=self.getPersonsFromProject(projectID) | |
| 784 logging.debug("persons check mode") | |
| 785 personsProjectsCheck=[x[0] for x in personsProjects] | |
| 786 if not person in personsProjectsCheck: #falls es so ist korrigiere die Projektliste der Person | |
| 787 #loesche die person von projectListe | |
| 788 projectsList.remove(projectID) | |
| 789 persons.update({person:projectsList}) | |
| 790 | |
| 791 retlist.append(self.getProjectDetails(projectID)) | |
| 792 | |
| 793 if check and (len(projectsList)==0): #loesche person aus der liste wenn keine Projekte dazu existieren. | |
| 794 del persons[person] | |
| 795 | |
| 796 ret[person]=retlist[0:] | |
| 743 | 797 |
| 744 logging.debug("AFTERSORT-ret***") | 798 logging.debug("AFTERSORT-ret***") |
| 745 logging.debug(ret.keys()) | 799 logging.debug(ret.keys()) |
| 746 return ret,personsList | 800 return ret,personsList |
| 747 | 801 |
