Print password pdf with url and welcometext.
This commit is contained in:
parent
ceb9a3b4c3
commit
a05b576f9e
@ -15,6 +15,7 @@
|
|||||||
<li><a href="{% url user_print %}"><img src="/static/images/icons/application-pdf.png"> {%trans 'Print participant list' %}</a></li>
|
<li><a href="{% url user_print %}"><img src="/static/images/icons/application-pdf.png"> {%trans 'Print participant list' %}</a></li>
|
||||||
<li><a href="{% url user_import %}"> {%trans 'Import' %}</a></li>
|
<li><a href="{% url user_import %}"> {%trans 'Import' %}</a></li>
|
||||||
<li><a href="{% url user_gen_passwords %}">{% trans 'Generate first passwords' %}</a></li>
|
<li><a href="{% url user_gen_passwords %}">{% trans 'Generate first passwords' %}</a></li>
|
||||||
|
<li><a href="{% url print_passwords %}"><img src="/static/images/icons/application-pdf.png">{% trans 'Print password list' %}</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -29,6 +29,7 @@ urlpatterns = patterns('participant.views',
|
|||||||
url(r'^user/settings$', 'user_settings', name='user_settings'),
|
url(r'^user/settings$', 'user_settings', name='user_settings'),
|
||||||
url(r'^participant/genpasswords$', 'gen_passwords', name='user_gen_passwords'),
|
url(r'^participant/genpasswords$', 'gen_passwords', name='user_gen_passwords'),
|
||||||
url(r'^participant/resetpassword/(?P<user_id>\d+)$', 'reset_password', name='user_reset_passwords'),
|
url(r'^participant/resetpassword/(?P<user_id>\d+)$', 'reset_password', name='user_reset_passwords'),
|
||||||
|
url(r'^participant/passwords/print$', 'print_passwords', name='print_passwords'),
|
||||||
)
|
)
|
||||||
|
|
||||||
urlpatterns += patterns('django.contrib.auth.views',
|
urlpatterns += patterns('django.contrib.auth.views',
|
||||||
|
@ -25,7 +25,7 @@ from participant.models import Profile, set_first_user_passwords
|
|||||||
from participant.api import gen_username
|
from participant.api import gen_username
|
||||||
from participant.forms import UserForm, UsernameForm, ProfileForm, UsersettingsForm, UserImportForm, GroupForm, AdminPasswordChangeForm
|
from participant.forms import UserForm, UsernameForm, ProfileForm, UsersettingsForm, UserImportForm, GroupForm, AdminPasswordChangeForm
|
||||||
from utils.utils import template, permission_required, gen_confirm_form
|
from utils.utils import template, permission_required, gen_confirm_form
|
||||||
from utils.pdf import print_userlist
|
from utils.pdf import print_userlist, print_passwords
|
||||||
|
|
||||||
from django.db.models import Avg, Max, Min, Count
|
from django.db.models import Avg, Max, Min, Count
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
:license: GNU GPL, see LICENSE for more details.
|
:license: GNU GPL, see LICENSE for more details.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from django.forms import Form, CharField, TextInput, BooleanField, IntegerField
|
from django.forms import Form, CharField, TextInput, BooleanField, IntegerField, Textarea
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from system.api import config_get
|
from system.api import config_get
|
||||||
|
|
||||||
@ -18,7 +18,10 @@ class SystemConfigForm(Form):
|
|||||||
error_css_class = 'error'
|
error_css_class = 'error'
|
||||||
required_css_class = 'required'
|
required_css_class = 'required'
|
||||||
|
|
||||||
user_registration = BooleanField(label=_("User registration"), required=False)
|
#user_registration = BooleanField(label=_("User registration"), required=False)
|
||||||
|
system_url = CharField(widget=TextInput(), required=False, label=_("System URL"))
|
||||||
|
system_welcometext = CharField(widget=Textarea(), required=False, label=_("Welcome text (for password PDF)"))
|
||||||
|
|
||||||
|
|
||||||
class EventConfigForm(Form):
|
class EventConfigForm(Form):
|
||||||
error_css_class = 'error'
|
error_css_class = 'error'
|
||||||
@ -37,3 +40,5 @@ class ApplicationConfigForm(Form):
|
|||||||
application_min_supporters = IntegerField(widget=TextInput(attrs={'class':'small-input'}),label=_("Number of (minimum) required supporters for a application"),initial=4, min_value=0, max_value=8)
|
application_min_supporters = IntegerField(widget=TextInput(attrs={'class':'small-input'}),label=_("Number of (minimum) required supporters for a application"),initial=4, min_value=0, max_value=8)
|
||||||
application_preamble = CharField(widget=TextInput(), required=False, label=_("Application preamble"))
|
application_preamble = CharField(widget=TextInput(), required=False, label=_("Application preamble"))
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -17,7 +17,7 @@ DEFAULT_DATA = {
|
|||||||
'event_description': 'Presentation and voting system',
|
'event_description': 'Presentation and voting system',
|
||||||
'application_min_supporters': 4,
|
'application_min_supporters': 4,
|
||||||
'application_preamble': 'Die Versammlung möge beschließen,',
|
'application_preamble': 'Die Versammlung möge beschließen,',
|
||||||
'user_registration': True,
|
'sysem_url': 'http://openslides:8000',
|
||||||
}
|
}
|
||||||
|
|
||||||
class Config(models.Model):
|
class Config(models.Model):
|
||||||
|
@ -7,6 +7,6 @@
|
|||||||
<h4 class="sectiontitle">{%trans "Configuration" %}</h4>
|
<h4 class="sectiontitle">{%trans "Configuration" %}</h4>
|
||||||
<ul>
|
<ul>
|
||||||
<li class="{% if request.path == url_config_general %}selected{% endif %}"><a href="{% url config_general %}">{%trans "General" %}</a></li>
|
<li class="{% if request.path == url_config_general %}selected{% endif %}"><a href="{% url config_general %}">{%trans "General" %}</a></li>
|
||||||
{# <li class="{% if request.path == url_config_system %}selected{% endif %}"><a href="{% url config_system %}">{%trans "System" %}</a></li> #}
|
<li class="{% if request.path == url_config_system %}selected{% endif %}"><a href="{% url config_system %}">{%trans "System" %}</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -25,14 +25,16 @@ def get_system_config(request):
|
|||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
form = SystemConfigForm(request.POST)
|
form = SystemConfigForm(request.POST)
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
config_set('user_registration', form.cleaned_data['user_registration'])
|
config_set('system_url', form.cleaned_data['system_url'])
|
||||||
|
config_set('system_welcometext', form.cleaned_data['system_welcometext'])
|
||||||
messages.success(request, _('System settings successfully saved.'))
|
messages.success(request, _('System settings successfully saved.'))
|
||||||
else:
|
else:
|
||||||
messages.error(request, _('Please check the form for errors.'))
|
messages.error(request, _('Please check the form for errors.'))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
form = SystemConfigForm(initial={
|
form = SystemConfigForm(initial={
|
||||||
'user_registration': config_get('user_registration'),
|
'system_url': config_get('system_url'),
|
||||||
|
'system_welcometext': config_get('system_welcometext'),
|
||||||
})
|
})
|
||||||
return {
|
return {
|
||||||
'form': form,
|
'form': form,
|
||||||
|
@ -259,6 +259,47 @@ def print_userlist(request):
|
|||||||
doc.build(story, onFirstPage=firstPage, onLaterPages=laterPages)
|
doc.build(story, onFirstPage=firstPage, onLaterPages=laterPages)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
def print_passwords(request):
|
||||||
|
response = HttpResponse(mimetype='application/pdf')
|
||||||
|
filename = u'filename=%s.pdf;' % _("passwords")
|
||||||
|
response['Content-Disposition'] = filename.encode('utf-8')
|
||||||
|
doc = SimpleDocTemplate(response, pagesize=A4, topMargin=-6, bottomMargin=-6, leftMargin=0, rightMargin=0, showBoundary=False)
|
||||||
|
story = [Spacer(0,0*cm)]
|
||||||
|
|
||||||
|
data= []
|
||||||
|
system_url = config_get("system_url")
|
||||||
|
system_welcometext = config_get("system_welcometext")
|
||||||
|
for user in User.objects.all().order_by('last_name'):
|
||||||
|
try:
|
||||||
|
user.get_profile()
|
||||||
|
cell = []
|
||||||
|
cell.append(Spacer(0,0.8*cm))
|
||||||
|
cell.append(Paragraph(_("Your Password for OpenSlides"), stylesheet['Ballot_title']))
|
||||||
|
cell.append(Paragraph("%s %s %s" % (_("for"), user.first_name, user.last_name), stylesheet['Ballot_subtitle']))
|
||||||
|
cell.append(Spacer(0,0.5*cm))
|
||||||
|
cell.append(Paragraph("%s: %s" % (_("Username"), user.username), stylesheet['Ballot_option']))
|
||||||
|
cell.append(Paragraph("%s: %s" % (_("Password"), user.profile.firstpassword), stylesheet['Ballot_option']))
|
||||||
|
cell.append(Spacer(0,0.5*cm))
|
||||||
|
cell.append(Paragraph("%s: %s" % (_("URL"), system_url), stylesheet['Ballot_option']))
|
||||||
|
cell.append(Spacer(0,0.5*cm))
|
||||||
|
cell2 = []
|
||||||
|
cell2.append(Spacer(0,0.8*cm))
|
||||||
|
cell2.append(Paragraph(system_welcometext.replace('\r\n','<br/>'), stylesheet['Ballot_subtitle']))
|
||||||
|
|
||||||
|
data.append([cell,cell2])
|
||||||
|
except Profile.DoesNotExist:
|
||||||
|
pass
|
||||||
|
|
||||||
|
t=Table(data, 10.5*cm, 7.42*cm)
|
||||||
|
t.setStyle(TableStyle([ ('LINEBELOW', (0,0), (-1,0), 0.25, colors.grey),
|
||||||
|
('LINEBELOW', (0,1), (-1,1), 0.25, colors.grey),
|
||||||
|
('LINEBELOW', (0,1), (-1,-1), 0.25, colors.grey),
|
||||||
|
('VALIGN', (0,0), (-1,-1), 'TOP'),
|
||||||
|
]))
|
||||||
|
story.append(t)
|
||||||
|
doc.build(story)
|
||||||
|
return response
|
||||||
|
|
||||||
def get_application(application, story):
|
def get_application(application, story):
|
||||||
if application.number is None:
|
if application.number is None:
|
||||||
story.append(Paragraph(_("Application")+" #[-]", stylesheet['Heading1']))
|
story.append(Paragraph(_("Application")+" #[-]", stylesheet['Heading1']))
|
||||||
|
Loading…
Reference in New Issue
Block a user