--- MPIWGWeb/MPIWGProjects.py 2005/07/04 20:40:37 1.47.2.17 +++ MPIWGWeb/MPIWGProjects.py 2005/08/15 14:03:06 1.47.2.18 @@ -244,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'} @@ -252,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("/") @@ -259,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): @@ -565,19 +573,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]): @@ -590,7 +599,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=[] @@ -599,8 +608,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 @@ -623,7 +632,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) @@ -737,10 +746,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=="": @@ -803,7 +813,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): @@ -864,8 +877,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: @@ -945,17 +959,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""" @@ -984,8 +998,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) @@ -996,8 +1009,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) @@ -1121,6 +1134,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() @@ -1197,8 +1251,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: @@ -1227,34 +1282,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() @@ -1487,6 +1563,6 @@ def manage_addMPIWGProject(self,id,RESPO self._setObject(id,newObj) - + if RESPONSE is not None: RESPONSE.redirect('manage_main')