Example #1
0
    Char field plugin.
    """
    uid = UID
    name = _("IP address")
    group = _("Fields")
    form = IPAddressInputForm

    def get_form_field_instances(self):
        """
        Get form field instances.
        """
        widget_attrs = {
            'class': theme.form_element_html_class,
            'placeholder': self.data.placeholder,
        }

        kwargs = {
            'label': self.data.label,
            'help_text': self.data.help_text,
            'initial': self.data.initial,
            'required': self.data.required,
            'widget': TextInput(attrs=widget_attrs),
        }
        if self.data.max_length:
            kwargs['max_length'] = self.data.max_length

        return [(self.data.name, GenericIPAddressField, kwargs)]


form_element_plugin_registry.register(IPAddressInputPlugin)
from __future__ import absolute_import

from fobi.base import form_element_plugin_registry

from .base import PasswordInputPlugin

__title__ = 'fobi.contrib.plugins.form_elements.fields.' \
            'password.fobi_form_elements'
__author__ = 'Artur Barseghyan <*****@*****.**>'
__copyright__ = '2014-2019 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('PasswordInputPlugin',)


form_element_plugin_registry.register(PasswordInputPlugin)
Example #3
0
    group = _("Fields")
    form = EmailInputForm

    def get_form_field_instances(self):
        """
        Get form field instances.
        """
        widget_attrs = {
            'class': theme.form_element_html_class,
            'type': 'email',
            'placeholder': self.data.placeholder,
        }

        kwargs = {
            'label': self.data.label,
            'help_text': self.data.help_text,
            'initial': self.data.initial,
            'required': self.data.required,
            'widget': TextInput(attrs=widget_attrs),
        }
        if self.data.max_length:
            kwargs['max_length'] = self.data.max_length

        return [(self.data.name, EmailField, kwargs)]


# For backwards compatibility
EmailPlugin = EmailInputPlugin

form_element_plugin_registry.register(EmailInputPlugin)
            'class': theme.form_element_html_class,
            'type': 'number',
            'placeholder': self.data.placeholder,
        }
        kwargs = {
            'label': self.data.label,
            'help_text': self.data.help_text,
            'initial': self.data.initial,
            'required': self.data.required,
        }
        if self.data.max_value:
            kwargs['max_value'] = self.data.max_value
            widget_attrs['max'] = self.data.max_value
        if self.data.min_value:
            kwargs['min_value'] = self.data.min_value
            widget_attrs['min'] = self.data.min_value

        if self.data.max_digits:
            kwargs['max_digits'] = self.data.max_digits
            widget_attrs['max'] = self.data.max_value
        if self.data.decimal_places:
            kwargs['decimal_places'] = self.data.decimal_places
            widget_attrs['min'] = self.data.min_value

        kwargs['widget'] = NumberInput(attrs=widget_attrs)

        return [(self.data.name, DecimalField, kwargs)]


form_element_plugin_registry.register(DecimalInputPlugin)
    Char field plugin.
    """
    uid = UID
    name = _("Text")
    group = _("Fields")
    form = TextInputForm

    def get_form_field_instances(self, request=None):
        """
        Get form field instances.
        """
        widget_attrs = {
            'class': theme.form_element_html_class,
            'placeholder': self.data.placeholder,
        }

        kwargs = {
            'label': self.data.label,
            'help_text': self.data.help_text,
            'initial': self.data.initial,
            'required': self.data.required,
            'widget': TextInput(attrs=widget_attrs),
        }
        if self.data.max_length:
            kwargs['max_length'] = self.data.max_length

        return [(self.data.name, CharField, kwargs)]


form_element_plugin_registry.register(TextInputPlugin)
    uid = UID
    name = _("Regex")
    group = _("Fields")
    form = RegexInputForm

    def get_form_field_instances(self):
        """
        Get form field instances.
        """
        widget_attrs = {
            'class': theme.form_element_html_class,
            'placeholder': self.data.placeholder,
        }

        kwargs = {
            'label': self.data.label,
            'help_text': self.data.help_text,
            'regex': self.data.regex,
            'initial': self.data.initial,
            'required': self.data.required,
            'widget': TextInput(attrs=widget_attrs),
        }

        if self.data.max_length:
            kwargs['max_length'] = self.data.max_length

        return [(self.data.name, RegexField, kwargs)]


form_element_plugin_registry.register(RegexInputPlugin)
Example #7
0
    group = _("Content")
    form = ContentVideoForm

    def post_processor(self):
        """
        Always the same.
        """
        self.data.name = "{0}_{1}".format(self.uid, uuid4())

    def get_form_field_instances(self):
        """
        Get form field instances.
        """
        width, height = self.data.size.split('x')

        kwargs = {
            'initial': '<div class="video-wrapper">{0}</div>'.format(
                render_video(self.data.url, width, height)
                ),
            'required': False,
            'label': '',
        }

        form_field_instances = []

        form_field_instances.append((self.data.name, NoneField, kwargs))
        return form_field_instances


form_element_plugin_registry.register(ContentVideoPlugin)
from __future__ import absolute_import

from fobi.base import form_element_plugin_registry

from .base import DurationInputPlugin

__title__ = 'fobi.contrib.plugins.form_elements.fields.duration.' \
            'fobi_form_elements'
__author__ = 'Artur Barseghyan <*****@*****.**>'
__copyright__ = '2014-2019 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('DurationInputPlugin',)


form_element_plugin_registry.register(DurationInputPlugin)
Example #9
0
            'class': theme.form_element_html_class,
            'type': 'number',
            'placeholder': self.data.placeholder,
        }
        field_kwargs = {
            'label': self.data.label,
            'help_text': self.data.help_text,
            'initial': self.data.initial,
            'required': self.data.required,
        }
        if self.data.max_value:
            field_kwargs['max_value'] = self.data.max_value
            widget_attrs['max'] = self.data.max_value
        if self.data.min_value:
            field_kwargs['min_value'] = self.data.min_value
            widget_attrs['min'] = self.data.min_value

        if self.data.max_digits:
            field_kwargs['max_digits'] = self.data.max_digits
            widget_attrs['max'] = self.data.max_value
        if self.data.decimal_places:
            field_kwargs['decimal_places'] = self.data.decimal_places
            widget_attrs['min'] = self.data.min_value

        field_kwargs['widget'] = NumberInput(attrs=widget_attrs)

        return [(self.data.name, DecimalField, field_kwargs)]


form_element_plugin_registry.register(DecimalInputPlugin)
Example #10
0
theme = get_theme(request=None, as_instance=True)

class HiddenInputPlugin(FormFieldPlugin):
    """
    Hidden field plugin.
    """
    uid = UID
    name = _("Hidden")
    group = _("Fields")
    form = HiddenInputForm
    is_hidden = True

    def get_form_field_instances(self, request=None):
        """
        Get form field instances.
        """
        kwargs = {
            'label': self.data.label,
            'initial': self.data.initial,
            'required': self.data.required,
            'widget': HiddenInput(attrs={'class': theme.form_element_html_class}),
        }
        if self.data.max_length:
            kwargs['max_length'] = self.data.max_length

        return [(self.data.name, CharField, kwargs)]
        #return [(self.data.name, (CharField, TextInput), kwargs)]


form_element_plugin_registry.register(HiddenInputPlugin)
Example #11
0
    Char field plugin.
    """
    uid = UID
    name = _("IP address")
    group = _("Fields")
    form = IPAddressInputForm

    def get_form_field_instances(self, request=None):
        """
        Get form field instances.
        """
        widget_attrs = {
            'class': theme.form_element_html_class,
            'placeholder': self.data.placeholder,
        }

        kwargs = {
            'label': self.data.label,
            'help_text': self.data.help_text,
            'initial': self.data.initial,
            'required': self.data.required,
            'widget': TextInput(attrs=widget_attrs),
        }
        if self.data.max_length:
            kwargs['max_length'] = self.data.max_length

        return [(self.data.name, GenericIPAddressField, kwargs)]


form_element_plugin_registry.register(IPAddressInputPlugin)
Example #12
0
from fobi.base import FormFieldPlugin, form_element_plugin_registry, get_theme

from .forms import TemperatureCForm

theme = get_theme(request=None, as_instance=True)


class TemperatureCPlugin(FormFieldPlugin):
    """TemperatureCPlugin."""

    uid = "temperature_c"
    name = "Temperature, Celcius"
    form = TemperatureCForm
    group = "Survey Metadata"  # Group to which the plugin belongs to

    def get_form_field_instances(self, request=None, form_entry=None,
                                 form_element_entries=None, **kwargs):

        field_kwargs = {
            'required': self.data.required,
            'label': self.data.label,
            'widget': forms.widgets.NumberInput(attrs={
                                                    'class': theme.form_element_html_class,
                                                    'type': 'number'})
        }

        return [(self.data.name, forms.FloatField, field_kwargs)]


form_element_plugin_registry.register(TemperatureCPlugin)
Example #13
0
class HiddenInputPlugin(FormFieldPlugin):
    """
    Hidden field plugin.
    """
    uid = UID
    name = _("Hidden")
    group = _("Fields")
    form = HiddenInputForm
    is_hidden = True

    def get_form_field_instances(self, request=None):
        """
        Get form field instances.
        """
        kwargs = {
            'label': self.data.label,
            'initial': self.data.initial,
            'required': self.data.required,
            'widget':
            HiddenInput(attrs={'class': theme.form_element_html_class}),
        }
        if self.data.max_length:
            kwargs['max_length'] = self.data.max_length

        return [(self.data.name, CharField, kwargs)]
        #return [(self.data.name, (CharField, TextInput), kwargs)]


form_element_plugin_registry.register(HiddenInputPlugin)
Example #14
0
from __future__ import absolute_import

from fobi.base import form_element_plugin_registry

from .base import URLInputPlugin

__title__ = 'fobi.contrib.plugins.form_elements.fields.url.fobi_form_elements'
__author__ = 'Artur Barseghyan <*****@*****.**>'
__copyright__ = '2014-2018 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('URLInputPlugin', )

form_element_plugin_registry.register(URLInputPlugin)
from django import forms

from fobi.base import FormFieldPlugin, form_element_plugin_registry

from .forms import HouseholdTenureForm


class HouseholdTenurePlugin(FormFieldPlugin):
    """HouseholdTenurePlugin."""

    uid = "household_tenure"
    name = "How many years have you lived at your current address?"
    form = HouseholdTenureForm
    group = "Intercept"  # Group to which the plugin belongs to

    def get_form_field_instances(self, request=None, form_entry=None,
                                 form_element_entries=None, **kwargs):

        field_kwargs = {
            'required': self.data.required,
            'label': self.data.label,
            'widget': forms.widgets.NumberInput(attrs={}),
        }

        return [(self.data.name, forms.IntegerField, field_kwargs)]


form_element_plugin_registry.register(HouseholdTenurePlugin)
from ..fields import ObservationalField

from .forms import AgeObservationalForm


class AgeObservationalPlugin(FormFieldPlugin):
    """AgeObservationalPlugin."""

    uid = "age_observational"
    name = "Age"
    form = AgeObservationalForm
    group = "Observational"  # Group to which the plugin belongs to

    def get_form_field_instances(self, request=None, form_entry=None,
                                 form_element_entries=None, **kwargs):

        choice_level = 'AGE_{}_CHOICES'.format(self.data.detail_level.upper())
        choices = getattr(sys.modules[__name__], choice_level)

        field_kwargs = {
            'required': self.data.required,
            'label': self.data.label,
            'choices': choices,
            'widget': ObservationalWidget(choices=choices)
        }

        return [(self.data.name, ObservationalField, field_kwargs)]


form_element_plugin_registry.register(AgeObservationalPlugin)
Example #17
0
        }

        return [(self.data.name, ModelChoiceField, kwargs)]

    def __submit_plugin_form_data(self, form_entry, request, form):
        """
        Submit plugin form data/process.

        :param fobi.models.FormEntry form_entry: Instance of ``fobi.models.FormEntry``.
        :param django.http.HttpRequest request:
        :param django.forms.Form form:
        """
        # Get the object
        obj = form.cleaned_data.get(self.data.name, None)

        if obj:
            # Handle the upload
            admin_url = admin_change_url(app_label=obj._meta.app_label,
                                         module_name=obj._meta.module_name,
                                         object_id=obj.pk)
            repr = '<a href="{0}">{1}</a>'.format(admin_url, str(obj))

            # Overwrite ``cleaned_data`` of the ``form`` with object qualifier.
            form.cleaned_data[self.data.name] = repr

        # It's critically important to return the ``form`` with updated ``cleaned_data``
        return form


form_element_plugin_registry.register(SelectMultipleModelObjectsInputPlugin)
Example #18
0
from __future__ import absolute_import

from fobi.base import form_element_plugin_registry

from .base import ContentRichTextPlugin

__title__ = 'fobi.contrib.plugins.form_elements.content.content_richtext.' \
            'fobi_form_elements'
__author__ = 'Frantisek Holop <*****@*****.**>'
__copyright__ = 'RIPE NCC'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('ContentRichTextPlugin', )

form_element_plugin_registry.register(ContentRichTextPlugin)
from ..forms import TRANSPORTATION_CHOICES

from .forms import TransportationForm


class TransportationPlugin(FormFieldPlugin):
    """TransportationPlugin."""

    uid = "transportation"
    name = "How did you travel here?"
    form = TransportationForm
    group = "Intercept"  # Group to which the plugin belongs to

    def get_form_field_instances(self,
                                 request=None,
                                 form_entry=None,
                                 form_element_entries=None,
                                 **kwargs):

        field_kwargs = {
            'required': self.data.required,
            'label': self.data.label,
            'widget': forms.widgets.Select(attrs={}),
            'choices': TRANSPORTATION_CHOICES,
        }

        return [(self.data.name, forms.ChoiceField, field_kwargs)]


form_element_plugin_registry.register(TransportationPlugin)
    form = DateDropDownInputForm

    def get_form_field_instances(self):
        """
        Get form field instances.
        """
        widget_attrs = {
            'class': theme.form_element_html_class,
            'type': 'date',
        }

        years = None
        if self.data.year_min and self.data.year_max:
            years = range(self.data.year_min, self.data.year_max)

        kwargs = {
            'label': self.data.label,
            'help_text': self.data.help_text,
            'initial': self.data.initial,
            #'input_formats': self.data.input_formats,
            'required': self.data.required,
            'widget': SelectDateWidget(attrs=widget_attrs, years=years),
        }
        #if self.data.input_formats:
        #    kwargs['input_formats'] = self.data.input_formats

        return [(self.data.name, DateField, kwargs)]


form_element_plugin_registry.register(DateDropDownInputPlugin)
class TextareaPlugin(FormFieldPlugin):
    """
    Char field plugin.
    """
    uid = UID
    name = _("Textarea")
    group = _("Fields")
    form = TextareaForm

    def get_form_field_instances(self):
        """
        Get form field instances.
        """
        widget_attrs = {
            'class': theme.form_element_html_class,
            'placeholder': self.data.placeholder,
        }
        kwargs = {
            'label': self.data.label,
            'help_text': self.data.help_text,
            'initial': self.data.initial,
            'required': self.data.required,
            'widget': Textarea(attrs=widget_attrs)
        }

        return [(self.data.name, CharField, kwargs)]


form_element_plugin_registry.register(TextareaPlugin)
from __future__ import absolute_import

from fobi.base import form_element_plugin_registry

from .base import DateDropDownInputPlugin

__title__ = 'fobi.contrib.plugins.form_elements.fields.' \
            'date_drop_down.fobi_form_elements'
__author__ = 'Artur Barseghyan <*****@*****.**>'
__copyright__ = '2014-2019 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('DateDropDownInputPlugin',)


form_element_plugin_registry.register(DateDropDownInputPlugin)
from __future__ import absolute_import

from fobi.base import form_element_plugin_registry

from .base import DummyPlugin

__title__ = 'fobi.contrib.plugins.form_elements.test.dummy.fobi_form_elements'
__author__ = 'Artur Barseghyan <*****@*****.**>'
__copyright__ = '2014-2019 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('DummyPlugin',)


form_element_plugin_registry.register(DummyPlugin)
Example #24
0
from __future__ import absolute_import

from fobi.base import form_element_plugin_registry

from .base import HoneypotInputPlugin

__title__ = 'fobi.contrib.plugins.form_elements.security.' \
            'honeypot.fobi_form_elements'
__author__ = 'Artur Barseghyan <*****@*****.**>'
__copyright__ = '2014-2019 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('HoneypotInputPlugin', )

form_element_plugin_registry.register(HoneypotInputPlugin)
    ReCaptcha field plugin.
    """
    uid = UID
    name = _("ReCaptcha")
    group = _("Security")
    form = ReCaptchaInputForm

    def get_form_field_instances(self):
        """
        Get form field instances.
        """
        widget_attrs = {
            'class': theme.form_element_html_class,
            #'placeholder': self.data.placeholder,
        }

        kwargs = {
            'label': self.data.label,
            'help_text': self.data.help_text,
            #'initial': self.data.initial,
            'required': self.data.required,
            'widget': ReCaptchaWidget(attrs=widget_attrs),
        }

        return [(self.data.name, ReCaptchaField, kwargs)]


# Register only if safe to use.
if DJANGO_RECAPTCHA_INSTALLED and not DJANGO_SIMPLE_CAPTCHA_INSTALLED:
    form_element_plugin_registry.register(ReCaptchaInputPlugin)
from ..forms import RACE_CHOICES

from .forms import RaceForm


class RacePlugin(FormFieldPlugin):
    """RacePlugin."""

    uid = "race"
    name = "Which race or ethnicity best describes you?"
    form = RaceForm
    group = "Intercept"  # Group to which the plugin belongs to

    def get_form_field_instances(self,
                                 request=None,
                                 form_entry=None,
                                 form_element_entries=None,
                                 **kwargs):

        field_kwargs = {
            'required': self.data.required,
            'label': self.data.label,
            'widget': forms.widgets.Select(attrs={}),
            'choices': RACE_CHOICES,
        }

        return [(self.data.name, forms.ChoiceField, field_kwargs)]


form_element_plugin_registry.register(RacePlugin)
from __future__ import absolute_import

from fobi.base import form_element_plugin_registry

from .base import URLInputPlugin

__title__ = 'fobi.contrib.plugins.form_elements.fields.url.fobi_form_elements'
__author__ = 'Artur Barseghyan <*****@*****.**>'
__copyright__ = '2014-2019 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('URLInputPlugin',)


form_element_plugin_registry.register(URLInputPlugin)
Example #28
0
from __future__ import absolute_import

from fobi.base import form_element_plugin_registry

from .base import RegexInputPlugin

__title__ = 'fobi.contrib.plugins.form_elements.fields.' \
            'regex.fobi_form_elements'
__author__ = 'Artur Barseghyan <*****@*****.**>'
__copyright__ = '2014-2019 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('RegexInputPlugin',)


form_element_plugin_registry.register(RegexInputPlugin)
Example #29
0
            if obj:
                value = None
                # Should be returned as repr
                if SUBMIT_VALUE_AS == SUBMIT_VALUE_AS_REPR:
                    value = safe_text(obj)
                elif SUBMIT_VALUE_AS == SUBMIT_VALUE_AS_VAL:
                    value = '{0}.{1}.{2}'.format(
                        obj._meta.app_label,
                        obj._meta.module_name,
                        obj.pk
                        )
                else:
                    # Handle the submitted form value
                    value = '{0}.{1}.{2}.{3}'.format(
                        obj._meta.app_label,
                        obj._meta.module_name,
                        obj.pk,
                        safe_text(obj)
                        )
                values.append(value)

        # Overwrite ``cleaned_data`` of the ``form`` with object qualifier.
        form.cleaned_data[self.data.name] = json.dumps(values)

        # It's critically important to return the ``form`` with updated
        # ``cleaned_data``
        return form


form_element_plugin_registry.register(SelectMultipleModelObjectsInputPlugin)
Example #30
0
    form = FloatInputForm

    def get_form_field_instances(self, request=None):
        """
        Get form field instances.
        """
        widget_attrs = {
            'class': theme.form_element_html_class,
            'type': 'number',
            'placeholder': self.data.placeholder,
        }
        kwargs = {
            'label': self.data.label,
            'help_text': self.data.help_text,
            'initial': self.data.initial,
            'required': self.data.required,
        }
        if self.data.max_value:
            kwargs['max_value'] = self.data.max_value
            widget_attrs['max'] = self.data.max_value
        if self.data.min_value:
            kwargs['min_value'] = self.data.min_value
            widget_attrs['min'] = self.data.min_value

        kwargs['widget'] = NumberInput(attrs=widget_attrs)

        return [(self.data.name, FloatField, kwargs)]


form_element_plugin_registry.register(FloatInputPlugin)
Example #31
0
class RadioInputPlugin(FormFieldPlugin):
    """
    Radio field plugin.
    """
    uid = UID
    name = _("Radio")
    group = _("Fields")
    form = RadioInputForm

    def get_form_field_instances(self):
        """
        Get form field instances.
        """
        choices = get_select_field_choices(self.data.choices)

        widget_attrs = {'class': theme.form_radio_element_html_class}
        kwargs = {
            'label': self.data.label,
            'help_text': self.data.help_text,
            'initial': self.data.initial,
            'required': self.data.required,
            'choices': choices,
            'widget': RadioSelect(attrs=widget_attrs),
        }

        return [(self.data.name, ChoiceField, kwargs)]


form_element_plugin_registry.register(RadioInputPlugin)
    def post_processor(self):
        """
        Always the same.
        """
        self.data.name = "{0}_{1}".format(self.uid, uuid4())

    def get_form_field_instances(self):
        """
        Get form field instances.
        """
        width, height = self.data.size.split('x')

        kwargs = {
            'initial':
            '<div class="video-wrapper">{0}</div>'.format(
                render_video(self.data.url, width, height)),
            'required':
            False,
            'label':
            '',
        }

        form_field_instances = []

        form_field_instances.append((self.data.name, NoneField, kwargs))
        return form_field_instances


form_element_plugin_registry.register(ContentVideoPlugin)
Example #33
0
from __future__ import absolute_import

from fobi.base import form_element_plugin_registry

from .base import EmailInputPlugin

__title__ = 'fobi.contrib.plugins.form_elements.fields.' \
            'email.fobi_form_elements'
__author__ = 'Artur Barseghyan <*****@*****.**>'
__copyright__ = '2014-2018 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('EmailInputPlugin', )

form_element_plugin_registry.register(EmailInputPlugin)
Example #34
0
from __future__ import absolute_import

from fobi.base import form_element_plugin_registry

from .base import NullBooleanSelectPlugin

__title__ = 'fobi.contrib.plugins.form_elements.fields.' \
            'null_boolean.fobi_form_elements'
__author__ = 'Artur Barseghyan <*****@*****.**>'
__copyright__ = '2014-2017 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('NullBooleanSelectPlugin', )

form_element_plugin_registry.register(NullBooleanSelectPlugin)
Example #35
0
from ..widgets import ObservationalWidget
from ..fields import ObservationalField

from .forms import ObjectsObservationalForm


class ObjectsObservationalPlugin(FormFieldPlugin):
    """ObjectsObservationalPlugin."""

    uid = "objects_observational"
    name = "Objects"
    form = ObjectsObservationalForm
    group = "Observational"  # Group to which the plugin belongs to

    def get_form_field_instances(self, request=None, form_entry=None,
                                 form_element_entries=None, **kwargs):

        choices = OBJECTS_BASIC_CHOICES

        field_kwargs = {
            'required': self.data.required,
            'label': self.data.label,
            'choices': choices,
            'widget': ObservationalWidget(choices=choices)
        }

        return [(self.data.name, ObservationalField, field_kwargs)]


form_element_plugin_registry.register(ObjectsObservationalPlugin)
Example #36
0
from __future__ import absolute_import

from fobi.base import form_element_plugin_registry

from .base import (
    DJANGO_RECAPTCHA_INSTALLED,
    DJANGO_SIMPLE_CAPTCHA_INSTALLED,
    ReCaptchaInputPlugin,
)

__title__ = 'fobi.contrib.plugins.form_elements.security.' \
            'recaptcha.fobi_form_elements'
__author__ = 'Artur Barseghyan <*****@*****.**>'
__copyright__ = '2014-2019 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('ReCaptchaInputPlugin', )

# Register only if safe to use.
if DJANGO_RECAPTCHA_INSTALLED and not DJANGO_SIMPLE_CAPTCHA_INSTALLED:
    form_element_plugin_registry.register(ReCaptchaInputPlugin)
    """
    uid = UID
    name = _("Date")
    group = _("Fields")
    form = DateInputForm

    def get_form_field_instances(self):
        """
        Get form field instances.
        """
        widget_attrs = {
            'class': theme.form_element_html_class,
            'type': 'date',
        }

        kwargs = {
            'label': self.data.label,
            'help_text': self.data.help_text,
            'initial': self.data.initial,
            #'input_formats': self.data.input_formats,
            'required': self.data.required,
            'widget': DateInput(attrs=widget_attrs),
        }
        #if self.data.input_formats:
        #    kwargs['input_formats'] = self.data.input_formats

        return [(self.data.name, DateField, kwargs)]


form_element_plugin_registry.register(DateInputPlugin)
Example #38
0
from __future__ import absolute_import

from fobi.base import form_element_plugin_registry

from .base import TextareaPlugin

__title__ = 'fobi.contrib.plugins.form_elements.fields.' \
            'textarea.fobi_form_elements'
__author__ = 'Artur Barseghyan <*****@*****.**>'
__copyright__ = '2014-2017 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('TextInputPlugin', )

form_element_plugin_registry.register(TextareaPlugin)
Example #39
0
    Content text plugin.
    """
    uid = UID
    name = _("Content text")
    group = _("Content")
    form = ContentTextForm

    def post_processor(self):
        """
        Always the same.
        """
        self.data.name = "{0}_{1}".format(self.uid, uuid4())

    def get_form_field_instances(self):
        """
        Get form field instances.
        """
        kwargs = {
            'initial': "<p>{0}</p>".format(smart_str(self.data.text)),
            'required': False,
            'label': '',
        }

        form_field_instances = []

        form_field_instances.append((self.data.name, NoneField, kwargs))
        return form_field_instances


form_element_plugin_registry.register(ContentTextPlugin)
class TimeStopPlugin(FormFieldPlugin):
    """TimeStopPlugin."""

    uid = "time_stop"
    name = "Stop Time"
    form = TimeStopForm
    group = "Survey Metadata"  # Group to which the plugin belongs to

    def get_form_field_instances(self,
                                 request=None,
                                 form_entry=None,
                                 form_element_entries=None,
                                 **kwargs):

        field_kwargs = {
            'required':
            self.data.required,
            'label':
            self.data.label,
            'widget':
            forms.widgets.TextInput(attrs={
                'class': theme.form_element_html_class,
                'type': 'time'
            }),
        }

        return [(self.data.name, forms.TimeField, field_kwargs)]


form_element_plugin_registry.register(TimeStopPlugin)
        }

        return [(self.data.name, ChoiceField, field_kwargs)]

    def submit_plugin_form_data(self, form_entry, request, form,
                                form_element_entries=None, **kwargs):
        """Submit plugin form data/process.

        :param fobi.models.FormEntry form_entry: Instance of
            ``fobi.models.FormEntry``.
        :param django.http.HttpRequest request:
        :param django.forms.Form form:
        """
        # Get the object
        value = form.cleaned_data.get(self.data.name, None)

        if value:
            choices = dict(get_select_field_choices(self.data.choices))
            # Handle the submitted form value
            value = '{0}'.format(safe_text(choices.get(value)))

            # Overwrite ``cleaned_data`` of the ``form`` with object qualifier.
            form.cleaned_data[self.data.name] = value

        # It's critically important to return the ``form`` with updated
        # ``cleaned_data``
        return form


form_element_plugin_registry.register(RadioInputPlugin, force=True)
from __future__ import absolute_import

from fobi.base import form_element_plugin_registry

from .base import DurationInputPlugin

__title__ = 'fobi.contrib.plugins.form_elements.fields.duration.' \
            'fobi_form_elements'
__author__ = 'Artur Barseghyan <*****@*****.**>'
__copyright__ = '2014-2017 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('DurationInputPlugin',)


form_element_plugin_registry.register(DurationInputPlugin)
Example #43
0
        #    kwargs['input_formats'] = self.data.input_formats

        return [(self.data.name, DateField, kwargs)]

    def submit_plugin_form_data(self, form_entry, request, form):
        """
        Submit plugin form data/process.

        :param fobi.models.FormEntry form_entry: Instance of
            ``fobi.models.FormEntry``.
        :param django.http.HttpRequest request:
        :param django.forms.Form form:
        """
        # In case if we should submit value as is, we don't return anything.
        # In other cases, we proceed further.

        # Get the object
        value = form.cleaned_data.get(self.data.name, None)
        try:
            value = value.strftime("%Y-%m-%d")
        except Exception as err:
            pass

        # Overwrite ``cleaned_data`` of the ``form`` with object qualifier.
        form.cleaned_data[self.data.name] = value

        return form


form_element_plugin_registry.register(DateInputPlugin)
Example #44
0
from ..forms import EDUCATION_CHOICES

from .forms import EducationForm


class EducationPlugin(FormFieldPlugin):
    """EducationPlugin."""

    uid = "education"
    name = "What is your highest formal degree of education?"
    form = EducationForm
    group = "Intercept"  # Group to which the plugin belongs to

    def get_form_field_instances(self,
                                 request=None,
                                 form_entry=None,
                                 form_element_entries=None,
                                 **kwargs):

        field_kwargs = {
            'required': self.data.required,
            'label': self.data.label,
            'widget': forms.widgets.Select(attrs={}),
            'choices': EDUCATION_CHOICES,
        }

        return [(self.data.name, forms.ChoiceField, field_kwargs)]


form_element_plugin_registry.register(EducationPlugin)
Example #45
0
    form = FloatInputForm

    def get_form_field_instances(self, request=None):
        """
        Get form field instances.
        """
        widget_attrs = {
            'class': theme.form_element_html_class,
            'type': 'number',
            'placeholder': self.data.placeholder,
        }
        kwargs = {
            'label': self.data.label,
            'help_text': self.data.help_text,
            'initial': self.data.initial,
            'required': self.data.required,
        }
        if self.data.max_value:
            kwargs['max_value'] = self.data.max_value
            widget_attrs['max'] = self.data.max_value
        if self.data.min_value:
            kwargs['min_value'] = self.data.min_value
            widget_attrs['min'] = self.data.min_value

        kwargs['widget'] = NumberInput(attrs=widget_attrs)

        return [(self.data.name, FloatField, kwargs)]


form_element_plugin_registry.register(FloatInputPlugin)
Example #46
0
        crop = get_crop_filter(self.data.fit_method)

        if FIT_METHOD_FIT_WIDTH == self.data.fit_method:
            thumb_size = (width, 0)
        elif FIT_METHOD_FIT_HEIGHT == self.data.fit_method:
            thumb_size = (0, height)
        else:
            thumb_size = (width, height)

        context = {
            'plugin': self,
            'MEDIA_URL': settings.MEDIA_URL,
            'crop': crop,
            'thumb_size': thumb_size
        }
        rendered_image = render_to_string('content_image/render.html', context)

        kwargs = {
            'initial': rendered_image,
            'required': False,
            'label': '',
        }

        form_field_instances = []

        form_field_instances.append((self.data.name, NoneField, kwargs))
        return form_field_instances


form_element_plugin_registry.register(ContentImagePlugin)
from __future__ import absolute_import

from fobi.base import form_element_plugin_registry

from .base import SelectInputPlugin

__title__ = 'fobi.contrib.plugins.form_elements.fields.' \
            'select.fobi_form_elements'
__author__ = 'Artur Barseghyan <*****@*****.**>'
__copyright__ = '2014-2019 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('SelectInputPlugin',)


form_element_plugin_registry.register(SelectInputPlugin)
Example #48
0
            choices = dict(get_select_field_choices(self.data.choices))

            # Returned value
            ret_values = []

            for value in values:
                # Handle the submitted form value

                if value in choices:
                    label = safe_text(choices.get(value))

                    # Should be returned as repr
                    if SUBMIT_VALUE_AS == SUBMIT_VALUE_AS_REPR:
                        value = label
                    # Should be returned as mix
                    else:
                        value = "{0} ({1})".format(label, value)

                    ret_values.append(value)

            # Overwrite ``cleaned_data`` of the ``form`` with object
            # qualifier.
            form.cleaned_data[self.data.name] = ret_values

            # It's critically important to return the ``form`` with updated
            # ``cleaned_data``
            return form


form_element_plugin_registry.register(CheckboxSelectMultipleInputPlugin)
from __future__ import absolute_import

from fobi.base import form_element_plugin_registry

from .base import NullBooleanSelectPlugin

__title__ = 'fobi.contrib.plugins.form_elements.fields.' \
            'null_boolean.fobi_form_elements'
__author__ = 'Artur Barseghyan <*****@*****.**>'
__copyright__ = '2014-2019 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('NullBooleanSelectPlugin',)


form_element_plugin_registry.register(NullBooleanSelectPlugin)
from __future__ import absolute_import

from fobi.base import form_element_plugin_registry

from .base import RangeSelectInputPlugin

__title__ = 'fobi.contrib.plugins.form_elements.fields.range_select.' \
            'fobi_form_elements'
__author__ = 'Artur Barseghyan <*****@*****.**>'
__copyright__ = '2014-2017 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('RangeSelectInputPlugin', )

form_element_plugin_registry.register(RangeSelectInputPlugin)
from __future__ import absolute_import

from fobi.base import form_element_plugin_registry

from .base import HoneypotInputPlugin

__title__ = 'fobi.contrib.plugins.form_elements.security.' \
            'honeypot.fobi_form_elements'
__author__ = 'Artur Barseghyan <*****@*****.**>'
__copyright__ = '2014-2019 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('HoneypotInputPlugin',)


form_element_plugin_registry.register(HoneypotInputPlugin)
Example #52
0
        }

        return [(self.data.name, ModelChoiceField, kwargs)]

    def submit_plugin_form_data(self, form_entry, request, form):
        """
        Submit plugin form data/process.

        :param fobi.models.FormEntry form_entry: Instance of
            ``fobi.models.FormEntry``.
        :param django.http.HttpRequest request:
        :param django.forms.Form form:
        """
        # Get the object
        obj = form.cleaned_data.get(self.data.name, None)
        if obj:
            # Handle the submitted form value
            value = '{0}'.format(
                safe_text(obj)
                )

            # Overwrite ``cleaned_data`` of the ``form`` with object qualifier.
            form.cleaned_data[self.data.name] = value

        # It's critically important to return the ``form`` with updated
        # ``cleaned_data``
        return form


form_element_plugin_registry.register(SelectModelObjectInputPlugin, force=True)
        crop = get_crop_filter(self.data.fit_method)

        if FIT_METHOD_FIT_WIDTH == self.data.fit_method:
            thumb_size = (width, 0)
        elif FIT_METHOD_FIT_HEIGHT == self.data.fit_method:
            thumb_size = (0, height)
        else:
            thumb_size = (width, height)

        context = {
            'plugin': self,
            'MEDIA_URL': settings.MEDIA_URL,
            'crop': crop,
            'thumb_size': thumb_size
        }
        rendered_image = render_to_string('content_image/render.html', context)

        kwargs = {
            'initial': rendered_image,
            'required': False,
            'label': '',
        }

        form_field_instances = []

        form_field_instances.append((self.data.name, NoneField, kwargs))
        return form_field_instances


form_element_plugin_registry.register(ContentImagePlugin)
    uid = UID
    name = _("Integer")
    group = _("Fields")
    form = IntegerInputForm

    def get_form_field_instances(self):
        """
        Get form field instances.
        """
        widget_attrs = {"class": theme.form_element_html_class, "type": "number", "placeholder": self.data.placeholder}
        kwargs = {
            "label": self.data.label,
            "help_text": self.data.help_text,
            "initial": self.data.initial,
            "required": self.data.required,
        }
        if self.data.max_value:
            kwargs["max_value"] = self.data.max_value
            widget_attrs["max"] = self.data.max_value
        if self.data.min_value:
            kwargs["min_value"] = self.data.min_value
            widget_attrs["min"] = self.data.min_value

        kwargs["widget"] = NumberInput(attrs=widget_attrs)

        return [(self.data.name, IntegerField, kwargs)]


form_element_plugin_registry.register(IntegerInputPlugin)
from __future__ import absolute_import

from fobi.base import form_element_plugin_registry

from .base import SelectMultipleWithMaxInputPlugin

__title__ = 'fobi.contrib.plugins.form_elements.fields.' \
            'select_multiple_with_max.fobi_form_elements'
__author__ = 'Artur Barseghyan <*****@*****.**>'
__copyright__ = '2014-2019 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('SelectMultipleWithMaxInputPlugin',)


form_element_plugin_registry.register(SelectMultipleWithMaxInputPlugin)
    PhoneNumber field plugin.
    """
    name = _("PhoneNumber")
    group = _("Fields")
    form = PhoneNumberForm
    uid = UID

    def get_form_field_instances(self, request=None):
        """
        Get form field instances.
        """
        widget_attrs = {
            'class': theme.form_element_html_class,
            'placeholder': self.data.placeholder,
        }

        kwargs = {
            'label': self.data.label,
            'help_text': self.data.help_text,
            'initial': self.data.initial,
            'required': self.data.required,
            'widget': PhoneNumberPrefixWidget(attrs=widget_attrs),
        }
        if self.data.max_length:
            kwargs['max_length'] = self.data.max_length

        return [(self.data.name, PhoneNumberField, kwargs)]


form_element_plugin_registry.register(PhoneNumberPlugin)
Example #57
0
        # In other cases, we proceed further.
        if SUBMIT_VALUE_AS != SUBMIT_VALUE_AS_VAL:
            # Get the object
            value = form.cleaned_data.get(self.data.name, None)

            # Get choices
            choices = dict(get_select_field_choices(self.data.choices))

            if value in choices:
                # Handle the submitted form value

                label = safe_text(choices.get(value))

                # Should be returned as repr
                if SUBMIT_VALUE_AS == SUBMIT_VALUE_AS_REPR:
                    value = label
                # Should be returned as mix
                else:
                    value = "{0} ({1})".format(label, value)

                # Overwrite ``cleaned_data`` of the ``form`` with object
                # qualifier.
                form.cleaned_data[self.data.name] = value

                # It's critically important to return the ``form`` with updated
                # ``cleaned_data``
                return form


form_element_plugin_registry.register(RadioInputPlugin)
Example #58
0
        :param django.forms.Form form:
        """
        # In case if we should submit value as is, we don't return anything.
        # In other cases, we proceed further.

        # Get the object
        obj = form.cleaned_data.get(self.data.name, None)
        if obj:
            value = None
            # Should be returned as repr
            if SUBMIT_VALUE_AS == SUBMIT_VALUE_AS_REPR:
                value = safe_text(obj)
            elif SUBMIT_VALUE_AS == SUBMIT_VALUE_AS_VAL:
                value = '{0}.{1}.{2}'.format(obj._meta.app_label,
                                             obj._meta.module_name, obj.pk)
            else:
                # Handle the submitted form value
                value = '{0}.{1}.{2}.{3}'.format(obj._meta.app_label,
                                                 obj._meta.module_name, obj.pk,
                                                 safe_text(obj))

            # Overwrite ``cleaned_data`` of the ``form`` with object qualifier.
            form.cleaned_data[self.data.name] = value

        # It's critically important to return the ``form`` with updated
        # ``cleaned_data``
        return form


form_element_plugin_registry.register(SelectModelObjectInputPlugin)
            choices = dict(get_select_field_choices(self.data.choices))

            # Returned value
            ret_values = []

            for value in values:
                # Handle the submitted form value

                if value in choices:
                    label = safe_text(choices.get(value))

                    # Should be returned as repr
                    if SUBMIT_VALUE_AS == SUBMIT_VALUE_AS_REPR:
                        value = label
                    # Should be returned as mix
                    else:
                        value = "{0} ({1})".format(label, value)

                    ret_values.append(value)

            # Overwrite ``cleaned_data`` of the ``form`` with object
            # qualifier.
            form.cleaned_data[self.data.name] = ret_values

            # It's critically important to return the ``form`` with updated
            # ``cleaned_data``
            return form


form_element_plugin_registry.register(CheckboxSelectMultipleInputPlugin)
from __future__ import absolute_import

from fobi.base import form_element_plugin_registry

from .base import SelectMPTTModelObjectInputPlugin

__title__ = 'fobi.contrib.plugins.form_elements.fields.' \
            'select_mptt_model_object.fobi_form_elements'
__author__ = 'Artur Barseghyan <*****@*****.**>'
__copyright__ = '2014-2019 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = ('SelectMPTTModelObjectInputPlugin',)


form_element_plugin_registry.register(SelectMPTTModelObjectInputPlugin)