def json(self): schedules = Schedule.find_all() output = [] for schedule in schedules: if not schedule.time_slot.heading: row = {} speakers = schedule.event.computed_speakers() row['Id'] = schedule.id row['Event'] = schedule.event_id row['Title'] = schedule.event.computed_title() row['Room Name'] = schedule.location.display_name row['Start'] = str(schedule.time_slot.start_time) row['Duration'] = str(schedule.time_slot.end_time - schedule.time_slot.start_time) if speakers: row['Presenters'] = ','.join(speakers) row['Description'] = schedule.event.computed_abstract() if schedule.event.proposal: row['URL'] = h.url_for(qualified=True, controller='schedule', action='view_talk', id=schedule.event.proposal_id) output.append(row) response.charset = 'utf8' response.headers['content-type'] = 'application/json; charset=utf8' response.headers.add('content-transfer-encoding', 'binary') response.headers.add('Pragma', 'cache') response.headers.add('Cache-Control', 'max-age=3600,public') return json.write(output)
def page(self): url = h.url_for().strip("/") c.db_content = DbContent.find_by_url(url, abort_404=False) if c.db_content is not None: if not c.db_content.published and not h.auth.authorized(h.auth.has_organiser_role): c.db_content = None return NotFoundController().view() return self.view(c.db_content.id) return NotFoundController().view()
def ical(self): c.schedule_collection = Schedule.find_all() ical = vobject.iCalendar() for schedule in c.schedule_collection: if not schedule.time_slot.heading: event = ical.add('vevent') event.add('uid').value = str(schedule.id) + '@' + h.lca_info['event_host'] # Created event.add('created').value = schedule.creation_timestamp.replace(tzinfo=timezone('Australia/Brisbane')) # Last Modified event.add('dtstamp').value = schedule.last_modification_timestamp.replace(tzinfo=timezone('Australia/Brisbane')) event.add('last-modified').value = schedule.last_modification_timestamp.replace(tzinfo=timezone('Australia/Brisbane')) # Start and End Time event.add('dtstart').value = schedule.time_slot.start_time.replace(tzinfo=timezone('Australia/Brisbane')) event.add('dtend').value = schedule.time_slot.end_time.replace(tzinfo=timezone('Australia/Brisbane')) # Title and Author (need to add Author here) event.add('summary').value = schedule.event.computed_title() + ' by ' + h.list_to_string(schedule.event.computed_speakers()) # Abstract, if we have one event.add('description').value = schedule.event.computed_abstract() # Add a URL if schedule.event.proposal: event.add('url').value = h.url_for(qualified=True, controller='schedule', action='view_talk', id=schedule.event.proposal.id) elif not (schedule.event.url is None or schedule.event.url == ''): if schedule.event.url.startswith('https://') or schedule.event.url.startswith('http://'): event.add('url').value = h.url_for(str(schedule.event.url)) else: event.add('url').value = h.url_for(str(schedule.event.url), qualified=True) concurrent_schedules = schedule.event.schedule_by_time_slot(schedule.time_slot) for concurrent_schedule in concurrent_schedules: if concurrent_schedule != schedule: if concurrent_schedule in c.schedule_collection: c.schedule_collection.remove(concurrent_schedule) locations = [concurrent_schedule.location.display_name for concurrent_schedule in concurrent_schedules] event.add('location').value = h.list_to_string(locations) response.charset = 'utf8' response.headers['content-type'] = 'text/calendar; charset=utf8' response.headers.add('content-transfer-encoding', 'binary') response.headers.add('Pragma', 'cache') response.headers.add('Cache-Control', 'max-age=3600,public') return ical.serialize()
def page(self): url = h.url_for().strip("/") c.db_content = DbContent.find_by_url(url, abort_404=False) if c.db_content is not None: if not c.db_content.published and not h.auth.authorized( h.auth.has_organiser_role): c.db_content = None return NotFoundController().view() return self.view(c.db_content.id) return NotFoundController().view()
def edit(self, id=None): # # Helpfully redirect to the correct URL. # if id is None: return redirect_to(h.url_for(id=h.signed_in_person().id)) # # Only an organiser can edit someone elses photos. # if not h.auth.authorized(h.auth.Or(h.auth.is_same_zookeepr_user(id), h.auth.has_organiser_role)): h.auth.no_role() person_id = int(id, 10) c.open_date = lca_info.lca_info['date'] c.days_open = (datetime.date.today() - c.open_date.date()).days photo_db = PhotoCompEntry.read_db() c.photo = lambda day, entry: PhotoCompEntry.get(photo_db, person_id, day, entry) c.is_organiser = h.auth.authorized(h.auth.has_organiser_role) c.DAYS_OPEN = DAYS_OPEN c.ENTRY_NAMES = ENTRY_NAMES return render('/photocomp/edit.mako')
def _edit(self, id): # We need to recheck auth in here so we can pass in the id if not h.auth.authorized( h.auth.Or(h.auth.is_same_zookeepr_submitter(id), h.auth.has_organiser_role)): # Raise a no_auth error h.auth.no_role() if not h.auth.authorized(h.auth.has_organiser_role): if c.paper_editing == 'closed' and not h.auth.authorized( h.auth.has_late_submitter_role): return render("proposal/editing_closed.mako") elif c.paper_editing == 'not_open': return render("proposal/editing_not_open.mako") c.proposal = Proposal.find_by_id(id) for key in self.form_result['proposal']: setattr(c.proposal, key, self.form_result['proposal'][key]) c.proposal.abstract = self.clean_abstract(c.proposal.abstract) c.person = self.form_result['person_to_edit'] if (c.person.id == h.signed_in_person().id or h.auth.authorized(h.auth.has_organiser_role)): for key in self.form_result['person']: setattr(c.person, key, self.form_result['person'][key]) p_edit = "and author" else: p_edit = "(but not author)" meta.Session.commit() if lca_info['proposal_update_email'] != '': body = "Subject: %s Proposal Updated\n\nID: %d\nTitle: %s\nType: %s\nURL: %s" % ( h.lca_info['event_name'], c.proposal.id, c.proposal.title, c.proposal.type.name.lower(), "http://" + h.host_name() + h.url_for(action="view")) email(lca_info['proposal_update_email'], body) h.flash("Proposal %s edited!" % p_edit) return redirect_to('/proposal')
def generate_hash(self, id): if not h.auth.authorized(h.auth.Or(h.auth.is_same_zookeepr_attendee(id), h.auth.has_organiser_role, h.auth.has_unique_key())): # Raise a no_auth error h.auth.no_role() url = h.url_for(action='view', id=id) c.hash = URLHash.find_by_url(url=url) if c.hash is None: c.hash = URLHash() c.hash.url = url meta.Session.add(c.hash) meta.Session.commit() # create an entry for the payment page (not needed) # TODO: depending on how the gateway works, you may need to make sure you have permissions for the page you get redirected to #c.hash = URLHash() #c.hash.url = h.url_for(action='pay') #meta.Session.add(c.hash) #meta.Session.commit() return render('/invoice/generate_url.mako')
def generate_hash(self, id): if not h.auth.authorized( h.auth.Or(h.auth.is_same_zookeepr_attendee(id), h.auth.has_organiser_role, h.auth.has_unique_key())): # Raise a no_auth error h.auth.no_role() url = h.url_for(action='view', id=id) c.hash = URLHash.find_by_url(url=url) if c.hash is None: c.hash = URLHash() c.hash.url = url meta.Session.add(c.hash) meta.Session.commit() # create an entry for the payment page (not needed) # TODO: depending on how the gateway works, you may need to make sure you have permissions for the page you get redirected to #c.hash = URLHash() #c.hash.url = h.url_for(action='pay') #meta.Session.add(c.hash) #meta.Session.commit() return render('/invoice/generate_url.mako')
def _edit(self, id): # We need to recheck auth in here so we can pass in the id if not h.auth.authorized(h.auth.Or(h.auth.is_same_zookeepr_submitter(id), h.auth.has_organiser_role)): # Raise a no_auth error h.auth.no_role() if not h.auth.authorized(h.auth.has_organiser_role): if c.paper_editing == 'closed' and not h.auth.authorized(h.auth.has_late_submitter_role): return render("proposal/editing_closed.mako") elif c.paper_editing == 'not_open': return render("proposal/editing_not_open.mako") c.proposal = Proposal.find_by_id(id) for key in self.form_result['proposal']: setattr(c.proposal, key, self.form_result['proposal'][key]) c.proposal.abstract = self.clean_abstract(c.proposal.abstract) c.person = self.form_result['person_to_edit'] if (c.person.id == h.signed_in_person().id or h.auth.authorized(h.auth.has_organiser_role)): for key in self.form_result['person']: setattr(c.person, key, self.form_result['person'][key]) p_edit = "and author" else: p_edit = "(but not author)" meta.Session.commit() if lca_info['proposal_update_email'] != '': body = "Subject: %s Proposal Updated\n\nID: %d\nTitle: %s\nType: %s\nURL: %s" % (h.lca_info['event_name'], c.proposal.id, c.proposal.title, c.proposal.type.name.lower(), "http://" + h.host_name() + h.url_for(action="view")) email(lca_info['proposal_update_email'], body) h.flash("Proposal %s edited!"%p_edit) return redirect_to('/proposal')