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
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))
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