Projet

Général

Profil

0004-manager-ensure-buttons-behave-properly.patch

Valentin Deniaud, 23 avril 2019 11:41

Télécharger (17,2 ko)

Voir les différences:

Subject: [PATCH 4/4] manager: ensure buttons behave properly

We don't want to let the redirection to login happen inside a popup.
 .../chrono/manager_agenda_settings.html       | 40 +++++++++----------
 .../templates/chrono/manager_desk_form.html   |  2 +-
 .../templates/chrono/manager_event_form.html  |  2 +-
 .../templates/chrono/manager_home.html        |  4 +-
 .../chrono/manager_meeting_type_form.html     |  2 +-
 .../manager_time_period_exception_form.html   |  2 +-
 .../manager_time_period_exception_list.html   |  2 +-
 .../chrono/manager_time_period_form.html      |  2 +-
 chrono/manager/utils.py                       |  9 +++++
 chrono/manager/views.py                       |  8 ++--
 10 files changed, 41 insertions(+), 32 deletions(-)
chrono/manager/templates/chrono/manager_agenda_settings.html
12 12
</h2>
13 13
<span class="actions">
14 14
{% if user.is_staff %}
15
  <a rel="popup" href="{% url 'chrono-manager-agenda-delete' pk=object.id %}">{% trans 'Delete' %}</a>
15
<a rel="{{ rel }}" href="{% url 'chrono-manager-agenda-delete' pk=object.id %}">{% trans 'Delete' %}</a>
16 16
{% endif %}
17 17
{% if user_can_manage %}
18 18
  <a href="{% url 'chrono-manager-agenda-export' pk=object.id %}">{% trans 'Export' %}</a>
19
  <a rel="popup" href="{% url 'chrono-manager-agenda-edit' pk=object.id %}">{% trans 'Options' %}</a>
19
  <a rel="{{ rel }}" href="{% url 'chrono-manager-agenda-edit' pk=object.id %}">{% trans 'Options' %}</a>
20 20
  {% if object.kind == "events" %}
21
    <a rel="popup" href="{% url 'chrono-manager-agenda-import-events' pk=object.id %}">{% trans 'Import Events' %}</a>
22
    <a rel="popup" href="{% url 'chrono-manager-agenda-add-event' pk=object.id %}">{% trans 'New Event' %}</a>
21
    <a rel="{{ rel }}" href="{% url 'chrono-manager-agenda-import-events' pk=object.id %}">{% trans 'Import Events' %}</a>
22
    <a rel="{{ rel }}" href="{% url 'chrono-manager-agenda-add-event' pk=object.id %}">{% trans 'New Event' %}</a>
23 23
  {% else %}
24
    <a rel="popup" href="{% url 'chrono-manager-agenda-add-meeting-type' pk=object.id %}">{% trans 'New Meeting Type' %}</a>
25
    <a rel="popup" href="{% url 'chrono-manager-agenda-add-desk' pk=object.id %}">{% trans 'New Desk' %}</a>
24
    <a rel="{{ rel }}" href="{% url 'chrono-manager-agenda-add-meeting-type' pk=object.id %}">{% trans 'New Meeting Type' %}</a>
25
    <a rel="{{ rel }}" href="{% url 'chrono-manager-agenda-add-desk' pk=object.id %}">{% trans 'New Desk' %}</a>
26 26
  {% endif %}
27 27
{% endif %}
28 28
</span>
......
45 45
        {% elif event.waiting_list_places %}
46 46
          data-total="{{event.waiting_list_places}}" data-booked="{{event.waiting_list}}"
47 47
        {% endif %}
48
        ><a rel="popup" href="{% if user_can_manage %}{% url 'chrono-manager-event-edit' pk=event.id %}{% else %}#{% endif %}">
48
        ><a rel="{{ rel }}" href="{% if user_can_manage %}{% url 'chrono-manager-event-edit' pk=event.id %}{% else %}#{% endif %}">
49 49
        {% if event.label %}{{event.label}} / {% endif %}
50 50
        {{ event.start_datetime }}
51 51
        {% if event.full %}/ <span class="full">{% trans "full" %}</span>{% endif %}
......
64 64
        ({% trans "out of bookable period" %})
65 65
        {% endif %}
66 66
            </a>
67
        {% if user_can_manage %}<a rel="popup" class="delete" href="{% url 'chrono-manager-event-delete' pk=event.id %}">{% trans "remove" %}</a>{% endif %}
67
        {% if user_can_manage %}<a rel="{{ rel }}" class="delete" href="{% url 'chrono-manager-event-delete' pk=event.id %}">{% trans "remove" %}</a>{% endif %}
68 68
        <span class="occupation-bar"></span>
69 69
    </li>
70 70
    {% endfor %}
......
89 89
{% if object.meetingtype_set.count %}
90 90
  <ul class="objects-list single-links">
91 91
    {% for meeting_type in object.meetingtype_set.all %}
92
    <li><a rel="popup" href="{% if user_can_manage %}{% url 'chrono-manager-meeting-type-edit' pk=meeting_type.id %}{% else %}#{% endif %}">
92
    <li><a rel="{{ rel }}" href="{% if user_can_manage %}{% url 'chrono-manager-meeting-type-edit' pk=meeting_type.id %}{% else %}#{% endif %}">
93 93
        {{meeting_type.label}}
94 94
        <span class="duration">({{meeting_type.duration}} {% trans "minutes" %})</span>
95 95
        <span class="identifier">[{% trans "identifier:" %} {{meeting_type.slug}}]</span>
96 96
        </a>
97
        {% if user_can_manage %}<a rel="popup" class="delete" href="{% url 'chrono-manager-meeting-type-delete' pk=meeting_type.id %}">{% trans "remove" %}</a>{% endif %}
97
        {% if user_can_manage %}<a rel="{{ rel }}" class="delete" href="{% url 'chrono-manager-meeting-type-delete' pk=meeting_type.id %}">{% trans "remove" %}</a>{% endif %}
98 98
    </li>
99 99
    {% endfor %}
100 100
  </ul>
......
119 119
            {% url 'chrono-manager-agenda-add-time-period' agenda_pk=object.pk pk=desk.pk as add_time_period_url %}
120 120
            <ul class="objects-list single-links">
121 121
                {% if forloop.counter != 1 or forloop.revcounter != 1 %}
122
                <li><a rel="popup" href="{% if user_can_manage %}{% url 'chrono-manager-desk-edit' pk=desk.id %}{% else %}#{% endif %}">
122
                <li><a rel="{{ rel }}" href="{% if user_can_manage %}{% url 'chrono-manager-desk-edit' pk=desk.id %}{% else %}#{% endif %}">
123 123
                    <strong>{{ desk.label }}</strong>
124 124
                    </a>
125
                   {% if user_can_manage %}<a rel="popup" class="delete" href="{% url 'chrono-manager-desk-delete' pk=desk.id %}">{% trans "remove" %}</a>{% endif %}
125
                   {% if user_can_manage %}<a rel="{{ rel }}" class="delete" href="{% url 'chrono-manager-desk-delete' pk=desk.id %}">{% trans "remove" %}</a>{% endif %}
126 126
                </li>
127 127
                {% endif %}
128 128
                {% for time_period in desk.timeperiod_set.all %}
129
                <li><a rel="popup" href="{% if user_can_manage %}{% url 'chrono-manager-time-period-edit' pk=time_period.id %}{% else %}#{% endif %}">
129
                <li><a rel="{{ rel }}" href="{% if user_can_manage %}{% url 'chrono-manager-time-period-edit' pk=time_period.id %}{% else %}#{% endif %}">
130 130
                {{time_period.weekday_str}} / {{time_period.start_time}} → {{time_period.end_time}} </a>
131
                {% if user_can_manage %}<a rel="popup" class="delete" href="{% url 'chrono-manager-time-period-delete' pk=time_period.id %}">{% trans "remove" %}</a>{% endif %}
131
                {% if user_can_manage %}<a rel="{{ rel }}" class="delete" href="{% url 'chrono-manager-time-period-delete' pk=time_period.id %}">{% trans "remove" %}</a>{% endif %}
132 132

  
133 133
                </li>
134 134
                {% endfor %}
135 135
                {% if user_can_manage %}
136
                <li><a class="add" rel="popup" href="{{add_time_period_url}}">{% trans 'Add a time period' %}</a></li>
136
                <li><a class="add" rel="{{ rel }}" href="{{add_time_period_url}}">{% trans 'Add a time period' %}</a></li>
137 137
                {% endif %}
138 138
                {% if desk.timeperiod_set.count %}
139 139
                {% url 'chrono-manager-agenda-add-time-period-exception' agenda_pk=object.pk pk=desk.pk as add_time_period_exception_url %}
140
                    <li><a href="#"><strong>{% trans 'Exceptions' %}</strong></a><a class="link-action-icon upload" rel="popup" href="{% url 'chrono-manager-desk-add-import-time-period-exceptions' pk=desk.pk %}" title="{% trans 'Import exceptions from .ics' %}">{% trans 'upload' %}</a></li>
140
                    <li><a href="#"><strong>{% trans 'Exceptions' %}</strong></a><a class="link-action-icon upload" rel="{{ rel }}" href="{% url 'chrono-manager-desk-add-import-time-period-exceptions' pk=desk.pk %}" title="{% trans 'Import exceptions from .ics' %}">{% trans 'upload' %}</a></li>
141 141
                    {% for exception in desk.get_exceptions_within_two_weeks %}
142
                         <li><a rel="popup"  href="{% if user_can_manage %}{% url 'chrono-manager-time-period-exception-edit' pk=exception.pk %}{% else %}#{% endif %}">
142
                         <li><a rel="{{ rel }}"  href="{% if user_can_manage %}{% url 'chrono-manager-time-period-exception-edit' pk=exception.pk %}{% else %}#{% endif %}">
143 143
                        {{ exception }}
144
                        {% if user_can_manage %}<a rel="popup" class="delete" href="{% url 'chrono-manager-time-period-exception-delete' pk=exception.id %}">{% trans "remove" %}</a>{% endif %}
144
                        {% if user_can_manage %}<a rel="{{ rel }}" class="delete" href="{% url 'chrono-manager-time-period-exception-delete' pk=exception.id %}">{% trans "remove" %}</a>{% endif %}
145 145
                    {% endfor %}
146 146
                    {% if not desk.are_all_exceptions_displayed %}
147
                    <li><a class="timeperiod-exception-all" rel="popup" data-selector="div.timeperiod" href="{% url 'chrono-manager-time-period-exception-list' pk=desk.id %}">({% trans 'see all exceptions' %})</a></li>
147
                    <li><a class="timeperiod-exception-all" rel="{{ rel }}" data-selector="div.timeperiod" href="{% url 'chrono-manager-time-period-exception-list' pk=desk.id %}">({% trans 'see all exceptions' %})</a></li>
148 148
                    {% endif %}
149
                    <li><a class="add" rel="popup" href="{{add_time_period_exception_url}}">{% trans 'Add a time period exception' %}</a></li>
149
                    <li><a class="add" rel="{{ rel }}" href="{{add_time_period_exception_url}}">{% trans 'Add a time period exception' %}</a></li>
150 150
                {% endif %}
151 151
            </ul>
152 152
        </div>
chrono/manager/templates/chrono/manager_desk_form.html
19 19
{% if object.id %}
20 20
<h2>{% trans "Edit Desk" %}</h2>
21 21
<span class="actions">
22
<a rel="popup" href="{% url 'chrono-manager-desk-delete' pk=object.id %}">{% trans 'Delete' %}</a>
22
<a rel="{{ rel }}" href="{% url 'chrono-manager-desk-delete' pk=object.id %}">{% trans 'Delete' %}</a>
23 23
</span>
24 24
{% else %}
25 25
<h2>{% trans "New Desk" %}</h2>
chrono/manager/templates/chrono/manager_event_form.html
17 17
{% if object.id %}
18 18
<h2>{% trans "Edit Event" %}</h2>
19 19
<span class="actions">
20
<a rel="popup" href="{% url 'chrono-manager-event-delete' pk=object.id %}">{% trans 'Delete' %}</a>
20
<a rel="{{ rel }}" href="{% url 'chrono-manager-event-delete' pk=object.id %}">{% trans 'Delete' %}</a>
21 21
</span>
22 22
{% else %}
23 23
<h2>{% trans "New Event" %}</h2>
chrono/manager/templates/chrono/manager_home.html
5 5
<h2>{% trans 'Agendas' %}</h2>
6 6
{% if user.is_staff %}
7 7
<span class="actions">
8
<a rel="popup" href="{% url 'chrono-manager-agendas-import' %}">{% trans 'Import' %}</a>
9
<a rel="popup" href="{% url 'chrono-manager-agenda-add' %}">{% trans 'New' %}</a>
8
<a rel="{{ rel }}" href="{% url 'chrono-manager-agendas-import' %}">{% trans 'Import' %}</a>
9
<a rel="{{ rel }}" href="{% url 'chrono-manager-agenda-add' %}">{% trans 'New' %}</a>
10 10
</span>
11 11
{% endif %}
12 12
{% endblock %}
chrono/manager/templates/chrono/manager_meeting_type_form.html
17 17
{% if object.id %}
18 18
<h2>{% trans "Edit Meeting Type" %}</h2>
19 19
<span class="actions">
20
<a rel="popup" href="{% url 'chrono-manager-meeting-type-delete' pk=object.id %}">{% trans 'Delete' %}</a>
20
<a rel="{{ rel }}" href="{% url 'chrono-manager-meeting-type-delete' pk=object.id %}">{% trans 'Delete' %}</a>
21 21
</span>
22 22
{% else %}
23 23
<h2>{% trans "New Meeting Type" %}</h2>
chrono/manager/templates/chrono/manager_time_period_exception_form.html
19 19
{% if object.id %}
20 20
<h2>{% trans "Edit time period exception" %}</h2>
21 21
<span class="actions">
22
<a rel="popup" href="{% url 'chrono-manager-time-period-exception-delete' pk=object.id %}">{% trans 'Delete' %}</a>
22
<a rel="{{ rel }}" href="{% url 'chrono-manager-time-period-exception-delete' pk=object.id %}">{% trans 'Delete' %}</a>
23 23
</span>
24 24
{% else %}
25 25
<h2>{% trans "New time period exception" %}</h2>
chrono/manager/templates/chrono/manager_time_period_exception_list.html
22 22
    {% for exception in object_list %}
23 23
     <li>
24 24
         <a href="{% if user_can_manage %}{% url 'chrono-manager-time-period-exception-edit' pk=exception.id %}{% else %}#{% endif %}">{{ exception }}</a>
25
        {% if user_can_manage %}<a rel="popup" class="delete" href="{% url 'chrono-manager-time-period-exception-delete' pk=exception.id %}">{% trans "remove" %}</a>{% endif %}
25
        {% if user_can_manage %}<a rel="{{ rel }}" class="delete" href="{% url 'chrono-manager-time-period-exception-delete' pk=exception.id %}">{% trans "remove" %}</a>{% endif %}
26 26
    </li>
27 27
    {% endfor %}
28 28
   </ul>
chrono/manager/templates/chrono/manager_time_period_form.html
19 19
{% if object.id %}
20 20
<h2>{% trans "Edit Time Period" %}</h2>
21 21
<span class="actions">
22
<a rel="popup" href="{% url 'chrono-manager-time-period-delete' pk=object.id %}">{% trans 'Delete' %}</a>
22
<a rel="{{ rel }}" href="{% url 'chrono-manager-time-period-delete' pk=object.id %}">{% trans 'Delete' %}</a>
23 23
</span>
24 24
{% else %}
25 25
<h2>{% trans "New Time Period" %}</h2>
chrono/manager/utils.py
17 17
from django.db import transaction
18 18

  
19 19
from chrono.agendas.models import Agenda, AgendaImportError
20
from chrono.exceptions import RoleNotInSession
20 21

  
21 22

  
22 23
def export_site():
......
42 43
            else:
43 44
                results['updated'] += 1
44 45
    return results
46

  
47

  
48
def set_manage_context(agenda, request, context):
49
    try:
50
        context['user_can_manage'] = agenda.can_be_managed(request)
51
        context['rel'] = 'popup'
52
    except RoleNotInSession:
53
        context['user_can_manage'] = True
chrono/manager/views.py
40 40
from .forms import (AgendaAddForm, AgendaEditForm, EventForm, NewMeetingTypeForm, MeetingTypeForm,
41 41
                    TimePeriodForm, ImportEventsForm, NewDeskForm, DeskForm, TimePeriodExceptionForm,
42 42
                    ExceptionsImportForm, AgendasImportForm, TimePeriodAddForm)
43
from .utils import import_site
43
from .utils import import_site, set_manage_context
44 44

  
45 45

  
46 46
class HomepageView(ListView):
......
236 236
            context['hour_span'] = max(60 // self.agenda.get_base_meeting_duration(), 1)
237 237
        except ValueError:  # no meeting types defined
238 238
            context['hour_span'] = 1
239
        context['user_can_manage'] = self.agenda.can_be_managed(self.request.user)
239
        set_manage_context(self.agenda, self.request, context)
240 240
        return context
241 241

  
242 242
    def get_queryset(self):
......
553 553

  
554 554
    def get_context_data(self, **kwargs):
555 555
        context = super(AgendaSettings, self).get_context_data(**kwargs)
556
        context['user_can_manage'] = self.get_object().can_be_managed(self.request.user)
556
        set_manage_context(self.get_object(), self.request, context)
557 557
        return context
558 558

  
559 559
agenda_settings = AgendaSettings.as_view()
......
759 759

  
760 760
    def get_context_data(self, **kwargs):
761 761
        context = super(TimePeriodExceptionListView, self).get_context_data(**kwargs)
762
        context['user_can_manage'] = self.desk.agenda.can_be_managed(self.request.user)
762
        set_manage_context(self.desk.agenda, self.request, context)
763 763
        return context
764 764

  
765 765

  
766
-