Code source de app.groupe.route

from flask import (
    redirect,
    url_for,
    render_template,
    Blueprint,
    request,
    flash,
    jsonify,
    current_app,
)
from pypnusershub import routes as fnauth

from app.groupe import forms as groupeforms
from app.models import TRoles
from app.models import CorRoles
from app.utils.utils_all import strigify_dict


[docs] URL_REDIRECT = current_app.config["URL_REDIRECT"]
[docs] URL_APPLICATION = current_app.config["URL_APPLICATION"]
[docs] route = Blueprint("groupe", __name__)
@route.route("groups/list", methods=["GET", "POST"]) @fnauth.check_auth( 3, )
[docs] def groups(): """ Route qui affiche la liste des groupes Retourne un template avec pour paramètres : - une entête de tableau --> fLine - le nom des colonnes de la base --> line - le contenu du tableau --> table - le chemin de mise à jour --> pathU - le chemin de suppression --> pathD - le chemin d'ajout --> pathA - le chemin des membres du groupe --> pathP - une clé (clé primaire dans la plupart des cas) --> key - un nom (nom de la table) pour le bouton ajout --> name - un nom de listes --> name_list - ajoute une colonne de bouton ('True' doit être de type string)--> otherCol - nom affiché sur le bouton --> Members """ fLine = ["ID groupe", "nom", "description"] columns = ["id_role", "nom_role", "desc_role"] filters = [{"col": "groupe", "filter": "True"}] contents = TRoles.get_all(columns, filters, order_by="identifiant") return render_template( "table_database.html", fLine=fLine, line=columns, table=contents, key="id_role", pathI=URL_APPLICATION + "/group/info/", pathU=URL_APPLICATION + "/group/update/", pathD=URL_APPLICATION + "/group/delete/", pathA=URL_APPLICATION + "/group/add/new", pathP=URL_APPLICATION + "/group/members/", name="un groupe", name_list="Groupes", otherCol="True", Members="Membres", see="True", )
@route.route("group/add/new", methods=["GET", "POST"]) @route.route("group/update/<id_role>", methods=["GET", "POST"]) @fnauth.check_auth( 6, )
[docs] def addorupdate(id_role=None): """ Route affichant un formulaire vierge ou non (selon l'url) pour ajouter ou mettre à jour un groupe L'envoie du formulaire permet l'ajout ou la maj du groupe dans la base Retourne un template accompagné d'un formulaire pré-rempli ou non selon le paramètre id_role Une fois le formulaire validé on retourne une redirection vers la liste de groupe """ form = groupeforms.Group() form.groupe.process_data(True) if id_role == None: if request.method == "POST": if form.validate_on_submit() and form.validate(): form_group = pops(form.data) form_group.pop("id_role") # set the group as active default form_group["active"] = True TRoles.post(form_group) return redirect(url_for("groupe.groups")) else: errors = form.errors return render_template("group.html", form=form, title="Formulaire Groupe") else: group = TRoles.get_one(id_role) if request.method == "GET": form = process(form, group) if request.method == "POST": if form.validate_on_submit() and form.validate(): form_group = pops(form.data) form_group["id_role"] = group["id_role"] TRoles.update(form_group) return redirect(url_for("groupe.groups")) else: errors = form.errors flash(strigify_dict(errors), "error") return render_template("group.html", form=form, title="Formulaire Groupe")
@route.route("group/members/<id_groupe>", methods=["GET", "POST"]) @fnauth.check_auth( 6, )
[docs] def membres(id_groupe): """ Route affichant la liste des roles n'appartenant pas au groupe vis à vis de ceux qui appartiennent à celui ci. Avec pour paramètre un id de groupe (id_role) Retourne un template avec pour paramètres: - une entête des tableaux --> fLine - le nom des colonnes de la base --> data - liste des roles n'appartenant pas au groupe --> table - liste des roles appartenant au groupe --> table2 - variable qui permet a jinja de colorer une ligne si celui-ci est un groupe --> group """ users_in_group = TRoles.test_group(TRoles.get_user_in_group(id_groupe)) users_out_group = TRoles.test_group(TRoles.get_user_out_group(id_groupe)) group = TRoles.get_one(id_groupe) header = ["ID", "Nom"] data = ["id_role", "full_name"] if request.method == "POST": data = request.get_json() new_users_in_group = data["tab_add"] new_users_out_group = data["tab_del"] try: CorRoles.add_cor(id_groupe, new_users_in_group) CorRoles.del_cor(id_groupe, new_users_out_group) except Exception as e: return jsonify(str(e)), 500 return jsonify({"redirect": url_for("groupe.groups")}), 200 return render_template( "tobelong.html", fLine=header, data=data, table=users_out_group, table2=users_in_group, group="groupe", info="Membres du groupe '" + group["nom_role"] + "'", )
@route.route("group/delete/<id_groupe>", methods=["GET", "POST"]) @fnauth.check_auth( 6, )
[docs] def delete(id_groupe): """ Route qui supprime un groupe dont l'id est donné en paramètres dans l'url Retourne une redirection vers la liste de groupe """ TRoles.delete(id_groupe) return redirect(url_for("groupe.groups"))
@route.route("group/info/<id_role>", methods=["GET", "POST"]) @fnauth.check_auth( 3, )
[docs] def info(id_role): group = TRoles.get_one(id_role) members = TRoles.get_user_in_group(id_role) lists = TRoles.get_user_lists(id_role) rights = TRoles.get_user_app_profils(id_role) return render_template( "info_group.html", group=group, members=members, lists=lists, rights=rights, pathU=URL_APPLICATION + "/group/update/", )
[docs] def pops(form): """ Methode qui supprime les éléments indésirables du formulaires Avec pour paramètre un formulaire """ form.pop("submit") form.pop("csrf_token") return form
[docs] def process(form, group): """ Methode qui rempli le formulaire par les données de l'éléments concerné Avec pour paramètres un formulaire et un groupe """ form.nom_role.process_data(group["nom_role"]) form.desc_role.process_data(group["desc_role"]) return form