예제 #1
0
def create_form_with_entries(user=None, create_entries_if_form_exist=True):
    """
    Create test form with entries. Fills the form with pre-defined
    plugins.

    :param django.contrib.auth.models.User user:
    :param bool create_entries_if_form_exist: If set to True, entries
        are being created even if form already exists (a database
        record).
    :return fobi.models.FormEntry: Instance of ``fobi.models.FormEntry``
        with a number of form elements and handlers filled in.
    """
    if not user:
        user = get_or_create_admin_user()

    try:
        form_entry = FormEntry._default_manager.get(slug=TEST_FORM_SLUG)
        if not create_entries_if_form_exist:
            return None
    except Exception as e:
        form_entry = FormEntry(name=TEST_FORM_NAME,
                               slug=TEST_FORM_SLUG,
                               user=user)
        form_entry.save()

    # *************************************************************************
    # ******************************** Form elements **************************
    # *************************************************************************
    position = 1
    # Text input
    form_element_entry = FormElementEntry(
        form_entry=form_entry,
        plugin_uid=TextInputPlugin.uid,
        plugin_data='{"name": "username", "required": true, '
        '"max_length": "200", "label": "Username"}',
        position=position)
    form_element_entry.save()
    position += 1

    # Email
    form_element_entry = FormElementEntry(
        form_entry=form_entry,
        plugin_uid=EmailInputPlugin.uid,
        plugin_data='{"name": "email", "required": true, "label": "E-mail"}',
        position=position)
    form_element_entry.save()
    position += 1

    # Integer
    form_element_entry = FormElementEntry(
        form_entry=form_entry,
        plugin_uid=IntegerInputPlugin.uid,
        plugin_data='{"name": "age", "required": true, '
        '"max_value": "200", "label": "Age"}',
        position=position)
    form_element_entry.save()
    position += 1

    # Boolean select
    form_element_entry = FormElementEntry(
        form_entry=form_entry,
        plugin_uid=BooleanSelectPlugin.uid,
        plugin_data='{"name": "drivers_license", "required": false, '
        '"label": "Drivers license?"}',
        position=position)
    form_element_entry.save()
    position += 1

    # Hidden
    form_element_entry = FormElementEntry(
        form_entry=form_entry,
        plugin_uid=HiddenInputPlugin.uid,
        plugin_data='{"name": "special_fields", "required": false, '
        '"label": "Special fields"}',
        position=position)
    form_element_entry.save()
    position += 1

    # Content image
    form_element_entry = FormElementEntry(
        form_entry=form_entry,
        plugin_uid=ContentImagePlugin.uid,
        plugin_data='{"fit_method": "center", '
        '"file": "fobi_plugins/content_plugin_images/04.jpg", '
        '"alt": "Cute girl"}',
        position=position)
    form_element_entry.save()
    position += 1

    # Integer
    form_element_entry = FormElementEntry(
        form_entry=form_entry,
        plugin_uid=IntegerInputPlugin.uid,
        plugin_data='{"name": "number_of_children", "required": false, '
        '"label": "Number of children"}',
        position=position)
    form_element_entry.save()
    position += 1

    # Textarea
    form_element_entry = FormElementEntry(
        form_entry=form_entry,
        plugin_uid=TextareaPlugin.uid,
        plugin_data='{"name": "bio", "required": true, "label": "Biography"}',
        position=position)
    form_element_entry.save()
    position += 1

    # Content text
    form_element_entry = FormElementEntry(
        form_entry=form_entry,
        plugin_uid=ContentTextPlugin.uid,
        plugin_data=''
        '{"text": "Suspendisse potenti. Etiam in nunc sodales, congue '
        'lectus ut, suscipit massa. In commodo fringilla orci, in varius '
        'eros gravida a! Aliquam erat volutpat. Donec sodales orci nec '
        'massa aliquam bibendum. Aenean sed condimentum velit. Mauris '
        'luctus bibendum nulla vel tempus. Integer tempor condimentum '
        'ligula sed feugiat. Aenean scelerisque ultricies vulputate. '
        'Donec semper lorem rhoncus sem cras amet."}',
        position=9)
    form_element_entry.save()
    position += 1

    # *************************************************************************
    # ******************************** Form handlers **************************
    # *************************************************************************

    # DB save
    form_handler_entry = FormHandlerEntry(form_entry=form_entry,
                                          plugin_uid=DBStoreHandlerPlugin.uid,
                                          plugin_data='')
    form_handler_entry.save()

    # Mail
    form_handler_entry = FormHandlerEntry(
        form_entry=form_entry,
        plugin_uid=MailHandlerPlugin.uid,
        plugin_data='{"from_name": "Fobi administration", '
        '"from_email": "*****@*****.**", '
        '"to_name": "Artur Barseghyan", '
        '"to_email": "*****@*****.**", '
        '"subject": "Test mail", "body": "Test body"}')
    form_handler_entry.save()

    return form_entry
예제 #2
0
def add_form_handler_entry(request, form_entry_id, form_handler_plugin_uid, \
                           theme=None, template_name=None):
    """
    Add form handler entry.

    :param django.http.HttpRequest request:
    :param int form_entry_id:
    :param int form_handler_plugin_uid:
    :param string template_name:
    :return django.http.HttpResponse:
    """
    try:
        form_entry = FormEntry._default_manager.get(pk=form_entry_id)
    except ObjectDoesNotExist as e:
        raise Http404(ugettext("Form entry not found."))

    user_form_handler_plugin_uids = get_user_form_handler_plugin_uids(
        request.user
        )

    if not form_handler_plugin_uid in user_form_handler_plugin_uids:
        raise Exception(_("Plugin does not exist or you are not allowed to "
                          " use this plugin!"))

    FormHandlerPlugin = form_handler_plugin_registry.get(
        form_handler_plugin_uid
        )
    form_handler_plugin = FormHandlerPlugin(user=request.user)
    form_handler_plugin.request = request

    FormHandlerPluginForm = form_handler_plugin.get_form()
    form = None

    obj = FormHandlerEntry()
    obj.form_entry = form_entry
    obj.plugin_uid = form_handler_plugin_uid
    obj.user = request.user

    save_object = False

    if not FormHandlerPluginForm:
        save_object = True

    elif 'POST' == request.method:
        form = form_handler_plugin.get_initialised_create_form_or_404(
            data = request.POST,
            files = request.FILES
            )
        if form.is_valid():
            # Saving the plugin form data.
            form.save_plugin_data(request=request)

            # Getting the plugin data.
            obj.plugin_data = form.get_plugin_data(request=request)

            save_object = True

    else:
        form = form_handler_plugin.get_initialised_create_form_or_404()

    if save_object:
        # Save the object.
        obj.save()

        messages.info(
            request,
            _('The form handler plugin "{0}" was added successfully.').format(
                form_handler_plugin.name
                )
            )
        return redirect(
            "{0}?active_tab=tab-form-handlers".format(
                reverse(
                    'fobi.edit_form_entry',
                    kwargs = {'form_entry_id': form_entry_id}
                    )
                )
            )

    context = {
        'form': form,
        'form_entry': form_entry,
        'form_handler_plugin': form_handler_plugin,
    }

    # If given, pass to the template (and override the value set by
    # the context processor.
    if theme:
        context.update({'fobi_theme': theme})

    if not template_name:
        if not theme:
            theme = get_theme(request=request, as_instance=True)
        template_name = theme.add_form_handler_entry_template

    return render_to_response(template_name, context,
                              context_instance=RequestContext(request))
예제 #3
0
def create_form_with_entries(user=None,
                             create_entries_if_form_exist=True,
                             data={},
                             is_public=False,
                             name=TEST_FORM_NAME,
                             slug=TEST_FORM_SLUG):
    """Create test form with entries.

    Fills the form with pre-defined plugins.

    :param django.contrib.auth.models.User user:
    :param bool create_entries_if_form_exist: If set to True, entries
        are being created even if form already exists (a database
        record).
    :param dict data:
    :param bool is_public:
    :param str name:
    :param str slug:
    :return fobi.models.FormEntry: Instance of ``fobi.models.FormEntry``
        with a number of form elements and handlers filled in.
    """
    if not user:
        user = get_or_create_admin_user()

    try:
        form_entry = FormEntry._default_manager.get(slug=slug)
        if not create_entries_if_form_exist:
            return None
    except Exception as err:
        form_entry = FormEntry(
            name=name,
            slug=slug,
            user=user,
            is_public=is_public,
        )
        form_entry.save()

    # ************************************************************************
    # ******************************** Form elements *************************
    # ************************************************************************
    position = 1
    for key, entry_data in data.items():
        form_element_entry = FormElementEntry(form_entry=form_entry,
                                              plugin_uid=entry_data[0],
                                              plugin_data=entry_data[1],
                                              position=position)
        form_element_entry.save()
        position += 1

    # ************************************************************************
    # ******************************** Form handlers *************************
    # ************************************************************************

    # DB save
    form_handler_entry = FormHandlerEntry(form_entry=form_entry,
                                          plugin_uid=DBStoreHandlerPlugin.uid,
                                          plugin_data='')
    form_handler_entry.save()

    # Mail
    form_handler_entry = FormHandlerEntry(
        form_entry=form_entry,
        plugin_uid=MailHandlerPlugin.uid,
        plugin_data='{'
        '"from_name": "Fobi administration", '
        '"from_email": "*****@*****.**", '
        '"to_name": "Artur Barseghyan", '
        '"to_email": "*****@*****.**", '
        '"subject": "Test mail", "body": "Test body"'
        '}')
    form_handler_entry.save()

    return form_entry