public override async Task <RepositoryResponse <UpdateViewModel> > SaveModelAsync(bool isSaveSubModels = false, MixCmsContext _context = null, IDbContextTransaction _transaction = null) { var result = await base.SaveModelAsync(isSaveSubModels, _context, _transaction); if (result.IsSucceed) { MixService.LoadFromDatabase(); MixService.SaveSettings(); } return(result); }
public override async Task <RepositoryResponse <ImportViewModel> > SaveModelAsync(bool isSaveSubModels = false, MixCmsContext _context = null, IDbContextTransaction _transaction = null) { var result = await base.SaveModelAsync(isSaveSubModels, _context, _transaction); if (result.IsSucceed && _context == null) { MixService.SetConfig("LastUpdateConfiguration", DateTime.UtcNow); MixService.LoadFromDatabase(); MixService.SaveSettings(); } return(result); }
public async Task <RepositoryResponse <UpdateViewModel> > Save([FromForm] string model, [FromForm] IFormFile assets, [FromForm] IFormFile theme) { var data = JsonConvert.DeserializeObject <UpdateViewModel>(model); if (assets != null) { data.Asset = new Lib.ViewModels.FileViewModel(assets, data.AssetFolder); FileRepository.Instance.SaveFile(assets, assets.FileName, data.AssetFolder); } if (theme != null) { string importFolder = $"wwwroot/Imports/Themes/{DateTime.UtcNow.ToString("dd-MM-yyyy")}/{data.Name}"; data.TemplateAsset = new Lib.ViewModels.FileViewModel(theme, importFolder); FileRepository.Instance.SaveFile(theme, theme.FileName, importFolder); } // Load default blank if created new without upload theme if (data.Id == 0 && theme == null) { if (data.IsCloneFromCurrentTheme) { var currentThemeFolder = $"{MixConstants.Folder.TemplatesFolder}/{MixService.GetConfig<string>(MixConstants.ConfigurationKeyword.ThemeFolder, _lang)}"; FileRepository.Instance.CopyDirectory(currentThemeFolder, data.TemplateFolder); } else { data.TemplateAsset = new Lib.ViewModels.FileViewModel() { Filename = "default_blank", Extension = ".zip", FileFolder = "wwwroot/Imports/Themes" }; } } if (data != null) { data.CreatedBy = User.Claims.FirstOrDefault(c => c.Type == "Username")?.Value; data.Specificulture = _lang; var result = await base.SaveAsync <UpdateViewModel>(data, true); if (result.IsSucceed) { MixService.LoadFromDatabase(); MixService.SaveSettings(); } return(result); } return(new RepositoryResponse <UpdateViewModel>() { Status = 501 }); }
public async Task <RepositoryResponse <UpdateViewModel> > Save([FromBody] UpdateViewModel model) { var result = await base.SaveAsync <UpdateViewModel>(model, true); if (result.IsSucceed) { MixService.SetConfig("LastUpdateConfiguration", DateTime.UtcNow); MixService.LoadFromDatabase(); MixService.SaveSettings(); } return(result); }
public override async Task<RepositoryResponse<MixLanguage>> RemoveModelAsync(bool isRemoveRelatedModels = false, MixCmsContext _context = null, IDbContextTransaction _transaction = null) { var result = await base.RemoveModelAsync(isRemoveRelatedModels, _context, _transaction); if (result.IsSucceed) { if (result.IsSucceed) { MixService.LoadFromDatabase(_context, _transaction); MixService.SaveSettings(); } } return result; }
public async Task<RepositoryResponse<UpdateViewModel>> Save([FromBody]UpdateViewModel data) { if (data != null) { data.Specificulture = _lang; var result = await base.SaveAsync<UpdateViewModel>(data, true); if (result.IsSucceed) { MixService.LoadFromDatabase(); MixService.SaveSettings(); } return result; } return new RepositoryResponse<UpdateViewModel>() { Status = 501 }; }
protected override void Up(MigrationBuilder migrationBuilder) { Version.TryParse(MixService.GetAppSetting <string>(MixConfigurations.CONST_MIXCORE_VERSION), out Version dbVersion); var prevVersion = new Version("1.0.0"); if (dbVersion == null || dbVersion.CompareTo(prevVersion) <= 0) { string schema = null; migrationBuilder.DropForeignKey("FK_mix_attribute_set_data_mix_attribute_set", "mix_attribute_set_data", schema); migrationBuilder.DropForeignKey("FK_mix_attribute_field_mix_attribute_set", "mix_attribute_field", schema); migrationBuilder.DropForeignKey("FK_mix_attribute_field_mix_attribute_set1", "mix_attribute_field", schema); migrationBuilder.DropIndex("IX_mix_attribute_field_AttributeSetId", "mix_attribute_field", schema); migrationBuilder.DropIndex("IX_mix_attribute_field_ReferenceId", "mix_attribute_field", schema); migrationBuilder.DropIndex("IX_mix_attribute_set_data_AttributeSetId", "mix_attribute_set_data", schema); migrationBuilder.DropIndex("IX_mix_attribute_set_value_DataId", "mix_attribute_set_value", schema); migrationBuilder.DropTable("mix_related_attribute_set"); migrationBuilder.DropTable("mix_attribute_set_reference"); migrationBuilder.RenameTable("mix_related_post", schema, "mix_post_association"); migrationBuilder.RenameTable("mix_attribute_set", schema, "mix_database"); migrationBuilder.RenameTable("mix_related_attribute_data", schema, "mix_database_data_association"); migrationBuilder.RenameTable("mix_attribute_set_value", schema, "mix_database_data_value"); migrationBuilder.RenameTable("mix_attribute_set_data", schema, "mix_database_data"); migrationBuilder.RenameTable("mix_attribute_field", schema, "mix_database_column"); migrationBuilder.RenameColumn("AttributeSetId", "mix_database_column", "MixDatabaseId", schema); migrationBuilder.RenameColumn("AttributeSetName", "mix_database_column", "MixDatabaseName", schema); migrationBuilder.RenameColumn("AttributeFieldId", "mix_database_data_value", "MixDatabaseColumnId", schema); migrationBuilder.RenameColumn("AttributeFieldName", "mix_database_data_value", "MixDatabaseColumnName", schema); migrationBuilder.RenameColumn("AttributeSetName", "mix_database_data_value", "MixDatabaseName", schema); migrationBuilder.RenameColumn("AttributeSetId", "mix_database_data_association", "MixDatabaseId", schema); migrationBuilder.RenameColumn("AttributeSetName", "mix_database_data_association", "MixDatabaseName", schema); migrationBuilder.RenameColumn("AttributeSetId", "mix_database_data", "MixDatabaseId", schema); migrationBuilder.RenameColumn("AttributeSetName", "mix_database_data", "MixDatabaseName", schema); MixService.SetConfig(MixConfigurations.CONST_MIXCORE_VERSION, "1.0.1"); MixService.SaveSettings(); } }
public async Task <ActionResult <bool> > Active([FromBody] Lib.ViewModels.MixThemes.UpdateViewModel model) { model.IsActived = true; var result = await Cms.Lib.ViewModels.MixThemes.Helper.ActivedThemeAsync(model.Id, model.Name, model.Specificulture); if (result.IsSucceed) { // MixService.SetConfig<string>(MixAppSettingKeywords.SiteName, _lang, data.Title); MixService.LoadFromDatabase(); MixService.SetConfig("InitStatus", 3); MixService.SetConfig(MixAppSettingKeywords.IsInit, false); MixService.SaveSettings(); _ = Mix.Services.MixCacheService.RemoveCacheAsync(); MixService.Reload(); } return(Ok(result)); }
public async Task <RepositoryResponse <UpdateViewModel> > Save([FromForm] string model, [FromForm] IFormFile assets, [FromForm] IFormFile theme) { var json = JObject.Parse(model); var data = json.ToObject <UpdateViewModel>(); if (assets != null) { data.Asset = new Lib.ViewModels.FileViewModel(assets, data.AssetFolder); FileRepository.Instance.SaveFile(assets, assets.FileName, data.AssetFolder); } if (theme != null) { string importFolder = $"wwwroot/Imports/Themes/{DateTime.UtcNow.ToString("dd-MM-yyyy")}/{data.Name}"; data.TemplateAsset = new Lib.ViewModels.FileViewModel(theme, importFolder); FileRepository.Instance.SaveFile(theme, theme.FileName, importFolder); } // Load default blank if created new without upload theme if (data.Id == 0 && theme == null) { data.TemplateAsset = new Lib.ViewModels.FileViewModel() { Filename = "default_blank", Extension = ".zip", FileFolder = "Imports/Themes" }; } if (data != null) { data.CreatedBy = User.Claims.FirstOrDefault(c => c.Type == "Username")?.Value; data.Specificulture = _lang; var result = await base.SaveAsync <UpdateViewModel>(data, true); if (result.IsSucceed) { MixService.LoadFromDatabase(); MixService.SaveSettings(); } return(result); } return(new RepositoryResponse <UpdateViewModel>() { Status = 501 }); }
private async Task <RepositoryResponse <bool> > InitCmsAsync(InitCmsViewModel model) { var result = new RepositoryResponse <bool>(); MixService.SetConnectionString(MixConstants.CONST_CMS_CONNECTION, model.ConnectionString); MixService.SetConnectionString(MixConstants.CONST_MESSENGER_CONNECTION, model.ConnectionString); MixService.SetConnectionString(MixConstants.CONST_ACCOUNT_CONNECTION, model.ConnectionString); MixService.SetConfig(MixConstants.CONST_SETTING_IS_MYSQL, model.IsMysql); MixService.SetConfig(MixConstants.CONST_SETTING_DATABASE_PROVIDER, model.DatabaseProvider); MixService.SetConfig(MixConstants.CONST_SETTING_LANGUAGE, model.Culture.Specificulture); InitCmsService sv = new InitCmsService(); var initResult = await sv.InitCms(model.SiteName, model.Culture); if (initResult.IsSucceed) { await InitRolesAsync(); result.IsSucceed = true; MixService.LoadFromDatabase(); MixService.SetConfig <bool>("IsInit", true); MixService.SetConfig <string>("DefaultCulture", model.Culture.Specificulture); MixService.SaveSettings(); MixService.Reload(); } else { // if cannot init cms // => reload from default settings // => save to appSettings MixService.Reload(); MixService.SaveSettings(); if (initResult.Exception != null) { result.Errors.Add(initResult.Exception.Message); result.Exception = initResult.Exception; } foreach (var item in initResult.Errors) { result.Errors.Add(item); } } return(result); }
protected override void Down(MigrationBuilder migrationBuilder) { var dbVersion = MixService.GetAppSetting <string>(MixConfigurations.CONST_MIXCORE_VERSION); if (string.IsNullOrEmpty(dbVersion) || dbVersion == "1.0.0") { string schema = null; // mix_related_attribute_set and mix_attribute_set_reference not used, so we don't need to restore them. migrationBuilder.RenameTable("mix_post_association", schema, "mix_related_post"); migrationBuilder.RenameTable("mix_database", schema, "mix_attribute_set"); migrationBuilder.RenameTable("mix_database_data_association", schema, "mix_related_attribute_data"); migrationBuilder.RenameTable("mix_database_data_value", schema, "mix_attribute_set_value"); migrationBuilder.RenameTable("mix_database_data", schema, "mix_attribute_set_data"); migrationBuilder.RenameTable("mix_database_column", schema, "mix_attribute_field"); migrationBuilder.RenameColumn("MixDatabaseId", "mix_database_column", "AttributeSetId", schema); migrationBuilder.RenameColumn("MixDatabaseName", "mix_database_column", "AttributeSetName", schema); migrationBuilder.RenameColumn("MixDatabaseColumnId", "mix_database_data_value", "AttributeFieldId", schema); migrationBuilder.RenameColumn("MixDatabaseColumnName", "mix_database_data_value", "AttributeFieldName", schema); migrationBuilder.RenameColumn("MixDatabaseName", "mix_database_data_value", "AttributeSetName", schema); migrationBuilder.RenameColumn("MixDatabaseId", "mix_database_data_association", "AttributeSetId", schema); migrationBuilder.RenameColumn("MixDatabaseName", "mix_database_data_association", "AttributeSetName", schema); migrationBuilder.RenameColumn("MixDatabaseId", "mix_database_data", "AttributeSetId", schema); migrationBuilder.RenameColumn("MixDatabaseName", "mix_database_data", "AttributeSetName", schema); migrationBuilder.CreateIndex("IX_mix_attribute_field_AttributeSetId", "mix_attribute_field", "AttributeSetId", schema); migrationBuilder.CreateIndex("IX_mix_attribute_field_ReferenceId", "mix_attribute_field", "ReferenceId", schema); migrationBuilder.CreateIndex("IX_mix_attribute_set_data_AttributeSetId", "mix_attribute_set_data", "AttributeSetId", schema); migrationBuilder.CreateIndex("IX_mix_attribute_set_value_DataId", "mix_attribute_set_value", "DataId", schema); migrationBuilder.AddForeignKey("FK_mix_attribute_set_data_mix_attribute_set", "mix_attribute_set_data", "AttributeSetId", "mix_attribute_set", schema); migrationBuilder.AddForeignKey("FK_mix_attribute_field_mix_attribute_set", "mix_attribute_field", "Id", "mix_attribute_set", schema); migrationBuilder.AddForeignKey("FK_mix_attribute_field_mix_attribute_set1", "mix_attribute_field", "Id", "mix_attribute_set", schema); MixService.SetConfig(MixConfigurations.CONST_MIXCORE_VERSION, "1.0.0"); MixService.SaveSettings(); } }
public static async Task <RepositoryResponse <InitViewModel> > InitTheme(string model, string username, string culture, IFormFile assets, IFormFile theme) { var json = JObject.Parse(model); var data = json.ToObject <InitViewModel>(); if (data != null) { data.CreatedBy = username; data.Status = MixContentStatus.Published; string importFolder = MixFolders.ThemePackage; if (theme != null) { MixFileRepository.Instance.SaveFile(theme, $"{importFolder}"); data.TemplateAsset = new FileViewModel(theme, importFolder); } else { data.TemplateAsset = new FileViewModel() { Filename = "_blank", Extension = MixFileExtensions.Zip, FileFolder = MixFolders.DataFolder }; } data.Title = MixService.GetConfig <string>(MixAppSettingKeywords.SiteName, culture); data.Name = SeoHelper.GetSEOString(data.Title); data.Specificulture = culture; var result = await data.SaveModelAsync(true); if (result.IsSucceed) { // MixService.SetConfig<string>(MixAppSettingKeywords.SiteName, _lang, data.Title); MixService.LoadFromDatabase(); MixService.SetConfig("InitStatus", 3); MixService.SetConfig(MixAppSettingKeywords.IsInit, false); MixService.SaveSettings(); _ = Mix.Services.MixCacheService.RemoveCacheAsync(); MixService.Reload(); } return(result); } return(new RepositoryResponse <InitViewModel>()); }
public RepositoryResponse <string> SaveGlobalSettings(string name, [FromBody] JObject model) { switch (name) { case "PortalThemeSettings": MixService.SetConfig(name, model); break; default: MixService.SetConfig(name, model["value"].ToString()); break; } var result = MixService.SaveSettings(); return(new RepositoryResponse <string>() { IsSucceed = result }); }
public static IHostBuilder CreateHostBuilder(string[] args) { if (!File.Exists($"{MixConstants.CONST_FILE_APPSETTING}")) { File.Copy($"{MixConstants.CONST_DEFAULT_FILE_APPSETTING}", $"{MixConstants.CONST_FILE_APPSETTING}"); var aesKey = AesEncryptionHelper.GenerateCombinedKeys(256); MixService.SetConfig <string>(MixAppSettingKeywords.ApiEncryptKey, aesKey); MixService.SetAuthConfig(MixAuthConfigurations.SecretKey, Guid.NewGuid().ToString("N")); MixService.SaveSettings(); } var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile(MixConstants.CONST_FILE_APPSETTING, optional: true, reloadOnChange: true) .Build(); return(Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup <Startup>(); })); }
public async Task <RepositoryResponse <bool> > InitLanguages([FromBody] List <MixLanguage> model) { if (model != null) { var result = new RepositoryResponse <bool>(); if (MixService.GetConfig <int>("InitStatus") == 3) { string culture = MixService.GetConfig <string>("DefaultCulture"); InitCmsService sv = new InitCmsService(); result = await sv.InitLanguagesAsync(culture, model); if (result.IsSucceed) { MixService.LoadFromDatabase(); MixService.SetConfig("InitStatus", 4); MixService.SetConfig("IsInit", true); MixService.SaveSettings(); MixService.Reload(); } } return(result); } return(new RepositoryResponse <bool>()); }
public async Task <RepositoryResponse <UpdateViewModel> > Save([FromForm] string model, [FromForm] IFormFile assets, [FromForm] IFormFile theme) { var json = JObject.Parse(model); var data = json.ToObject <UpdateViewModel>(); if (assets != null) { data.Asset = new Lib.ViewModels.FileViewModel(assets, data.AssetFolder); FileRepository.Instance.SaveWebFile(assets, data.AssetFolder); } if (theme != null) { string importFolder = $"Imports/Themes/{DateTime.UtcNow.ToShortDateString()}/{data.Name}"; data.TemplateAsset = new Lib.ViewModels.FileViewModel(theme, importFolder); FileRepository.Instance.SaveWebFile(theme, importFolder); } if (data != null) { data.CreatedBy = User.Claims.FirstOrDefault(c => c.Type == "Username")?.Value; data.Specificulture = _lang; var result = await base.SaveAsync <UpdateViewModel>(data, true); if (result.IsSucceed) { MixService.LoadFromDatabase(); MixService.SaveSettings(); } return(result); } return(new RepositoryResponse <UpdateViewModel>() { Status = 501 }); }
public async Task <RepositoryResponse <AccessTokenViewModel> > InitSuperAdmin([FromBody] MixRegisterViewModel model) { RepositoryResponse <AccessTokenViewModel> result = new RepositoryResponse <AccessTokenViewModel>(); if (ModelState.IsValid) { if (_userManager.Users.Count() == 0) { var user = new ApplicationUser { UserName = model.Username, Email = model.Email, FirstName = model.FirstName, LastName = model.LastName, Avatar = model.Avatar ?? MixService.GetConfig <string>("DefaultAvatar"), JoinDate = DateTime.UtcNow }; var createResult = await _userManager.CreateAsync(user, password : model.Password).ConfigureAwait(false); if (createResult.Succeeded) { user = await _userManager.FindByEmailAsync(model.Email).ConfigureAwait(false); await _userManager.AddToRoleAsync(user, MixRoles.SuperAdmin); await MixAccountHelper.LoadUserInfoAsync(user.UserName); var rsaKeys = RSAEncryptionHelper.GenerateKeys(); var aesKey = MixService.GetConfig <string>(MixAppSettingKeywords.ApiEncryptKey); var token = await _idHelper.GenerateAccessTokenAsync(user, true, aesKey, rsaKeys[MixConstants.CONST_RSA_PUBLIC_KEY]); if (token != null) { result.IsSucceed = true; MixService.LoadFromDatabase(); MixService.SetConfig <string>(MixAppSettingKeywords.ApiEncryptKey, aesKey); MixService.SetConfig("InitStatus", 2); MixService.SaveSettings(); MixService.Reload(); result.Data = token; return(result); } else { return(result); } } else { foreach (var error in createResult.Errors) { result.Errors.Add(error.Description); } return(result); } } } return(result); }
public async Task <RepositoryResponse <AccessTokenViewModel> > InitSuperAdmin([FromBody] MixRegisterViewModel model) { RepositoryResponse <AccessTokenViewModel> result = new RepositoryResponse <AccessTokenViewModel>(); if (ModelState.IsValid) { if (_userManager.Users.Count() == 0) { var user = new ApplicationUser { UserName = model.Username, Email = model.Email, FirstName = model.FirstName, LastName = model.LastName, Avatar = model.Avatar ?? MixService.GetConfig <string>("DefaultAvatar"), JoinDate = DateTime.UtcNow }; var createResult = await _userManager.CreateAsync(user, password : model.Password).ConfigureAwait(false); if (createResult.Succeeded) { user = await _userManager.FindByEmailAsync(model.Email).ConfigureAwait(false); await _userManager.AddToRoleAsync(user, "SuperAdmin"); model.ExpandView(); model.Id = user.Id; model.CreatedDateTime = DateTime.UtcNow; model.Avatar = model.Avatar ?? MixService.GetConfig <string>("DefaultAvatar"); model.CreatedDateTime = DateTime.UtcNow; model.Status = MixUserStatus.Active; model.LastModified = DateTime.UtcNow; model.CreatedBy = User.Identity.Name; model.ModifiedBy = User.Identity.Name; // Save to cms db context await model.SaveModelAsync(); var token = await _idHelper.GenerateAccessTokenAsync(user, true); if (token != null) { result.IsSucceed = true; MixService.LoadFromDatabase(); MixService.SetConfig("InitStatus", 2); MixService.SaveSettings(); MixService.Reload(); result.Data = token; return(result); } else { return(result); } } else { foreach (var error in createResult.Errors) { result.Errors.Add(error.Description); } return(result); } } } return(result); }