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)
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)
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
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)
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)