--- MPIWGWeb/Attic/MPIWGRoot.py 2008/09/03 21:16:40 1.1.2.13 +++ MPIWGWeb/Attic/MPIWGRoot.py 2010/06/23 15:01:56 1.1.2.27 @@ -40,6 +40,8 @@ def sortWeight(x,y): class MPIWGRoot(ZSQLExtendFolder): """Stammordner fuer den Web-Server""" + meta_type='MPIWGRoot' + fieldLabels={'WEB_title':'WEB_Title', 'xdata_01':'Responsible Scientists', 'xdata_02':'Department', @@ -58,8 +60,12 @@ class MPIWGRoot(ZSQLExtendFolder): 'WEB_project_description':'WEB_project_description', 'WEB_related_pub':'WEB_related_pub'} + # (is this used?) folders=['MPIWGProject','Folder','ECHO_Navigation'] - meta_type='MPIWGRoot' + # language of this instance + lang = 'en' + # types of objects that show up in navigation + nav_meta_types = ['MPIWGTemplate','MPIWGLink','MPIWGFolder'] def getGetNeighbourhood(self,obj, wordStr, length=100,tagging=True): """finde umgebung um die worte in wordStr, zurueckgegeben wird eine Array mit den Umgebungen von Fundstellen der Worte @@ -74,6 +80,8 @@ class MPIWGRoot(ZSQLExtendFolder): ret=[] # nimmt das Array auf, dass spaeter zurueckgegeben wird ranges=[] #Array mit tupeln x,y wobei x die Position des Anfang und y des Endes der i-ten Umgebung angiebt + wordStr=wordStr.lstrip().rstrip() + def isInRanges(nr,length): """test ob eine gegeben Position nr schon irgendwo in einer Umgebung ist, gibt den Index des ersten Wertes aus ranges zurueck, -1, wenn kein Treffer @@ -222,6 +230,9 @@ class MPIWGRoot(ZSQLExtendFolder): else: return array[idx] + def getLang(self): + """returns the default language""" + return self.lang def browserCheck(self): """check the browsers request to find out the browser type""" @@ -324,11 +335,6 @@ class MPIWGRoot(ZSQLExtendFolder): 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=[] @@ -339,40 +345,20 @@ class MPIWGRoot(ZSQLExtendFolder): return subret 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 - + """return sub-navigation elements i.e. below sections""" + # get section -> parent should be MPIWGRoot + p = obj + sec = None + # descend parents to the root (and remember the last id) + while p is not None and p.meta_type != 'MPIWGRoot': + sec = p + p = p.aq_parent + + subsecs = sec.objectItems(self.nav_meta_types) + subsecs = [s for s in subsecs if s[1].title != ""] + subsecs.sort(sortWeight) + return subsecs + def isType(self,object,meta_type): """teste ob ein object vom meta_type ist.""" return (object.meta_type==meta_type) @@ -400,15 +386,22 @@ class MPIWGRoot(ZSQLExtendFolder): else: return style - def getFeatures(self): - """returns a list of all Features""" + def getFeatures(self, num=None): + """returns a list of the last num Features""" dir = getattr(self, 'features') features = dir.objectItems(['MPIWGFeature']) features.sort(sortWeight) + if num is not None: + # take only the last num elements + features = features[-num:] # return pure list of objects return [f[1] for f in features] + def getMPIWGRoot(self): + """returns the MPIWG root""" + return self + def MPIWGrootURL(self): """returns the URL to the root""" return self.absolute_url() @@ -596,12 +589,14 @@ class MPIWGRoot(ZSQLExtendFolder): pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeMPIWGRootForm')).__of__(self) return pt() - def changeMPIWGRoot(self,title,disciplineList,themesList,connection_id,RESPONSE=None): + def changeMPIWGRoot(self,title,disciplineList,themesList,connection_id,lang=None,RESPONSE=None): """change""" self.title=title self.connection_id=connection_id self.disciplineList=disciplineList self.themesList=themesList + if lang is not None: + self.lang = lang if RESPONSE is not None: RESPONSE.redirect('manage_main') @@ -610,7 +605,7 @@ class MPIWGRoot(ZSQLExtendFolder): def getContexts(self,childs=None,parents=None,depth=None,date=None,onlyActive=True): """childs alle childs, alle parents""" ret=[] - + if parents: pnums=parents.split(".") while len(pnums) > 1: @@ -640,6 +635,7 @@ class MPIWGRoot(ZSQLExtendFolder): ret.append(project) #logging.debug("getContexts: childs=%s parents=%s depth=%s => %s"%(childs,parents,depth,repr(ret))) + return ret @@ -783,9 +779,9 @@ class MPIWGRoot(ZSQLExtendFolder): result,msg=MPIWGStaff.createNewDBEntry(self,data['publish_the_data'],data['key'],data['last_name'], - data['first_name'],data['title'],data['status'],"", + data['first_name'],data['titles_new'],data['status'],"", "",data['date_from'],data['date_to'], - data['department'],data['home_inst'],data['funded_by'], + data['department'],'',data['funded_by'], data['e_mail2'],data['current_work'],"yes",data['date_stay_at_mpiwg'],data['group'],"no",data['current_work']) return result,msg @@ -934,8 +930,23 @@ class MPIWGRoot(ZSQLExtendFolder): try: self.ProjectCatalog.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1']) + logger("MPIWG Root (reindexCatalog: projects)",logging.INFO,"DONE") except: - logger("MPIWG Root (updatehomepage)",logging.WARNING," %s %s"%sys.exc_info()[:2]) + logger("MPIWG Root (reindexCatalog: projects)",logging.WARNING," %s %s"%sys.exc_info()[:2]) + + try: + + self.MembersCatalog.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1']) + logger("MPIWG Root (reindexCatalog: members)",logging.INFO,"DONE") + except: + logger("MPIWG Root (reindexCatalog: members)",logging.WARNING," %s %s"%sys.exc_info()[:2]) + + try: + + self.fulltextProjectsMembers.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1']) + logger("MPIWG Root (reindexCatalog: fulltextProjectsMembers)",logging.INFO,"DONE") + except: + logger("MPIWG Root (reindexCatalog: fulltextProjectsMembers)",logging.WARNING," %s %s"%sys.exc_info()[:2]) @@ -955,7 +966,7 @@ class MPIWGRoot(ZSQLExtendFolder): results=self.MembersCatalog({'isPublished':True}) - ret=[(", ".join([proj.lastName, proj.firstName]).decode('utf-8'),proj.getKey) for proj in results] + ret=[(unicodify(", ".join([proj.lastName, proj.firstName])), proj.getKey) for proj in results] ret.sort(sorter) return ret @@ -984,7 +995,7 @@ class MPIWGRoot(ZSQLExtendFolder): """ for obj in self.getTree(dep, date, onlyActive, onlyArchived): - linkStr="""http://wwwneu.mpiwg-berlin.mpg.de/en/research/projects/%s""" + linkStr="""http://www.mpiwg-berlin.mpg.de/en/research/projects/%s""" rss+="""""" rss+=linkStr%obj[3].getId() rss+="""""" @@ -1008,6 +1019,8 @@ class MPIWGRoot(ZSQLExtendFolder): onlyArchived=0: alle Projekte onlyArchived= 1 : nur aktuelle Projekte onlyArchived = 2: nur archivierte Projekte + + department fuer das Tree geholt werden soll """ returnListTmp=[] @@ -1027,7 +1040,7 @@ class MPIWGRoot(ZSQLExtendFolder): if idNr[0]=="x": # kompatibilitaet mit alter Konvention, x vor der Nummer macht project inactive project[0].setActiveFlag(False) - if (not dep) or (idNr[0]==dep): #falls dep gesetzt ist nur dieses hinzufuegen. + if (not dep) or (splittedId[0]==dep): #falls dep gesetzt ist nur dieses hinzufuegen. if (onlyActive==0): returnListTmp.append((depth,nr,title,project[0])) @@ -1089,9 +1102,9 @@ class MPIWGRoot(ZSQLExtendFolder): hashList={} onlyArchived=int(form.get("onlyArchived",0)) onlyActive=int(form.get("onlyActive",0)) + dep=form.get("dep",None) - - fields=self.getTree(onlyArchived=onlyArchived,onlyActive=onlyActive) + fields=self.getTree(dep=dep,onlyArchived=onlyArchived,onlyActive=onlyActive) logging.info("GOT TREE!----------------------------------------------------") for field in form.keys(): @@ -1108,25 +1121,33 @@ class MPIWGRoot(ZSQLExtendFolder): else: fields[nr][3].setActiveFlag(False) - #nummer hat sich geŠndert + #nummer hat sich geaendert entryChanged = False; - + if isinstance(fields[nr][3].xdata_05,list): #for some reasons somtimes the content of the field is a list with one entry. + fields[nr][3].xdata_05=fields[nr][3].xdata_05[0] + if not (fields[nr][3].xdata_05==form[str(nr)+'_number']): logging.info("Changed!Number+++++++++++++++++++++++++++++++++") + logging.info(repr(fields[nr][3].xdata_05)+" ---> "+ repr(form[str(nr)+'_number'])) fields[nr][3].xdata_05=form[str(nr)+'_number'] entryChanged = True #completed har sich geaendert - - if not (fields[nr][3].getCompletedAt()==fields[nr][3].transformDate(form[str(nr)+'_completed'])): + + td = fields[nr][3].transformDate # hole die funktion zum transformieren des datums + + if not (td(fields[nr][3].getCompletedAt())==td(form[str(nr)+'_completed'])): fields[nr][3].setCompletedAt(form[str(nr)+'_completed']) + logging.info(repr(td(fields[nr][3].getCompletedAt()))+" ---> "+ repr(td(form[str(nr)+'_completed']))) logging.info("Changed!Completed+++++++++++++++++++++++++++++++++") entryChanged = True - if not (fields[nr][3].getStartedAt()==fields[nr][3].transformDate(form[str(nr)+'_started'])): + if not (td(fields[nr][3].getStartedAt())==td(form[str(nr)+'_started'])): fields[nr][3].setStartedAt(form[str(nr)+'_started']) + + logging.info(repr(td(fields[nr][3].getStartedAt()))+" ---> "+ repr(td(form[str(nr)+'_started']))) logging.info("Changed!Started+++++++++++++++++++++++++++++++++") entryChanged = True @@ -1185,13 +1206,16 @@ class MPIWGRoot(ZSQLExtendFolder): if key=="": return "" - key=utf8ify(key) - catalogged=self.MembersCatalog({'getKey':key}) - if len(catalogged)==0: - return "" - else: - return catalogged[0].getObject().getId() + try: + key=utf8ify(key) + catalogged=self.MembersCatalog({'getKey':key}) + if len(catalogged)==0: + return "" + else: + return catalogged[0].getObject().getId() + except: + return "" @@ -1485,4 +1509,4 @@ def manage_addMPIWGRoot(self,id,title,co setattr(ob,'connection_id',connection_id) if RESPONSE is not None: RESPONSE.redirect('manage_main') - \ No newline at end of file +