public object PersistForm(PersistFormRequest request) { // Variables. var result = default(object); var formsRootId = GuidHelper.GetGuid(FormConstants.Id); var parentId = GuidHelper.GetGuid(request.ParentId); // Catch all errors. try { // Parse or create the form ID. var formId = string.IsNullOrWhiteSpace(request.FormId) ? Guid.NewGuid() : GuidHelper.GetGuid(request.FormId); // Get the fields. var fields = request.Fields.MakeSafe() .Select(x => { var fieldType = Type.GetType(x.TypeFullName); var genericType = typeof(FormField<>); var specificType = genericType.MakeGenericType(new[] { fieldType }); var field = Activator.CreateInstance(specificType) as IFormField; field.Id = string.IsNullOrWhiteSpace(x.Id) ? Guid.NewGuid() : GuidHelper.GetGuid(x.Id); field.Alias = x.Alias; field.Name = x.Name; field.Label = x.Label; field.Validations = x.Validations.MakeSafe() .Select(y => GuidHelper.GetGuid(y)).ToArray(); field.FieldConfiguration = JsonHelper.Serialize(x.Configuration); return field; }) .ToArray(); // Get the handlers. var handlers = request.Handlers.MakeSafe().Select(x => { var handlerType = Type.GetType(x.TypeFullName); var genericType = typeof(FormHandler<>); var specificType = genericType.MakeGenericType(new[] { handlerType }); var handler = Activator.CreateInstance(specificType) as IFormHandler; handler.Id = string.IsNullOrWhiteSpace(x.Id) ? Guid.NewGuid() : GuidHelper.GetGuid(x.Id); handler.Alias = x.Alias; handler.Name = x.Name; handler.HandlerConfiguration = JsonHelper.Serialize(x.Configuration); return handler; }).ToArray(); // Get the ID path. var parent = parentId == Guid.Empty ? null : Entities.Retrieve(parentId); var path = parent == null ? new[] { formsRootId, formId } : parent.Path.Concat(new[] { formId }).ToArray(); // Create the form. var form = new Form() { Id = formId, Path = path, Alias = request.Alias, Name = request.Name, Fields = fields, Handlers = handlers }; // Persist the form. Persistence.Persist(form); // Success. result = new { Success = true, FormId = GuidHelper.GetString(formId) }; } catch (Exception ex) { // Error. LogHelper.Error<FormsController>(PersistFormError, ex); result = new { Success = false, Reason = UnhandledError }; } // Return the result. return result; }
public object PersistForm(PersistFormRequest request) { // Variables. var result = default(object); var formsRootId = GuidHelper.GetGuid(FormConstants.Id); var parentId = GuidHelper.GetGuid(request.ParentId); // Catch all errors. try { // Parse or create the form ID. var isNew = string.IsNullOrWhiteSpace(request.FormId); var formId = isNew ? Guid.NewGuid() : GuidHelper.GetGuid(request.FormId); // Get the fields. var fields = request.Fields.MakeSafe() .Select(x => { var fieldType = Type.GetType(x.TypeFullName); var fieldTypeInstance = FormFieldTypeCollection .FirstOrDefault(y => y.GetType() == fieldType); var field = new FormField(fieldTypeInstance) { Id = string.IsNullOrWhiteSpace(x.Id) ? Guid.NewGuid() : GuidHelper.GetGuid(x.Id), Alias = x.Alias, Name = x.Name, Label = x.Label, Category = x.Category, Validations = x.Validations.MakeSafe() .Select(y => GuidHelper.GetGuid(y)).ToArray(), FieldConfiguration = JsonHelper.Serialize(x.Configuration) }; return(field); }) .ToArray(); // Get the handlers. var handlers = request.Handlers.MakeSafe().Select(x => { var handlerType = Type.GetType(x.TypeFullName); var handlerTypeInstance = FormHandlerTypeCollection .FirstOrDefault(y => y.GetType() == handlerType); var handler = new FormHandler(handlerTypeInstance) { Id = string.IsNullOrWhiteSpace(x.Id) ? Guid.NewGuid() : GuidHelper.GetGuid(x.Id), Alias = x.Alias, Name = x.Name, Enabled = x.Enabled, HandlerConfiguration = JsonHelper.Serialize(x.Configuration) }; return(handler); }).ToArray(); // Get the ID path. var parent = parentId == Guid.Empty ? null : Entities.Retrieve(parentId); var path = parent == null ? new[] { formsRootId, formId } : parent.Path.Concat(new[] { formId }).ToArray(); // Create the form. var form = new Form() { Id = formId, Path = path, Alias = request.Alias, Name = request.Name, Fields = fields, Handlers = handlers }; // Persist the form. Persistence.Persist(form); // For new forms, automatically create a layout and a form configuration. var layoutNamePrefix = "Layout for "; var layoutNameSuffix = " (Autogenerated)"; var layoutAliasPrefix = "layout_"; var layoutAliasSuffix = "_autogenerated"; var autoLayoutData = JsonHelper.Serialize(new { rows = new[] { new { cells = new [] { new { columnSpan = 12, fields = form.Fields.Select(x => new { id = GuidHelper.GetString(x.Id) }) } } } }, formId = GuidHelper.GetString(form.Id), autopopulate = true }); if (isNew) { // Create new layout. var layoutId = Guid.NewGuid(); var layout = new Layout() { KindId = GuidHelper.GetGuid(app.Constants.Layouts.LayoutBasic.Id), Id = layoutId, Path = new[] { GuidHelper.GetGuid(LayoutConstants.Id), layoutId }, Name = layoutNamePrefix + request.Name + layoutNameSuffix, Alias = layoutAliasPrefix + request.Alias + layoutAliasSuffix, Data = autoLayoutData }; // Persist layout. LayoutPersistence.Persist(layout); // Create a new form configuration. var plainJsTemplateId = GuidHelper.GetGuid("f3fb1485c1d14806b4190d7abde39530"); var template = Config.Templates.FirstOrDefault(x => x.Id == plainJsTemplateId) ?? Config.Templates.FirstOrDefault(); var configId = Guid.NewGuid(); var configuredForm = new ConfiguredForm() { Id = configId, Path = path.Concat(new[] { configId }).ToArray(), Name = request.Name, TemplateId = template?.Id, LayoutId = layoutId }; // Persist form configuration. ConFormPersistence.Persist(configuredForm); } // Get existing layouts that should autopopulate. var layouts = GetFormLayouts(null) .Select(x => new { Layout = x, Configuration = x.DeserializeConfiguration() as LayoutBasicConfiguration }) .Where(x => x.Configuration != null) .Where(x => x.Configuration.FormId.HasValue && x.Configuration.FormId.Value == formId) .Where(x => x.Configuration.Autopopulate); //: Autopopulate the layouts. foreach (var existingLayout in layouts) { existingLayout.Layout.Data = autoLayoutData; var layoutName = existingLayout.Layout.Name ?? string.Empty; var layoutAlias = existingLayout.Layout.Alias ?? string.Empty; if (layoutName.StartsWith(layoutNamePrefix) && layoutName.EndsWith(layoutNameSuffix)) { existingLayout.Layout.Name = layoutNamePrefix + form.Name + layoutNameSuffix; } if (layoutAlias.StartsWith(layoutAliasPrefix) && layoutAlias.EndsWith(layoutAliasSuffix)) { existingLayout.Layout.Alias = layoutAliasPrefix + form.Name + layoutAliasSuffix; } LayoutPersistence.Persist(existingLayout.Layout); } // Success. result = new { Success = true, FormId = GuidHelper.GetString(formId) }; } catch (Exception ex) { // Error. Logger.Error <FormsController>(ex, PersistFormError); result = new { Success = false, Reason = UnhandledError }; } // Return the result. return(result); }
public object PersistForm(PersistFormRequest request) { // Variables. var result = default(object); var formsRootId = GuidHelper.GetGuid(FormConstants.Id); var parentId = GuidHelper.GetGuid(request.ParentId); // Catch all errors. try { // Parse or create the form ID. var formId = string.IsNullOrWhiteSpace(request.FormId) ? Guid.NewGuid() : GuidHelper.GetGuid(request.FormId); // Get the fields. var fields = request.Fields.MakeSafe() .Select(x => { var fieldType = Type.GetType(x.TypeFullName); var fieldTypeInstance = FormFieldTypeCollection.FirstOrDefault(y => y.GetType() == fieldType); var field = new FormField(fieldTypeInstance) { Id = string.IsNullOrWhiteSpace(x.Id) ? Guid.NewGuid() : GuidHelper.GetGuid(x.Id), Alias = x.Alias, Name = x.Name, Label = x.Label, Category = x.Category, Validations = x.Validations.MakeSafe() .Select(y => GuidHelper.GetGuid(y)).ToArray(), FieldConfiguration = JsonHelper.Serialize(x.Configuration) }; return(field); }) .ToArray(); // Get the handlers. var handlers = request.Handlers.MakeSafe().Select(x => { var handlerType = Type.GetType(x.TypeFullName); var handlerTypeInstance = FormHandlerTypeCollection.FirstOrDefault(y => y.GetType() == handlerType); var handler = new FormHandler(handlerTypeInstance) { Id = string.IsNullOrWhiteSpace(x.Id) ? Guid.NewGuid() : GuidHelper.GetGuid(x.Id), Alias = x.Alias, Name = x.Name, Enabled = x.Enabled, HandlerConfiguration = JsonHelper.Serialize(x.Configuration) }; return(handler); }).ToArray(); // Get the ID path. var parent = parentId == Guid.Empty ? null : Entities.Retrieve(parentId); var path = parent == null ? new[] { formsRootId, formId } : parent.Path.Concat(new[] { formId }).ToArray(); // Create the form. var form = new Form() { Id = formId, Path = path, Alias = request.Alias, Name = request.Name, Fields = fields, Handlers = handlers }; // Persist the form. Persistence.Persist(form); // Success. result = new { Success = true, FormId = GuidHelper.GetString(formId) }; } catch (Exception ex) { // Error. Logger.Error <FormsController>(ex, PersistFormError); result = new { Success = false, Reason = UnhandledError }; } // Return the result. return(result); }
public object PersistForm(PersistFormRequest request) { // Variables. var result = default(object); var formsRootId = GuidHelper.GetGuid(FormConstants.Id); var parentId = GuidHelper.GetGuid(request.ParentId); // Catch all errors. try { // Parse or create the form ID. var formId = string.IsNullOrWhiteSpace(request.FormId) ? Guid.NewGuid() : GuidHelper.GetGuid(request.FormId); // Get the fields. var fields = request.Fields.MakeSafe() .Select(x => { var fieldType = Type.GetType(x.TypeFullName); var genericType = typeof(FormField <>); var specificType = genericType.MakeGenericType(new[] { fieldType }); var field = Activator.CreateInstance(specificType) as IFormField; field.Id = string.IsNullOrWhiteSpace(x.Id) ? Guid.NewGuid() : GuidHelper.GetGuid(x.Id); field.Alias = x.Alias; field.Name = x.Name; field.Label = x.Label; field.Validations = x.Validations.MakeSafe() .Select(y => GuidHelper.GetGuid(y)).ToArray(); field.FieldConfiguration = JsonHelper.Serialize(x.Configuration); return(field); }) .ToArray(); // Get the handlers. var handlers = request.Handlers.MakeSafe().Select(x => { var handlerType = Type.GetType(x.TypeFullName); var genericType = typeof(FormHandler <>); var specificType = genericType.MakeGenericType(new[] { handlerType }); var handler = Activator.CreateInstance(specificType) as IFormHandler; handler.Id = string.IsNullOrWhiteSpace(x.Id) ? Guid.NewGuid() : GuidHelper.GetGuid(x.Id); handler.Alias = x.Alias; handler.Name = x.Name; handler.HandlerConfiguration = JsonHelper.Serialize(x.Configuration); return(handler); }).ToArray(); // Get the ID path. var parent = parentId == Guid.Empty ? null : Entities.Retrieve(parentId); var path = parent == null ? new[] { formsRootId, formId } : parent.Path.Concat(new[] { formId }).ToArray(); // Create the form. var form = new Form() { Id = formId, Path = path, Alias = request.Alias, Name = request.Name, Fields = fields, Handlers = handlers }; // Persist the form. Persistence.Persist(form); // Success. result = new { Success = true, FormId = GuidHelper.GetString(formId) }; } catch (Exception ex) { // Error. LogHelper.Error <FormsController>(PersistFormError, ex); result = new { Success = false, Reason = UnhandledError }; } // Return the result. return(result); }