--- MPIWGWeb/MPIWGProjects.py 2008/09/03 21:16:40 1.47.2.99 +++ MPIWGWeb/MPIWGProjects.py 2008/10/23 07:53:50 1.47.2.107 @@ -20,8 +20,10 @@ from OFS.SimpleItem import SimpleItem from OFS.Folder import Folder from OFS.Image import Image from AccessControl import ClassSecurityInfo +from AccessControl import getSecurityManager from bibliography import * import time +from OFS.Cache import Cacheable #import xml.dom.minidom import sys #from Ft.Xml.XPath import Evaluate @@ -111,7 +113,7 @@ class MPIWGProject_image(Image): if RESPONSE: RESPONSE.redirect("../manageImages") -class MPIWGProject(CatalogAware,Folder): +class MPIWGProject(CatalogAware,Folder,Cacheable): """Class for Projects""" @@ -369,7 +371,10 @@ class MPIWGProject(CatalogAware,Folder): def deleteImage(self,id,RESPONSE=None): """delete Image id""" - self.manage_delObjects([id]) + try: + self.manage_delObjects([id]) + except: + logging.error("ERROR MPIWG: %s %s"%sys.exc_info()[0:2]) if RESPONSE: RESPONSE.redirect('manageImages') @@ -573,7 +578,7 @@ class MPIWGProject(CatalogAware,Folder): def isArchivedProject(self): """check if the project is archived""" - completed=getattr(self,'completedAt',0) + completed=self.getCompletedAt() #completed leer if completed=="" : @@ -610,6 +615,7 @@ class MPIWGProject(CatalogAware,Folder): return True; else: return False; + def getCompletedAt(self): """gibt das transformierte Datum zurueck, an dem das Projekt beendet wurde.""" date=getattr(self,'completedAt','') @@ -617,12 +623,14 @@ class MPIWGProject(CatalogAware,Folder): return self.reTransformDate(date); else: # test ob parent abgeschlossen ist - - ct=self.getContexts(parents=self.getContent('xdata_05'),depth=1) - if (len(ct)>0): #is there are parent + try: #TODO: ersetzte try except durch vernuenftige abfrage + ct=self.getContexts(parents=self.getContent('xdata_05'),depth=1) + if (len(ct)>0): #is there are parent - return ct[0][0].getCompletedAt() - return ''; + return ct[0][0].getCompletedAt() + return ''; + except: + return ''; def getStartedAt(self): """gibt das transformierte Datum zurŸck, an dem Projekt begonnen wurde.""" @@ -743,9 +751,12 @@ class MPIWGProject(CatalogAware,Folder): return pt() - + def index_html(self,request=True,context=None): """show homepage""" + + bound_names={} + if not context: context=self if request: @@ -756,10 +767,65 @@ class MPIWGProject(CatalogAware,Folder): self.REQUEST.SESSION['MPI_redirected']=None #ext=self.ZopeFind(self.aq_parent,obj_ids=["project_main"]) + + + request2=getattr(self,'REQUEST',None) + + if request2 is not None: + response = request2.response + if not response.headers.has_key('content-type'): + response.setHeader('content-type', 'text/html') + + security = getSecurityManager() + bound_names['user'] = security.getUser() + + + # Retrieve the value from the cache. + keyset = None + if self.ZCacheable_isCachingEnabled(): + + # Prepare a cache key. + keyset = {'here': self, 'params':request2['QUERY_STRING']} + + result = self.ZCacheable_get(keywords=keyset) + + if result is not None: + # Got a cached value. + return result + + pt = getTemplate(self, "project_main") + # Execute the template in a new security context. + security.addContext(self) + + try: + result = pt.pt_render(extra_context=bound_names) + if keyset is not None: + # Store the result in the cache. + self.ZCacheable_set(result, keywords=keyset) + + return result + finally: + security.removeContext(self) + + + + def index_html_old(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.getId())() - + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','project_main')).__of__(context) return pt() @@ -785,6 +851,12 @@ class MPIWGProject(CatalogAware,Folder): def getContent(self,field,filter=None): """Inhalt des Feldes""" + if field=="short_title": + text = self.getContent("xdata_07") + if text=="": + text = self.getContent("WEB_title") + return text + text=u'' for x in getattr(self,field): @@ -804,11 +876,14 @@ class MPIWGProject(CatalogAware,Folder): except: pass - if text=='': + if text=='': ## wozu die folgenden Zeilen?? text2=text else: text2=re.sub(r';([^\s])','; \g<1>',text) + if field=="WEB_project_description":##Jedenfalls darf letzteres nicht gemacht werden, falls normaler text + text2=text + #teste ob ergebnis leer und header dann nehme title if (text2=='') and (field=='WEB_project_header'): @@ -891,14 +966,15 @@ class MPIWGProject(CatalogAware,Folder): start=kupu.find("") end=kupu.find("") newcontent= kupu[start+6:end] - + if preview: return self.preview(newcontent) self.copyObjectToArchive() + self.ZCacheable_invalidate() self.WEB_project_description=newcontent[0:] - + self.REQUEST.RESPONSE.redirect("./index.html") return True @@ -1044,6 +1120,35 @@ class MPIWGProject(CatalogAware,Folder): splitted=[x.capitalize() for x in txt.split("-")] return "-".join(splitted) + def getNamesOrdered(self,list): + """Sortiert die Liste nach der Reihenfolge in xdata_01""" + + nameList=self.getContent('xdata_01') + if nameList.find(";")>-1: # rate Trenner ist ; + names=nameList.split(";") + else: + names=nameList.split(",") + + self._v_names=[] + for name in names: + self._v_names.append(name.rstrip().lstrip()) + + + def sort(x,y): + try: + return cmp(self._v_names.index(x[0]),self._v_names.index(y[0])) + except: + return 0 + + list.sort(sort) + + return list + + ##nameList=nameList.replace(";",",") # falls ; als Trenner ersetze + + + + def identifyNames(self,nameList): """Bekommt eine Komma oder Semikolon getrennte Liste mit Name der Form Vorname MittelName(n) Nachname und ordnet diese dann Mitarbeiter IDs zu falls es schone eine Liste gibt wird im Projekte gibt wird diese Upgedated. @@ -1077,7 +1182,7 @@ class MPIWGProject(CatalogAware,Folder): lastname=self.myCapitalize(lastname).encode('utf-8') logging.info("Search: %s %s %s"%(name,repr(firstname),repr(lastname))) try: - cataloggedNames=self.MembersCatalog({'firstName':firstname,'lastName':lastname}) + cataloggedNames=self.MembersCatalog(firstName=firstname,lastName=lastname) except: cataloggedNames=[] logging.error("ERROR: identifyNames %s %s"%sys.exc_info()[0:2]) @@ -1093,13 +1198,14 @@ class MPIWGProject(CatalogAware,Folder): else: returnNamesDict[name]=[] + logging.error("id: %s"%repr(returnNamesDict)) return returnNamesDict def editMPIWGProject(self,RESPONSE=None,fromEdit=None): """edit the project and archive the old version""" self.copyObjectToArchive() # archive the object - + self.ZCacheable_invalidate() for x in definedFields: if self.REQUEST.has_key(x):