コード例 #1
0
        /// <summary>
        /// Each Umbraco User should have an Umbraco Forms permissions record for each form.
        /// This preserves existing permissions and adds a 'deny' permission if there is no record.
        /// </summary>
        /// <param name="userId">The user.</param>
        /// <param name="forEveryone">if set to <c>true</c> overwrite all existing permissions with 'deny'.</param>
        public void RemoveDefaultAccessToForms(int userId, bool forEveryone)
        {
            using (FormStorage formStorage = new FormStorage())
            {
                using (UserFormSecurityStorage formSecurityStorage = new UserFormSecurityStorage())
                {
                    IEnumerable <Form> allForms = formStorage.GetAllForms();
                    foreach (Form form in allForms)
                    {
                        var formSecurityForUser = formSecurityStorage.GetUserFormSecurity(userId, form.Id).FirstOrDefault();
                        var hasSecurityAlready  = (formSecurityForUser != null);
                        if (!hasSecurityAlready)
                        {
                            formSecurityForUser      = UserFormSecurity.Create();
                            formSecurityForUser.User = userId.ToString();
                            formSecurityForUser.Form = form.Id;
                        }
                        formSecurityForUser.HasAccess = false;

                        if (!hasSecurityAlready)
                        {
                            formSecurityStorage.InsertUserFormSecurity(formSecurityForUser);
                        }
                        else if (forEveryone)
                        {
                            formSecurityStorage.UpdateUserFormSecurity(formSecurityForUser);
                        }
                    }
                }
            }
        }
 public IEnumerable <Guid> ListForms()
 {
     try
     {
         using (var formStorage = new FormStorage())
         {
             return(formStorage.GetAllForms().Select(form => form.Id));
         }
     }
     catch (Exception exception)
     {
         LogHelper.Error <UmbracoFormsRetentionApiController>(exception.Message, exception);
         throw;
     }
 }
コード例 #3
0
        /// <summary>
        /// Resets forms security, which removes all permissions and gives everyone access to every form
        /// </summary>
        /// <param name="userService">The user service.</param>
        /// <exception cref="ArgumentNullException">userService</exception>
        public void ResetFormsSecurity(IUserService userService)
        {
            if (userService == null)
            {
                throw new ArgumentNullException(nameof(userService));
            }

            // For every Umbraco User including disabled accounts, remove their Umbraco Forms permissions (both deny and allow).
            // This actually grants everyone Manage Forms permission because the default is to allow everyone.
            var page  = 0;
            var total = 0;
            var users = userService.GetAll(page, 10, out total);

            while (users.Any())
            {
                foreach (var user in users)
                {
                    using (UserSecurityStorage userSecurityStorage = new UserSecurityStorage())
                    {
                        var userFormSecurityList = userSecurityStorage.GetUserSecurity(user.Id.ToString());
                        foreach (var userSecurity in userFormSecurityList)
                        {
                            userSecurityStorage.DeleteUserSecurity(userSecurity);
                        }
                    }
                }

                page++;
                users = userService.GetAll(page, 10, out total);
            }

            // For every form in Umbraco Forms, remove all the user permissions (both deny and allow).
            // This actually grants everyone access to every form because the default is to allow everyone.
            using (FormStorage formStorage = new FormStorage())
            {
                using (UserFormSecurityStorage formSecurityStorage = new UserFormSecurityStorage())
                {
                    IEnumerable <Form> allForms = formStorage.GetAllForms();
                    foreach (Form form in allForms)
                    {
                        formSecurityStorage.DeleteAllUserFormSecurityForForm(form.Id);
                    }
                }
            }
        }
コード例 #4
0
ファイル: core.cs プロジェクト: uMobile/uMobile4Contour
        public static string ListForm()
        {
            FormStorage fs = new FormStorage();
            System.Collections.Generic.List<Umbraco.Forms.Core.Form> forms = fs.GetAllForms();

            List calls = new List();

            foreach (Umbraco.Forms.Core.Form form in forms)
            {
                calls.AddListItem(new ListItem(form.Name,
                subtitle: "Created: " + form.Created.ToString(),
                icon: GenericIcon.FolderClose,
                action: new Call("ListRecord", new string[] { form.Id.ToString(), "1" })));
            }

            return calls.UmGo();
        }
コード例 #5
0
        public void Migrate(string connString)
        {
            var sql = DataLayerHelper.CreateSqlHelper(connString);

            // fix RecordFields where DataType is set to 'String' but data is stored as different type
            FixDataTypes(sql);

            // Migrate PreValue Sources

            var migratedPreValueSourceIds = new HashSet <Guid>();

            using (var mPreValueSourceStorage = new PrevalueSourceStorage(sql))
                using (var preValueSourceStorage = new Forms.Data.Storage.PrevalueSourceStorage())
                {
                    foreach (var mPvs in mPreValueSourceStorage.GetAllPrevalueSources())
                    {
                        if (mPvs.Type != null) // Skip unsupported pre-value source types
                        {
                            var pvs = new Umbraco.Forms.Core.FieldPreValueSource()
                            {
                                Id       = mPvs.Id,
                                Name     = mPvs.Name,
                                Type     = mPvs.Type,
                                Settings = mPvs.Settings
                            };

                            // Important: We need to use the update method, as the insert method would
                            // assign a new GUID as the ID of the pre-value source and thus
                            // break the migration.
                            //
                            // The update method works just as the insert method, with the only difference being that
                            // no ID is assigned and different events are fired.
                            preValueSourceStorage.UpdatePreValueSource(pvs);
                        }
                    }

                    // Get IDs of all pre-value sources in destination environment.
                    migratedPreValueSourceIds.UnionWith(preValueSourceStorage
                                                        .GetAll()
                                                        .Select(pvs => pvs.Id));
                }

            // Migrate Forms

            if (!IgnoreRecords)
            {
                // Fix the UFRecordDataString Value field length to be compatible with the old data.
                FixDataStringLength(sql);
            }

            using (var fs = new FormStorage(sql))
            {
                foreach (var form in fs.GetAllForms(false))
                {
                    var v4Form = new Umbraco.Forms.Core.Form();

                    v4Form.Id   = form.Id;
                    v4Form.Name = form.Name;
                    v4Form.DisableDefaultStylesheet = form.DisableDefaultStylesheet;
                    v4Form.FieldIndicationType      = (FormFieldIndication)System.Enum.Parse(typeof(FormFieldIndication), ((int)form.FieldIndicationType).ToString());
                    v4Form.GoToPageOnSubmit         = form.GoToPageOnSubmit;
                    v4Form.HideFieldValidation      = form.HideFieldValidation;
                    v4Form.Indicator             = form.Indicator;
                    v4Form.InvalidErrorMessage   = form.InvalidErrorMessage;
                    v4Form.ManualApproval        = form.ManualApproval;
                    v4Form.MessageOnSubmit       = form.MessageOnSubmit;
                    v4Form.RequiredErrorMessage  = form.RequiredErrorMessage;
                    v4Form.ShowValidationSummary = form.ShowValidationSummary;
                    v4Form.StoreRecordsLocally   = form.StoreRecordsLocally;
                    v4Form.XPathOnSubmit         = form.XPathOnSubmit;

                    foreach (var page in form.Pages)
                    {
                        var v4Page = new Umbraco.Forms.Core.Page();

                        if (!IgnoreObsoleteProperties)
                        {
                            v4Page.Id   = page.Id;
                            v4Page.Form = v4Form.Id;
                        }
                        v4Page.Caption = page.Caption;


                        foreach (var fieldset in page.FieldSets)
                        {
                            var v4Fieldset = new Umbraco.Forms.Core.FieldSet();
                            v4Fieldset.Id = fieldset.Id;
                            if (!IgnoreObsoleteProperties)
                            {
                                v4Fieldset.Page = v4Page.Id;
                            }
                            v4Fieldset.Caption = fieldset.Caption;

                            var v4Container = new Umbraco.Forms.Core.FieldsetContainer();
                            v4Container.Width = 12;

                            foreach (var field in fieldset.Fields)
                            {
                                var v4Field = new Umbraco.Forms.Core.Field();
                                v4Field.Id                   = field.Id;
                                v4Field.Caption              = field.Caption;
                                v4Field.ToolTip              = field.ToolTip;
                                v4Field.FieldTypeId          = field.FieldTypeId;
                                v4Field.InvalidErrorMessage  = field.InvalidErrorMessage;
                                v4Field.Mandatory            = field.Mandatory;
                                v4Field.RequiredErrorMessage = field.RequiredErrorMessage;
                                v4Field.RegEx                = field.RegEx;

                                using (var pvs = new PreValueStorage(sql))
                                {
                                    var prevalues = new List <string>();
                                    foreach (var prevalue in pvs.GetAllPreValues(field).OrderBy(x => x.SortOrder))
                                    {
                                        prevalues.Add(prevalue.Value);
                                    }
                                    v4Field.PreValues = prevalues;
                                }

                                if (field.PreValueSourceId != Guid.Empty &&
                                    migratedPreValueSourceIds.Contains(field.PreValueSourceId))
                                {
                                    v4Field.PreValueSourceId = field.PreValueSourceId;
                                }

                                v4Field.Condition = new Core.FieldCondition();
                                if (!IgnoreObsoleteProperties)
                                {
                                    v4Field.Condition.Id = field.Condition.Id;
                                }
                                v4Field.Condition.Enabled    = field.Condition.Enabled;
                                v4Field.Condition.ActionType = (Core.FieldConditionActionType)System.Enum.Parse(typeof(Core.FieldConditionActionType), ((int)field.Condition.ActionType).ToString());;
                                v4Field.Condition.LogicType  = (Core.FieldConditionLogicType)System.Enum.Parse(typeof(Core.FieldConditionLogicType), ((int)field.Condition.LogicType).ToString());;

                                var rules = new List <Core.FieldConditionRule>();

                                if (field.Condition.Rules != null)
                                {
                                    foreach (var rule in field.Condition.Rules)
                                    {
                                        var v4Rule = new Core.FieldConditionRule();

                                        if (!IgnoreObsoleteProperties)
                                        {
                                            v4Rule.Id = rule.Id;
                                        }
                                        v4Rule.Field    = rule.Field;
                                        v4Rule.Operator = (Core.FieldConditionRuleOperator)System.Enum.Parse(typeof(Core.FieldConditionRuleOperator), ((int)rule.Operator).ToString());;
                                        v4Rule.Value    = rule.Value;

                                        rules.Add(v4Rule);
                                    }
                                }

                                v4Field.Condition.Rules = rules;

                                using (var ss = new SettingsStorage(sql))
                                {
                                    foreach (var setting in  ss.GetSettingsAsList(field.Id))
                                    {
                                        v4Field.Settings.Add(setting.Key, setting.Value);
                                    }
                                }
                                v4Container.Fields.Add(v4Field);
                            }

                            v4Fieldset.Containers.Add(v4Container);

                            v4Page.FieldSets.Add(v4Fieldset);
                        }

                        v4Form.Pages.Add(v4Page);
                    }

                    using (var s = new Forms.Data.Storage.FormStorage())
                    {
                        v4Form = s.InsertForm(v4Form);

                        v4Form.Created = form.Created;

                        // Note: The form update is also required to work around issue CON-1051
                        // (field aliases are not set in Umbraco Forms below version 4.3.0 when inserting a new form).
                        s.UpdateForm(v4Form);
                    }

                    using (var ws = new WorkflowStorage(sql))
                    {
                        var wfs = ws.GetAllWorkFlows(form);

                        foreach (var workflow in wfs.OrderBy(wf => wf.SortOrder))
                        {
                            using (var wsv4 = new Forms.Data.Storage.WorkflowStorage())
                            {
                                var v4Workflow = new Core.Workflow();
                                v4Workflow.Name       = workflow.Name;
                                v4Workflow.Id         = workflow.Id;
                                v4Workflow.Type       = workflow.Type;
                                v4Workflow.ExecutesOn = (Core.Enums.FormState)System.Enum.Parse(typeof(Core.Enums.FormState), ((int)workflow.ExecutesOn).ToString());
                                v4Workflow.Form       = v4Form.Id;
                                v4Workflow.Settings   = workflow.Settings;
                                wsv4.InsertWorkflow(v4Form, v4Workflow);
                            }
                        }
                    }

                    if (!IgnoreRecords)
                    {
                        // store records
                        using (var rs = new RecordStorage(sql))
                        {
                            var records = rs.GetAllRecords(form);
                            using (var rs4 = new Forms.Data.Storage.RecordStorage())
                            {
                                foreach (var r in records)
                                {
                                    //if (rs4.GetRecordByUniqueId(r.Form) != null)
                                    //{
                                    //    // Don't import it again.
                                    //    continue;
                                    //}

                                    var v4Record = new Core.Record();
                                    v4Record.UniqueId      = r.Id;
                                    v4Record.Form          = v4Form.Id;
                                    v4Record.Created       = r.Created;
                                    v4Record.Updated       = r.Updated;
                                    v4Record.State         = (FormState)r.State;
                                    v4Record.CurrentPage   = r.currentPage;
                                    v4Record.UmbracoPageId = r.umbracoPageId;
                                    v4Record.IP            = r.IP;
                                    v4Record.MemberKey     = r.MemberKey;
                                    // field values - added in this second step as all values are otherwise deleted and reinserted which is SLOW
                                    v4Record.RecordFields = new Dictionary <Guid, Core.RecordField>();
                                    foreach (var kvp in r.RecordFields)
                                    {
                                        var rf = kvp.Value;
                                        v4Record.RecordFields.Add(kvp.Key, new Core.RecordField
                                        {
                                            Key           = rf.Key,
                                            FieldId       = rf.FieldId,
                                            Field         = GetFormField(v4Form, rf.FieldId), // field needs to be set correctly, otherwise UFRecordData doesn't get written
                                            DataType      = (Core.FieldDataType)rf.DataType,
                                            DataTypeAlias = rf.DataTypeAlias,
                                            Values        = rf.Values
                                        });
                                    }
                                    v4Record.RecordData = v4Record.GenerateRecordDataAsJson();

                                    rs4.InsertRecord(v4Record, v4Form);

                                    // reset DateTime fields to original value, InsertRecord sets them to DateTime.Now
                                    v4Record.Created = r.Created;
                                    v4Record.Updated = r.Updated;

                                    // Update the record via the database context as we only want to update two columns
                                    // and the UpdateRecord method of the RecordStorage would delete and re-insert all the record field values.
                                    ApplicationContext.Current.DatabaseContext.Database.Update(v4Record);
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #6
0
        public void Migrate(string connString)
        {
            var sql = DataLayerHelper.CreateSqlHelper(connString);

            // fix RecordFields where DataType is set to 'String' but data is stored as different type
            FixDataTypes(sql);

            using (var fs = new FormStorage(sql))
            {
                foreach (var form in fs.GetAllForms(false))
                {
                    Umbraco.Forms.Core.Form v4Form;
                    try
                    {
                        // Check for an existing form with that GUID
                        using (var v4Fs = new Umbraco.Forms.Data.Storage.FormStorage())
                            v4Form = v4Fs.GetForm(form.Id);
                    }
                    catch (NullReferenceException)
                    {
                        // Form hasn't been imported, import it now
                        v4Form = new Umbraco.Forms.Core.Form();

                        v4Form.Id   = form.Id;
                        v4Form.Name = form.Name;
                        v4Form.DisableDefaultStylesheet = form.DisableDefaultStylesheet;
                        v4Form.FieldIndicationType      = (FormFieldIndication)System.Enum.Parse(typeof(FormFieldIndication), ((int)form.FieldIndicationType).ToString());
                        v4Form.GoToPageOnSubmit         = form.GoToPageOnSubmit;
                        v4Form.HideFieldValidation      = form.HideFieldValidation;
                        v4Form.Indicator             = form.Indicator;
                        v4Form.InvalidErrorMessage   = form.InvalidErrorMessage;
                        v4Form.ManualApproval        = form.ManualApproval;
                        v4Form.MessageOnSubmit       = form.MessageOnSubmit;
                        v4Form.RequiredErrorMessage  = form.RequiredErrorMessage;
                        v4Form.ShowValidationSummary = form.ShowValidationSummary;
                        v4Form.StoreRecordsLocally   = form.StoreRecordsLocally;
                        v4Form.XPathOnSubmit         = form.XPathOnSubmit;

                        v4Form.NextLabel   = "Next";
                        v4Form.PrevLabel   = "Previous";
                        v4Form.SubmitLabel = "Submit";

                        foreach (var page in form.Pages)
                        {
                            var v4Page = new Umbraco.Forms.Core.Page();

                            v4Page.Caption = page.Caption;


                            foreach (var fieldset in page.FieldSets)
                            {
                                var v4Fieldset = new Umbraco.Forms.Core.FieldSet();
                                v4Fieldset.Caption = fieldset.Caption;

                                var v4Container = new Umbraco.Forms.Core.FieldsetContainer();
                                v4Container.Width = 12;

                                foreach (var field in fieldset.Fields)
                                {
                                    var v4Field = new Umbraco.Forms.Core.Field();
                                    v4Field.Id                   = field.Id;
                                    v4Field.Caption              = field.Caption;
                                    v4Field.ToolTip              = field.ToolTip;
                                    v4Field.FieldTypeId          = field.FieldTypeId;
                                    v4Field.InvalidErrorMessage  = field.InvalidErrorMessage;
                                    v4Field.Mandatory            = field.Mandatory;
                                    v4Field.RequiredErrorMessage = field.RequiredErrorMessage;
                                    v4Field.RegEx                = field.RegEx;

                                    using (var pvs = new PreValueStorage(sql))
                                    {
                                        var prevalues = new List <string>();
                                        foreach (var prevalue in pvs.GetAllPreValues(field).OrderBy(x => x.SortOrder))
                                        {
                                            prevalues.Add(prevalue.Value);
                                        }
                                        v4Field.PreValues = prevalues;
                                    }

                                    v4Field.Condition            = new Core.FieldCondition();
                                    v4Field.Condition.Enabled    = field.Condition.Enabled;
                                    v4Field.Condition.ActionType = (Core.FieldConditionActionType)System.Enum.Parse(typeof(Core.FieldConditionActionType), ((int)field.Condition.ActionType).ToString());;
                                    v4Field.Condition.LogicType  = (Core.FieldConditionLogicType)System.Enum.Parse(typeof(Core.FieldConditionLogicType), ((int)field.Condition.LogicType).ToString());;

                                    var rules = new List <Core.FieldConditionRule>();
                                    foreach (var rule in field.Condition.Rules)
                                    {
                                        var v4Rule = new Core.FieldConditionRule();

                                        v4Rule.Field    = rule.Field;
                                        v4Rule.Operator = (Core.FieldConditionRuleOperator)System.Enum.Parse(typeof(Core.FieldConditionRuleOperator), ((int)rule.Operator).ToString());;
                                        v4Rule.Value    = rule.Value;

                                        rules.Add(v4Rule);
                                    }
                                    v4Field.Condition.Rules = rules;

                                    using (var ss = new SettingsStorage(sql))
                                    {
                                        foreach (var setting in ss.GetSettingsAsList(field.Id))
                                        {
                                            v4Field.Settings.Add(setting.Key, setting.Value);
                                        }
                                    }
                                    v4Container.Fields.Add(v4Field);
                                }

                                v4Fieldset.Containers.Add(v4Container);

                                v4Page.FieldSets.Add(v4Fieldset);
                            }

                            v4Form.Pages.Add(v4Page);
                        }

                        using (var s = new Forms.Data.Storage.FormStorage())
                        {
                            v4Form = s.InsertForm(v4Form);
                        }

                        using (var ws = new WorkflowStorage(sql))
                        {
                            var wfs = ws.GetAllWorkFlows(form);

                            foreach (var workflow in wfs)
                            {
                                using (var wsv4 = new Forms.Data.Storage.WorkflowStorage())
                                {
                                    var v4Workflow = new Core.Workflow();
                                    v4Workflow.Name       = workflow.Name;
                                    v4Workflow.Id         = workflow.Id;
                                    v4Workflow.Type       = workflow.Type;
                                    v4Workflow.ExecutesOn = (Core.Enums.FormState)System.Enum.Parse(typeof(Core.Enums.FormState), ((int)workflow.ExecutesOn).ToString());
                                    v4Workflow.Form       = v4Form.Id;
                                    v4Workflow.Settings   = workflow.Settings;
                                    wsv4.InsertWorkflow(v4Form, v4Workflow);
                                }
                            }
                        }
                    }

                    if (IgnoreRecords)
                    {
                        continue;
                    }

                    // If we're importing data, this could take a while...
                    HttpContext.Current.Server.ScriptTimeout = 90000;

                    // Fix the UFRecordDataString Value field length to be compatible with the old data.
                    FixDataStringLength(sql);

                    // store records
                    using (var rs = new RecordStorage(sql))
                    {
                        var records = rs.GetAllRecords(form);
                        using (var rs4 = new Forms.Data.Storage.RecordStorage())
                        {
                            foreach (var r in records)
                            {
                                if (rs4.GetRecordByUniqueId(r.Id) != null)
                                {
                                    // Don't import it again.
                                    continue;
                                }

                                var v4Record = new Core.Record();
                                v4Record.Form          = v4Form.Id;
                                v4Record.Created       = r.Created;
                                v4Record.Updated       = r.Updated;
                                v4Record.State         = (FormState)r.State;
                                v4Record.CurrentPage   = r.currentPage;
                                v4Record.UmbracoPageId = r.umbracoPageId;
                                v4Record.IP            = r.IP;
                                v4Record.MemberKey     = r.MemberKey;
                                // field values - added in this second step as all values are otherwise deleted and reinserted which is SLOW
                                v4Record.RecordFields = new Dictionary <Guid, Core.RecordField>();
                                foreach (var kvp in r.RecordFields)
                                {
                                    var rf = kvp.Value;
                                    v4Record.RecordFields.Add(kvp.Key, new Core.RecordField
                                    {
                                        Key           = rf.Key,
                                        FieldId       = rf.FieldId,
                                        Field         = GetFormField(v4Form, rf.FieldId), // field needs to be set correctly, otherwise UFRecordData doesn't get written
                                        DataType      = (Core.FieldDataType)rf.DataType,
                                        DataTypeAlias = rf.DataTypeAlias,
                                        Values        = rf.Values
                                    });
                                }
                                v4Record.RecordData = v4Record.GenerateRecordDataAsJson();

                                rs4.InsertRecord(v4Record, v4Form);

                                // reset DateTime fields to original value, InsertRecord sets them to DateTime.Now
                                v4Record.Created = r.Created;
                                v4Record.Updated = r.Updated;

                                rs4.UpdateRecord(v4Record, v4Form);
                            }
                        }
                    }
                }
            }
        }
コード例 #7
0
        public void Migrate(string connString)
        {
            var sql = DataLayerHelper.CreateSqlHelper(connString);

            using (var fs = new FormStorage(sql))
            {
                foreach (var form in fs.GetAllForms(false))
                {
                    var v4Form = new Umbraco.Forms.Core.Form();

                    v4Form.Id   = form.Id;
                    v4Form.Name = form.Name;
                    v4Form.DisableDefaultStylesheet = form.DisableDefaultStylesheet;
                    v4Form.FieldIndicationType      = (FormFieldIndication)System.Enum.Parse(typeof(FormFieldIndication), ((int)form.FieldIndicationType).ToString());;
                    v4Form.GoToPageOnSubmit         = form.GoToPageOnSubmit;
                    v4Form.HideFieldValidation      = form.HideFieldValidation;
                    v4Form.Indicator             = form.Indicator;
                    v4Form.InvalidErrorMessage   = form.InvalidErrorMessage;
                    v4Form.ManualApproval        = form.ManualApproval;
                    v4Form.MessageOnSubmit       = form.MessageOnSubmit;
                    v4Form.RequiredErrorMessage  = form.RequiredErrorMessage;
                    v4Form.ShowValidationSummary = form.ShowValidationSummary;
                    v4Form.StoreRecordsLocally   = form.StoreRecordsLocally;
                    v4Form.XPathOnSubmit         = form.XPathOnSubmit;

                    v4Form.NextLabel   = "Next";
                    v4Form.PrevLabel   = "Previous";
                    v4Form.SubmitLabel = "Submit";

                    foreach (var page in form.Pages)
                    {
                        var v4Page = new Umbraco.Forms.Core.Page();

                        v4Page.Caption = page.Caption;


                        foreach (var fieldset in page.FieldSets)
                        {
                            var v4Fieldset = new Umbraco.Forms.Core.FieldSet();
                            v4Fieldset.Caption = fieldset.Caption;

                            var v4Container = new Umbraco.Forms.Core.FieldsetContainer();
                            v4Container.Width = 12;

                            foreach (var field in fieldset.Fields)
                            {
                                var v4Field = new Umbraco.Forms.Core.Field();
                                v4Field.Id                   = field.Id;
                                v4Field.Caption              = field.Caption;
                                v4Field.ToolTip              = field.ToolTip;
                                v4Field.FieldTypeId          = field.FieldTypeId;
                                v4Field.InvalidErrorMessage  = field.InvalidErrorMessage;
                                v4Field.Mandatory            = field.Mandatory;
                                v4Field.RequiredErrorMessage = field.RequiredErrorMessage;
                                v4Field.RegEx                = field.RegEx;

                                using (var pvs = new PreValueStorage(sql))
                                {
                                    var prevalues = new List <string>();
                                    foreach (var prevalue in pvs.GetAllPreValues(field).OrderBy(x => x.SortOrder))
                                    {
                                        prevalues.Add(prevalue.Value);
                                    }
                                    v4Field.PreValues = prevalues;
                                }

                                v4Field.Condition            = new Core.FieldCondition();
                                v4Field.Condition.Enabled    = field.Condition.Enabled;
                                v4Field.Condition.ActionType = (Core.FieldConditionActionType)System.Enum.Parse(typeof(Core.FieldConditionActionType), ((int)field.Condition.ActionType).ToString());;
                                v4Field.Condition.LogicType  = (Core.FieldConditionLogicType)System.Enum.Parse(typeof(Core.FieldConditionLogicType), ((int)field.Condition.LogicType).ToString());;

                                var rules = new List <Core.FieldConditionRule>();
                                foreach (var rule in field.Condition.Rules)
                                {
                                    var v4Rule = new Core.FieldConditionRule();

                                    v4Rule.Field    = rule.Field;
                                    v4Rule.Operator = (Core.FieldConditionRuleOperator)System.Enum.Parse(typeof(Core.FieldConditionRuleOperator), ((int)rule.Operator).ToString());;
                                    v4Rule.Value    = rule.Value;

                                    rules.Add(v4Rule);
                                }
                                v4Field.Condition.Rules = rules;

                                using (var ss = new SettingsStorage(sql))
                                {
                                    foreach (var setting in  ss.GetSettingsAsList(field.Id))
                                    {
                                        v4Field.Settings.Add(setting.Key, setting.Value);
                                    }
                                }
                                v4Container.Fields.Add(v4Field);
                            }

                            v4Fieldset.Containers.Add(v4Container);

                            v4Page.FieldSets.Add(v4Fieldset);
                        }

                        v4Form.Pages.Add(v4Page);
                    }

                    using (var ws = new WorkflowStorage(sql))
                    {
                        var wfs = ws.GetAllWorkFlows(form);

                        foreach (var workflow in wfs)
                        {
                            using (var wsv4 = new Forms.Data.Storage.WorkflowStorage())
                            {
                                var v4Workflow = new Core.Workflow();
                                v4Workflow.Name       = workflow.Name;
                                v4Workflow.Id         = workflow.Id;
                                v4Workflow.Type       = workflow.Type;
                                v4Workflow.ExecutesOn = (Core.Enums.FormState)System.Enum.Parse(typeof(Core.Enums.FormState), ((int)workflow.ExecutesOn).ToString());;;
                                v4Workflow.Settings   = workflow.Settings;
                                wsv4.InsertWorkflow(v4Form, v4Workflow);
                            }
                        }
                    }


                    using (var s = new Forms.Data.Storage.FormStorage()) {
                        s.InsertForm(v4Form);
                    }
                }
            }
        }