public HttpResponseMessage UpdateData(JObject json)
        {
            try
            {
                var    module       = OpenContentModuleConfig.Create(ActiveModule, PortalSettings);
                string key          = json["key"].ToString();
                var    dataManifest = module.Settings.Template.Manifest.GetAdditionalData(key);

                IDataSource ds        = DataSourceManager.GetDataSource(module.Settings.Manifest.DataSource);
                var         dsContext = OpenContentUtils.CreateDataContext(module, UserInfo.UserID);

                var dsItem = ds.GetData(dsContext, dataManifest.ScopeType, dataManifest.StorageKey ?? key);
                if (dsItem == null)
                {
                    ds.AddData(dsContext, dataManifest.ScopeType, dataManifest.StorageKey ?? key, json["form"]);
                }
                else
                {
                    ds.UpdateData(dsContext, dsItem, json["form"]);
                }
                return(Request.CreateResponse(HttpStatusCode.OK, new
                {
                    isValid = true
                }));
            }
            catch (Exception exc)
            {
                App.Services.Logger.Error(exc);
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc));
            }
        }
예제 #2
0
        public void Import(string filename, bool importTemplate, bool importData, bool importAdditionalData, bool importSettings)
        {
            // unzip all
            string allStartPath = ModuleImportDirectory;
            string allZipPath   = ImportDirectory + filename;

            if (Directory.Exists(allStartPath))
            {
                Directory.Delete(allStartPath, true);
            }

            ZipFile.ExtractToDirectory(allZipPath, allStartPath);

            var export = JObject.Parse(File.ReadAllText(ModuleImportDirectory + "export.json"));

            Files = export["Files"] as JObject;
            // unzip template
            if (importTemplate)
            {
                string startPath = HostingEnvironment.MapPath("~/" + PortalSettings.HomeDirectory + "OpenContent/Templates/" + export["Name"]);
                if (!Directory.Exists(startPath))
                {
                    Directory.CreateDirectory(startPath);
                }
                string zipPath = ModuleImportDirectory + export["Name"] + ".zip";

                if (Directory.Exists(startPath))
                {
                    Directory.Delete(startPath, true);
                }

                ZipFile.ExtractToDirectory(zipPath, startPath);
            }
            if (importSettings)
            {
                ModuleController mc = new ModuleController();
                mc.UpdateModuleSetting(ModuleId, "template", export["Template"].ToString()
                                       .Replace("Portals/" + export["PortalId"] + "/", "Portals/" + PortalId + "/"));
                //.Replace("[PORTALID]", PortalId.ToString()));
                if (export["Settings"] != null)
                {
                    mc.UpdateModuleSetting(ModuleId, "data", export["Settings"].ToString());
                }
                mc.UpdateModuleSetting(ModuleId, "query", export["Query"].ToString());

                DataCache.ClearCache();
            }
            var         module    = OpenContentModuleConfig.Create(ModuleId, TabId, PortalSettings);
            IDataSource ds        = DataSourceManager.GetDataSource(module.Settings.Manifest.DataSource);
            var         dsContext = OpenContentUtils.CreateDataContext(module);

            if (importData)
            {
                var alpaca = ds.GetAlpaca(dsContext, true, true, false);
                var data   = JToken.Parse(File.ReadAllText(ModuleImportDirectory + "data.json"));
                if (module.IsListMode())
                {
                    var dataList = ds.GetAll(dsContext, null).Items;
                    foreach (var item in dataList)
                    {
                        ds.Delete(dsContext, item);
                    }
                    if (data is JArray)
                    {
                        foreach (JObject json in data)
                        {
                            ds.Add(dsContext, ImportTraverse(alpaca, json));
                        }
                    }
                }
                else
                {
                    var dsItem = ds.Get(dsContext, null);
                    data = ImportTraverse(alpaca, data);
                    if (dsItem == null)
                    {
                        ds.Add(dsContext, data);
                    }
                    else
                    {
                        ds.Update(dsContext, dsItem, data);
                    }
                }
            }

            if (importAdditionalData && module.Settings.Manifest.AdditionalDataDefinition != null)
            {
                foreach (var item in module.Settings.Manifest.AdditionalDataDefinition)
                {
                    var alpaca   = ds.GetDataAlpaca(dsContext, true, true, false, item.Key);
                    var dataFile = ModuleImportDirectory + item.Key + ".json";
                    if (File.Exists(dataFile))
                    {
                        var data = JToken.Parse(File.ReadAllText(dataFile));

                        var dsItem = ds.GetData(dsContext, item.Value.ScopeType, item.Key);
                        data = ImportTraverse(alpaca, data);
                        if (dsItem == null)
                        {
                            ds.AddData(dsContext, item.Value.ScopeType, item.Key, data);
                        }
                        else
                        {
                            ds.UpdateData(dsContext, dsItem, data);
                        }
                    }
                }
            }
            //Directory.Delete(allStartPath, true);
        }