Mercurial > hg > MPIWGWeb
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 |