Code Monkey home page Code Monkey logo

formeditor's Introduction

Form Editor for Umbraco

NuGet release

Form Editor is a free and open source form builder plugin for Umbraco 7.3+. It lets your editors build forms and manage form submissions as just another part of the Umbraco content. It might also just be the easiest form builder you've ever had to integrate with your site.

If you're new to Form Editor, you should probably start by checking out the Quick start tutorial.

Form Editor UI

Some highlights include:

  • Grid based form editing.
  • Ships with (almost) all HTML5 input types.
  • Cross field validation.
  • Conditional fields.
  • Integration with Campaign Monitor and MailChimp.
  • Integration with external web services.
  • Support for multi-page forms.
  • Full control over the frontend rendering.
  • Full support for asynchronous postback, e.g. for AngularJS.
  • Easily extendable with custom fields.
  • Built-in statistics for form submissions.
  • Editors can add texts and images alongside the form fields.
  • reCAPTCHA support (both "V2" and "invisible" reCAPTCHA).
  • Approval system for moderation of form submissions.
  • Extensive support for GDPR compliance.
  • Fully localizable.

Table of contents

Tutorials

  • Quick start tutorial - start here if you're new to Form Editor.
    • Topics covered: Getting started.
  • Hello Form Editor - add Form Editor to the Fanoe starter kit in just 15 minutes.
    • Topics covered: Getting started, form reuse.
  • Creating a poll with Form Editor - use Form Editor to create polls within the Fanoe starter kit.
    • Topics covered: Forms within the grid, form submission statistics, asynchronous form postback, multiple forms per page.
  • User ratings with Form Editor - build an article rating system with Form Editor.
  • Integrating with email marketing - integrate Form Editor submissions with your email marketing platform.
    • Topics covered: Submission event handling, integration, Campaign Monitor.
  • Default field values - prefill your form with default values.
    • Topics covered: Rendering, default values.
  • Configuring a conditional field - use Actions to conditionally show a field.
    • Topics covered: Actions, cross field validation.
  • Advanced receipts - create receipt pages and emails that allow the users to review and edit their own submissions.
    • Topics covered: Receipt pages and emails, displaying submitted data, editing existing submissions
  • Integrating with Azure Logic Apps - use Logic Apps to create integrations with CRM.
    • Topics covered: Web service integration, Logic Apps
  • Integrating with Zapier - use Zapier to create integrations with other systems.
    • Topics covered: Web service integration, Zapier
  • Comments with moderation - create a comment section for articles and use content templates to improve the workflow.
    • Topics covered: Approval system, form submission rendering, content templates.
  • GDPR self service - tackle some of the GDPR challenges with a self service approach.
    • Topics covered: GDPR, form submission rendering and manipulation, email templates.

Articles

Credits

A huge thank-you goes out to the talented Yusuke Kamiyamane for creating the Fugue Icons that are used heavily in this project. H5YR!

formeditor's People

Contributors

arjanwoldring avatar barrygibson avatar dbardi avatar greystate avatar kjac avatar nicholas-westby avatar schonert avatar timgeyssens avatar uniquelau avatar woldringarjan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

formeditor's Issues

Question related to forms

Hi Kenn,

I have installed your package and it does exactly what is advertised. The problem is I have a special need of allowing the user to customize the form and it does not really fix 100%. That's why I am writing you here, since it is not a feature/bug .. but more like an advice and start point for using the code.

I need to create a custom section in umbraco, with a simple tree. When a new page is created in the tree, the page content I need to be 2 tabs: first to be a form editor, and on the second a tinymce editor. There will be additional logic on save but this is not important here. I've seen that in order to create a new form, you need to create the data type (and that's what I want to do on that page). However, I don't necessary want to use the umbraco tables (actually I would prefer to not), and in order to insert a form on a page, I would simply need the form picker from the ones that I have defined.

Do you think that this requirenment whould be possible?

Thanks,

PrettyName on EmailTemplates

Hi,

I think there's an error in email templates, on @field.PrettyName, the message shows the field type (eg, "Textbox") and not the pretty name (eg "Telephone").

I don't know if there is any other way to get the "Name" attribute or even the "Placeholder" attribute.

Thanks!

Backed hover over icon, icon disappears.

In the property editor Submissions tab, if you hover over an icon, it despairs.. so it looks a bit jurkej..
Version 0.14.04
Google Chrome Version 51.0.2704.103 m

Regards.

image

Multiple pages with the same form

Hi!

It has happened to me that I have in multiple pages the same form, so I have to create the form on every page where I want it to appear.

My question is, is there any way to create a single form and reference it on multiple pages once?

I guess that the solution is create another View (duplicating FormEditorSync.cshtml) and change the var form to obtain it by a NodeId, but I can't make it work:

var form = Model.Content.GetPropertyValue<FormModel>("form");

Thanks!

Track transaction Id inside thankyou page

Hi kjac,

i need to track the transactionId (rowId) using a tracking pixel inside the thankyou page.

A possibile solution could be add a new property in SubmissionSuccessData class and fill it in SubmitEntry action method.

Any better ideas?

Feature request : Conditions

Hello, is there in plan to add Conditions so it is possible to build a survey or more complex forms ?
Thank you.

Error - FormEditor.SqlIndex.Storage.Index

I have undocumented the FormEditor.config line to enable SQLIndex, I get this error.
Am I missing something? Is this not included in the Core?

Could not load custom Index type (requested content ID: 4610)
System.Configuration.ConfigurationErrorsException: Custom Index type "FormEditor.SqlIndex.Storage.Index, FormEditor.SqlIndex" could not be found
at FormEditor.Configuration.Load()

SPAM prevention without reCAPTCHA. (Suggestion)

Hi.

Just a suggestion.

We had a nice spam filtering mechanism in place on our former site. The spam protection worked like this.
on the form add 2x new hidden fields,

on post you need to validate the fields like that
first field should be empty
second field must be date time (is encrypted ) with at least 5seconds offset. With this method we complety blocked bot submissions.

Regards.

Storing data on SQL not working probably

Or maybe a more correct title "Im probably doing it wrong".

So i want it to use SQL for storage so i have set my formeditor.config file to :

  <Storage>
     <Index type="FormEditor.SqlIndex.Storage.Index, FormEditor.SqlIndex" />
  </Storage>

But when i save a form it still creates the indexes in App_Data, and if i remove the form/index folder(ex. "1206") the data for the form is gone. Am i missing something

Rename select type fields

The "Select box" and "Drop-down" are both select type fields. They should be renamed accordingly to avoid people getting confused.

See also #11

Not able to submit the data in submittion

Hello,

I have tried with our own css to be refereed with formeditor's controls, and render the page in master template you can see like http://umbracodev2.brnd.com/umbraco/preview/?id=2772#?id=2772

Now, after doing that I am not able to submit any data from forms to submission tab in content page of the form

image

Even I had tried to go with the inspect element to track the error but its working very smooth with JS file , so again failed to track the error.

Can you please tell me what I am doing wrong ? If you want my umbraco credentials its like below

username : brndadmin
password : qhfxGJet

Content form name is "Form Flemming"

Thanks
Kalpesh Dave

Question reload listing on async postback

Hi @kjac,
I was hoping for a little advice, I have setup something similar to you recent rating tutorial, but want to refresh the listing following a submission. (my solution is a bit like a todo list) Also the users are allowed to submit multiple submissions, so I need clear the form so they can add a new record. Any tips or suggestion where to look would be greatly appreciated, I am new to angular and trying to nut it out.

Thanks

Barry

Custom filed throws a YSOD

Hi. I have a custom field configured like this.

<Field type="ap.package.selector" name="Package selector" fixedValues="true" />

image

Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.String[]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
Path 'pages[0].rows[0].cells[0].fields[0].submittedValues', line 31, position 20.

[JsonSerializationException: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.String[]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
Path 'pages[0].rows[0].cells[0].fields[0].submittedValues', line 31, position 20.]
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) +1760
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) +92
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ResolvePropertyAndCreatorValues(JsonObjectContract contract, JsonProperty containerProperty, JsonReader reader, Type objectType, IDictionary`2& extensionData) +527
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObjectUsingCreatorWithParameters(JsonReader reader, JsonObjectContract contract, JsonProperty containerProperty, ObjectConstructor`1 creator, String id) +537
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateNewObject(JsonReader reader, JsonObjectContract objectContract, JsonProperty containerMember, JsonProperty containerProperty, String id, Boolean& createdFromNonDefaultCreator) +179
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) +555
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) +92
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id) +708
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id) +310
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) +119
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target) +208
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id) +1423
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) +590
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) +92
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id) +708
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id) +310
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) +119
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target) +208
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id) +1423
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) +590
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) +92
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id) +708
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id) +310
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) +119
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target) +208
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id) +1423
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) +590
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) +92
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id) +708
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id) +310
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) +119
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target) +208
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id) +1423
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) +590
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) +92
   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent) +451
   Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType) +210
   Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings) +137
   Newtonsoft.Json.JsonConvert.DeserializeObject(String value, JsonSerializerSettings settings) +66
   FormEditor.SerializationHelper.DeserializeFormModel(String json) +48
   FormEditor.FormValueConverter.ConvertDataToSource(PublishedPropertyType propertyType, Object source, Boolean preview) +62
   Umbraco.Web.PublishedCache.XmlPublishedCache.XmlPublishedProperty.get_Value() +58
   Umbraco.Web.PublishedPropertyExtension.GetValue(IPublishedProperty property, Boolean withDefaultValue, T defaultValue) +73
   Umbraco.Web.PublishedContentExtensions.GetPropertyValue(IPublishedContent content, String alias, Boolean recurse, Boolean withDefaultValue, T defaultValue) +82
   Umbraco.Web.PublishedContentExtensions.GetPropertyValue(IPublishedContent content, String alias) +59
   ASP._Page_Views_Partials_FormEditor_SyncCustom_cshtml.Execute() in c:\Solutions\MojAdriaplin\Umbraco.Adriaplin\Adriaplin.Web\Views\Partials\FormEditor\SyncCustom.cshtml:12
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +198
   System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +105
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +90
   System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +256
   System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +107
   Umbraco.Core.Profiling.ProfilingView.Render(ViewContext viewContext, TextWriter writer) +113
   System.Web.Mvc.HtmlHelper.RenderPartialInternal(String partialViewName, ViewDataDictionary viewData, Object model, TextWriter writer, ViewEngineCollection viewEngineCollection) +277
   System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model, ViewDataDictionary viewData) +91
   System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model) +32
   ASP._Page_Views_pageGetAQuote_cshtml.Execute() in c:\Solutions\MojAdriaplin\Umbraco.Adriaplin\Adriaplin.Web\Views\pageGetAQuote.cshtml:13
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +198
   System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +105
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +78
   System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +256
   System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +107
   Umbraco.Core.Profiling.ProfilingView.Render(ViewContext viewContext, TextWriter writer) +113
   System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +290
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +13
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +56
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +420
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +420
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +420
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +52
   System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +173
   System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +100
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27
   System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +13
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +36
   System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +12
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +22
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +26
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
   System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +21
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +28
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9765121
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

Question: is FormEditor using jquery.validate?

Hi @kjac,

Does FormEditor use Jquery.validate? I am getting some javascript errors caused by a unknown in jquery.validate, I have this on my master because some of my other stuff uses it and I think its putting its nose in where it shouldn't be. I can't see any reference to FormEditor using it so was going to do some refactoring so it wouldn't be referenced on the form pages but wanted to check if it's supposed to be being referenced and used?

Thanks

Barry

[Feature Request] Add file upload field value as attachment to notification &| confirmation email templates

@kjac
Hope you're well!
I've been asked if there any way to add an attachment to the sent emails if a file is uploaded?

I've gone through the code and wondered what you thought would be the best way to update the private static void SendEmails method on line 404 of FormEditor/Source/Solution/FormEditor/FormModel.cs to be able to pass in the file upload value/path as an attachment as such:

 MailMessage message = new MailMessage {
                From = from,
                Subject = subject,
                Body = body,
                IsBodyHtml = (body.Contains("<html") || body.Contains("<body")) || body.Contains("<div")
            };


Attachment at = new Attachment(Server.MapPath("~/UPLOADED/PATH/GOES/HERE"));
message.Attachments.Add(at);

Maybe with an overload of the method based on a checkbox in the back office file upload field asking "Attach to email(s)"?

Thoughts?
J

Feature Request: Parent/Child forms

Hi @kjac (and anyone else who cares to comment 😄),
I'm putting together some functionality to allow parent and child forms, at this stage I am thinking of a custom field that allows you to specify a sub form. Then adding a parentID to the child form to allow the linkage. I'm still considering how to do it user interface wise. Any thoughts you might have would be welcome.

My initial use-case is to create a form that allows a user to add a company with company details and then multiple sets of contact details. However if it works the possibilities are endless.

Backoffice breaks on UaaS

There have been some reports that the backoffice breaks on UaaS when fetching field types and condition types. Probably an issue with scanning all assemblies in the app domain.

Number validation "value is" not working

Hey there :)

We have implemented the async angular part of formeditor into a few of our projects, so far its just been a stellar experience, but we are seeing a thing with "validation" just not working. We have been trying to debug it our selfs, also the reason for @schonert 2 PRs.

We have a form with a few fields in, and 1 validation rule, that a number field must have a value of 10.
image

When we submit the form with out any fields filled out, it will say "Number SKAL være 10" as it should. But when we fill out the field "10" it still says it.

Then when we FORCE through the form, the response we get from the service is :
{"invalidFields":[],"failedValidations":[{"rules":[{"field":{"name":"Number","formSafeName":"_Number","submittedValue":"10","invalid":false},"condition":{"expectedFieldValue":"10","type":"core.fieldvalueis"}}],"errorMessage":"Number SKAL være 10","invalid":true}]}

So it says we submit 10, it expects 10 and its invalid.

We also tried it with an email field which had the validation of "value is" [email protected] which gave the same we submit correct but it throws back an error for us.

Here is the "script" output on the page which also seems stellar:
` var _formDefaultValues = {};
_formDefaultValues._Checkbox_group = ["Option 2"];
_formDefaultValues._Radio_button_group = "Option 1";

  var _formValidations = [{"rules":[{"field":{"name":"Number","formSafeName":"_Number","submittedValue":null,"invalid":false},"condition":{"expectedFieldValue":"10","type":"core.fieldvalueis"}}],"errorMessage":"Number SKAL være 10","invalid":false}];


  var _formId = 1190;


  var _formTotalPages = 1;


  var _formHasReceipt = true;

`

We cannot see the error hope you can, help us (K)Benn Kanobi, your our only hope :)

FormEditorApi controller not found.

Hi. I have installed the latest version from NuGet, and installed it on Umbraco 7.4.3

In the backoffice a get /umbraco/backoffice/FormEditorApi/PropertyEditor/GetAllConditionTypes 404, for all Api call to the /umbraco/backoffice/FormEditorApi

Do you have any idea?

Multiple forms issues

Hello!

First of all thank you for your work, it's an excellent plugin and each version is more impressive.

It was to talk to you about a couple of things about the integration of multiple forms:

  • The validation of required fields interferes between forms. For example, if I fill out the form 1 and try it to submit, if I have a required field on the form 2 show the validator of the form 2.
  • Moreover, if I have one form on the top of the page and the other at the end, I don't know how make it work.

Regards.

Forms editor gives error after save and publish

Hi,

I am totally new in umbraco, so may be its my mistake to not identify the error or properly not set the FomsEditor.
This is really very useful and great tool for me. but when I did every thing and just save and publish it. Then go for the preview the form I got one error for assembly.

image

please assist me if I am doing any mistake.

Thanks in advance :)

Attaching files does not work.

Hi I have this configuration, and I can confirm that the form editor does not attach the files to the notification email.

image

image

image

Version 0.15.2.1
Regards!

Missing files

NuGet package is missing these files:

  • \App_Plugins\FormEditor\js\form.js
  • \App_Plugins\FormEditor\editor\form.html

Option to have number of submissions database driven

Currently limiting the submissions per user is cookie based, however if the user clears their cookies or uses another device they can submit again.
I know this is probably the best option for anonymous users however for known users (members) it would be useful to allow them to submit only once in a database driven fashion.

Export to Excel

Hi,

Can you please show me the code or way, so that I can able to export the submitted data to .xlsx or .xls file ?

I had tried to edit in DownloadController.cs file in which I had tried with code

// Rename .csv To .xls
System.IO.File.Move(@"Form data {0}.csv", @"Form data {0}.csv.xls");

        var _app = new Excel.Application();
        var _workbooks = _app.Workbooks;

        _workbooks.OpenText("Form data {0}.csv.xls",
                                 DataType: Excel.XlTextParsingType.xlDelimited,
                                 TextQualifier: Excel.XlTextQualifier.xlTextQualifierNone,
                                 ConsecutiveDelimiter: true,
                                 Semicolon: true);

        // Convert To Excle 97 / 2003
        //_workbooks[1].SaveAs("NewTest.xls", Excel.XlFileFormat.xlExcel5);

        //_workbooks.Close();

But its not worked for me..

Feature reques.

Hi guess who brakes again :)
how much time it would take to make all custom properties using the rewrite function like the body that you can insert {{propertyName}} to get its value.

Confirmation email -> Email subject
Notification email -> Email subject
Receipt -> heading
Receipt -> text

Wit this it would be possible to make more personalized responses and notifications.

An practical example.
a contact from post with subject "Contact from" could be changed to "Contact from from {{Name}} {{Surrname}}" => "Contact form from John Do", afterward it is supper easy to find it in the mailbox.

Name and Surrname are form fiedls.

Feature Request: Edit forms

Hi, Have you considered the ability to edit submitted forms at all.
I'm currently putting something together to list the records and and then allow the user to edit.
Is this type of functionality something that you have thought about or looked into, any input would be appreciated and welcome.

Dates not showing submitted value from saved record

Hi,

When you re-display a form that has a date field it doesn't show the date.

To solve this, I have overidden the SubmittedValue in the DateField.cs file:

public override string SubmittedValue
{
	get
	{
		DateTime submittedValue;
		if(DateTime.TryParse(base.SubmittedValue, out submittedValue))
		{
			return submittedValue.ToString("yyyy-MM-dd");
		}
		return base.SubmittedValue;
	}
	protected set
	{
		base.SubmittedValue = value;
	}
}

I'm not sure if this is your prefered approach, but I thought I would share my problem and solution.

Improvements

Hello,

First of all, congratulate you for the package, is very good and I found it very useful.

I've used it in various projects and I've thought these improvements, if you want to take them into account:

  • Support to placeholder attribute. I've solved this by extending the fields, but I think it could be very easy and useful if the package got it natively.
  • Being able to have more than one form in the same url. I've solved this by creating a form in code and post the values to other form in another url.

Regards!

Allow ReplyTo Address in Notification email

Hi kjac,

it would be great if we can set an option to enable replyTo for the Notification email.
I could make a PR if you want, but we should decide the UI logic first.

Thanks,
Alessandro

Set fields values programmatically during form initialization

Hi kjac,

here again with another question :P

I'm building a simple hotel website with a booking-form inside a dedicated page.
In the header of all other website pages there's a fast mini-booking-form with only 3 fields: dateFrom, dateTo, number of persons.

When the fast-form has been submitted a GET request is created against the bookingPage Url.
What I'd like to achieve is set each form field value to the corresponding query string value.

The little problem I have is that SubmittedValue property has protected setter.

Any idea on how could I achieve that?
Thank you,
Alessandro

hi,

hi,

I am using formeditor and now I just want to fit it with our CSS that we are using material CSS. I have tried to remove the boot strap CSS from sample form and tried to give our own CSS to have consistency in project.

image

but as you see in the screen shot it will always take bootstrap css from some where. i already have removed the things from the cshtml file and make its layout on standerd master page that we have

image

can you please let me know that is there any other place in umbraco where I have to change the things?

thanks in advance for your help

template gives error

Hi,

sorry to write you always for small things, as I am new in umbraco and my first task is more then complex given by leaders then any umbraco new comers.

As the things is running very well with your sample files but if I tried to do the same for the other template with same code copy and paste then I am not able to get the things work.. and it always gives me same error

image

can you please tell me where I am wrong? or miss any config file to add entry?

The type or namespace name 'FormModel' could not be found

Hello,

I am attempting to put my form in a partial view to use on every page of the site through the Master.cshtml. I have done the following...

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage

@{
IEnumerable rootNode = Umbraco.TypedContentAtRoot();
var contactForm = rootNode.Where(x => x.IsDocumentType("contactForm")).First();
}

@{
// get the form model (named "form" on the content type)
var form = contactForm.GetPropertyValue("form");
}

@\* NOTE: if you're not using form pages, you can access all form rows directly with form.Rows *@ @foreach (var page in form.Pages) {

but get the error

"The type or namespace name 'FormModel' could not be found"

I am new to Umbraco and might be missing something simple.

Thanks

May I Use Your Storage Code?

Hi Kenn,

I made Formulate, which is similar to your form editor. I noticed your form editor has support to store submissions: https://github.com/kjac/FormEditor/blob/master/Docs/storage.md

I am planning to add support for this to Formulate. My hope was that I can use some of your code to help speed up the process of adding support for storage of submissions. Would that be OK with you?

If so, I would be happy to add a link to your project from the "Thanks" section here: https://github.com/rhythmagency/formulate

By the way, I couldn't find a forum to submit questions to, so I hope this is the right place to do so.

-Nick

rowId in AfterAddToIndex Event

Hi kjac,

impressive work. I'm playing with your code and it's as simple as extensible.
Just one question: i need to pass the persisted rowId to an external CRM application.

But on AfterAddToIndex event the rowId in not exposed by the the form model.
Could you plz add it?

Thanks,
Alessandro

Feature request.

Hi.

I have come across an scenario where it would be a fantastic thing, that an editor could change/add class names of the row.

I have an really advanced form implementation and it is really difficult to edit because I have to create new row and move all elements to that tow, just to apply an style to that row.

I hope it make some sense..

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.