/
regforms.py
150 lines (119 loc) · 6.89 KB
/
regforms.py
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# This file is part of Indico.
# Copyright (C) 2002 - 2015 European Organization for Nuclear Research (CERN).
#
# Indico 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.
#
# Indico 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 Indico; if not, see <http://www.gnu.org/licenses/>.
from __future__ import unicode_literals
from flask import redirect, flash, session
from indico.core.db import db
from indico.modules.events.logs.models.entries import EventLogRealm, EventLogKind
from indico.modules.events.registration import logger
from indico.modules.events.registration.controllers.management import (RHManageRegFormBase,
RHManageRegFormsBase)
from indico.modules.events.registration.forms import RegistrationFormForm, RegistrationFormScheduleForm
from indico.modules.events.registration.models.forms import RegistrationForm
from indico.modules.events.registration.util import get_event_section_data, create_personal_data_fields
from indico.modules.events.registration.views import WPManageRegistration
from indico.modules.payment import event_settings
from indico.web.util import jsonify_data, jsonify_template
from indico.util.date_time import now_utc
from indico.util.i18n import _
from indico.web.forms.base import FormDefaults
from indico.web.flask.util import url_for, url_rule_to_js
class RHManageRegistrationForms(RHManageRegFormsBase):
"""List all registrations forms for an event"""
def _process(self):
regforms = (self.event_new.registration_forms
.filter_by(is_deleted=False)
.order_by(db.func.lower(RegistrationForm.title))
.all())
return WPManageRegistration.render_template('management/regform_list.html', self.event,
event=self.event, regforms=regforms)
class RHRegistrationFormCreate(RHManageRegFormsBase):
"""Creates a new registration form"""
def _process(self):
form = RegistrationFormForm()
if form.validate_on_submit():
regform = RegistrationForm(event_new=self.event_new)
create_personal_data_fields(regform)
form.populate_obj(regform)
db.session.add(regform)
db.session.flush()
flash(_('Registration form has been successfully created'), 'success')
self.event.log(EventLogRealm.management, EventLogKind.positive, 'Registration',
'Registration form "{}" has been created'.format(regform.title), session.user)
return redirect(url_for('.manage_regform', regform))
return WPManageRegistration.render_template('management/regform_edit.html', self.event, event=self.event,
form=form)
class RHRegistrationFormManage(RHManageRegFormBase):
"""Specific registration form management"""
def _process(self):
return WPManageRegistration.render_template('management/regform.html', self.event, regform=self.regform,
event=self.event)
class RHRegistrationFormEdit(RHManageRegFormBase):
"""Edit a registration form"""
def _get_form_defaults(self):
return FormDefaults(self.regform, limit_registrations=self.regform.registration_limit is not None)
def _process(self):
form = RegistrationFormForm(obj=self._get_form_defaults())
if form.validate_on_submit():
form.populate_obj(self.regform)
db.session.flush()
flash(_('Registration form has been successfully modified'), 'success')
return redirect(url_for('.manage_regform', self.regform))
return WPManageRegistration.render_template('management/regform_edit.html', self.event, form=form,
event=self.event, regform=self.regform)
class RHRegistrationFormDelete(RHManageRegFormBase):
"""Delete a registration form"""
def _process(self):
self.regform.is_deleted = True
flash(_("Registration form deleted"), 'success')
logger.info("Registration form {} deleted by {}".format(self.regform, session.user))
return redirect(url_for('.manage_regform_list', self.event))
class RHRegistrationFormOpen(RHManageRegFormBase):
"""Opens registration for a registration form"""
def _process(self):
if self.regform.has_ended:
self.regform.end_dt = None
else:
self.regform.start_dt = now_utc()
logger.info("Registrations for {} opened by {}".format(self.regform, session.user))
flash(_("Registrations for {} are now open").format(self.regform.title), 'success')
return redirect(url_for('.manage_regform', self.regform))
class RHRegistrationFormClose(RHManageRegFormBase):
"""Closes registrations for a registration form"""
def _process(self):
self.regform.end_dt = now_utc()
if not self.regform.has_started:
self.regform.start_dt = self.regform.end_dt
flash(_("Registrations for {} are now closed").format(self.regform.title), 'success')
logger.info("Registrations for {} closed by {}".format(self.regform, session.user))
return redirect(url_for('.manage_regform', self.regform))
class RHRegistrationFormSchedule(RHManageRegFormBase):
"""Schedules registrations for a registration form"""
def _process(self):
form = RegistrationFormScheduleForm(obj=FormDefaults(self.regform), regform=self.regform)
if form.validate_on_submit():
self.regform.start_dt = form.start_dt.data
self.regform.end_dt = form.end_dt.data
flash(_("Registrations for {} have been scheduled").format(self.regform.title), 'success')
logger.info("Registrations for {} scheduled by {}".format(self.regform, session.user))
return jsonify_data(flash=False)
return jsonify_template('events/registration/management/regform_schedule.html', form=form)
class RHRegistrationFormModify(RHManageRegFormBase):
"""Modify the form of a registration form"""
def _process(self):
return WPManageRegistration.render_template('management/regform_modify.html', self.event, event=self.event_new,
sections=get_event_section_data(self.regform, management=True),
regform=self.regform,
currency=event_settings.get(self.event, 'currency'))