Example #1
0
def list_institutions():
    section = "Manage" if current_user.is_creator else None
    return render_template(
        "institutions.html",
        title="Institutions",
        section=section,
        subsection="institutions",
        maintained_institutions=institutions({'admin': current_user.email}),
        institutions=institutions(),
        maxlength=maxlength,
    )
Example #2
0
def list_institutions():
    return render_template(
        "institutions.html",
        title="Institutions",
        institutions=institutions(),
        top_menu=basic_top_menu(),
    )
Example #3
0
def list_institutions():
    section = "Manage" if current_user.is_creator else None
    return render_template(
        "institutions.html",
        title="Institutions",
        section=section,
        subsection="institutions",
        institutions=institutions(),
    )
Example #4
0
def save_talk():
    raw_data = request.form
    resp, seminar, talk = can_edit_talk(raw_data.get("seminar_id", ""),
                                        raw_data.get("seminar_ctr", ""),
                                        raw_data.get("token", ""))
    if resp is not None:
        return resp

    data = {
        'seminar_id': talk.seminar_id,
        'token': talk.token,
        'display': talk.display,  # could be being edited by anonymous user
    }
    if talk.new:
        curmax = talks_max('seminar_ctr', {'seminar_id': talk.seminar_id})
        if curmax is None:
            curmax = 0
        data['seminar_ctr'] = curmax + 1
    else:
        data['seminar_ctr'] = talk.seminar_ctr
    for col in db.talks.search_cols:
        if col in data: continue
        try:
            val = raw_data.get(col)
            if not val:
                data[col] = None
            else:
                data[col] = process_user_input(val, db.talks.col_type[col])
            if col == 'speaker_homepage' and val and not val.startswith(
                    "http"):
                data[col] = "http://" + data[col]
            if col == "access" and val not in ["open", "users", "endorsed"]:
                raise ValueError("Invalid access type")
        except Exception as err:
            flash_error("Error processing %s: %s", [col, err])
            talk = WebTalk(talk.seminar_id, talk.seminar_ctr, data=raw_data)
            title = "Create talk" if talk.new else "Edit talk"
            return render_template("edit_talk.html",
                                   talk=talk,
                                   seminar=seminar,
                                   title=title,
                                   top_menu=basic_top_menu(),
                                   categories=categories(),
                                   institutions=institutions(),
                                   timezones=timezones)
    new_version = WebTalk(talk.seminar_id, data['seminar_ctr'], data=data)
    if new_version == talk:
        flash("No changes made to talk.")
    else:
        new_version.save()
        edittype = "created" if talk.new else "edited"
        flash("Talk successfully %s!" % edittype)
    return redirect(
        url_for("show_talk",
                semid=new_version.seminar_id,
                talkid=new_version.seminar_ctr), 301)
Example #5
0
 def make_error(err):
     flash_error("Error processing %s: %s" % (col, err))
     seminar = WebSeminar(shortname, data=raw_data)
     return render_template("edit_seminar.html",
                            seminar=seminar,
                            title="Edit seminar error",
                            top_menu=basic_top_menu(),
                            categories=categories(),
                            institutions=institutions(),
                            lock=None)
Example #6
0
 def failure():
     return render_template(
         "edit_talk.html",
         talk=talk,
         seminar=talk.seminar,
         title="Edit talk",
         section="Manage",
         subsection="edittalk",
         institutions=institutions(),
         timezones=timezones,
     )
Example #7
0
 def failure():
     return render_template(
         "edit_seminar.html",
         seminar=seminar,
         title="Edit properties",
         section=manage,
         subsection="editsem",
         institutions=institutions(),
         weekdays=weekdays,
         timezones=timezones,
         lock=lock,
     )
Example #8
0
 def make_error(shortname, col=None, err=None):
     if err is not None:
         flash_error("Error processing %s: {0}".format(err), col)
     seminar = WebSeminar(shortname, data=raw_data)
     manage = "Manage" if current_user.is_organizer else "Create"
     return render_template(
         "edit_seminar.html",
         seminar=seminar,
         title="Edit seminar error",
         section=manage,
         institutions=institutions(),
         lock=None,
     )
Example #9
0
def edit_talk():
    if request.method == "POST":
        data = request.form
    else:
        data = request.args
    token = data.get("token", "")
    resp, talk = can_edit_talk(data.get("seminar_id", ""),
                               data.get("seminar_ctr", ""), token)
    if resp is not None:
        return resp
    if token:
        # Also want to override top menu
        from seminars.utils import top_menu

        menu = top_menu()
        menu[2] = (url_for("create.index"), "", "Manage")
        extras = {"top_menu": menu}
    else:
        extras = {}
    # The seminar schedule page adds in a date and times
    if data.get("date", "").strip():
        tz = talk.seminar.tz
        date = process_user_input(data["date"], "date", "date", tz)
        try:
            # TODO: clean this up
            start_time = process_user_input(data.get("start_time"),
                                            "start_time", "time", tz)
            end_time = process_user_input(data.get("end_time"), "end_time",
                                          "time", tz)
            start_time = localize_time(datetime.combine(date, start_time), tz)
            end_time = localize_time(datetime.combine(date, end_time), tz)
        except ValueError:
            return redirect(
                url_for(".edit_seminar_schedule", shortname=talk.seminar_id),
                302)
        talk.start_time = start_time
        talk.end_time = end_time
    # lock = get_lock(seminar_id, data.get("lock"))
    title = "Create talk" if talk.new else "Edit talk"
    return render_template("edit_talk.html",
                           talk=talk,
                           seminar=talk.seminar,
                           title=title,
                           section="Manage",
                           subsection="edittalk",
                           institutions=institutions(),
                           timezones=timezones,
                           token=token,
                           **extras)
Example #10
0
 def make_error(talk, col=None, err=None):
     if err is not None:
         flash_error("Error processing %s: {0}".format(err), col)
     talk = WebTalk(talk.seminar_id, talk.seminar_ctr, data=raw_data)
     title = "Create talk error" if talk.new else "Edit talk error"
     return render_template(
         "edit_talk.html",
         talk=talk,
         seminar=talk.seminar,
         title=title,
         section="Manage",
         subsection="edittalk",
         institutions=institutions(),
         timezones=timezones,
     )
Example #11
0
def edit_seminar():
    if request.method == "POST":
        data = request.form
    else:
        data = request.args
    shortname = data.get("shortname", "")
    new = data.get("new") == "yes"
    resp, seminar = can_edit_seminar(shortname, new)
    if resp is not None:
        return resp
    if new:
        subjects = clean_subjects(data.get("subjects"))
        if not subjects:
            return show_input_errors(
                [format_errmsg("Please select at least one subject.")])
        else:
            seminar.subjects = subjects

        seminar.is_conference = process_user_input(data.get("is_conference"),
                                                   "is_conference", "boolean",
                                                   None)
        if seminar.is_conference:
            seminar.frequency = 1
            seminar.per_day = 4
        seminar.name = data.get("name", "")
        seminar.institutions = clean_institutions(data.get("institutions"))
        if seminar.institutions:
            seminar.timezone = db.institutions.lookup(seminar.institutions[0],
                                                      "timezone")
    lock = get_lock(shortname, data.get("lock"))
    title = "Create series" if new else "Edit series"
    manage = "Manage" if current_user.is_organizer else "Create"
    return render_template(
        "edit_seminar.html",
        seminar=seminar,
        title=title,
        section=manage,
        subsection="editsem",
        institutions=institutions(),
        short_weekdays=short_weekdays,
        timezones=timezones,
        max_slots=MAX_SLOTS,
        lock=lock,
    )
Example #12
0
def edit_talk():
    if request.method == 'POST':
        data = request.form
    else:
        data = request.args
    resp, seminar, talk = can_edit_talk(data.get("seminar_id", ""),
                                        data.get("seminar_ctr", ""),
                                        data.get("token", ""))
    if resp is not None:
        return resp
    #lock = get_lock(seminar_id, data.get("lock"))
    title = "Create talk" if talk.new else "Edit talk"
    return render_template("edit_talk.html",
                           talk=talk,
                           seminar=seminar,
                           title=title,
                           top_menu=basic_top_menu(),
                           categories=categories(),
                           institutions=institutions(),
                           timezones=timezones)
Example #13
0
def edit_seminar():
    if request.method == 'POST':
        data = request.form
    else:
        data = request.args
    shortname = data.get("shortname", "")
    new = (data.get("new") == "yes")
    resp, seminar = can_edit_seminar(shortname, new)
    if resp is not None:
        return resp
    lock = get_lock(shortname, data.get("lock"))
    title = "Create seminar" if new else "Edit seminar"
    return render_template("edit_seminar.html",
                           seminar=seminar,
                           title=title,
                           top_menu=basic_top_menu(),
                           categories=categories(),
                           institutions=institutions(),
                           weekdays=weekdays,
                           timezones=timezones,
                           lock=lock)
Example #14
0
def index():
    # TODO: use a join for the following query
    seminars = []
    conferences = []
    for semid in db.seminar_organizers.search({"email": current_user.email},
                                              "seminar_id"):
        seminar = WebSeminar(semid)
        if seminar.is_conference:
            conferences.append(seminar)
        else:
            seminars.append(seminar)
    manage = "Manage" if current_user.is_organizer else "Create"
    return render_template(
        "create_index.html",
        seminars=seminars,
        conferences=conferences,
        institution_known=institution_known,
        institutions=institutions(),
        section=manage,
        subsection="home",
        title=manage,
        user_is_creator=current_user.is_creator,
    )
Example #15
0
def edit_seminar():
    if request.method == "POST":
        data = request.form
    else:
        data = request.args
    shortname = data.get("shortname", "")
    new = data.get("new") == "yes"
    resp, seminar = can_edit_seminar(shortname, new)
    if resp is not None:
        return resp
    if new:
        seminar.is_conference = process_user_input(data.get("is_conference"),
                                                   "boolean", None)
        if seminar.is_conference:
            seminar.frequency = 1
            seminar.per_day = 4
        seminar.name = data.get("name", "")
        seminar.institutions = clean_institutions(data.get("institutions"))
        if seminar.institutions:
            seminar.timezone = db.institutions.lookup(seminar.institutions[0],
                                                      "timezone")
    lock = get_lock(shortname, data.get("lock"))
    title = "conference" if seminar.is_conference else "seminar"
    title = "Create " + title if new else "Edit " + title + " properties"
    manage = "Manage" if current_user.is_organizer else "Create"
    return render_template(
        "edit_seminar.html",
        seminar=seminar,
        title=title,
        section=manage,
        subsection="editsem",
        institutions=institutions(),
        weekdays=weekdays,
        timezones=timezones,
        lock=lock,
    )
Example #16
0
def index():
    # TODO: use a join for the following query
    seminars = {}
    conferences = {}
    deleted_seminars = []
    deleted_talks = []

    def key(elt):
        role_key = {"organizer": 0, "curator": 1, "creator": 3}
        return (role_key[elt[1]], elt[0].name)

    for rec in db.seminar_organizers.search(
        {"email": ilike_query(current_user.email)}, ["seminar_id", "curator"]):
        semid = rec["seminar_id"]
        role = "curator" if rec["curator"] else "organizer"
        seminar = WebSeminar(semid)
        pair = (seminar, role)
        if seminar.is_conference:
            conferences[semid] = pair
        else:
            seminars[semid] = pair
    role = "creator"
    for semid in seminars_search({"owner": ilike_query(current_user.email)},
                                 "shortname",
                                 include_deleted=True):
        if semid not in seminars and semid not in conferences:
            seminar = WebSeminar(semid, deleted=True)  # allow deleted
            pair = (seminar, role)
            if seminar.deleted:
                deleted_seminars.append(seminar)
            elif seminar.is_conference:
                conferences[semid] = pair
            else:
                seminars[semid] = pair
    seminars = sorted(seminars.values(), key=key)
    conferences = sorted(conferences.values(), key=key)
    deleted_seminars.sort(key=lambda sem: sem.name)
    for semid, semctr in db._execute(
            # ~~* is case insensitive amtch
            SQL("""
SELECT DISTINCT ON ({Ttalks}.{Csemid}, {Ttalks}.{Csemctr}) {Ttalks}.{Csemid}, {Ttalks}.{Csemctr}
FROM {Ttalks} INNER JOIN {Tsems} ON {Ttalks}.{Csemid} = {Tsems}.{Csname}
WHERE {Tsems}.{Cowner} ~~* %s AND {Ttalks}.{Cdel} = %s AND {Tsems}.{Cdel} = %s
            """).format(
                Ttalks=IdentifierWrapper("talks"),
                Tsems=IdentifierWrapper("seminars"),
                Csemid=IdentifierWrapper("seminar_id"),
                Csemctr=IdentifierWrapper("seminar_ctr"),
                Csname=IdentifierWrapper("shortname"),
                Cowner=IdentifierWrapper("owner"),
                Cdel=IdentifierWrapper("deleted"),
            ),
        [ilike_escape(current_user.email), True, False],
    ):
        talk = WebTalk(semid, semctr, deleted=True)
        deleted_talks.append(talk)
    deleted_talks.sort(key=lambda talk: (talk.seminar.name, talk.start_time))

    manage = "Manage" if current_user.is_organizer else "Create"
    return render_template(
        "create_index.html",
        seminars=seminars,
        conferences=conferences,
        deleted_seminars=deleted_seminars,
        deleted_talks=deleted_talks,
        institution_known=institution_known,
        institutions=institutions(),
        section=manage,
        subsection="home",
        title=manage,
        user_is_creator=current_user.is_creator,
    )