File: views_common.py

package info (click to toggle)
slm 2.12-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 24,520 kB
  • sloc: python: 15,419; javascript: 5,061; makefile: 184; sh: 182; xml: 57
file content (89 lines) | stat: -rw-r--r-- 3,373 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
"""
    gestion.views_common, un module pour SLM
    - partie commune du rendu pages web à l'aide de modèles

    Copyright (C) 2023 Georges Khaznadar <georgesk@debian.org>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
"""
from django.shortcuts import render
from django.utils.translation import gettext_lazy as _
from django.utils.translation import activate, get_language_info

from .version import this_version
from manuels.settings import language_for

import unicodedata

class Onglet:
    """
    Cette classe définit les données d'un onglet. Les paramètres du
    constructeur sont:
    @param title le titre de l'onglet
    @param page le nom de da fonction à invoquer dans le module views
    @param pour_tous vrai si l'onglet est défini pour tous (faux par défaut)
    """
    def __init__(self, title, page, pour_tous = False):
        self.title = title
        self.page = page
        self.pour_tous = pour_tous
        return
    
Les_onglets = [ ## accès aux pages de niveau 1
    Onglet(_("Paramètres"), "parametres"),
    Onglet(_("Achats/Inventaire"), "achats_inventaire"),
    Onglet(_("Prêts"), "prets"),
    Onglet(_("Retours"), "retours"),
    Onglet(_("Boutique"), "eleve_invite"),
    Onglet(_("Assistance"), "assistance"),
    Onglet(_("À propos"), "apropos", pour_tous = True),
]


def render_common(request, template, subtitle="", context=None,
                  content_type=None, status=None, using=None,
                  pour_tous=False):
    """
    rendu des pages incluant des onglets, basé sur django.shortcuts.render
    @param request l'objet requête
    @param template le modèle de page à rendre
    @param subtitle un sous-titre spécifique à la page à rendre
    @param context le contexte pour utiliser le modèle ; il sera enrichi
      pour produire le titre et les onglets
    @param content_type idem que pour django.shortcuts.render
    @param status idem que pour django.shortcuts.render
    @param using idem que pour django.shortcuts.render
    @param pour_tous permet de forcer le caractère public de la page ;
       si la page n'est pas publique, un message demande de s'authentifier
       (faux par défaut)
    @return un objet de type HTTPRequest
    """
    lalangue = request.session.get("lang", "en") # en par défaut
    activate(lalangue)
    dico = {
        "version": this_version,
        "nom_page": subtitle,
        "onglets": Les_onglets,
        "page_pour_tous": pour_tous,
        "lalangue": lalangue,
        "locale": language_for(lalangue),
    }
    if context is None:
        context = dico
    else:
        context.update(dico)
    if "aide" not in dico:
        dico["aide"] = True
    return render(request, template, context, content_type, status, using)