예제 #1
0
def title_knowl(series_id, series_ctr, **kwds):
    talk = talks_lookup(series_id, series_ctr)
    if talk is None:
        return render_template("404_content.html"), 404
    else:
        # tz = None, uses the users timezone
        return render_template("talk-knowl.html", talk=talk, tz=None)
예제 #2
0
def revive_talk(semid, semctr):
    talk = talks_lookup(semid, semctr, include_deleted=True)

    if talk is None:
        flash_error("Talk %s/%s was deleted permanently", semid, semctr)
        return redirect(url_for(".edit_seminar_schedule", shortname=semid),
                        302)
    if not current_user.is_subject_admin(
            talk) and talk.seminar.owner != current_user:
        flash_error("You do not have permission to revive this talk")
        return redirect(url_for(".index"), 302)
    if not talk.deleted:
        flash_error("Talk %s/%s was not deleted, so cannot be revived", semid,
                    semctr)
        return redirect(
            url_for(".edit_talk", seminar_id=semid, seminar_ctr=semctr), 302)
    else:
        db.talks.update({
            "seminar_id": semid,
            "seminar_ctr": semctr
        }, {"deleted": False})
        flash(
            "Talk revived.  Note that any users who were subscribed no longer are."
        )
        return redirect(url_for(".edit_seminar_schedule", shortname=semid),
                        302)
예제 #3
0
파일: main.py 프로젝트: tornaria/seminars
def save_talk(version=0, user=None):
    if version != 0:
        raise APIError({"code": "invalid_version",
                        "description": "Unknown API version: %s" % version})
    raw_data = request.get_json()
    # Temporary measure while we rename seminar_id
    series_id = raw_data.pop("series_id", None)
    raw_data["seminar_id"] = series_id
    if series_id is None:
        raise APIError({"code": "unspecified_series_id",
                        "description": "You must specify series_id when saving a talk"})
    series = seminars_lookup(series_id)
    if series is None:
        raise APIError({"code": "no_series",
                        "description": "The series %s does not exist (or is deleted)" % series_id})
    else:
        # Make sure user has permission to edit
        if not series.user_can_edit(user):
            raise APIError({"code": "unauthorized_user",
                            "description": "You do not have permission to edit %s." % series_id}, 401)
    # Temporary measure while we rename seminar_ctr
    series_ctr = raw_data.pop("series_ctr", None)
    raw_data["seminar_ctr"] = series_ctr
    if series_ctr is None:
        # Creating new talk
        talk = WebTalk(series_id, seminar=series, editing=True)
    else:
        talk = talks_lookup(series_id, series_ctr)
        if talk is None:
            raise APIError({"code": "no_talk",
                            "description": "The talk %s/%s does not exist (or is deleted)" % (series_id, series_ctr)})
    warnings = []
    def warn(msg, *args):
        warnings.append(msg % args)
    data, errmsgs = process_save_talk(talk, raw_data, warn, format_error, format_input_error)
    if errmsgs:
        raise APIError({"code": "processing_error",
                        "description": "Error in processing input",
                        "errors": errmsgs})
    else:
        new_version = WebTalk(talk.seminar_id, data=data)
    sanity_check_times(new_version.start_time, new_version.end_time)
    if talk.new or new_version != talk:
        # Talks saved by the API are not displayed until user approves
        new_version.display = False
        new_version.by_api = True
        new_version.save(user)
    else:
        raise APIError({"code": "no_changes",
                        "description": "No changes detected"})
    edittype = "created" if talk.new else "edited"
    if warnings:
        response = jsonify({"code": "warning",
                            "description": "series successfully %s, but..." % edittype,
                            "warnings": warnings})
    else:
        response = jsonify({"code": "success",
                            "description": "series successfully %s" % edittype})
    return response
예제 #4
0
def lookup_talk(version=0):
    if version != 0:
        raise version_error(version)
    if request.method == "POST":
        raw_data = get_request_json()
    else:
        raw_data = get_request_args_json()
    series_id = _get_col("series_id", raw_data, "looking up a talk")
    series_ctr = _get_col("series_ctr", raw_data, "looking up a talk")
    result = talks_lookup(series_id, series_ctr, objects=False, sanitized=True)
    ans = {"code": "success", "properties": result}
    callback = raw_data.get("callback", False)
    return str_jsonify(ans, callback)
예제 #5
0
def permdelete_talk(semid, semctr):
    talk = talks_lookup(semid, semctr, include_deleted=True)

    if talk is None:
        flash_error("Talk %s/%s already deleted permanently", semid, semctr)
        return redirect(url_for(".edit_seminar_schedule", shortname=semid),
                        302)
    if not current_user.is_subject_admin(
            talk) and talk.seminar.owner != current_user:
        flash_error("You do not have permission to delete this seminar")
        return redirect(url_for(".index"), 302)
    if not talk.deleted:
        flash_error("You must delete talk %s/%s first", semid, semctr)
        return redirect(
            url_for(".edit_talk", seminar_id=semid, seminar_ctr=semctr), 302)
    else:
        db.talks.delete({"seminar_id": semid, "seminar_ctr": semctr})
        flash("Talk %s/%s permanently deleted" % (semid, semctr))
        return redirect(url_for(".edit_seminar_schedule", shortname=semid),
                        302)