--- MPIWGWeb/MPIWGProjects.py 2007/04/18 10:03:13 1.47.2.71 +++ MPIWGWeb/MPIWGProjects.py 2008/06/24 07:55:05 1.47.2.83 @@ -110,6 +110,29 @@ def sortI(x,y): except: return cmp(x[1],y[1]) + +def unicodify(str): + """decode str (utf-8 or latin-1 representation) into unicode object""" + 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 utf8ify(str): + """encode unicode object or string into byte string in utf-8 representation""" + if not str: + return "" + if type(str) is StringType: + return str + else: + return str.encode('utf-8') + + class MPIWGLink(SimpleItem): """create a symbolic link to another page""" @@ -307,7 +330,30 @@ class MPIWGRoot(ZSQLExtendFolder): folders=['MPIWGProject','Folder','ECHO_Navigation'] meta_type='MPIWGRoot' - + def transformProjectsToId(self): + """trnasformiere zu ID, Hilfsfunktion die die alten Templates analysiert und mit der neuen Liste + verantwortlicher Personen versieht""" + projects=self.getTree() + ret="" + for project in projects: + proj=project[3] + persons=proj.identifyNames(proj.getContent('xdata_01')) + if not hasattr(proj,'responsibleScientistsList'): + proj.responsibleScientistsList=[] + + for person in persons.items(): + logging.info("XXXX"+repr(person)) + if len(person[1]) >1: #nicht eindeutig + ret+="nicht eindeutig --- %s: %s\n"%(proj.getId(),person[0]) + + elif len(person[1]) ==0: #kein eintrage + ret+="kein eintrag--- %s: %s\n"%(proj.getId(),person[0]) + proj.responsibleScientistsList.append((person[0],"")) + else: + proj.responsibleScientistsList.append((person[0],person[1][0].getObject().getKey())) + + return ret + def harvestProjects(self): """harvest""" folder="/tmp" @@ -330,15 +376,22 @@ class MPIWGRoot(ZSQLExtendFolder): if not str: return "" if type(str) is StringType: - try: - return str.decode('utf-8') - except: - return str.decode('latin-1') + try: + return str.decode('utf-8') + except: + return str.decode('latin-1') else: - return str + def getat(self,array,idx=0,default=None): + """return array element idx or default (but no exception)""" + if len(array) <= idx: + return default + else: + return array[idx] + + def browserCheck(self): """check the browsers request to find out the browser type""" bt = {} @@ -500,6 +553,8 @@ class MPIWGRoot(ZSQLExtendFolder): """returns the current section name""" root = self.absolute_url() url = self.REQUEST['URL'] + if not url: + return None path = string.replace(url, root, '') paths = path.split('/') if len(paths) > 0: @@ -549,8 +604,12 @@ class MPIWGRoot(ZSQLExtendFolder): def isActual(self,project): """checke if project is actual""" actualTime=time.localtime() - obj= project.getObject() + if hasattr(project,'getObject'): #obj ist aus einer catalogTrefferList + obj=project.getObject() + else: + obj=project + if getattr(obj,'archiveTime',actualTime)< actualTime: return False else: @@ -813,7 +872,7 @@ class MPIWGRoot(ZSQLExtendFolder): pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','showNewDBEntries.zpt')).__of__(self) return pt(newEntries=res) - def createNewStaffObjects(self): + def createNewStaffObjects(self,RESPONSE): """create new staff object""" memberFolder=getattr(self,'members') @@ -823,27 +882,29 @@ class MPIWGRoot(ZSQLExtendFolder): ret="" for key in arg_k: k=self.urlUnQuote(key) - logging.error("XXXXX %s"%k) + qstr="select * from personal_www where key=%s"%self.ZSQLQuote(k) res=self.ZSQLQuery(qstr)[0] if args[key]!="": #email-adresse wurde eingetragen #create the object e_mail=args[key] try: - newObj=MPIWGStaff.MPIWGStaff(e_mail,res.last_name.encode('utf-8'),res.first_name.encode('utf-8'),k) + newObj=MPIWGStaff.MPIWGStaff(e_mail,res.last_name,res.first_name,k) memberFolder._setObject(e_mail,newObj) + obj=getattr(memberFolder,e_mail) + obj.reindex_object() ret+="Created %s \n"%e_mail created=True except: - msg="Cannot create new user %s (%s %s)"%(e_mail,sys.exc_info()[0],sys.exc_info()[1]) logging.error(msg) ret+=msg+"\n" created=False if created: - qstr="update personal_www set web_object_created='yes',e_mail='%s' where key=%s"%(e_mail,self.ZSQLQuote(k)) + qstr="update personal_www set web_object_created='yes',e_mail='%s@mpiwg-berlin.mpg.de' where key=%s"%(e_mail,self.ZSQLQuote(k)) self.ZSQLQuery(qstr) + return ret @@ -888,8 +949,11 @@ class MPIWGRoot(ZSQLExtendFolder): columns=data.keys() for x in ignoreEntries: - columns.remove(x) - + logging.info("ign rem: %s"%x) + try: #falls in ignore entries felder sind, die nicht in columns sind, fange den fehler ab + columns.remove(x) + except: + pass insert=[] @@ -911,6 +975,8 @@ class MPIWGRoot(ZSQLExtendFolder): # self.ZSQLQuery(queryStr) return True,msg + + def updatePersonalwww_doIt(self): """do the update""" args=self.REQUEST.form @@ -921,8 +987,8 @@ class MPIWGRoot(ZSQLExtendFolder): # generate the new entry if news and (len(news)>0): - ret+="
Neueintrge erscheinen erst auf der Homepage, wenn ihnen eine e-mail Adresse zugeordnet wurde.
" + ret+="Neueinträge erscheinen erst auf der Homepage, wenn ihnen eine e-mail Adresse zugeordnet wurde.
" ret+="Neueintrge erscheinen erst auf der Homepage, wenn ihnen eine e-mail Adresse zugeordnet wurde.
" + ret+="Neueinträge erscheinen erst auf der Homepage, wenn ihnen eine e-mail Adresse zugeordnet wurde.
" ret+="Bitte die Filemaker-db entsprehchend ndern
" - + ret+="Wenn nötig in Filemaker-db ändern:
" + # konflicte for conflict in conflicts.keys(): ignoreEntries=[] displayIgnored=[] @@ -960,23 +1026,34 @@ class MPIWGRoot(ZSQLExtendFolder): ret+="" self.updatePersonEntry(resultSet[conflict],ignoreEntries=ignoreEntries) - + + # rest + cl=list(conflicts.keys()) + + for key in resultSet.keys(): + if key not in cl: + self.updatePersonEntry(resultSet[key]) return ret+"