Source code for fobi.contrib.plugins.form_handlers.db_store.models

from __future__ import unicode_literals

import json

import bleach
from django.conf import settings
from django.db import models
from django.utils.translation import gettext_lazy as _
from six import python_2_unicode_compatible, string_types

from .....helpers import two_dicts_to_string

__title__ = "fobi.contrib.plugins.form_handlers.db_store.models"
__author__ = "Artur Barseghyan <artur.barseghyan@gmail.com>"
__copyright__ = "2014-2019 Artur Barseghyan"
__license__ = "GPL 2.0/LGPL 2.1"
__all__ = (
    "AbstractSavedFormDataEntry",
    "SavedFormDataEntry",
    "SavedFormWizardDataEntry",
)

# ****************************************************************************
# **************** Safe User import for Django > 1.5, < 1.8 ******************
# ****************************************************************************
AUTH_USER_MODEL = settings.AUTH_USER_MODEL

# ****************************************************************************
# ****************************************************************************
# ****************************************************************************


[docs]class AbstractSavedFormDataEntry(models.Model): """Abstract saved form data entry.""" user = models.ForeignKey( AUTH_USER_MODEL, verbose_name=_("User"), null=True, blank=True, on_delete=models.CASCADE, ) form_data_headers = models.TextField( _("Form data headers"), null=True, blank=True ) saved_data = models.TextField(_("Plugin data"), null=True, blank=True) created = models.DateTimeField(_("Date created"), auto_now_add=True)
[docs] class Meta(object): """Meta options.""" abstract = True
[docs] def formatted_saved_data(self): """Shows the formatted saved data records. :return string: """ try: headers = json.loads(self.form_data_headers) data = json.loads(self.saved_data) for key, value in data.items(): if isinstance(value, string_types): value = bleach.clean(value, strip=True) if ( value.startswith(settings.MEDIA_URL) or value.startswith("http://") or value.startswith("https://") ): value = '<a href="{value}">{value}</a>'.format( value=value ) data[key] = value return two_dicts_to_string(headers, data) except (ValueError, json.decoder.JSONDecodeError) as err: return ""
formatted_saved_data.allow_tags = True formatted_saved_data.short_description = _("Saved data")
[docs]@python_2_unicode_compatible class SavedFormDataEntry(AbstractSavedFormDataEntry): """Saved form data.""" form_entry = models.ForeignKey( "fobi.FormEntry", verbose_name=_("Form"), null=True, blank=True, on_delete=models.CASCADE, ) class Meta(object): """Meta options.""" abstract = False verbose_name = _("Saved form data entry") verbose_name_plural = _("Saved form data entries") db_table = "db_store_savedformdataentry" def __str__(self): return "Saved form data entry from {0}".format(self.created)
[docs]@python_2_unicode_compatible class SavedFormWizardDataEntry(AbstractSavedFormDataEntry): """Saved form data.""" form_wizard_entry = models.ForeignKey( "fobi.FormWizardEntry", verbose_name=_("Form"), null=True, blank=True, on_delete=models.CASCADE, ) class Meta(object): """Meta options.""" abstract = False verbose_name = _("Saved form wizard data entry") verbose_name_plural = _("Saved form wizard data entries") db_table = "db_store_savedformwizarddataentry" def __str__(self): return "Saved form wizard data entry from {0}".format(self.created)