def edit_wiki(path): config = flask.current_app.config editable = config["EDITABLE"] if not editable: flask.abort(500) pages = get_wikipages() path = paths.normalize("/" + path) path = pages.source_path(path) if paths.extension(path) != config["WIKI_EXT"]: # TODO: better error here! flask.abort(500) userid = get_request_userid() cp = Checkpoints(userid, pages.store, pages.cachestore) from_autosave = False if pages.exists(path): lastmod = pages.last_modified(path) if cp.has_autosave_after(path, lastmod): source = cp.get_autosave(path) from_autosave = True else: source = pages.content(path, reformat=True) else: lastmod = 0 source = "" return flask.render_template("/templates/edit.jinja2", source=source, path=path, rel=null_rel, lastmod=lastmod, from_autosave=from_autosave)
def restore_wiki(): request = flask.request config = flask.current_app.config pages = get_wikipages() path = request.form["path"] checkpointid = request.form["id"] # encoding = request.form.get("encoding", "utf8") userid = get_request_userid(request) cp = Checkpoints(userid, pages.store, pages.cachestore) return cp.restore_checkpoint(path, checkpointid, encoding="utf8")
def preview_wiki(): request = flask.request config = flask.current_app.config pages = get_wikipages() indexer = get_indexer() searcher = indexer.searcher() autosave_seconds = config.get("AUTOSAVE_SECONDS", 10) autosave = ( config.get("AUTOSAVE", True) and request.form.get("autosave") != "false" ) assert "path" in request.form path = request.form["path"] assert path source = request.form.get("source", "") scrollTop = int(request.form.get("scrollTop") or "0") lastmod = 0 if pages.exists(path): lastmod = pages.last_modified(path) last_autosave = 0 if autosave: session = flask.session userid = get_request_userid() if "last_autosave" in session: last_autosave = session.get("last_autosave") else: last_autosave = datetime.datetime.utcnow() cp = Checkpoints(userid, pages.store, pages.cachestore) now = datetime.datetime.utcnow() if now - last_autosave >= datetime.timedelta(seconds=autosave_seconds): cp.autosave(path, source) last_autosave = session["last_autosave"] = now def rel(p): if p.startswith("http:") or p.startswith("https:"): return p return paths.join(path, p) extras = {"rel": rel} html = pages.preview(path, source, searcher=searcher, extras=extras, templatename="/templates/preview.jinja2") return flask.jsonify(html=html, last_modified=lastmod, last_autosave=last_autosave, scrollTop=scrollTop)
def save_wiki(): request = flask.request config = flask.current_app.config maxnum = config.get("CHECKPOINT_MAX", 10) pages = get_wikipages() path = request.form["path"] source = request.form["source"] # encoding = request.form.get("encoding", "utf8") userid = get_request_userid() cp = Checkpoints(userid, pages.store, pages.cachestore, maxnum) cp.save_checkpoint(path, source, encoding="utf8") return source