🔒 Repository is read-only – file editing is disabled.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
from flask import Blueprint, render_template, request, redirect, flash, session
from database import get_db
from i18n import t
docs_bp = Blueprint("docs", __name__)
def _admin_required():
if not session.get("is_admin"):
flash(t("admin_required"), "error")
return False
return True
@docs_bp.route("/")
def index():
db = get_db()
lang = request.args.get("lang", "") or "pl"
docs = db.execute("SELECT * FROM docs WHERE lang=? ORDER BY title", (lang,)).fetchall()
db.close()
return render_template("docs/index.html", docs=docs, lang=lang)
@docs_bp.route("/getting-started")
def getting_started():
"""Strona startowa docs. Jeśli jest w bazie (po migracji) → widok z DB
(z edycją i lang=). Inaczej → statyczny szablon (fallback)."""
db = get_db()
lang = request.args.get("lang", "") or "pl"
doc = db.execute("SELECT * FROM docs WHERE slug='getting-started' AND lang=?", (lang,)).fetchone()
if not doc:
doc = db.execute("SELECT * FROM docs WHERE slug='getting-started'").fetchone()
if doc:
db.close()
return redirect(f"/docs/getting-started?lang={doc['lang']}")
if not doc:
db.close()
return render_template("docs/getting_started.html")
other = db.execute("SELECT lang FROM docs WHERE slug='getting-started' AND lang!=?", (lang,)).fetchall()
db.close()
return render_template("docs/view.html", doc=doc, other_langs=[r["lang"] for r in other])
@docs_bp.route("/<slug>")
def view(slug):
db = get_db()
lang = request.args.get("lang", "") or "pl"
doc = db.execute("SELECT * FROM docs WHERE slug=? AND lang=?", (slug, lang)).fetchone()
if not doc:
# Spróbuj innego języka
doc = db.execute("SELECT * FROM docs WHERE slug=?", (slug,)).fetchone()
if not doc:
db.close()
return render_template("404.html"), 404
return redirect(f"/docs/{slug}?lang={doc['lang']}")
# Znajdź wersję w innym języku
other = db.execute("SELECT lang FROM docs WHERE slug=? AND lang!=?", (slug, lang)).fetchall()
db.close()
return render_template("docs/view.html", doc=doc, other_langs=[r["lang"] for r in other])
@docs_bp.route("/new", methods=["GET", "POST"])
def new():
if not _admin_required():
return redirect("/docs")
if request.method == "POST":
slug = request.form.get("slug", "").strip().lower().replace(" ", "-")
lang = request.form.get("lang", "pl")
title = request.form.get("title", "").strip()
content = request.form.get("content", "").strip()
if not slug or not title:
flash("Slug i tytuł są wymagane", "error")
else:
db = get_db()
try:
db.execute("INSERT INTO docs (slug, lang, title, content, author) VALUES (?,?,?,?,?)",
(slug, lang, title, content, session.get("username", "admin")))
db.commit()
flash(f"✅ Dokumentacja {slug} ({lang}) utworzona", "ok")
db.close()
return redirect(f"/docs/{slug}?lang={lang}")
except Exception:
flash("Taki slug + lang już istnieje", "error")
db.close()
return render_template("docs/edit.html", doc=None)
@docs_bp.route("/<slug>/edit", methods=["GET", "POST"])
def edit(slug):
if not _admin_required():
return redirect("/docs")
db = get_db()
lang = request.args.get("lang", "") or "pl"
doc = db.execute("SELECT * FROM docs WHERE slug=? AND lang=?", (slug, lang)).fetchone()
if not doc:
db.close()
return render_template("404.html"), 404
if request.method == "POST":
title = request.form.get("title", "").strip()
content = request.form.get("content", "").strip()
if not title:
flash("Tytuł jest wymagany", "error")
else:
db.execute("UPDATE docs SET title=?, content=?, updated_at=CURRENT_TIMESTAMP WHERE id=?",
(title, content, doc["id"]))
db.commit()
flash("✅ Zapisano", "ok")
db.close()
return redirect(f"/docs/{slug}?lang={lang}")
db.close()
return render_template("docs/edit.html", doc=doc)
@docs_bp.route("/<slug>/delete", methods=["POST"])
def delete(slug):
if not _admin_required():
return redirect("/docs")
db = get_db()
lang = request.args.get("lang", "") or "pl"
db.execute("DELETE FROM docs WHERE slug=? AND lang=?", (slug, lang))
db.commit()
db.close()
flash(f"Usunięto {slug} ({lang})", "ok")
return redirect("/docs")