comparison MPIWGStaff.py @ 217:2598210ada7a

ICS calendar for talks.
author casties
date Mon, 07 Oct 2013 19:45:23 +0200
parents 3b517b412f77
children 95e0087b9e19
comparison
equal deleted inserted replaced
216:3b517b412f77 217:2598210ada7a
14 from Products.PythonScripts.standard import sql_quote 14 from Products.PythonScripts.standard import sql_quote
15 from Products.ExtFile import ExtFile 15 from Products.ExtFile import ExtFile
16 import logging 16 import logging
17 import email 17 import email
18 import re 18 import re
19 import datetime
19 20
20 from Products.ZDBInterface.ZDBInterfaceFolder import ZDBInterfaceFolder 21 from Products.ZDBInterface.ZDBInterfaceFolder import ZDBInterfaceFolder
22 from Products.MPIWGManager.MPIWGIcsManager import MPIWGIcsManager
21 23
22 from SrvTxtUtils import getInt, unicodify, utf8ify, sqlName 24 from SrvTxtUtils import getInt, unicodify, utf8ify, sqlName
23 import MPIWGHelper 25 import MPIWGHelper
24 26
25 # 27 #
34 pass 36 pass
35 37
36 manage_addMPIWGStaffForm = MPIWGStaff_old.manage_addMPIWGStaffForm 38 manage_addMPIWGStaffForm = MPIWGStaff_old.manage_addMPIWGStaffForm
37 manage_addMPIWGStaff = MPIWGStaff_old.manage_addMPIWGStaff 39 manage_addMPIWGStaff = MPIWGStaff_old.manage_addMPIWGStaff
38 40
41 # MPIWGManager properties for ICS-calendars
42 # (ID_EN, ID_DE, VALUE_EN, VALUE_DE, WEIGHT, ID)
43 calendar_props = [('Description', 'Beschreibung', None, None, 0, 'description'),
44 ('Location', 'Ort', None, None, 0, 'location'),
45 ('URL', 'URL', None, None, 0, 'url'),
46 ('Time', 'Zeit', None, None, 0, 'time')]
39 47
40 48
41 class MPIWGStaffFolder(ZDBInterfaceFolder): 49 class MPIWGStaffFolder(ZDBInterfaceFolder):
42 """Folder of staff objects""" 50 """Folder of staff objects"""
43 implements(IPublishTraverse) 51 implements(IPublishTraverse)
351 return self.content.key 359 return self.content.key
352 360
353 def getUsername(self): 361 def getUsername(self):
354 """returns the username""" 362 """returns the username"""
355 id = re.sub('@mpiwg-berlin\.mpg\.de', '', self.content.e_mail) 363 id = re.sub('@mpiwg-berlin\.mpg\.de', '', self.content.e_mail)
356 return id 364 return str(id)
357 365
358 getId = getUsername 366 getId = getUsername
359 367
360 def getConeId(self): 368 def getConeId(self):
361 """return cone ID""" 369 """return cone ID"""
412 query += " and published = 'yes'" 420 query += " and published = 'yes'"
413 421
414 if sortBy == 'priority': 422 if sortBy == 'priority':
415 query += " order by priority" 423 query += " order by priority"
416 424
417 return self.folder.executeZSQL(query, [self.content.key]) 425 return self.folder.executeZSQL(query, [self.getKey()])
426
427
428 def getTalksCal(self):
429 """Return the talks calendar object (MPIWGIcsManager)"""
430 try:
431 cal = self.folder.get('calendars').get("%s_talks"%self.getUsername())
432 return cal
433 except:
434 return None
435
418 436
419 def getTeaching(self, published=True, sortBy='priority'): 437 def getTeaching(self, published=True, sortBy='priority'):
420 """Return the list of teaching activities""" 438 """Return the list of teaching activities"""
421 query = "SELECT oid,* FROM teaching WHERE key_main = %s" 439 query = "SELECT oid,* FROM teaching WHERE key_main = %s"
422 if published: 440 if published:
423 query += " AND published = 'yes'" 441 query += " AND published = 'yes'"
424 442
425 if sortBy == 'priority': 443 if sortBy == 'priority':
426 query += " ORDER BY priority" 444 query += " ORDER BY priority"
427 445
428 return self.folder.executeZSQL(query,[self.content.key]) 446 return self.folder.executeZSQL(query,[self.getKey()])
429 447
430 448
431 def getLastUpdateCV(self): 449 def getLastUpdateCV(self):
432 """getDate of Last Update""" 450 """getDate of Last Update"""
433 try: 451 try:
434 fname="%s_cv.pdf"%self.getUsername().encode('utf-8') 452 ob=self.folder.get("downloadableFiles").get("%s_cv.pdf"%self.getUsername())
435 logging.debug(fname) 453 return datetime.datetime.fromtimestamp(ob._p_mtime)
436 ob=self.folder._getOb("downloadableFiles")._getOb(fname)
437 return ob.bobobase_modification_time()
438 except: 454 except:
439 return "No file yet!" 455 return "No file yet!"
440 456
441 457
442 def getLastUpdatePublications(self): 458 def getLastUpdatePublications(self):
443 """getDate of Last Update""" 459 """getDate of Last Update"""
444 try: 460 try:
445 ob=self.folder._getOb("downloadableFiles")._getOb("%s_publications.pdf"%self.getUsername().encode('utf-8')) 461 ob=self.folder.get("downloadableFiles").get("%s_publications.pdf"%self.getUsername())
446 return ob.bobobase_modification_time() 462 return datetime.datetime.fromtimestamp(ob._p_mtime)
447 except: 463 except:
448 return "No file yet!" 464 return "No file yet!"
449 465
450 466
451 def downloadCV(self,REQUEST): 467 def downloadCV(self,REQUEST):
452 """download the cv""" 468 """download the cv"""
453 fname="%s_cv.pdf"%self.getUsername().encode('utf-8') 469 ob=self.folder.get("downloadableFiles").get("%s_cv.pdf" % self.getUsername())
454 logging.debug(fname)
455 ob=self.folder._getOb("downloadableFiles")._getOb(fname)
456
457 REQUEST.RESPONSE.redirect(ob.absolute_url()) 470 REQUEST.RESPONSE.redirect(ob.absolute_url())
471
458 472
459 def downloadPublications(self,REQUEST): 473 def downloadPublications(self,REQUEST):
460 """donwload the publication list""" 474 """donwload the publication list"""
461 ob=self.folder._getOb("downloadableFiles")._getOb("%s_publications.pdf"%self.getUsername().encode('utf-8')) 475 ob=self.folder.get("downloadableFiles").get("%s_publications.pdf"%self.getUsername())
462
463 REQUEST.RESPONSE.redirect(ob.absolute_url()) 476 REQUEST.RESPONSE.redirect(ob.absolute_url())
464 477
465 478
466 def getAdditionalLinks(self): 479 def getAdditionalLinks(self):
467 return self.folder.executeZSQL("SELECT oid,* FROM additionallink WHERE key_main = %s ORDER BY priority",[self.content.key]) 480 return self.folder.executeZSQL("SELECT oid,* FROM additionallink WHERE key_main = %s ORDER BY priority",[self.content.key])
524 # self.redirect(RESPONSE,"editProfile") 537 # self.redirect(RESPONSE,"editProfile")
525 # return self.preview(newcontent) 538 # return self.preview(newcontent)
526 539
527 pt = PageTemplateFile('zpt/staff/edit_profile.zpt', globals()).__of__(self) 540 pt = PageTemplateFile('zpt/staff/edit_profile.zpt', globals()).__of__(self)
528 return pt() 541 return pt()
529
530 542
531 543
532 security.declareProtected('View management screens','editTalks') 544 security.declareProtected('View management screens','editTalks')
533 def editTalks(self,REQUEST): 545 def editTalks(self,REQUEST):
534 """edit talks""" 546 """edit talks"""
547 pt=PageTemplateFile('zpt/staff/edit_talks.zpt', globals()).__of__(self)
548
535 if REQUEST: 549 if REQUEST:
536 argv=REQUEST.form 550 argv=REQUEST.form
537 551
538 if argv.has_key('main_fields'): #got data to change 552 # ICS URL driven talks
553 url = argv.get('ics_url', None)
554 if url:
555 cal_id = "%s_talks"%self.getUsername()
556 # use ICS calendar
557 cal = self.getTalksCal()
558 if cal is not None:
559 # calendar exists
560 if cal.url == url:
561 # same url
562 return pt()
563 else:
564 # remove
565 del self.folder.get('calendars')[cal_id]
566
567 # create new calendar
568 cal = MPIWGIcsManager(cal_id, '', url, defaultProps=calendar_props)
569 self.folder.get('calendars')[cal_id] = cal
570
571 # manually edited talks
572 elif argv.has_key('main_fields'): #got data to change
539 self.invalidate_cache() 573 self.invalidate_cache()
540 self.changeAdditionalData(argv); 574 self.changeAdditionalData(argv);
541 575
542 pt=PageTemplateFile('zpt/staff/edit_talks.zpt', globals()).__of__(self)
543 return pt() 576 return pt()
544 577
545 578
546 security.declareProtected('View management screens','editTeaching') 579 security.declareProtected('View management screens','editTeaching')
547 def editTeaching(self,REQUEST): 580 def editTeaching(self,REQUEST):
615 """"change the downloadable files""" 648 """"change the downloadable files"""
616 self.invalidate_cache(); 649 self.invalidate_cache();
617 650
618 data=REQUEST.form 651 data=REQUEST.form
619 652
620 ob = self.folder._getOb("downloadableFiles") 653 ob = self.folder.get("downloadableFiles")
621 654
622 if data.get('cv_publish',None): 655 if data.get('cv_publish',None):
623 656
624 self.changeData({'cv_p':data['cv_publish']}) 657 self.changeData({'cv_p':data['cv_publish']})
625 658