0004-manager-ensure-buttons-behave-properly.patch
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 download 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 RolesNotInSession |
|
20 | 21 | |
21 | 22 | |
22 | 23 |
def export_site(): |
chrono/manager/views.py | ||
---|---|---|
196 | 196 |
agenda_view = AgendaView.as_view() |
197 | 197 | |
198 | 198 | |
199 |
class AgendaDateView(object): |
|
199 |
class UserCanManageMixin(object): |
|
200 | ||
201 |
def get_context_data(self, **kwargs): |
|
202 |
context = super(UserCanManageMixin, self).get_context_data(**kwargs) |
|
203 |
try: |
|
204 |
context['user_can_manage'] = self.agenda.can_be_managed(self.request) |
|
205 |
context['rel'] = 'popup' |
|
206 |
except RolesNotInSession: |
|
207 |
context['user_can_manage'] = True |
|
208 |
return context |
|
209 | ||
210 | ||
211 |
class AgendaDateView(UserCanManageMixin): |
|
200 | 212 |
model = Event |
201 | 213 |
month_format = '%m' |
202 | 214 |
date_field = 'start_datetime' |
... | ... | |
236 | 248 |
context['hour_span'] = max(60 // self.agenda.get_base_meeting_duration(), 1) |
237 | 249 |
except ValueError: # no meeting types defined |
238 | 250 |
context['hour_span'] = 1 |
239 |
context['user_can_manage'] = self.agenda.can_be_managed(self.request.user) |
|
240 | 251 |
return context |
241 | 252 | |
242 | 253 |
def get_queryset(self): |
... | ... | |
527 | 538 |
return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.desk.agenda.id}) |
528 | 539 | |
529 | 540 | |
530 |
class AgendaSettings(ManagedAgendaMixin, DetailView): |
|
541 |
class AgendaSettings(ManagedAgendaMixin, UserCanManageMixin, DetailView):
|
|
531 | 542 |
template_name = 'chrono/manager_agenda_settings.html' |
532 | 543 |
model = Agenda |
533 | 544 | |
... | ... | |
552 | 563 |
raise PermissionDenied() |
553 | 564 |
return super(DetailView, self).dispatch(request, *args, **kwargs) |
554 | 565 | |
555 |
def get_context_data(self, **kwargs): |
|
556 |
context = super(AgendaSettings, self).get_context_data(**kwargs) |
|
557 |
context['user_can_manage'] = self.get_object().can_be_managed(self.request.user) |
|
558 |
return context |
|
559 | ||
560 | 566 |
agenda_settings = AgendaSettings.as_view() |
561 | 567 | |
562 | 568 | |
... | ... | |
751 | 757 |
time_period_exception_edit = TimePeriodExceptionEditView.as_view() |
752 | 758 | |
753 | 759 | |
754 |
class TimePeriodExceptionListView(ManagedDeskMixin, ListView): |
|
760 |
class TimePeriodExceptionListView(ManagedDeskMixin, UserCanManageMixin, ListView):
|
|
755 | 761 |
template_name = 'chrono/manager_time_period_exception_list.html' |
756 | 762 |
model = TimePeriodException |
757 | 763 | |
758 | 764 |
def get_queryset(self): |
759 | 765 |
return self.model.objects.filter(desk=self.desk) |
760 | 766 | |
761 |
def get_context_data(self, **kwargs): |
|
762 |
context = super(TimePeriodExceptionListView, self).get_context_data(**kwargs) |
|
763 |
context['user_can_manage'] = self.desk.agenda.can_be_managed(self.request.user) |
|
764 |
return context |
|
765 | ||
766 | 767 | |
767 | 768 |
time_period_exception_list = TimePeriodExceptionListView.as_view() |
768 | 769 | |
769 |
- |