--- MPIWGWeb/MPIWGProjects.py 2005/04/25 16:58:02 1.46 +++ MPIWGWeb/MPIWGProjects.py 2005/10/10 08:42:49 1.47.2.25 @@ -7,6 +7,7 @@ from Products.PageTemplates.PageTemplate from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder from Products.ZCatalog.CatalogPathAwareness import CatalogAware +from OFS.Image import Image from Globals import package_home import urllib import MPIWGStaff @@ -15,11 +16,11 @@ import re import os from types import * import zLOG -import xmlhelper # Methoden zur Verwaltung der projekt xmls +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 AccessControl import ClassSecurityInfo from bibliography import * import time @@ -61,11 +62,111 @@ def sortI(x,y): except: return cmp(x[1],y[1]) +class MPIWGLink(SimpleItem): + """create a symbolic link to another page""" + + 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""" + self.id=id + self.link=link + self.title=title + self.weight=weight + + def getObj(self): + """bekomme original""" + ## objpath=self.link.replace("/",".") +## if objpath[0]!=".": +## objpath="."+objpath + +## print objpath +## return eval("self"+objpath) + + + splitted=self.link.lstrip().split("/") + obj=self + for x in splitted: + if not x=="": + obj=getattr(obj,x) + + return obj + + def getWeight(self): + if self.linkWeight and linkWeight!="": + return self.linkWeight + else: + return self.getObj().weight + + manage_options=SimpleItem.manage_options+( + {'label':'main config','action':'changeLinkForm'}, + ) + + + def changeLinkForm(self): + """change MPIWG link""" + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGLinkChange.zpt')).__of__(self) + return pt() + + def changeLink(self,link,title,weight,RESPONSE=None): + """change links""" + self.link=link + self.title=title + self.weight=weight + + if RESPONSE is not None: + RESPONSE.redirect('manage') + + def index_html(self): + """index""" + + return self.getObj().pt_render(extra_context={'here':self}) + + +def manage_addMPIWGLinkForm(self): + """Form for adding link""" + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/AddMPIWGLink.zpt')).__of__(self) + return pt() + +def manage_addMPIWGLink(self,id,link,title,weight,RESPONSE=None): + """add link""" + newObj=MPIWGLink(id,link,title,weight) + + self._setObject(id,newObj) + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + + class MPIWGTemplate(ZopePageTemplate): """Create a layout Template for different purposes""" meta_type="MPIWGTemplate" + manage_options=ZopePageTemplate.manage_options+( + {'label':'Change Weight','action':'changeWeightForm'}, + ) + + def changeWeightForm(self): + """change weight form""" + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGTemplateChangeWeight.zpt')).__of__(self) + return pt() + + def changeWeight(self,weight,RESPONSE=None): + """change weight""" + self.weight=weight + if RESPONSE is not None: + RESPONSE.redirect('manage') + + def __init__(self, id, text=None, content_type=None,MPIWGType=None): self.id = str(id) @@ -81,7 +182,13 @@ class MPIWGTemplate(ZopePageTemplate): """change form""" - + def isActiveItem(self): + """teste ob ausgewaehlt""" + if self.absolute_url()==self.REQUEST['URL']: + return "aktiv" + else: + return "" + def manage_addMPIWGTemplateForm(self): """Form for adding""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/AddMPIWGTemplate.zpt')).__of__(self) @@ -90,7 +197,7 @@ def manage_addMPIWGTemplateForm(self): from urllib import quote -def manage_addMPIWGTemplate(self, MPIWGType,id, title=None,REQUEST=None): +def manage_addMPIWGTemplate(self, MPIWGType,id, title=None,weight=0,REQUEST=None): "Add a Page Template with optional file content." if type(MPIWGType)==StringType: MPIWGTypes=[MPIWGType] @@ -125,7 +232,9 @@ def manage_addMPIWGTemplate(self, MPIWGT except AttributeError: u = REQUEST['URL1'] - + ob = getattr(self, id) + ob.weight=weight + REQUEST.RESPONSE.redirect(u+'/manage_main') return '' @@ -136,7 +245,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'} @@ -144,22 +253,115 @@ 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("/") + return splitted[4] + + def generateUrlProject(self,url,project=None): + """erzeuge aus absoluter url, relative des Projektes""" + if project: + splitted=url.split("/") + length=len(splitted) + short=splitted[length-2:length] + + base=self.REQUEST['URL3']+"/"+"/".join(short) + + else: + findPart=url.find("/projects/") + base=self.REQUEST['URL1']+"/"+url[findPart:] + + + return base + + def isNewCapital(self,text=None,reset=None): + if reset: + self.REQUEST['capital']="A" + return True + else: + if len(text)>0 and not (text[0]==self.REQUEST['capital']): + self.REQUEST['capital']=text[0] + return True + else: + return False + + 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 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) + subret.sort(sortWeight) + return subret + else: + return None + + def isActive(self,name): + """teste ob subnavigation aktiv""" + for part in self.REQUEST['URL'].split("/"): + if part==name: + return True + return False + + def upDateSQL(self,fileName): """updates SQL databases using fm.jar""" fmJarPath=os.path.join(package_home(globals()), 'updateSQL/fm.jar') xmlPath=os.path.join(package_home(globals()), "updateSQL/%s"%fileName) zLOG.LOG("MPIWG Web",zLOG.INFO,"java -classpath %s -Djava.awt.headless=true Convert %s"%(fmJarPath,xmlPath)) ret=os.popen("java -classpath %s -Djava.awt.headless=true Convert %s"%(fmJarPath,xmlPath),"r").read() - zLOG.LOG("MPIWG Web",zLOG.INFO,"result convert: %s"%ret) + zLOG.LOG("MPIWG Web",zLOG.INFO,"result convert: %s"%ret) return 1 def patchProjects(self,RESPONSE): """patch""" projects=self.ZopeFind(self.projects,obj_metatypes=['MPIWGProject']) for project in projects: - tmp=project[1].WEB_project_description[0].replace("/CD/projects/","")[0:] - setattr(project[1],'WEB_project_description',[tmp[0:]]) - RESPONSE.write("

%s

\n"%project[0]) + tmp=project[1].WEB_project_description[0].replace("/CD/projects/","")[0:] + setattr(project[1],'WEB_project_description',[tmp[0:]]) + RESPONSE.write("

%s

\n"%project[0]) def replaceNotEmpty(self,format,field): """replace not empty""" @@ -340,16 +542,32 @@ 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]) + if type(fieldContentsEntry) is StringType: - fieldContents=[fieldContentsEntry] + fieldContentsTmp=[fieldContentsEntry] else: - fieldContents=fieldContentsEntry - - projects=self.ProjectCatalog({fieldName:string.join(fieldContents,' OR')}) + fieldContentsTmp=fieldContentsEntry + + fieldContents=[] + for x in fieldContentsTmp: + fieldContents.append(" AND ".join(x.split())) + projects=self.ProjectCatalog({fieldName:string.join(fieldContents,' AND')}) #print projects - return 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 def changeMPIWGRootForm(self): """edit""" @@ -368,29 +586,32 @@ class MPIWGRoot(ZSQLExtendFolder): def getDisciplineList(self): """get disciplines as list""" - return self.disciplineList.split("\n") + list= self.disciplineList.split("\n") + return [x.rstrip().lstrip() for x in list] def getThemeList(self): """get themes as list""" - return self.themesList.split("\n") + list= self.themesList.split("\n") + return [x.rstrip().lstrip() for x in list] def test(self): """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]): @@ -403,7 +624,7 @@ class MPIWGRoot(ZSQLExtendFolder): ret.append(project) return ret - def getProjectFields(self,fieldName,folder=None,sort=None): + def getProjectFields(self,fieldName,date=None,folder=None,sort=None): """getListofFieldNames""" ret=[] @@ -412,8 +633,8 @@ class MPIWGRoot(ZSQLExtendFolder): for object in objects: obj=object[1] - - if not getattr(obj,'invisible',None): + 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 @@ -436,7 +657,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) @@ -550,10 +771,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=="": @@ -563,11 +785,65 @@ class MPIWGRoot(ZSQLExtendFolder): #title=project[0].WEB_title title=[project[0].getContent('WEB_title')] #print title - returnList.append((depth,nr,title,project[0])) + if idNr[0]!="x": + returnList.append((depth,nr,title,project[0])) return returnList + def formatElementsAsList(self,elements): + """formatiere tree als liste""" + + actualDepth=0 + ret="" + for element in elements: + if (element[0]>actualDepth): + #fuege soviele ul ein wie unterschied in tiefe + if element[0]==1: + ret+="""
\n
\n""" + if department==4: #hack + department=3 + + ret+="""
+
\n