# -*- coding: utf-8 -*- from flask import abort, g, redirect, request, url_for from flask_mako import render_template from .getters import get_current from .._provided import blueprint, config __all__ = ["home", "navitem", "current_campaign", "campaign", "operation", "set_campaign"] def home(): """Render and return the main campaign page.""" current = get_current() if current: campaign = config["campaigns"][current] return render_template("campaigns/campaign.mako", name=current, campaign=campaign, enabled=True) return render_template("campaigns/empty.mako") def navitem(): """Render and return the navigation item for this module.""" current = get_current() if current: result = render_template("campaigns/navitem.mako", current=current) return result.decode("utf8") @blueprint.rroute("/campaign") def current_campaign(): """Render and return the current campaign page.""" current = get_current() if current: return redirect(url_for(".campaign", name=current), 303) return render_template("campaigns/empty.mako") @blueprint.rroute("/campaigns/") def campaign(name): """Render and return a campaign page.""" if name not in config["campaigns"]: abort(404) campaign = config["campaigns"][name] enabled = name in config["enabled"] return render_template("campaigns/campaign.mako", name=name, campaign=campaign, enabled=enabled) @blueprint.rroute("/campaigns//operations/") def operation(cname, opname): """Render and return an operation page.""" if cname not in config["campaigns"]: abort(404) campaign = config["campaigns"][cname] if opname not in campaign["operations"]: abort(404) operation = campaign["operations"][opname] enabled = cname in config["enabled"] and opname in campaign["enabled"] return render_template("campaigns/operation.mako", cname=cname, campaign=campaign, opname=opname, operation=operation, enabled=enabled) @blueprint.rroute("/settings/campaign", methods=["POST"]) def set_campaign(): """Update the user's currently selected campaign.""" campaign = request.form.get("campaign") if campaign not in config["enabled"]: abort(400) g.auth.set_character_modprop("campaigns", "current", campaign) return redirect(url_for(".campaign", name=campaign), 303)