--- MPIWGWeb/MPIWGProjects.py 2008/06/24 11:16:26 1.47.2.84
+++ MPIWGWeb/MPIWGProjects.py 2008/08/28 18:20:09 1.47.2.92
@@ -1,37 +1,37 @@
"""This contains the class MPIWG Projects
for organizing and maintaining the different project pages
+$author dwinter - last change 26.06.2008
+
"""
from Products.PageTemplates.PageTemplateFile import PageTemplateFile
-from Products.PageTemplates.PageTemplate import PageTemplate
from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
-from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder
from Products.ZCatalog.CatalogPathAwareness import CatalogAware
+from Products.MPIWGBibliography.BibliographyManager import BibliographyManager
from OFS.Image import Image
from Globals import package_home
import urllib
-import MPIWGStaff
-import string
import re
-import os
+import os
from types import *
import logging
import xmlhelper # Methoden zur Verwaltung der projekt xml
from OFS.SimpleItem import SimpleItem
from OFS.Folder import Folder
-from Products.ZSQLMethods.SQL import SQLConnectionIDs
+from OFS.Image import Image
from AccessControl import ClassSecurityInfo
from bibliography import *
import time
-import xml.dom.minidom
+#import xml.dom.minidom
import sys
-from Ft.Xml.XPath import Evaluate
-from Ft.Xml.XPath.Context import Context
-from Ft.Xml.Domlette import NonvalidatingReader,PrettyPrint, Print
-from Ft.Xml import EMPTY_NAMESPACE
-import copy
-import updatePersonalWWW
-import MPIWGStaff
+#from Ft.Xml.XPath import Evaluate
+#from Ft.Xml.XPath.Context import Context
+#from Ft.Xml.Domlette import NonvalidatingReader,PrettyPrint, Print
+#from Ft.Xml import EMPTY_NAMESPACE
+#import copy
+#import updatePersonalWWW
+
+#import MPIWGStaff
from MPIWGHelper import *
@@ -39,6 +39,9 @@ import MPIWGRoot
import MPIWGLink
import MPIWGTemplate
+# die folgenden Klassen sind jetzt in einzelne Files ausgelagert aus Kompatibilitaetsgruenden, bleiben die Klassen hier noch drin.
+# Sonst funktionieren die alten Webseiten nicht mehr.
+
class MPIWGRoot(MPIWGRoot.MPIWGRoot):
"""depricated"""
@@ -48,21 +51,37 @@ class MPIWGLink(MPIWGLink.MPIWGLink):
class MPIWGTemplate(MPIWGTemplate.MPIWGTemplate):
"""depricated"""
-class MPIWGProject_publication(SimpleItem):
+class MPIWGProject_publication(Folder):
"""publications object fuer project"""
meta_type="MPIWGProject_publication"
- def editPublication(self,text=None,RESPONSE=None):
+ def editPublication(self,text=None,image1=None,image2=None,description=None,RESPONSE=None):
"""edit a publication"""
- if (not text):
+ if (not text) and (not description):
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_publicationForm.zpt')).__of__(self)
return pt()
self.text=text[0:]
-
+ self.description=description
+
+ if image1:
+ if hasattr(self,'publicationImage1'):
+ self.publicationImage1.manage_upload(image1)
+ else:
+ nO = Image('publicationImage1','',image1)
+ self._setObject('publicationImage1',nO)
+
+ if image2:
+ if hasattr(self,'publicationImage2'):
+ self.publicationImage2.manage_upload(image2)
+ else:
+ nO = Image('publicationImage2','',image2)
+ self._setObject('publicationImage2',nO)
+
+
if RESPONSE:
RESPONSE.redirect("../managePublications")
@@ -254,7 +273,30 @@ class MPIWGProject(CatalogAware,Folder):
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGProject_managePublicationsForm.zpt')).__of__(self)
return pt()
+ def hasExtendedPublicationList(self):
+ """test if extended publication list exists"""
+ if not hasattr(self,"publicationList"):
+ return False
+ else:
+ return True
+
+ def createExtendedPublicationList(self,RESPONSE=None):
+ """erzeuge erweiterte publications liste"""
+ pl = BibliographyManager("publicationList","","institutsbiblio",self.connection_id)
+ self._setObject("publicationList", pl)
+
+
+ zt=ZopePageTemplate('index.html')
+ pl._setObject('index.html',zt)
+ default_content_fn = os.path.join(package_home(globals()),
+ 'zpt/showExtendedProjectBibliography.zpt')
+ text = open(default_content_fn).read()
+ zt.pt_edit(text, 'text/html')
+
+ if RESPONSE:
+ RESPONSE.redirect("managePublications")
+
def getPublications(self):
"""get all Publications"""
def sort_images(x,y):
@@ -475,7 +517,7 @@ class MPIWGProject(CatalogAware,Folder):
new.append(split)
except:
new.append(split)
- return string.join(new)
+ return " ".join(new)
@@ -558,32 +600,56 @@ class MPIWGProject(CatalogAware,Folder):
else:
return False;
+ def setStartedAt(self,date):
+ """set the date of start, date should be in the form DD.MM.YYYY or MM.YYYY or YYYY"""
+ logging.info("DATE:"+repr(date))
+ transformedDate=self.transformDate(date);
+ logging.info("transformed"+repr(transformedDate))
+ if transformedDate is not None:
+ setattr(self,"startedAt",transformedDate)
+ return True;
+ else:
+ return False;
def getCompletedAt(self):
- """gibt das transformierte Datum zurŸck"""
+ """gibt das transformierte Datum zurueck, an dem das Projekt beendet wurde."""
date=getattr(self,'completedAt','')
if date:
return self.reTransformDate(date);
else:
return '';
+ def getStartedAt(self):
+ """gibt das transformierte Datum zurŸck, an dem Projekt begonnen wurde."""
+ date=getattr(self,'startedAt','')
+ if date:
+ return self.reTransformDate(date);
+ else:
+ return '';
+
def reTransformDate(self,date):
"""transformiert , transformdate zurueck"""
year=int(date/10000)
month=int((date-year*10000)/100)
day=int((date-year*10000-month*100))
+ if (day==0) and (month==0):
+ return """%s"""%year;
+ if day==0 :
+ return """%s.%s"""%(month,year);
+
return """%s.%s.%s"""%(day,month,year);
def transformDate(self,date):
"""transformiert ein Datum von DD.MM.YYYY, MM.YYYY,YYYY nach YYYYMMDD, alle nicht angebebenn Werte
werden auf 0 gesetzt, es wird null zurŸckgegeben falls das Datum ungueltig ist"""
-
- if (date=="" ) :
- return "";
-
+
if (date==None):
return None;
+
+ if (date.lstrip().rstrip()=="" ) :
+ return "";
+
splitted=date.split(".")
length=len(splitted)
year=0
@@ -873,9 +939,9 @@ class MPIWGProject(CatalogAware,Folder):
if (text5=="
") or (text5=="
"):
text5=""
- logging.debug("getcontent: field=%s filter=%s -> %s"%(field,filter,repr(text5)))
- #return unicodify(text5)
- return utf8ify(text5) # return as utf-8 byte string
+ #logging.debug("getcontent: field=%s filter=%s -> %s"%(field,filter,repr(text5)))
+ return unicodify(text5)
+ #return utf8ify(text5) # return as utf-8 byte string
def showImagesOfPage(self,imageUrl=None):
@@ -937,6 +1003,46 @@ class MPIWGProject(CatalogAware,Folder):
else:
return style
+ def getLabel(self):
+ """returns label (or title) of this project"""
+ l = self.getContent('xdata_07')
+ if l:
+ return l
+ l = self.getContent('WEB_title')
+ if l:
+ return l
+ return self.title
+
+ def getBreadcrumbs(self):
+ """return list of breadcrumbs from here to the root"""
+ crumbs = []
+ # skip direct parent Folder /projects/
+ parent = self.aq_parent.aq_parent
+ # get parents breadcrumbs
+ logging.debug("getbreadcrumbs,: title=%s self=%s parent=%s"%(self.title, repr(self), repr(parent)))
+ if hasattr(parent, 'getBreadcrumbs'):
+ logging.debug("getbreadcrumbs: recurse to %s"%parent)
+ crumbs = parent.getBreadcrumbs()
+
+ # try to get acquisition URL from parent
+ if hasattr(parent, 'absolute_url'):
+ baseUrl = "%s/%s/"%(parent.absolute_url(), 'projects')
+ else:
+ baseUrl = "/en/research/projects/"
+
+ # add in the internal project hierarchy
+ ct=self.getContexts(parents=self.getContent('xdata_05'))
+ # start with grandparents
+ ct.reverse()
+ for c in ct:
+ label = shortenString(c[0].getLabel(), 13)
+ crumbs.append((label, baseUrl+c[0].getId(), c[0]))
+
+ # add this project
+ crumbs.append((self.getLabel(), baseUrl+self.getId(), self))
+
+ return crumbs
+
def preview(self,description):
"""preview"""
tmpPro=getattr(self,"previewTemplate",None)
@@ -1026,8 +1132,12 @@ class MPIWGProject(CatalogAware,Folder):
#finde Mitarbeiter mit den entsprechenden Name
logging.info("Search: %s %s %s"%(name,firstname,lastname))
- cataloggedNames=self.MembersCatalog(firstName=firstname,lastName=lastname)
-
+ firstname=firstname.capitalize()
+ lastname=lastname.capitalize()
+ try:
+ cataloggedNames=self.MembersCatalog(firstName=firstname,lastName=lastname)
+ except:
+ cataloggedNames=[]
#Teste ob die ensprechenden Namen schon der Liste zu geordnet sind
#if not hasattr(self,'responsibleScientistsList'):
# self.responsibleScientistsList={}
@@ -1058,6 +1168,10 @@ class MPIWGProject(CatalogAware,Folder):
completedAt = self.REQUEST.get('completedAt')
if not self.setCompletedAt(completedAt):
RESPONSE.redirect('./editMPIWGBasisEditor?error="dateWrong')
+
+ startedAt = self.REQUEST.get('startedAt')
+ if not self.setStartedAt(startedAt):
+ RESPONSE.redirect('./editMPIWGBasisEditor?error="dateWrong')
if self.REQUEST.has_key('historicalNames'):
self.en.changeHistoricalNames(self.getId(),self.REQUEST['historicalNames'].split("\n"))
@@ -1115,14 +1229,14 @@ class MPIWGProject(CatalogAware,Folder):
if type(disciplines) is StringType:
self.xdata_09=disciplines
else:
- self.xdata_09=string.join(disciplines,";")
+ self.xdata_09=";".join(disciplines)
else:
self.xdata_09=""
if themes:
if type(themes) is StringType:
self.xdata_10=themes
else:
- self.xdata_10=string.join(themes,";")
+ self.xdata_10=";".join(themes)
else:
self.xdata_10=""