--- MPIWGWeb/MPIWGProjects.py 2005/06/20 17:53:25 1.47.2.15
+++ MPIWGWeb/MPIWGProjects.py 2005/08/30 17:07:53 1.47.2.20
@@ -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,26 @@ class MPIWGRoot(ZSQLExtendFolder):
folders=['MPIWGProject','Folder','ECHO_Navigation']
meta_type='MPIWGRoot'
+ def versionHeaderEN(self):
+ """version header text"""
+
+ date= self.REQUEST.get('date',None)
+ if date:
+ txt="""
This pages shows the project which existed at %s
"""%str(date)
+ return txt
+ return ""
+
+ def versionHeaderDE(self):
+ """version header text"""
+ date= self.REQUEST.get('date',None)
+ if date:
+ txt="""Auf dieser Seite finden Sie die Projekte mit Stand vom %s
"""%str(date)
+ return ""
+
+ 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 +279,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 +304,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 +336,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 +541,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 +556,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 +597,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=[]
+
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 +623,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 +632,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 +656,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 +770,11 @@ class MPIWGRoot(ZSQLExtendFolder):
return entry
- def getTree(self):
+ def getTree(self,date=None):
"""generate Tree from project list"""
+
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 +837,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 +901,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 +983,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 +1022,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 +1033,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 +1158,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 +1275,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,36 +1306,59 @@ 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')
-
-
- def index_html(self):
- """show homepage"""
+ if int(date)>int(ad):
- 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']))
+ return self.REQUEST['URL1']+"/"+self.getId()
else:
- self.REQUEST.SESSION['MPI_redirected']=None
+ return self.REQUEST['URL1']+"/no_project"
- ext=self.ZopeFind(self.aq_parent,obj_ids=["project_main"])
-
+
+ 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,request=True,context=None):
+ """show homepage"""
+ if not context:
+ context=self
+ if request:
+ 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'])+"?date="+self.REQUEST['date'])
+ else:
+ self.REQUEST.SESSION['MPI_redirected']=None
+
+ #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__(context)
- pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','project_main')).__of__(self)
return pt()
@@ -1339,12 +1465,65 @@ class MPIWGProject(CatalogAware,Folder):
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGProject_index.zpt')).__of__(self)
return pt()
+ def saveFromPreview(self):
+ """save content aus preview"""
+ self.WEB_project_description=self.previewTemplate.WEB_project_description[0:]
+ self.REQUEST.RESPONSE.redirect("./index.html")
+
+ def saveEditedContent(self,kupu=None,preview=None):
+ """save Edited content"""
+
+ kupu=preview
+ #find content of body tags
+ start=kupu.find("")
+ end=kupu.find("")
+ newcontent= kupu[start+6:end]
+
+ if preview:
+ return self.preview(newcontent)
+
+ self.WEB_project_description=newcontent[0:]
+
+ self.REQUEST.RESPONSE.redirect("./edit")
+
+ return True
+
+ def edit(self):
+ """Edit pages"""
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGProjectNeu.zpt')).__of__(self)
+ return pt()
+
+ def preview(self,description):
+ """preview"""
+ tmpPro=getattr(self,"previewTemplate",None)
+ if not tmpPro:
+ tmpPro=MPIWGProject("previewTemplate")
+ self._setObject("previewTemplate",tmpPro)
+ for field in definedFields:
+ setattr(tmpPro,field,getattr(self,field))
+ tmpPro.WEB_project_description=description[0:]
+
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','previewFrame.zpt')).__of__(self)
+ return pt()
+
+ #return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+"/previewTemplate")
+
+
+ def getWebProject_description(self):
+ """get description"""
+
+ if type(self.WEB_project_description) is ListType:
+ return "Hello"+self.WEB_project_description[0]+""
+ else:
+ return self.WEB_project_description
+
+
def editMPIWGProjectForm(self):
"""editform"""
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGProject.zpt')).__of__(self)
return pt()
- def editMPIWGProject(self,RESPONSE=None):
+ def editMPIWGProject(self,RESPONSE=None,fromEdit=None):
"""edit the project and archive the old version"""
self.copyObjectToArchive() # archive the object
@@ -1355,17 +1534,27 @@ class MPIWGProject(CatalogAware,Folder):
setattr(self,x,[self.REQUEST[x].decode('utf-8')])
+ if fromEdit and (RESPONSE is not None):
+ RESPONSE.redirect('./editMPIWGBasisEditor')
-
- if RESPONSE is not None:
- RESPONSE.redirect('manage_main')
+ else:
+ if RESPONSE is not None:
+ RESPONSE.redirect('manage_main')
+
+ def editMPIWGDisciplinesThemesEditor(self):
+ """edit from edit"""
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGDisciplinesThemesNeu.zpt')).__of__(self)
+ return pt()
+
+
def editMPIWGDisciplinesThemesForm(self):
"""edit the disciplines and themes Form"""
+
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGDisciplinesThemes.zpt')).__of__(self)
return pt()
- def editMPIWGDisciplinesThemes(self,disciplines=None,themes=None,RESPONSE=None):
+ def editMPIWGDisciplinesThemes(self,disciplines=None,themes=None,RESPONSE=None,fromEdit=None):
"""edit disciplin and form"""
if disciplines:
if type(disciplines) is StringType:
@@ -1381,9 +1570,13 @@ class MPIWGProject(CatalogAware,Folder):
self.xdata_10=string.join(themes,";")
else:
self.xdata_10=""
-
- if RESPONSE is not None:
- RESPONSE.redirect('manage_main')
+
+ if fromEdit and (RESPONSE is not None):
+ RESPONSE.redirect('./editMPIWGDisciplinesThemesEditor')
+
+ else:
+ if RESPONSE is not None:
+ RESPONSE.redirect('manage_main')
def isChecked(self,wert,list):
@@ -1401,11 +1594,19 @@ class MPIWGProject(CatalogAware,Folder):
if (not x==u'') and x in wert:
return 1
return 0
+
+ def editMPIWGBasisEditor(self):
+ """editform"""
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGBasisNeu.zpt')).__of__(self)
+ return pt()
+
def editMPIWGBasisForm(self):
"""editform"""
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGBasis.zpt')).__of__(self)
return pt()
+
+
def editMPIWGRelatedPublicationsForm(self):
"""Edit related Publications"""
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGRelatedPublications.zpt')).__of__(self)
@@ -1463,6 +1664,6 @@ def manage_addMPIWGProject(self,id,RESPO
self._setObject(id,newObj)
-
+
if RESPONSE is not None:
RESPONSE.redirect('manage_main')