--- MPIWGWeb/MPIWGProjects.py 2005/06/20 17:53:25 1.47.2.15
+++ MPIWGWeb/MPIWGProjects.py 2005/08/15 15:22:42 1.47.2.19
@@ -66,6 +66,13 @@ class MPIWGLink(SimpleItem):
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"""
@@ -174,7 +181,7 @@ class MPIWGTemplate(ZopePageTemplate):
"""change form"""
- def isActive(self):
+ def isActiveItem(self):
"""teste ob ausgewaehlt"""
if self.absolute_url()==self.REQUEST['URL']:
return "aktiv"
@@ -237,7 +244,7 @@ class MPIWGRoot(ZSQLExtendFolder):
fieldLabels={'WEB_title':'WEB_Title','xdata_01':'Responsible Scientists','xdata_02':'Department',
'xdata_03':'Historical Persons','xdata_04':'Time period',
'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_13':'Funding institutions','WEB_project_header':'WEB_project_header',
'WEB_project_description':'WEB_project_description','WEB_related_pub':'WEB_related_pub'}
@@ -245,6 +252,10 @@ class MPIWGRoot(ZSQLExtendFolder):
folders=['MPIWGProject','Folder','ECHO_Navigation']
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):
"""kategorie"""
splitted=url.split("/")
@@ -252,14 +263,18 @@ class MPIWGRoot(ZSQLExtendFolder):
def generateUrlProject(self,url,project=None):
"""erzeuge aus absoluter url, relative des Projektes"""
-
- splitted=url.split("/")
- length=len(splitted)
- short=splitted[length-2:length]
if project:
- base=self.REQUEST['URL3']+"/"+"/".join(short)
+ splitted=url.split("/")
+ length=len(splitted)
+ short=splitted[length-2:length]
+
+ base=self.REQUEST['URL3']+"/"+"/".join(short)
+
else:
- base=self.REQUEST['URL1']+"/"+"/".join(short)
+ findPart=url.find("/projects/")
+ base=self.REQUEST['URL1']+"/"+url[findPart:]
+
+
return base
def isNewCapital(self,text=None,reset=None):
@@ -273,15 +288,31 @@ class MPIWGRoot(ZSQLExtendFolder):
else:
return False
- def subNav(self,id):
+ def subNav(self,obj):
"""return subnav elemente"""
def sortWeight(x,y):
x1=int(getattr(x[1],'weight','0'))
y1=int(getattr(y[1],'weight','0'))
return cmp(x1,y1)
- if hasattr(self,id):
- subs=self.ZopeFind(getattr(self,id),obj_metatypes=['MPIWGTemplate','MPIWGLink'])
+ #if obj.meta_type in ['MPIWGTemplate','MPIWGLink']:
+ # 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=[]
+
for x in subs:
if not(x[1].title==""):
subret.append(x)
@@ -289,6 +320,7 @@ class MPIWGRoot(ZSQLExtendFolder):
return subret
else:
return None
+
def isActive(self,name):
"""teste ob subnavigation aktiv"""
for part in self.REQUEST['URL'].split("/"):
@@ -493,7 +525,7 @@ class MPIWGRoot(ZSQLExtendFolder):
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editHistoricalPersonsForm')).__of__(self)
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"""
def sort(x,y):
return cmp(x.WEB_title[0],y.WEB_title[0])
@@ -508,7 +540,15 @@ class MPIWGRoot(ZSQLExtendFolder):
fieldContents.append(" AND ".join(x.split()))
projects=self.ProjectCatalog({fieldName:string.join(fieldContents,' AND')})
#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)
return ret
@@ -541,19 +581,20 @@ class MPIWGRoot(ZSQLExtendFolder):
"""test"""
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"""
ret=[]
+ print "gC",date,childs
if parents:
splitted=parents.split(".")
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:
ret.append(project)
if childs:
- for project in self.getProjectFields('xdata_05',sort='int'):
+ for project in self.getProjectFields('xdata_05',sort='int',date=date):
searchStr=childs+"(\..*)"
if re.match(searchStr,project[1]):
@@ -566,7 +607,7 @@ class MPIWGRoot(ZSQLExtendFolder):
ret.append(project)
return ret
- def getProjectFields(self,fieldName,actual="yes",folder=None,sort=None):
+ def getProjectFields(self,fieldName,date=None,folder=None,sort=None):
"""getListofFieldNames"""
ret=[]
@@ -575,8 +616,8 @@ class MPIWGRoot(ZSQLExtendFolder):
for object in objects:
obj=object[1]
-
- if (not getattr(obj,'invisible',None)) and (obj.isActual()):
+ obj=obj.getActualVersion(date)
+ if obj and (not getattr(obj,'invisible',None)):
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
@@ -599,7 +640,7 @@ class MPIWGRoot(ZSQLExtendFolder):
def showNewProjects(self):
projects=[]
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)
@@ -713,10 +754,11 @@ class MPIWGRoot(ZSQLExtendFolder):
return entry
- def getTree(self):
+ def getTree(self,date=None):
"""generate Tree from project list"""
+ print date
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
if not idNr=="":
@@ -779,7 +821,10 @@ class MPIWGRoot(ZSQLExtendFolder):
department=element[3].getContent('xdata_05')
ret+="""
%s: """%(department,departmentName[department])
- ret+="""%s"""%(self.generateUrlProject(element[3].absolute_url())+"/index.html",element[3].getContent('WEB_title'))
+ if self.REQUEST.has_key('date'):
+ ret+="""%s"""%(self.generateUrlProject(element[3].absolute_url())+"/index.html",self.REQUEST['date'],element[3].getContent('WEB_title'))
+ else:
+ ret+="""%s"""%(self.generateUrlProject(element[3].absolute_url())+"/index.html",element[3].getContent('WEB_title'))
return ret
def formatElementForOverview(self,element):
@@ -840,8 +885,9 @@ class MPIWGRoot(ZSQLExtendFolder):
for idNr in form.keys():
- fields[int(idNr)][3].xdata_05=form[idNr]
-
+ if not (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:
@@ -921,17 +967,17 @@ class MPIWGRoot(ZSQLExtendFolder):
ret.append("%s"%person)
return string.join(ret,";")
- def getProjectsOfMembers(self):
+ def getProjectsOfMembers(self,date=None):
"""give tuple member /projects"""
ret=[]
members=self.getAllMembers()
#return str(members)
for x in members:
- ret+=self.getProjectsOfMember(name=x)
+ ret+=self.getProjectsOfMember(name=x,date=date)
return ret
- def getProjectsOfMember(self,name=None,email=None):
+ def getProjectsOfMember(self,name=None,email=None,date=None):
"""get project of a member"""
def sortP(x,y):
"""sort by sorting number"""
@@ -960,8 +1006,7 @@ class MPIWGRoot(ZSQLExtendFolder):
if proj:
proj2=[]
for x in proj:
-
- if not getattr(x.getObject(),'invisible',None):
+ if (not getattr(x.getObject(),'invisible',None)) and (getattr(x.getObject(),'archiveTime','')==''):
if not((splitted[1]==" Christoph") and (splitted[0]=="Hoffmann") and (str(x.WEB_title).find('Einstein')>0)):
proj2.append(x)
@@ -972,8 +1017,8 @@ class MPIWGRoot(ZSQLExtendFolder):
if proj:
names=[x.WEB_title 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)
@@ -1097,6 +1142,47 @@ class MPIWGProject(CatalogAware,Folder):
return retTXT%(s,s)
else:
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):
"""gibt 1 zurueck wenn aktuell, 0 sonst"""
actualTime=time.localtime()
@@ -1173,8 +1259,9 @@ class MPIWGProject(CatalogAware,Folder):
RESPONSE.redirect('manage_main')
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.title=id
if argv:
@@ -1203,34 +1290,55 @@ class MPIWGProject(CatalogAware,Folder):
def sortProjectsByTime(x,y):
return cmp(x[1].archiveTime,y[1].archiveTime)
-
+
+ #suche ob aeltere versionen vorhanden sind
+
finds=self.ZopeFind(self,obj_metatypes=['MPIWGProject'])
- if not finds:
- return self.absolute_url()
+ 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.REQUEST['URL1']+"/"+self.getId()
+ else:
+ return self.REQUEST['URL1']+"/no_project"
+
+
else:
finds.sort(sortProjectsByTime)
for find in finds:
- if int(find[1].archiveTime) > int(date):
- return find[1].absolute_url()
+ #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 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):
"""show homepage"""
-
+ print "D",self.REQUEST.get('date','nodate')
if self.REQUEST.has_key('date') and self.REQUEST.SESSION.get('MPI_redirected',None)==None:
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:
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:
- 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)
return pt()
@@ -1463,6 +1571,6 @@ def manage_addMPIWGProject(self,id,RESPO
self._setObject(id,newObj)
-
+
if RESPONSE is not None:
RESPONSE.redirect('manage_main')