public override SystemItem FindSystemItem(string id)
        {
            Umbraco.Forms.Data.Storage.FormStorage fs = new Umbraco.Forms.Data.Storage.FormStorage();
            var form = fs.GetForm(Guid.Parse(id));

            if (form != null)
            {
                SystemItem sys = new SystemItem();
                sys.HasChildren = false;
                sys.Icon        = "icon_form.gif";
                sys.ItemId      = new ItemIdentifier(id, this.Id);
                sys.Name        = form.Name;
                return(sys);
            }

            return(null);
        }
        public override List <SystemItem> AvailableSystemItems()
        {
            List <SystemItem> items = new List <SystemItem>();

            Umbraco.Forms.Data.Storage.FormStorage fs = new Umbraco.Forms.Data.Storage.FormStorage();

            foreach (var f in fs.GetAllForms())
            {
                SystemItem item = new SystemItem();
                item.ItemId      = new ItemIdentifier(f.Id.ToString(), this.Id);
                item.Name        = f.Name;
                item.Description = f.Name;
                item.Icon        = "icon_form.gif";
                item.HasChildren = false;
                items.Add(item);
            }
            return(items);
        }
        public override Item HandleExtract(Item item)
        {
            var umbracoform = (UmbracoForm)item;

            //migrate workflowsettings
            if (umbracoform.WorkflowSettings.Count > 0)
            {
                using (var wfs = new Umbraco.Forms.Data.Storage.WorkflowStorage())
                {
                    foreach (var workflowSetting in umbracoform.WorkflowSettings)
                    {
                        var workflow = wfs.GetWorkflow(workflowSetting.Key);
                        if (workflow != null)
                        {
                            workflow.Settings = ReplaceSettings(workflow.Settings, workflowSetting.Value) as Dictionary <string, string>;
                            wfs.UpdateWorkflow(workflow);
                        }
                    }
                }
            }


            //migrate datasource settings
            if (umbracoform.DataSourceId != Guid.Empty)
            {
                using (var dss = new Umbraco.Forms.Data.Storage.DataSourceStorage())
                {
                    var datasource = dss.GetDataSource(umbracoform.DataSourceId);
                    if (datasource != null)
                    {
                        datasource.Settings = ReplaceSettings(datasource.Settings, umbracoform.DataSourceSettings) as Dictionary <string, string>;
                        dss.UpdateDataSource(datasource);
                    }
                }
            }


            //migrate prevaluesource settings
            if (umbracoform.PrevalueSourceSettings.Count > 0)
            {
                using (var pvs = new Umbraco.Forms.Data.Storage.PrevalueSourceStorage())
                {
                    foreach (var prevalueSettings in umbracoform.PrevalueSourceSettings)
                    {
                        var prevalueSource = pvs.GetPrevalueSource(prevalueSettings.Key);
                        if (prevalueSource != null)
                        {
                            prevalueSource.Settings = ReplaceSettings(prevalueSource.Settings, prevalueSettings.Value) as Dictionary <string, string>;
                            pvs.UpdatePreValueSource(prevalueSource);
                        }
                    }
                }
            }


            //migrate field and form settings
            using (var fs = new Umbraco.Forms.Data.Storage.FormStorage())
            {
                var form = fs.GetForm(Guid.Parse(umbracoform.ItemId.Id));
                if (form != null)
                {
                    //handle submit to node id
                    if (umbracoform.GoToPageOnSubmitId != Guid.Empty)
                    {
                        form.GoToPageOnSubmit = ExecutionContext.DatabasePersistence.GetNodeId(umbracoform.GoToPageOnSubmitId);
                    }

                    if (umbracoform.FieldSettings.Count > 0)
                    {
                        foreach (var fieldSetting in umbracoform.FieldSettings)
                        {
                            var field = form.AllFields.Where(x => x.Id == fieldSetting.Key).FirstOrDefault();
                            if (field != null)
                            {
                                field.Settings = ReplaceSettings(field.Settings, fieldSetting.Value) as Dictionary <string, string>;
                            }
                        }


                        fs.UpdateForm(form);
                    }
                }
            }

            return(item);
        }
        public override Item HandlePack(ItemIdentifier id)
        {
            var fs   = new Umbraco.Forms.Data.Storage.FormStorage();
            var form = fs.GetForm(Guid.Parse(id.Id));

            if (form == null)
            {
                return(null);
            }

            var item = new UmbracoForm();

            item.ItemId = id;
            item.Name   = form.Name;

            //Handle forms and fields
            var formPath = Umbraco.Forms.Core.Configuration.ContourFolder + "/data/forms/" + id.Id + ".json";

            item.Resources.Add(formPath);

            //handle submit to node id
            if (form.GoToPageOnSubmit > 0)
            {
                item.GoToPageOnSubmitId = ExecutionContext.DatabasePersistence.GetUniqueId(form.GoToPageOnSubmit);
                item.Dependencies.Add(item.GoToPageOnSubmitId.ToString(), ItemProviders.ProviderIDCollection.documentItemProviderGuid);
            }
            //Parse field settings and field prevalue source settings
            foreach (var field in form.AllFields)
            {
                var parsed = ParseSettings(field.FieldType.Settings(), field.Settings, item);
                if (parsed.Count > 0)
                {
                    item.FieldSettings.Add(field.Id, parsed);
                }

                if (field.PreValueSourceId != Guid.Empty && !item.PrevalueSourceSettings.ContainsKey(field.PreValueSourceId))
                {
                    var prvParsed = ParseSettings(field.PreValueSource.Type.Settings(), field.PreValueSource.Settings, item);
                    if (prvParsed.Count > 0)
                    {
                        item.PrevalueSourceSettings.Add(field.PreValueSourceId, prvParsed);
                    }

                    item.Resources.Add(Umbraco.Forms.Core.Configuration.ContourFolder + "/data/prevalueSources/" + field.PreValueSourceId + ".json");
                }
            }



            //parse data source settings
            if (form.HasDataSource())
            {
                using (var dss = new Umbraco.Forms.Data.Storage.DataSourceStorage())
                {
                    var dataSource = dss.GetDataSource(form.DataSource.Id);

                    if (dataSource != null)
                    {
                        var dsParsed = ParseSettings(dataSource.Type.Settings(), dataSource.Settings, item);

                        if (dsParsed.Count > 0)
                        {
                            item.DataSourceSettings = dsParsed;
                        }

                        //add as file to item
                        item.Resources.Add(Umbraco.Forms.Core.Configuration.ContourFolder + "/data/datasources/" + form.DataSource.Id.ToString() + ".json");
                    }
                }
            }

            //Parse workflow settings
            if (form.WorkflowIds.Count > 0)
            {
                using (var wfs = new Umbraco.Forms.Data.Storage.WorkflowStorage())
                {
                    foreach (var wfId in form.WorkflowIds)
                    {
                        var workflow = wfs.GetWorkflow(wfId);
                        if (workflow != null)
                        {
                            var wfParsed = ParseSettings(workflow.Type.Settings(), workflow.Settings, item);
                            if (wfParsed.Count > 0)
                            {
                                item.WorkflowSettings.Add(wfId, wfParsed);
                            }

                            //add file to item
                            item.Resources.Add(Umbraco.Forms.Core.Configuration.ContourFolder + "/data/workflows/" + wfId.ToString() + ".json");
                        }
                    }
                }
            }

            return(item);
        }
        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);
                            }
                        }
                    }
                }
            }
        }
Esempio n. 6
0
        public override Item HandlePack(ItemIdentifier id)
        {
            var fs = new Umbraco.Forms.Data.Storage.FormStorage();

            Forms.Core.Form form;

            var formsDataLocation = GetFormsDataLocation();

            try
            {
                // If there is no form on the target disk or cache this method raises a System.NullReferenceException
                // See https://github.com/umbraco/Umbraco.Courier.FormsProvider/issues/3
                form = fs.GetForm(Guid.Parse(id.Id));
            }
            catch (Exception ex)
            {
                return(null);
            }

            if (form == null)
            {
                return(null);
            }

            var item = new UmbracoForm();

            item.ItemId = id;
            item.Name   = form.Name;

            //Handle forms and fields
            var formPath = formsDataLocation + "/forms/" + id.Id + ".json";

            item.Resources.Add(formPath);

            //handle submit to node id
            if (form.GoToPageOnSubmit > 0)
            {
                item.GoToPageOnSubmitId = ExecutionContext.DatabasePersistence.GetUniqueId(form.GoToPageOnSubmit);
                item.Dependencies.Add(item.GoToPageOnSubmitId.ToString(), ItemProviders.ProviderIDCollection.documentItemProviderGuid);
            }
            //Parse field settings and field prevalue source settings
            foreach (var field in form.AllFields)
            {
                var parsed = ParseSettings(field.FieldType.Settings(), field.Settings, item);
                if (parsed.Count > 0)
                {
                    item.FieldSettings.Add(field.Id, parsed);
                }

                if (field.PreValueSourceId != Guid.Empty && !item.PrevalueSourceSettings.ContainsKey(field.PreValueSourceId))
                {
                    var prvParsed = ParseSettings(field.PreValueSource.Type.Settings(), field.PreValueSource.Settings, item);
                    if (prvParsed.Count > 0)
                    {
                        item.PrevalueSourceSettings.Add(field.PreValueSourceId, prvParsed);
                    }

                    item.Resources.Add(formsDataLocation + "/prevalueSources/" + field.PreValueSourceId + ".json");
                }
            }



            //parse data source settings
            if (form.HasDataSource())
            {
                using (var dss = new Umbraco.Forms.Data.Storage.DataSourceStorage())
                {
                    var dataSource = dss.GetDataSource(form.DataSource.Id);

                    if (dataSource != null)
                    {
                        var dsParsed = ParseSettings(dataSource.Type.Settings(), dataSource.Settings, item);

                        if (dsParsed.Count > 0)
                        {
                            item.DataSourceSettings = dsParsed;
                        }

                        //add as file to item
                        item.Resources.Add(formsDataLocation + "/datasources/" + form.DataSource.Id.ToString() + ".json");
                    }
                }
            }

            //Parse workflow settings
            if (form.WorkflowIds.Count > 0)
            {
                using (var wfs = new Umbraco.Forms.Data.Storage.WorkflowStorage())
                {
                    foreach (var wfId in form.WorkflowIds)
                    {
                        var workflow = wfs.GetWorkflow(wfId);
                        if (workflow != null)
                        {
                            var wfParsed = ParseSettings(workflow.Type.Settings(), workflow.Settings, item);
                            if (wfParsed.Count > 0)
                            {
                                item.WorkflowSettings.Add(wfId, wfParsed);
                            }

                            //add file to item
                            item.Resources.Add(formsDataLocation + "/workflows/" + wfId.ToString() + ".json");
                        }
                    }
                }
            }

            return(item);
        }