From e8ac852e62ebcf0bb342cdb984c16c5f88803f2d Mon Sep 17 00:00:00 2001 From: Vladislav Yena Date: Thu, 20 Feb 2020 19:57:48 +0200 Subject: [PATCH 01/19] Fix the HTML rendering function in the Form popup --- aldryn_forms/contrib/email_notifications/cms_plugins.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/aldryn_forms/contrib/email_notifications/cms_plugins.py b/aldryn_forms/contrib/email_notifications/cms_plugins.py index 519308ca..045b6997 100644 --- a/aldryn_forms/contrib/email_notifications/cms_plugins.py +++ b/aldryn_forms/contrib/email_notifications/cms_plugins.py @@ -4,6 +4,8 @@ from django.contrib import admin from django.core.mail import get_connection +from django.utils.html import mark_safe + from django.utils.translation import ugettext_lazy as _ from cms.plugin_pool import plugin_pool @@ -109,9 +111,9 @@ def text_variables(self, obj): if fields_li: li_item = u'
  • {0}
  • '.format(category, fields_li) li_items.append(li_item) - unordered_list = u''.format(u''.join(li_items)) - help_text = u'

    {0}

    '.format(self.text_variables_help_text) - return unordered_list + u'\n' + help_text + unordered_list = ''.format(''.join(li_items)) + help_text = '

    {0}

    '.format(self.text_variables_help_text) + return mark_safe(unordered_list + '\n' + help_text) text_variables.allow_tags = True text_variables.short_description = _('available text variables') From 20fd9e6faee7461f17b216bff87d70e145b31eb2 Mon Sep 17 00:00:00 2001 From: Vladislav Yena Date: Thu, 20 Feb 2020 17:30:51 +0200 Subject: [PATCH 02/19] Remove unicode characters, add the correct HTML rendering for the Form Advanced plugin --- aldryn_forms/cms_plugins.py | 2 +- .../contrib/email_notifications/cms_plugins.py | 8 ++++---- .../contrib/email_notifications/models.py | 2 +- aldryn_forms/forms.py | 18 +++++++++--------- aldryn_forms/models.py | 10 +++++----- aldryn_forms/sizefield/models.py | 2 +- 6 files changed, 21 insertions(+), 21 deletions(-) diff --git a/aldryn_forms/cms_plugins.py b/aldryn_forms/cms_plugins.py index 01813da6..0552a8fa 100644 --- a/aldryn_forms/cms_plugins.py +++ b/aldryn_forms/cms_plugins.py @@ -285,7 +285,7 @@ class Field(FormElement): def serialize_value(self, instance, value, is_confirmation=False): if isinstance(value, query.QuerySet): - value = u', '.join(map(text_type, value)) + value = ', '.join(map(text_type, value)) elif value is None: value = '-' return text_type(value) diff --git a/aldryn_forms/contrib/email_notifications/cms_plugins.py b/aldryn_forms/contrib/email_notifications/cms_plugins.py index 045b6997..799a1e56 100644 --- a/aldryn_forms/contrib/email_notifications/cms_plugins.py +++ b/aldryn_forms/contrib/email_notifications/cms_plugins.py @@ -4,8 +4,8 @@ from django.contrib import admin from django.core.mail import get_connection -from django.utils.html import mark_safe +from django.utils.html import format_html from django.utils.translation import ugettext_lazy as _ from cms.plugin_pool import plugin_pool @@ -106,14 +106,14 @@ def text_variables(self, obj): for category, choices in choices_by_category: #
  • field_1
  • field_2
  • - fields_li = u''.join((u'
  • {0} | {1}
  • '.format(*var) for var in choices)) + fields_li = ''.join(('
  • {0} | {1}
  • '.format(*var) for var in choices)) if fields_li: - li_item = u'
  • {0}
  • '.format(category, fields_li) + li_item = '
  • {0}
  • '.format(category, fields_li) li_items.append(li_item) unordered_list = ''.format(''.join(li_items)) help_text = '

    {0}

    '.format(self.text_variables_help_text) - return mark_safe(unordered_list + '\n' + help_text) + return format_html(unordered_list + '\n' + help_text) text_variables.allow_tags = True text_variables.short_description = _('available text variables') diff --git a/aldryn_forms/contrib/email_notifications/models.py b/aldryn_forms/contrib/email_notifications/models.py index 39718f36..2fa4d1ca 100644 --- a/aldryn_forms/contrib/email_notifications/models.py +++ b/aldryn_forms/contrib/email_notifications/models.py @@ -118,7 +118,7 @@ class Meta: def __str__(self): to_name = self.get_recipient_name() to_email = self.get_recipient_email() - return u'{0} ({1})'.format(to_name, to_email) + return '{0} ({1})'.format(to_name, to_email) def clean(self): recipient_email = self.get_recipient_email() diff --git a/aldryn_forms/forms.py b/aldryn_forms/forms.py index 08e0413b..b2da6451 100644 --- a/aldryn_forms/forms.py +++ b/aldryn_forms/forms.py @@ -219,7 +219,7 @@ def clean(self): min_value = self.cleaned_data.get('min_value') max_value = self.cleaned_data.get('max_value') if min_value and max_value and min_value > max_value: - self.append_to_errors('min_value', _(u'Min value can not be greater than max value.')) + self.append_to_errors('min_value', _('Min value can not be greater than max value.')) return self.cleaned_data @@ -228,11 +228,11 @@ class TextFieldForm(MinMaxValueForm): def __init__(self, *args, **kwargs): super(TextFieldForm, self).__init__(*args, **kwargs) - self.fields['min_value'].label = _(u'Min length') - self.fields['min_value'].help_text = _(u'Required number of characters to type.') + self.fields['min_value'].label = _('Min length') + self.fields['min_value'].help_text = _('Required number of characters to type.') - self.fields['max_value'].label = _(u'Max length') - self.fields['max_value'].help_text = _(u'Maximum number of characters to type.') + self.fields['max_value'].label = _('Max length') + self.fields['max_value'].help_text = _('Maximum number of characters to type.') self.fields['max_value'].required = False class Meta: @@ -309,11 +309,11 @@ class MultipleSelectFieldForm(MinMaxValueForm): def __init__(self, *args, **kwargs): super(MultipleSelectFieldForm, self).__init__(*args, **kwargs) - self.fields['min_value'].label = _(u'Min choices') - self.fields['min_value'].help_text = _(u'Required amount of elements to chose.') + self.fields['min_value'].label = _('Min choices') + self.fields['min_value'].help_text = _('Required amount of elements to chose.') - self.fields['max_value'].label = _(u'Max choices') - self.fields['max_value'].help_text = _(u'Maximum amount of elements to chose.') + self.fields['max_value'].label = _('Max choices') + self.fields['max_value'].help_text = _('Maximum amount of elements to chose.') class Meta: # 'required' and 'required_message' depend on min_value field validator diff --git a/aldryn_forms/models.py b/aldryn_forms/models.py index 96dd1faf..15d1ab3d 100644 --- a/aldryn_forms/models.py +++ b/aldryn_forms/models.py @@ -78,10 +78,10 @@ def field_id(self): field_label = self.label.strip() if field_label: - field_as_string = u'{}-{}'.format(field_label, self.field_type) + field_as_string = '{}-{}'.format(field_label, self.field_type) else: field_as_string = self.name - field_id = u'{}:{}'.format(field_as_string, self.field_occurrence) + field_id = '{}:{}'.format(field_as_string, self.field_occurrence) return field_id @property @@ -261,10 +261,10 @@ def get_form_fields(self): if field_plugin.name: field_name = field_plugin.name else: - field_name = u'{0}_{1}'.format(field_type, field_type_occurrence) + field_name = '{0}_{1}'.format(field_type, field_type_occurrence) if field_label: - field_id = u'{0}_{1}'.format(field_type, field_label) + field_id = '{0}_{1}'.format(field_type, field_label) else: field_id = field_name @@ -591,7 +591,7 @@ def _form_data_hook(self, data, occurrences): if field_label: field_type = data['name'].rpartition('_')[0] - field_id = u'{}_{}'.format(field_type, field_label) + field_id = '{}_{}'.format(field_type, field_label) else: field_id = data['name'] diff --git a/aldryn_forms/sizefield/models.py b/aldryn_forms/sizefield/models.py index d30d6cb1..c33496d4 100644 --- a/aldryn_forms/sizefield/models.py +++ b/aldryn_forms/sizefield/models.py @@ -8,7 +8,7 @@ class FileSizeField(models.BigIntegerField): default_error_messages = { - 'invalid': _(u'Incorrect file size format.'), + 'invalid': _('Incorrect file size format.'), } def formfield(self, **kwargs): From 7153688307b2deeb4efd4d97dad88ed2381e3977 Mon Sep 17 00:00:00 2001 From: Vladimir Nosov Date: Wed, 27 May 2020 20:31:25 +0700 Subject: [PATCH 03/19] fixed flake8 error --- aldryn_forms/admin/views.py | 1 - 1 file changed, 1 deletion(-) diff --git a/aldryn_forms/admin/views.py b/aldryn_forms/admin/views.py index f8cad4c1..0600fd81 100644 --- a/aldryn_forms/admin/views.py +++ b/aldryn_forms/admin/views.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -from django import get_version from django.contrib import messages from django.http import HttpResponse from django.shortcuts import redirect From f769d3980349085c4af05a10300b1f93292634fa Mon Sep 17 00:00:00 2001 From: Sergey Gordeychuk Date: Wed, 17 Nov 2021 14:42:19 +0300 Subject: [PATCH 04/19] Implemented conditional logic based on fields values and different redirect + notification --- aldryn_forms/cms_plugins.py | 20 +++++++++-- .../email_notifications/cms_plugins.py | 31 +++++++++++++++- ...6_emailnotification_is_use_in_condition.py | 18 ++++++++++ .../contrib/email_notifications/models.py | 6 ++++ .../migrations/0014_auto_20211117_1131.py | 36 +++++++++++++++++++ .../migrations/0015_auto_20211117_1202.py | 18 ++++++++++ aldryn_forms/models.py | 19 ++++++++++ aldryn_forms/views.py | 7 +++- 8 files changed, 151 insertions(+), 4 deletions(-) create mode 100644 aldryn_forms/contrib/email_notifications/migrations/0006_emailnotification_is_use_in_condition.py create mode 100644 aldryn_forms/migrations/0014_auto_20211117_1131.py create mode 100644 aldryn_forms/migrations/0015_auto_20211117_1202.py diff --git a/aldryn_forms/cms_plugins.py b/aldryn_forms/cms_plugins.py index 60a3bfb4..15c2e085 100644 --- a/aldryn_forms/cms_plugins.py +++ b/aldryn_forms/cms_plugins.py @@ -70,6 +70,14 @@ class FormPlugin(FieldContainer): 'url', ) }), + (_('Condition Logic'), { + 'classes': ('collapse',), + 'fields': ( + 'redirect_page_negative_condition', + 'condition_field', + 'condition_value', + ) + }), (_('Advanced Settings'), { 'classes': ('collapse',), 'fields': ( @@ -92,7 +100,12 @@ def render(self, context, instance, placeholder): if request.POST.get('form_plugin_id') == str(instance.id) and form.is_valid(): context['post_success'] = True - context['form_success_url'] = self.get_success_url(instance) + condition_value = None + field_data = form.get_cleaned_data() + if instance.condition_field in field_data: + condition_value = field_data[instance.condition_field] + + context['form_success_url'] = self.get_success_url(instance, condition_value) context['form'] = form return context @@ -186,7 +199,10 @@ def get_form_kwargs(self, instance, request): kwargs['files'] = request.FILES return kwargs - def get_success_url(self, instance): + def get_success_url(self, instance, condition_value): + if instance.redirect_page_negative_condition and instance.condition_field: + if instance.condition_value == condition_value: + return instance.redirect_page_negative_condition.get_absolute_url() return instance.success_url def send_notifications(self, instance, form): diff --git a/aldryn_forms/contrib/email_notifications/cms_plugins.py b/aldryn_forms/contrib/email_notifications/cms_plugins.py index 713b85e2..df02e89b 100644 --- a/aldryn_forms/contrib/email_notifications/cms_plugins.py +++ b/aldryn_forms/contrib/email_notifications/cms_plugins.py @@ -46,6 +46,7 @@ class ExistingEmailNotificationInline(admin.StackedInline): (None, { 'fields': ( 'theme', + 'is_use_in_condition', ) }), (_('Recipients'), { @@ -144,6 +145,14 @@ class EmailNotificationForm(FormPlugin): ('redirect_page', 'url'), ) }), + (_('Condition Logic'), { + 'classes': ('collapse',), + 'fields': ( + 'redirect_page_negative_condition', + 'condition_field', + 'condition_value', + ) + }), (_('Advanced Settings'), { 'classes': ('collapse',), 'fields': ( @@ -179,10 +188,30 @@ def send_notifications(self, instance, form): notifications = instance.email_notifications.select_related('form') + check_use_condition = False + condition_result = False + + if instance.condition_field and instance.condition_value: + check_use_condition = True + + form_data = form.cleaned_data + if instance.condition_field in form_data: + condition_result = str(form_data[instance.condition_field]) == str(instance.condition_value) + emails = [] recipients = [] - for notification in notifications: + filtered_notifications = [] + + if check_use_condition: + for notification in notifications: + if notification.is_use_in_condition == condition_result: + filtered_notifications.append(notification) + else: + filtered_notifications = notifications + + for notification in filtered_notifications: + email = notification.prepare_email(form=form) to_email = email.to[0] diff --git a/aldryn_forms/contrib/email_notifications/migrations/0006_emailnotification_is_use_in_condition.py b/aldryn_forms/contrib/email_notifications/migrations/0006_emailnotification_is_use_in_condition.py new file mode 100644 index 00000000..a077571e --- /dev/null +++ b/aldryn_forms/contrib/email_notifications/migrations/0006_emailnotification_is_use_in_condition.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.4 on 2021-11-17 11:22 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('email_notifications', '0005_add_field_reply_to_email'), + ] + + operations = [ + migrations.AddField( + model_name='emailnotification', + name='is_use_in_condition', + field=models.BooleanField(default=False, help_text='This email notification will be used if condition field for the form is the same as condition value (See Form plugin configuration -> Condition Logic)', verbose_name='Use if condition succeeded'), + ), + ] diff --git a/aldryn_forms/contrib/email_notifications/models.py b/aldryn_forms/contrib/email_notifications/models.py index a88b55ec..32c63d4a 100644 --- a/aldryn_forms/contrib/email_notifications/models.py +++ b/aldryn_forms/contrib/email_notifications/models.py @@ -115,6 +115,12 @@ class Meta: related_name='email_notifications', on_delete=models.CASCADE, ) + is_use_in_condition = models.BooleanField( + default=False, + verbose_name=_('Use if condition succeeded'), + help_text=_('This email notification will be used if condition field for the form is the same ' + 'as condition value (See Form plugin configuration -> Condition Logic)') + ) def __str__(self): to_name = self.get_recipient_name() diff --git a/aldryn_forms/migrations/0014_auto_20211117_1131.py b/aldryn_forms/migrations/0014_auto_20211117_1131.py new file mode 100644 index 00000000..e30a7bad --- /dev/null +++ b/aldryn_forms/migrations/0014_auto_20211117_1131.py @@ -0,0 +1,36 @@ +# Generated by Django 3.1.4 on 2021-11-17 10:31 + +import cms.models.fields +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('cms', '0022_auto_20180620_1551'), + ('aldryn_forms', '0013_add_field_is_enable_autofill_from_url_params'), + ] + + operations = [ + migrations.AddField( + model_name='formplugin', + name='condition_field', + field=models.CharField(blank=True, help_text="This field is used to enable condition logic. If field matches the condition value then redirect and notification works as usual. If value of the field doesn't match the condition value field then custom redirect and notificaiton will be used.", max_length=512, null=True, verbose_name='Condition field'), + ), + migrations.AddField( + model_name='formplugin', + name='condition_value', + field=models.CharField(blank=True, max_length=512, null=True, verbose_name='Condition field value'), + ), + migrations.AddField( + model_name='formplugin', + name='redirect_page_negative_condition', + field=cms.models.fields.PageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='page_condition_false', to='cms.page', verbose_name='CMS Page (condition is false)'), + ), + migrations.AlterField( + model_name='formplugin', + name='action_backend', + field=models.CharField(choices=[('none', 'None'), ('email_only', 'Email only'), ('default', 'Default')], default='default', max_length=15, verbose_name='Action backend'), + ), + ] diff --git a/aldryn_forms/migrations/0015_auto_20211117_1202.py b/aldryn_forms/migrations/0015_auto_20211117_1202.py new file mode 100644 index 00000000..18efed94 --- /dev/null +++ b/aldryn_forms/migrations/0015_auto_20211117_1202.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.4 on 2021-11-17 11:02 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('aldryn_forms', '0014_auto_20211117_1131'), + ] + + operations = [ + migrations.AlterField( + model_name='formplugin', + name='condition_field', + field=models.CharField(blank=True, help_text="This field is used to enable condition logic. If field doesn't match the condition value then redirect and notification works as usual. If value of the field matches the condition value field then custom redirect and notification will be used.", max_length=512, null=True, verbose_name='Condition field'), + ), + ] diff --git a/aldryn_forms/models.py b/aldryn_forms/models.py index 0bbefd66..1d3a91e5 100644 --- a/aldryn_forms/models.py +++ b/aldryn_forms/models.py @@ -173,6 +173,25 @@ class BaseFormPlugin(CMSPlugin): on_delete=models.SET_NULL, ) + redirect_page_negative_condition = PageField( + verbose_name=_('CMS Page (condition is false)'), + related_name="page_condition_false", + blank=True, + null=True, + on_delete=models.SET_NULL, + ) + + condition_field = models.CharField( + verbose_name=_('Condition field'), + help_text=_('This field is used to enable condition logic. ' + 'If field doesn\'t match the condition value then redirect and notification works as usual. ' + 'If value of the field matches the condition value field then custom redirect ' + 'and notification will be used.'), + max_length=512, null=True, blank=True) + + condition_value = models.CharField( + verbose_name=_('Condition field value'), max_length=512, null=True, blank=True) + is_enable_autofill_from_url_params = models.BooleanField( default=False, verbose_name=_("Enable autofill from url parameters"), diff --git a/aldryn_forms/views.py b/aldryn_forms/views.py index 49d2f06e..e08017b4 100644 --- a/aldryn_forms/views.py +++ b/aldryn_forms/views.py @@ -44,7 +44,12 @@ def submit_form_view(request): form_plugin_instance = form_plugin.get_plugin_instance()[1] # saves the form if it's valid form = form_plugin_instance.process_form(form_plugin, request) - success_url = form_plugin_instance.get_success_url(instance=form_plugin) + condition_value = None + field_data = form.get_cleaned_data() + if form_plugin.condition_field in field_data: + condition_value = field_data[form_plugin.condition_field] + + success_url = form_plugin_instance.get_success_url(instance=form_plugin, condition_value=condition_value) if form.is_valid() and success_url: return HttpResponseRedirect(success_url) From 8f0c973215076e231950cdd74ddba81f5d1e9ecc Mon Sep 17 00:00:00 2001 From: Sergey Gordeychuk Date: Thu, 18 Nov 2021 17:15:44 +0300 Subject: [PATCH 05/19] Fix for timeout --- aldryn_forms/templates/aldryn_forms/form.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aldryn_forms/templates/aldryn_forms/form.html b/aldryn_forms/templates/aldryn_forms/form.html index 8c93111f..dec433e5 100644 --- a/aldryn_forms/templates/aldryn_forms/form.html +++ b/aldryn_forms/templates/aldryn_forms/form.html @@ -40,7 +40,7 @@ {% endaddtoblock %} {% endif %} From feff7e29a0fde4b0af7c4cdc487922a0762675a1 Mon Sep 17 00:00:00 2001 From: Sergey Gordeychuk Date: Thu, 18 Nov 2021 18:25:41 +0300 Subject: [PATCH 06/19] Another fix for timeout --- aldryn_forms/templates/aldryn_forms/form.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aldryn_forms/templates/aldryn_forms/form.html b/aldryn_forms/templates/aldryn_forms/form.html index dec433e5..4cc9c0ce 100644 --- a/aldryn_forms/templates/aldryn_forms/form.html +++ b/aldryn_forms/templates/aldryn_forms/form.html @@ -40,7 +40,7 @@ {% endaddtoblock %} {% endif %} From 6258618c8a21871c0efe6057d5d371b7be10ab49 Mon Sep 17 00:00:00 2001 From: Vladislav Yena Date: Thu, 20 Feb 2020 17:30:51 +0200 Subject: [PATCH 07/19] Remove unicode characters, add the correct HTML rendering for the Form Advanced plugin --- aldryn_forms/cms_plugins.py | 2 +- .../contrib/email_notifications/models.py | 2 +- aldryn_forms/forms.py | 18 +++++++++--------- aldryn_forms/models.py | 10 +++++----- aldryn_forms/sizefield/models.py | 2 +- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/aldryn_forms/cms_plugins.py b/aldryn_forms/cms_plugins.py index 60a3bfb4..ab87832e 100644 --- a/aldryn_forms/cms_plugins.py +++ b/aldryn_forms/cms_plugins.py @@ -286,7 +286,7 @@ class Field(FormElement): def serialize_value(self, instance, value, is_confirmation=False): if isinstance(value, query.QuerySet): - value = u', '.join(map(str, value)) + value = ', '.join(map(str, value)) elif value is None: value = '-' return str(value) diff --git a/aldryn_forms/contrib/email_notifications/models.py b/aldryn_forms/contrib/email_notifications/models.py index a88b55ec..9d134f24 100644 --- a/aldryn_forms/contrib/email_notifications/models.py +++ b/aldryn_forms/contrib/email_notifications/models.py @@ -119,7 +119,7 @@ class Meta: def __str__(self): to_name = self.get_recipient_name() to_email = self.get_recipient_email() - return u'{0} ({1})'.format(to_name, to_email) + return '{0} ({1})'.format(to_name, to_email) def clean(self): recipient_email = self.get_recipient_email() diff --git a/aldryn_forms/forms.py b/aldryn_forms/forms.py index c0141b88..ce867107 100644 --- a/aldryn_forms/forms.py +++ b/aldryn_forms/forms.py @@ -218,7 +218,7 @@ def clean(self): min_value = self.cleaned_data.get('min_value') max_value = self.cleaned_data.get('max_value') if min_value and max_value and min_value > max_value: - self.append_to_errors('min_value', _(u'Min value can not be greater than max value.')) + self.append_to_errors('min_value', _('Min value can not be greater than max value.')) return self.cleaned_data @@ -227,11 +227,11 @@ class TextFieldForm(MinMaxValueForm): def __init__(self, *args, **kwargs): super(TextFieldForm, self).__init__(*args, **kwargs) - self.fields['min_value'].label = _(u'Min length') - self.fields['min_value'].help_text = _(u'Required number of characters to type.') + self.fields['min_value'].label = _('Min length') + self.fields['min_value'].help_text = _('Required number of characters to type.') - self.fields['max_value'].label = _(u'Max length') - self.fields['max_value'].help_text = _(u'Maximum number of characters to type.') + self.fields['max_value'].label = _('Max length') + self.fields['max_value'].help_text = _('Maximum number of characters to type.') self.fields['max_value'].required = False class Meta: @@ -308,11 +308,11 @@ class MultipleSelectFieldForm(MinMaxValueForm): def __init__(self, *args, **kwargs): super(MultipleSelectFieldForm, self).__init__(*args, **kwargs) - self.fields['min_value'].label = _(u'Min choices') - self.fields['min_value'].help_text = _(u'Required amount of elements to chose.') + self.fields['min_value'].label = _('Min choices') + self.fields['min_value'].help_text = _('Required amount of elements to chose.') - self.fields['max_value'].label = _(u'Max choices') - self.fields['max_value'].help_text = _(u'Maximum amount of elements to chose.') + self.fields['max_value'].label = _('Max choices') + self.fields['max_value'].help_text = _('Maximum amount of elements to chose.') class Meta: # 'required' and 'required_message' depend on min_value field validator diff --git a/aldryn_forms/models.py b/aldryn_forms/models.py index 0bbefd66..eceea320 100644 --- a/aldryn_forms/models.py +++ b/aldryn_forms/models.py @@ -75,10 +75,10 @@ def field_id(self): field_label = self.label.strip() if field_label: - field_as_string = u'{}-{}'.format(field_label, self.field_type) + field_as_string = '{}-{}'.format(field_label, self.field_type) else: field_as_string = self.name - field_id = u'{}:{}'.format(field_as_string, self.field_occurrence) + field_id = '{}:{}'.format(field_as_string, self.field_occurrence) return field_id @property @@ -267,10 +267,10 @@ def get_form_fields(self) -> List[FormField]: if field_plugin.name: field_name = field_plugin.name else: - field_name = u'{0}_{1}'.format(field_type, field_type_occurrence) + field_name = '{0}_{1}'.format(field_type, field_type_occurrence) if field_label: - field_id = u'{0}_{1}'.format(field_type, field_label) + field_id = '{0}_{1}'.format(field_type, field_label) else: field_id = field_name @@ -591,7 +591,7 @@ def _form_data_hook(self, data, occurrences): if field_label: field_type = data['name'].rpartition('_')[0] - field_id = u'{}_{}'.format(field_type, field_label) + field_id = '{}_{}'.format(field_type, field_label) else: field_id = data['name'] diff --git a/aldryn_forms/sizefield/models.py b/aldryn_forms/sizefield/models.py index d30d6cb1..c33496d4 100644 --- a/aldryn_forms/sizefield/models.py +++ b/aldryn_forms/sizefield/models.py @@ -8,7 +8,7 @@ class FileSizeField(models.BigIntegerField): default_error_messages = { - 'invalid': _(u'Incorrect file size format.'), + 'invalid': _('Incorrect file size format.'), } def formfield(self, **kwargs): From 02c04c92c4d9c0aa7de5cdd0998c0c5d1f2da4c7 Mon Sep 17 00:00:00 2001 From: Sergey Gordeychuk Date: Sun, 20 Aug 2023 19:04:47 +0300 Subject: [PATCH 08/19] Django 4 support --- aldryn_forms/action_backends.py | 2 +- aldryn_forms/admin/base.py | 6 +- aldryn_forms/admin/forms.py | 6 +- aldryn_forms/admin/views.py | 4 +- aldryn_forms/cms_apps.py | 2 +- aldryn_forms/cms_plugins.py | 6 +- .../email_notifications/cms_plugins.py | 2 +- .../0006_alter_emailnotification_id.py | 20 +++ .../contrib/email_notifications/models.py | 6 +- .../email_notifications/notification.py | 4 +- aldryn_forms/forms.py | 10 +- ...emailfieldplugin_cmsplugin_ptr_and_more.py | 125 ++++++++++++++++++ aldryn_forms/models.py | 2 +- aldryn_forms/signals.py | 5 +- aldryn_forms/sizefield/models.py | 2 +- aldryn_forms/sizefield/utils.py | 2 +- aldryn_forms/urls.py | 4 +- aldryn_forms/validators.py | 2 +- tests/test_utils.py | 2 +- 19 files changed, 179 insertions(+), 33 deletions(-) create mode 100644 aldryn_forms/contrib/email_notifications/migrations/0006_alter_emailnotification_id.py create mode 100644 aldryn_forms/migrations/0014_alter_emailfieldplugin_cmsplugin_ptr_and_more.py diff --git a/aldryn_forms/action_backends.py b/aldryn_forms/action_backends.py index f368e978..fa8ab30a 100644 --- a/aldryn_forms/action_backends.py +++ b/aldryn_forms/action_backends.py @@ -1,6 +1,6 @@ import logging -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from .action_backends_base import BaseAction diff --git a/aldryn_forms/admin/base.py b/aldryn_forms/admin/base.py index 3d856f1b..bed0507b 100644 --- a/aldryn_forms/admin/base.py +++ b/aldryn_forms/admin/base.py @@ -3,7 +3,7 @@ from django.contrib import admin from django.template.loader import render_to_string from django.urls import reverse -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ str_dunder_method = '__str__' @@ -51,11 +51,11 @@ def get_recipients_for_display(self, obj): get_recipients_for_display.short_description = _('people notified') def get_urls(self): - from django.conf.urls import url + from django.urls import re_path def pattern(regex, fn, name): args = [regex, self.admin_site.admin_view(fn)] - return url(*args, name=self.get_admin_url(name)) + return re_path(*args, name=self.get_admin_url(name)) url_patterns = [ pattern(r'export/$', self.get_form_export_view(), 'export'), diff --git a/aldryn_forms/admin/forms.py b/aldryn_forms/admin/forms.py index 00791517..493576c6 100644 --- a/aldryn_forms/admin/forms.py +++ b/aldryn_forms/admin/forms.py @@ -5,8 +5,8 @@ from django.contrib.admin.widgets import AdminDateWidget from django.utils import timezone from django.utils.text import slugify -from django.utils.translation import ugettext -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext +from django.utils.translation import gettext_lazy as _ from ..models import FormSubmission from .exporter import Exporter @@ -129,6 +129,6 @@ def clean(self): fields = self.get_fields() if not fields: - message = ugettext('Please select at least one field to export.') + message = gettext('Please select at least one field to export.') raise forms.ValidationError(message) return self.cleaned_data diff --git a/aldryn_forms/admin/views.py b/aldryn_forms/admin/views.py index 16884c63..4bfa5af0 100644 --- a/aldryn_forms/admin/views.py +++ b/aldryn_forms/admin/views.py @@ -2,7 +2,7 @@ from django.contrib import messages from django.http import HttpResponse from django.shortcuts import redirect -from django.utils.translation import get_language_from_request, ugettext +from django.utils.translation import get_language_from_request, gettext from ..compat import SessionWizardView from .exporter import Exporter @@ -65,7 +65,7 @@ def render_next_step(self, form, **kwargs): if next_step == self.steps.last and not form.get_queryset().exists(): self.storage.reset() - self.admin.message_user(self.request, ugettext("No records found"), level=messages.WARNING) + self.admin.message_user(self.request, gettext("No records found"), level=messages.WARNING) export_url = 'admin:{}'.format(self.admin.get_admin_url('export')) return redirect(export_url) return super(FormExportWizardView, self).render_next_step(form, **kwargs) diff --git a/aldryn_forms/cms_apps.py b/aldryn_forms/cms_apps.py index 57d61441..ebcd4dec 100644 --- a/aldryn_forms/cms_apps.py +++ b/aldryn_forms/cms_apps.py @@ -1,4 +1,4 @@ -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.app_base import CMSApp from cms.apphook_pool import apphook_pool diff --git a/aldryn_forms/cms_plugins.py b/aldryn_forms/cms_plugins.py index ab87832e..4d71ce41 100644 --- a/aldryn_forms/cms_plugins.py +++ b/aldryn_forms/cms_plugins.py @@ -9,8 +9,8 @@ from django.core.validators import MinLengthValidator from django.db.models import query from django.template.loader import select_template -from django.utils.translation import ugettext -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext +from django.utils.translation import gettext_lazy as _ from emailit.api import send_mail from filer.models import filemodels from filer.models import imagemodels @@ -713,7 +713,7 @@ class BooleanField(Field): ] def serialize_value(self, instance, value, is_confirmation=False): - return ugettext('Yes') if value else ugettext('No') + return gettext('Yes') if value else gettext('No') class SelectOptionInline(TabularInline): diff --git a/aldryn_forms/contrib/email_notifications/cms_plugins.py b/aldryn_forms/contrib/email_notifications/cms_plugins.py index d7b5c476..31e05667 100644 --- a/aldryn_forms/contrib/email_notifications/cms_plugins.py +++ b/aldryn_forms/contrib/email_notifications/cms_plugins.py @@ -7,7 +7,7 @@ from django.template.defaultfilters import safe from django.utils.html import format_html -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.plugin_pool import plugin_pool diff --git a/aldryn_forms/contrib/email_notifications/migrations/0006_alter_emailnotification_id.py b/aldryn_forms/contrib/email_notifications/migrations/0006_alter_emailnotification_id.py new file mode 100644 index 00000000..16ffafd4 --- /dev/null +++ b/aldryn_forms/contrib/email_notifications/migrations/0006_alter_emailnotification_id.py @@ -0,0 +1,20 @@ +# Generated by Django 4.2.4 on 2023-08-20 15:56 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("email_notifications", "0005_add_field_reply_to_email"), + ] + + operations = [ + migrations.AlterField( + model_name="emailnotification", + name="id", + field=models.BigAutoField( + auto_created=True, primary_key=True, serialize=False, verbose_name="ID" + ), + ), + ] diff --git a/aldryn_forms/contrib/email_notifications/models.py b/aldryn_forms/contrib/email_notifications/models.py index 9d134f24..a65af07b 100644 --- a/aldryn_forms/contrib/email_notifications/models.py +++ b/aldryn_forms/contrib/email_notifications/models.py @@ -4,8 +4,8 @@ from django.conf import settings from django.core.exceptions import ValidationError from django.db import models -from django.utils.translation import ugettext -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext +from django.utils.translation import gettext_lazy as _ from djangocms_text_ckeditor.fields import HTMLField from emailit.api import construct_mail @@ -125,7 +125,7 @@ def clean(self): recipient_email = self.get_recipient_email() if self.pk and not recipient_email: - message = ugettext('Please provide a recipient.') + message = gettext('Please provide a recipient.') raise ValidationError(message) def get_recipient_name(self): diff --git a/aldryn_forms/contrib/email_notifications/notification.py b/aldryn_forms/contrib/email_notifications/notification.py index 178a6423..f892d9a7 100644 --- a/aldryn_forms/contrib/email_notifications/notification.py +++ b/aldryn_forms/contrib/email_notifications/notification.py @@ -1,4 +1,4 @@ -from django.utils.translation import ugettext +from django.utils.translation import gettext from .helpers import get_email_template_name @@ -50,7 +50,7 @@ def get_custom_context(self, form): def get_context_keys_as_choices(self): choices = [ ( - ugettext('Fields'), + gettext('Fields'), list(self.form_plugin.get_form_fields_as_choices()) ), ] diff --git a/aldryn_forms/forms.py b/aldryn_forms/forms.py index ce867107..e74b0f97 100644 --- a/aldryn_forms/forms.py +++ b/aldryn_forms/forms.py @@ -2,8 +2,8 @@ from django.conf import settings from django.forms.forms import NON_FIELD_ERRORS from django.forms.utils import ErrorDict -from django.utils.translation import ugettext -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext +from django.utils.translation import gettext_lazy as _ from PIL import Image @@ -25,7 +25,7 @@ def clean(self, *args, **kwargs): if self.max_size is not None and data.size > self.max_size: raise forms.ValidationError( - ugettext('File size must be under %(max_size)s. Current file size is %(actual_size)s.') % { + gettext('File size must be under %(max_size)s. Current file size is %(actual_size)s.') % { 'max_size': filesizeformat(self.max_size), 'actual_size': filesizeformat(data.size), }) @@ -59,7 +59,7 @@ def clean(self, *args, **kwargs): if self.max_width and width > self.max_width: raise forms.ValidationError( - ugettext( + gettext( 'Image width must be under %(max_size)s pixels. ' 'Current width is %(actual_size)s pixels.' ) % { @@ -69,7 +69,7 @@ def clean(self, *args, **kwargs): if self.max_height and height > self.max_height: raise forms.ValidationError( - ugettext( + gettext( 'Image height must be under %(max_size)s pixels. ' 'Current height is %(actual_size)s pixels.' ) % { diff --git a/aldryn_forms/migrations/0014_alter_emailfieldplugin_cmsplugin_ptr_and_more.py b/aldryn_forms/migrations/0014_alter_emailfieldplugin_cmsplugin_ptr_and_more.py new file mode 100644 index 00000000..8d5bad6a --- /dev/null +++ b/aldryn_forms/migrations/0014_alter_emailfieldplugin_cmsplugin_ptr_and_more.py @@ -0,0 +1,125 @@ +# Generated by Django 4.2.4 on 2023-08-20 15:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("cms", "0022_auto_20180620_1551"), + ("aldryn_forms", "0013_add_field_is_enable_autofill_from_url_params"), + ] + + operations = [ + migrations.AlterField( + model_name="emailfieldplugin", + name="cmsplugin_ptr", + field=models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + migrations.AlterField( + model_name="fieldplugin", + name="cmsplugin_ptr", + field=models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + migrations.AlterField( + model_name="fieldsetplugin", + name="cmsplugin_ptr", + field=models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + migrations.AlterField( + model_name="fileuploadfieldplugin", + name="cmsplugin_ptr", + field=models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + migrations.AlterField( + model_name="formbuttonplugin", + name="cmsplugin_ptr", + field=models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + migrations.AlterField( + model_name="formplugin", + name="cmsplugin_ptr", + field=models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + migrations.AlterField( + model_name="formsubmission", + name="id", + field=models.BigAutoField( + auto_created=True, primary_key=True, serialize=False, verbose_name="ID" + ), + ), + migrations.AlterField( + model_name="imageuploadfieldplugin", + name="cmsplugin_ptr", + field=models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + migrations.AlterField( + model_name="option", + name="id", + field=models.BigAutoField( + auto_created=True, primary_key=True, serialize=False, verbose_name="ID" + ), + ), + migrations.AlterField( + model_name="textareafieldplugin", + name="cmsplugin_ptr", + field=models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + ] diff --git a/aldryn_forms/models.py b/aldryn_forms/models.py index eceea320..c04247e5 100644 --- a/aldryn_forms/models.py +++ b/aldryn_forms/models.py @@ -13,7 +13,7 @@ from django.db import models from django.db.models.functions import Coalesce from django.utils.functional import cached_property -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from djangocms_attributes_field.fields import AttributesField from filer.fields.folder import FilerFolderField diff --git a/aldryn_forms/signals.py b/aldryn_forms/signals.py index 653c9bfa..20059010 100644 --- a/aldryn_forms/signals.py +++ b/aldryn_forms/signals.py @@ -1,5 +1,6 @@ from django.dispatch import Signal -form_pre_save = Signal(providing_args=['instance', 'form', 'request']) -form_post_save = Signal(providing_args=['instance', 'form', 'request']) +# Provides arguments: instance, form, request +form_pre_save = Signal() +form_post_save = Signal() diff --git a/aldryn_forms/sizefield/models.py b/aldryn_forms/sizefield/models.py index c33496d4..a261e879 100644 --- a/aldryn_forms/sizefield/models.py +++ b/aldryn_forms/sizefield/models.py @@ -1,6 +1,6 @@ from django.core import exceptions from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from .utils import parse_size from .widgets import FileSizeWidget diff --git a/aldryn_forms/sizefield/utils.py b/aldryn_forms/sizefield/utils.py index 3aed242b..a3ec3ca5 100644 --- a/aldryn_forms/sizefield/utils.py +++ b/aldryn_forms/sizefield/utils.py @@ -4,7 +4,7 @@ from django.conf import settings from django.utils import formats -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext as _ if sys.version_info >= (3, 0): diff --git a/aldryn_forms/urls.py b/aldryn_forms/urls.py index b0b9d4dd..cdeea558 100644 --- a/aldryn_forms/urls.py +++ b/aldryn_forms/urls.py @@ -1,8 +1,8 @@ -from django.conf.urls import url +from django.urls import re_path from .views import submit_form_view urlpatterns = [ - url(r'^$', submit_form_view, name='aldryn_forms_submit_form'), + re_path(r'^$', submit_form_view, name='aldryn_forms_submit_form'), ] diff --git a/aldryn_forms/validators.py b/aldryn_forms/validators.py index a7f974bb..1eb3971d 100644 --- a/aldryn_forms/validators.py +++ b/aldryn_forms/validators.py @@ -4,7 +4,7 @@ from django.core.validators import ( MaxLengthValidator, MinLengthValidator, validate_email, ) -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ def is_valid_recipient(recipient): diff --git a/tests/test_utils.py b/tests/test_utils.py index 54036972..b37a7f5d 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -1,6 +1,6 @@ from django.core.exceptions import ImproperlyConfigured from django.test import override_settings -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.test_utils.testcases import CMSTestCase From 0a4fd3305c68a2fb328ccd7e65596a6ddac3769d Mon Sep 17 00:00:00 2001 From: Sergey Gordeychuk Date: Sun, 20 Aug 2023 21:03:43 +0300 Subject: [PATCH 09/19] Bump version 6.2.2 --- aldryn_forms/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aldryn_forms/__init__.py b/aldryn_forms/__init__.py index b133e0c3..ac1df1f7 100644 --- a/aldryn_forms/__init__.py +++ b/aldryn_forms/__init__.py @@ -1 +1 @@ -__version__ = '6.2.1' +__version__ = '6.2.2' From a1e35f7b622c0a1fbfd54c393326f6bb3324c684 Mon Sep 17 00:00:00 2001 From: Hassan Ahmed Date: Tue, 7 Nov 2023 17:00:53 +0500 Subject: [PATCH 10/19] Feature/filefield allowed extensions and attach files to email (#1) * add option to limit allowed extensions of file fields * convert serialization to utility function * add option to define files that should be attached to email * recognize extensions without the starting period * update help text --- aldryn_forms/cms_plugins.py | 15 ++++- .../email_notifications/cms_plugins.py | 61 ++++++++++++++----- .../migrations/0007_auto_20231105_0323.py | 23 +++++++ .../contrib/email_notifications/models.py | 41 ++++++++++++- .../email_notifications/notification.py | 9 +++ .../migrations/0015_auto_20231105_0313.py | 33 ++++++++++ aldryn_forms/models.py | 22 +++++++ aldryn_forms/utils.py | 22 +++++++ aldryn_forms/validators.py | 25 ++++++++ 9 files changed, 231 insertions(+), 20 deletions(-) create mode 100644 aldryn_forms/contrib/email_notifications/migrations/0007_auto_20231105_0323.py create mode 100644 aldryn_forms/migrations/0015_auto_20231105_0313.py diff --git a/aldryn_forms/cms_plugins.py b/aldryn_forms/cms_plugins.py index 4d71ce41..208540c4 100644 --- a/aldryn_forms/cms_plugins.py +++ b/aldryn_forms/cms_plugins.py @@ -38,9 +38,12 @@ from .signals import form_pre_save from .sizefield.utils import filesizeformat from .utils import get_action_backends -from .validators import MaxChoicesValidator -from .validators import MinChoicesValidator -from .validators import is_valid_recipient +from .validators import ( + MaxChoicesValidator, + MinChoicesValidator, + is_valid_recipient, + generate_file_extension_validator, +) class FormElement(CMSPluginBase): @@ -591,6 +594,7 @@ class FileField(Field): fieldset_advanced_fields = [ 'help_text', 'max_size', + 'allowed_extensions', 'required_message', 'custom_classes', ] @@ -604,6 +608,11 @@ def get_form_field_kwargs(self, instance): kwargs['max_size'] = instance.max_size return kwargs + def get_form_field_validators(self, instance: models.FileFieldPluginBase): + validators = super().get_form_field_validators(instance) + validators.append(generate_file_extension_validator(instance.allowed_extensions)) + return validators + def serialize_value(self, instance, value, is_confirmation=False): if value: return value.absolute_uri diff --git a/aldryn_forms/contrib/email_notifications/cms_plugins.py b/aldryn_forms/contrib/email_notifications/cms_plugins.py index 31e05667..a2173f47 100644 --- a/aldryn_forms/contrib/email_notifications/cms_plugins.py +++ b/aldryn_forms/contrib/email_notifications/cms_plugins.py @@ -45,23 +45,31 @@ class ExistingEmailNotificationInline(admin.StackedInline): model = EmailNotification fieldsets = ( - (None, { - 'fields': ( - 'theme', - ) - }), - (_('Recipients'), { - 'fields': ( - 'text_variables', - 'to_user', - ('to_name', 'to_email'), - ('from_name', 'from_email'), - 'reply_to_email', - ) - }), + (None, {"fields": ("theme",)}), + ( + _("Recipients"), + { + "fields": ( + "text_variables", + "to_user", + ("to_name", "to_email"), + ("from_name", "from_email"), + "reply_to_email", + ) + }, + ), + ( + _("Attaching files to email"), + { + "fields": ( + "file_variables", + "files_to_attach_to_email", + ) + }, + ), ) - readonly_fields = ['text_variables'] + readonly_fields = ['text_variables', 'file_variables'] text_variables_help_text = _( 'the variables can be used within the email body, email sender,' @@ -122,6 +130,29 @@ def text_variables(self, obj: EmailNotification) -> str: text_variables.allow_tags = True text_variables.short_description = _('available text variables') + def file_variables(self, obj: EmailNotification) -> str: + if obj.pk is None: + return '' + + # list of tuples - [('category', [('value', 'label')])] + choices_by_category = obj.form.get_notification_text_context_file_keys_as_choices() + + var_items: List[str] = [] + for category, choices in choices_by_category: + for choice_tuple in choices: + field_value = choice_tuple[0] + var_items += '
  • ' + field_value + '
  • ' + + vars_html_list = f'

    {"".join(var_items)}

    ' + help_text = ( + f'

    ' + f'{_("these are the valid file fields that can be attached to the email")}' + f'

    ' + ) + return safe(vars_html_list + u'\n' + help_text) + file_variables.allow_tags = True + file_variables.short_description = _('available file variables') + class Media: css = { 'all': ['email_notifications/admin/email-notifications.css'] diff --git a/aldryn_forms/contrib/email_notifications/migrations/0007_auto_20231105_0323.py b/aldryn_forms/contrib/email_notifications/migrations/0007_auto_20231105_0323.py new file mode 100644 index 00000000..13511188 --- /dev/null +++ b/aldryn_forms/contrib/email_notifications/migrations/0007_auto_20231105_0323.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2 on 2023-11-04 22:23 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('email_notifications', '0006_alter_emailnotification_id'), + ] + + operations = [ + migrations.AddField( + model_name='emailnotification', + name='files_to_attach_to_email', + field=models.CharField(blank=True, default='', help_text='Comma-separated list of file fields that should be attached directly to the email.', max_length=255, verbose_name='Files to attach to the email'), + ), + migrations.AlterField( + model_name='emailnotification', + name='id', + field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + ] diff --git a/aldryn_forms/contrib/email_notifications/models.py b/aldryn_forms/contrib/email_notifications/models.py index a65af07b..58da3053 100644 --- a/aldryn_forms/contrib/email_notifications/models.py +++ b/aldryn_forms/contrib/email_notifications/models.py @@ -1,14 +1,18 @@ +import mimetypes from email.utils import formataddr from functools import partial from django.conf import settings from django.core.exceptions import ValidationError +from django.core.files.storage import default_storage +from django.core.mail import EmailMultiAlternatives from django.db import models from django.utils.translation import gettext from django.utils.translation import gettext_lazy as _ from djangocms_text_ckeditor.fields import HTMLField from emailit.api import construct_mail +from filer.models import File from aldryn_forms.helpers import get_user_name from aldryn_forms.models import FormPlugin @@ -16,7 +20,7 @@ from .helpers import ( get_email_template_name, get_theme_template_name, render_text, ) - +from aldryn_forms.utils import serialize_delimiter_separated_values_string EMAIL_THEMES = getattr( settings, @@ -49,6 +53,11 @@ def get_notification_text_context_keys_as_choices(self): choices = notification_conf.get_context_keys_as_choices() return choices + def get_notification_text_context_file_keys_as_choices(self): + notification_conf = self.get_notification_conf() + choices = notification_conf.get_context_file_keys_as_choices() + return choices + class EmailNotification(models.Model): @@ -110,6 +119,13 @@ class Meta: blank=True, help_text=_('used when rendering the email in html.') ) + files_to_attach_to_email = models.CharField( + max_length=255, + verbose_name=_('Files to attach to the email'), + blank=True, + default="", + help_text=_('Comma-separated list of file fields that should be attached directly to the email.') + ) form = models.ForeignKey( to=EmailNotificationFormPlugin, related_name='email_notifications', @@ -216,9 +232,30 @@ def get_email_kwargs(self, form): return kwargs + def attach_files(self, email: EmailMultiAlternatives, form): + """Attach files if any are needed""" + files_to_attach = serialize_delimiter_separated_values_string( + self.files_to_attach_to_email, delimiter=",", strip=True, lower=True + ) + if not files_to_attach: + return + for field_name in form.fields: + if field_name in files_to_attach: + file_field: File = form.cleaned_data.get(field_name) + if not file_field: + continue + with default_storage.open(file_field.path, "rb") as file: + email.attach( + filename=file_field.original_filename, + content=file.read(), + mimetype=mimetypes.guess_type(file_field.original_filename)[0], + ) + def prepare_email(self, form): email_kwargs = self.get_email_kwargs(form) - return construct_mail(**email_kwargs) + email: EmailMultiAlternatives = construct_mail(**email_kwargs) + self.attach_files(email, form) + return email def render_body_text(self, context): return render_text(self.body_text, context) diff --git a/aldryn_forms/contrib/email_notifications/notification.py b/aldryn_forms/contrib/email_notifications/notification.py index f892d9a7..dbb5424f 100644 --- a/aldryn_forms/contrib/email_notifications/notification.py +++ b/aldryn_forms/contrib/email_notifications/notification.py @@ -59,6 +59,15 @@ def get_context_keys_as_choices(self): choices += list(self.custom_context_choices) return choices + def get_context_file_keys_as_choices(self): + choices = [ + ( + gettext('Fields'), + list(self.form_plugin.get_form_file_fields_as_choices()) + ), + ] + return choices + class DefaultNotificationConf(BaseNotificationConf): html_email_format_enabled = True diff --git a/aldryn_forms/migrations/0015_auto_20231105_0313.py b/aldryn_forms/migrations/0015_auto_20231105_0313.py new file mode 100644 index 00000000..217c8734 --- /dev/null +++ b/aldryn_forms/migrations/0015_auto_20231105_0313.py @@ -0,0 +1,33 @@ +# Generated by Django 3.2 on 2023-11-04 22:13 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('aldryn_forms', '0014_alter_emailfieldplugin_cmsplugin_ptr_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='fileuploadfieldplugin', + name='allowed_extensions', + field=models.CharField(blank=True, default='', help_text='Comma-separated list of file extensions allowed for this file field.', max_length=255, verbose_name='Allowed extensions'), + ), + migrations.AddField( + model_name='imageuploadfieldplugin', + name='allowed_extensions', + field=models.CharField(blank=True, default='', help_text='Comma-separated list of file extensions allowed for this file field.', max_length=255, verbose_name='Allowed extensions'), + ), + migrations.AlterField( + model_name='formsubmission', + name='id', + field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='option', + name='id', + field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + ] diff --git a/aldryn_forms/models.py b/aldryn_forms/models.py index c04247e5..3ae2f3d1 100644 --- a/aldryn_forms/models.py +++ b/aldryn_forms/models.py @@ -305,6 +305,12 @@ def get_form_fields_as_choices(self): for field in fields: yield (field.name, field.label) + def get_form_file_fields_as_choices(self): + fields = self.get_form_fields() + for field in fields: + if field.plugin_instance.IS_FILE_FIELD: + yield field.name, field.label + def get_form_elements(self): from .utils import get_nested_plugins @@ -416,6 +422,8 @@ class FieldPluginBase(CMSPlugin): on_delete=models.CASCADE, ) + IS_FILE_FIELD = False + class Meta: abstract = True @@ -492,6 +500,20 @@ class FileFieldPluginBase(FieldPluginBase): help_text=_('The maximum file size of the upload, in bytes. You can ' 'use common size suffixes (kB, MB, GB, ...).') ) + allowed_extensions = models.CharField( + max_length=255, + verbose_name=_("Allowed extensions"), + blank=True, + default="", + help_text=( + _( + "Comma-separated list of file extensions allowed for this file field. " + "Leave it empty to allow any extension." + ), + ), + ) + + IS_FILE_FIELD = True class Meta: abstract = True diff --git a/aldryn_forms/utils.py b/aldryn_forms/utils.py index b28bd8f5..21d9ed8e 100644 --- a/aldryn_forms/utils.py +++ b/aldryn_forms/utils.py @@ -1,5 +1,7 @@ from __future__ import unicode_literals +import typing + from django.conf import settings from django.core.exceptions import ImproperlyConfigured from django.forms.forms import NON_FIELD_ERRORS @@ -123,3 +125,23 @@ def add_form_error(form, message, field=NON_FIELD_ERRORS): form._errors[field].append(message) except KeyError: form._errors[field] = form.error_class([message]) + + +def serialize_delimiter_separated_values_string( + csl: str = "", delimiter=",", strip=True, lower=True +) -> typing.List[str]: + """Convert a comma-separated string of values to list of strings""" + if not csl: + return [] + + values_list = [item for item in csl.split(delimiter)] + + if strip: + values_list = [item.strip() for item in values_list] + if lower: + values_list = [item.lower() for item in values_list] + + values_list = [item for item in values_list if item] + return values_list + + diff --git a/aldryn_forms/validators.py b/aldryn_forms/validators.py index 1eb3971d..03217c0e 100644 --- a/aldryn_forms/validators.py +++ b/aldryn_forms/validators.py @@ -1,3 +1,4 @@ +import os from email.utils import parseaddr from django.core.exceptions import ValidationError @@ -6,6 +7,30 @@ ) from django.utils.translation import gettext_lazy as _ +from aldryn_forms.utils import serialize_delimiter_separated_values_string + + +def generate_file_extension_validator(allowed_extensions_str: str = ""): + allowed_extensions = serialize_delimiter_separated_values_string( + allowed_extensions_str, delimiter=",", strip=True, lower=True + ) + allowed_extensions = [ + extension if extension.startswith(".") else f".{extension}" + for extension in allowed_extensions + ] + + if not allowed_extensions: + return lambda value: None + + def validator(value): + extension = os.path.splitext(value.name)[1] # [0] returns path+filename + if not extension.lower() in allowed_extensions: + raise ValidationError( + _(f"File extension '{extension}' is not allowed for this field."), + code="invalid_extension", + ) + + return validator def is_valid_recipient(recipient): """ From 2be38fc9bf9594cc34ced1a452d34753449fb748 Mon Sep 17 00:00:00 2001 From: Hassan Ahmed Date: Wed, 8 Nov 2023 20:44:45 +0500 Subject: [PATCH 11/19] avoid lower-casing files_to_attach field since uppercase names are allowed (#3) --- aldryn_forms/contrib/email_notifications/models.py | 2 +- aldryn_forms/validators.py | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/aldryn_forms/contrib/email_notifications/models.py b/aldryn_forms/contrib/email_notifications/models.py index 58da3053..6188cc26 100644 --- a/aldryn_forms/contrib/email_notifications/models.py +++ b/aldryn_forms/contrib/email_notifications/models.py @@ -235,7 +235,7 @@ def get_email_kwargs(self, form): def attach_files(self, email: EmailMultiAlternatives, form): """Attach files if any are needed""" files_to_attach = serialize_delimiter_separated_values_string( - self.files_to_attach_to_email, delimiter=",", strip=True, lower=True + self.files_to_attach_to_email, delimiter=",", strip=True, lower=False ) if not files_to_attach: return diff --git a/aldryn_forms/validators.py b/aldryn_forms/validators.py index 03217c0e..6534c427 100644 --- a/aldryn_forms/validators.py +++ b/aldryn_forms/validators.py @@ -14,14 +14,15 @@ def generate_file_extension_validator(allowed_extensions_str: str = ""): allowed_extensions = serialize_delimiter_separated_values_string( allowed_extensions_str, delimiter=",", strip=True, lower=True ) + + if not allowed_extensions: + return lambda value: None + allowed_extensions = [ extension if extension.startswith(".") else f".{extension}" for extension in allowed_extensions ] - if not allowed_extensions: - return lambda value: None - def validator(value): extension = os.path.splitext(value.name)[1] # [0] returns path+filename if not extension.lower() in allowed_extensions: From dca077f64d90ef914e1c463548097c21fa8157b0 Mon Sep 17 00:00:00 2001 From: Hassan Ahmed Date: Wed, 8 Nov 2023 22:06:13 +0500 Subject: [PATCH 12/19] add option to store file to filer (default=True) (#4) * add option to store file to filer (default=True) * remove misleading typehint --- aldryn_forms/cms_plugins.py | 57 +++++++++++-------- .../contrib/email_notifications/models.py | 36 ++++++++---- .../migrations/0016_auto_20231108_2151.py | 33 +++++++++++ aldryn_forms/models.py | 13 ++++- 4 files changed, 101 insertions(+), 38 deletions(-) create mode 100644 aldryn_forms/migrations/0016_auto_20231108_2151.py diff --git a/aldryn_forms/cms_plugins.py b/aldryn_forms/cms_plugins.py index 208540c4..f01cca23 100644 --- a/aldryn_forms/cms_plugins.py +++ b/aldryn_forms/cms_plugins.py @@ -1,6 +1,8 @@ from typing import Dict from PIL import Image +from django.core.files.uploadedfile import InMemoryUploadedFile + from aldryn_forms.models import FormPlugin from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool @@ -32,7 +34,6 @@ from .forms import TextAreaFieldForm from .forms import TextFieldForm from .helpers import get_user_name -from .models import FileUploadFieldPlugin from .models import SerializedFormField from .signals import form_post_save from .signals import form_pre_save @@ -592,6 +593,7 @@ class FileField(Field): 'upload_to', ] + Field.fieldset_general_fields fieldset_advanced_fields = [ + 'store_to_filer', 'help_text', 'max_size', 'allowed_extensions', @@ -614,49 +616,53 @@ def get_form_field_validators(self, instance: models.FileFieldPluginBase): return validators def serialize_value(self, instance, value, is_confirmation=False): - if value: + if value and hasattr(value, "absolute_uri"): return value.absolute_uri else: return '-' - def form_pre_save(self, instance, form, **kwargs): + def form_pre_save(self, instance: models.FileUploadFieldPlugin, form, **kwargs): """Save the uploaded file to django-filer The type of model (file or image) is automatically chosen by trying to open the uploaded file. """ + request = kwargs['request'] field_name = form.form_plugin.get_form_field_name(field=instance) - uploaded_file = form.cleaned_data[field_name] + uploaded_file: InMemoryUploadedFile = form.cleaned_data[field_name] if uploaded_file is None: return - try: - with Image.open(uploaded_file) as img: - img.verify() - except: # noqa - model = filemodels.File - else: - model = imagemodels.Image - - filer_file = model( - folder=instance.upload_to, - file=uploaded_file, - name=uploaded_file.name, - original_filename=uploaded_file.name, - is_public=True, - ) - filer_file.save() + if instance.store_to_filer: + try: + with Image.open(uploaded_file) as img: + img.verify() + except: # noqa + model = filemodels.File + else: + model = imagemodels.Image + + filer_file = model( + folder=instance.upload_to, + file=uploaded_file, + name=uploaded_file.name, + original_filename=uploaded_file.name, + is_public=True, + ) + filer_file.save() + + # NOTE: This is a hack to make the full URL available later when we + # need to serialize this field. We avoid to serialize it here directly + # as we could still need access to the original filer File instance. + filer_file.absolute_uri = request.build_absolute_uri(filer_file.url) - # NOTE: This is a hack to make the full URL available later when we - # need to serialize this field. We avoid to serialize it here directly - # as we could still need access to the original filer File instance. - filer_file.absolute_uri = request.build_absolute_uri(filer_file.url) + form.cleaned_data[field_name] = filer_file - form.cleaned_data[field_name] = filer_file + form.cleaned_data[f"{field_name}__in_memory"] = uploaded_file class ImageField(FileField): @@ -670,6 +676,7 @@ class ImageField(FileField): 'upload_to', ] + Field.fieldset_general_fields fieldset_advanced_fields = [ + 'store_to_filer', 'help_text', 'max_size', ('max_width', 'max_height',), diff --git a/aldryn_forms/contrib/email_notifications/models.py b/aldryn_forms/contrib/email_notifications/models.py index 6188cc26..8af4321a 100644 --- a/aldryn_forms/contrib/email_notifications/models.py +++ b/aldryn_forms/contrib/email_notifications/models.py @@ -1,10 +1,11 @@ import mimetypes +import typing from email.utils import formataddr from functools import partial from django.conf import settings from django.core.exceptions import ValidationError -from django.core.files.storage import default_storage +from django.core.files.uploadedfile import InMemoryUploadedFile from django.core.mail import EmailMultiAlternatives from django.db import models from django.utils.translation import gettext @@ -12,10 +13,9 @@ from djangocms_text_ckeditor.fields import HTMLField from emailit.api import construct_mail -from filer.models import File from aldryn_forms.helpers import get_user_name -from aldryn_forms.models import FormPlugin +from aldryn_forms.models import FormPlugin, FileFieldPluginBase from .helpers import ( get_email_template_name, get_theme_template_name, render_text, @@ -237,19 +237,31 @@ def attach_files(self, email: EmailMultiAlternatives, form): files_to_attach = serialize_delimiter_separated_values_string( self.files_to_attach_to_email, delimiter=",", strip=True, lower=False ) + if not files_to_attach: return - for field_name in form.fields: + + # noinspection PyProtectedMember + fields = [ + field + for field in form.base_fields.values() + if hasattr(field, "_model_instance") and field._model_instance.IS_FILE_FIELD + ] + + for field in fields: + # noinspection PyProtectedMember + field_name = field._model_instance.name + if field_name in files_to_attach: - file_field: File = form.cleaned_data.get(field_name) - if not file_field: + field_file_handler_name = f"{field_name}__in_memory" + file: InMemoryUploadedFile = form.cleaned_data.get(field_file_handler_name) + if not file: continue - with default_storage.open(file_field.path, "rb") as file: - email.attach( - filename=file_field.original_filename, - content=file.read(), - mimetype=mimetypes.guess_type(file_field.original_filename)[0], - ) + email.attach( + filename=file.name, + content=file.read(), + mimetype=mimetypes.guess_type(file.name)[0], + ) def prepare_email(self, form): email_kwargs = self.get_email_kwargs(form) diff --git a/aldryn_forms/migrations/0016_auto_20231108_2151.py b/aldryn_forms/migrations/0016_auto_20231108_2151.py new file mode 100644 index 00000000..fd8abab3 --- /dev/null +++ b/aldryn_forms/migrations/0016_auto_20231108_2151.py @@ -0,0 +1,33 @@ +# Generated by Django 3.2 on 2023-11-08 16:51 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('aldryn_forms', '0015_auto_20231105_0313'), + ] + + operations = [ + migrations.AddField( + model_name='fileuploadfieldplugin', + name='store_to_filer', + field=models.BooleanField(default=True, help_text='Whether to store this file to filer. If this is unchecked and this file is not attached to any email notification, the file will be lost forever and using it as a template variable in any email template will return empty result.', verbose_name='Store this file to filer'), + ), + migrations.AddField( + model_name='imageuploadfieldplugin', + name='store_to_filer', + field=models.BooleanField(default=True, help_text='Whether to store this file to filer. If this is unchecked and this file is not attached to any email notification, the file will be lost forever and using it as a template variable in any email template will return empty result.', verbose_name='Store this file to filer'), + ), + migrations.AlterField( + model_name='fileuploadfieldplugin', + name='allowed_extensions', + field=models.CharField(blank=True, default='', help_text='Comma-separated list of file extensions allowed for this file field. Leave it empty to allow any extension.', max_length=255, verbose_name='Allowed extensions'), + ), + migrations.AlterField( + model_name='imageuploadfieldplugin', + name='allowed_extensions', + field=models.CharField(blank=True, default='', help_text='Comma-separated list of file extensions allowed for this file field. Leave it empty to allow any extension.', max_length=255, verbose_name='Allowed extensions'), + ), + ] diff --git a/aldryn_forms/models.py b/aldryn_forms/models.py index 3ae2f3d1..e031c2d3 100644 --- a/aldryn_forms/models.py +++ b/aldryn_forms/models.py @@ -509,7 +509,18 @@ class FileFieldPluginBase(FieldPluginBase): _( "Comma-separated list of file extensions allowed for this file field. " "Leave it empty to allow any extension." - ), + ) + ), + ) + store_to_filer = models.BooleanField( + verbose_name=_("Store this file to filer"), + default=True, + help_text=( + _( + "Whether to store this file to filer. If this is unchecked and this file is not attached to any email " + "notification, the file will be lost forever and using it as a template variable in any email template " + "will return empty result." + ) ), ) From 2bc6494fbae8532ec348c96d951e760d2365c316 Mon Sep 17 00:00:00 2001 From: Hassan Ahmed Date: Thu, 9 Nov 2023 18:27:17 +0500 Subject: [PATCH 13/19] create a copy of in-memory file to avoid unpredictability (#5) * create a copy of in-memory file to avoid unpredictability * format fix --- aldryn_forms/cms_plugins.py | 17 +++++++++++------ .../contrib/email_notifications/models.py | 15 +++++++++++---- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/aldryn_forms/cms_plugins.py b/aldryn_forms/cms_plugins.py index f01cca23..dafc6d08 100644 --- a/aldryn_forms/cms_plugins.py +++ b/aldryn_forms/cms_plugins.py @@ -1,3 +1,4 @@ +import io from typing import Dict from PIL import Image @@ -547,9 +548,9 @@ class EmailField(BaseTextField): form_field_widget = forms.EmailInput form_field_widget_input_type = 'email' fieldset_advanced_fields = [ - 'email_send_notification', - 'email_subject', - 'email_body', + "email_send_notification", + "email_subject", + "email_body", ] + Field.fieldset_advanced_fields email_template_base = 'aldryn_forms/emails/user/notification' @@ -590,7 +591,7 @@ class FileField(Field): 'validators', ] fieldset_general_fields = [ - 'upload_to', + "upload_to", ] + Field.fieldset_general_fields fieldset_advanced_fields = [ 'store_to_filer', @@ -633,6 +634,8 @@ def form_pre_save(self, instance: models.FileUploadFieldPlugin, form, **kwargs): field_name = form.form_plugin.get_form_field_name(field=instance) uploaded_file: InMemoryUploadedFile = form.cleaned_data[field_name] + copy = io.BytesIO(uploaded_file.read()) + uploaded_file.seek(0) if uploaded_file is None: return @@ -662,7 +665,8 @@ def form_pre_save(self, instance: models.FileUploadFieldPlugin, form, **kwargs): form.cleaned_data[field_name] = filer_file - form.cleaned_data[f"{field_name}__in_memory"] = uploaded_file + uploaded_file.close() + form.cleaned_data[f"{field_name}__in_memory"] = {"name": uploaded_file.name, "file": copy} class ImageField(FileField): @@ -673,7 +677,7 @@ class ImageField(FileField): form_field = RestrictedImageField form_field_widget = RestrictedImageField.widget fieldset_general_fields = [ - 'upload_to', + "upload_to", ] + Field.fieldset_general_fields fieldset_advanced_fields = [ 'store_to_filer', @@ -875,6 +879,7 @@ def serialize_field(self, *args, **kwargs): # None means don't serialize me return None + plugin_pool.register_plugin(CaptchaField) diff --git a/aldryn_forms/contrib/email_notifications/models.py b/aldryn_forms/contrib/email_notifications/models.py index 8af4321a..07e27e25 100644 --- a/aldryn_forms/contrib/email_notifications/models.py +++ b/aldryn_forms/contrib/email_notifications/models.py @@ -1,3 +1,4 @@ +import io import mimetypes import typing from email.utils import formataddr @@ -253,14 +254,20 @@ def attach_files(self, email: EmailMultiAlternatives, form): field_name = field._model_instance.name if field_name in files_to_attach: - field_file_handler_name = f"{field_name}__in_memory" - file: InMemoryUploadedFile = form.cleaned_data.get(field_file_handler_name) + field_file_key = f"{field_name}__in_memory" + filed_file_data: typing.Dict[str, typing.Union[str, io.BytesIO]] = form.cleaned_data.get(field_file_key) + file = filed_file_data["file"] + file_name = filed_file_data["name"] if not file: continue + + # Redundant precaution + file.seek(0) + email.attach( - filename=file.name, + filename=file_name, content=file.read(), - mimetype=mimetypes.guess_type(file.name)[0], + mimetype=mimetypes.guess_type(file_name)[0], ) def prepare_email(self, form): From d42a1d06ec1d350f9dbdacf45fde0b83f6eb486d Mon Sep 17 00:00:00 2001 From: Hassan Ahmed Date: Tue, 14 Nov 2023 14:33:50 +0500 Subject: [PATCH 14/19] Feature/filefield custom error on allowed extensions validation (#6) * Added a custom error message field on extension validation * cleanup * only make the static string gettext lazy * Added accept attribute in frontend for file upload plugin * minor optimization --- aldryn_forms/cms_plugins.py | 9 +++- aldryn_forms/forms.py | 23 ++++++++- .../migrations/0017_auto_20231113_1824.py | 48 +++++++++++++++++++ aldryn_forms/models.py | 9 +++- aldryn_forms/validators.py | 6 ++- 5 files changed, 89 insertions(+), 6 deletions(-) create mode 100644 aldryn_forms/migrations/0017_auto_20231113_1824.py diff --git a/aldryn_forms/cms_plugins.py b/aldryn_forms/cms_plugins.py index dafc6d08..fb31a45d 100644 --- a/aldryn_forms/cms_plugins.py +++ b/aldryn_forms/cms_plugins.py @@ -598,6 +598,7 @@ class FileField(Field): 'help_text', 'max_size', 'allowed_extensions', + 'invalid_extension_message', 'required_message', 'custom_classes', ] @@ -609,11 +610,17 @@ def get_form_field_kwargs(self, instance): kwargs['help_text'] = kwargs['help_text'].replace( 'MAXSIZE', filesizeformat(instance.max_size)) kwargs['max_size'] = instance.max_size + if instance.allowed_extensions: + kwargs['allowed_extensions'] = instance.allowed_extensions return kwargs def get_form_field_validators(self, instance: models.FileFieldPluginBase): validators = super().get_form_field_validators(instance) - validators.append(generate_file_extension_validator(instance.allowed_extensions)) + validators.append( + generate_file_extension_validator( + instance.allowed_extensions, instance.invalid_extension_message + ) + ) return validators def serialize_value(self, instance, value, is_confirmation=False): diff --git a/aldryn_forms/forms.py b/aldryn_forms/forms.py index e74b0f97..0a30230c 100644 --- a/aldryn_forms/forms.py +++ b/aldryn_forms/forms.py @@ -9,7 +9,8 @@ from .models import FormPlugin, FormSubmission from .sizefield.utils import filesizeformat -from .utils import add_form_error, get_user_model +from .utils import add_form_error, get_user_model, serialize_delimiter_separated_values_string +import mimetypes class FileSizeCheckMixin(object): @@ -33,7 +34,25 @@ def clean(self, *args, **kwargs): class RestrictedFileField(FileSizeCheckMixin, forms.FileField): - pass + def __init__(self, *args, **kwargs): + self.allowed_extensions = kwargs.pop('allowed_extensions', None) + super(RestrictedFileField, self).__init__(*args, **kwargs) + + def widget_attrs(self, widget): + attrs = super().widget_attrs(widget) + if self.allowed_extensions: + allowed_extensions_list = [ + extension if extension.startswith(".") else f".{extension}" + for extension in serialize_delimiter_separated_values_string( + self.allowed_extensions, delimiter=",", strip=True, lower=True + ) + ] + accepted_types = [ + mimetypes.guess_type(f"dummy{extension}")[0] or extension + for extension in allowed_extensions_list + ] + attrs.setdefault('accept', ",".join(accepted_types)) + return attrs class RestrictedImageField(FileSizeCheckMixin, forms.ImageField): diff --git a/aldryn_forms/migrations/0017_auto_20231113_1824.py b/aldryn_forms/migrations/0017_auto_20231113_1824.py new file mode 100644 index 00000000..4c042c50 --- /dev/null +++ b/aldryn_forms/migrations/0017_auto_20231113_1824.py @@ -0,0 +1,48 @@ +# Generated by Django 3.2 on 2023-11-13 13:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('aldryn_forms', '0016_auto_20231108_2151'), + ] + + operations = [ + migrations.AddField( + model_name='fileuploadfieldplugin', + name='invalid_extension_message', + field=models.TextField(blank=True, help_text='Error message displayed if extensions are constrained and the uploaded file fails that validation.Default: "File extension [extension] is not allowed for this field."', null=True, verbose_name='Invalid extension error message'), + ), + migrations.AddField( + model_name='imageuploadfieldplugin', + name='invalid_extension_message', + field=models.TextField(blank=True, help_text='Error message displayed if extensions are constrained and the uploaded file fails that validation.Default: "File extension [extension] is not allowed for this field."', null=True, verbose_name='Invalid extension error message'), + ), + migrations.AlterField( + model_name='emailfieldplugin', + name='required_message', + field=models.TextField(blank=True, help_text='Error message displayed if the required field is left empty. Default: "This field is required".', null=True, verbose_name='Field required error message'), + ), + migrations.AlterField( + model_name='fieldplugin', + name='required_message', + field=models.TextField(blank=True, help_text='Error message displayed if the required field is left empty. Default: "This field is required".', null=True, verbose_name='Field required error message'), + ), + migrations.AlterField( + model_name='fileuploadfieldplugin', + name='required_message', + field=models.TextField(blank=True, help_text='Error message displayed if the required field is left empty. Default: "This field is required".', null=True, verbose_name='Field required error message'), + ), + migrations.AlterField( + model_name='imageuploadfieldplugin', + name='required_message', + field=models.TextField(blank=True, help_text='Error message displayed if the required field is left empty. Default: "This field is required".', null=True, verbose_name='Field required error message'), + ), + migrations.AlterField( + model_name='textareafieldplugin', + name='required_message', + field=models.TextField(blank=True, help_text='Error message displayed if the required field is left empty. Default: "This field is required".', null=True, verbose_name='Field required error message'), + ), + ] diff --git a/aldryn_forms/models.py b/aldryn_forms/models.py index e031c2d3..784bcd46 100644 --- a/aldryn_forms/models.py +++ b/aldryn_forms/models.py @@ -370,7 +370,7 @@ class FieldPluginBase(CMSPlugin): label = models.CharField(_('Label'), max_length=255, blank=True) required = models.BooleanField(_('Field is required'), default=False) required_message = models.TextField( - verbose_name=_('Error message'), + verbose_name=_('Field required error message'), blank=True, null=True, help_text=_('Error message displayed if the required field is left ' @@ -512,6 +512,13 @@ class FileFieldPluginBase(FieldPluginBase): ) ), ) + invalid_extension_message = models.TextField( + verbose_name=_('Invalid extension error message'), + blank=True, + null=True, + help_text=_('Error message displayed if extensions are constrained and the uploaded file fails that validation.' + 'Default: "File extension [extension] is not allowed for this field."') + ) store_to_filer = models.BooleanField( verbose_name=_("Store this file to filer"), default=True, diff --git a/aldryn_forms/validators.py b/aldryn_forms/validators.py index 6534c427..17dfcdaa 100644 --- a/aldryn_forms/validators.py +++ b/aldryn_forms/validators.py @@ -10,7 +10,7 @@ from aldryn_forms.utils import serialize_delimiter_separated_values_string -def generate_file_extension_validator(allowed_extensions_str: str = ""): +def generate_file_extension_validator(allowed_extensions_str: str = "", error_message: str = ""): allowed_extensions = serialize_delimiter_separated_values_string( allowed_extensions_str, delimiter=",", strip=True, lower=True ) @@ -27,7 +27,9 @@ def validator(value): extension = os.path.splitext(value.name)[1] # [0] returns path+filename if not extension.lower() in allowed_extensions: raise ValidationError( - _(f"File extension '{extension}' is not allowed for this field."), + error_message + if error_message + else _(f"File extension '{extension}' is not allowed for this field."), code="invalid_extension", ) From ce63854dbbdec9718659e01ad1e294e42ed6fa37 Mon Sep 17 00:00:00 2001 From: Sergey Gordeychuk Date: Mon, 25 Mar 2024 09:35:03 +0100 Subject: [PATCH 15/19] Added merge migration and some translations --- .../migrations/0008_merge_20240308_1756.py | 14 + aldryn_forms/locale/de/LC_MESSAGES/django.mo | Bin 12173 -> 11179 bytes aldryn_forms/locale/de/LC_MESSAGES/django.po | 583 +++++++++----- aldryn_forms/locale/en/LC_MESSAGES/django.mo | Bin 11106 -> 10199 bytes aldryn_forms/locale/en/LC_MESSAGES/django.po | 677 ++++++++++------- aldryn_forms/locale/fr/LC_MESSAGES/django.mo | Bin 12299 -> 11382 bytes aldryn_forms/locale/fr/LC_MESSAGES/django.po | 708 +++++++++++------- aldryn_forms/locale/it/LC_MESSAGES/django.mo | Bin 417 -> 376 bytes aldryn_forms/locale/it/LC_MESSAGES/django.po | 632 +++++++++------- ...o_20211117_1202_0017_auto_20231113_1824.py | 14 + 10 files changed, 1657 insertions(+), 971 deletions(-) create mode 100644 aldryn_forms/contrib/email_notifications/migrations/0008_merge_20240308_1756.py create mode 100644 aldryn_forms/migrations/0018_merge_0015_auto_20211117_1202_0017_auto_20231113_1824.py diff --git a/aldryn_forms/contrib/email_notifications/migrations/0008_merge_20240308_1756.py b/aldryn_forms/contrib/email_notifications/migrations/0008_merge_20240308_1756.py new file mode 100644 index 00000000..c8e9f7cd --- /dev/null +++ b/aldryn_forms/contrib/email_notifications/migrations/0008_merge_20240308_1756.py @@ -0,0 +1,14 @@ +# Generated by Django 3.2.17 on 2024-03-08 16:56 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('email_notifications', '0006_emailnotification_is_use_in_condition'), + ('email_notifications', '0007_auto_20231105_0323'), + ] + + operations = [ + ] diff --git a/aldryn_forms/locale/de/LC_MESSAGES/django.mo b/aldryn_forms/locale/de/LC_MESSAGES/django.mo index 08c20d718474f289adf996e66fb91f439fea3477..dc75806455b08b0a3358ac0d631be4fdf31a40cd 100644 GIT binary patch delta 2843 zcmYk;eN5F=9LMp4^86&>6+|FFKpw)>5PTLyGaQPcEis8Y$(9Va_#|yX-CvgErgc)-irs5XN!)!c)y7V=Sz%gh1 z0R}Pt1nY1T1N7Jo?oQt<#b{iE^RXOt12;BeH*UsBJdV+Pcot7$AnuN|uWQB<#{C$J z7mx>;Yp4lNqrU$;25Z@W(JA8%zj^i-Dv%_YM%2Vwa3S^}f96SEqHqLt<2Nt_-^O}; z548{%U#i6n)b}jZgO8!^JA|Q1`wMh*gHxD>qo|pFg)aOBm5~`t#|S>u4RVocm;%)G zrI>@&sFgp8D%A*TL1Q=v-$8C=CeYH1KBc4DT)}*t!sQsrGW5j)EW}FG1coslCr}T( zig%!9xdd{Mw@ejkf^Db???YWbh$P*dnos_9!8mVFR&x!j@j9yZ>sUV7G$oGps2lFZ zJ=lvYaSC%WoaO5Kg;<1@sEm40C3qKi;5jVDs2K7;mrhNLJ%M^GW88-2IF3m;i`oN8 zO>Sbqq+M=W5GU0r19<{>D&iHHR^J!!b z<_7X-W_i&{W0{pEkb#+)gPLFsYQ+uCxEb}F4rko!XbsR&2_8e${0yo#KVYw)F*i}A zaW69FUhG2E{vz^``3bk-45nfcA8LhdsOx%A3mQaC;0f%)VPx-FW|odNM3|QEVi$Y#SM&8QKe}@E$A>R1IHbo zbv_?K-}xV>qZOY;9gmN2HM+>3R$PG{*nrFM5|RuvgR3wu&6u^g1J~maY66!~wf`A) zDt<%lu~}!lJe~Y!@|4}IucI>Z2Wp~Wq~URNVIIDO`S>O3lmutk zB~3!zzX$zs1e@>#?naYI{^wu=-_ir!s9oNTJMm*w?H5uPZOS|h!tJOU)?xr2#9$mi zrTm!Vi>L*Rp)z?6wHGFx@%I)TrRFAv;6JDv1ZCT`Pe46z8EPV{P!Fy~rT72_;t;Mw z59<3@9H&tCoknHmSJeIWd#ycZEuf5klos zYa};U}Nrd6v~w9 zuFQoIYC8KmJ!<_#v9D*p>;siSrQ?UvJVN-IR`(#G-KhF%la&x_h$NzqXeY`DooyXI z)psuOUt3Qnhv0|Q^g3@=<2I)+wmW@o_B~EtSW9?Oy>+}c5o-4lsYDGiK&X}5m_bY? zwh-FMYWc)QVuc2`G@W&|y+k6>L}-&X6KZU+8s86#cBWb(p>wLEmqpy#iWumm)Dilz zd5B0S9wxeoC_*iR@Lmi%?e86oiU{yV#q{}mzF4%ulOO+TczIKIdtXy~>)Pa&R?m0w fyF5h+Io{yJrvtpBi_-%Aian7jao!VIg8}~n5z+kQ delta 3820 zcmcK6e{5Cd9mnxUXbYCMh*Sn;z(WOW?GFoxScD2vWI{K@cICI_^xo5Z?|ScPJ?Gw* z7V$a-#vfahbR;8-(Pcq5HkWK&G%jWvL71D_BF$nlvKbc=%$Uq%#%&>*?fp6DK-B$6 zwq#HEp4W5EJ?A{XzR#iG+4hy5;+r>?95a-I#HWeXCB}^7?x`Fob<>RbI@V(ap20Sp zz?*Oe7iZutxB*-7RxF}kaS|(WJU%~#Q#k(xZs#^LL8X)n4cx^$%~HG(*WgUNANgmJ z9D2~l^*Dh~;H)ZRUczUw4EIito=f3rWy7%<~-7z>o2Id-r(+4HD@oyOuM zDz8$Zljb$l6#f>qMi=l7{3EttEv@RlPF#ygR0mGrTzn1H;M>@M)%11=u0>v9Qm77& zqB?x2n)%lYj&gzJGcTeZIE$o(xr|+S1(gF^=)RU>PizkL!ULGYBdC%71$(h-mNB>E zL%1BDMLmBW@4-v6n14-i6HjSP9>A@*9oz9FPR4gp9eNKpqY|J4I&c9VN9Dvz95izi zs1ct>P4(sY`kzrtc?C6-6~#Hx$mYd1pw_N6K3|VY&aLtFov0BfH%_`-*%hDvLq8>(Vwp_XJmDhD>8mTCw$;URqLI%8hP z5q`Un+a5oyn~P973{=ESf6Kb0^h*EM$d0rXv{qA|86Sx^Fto#kvW5!vOgg2 zFn>ZdTv;1+uo`v$LL@JZkLu``;`1j_Gjsy=Mg1XaDbAtR{`aT>zb9$md`M*vPN8*n zj&ZREM^IDw8`PRz#IQrC7gjEcMluiUIj=_&-*lpqFN1pD!>A>E62o1FnyIr`)KvbO z${KtNwMO&VlN#AdEWwW0t*GC-Q8O}t8u<`v*A($iJcsIFIj#0%4c>-_kyS7+;7WXB z3G=^-O4Tj=$AkBw8aRx~fu~VZb`q6*FURMXv5xbt2-;OD6KPGaF7!nt@IvSMNB;^=Dsms3&lDC5=eCyNqhdwlU;%o7^P7YOn! zY*ZsrV;-SBufq2z{PrhM9adrW!v688-NIXugBeb3@-?egpns&(m zp`_B5+eBO~`WUHfAx6U*--uWxw`M_wCc|yH0V{RFt}{ysl@w7G*4S3~d15D_saJU{ zB1~3Qnbq*GA+6~S;$dPfktVb}S{ju{h|h(!=ubUW+lZpFRAo;@_-$5INvO=fhe#4i zHc}(Z=0U6_RECL>ux3mFA0)`xux#e2U8AC$P-&02der!%ztglI_Y!;?!qUNUKe3F^ zmb;nIw?btG5fJ(&Si&cE6H4G5p)x%pJhpPw?jk3zl?=7XT8ulWJWAX^TrG2{Y$F_^ zm(UjKBlZ#6zbc>Aq1=9=bfq1y-;N9vY~O%ygFDbd)0!2YsPAR$4j`$`tii{nWe@5s(W$o?Elsq)0K8L4LO^30tV@NHYjnu zeDiovy{}}`kmF~Z-mDwggyZqEEd&f_IFnD?-Vr1Oga<$43T9CxLiUY9lG zhkyax%ODF`$G1))7%lXjemTpVn#1RZT|deFgcZVzQW, 2016\n" "Language-Team: German (https://www.transifex.com/divio/teams/58664/de/)\n" @@ -20,557 +20,725 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: addons-dev/aldryn-forms/aldryn_forms/action_backends.py:13 -#: addons-dev/aldryn-forms/aldryn_forms/models.py:100 -#: addons-dev/aldryn-forms/aldryn_forms/models.py:512 +#: addons-dev/aldryn-forms/aldryn_forms/action_backends.py:12 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:98 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:579 msgid "Default" msgstr "Standard" -#: addons-dev/aldryn-forms/aldryn_forms/action_backends.py:23 +#: addons-dev/aldryn-forms/aldryn_forms/action_backends.py:21 #, fuzzy #| msgid "Email Field" msgid "Email only" msgstr "E-Mail-Feld" -#: addons-dev/aldryn-forms/aldryn_forms/action_backends.py:31 +#: addons-dev/aldryn-forms/aldryn_forms/action_backends.py:29 msgid "None" msgstr "" -#: addons-dev/aldryn-forms/aldryn_forms/admin/base.py:40 +#: addons-dev/aldryn-forms/aldryn_forms/admin/base.py:35 msgid "data" msgstr "Daten" -#: addons-dev/aldryn-forms/aldryn_forms/admin/base.py:56 +#: addons-dev/aldryn-forms/aldryn_forms/admin/base.py:51 msgid "people notified" msgstr "Benachrichtigte Personen" -#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:34 +#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:33 msgid "from date" msgstr "Datum von" -#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:39 +#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:38 msgid "to date" msgstr "Datum bis" -#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:44 +#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:43 msgid "language" msgstr "Sprache" -#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:59 -msgid "Export failed! More than 65,536 entries found, exceeded Excel limitation!" -msgstr "Export fehlgeschlagen! Mehr als 65,536 Einträge gefunden, Excel-Limit erreicht!" +#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:58 +msgid "" +"Export failed! More than 65,536 entries found, exceeded Excel limitation!" +msgstr "" +"Export fehlgeschlagen! Mehr als 65,536 Einträge gefunden, Excel-Limit " +"erreicht!" -#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:133 +#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:132 msgid "Please select at least one field to export." msgstr "Es muss mindestens ein Feld zum Exportieren gewählt sein." -#: addons-dev/aldryn-forms/aldryn_forms/admin/views.py:69 +#: addons-dev/aldryn-forms/aldryn_forms/admin/views.py:68 msgid "No records found" msgstr "Keine Einträge gefunden" -#: addons-dev/aldryn-forms/aldryn_forms/cms_apps.py:9 -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:51 +#: addons-dev/aldryn-forms/aldryn_forms/cms_apps.py:8 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:54 msgid "Forms" msgstr "Formulare" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:60 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:63 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:163 msgid "Form" msgstr "Formular" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:61 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:64 #, fuzzy #| msgid "Form fields" msgid "Form types" msgstr "Formularfelder" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:75 -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:237 -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:412 -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:136 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:78 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:180 +msgid "Condition Logic" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:86 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:248 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:423 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:188 msgid "Advanced Settings" msgstr "Erweiterte Einstellungen" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:199 -msgid "The form has been sent." -msgstr "Das Formular wurde versendet." - -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:228 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:239 msgid "Fieldset" msgstr "Feldergruppe" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:265 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:276 msgid "Form fields" msgstr "Formularfelder" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:486 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:497 msgid "Text Field" msgstr "Textfeld" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:490 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:501 msgid "Text Area Field" msgstr "Mehrzeiliges Textfeld" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:531 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:542 #, fuzzy #| msgid "Text Field" msgid "Hidden Field" msgstr "Textfeld" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:539 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:550 #, fuzzy #| msgid "Text Field" msgid "Phone Field" msgstr "Textfeld" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:544 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:555 #, fuzzy #| msgid "Text Field" msgid "Number Field" msgstr "Textfeld" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:549 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:560 msgid "Email Field" msgstr "E-Mail-Feld" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:585 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:596 msgid "File upload field" msgstr "Datei-Hochladen-Feld" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:665 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:696 msgid "Image upload field" msgstr "Bild-Hochladen-Feld" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:703 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:735 msgid "Yes/No Field" msgstr "Checkbox-Feld" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:727 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:759 msgid "Yes" msgstr "Ja" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:727 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:759 msgid "No" msgstr "Nein" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:735 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:767 msgid "Select Field" msgstr "Auswahlfeld" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:771 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:803 msgid "Multiple Select Field" msgstr "Mehrfach-Auswahlfeld" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:810 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:842 msgid "Multiple Checkbox Field" msgstr "Mehrfaches Checkbox-Feld" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:814 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:846 msgid "Radio Select Field" msgstr "Radio-Button-Auswahlfeld" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:857 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:889 msgid "Captcha Field" msgstr "Captcha-Feld" -#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:878 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:911 msgid "Submit Button" msgstr "Senden-Button" -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:25 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:28 msgid "new email notification" msgstr "Neue E-Mail-Benachrichtigung" -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:26 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:29 msgid "new email notifications" msgstr "Neue E-Mail-Benachrichtigungen" #: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:50 -#: addons-dev/aldryn-forms/aldryn_forms/models.py:153 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:151 msgid "Recipients" msgstr "Empfänger" #: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:62 -#, python-brace-format -msgid "variables can be used with by wrapping with \"${variable}\" like ${variable}" -msgstr "Variabeln können benutzt werden, indem Sie Ausführungszeichen hinzufügen. Aus ${variable} wird \"${variable}\". " +msgid "Attaching files to email" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:75 +msgid "" +"the variables can be used within the email body, email sender,and other " +"notification fields" +msgstr "" -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:91 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:105 msgid "Email" msgstr "E-Mail" -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:116 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:131 msgid "available text variables" msgstr "Verfügbare Textvariabeln" -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:120 -msgid "Form (Advanced)" -msgstr "Formular (Erweitert)" +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:154 +#, fuzzy +#| msgid "available text variables" +msgid "available file variables" +msgstr "Verfügbare Textvariabeln" -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:26 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:29 msgid "default" msgstr "Standard" -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:60 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:66 msgid "Email notification" msgstr "E-Mail-Benachrichtigung" -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:61 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:67 msgid "Email notifications" msgstr "E-Mail-Benachrichtigungen" -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:64 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:70 msgid "theme" msgstr "Vorlage" -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:66 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:72 msgid "Provides the base theme for the email." msgstr "Stellt das Standard-Template für die E-Mail zur Verfügung." -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:70 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:76 msgid "to name" msgstr "Name des Empfängers" -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:75 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:81 msgid "to email" msgstr "E-Mail des Empfängers" -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:81 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:87 msgid "to user" msgstr "an Benutzer" -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:88 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:94 msgid "from name" msgstr "Name des Absenders" -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:93 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:99 msgid "from email" msgstr "E-Mail des Absenders" -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:98 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:104 +#, fuzzy +#| msgid "to email" +msgid "reply to email" +msgstr "E-Mail des Empfängers" + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:109 msgid "subject" msgstr "Betreff" -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:103 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:114 msgid "email body (txt)" msgstr "E-Mail-Inhalt (Text)" -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:105 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:116 msgid "used when rendering the email in text only mode." msgstr "wird benutzt, wenn die E-Mail als Text dargestellt wird." -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:108 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:119 msgid "email body (html)" msgstr "E-Mail-Inhalt (HTML)" -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:110 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:121 msgid "used when rendering the email in html." msgstr "wird benutzt, wenn die E-Mail in HTML dargestellt wird." -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:127 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:125 +#, fuzzy +#| msgid "Provides the base theme for the email." +msgid "Files to attach to the email" +msgstr "Stellt das Standard-Template für die E-Mail zur Verfügung." + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:128 +msgid "" +"Comma-separated list of file fields that should be attached directly to the " +"email." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:137 +msgid "Use if condition succeeded" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:138 +msgid "" +"This email notification will be used if condition field for the form is the " +"same as condition value (See Form plugin configuration -> Condition Logic)" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:151 msgid "Please provide a recipient." msgstr "Bitte einen Empfänger angeben." -#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/notification.py:54 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/notification.py:53 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/notification.py:65 msgid "Fields" msgstr "Felder" #: addons-dev/aldryn-forms/aldryn_forms/forms.py:29 #, python-format -msgid "File size must be under %(max_size)s. Current file size is %(actual_size)s." -msgstr "Dateigröße muss unter %(max_size)s sein. Aktuelle Größe ist %(actual_size)s." +msgid "" +"File size must be under %(max_size)s. Current file size is %(actual_size)s." +msgstr "" +"Dateigröße muss unter %(max_size)s sein. Aktuelle Größe ist %(actual_size)s." -#: addons-dev/aldryn-forms/aldryn_forms/forms.py:64 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:82 #, python-format -msgid "Image width must be under %(max_size)s pixels. Current width is %(actual_size)s pixels." -msgstr "Bildbreite muss unter %(max_size)s Pixel groß sein. Aktuelle Breite ist %(actual_size)s Pixel." +msgid "" +"Image width must be under %(max_size)s pixels. Current width is " +"%(actual_size)s pixels." +msgstr "" +"Bildbreite muss unter %(max_size)s Pixel groß sein. Aktuelle Breite ist " +"%(actual_size)s Pixel." -#: addons-dev/aldryn-forms/aldryn_forms/forms.py:74 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:92 #, python-format -msgid "Image height must be under %(max_size)s pixels. Current height is %(actual_size)s pixels." -msgstr "Bildhöhe muss unter %(max_size)s Pixel groß sein. Aktuelle Höhe ist %(actual_size)s Pixel." +msgid "" +"Image height must be under %(max_size)s pixels. Current height is " +"%(actual_size)s pixels." +msgstr "" +"Bildhöhe muss unter %(max_size)s Pixel groß sein. Aktuelle Höhe ist " +"%(actual_size)s Pixel." -#: addons-dev/aldryn-forms/aldryn_forms/forms.py:170 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:188 msgid "Please provide CMS page for redirect." msgstr "Bitte CMS-Seite angeben für die Weiterleitung." -#: addons-dev/aldryn-forms/aldryn_forms/forms.py:175 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:193 msgid "Please provide an absolute URL for redirect." msgstr "Bitte eine absolute URL angeben für die Weiterleitung." -#: addons-dev/aldryn-forms/aldryn_forms/forms.py:222 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:240 msgid "Min value can not be greater than max value." msgstr "Der Mindestwert kann nicht größer sein als der Maximalwert." -#: addons-dev/aldryn-forms/aldryn_forms/forms.py:231 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:249 msgid "Min length" msgstr "Mindestlänge" -#: addons-dev/aldryn-forms/aldryn_forms/forms.py:232 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:250 msgid "Required number of characters to type." msgstr "Benötigte Anzahl von getippten Zeichen." -#: addons-dev/aldryn-forms/aldryn_forms/forms.py:234 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:252 msgid "Max length" msgstr "Maximale Länge" -#: addons-dev/aldryn-forms/aldryn_forms/forms.py:235 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:253 msgid "Maximum number of characters to type." msgstr "Maximale Anzahl von getippten Zeichen." -#: addons-dev/aldryn-forms/aldryn_forms/forms.py:275 -msgid "Explanatory text displayed next to input field. Just like this one. You can use MAXSIZE as a placeholder for the maximum size configured below." -msgstr "Erläuterungstext, der neben dem Eingabefeld angezeigt wird - so wie dieser. MAXSIZE kann als Platzhalter benutzt werden, um die Maximallänge zu konfigurieren." +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:293 +msgid "" +"Explanatory text displayed next to input field. Just like this one. You can " +"use MAXSIZE as a placeholder for the maximum size configured below." +msgstr "" +"Erläuterungstext, der neben dem Eingabefeld angezeigt wird - so wie dieser. " +"MAXSIZE kann als Platzhalter benutzt werden, um die Maximallänge zu " +"konfigurieren." -#: addons-dev/aldryn-forms/aldryn_forms/forms.py:288 -msgid "Explanatory text displayed next to input field. Just like this one. You can use MAXSIZE, MAXWIDTH, MAXHEIGHT as a placeholders for the maximum file size and dimensions configured below." -msgstr "Erläuterungstext, der neben dem Eingabefeld angezeigt wird - so wie dieser. MAXSIZE, MAXWIDTH und MAXHEIGHT können als Platzhalter definiert werden, um die maximale Dateigröße oder Dimensionen zu konfigurieren." +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:306 +msgid "" +"Explanatory text displayed next to input field. Just like this one. You can " +"use MAXSIZE, MAXWIDTH, MAXHEIGHT as a placeholders for the maximum file size " +"and dimensions configured below." +msgstr "" +"Erläuterungstext, der neben dem Eingabefeld angezeigt wird - so wie dieser. " +"MAXSIZE, MAXWIDTH und MAXHEIGHT können als Platzhalter definiert werden, um " +"die maximale Dateigröße oder Dimensionen zu konfigurieren." -#: addons-dev/aldryn-forms/aldryn_forms/forms.py:312 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:330 msgid "Min choices" msgstr "Mindestauswahl" -#: addons-dev/aldryn-forms/aldryn_forms/forms.py:313 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:331 msgid "Required amount of elements to chose." msgstr "Benötigte Anzahl von auszuwählenden Elementen." -#: addons-dev/aldryn-forms/aldryn_forms/forms.py:315 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:333 msgid "Max choices" msgstr "Maximale Auswahlmöglichkeiten" -#: addons-dev/aldryn-forms/aldryn_forms/forms.py:316 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:334 msgid "Maximum amount of elements to chose." msgstr "Maximale Anzahl auszuwählender Elemente." -#: addons-dev/aldryn-forms/aldryn_forms/models.py:108 -#: addons-dev/aldryn-forms/aldryn_forms/models.py:172 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:106 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:170 msgid "CMS Page" msgstr "CMS-Seite" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:109 -#: addons-dev/aldryn-forms/aldryn_forms/models.py:140 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:107 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:138 msgid "Absolute URL" msgstr "Absolute URL" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:116 -#: addons-dev/aldryn-forms/aldryn_forms/models.py:354 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:114 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:384 msgid "Name" msgstr "Name" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:118 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:116 msgid "Used to filter out form submissions." msgstr "Benutzt um Formulareinträge zu filtern." -#: addons-dev/aldryn-forms/aldryn_forms/models.py:121 -#: addons-dev/aldryn-forms/aldryn_forms/models.py:362 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:119 msgid "Error message" msgstr "Fehlermeldung" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:124 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:122 msgid "An error message that will be displayed if the form doesn't validate." -msgstr "Eine Fehlermeldung, die angezeigt wird, wenn das Formular ungültig ist." +msgstr "" +"Eine Fehlermeldung, die angezeigt wird, wenn das Formular ungültig ist." -#: addons-dev/aldryn-forms/aldryn_forms/models.py:128 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:126 msgid "Success message" msgstr "Erfolgsmeldung" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:131 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:129 msgid "An success message that will be displayed." msgstr "Erfolgsmeldung, die angezeigt wird." -#: addons-dev/aldryn-forms/aldryn_forms/models.py:134 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:132 msgid "Redirect to" msgstr "Weiterleiten nach" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:137 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:135 msgid "Where to redirect the user when the form has been successfully sent?" -msgstr "Wohin soll der Benutzer weitergeleitet werden, wenn das Formular erfolgreich versandt wurde?" +msgstr "" +"Wohin soll der Benutzer weitergeleitet werden, wenn das Formular erfolgreich " +"versandt wurde?" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:142 -#: addons-dev/aldryn-forms/aldryn_forms/models.py:342 -#: addons-dev/aldryn-forms/aldryn_forms/models.py:409 -#: addons-dev/aldryn-forms/aldryn_forms/models.py:538 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:140 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:373 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:439 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:604 msgid "custom css classes" msgstr "Benutzerdefinierte CSS-Klassen" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:144 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:142 msgid "form template" msgstr "Formularvorlage" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:156 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:154 msgid "People who will get the form content via e-mail." msgstr "Personen, welche den Formularinhalt per E-Mail erhalten." -#: addons-dev/aldryn-forms/aldryn_forms/models.py:160 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:158 msgid "Action backend" msgstr "" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:167 -#: addons-dev/aldryn-forms/aldryn_forms/models.py:383 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:165 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:413 msgid "Attributes" msgstr "" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:340 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:177 +msgid "CMS Page (condition is false)" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:185 +msgid "Condition field" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:186 +msgid "" +"This field is used to enable condition logic. If field doesn't match the " +"condition value then redirect and notification works as usual. If value of " +"the field matches the condition value field then custom redirect and " +"notification will be used." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:193 +#, fuzzy +#| msgid "Min value" +msgid "Condition field value" +msgstr "Mindestwert" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:197 +msgid "Enable autofill from url parameters" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:199 +msgid "" +"Eg if you open the form with a url that contains parameters as 'https://" +"example.com/sub-page/?email=hello@example.com&name=Alex', then the fields " +"'email' and 'name' are going to to be filled in automatically." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:371 msgid "Legend" msgstr "Legende" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:356 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:386 msgid "Used to set the field name" msgstr "" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:359 -#: addons-dev/aldryn-forms/aldryn_forms/models.py:536 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:389 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:602 #: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/display/submission_data.html:4 msgid "Label" msgstr "Beschreibung" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:360 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:390 msgid "Field is required" msgstr "Feld ist zwingend erforderlich" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:365 -msgid "Error message displayed if the required field is left empty. Default: \"This field is required\"." -msgstr "Fehlermeldung, die angezeigt wird, wenn das erforderliche Feld leer gelassen wird. Standard: \"Dieses Feld muss ausgefüllt werden\"." +#: addons-dev/aldryn-forms/aldryn_forms/models.py:392 +#, fuzzy +#| msgid "Field is required" +msgid "Field required error message" +msgstr "Feld ist zwingend erforderlich" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:395 +msgid "" +"Error message displayed if the required field is left empty. Default: \"This " +"field is required\"." +msgstr "" +"Fehlermeldung, die angezeigt wird, wenn das erforderliche Feld leer gelassen " +"wird. Standard: \"Dieses Feld muss ausgefüllt werden\"." -#: addons-dev/aldryn-forms/aldryn_forms/models.py:369 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:399 msgid "Placeholder text" msgstr "Platzhaltertext" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:372 -msgid "Default text in a form. Disappears when user starts typing. Example: \"email@example.com\"" -msgstr "Standardtext im Formular. Verschwindet, sobald der Benutzer zu tippen anfängt. Beispiel: \"email@example.com\"" +#: addons-dev/aldryn-forms/aldryn_forms/models.py:402 +msgid "" +"Default text in a form. Disappears when user starts typing. Example: " +"\"email@example.com\"" +msgstr "" +"Standardtext im Formular. Verschwindet, sobald der Benutzer zu tippen " +"anfängt. Beispiel: \"email@example.com\"" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:376 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:406 msgid "Help text" msgstr "Hilfetext" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:379 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:409 msgid "Explanatory text displayed next to input field. Just like this one." -msgstr "Erläuterungstext, der neben dem Eingabefeld angezeigt wird. Genau wie dieser Text." +msgstr "" +"Erläuterungstext, der neben dem Eingabefeld angezeigt wird. Genau wie dieser " +"Text." -#: addons-dev/aldryn-forms/aldryn_forms/models.py:391 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:421 msgid "Min value" msgstr "Mindestwert" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:397 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:427 msgid "Max value" msgstr "Maximalwert" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:402 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:432 #, fuzzy #| msgid "Min value" msgid "Initial value" msgstr "Mindestwert" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:405 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:435 msgid "Default value of field." msgstr "" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:444 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:467 +msgid "The \"name\" field cannot contain spaces." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:480 msgid "columns" msgstr "Spalten" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:446 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:482 msgid "rows" msgstr "Zeilen" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:451 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:487 msgid "send notification when form is submitted" msgstr "Benachrichtigung senden, wenn das Formular abgeschickt wird" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:453 -msgid "When checked, the value of this field will be used to send an email notification." -msgstr "Wenn aktiviert, wird der Wert dieses Feldes verwendet, um eine E-Mail-Benachrichtigung zu senden." +#: addons-dev/aldryn-forms/aldryn_forms/models.py:489 +msgid "" +"When checked, the value of this field will be used to send an email " +"notification." +msgstr "" +"Wenn aktiviert, wird der Wert dieses Feldes verwendet, um eine E-Mail-" +"Benachrichtigung zu senden." -#: addons-dev/aldryn-forms/aldryn_forms/models.py:457 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:493 msgid "email subject" msgstr "E-Mail-Betreff" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:461 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:497 msgid "Used as the email subject when email_send_notification is checked." -msgstr "Wird als E-Mail-Betreff verwendet, wenn \"email_send_notification\" aktiviert ist." +msgstr "" +"Wird als E-Mail-Betreff verwendet, wenn \"email_send_notification\" " +"aktiviert ist." -#: addons-dev/aldryn-forms/aldryn_forms/models.py:465 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:501 msgid "Additional email body" msgstr "Zusätzlicher E-Mail-Inhalt" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:468 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:504 msgid "Additional body text used when email notifications are active." -msgstr "Zusätzlicher Inhaltstext wird dargestellt, wenn E-Mail-Benachrichtigungen aktiv sind." +msgstr "" +"Zusätzlicher Inhaltstext wird dargestellt, wenn E-Mail-Benachrichtigungen " +"aktiv sind." -#: addons-dev/aldryn-forms/aldryn_forms/models.py:475 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:511 msgid "Upload files to" msgstr "Dateien hochladen nach" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:476 -msgid "Select a folder to which all files submitted through this field will be uploaded to." -msgstr "Verzeichnis auswählen, in das alle über dieses Feld übermittelten Dateien hochgeladen werden." +#: addons-dev/aldryn-forms/aldryn_forms/models.py:512 +msgid "" +"Select a folder to which all files submitted through this field will be " +"uploaded to." +msgstr "" +"Verzeichnis auswählen, in das alle über dieses Feld übermittelten Dateien " +"hochgeladen werden." -#: addons-dev/aldryn-forms/aldryn_forms/models.py:481 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:517 msgid "Maximum file size" msgstr "Maximale Dateigröße" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:483 -msgid "The maximum file size of the upload, in bytes. You can use common size suffixes (kB, MB, GB, ...)." -msgstr "Die maximale Dateigröße des Upload in bytes. Es können gebräuchliche Suffixe für die Größe verwendet werden (kB, MB, GB, ...)." +#: addons-dev/aldryn-forms/aldryn_forms/models.py:519 +msgid "" +"The maximum file size of the upload, in bytes. You can use common size " +"suffixes (kB, MB, GB, ...)." +msgstr "" +"Die maximale Dateigröße des Upload in bytes. Es können gebräuchliche Suffixe " +"für die Größe verwendet werden (kB, MB, GB, ...)." + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:524 +msgid "Allowed extensions" +msgstr "" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:497 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:529 +msgid "" +"Comma-separated list of file extensions allowed for this file field. Leave " +"it empty to allow any extension." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:535 +msgid "Invalid extension error message" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:538 +msgid "" +"Error message displayed if extensions are constrained and the uploaded file " +"fails that validation.Default: \"File extension [extension] is not allowed " +"for this field.\"" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:542 +msgid "Store this file to filer" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:546 +msgid "" +"Whether to store this file to filer. If this is unchecked and this file is " +"not attached to any email notification, the file will be lost forever and " +"using it as a template variable in any email template will return empty " +"result." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:565 msgid "Maximum image width" msgstr "Maximale Bildbreite" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:499 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:567 msgid "The maximum width of the uploaded image, in pixels." msgstr "Die maximale Breite des hochgeladenen Bildes in Pixel." -#: addons-dev/aldryn-forms/aldryn_forms/models.py:502 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:570 msgid "Maximum image height" msgstr "Maximale Bildhöhe" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:504 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:572 msgid "The maximum height of the uploaded image, in pixels." msgstr "Die maximale Höhe des hochgeladenen Bildes in Pixel." -#: addons-dev/aldryn-forms/aldryn_forms/models.py:511 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:578 #: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/display/submission_data.html:5 msgid "Value" msgstr "Wert" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:513 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:580 msgid "Position" msgstr "" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:516 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:583 msgid "Option" msgstr "Option" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:517 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:584 msgid "Options" msgstr "Optionen" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:551 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:616 msgid "form name" msgstr "Formularname" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:557 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:622 msgid "users notified" msgstr "Benachrichtigte Benutzer" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:559 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:624 msgid "People who got a notification when form was submitted." -msgstr "Personen, die eine Benachrichtigung erhalten, sobald ein Formular gesendet wurde." +msgstr "" +"Personen, die eine Benachrichtigung erhalten, sobald ein Formular gesendet " +"wurde." -#: addons-dev/aldryn-forms/aldryn_forms/models.py:563 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:628 msgid "form language" msgstr "Formularsprache" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:569 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:634 msgid "form url" msgstr "URL des Formulars" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:577 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:642 msgid "Form submission" msgstr "Formulareintrag" -#: addons-dev/aldryn-forms/aldryn_forms/models.py:578 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:643 msgid "Form submissions" msgstr "Formulareinträge" @@ -578,7 +746,7 @@ msgstr "Formulareinträge" msgid "Incorrect file size format." msgstr "" -#: addons-dev/aldryn-forms/aldryn_forms/sizefield/utils.py:81 +#: addons-dev/aldryn-forms/aldryn_forms/sizefield/utils.py:79 #, python-format msgid "Size '%s' has incorrect format" msgstr "" @@ -631,25 +799,54 @@ msgstr "[Form Eintrag] %(form_name)s" msgid "Required field" msgstr "Feld erforderlich" -#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/form.html:17 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/form.html:19 #, fuzzy, python-format -#| msgid "Thank you for submitting your information, you will be redirected shortly." +#| msgid "" +#| "Thank you for submitting your information, you will be redirected shortly." msgid "You will be redirected shortly." -msgstr "Vielen Dank, dass Sie sich Zeit genommen haben, dieses Formular auszufüllen. Sie werden umgehend weitergeleitet." +msgstr "" +"Vielen Dank, dass Sie sich Zeit genommen haben, dieses Formular auszufüllen. " +"Sie werden umgehend weitergeleitet." -#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/form.html:21 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/form.html:23 msgid "Thank you for submitting your information." msgstr "" -#: addons-dev/aldryn-forms/aldryn_forms/validators.py:33 +#: addons-dev/aldryn-forms/aldryn_forms/validators.py:32 +#, python-brace-format +msgid "File extension '{extension}' is not allowed for this field." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/validators.py:60 #, python-format -msgid "You have to choose at least %(limit_value)d options (chosen %(show_value)d)." -msgstr "Sie müssen mindestens %(limit_value)d Optionen (gewählt %(show_value)d) angeben." +msgid "" +"You have to choose at least %(limit_value)d options (chosen %(show_value)d)." +msgstr "" +"Sie müssen mindestens %(limit_value)d Optionen (gewählt %(show_value)d) " +"angeben." -#: addons-dev/aldryn-forms/aldryn_forms/validators.py:39 +#: addons-dev/aldryn-forms/aldryn_forms/validators.py:66 #, python-format -msgid "You can't choose more than %(limit_value)d options (chosen %(show_value)d)." -msgstr "Sie können nicht mehr als %(limit_value)d Optionen (gewählt %(show_value)d) angeben." +msgid "" +"You can't choose more than %(limit_value)d options (chosen %(show_value)d)." +msgstr "" +"Sie können nicht mehr als %(limit_value)d Optionen (gewählt %(show_value)d) " +"angeben." + +#~ msgid "The form has been sent." +#~ msgstr "Das Formular wurde versendet." + +#, python-brace-format +#~ msgid "" +#~ "variables can be used with by wrapping with \"${variable}\" like " +#~ "${variable}" +#~ msgstr "" +#~ "Variabeln können benutzt werden, indem Sie Ausführungszeichen hinzufügen. " +#~ "Aus ${variable} wird \"${variable}\". " + +#~ msgid "Form (Advanced)" +#~ msgstr "Formular (Erweitert)" #, python-format #~ msgid "" @@ -659,7 +856,9 @@ msgstr "Sie können nicht mehr als %(limit_value)d Optionen (gewählt %(show_val #~ " " #~ msgstr "" #~ "\n" -#~ "Vielen Dank, dass Sie sich die Zeit genommen haben, dieses Formular auszufüllen. Sie werden umgehend weitergeleitet." +#~ "Vielen Dank, dass Sie sich die Zeit genommen haben, dieses Formular " +#~ "auszufüllen. Sie werden umgehend weitergeleitet." #~ msgid "" #~ "\n" diff --git a/aldryn_forms/locale/en/LC_MESSAGES/django.mo b/aldryn_forms/locale/en/LC_MESSAGES/django.mo index e5186cb068ad18bc147aa6a36fa4983364bc4285..53ec28e6af002e7d878dc3668cdd8b4b7fff4a34 100644 GIT binary patch delta 2760 zcmYk;e@vBC9LMnkTm=MCK@kZ>@gl?pvjQ>$3FU_TFp^NnAN+=@9@cde~8UCmmxHvfW+wQSR}*8B53hmEuQeO~80Joh<2zUSQW z`;H%KoL>@s1BTK=q!B)!F&A(unhWK`JY(Xq7dPS{F2U=#2q!U!|6&eqjx#0(58!<4 zvhCMVuRM(nIEZtMam+LoKIShji5Nj|Nw^sGf^2NULfnjl*oQZ89QX6kT=XY+-wR*` z?Gjvyy+}u97&YJvsOQHqhW^c$RI0cUwht^>z$(zrLJcezQ*b@lJx-&ZE9Xn8wZcpdeEe~?u- z(LAj0Ct@z9p=MrzN>vMLLR}b%-N;vsgH9opGgQ{$SN0FL@lo2bOhX-3;yu`o>fjUx za2(g*P2^+Z8Knl4jv8PN>idPr;+oy4=R-*L%v(vUe;t+gxuIO&LRQN}GHscNdSM2( zVjkw>8GI10qMo~hn=qE?Y6YuNOMVEqVHcKR7^5&D*&9G&GV5Q(jdX5QV+hl643+aA zQM>jJ)C}*SmNK68)%``tVwq*AB@Lh^Qe>?}rKZ8QTT!Q@-QGXyP|*xuwKq=N2i`&Y zGQ-HnjB(LSze5e+H_XPHsDUIfTFp2a)lNfo{1U6t8HNXrulJ-V6vZ9X3r$X9I zIqC(wunF5x=RJ&lIGb-BE zQr(aG{t)^dDi^6}q~9VN+5C!Hkz1IFF)O_ntVO+G1L_4q)N!mq&Ac0xs2>+)y+9n2VY32H#Ks2T1-eZLL0 zr}|LO525zdRjkABQK`;aP5!mS1*^TK4x(PT9b2&(^YIGmyx&GWpX>L|dlB+64i_!? zdDM9y!7{vyQCP~TG=LyhVJ%kUP^ROZ_epLj=Wz^IyVj4&X)gM(#NIDMrK%dWa*e2& z9JKbJQghO_2T+^toV|YuHNnqqd&02~e1kgg*HF2fM9nlR%NsxvX46hV4X_mFV1;eh zpgO9z?Plvfam80@o=vXbA67WfBnDVxM$q`i@iLFTH+(KZXTfS?s(L)lUBp;iFtuI zM5t^cbb4MS*kA5`sljK6r->cJRzmsTMLa^RqJL9FMMWDz$A?qrmJ+TxL^)AOgov54 zhsw^G25MKUD22xe?Io2iB9hoo)DkLeHTM^>9v`QFQ$T1FvANwJlup#HT}h~DKXkY? z@0hBpT+bAp5asx=y|D%P)i%w9a=o6=X_#HQY1~Jsf498M^(gTYkw@^O=9Yt88wnjp zl?R9oZq55K(dp2}+(+ys+KA_gnW9blEYUji8Sgh-Z$n;=44h%ir{S&*{BZqYlQAELe}rej_nc|W zZg?MjG5j%nA^bh8z;zV54DN?&B7x6?w-@QV;B!g84<3d0!S(RZkS5HN@I`PvmCk`L zfvP{i&kP)d!|*gN+s`hF6s{KHUseghta zj~34_c!4oYh1m+pGTWi_+XG($$BKLh`7>R9)c!l*MtCYq&~s{b;m`j@}~xE*TzH$&O0 z3pK8H!_(kbCJIr%H9)D?ax5j*}-Elh8oYe z;SKO-P~~3Tm-jyi)$S0K{l}r|AB7jgDwIC&ge(>FA*gxz4BQOA4pslxQ1$-;RsSDw z0B(F$KK`9h_L_hiR~?=PLn!@Qa3_2-ls|m2$p0nWL;9~!{auApiU&7CwZ90r!Uv%I z=?75beG*Eav#2Ef&WEc1Dt_c=qfq6KLiyDRsCaNUl)Zlr<>$XI_z$S|&Zbfuz7)!? z?}Al$KU6$8{n9)hTn$yf1^2=?K~yqdh3nxH@OALFa0KpR5uFb2fYRsf@F0929D|QT z#e=O|a{C{I&m~=l8gC1p0Z$b9cS70iZm9YFDAc$3n-E>MBANqT8k_thK^U5uLV8!m%`CD| zWXN7u7Wd;&^ZSM({n~<>quw>h&2x~~Ao3kuGl=|4*CHYx>s=`~n-KYv*3w&%-qqsf z7KE^82)#arT>~vLkA#T)Qr8Ydwv^p_*KTgg2w~XF6`9w=1I4{?sJNHE*Nc0hAGrXL ze+?n0A+JYRdOmi&1?tjz&~*a22&o|QZCzI**CJOa!S%Kr=JJBaAtBq;kUqpAx=KhJ zkx%Q|gUD|u5nONSI>OyvL~HIwWEb*An_q_rjO z+nu<2n7CTz>Nai0N!D82wJq3PUe$~ls-|(Pn>l-Aa?A|X>!G?0=q|1=+RQCvwwuzx zeA7kNwS%x_qc{s2Va@B8+8}W@sAb`tE3d4c7gZzV&IM78Hl~~(WNL_)QZugmrW-k9N`t~`i=CXLaYI;p&8vKZ&=bhEs2 z*RR#q|4g3&DR#r?$n*h!cc3!5|G@MqN;1tSY1s%{E>|^( z>X@+YqLdYvKDFkoT1_ah`?LxwQI>=*?d3J_Dp$YAj>oJ*7Exq(UO8~(6+5lV%h7u` zst;JVP;;)%oK(1JVKL&3U%wYEwWQX4AWFSDCSM``SB}(kk~}{x;4*G{<7vwos?O3Q z*4f;TU1nsHEos>fcasF2@S9#~+T7ev;OGXeUa7pTZl@Iog$o-E+W*-8UKrVur@i~4 zhxCquHtVhkf=X;D9xM+iFSwk}3#8_NYjyl`H=}JuqNWRHo0)z3vDi+y;94t&RMa?i zJiU@d%d5tfcQzl^v*y3kS6<;6x*7}cdNbx`T~s&Y!Gf(dGC{QIxPp z0l#vBHg1yHxM5w(;gE`Iv8tx5=U$;D(=FwMD`xDZOt0utUes+@aS7Td_9htJ5lHEQ z(5Vgxv`cDo-&2#@Le1Wtj|s#_dD(2@*aZ{;@OoS=FH390@sK!dhnuc;yc#dq+>@8` zrx;_6<>YsO37o}D#QfpmwK%D3!Q#N?u#45md^5JQbQr9P)cGdB%5K|v!cwt+yLx$L zHNTzBI)Y|z3nMmVS_E@pU|mT&0u@#SH0`!zxPYjKF50?%<$SL!!r9Y3PkZsMD9}mb zxvY$k(x7;{=!VW-KScBz>x#()EHUu<~K=)p^+yh6*B zp4lx|^eIQ`{%6NW`=1>b&2-OyoA`RwaSlwqn<$@!=Of5caL^)` zDf592a9ps}#mo^eSMKSYiP|ykXva>wjRqk#wf)EUvXvtHk#f1brR=-zby39GRqZp8 zJ_z}Kiom?8QXVj$z0Q%|rXx$@SVwf`Ww=XTsYQOP7Uc3lc!p`H&#XMIX``$u>?joY zCh!xcMsX_Esp+ImwrsBVarg!uu8WETzE2blUOIPd?)Qg^ z8L#-3x{W(}kHDyY7m3)Mc?Fs8J;tmUE@$c4u3kHQN(YntF5^VrV)x2Zyseo=LhpL5$?tsQ`K_h<5?-E`|oNZ}0Grh6kENG51c?Dsv9yeY&sP`emPw}3}QI8{_ z-e;HB4}m}vSAO@S>)k=atcS z@$J3hZ|=)qR956@Khl~mjn+%o(+3VaXb%q!9~|0WvDa57r$!G=Y?^dBeV4}5*|1*P z+nr5I)A69)bokJ8X;?=PDwRes+@QUD`;MzhJGPg$zsBykYVe9Hw{GX6U}@6Lg=)Mg zcdRlrSsFi78X2+&4h@cvZoTo)L}k+$yJl%R38ECwh?7CP@5tDgofsOg*j<(Jq0zBD zLn9-Tm8q%S6wTeLH0^@+pdA~U*ndPS?;0E1(+bORGP_&`RmVriE6d~CQQp2u@4bZZ z(lqCg94$tKpJTC91`BW_QqDT@ABMYace&K5VRg z*dXfts~<;J9fH^5vFShn! k!+*Wt9CGT%khKpR#s3J`K5VRg*zo^m=M%#J{fCWz0uWt2kN^Mx diff --git a/aldryn_forms/locale/en/LC_MESSAGES/django.po b/aldryn_forms/locale/en/LC_MESSAGES/django.po index fe82eae9..63354a08 100644 --- a/aldryn_forms/locale/en/LC_MESSAGES/django.po +++ b/aldryn_forms/locale/en/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-10-09 17:35+0000\n" +"POT-Creation-Date: 2024-03-08 18:39+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,340 +16,308 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: admin/base.py:39 +#: addons-dev/aldryn-forms/aldryn_forms/action_backends.py:12 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:98 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:579 +msgid "Default" +msgstr "Default" + +#: addons-dev/aldryn-forms/aldryn_forms/action_backends.py:21 +#, fuzzy +#| msgid "Email Field" +msgid "Email only" +msgstr "Email Field" + +#: addons-dev/aldryn-forms/aldryn_forms/action_backends.py:29 +msgid "None" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/admin/base.py:35 msgid "data" msgstr "data" -#: admin/base.py:55 +#: addons-dev/aldryn-forms/aldryn_forms/admin/base.py:51 msgid "people notified" msgstr "people notified" -#: admin/forms.py:33 +#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:33 msgid "from date" msgstr "from date" -#: admin/forms.py:38 +#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:38 msgid "to date" msgstr "to date" -#: admin/forms.py:43 +#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:43 msgid "language" msgstr "language" -#: admin/forms.py:58 +#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:58 msgid "" "Export failed! More than 65,536 entries found, exceeded Excel limitation!" msgstr "" "Export failed! More than 65,536 entries found, exceeded Excel limitation!" -#: admin/forms.py:132 +#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:132 msgid "Please select at least one field to export." msgstr "Please select at least one field to export." -#: admin/views.py:69 +#: addons-dev/aldryn-forms/aldryn_forms/admin/views.py:68 msgid "No records found" msgstr "No records found" -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/display/submission_data.html:3 -#: boilerplates/legacy/templates/admin/aldryn_forms/display/submission_data.html:3 -#: templates/admin/aldryn_forms/display/submission_data.html:3 -msgid "Field" -msgstr "Field" - -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/display/submission_data.html:4 -#: boilerplates/legacy/templates/admin/aldryn_forms/display/submission_data.html:4 -#: models.py:306 models.py:461 -#: templates/admin/aldryn_forms/display/submission_data.html:4 -msgid "Label" -msgstr "Label" - -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/display/submission_data.html:5 -#: boilerplates/legacy/templates/admin/aldryn_forms/display/submission_data.html:5 -#: models.py:451 templates/admin/aldryn_forms/display/submission_data.html:5 -msgid "Value" -msgstr "Value" - -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/export.html:5 -#: boilerplates/legacy/templates/admin/aldryn_forms/export.html:4 -#: boilerplates/legacy/templates/admin/aldryn_forms/export_wizard.html:4 -#: templates/admin/aldryn_forms/export.html:5 -msgid "Export form submissions" -msgstr "Export form submissions" - -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/export.html:8 -#: boilerplates/legacy/templates/admin/aldryn_forms/export.html:7 -#: boilerplates/legacy/templates/admin/aldryn_forms/export_wizard.html:7 -#: templates/admin/aldryn_forms/export.html:8 -msgid "Please correct the error below." -msgid_plural "Please correct the errors below." -msgstr[0] "Please correct the error below." -msgstr[1] "Please correct the errors below." - -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/export.html:30 -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/export_wizard.html:11 -#: boilerplates/legacy/templates/admin/aldryn_forms/export.html:27 -#: boilerplates/legacy/templates/admin/aldryn_forms/export_wizard.html:30 -#: templates/admin/aldryn_forms/export.html:30 -#: templates/admin/aldryn_forms/export_wizard.html:11 -msgid "Export" -msgstr "Export" - -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/export_wizard.html:13 -#: boilerplates/legacy/templates/admin/aldryn_forms/export_wizard.html:32 -#: templates/admin/aldryn_forms/export_wizard.html:13 -msgid "Continue" -msgstr "Continue" - -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/formsubmission/change_list.html:9 -#: boilerplates/legacy/templates/admin/aldryn_forms/formsubmission/change_list.html:9 -#: templates/admin/aldryn_forms/formsubmission/change_list.html:9 -msgid "Export Form Entries" -msgstr "Export Form Entries" - -#: boilerplates/bootstrap3/templates/aldryn_forms/email_notifications/emails/notification.body.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/email_notifications/emails/notification.body.txt:8 -#: boilerplates/bootstrap3/templates/aldryn_forms/emails/notification.body.html:3 -#: boilerplates/bootstrap3/templates/aldryn_forms/emails/notification.body.txt:2 -#: boilerplates/bootstrap3/templates/aldryn_forms/emails/user/notification.body.txt:5 -#: boilerplates/legacy/templates/aldryn_forms/email_notifications/emails/notification.body.html:9 -#: boilerplates/legacy/templates/aldryn_forms/email_notifications/emails/notification.body.txt:8 -#: boilerplates/legacy/templates/aldryn_forms/emails/notification.body.html:3 -#: boilerplates/legacy/templates/aldryn_forms/emails/notification.body.txt:2 -#: boilerplates/legacy/templates/aldryn_forms/emails/user/notification.body.txt:5 -#: templates/aldryn_forms/email_notifications/emails/notification.body.html:9 -#: templates/aldryn_forms/email_notifications/emails/notification.body.txt:8 -#: templates/aldryn_forms/emails/notification.body.html:3 -#: templates/aldryn_forms/emails/notification.body.txt:2 -#: templates/aldryn_forms/emails/user/notification.body.txt:5 -#, python-format -msgid "Form name: %(form_name)s" -msgstr "Form name: %(form_name)s" - -#: boilerplates/bootstrap3/templates/aldryn_forms/email_notifications/emails/notification.subject.txt:1 -#: boilerplates/bootstrap3/templates/aldryn_forms/emails/notification.subject.txt:1 -#: boilerplates/bootstrap3/templates/aldryn_forms/emails/user/notification.subject.txt:1 -#: boilerplates/legacy/templates/aldryn_forms/email_notifications/emails/notification.subject.txt:1 -#: boilerplates/legacy/templates/aldryn_forms/emails/notification.subject.txt:1 -#: boilerplates/legacy/templates/aldryn_forms/emails/user/notification.subject.txt:1 -#: templates/aldryn_forms/email_notifications/emails/notification.subject.txt:1 -#: templates/aldryn_forms/emails/notification.subject.txt:1 -#: templates/aldryn_forms/emails/user/notification.subject.txt:1 -#, python-format -msgid "[Form submission] %(form_name)s" -msgstr "[Form submission] %(form_name)s" - -#: boilerplates/bootstrap3/templates/aldryn_forms/field.html:7 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/emailfield.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/filefield.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/imagefield.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/multiplecheckboxselectfield.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/multipleselectfield.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/radioselectfield.html:8 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/selectfield.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/textareafield.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/textfield.html:9 -#: templates/aldryn_forms/field.html:14 -#: templates/aldryn_forms/fields/multiplecheckboxselectfield.html:9 -msgid "Required field" -msgstr "Required field" - -#: boilerplates/bootstrap3/templates/aldryn_forms/form.html:19 -#, python-format -msgid "" -"Thank you for submitting your information, you will be redirected shortly." -msgstr "" -"Thank you for submitting your information, you will be redirected shortly." - -#: cms_apps.py:9 cms_plugins.py:51 +#: addons-dev/aldryn-forms/aldryn_forms/cms_apps.py:8 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:54 msgid "Forms" msgstr "Forms" -#: cms_plugins.py:60 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:63 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:163 msgid "Form" msgstr "Form" -#: cms_plugins.py:74 cms_plugins.py:242 cms_plugins.py:383 -#: contrib/email_notifications/cms_plugins.py:137 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:64 +#, fuzzy +#| msgid "Form fields" +msgid "Form types" +msgstr "Form fields" + +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:78 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:180 +msgid "Condition Logic" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:86 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:248 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:423 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:188 msgid "Advanced Settings" msgstr "Advanced Settings" -#: cms_plugins.py:204 -msgid "The form has been sent." -msgstr "The form has been sent." - -#: cms_plugins.py:233 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:239 msgid "Fieldset" msgstr "Fieldset" -#: cms_plugins.py:252 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:276 msgid "Form fields" msgstr "Form fields" -#: cms_plugins.py:420 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:497 msgid "Text Field" msgstr "Text Field" -#: cms_plugins.py:444 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:501 msgid "Text Area Field" msgstr "Text Area Field" -#: cms_plugins.py:485 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:542 +#, fuzzy +#| msgid "Text Field" +msgid "Hidden Field" +msgstr "Text Field" + +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:550 +#, fuzzy +#| msgid "Text Field" +msgid "Phone Field" +msgstr "Text Field" + +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:555 +#, fuzzy +#| msgid "Text Field" +msgid "Number Field" +msgstr "Text Field" + +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:560 msgid "Email Field" msgstr "Email Field" -#: cms_plugins.py:520 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:596 msgid "File upload field" msgstr "File upload field" -#: cms_plugins.py:600 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:696 msgid "Image upload field" msgstr "Image upload field" -#: cms_plugins.py:638 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:735 msgid "Yes/No Field" msgstr "Yes/No Field" -#: cms_plugins.py:659 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:759 msgid "Yes" msgstr "Yes" -#: cms_plugins.py:659 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:759 msgid "No" msgstr "No" -#: cms_plugins.py:667 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:767 msgid "Select Field" msgstr "Select Field" -#: cms_plugins.py:701 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:803 msgid "Multiple Select Field" msgstr "Multiple Select Field" -#: cms_plugins.py:737 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:842 msgid "Multiple Checkbox Field" msgstr "Multiple Checkbox Field" -#: cms_plugins.py:741 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:846 msgid "Radio Select Field" msgstr "Radio Select Field" -#: cms_plugins.py:782 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:889 msgid "Captcha Field" msgstr "Captcha Field" -#: cms_plugins.py:803 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:911 msgid "Submit Button" msgstr "Submit Button" -#: contrib/email_notifications/cms_plugins.py:26 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:28 msgid "new email notification" msgstr "new email notification" -#: contrib/email_notifications/cms_plugins.py:27 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:29 msgid "new email notifications" msgstr "new email notifications" -#: contrib/email_notifications/cms_plugins.py:51 models.py:165 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:50 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:151 msgid "Recipients" msgstr "Recipients" -#: contrib/email_notifications/cms_plugins.py:63 -#, python-brace-format +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:62 +msgid "Attaching files to email" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:75 msgid "" -"variables can be used with by wrapping with \"${variable}\" like ${variable}" +"the variables can be used within the email body, email sender,and other " +"notification fields" msgstr "" -"variables can be used with by wrapping with \"${variable}\" like ${variable}" -#: contrib/email_notifications/cms_plugins.py:92 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:105 msgid "Email" msgstr "Email" -#: contrib/email_notifications/cms_plugins.py:117 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:131 msgid "available text variables" msgstr "available text variables" -#: contrib/email_notifications/cms_plugins.py:121 -msgid "Form (Advanced)" -msgstr "Form (Advanced)" +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:154 +#, fuzzy +#| msgid "available text variables" +msgid "available file variables" +msgstr "available text variables" -#: contrib/email_notifications/models.py:28 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:29 msgid "default" msgstr "default" -#: contrib/email_notifications/models.py:62 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:66 msgid "Email notification" msgstr "Email notification" -#: contrib/email_notifications/models.py:63 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:67 msgid "Email notifications" msgstr "Email notifications" -#: contrib/email_notifications/models.py:66 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:70 msgid "theme" msgstr "theme" -#: contrib/email_notifications/models.py:68 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:72 msgid "Provides the base theme for the email." msgstr "Provides the base theme for the email." -#: contrib/email_notifications/models.py:72 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:76 msgid "to name" msgstr "to name" -#: contrib/email_notifications/models.py:77 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:81 msgid "to email" msgstr "to email" -#: contrib/email_notifications/models.py:83 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:87 msgid "to user" msgstr "to user" -#: contrib/email_notifications/models.py:89 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:94 msgid "from name" msgstr "from name" -#: contrib/email_notifications/models.py:94 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:99 msgid "from email" msgstr "from email" -#: contrib/email_notifications/models.py:99 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:104 +#, fuzzy +#| msgid "to email" +msgid "reply to email" +msgstr "to email" + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:109 msgid "subject" msgstr "subject" -#: contrib/email_notifications/models.py:104 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:114 msgid "email body (txt)" msgstr "email body (txt)" -#: contrib/email_notifications/models.py:106 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:116 msgid "used when rendering the email in text only mode." msgstr "used when rendering the email in text only mode." -#: contrib/email_notifications/models.py:109 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:119 msgid "email body (html)" msgstr "email body (html)" -#: contrib/email_notifications/models.py:111 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:121 msgid "used when rendering the email in html." msgstr "used when rendering the email in html." -#: contrib/email_notifications/models.py:127 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:125 +#, fuzzy +#| msgid "Provides the base theme for the email." +msgid "Files to attach to the email" +msgstr "Provides the base theme for the email." + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:128 +msgid "" +"Comma-separated list of file fields that should be attached directly to the " +"email." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:137 +msgid "Use if condition succeeded" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:138 +msgid "" +"This email notification will be used if condition field for the form is the " +"same as condition value (See Form plugin configuration -> Condition Logic)" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:151 msgid "Please provide a recipient." msgstr "Please provide a recipient." -#: contrib/email_notifications/notification.py:54 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/notification.py:53 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/notification.py:65 msgid "Fields" msgstr "Fields" -#: forms.py:28 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:29 #, python-format msgid "" "File size must be under %(max_size)s. Current file size is %(actual_size)s." msgstr "" "File size must be under %(max_size)s. Current file size is %(actual_size)s." -#: forms.py:63 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:82 #, python-format msgid "" "Image width must be under %(max_size)s pixels. Current width is " @@ -358,7 +326,7 @@ msgstr "" "Image width must be under %(max_size)s pixels. Current width is " "%(actual_size)s pixels." -#: forms.py:73 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:92 #, python-format msgid "" "Image height must be under %(max_size)s pixels. Current height is " @@ -367,35 +335,35 @@ msgstr "" "Image height must be under %(max_size)s pixels. Current height is " "%(actual_size)s pixels." -#: forms.py:168 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:188 msgid "Please provide CMS page for redirect." msgstr "Please provide CMS page for redirect." -#: forms.py:172 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:193 msgid "Please provide an absolute URL for redirect." msgstr "Please provide an absolute URL for redirect." -#: forms.py:216 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:240 msgid "Min value can not be greater than max value." msgstr "Min value can not be greater than max value." -#: forms.py:225 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:249 msgid "Min length" msgstr "Min length" -#: forms.py:226 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:250 msgid "Required number of characters to type." msgstr "Required number of characters to type." -#: forms.py:228 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:252 msgid "Max length" msgstr "Max length" -#: forms.py:229 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:253 msgid "Maximum number of characters to type." msgstr "Maximum number of characters to type." -#: forms.py:264 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:293 msgid "" "Explanatory text displayed next to input field. Just like this one. You can " "use MAXSIZE as a placeholder for the maximum size configured below." @@ -403,7 +371,7 @@ msgstr "" "Explanatory text displayed next to input field. Just like this one. You can " "use MAXSIZE as a placeholder for the maximum size configured below." -#: forms.py:277 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:306 msgid "" "Explanatory text displayed next to input field. Just like this one. You can " "use MAXSIZE, MAXWIDTH, MAXHEIGHT as a placeholders for the maximum file size " @@ -413,87 +381,145 @@ msgstr "" "use MAXSIZE, MAXWIDTH, MAXHEIGHT as a placeholders for the maximum file size " "and dimensions configured below." -#: forms.py:301 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:330 msgid "Min choices" msgstr "Min choices" -#: forms.py:302 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:331 msgid "Required amount of elements to chose." msgstr "Required amount of elements to chose." -#: forms.py:304 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:333 msgid "Max choices" msgstr "Max choices" -#: forms.py:305 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:334 msgid "Maximum amount of elements to chose." msgstr "Maximum amount of elements to chose." -#: models.py:111 models.py:452 -msgid "Default" -msgstr "Default" - -#: models.py:119 models.py:151 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:106 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:170 msgid "CMS Page" msgstr "CMS Page" -#: models.py:120 models.py:152 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:107 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:138 msgid "Absolute URL" msgstr "Absolute URL" -#: models.py:127 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:114 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:384 msgid "Name" msgstr "Name" -#: models.py:129 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:116 msgid "Used to filter out form submissions." msgstr "Used to filter out form submissions." -#: models.py:132 models.py:309 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:119 msgid "Error message" msgstr "Error message" -#: models.py:135 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:122 msgid "An error message that will be displayed if the form doesn't validate." msgstr "An error message that will be displayed if the form doesn't validate." -#: models.py:139 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:126 msgid "Success message" msgstr "Success message" -#: models.py:142 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:129 msgid "An success message that will be displayed." msgstr "An success message that will be displayed." -#: models.py:145 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:132 msgid "Redirect to" msgstr "Redirect to" -#: models.py:148 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:135 msgid "Where to redirect the user when the form has been successfully sent?" msgstr "Where to redirect the user when the form has been successfully sent?" -#: models.py:154 models.py:296 models.py:345 models.py:463 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:140 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:373 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:439 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:604 msgid "custom css classes" msgstr "custom css classes" -#: models.py:156 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:142 msgid "form template" msgstr "form template" -#: models.py:168 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:154 msgid "People who will get the form content via e-mail." msgstr "People who will get the form content via e-mail." -#: models.py:294 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:158 +msgid "Action backend" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:165 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:413 +msgid "Attributes" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:177 +msgid "CMS Page (condition is false)" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:185 +msgid "Condition field" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:186 +msgid "" +"This field is used to enable condition logic. If field doesn't match the " +"condition value then redirect and notification works as usual. If value of " +"the field matches the condition value field then custom redirect and " +"notification will be used." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:193 +msgid "Condition field value" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:197 +msgid "Enable autofill from url parameters" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:199 +msgid "" +"Eg if you open the form with a url that contains parameters as 'https://" +"example.com/sub-page/?email=hello@example.com&name=Alex', then the fields " +"'email' and 'name' are going to to be filled in automatically." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:371 msgid "Legend" msgstr "Legend" -#: models.py:307 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:386 +msgid "Used to set the field name" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:389 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:602 +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/display/submission_data.html:4 +msgid "Label" +msgstr "Label" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:390 msgid "Field is required" msgstr "Field is required" -#: models.py:312 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:392 +#, fuzzy +#| msgid "Field is required" +msgid "Field required error message" +msgstr "Field is required" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:395 msgid "" "Error message displayed if the required field is left empty. Default: \"This " "field is required\"." @@ -501,11 +527,11 @@ msgstr "" "Error message displayed if the required field is left empty. Default: \"This " "field is required\"." -#: models.py:316 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:399 msgid "Placeholder text" msgstr "Placeholder text" -#: models.py:319 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:402 msgid "" "Default text in a form. Disappears when user starts typing. Example: " "\"email@example.com\"" @@ -513,35 +539,49 @@ msgstr "" "Default text in a form. Disappears when user starts typing. Example: " "\"email@example.com\"" -#: models.py:323 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:406 msgid "Help text" msgstr "Help text" -#: models.py:326 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:409 msgid "Explanatory text displayed next to input field. Just like this one." msgstr "Explanatory text displayed next to input field. Just like this one." -#: models.py:333 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:421 msgid "Min value" msgstr "Min value" -#: models.py:339 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:427 msgid "Max value" msgstr "Max value" -#: models.py:380 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:432 +#, fuzzy +#| msgid "Min value" +msgid "Initial value" +msgstr "Min value" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:435 +msgid "Default value of field." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:467 +msgid "The \"name\" field cannot contain spaces." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:480 msgid "columns" msgstr "columns" -#: models.py:382 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:482 msgid "rows" msgstr "rows" -#: models.py:387 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:487 msgid "send notification when form is submitted" msgstr "send notification when form is submitted" -#: models.py:389 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:489 msgid "" "When checked, the value of this field will be used to send an email " "notification." @@ -549,27 +589,27 @@ msgstr "" "When checked, the value of this field will be used to send an email " "notification." -#: models.py:393 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:493 msgid "email subject" msgstr "email subject" -#: models.py:397 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:497 msgid "Used as the email subject when email_send_notification is checked." msgstr "Used as the email subject when email_send_notification is checked." -#: models.py:401 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:501 msgid "Additional email body" msgstr "Additional email body" -#: models.py:404 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:504 msgid "Additional body text used when email notifications are active." msgstr "Additional body text used when email notifications are active." -#: models.py:411 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:511 msgid "Upload files to" msgstr "Upload files to" -#: models.py:412 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:512 msgid "" "Select a folder to which all files submitted through this field will be " "uploaded to." @@ -577,11 +617,11 @@ msgstr "" "Select a folder to which all files submitted through this field will be " "uploaded to." -#: models.py:416 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:517 msgid "Maximum file size" msgstr "Maximum file size" -#: models.py:418 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:519 msgid "" "The maximum file size of the upload, in bytes. You can use common size " "suffixes (kB, MB, GB, ...)." @@ -589,85 +629,216 @@ msgstr "" "The maximum file size of the upload, in bytes. You can use common size " "suffixes (kB, MB, GB, ...)." -#: models.py:432 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:524 +msgid "Allowed extensions" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:529 +msgid "" +"Comma-separated list of file extensions allowed for this file field. Leave " +"it empty to allow any extension." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:535 +msgid "Invalid extension error message" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:538 +msgid "" +"Error message displayed if extensions are constrained and the uploaded file " +"fails that validation.Default: \"File extension [extension] is not allowed " +"for this field.\"" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:542 +msgid "Store this file to filer" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:546 +msgid "" +"Whether to store this file to filer. If this is unchecked and this file is " +"not attached to any email notification, the file will be lost forever and " +"using it as a template variable in any email template will return empty " +"result." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:565 msgid "Maximum image width" msgstr "Maximum image width" -#: models.py:434 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:567 msgid "The maximum width of the uploaded image, in pixels." msgstr "The maximum width of the uploaded image, in pixels." -#: models.py:437 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:570 msgid "Maximum image height" msgstr "Maximum image height" -#: models.py:439 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:572 msgid "The maximum height of the uploaded image, in pixels." msgstr "The maximum height of the uploaded image, in pixels." -#: models.py:447 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:578 +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/display/submission_data.html:5 +msgid "Value" +msgstr "Value" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:580 +msgid "Position" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:583 msgid "Option" msgstr "" -#: models.py:448 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:584 msgid "Options" msgstr "" -#: models.py:474 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:616 msgid "form name" msgstr "form name" -#: models.py:480 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:622 msgid "users notified" msgstr "users notified" -#: models.py:482 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:624 msgid "People who got a notification when form was submitted." msgstr "People who got a notification when form was submitted." -#: models.py:486 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:628 msgid "form language" msgstr "form language" -#: models.py:492 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:634 msgid "form url" msgstr "form url" -#: models.py:500 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:642 msgid "Form submission" msgstr "Form submission" -#: models.py:501 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:643 msgid "Form submissions" msgstr "Form submissions" -#: templates/aldryn_forms/form.html:15 +#: addons-dev/aldryn-forms/aldryn_forms/sizefield/models.py:11 +msgid "Incorrect file size format." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/sizefield/utils.py:79 #, python-format -msgid "" -"\n" -" Thank you for submitting your information, you will be\n" -" redirected shortly.\n" -" " +msgid "Size '%s' has incorrect format" msgstr "" -"\n" -" Thank you for submitting your information, you will be\n" -" redirected shortly.\n" -" " -#: validators.py:35 +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/display/submission_data.html:3 +msgid "Field" +msgstr "Field" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/export.html:5 +msgid "Export form submissions" +msgstr "Export form submissions" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/export.html:8 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "Please correct the error below." +msgstr[1] "Please correct the errors below." + +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/export.html:30 +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/export_wizard.html:11 +msgid "Export" +msgstr "Export" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/export_wizard.html:13 +msgid "Continue" +msgstr "Continue" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/formsubmission/change_list.html:9 +msgid "Export Form Entries" +msgstr "Export Form Entries" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/email_notifications/emails/notification.body.html:9 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/email_notifications/emails/notification.body.txt:8 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/emails/notification.body.html:3 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/emails/notification.body.txt:2 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/emails/user/notification.body.txt:7 +#, python-format +msgid "Form name: %(form_name)s" +msgstr "Form name: %(form_name)s" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/email_notifications/emails/notification.subject.txt:1 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/emails/notification.subject.txt:1 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/emails/user/notification.subject.txt:1 +#, python-format +msgid "[Form submission] %(form_name)s" +msgstr "[Form submission] %(form_name)s" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/field.html:14 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/fields/multiplecheckboxselectfield.html:9 +msgid "Required field" +msgstr "Required field" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/form.html:19 +#, fuzzy, python-format +#| msgid "" +#| "Thank you for submitting your information, you will be redirected shortly." +msgid "You will be redirected shortly." +msgstr "" +"Thank you for submitting your information, you will be redirected shortly." + +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/form.html:23 +msgid "Thank you for submitting your information." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/validators.py:32 +#, python-brace-format +msgid "File extension '{extension}' is not allowed for this field." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/validators.py:60 #, python-format msgid "" "You have to choose at least %(limit_value)d options (chosen %(show_value)d)." msgstr "" "You have to choose at least %(limit_value)d options (chosen %(show_value)d)." -#: validators.py:41 +#: addons-dev/aldryn-forms/aldryn_forms/validators.py:66 #, python-format msgid "" "You can't choose more than %(limit_value)d options (chosen %(show_value)d)." msgstr "" "You can't choose more than %(limit_value)d options (chosen %(show_value)d)." +#~ msgid "The form has been sent." +#~ msgstr "The form has been sent." + +#, python-brace-format +#~ msgid "" +#~ "variables can be used with by wrapping with \"${variable}\" like " +#~ "${variable}" +#~ msgstr "" +#~ "variables can be used with by wrapping with \"${variable}\" like " +#~ "${variable}" + +#~ msgid "Form (Advanced)" +#~ msgstr "Form (Advanced)" + +#, python-format +#~ msgid "" +#~ "\n" +#~ " Thank you for submitting your information, you will be\n" +#~ " redirected shortly.\n" +#~ " " +#~ msgstr "" +#~ "\n" +#~ " Thank you for submitting your information, you will be\n" +#~ " redirected shortly.\n" +#~ " " + #~ msgid "" #~ "\n" #~ " Please correct the error below." diff --git a/aldryn_forms/locale/fr/LC_MESSAGES/django.mo b/aldryn_forms/locale/fr/LC_MESSAGES/django.mo index e017fe8d26e2fae72da30ef9321480f5725137a9..29a87c3c0e2d9f04d7b6fdafdbef45ae39cf7623 100644 GIT binary patch delta 2837 zcmYk-eN5F=9LMp)Gx8K54y2-sAF&?|q$f?(d%8Ip1@BKaMy4 zUE{nK>3hmhoJ2ek<#hxE_~cIck7LY`{(|!g+ifBl&U?KSY155A*!48B1vQV=T@f zH!@dI6TXhR{&x)2vj3q{Mu*n}o(n3FB$x) Ht{>_Yy`n|y@h5NhC$aS48kwRj1& zkSH$NjSkdxPSlNGM~!;|gOv7nsc3*25xjYT!Q9 z0B>PCzK_~d{{&-BV+qdUPpFlB^e`_Y9Kk*K4QgRo?4L5R3pIW{a%0nl;d=i2skG2> z3^l-Ss4a*{@=PQim(yO2B*RqULwFFi(l=0tcMyB=1LV&{lP0xuQ4_pi9Y-x}3M06` znWv(?yn!q6Hj-Tv$6d*i$+hl8?Qth+fYYeVokRWp5*FYbk}MOQ7#k@=zqpCL1+iHR`%{%)@T< z!%uAg7;1u(s53Qd`+r28A?HmhtEv2jkE0{g^P*`$FWN1H22eU13ElJs;yL0eLM4cJ zn$QH9uPG&V6Do&1xIgvAAo-YK}*)xo37kI;cEBQ_FQL;#^f zd#^k}h23%=$X?r7g8iir?H zMel@7gwE0ZCEGR*U;@!ZY#^Em6^>lB>7b(jY$^qWFR_zIC+;tWG$M!^B9C~UNFiP# z4iY-eDh|T+MeuoF*FbovpDR43&v)?aWg7=`<1U7jH+8o4HMQ-_OKR;IycJhBxHUe* UbtnF!pKEgY34hm(^m)Jk0GfvYkpKVy delta 3756 zcmbW(e{5Cd9mnxUX^WOppw>=6^r8H^wJj8cBBc}*iYP?|%77x2(|b?vJ#v4Pd+sfi zj@=D4Fo`y%6O8#e)?o#n!8RPj z8*vJaQ*a)(<1)Mr3#cxR<3t<@&rjia&i{nlxXg@EDW##FtLW1##422YH{b)vkBM>U z#w@PJF+74bmByUJ=dlcTPYUjf<2{@Y;`i_j>N)SA2K*kD@qF_c6^-=YxE@O<2N!Ha z7Q;l5Uzr4Ifcx<#d?ajt8u>9Va?k^QkJsZLa67(+noxwNZpG!O>xQt5=bNKc)bTS| zjxV4(IDxbA6!K%vaj3?NsFj&WuXAuF>i)Y?_iskszY7~Mfm(qlQ7L;7HL+1FTubGT zR2Zar6}5zaL*?i_Y{n0<32S+(uG@^OFoqhyFL64)ihAG&SdZ0=b}p_$x-fCn01u!B z{Ae}nuMQrkf%KUZs2g5EwuSi!JMj`~58Ti2m5QCADO86CF@=wzX8JkyU}cRli*YaB zj?bg+e;e<@^EIr$mbj6-l#@-k5x3zQJdWe=0%|~?;(F8u=ztEq6_29!#7PcXxiQp? z-$pI)@c)n?(lEW2f@wegm zTd0(*n;q@})Bw6rE3gNZe+)WKFNt1yoG z8*nW2436Xc@1f_y_VcI}8P9TQGgab!Sc7foqWXOfAHbKe8B6B{E7FQO@1Do{FQM`? z8tU=Ss3p3Hdf%%Uwl%yPj-Z3TKwUqsF8I<_q56rS+M96@+mY>J zPSvsg2dKPD!yUMTr^qKz7yJdc<3CX!lC_Mo3RO@ENZ194Z#B&FwS`kK7`LA zV>1&QgMORwI?lHgs3=#v!iEDlf%At^o8}1WeLjYo>C321HWr?LfPC!CzryoL^Mki% zCaRx$)PR?UwxKp$Ql-^O z6PpPY4RSFNB{UEfvRM2(p!yynsrO%bTuIzb{Fr!{xRbb+Agy1QgVa_K8A40WmMMM# zp;(kAmHP?pDV3Q4rWN;wbsky#uC(JsohT1lIu&i2%3_UAEN&sXi0i|)L!o+WR9MyG ze?xk0wNZaStRfPG(yBe6@Av1e?8B)^m)6b-h(8YXUAGHUHohnt{6sz7@sN!EumSM3fM-h!#R+ z3gHt?ge9_sHko#MicpypP&_W!oQ;IXN$rZYW-~W1p8y+8+0+ zep(%y$hy5NYUf0BOShkoMqS_U&S#T#er;RUjd@u&nsZ~;Ph_&WK9h9Q)-Q3>x%nf0_5PB3 z`<<-k^dw#1Mx8Xjwt1iF?DKL7+cRMIWu3l0EnKmocJ|=q%MaGtq_@Yl-)I>+e^cAs z&c@YQx45*8Yn+_hViz?nT-w-lN8_R;cG1F?re*a_l%Y9OUm7|$wX34TNyqa}oa=hC zLo25>6v{Wa*{Ek@^PK*SN9r>9l;_+2jQ`E7`3ed{EX?g2Y`JePILzsury@zLSa zCtMqI(!R~7>C(?R>0B{sX3M4y>x}eGd!e*?EvuDJI^@>-bqr*8K9u8vu$gk$UUb<6>yqqK7_PP0f qQXMRj&F8$N=Z_9^37bGyy6LDB%d!O4>35^{%KSz%snit-Hva*>@Gw3A diff --git a/aldryn_forms/locale/fr/LC_MESSAGES/django.po b/aldryn_forms/locale/fr/LC_MESSAGES/django.po index 89e76bb7..5d9fe0a2 100644 --- a/aldryn_forms/locale/fr/LC_MESSAGES/django.po +++ b/aldryn_forms/locale/fr/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. -# +# # Translators: # Frigory33 , 2016 # Nicolas PASCAL , 2016 @@ -11,399 +11,366 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-25 21:09+0000\n" +"POT-Creation-Date: 2024-03-08 18:39+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Adrien Delhorme , 2017\n" "Language-Team: French (https://www.transifex.com/divio/teams/58664/fr/)\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: admin/base.py:39 +#: addons-dev/aldryn-forms/aldryn_forms/action_backends.py:12 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:98 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:579 +msgid "Default" +msgstr "Par défaut" + +#: addons-dev/aldryn-forms/aldryn_forms/action_backends.py:21 +#, fuzzy +#| msgid "Email Field" +msgid "Email only" +msgstr "Champ de courriel" + +#: addons-dev/aldryn-forms/aldryn_forms/action_backends.py:29 +msgid "None" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/admin/base.py:35 msgid "data" msgstr "données" -#: admin/base.py:55 +#: addons-dev/aldryn-forms/aldryn_forms/admin/base.py:51 msgid "people notified" msgstr "personnes notifiées" -#: admin/forms.py:33 +#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:33 msgid "from date" msgstr "depuis le" -#: admin/forms.py:38 +#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:38 msgid "to date" msgstr "jusqu'au" -#: admin/forms.py:43 +#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:43 msgid "language" msgstr "langue" -#: admin/forms.py:58 +#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:58 msgid "" "Export failed! More than 65,536 entries found, exceeded Excel limitation!" msgstr "" "L'export a échoué ! Le nombre de lignes (supérieur à 65 536) dépasse la " "limite d'Excel !" -#: admin/forms.py:132 +#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:132 msgid "Please select at least one field to export." msgstr "Veuillez sélectionner au moins un champ à exporter." -#: admin/views.py:69 +#: addons-dev/aldryn-forms/aldryn_forms/admin/views.py:68 msgid "No records found" msgstr "Aucun enregistrement trouvé" -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/display/submission_data.html:3 -#: boilerplates/legacy/templates/admin/aldryn_forms/display/submission_data.html:3 -#: templates/admin/aldryn_forms/display/submission_data.html:3 -msgid "Field" -msgstr "Champ" - -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/display/submission_data.html:4 -#: boilerplates/legacy/templates/admin/aldryn_forms/display/submission_data.html:4 -#: models.py:306 models.py:461 -#: templates/admin/aldryn_forms/display/submission_data.html:4 -msgid "Label" -msgstr "Libellé" - -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/display/submission_data.html:5 -#: boilerplates/legacy/templates/admin/aldryn_forms/display/submission_data.html:5 -#: models.py:451 templates/admin/aldryn_forms/display/submission_data.html:5 -msgid "Value" -msgstr "Valeur" - -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/export.html:5 -#: boilerplates/legacy/templates/admin/aldryn_forms/export.html:4 -#: boilerplates/legacy/templates/admin/aldryn_forms/export_wizard.html:4 -#: templates/admin/aldryn_forms/export.html:5 -msgid "Export form submissions" -msgstr "Exporter les soumissions du formulaire" - -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/export.html:8 -#: boilerplates/legacy/templates/admin/aldryn_forms/export.html:7 -#: boilerplates/legacy/templates/admin/aldryn_forms/export_wizard.html:7 -#: templates/admin/aldryn_forms/export.html:8 -msgid "Please correct the error below." -msgid_plural "Please correct the errors below." -msgstr[0] "Veuillez corriger l'erreur ci-dessous." -msgstr[1] "Veuillez corriger les erreurs ci-dessous." - -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/export.html:30 -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/export_wizard.html:11 -#: boilerplates/legacy/templates/admin/aldryn_forms/export.html:27 -#: boilerplates/legacy/templates/admin/aldryn_forms/export_wizard.html:30 -#: templates/admin/aldryn_forms/export.html:30 -#: templates/admin/aldryn_forms/export_wizard.html:11 -msgid "Export" -msgstr "Exporter" - -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/export_wizard.html:13 -#: boilerplates/legacy/templates/admin/aldryn_forms/export_wizard.html:32 -#: templates/admin/aldryn_forms/export_wizard.html:13 -msgid "Continue" -msgstr "Continuer" - -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/formsubmission/change_list.html:9 -#: boilerplates/legacy/templates/admin/aldryn_forms/formsubmission/change_list.html:9 -#: templates/admin/aldryn_forms/formsubmission/change_list.html:9 -msgid "Export Form Entries" -msgstr "Exporter les entrées de formulaire" - -#: boilerplates/bootstrap3/templates/aldryn_forms/email_notifications/emails/notification.body.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/email_notifications/emails/notification.body.txt:8 -#: boilerplates/bootstrap3/templates/aldryn_forms/emails/notification.body.html:3 -#: boilerplates/bootstrap3/templates/aldryn_forms/emails/notification.body.txt:2 -#: boilerplates/bootstrap3/templates/aldryn_forms/emails/user/notification.body.txt:5 -#: boilerplates/legacy/templates/aldryn_forms/email_notifications/emails/notification.body.html:9 -#: boilerplates/legacy/templates/aldryn_forms/email_notifications/emails/notification.body.txt:8 -#: boilerplates/legacy/templates/aldryn_forms/emails/notification.body.html:3 -#: boilerplates/legacy/templates/aldryn_forms/emails/notification.body.txt:2 -#: boilerplates/legacy/templates/aldryn_forms/emails/user/notification.body.txt:5 -#: templates/aldryn_forms/email_notifications/emails/notification.body.html:9 -#: templates/aldryn_forms/email_notifications/emails/notification.body.txt:8 -#: templates/aldryn_forms/emails/notification.body.html:3 -#: templates/aldryn_forms/emails/notification.body.txt:2 -#: templates/aldryn_forms/emails/user/notification.body.txt:5 -#, python-format -msgid "Form name: %(form_name)s" -msgstr "Nom du formulaire : %(form_name)s" - -#: boilerplates/bootstrap3/templates/aldryn_forms/email_notifications/emails/notification.subject.txt:1 -#: boilerplates/bootstrap3/templates/aldryn_forms/emails/notification.subject.txt:1 -#: boilerplates/bootstrap3/templates/aldryn_forms/emails/user/notification.subject.txt:1 -#: boilerplates/legacy/templates/aldryn_forms/email_notifications/emails/notification.subject.txt:1 -#: boilerplates/legacy/templates/aldryn_forms/emails/notification.subject.txt:1 -#: boilerplates/legacy/templates/aldryn_forms/emails/user/notification.subject.txt:1 -#: templates/aldryn_forms/email_notifications/emails/notification.subject.txt:1 -#: templates/aldryn_forms/emails/notification.subject.txt:1 -#: templates/aldryn_forms/emails/user/notification.subject.txt:1 -#, python-format -msgid "[Form submission] %(form_name)s" -msgstr "[Soumission du formulaire] %(form_name)s" - -#: boilerplates/bootstrap3/templates/aldryn_forms/field.html:7 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/emailfield.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/filefield.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/imagefield.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/multiplecheckboxselectfield.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/multipleselectfield.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/radioselectfield.html:8 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/selectfield.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/textareafield.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/textfield.html:9 -#: templates/aldryn_forms/field.html:14 -#: templates/aldryn_forms/fields/multiplecheckboxselectfield.html:9 -msgid "Required field" -msgstr "Champ requis" - -#: boilerplates/bootstrap3/templates/aldryn_forms/form.html:19 -#, python-format -msgid "" -"Thank you for submitting your information, you will be redirected shortly." -msgstr "" -"Merci d'avoir envoyé vos informations ; vous allez être redirigé·e dans un instant." - -#: cms_apps.py:9 cms_plugins.py:51 +#: addons-dev/aldryn-forms/aldryn_forms/cms_apps.py:8 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:54 msgid "Forms" msgstr "Formulaires" -#: cms_plugins.py:60 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:63 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:163 msgid "Form" msgstr "Formulaire" -#: cms_plugins.py:74 cms_plugins.py:242 cms_plugins.py:383 -#: contrib/email_notifications/cms_plugins.py:137 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:64 +#, fuzzy +#| msgid "Form fields" +msgid "Form types" +msgstr "Champs du formulaire" + +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:78 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:180 +msgid "Condition Logic" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:86 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:248 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:423 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:188 msgid "Advanced Settings" msgstr "Paramètres avancés" -#: cms_plugins.py:204 -msgid "The form has been sent." -msgstr "Le formulaire a été envoyé." - -#: cms_plugins.py:233 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:239 msgid "Fieldset" msgstr "Groupe de champs" -#: cms_plugins.py:252 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:276 msgid "Form fields" msgstr "Champs du formulaire" -#: cms_plugins.py:420 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:497 msgid "Text Field" msgstr "Champ de texte" -#: cms_plugins.py:444 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:501 msgid "Text Area Field" msgstr "Zone de texte" -#: cms_plugins.py:485 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:542 +#, fuzzy +#| msgid "Text Field" +msgid "Hidden Field" +msgstr "Champ de texte" + +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:550 +#, fuzzy +#| msgid "Text Field" +msgid "Phone Field" +msgstr "Champ de texte" + +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:555 +#, fuzzy +#| msgid "Text Field" +msgid "Number Field" +msgstr "Champ de texte" + +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:560 msgid "Email Field" msgstr "Champ de courriel" -#: cms_plugins.py:520 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:596 msgid "File upload field" msgstr "Champ de téléversement de fichier" -#: cms_plugins.py:600 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:696 msgid "Image upload field" msgstr "Champ de téléversement d'image" -#: cms_plugins.py:638 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:735 msgid "Yes/No Field" msgstr "Champ Oui/Non" -#: cms_plugins.py:659 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:759 msgid "Yes" msgstr "Oui" -#: cms_plugins.py:659 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:759 msgid "No" msgstr "Non" -#: cms_plugins.py:667 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:767 msgid "Select Field" msgstr "Liste déroulante" -#: cms_plugins.py:701 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:803 msgid "Multiple Select Field" msgstr "Champ de sélection multiple" -#: cms_plugins.py:737 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:842 msgid "Multiple Checkbox Field" msgstr "Champ de sélection multiple" -#: cms_plugins.py:741 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:846 msgid "Radio Select Field" msgstr "Champ de sélection radio" -#: cms_plugins.py:782 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:889 msgid "Captcha Field" msgstr "Champ de captcha" -#: cms_plugins.py:803 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:911 msgid "Submit Button" msgstr "Bouton Envoyer" -#: contrib/email_notifications/cms_plugins.py:26 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:28 msgid "new email notification" msgstr "nouvelle notification par courriel" -#: contrib/email_notifications/cms_plugins.py:27 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:29 msgid "new email notifications" msgstr "nouvelles notifications par courriel" -#: contrib/email_notifications/cms_plugins.py:51 models.py:165 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:50 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:151 msgid "Recipients" msgstr "Destinataires" -#: contrib/email_notifications/cms_plugins.py:63 -#, python-brace-format +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:62 +msgid "Attaching files to email" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:75 msgid "" -"variables can be used with by wrapping with \"${variable}\" like ${variable}" +"the variables can be used within the email body, email sender,and other " +"notification fields" msgstr "" -"les variables peuvent être utilisées en les encadrant avec \"${variable}\" " -"comme ${variable}" -#: contrib/email_notifications/cms_plugins.py:92 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:105 msgid "Email" msgstr "E-mail" -#: contrib/email_notifications/cms_plugins.py:117 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:131 msgid "available text variables" msgstr "variables de texte disponibles" -#: contrib/email_notifications/cms_plugins.py:121 -msgid "Form (Advanced)" -msgstr "Formulaire (avancé)" +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:154 +#, fuzzy +#| msgid "available text variables" +msgid "available file variables" +msgstr "variables de texte disponibles" -#: contrib/email_notifications/models.py:28 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:29 msgid "default" msgstr "par défaut" -#: contrib/email_notifications/models.py:62 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:66 msgid "Email notification" msgstr "Notification e-mail" -#: contrib/email_notifications/models.py:63 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:67 msgid "Email notifications" msgstr "Notifications e-mail" -#: contrib/email_notifications/models.py:66 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:70 msgid "theme" msgstr "thème" -#: contrib/email_notifications/models.py:68 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:72 msgid "Provides the base theme for the email." msgstr "Utilise le thème de base pour le courriel." -#: contrib/email_notifications/models.py:72 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:76 msgid "to name" msgstr "au nom" -#: contrib/email_notifications/models.py:77 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:81 msgid "to email" msgstr "à l'adresse électronique" -#: contrib/email_notifications/models.py:83 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:87 msgid "to user" msgstr "à l'utilisateur" -#: contrib/email_notifications/models.py:89 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:94 msgid "from name" msgstr "du nom" -#: contrib/email_notifications/models.py:94 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:99 msgid "from email" msgstr "du courriel" -#: contrib/email_notifications/models.py:99 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:104 +#, fuzzy +#| msgid "to email" +msgid "reply to email" +msgstr "à l'adresse électronique" + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:109 msgid "subject" msgstr "objet" -#: contrib/email_notifications/models.py:104 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:114 msgid "email body (txt)" msgstr "corps du courriel (txt)" -#: contrib/email_notifications/models.py:106 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:116 msgid "used when rendering the email in text only mode." msgstr "utilisé lors de l'affichage du courriel en mode texte." -#: contrib/email_notifications/models.py:109 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:119 msgid "email body (html)" msgstr "corps du courriel (html)" -#: contrib/email_notifications/models.py:111 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:121 msgid "used when rendering the email in html." msgstr "utilisé lors de l'affichage du courriel en HTML." -#: contrib/email_notifications/models.py:127 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:125 +#, fuzzy +#| msgid "Provides the base theme for the email." +msgid "Files to attach to the email" +msgstr "Utilise le thème de base pour le courriel." + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:128 +msgid "" +"Comma-separated list of file fields that should be attached directly to the " +"email." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:137 +msgid "Use if condition succeeded" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:138 +msgid "" +"This email notification will be used if condition field for the form is the " +"same as condition value (See Form plugin configuration -> Condition Logic)" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:151 msgid "Please provide a recipient." msgstr "Veuillez indiquer un destinataire." -#: contrib/email_notifications/notification.py:54 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/notification.py:53 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/notification.py:65 msgid "Fields" msgstr "Champs" -#: forms.py:28 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:29 #, python-format msgid "" "File size must be under %(max_size)s. Current file size is %(actual_size)s." msgstr "" -"La taille du fichier doit être inférieure à %(max_size)s. La taille actuelle" -" est %(actual_size)s." +"La taille du fichier doit être inférieure à %(max_size)s. La taille actuelle " +"est %(actual_size)s." -#: forms.py:63 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:82 #, python-format msgid "" "Image width must be under %(max_size)s pixels. Current width is " "%(actual_size)s pixels." msgstr "" -"La largeur de l'image doit être inférieure à %(max_size)s pixels. La largeur" -" actuelle est %(actual_size)s pixels." +"La largeur de l'image doit être inférieure à %(max_size)s pixels. La largeur " +"actuelle est %(actual_size)s pixels." -#: forms.py:73 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:92 #, python-format msgid "" "Image height must be under %(max_size)s pixels. Current height is " "%(actual_size)s pixels." msgstr "" -"La hauteur de l'image doit être inférieure à %(max_size)s pixels. La hauteur" -" actuelle est %(actual_size)s pixels." +"La hauteur de l'image doit être inférieure à %(max_size)s pixels. La hauteur " +"actuelle est %(actual_size)s pixels." -#: forms.py:168 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:188 msgid "Please provide CMS page for redirect." msgstr "Veuillez indiquer une page du CMS pour la redirection." -#: forms.py:172 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:193 msgid "Please provide an absolute URL for redirect." msgstr "Veuillez indiquer une URL absolue pour la redirection." -#: forms.py:216 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:240 msgid "Min value can not be greater than max value." msgstr "La valeur minimale doit être inférieure à la valeur maximale." -#: forms.py:225 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:249 msgid "Min length" msgstr "Longueur minimale" -#: forms.py:226 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:250 msgid "Required number of characters to type." msgstr "Nombre de caractères à saisir requis." -#: forms.py:228 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:252 msgid "Max length" msgstr "Longueur maximale" -#: forms.py:229 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:253 msgid "Maximum number of characters to type." msgstr "Nombre maximum de caractères à saisir." -#: forms.py:264 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:293 msgid "" "Explanatory text displayed next to input field. Just like this one. You can " "use MAXSIZE as a placeholder for the maximum size configured below." @@ -411,110 +378,168 @@ msgstr "" "Texte explicatif affiché à côté du champ. Tout comme celui-ci. Vous pouvez " "utiliser MAXSIZE pour reprendre la taille maximale configurée plus bas." -#: forms.py:277 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:306 msgid "" "Explanatory text displayed next to input field. Just like this one. You can " -"use MAXSIZE, MAXWIDTH, MAXHEIGHT as a placeholders for the maximum file size" -" and dimensions configured below." +"use MAXSIZE, MAXWIDTH, MAXHEIGHT as a placeholders for the maximum file size " +"and dimensions configured below." msgstr "" "Texte explicatif affiché à côté du champ. Tout comme celui-ci. Vous pouvez " "utiliser MAXSIZE, MAXWIDTH et MAXHEIGHT pour reprendre la taille et les " "dimensions maximales configurées plus bas." -#: forms.py:301 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:330 msgid "Min choices" msgstr "Choix au minimum" -#: forms.py:302 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:331 msgid "Required amount of elements to chose." msgstr "Nombre d'éléments à choisir au minimum." -#: forms.py:304 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:333 msgid "Max choices" msgstr "Choix au maximum" -#: forms.py:305 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:334 msgid "Maximum amount of elements to chose." msgstr "Nombre d'éléments à choisir au maximum." -#: models.py:111 models.py:452 -msgid "Default" -msgstr "Par défaut" - -#: models.py:119 models.py:151 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:106 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:170 msgid "CMS Page" msgstr "Page du CMS" -#: models.py:120 models.py:152 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:107 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:138 msgid "Absolute URL" msgstr "URL absolue" -#: models.py:127 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:114 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:384 msgid "Name" msgstr "Nom" -#: models.py:129 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:116 msgid "Used to filter out form submissions." msgstr "Utilisé pour filtrer les soumissions de formulaire." -#: models.py:132 models.py:309 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:119 msgid "Error message" msgstr "Message d'erreur" -#: models.py:135 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:122 msgid "An error message that will be displayed if the form doesn't validate." msgstr "" "Un message d'erreur qui sera affiché si la soumission du formulaire échoue." -#: models.py:139 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:126 msgid "Success message" msgstr "Message de validation" -#: models.py:142 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:129 msgid "An success message that will be displayed." msgstr "Un message qui sera affiché lorsque le formulaire sera soumis." -#: models.py:145 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:132 msgid "Redirect to" msgstr "Rediriger vers" -#: models.py:148 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:135 msgid "Where to redirect the user when the form has been successfully sent?" msgstr "Où rediriger l'utilisateur lorsque le formulaire a bien été envoyé ?" -#: models.py:154 models.py:296 models.py:345 models.py:463 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:140 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:373 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:439 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:604 msgid "custom css classes" msgstr "classes CSS personnalisées" -#: models.py:156 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:142 msgid "form template" msgstr "modèle de formulaire" -#: models.py:168 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:154 msgid "People who will get the form content via e-mail." msgstr "Personnes qui recevront le contenu du formulaire par courriel." -#: models.py:294 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:158 +msgid "Action backend" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:165 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:413 +msgid "Attributes" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:177 +msgid "CMS Page (condition is false)" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:185 +msgid "Condition field" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:186 +msgid "" +"This field is used to enable condition logic. If field doesn't match the " +"condition value then redirect and notification works as usual. If value of " +"the field matches the condition value field then custom redirect and " +"notification will be used." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:193 +msgid "Condition field value" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:197 +msgid "Enable autofill from url parameters" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:199 +msgid "" +"Eg if you open the form with a url that contains parameters as 'https://" +"example.com/sub-page/?email=hello@example.com&name=Alex', then the fields " +"'email' and 'name' are going to to be filled in automatically." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:371 msgid "Legend" msgstr "Légende" -#: models.py:307 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:386 +msgid "Used to set the field name" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:389 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:602 +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/display/submission_data.html:4 +msgid "Label" +msgstr "Libellé" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:390 msgid "Field is required" msgstr "Le champ est requis" -#: models.py:312 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:392 +#, fuzzy +#| msgid "Field is required" +msgid "Field required error message" +msgstr "Le champ est requis" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:395 msgid "" -"Error message displayed if the required field is left empty. Default: \"This" -" field is required\"." +"Error message displayed if the required field is left empty. Default: \"This " +"field is required\"." msgstr "" -"Message d'erreur affiché si le champ requis n'est pas rempli. Par défaut : «" -" Ce champ est requis »." +"Message d'erreur affiché si le champ requis n'est pas rempli. Par défaut : " +"« Ce champ est requis »." -#: models.py:316 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:399 msgid "Placeholder text" msgstr "Texte titulaire" -#: models.py:319 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:402 msgid "" "Default text in a form. Disappears when user starts typing. Example: " "\"email@example.com\"" @@ -522,35 +547,49 @@ msgstr "" "Texte par défaut. Disparaît lorsque l'utilisateur commence à saisir du " "texte. Par exemple : \"email@exemple.fr\"" -#: models.py:323 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:406 msgid "Help text" msgstr "Texte d'aide" -#: models.py:326 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:409 msgid "Explanatory text displayed next to input field. Just like this one." msgstr "Texte explicatif affiché à côté du champ. Tout comme celui-ci." -#: models.py:333 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:421 msgid "Min value" msgstr "Valeur minimale" -#: models.py:339 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:427 msgid "Max value" msgstr "Valeur maximale" -#: models.py:380 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:432 +#, fuzzy +#| msgid "Min value" +msgid "Initial value" +msgstr "Valeur minimale" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:435 +msgid "Default value of field." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:467 +msgid "The \"name\" field cannot contain spaces." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:480 msgid "columns" msgstr "colonnes" -#: models.py:382 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:482 msgid "rows" msgstr "lignes" -#: models.py:387 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:487 msgid "send notification when form is submitted" msgstr "envoyer une notification lorsque le formulaire est validé" -#: models.py:389 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:489 msgid "" "When checked, the value of this field will be used to send an email " "notification." @@ -558,31 +597,31 @@ msgstr "" "Si coché, la valeur de ce champ sera utilisée pour envoyer une notification " "par courriel." -#: models.py:393 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:493 msgid "email subject" msgstr "objet du courriel" -#: models.py:397 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:497 msgid "Used as the email subject when email_send_notification is checked." msgstr "" -"Utilisé comme objet du courriel lorsque l'envoi de notification par courriel" -" est coché." +"Utilisé comme objet du courriel lorsque l'envoi de notification par courriel " +"est coché." -#: models.py:401 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:501 msgid "Additional email body" msgstr "Texte supplémentaire du courriel" -#: models.py:404 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:504 msgid "Additional body text used when email notifications are active." msgstr "" "Texte supplémentaire dans le courriel utilisé lorsque les notifications par " "courriel sont activées." -#: models.py:411 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:511 msgid "Upload files to" msgstr "Téléverser les fichiers dans" -#: models.py:412 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:512 msgid "" "Select a folder to which all files submitted through this field will be " "uploaded to." @@ -590,11 +629,11 @@ msgstr "" "Sélectionnez un dossier dans lequel tous les fichiers envoyés via ce champ " "seront enregistrés." -#: models.py:416 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:517 msgid "Maximum file size" msgstr "Taille de fichier maximale" -#: models.py:418 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:519 msgid "" "The maximum file size of the upload, in bytes. You can use common size " "suffixes (kB, MB, GB, ...)." @@ -602,72 +641,178 @@ msgstr "" "La taille de fichier maximale d'un téléversement, en octets. Vous pouvez " "utiliser les suffixes courants (kB, MB, GB…)." -#: models.py:432 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:524 +msgid "Allowed extensions" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:529 +msgid "" +"Comma-separated list of file extensions allowed for this file field. Leave " +"it empty to allow any extension." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:535 +msgid "Invalid extension error message" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:538 +msgid "" +"Error message displayed if extensions are constrained and the uploaded file " +"fails that validation.Default: \"File extension [extension] is not allowed " +"for this field.\"" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:542 +msgid "Store this file to filer" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:546 +msgid "" +"Whether to store this file to filer. If this is unchecked and this file is " +"not attached to any email notification, the file will be lost forever and " +"using it as a template variable in any email template will return empty " +"result." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:565 msgid "Maximum image width" msgstr "Largeur maximale de l'image" -#: models.py:434 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:567 msgid "The maximum width of the uploaded image, in pixels." msgstr "La largeur maximale de l'image téléversée, en pixels." -#: models.py:437 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:570 msgid "Maximum image height" msgstr "Hauteur maximale de l'image" -#: models.py:439 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:572 msgid "The maximum height of the uploaded image, in pixels." msgstr "La hauteur maximale de l'image téléversée, en pixels." -#: models.py:447 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:578 +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/display/submission_data.html:5 +msgid "Value" +msgstr "Valeur" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:580 +msgid "Position" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:583 msgid "Option" msgstr "Option" -#: models.py:448 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:584 msgid "Options" msgstr "Options" -#: models.py:474 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:616 msgid "form name" msgstr "nom du formulaire" -#: models.py:480 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:622 msgid "users notified" msgstr "utilisateurs notifiés" -#: models.py:482 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:624 msgid "People who got a notification when form was submitted." msgstr "" "Personnes qui ont reçu une notification lorsque le formulaire a été soumis." -#: models.py:486 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:628 msgid "form language" msgstr "langue du formulaire" -#: models.py:492 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:634 msgid "form url" msgstr "URL du formulaire" -#: models.py:500 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:642 msgid "Form submission" msgstr "Soumission de formulaire" -#: models.py:501 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:643 msgid "Form submissions" msgstr "Soumissions de formulaire" -#: templates/aldryn_forms/form.html:15 +#: addons-dev/aldryn-forms/aldryn_forms/sizefield/models.py:11 +msgid "Incorrect file size format." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/sizefield/utils.py:79 #, python-format -msgid "" -"\n" -" Thank you for submitting your information, you will be\n" -" redirected shortly.\n" -" " +msgid "Size '%s' has incorrect format" msgstr "" -"\n" -"Merci d'avoir soumis vos informations, vous allez être\n" -"redirigé·e dans un instant." -#: validators.py:35 +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/display/submission_data.html:3 +msgid "Field" +msgstr "Champ" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/export.html:5 +msgid "Export form submissions" +msgstr "Exporter les soumissions du formulaire" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/export.html:8 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "Veuillez corriger l'erreur ci-dessous." +msgstr[1] "Veuillez corriger les erreurs ci-dessous." + +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/export.html:30 +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/export_wizard.html:11 +msgid "Export" +msgstr "Exporter" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/export_wizard.html:13 +msgid "Continue" +msgstr "Continuer" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/formsubmission/change_list.html:9 +msgid "Export Form Entries" +msgstr "Exporter les entrées de formulaire" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/email_notifications/emails/notification.body.html:9 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/email_notifications/emails/notification.body.txt:8 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/emails/notification.body.html:3 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/emails/notification.body.txt:2 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/emails/user/notification.body.txt:7 +#, python-format +msgid "Form name: %(form_name)s" +msgstr "Nom du formulaire : %(form_name)s" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/email_notifications/emails/notification.subject.txt:1 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/emails/notification.subject.txt:1 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/emails/user/notification.subject.txt:1 +#, python-format +msgid "[Form submission] %(form_name)s" +msgstr "[Soumission du formulaire] %(form_name)s" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/field.html:14 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/fields/multiplecheckboxselectfield.html:9 +msgid "Required field" +msgstr "Champ requis" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/form.html:19 +#, fuzzy, python-format +#| msgid "" +#| "Thank you for submitting your information, you will be redirected shortly." +msgid "You will be redirected shortly." +msgstr "" +"Merci d'avoir envoyé vos informations ; vous allez être redirigé·e dans un instant." + +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/form.html:23 +msgid "Thank you for submitting your information." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/validators.py:32 +#, python-brace-format +msgid "File extension '{extension}' is not allowed for this field." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/validators.py:60 #, python-format msgid "" "You have to choose at least %(limit_value)d options (chosen %(show_value)d)." @@ -675,7 +820,7 @@ msgstr "" "Vous devez sélectionner au moins %(limit_value)d options (seulement " "%(show_value)d sont sélectionnées)." -#: validators.py:41 +#: addons-dev/aldryn-forms/aldryn_forms/validators.py:66 #, python-format msgid "" "You can't choose more than %(limit_value)d options (chosen %(show_value)d)." @@ -683,6 +828,31 @@ msgstr "" "Vous ne pouvez pas sélectionner plus de %(limit_value)d options " "(%(show_value)d sont sélectionnées)." +#~ msgid "The form has been sent." +#~ msgstr "Le formulaire a été envoyé." + +#, python-brace-format +#~ msgid "" +#~ "variables can be used with by wrapping with \"${variable}\" like " +#~ "${variable}" +#~ msgstr "" +#~ "les variables peuvent être utilisées en les encadrant avec " +#~ "\"${variable}\" comme ${variable}" + +#~ msgid "Form (Advanced)" +#~ msgstr "Formulaire (avancé)" + +#, python-format +#~ msgid "" +#~ "\n" +#~ " Thank you for submitting your information, you will be\n" +#~ " redirected shortly.\n" +#~ " " +#~ msgstr "" +#~ "\n" +#~ "Merci d'avoir soumis vos informations, vous allez être\n" +#~ "redirigé·e dans un instant." + #~ msgid "" #~ "\n" #~ " Please correct the error below." diff --git a/aldryn_forms/locale/it/LC_MESSAGES/django.mo b/aldryn_forms/locale/it/LC_MESSAGES/django.mo index 0e50878304b84d87a4cd3d854494f6028a1ee725..6032af1ee72fddb6eaf49c402cafbedb975d243a 100644 GIT binary patch delta 35 rcmZ3;{DWzN3Zvab)xe4K^Lcy{^U_Nb(^IV!GD{}&GDc4>Wz+!x-vtZM delta 71 zcmeytw2*m%3S;_2)j+inUFV|I#FEVXJYAQ>l2j`NBLhQoT>}eUBU1$, YEAR. -# +# msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-25 21:09+0000\n" +"POT-Creation-Date: 2024-03-08 18:39+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Language-Team: Italian (https://www.transifex.com/divio/teams/58664/it/)\n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: admin/base.py:39 +#: addons-dev/aldryn-forms/aldryn_forms/action_backends.py:12 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:98 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:579 +msgid "Default" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/action_backends.py:21 +msgid "Email only" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/action_backends.py:29 +msgid "None" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/admin/base.py:35 msgid "data" msgstr "" -#: admin/base.py:55 +#: addons-dev/aldryn-forms/aldryn_forms/admin/base.py:51 msgid "people notified" msgstr "" -#: admin/forms.py:33 +#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:33 msgid "from date" msgstr "" -#: admin/forms.py:38 +#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:38 msgid "to date" msgstr "" -#: admin/forms.py:43 +#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:43 msgid "language" msgstr "" -#: admin/forms.py:58 +#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:58 msgid "" "Export failed! More than 65,536 entries found, exceeded Excel limitation!" msgstr "" -#: admin/forms.py:132 +#: addons-dev/aldryn-forms/aldryn_forms/admin/forms.py:132 msgid "Please select at least one field to export." msgstr "" -#: admin/views.py:69 +#: addons-dev/aldryn-forms/aldryn_forms/admin/views.py:68 msgid "No records found" msgstr "" -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/display/submission_data.html:3 -#: boilerplates/legacy/templates/admin/aldryn_forms/display/submission_data.html:3 -#: templates/admin/aldryn_forms/display/submission_data.html:3 -msgid "Field" -msgstr "" - -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/display/submission_data.html:4 -#: boilerplates/legacy/templates/admin/aldryn_forms/display/submission_data.html:4 -#: models.py:306 models.py:461 -#: templates/admin/aldryn_forms/display/submission_data.html:4 -msgid "Label" -msgstr "" - -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/display/submission_data.html:5 -#: boilerplates/legacy/templates/admin/aldryn_forms/display/submission_data.html:5 -#: models.py:451 templates/admin/aldryn_forms/display/submission_data.html:5 -msgid "Value" -msgstr "" - -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/export.html:5 -#: boilerplates/legacy/templates/admin/aldryn_forms/export.html:4 -#: boilerplates/legacy/templates/admin/aldryn_forms/export_wizard.html:4 -#: templates/admin/aldryn_forms/export.html:5 -msgid "Export form submissions" -msgstr "" - -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/export.html:8 -#: boilerplates/legacy/templates/admin/aldryn_forms/export.html:7 -#: boilerplates/legacy/templates/admin/aldryn_forms/export_wizard.html:7 -#: templates/admin/aldryn_forms/export.html:8 -msgid "Please correct the error below." -msgid_plural "Please correct the errors below." -msgstr[0] "" -msgstr[1] "" - -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/export.html:30 -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/export_wizard.html:11 -#: boilerplates/legacy/templates/admin/aldryn_forms/export.html:27 -#: boilerplates/legacy/templates/admin/aldryn_forms/export_wizard.html:30 -#: templates/admin/aldryn_forms/export.html:30 -#: templates/admin/aldryn_forms/export_wizard.html:11 -msgid "Export" -msgstr "" - -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/export_wizard.html:13 -#: boilerplates/legacy/templates/admin/aldryn_forms/export_wizard.html:32 -#: templates/admin/aldryn_forms/export_wizard.html:13 -msgid "Continue" -msgstr "" - -#: boilerplates/bootstrap3/templates/admin/aldryn_forms/formsubmission/change_list.html:9 -#: boilerplates/legacy/templates/admin/aldryn_forms/formsubmission/change_list.html:9 -#: templates/admin/aldryn_forms/formsubmission/change_list.html:9 -msgid "Export Form Entries" -msgstr "" - -#: boilerplates/bootstrap3/templates/aldryn_forms/email_notifications/emails/notification.body.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/email_notifications/emails/notification.body.txt:8 -#: boilerplates/bootstrap3/templates/aldryn_forms/emails/notification.body.html:3 -#: boilerplates/bootstrap3/templates/aldryn_forms/emails/notification.body.txt:2 -#: boilerplates/bootstrap3/templates/aldryn_forms/emails/user/notification.body.txt:5 -#: boilerplates/legacy/templates/aldryn_forms/email_notifications/emails/notification.body.html:9 -#: boilerplates/legacy/templates/aldryn_forms/email_notifications/emails/notification.body.txt:8 -#: boilerplates/legacy/templates/aldryn_forms/emails/notification.body.html:3 -#: boilerplates/legacy/templates/aldryn_forms/emails/notification.body.txt:2 -#: boilerplates/legacy/templates/aldryn_forms/emails/user/notification.body.txt:5 -#: templates/aldryn_forms/email_notifications/emails/notification.body.html:9 -#: templates/aldryn_forms/email_notifications/emails/notification.body.txt:8 -#: templates/aldryn_forms/emails/notification.body.html:3 -#: templates/aldryn_forms/emails/notification.body.txt:2 -#: templates/aldryn_forms/emails/user/notification.body.txt:5 -#, python-format -msgid "Form name: %(form_name)s" +#: addons-dev/aldryn-forms/aldryn_forms/cms_apps.py:8 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:54 +msgid "Forms" msgstr "" -#: boilerplates/bootstrap3/templates/aldryn_forms/email_notifications/emails/notification.subject.txt:1 -#: boilerplates/bootstrap3/templates/aldryn_forms/emails/notification.subject.txt:1 -#: boilerplates/bootstrap3/templates/aldryn_forms/emails/user/notification.subject.txt:1 -#: boilerplates/legacy/templates/aldryn_forms/email_notifications/emails/notification.subject.txt:1 -#: boilerplates/legacy/templates/aldryn_forms/emails/notification.subject.txt:1 -#: boilerplates/legacy/templates/aldryn_forms/emails/user/notification.subject.txt:1 -#: templates/aldryn_forms/email_notifications/emails/notification.subject.txt:1 -#: templates/aldryn_forms/emails/notification.subject.txt:1 -#: templates/aldryn_forms/emails/user/notification.subject.txt:1 -#, python-format -msgid "[Form submission] %(form_name)s" +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:63 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:163 +msgid "Form" msgstr "" -#: boilerplates/bootstrap3/templates/aldryn_forms/field.html:7 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/emailfield.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/filefield.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/imagefield.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/multiplecheckboxselectfield.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/multipleselectfield.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/radioselectfield.html:8 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/selectfield.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/textareafield.html:9 -#: boilerplates/bootstrap3/templates/aldryn_forms/fields/textfield.html:9 -#: templates/aldryn_forms/field.html:14 -#: templates/aldryn_forms/fields/multiplecheckboxselectfield.html:9 -msgid "Required field" +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:64 +msgid "Form types" msgstr "" -#: boilerplates/bootstrap3/templates/aldryn_forms/form.html:19 -#, python-format -msgid "" -"Thank you for submitting your information, you will be redirected shortly." +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:78 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:180 +msgid "Condition Logic" msgstr "" -#: cms_apps.py:9 cms_plugins.py:51 -msgid "Forms" +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:86 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:248 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:423 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:188 +msgid "Advanced Settings" msgstr "" -#: cms_plugins.py:60 -msgid "Form" +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:239 +msgid "Fieldset" msgstr "" -#: cms_plugins.py:74 cms_plugins.py:242 cms_plugins.py:383 -#: contrib/email_notifications/cms_plugins.py:137 -msgid "Advanced Settings" +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:276 +msgid "Form fields" msgstr "" -#: cms_plugins.py:204 -msgid "The form has been sent." +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:497 +msgid "Text Field" msgstr "" -#: cms_plugins.py:233 -msgid "Fieldset" +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:501 +msgid "Text Area Field" msgstr "" -#: cms_plugins.py:252 -msgid "Form fields" +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:542 +msgid "Hidden Field" msgstr "" -#: cms_plugins.py:420 -msgid "Text Field" +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:550 +msgid "Phone Field" msgstr "" -#: cms_plugins.py:444 -msgid "Text Area Field" +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:555 +msgid "Number Field" msgstr "" -#: cms_plugins.py:485 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:560 msgid "Email Field" msgstr "" -#: cms_plugins.py:520 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:596 msgid "File upload field" msgstr "" -#: cms_plugins.py:600 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:696 msgid "Image upload field" msgstr "" -#: cms_plugins.py:638 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:735 msgid "Yes/No Field" msgstr "" -#: cms_plugins.py:659 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:759 msgid "Yes" msgstr "" -#: cms_plugins.py:659 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:759 msgid "No" msgstr "" -#: cms_plugins.py:667 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:767 msgid "Select Field" msgstr "" -#: cms_plugins.py:701 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:803 msgid "Multiple Select Field" msgstr "" -#: cms_plugins.py:737 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:842 msgid "Multiple Checkbox Field" msgstr "" -#: cms_plugins.py:741 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:846 msgid "Radio Select Field" msgstr "" -#: cms_plugins.py:782 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:889 msgid "Captcha Field" msgstr "" -#: cms_plugins.py:803 +#: addons-dev/aldryn-forms/aldryn_forms/cms_plugins.py:911 msgid "Submit Button" msgstr "" -#: contrib/email_notifications/cms_plugins.py:26 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:28 msgid "new email notification" msgstr "" -#: contrib/email_notifications/cms_plugins.py:27 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:29 msgid "new email notifications" msgstr "" -#: contrib/email_notifications/cms_plugins.py:51 models.py:165 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:50 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:151 msgid "Recipients" msgstr "" -#: contrib/email_notifications/cms_plugins.py:63 -#, python-brace-format +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:62 +msgid "Attaching files to email" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:75 msgid "" -"variables can be used with by wrapping with \"${variable}\" like ${variable}" +"the variables can be used within the email body, email sender,and other " +"notification fields" msgstr "" -#: contrib/email_notifications/cms_plugins.py:92 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:105 msgid "Email" msgstr "" -#: contrib/email_notifications/cms_plugins.py:117 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:131 msgid "available text variables" msgstr "" -#: contrib/email_notifications/cms_plugins.py:121 -msgid "Form (Advanced)" +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/cms_plugins.py:154 +msgid "available file variables" msgstr "" -#: contrib/email_notifications/models.py:28 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:29 msgid "default" msgstr "" -#: contrib/email_notifications/models.py:62 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:66 msgid "Email notification" msgstr "" -#: contrib/email_notifications/models.py:63 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:67 msgid "Email notifications" msgstr "" -#: contrib/email_notifications/models.py:66 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:70 msgid "theme" msgstr "" -#: contrib/email_notifications/models.py:68 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:72 msgid "Provides the base theme for the email." msgstr "" -#: contrib/email_notifications/models.py:72 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:76 msgid "to name" msgstr "" -#: contrib/email_notifications/models.py:77 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:81 msgid "to email" msgstr "" -#: contrib/email_notifications/models.py:83 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:87 msgid "to user" msgstr "" -#: contrib/email_notifications/models.py:89 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:94 msgid "from name" msgstr "" -#: contrib/email_notifications/models.py:94 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:99 msgid "from email" msgstr "" -#: contrib/email_notifications/models.py:99 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:104 +msgid "reply to email" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:109 msgid "subject" msgstr "" -#: contrib/email_notifications/models.py:104 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:114 msgid "email body (txt)" msgstr "" -#: contrib/email_notifications/models.py:106 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:116 msgid "used when rendering the email in text only mode." msgstr "" -#: contrib/email_notifications/models.py:109 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:119 msgid "email body (html)" msgstr "" -#: contrib/email_notifications/models.py:111 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:121 msgid "used when rendering the email in html." msgstr "" -#: contrib/email_notifications/models.py:127 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:125 +msgid "Files to attach to the email" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:128 +msgid "" +"Comma-separated list of file fields that should be attached directly to the " +"email." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:137 +msgid "Use if condition succeeded" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:138 +msgid "" +"This email notification will be used if condition field for the form is the " +"same as condition value (See Form plugin configuration -> Condition Logic)" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/models.py:151 msgid "Please provide a recipient." msgstr "" -#: contrib/email_notifications/notification.py:54 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/notification.py:53 +#: addons-dev/aldryn-forms/aldryn_forms/contrib/email_notifications/notification.py:65 msgid "Fields" msgstr "" -#: forms.py:28 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:29 #, python-format msgid "" "File size must be under %(max_size)s. Current file size is %(actual_size)s." msgstr "" -#: forms.py:63 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:82 #, python-format msgid "" "Image width must be under %(max_size)s pixels. Current width is " "%(actual_size)s pixels." msgstr "" -#: forms.py:73 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:92 #, python-format msgid "" "Image height must be under %(max_size)s pixels. Current height is " "%(actual_size)s pixels." msgstr "" -#: forms.py:168 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:188 msgid "Please provide CMS page for redirect." msgstr "" -#: forms.py:172 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:193 msgid "Please provide an absolute URL for redirect." msgstr "" -#: forms.py:216 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:240 msgid "Min value can not be greater than max value." msgstr "" -#: forms.py:225 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:249 msgid "Min length" msgstr "" -#: forms.py:226 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:250 msgid "Required number of characters to type." msgstr "" -#: forms.py:228 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:252 msgid "Max length" msgstr "" -#: forms.py:229 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:253 msgid "Maximum number of characters to type." msgstr "" -#: forms.py:264 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:293 msgid "" "Explanatory text displayed next to input field. Just like this one. You can " "use MAXSIZE as a placeholder for the maximum size configured below." msgstr "" -#: forms.py:277 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:306 msgid "" "Explanatory text displayed next to input field. Just like this one. You can " -"use MAXSIZE, MAXWIDTH, MAXHEIGHT as a placeholders for the maximum file size" -" and dimensions configured below." +"use MAXSIZE, MAXWIDTH, MAXHEIGHT as a placeholders for the maximum file size " +"and dimensions configured below." msgstr "" -#: forms.py:301 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:330 msgid "Min choices" msgstr "" -#: forms.py:302 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:331 msgid "Required amount of elements to chose." msgstr "" -#: forms.py:304 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:333 msgid "Max choices" msgstr "" -#: forms.py:305 +#: addons-dev/aldryn-forms/aldryn_forms/forms.py:334 msgid "Maximum amount of elements to chose." msgstr "" -#: models.py:111 models.py:452 -msgid "Default" -msgstr "" - -#: models.py:119 models.py:151 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:106 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:170 msgid "CMS Page" msgstr "" -#: models.py:120 models.py:152 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:107 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:138 msgid "Absolute URL" msgstr "" -#: models.py:127 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:114 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:384 msgid "Name" msgstr "" -#: models.py:129 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:116 msgid "Used to filter out form submissions." msgstr "" -#: models.py:132 models.py:309 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:119 msgid "Error message" msgstr "" -#: models.py:135 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:122 msgid "An error message that will be displayed if the form doesn't validate." msgstr "" -#: models.py:139 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:126 msgid "Success message" msgstr "" -#: models.py:142 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:129 msgid "An success message that will be displayed." msgstr "" -#: models.py:145 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:132 msgid "Redirect to" msgstr "" -#: models.py:148 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:135 msgid "Where to redirect the user when the form has been successfully sent?" msgstr "" -#: models.py:154 models.py:296 models.py:345 models.py:463 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:140 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:373 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:439 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:604 msgid "custom css classes" msgstr "" -#: models.py:156 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:142 msgid "form template" msgstr "" -#: models.py:168 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:154 msgid "People who will get the form content via e-mail." msgstr "" -#: models.py:294 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:158 +msgid "Action backend" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:165 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:413 +msgid "Attributes" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:177 +msgid "CMS Page (condition is false)" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:185 +msgid "Condition field" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:186 +msgid "" +"This field is used to enable condition logic. If field doesn't match the " +"condition value then redirect and notification works as usual. If value of " +"the field matches the condition value field then custom redirect and " +"notification will be used." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:193 +msgid "Condition field value" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:197 +msgid "Enable autofill from url parameters" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:199 +msgid "" +"Eg if you open the form with a url that contains parameters as 'https://" +"example.com/sub-page/?email=hello@example.com&name=Alex', then the fields " +"'email' and 'name' are going to to be filled in automatically." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:371 msgid "Legend" msgstr "" -#: models.py:307 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:386 +msgid "Used to set the field name" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:389 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:602 +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/display/submission_data.html:4 +msgid "Label" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:390 msgid "Field is required" msgstr "" -#: models.py:312 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:392 +msgid "Field required error message" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:395 msgid "" -"Error message displayed if the required field is left empty. Default: \"This" -" field is required\"." +"Error message displayed if the required field is left empty. Default: \"This " +"field is required\"." msgstr "" -#: models.py:316 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:399 msgid "Placeholder text" msgstr "" -#: models.py:319 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:402 msgid "" "Default text in a form. Disappears when user starts typing. Example: " "\"email@example.com\"" msgstr "" -#: models.py:323 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:406 msgid "Help text" msgstr "" -#: models.py:326 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:409 msgid "Explanatory text displayed next to input field. Just like this one." msgstr "" -#: models.py:333 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:421 msgid "Min value" msgstr "" -#: models.py:339 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:427 msgid "Max value" msgstr "" -#: models.py:380 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:432 +msgid "Initial value" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:435 +msgid "Default value of field." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:467 +msgid "The \"name\" field cannot contain spaces." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:480 msgid "columns" msgstr "" -#: models.py:382 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:482 msgid "rows" msgstr "" -#: models.py:387 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:487 msgid "send notification when form is submitted" msgstr "" -#: models.py:389 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:489 msgid "" "When checked, the value of this field will be used to send an email " "notification." msgstr "" -#: models.py:393 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:493 msgid "email subject" msgstr "" -#: models.py:397 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:497 msgid "Used as the email subject when email_send_notification is checked." msgstr "" -#: models.py:401 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:501 msgid "Additional email body" msgstr "" -#: models.py:404 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:504 msgid "Additional body text used when email notifications are active." msgstr "" -#: models.py:411 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:511 msgid "Upload files to" msgstr "" -#: models.py:412 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:512 msgid "" "Select a folder to which all files submitted through this field will be " "uploaded to." msgstr "" -#: models.py:416 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:517 msgid "Maximum file size" msgstr "" -#: models.py:418 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:519 msgid "" "The maximum file size of the upload, in bytes. You can use common size " "suffixes (kB, MB, GB, ...)." msgstr "" -#: models.py:432 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:524 +msgid "Allowed extensions" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:529 +msgid "" +"Comma-separated list of file extensions allowed for this file field. Leave " +"it empty to allow any extension." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:535 +msgid "Invalid extension error message" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:538 +msgid "" +"Error message displayed if extensions are constrained and the uploaded file " +"fails that validation.Default: \"File extension [extension] is not allowed " +"for this field.\"" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:542 +msgid "Store this file to filer" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:546 +msgid "" +"Whether to store this file to filer. If this is unchecked and this file is " +"not attached to any email notification, the file will be lost forever and " +"using it as a template variable in any email template will return empty " +"result." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:565 msgid "Maximum image width" msgstr "" -#: models.py:434 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:567 msgid "The maximum width of the uploaded image, in pixels." msgstr "" -#: models.py:437 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:570 msgid "Maximum image height" msgstr "" -#: models.py:439 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:572 msgid "The maximum height of the uploaded image, in pixels." msgstr "" -#: models.py:447 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:578 +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/display/submission_data.html:5 +msgid "Value" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:580 +msgid "Position" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/models.py:583 msgid "Option" msgstr "" -#: models.py:448 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:584 msgid "Options" msgstr "" -#: models.py:474 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:616 msgid "form name" msgstr "" -#: models.py:480 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:622 msgid "users notified" msgstr "" -#: models.py:482 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:624 msgid "People who got a notification when form was submitted." msgstr "" -#: models.py:486 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:628 msgid "form language" msgstr "" -#: models.py:492 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:634 msgid "form url" msgstr "" -#: models.py:500 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:642 msgid "Form submission" msgstr "" -#: models.py:501 +#: addons-dev/aldryn-forms/aldryn_forms/models.py:643 msgid "Form submissions" msgstr "" -#: templates/aldryn_forms/form.html:15 +#: addons-dev/aldryn-forms/aldryn_forms/sizefield/models.py:11 +msgid "Incorrect file size format." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/sizefield/utils.py:79 #, python-format -msgid "" -"\n" -" Thank you for submitting your information, you will be\n" -" redirected shortly.\n" -" " +msgid "Size '%s' has incorrect format" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/display/submission_data.html:3 +msgid "Field" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/export.html:5 +msgid "Export form submissions" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/export.html:8 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "" +msgstr[1] "" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/export.html:30 +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/export_wizard.html:11 +msgid "Export" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/export_wizard.html:13 +msgid "Continue" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/admin/aldryn_forms/formsubmission/change_list.html:9 +msgid "Export Form Entries" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/email_notifications/emails/notification.body.html:9 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/email_notifications/emails/notification.body.txt:8 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/emails/notification.body.html:3 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/emails/notification.body.txt:2 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/emails/user/notification.body.txt:7 +#, python-format +msgid "Form name: %(form_name)s" msgstr "" -#: validators.py:35 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/email_notifications/emails/notification.subject.txt:1 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/emails/notification.subject.txt:1 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/emails/user/notification.subject.txt:1 +#, python-format +msgid "[Form submission] %(form_name)s" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/field.html:14 +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/fields/multiplecheckboxselectfield.html:9 +msgid "Required field" +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/form.html:19 +#, python-format +msgid "You will be redirected shortly." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/templates/aldryn_forms/form.html:23 +msgid "Thank you for submitting your information." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/validators.py:32 +#, python-brace-format +msgid "File extension '{extension}' is not allowed for this field." +msgstr "" + +#: addons-dev/aldryn-forms/aldryn_forms/validators.py:60 #, python-format msgid "" "You have to choose at least %(limit_value)d options (chosen %(show_value)d)." msgstr "" -#: validators.py:41 +#: addons-dev/aldryn-forms/aldryn_forms/validators.py:66 #, python-format msgid "" "You can't choose more than %(limit_value)d options (chosen %(show_value)d)." msgstr "" - -#~ msgid "" -#~ "\n" -#~ " Please correct the error below." -#~ msgid_plural "" -#~ "Please correct the errors below.\n" -#~ " " -#~ msgstr[0] "" -#~ msgstr[1] "" diff --git a/aldryn_forms/migrations/0018_merge_0015_auto_20211117_1202_0017_auto_20231113_1824.py b/aldryn_forms/migrations/0018_merge_0015_auto_20211117_1202_0017_auto_20231113_1824.py new file mode 100644 index 00000000..5763afa6 --- /dev/null +++ b/aldryn_forms/migrations/0018_merge_0015_auto_20211117_1202_0017_auto_20231113_1824.py @@ -0,0 +1,14 @@ +# Generated by Django 3.2.17 on 2024-03-08 16:56 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('aldryn_forms', '0015_auto_20211117_1202'), + ('aldryn_forms', '0017_auto_20231113_1824'), + ] + + operations = [ + ] From 3327930f09eff006b06c6bc0e1679d0cd234934e Mon Sep 17 00:00:00 2001 From: kobecuppens1997 <164859675+kobecuppens1997@users.noreply.github.com> Date: Mon, 25 Mar 2024 19:19:09 +0400 Subject: [PATCH 16/19] imp: open accordion on errors (#7) --- aldryn_forms/templates/aldryn_forms/form.html | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/aldryn_forms/templates/aldryn_forms/form.html b/aldryn_forms/templates/aldryn_forms/form.html index 4cc9c0ce..3a76630e 100644 --- a/aldryn_forms/templates/aldryn_forms/form.html +++ b/aldryn_forms/templates/aldryn_forms/form.html @@ -70,3 +70,34 @@ {% endaddtoblock %} {% endif %} + \ No newline at end of file From ed1227552540c33e81014b36428b22b73b88981c Mon Sep 17 00:00:00 2001 From: Kobe Cuppens Date: Tue, 26 Mar 2024 15:51:43 +0400 Subject: [PATCH 17/19] fix for select and textarea --- aldryn_forms/templates/aldryn_forms/form.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aldryn_forms/templates/aldryn_forms/form.html b/aldryn_forms/templates/aldryn_forms/form.html index 3a76630e..9f354dce 100644 --- a/aldryn_forms/templates/aldryn_forms/form.html +++ b/aldryn_forms/templates/aldryn_forms/form.html @@ -77,7 +77,7 @@ if (isInsideAccordion) { document.querySelector('#cms-form [type="submit"]').addEventListener('click', (event) => { let isValid = true; - const fields = form.querySelectorAll('input'); + const fields = form.querySelectorAll('input, select, textarea'); fields.forEach(field => { if (!field.validity.valid || field.classList.contains('is-invalid')) { isValid = false; From 3811be37b3e4056bb3fa94da9952425d5988351b Mon Sep 17 00:00:00 2001 From: Kobe Cuppens Date: Tue, 26 Mar 2024 16:15:06 +0400 Subject: [PATCH 18/19] fix for select and textarea --- aldryn_forms/templates/aldryn_forms/form.html | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/aldryn_forms/templates/aldryn_forms/form.html b/aldryn_forms/templates/aldryn_forms/form.html index 9f354dce..010ce6fb 100644 --- a/aldryn_forms/templates/aldryn_forms/form.html +++ b/aldryn_forms/templates/aldryn_forms/form.html @@ -76,10 +76,14 @@ const isInsideAccordion = form.querySelector('.accordion') !== null; if (isInsideAccordion) { document.querySelector('#cms-form [type="submit"]').addEventListener('click', (event) => { - let isValid = true; const fields = form.querySelectorAll('input, select, textarea'); fields.forEach(field => { - if (!field.validity.valid || field.classList.contains('is-invalid')) { + let isInvalidField = !field.validity.valid; + + if ($(field).hasClass('selectpicker') && !$(field).val()) { + isInvalidField = true; + } + if (isInvalidField || field.classList.contains('is-invalid')) { isValid = false; const accordionItem = field.closest('.accordion-item'); if (accordionItem) { @@ -88,13 +92,18 @@ $(collapseElement).collapse('show'); } } - field.focus(); + if (field.tagName.toLowerCase() === 'select') { + $(field).closest('.bootstrap-select').find('button').focus(); + } else { + field.focus(); + } } }); if (isValid) { console.log('Form is valid. Submitting...'); } else { + console.log('Form is invalid. Preventing submission...'); event.preventDefault(); } }); From a720b86778704b867432240e6dae1fc6a6c5e295 Mon Sep 17 00:00:00 2001 From: Sergey Gordeychuk Date: Thu, 28 Mar 2024 10:20:41 +0100 Subject: [PATCH 19/19] Hotfix for the uploaded file --- aldryn_forms/cms_plugins.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/aldryn_forms/cms_plugins.py b/aldryn_forms/cms_plugins.py index fecfc6f1..c161ec41 100644 --- a/aldryn_forms/cms_plugins.py +++ b/aldryn_forms/cms_plugins.py @@ -657,12 +657,13 @@ def form_pre_save(self, instance: models.FileUploadFieldPlugin, form, **kwargs): field_name = form.form_plugin.get_form_field_name(field=instance) uploaded_file: InMemoryUploadedFile = form.cleaned_data[field_name] - copy = io.BytesIO(uploaded_file.read()) - uploaded_file.seek(0) if uploaded_file is None: return + copy = io.BytesIO(uploaded_file.read()) + uploaded_file.seek(0) + if instance.store_to_filer: try: with Image.open(uploaded_file) as img: