import os from flask import Blueprint, render_template, request, redirect, url_for, flash, current_app from flask_login import login_required, current_user from ..extensions import db from ..models import Activity, ActivityStatus, ActivitySubmission, SubmissionImage, ReviewStatus from ..services.images import save_image bp = Blueprint("activities", __name__, url_prefix="/activities") @bp.route("") def list_activities(): acts = Activity.query.filter(Activity.status != ActivityStatus.draft).order_by(Activity.start_at).all() return render_template("activities/list.html", activities=acts) @bp.route("/") def detail(act_id): act = Activity.query.get_or_404(act_id) return render_template("activities/detail.html", activity=act) @bp.route("//submit", methods=["GET", "POST"]) @login_required def submit(act_id): act = Activity.query.get_or_404(act_id) if request.method == "POST": files = request.files.getlist("images") sub = ActivitySubmission(activity_id=act.id, user_id=current_user.id, status=ReviewStatus.pending) db.session.add(sub) db.session.flush() upload_dir = os.path.join(current_app.config["UPLOAD_FOLDER"], "activities") for idx, f in enumerate(files): original, web, thumb, exif = save_image(f, upload_dir) img = SubmissionImage(submission_id=sub.id, original_path=original, web_path=web, thumb_path=thumb, exif_json=exif, order_index=idx) db.session.add(img) db.session.commit() flash("投稿已提交,待审核") return redirect(url_for("activities.detail", act_id=act.id)) return render_template("activities/submit.html", activity=act)