public FlowToken Execute(EntityToken entityToken, ActionToken actionToken, FlowControllerServicesContainer flowControllerServicesContainer)
        {
            var fieldToken = (FormFieldEntityToken)entityToken;
            var definition = DynamicFormsFacade.GetFormByName(fieldToken.FormName);
            var field      = definition.Model.Fields.Get(fieldToken.FieldName);

            definition.Model.Fields.Remove(field);

            if (RenderingLayoutFacade.HasCustomRenderingLayout(fieldToken.FormName))
            {
                var layout       = RenderingLayoutFacade.GetRenderingLayout(fieldToken.FormName);
                var fieldElement = layout.Body.Descendants().SingleOrDefault(el => el.Name == Namespaces.Xhtml + "p" && el.Value.Trim() == "%" + field.Name + "%");

                if (fieldElement != null)
                {
                    fieldElement.Remove();
                }

                RenderingLayoutFacade.SaveRenderingLayout(fieldToken.FormName, layout);
            }

            DynamicFormsFacade.SaveForm(definition);
            LocalizationsFacade.DeleteNamespace(Localization.GenerateKey(fieldToken.FormName, fieldToken.FieldName));

            new ParentTreeRefresher(flowControllerServicesContainer).PostRefreshMessages(entityToken);

            return(null);
        }
コード例 #2
0
        public override void OnFinish(object sender, EventArgs e)
        {
            var folderToken = (FormFolderEntityToken)EntityToken;

            var fieldName = GetBinding <string>("FieldName");
            var addFieldToRenderingLayout = GetBinding <bool>("AddFieldToRenderingLayout");
            var definition = DynamicFormsFacade.GetFormByName(folderToken.FormName);
            var field      = new FormFieldModel(definition.Model, fieldName, typeof(string), new List <Attribute>());

            var elementType        = Type.GetType(GetBinding <string>("InputElementType"));
            var inputTypeAttribute = (InputElementTypeAttribute)Activator.CreateInstance(elementType);

            field.Attributes.Add(inputTypeAttribute);
            definition.Model.Fields.Add(field);

            DynamicFormsFacade.SaveForm(definition);

            if (RenderingLayoutFacade.HasCustomRenderingLayout(folderToken.FormName) && addFieldToRenderingLayout)
            {
                var layut = RenderingLayoutFacade.GetRenderingLayout(folderToken.FormName);

                layut.Body.Add(new XElement(Namespaces.Xhtml + "p", String.Format("%{0}%", fieldName)));

                RenderingLayoutFacade.SaveRenderingLayout(folderToken.FormName, layut);
            }

            var fieldToken    = new FormFieldEntityToken(folderToken.FormName, fieldName);
            var workflowToken = new WorkflowActionToken(typeof(EditFormFieldWorkflow));

            CreateAddNewTreeRefresher(EntityToken).PostRefreshMessages(fieldToken);
            ExecuteAction(fieldToken, workflowToken);
        }
コード例 #3
0
        public override void OnFinish(object sender, EventArgs e)
        {
            var token      = (FormFieldEntityToken)EntityToken;
            var definition = DynamicFormsFacade.GetFormByName(token.FormName);
            var field      = definition.Model.Fields.Get(token.FieldName);

            DataSourceAttribute attribute;
            var datasourceType = Type.GetType(GetBinding <string>("DataSourceType"));

            if (datasourceType == typeof(StringBasedDataSourceAttribute))
            {
                attribute = (DataSourceAttribute)Activator.CreateInstance(datasourceType, new string[0]);
            }
            else
            {
                attribute = (DataSourceAttribute)Activator.CreateInstance(datasourceType);
            }

            field.Attributes.Add(attribute);

            field.EnsureValueType();

            DynamicFormsFacade.SaveForm(definition);

            var treeRefresher = CreateSpecificTreeRefresher();

            treeRefresher.PostRefreshMessages(EntityToken);
        }
コード例 #4
0
        public override bool Validate()
        {
            var fieldToken = (FormFieldEntityToken)EntityToken;

            var fieldName = GetBinding <string>("FieldName");

            if (fieldName != fieldToken.FieldName)
            {
                if (!FormFieldModel.IsValidName(fieldName))
                {
                    ShowFieldMessage("FieldName", "Field name is invalid, only a-z and 0-9 is allowed");

                    return(false);
                }

                var definition = DynamicFormsFacade.GetFormByName(fieldToken.FormName);
                var field      = definition.Model.Fields.Get(fieldName);

                if (field != null)
                {
                    ShowFieldMessage("FieldName", "Field name already exists");

                    return(false);
                }
            }

            return(true);
        }
コード例 #5
0
        public override void OnFinish(object sender, EventArgs e)
        {
            var formToken      = GetBinding <DataEntityToken>("BoundToken");
            var modelReference = (IModelReference)formToken.Data;

            var definition = DynamicFormsFacade.GetFormByName(modelReference.Name);

            var submitButtonLabel = GetBinding <string>("SubmitButtonLabel");

            SwitchAttribute <RequiresCaptchaAttribute>("RequiresCaptcha", definition.Model.Attributes);
            SwitchAttribute <ForceHttpsConnectionAttribute>("ForceHttpsConnection", definition.Model.Attributes);

            var submitButtonLabelAttr = definition.Model.Attributes.OfType <SubmitButtonLabelAttribute>().SingleOrDefault();

            if (submitButtonLabel != null)
            {
                definition.Model.Attributes.Remove(submitButtonLabelAttr);
            }

            if (!String.IsNullOrEmpty(submitButtonLabel))
            {
                submitButtonLabelAttr = new SubmitButtonLabelAttribute(submitButtonLabel);
                definition.Model.Attributes.Add(submitButtonLabelAttr);

                using (var writer = ResourceFacade.GetResourceWriter())
                {
                    writer.AddResource(GetKey("SubmitButtonLabel"), submitButtonLabel);
                }
            }

            Save(definition);
        }
コード例 #6
0
        public override void OnInitialize(object sender, EventArgs e)
        {
            if (BindingExist("BoundToken"))
            {
                return;
            }

            var fieldToken = (FormFieldEntityToken)EntityToken;

            var definition   = DynamicFormsFacade.GetFormByName(fieldToken.FormName);
            var field        = definition.Model.Fields.Get(fieldToken.FieldName);
            var defaultValue = String.Empty;

            XElement el;

            if (definition.DefaultValues.TryGetValue(field.Name, out el))
            {
                defaultValue = el.ToString();
            }

            Bindings.Add("FieldName", field.Name);

            Bindings.Add("Label", GetValue("Label") ?? field.Label);
            Bindings.Add("PlaceholderText", GetValue("PlaceholderText") ?? field.PlaceholderText);
            Bindings.Add("Help", GetValue("Help") ?? field.Help);

            Bindings.Add("DefaultValue", defaultValue);
            Bindings.Add("ValueType", field.ValueType);
            Bindings.Add("InputElementType", field.InputElementType.GetType().AssemblyQualifiedName);
            Bindings.Add("IsReadOnly", field.IsReadOnly);

            SetupFormData(field);

            Bindings.Add("BoundToken", fieldToken);
        }
コード例 #7
0
        public override void OnFinish(object sender, EventArgs e)
        {
            var token      = (FieldValidatorsEntityToken)EntityToken;
            var definition = DynamicFormsFacade.GetFormByName(token.FormName);
            var field      = definition.Model.Fields.Get(token.FieldName);

            var validatorType = Type.GetType(GetBinding <string>("ValidatorType"));
            var message       = GetBinding <string>("Message");
            var attribute     = (FormValidationAttribute)Activator.CreateInstance(validatorType, message);

            field.Attributes.Add(attribute);

            DynamicFormsFacade.SaveForm(definition);

            using (var writer = ResourceFacade.GetResourceWriter())
            {
                var setting = token.FieldName + ".Validation." + attribute.GetType().Name;
                var key     = Localization.GenerateKey(token.FormName, setting);

                writer.AddResource(key, message);
            }

            var editToken     = new FieldValidatorsEntityToken(token.FormName, token.FieldName, validatorType);
            var workflowToken = new WorkflowActionToken(typeof(EditFieldValidatorWorkflow));

            CreateSpecificTreeRefresher().PostRefreshMessages(EntityToken);
            ExecuteAction(editToken, workflowToken);
        }
        public override bool Validate()
        {
            var token = (FieldDependencyEntityToken)EntityToken;

            var value = GetBinding <string>("Value");

            var definition = DynamicFormsFacade.GetFormByName(token.FormName);
            var field      = definition.Model.Fields.Get(token.FieldName);
            var fromField  = definition.Model.Fields.Get(token.FromFieldName);
            var dependency = field.DependencyAttributes.Single(d => d.ReadFromFieldName == token.FromFieldName);

            var valueType = fromField.ValueType == typeof(IEnumerable <string>) ? typeof(string) : fromField.ValueType;

            try
            {
                var objectValue = Convert.ChangeType(value, valueType);
            }
            catch (Exception e)
            {
                ShowFieldMessage("Value", e.Message);

                return(false);
            }

            if (dependency.ResolveRequiredFieldValues().Any(v => (string)v == value))
            {
                ShowFieldMessage("Value", "Value is not unique");

                return(false);
            }

            return(true);
        }
コード例 #9
0
        public IEnumerable <Element> Provide(ElementProviderContext context, EntityToken token)
        {
            var validatorToken = (FieldValidatorsEntityToken)token;
            var form           = DynamicFormsFacade.GetFormByName(validatorToken.FormName);

            if (String.IsNullOrEmpty(validatorToken.Type))
            {
                if (form != null)
                {
                    var field = form.Model.Fields.Get(validatorToken.FieldName);
                    if (field != null)
                    {
                        foreach (var validator in field.ValidationAttributes)
                        {
                            var validatorType = validator.GetType();

                            var fieldValidatorElementHandle = context.CreateElementHandle(new FieldValidatorsEntityToken(form.Name, field.Name, validator.GetType()));
                            var fieldValidatorElement       = new Element(fieldValidatorElementHandle)
                            {
                                VisualData = new ElementVisualizedData
                                {
                                    Label       = validator.AttributeName(),
                                    ToolTip     = validator.AttributeName(),
                                    HasChildren = false,
                                    Icon        = ResourceHandle.BuildIconFromDefaultProvider("localization-element-closed-root"),
                                    OpenedIcon  = ResourceHandle.BuildIconFromDefaultProvider("localization-element-opened-root")
                                }
                            };

                            var editActionToken = new WorkflowActionToken(typeof(EditFieldValidatorWorkflow));
                            fieldValidatorElement.AddAction(new ElementAction(new ActionHandle(editActionToken))
                            {
                                VisualData = new ActionVisualizedData
                                {
                                    Label          = "Edit",
                                    ToolTip        = "Edit",
                                    Icon           = ResourceHandle.BuildIconFromDefaultProvider("generated-type-data-edit"),
                                    ActionLocation = ActionLocation
                                }
                            });

                            var deleteActionToken = new ConfirmWorkflowActionToken("Delete: " + validator.AttributeName(), typeof(DeleteFieldValidatorActionToken));
                            fieldValidatorElement.AddAction(new ElementAction(new ActionHandle(deleteActionToken))
                            {
                                VisualData = new ActionVisualizedData
                                {
                                    Label          = "Delete",
                                    ToolTip        = "Delete",
                                    Icon           = ResourceHandle.BuildIconFromDefaultProvider("generated-type-data-delete"),
                                    ActionLocation = ActionLocation
                                }
                            });

                            yield return(fieldValidatorElement);
                        }
                    }
                }
            }
        }
        public override void Submit()
        {
            var def = DynamicFormsFacade.GetFormByName(ModelInstance.Name);

            foreach (var handler in def.SubmitHandlers)
            {
                handler.Submit(ModelInstance);
            }

            base.Submit();
        }
コード例 #11
0
        public static Dictionary <string, string> GetFromFields(FieldDependencyEntityToken entityToken)
        {
            var definition = DynamicFormsFacade.GetFormByName(entityToken.FormName);
            var field      = definition.Model.Fields.Get(entityToken.FieldName);

            return(definition.Model.Fields.Where(f =>
                                                 f.Name != entityToken.FieldName &&
                                                 (f.ValueType == typeof(string) || f.ValueType == typeof(bool) || f.ValueType == typeof(IEnumerable <string>)) &&
                                                 field.DependencyAttributes.All(d => d.ReadFromFieldName != f.Name || d.ReadFromFieldName == entityToken.FromFieldName)
                                                 ).ToDictionary(f => f.Name, f => f.Name));
        }
コード例 #12
0
        public static void UpdateOrder(string formName, string consoleId, string entityToken, string serializedOrder)
        {
            var formDefinition = DynamicFormsFacade.GetFormByName(formName);

            UpdateOrder(formDefinition, serializedOrder);

            var serializedEntityToken = HttpUtility.UrlDecode(entityToken);

            if (!String.IsNullOrEmpty(serializedEntityToken))
            {
                UpdateParents(serializedEntityToken, consoleId);
            }
        }
コード例 #13
0
        public override void OnInitialize(object sender, EventArgs e)
        {
            if (BindingExist("BoundToken"))
            {
                return;
            }

            Bindings.Add("BoundToken", EntityToken);
            Bindings.Add("SubmitButtonLabel", GetValue("SubmitButtonLabel"));

            var modelReference = (IModelReference)((DataEntityToken)EntityToken).Data;
            var definition     = DynamicFormsFacade.GetFormByName(modelReference.Name);

            SetupFormData(definition, definition.Model);
        }
コード例 #14
0
        public FlowToken Execute(EntityToken entityToken, ActionToken actionToken, FlowControllerServicesContainer flowControllerServicesContainer)
        {
            var token       = (FieldDependencyEntityToken)entityToken;
            var definition  = DynamicFormsFacade.GetFormByName(token.FormName);
            var field       = definition.Model.Fields.Get(token.FieldName);
            var keyToRemove = field.DependencyAttributes.Single(itm => itm.ReadFromFieldName == token.FromFieldName);

            field.Attributes.Remove(keyToRemove);

            DynamicFormsFacade.SaveForm(definition);

            new ParentTreeRefresher(flowControllerServicesContainer).PostRefreshMessages(entityToken);

            return(null);
        }
コード例 #15
0
        public override void OnInitialize(object sender, EventArgs e)
        {
            if (BindingExist("Message"))
            {
                return;
            }

            var token = (FieldValidatorsEntityToken)EntityToken;

            var definition = DynamicFormsFacade.GetFormByName(token.FormName);
            var field      = definition.Model.Fields.Get(token.FieldName);
            var validator  = field.ValidationAttributes.Single(v => v.GetType().AssemblyQualifiedName == token.Type);

            Bindings.Add("FieldName", token.FieldName);
            Bindings.Add("Message", validator.GetValidationMessage(field));
        }
コード例 #16
0
        public FlowToken Execute(EntityToken entityToken, ActionToken actionToken, FlowControllerServicesContainer flowControllerServicesContainer)
        {
            var token      = (FieldDependencyValueEntityToken)entityToken;
            var definition = DynamicFormsFacade.GetFormByName(token.FormName);

            var field         = definition.Model.Fields.Get(token.FieldName);
            var dependency    = (DependsOnConstantAttribute)field.DependencyAttributes.Single(d => d.ReadFromFieldName == token.FromFieldName);
            var valueToRemove = dependency.RequiredFieldValues.Single(v => v.ToString() == token.Value);

            dependency.RequiredFieldValues.Remove(valueToRemove);

            DynamicFormsFacade.SaveForm(definition);

            new ParentTreeRefresher(flowControllerServicesContainer).PostRefreshMessages(entityToken);

            return(null);
        }
コード例 #17
0
        public FlowToken Execute(EntityToken entityToken, ActionToken actionToken, FlowControllerServicesContainer flowControllerServicesContainer)
        {
            var entryToken          = (DataSourceEntityToken)entityToken;
            var definition          = DynamicFormsFacade.GetFormByName(entryToken.FormName);
            var field               = definition.Model.Fields.Get(entryToken.FieldName);
            var dataSourceAttribute = field.Attributes.OfType <DataSourceAttribute>().First();

            field.Attributes.Remove(dataSourceAttribute);

            field.EnsureValueType();

            DynamicFormsFacade.SaveForm(definition);

            new ParentTreeRefresher(flowControllerServicesContainer).PostRefreshMessages(entityToken);

            return(null);
        }
コード例 #18
0
        public override void OnFinish(object sender, EventArgs e)
        {
            var token      = (FieldDependencyEntityToken)EntityToken;
            var definition = DynamicFormsFacade.GetFormByName(token.FormName);

            var field = definition.Model.Fields.Get(token.FieldName);

            var fromFieldName = GetBinding <string>("FromFieldName");

            var attribute = new DependsOnConstantAttribute(fromFieldName);

            field.Attributes.Add(attribute);

            DynamicFormsFacade.SaveForm(definition);

            CreateSpecificTreeRefresher().PostRefreshMessages(EntityToken);
        }
コード例 #19
0
        public override bool Validate()
        {
            var token      = (FieldValidatorsEntityToken)EntityToken;
            var definition = DynamicFormsFacade.GetFormByName(token.FormName);

            var field = definition.Model.Fields.Get(token.FieldName);

            var validatorType = Type.GetType(GetBinding <string>("ValidatorType"));

            if (field.ValidationAttributes.Any(f => f.GetType() == validatorType))
            {
                ShowFieldMessage("ValidatorType", "Validator already exists");

                return(false);
            }

            return(true);
        }
コード例 #20
0
        public override bool Validate()
        {
            var dataSourceToken = (DataSourceEntityToken)EntityToken;

            var entryValue = GetBinding <string>("EntryValue");

            var definition = DynamicFormsFacade.GetFormByName(dataSourceToken.FormName);
            var field      = definition.Model.Fields.Get(dataSourceToken.FieldName);

            var datasSource = field.DataSource.Select(itm => itm.Key).ToList();

            if (datasSource.Any(itm => itm == entryValue))
            {
                ShowFieldMessage("Entry value", "Entry value is not unique");

                return(false);
            }

            return(true);
        }
        public override void OnFinish(object sender, EventArgs e)
        {
            var token = (FieldDependencyEntityToken)EntityToken;

            var value = GetBinding <string>("Value");

            var definition = DynamicFormsFacade.GetFormByName(token.FormName);

            var field      = definition.Model.Fields.Get(token.FieldName);
            var fromField  = definition.Model.Fields.Get(token.FromFieldName);
            var dependency = (DependsOnConstantAttribute)field.DependencyAttributes.Single(d => d.ReadFromFieldName == token.FromFieldName);

            var valueType   = fromField.ValueType == typeof(IEnumerable <string>) ? typeof(string) : fromField.ValueType;
            var objectValue = Convert.ChangeType(value, valueType);

            dependency.RequiredFieldValues.Add(objectValue);

            DynamicFormsFacade.SaveForm(definition);

            CreateSpecificTreeRefresher().PostRefreshMessages(EntityToken);
        }
コード例 #22
0
        public override void OnFinish(object sender, EventArgs e)
        {
            var token = (FieldValidatorsEntityToken)EntityToken;

            var message = GetBinding <string>("Message");

            var definition = DynamicFormsFacade.GetFormByName(token.FormName);
            var field      = definition.Model.Fields.Get(token.FieldName);
            var validator  = field.ValidationAttributes.Single(v => v.GetType().AssemblyQualifiedName == token.Type);

            using (var writer = ResourceFacade.GetResourceWriter())
            {
                var setting = token.FieldName + ".Validation." + validator.GetType().Name;
                var key     = Localization.GenerateKey(token.FormName, setting);

                writer.AddResource(key, message);
            }

            CreateSpecificTreeRefresher().PostRefreshMessages(EntityToken);
            SetSaveStatus(true);
        }
コード例 #23
0
        protected override void OnLoad(EventArgs e)
        {
            var formName = Request.QueryString["formName"];

            if (Request.HttpMethod == "POST")
            {
                formName = Request.Form["formName"];
            }

            var formDefinition = DynamicFormsFacade.GetFormByName(formName);

            Master.CustomJsonDataName  = "formName";
            Master.CustomJsonDataValue = formName;

            Master.SortableItems = formDefinition.Model.Fields.Select(i => new SortableItem
            {
                Id   = i.Name,
                Name = i.Name
            });

            base.OnLoad(e);
        }
コード例 #24
0
        public override void OnFinish(object sender, EventArgs e)
        {
            var token         = GetBinding <FieldDependencyEntityToken>("Token");
            var fromFieldName = GetBinding <string>("FromFieldName");

            var definition = DynamicFormsFacade.GetFormByName(token.FormName);

            var field      = definition.Model.Fields.Get(token.FieldName);
            var dependency = field.DependencyAttributes.Single(d => d.ReadFromFieldName == token.FromFieldName);

            field.Attributes.Remove(dependency);

            field.Attributes.Add(new DependsOnConstantAttribute(fromFieldName, dependency.ResolveRequiredFieldValues()));

            DynamicFormsFacade.SaveForm(definition);

            var newToken = new FieldDependencyEntityToken(token.FormName, token.FieldName, fromFieldName);

            UpdateBinding("Token", newToken);
            SetSaveStatus(true, newToken);
            CreateSpecificTreeRefresher().PostRefreshMessages(new FieldDependencyEntityToken(token.FormName, token.FieldName));
        }
        public FlowToken Execute(EntityToken entityToken, ActionToken actionToken, FlowControllerServicesContainer flowControllerServicesContainer)
        {
            var entryToken = (StringBasedDataSourceEntryEntityToken)entityToken;
            var definition = DynamicFormsFacade.GetFormByName(entryToken.FormName);
            var field      = definition.Model.Fields.Get(entryToken.FieldName);
            var dataSource = field.DataSource.ToList();

            dataSource.Remove(dataSource.Get(entryToken.Id));

            var dataSourceAttribute = field.Attributes.OfType <StringBasedDataSourceAttribute>().First();

            field.Attributes.Remove(dataSourceAttribute);

            dataSourceAttribute = new StringBasedDataSourceAttribute(dataSource.Select(itm => itm.Key).ToArray());

            field.Attributes.Add(dataSourceAttribute);

            DynamicFormsFacade.SaveForm(definition);

            new ParentTreeRefresher(flowControllerServicesContainer).PostRefreshMessages(entityToken);

            return(null);
        }
コード例 #26
0
        public override void OnFinish(object sender, EventArgs e)
        {
            var dataSourceToken = (DataSourceEntityToken)EntityToken;

            var entryValue = GetBinding <string>("EntryValue");

            var definition  = DynamicFormsFacade.GetFormByName(dataSourceToken.FormName);
            var field       = definition.Model.Fields.Get(dataSourceToken.FieldName);
            var datasSource = field.DataSource.Select(itm => itm.Key).ToList();

            datasSource.Add(entryValue);

            var dataSourceAttribute = field.Attributes.OfType <StringBasedDataSourceAttribute>().First();

            field.Attributes.Remove(dataSourceAttribute);

            dataSourceAttribute = new StringBasedDataSourceAttribute(datasSource.ToArray());

            field.Attributes.Add(dataSourceAttribute);

            DynamicFormsFacade.SaveForm(definition);

            CreateAddNewTreeRefresher(EntityToken).PostRefreshMessages(new StringBasedDataSourceEntryEntityToken(dataSourceToken.FormName, dataSourceToken.FieldName, entryValue));
        }
コード例 #27
0
        public override bool Validate()
        {
            var token      = (FieldDependencyEntityToken)EntityToken;
            var definition = DynamicFormsFacade.GetFormByName(token.FormName);
            var field      = definition.Model.Fields.Get(token.FieldName);

            var fromFieldName = GetBinding <string>("FromFieldName");

            if (String.IsNullOrEmpty(fromFieldName))
            {
                ShowFieldMessage("fromFieldName", "Dependency field not set");

                return(false);
            }

            if (field.DependencyAttributes.Any(f => f.ReadFromFieldName == fromFieldName))
            {
                ShowFieldMessage("fromFieldName", "Dependency already exists");

                return(false);
            }

            return(true);
        }
        public IEnumerable <Element> Provide(ElementProviderContext context, EntityToken token)
        {
            var dependencyToken = (FieldDependencyEntityToken)token;
            var form            = DynamicFormsFacade.GetFormByName(dependencyToken.FormName);

            if (form == null)
            {
                yield break;
            }

            var field = form.Model.Fields.Get(dependencyToken.FieldName);

            if (field == null)
            {
                yield break;
            }

            if (String.IsNullOrEmpty(dependencyToken.FromFieldName))
            {
                foreach (var dependency in field.DependencyAttributes)
                {
                    var fromFieldName = dependency.ReadFromFieldName;

                    var fieldDependencyElementHandle = context.CreateElementHandle(new FieldDependencyEntityToken(form.Name, field.Name, fromFieldName));
                    var fieldDependencyElement       = new Element(fieldDependencyElementHandle)
                    {
                        VisualData = new ElementVisualizedData
                        {
                            Label       = fromFieldName,
                            ToolTip     = fromFieldName,
                            HasChildren = dependency.ResolveRequiredFieldValues().Any(),
                            Icon        = ResourceHandle.BuildIconFromDefaultProvider("localization-element-closed-root"),
                            OpenedIcon  = ResourceHandle.BuildIconFromDefaultProvider("localization-element-opened-root")
                        }
                    };

                    var editActionToken = new WorkflowActionToken(typeof(EditFieldDependencyWorkflow), new[] { PermissionType.Edit });
                    fieldDependencyElement.AddAction(new ElementAction(new ActionHandle(editActionToken))
                    {
                        VisualData = new ActionVisualizedData
                        {
                            Label          = "Edit dependency",
                            ToolTip        = "Edit dependency",
                            Icon           = ResourceHandle.BuildIconFromDefaultProvider("generated-type-data-edit"),
                            ActionLocation = ActionLocation
                        }
                    });

                    var addActionToken = new WorkflowActionToken(typeof(AddFieldDependencyValueWorkflow), new[] { PermissionType.Add });
                    fieldDependencyElement.AddAction(new ElementAction(new ActionHandle(addActionToken))
                    {
                        VisualData = new ActionVisualizedData
                        {
                            Label          = "Add value",
                            ToolTip        = "Add value",
                            Icon           = ResourceHandle.BuildIconFromDefaultProvider("generated-type-data-edit"),
                            ActionLocation = ActionLocation
                        }
                    });

                    var deleteActionToken = new ConfirmWorkflowActionToken("Delete: " + fromFieldName, typeof(DeleteFieldDependencyActionToken));
                    fieldDependencyElement.AddAction(new ElementAction(new ActionHandle(deleteActionToken))
                    {
                        VisualData = new ActionVisualizedData
                        {
                            Label          = "Delete",
                            ToolTip        = "Delete",
                            Icon           = ResourceHandle.BuildIconFromDefaultProvider("generated-type-data-delete"),
                            ActionLocation = ActionLocation
                        }
                    });

                    yield return(fieldDependencyElement);
                }
            }
            else
            {
                var dependency = field.DependencyAttributes.SingleOrDefault(d => d.ReadFromFieldName == dependencyToken.FromFieldName);
                if (dependency == null)
                {
                    yield break;
                }

                foreach (var value in dependency.ResolveRequiredFieldValues())
                {
                    var fieldDependencyValueElementHandle = context.CreateElementHandle(new FieldDependencyValueEntityToken(form.Name, field.Name, dependency.ReadFromFieldName, value.ToString()));
                    var fieldDependencyValueElement       = new Element(fieldDependencyValueElementHandle)
                    {
                        VisualData = new ElementVisualizedData
                        {
                            Label       = value.ToString(),
                            ToolTip     = value.ToString(),
                            HasChildren = false,
                            Icon        = ResourceHandle.BuildIconFromDefaultProvider("localization-element-closed-root"),
                            OpenedIcon  = ResourceHandle.BuildIconFromDefaultProvider("localization-element-opened-root")
                        }
                    };

                    var deleteActionToken = new ConfirmWorkflowActionToken("Delete: " + value, typeof(DeleteFieldDependencyValueActionToken));
                    fieldDependencyValueElement.AddAction(new ElementAction(new ActionHandle(deleteActionToken))
                    {
                        VisualData = new ActionVisualizedData
                        {
                            Label          = "Delete",
                            ToolTip        = "Delete",
                            Icon           = ResourceHandle.BuildIconFromDefaultProvider("generated-type-data-delete"),
                            ActionLocation = ActionLocation
                        }
                    });

                    yield return(fieldDependencyValueElement);
                }
            }
        }
コード例 #29
0
        public override void OnFinish(object sender, EventArgs e)
        {
            var fieldToken = GetBinding <FormFieldEntityToken>("BoundToken");

            var fieldName        = GetBinding <string>("FieldName");
            var label            = GetBinding <string>("Label");
            var placeholderText  = GetBinding <string>("PlaceholderText");
            var help             = GetBinding <string>("Help");
            var defaultValue     = GetBinding <string>("DefaultValue");
            var inputElementType = Type.GetType(GetBinding <string>("InputElementType"));
            var isReadOnly       = GetBinding <bool>("IsReadOnly");

            var definition = DynamicFormsFacade.GetFormByName(fieldToken.FormName);
            var field      = definition.Model.Fields.Get(fieldToken.FieldName);

            var isNewName = field.Name != fieldName;

            if (isNewName)
            {
                var oldNs = Localization.GenerateKey(fieldToken.FormName, field.Name);
                var newNs = Localization.GenerateKey(fieldToken.FormName, fieldName);

                LocalizationsFacade.RenameNamespace(oldNs, newNs, Localization.ResourceSet);

                if (RenderingLayoutFacade.HasCustomRenderingLayout(fieldToken.FormName))
                {
                    var layout = RenderingLayoutFacade.GetRenderingLayout(fieldToken.FormName);

                    var fieldElement = layout.Body.Descendants().SingleOrDefault(el => el.Name == Namespaces.Xhtml + "p" && el.Value.Trim() == "%" + field.Name + "%");
                    if (fieldElement != null)
                    {
                        fieldElement.Value = $"%{fieldName}%";
                    }

                    RenderingLayoutFacade.SaveRenderingLayout(fieldToken.FormName, layout);
                }
            }

            field.Name       = fieldName;
            field.IsReadOnly = isReadOnly;

            using (var writer = ResourceFacade.GetResourceWriter())
            {
                writer.AddResource(GetKey("Label"), (string)null);
                writer.AddResource(GetKey("PlaceholderText"), (string)null);
                writer.AddResource(GetKey("Help"), (string)null);

                var labelAttr = field.Attributes.OfType <FieldLabelAttribute>().SingleOrDefault();
                if (labelAttr != null)
                {
                    field.Attributes.Remove(labelAttr);
                }

                if (!String.IsNullOrEmpty(label))
                {
                    labelAttr = new FieldLabelAttribute(label);
                    field.Attributes.Add(labelAttr);

                    writer.AddResource(GetKey("Label"), label);
                }

                var placeholderAttr = field.Attributes.OfType <PlaceholderTextAttribute>().SingleOrDefault();
                if (placeholderAttr != null)
                {
                    field.Attributes.Remove(placeholderAttr);
                }

                if (!String.IsNullOrEmpty(placeholderText))
                {
                    placeholderAttr = new PlaceholderTextAttribute(placeholderText);
                    field.Attributes.Add(placeholderAttr);

                    writer.AddResource(GetKey("PlaceholderText"), placeholderText);
                }

                var helpAttribute = field.Attributes.OfType <FieldHelpAttribute>().FirstOrDefault();
                if (helpAttribute != null)
                {
                    field.Attributes.Remove(helpAttribute);
                }

                if (!String.IsNullOrEmpty(help))
                {
                    helpAttribute = new FieldHelpAttribute(help);
                    field.Attributes.Add(helpAttribute);

                    writer.AddResource(GetKey("Help"), help);
                }
            }

            definition.DefaultValues.Remove(field.Name);
            if (!String.IsNullOrEmpty(defaultValue))
            {
                definition.DefaultValues.Add(field.Name, XElement.Parse(defaultValue));
            }

            var inputTypeAttribute = field.Attributes.OfType <InputElementTypeAttribute>().FirstOrDefault();

            if (inputTypeAttribute != null)
            {
                field.Attributes.Remove(inputTypeAttribute);
            }

            inputTypeAttribute = (InputElementTypeAttribute)Activator.CreateInstance(inputElementType);
            field.Attributes.Add(inputTypeAttribute);

            field.EnsureValueType();

            SaveExtraSettings(field);

            DynamicFormsFacade.SaveForm(definition);

            if (isNewName)
            {
                fieldToken = new FormFieldEntityToken(definition.Model.Name, fieldName);

                UpdateBinding("BoundToken", fieldToken);
                SetSaveStatus(true, fieldToken);
            }
            else
            {
                SetSaveStatus(true);
            }

            CreateParentTreeRefresher().PostRefreshMessages(EntityToken);
        }
        public IEnumerable <Element> Provide(ElementProviderContext context, EntityToken token)
        {
            var fieldToken = (FormFieldEntityToken)token;
            var form       = DynamicFormsFacade.GetFormByName(fieldToken.FormName);

            if (form == null)
            {
                yield break;
            }

            var field = form.Model.Fields.Get(fieldToken.FieldName);

            if (field == null)
            {
                yield break;
            }

            var fieldValidatorsElementHandle = context.CreateElementHandle(new FieldValidatorsEntityToken(form.Name, field.Name));
            var fieldValidatorsElement       = new Element(fieldValidatorsElementHandle)
            {
                VisualData = new ElementVisualizedData
                {
                    Label       = "Validators",
                    ToolTip     = "Validators",
                    HasChildren = field.ValidationAttributes.Any(),
                    Icon        = ResourceHandle.BuildIconFromDefaultProvider("localization-element-closed-root"),
                    OpenedIcon  = ResourceHandle.BuildIconFromDefaultProvider("localization-element-opened-root")
                }
            };

            var addValidatorActionToken = new WorkflowActionToken(typeof(AddFieldValidatorWorkflow), new[] { PermissionType.Add });

            fieldValidatorsElement.AddAction(new ElementAction(new ActionHandle(addValidatorActionToken))
            {
                VisualData = new ActionVisualizedData
                {
                    Label          = "Add validator",
                    ToolTip        = "Add validator",
                    Icon           = ResourceHandle.BuildIconFromDefaultProvider("generated-type-data-edit"),
                    ActionLocation = ActionLocation
                }
            });

            yield return(fieldValidatorsElement);

            var fieldDependencyElementHandle = context.CreateElementHandle(new FieldDependencyEntityToken(form.Name, field.Name));
            var fieldDependencyElement       = new Element(fieldDependencyElementHandle)
            {
                VisualData = new ElementVisualizedData
                {
                    Label       = "Dependencies",
                    ToolTip     = "Dependencies",
                    HasChildren = field.DependencyAttributes.Any(),
                    Icon        = ResourceHandle.BuildIconFromDefaultProvider("localization-element-closed-root"),
                    OpenedIcon  = ResourceHandle.BuildIconFromDefaultProvider("localization-element-opened-root")
                }
            };

            var addDependencyActionToken = new WorkflowActionToken(typeof(AddFieldDependencyWorkflow), new[] { PermissionType.Add });

            fieldDependencyElement.AddAction(new ElementAction(new ActionHandle(addDependencyActionToken))
            {
                VisualData = new ActionVisualizedData
                {
                    Label          = "Add dependency",
                    ToolTip        = "Add dependency",
                    Icon           = ResourceHandle.BuildIconFromDefaultProvider("generated-type-data-edit"),
                    ActionLocation = ActionLocation
                }
            });

            yield return(fieldDependencyElement);

            var datasourceAttribute = field.Attributes.OfType <DataSourceAttribute>().FirstOrDefault();

            if (datasourceAttribute == null)
            {
                yield break;
            }

            var fieldsElementHandle = context.CreateElementHandle(new DataSourceEntityToken(datasourceAttribute.GetType(), form.Name, field.Name));
            var fieldElement        = new Element(fieldsElementHandle)
            {
                VisualData = new ElementVisualizedData
                {
                    Label       = "Datasource",
                    ToolTip     = "Datasource",
                    HasChildren = true,
                    Icon        = ResourceHandle.BuildIconFromDefaultProvider("localization-element-closed-root"),
                    OpenedIcon  = ResourceHandle.BuildIconFromDefaultProvider("localization-element-opened-root")
                }
            };

            var deleteActionToken = new ConfirmWorkflowActionToken("Delete datasource", typeof(DeleteDataSourceActionToken));

            fieldElement.AddAction(new ElementAction(new ActionHandle(deleteActionToken))
            {
                VisualData = new ActionVisualizedData
                {
                    Label          = "Delete datasource",
                    ToolTip        = "Delete datasource",
                    Icon           = ResourceHandle.BuildIconFromDefaultProvider("generated-type-data-delete"),
                    ActionLocation = ActionLocation
                }
            });

            if (datasourceAttribute.GetType() == typeof(StringBasedDataSourceAttribute))
            {
                var addActionToken = new WorkflowActionToken(typeof(AddStringBasedDataSourceEntryWorkflow), new[] { PermissionType.Add });
                fieldElement.AddAction(new ElementAction(new ActionHandle(addActionToken))
                {
                    VisualData = new ActionVisualizedData
                    {
                        Label          = "Add value",
                        ToolTip        = "Add value",
                        Icon           = ResourceHandle.BuildIconFromDefaultProvider("generated-type-data-edit"),
                        ActionLocation = ActionLocation
                    }
                });
            }

            yield return(fieldElement);
        }