Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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
    )
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
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,
    )
Exemplo n.º 5
0
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")
Exemplo n.º 6
0
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,
    )
Exemplo n.º 7
0
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)
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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
Exemplo n.º 10
0
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")
Exemplo n.º 11
0
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,
    )
Exemplo n.º 12
0
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