Diff for /MPIWGWeb/MPIWGProjects.py between versions 1.47.2.12 and 1.47.2.19

version 1.47.2.12, 2005/06/08 20:13:17 version 1.47.2.19, 2005/08/15 15:22:42
Line 61  def sortI(x,y): Line 61  def sortI(x,y):
     except:      except:
         return cmp(x[1],y[1])          return cmp(x[1],y[1])
   
   class MPIWGLink(SimpleItem):
       """create a symbolic link to another page"""
   
       meta_type="MPIWGLink"
       
       def isActiveItem(self):
           """teste ob ausgewaehlt"""
           #url1 beim link anstelle von url1, da link jeweils index_html als url hat.
           if self.absolute_url()==self.REQUEST['URL1']:
               return "aktiv"
           else:
               return ""
   
       def __init__(self,id,link,title='',weight=''):
           """init mpiwglink"""
           self.id=id
           self.link=link
           self.title=title
           self.weight=weight
   
       def getObj(self):
           """bekomme original"""
          ##  objpath=self.link.replace("/",".")
   ##         if objpath[0]!=".":
   ##             objpath="."+objpath
   
   ##         print objpath
   ##         return eval("self"+objpath)
   
   
           splitted=self.link.lstrip().split("/")
           obj=self
           for x in splitted:
           if not x=="":
                 obj=getattr(obj,x)
               
           return obj
   
       def getWeight(self):
           if self.linkWeight and linkWeight!="":
               return self.linkWeight
           else:
               return self.getObj().weight
   
       manage_options=SimpleItem.manage_options+(
           {'label':'main config','action':'changeLinkForm'},
           )
   
   
       def changeLinkForm(self):
           """change MPIWG link"""
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGLinkChange.zpt')).__of__(self)
           return pt()
   
       def changeLink(self,link,title,weight,RESPONSE=None):
           """change links"""
           self.link=link
           self.title=title
           self.weight=weight
   
           if RESPONSE is not None:
               RESPONSE.redirect('manage')
   
       def index_html(self):
           """index"""
           
           return self.getObj().pt_render(extra_context={'here':self})
                                          
   
   def manage_addMPIWGLinkForm(self):
       """Form for adding link"""
       pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/AddMPIWGLink.zpt')).__of__(self)
       return pt()
   
   def manage_addMPIWGLink(self,id,link,title,weight,RESPONSE=None):
       """add link"""
       newObj=MPIWGLink(id,link,title,weight)
   
       self._setObject(id,newObj)
       
       if RESPONSE is not None:
           RESPONSE.redirect('manage_main')
   
   
 class MPIWGTemplate(ZopePageTemplate):  class MPIWGTemplate(ZopePageTemplate):
     """Create a layout Template for different purposes"""      """Create a layout Template for different purposes"""
   
Line 97  class MPIWGTemplate(ZopePageTemplate): Line 181  class MPIWGTemplate(ZopePageTemplate):
           
         """change form"""          """change form"""
   
     def isActive(self):      def isActiveItem(self):
         """teste ob ausgewaehlt"""          """teste ob ausgewaehlt"""
         if self.absolute_url()==self.REQUEST['URL']:          if self.absolute_url()==self.REQUEST['URL']:
             return "aktiv"              return "aktiv"
Line 160  class MPIWGRoot(ZSQLExtendFolder): Line 244  class MPIWGRoot(ZSQLExtendFolder):
     fieldLabels={'WEB_title':'WEB_Title','xdata_01':'Responsible Scientists','xdata_02':'Department',      fieldLabels={'WEB_title':'WEB_Title','xdata_01':'Responsible Scientists','xdata_02':'Department',
              'xdata_03':'Historical Persons','xdata_04':'Time period',               'xdata_03':'Historical Persons','xdata_04':'Time period',
              'xdata_05':'Sorting number','xdata_06':'Keywords','xdata_07':'Short title',               'xdata_05':'Sorting number','xdata_06':'Keywords','xdata_07':'Short title',
              'xdata_08':'Other involved scholars' ,'xdata_09':'Part of','xdata_10':'Covered by',               'xdata_08':'Other involved scholars' ,'xdata_09':'Disciplines','xdata_10':'Themes',
              'xdata_11':'Object Digitallibrary','xdata_12':'Cooperation partners',               'xdata_11':'Object Digitallibrary','xdata_12':'Cooperation partners',
              'xdata_13':'Funding institutions','WEB_project_header':'WEB_project_header',               'xdata_13':'Funding institutions','WEB_project_header':'WEB_project_header',
              'WEB_project_description':'WEB_project_description','WEB_related_pub':'WEB_related_pub'}               'WEB_project_description':'WEB_project_description','WEB_related_pub':'WEB_related_pub'}
Line 168  class MPIWGRoot(ZSQLExtendFolder): Line 252  class MPIWGRoot(ZSQLExtendFolder):
     folders=['MPIWGProject','Folder','ECHO_Navigation']      folders=['MPIWGProject','Folder','ECHO_Navigation']
     meta_type='MPIWGRoot'      meta_type='MPIWGRoot'
   
       def queryLink(self,link):
           """append querystring to the link"""
           return "%s?%s"%(link,self.REQUEST.get('QUERY_STRING',''))
   
     def getKategory(self,url):      def getKategory(self,url):
     """kategorie"""      """kategorie"""
     splitted=url.split("/")      splitted=url.split("/")
Line 175  class MPIWGRoot(ZSQLExtendFolder): Line 263  class MPIWGRoot(ZSQLExtendFolder):
   
     def generateUrlProject(self,url,project=None):      def generateUrlProject(self,url,project=None):
         """erzeuge aus absoluter url, relative des Projektes"""          """erzeuge aus absoluter url, relative des Projektes"""
       if project:
         splitted=url.split("/")          splitted=url.split("/")
         length=len(splitted)          length=len(splitted)
         short=splitted[length-2:length]          short=splitted[length-2:length]
     if project:              
             base=self.REQUEST['URL3']+"/"+"/".join(short)              base=self.REQUEST['URL3']+"/"+"/".join(short)
   
     else:      else:
         base=self.REQUEST['URL1']+"/"+"/".join(short)              findPart=url.find("/projects/")
               base=self.REQUEST['URL1']+"/"+url[findPart:]
   
                   
         return base          return base
           
     def isNewCapital(self,text=None,reset=None):      def isNewCapital(self,text=None,reset=None):
Line 196  class MPIWGRoot(ZSQLExtendFolder): Line 288  class MPIWGRoot(ZSQLExtendFolder):
             else:              else:
                 return False                  return False
                   
     def subNav(self,id):      def subNav(self,obj):
         """return subnav elemente"""          """return subnav elemente"""
         def sortWeight(x,y):          def sortWeight(x,y):
             x1=int(getattr(x[1],'weight','0'))              x1=int(getattr(x[1],'weight','0'))
             y1=int(getattr(y[1],'weight','0'))              y1=int(getattr(y[1],'weight','0'))
             return cmp(x1,y1)              return cmp(x1,y1)
         if hasattr(self,id):          #if obj.meta_type in ['MPIWGTemplate','MPIWGLink']:
             subs=self.ZopeFind(getattr(self,id),obj_metatypes=['MPIWGTemplate'])          #    id=obj.aq_parent.getId()
           #else:
   
           #id=obj.getId()
   
           
           #suche die zweite ebene
           if not obj.aq_parent.getId() in ['de','en']:
               obj=obj.aq_parent
               
           while not self.ZopeFind(self,obj_ids=[obj.getId()]):
               obj=obj.aq_parent
           
           if hasattr(self,obj.getId()):
               
               subs=self.ZopeFind(getattr(self,obj.getId()),obj_metatypes=['MPIWGTemplate','MPIWGLink'])
             subret=[]              subret=[]
   
             for x in subs:              for x in subs:
                 if not(x[1].title==""):                  if not(x[1].title==""):
                     subret.append(x)                      subret.append(x)
Line 212  class MPIWGRoot(ZSQLExtendFolder): Line 320  class MPIWGRoot(ZSQLExtendFolder):
             return subret              return subret
         else:          else:
             return None              return None
   
     def isActive(self,name):      def isActive(self,name):
         """teste ob subnavigation aktiv"""          """teste ob subnavigation aktiv"""
         for part in self.REQUEST['URL'].split("/"):          for part in self.REQUEST['URL'].split("/"):
Line 416  class MPIWGRoot(ZSQLExtendFolder): Line 525  class MPIWGRoot(ZSQLExtendFolder):
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editHistoricalPersonsForm')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editHistoricalPersonsForm')).__of__(self)
         return pt()          return pt()
   
     def getProjectsByFieldContent(self,fieldName,fieldContentsEntry):      def getProjectsByFieldContent(self,fieldName,fieldContentsEntry, date=None):
         """gib alle Projekte aus mit Value von field mit fieldName enthält ein Element der Liste fieldContents"""          """gib alle Projekte aus mit Value von field mit fieldName enthält ein Element der Liste fieldContents"""
         def sort(x,y):          def sort(x,y):
         return cmp(x.WEB_title[0],y.WEB_title[0])          return cmp(x.WEB_title[0],y.WEB_title[0])
   
     if type(fieldContentsEntry) is StringType:      if type(fieldContentsEntry) is StringType:
             fieldContents=[fieldContentsEntry]              fieldContentsTmp=[fieldContentsEntry]
         else:          else:
             fieldContents=fieldContentsEntry              fieldContentsTmp=fieldContentsEntry
                           
         projects=self.ProjectCatalog({fieldName:string.join(fieldContents,' OR')})          fieldContents=[]
           for x in fieldContentsTmp:
               fieldContents.append(" AND ".join(x.split()))
           projects=self.ProjectCatalog({fieldName:string.join(fieldContents,' AND')})
         #print projects          #print projects
     ret=[x for x in projects]      #ret=[x for x in projects]
           ret=[]
           for x in projects:
               obj=x.getObject()
               obj=obj.getActualVersion(date)
               if obj and (not getattr(obj,'invisible',None)):
                   #if not (x in ret):
                       ret.append(x)
   
     ret.sort(sort)      ret.sort(sort)
         return ret          return ret
   
Line 461  class MPIWGRoot(ZSQLExtendFolder): Line 581  class MPIWGRoot(ZSQLExtendFolder):
         """test"""          """test"""
         return self.getProjectsByFieldContent('xdata_09',['biology'])[0].absolute_url          return self.getProjectsByFieldContent('xdata_09',['biology'])[0].absolute_url
   
     def getContexts(self,childs=None,parents=None,depth=None):      def getContexts(self,childs=None,parents=None,depth=None,date=None):
         """childs alle childs, alle parents"""          """childs alle childs, alle parents"""
         ret=[]          ret=[]
           print "gC",date,childs
         if parents:          if parents:
             splitted=parents.split(".")              splitted=parents.split(".")
             parentId=string.join(splitted[0:len(splitted)-1],".")              parentId=string.join(splitted[0:len(splitted)-1],".")
                   
             for project in self.getProjectFields('xdata_05',sort='int'):              for project in self.getProjectFields('xdata_05',sort='int',date=date):
                 if project[1]==parentId:                  if project[1]==parentId:
                     ret.append(project)                      ret.append(project)
   
         if childs:          if childs:
             for project in self.getProjectFields('xdata_05',sort='int'):              for project in self.getProjectFields('xdata_05',sort='int',date=date):
                 searchStr=childs+"(\..*)"                  searchStr=childs+"(\..*)"
                 if re.match(searchStr,project[1]):                  if re.match(searchStr,project[1]):
                                           
Line 486  class MPIWGRoot(ZSQLExtendFolder): Line 607  class MPIWGRoot(ZSQLExtendFolder):
                         ret.append(project)                          ret.append(project)
         return ret          return ret
           
     def getProjectFields(self,fieldName,actual="yes",folder=None,sort=None):      def getProjectFields(self,fieldName,date=None,folder=None,sort=None):
         """getListofFieldNames"""          """getListofFieldNames"""
         ret=[]          ret=[]
           
Line 495  class MPIWGRoot(ZSQLExtendFolder): Line 616  class MPIWGRoot(ZSQLExtendFolder):
                                   
         for object in objects:          for object in objects:
             obj=object[1]              obj=object[1]
                           obj=obj.getActualVersion(date)
             if (not getattr(obj,'invisible',None)) and (obj.isActual()):              if obj and (not getattr(obj,'invisible',None)):
                 if fieldName=="WEB_title_or_short":                  if fieldName=="WEB_title_or_short":
   
                     if len(obj.getContent('xdata_07'))<3: # hack weil z.Z. manchmal noch ein Trennzeichen ; oder , im Feld statt leer                      if len(obj.getContent('xdata_07'))<3: # hack weil z.Z. manchmal noch ein Trennzeichen ; oder , im Feld statt leer
Line 519  class MPIWGRoot(ZSQLExtendFolder): Line 640  class MPIWGRoot(ZSQLExtendFolder):
     def showNewProjects(self):      def showNewProjects(self):
         projects=[]          projects=[]
         for objs in self.getProjectFields('WEB_title_or_short'): # Get all Projets          for objs in self.getProjectFields('WEB_title_or_short'): # Get all Projets
             if objs[0].xdata_05[0] == "":              if objs[0].xdata_05 and (objs[0].xdata_05[0] == ""):
                                   
                 projects.append(objs)                  projects.append(objs)
                                   
Line 633  class MPIWGRoot(ZSQLExtendFolder): Line 754  class MPIWGRoot(ZSQLExtendFolder):
             return entry              return entry
   
   
     def getTree(self):      def getTree(self,date=None):
         """generate Tree from project list"""          """generate Tree from project list"""
           print date
         returnList=[]          returnList=[]
         for project in self.getProjectFields('xdata_05',sort="int"): # get Projects sorted by xdata_05          for project in self.getProjectFields('xdata_05',sort="int",date=date): # get Projects sorted by xdata_05
   
             for idNr in project[1].split(";"): # more than one number              for idNr in project[1].split(";"): # more than one number
                 if not idNr=="":                  if not idNr=="":
Line 699  class MPIWGRoot(ZSQLExtendFolder): Line 821  class MPIWGRoot(ZSQLExtendFolder):
                 department=element[3].getContent('xdata_05')                  department=element[3].getContent('xdata_05')
                 ret+="""<a href="#top"><img src="../grafik/totop.gif" vspace="10" border="0"></a><br><a name="dept%s"></a>%s: """%(department,departmentName[department])                  ret+="""<a href="#top"><img src="../grafik/totop.gif" vspace="10" border="0"></a><br><a name="dept%s"></a>%s: """%(department,departmentName[department])
   
               if self.REQUEST.has_key('date'):
                   ret+="""<a href="%s?date=%s">%s</a>"""%(self.generateUrlProject(element[3].absolute_url())+"/index.html",self.REQUEST['date'],element[3].getContent('WEB_title'))
               else:
             ret+="""<a href="%s">%s</a>"""%(self.generateUrlProject(element[3].absolute_url())+"/index.html",element[3].getContent('WEB_title'))              ret+="""<a href="%s">%s</a>"""%(self.generateUrlProject(element[3].absolute_url())+"/index.html",element[3].getContent('WEB_title'))
         return ret          return ret
           
Line 760  class MPIWGRoot(ZSQLExtendFolder): Line 885  class MPIWGRoot(ZSQLExtendFolder):
   
                   
         for idNr in form.keys():          for idNr in form.keys():
               if not (fields[int(idNr)][3].xdata_05==form[idNr]):
             fields[int(idNr)][3].xdata_05=form[idNr]              fields[int(idNr)][3].xdata_05=form[idNr]
                   fields[int(idNr)][3].copyObjectToArchive()
                   
   
         if RESPONSE is not None:          if RESPONSE is not None:
Line 841  class MPIWGRoot(ZSQLExtendFolder): Line 967  class MPIWGRoot(ZSQLExtendFolder):
                     ret.append("%s"%person)                      ret.append("%s"%person)
         return string.join(ret,";")          return string.join(ret,";")
                                                     
     def getProjectsOfMembers(self):      def getProjectsOfMembers(self,date=None):
         """give tuple member /projects"""          """give tuple member /projects"""
         ret=[]          ret=[]
         members=self.getAllMembers()          members=self.getAllMembers()
         #return str(members)          #return str(members)
         for x in members:          for x in members:
             ret+=self.getProjectsOfMember(name=x)              ret+=self.getProjectsOfMember(name=x,date=date)
                           
         return ret          return ret
   
     def getProjectsOfMember(self,name=None,email=None):      def getProjectsOfMember(self,name=None,email=None,date=None):
         """get project of a member"""          """get project of a member"""
         def sortP(x,y):          def sortP(x,y):
             """sort by sorting number"""              """sort by sorting number"""
Line 862  class MPIWGRoot(ZSQLExtendFolder): Line 988  class MPIWGRoot(ZSQLExtendFolder):
         ret=[]          ret=[]
         splitNeu=[]          splitNeu=[]
         if email:          if email:
             print "IIII:",self.getId()              
             members=self.ZopeFind(self.members,obj_metatypes=['MPIWGStaff'],obj_ids=[email],search_sub=1)              members=self.ZopeFind(self.members,obj_metatypes=['MPIWGStaff'],obj_ids=[email],search_sub=1)
             name =  members[0][1].title.decode('utf-8')              name =  members[0][1].title.decode('utf-8')
   
Line 880  class MPIWGRoot(ZSQLExtendFolder): Line 1006  class MPIWGRoot(ZSQLExtendFolder):
         if proj:          if proj:
             proj2=[]              proj2=[]
             for x in proj:              for x in proj:
                   if (not getattr(x.getObject(),'invisible',None)) and (getattr(x.getObject(),'archiveTime','')==''):
                 if not getattr(x.getObject(),'invisible',None):  
                     if not((splitted[1]==" Christoph") and (splitted[0]=="Hoffmann") and (str(x.WEB_title).find('Einstein')>0)):                      if not((splitted[1]==" Christoph") and (splitted[0]=="Hoffmann") and (str(x.WEB_title).find('Einstein')>0)):
                        proj2.append(x)                         proj2.append(x)
   
Line 893  class MPIWGRoot(ZSQLExtendFolder): Line 1018  class MPIWGRoot(ZSQLExtendFolder):
             names=[x.WEB_title for x in proj]              names=[x.WEB_title for x in proj]
             for x in proj:              for x in proj:
   
                 if not x.WEB_title in names:                  if (not x.WEB_title in names) and (getattr(x.getObject(),'archiveTime','')==''):
                     proj2.append(x)                      proj2.append(x)
   
   
Line 1017  class MPIWGProject(CatalogAware,Folder): Line 1142  class MPIWGProject(CatalogAware,Folder):
             return retTXT%(s,s)              return retTXT%(s,s)
         else:          else:
             return ""              return ""
   
       def getActualVersion(self,date=None):
           """actuelle version"""
           def sortProjectsByTime(x,y):
               return cmp(x[1].archiveTime,y[1].archiveTime)
   
           if not date:
               if self.isActual():
                   return self
               else:
                   return None
   
           #suche ob aeltere versionen vorhanden sind
   
           finds=self.ZopeFind(self,obj_metatypes=['MPIWGProject'])
           if not finds: #wenn nicht dann teste ob die aktuelle version schon existiert hat.
               ad=getattr(self,'creationTime','20050101000000')
               if int(date)>int(ad):
                   return self
               else:
                   return None
   
   
           else:
               finds.sort(sortProjectsByTime)
   
           for find in finds:
               #gehe durch die alten Projekte und finde das entprechende
               if (int(find[1].archiveTime) > int(date)) and (int(date)>int(getattr(find[1],'creationTime','20050101000000'))):
                   return find[1]
   
           #kein passendes gefunden, dann teste ob das aktuelle in frage kommt
           ad=getattr(self,'creationTime','20050101000000')
           
           if int(date)>int(ad):
           
               return self
           else:
               return None
             
           
     def isActual(self):      def isActual(self):
         """gibt 1 zurueck wenn aktuell, 0 sonst"""          """gibt 1 zurueck wenn aktuell, 0 sonst"""
         actualTime=time.localtime()          actualTime=time.localtime()
Line 1093  class MPIWGProject(CatalogAware,Folder): Line 1259  class MPIWGProject(CatalogAware,Folder):
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
                           
     def __init__(self, id, argv=None):      def __init__(self, id, argv=None):
         """initieriere classe"""          """initiere classe"""
                   
           self.creationTime=time.strftime("%Y%m%d%H%M%S",time.localtime())[0:]
         self.id=id          self.id=id
         self.title=id          self.title=id
         if argv:          if argv:
Line 1124  class MPIWGProject(CatalogAware,Folder): Line 1291  class MPIWGProject(CatalogAware,Folder):
         def sortProjectsByTime(x,y):          def sortProjectsByTime(x,y):
             return cmp(x[1].archiveTime,y[1].archiveTime)              return cmp(x[1].archiveTime,y[1].archiveTime)
                   
           #suche ob aeltere versionen vorhanden sind
   
         finds=self.ZopeFind(self,obj_metatypes=['MPIWGProject'])          finds=self.ZopeFind(self,obj_metatypes=['MPIWGProject'])
         if not finds:          if not finds: #wenn nicht dann teste ob die aktuelle version schon existiert hat.
             return self.absolute_url()              ad=getattr(self,'creationTime','20050101000000')
               if int(date)>int(ad):
                   return self.REQUEST['URL1']+"/"+self.getId()
               else:
                   return self.REQUEST['URL1']+"/no_project"
   
   
         else:          else:
             finds.sort(sortProjectsByTime)              finds.sort(sortProjectsByTime)
   
         for find in finds:          for find in finds:
             if int(find[1].archiveTime) > int(date):              #gehe durch die alten Projekte und finde das entprechende
                 return find[1].absolute_url()              if (int(find[1].archiveTime) > int(date)) and (int(date)>int(getattr(find[1],'creationTime','20050101000000'))):
                   return self.REQUEST['URL1']+"/"+find[1].getId()
   
         return self.absolute_url()          #kein passendes gefunden, dann teste ob das aktuelle in frage kommt
           ad=getattr(self,'creationTime','20050101000000')
                   
           if int(date)>int(ad):
                           
               return self.REQUEST['URL1']+"/"+self.getId()
           else:
               return self.REQUEST['URL1']+"/no_project"
           
               
       def no_project(self):
           """warnung: project noch nicht existent"""
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','no_project')).__of__(self)
           return pt()
                           
     def index_html(self):      def index_html(self):
         """show homepage"""          """show homepage"""
                   print "D",self.REQUEST.get('date','nodate')
         if self.REQUEST.has_key('date') and self.REQUEST.SESSION.get('MPI_redirected',None)==None:          if self.REQUEST.has_key('date') and self.REQUEST.SESSION.get('MPI_redirected',None)==None:
             self.REQUEST.SESSION['MPI_redirected']=1              self.REQUEST.SESSION['MPI_redirected']=1
             self.REQUEST.RESPONSE.redirect(self.checkDate(self.REQUEST['date']))              print "redirect"
               self.REQUEST.RESPONSE.redirect(self.checkDate(self.REQUEST['date'])+"?date="+self.REQUEST['date'])
         else:          else:
             self.REQUEST.SESSION['MPI_redirected']=None              self.REQUEST.SESSION['MPI_redirected']=None
                   
     ext=self.ZopeFind(self.aq_parent,obj_ids=["project_main"])      #ext=self.ZopeFind(self.aq_parent,obj_ids=["project_main"])
           ext=getattr(self,"project_main",None)
         if ext:          if ext:
             return getattr(self,ext[0][1].getId())()              return getattr(self,ext.getId())()
   
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','project_main')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','project_main')).__of__(self)
         return pt()          return pt()

Removed from v.1.47.2.12  
changed lines
  Added in v.1.47.2.19


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