Projet

Général

Profil

0001-manager-dynamically-produce-homepage-menu-fixes-2422.patch

Benjamin Dauvergne, 01 juin 2018 16:07

Télécharger (4,89 ko)

Voir les différences:

Subject: [PATCH] manager: dynamically produce homepage menu (fixes #24229)

New entries can be added by applications using the
a2_hook_manager_homepage_entries(view) hook.

Each entry is a dict containing at least a string label and a string
href. A CSS "class", a numeric "order" and a string "permission" can
also be provisionning but are not mandatory.
 .../authentic2/manager/homepage.html          | 31 ++---------
 src/authentic2/manager/views.py               | 53 +++++++++++++++++++
 2 files changed, 57 insertions(+), 27 deletions(-)
src/authentic2/manager/templates/authentic2/manager/homepage.html
17 17

  
18 18
{% block content %}
19 19
  <ul class="apps">
20
    {% if perms.any.a2_rbac.search_organizationalunit %}
21
      <li class="icon-organizational-units">
22
        <a href="{% url "a2-manager-ous" %}">
23
          {% trans "Organizational units" %}
24
        </a>
20
    {% for entry in entries %}
21
      <li {% if entry.class %}class="{{ entry.class }}"{% endif %}>
22
          <a href="{{ entry.href }}">{{ entry.label }}</a>
25 23
      </li>
26
    {% endif %}
27
    {% if perms.any.custom_user.search_user %}
28
      <li class="icon-users">
29
        <a href="{% url "a2-manager-users" %}">
30
          {% trans "Users" %}
31
        </a>
32
      </li>
33
    {% endif %}
34
    {% if perms.any.a2_rbac.search_role %}
35
      <li class="icon-roles">
36
        <a href="{% url "a2-manager-roles" %}">
37
          {% trans "Roles" %}
38
        </a>
39
      </li>
40
    {% endif %}
41
    {% if perms.any.authentic2.search_service %}
42
      <li class="icon-services">
43
        <a href="{% url "a2-manager-services" %}">
44
          {% trans "Services" %}
45
        </a>
46
      </li>
47
    {% endif %}
24
    {% endfor %}
48 25
  </ul>
49 26
  <br style="clear: both;"/>
50 27
{% endblock %}
src/authentic2/manager/views.py
541 541
    template_name = 'authentic2/manager/homepage.html'
542 542
    permissions = ['a2_rbac.search_role', 'a2_rbac.search_organizationalunit',
543 543
                   'auth.search_group', 'custom_user.search_user']
544
    default_entries = [
545
        {
546
            'class': 'icon-organizational-units',
547
            'href': reverse_lazy('a2-manager-ous'),
548
            'label': _('Organizational units'),
549
            'order': -1,
550
            'permission': 'a2_rbac.search_organizationalunit',
551
        },
552
        {
553
            'class': 'icon-users',
554
            'href': reverse_lazy('a2-manager-users'),
555
            'label': _('Users'),
556
            'order': -1,
557
            'permission': 'a2_rbac.search_user',
558
        },
559
        {
560
            'class': 'icon-roles',
561
            'href': reverse_lazy('a2-manager-roles'),
562
            'label': _('Roles'),
563
            'order': -1,
564
            'permission': 'a2_rbac.search_role',
565
        },
566
        {
567
            'class': 'icon-services',
568
            'href': reverse_lazy('a2-manager-services'),
569
            'label': _('Services'),
570
            'order': -1,
571
            'permission': 'a2_rbac.search_service',
572
        },
573
    ]
544 574

  
545 575
    def dispatch(self, request, *args, **kwargs):
546 576
        if app_settings.HOMEPAGE_URL:
547 577
            return redirect(request, app_settings.HOMEPAGE_URL)
548 578
        return super(HomepageView, self).dispatch(request, *args, **kwargs)
549 579

  
580
    def get_homepage_entries(self):
581
        entries = []
582
        for entry in self.default_entries:
583
            if 'permission' in entry and not self.request.user.has_perm(entry['permission']):
584
                continue
585
            entries.append(entry)
586
        for hook_entries in hooks.call_hooks('manager_homepage_entries', self):
587
            if not hasattr(hook_entries, 'append'):
588
                hook_entries = [hook_entries]
589
            for entry in hook_entries:
590
                if 'permission' in entry and not self.request.user.has_perm(entry['permission']):
591
                    continue
592
                entries.append(entry)
593
        # use possible key order to sort
594
        # list.sort() is supposed to be a stable sort (already sorted entries
595
        # are kept in the same order)
596
        entries.sort(key=lambda d: d.get('order', 0))
597
        return entries
598

  
599
    def get_context_data(self, **kwargs):
600
        kwargs['entries'] = self.get_homepage_entries()
601
        return super(HomepageView, self).get_context_data(**kwargs)
602

  
550 603

  
551 604
homepage = HomepageView.as_view()
552 605

  
553
-