Diff for /MPIWGWeb/Attic/MPIWGRoot.py between versions 1.1.2.19 and 1.1.2.36

version 1.1.2.19, 2008/09/12 15:10:49 version 1.1.2.36, 2012/01/09 13:14:46
Line 21  from bibliography import * Line 21  from bibliography import *
 import time  import time
 import xml.dom.minidom  import xml.dom.minidom
 import sys  import sys
 from Ft.Xml.XPath import Evaluate  import transaction
 from Ft.Xml.XPath.Context import Context  
 from Ft.Xml.Domlette import NonvalidatingReader,PrettyPrint, Print  #from Ft.Xml.XPath import Evaluate
 from Ft.Xml import EMPTY_NAMESPACE  #from Ft.Xml.XPath.Context import Context
   #from Ft.Xml.Domlette import NonvalidatingReader,PrettyPrint, Print
   #from Ft.Xml import EMPTY_NAMESPACE
 import copy  import copy
 import updatePersonalWWW  import updatePersonalWWW
 import MPIWGStaff  import MPIWGStaff
 from MPIWGHelper import *  from MPIWGHelper import *
   from BeautifulSoup import BeautifulSoup, Comment
   from ZODB import FileStorage, DB
   from ZEO import ClientStorage
   
 def sortWeight(x,y):  def sortWeight(x,y):
     x1=int(getattr(x[1],'weight','0'))      x1=int(getattr(x[1],'weight','0'))
Line 40  def sortWeight(x,y): Line 44  def sortWeight(x,y):
 class MPIWGRoot(ZSQLExtendFolder):  class MPIWGRoot(ZSQLExtendFolder):
     """Stammordner fuer den Web-Server"""      """Stammordner fuer den Web-Server"""
   
       _v_harvestCache=None
     meta_type='MPIWGRoot'      meta_type='MPIWGRoot'
   
     fieldLabels={'WEB_title':'WEB_Title',      fieldLabels={'WEB_title':'WEB_Title',
Line 67  class MPIWGRoot(ZSQLExtendFolder): Line 72  class MPIWGRoot(ZSQLExtendFolder):
     # types of objects that show up in navigation      # types of objects that show up in navigation
     nav_meta_types = ['MPIWGTemplate','MPIWGLink','MPIWGFolder']      nav_meta_types = ['MPIWGTemplate','MPIWGLink','MPIWGFolder']
   
       manage_options = Folder.manage_options+(
           {'label':'Update personal homepages','action':'updatePersonalwww_html'},
           {'label':'Reindex catalogs','action':'reindexCatalogs'},
           {'label':'Main config','action':'changeMPIWGRootForm'},
           {'label':'add e-mails','action':'showNewDBEntries'},
           #{'label':'update the institutsbibliography','action':'updateInstitutsbiliography'},
           #{'label':'Edit Historical Persons','action':'editHistoricalPersonsForm'},
           #{'label':'Store Historical Persons','action':'storeHistoricalPersons'},
           )
       
   
       def getHarvestCachePort(self):
           return getattr(self,"harvestPort",29999)
       
       def getHarvestCacheServer(self):
           return getattr(self,"harvestServer","localhost")
      
       
       def getHarvestCache(self):
           logging.debug("CACHE:"+repr(self._v_harvestCache))
           if self._v_harvestCache==None:
                #storage = FileStorage.FileStorage('/tmp/'+self.getId()+'test-filestorage.fs')
                addr = self.getHarvestCacheServer(), self.getHarvestCachePort()
                storage = ClientStorage.ClientStorage(addr)
                db = DB(storage)
                self._v_harvestDV=db
                self._v_harvestDV=db
                conn = db.open()
                dbroot = conn.root()
                if not dbroot.has_key('templates'):
                    from BTrees.OOBTree import OOBTree
                    dbroot['templates'] = OOBTree()
                    
                self._v_harvestCache = dbroot['templates']
           logging.debug("CACHE2:"+repr(self._v_harvestCache))            
           return self._v_harvestCache
       
       
       
       def __del__(self):
            if self._v_harvestCache!=None:
                self._v_harvestDV.close();
                
     def getGetNeighbourhood(self,obj, wordStr, length=100,tagging=True):      def getGetNeighbourhood(self,obj, wordStr, length=100,tagging=True):
         """finde umgebung um die worte in wordStr, zurueckgegeben wird eine Array mit den Umgebungen von Fundstellen der Worte          """finde umgebung um die worte in wordStr, zurueckgegeben wird eine Array mit den Umgebungen von Fundstellen der Worte
         alle Tags werden entfernt, die Fundstellen werden mit <span class="found">XX</span> getaggt, die Umgebungen werden           alle Tags werden entfernt, die Fundstellen werden mit <span class="found">XX</span> getaggt, die Umgebungen werden 
Line 80  class MPIWGRoot(ZSQLExtendFolder): Line 128  class MPIWGRoot(ZSQLExtendFolder):
         ret=[] # nimmt das Array auf, dass spaeter zurueckgegeben wird          ret=[] # nimmt das Array auf, dass spaeter zurueckgegeben wird
         ranges=[] #Array mit tupeln x,y wobei x die Position des Anfang und y des Endes der i-ten Umgebung angiebt          ranges=[] #Array mit tupeln x,y wobei x die Position des Anfang und y des Endes der i-ten Umgebung angiebt
                   
           wordStr=wordStr.lstrip().rstrip()
           
         def isInRanges(nr,length):          def isInRanges(nr,length):
             """test ob eine gegeben Position nr schon irgendwo in einer Umgebung ist, gibt den Index des ersten Wertes aus ranges zurueck,               """test ob eine gegeben Position nr schon irgendwo in einer Umgebung ist, gibt den Index des ersten Wertes aus ranges zurueck, 
             -1, wenn kein Treffer              -1, wenn kein Treffer
Line 106  class MPIWGRoot(ZSQLExtendFolder): Line 156  class MPIWGRoot(ZSQLExtendFolder):
         #if not words is ListType:          #if not words is ListType:
         #   words=[words]          #   words=[words]
                           
         txt=obj.harvest_page()          
           txtCache = self.en.getHarvestCache();
           txt=  txtCache.get(obj.absolute_url(),None)
          
           if txt==None:
               
               logging.debug("NO CACHE for: "+obj.absolute_url())
               txt=obj.harvest_page(mode="slim")
           
           
         if not txt:          if not txt:
             return ret              return ret
         txt=re.sub("<.*?>", "", txt) # loesche alle Tags          
           soup = BeautifulSoup(txt)
           
           comments = soup.findAll(text=lambda text:isinstance(text, Comment))
           [comment.extract() for comment in comments]
           
           txt = ''.join(soup.findAll(text=True))
           
           
           #txt=re.sub("<.*?>", "", txt) # loesche alle Tags
         for word in words:          for word in words:
             word=re.sub("_"," ",word) # ersetze zurueck "_" durch " "              word=re.sub("_"," ",word) # ersetze zurueck "_" durch " "
             pos=0              pos=0
Line 131  class MPIWGRoot(ZSQLExtendFolder): Line 199  class MPIWGRoot(ZSQLExtendFolder):
                         y=max(ranges[nr][1],y)                          y=max(ranges[nr][1],y)
                               
                     str=txt[x:y]                      str=txt[x:y]
                       if x!=0: #add dots if in the middle of text
                           str="..."+str
                       
                       if y!=len(txt): #add dots if in the middle of text
                           str=str+"..."
                           
                           
                                   
                     if nr >=0: # word ist in einer schon gefunden Umgebung                      if nr >=0: # word ist in einer schon gefunden Umgebung
                         ranges[nr]=(x,y) # neue Position der Umgebung                          ranges[nr]=(x,y) # neue Position der Umgebung
Line 384  class MPIWGRoot(ZSQLExtendFolder): Line 459  class MPIWGRoot(ZSQLExtendFolder):
         else:          else:
             return style                  return style    
   
     def getFeatures(self):      def getFeatures(self, num=None):
         """returns a list of all Features"""          """returns a list of the last num Features"""
         dir = getattr(self, 'features')          dir = getattr(self, 'features')
         features = dir.objectItems(['MPIWGFeature'])          features = dir.objectItems(['MPIWGFeature'])
         features.sort(sortWeight)          features.sort(sortWeight)
           if num is not None:
               # take only the last num elements
               features = features[-num:]
         # return pure list of objects          # return pure list of objects
         return [f[1] for f in features]          return [f[1] for f in features]
   
   
       def getMPIWGRoot(self):
           """returns the MPIWG root"""
           return self
   
     def MPIWGrootURL(self):      def MPIWGrootURL(self):
         """returns the URL to the root"""          """returns the URL to the root"""
         return self.absolute_url()          return self.absolute_url()
Line 580  class MPIWGRoot(ZSQLExtendFolder): Line 662  class MPIWGRoot(ZSQLExtendFolder):
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeMPIWGRootForm')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeMPIWGRootForm')).__of__(self)
         return pt()          return pt()
   
     def changeMPIWGRoot(self,title,disciplineList,themesList,connection_id,lang=None,RESPONSE=None):      def changeMPIWGRoot(self,title,connection_id,coneServiceURL,harvestPort,harvestServer,lang=None,autocommit=None,RESPONSE=None):
         """change"""          """change"""
         self.title=title          self.title=title
         self.connection_id=connection_id          self.connection_id=connection_id
         self.disciplineList=disciplineList          #self.disciplineList=disciplineList
         self.themesList=themesList          #self.themesList=themesList
           self.coneServiceURL=coneServiceURL
           self.harvestServer=harvestServer
           try:
               self.harvestPort=int(harvestPort)
           except:
               logging.error("couldn't change port!: no number:"+harvestPort)
           
         if lang is not None:          if lang is not None:
             self.lang = lang              self.lang = lang
   
           self.autocommit = (autocommit == "on")
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
   
Line 626  class MPIWGRoot(ZSQLExtendFolder): Line 716  class MPIWGRoot(ZSQLExtendFolder):
                             ret.append(project)                              ret.append(project)
                   
         #logging.debug("getContexts: childs=%s parents=%s depth=%s => %s"%(childs,parents,depth,repr(ret)))          #logging.debug("getContexts: childs=%s parents=%s depth=%s => %s"%(childs,parents,depth,repr(ret)))
        
         return ret          return ret
   
           
Line 673  class MPIWGRoot(ZSQLExtendFolder): Line 764  class MPIWGRoot(ZSQLExtendFolder):
         return projects          return projects
           
                   
     manage_options = Folder.manage_options+(  
         {'label':'Update personal homepages','action':'updatePersonalwww_html'},  
         {'label':'Reindex catalogs','action':'reindexCatalogs'},  
         {'label':'Main config','action':'changeMPIWGRootForm'},  
         {'label':'add e-mails','action':'showNewDBEntries'},  
         {'label':'update the institutsbibliography','action':'updateInstitutsbiliography'},  
         #{'label':'Edit Historical Persons','action':'editHistoricalPersonsForm'},  
         #{'label':'Store Historical Persons','action':'storeHistoricalPersons'},  
         )  
       
   
     def updatePublicationDB(self,personId=None):      def updatePublicationDB(self,personId=None):
         """updates the publication db, i.e. copy year and type into the main table"""          """updates the publication db, i.e. copy year and type into the main table"""
                   
Line 769  class MPIWGRoot(ZSQLExtendFolder): Line 849  class MPIWGRoot(ZSQLExtendFolder):
                   
                   
         result,msg=MPIWGStaff.createNewDBEntry(self,data['publish_the_data'],data['key'],data['last_name'],          result,msg=MPIWGStaff.createNewDBEntry(self,data['publish_the_data'],data['key'],data['last_name'],
                                   data['first_name'],data['title'],data['status'],"",                                    data['first_name'],data['titles_new'],data['status'],"",
                                   "",data['date_from'],data['date_to'],                                    "",data['date_from'],data['date_to'],
                                   data['department'],data['home_inst'],data['funded_by'],                                    data['department'],'',data['funded_by'],
                                   data['e_mail2'],data['current_work'],"yes",data['date_stay_at_mpiwg'],data['group'],"no",data['current_work'])                                    data['e_mail2'],data['current_work'],"yes",data['date_stay_at_mpiwg'],data['group'],"no",data['current_work'])
                   
         return result,msg          return result,msg
     
     def updatePersonEntry(self,data,ignoreEntries=[]):      def updatePersonEntry(self,data,ignoreEntries=None):
         """update an person entry from data. but ignore all fields in ignore Entries"""          """update an person entry from data. but ignore all fields in ignore Entries"""
           if ignoreEntries is None:
               ignoreEntries = []
                   
         ignoreEntries.append('current_work') # TODO:updatecurrent work          #ignoreEntries.append('current_work') # TODO:updatecurrent work
           logging.debug("updatePersonEntry: data=%s ignoreEntries=%s"%(repr(data),repr(ignoreEntries)))
                   
         if data['date_to']=="": # wenn date_to leer          if data['date_to']=="": # wenn date_to leer
              data['date_to']="date_none"               data['date_to']="date_none"
Line 793  class MPIWGRoot(ZSQLExtendFolder): Line 876  class MPIWGRoot(ZSQLExtendFolder):
                     
         columns=data.keys()          columns=data.keys()
         for x in ignoreEntries:          for x in ignoreEntries:
             logging.info("ign rem: %s"%x)              logging.debug("updatePersonEntry: ignoring %s"%x)
             try: #falls in ignore entries felder sind, die nicht in columns sind, fange den fehler ab              try: #falls in ignore entries felder sind, die nicht in columns sind, fange den fehler ab
              columns.remove(x)               columns.remove(x)
             except:              except:
Line 827  class MPIWGRoot(ZSQLExtendFolder): Line 910  class MPIWGRoot(ZSQLExtendFolder):
         resultSet=self.REQUEST.SESSION['personal_www']['resultSet']          resultSet=self.REQUEST.SESSION['personal_www']['resultSet']
         news=self.REQUEST.SESSION['personal_www']['news']          news=self.REQUEST.SESSION['personal_www']['news']
         conflicts=self.REQUEST.SESSION['personal_www']['conflicts']          conflicts=self.REQUEST.SESSION['personal_www']['conflicts']
           logging.debug("updatePersonalwww_doIt: args=%s\n  resultSet=%s\n  news=%s\n  conflicts=%s"%(args,resultSet,news,conflicts))
           
         ret="<html><body>"          ret="<html><body>"
         # generate the new entry          # generate the new entry
               
Line 834  class MPIWGRoot(ZSQLExtendFolder): Line 919  class MPIWGRoot(ZSQLExtendFolder):
             ret+="<h2>Hinzugef&uuml;gt</h2>"              ret+="<h2>Hinzugef&uuml;gt</h2>"
             ret+="<p>Neueintr&auml;ge erscheinen erst auf der Homepage, wenn ihnen eine e-mail Adresse zugeordnet wurde.</p>"              ret+="<p>Neueintr&auml;ge erscheinen erst auf der Homepage, wenn ihnen eine e-mail Adresse zugeordnet wurde.</p>"
             ret+="<ul>"              ret+="<ul>"
         for new in news:  
               
           for new in news:
             if args.has_key(self.urlQuote(new.encode('utf-8'))): # entry was selected              if args.has_key(self.urlQuote(new.encode('utf-8'))): # entry was selected
                 result,msg=self.generateNewPersonEntry(resultSet[new])                  result,msg=self.generateNewPersonEntry(resultSet[new])
                 if not result:                  if not result:
Line 843  class MPIWGRoot(ZSQLExtendFolder): Line 928  class MPIWGRoot(ZSQLExtendFolder):
                     ret+="<li>ERROR: %s %s"%(new.encode('utf-8'),msg)                      ret+="<li>ERROR: %s %s"%(new.encode('utf-8'),msg)
                 else:                  else:
                     ret+="<li>OK: %s"%(new.encode('utf-8'))                      ret+="<li>OK: %s"%(new.encode('utf-8'))
                       
         if news and (len(news)>0):          if news and (len(news)>0):
             ret+="<p>Neueintr&auml;ge erscheinen erst auf der Homepage, wenn ihnen eine e-mail Adresse zugeordnet wurde.</p>"              ret+="<p>Neueintr&auml;ge erscheinen erst auf der Homepage, wenn ihnen eine e-mail Adresse zugeordnet wurde.</p>"
             ret+="</ul>"                   ret+="</ul>"     
Line 861  class MPIWGRoot(ZSQLExtendFolder): Line 947  class MPIWGRoot(ZSQLExtendFolder):
                 if args[conflict.encode('utf-8')+'_'+cf[0]]=="stored": #use the stored one                  if args[conflict.encode('utf-8')+'_'+cf[0]]=="stored": #use the stored one
                     ignoreEntries.append(cf[0])  #so ignore field cf[0]                             ignoreEntries.append(cf[0])  #so ignore field cf[0]       
                     displayIgnored.append(cf)                      displayIgnored.append(cf)
                       
             if len(displayIgnored)>0:              if len(displayIgnored)>0:
                 ret+="<h3>%s</h3>"%conflict.encode('utf-8')                  ret+="<h3>%s</h3>"%conflict.encode('utf-8')
                   
                 ret+="<table border='1'>"                  ret+="<table border='1'>"
                 for iE in displayIgnored:                  for iE in displayIgnored:
                     ret+="<tr><td>%s</td><td>%s</td><td>%s</td>"%(iE[0].encode('utf-8'),iE[1].encode('utf-8'),iE[2].encode('utf-8'))                      ret+="<tr><td>%s</td><td>%s</td><td>%s</td>"%(iE[0].encode('utf-8'),iE[1].encode('utf-8'),iE[2].encode('utf-8'))
                 ret+="</tabel>"                  ret+="</table>"
                                   
             self.updatePersonEntry(resultSet[conflict],ignoreEntries=ignoreEntries)              self.updatePersonEntry(resultSet[conflict],ignoreEntries=ignoreEntries)
                     
Line 920  class MPIWGRoot(ZSQLExtendFolder): Line 1006  class MPIWGRoot(ZSQLExtendFolder):
         try:          try:
                           
             self.ProjectCatalog.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1'])              self.ProjectCatalog.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1'])
               logger("MPIWG Root (reindexCatalog: projects)",logging.INFO,"DONE")
         except:          except:
             logger("MPIWG Root (updatehomepage)",logging.WARNING," %s %s"%sys.exc_info()[:2])              logger("MPIWG Root (reindexCatalog: projects)",logging.WARNING," %s %s"%sys.exc_info()[:2])
           
           try:
               
               self.MembersCatalog.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1'])
               logger("MPIWG Root (reindexCatalog: members)",logging.INFO,"DONE")
           except:
               logger("MPIWG Root (reindexCatalog: members)",logging.WARNING," %s %s"%sys.exc_info()[:2])
           
           try:
               
               self.fulltextProjectsMembers.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1'])
               logger("MPIWG Root (reindexCatalog: fulltextProjectsMembers)",logging.INFO,"DONE")
           except:
               logger("MPIWG Root (reindexCatalog: fulltextProjectsMembers)",logging.WARNING," %s %s"%sys.exc_info()[:2])
               
                           
                   
           
Line 941  class MPIWGRoot(ZSQLExtendFolder): Line 1043  class MPIWGRoot(ZSQLExtendFolder):
                                           
         results=self.MembersCatalog({'isPublished':True})          results=self.MembersCatalog({'isPublished':True})
                 
         ret=[(", ".join([proj.lastName, proj.firstName]).decode('utf-8'),proj.getKey) for proj in results]          ret=[(unicodify(", ".join([proj.lastName, proj.firstName])), proj.getKey) for proj in results]
                   
         ret.sort(sorter)          ret.sort(sorter)
         return ret          return ret
Line 994  class MPIWGRoot(ZSQLExtendFolder): Line 1096  class MPIWGRoot(ZSQLExtendFolder):
         onlyArchived=0: alle Projekte          onlyArchived=0: alle Projekte
         onlyArchived= 1 : nur aktuelle Projekte          onlyArchived= 1 : nur aktuelle Projekte
         onlyArchived = 2: nur archivierte Projekte          onlyArchived = 2: nur archivierte Projekte
           
           department fuer das Tree geholt werden soll
         """          """
   
         returnListTmp=[]          returnListTmp=[]
Line 1013  class MPIWGRoot(ZSQLExtendFolder): Line 1117  class MPIWGRoot(ZSQLExtendFolder):
                     if idNr[0]=="x": # kompatibilitaet mit alter Konvention, x vor der Nummer macht project inactive                      if idNr[0]=="x": # kompatibilitaet mit alter Konvention, x vor der Nummer macht project inactive
                         project[0].setActiveFlag(False)                          project[0].setActiveFlag(False)
                                         
                     if (not dep) or (idNr[0]==dep): #falls dep gesetzt ist nur dieses hinzufuegen.                      if (not dep) or (splittedId[0]==dep): #falls dep gesetzt ist nur dieses hinzufuegen.
                                                   
                         if (onlyActive==0):                          if (onlyActive==0):
                             returnListTmp.append((depth,nr,title,project[0]))                              returnListTmp.append((depth,nr,title,project[0]))
Line 1075  class MPIWGRoot(ZSQLExtendFolder): Line 1179  class MPIWGRoot(ZSQLExtendFolder):
         hashList={}          hashList={}
         onlyArchived=int(form.get("onlyArchived",0))          onlyArchived=int(form.get("onlyArchived",0))
         onlyActive=int(form.get("onlyActive",0))          onlyActive=int(form.get("onlyActive",0))
           dep=form.get("dep",None)
                   
                   fields=self.getTree(dep=dep,onlyArchived=onlyArchived,onlyActive=onlyActive)
         fields=self.getTree(onlyArchived=onlyArchived,onlyActive=onlyActive)  
                   
         logging.info("GOT TREE!----------------------------------------------------")          logging.info("GOT TREE!----------------------------------------------------")
         for field in form.keys():          for field in form.keys():
Line 1094  class MPIWGRoot(ZSQLExtendFolder): Line 1198  class MPIWGRoot(ZSQLExtendFolder):
                 else:                  else:
                     fields[nr][3].setActiveFlag(False)                      fields[nr][3].setActiveFlag(False)
                                           
                 #nummer hat sich geŠndert                  #nummer hat sich geaendert
                                   
                 entryChanged = False;                  entryChanged = False;
                                   
                   if isinstance(fields[nr][3].xdata_05,list): #for some reasons somtimes the content of the field is a list with one entry.
                       fields[nr][3].xdata_05=fields[nr][3].xdata_05[0]
                                   
                 if not (fields[nr][3].xdata_05==form[str(nr)+'_number']):                  if not (fields[nr][3].xdata_05==form[str(nr)+'_number']):
                     logging.info("Changed!Number+++++++++++++++++++++++++++++++++")                      logging.info("Changed!Number+++++++++++++++++++++++++++++++++")
                       logging.info(repr(fields[nr][3].xdata_05)+" ---> "+ repr(form[str(nr)+'_number']))
                     fields[nr][3].xdata_05=form[str(nr)+'_number']                      fields[nr][3].xdata_05=form[str(nr)+'_number']
                     entryChanged = True                      entryChanged = True
                                           
                 #completed har sich geaendert                  #completed har sich geaendert
                                                           
                 if not (fields[nr][3].getCompletedAt()==fields[nr][3].transformDate(form[str(nr)+'_completed'])):                  td = fields[nr][3].transformDate # hole die funktion zum transformieren des datums
                     
                   if not (td(fields[nr][3].getCompletedAt())==td(form[str(nr)+'_completed'])):
                     fields[nr][3].setCompletedAt(form[str(nr)+'_completed'])                      fields[nr][3].setCompletedAt(form[str(nr)+'_completed'])
                       logging.info(repr(td(fields[nr][3].getCompletedAt()))+" ---> "+ repr(td(form[str(nr)+'_completed'])))
                     logging.info("Changed!Completed+++++++++++++++++++++++++++++++++")                      logging.info("Changed!Completed+++++++++++++++++++++++++++++++++")
                     entryChanged = True                      entryChanged = True
                                   
                 if not (fields[nr][3].getStartedAt()==fields[nr][3].transformDate(form[str(nr)+'_started'])):                  if not (td(fields[nr][3].getStartedAt())==td(form[str(nr)+'_started'])):
                     fields[nr][3].setStartedAt(form[str(nr)+'_started'])                      fields[nr][3].setStartedAt(form[str(nr)+'_started'])
               
                       logging.info(repr(td(fields[nr][3].getStartedAt()))+" ---> "+ repr(td(form[str(nr)+'_started'])))
                     logging.info("Changed!Started+++++++++++++++++++++++++++++++++")                      logging.info("Changed!Started+++++++++++++++++++++++++++++++++")
                     entryChanged = True                      entryChanged = True
                                   
Line 1215  class MPIWGRoot(ZSQLExtendFolder): Line 1327  class MPIWGRoot(ZSQLExtendFolder):
                   
         ret=[]            ret=[]  
         if key:               if key:     
               logging.debug("MPIWGROOT (getProjectsOfMember):"+key)
             proj=self.ProjectCatalog({'getPersonKeyList':utf8ify(key)})              proj=self.ProjectCatalog({'getPersonKeyList':utf8ify(key)})
         else:          else:
             return ret # key muss definiert sein              return ret # key muss definiert sein
                   
                logging.debug("MPIWGROOT (getProjectsOfMember):"+repr(proj))
         if proj:          if proj:
             proj2=[]              proj2=[]
             for x in proj:              for x in proj:
Line 1460  class MPIWGRoot(ZSQLExtendFolder): Line 1573  class MPIWGRoot(ZSQLExtendFolder):
         return "done"          return "done"
           
   
       def sortResults(self,results):
           """search the catalog and give results back sorted by meta_type"""
           ret = {}
           logging.debug(results())
           for result in results():
               metaType = result.meta_type
               resultList= ret.get(metaType,[])
               resultList.append(result)
               ret[metaType]=resultList
           
           logging.debug(ret)
           return ret
           
                           
 def manage_addMPIWGRootForm(self):  def manage_addMPIWGRootForm(self):
     """form for adding the root"""      """form for adding the root"""

Removed from v.1.1.2.19  
changed lines
  Added in v.1.1.2.36


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