changeset 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
files .pydevproject MPIWGThesaurus.py zpt/manageMPIWGThesaurus.zpt
diffstat 3 files changed, 108 insertions(+), 52 deletions(-) [+]
line wrap: on
line diff
--- a/.pydevproject	Tue Oct 11 19:57:22 2011 +0200
+++ b/.pydevproject	Wed Oct 12 16:01:05 2011 +0200
@@ -2,7 +2,7 @@
 <?eclipse-pydev version="1.0"?>
 
 <pydev_project>
-<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">python2.4 - zope</pydev_property>
+<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">python2.4</pydev_property>
 <pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.4</pydev_property>
 <pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
 <path>/MPIWGThesaurus</path>
--- a/MPIWGThesaurus.py	Tue Oct 11 19:57:22 2011 +0200
+++ b/MPIWGThesaurus.py	Wed Oct 12 16:01:05 2011 +0200
@@ -84,7 +84,9 @@
     historicalPlaces2Projects=OOBTree()
     suggestedTags2Projects=OOBTree()
     personIDtoNames=OOBTree() # weist den personenIDs Klartextnamen aus dem Triplestore zu
-    personsIDForSort=[] # liste (personenID,(nachname,vorname) sortiert nach dem tupel (nachname,vorname)
+    personsIDForSort=[] # liste personenID sortiert nach dem tupel (nachname,vorname)
+    personsIDForSortFull=[] # liste (personenID,(nachname,vorname)) nicht sortiert!
+   
     suggestedPersons= OOBTree(); #TODO: das sollte die ueberfluessig werde und nur im triple store stehen.
     
     tagList=[]
@@ -198,51 +200,70 @@
     #In der Anzeige soll der Name der zitierten Personen in Klartext angezeigt werden, ausserdem die Varianten, wie sie tatsaechlich
     #in den Projekten benutzt werden
     
+    
+
+    def addPersonAndFirstNameFromTripleStore(self, personID):
+        mainName, sortName = self.getMainNameFromTripleStore(personID) # hole die hauptbezeichnung aus dem triplestore
+        personNames = []
+        for project in self.persons2Projects.get(personID): #hole die personen aus dem projekte
+            logging.debug("Found:project:" + project)
+            namesInProject = self.projectPersons.get(project)
+            for nameInProjectTuple in namesInProject:
+                logging.debug(repr(nameInProjectTuple))
+                nameInProject = nameInProjectTuple[1]
+                logging.debug(nameInProjectTuple[0] + "??" + personID)
+                if nameInProjectTuple[0] == personID:
+                    logging.debug("changing")
+                    if mainName == "": # es gibt keinen Eintrag im Triplestore fuer name (sollte eigentlich nicht sein, ist dann ein Fehler dort)
+                        mainName = nameInProject #nimm dann aber den ersten aus den projekten
+                    if nameInProject != mainName:
+                        personNames.append(nameInProject)
+        
+        logging.debug(str(mainName) + "- foundalso :" + ",".join(personNames))
+        self.personIDtoNames.update({personID:(mainName, personNames)})
+        self.personsIDForSortFull.append((personID, sortName))
+        
+   
+   
+    def generateSortingOrderForPersonIDs(self):
+        def sort(x,y):
+            logging.debug("sort:")
+            logging.debug((x[1][0],y[1][0]))
+            return cmp(x[1][0],y[1][0])
+            
+        self.personsIDForSortFull.sort(cmp=sort)
+           
+        self.personsIDForSort=[x[0] for x in self.personsIDForSortFull]
+                                      
+        self.personIDtoNames=self.personIDtoNames # make clear that it has changed #TODO: change this to variablen with names _p
+    
     security.declareProtected('View management screens','collectPersonNamesToIds')
     def collectPersonNamesToIds(self):
         """Ordne Namen aus dem Triplestore bzw. die vergebenenden Label den Personen-Ids zu."""
+        #sollte z.B. gemacht werden, wenn im Triplestore editiert wurde.
         self.personIDtoNames=OOBTree() # loesche alle 
         self.personsIDForSort=[]
-        personsIDForSortTmp=[]
+        self.personsIDForSortFull=[]
         for personID in self.persons2Projects:
-            mainName,sortName=self.getMainNameFromTripleStore(personID); # hole die hauptbezeichnung aus dem triplestore
-            
-            personNames=[]
-            for project in self.persons2Projects.get(personID):
-                #hole die personen aus dem projekte 
-                logging.debug("Found:project:"+project)
-                namesInProject = self.projectPersons.get(project)
-                
-                for nameInProjectTuple in namesInProject:
-                    logging.debug(repr(nameInProjectTuple))
-                    nameInProject=nameInProjectTuple[1]
-                    logging.debug(nameInProjectTuple[0]+"??"+personID)
-                    if nameInProjectTuple[0]==personID:
-                        logging.debug("changing")
-                        if mainName=="": # es gibt keinen Eintrag im Triplestore fuer name (sollte eigentlich nicht sein, ist dann ein Fehler dort)
-                            mainName=nameInProject #nimm dann aber den ersten aus den projekten
-                        if nameInProject!=mainName:
-                            personNames.append(nameInProject)
-            
-            logging.debug(str(mainName)+"- foundalso :"+",".join(personNames))
-            self.personIDtoNames.update({personID:(mainName,personNames)})
-            personsIDForSortTmp.append((personID,sortName))
+            self.addPersonAndFirstNameFromTripleStore(personID,self.personsIDForSortFull)
             
           
             
                                     
         #sortiere personIDs nach erstmal nach Nachnamene TODO: sortiere nach name,vorname
-        def sort(x,y):
-            logging.debug("sort:")
-            logging.debug((x[1][0],y[1][0]))
-            return cmp(x[1][0],y[1][0])
-            
-        personsIDForSortTmp.sort(cmp=sort)
-           
-        self.personsIDForSort=[x[0] for x in personsIDForSortTmp]
-                                      
-        self.personIDtoNames=self.personIDtoNames # make clear that it has changed #TODO: change this to variablen with names _p
-    
+        
+        self.generateSortingOrderForPersonIDs();
+#        def sort(x,y):
+#            logging.debug("sort:")
+#            logging.debug((x[1][0],y[1][0]))
+#            return cmp(x[1][0],y[1][0])
+#            
+#        self.personsIDForSortFull.sort(cmp=sort)
+#           
+#        self.personsIDForSort=[x[0] for x in self.personsIDForSortFull]
+#                                      
+#        self.personIDtoNames=self.personIDtoNames # make clear that it has changed #TODO: change this to variablen with names _p
+#    
     #Hole die Namen, die einer personID zugeordnet sind.
     def getNamesFromID(self,personID):
         retStr=""
@@ -559,13 +580,18 @@
  
     
     def getPersonsFromProject(self,projectID):
+        #hole alle personenID die zu einem Projekt gehoeren.
+        #zurueckgegeben wird ein OOSet()
         return self.getFromProject(self.projectPersons,projectID);
     
-    def getFromProject(self,objects,projectID):  
-        if objects.has_key(projectID):
+    def getFromProject(self,objects,projectID): 
+        #holt die zu projectID gehoerigen objekte aus dem objects-set. 
+        #oder legt einen neuen leeren Satz zu dieser ProjektID an.
+        #zuruecgegeben wird ein OOSet()
+        if objects.has_key(projectID): #wenn zu der ProjektID schon etwas abgespeichter ist, gieb es zurueck
             logging.debug("key exists:"+projectID)
             persons=objects.get(projectID);
-        else:
+        else: # andernfalls lege einen neuen Satz an.
             persons=OOSet()
             objects.update({projectID:persons})
             logging.debug("key does not exists:"+projectID)
@@ -648,18 +674,29 @@
     
     security.declareProtected('View management screens','removePersonFromProject') 
     def removePersonFromProject(self,projectID,value):
-        """remove"""
+        """remove a person from the projeckt"""
         logging.debug("remove:"+projectID+":"+value);
         
-        persons = self.getPersonsFromProject(projectID)
+        persons = self.getPersonsFromProject(projectID) # hole alle personen die mit dem Projekt verbunden sind.
         for person in persons.keys():
            
             logging.debug("trying:"+repr(person[0])+"::"+repr(value)+"__")
-            if person[0]==value:
+            if person[0]==value:#person ist die zuloeschende, dann raus damit
+            
                 logging.debug("---removed!")
                 persons.remove(person)
-        
-        self.projectPersons.update({projectID:persons})
+                
+                #now also delete the project from the person.
+                projectsOfPerson=self.persons2Projects.get(person[0])
+                logging.debug(projectsOfPerson)
+                if projectID in list(projectsOfPerson):
+                    projectsOfPerson.remove(projectID)
+                    #self.persons2Projects.update({person:projectsList})
+                    if (len(projectsOfPerson)==0): #loesche person aus der liste wenn keine Projekte dazu existieren.
+                        del self.persons2Projects[person[0]]
+             
+                     
+        #self.projectPersons.update({projectID:persons})
         retstring = self.getPersonsFromProjectAsHTML(projectID)
         logging.debug(retstring)
         return retstring
@@ -695,9 +732,11 @@
          
             projects = self.persons2Projects.get(person,None)
                    
-            if projects==None:
+            if projects==None: #person hatte noch keine projekte
                 projects=OOSet();
-            
+                self.addPersonAndFirstNameFromTripleStore(person)
+                self.generateSortingOrderForPersonIDs();
+                
             projects.insert(projectID )
             logging.debug("update:"+person)
             self.persons2Projects.update({person:projects})
@@ -708,8 +747,8 @@
         transaction.commit()
         return retstring
     
-    
-    def getPersonsWithProjectIDs(self):
+    security.declareProtected('View management screens','getPersonsWithProjectIDs') 
+    def getPersonsWithProjectIDs(self,check=False):
         """holt die getaggted Personen mit Projekten"""
         persons = self.persons2Projects;
         ret={}
@@ -735,11 +774,26 @@
         for person in personsList:
             logging.debug("Check:"+person)
             #TODO: person muss duch den namen von provider geholt werden
-            list=[]
-            for projectID in persons.get(person):
-                list.append(self.getProjectDetails(projectID))
+            retlist=[]
+            projectsList=persons.get(person)
             
-            ret[person]=list[0:]
+            for projectID in list(projectsList): #list notwendig da projectList in der folgenden iteration veraendert wird.
+                if check: #teste ob im Projekt noch ein Verweis auf den Namen steht
+                    #sollte eigentlich nicht sein.
+                    personsProjects=self.getPersonsFromProject(projectID)
+                    logging.debug("persons check mode")
+                    personsProjectsCheck=[x[0] for x in personsProjects]
+                    if not person in personsProjectsCheck: #falls es so ist korrigiere die Projektliste der Person
+                        #loesche die person von projectListe
+                        projectsList.remove(projectID)
+                        persons.update({person:projectsList})
+                        
+                retlist.append(self.getProjectDetails(projectID))
+            
+            if check and (len(projectsList)==0): #loesche person aus der liste wenn keine Projekte dazu existieren.
+                del persons[person]
+                
+            ret[person]=retlist[0:]
        
         logging.debug("AFTERSORT-ret***")
         logging.debug(ret.keys()) 
--- a/zpt/manageMPIWGThesaurus.zpt	Tue Oct 11 19:57:22 2011 +0200
+++ b/zpt/manageMPIWGThesaurus.zpt	Wed Oct 12 16:01:05 2011 +0200
@@ -3,6 +3,8 @@
 <h2>Manage the thesaurus</h2>
 <ul>
 <li><a href="listAllSuggestedTags">Zeige alle vorgeschlagenen Tags</a></li>
+<li><a href="collectPersonNamesToIds">Hole/Update die Namenseintraege aus dem Triplestore, z.B. falls im Triplestore Namem geaendert worden</a></li>
+<li><a href="getPersonsWithProjectIDs?check=bool:True">Hole all Personen mit ProjectIDs, raeumt zu gleich den Cache Persone-->ProjectID auf</a></li>
 </ul>
 </body>
 </html>
\ No newline at end of file