def ics_seminar_file(shortname): seminar = seminars_lucky({"shortname": shortname}) if seminar is None or not seminar.visible(): # There may be a non-API version of the seminar that can be shown seminar = seminars_lucky({"shortname": shortname}) if seminar is None or not seminar.visible(): return abort(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}, prequery={}) if seminar is None or not seminar.visible(): # There may be a non-API version of the seminar that can be shown seminar = seminars_lucky({"shortname": shortname}) if seminar is None or not seminar.visible(): return abort(404, "Seminar not found") talks = talks_search_api(shortname) return render_template( "seminar_raw.html", title=seminar.name, talks=talks, seminar=seminar )
def try_to_endorse(self): if self.email_confirmed and not self.is_creator: preendorsed = db.preendorsed_users.lucky( {"email": ilike_query(self.email)}) if preendorsed: self.endorser = preendorsed[ "endorser"] # must set endorser first self.creator = True # it already saves db.preendorsed_users.delete({"email": ilike_query(self.email)}) return True # try to endorse if the user is the organizer of some seminar if self._organizer: shortname = db.seminar_organizers.lucky( {"email": ilike_query(self.email)}, "seminar_id") owner = seminars_lucky( { "shortname": shortname, "display": True }, "owner") if owner: owner = userdb.lookup(owner, ["creator", "id"]) if owner and owner.get("creator"): self.endorser = owner["id"] # must set endorser first self.creator = True # it already saves return True return False
def show_seminar(shortname): seminar = seminars_lucky({"shortname": shortname}) if seminar is None: return render_template("404.html", title="Seminar not found") organizers = list(db.seminar_organizers.search({"seminar_id": shortname})) talks = talks_search({"display": True, "seminar_id": shortname}, 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) return render_template( "seminar.html", title="View seminar", future=future, past=past, seminar=seminar, top_menu=basic_top_menu(), bread=None, )
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 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}, prequery={}) if seminar is None or not seminar.visible(): # There may be a non-API version of the seminar that can be shown seminar = seminars_lucky({"shortname": shortname}) if seminar is None or not seminar.visible(): return abort(404, "Seminar not found") talks = talks_search_api(shortname) timezone = seminar.tz if 'timezone' in request.args: try: timezone = pytz.timezone(request.args.get("timezone")) except pytz.UnknownTimeZoneError: pass 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 ), timezone=timezone)) resp.headers['Access-Control-Allow-Origin'] = '*' return resp
def show_seminar_json(shortname): seminar = seminars_lucky({"shortname": shortname}) if seminar is None or not seminar.visible(): # There may be a non-API version of the seminar that can be shown seminar = seminars_lucky({"shortname": shortname}) if seminar is None or not seminar.visible(): return abort(404, "Seminar not found") # FIXME cols = [ 'speaker', 'video_link', 'slides_link', 'title', 'room', 'comments', 'abstract', 'start_time', 'end_time', 'speaker_affiliation', 'speaker_homepage', 'language', 'deleted', 'paper_link', 'stream_link', ] 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 show_seminar(shortname): # We need organizers to be able to see seminars with display=False seminar = seminars_lucky({"shortname": shortname}, include_pending=True) if seminar is None: return abort(404, "Seminar not found") if not seminar.visible(): # There may be a non-API version of the seminar that can be shown name = seminar.name # for flash_error seminar = seminars_lucky({"shortname": shortname}) if seminar is None or not seminar.visible(): flash_error("You do not have permission to view %s", name) return redirect(url_for("seminar_series_index"), 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 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