def show_talk(semid, talkid): token = request.args.get( "token", "") # save the token so user can toggle between view and edit talk = talks_lucky({"seminar_id": semid, "seminar_ctr": talkid}) if talk is None: return not_found_404("Talk not found") kwds = dict(title="View talk", talk=talk, seminar=talk.seminar, subsection="viewtalk", token=token) if token: kwds["section"] = "Manage" # Also want to override top menu from seminars.utils import top_menu menu = top_menu() menu[2] = (url_for("create.index"), "", "Manage") kwds["top_menu"] = menu elif (current_user.is_subject_admin(talk) or current_user.email_confirmed and (current_user.email in talk.seminar.editors() or current_user.email == talk.speaker_email)): kwds["section"] = "Manage" return render_template("talk.html", **kwds)
def show_institution(shortname): institution = db.institutions.lookup(shortname) if institution is None: return not_found_404("Institution not found") institution = WebInstitution(shortname, data=institution) section = "Manage" if current_user.is_creator else None query = {"institutions": {"$contains": shortname}} if not current_user.is_admin: query["display"] = True events = list( seminars_search( query, sort=["weekday", "start_time", "name"], organizer_dict=all_organizers(), )) seminars = [S for S in events if not S.is_conference] conferences = [S for S in events if S.is_conference] conferences.sort(key=lambda S: (S.start_date, S.name)) return render_template( "institution.html", seminars=seminars, conferences=conferences, title="View institution", institution=institution, section=section, subsection="viewinst", )
def show_seminar_json(shortname): seminar = seminars_lucky({"shortname": shortname}) if seminar is None or not seminar.visible(): return not_found_404("Seminar not found") # FIXME cols = [ "start_time", "end_time", "speaker", "title", "abstract", "speaker_affiliation", "speaker_homepage", ] talks = [{ c: getattr(elt, c) for c in cols } for elt in talks_search_api(shortname, projection=["seminar_id"] + cols)] callback = request.args.get("callback", False) if callback: return Response( "{}({})".format(str(callback), json.dumps(talks, default=str)), mimetype="application/javascript", ) else: return Response(json.dumps(talks, default=str), mimetype="application/json")
def ics_talk_file(semid, talkid): talk = talks_lucky({"seminar_id": semid, "seminar_ctr": talkid}) if talk is None: return not_found_404("Talk not found") return ics_file([talk], filename="{}_{}.ics".format(semid, talkid), user=current_user)
def show_seminar(shortname): seminar = seminars_lucky({"shortname": shortname}) if seminar is None: return not_found_404("Seminar not found") if not seminar.visible(): flash_error("You do not have permission to view %s", seminar.name) return redirect(url_for("search_seminars"), 302) talks = seminar.talks(projection=3) now = get_now() future = [] past = [] for talk in talks: if talk.end_time >= now: future.append(talk) else: past.append(talk) future.sort(key=lambda talk: talk.start_time) past.sort(key=lambda talk: talk.start_time, reverse=True) if current_user.email in seminar.editors( ) or current_user.is_subject_admin(seminar): section = "Manage" else: section = None return render_template( "seminar.html", title="View series", future=future, past=past, seminar=seminar, section=section, subsection="view", bread=None, )
def ics_seminar_file(shortname): seminar = seminars_lucky({"shortname": shortname}) if seminar is None or not seminar.visible(): return not_found_404("Seminar not found") return ics_file(seminar.talks(), filename="{}.ics".format(shortname), user=current_user)
def show_seminar_raw(shortname): seminar = seminars_lucky({"shortname": shortname}) if seminar is None or not seminar.visible(): return not_found_404("Seminar not found") talks = talks_search_api(shortname) return render_template("seminar_raw.html", title=seminar.name, talks=talks, seminar=seminar)
def show_seminar_bare(shortname): seminar = seminars_lucky({"shortname": shortname}) if seminar is None or not seminar.visible(): return not_found_404("Seminar not found") talks = talks_search_api(shortname) resp = make_response( render_template( "seminar_bare.html", title=seminar.name, talks=talks, seminar=seminar, _external=('_external' in request.args), site_footer=('site_footer' in request.args), )) resp.headers['Access-Control-Allow-Origin'] = '*' return resp
def by_subject(subject): subject = subject.lower() if subject not in subject_dict(): return not_found_404("Subject %s not found" % subject) return lambda: _talks_index({"subjects": {"$contains": subject}})