--- MPIWGWeb/MPIWGProjects.py 2005/08/15 14:03:06 1.47.2.18 +++ MPIWGWeb/MPIWGProjects.py 2006/08/15 13:27:43 1.47.2.57 @@ -2,11 +2,16 @@ for organizing and maintaining the different project pages """ +#TODO: mechanismus fur links to personen ueberarbeiten, da jetzt alle e_mails als members auftauchen unabhaengig vom status publish_the_data +#TODO: was passiert wenn aenderungen von jochen im filemaker nicht mit den aenderungen im sql uebereinstimmen +#TODO: in einzelnen projecte steht als pfad auf die bilder noch wwwneu statt www + 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 OFS.Image import Image from Globals import package_home import urllib import MPIWGStaff @@ -15,20 +20,57 @@ 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 +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 definedFields=['WEB_title','xdata_01','xdata_02','xdata_03','xdata_04','xdata_05','xdata_06','xdata_07','xdata_08','xdata_09','xdata_10','xdata_11','xdata_12','xdata_13','WEB_project_header','WEB_project_description','WEB_related_pub'] checkFields = ['xdata_01'] +def getTextFromNode(nodename): + nodelist=nodename.childNodes + rc = "" + for node in nodelist: + if node.nodeType == node.TEXT_NODE: + rc = rc + node.data + return rc + +def sortStopWordsF(self,xo,yo): + if not hasattr(self,'_v_stopWords'): + self._v_stopWords=self.stopwords_en.data.split("\n") + + x=str(xo[1]) + y=str(yo[1]) + + strx=x.split(" ") + stry=y.split(" ") + + for tmp in strx: + if tmp.lower() in self._v_stopWords: + del strx[strx.index(tmp)] + + for tmp in stry: + if tmp.lower() in self._v_stopWords: + del stry[stry.index(tmp)] + + return cmp(" ".join(strx)," ".join(stry)) + +def sortStopWords(self): + return lambda x,y : sortStopWordsF(self,x,y) + def sortF(x,y): try: return cmp(x[1],y[1]) @@ -94,7 +136,7 @@ class MPIWGLink(SimpleItem): splitted=self.link.lstrip().split("/") obj=self for x in splitted: - if not x=="": + if not x=="": obj=getattr(obj,x) return obj @@ -187,7 +229,7 @@ class MPIWGTemplate(ZopePageTemplate): return "aktiv" else: return "" - + def manage_addMPIWGTemplateForm(self): """Form for adding""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/AddMPIWGTemplate.zpt')).__of__(self) @@ -252,25 +294,90 @@ class MPIWGRoot(ZSQLExtendFolder): folders=['MPIWGProject','Folder','ECHO_Navigation'] meta_type='MPIWGRoot' + def harvestProjects(self): + """harvest""" + folder="/tmp" + try: + os.mkdir("/tmp/harvest_MPIWG") + except: + pass + founds=self.ZopeFind(self.aq_parent.projects,obj_metatypes=['MPIWGProject'],search_sub=1) + for found in founds: + txt=found[1].harvest_page() + + if txt and (txt != ""): + name=found[0].replace("/","_") + fh=file("/tmp/harvest_MPIWG/"+name,"w") + fh.write(txt) + fh.close() + + def decode(self,str): + """decoder""" + if not str: + return "" + if type(str) is StringType: + try: + return str.decode('utf-8') + except: + return str.decode('latin-1') + else: + + return str + + 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 createOrUpdateId_raw(self): + """create sequence to create ids for bibliography""" + debug=None + #suche groesste existierende id + founds=self.ZSQLQuery("select id from bibliography") + + if founds: + ids=[int(x.id[1:]) for x in founds] + maximum=max(ids) + + id_raw=self.ZSQLQuery("select nextval('id_raw')",debug=debug) + + if id_raw: + self.ZSQLQuery("drop sequence id_raw",debug=debug) + + self.ZSQLQuery("create sequence id_raw start %i"%(maximum+1),debug=debug) + + 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] + """kategorie""" + splitted=url.split("/") + return splitted[4] def generateUrlProject(self,url,project=None): """erzeuge aus absoluter url, relative des Projektes""" - if project: + if project: splitted=url.split("/") length=len(splitted) short=splitted[length-2:length] base=self.REQUEST['URL3']+"/"+"/".join(short) - else: + else: findPart=url.find("/projects/") base=self.REQUEST['URL1']+"/"+url[findPart:] @@ -287,7 +394,23 @@ class MPIWGRoot(ZSQLExtendFolder): return True else: return False - + + def subNavStatic(self,obj): + """subnav" von self""" + def sortWeight(x,y): + x1=int(getattr(x[1],'weight','0')) + y1=int(getattr(y[1],'weight','0')) + return cmp(x1,y1) + + subs=self.ZopeFind(obj,obj_metatypes=['MPIWGTemplate','MPIWGLink']) + subret=[] + + for x in subs: + if not(x[1].title==""): + subret.append(x) + subret.sort(sortWeight) + return subret + def subNav(self,obj): """return subnav elemente""" def sortWeight(x,y): @@ -302,12 +425,14 @@ class MPIWGRoot(ZSQLExtendFolder): #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']) @@ -335,16 +460,16 @@ class MPIWGRoot(ZSQLExtendFolder): 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""" @@ -436,6 +561,22 @@ class MPIWGRoot(ZSQLExtendFolder): self.id=id self.title=title + def removeStopWords(self,xo): + """remove stop words from xo""" + if not hasattr(self,'_v_stopWords'): + self._v_stopWords=self.stopwords_en.data.split("\n") + + x=str(xo) + + strx=x.split(" ") + + for tmp in strx: + + if tmp.lower() in self._v_stopWords: + del strx[strx.index(tmp)] + + return " ".join(strx) + def urlQuote(self,str): """quote""" return urllib.quote(str) @@ -484,7 +625,7 @@ class MPIWGRoot(ZSQLExtendFolder): list[urllib.quote(personNormal)]=(personNormal,[project[1]]) except: - zLOG.LOG("MPIWG Web (harvestHistoricalPerson)",zLOG.ERROR,"cannot annalyize: %s"%repr(project)) + zLOG.LOG("MPIWG Web (harvestHistoricalPerson)",zLOG.ERROR,"cannot analyize: %s"%repr(project)) return list @@ -525,12 +666,12 @@ 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]) + return cmp(x.WEB_title[0],y.WEB_title[0]) - if type(fieldContentsEntry) is StringType: + if type(fieldContentsEntry) is StringType: fieldContentsTmp=[fieldContentsEntry] else: fieldContentsTmp=fieldContentsEntry @@ -540,8 +681,16 @@ 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.sort(sort) + #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): @@ -573,10 +722,10 @@ class MPIWGRoot(ZSQLExtendFolder): """test""" return self.getProjectsByFieldContent('xdata_09',['biology'])[0].absolute_url - def getContexts(self,childs=None,parents=None,depth=None,date=None): + def getContexts(self,childs=None,parents=None,depth=None,date=None,onlyActive=True): """childs alle childs, alle parents""" ret=[] - print "gC",date,childs + if parents: splitted=parents.split(".") parentId=string.join(splitted[0:len(splitted)-1],".") @@ -588,15 +737,17 @@ class MPIWGRoot(ZSQLExtendFolder): if childs: for project in self.getProjectFields('xdata_05',sort='int',date=date): searchStr=childs+"(\..*)" - if re.match(searchStr,project[1]): - - if depth: - - if int(depth)>=len(project[1].split("."))-len(childs.split(".")): - + + if (onlyActive and project[0].isActiveProject()) or (not onlyActive): + if re.match(searchStr,project[1]): + + if depth: + + if int(depth)>=len(project[1].split("."))-len(childs.split(".")): + + ret.append(project) + else: ret.append(project) - else: - ret.append(project) return ret def getProjectFields(self,fieldName,date=None,folder=None,sort=None): @@ -624,6 +775,10 @@ class MPIWGRoot(ZSQLExtendFolder): if sort=="int": ret.sort(sortI) + elif sort=="stopWords": + print "sortStop" + ret.sort(sortStopWords(self)) + else: ret.sort(sortF) @@ -640,10 +795,11 @@ class MPIWGRoot(ZSQLExtendFolder): manage_options = Folder.manage_options+( - {'label':'Update Personal Homepages','action':'updateHomepages'}, + {'label':'Update personal homepages','action':'updateHomepages'}, + {'label':'Reindex catalogs','action':'reindexCatalogs'}, {'label':'Main config','action':'changeMPIWGRootForm'}, - {'label':'Edit Historical Persons','action':'editHistoricalPersonsForm'}, - {'label':'Store Historical Persons','action':'storeHistoricalPersons'}, + #{'label':'Edit Historical Persons','action':'editHistoricalPersonsForm'}, + #{'label':'Store Historical Persons','action':'storeHistoricalPersons'}, ) def importNamesForm(self): @@ -675,9 +831,170 @@ class MPIWGRoot(ZSQLExtendFolder): if RESPONSE is not None: RESPONSE.redirect('manage_main') - def updateHomepages(self,RESPONSE): - """lege members an""" + def updatePublicationDB(self,personId=None): + """updates the publication db, i.e. copy year into the main table""" + + if personId: + founds = self.ZSQLInlineSearch(_table="publications",id_main=personId) + else: + founds = self.ZSQLInlineSearch(_table="publications") + + for found in founds: + + if found.id_institutsbibliographie and (not found.id_institutsbibliographie =="") and (not found.id_institutsbibliographie =="0"): + + entries = self.ZSQLInlineSearch(_table="institutsbiblio",id=found.id_institutsbibliographie) + for entry in entries: + self.ZSQLChange(_table='publications',_identify='oid=%s' % found.oid,year=entry.year,referencetype=entry.reference_type) + + if found.id_gen_bib and (not found.id_gen_bib ==""): + entries = self.ZSQLInlineSearch(_table="bibliography",id=found.id_gen_bib) + for entry in entries: + self.ZSQLChange(_table='publications',_identify='oid=%s' % found.oid,year=entry.year,referencetype=entry.reference_type) + + return True + + def updateHomepages(self,RESPONSE=None): + """ update""" + RESPONSE.setHeader('Content-type', 'text/html') + RESPONSE.write("\n") + RESPONSE.write("Update Institutsbibliography\n") + ret=self.upDateSQL('personalwww.xml') + RESPONSE.write("done Insitutsbibliography:%s\n"%ret) + url="http://itgroup.mpiwg-berlin.mpg.de:8050/FMPro?-db=personal-www&-format=-dso_xml&-lay=sql_export&-max=20000&-findall" + dom = NonvalidatingReader.parseUri(url) + #fh=urllib.urlopen(url) + #dom=xml.dom.minidom.parse(fh) + + RESPONSE.write("got_xml_File\n") + + + memberFolder=getattr(self,'members') + members=memberFolder.ZopeFind(memberFolder,obj_metatypes=["MPIWGStaff"]) + + memberList=[x[0] for x in members] + #print dom + #ctx=Context(dom,processorNss={EMPTY_NAMESPACE:'http://www.filemaker.com/fmpdsoresult'}) + # Evaluate(u".//dn:ROW",contextNode=dom,explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'}) + #print dom.xpath(u'.//dn:ROW',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'}) + for row in dom.xpath(u'.//dn:ROW',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'}): + + username=getTextFromNode(row.xpath('./dn:username',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + id=getTextFromNode(row.xpath('./dn:ID',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + name=getTextFromNode(row.xpath('./dn:Name',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + vorname=getTextFromNode(row.xpath('./dn:Vorname',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + title=getTextFromNode(row.xpath('./dn:Title',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + position=getTextFromNode(row.xpath('./dn:Position',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + e_mail=getTextFromNode(row.xpath('./dn:e_mail',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + e_mail_p=getTextFromNode(row.xpath('./dn:e_mail_p',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + date_from=getTextFromNode(row.xpath('./dn:Date_from',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + date_to=getTextFromNode(row.xpath('./dn:Date_to',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + abteilung=getTextFromNode(row.xpath('./dn:Abteilung',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + heimat_inst=getTextFromNode(row.xpath('./dn:heimat_inst',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + funded_by=getTextFromNode(row.xpath('./dn:funded_by',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + e_mail2=getTextFromNode(row.xpath('./dn:e_mail2',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + publish_the_data=getTextFromNode(row.xpath('./dn:publish_the_data',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + stay_at_mpiwg=getTextFromNode(row.xpath('./dn:stay_at_mpiwg',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + #cwNode=row.xpath('./dn:current_work.current',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0] + cw=row.xpath('./dn:current_work/dn:DATA',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'}) + if cw: + txt=getTextFromNode(cw[0]) + else: + txt="" + + #cwNode=row.xpath('.//dn:current_work.publish',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0] + cw=row.xpath('./dn:current_work/dn:DATA',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'}) + + if cw: + txt_p=getTextFromNode(cw[0]) + else: + txt_p="" + + project=getattr(self,'members') + + if not (username in memberList):#neuer eintrag + + try: + newObj=MPIWGStaff.MPIWGStaff(str(username),name.encode('utf-8'),vorname.encode('utf-8')) + memberFolder._setObject(str(username),newObj) + RESPONSE.write("

new:%s

\n"%username.encode('utf-8')) + obj=getattr(memberFolder,username) + ret=obj.createNewDBEntry(publish_the_data,id,name, + vorname,username,title,position,e_mail, + e_mail_p,date_from,date_to, + abteilung,heimat_inst,funded_by, + e_mail2,txt,txt_p,stay_at_mpiwg) + RESPONSE.write("""

%s

"""%ret[1].encode('utf-8')) + except: + RESPONSE.write("

ERROR:%s %s %s

\n"%(username.encode('utf-8'),name.encode('utf-8'),vorname.encode('utf-8'))) + RESPONSE.write("

: %s %s"%sys.exc_info()[:2]) + else: + RESPONSE.write("

update:%s

\n"%username.encode('utf-8')) + + xquery=".//dn:ROW[dn:username='%s']"%username + results=dom.xpath(xquery,explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'}) + if len(results)>1: + RESPONSE.write("

WARNING (update): username %s not unique

\n"%username.encode('utf-8')) + xquery=".//dn:ROW[dn:publish_the_data='yes' and dn:username='%s']"%username + rd=dom.xpath(xquery,explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'}) + if len(rd)>1:#mehrere published + RESPONSE.write("

ERROR (update): username %s not unique and more then one date set to be published

\n"%username.encode('utf-8')) +# elif len(rd)==1:#nur einer published, kein published dann mache nichts +# publish_the_data=getTextFromNode(rd[0].xpath('./dn:publish_the_data',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) +# date_from=getTextFromNode(rd[0].xpath('./dn:Date_from',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) +# date_to=getTextFromNode(rd[0].xpath('./dn:Date_to',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) +# + + obj=getattr(memberFolder,username) + + done= obj.updateDBEntry(DBid=id,publish_the_data=publish_the_data, + date_from=date_from, + date_to=date_to,stay_at_mpiwg=stay_at_mpiwg,position=position,abteilung=abteilung) + if not done and (publish_the_data=='yes'): + + ret=obj.createNewDBEntry(publish_the_data,id,name, + vorname,username,title,position,e_mail, + e_mail_p,date_from,date_to, + abteilung,heimat_inst,funded_by, + e_mail2,txt,txt_p,stay_at_mpiwg) + if not ret[0]: + + RESPONSE.write("

Error: %s

\n"%repr(ret[1])) + else: + RESPONSE.write("

New: %s

\n"%repr(ret[1])) + + #TODO: reindexCatlogs and updatePublications wieder einbaue + #self.reindexCatalogs(RESPONSE) + + #self.updatePublicationDB() + + #self.ZSQLResetConnection() + RESPONSE.write("

Done

") + + return True + + def reindexCatalogs(self,RESPONSE=None): + """reindex members and project catalog""" + + + try: + self.MembersCatalog.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1']) + self.ProjectCatalog.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1']) + except: + zLOG.LOG("MPIWG Root (updatehomepage)",zLOG.WARNING," %s %s"%sys.exc_info()[:2]) + + + + + + if RESPONSE: + RESPONSE.redirect('manage_main') + + + + def updateHomepages_old(self,RESPONSE): + """lege members an, alte version vollstaendige kopie aller fm-dateien per fm.jar""" self.upDateSQL('personalwww.xml') founds=self.ZSQLInlineSearch(_table='personal_www',publish_the_data='yes') project=getattr(self,'members') @@ -692,6 +1009,7 @@ class MPIWGRoot(ZSQLExtendFolder): except: RESPONSE.write("

old:%s (%s,%s)

\n"%(found.username,found.name,found.vorname)) + #delete non existing @@ -708,29 +1026,41 @@ class MPIWGRoot(ZSQLExtendFolder): pass self.ProjectCatalog.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1']) - + self.updatePublicationDB() + if RESPONSE is not None: RESPONSE.redirect('manage_main') - def getAllMembers(self): - """give list of all members""" - ret=[] - - #for x in self.members.objectValues('MPIWGStaff'): - #print x.title - # ret.append(x.title.decode('utf-8')) +# def getAllMembers(self,reset=None): +# """give list of all members""" +# ret=[] +# +# +# if reset or (getattr(self,'_v_membersList',None) is None): +# for member in self.members._objects: +# if member['meta_type']=='MPIWGStaff': +# memberObj=getattr(self.members,member['id']) +# if memberObj.isPublished(): +# ret.append(memberObj.title.decode('utf-8')) +# +# ret.sort() +# self._v_membersList=ret[0:] +# print ret +# +# return self._v_membersList - for x in self.ZopeFind(self.members,obj_metatypes=['MPIWGStaff']): - ret.append(x[1].title.decode('utf-8')) - - ret.sort() - #print ret - + def getAllMembers(self): + #ret=[] + + results=self.MembersCatalog({'isPublished':True}) + + ret=[", ".join([proj.lastName, proj.firstName]).decode('utf-8') for proj in results] + + ret.sort() return ret - def printAllMembers(self): - """prin""" + """print""" members=self.getAllMembers() ret="" for x in members: @@ -746,9 +1076,9 @@ class MPIWGRoot(ZSQLExtendFolder): return entry - def getTree(self,date=None): + def getTree(self,date=None,onlyActive=None): """generate Tree from project list""" - print date + returnList=[] for project in self.getProjectFields('xdata_05',sort="int",date=date): # get Projects sorted by xdata_05 @@ -760,9 +1090,14 @@ class MPIWGRoot(ZSQLExtendFolder): #title=project[0].WEB_title title=[project[0].getContent('WEB_title')] #print title - if idNr[0]!="x": + + if idNr[0]=="x": # kompatibilitŠt mit alter Konvention, x vor der Nummer macht project inactive + project[0].setActiveFlag(False) + + if onlyActive and project[0].isActiveProject(): #nur active projekte returnList.append((depth,nr,title,project[0])) - + elif not onlyActive: + returnList.append((depth,nr,title,project[0])) return returnList def formatElementsAsList(self,elements): @@ -796,8 +1131,8 @@ class MPIWGRoot(ZSQLExtendFolder): department=int(element[3].getContent('xdata_05'))-1 ret+="""\n""" - if department==4: #hack - department=3 + if department==4: #hack + department=3 ret+="""
\n