def import_data(self): """ Imports data. """ # TODO: Move this to top level and ensure it works! from fobi.models import FormEntry, FormElementEntry assert 'name' in self.form_properties form_entry = FormEntry() for prop, val in self.form_properties.items(): setattr(form_entry, prop, val) form_entry.save() data = self.get_form_data() for field_data in data: # Skip non-existing if not field_data[self.field_type_prop_name] in self.fields_mapping: continue form_element_entry = FormElementEntry() form_element_entry.form_entry = form_entry form_element_entry.plugin_uid = self.fields_mapping[field_data[self.field_type_prop_name]] # Assign form data form_element_entry.plugin_data = json.dumps( self.extract_field_properties(field_data) ) # Assign position in form if self.position_prop_name in field_data: form_element_entry.position = field_data[self.position_prop_name] form_element_entry.save()
def import_data(self): """ Imports data. """ # TODO: Move this to top level and ensure it works! from fobi.models import FormEntry, FormElementEntry assert 'name' in self.form_properties form_entry = FormEntry() for prop, val in self.form_properties.items(): setattr(form_entry, prop, val) form_entry.save() data = self.get_form_data() for field_data in data: # Skip non-existing if not field_data[self.field_type_prop_name] in self.fields_mapping: continue form_element_entry = FormElementEntry() form_element_entry.form_entry = form_entry form_element_entry.plugin_uid = self.fields_mapping[field_data[self.field_type_prop_name]] # Assign form data form_element_entry.plugin_data = json.dumps( self.extract_field_properties(field_data) ) # Assign position in form if self.position_prop_name in field_data: form_element_entry.position = field_data[self.position_prop_name] form_element_entry.save()
def add_form_element_entry(request, form_entry_id, form_element_plugin_uid, theme=None, template_name=None): """ Add form element entry. :param django.http.HttpRequest request: :param int form_entry_id: :param int form_element_plugin_uid: :param fobi.base.BaseTheme theme: Theme instance. :param string template_name: :return django.http.HttpResponse: """ try: form_entry = FormEntry._default_manager \ .prefetch_related('formelemententry_set') \ .get(pk=form_entry_id) except ObjectDoesNotExist as err: raise Http404(ugettext("Form entry not found.")) form_elements = form_entry.formelemententry_set.all() user_form_element_plugin_uids = get_user_form_field_plugin_uids( request.user) if not form_element_plugin_uid in user_form_element_plugin_uids: raise Http404( ugettext("Plugin does not exist or you are not allowed " "to use this plugin!")) FormElementPlugin = form_element_plugin_registry.get( form_element_plugin_uid) form_element_plugin = FormElementPlugin(user=request.user) form_element_plugin.request = request FormElementPluginForm = form_element_plugin.get_form() form = None obj = FormElementEntry() obj.form_entry = form_entry obj.plugin_uid = form_element_plugin_uid obj.user = request.user save_object = False # If plugin doesn't have a form if not FormElementPluginForm: save_object = True # If POST elif 'POST' == request.method: # If element has a form form = form_element_plugin.get_initialised_create_form_or_404( data=request.POST, files=request.FILES) form.validate_plugin_data(form_elements, request=request) 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 # If not POST else: form = form_element_plugin.get_initialised_create_form_or_404() if save_object: # Handling the position position = 1 records = FormElementEntry._default_manager \ .aggregate(models.Max('position')) if records: try: position = records['{0}__max'.format('position')] + 1 except TypeError as err: pass obj.position = position # Save the object. obj.save() messages.info( request, _('The form element plugin "{0}" was added ' 'successfully.').format(form_element_plugin.name)) return redirect("{0}?active_tab=tab-form-elemenets".format( reverse('fobi.edit_form_entry', kwargs={'form_entry_id': form_entry_id}))) context = { 'form': form, 'form_entry': form_entry, 'form_element_plugin': form_element_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_element_entry_template return render_to_response(template_name, context, context_instance=RequestContext(request))
def add_form_element_entry(request, form_entry_id, form_element_plugin_uid, theme=None, template_name=None): """ Add form element entry. :param django.http.HttpRequest request: :param int form_entry_id: :param int form_element_plugin_uid: :param string template_name: :return django.http.HttpResponse: """ try: form_entry = FormEntry._default_manager \ .prefetch_related('formelemententry_set') \ .get(pk=form_entry_id) except ObjectDoesNotExist as err: raise Http404(ugettext("Form entry not found.")) form_elements = form_entry.formelemententry_set.all() user_form_element_plugin_uids = get_user_form_field_plugin_uids( request.user ) if not form_element_plugin_uid in user_form_element_plugin_uids: raise Http404(ugettext("Plugin does not exist or you are not allowed " "to use this plugin!")) FormElementPlugin = form_element_plugin_registry.get( form_element_plugin_uid ) form_element_plugin = FormElementPlugin(user=request.user) form_element_plugin.request = request FormElementPluginForm = form_element_plugin.get_form() form = None obj = FormElementEntry() obj.form_entry = form_entry obj.plugin_uid = form_element_plugin_uid obj.user = request.user save_object = False # If plugin doesn't have a form if not FormElementPluginForm: save_object = True # If POST elif 'POST' == request.method: # If element has a form form = form_element_plugin.get_initialised_create_form_or_404( data = request.POST, files = request.FILES ) form.validate_plugin_data(form_elements, request=request) 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 # If not POST else: form = form_element_plugin.get_initialised_create_form_or_404() if save_object: # Handling the position position = 1 records = FormElementEntry._default_manager \ .aggregate(models.Max('position')) if records: try: position = records['{0}__max'.format('position')] + 1 except TypeError as err: pass obj.position = position # Save the object. obj.save() messages.info( request, _('The form element plugin "{0}" was added ' 'successfully.').format(form_element_plugin.name) ) return redirect( "{0}?active_tab=tab-form-elemenets".format( reverse('fobi.edit_form_entry', kwargs={'form_entry_id': form_entry_id}) ) ) context = { 'form': form, 'form_entry': form_entry, 'form_element_plugin': form_element_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_element_entry_template return render_to_response(template_name, context, context_instance=RequestContext(request))