# HG changeset patch # User dwinter # Date 1366989548 -7200 # Node ID 9b38ba45773b6abfd3f7a0b68e2a6fac2847d0e3 # Parent dbe037d2f5746157dd7676436b6a768c4e26bb58 ?berarbeitung MPIWGStaff neue editfunktionen diff -r dbe037d2f574 -r 9b38ba45773b MPIWGStaff.py --- a/MPIWGStaff.py Fri Apr 26 11:02:02 2013 +0200 +++ b/MPIWGStaff.py Fri Apr 26 17:19:08 2013 +0200 @@ -18,7 +18,7 @@ from Products.ZDBInterface.ZDBInterfaceFolder import ZDBInterfaceFolder from AccessControl import ClassSecurityInfo from App.class_init import InitializeClass - +from Products.ExtFile.ExtFile import * import os import logging import email @@ -1033,11 +1033,21 @@ try: # id is the first path component id = stack[-1] + logging.debug(id) + member = self.getMember(id) if member is not None: + member = member.__of__(self) request.set('MPIWGStaffMember', member) stack.pop(-1) + #weitere parameter + if len(stack)> 0: + mode = stack[-1] + request.set('MPIWGStaffMode', mode) + stack.pop(-1) + + except (IndexError, ValueError): # missing context or not an integer id; perhaps some URL hacking going on? logging.error("error traversing user id!") @@ -1049,7 +1059,13 @@ """show homepage""" logging.debug("MPIWGStaffFolder: index_html!") member = REQUEST.get('MPIWGStaffMember', None) + mode = REQUEST.get('MPIWGStaffMode', None) if member is not None: + + if mode is not None: + return member.execute(mode,REQUEST); + + logging.debug("member: key=%s"%(member.getKey())) pt = None try: @@ -1084,6 +1100,27 @@ return member + def sortPriority(self,list): + def sort(x,y): + try: + xInt=int(x.priority) + except: + xInt=0 + try: + yInt=int(y.priority) + except: + yInt=0 + + return cmp(xInt,yInt) + + if not list: + return [] + tmp=[x for x in list] + tmp.sort(sort) + + return tmp + + def manage_addMPIWGStaffFolderForm(self): """form for adding the project""" pt=PageTemplateFile('zpt/addMPIWGStaffFolderForm', globals()).__of__(self) @@ -1099,7 +1136,7 @@ RESPONSE.redirect('manage_main') -class MPIWGStaffMember(): +class MPIWGStaffMember(Folder): """MPIWG staff member object from database""" security = ClassSecurityInfo() @@ -1134,6 +1171,7 @@ """returns the db content of this object""" return self.content + # TODO: ugly! security.declarePublic('sortBibliography') def sortBibliography(self,bib,sortingMode=None,max=None): @@ -1153,5 +1191,362 @@ else: return l + + + def execute(self,mode,REQUEST=None): + method = getattr(self,mode,None) + if method is not None: + return method(REQUEST); + else: + return "NOT FOUND" + + + def getProfile(self,REQUEST): + """get the profile""" + self.REQUEST.RESPONSE.setHeader('Last-Modified',email.Utils.formatdate().split("-")[0]+'GMT') + + + html="""
%s""" + if self.content.profile and self.content.profile != "": + + return html%self.content.profile + else: + + return html%"" + + + def getTalks(self): + + return self.folder.executeZSQL("SELECT oid,* FROM talks WHERE key_main = %s",[self.content.key]) + #return self.folder.ZSQLInlineSearch(_table='talks',key_main=self.content.key) + + + def getTeaching(self): + + return self.folder.executeZSQL("SELECT oid,* FROM teaching WHERE key_main = %s",[self.content.key]) + + + + def getLastUpdateCV(self): + """getDate of Last Update""" + try: + fname="%s_cv.pdf"%self.getUsername().encode('utf-8') + logging.debug(fname) + ob=self.folder._getOb("downloadableFiles")._getOb(fname) + return ob.bobobase_modification_time() + except: + return "No file yet!" + + def getLastUpdatePublications(self): + """getDate of Last Update""" + try: + ob=self.folder._getOb("downloadableFiles")._getOb("%s_publications.pdf"%self.getUsername().encode('utf-8')) + return ob.bobobase_modification_time() + except: + return "No file yet!" + + + def downloadCV(self,REQUEST): + + fname="%s_cv.pdf"%self.getUsername().encode('utf-8') + logging.debug(fname) + ob=self.folder._getOb("downloadableFiles")._getOb(fname) + REQUEST.RESPONSE.redirect(ob.absolute_url()) + + def downloadPublications(self,REQUEST): + ob=self.folder._getOb("downloadableFiles")._getOb("%s_publications.pdf"%self.getUsername().encode('utf-8')) + REQUEST.RESPONSE.redirect(ob.absolute_url()) + + def getAdditionalLinks(self): + + return self.folder.executeZSQL("SELECT oid,* FROM additionalLink WHERE key_main = %s",[self.content.key]) + #return self.folder.ZSQLInlineSearch(_table='talks',key_main=self.content.key) + + #return self.folder.ZSQLInlineSearch(_table='talks',key_main=self.content.key) + + def getPathStyle(self, path, selected, style=""): + """returns a string with the given style + 'sel' if path == selected.""" + + if path == selected: + return style + 'sel' + else: + return style + + + + mainEditFile=PageTemplateFile(os.path.join(package_home(globals()),'zpt/staff','edit_main.zpt')) + + + security.declareProtected('View management screens','edit') + def edit(self,REQUEST=None): + """Edit the basic information""" + + + + if REQUEST: + argv=REQUEST.form + + if argv.has_key('last_name'): #got data to change + self.invalidate_chache() + self.changeData(argv); + + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/staff','edit_basic.zpt')).__of__(self) + return pt() + + + security.declareProtected('View management screens','edit') + def editShortEntry(self,REQUEST=None): + """Edit the basic information""" + + + + if REQUEST: + argv=REQUEST.form + + if argv.has_key('current_work'): #got data to change + self.invalidate_chache() + self.changeData(argv); + + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/staff','edit_shortEntry.zpt')).__of__(self) + return pt() + + + security.declareProtected('View management screens','editProfile') + def editProfile(self, REQUEST=None): + """edit Profile, new entry replaces CD, current work and research interests""" + + + if REQUEST: + kupu=REQUEST.form.get('kupu',None); + preview=REQUEST.form.get('preview',None); + + if kupu: + start=kupu.find("") + end=kupu.find("") + + newcontent= kupu[start+6:end] + query="UPDATE personal_www SET profile=%s WHERE key='%s'" + self.executeZSQL(query%(self.ZSQLQuote(newcontent),self.content.key)) + logging.error("PROFILE:"+query%(self.ZSQLQuote(newcontent),self.content.key)) + + if preview: + pass + #TODO: not supported yet + #if RESPONSE: + # self.redirect(RESPONSE,"editProfile") + + #return self.preview(newcontent) + + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/staff','edit_profile.zpt')).__of__(self) + return pt() + + + + security.declareProtected('View management screens','editTalks') + def editTalks(self,REQUEST): + """edit talks""" + + + if REQUEST: + argv=REQUEST.form + + if argv.has_key('main_fields'): #got data to change + self.invalidate_chache() + self.changeAdditionalData(argv); + + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/staff','edit_talks.zpt')).__of__(self) + return pt() + + + security.declareProtected('View management screens','editTeaching') + def editTeaching(self,REQUEST): + """edit teaching""" + + + if REQUEST: + argv=REQUEST.form + + if argv.has_key('main_fields'): #got data to change + self.invalidate_chache() + self.changeAdditionalData(argv); + + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/staff','edit_teaching.zpt')).__of__(self) + return pt() + + + security.declareProtected('View management screens','editAdditionalLinks.zpt') + def editAdditionalLinks(self,REQUEST): + """editiere die additiona link von der Webseite""" + + if REQUEST: + argv=REQUEST.form + + if argv.has_key('main_fields'): #got data to change + self.invalidate_chache() + self.changeAdditionalData(argv); + + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/staff','edit_additionalLinks.zpt')).__of__(self) + return pt() + + + security.declareProtected('View management screens','editDownloads') + def editDownloads(self,REQUEST): + """editiere die Downloads von der Webseite""" + + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/staff','edit_downloads.zpt')).__of__(self) + return pt() + + def changeDownloads(self,REQUEST): + """"change the downloadable files""" + self.invalidate_chache(); + + data=REQUEST.form + + ob = self.folder._getOb("downloadableFiles") + + if data.get('cv_publish',None): + + self.changeData({'cv_p':data['cv_publish']}) + + if data.get('publications_publish',None): + self.changeData({'publications_p':data['publications_publish']}) + + + if data.get('cv_pdf',None): + cvName ="%s_cv.pdf"%self.getUsername() + cvName=cvName.encode('utf-8') + logging.debug("CCC") + if not hasattr(ob,cvName): + + cvFile = ExtFile(cvName,cvName) + ob._setObject(cvName,cvFile) + + + cvFile = getattr(ob,cvName) + + cvFile.manage_upload(file=data['cv_pdf']) + + + + + if data.get('publications_pdf',None): + + + pdfName="%s_publications.pdf"%self.getUsername() + pdfName=pdfName.encode('utf-8') + + if not hasattr(ob,pdfName): + + cvFile = ExtFile(pdfName,pdfName) + ob._setObject(pdfName,cvFile) + + + cvFile = getattr(ob,pdfName) + + cvFile.manage_upload(file=data['publications_pdf']) + + + #REQUEST.response.redirect(self.REQUEST['HTTP_REFERER']) + + + + + def changeData(self,changeSet): + """changes the data in the database, changeset expects field --> value.""" + for field in changeSet.keys(): + if hasattr(self.content,field): + logging.debug("Changing: %s"%field) + + + results = self.folder.executeZSQL("update personal_www set "+field+" = %s where key = %s ", [changeSet.get(field),self.getKey().encode('utf-8')]); + + logging.debug(results) + + + security.declareProtected('View management screens','changeAdditionalData') + def changeAdditionalData(self,data): + """change the research entries""" + + self.invalidate_chache(); + + newEntries={} + + + mainfieldL=data['main_fields'].split(",") #fields to be changed + # format DATABASE__FIELDNAME + + mainfield={} + for x in mainfieldL: + tmp=x.split('__') + mainfield[tmp[0]]=tmp[1] + for field in data: + splittedField=field.split("__") + if len(splittedField)<3: + pass #kein datenbank eintrag + + elif splittedField[2]=='new': # store new entries + if not newEntries.has_key(splittedField[0]): + newEntries[splittedField[0]]={} + + newEntries[splittedField[0]][splittedField[1]]=data[field] + + else: + query="UPDATE %s "%splittedField[0] + query+="SET %s = '%s' "%(splittedField[1],sql_quote(data[field])) + query+="WHERE oid = '%s' "%sql_quote(splittedField[2]) + + self.executeZSQL(query) + + + #new entries + for newEntry in newEntries.keys(): + query="INSERT INTO %s "%newEntry + keys=['key_main'] + values=["'"+sql_quote(self.getKey())+"'"] + for key in newEntries[newEntry].keys(): + keys.append(key) + values.append("'"+sql_quote(newEntries[newEntry][key])+"'") + + + keystring=",".join(keys) + + valuestring=",".join(values) + + query+=" (%s) "%keystring + query+="VALUES (%s)"%valuestring + if not (newEntries[newEntry][mainfield[newEntry]].lstrip().rstrip()==""): + self.executeZSQL(query) + + + + + def deleteField(self,REQUEST): + """delete entry""" + + + table = REQUEST.form.get('table',None); + oid = REQUEST.form.get('oid',None); + + if table is None or oid is None: + return + + query="DELETE FROM %s WHERE oid = '%s'"%(table,oid) + + self.executeZSQL(query) + REQUEST.response.redirect(self.REQUEST['HTTP_REFERER']) + + + def invalidate_chache(self): + #TODO: How to invalidate the varnish cache from the member object + pass; + + + def getStaffURL(self): + ident = self.content.e_mail; + splitted = ident.split("@"); + return splitted[0] + + + InitializeClass(MPIWGStaffMember) diff -r dbe037d2f574 -r 9b38ba45773b zpt/staff/edit_additionalLinks.zpt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/zpt/staff/edit_additionalLinks.zpt Fri Apr 26 17:19:08 2013 +0200 @@ -0,0 +1,71 @@ + + + +You can add links to documents or project websites you want to provide and are relevant for +presenting your work and research interests
+ +Please contact the IT Group itgroup@mpiwg-berlin.mpg.de, if you intend + to link to documents not available in the net and if you want to publish these.
+To add references to your homepage at other institutions plese use the additional links tab
+Here you can upload your CV and and publication list to be downloaded from your homepage.
+The documents should be in PDF format. Add the add bottom of this page you find templates for OpenOffice and +Word to make it easier for you to create these documents.
+ +Please contact the support group support@mpiwg-berlin.mpg.de (Tel. 247), if you need any help.
+ +