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 fobi.base.BaseTheme theme: Theme instance. :param string template_name: :return django.http.HttpResponse: """ try: form_entry = FormEntry._default_manager.get(pk=form_entry_id) except ObjectDoesNotExist as err: 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 Http404( ugettext("Plugin does not exist or you are not allowed " "to use this plugin!")) FormHandlerPlugin = form_handler_plugin_registry.get( form_handler_plugin_uid) # Check if we deal with form handler plugin that is only allowed to be # used once. In that case, check if it has been used already in the current # form entry. if not FormHandlerPlugin.allow_multiple: times_used = FormHandlerEntry._default_manager \ .filter(form_entry__id=form_entry_id, plugin_uid=FormHandlerPlugin.uid) \ .count() if times_used > 0: raise Http404( ugettext("The {0} plugin can be used only once in a " "form.").format(FormHandlerPlugin.name)) 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 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 err: 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 Http404(ugettext("Plugin does not exist or you are not allowed " "to use this plugin!")) FormHandlerPlugin = form_handler_plugin_registry.get( form_handler_plugin_uid ) # Check if we deal with form handler plugin that is only allowed to be # used once. In that case, check if it has been used already in the current # form entry. if not FormHandlerPlugin.allow_multiple: times_used = FormHandlerEntry._default_manager \ .filter(form_entry__id=form_entry_id, plugin_uid=FormHandlerPlugin.uid) \ .count() if times_used > 0: raise Http404(ugettext("The {0} plugin can be used only once in a " "form.").format(FormHandlerPlugin.name)) 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))