public async Task<RepositoryResponse<List<Notification>>> AddNotifications(List<Notification> notifications) { var response = new RepositoryResponse<List<Notification>> { Success = true, Data = new List<Notification>() }; if (notifications.Count == 0) { response.Success = false; response.Error = new Exception("There are no notifications to add."); return response; } foreach (var notification in notifications) { var result = await AddNotification(notification); if (result.Success) { response.Data.Add(notification); } else { response.Success = false; response.Error = result.Error; break; } } return response; }
public async Task<RepositoryResponse<List<City>>> GetCities() { var response = new RepositoryResponse<List<City>> { Data = new List<City>() }; try { ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("City"); IEnumerable<ParseObject> result = await query.FindAsync(); foreach(ParseObject res in result) { response.Data.Add(new City(){ ID = res.ObjectId, NAME = res.Get<String>("Name")}); } response.Success = true; } catch (Exception ex) { response.Success = false; response.Error = ex; } return response; }
public void RegisterUser_Success() { UserRepository repository = new UserRepository(); User user = new User { USERNAME = string.Format("UT_{0}",DateTime.Now.Ticks), PASSWORD = "******", NAME = "Unit Test User", ID_DEPENDENCY= "iIAW2gamws" }; RepositoryResponse<User> expected = new RepositoryResponse<User> { Success = true, Data = user }; RepositoryResponse<User> result = repository.RegisterUser(user).GetAwaiter().GetResult(); Assert.IsTrue(result.Success, "User not registered"); Assert.IsNotNull(result.Data); Assert.IsNull(result.Error, "Some error ocurred"); }
public async void AddNotification_Success() { CityRepository repository = new CityRepository(); City city = new City(); //{ // NOTIFICATION_TEXT = "Unit Test notification", // CREATED_DATE = DateTime.Now, // ID_DEPENDENCY = "iIAW2gamws" //}; RepositoryResponse<City> expected = new RepositoryResponse<City> { Success = true, Data = city }; var cities = new List<City> { new City { ID = "GUf2kxo3Yl" } }; RepositoryResponse<List<City>> result = await repository.GetCities(); Assert.IsTrue(result.Success, "Notifications not created"); Assert.IsNotNull(result.Data.Count > 0); Assert.IsNull(result.Error, "Some error ocurred"); }
public async Task<RepositoryResponse<Dependency>> Get(string objectID) { var response = new RepositoryResponse<Dependency>(); try { ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Dependency"); ParseObject result = await query.GetAsync(objectID); response.Success = true; response.Data = new Dependency { ID = result.ObjectId, NAME = result["Name"].ToString() }; } catch (Exception ex) { response.Success = false; response.Error = ex; } return response; }
public RepositoryResponse<User> Logout() { var response = new RepositoryResponse<User> { }; try { ParseUser.LogOut(); response.Success = true; // Logout was successful. } catch (Exception ex) { response.Success = false; response.Error = ex; } return response; }
public void AddNotifications_Success() { NotificationRepository repository = new NotificationRepository(); Notification notification = new Notification { NOTIFICATION_TEXT="Unit Test notification", ID_DEPENDENCY = "iIAW2gamws", ID_CITY = "vxwnP2GrHn" }; RepositoryResponse<Notification> expected = new RepositoryResponse<Notification> { Success = true, Data= notification }; RepositoryResponse<Notification> result = repository.AddNotification(notification).GetAwaiter().GetResult(); Assert.IsTrue(result.Success, "Notifications not created"); Assert.IsNotNull(result.Data); Assert.IsNull(result.Error,"Some error ocurred"); }
public RepositoryResponse<User> ValidateUser(User user) { var response = new RepositoryResponse<User> { }; try { var objectUser= ParseUser.LogInAsync(user.USERNAME, user.PASSWORD).GetAwaiter().GetResult(); response.Success = true; response.Data = objectUser.ToUser(); // Login was successful. } catch (Exception ex) { response.Success = false; response.Error = ex; } return response; }
public void ValidateUser_Success() { UserRepository repository = new UserRepository(); User user = new User { USERNAME= "******", PASSWORD = "******" }; RepositoryResponse<User> expected = new RepositoryResponse<User> { Success = true, Data = user }; RepositoryResponse<User> result = repository.ValidateUser(user); Assert.IsTrue(result.Success, "User not valid"); Assert.IsNotNull(result.Data); Assert.IsNull(result.Error, "Some error ocurred"); }
public async Task<RepositoryResponse<ParseObject>> GetDependencyById(string id) { var response = new RepositoryResponse<ParseObject>{ }; try { ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Dependency"); ParseObject result = await query.GetAsync(id); response.Data = result; response.Success = true; } catch (Exception ex) { response.Success = false; response.Error = ex; } return response; }
public async Task<RepositoryResponse<User>> RegisterUser(User user) { var response = new RepositoryResponse<User> { }; try { var userObject = new ParseUser() { Username = user.USERNAME, Password = user.PASSWORD }; userObject["Name"] = user.NAME; DependencyRepository DependencyContext = new DependencyRepository(); RepositoryResponse<ParseObject> Dependency = await DependencyContext.GetDependencyById(user.ID_DEPENDENCY); ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Dependency"); IEnumerable<ParseObject> result = await query.FindAsync(); var relation = userObject.GetRelation<ParseObject>("ID_Dependency"); relation.Add(Dependency.Data); await userObject.SignUpAsync(); response.Success = true; response.Data = userObject.ToUser(); // Register was successful. } catch (Exception ex) { response.Success = false; response.Error = ex; } return response; }
public ActionResult Access(string returnUrl = "") { if (Request.IsAuthenticated) { var loggedInuser = ""; var prinicpal = (System.Security.Claims.ClaimsPrincipal)System.Threading.Thread.CurrentPrincipal; if (prinicpal != null && prinicpal.Claims != null) { if (prinicpal.Claims.Where(c => c.Type == System.Security.Claims.ClaimTypes.Name).Any()) { loggedInuser = prinicpal.Claims.Where(c => c.Type == System.Security.Claims.ClaimTypes.Name).Select(c => c.Value).FirstOrDefault(); } } Session["User"] = loggedInuser; loggedInuser = loggedInuser.Replace("\\", "|"); if (loggedInuser.Contains("|")) { loggedInuser = loggedInuser.Split('|')[1]; } loggedInuser = "******"; //Nomination User -- DH --RThangaraj //loggedInuser = "******"; //Nomination User DH -- RThangaraj //loggedInuser = "******";//Nomination User //loggedInuser = "******"; //DH user //loggedInuser = "******"; //DH user //loggedInuser = "******"; // Evaluation user //loggedInuser = "******"; // Evaluation user //loggedInuser = "******"; //TQC Head //loggedInuser = "******"; //Admin //loggedInuser = "******";//Nomination User //loggedInuser = "******";//DH //loggedInuser = "******"; // loggedInuser = "******"; ILoginRepo loginRepo = new LoginRepo(); RepositoryResponse model = loginRepo.GetLoginUserDetails(loggedInuser); if (model.success) { EmpMasterModel _orGModel = model.Data; if (_orGModel != null) { //RepositoryResponse _model = loginRepo.GetPageAccessListByUserGrade(_orGModel.Grade, loggedInuser); //if (_model != null) //{ // Session.Add("pageAccessList", _model.Data); //} if (string.IsNullOrEmpty(_orGModel.ImagePath)) { Session.Add("UserImage", "/Images/UserImages/user-1.jpg"); } else { Session.Add("UserImage", _orGModel.ImagePath); } //Session.Add("UserImage", "/Images/UserImages/user-1.jpg"); Session.Add("UserName", _orGModel.UserName); Session.Add("UserFullName", _orGModel.EmployeeName); Session.Add("UserID", _orGModel.EmployeeNumber); Session.Add("UserDepartment", _orGModel.Department); Session.Add("UserGrade", _orGModel.Grade.ToString()); } int empRole = 0; RepositoryResponse _model1 = loginRepo.GetUserDetailsByUserID(_orGModel.EmployeeNumber); if (_model1 != null && _model1.Data != null) { EmpMasterModel data = _model1.Data; empRole = data.EmployeeSOMRole; Session.Add("EmpSOMRole", empRole.ToString()); Session.Add("EmpSOMRoleText", data.EmployeeSOMRoleAsString); string menuNames = loginRepo.getMenuForUser(_orGModel.EmployeeNumber, empRole); Session.Add("pageAccessList", menuNames); } //Get Notification count int count = loginRepo.getActionCounts(_orGModel.EmployeeNumber, empRole); Session.Add("NotifyCount", count); //Get Star of the month details IStarOfMonthRepo starOfTheMonth = new StarOfMonthRepo(); List <EmpMasterModel> _data = starOfTheMonth.GetLastThreeStarOftheMonthEmpDetails(); if (_data == null) { Session.Add("SOM_Month_Count", "0"); } else { Session.Add("SOM_Month_Count", _data.Count); } for (int i = 0; i < _data.Count; i++) { Session.Add("SOM_Month_" + i, _data[i].EMPMonth); Session.Add("SOM_Image_" + i, _data[i].ImagePath); } if (empRole == (int)SOMEmpRole.Nomination) { return(RedirectToAction("Index", "Nomination")); } else { return(RedirectToAction("Index", "Dashboard")); } } else { return(RedirectToAction("Index", "Home")); } } return(RedirectToAction("Index", "Home")); }
public async Task <JObject> DetailsByType(string viewType, int?id = null) { switch (viewType) { case "spa": if (id.HasValue) { var spaResult = await SpaModuleViewModel.Repository.GetSingleModelAsync(model => model.Id == id && model.Specificulture == _lang).ConfigureAwait(false); return(JObject.FromObject(spaResult)); } else { var model = new SiocModule() { Specificulture = _lang, Status = (int)SWStatus.Preview }; RepositoryResponse <SpaModuleViewModel> result = new RepositoryResponse <SpaModuleViewModel>() { IsSucceed = true, Data = await SpaModuleViewModel.InitViewAsync(model) }; return(JObject.FromObject(result)); } case "be": if (id.HasValue) { var beResult = await ApiModuleViewModel.Repository.GetSingleModelAsync(model => model.Id == id && model.Specificulture == _lang).ConfigureAwait(false); return(JObject.FromObject(beResult)); } else { var model = new SiocModule() { Specificulture = _lang, Status = (int)SWStatus.Preview , Priority = ApiModuleViewModel.Repository.Max(a => a.Priority).Data + 1 }; RepositoryResponse <ApiModuleViewModel> result = new RepositoryResponse <ApiModuleViewModel>() { IsSucceed = true, Data = await ApiModuleViewModel.InitViewAsync(model) }; return(JObject.FromObject(result)); } default: if (id.HasValue) { var beResult = await FEModuleViewModel.Repository.GetSingleModelAsync(model => model.Id == id && model.Specificulture == _lang).ConfigureAwait(false); return(JObject.FromObject(beResult)); } else { var model = new SiocModule(); RepositoryResponse <FEModuleViewModel> result = new RepositoryResponse <FEModuleViewModel>() { IsSucceed = true, Data = new FEModuleViewModel(model) { Specificulture = _lang, Status = SWStatus.Preview } }; return(JObject.FromObject(result)); } } }
public static async Task <RepositoryResponse <PaginationModel <TView> > > FilterByKeywordAsync <TView>(HttpRequest request, MixCmsContext _context = null, IDbContextTransaction _transaction = null) where TView : ViewModelBase <MixCmsContext, MixAttributeSetData, TView> { UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot); try { var queryDictionary = request.Query.ToList(); var attributeSetName = request.Query["filterType"].ToString(); var culture = request.Query["culture"].ToString(); var keyword = request.Query["keyword"].ToString(); var filterType = request.Query["filterType"].ToString(); var orderBy = request.Query["orderBy"].ToString(); int.TryParse(request.Query["direction"], out int direction); int.TryParse(request.Query["pageIndex"], out int pageIndex); int.TryParse(request.Query["pageSize"], out int pageSize); bool isFromDate = DateTime.TryParse(request.Query["fromDate"], out DateTime fromDate); bool isToDate = DateTime.TryParse(request.Query["toDate"], out DateTime toDate); bool isStatus = int.TryParse(request.Query["status"], out int status); var tasks = new List <Task <RepositoryResponse <TView> > >(); var getfields = await MixAttributeFields.ReadViewModel.Repository.GetModelListByAsync(m => m.AttributeSetName == attributeSetName, context, transaction); var fields = getfields.IsSucceed ? getfields.Data : new List <MixAttributeFields.ReadViewModel>(); Expression <Func <MixAttributeSetValue, bool> > attrPredicate = m => m.Specificulture == culture && m.AttributeSetName == attributeSetName && (!isStatus || (m.Status == status)) && (!isFromDate || (m.CreatedDateTime >= fromDate)) && (!isToDate || (m.CreatedDateTime <= toDate)) ; Expression <Func <MixAttributeSetValue, bool> > valPredicate = null; RepositoryResponse <PaginationModel <TView> > result = new RepositoryResponse <PaginationModel <TView> >() { IsSucceed = true, Data = new PaginationModel <TView>() }; if (queryDictionary != null) { // filter by all fields if have keyword if (!string.IsNullOrEmpty(keyword)) { foreach (var field in fields) { Expression <Func <MixAttributeSetValue, bool> > pre = m => m.AttributeFieldName == field.Name && (filterType == "equal" && m.StringValue == keyword) || (filterType == "contain" && (EF.Functions.Like(m.StringValue, $"%{keyword}%"))); if (valPredicate != null) { valPredicate = ODataHelper <MixAttributeSetValue> .CombineExpression(valPredicate, pre, Microsoft.OData.UriParser.BinaryOperatorKind.And); } else { valPredicate = pre; } } } else // filter by specific field name { foreach (var q in queryDictionary) { if (fields.Any(f => f.Name == q.Key) && !string.IsNullOrEmpty(q.Value)) { Expression <Func <MixAttributeSetValue, bool> > pre = m => m.AttributeFieldName == q.Key && (filterType == "equal" && m.StringValue == (q.Value.ToString())) || (filterType == "contain" && (EF.Functions.Like(m.StringValue, $"%{q.Value.ToString()}%"))); if (valPredicate != null) { valPredicate = ODataHelper <MixAttributeSetValue> .CombineExpression(valPredicate, pre, Microsoft.OData.UriParser.BinaryOperatorKind.And); } else { valPredicate = pre; } } } } if (valPredicate != null) { attrPredicate = ODataHelper <MixAttributeSetValue> .CombineExpression(valPredicate, attrPredicate, Microsoft.OData.UriParser.BinaryOperatorKind.And); } } var query = context.MixAttributeSetValue.Where(attrPredicate).Select(m => m.DataId).Distinct(); var dataIds = query.ToList(); if (query != null) { Expression <Func <MixAttributeSetData, bool> > predicate = m => dataIds.Any(id => m.Id == id); result = await DefaultRepository <MixCmsContext, MixAttributeSetData, TView> .Instance.GetModelListByAsync( predicate, orderBy, direction, pageSize, pageIndex, null, null, context, transaction); } return(result); } catch (Exception ex) { return(UnitOfWorkHelper <MixCmsContext> .HandleException <PaginationModel <TView> >(ex, isRoot, transaction)); } finally { if (isRoot) { //if current Context is Root context.Dispose(); } } }
public override async Task <RepositoryResponse <bool> > SaveSubModelsAsync(SioPage parent, SioCmsContext _context = null, IDbContextTransaction _transaction = null) { var result = new RepositoryResponse <bool> { IsSucceed = true }; var saveTemplate = await View.SaveModelAsync(true, _context, _transaction); result.IsSucceed = result.IsSucceed && saveTemplate.IsSucceed; if (saveTemplate.IsSucceed) { result.Errors.AddRange(saveTemplate.Errors); result.Exception = saveTemplate.Exception; } if (result.IsSucceed) { foreach (var item in ModuleNavs) { item.CategoryId = parent.Id; if (item.IsActived) { var saveResult = await item.SaveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } else { var saveResult = await item.RemoveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } } } if (result.IsSucceed) { foreach (var item in PositionNavs) { item.CategoryId = parent.Id; if (item.IsActived) { var saveResult = await item.SaveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } else { var saveResult = await item.RemoveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } } } if (result.IsSucceed) { foreach (var item in ParentNavs) { item.Id = parent.Id; if (item.IsActived) { var saveResult = await item.SaveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } else { var saveResult = await item.RemoveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } } } if (result.IsSucceed) { foreach (var item in ChildNavs) { item.ParentId = parent.Id; if (item.IsActived) { var saveResult = await item.SaveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } else { var saveResult = await item.RemoveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } } } return(result); }
public override async Task <RepositoryResponse <bool> > SaveSubModelsAsync(MixCulture parent, MixCmsContext _context = null, IDbContextTransaction _transaction = null) { var result = new RepositoryResponse <bool>() { IsSucceed = true }; // Clone Configurations if (result.IsSucceed) { var cloneResult = await CloneConfigurationsAsync(parent, _context, _transaction); ViewModelHelper.HandleResult(cloneResult, ref result); } if (result.IsSucceed) { var cloneResult = await CloneLanguagesAsync(parent, _context, _transaction); ViewModelHelper.HandleResult(cloneResult, ref result); } if (result.IsSucceed) { var cloneResult = await CloneMediasAsync(parent, _context, _transaction); ViewModelHelper.HandleResult(cloneResult, ref result); } if (result.IsSucceed) { var cloneResult = await CloneModulesAsync(parent, _context, _transaction); ViewModelHelper.HandleResult(cloneResult, ref result); } // Clone Pages if (result.IsSucceed) { var cloneResult = await ClonePagesAsync(parent, _context, _transaction); ViewModelHelper.HandleResult(cloneResult, ref result); } // Clone Post from Default culture if (result.IsSucceed) { var cloneResult = await ClonePostsAsync(parent, _context, _transaction); ViewModelHelper.HandleResult(cloneResult, ref result); } // Clone ModuleData from Default culture if (result.IsSucceed) { var cloneResult = await CloneModuleDatasAsync(parent, _context, _transaction); ViewModelHelper.HandleResult(cloneResult, ref result); } // Clone PageModules from Default culture if (result.IsSucceed) { var cloneResult = await ClonePageModulesAsync(parent, _context, _transaction); ViewModelHelper.HandleResult(cloneResult, ref result); } // Clone PagePost from Default culture if (result.IsSucceed) { var cloneResult = await ClonePagePostsAsync(parent, _context, _transaction); ViewModelHelper.HandleResult(cloneResult, ref result); } // Clone ModulePost from Default culture if (result.IsSucceed) { var cloneResult = await CloneModulePostsAsync(parent, _context, _transaction); ViewModelHelper.HandleResult(cloneResult, ref result); } // Clone ModulePost from Default culture if (result.IsSucceed) { var cloneResult = await CloneModuleDatasAsync(parent, _context, _transaction); ViewModelHelper.HandleResult(cloneResult, ref result); } // Clone PostPost from Default culture if (result.IsSucceed) { var cloneResult = await ClonePostPostsAsync(parent, _context, _transaction); ViewModelHelper.HandleResult(cloneResult, ref result); } // Clone PostMedia from Default culture if (result.IsSucceed) { var cloneResult = await ClonePostMediasAsync(parent, _context, _transaction); ViewModelHelper.HandleResult(cloneResult, ref result); } // Clone PostMedia from Default culture if (result.IsSucceed) { var cloneResult = await CloneUrlAliasAsync(parent, _context, _transaction); ViewModelHelper.HandleResult(cloneResult, ref result); } // Clone Attribute Value from Default culture if (result.IsSucceed) { var cloneResult = await CloneMixDatabaseDataValuesAsync(parent, _context, _transaction); ViewModelHelper.HandleResult(cloneResult, ref result); } // Clone Attribute Data from Default culture if (result.IsSucceed) { var cloneResult = await CloneAttributeDatasAsync(parent, _context, _transaction); ViewModelHelper.HandleResult(cloneResult, ref result); } // Clone Related Data from Default culture if (result.IsSucceed) { var cloneResult = await CloneRelatedAttributeDatasAsync(parent, _context, _transaction); ViewModelHelper.HandleResult(cloneResult, ref result); } return(result); }
public static Task <RepositoryResponse <List <TView> > > FilterByValueAsync <TView>(string culture, string attributeSetName , Dictionary <string, Microsoft.Extensions.Primitives.StringValues> queryDictionary , MixCmsContext _context = null, IDbContextTransaction _transaction = null) where TView : ODataViewModelBase <MixCmsContext, MixAttributeSetData, TView> { UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot); try { Expression <Func <MixAttributeSetValue, bool> > valPredicate = m => m.Specificulture == culture && m.AttributeSetName == attributeSetName; RepositoryResponse <List <TView> > result = new RepositoryResponse <List <TView> >() { IsSucceed = true, Data = new List <TView>() }; var tasks = new List <Task <RepositoryResponse <TView> > >(); // Loop queries string => predicate foreach (var q in queryDictionary) { if (!string.IsNullOrEmpty(q.Key) && !string.IsNullOrEmpty(q.Value)) { Expression <Func <MixAttributeSetValue, bool> > pre = m => m.AttributeFieldName == q.Key && m.StringValue.Contains(q.Value); valPredicate = ODataHelper <MixAttributeSetValue> .CombineExpression(valPredicate, pre, Microsoft.OData.UriParser.BinaryOperatorKind.And); } } var query = context.MixAttributeSetValue.Where(valPredicate).Select(m => m.DataId).Distinct().ToList(); if (query != null) { foreach (var item in query) { tasks.Add(Task.Run(async() => { var resp = await ODataDefaultRepository <MixCmsContext, MixAttributeSetData, TView> .Instance.GetSingleModelAsync( m => m.Id == item && m.Specificulture == culture); return(resp); })); } var continuation = Task.WhenAll(tasks); continuation.Wait(); if (continuation.Status == TaskStatus.RanToCompletion) { foreach (var data in continuation.Result) { if (data.IsSucceed) { result.Data.Add(data.Data); } else { result.Errors.AddRange(data.Errors); } } } // Display information on faulted tasks. else { foreach (var t in tasks) { result.Errors.Add($"Task {t.Id}: {t.Status}"); } } } return(Task.FromResult(result)); } catch (Exception ex) { return(Task.FromResult(UnitOfWorkHelper <MixCmsContext> .HandleException <List <TView> >(ex, isRoot, transaction))); } finally { if (isRoot) { //if current Context is Root context.Dispose(); } } }
public static async Task <RepositoryResponse <bool> > ImportData( string culture, Lib.ViewModels.MixAttributeSets.ReadViewModel attributeSet, IFormFile file) { using (var context = new MixCmsContext()) { var result = new RepositoryResponse <bool>() { IsSucceed = true }; try { List <ImportViewModel> data = LoadFileData(culture, attributeSet, file); var fields = MixAttributeFields.UpdateViewModel.Repository.GetModelListBy(f => f.AttributeSetId == attributeSet.Id).Data; var priority = ImportViewModel.Repository.Count(m => m.AttributeSetName == attributeSet.Name && m.Specificulture == culture).Data; foreach (var item in data) { priority += 1; //item.Model.Id = Guid.NewGuid().ToString(); //item.Model.Specificulture = culture; //item.Model.CreatedDateTime = DateTime.UtcNow; //item.Model.Priority = context.MixAttributeSetData.Count() + 1; item.Priority = priority; item.Fields = fields; item.AttributeSetName = attributeSet.Name; item.Status = Enum.Parse <MixEnums.MixContentStatus>(MixService.GetConfig <string>(MixConstants.ConfigurationKeyword.DefaultContentStatus)); item.ParseModel(); context.Entry(item.Model).State = Microsoft.EntityFrameworkCore.EntityState.Added; foreach (var val in item.Values) { val.DataId = item.Id; val.Specificulture = culture; val.ParseModel(); //val.Model.DataId = item.Id; //val.Model.CreatedDateTime = DateTime.UtcNow; //val.Model.Specificulture = culture; //val.Model.Id = Guid.NewGuid().ToString(); context.Entry(val.Model).State = Microsoft.EntityFrameworkCore.EntityState.Added; } } int tmp = await context.SaveChangesAsync(); //if (result.IsSucceed) //{ // foreach (var item in data) // { // item.GenerateCache(item.Model, item); // } //} return(result); } catch (Exception ex) { result.IsSucceed = false; result.Exception = ex; result.Errors.Add(ex.Message); return(result); } } }
public override async Task <RepositoryResponse <bool> > SaveSubModelsAsync(MixPage parent, MixCmsContext _context = null, IDbContextTransaction _transaction = null) { var result = new RepositoryResponse <bool> { IsSucceed = true }; // Save Alias //foreach (var item in UrlAliases) //{ // item.SourceId = parent.Id.ToString(); // item.Type = UrlAliasType.Page; // item.Specificulture = parent.Specificulture; // var saveResult = await item.SaveModelAsync(false, _context, _transaction); // ViewModelHelper.HandleResult(saveResult, ref result); // if (!result.IsSucceed) // { // break; // } //} // End Save Alias //Save Module Navigations if (result.IsSucceed && ModuleNavs != null) { foreach (var item in ModuleNavs) { if (!MixModules.ImportViewModel.Repository.CheckIsExists(m => m.Name == item.Module.Name && m.Specificulture == parent.Specificulture, _context, _transaction)) { // Force to create new module item.Module.Id = 0; item.Module.Specificulture = parent.Specificulture; if (!string.IsNullOrEmpty(item.Image)) { item.Image = item.Image.Replace($"content/templates/{ThemeName}", $"content/templates/{MixService.GetConfig<string>("ThemeFolder", parent.Specificulture)}"); } if (!string.IsNullOrEmpty(item.Module.Image)) { item.Module.Image = item.Module.Image.Replace($"content/templates/{ThemeName}", $"content/templates/{MixService.GetConfig<string>("ThemeFolder", parent.Specificulture)}"); } if (!string.IsNullOrEmpty(item.Module.Thumbnail)) { item.Module.Thumbnail = item.Module.Thumbnail.Replace("content/templates/default", $"content/templates/{MixService.GetConfig<string>("ThemeFolder", parent.Specificulture)}"); } var saveModule = await item.Module.SaveModelAsync(true, _context, _transaction); ViewModelHelper.HandleResult(saveModule, ref result); if (!result.IsSucceed) { break; } else // Save Module Success { item.PageId = parent.Id; item.ModuleId = saveModule.Data.Id; item.Specificulture = parent.Specificulture; item.Description = saveModule.Data.Title; var saveResult = await item.SaveModelAsync(false, _context, _transaction); ViewModelHelper.HandleResult(saveResult, ref result); if (!result.IsSucceed) { break; } } } } } // End Save Module Navigations /* * // Save Parents Pages * if (result.IsSucceed) * { * foreach (var item in ParentNavs) * { * item.Id = parent.Id; * * var saveResult = await item.SaveModelAsync(false, _context, _transaction); * ViewModelHelper.HandleResult(saveResult, ref result); * } * } * // End Save Parents Pages * * // Save Children Pages * if (result.IsSucceed) * { * foreach (var item in ChildNavs) * { * item.ParentId = parent.Id; * var saveResult = await item.SaveModelAsync(false, _context, _transaction); * ViewModelHelper.HandleResult(saveResult, ref result); * } * } * // End Save Children Pages*/ return(result); }
private async Task <RepositoryResponse <bool> > ImportPagesAsync(string destCulture, MixCmsContext _context = null, IDbContextTransaction _transaction = null) { var result = new RepositoryResponse <bool>() { IsSucceed = true }; UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot); try { int startId = MixPages.UpdateViewModel.ModelRepository.Max(m => m.Id, context, transaction).Data + 1; //var pages = FileRepository.Instance.GetFile(MixConstants.CONST_FILE_PAGES, "data", true, "{}"); //var obj = JObject.Parse(pages.Content); //var initPages = obj["data"].ToObject<JArray>(); foreach (var item in Pages) { item.Id = startId; item.CreatedDateTime = DateTime.UtcNow; item.ThemeName = ThemeName; //if (_context.MixPage.Any(m=>m.Id == startId)) //(item.Id > initPages.Count) //{ // item.Id = _context.MixPage.Max(m => m.Id) + 1; // item.CreatedDateTime = DateTime.UtcNow; //} if (!string.IsNullOrEmpty(item.Image)) { item.Image = item.Image.Replace($"content/templates/{ThemeName}", $"content/templates/{MixService.GetConfig<string>("ThemeFolder", destCulture)}"); } if (!string.IsNullOrEmpty(item.Thumbnail)) { item.Thumbnail = item.Thumbnail.Replace($"content/templates/{ThemeName}", $"content/templates/{MixService.GetConfig<string>("ThemeFolder", destCulture)}"); } item.Specificulture = destCulture; var saveResult = await item.SaveModelAsync(true, context, transaction); if (!saveResult.IsSucceed) { result.IsSucceed = false; result.Exception = saveResult.Exception; result.Errors = saveResult.Errors; break; } else { startId++; } } UnitOfWorkHelper <MixCmsContext> .HandleTransaction(result.IsSucceed, isRoot, transaction); } catch (Exception ex) // TODO: Add more specific exeption types instead of Exception only { var error = UnitOfWorkHelper <MixCmsContext> .HandleException <MixPages.ImportViewModel>(ex, isRoot, transaction); result.IsSucceed = false; result.Errors = error.Errors; result.Exception = error.Exception; } finally { //if current Context is Root if (isRoot) { context?.Dispose(); } } 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"); // 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); }
public override async Task <RepositoryResponse <bool> > SaveSubModelsAsync(MixPage parent, MixCmsContext _context = null, IDbContextTransaction _transaction = null) { var result = new RepositoryResponse <bool> { IsSucceed = true }; var saveTemplate = await View.SaveModelAsync(true, _context, _transaction); ViewModelHelper.HandleResult(saveTemplate, ref result); if (result.IsSucceed && Master != null) { var saveLayout = Master.SaveModel(true, _context, _transaction); ViewModelHelper.HandleResult(saveLayout, ref result); } if (result.IsSucceed && UrlAliases != null) { foreach (var item in UrlAliases) { if (result.IsSucceed) { item.SourceId = parent.Id.ToString(); item.Type = UrlAliasType.Page; item.Specificulture = Specificulture; var saveResult = await item.SaveModelAsync(false, _context, _transaction); ViewModelHelper.HandleResult(saveResult, ref result); } else { break; } } } if (result.IsSucceed) { foreach (var item in ModuleNavs) { item.PageId = parent.Id; if (item.IsActived) { var saveResult = await item.SaveModelAsync(false, _context, _transaction); ViewModelHelper.HandleResult(saveResult, ref result); } else { var saveResult = await item.RemoveModelAsync(false, _context, _transaction); ViewModelHelper.HandleResult(saveResult, ref result); } } } //if (result.IsSucceed) //{ // foreach (var item in ParentNavs) // { // item.Id = parent.Id; // if (item.IsActived) // { // var saveResult = await item.SaveModelAsync(false, _context, _transaction); // ViewModelHelper.HandleResult(saveResult, ref result); // } // else // { // var saveResult = await item.RemoveModelAsync(false, _context, _transaction); // ViewModelHelper.HandleResult(saveResult, ref result); // } // } //} if (result.IsSucceed) { // Save Attributes result = await SaveAttributeAsync(parent.Id, _context, _transaction); } //if (result.IsSucceed) //{ // foreach (var item in ChildNavs) // { // item.ParentId = parent.Id; // if (item.IsActived) // { // var saveResult = await item.SaveModelAsync(false, _context, _transaction); // ViewModelHelper.HandleResult(saveResult, ref result); // } // else // { // var saveResult = await item.RemoveModelAsync(false, _context, _transaction); // ViewModelHelper.HandleResult(saveResult, ref result); // } // } //} return(result); }
public static RepositoryResponse <string> ExportAttributeToExcel(List <JObject> lstData, string sheetName , string folderPath, string fileName , List <string> headers = null) { var result = new RepositoryResponse <string>(); try { if (lstData.Count > 0) { var filenameE = fileName + "-" + DateTime.Now.ToString("yyyyMMdd") + ".xlsx"; // create new data table var dtable = new DataTable(); if (headers == null) { // get first item var listColumn = lstData[0].Properties(); // add column name to table foreach (var item in listColumn) { dtable.Columns.Add(item.Name, typeof(string)); } } else { foreach (var item in headers) { dtable.Columns.Add(item, typeof(string)); } } // Row value foreach (var a in lstData) { var r = dtable.NewRow(); foreach (var prop in a.Properties()) { bool isHaveValue = a.TryGetValue(prop.Name, out JToken val); if (isHaveValue) { r[prop.Name] = val.ToString(); } } dtable.Rows.Add(r); } // Save Excel file using (var pck = new ExcelPackage()) { string SheetName = sheetName != string.Empty ? sheetName : "Report"; var wsDt = pck.Workbook.Worksheets.Add(SheetName); wsDt.Cells["A1"].LoadFromDataTable(dtable, true, TableStyles.None); wsDt.Cells[wsDt.Dimension.Address].AutoFitColumns(); CommonHelper.SaveFileBytes(folderPath, filenameE, pck.GetAsByteArray()); result.IsSucceed = true; result.Data = $"{MixService.GetConfig<string>("Domain")}/{folderPath}/{filenameE}"; return(result); } } else { result.Errors.Add("Can not export data of empty list"); return(result); } } catch (Exception ex) { result.Errors.Add(ex.Message); return(result); } }
/// <summary> /// Step 1 /// - Init Culture /// - Init System pages /// </summary> /// <param name="siteName"></param> /// <param name="culture"></param> /// <returns></returns> public static async Task <RepositoryResponse <bool> > InitCms(string siteName, InitCulture culture) { RepositoryResponse <bool> result = new RepositoryResponse <bool>(); MixCmsContext context = null; MixCmsAccountContext accountContext = null; MixChatServiceContext messengerContext; IDbContextTransaction transaction = null; IDbContextTransaction accTransaction = null; bool isSucceed = true; try { if (!string.IsNullOrEmpty(MixService.GetConnectionString(MixConstants.CONST_CMS_CONNECTION))) { context = new MixCmsContext(); accountContext = new MixCmsAccountContext(); messengerContext = new MixChatServiceContext(); await context.Database.MigrateAsync(); await accountContext.Database.MigrateAsync(); await messengerContext.Database.MigrateAsync(); transaction = context.Database.BeginTransaction(); var countCulture = context.MixCulture.Count(); var isInit = MixService.GetConfig <bool>("IsInit"); if (isInit) { /** * Init Selected Language as default */ isSucceed = InitCultures(culture, context, transaction); /** * Init System Pages */ //if (isSucceed && context.MixPage.Count() == 0) //{ // InitPages(culture.Specificulture, context, transaction); // isSucceed = (await context.SaveChangesAsync().ConfigureAwait(false)) > 0; //} //else //{ // result.Errors.Add("Cannot init Pages"); //} ///** // * Init System Positions // */ //if (isSucceed && context.MixPosition.Count() == 0) //{ // isSucceed = await InitPositionsAsync(context, transaction); //} //else //{ // result.Errors.Add("Cannot init Positions"); //} /** * Init System Configurations */ if (isSucceed && context.MixConfiguration.Count() == 0) { var saveResult = await InitConfigurationsAsync(siteName, culture.Specificulture, context, transaction); isSucceed = saveResult.IsSucceed; } else { result.Errors.Add("Cannot init Configurations"); } ///** //* Init System Attribute Sets //*/ //if (isSucceed && context.MixAttributeField.Count() == 0) //{ // var saveResult = await InitAttributeSetsAsync(siteName, culture.Specificulture, context, transaction); // isSucceed = saveResult.IsSucceed; //} //else //{ // result.Errors.Add("Cannot init Attribute Sets"); //} } if (isSucceed) { transaction.Commit(); } else { transaction.Rollback(); } } result.IsSucceed = isSucceed; return(result); } catch (Exception ex) // TODO: Add more specific exeption types instead of Exception only { transaction?.Rollback(); accTransaction?.Rollback(); result.IsSucceed = false; result.Exception = ex; return(result); } finally { context?.Dispose(); accountContext?.Dispose(); } }
public override RepositoryResponse <bool> RemoveRelatedModels(SyncViewModel view, MixCmsContext _context = null, IDbContextTransaction _transaction = null) { RepositoryResponse <bool> result = new RepositoryResponse <bool>() { IsSucceed = true }; if (result.IsSucceed) { var navCate = _context.MixPagePost.Where(n => n.PostId == Id && n.Specificulture == Specificulture).ToList(); foreach (var item in navCate) { _context.Entry(item).State = Microsoft.EntityFrameworkCore.EntityState.Deleted; } } if (result.IsSucceed) { var navModule = _context.MixModulePost.Where(n => n.PostId == Id && n.Specificulture == Specificulture).ToList(); foreach (var item in navModule) { _context.Entry(item).State = Microsoft.EntityFrameworkCore.EntityState.Deleted; } } if (result.IsSucceed) { var navMedia = _context.MixPostMedia.Where(n => n.PostId == Id && n.Specificulture == Specificulture).ToList(); foreach (var item in navMedia) { _context.Entry(item).State = Microsoft.EntityFrameworkCore.EntityState.Deleted; } } if (result.IsSucceed) { var navModule = _context.MixPostModule.Where(n => n.PostId == Id && n.Specificulture == Specificulture).ToList(); foreach (var item in navModule) { _context.Entry(item).State = Microsoft.EntityFrameworkCore.EntityState.Deleted; } } if (result.IsSucceed) { var navRelated = _context.MixPostMedia.Where(n => n.PostId == Id && n.Specificulture == Specificulture).ToList(); foreach (var item in navRelated) { _context.Entry(item).State = Microsoft.EntityFrameworkCore.EntityState.Deleted; } } if (result.IsSucceed) { var navs = _context.MixUrlAlias.Where(n => n.SourceId == Id.ToString() && n.Type == (int)MixUrlAliasType.Post && n.Specificulture == Specificulture).ToList(); foreach (var item in navs) { _context.Entry(item).State = Microsoft.EntityFrameworkCore.EntityState.Deleted; } } result.IsSucceed = (_context.SaveChanges() > 0); return(result); }
public static async Task <RepositoryResponse <PaginationModel <TView> > > FilterByKeywordAsync <TView>( HttpRequest request, string culture = null, string attributeSetName = null, MixCmsContext _context = null, IDbContextTransaction _transaction = null) where TView : ViewModelBase <MixCmsContext, MixAttributeSetData, TView> { UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot); try { culture = culture ?? MixService.GetConfig <string>("DefaultCulture"); var queryDictionary = request.Query.ToList(); attributeSetName = attributeSetName ?? request.Query["attributeSetName"].ToString(); var keyword = request.Query["keyword"].ToString(); var filterType = request.Query["filterType"].ToString(); var orderBy = request.Query["orderBy"].ToString(); int.TryParse(request.Query["attributeSetId"], out int attributeSetId); bool isDirection = Enum.TryParse(request.Query["direction"], out Heart.Enums.MixHeartEnums.DisplayDirection direction); int.TryParse(request.Query["pageIndex"], out int pageIndex); var isPageSize = int.TryParse(request.Query["pageSize"], out int pageSize); bool isFromDate = DateTime.TryParse(request.Query["fromDate"], out DateTime fromDate); bool isToDate = DateTime.TryParse(request.Query["toDate"], out DateTime toDate); bool isStatus = Enum.TryParse(request.Query["status"], out MixEnums.MixContentStatus status); var tasks = new List <Task <RepositoryResponse <TView> > >(); var getfields = await MixAttributeFields.ReadViewModel.Repository.GetModelListByAsync( m => m.AttributeSetId == attributeSetId || m.AttributeSetName == attributeSetName, context, transaction); var fields = getfields.IsSucceed ? getfields.Data : new List <MixAttributeFields.ReadViewModel>(); var fieldQueries = !string.IsNullOrEmpty(request.Query["query"]) ? JObject.Parse(request.Query["query"]) : new JObject(); // fitler list query by field name //var fieldQueries = queryDictionary?.Where(m => fields.Any(f => f.Name == m.Key)).ToList() // ?? new List<KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>>(); Expression <Func <MixAttributeSetValue, bool> > attrPredicate = m => m.Specificulture == culture && (m.AttributeSetName == attributeSetName); // val predicate Expression <Func <MixAttributeSetValue, bool> > valPredicate = null; // Data predicate Expression <Func <MixAttributeSetData, bool> > predicate = null; // m => m.Specificulture == culture; //&& (m.AttributeSetId == attributeSetId || m.AttributeSetName == attributeSetName) //&& (!isStatus || (m.Status == status.ToString())) //&& (!isFromDate || (m.CreatedDateTime >= fromDate)) //&& (!isToDate || (m.CreatedDateTime <= toDate)); RepositoryResponse <PaginationModel <TView> > result = new RepositoryResponse <PaginationModel <TView> >() { IsSucceed = true, Data = new PaginationModel <TView>() }; // if filter by field name or keyword => filter by attr value if (fieldQueries.Count > 0 || !string.IsNullOrEmpty(keyword)) { // filter by all fields if have keyword if (!string.IsNullOrEmpty(keyword)) { foreach (var field in fields) { Expression <Func <MixAttributeSetValue, bool> > pre = m => m.AttributeFieldName == field.Name && (filterType == "equal" && m.StringValue == keyword) || (filterType == "contain" && (EF.Functions.Like(m.StringValue, $"%{keyword}%"))); if (valPredicate != null) { valPredicate = ReflectionHelper.CombineExpression(valPredicate, pre, Heart.Enums.MixHeartEnums.ExpressionMethod.And); } else { valPredicate = pre; } } } if (fieldQueries != null && fieldQueries.Properties().Count() > 0) // filter by specific field name { foreach (var q in fieldQueries) { if (fields.Any(f => f.Name == q.Key)) { string value = q.Value.ToString(); if (!string.IsNullOrEmpty(value)) { Expression <Func <MixAttributeSetValue, bool> > pre = m => m.AttributeFieldName == q.Key && (filterType == "equal" && m.StringValue == (q.Value.ToString())) || (filterType == "contain" && (EF.Functions.Like(m.StringValue, $"%{q.Value.ToString()}%"))); if (valPredicate != null) { valPredicate = ReflectionHelper.CombineExpression(valPredicate, pre, Heart.Enums.MixHeartEnums.ExpressionMethod.Or); } else { valPredicate = pre; } } } } } if (valPredicate != null) { attrPredicate = attrPredicate == null ? valPredicate : ReflectionHelper.CombineExpression(valPredicate, attrPredicate, Heart.Enums.MixHeartEnums.ExpressionMethod.And); } if (attrPredicate != null) { var query = context.MixAttributeSetValue.Where(attrPredicate).Select(m => m.DataId).Distinct(); var dataIds = query.ToList(); if (query != null) { Expression <Func <MixAttributeSetData, bool> > pre = m => dataIds.Any(id => m.Id == id); predicate = pre; // ReflectionHelper.CombineExpression(pre, predicate, Heart.Enums.MixHeartEnums.ExpressionMethod.And); } } } else { predicate = m => m.Specificulture == culture && (m.AttributeSetId == attributeSetId || m.AttributeSetName == attributeSetName) && (!isStatus || (m.Status == status.ToString())) && (!isFromDate || (m.CreatedDateTime >= fromDate)) && (!isToDate || (m.CreatedDateTime <= toDate)); } result = await DefaultRepository <MixCmsContext, MixAttributeSetData, TView> .Instance.GetModelListByAsync( predicate, orderBy, direction, isPageSize?pageSize : default, isPageSize?pageIndex : 0, null, null, context, transaction);
public static async Task <RepositoryResponse <PaginationModel <TView> > > GetModelistByMeta <TView>( string culture, string metaName, string metaValue , string orderByPropertyName, int direction, int?pageSize, int?pageIndex , MixCmsContext _context = null, IDbContextTransaction _transaction = null) where TView : ViewModelBase <MixCmsContext, MixPost, TView> { UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot); try { var result = new RepositoryResponse <PaginationModel <TView> >() { IsSucceed = true, Data = new PaginationModel <TView>() { PageIndex = pageIndex.HasValue ? pageIndex.Value : 0, PageSize = pageSize } }; var tasks = new List <Task <RepositoryResponse <TView> > >(); // Get Tag var getVal = await MixAttributeSetValues.ReadViewModel.Repository.GetSingleModelAsync(m => m.AttributeSetName == metaName && m.StringValue == metaValue , context, transaction); if (getVal.IsSucceed) { var getRelatedData = await MixRelatedAttributeDatas.ReadViewModel.Repository.GetModelListByAsync( m => m.Specificulture == culture && m.Id == getVal.Data.DataId && m.ParentType == (int)MixEnums.MixAttributeSetDataType.Post , orderByPropertyName, direction, pageIndex, pageSize , _context : context, _transaction : transaction ); if (getRelatedData.IsSucceed) { foreach (var item in getRelatedData.Data.Items) { if (int.TryParse(item.ParentId, out int postId)) { var getData = await DefaultRepository <MixCmsContext, MixPost, TView> .Instance.GetSingleModelAsync( m => m.Specificulture == item.Specificulture && m.Id == postId , context, transaction); if (getData.IsSucceed) { result.Data.Items.Add(getData.Data); } } } result.Data.TotalItems = getRelatedData.Data.TotalItems; result.Data.TotalPage = getRelatedData.Data.TotalPage; } //var query = context.MixRelatedAttributeData.Where(m=> m.Specificulture == culture // && m.Id == getVal.Data.DataId && m.ParentId == parentId && m.ParentType == (int) MixEnums.MixAttributeSetDataType.Post) // .Select(m => m.ParentId).Distinct().ToList(); } Expression <Func <MixAttributeSetValue, bool> > valPredicate = m => m.Specificulture == culture && m.AttributeSetName == metaName && m.StringValue == metaValue; return(result); } catch (Exception ex) { return(UnitOfWorkHelper <MixCmsContext> .HandleException <PaginationModel <TView> >(ex, isRoot, transaction)); } finally { if (isRoot) { //if current Context is Root context.Database.CloseConnection(); transaction.Dispose(); context.Dispose(); } } }
public async Task <JObject> BEDetails(string viewType, int?id) { switch (viewType) { case "be": if (id.HasValue) { var beResult = await ApiCategoryViewModel.Repository.GetSingleModelAsync(model => model.Id == id && model.Specificulture == _lang).ConfigureAwait(false); if (beResult.IsSucceed) { beResult.Data.DetailsUrl = SwCmsHelper.GetRouterUrl("Page", new { beResult.Data.SeoName }, Request, Url); } return(JObject.FromObject(beResult)); } else { var model = new SiocCategory() { Specificulture = _lang, Status = (int)SWStatus.Preview, PageSize = 20 , Priority = ApiCategoryViewModel.Repository.Max(a => a.Priority).Data + 1 }; RepositoryResponse <ApiCategoryViewModel> result = new RepositoryResponse <ApiCategoryViewModel>() { IsSucceed = true, Data = await ApiCategoryViewModel.InitAsync(model) }; return(JObject.FromObject(result)); } default: if (id.HasValue) { var beResult = await FECategoryViewModel.Repository.GetSingleModelAsync(model => model.Id == id && model.Specificulture == _lang).ConfigureAwait(false); if (beResult.IsSucceed) { beResult.Data.DetailsUrl = SwCmsHelper.GetRouterUrl("Page", new { beResult.Data.SeoName }, Request, Url); } return(JObject.FromObject(beResult)); } else { var model = new SiocCategory(); RepositoryResponse <FECategoryViewModel> result = new RepositoryResponse <FECategoryViewModel>() { IsSucceed = true, Data = new FECategoryViewModel(model) { Specificulture = _lang, Status = SWStatus.Preview, PageSize = 20 } }; return(JObject.FromObject(result)); } } }
public async Task <ActionResult <JObject> > Details(string viewType, int?id) { string msg = string.Empty; switch (viewType) { case "portal": if (id.HasValue) { Expression <Func <MixOrder, bool> > predicate = model => model.Id == id && model.Specificulture == _lang; var portalResult = await base.GetSingleAsync <UpdateViewModel>($"{viewType}_{id}", predicate); if (portalResult.IsSucceed) { portalResult.Data.DetailsUrl = MixCmsHelper.GetRouterUrl( new { culture = _lang, action = "order", portalResult.Data.Id }, Request, Url); } return(Ok(JObject.FromObject(portalResult))); } else { var model = new MixOrder() { Specificulture = _lang, Status = MixService.GetConfig <int>("DefaultStatus") }; RepositoryResponse <UpdateViewModel> result = await base.GetSingleAsync <UpdateViewModel>($"{viewType}_default", null, model); return(Ok(JObject.FromObject(result))); } default: if (id.HasValue) { var beResult = await ReadViewModel.Repository.GetSingleModelAsync(model => model.Id == id && model.Specificulture == _lang).ConfigureAwait(false); if (beResult.IsSucceed) { beResult.Data.DetailsUrl = MixCmsHelper.GetRouterUrl( new { culture = _lang, action = "order", seoName = beResult.Data.Id }, Request, Url); } return(Ok(JObject.FromObject(beResult))); } else { var model = new MixOrder(); RepositoryResponse <ReadViewModel> result = new RepositoryResponse <ReadViewModel>() { IsSucceed = true, Data = new ReadViewModel(model) { Specificulture = _lang, Status = MixOrderStatus.Preview, } }; return(Ok(JObject.FromObject(result))); } } }
public static RepositoryResponse <string> ExportToExcel <T>(List <T> lstData, string sheetName , string folderPath, string fileName , List <string> headers = null) { var result = new RepositoryResponse <string>(); try { if (lstData.Count > 0) { var filenameE = fileName + "-" + DateTime.Now.ToString("yyyyMMdd") + ".xlsx"; // create new data table var dtable = new DataTable(); if (headers == null) { // get first item var listColumn = lstData[0].GetType().GetProperties(); // add column name to table foreach (var item in listColumn) { dtable.Columns.Add(item.Name, typeof(string)); } } else { foreach (var item in headers) { dtable.Columns.Add(item, typeof(string)); } } // Row value foreach (var a in lstData) { var r = dtable.NewRow(); if (headers == null) { foreach (var prop in a.GetType().GetProperties()) { r[prop.Name] = prop.GetValue(a, null); } } else { var props = a.GetType().GetProperties(); for (int i = 0; i < headers.Count; i++) { r[i] = props[i].GetValue(a, null); } } dtable.Rows.Add(r); } // Save Excel file using (var pck = new ExcelPackage()) { string SheetName = sheetName != string.Empty ? sheetName : "Report"; var wsDt = pck.Workbook.Worksheets.Add(SheetName); wsDt.Cells["A1"].LoadFromDataTable(dtable, true, TableStyles.None); wsDt.Cells[wsDt.Dimension.Address].AutoFitColumns(); SaveFileBytes(folderPath, filenameE, pck.GetAsByteArray()); result.IsSucceed = true; result.Data = GetFullPath(new string[] { folderPath, filenameE }); return(result); } } else { result.Errors.Add("Can not export data of empty list"); return(result); } } catch (Exception ex) { result.Errors.Add(ex.Message); return(result); } }
public override async Task <RepositoryResponse <bool> > RemoveRelatedModelsAsync(UpdateViewModel view, MixCmsContext _context = null, IDbContextTransaction _transaction = null) { var result = new RepositoryResponse <bool>() { IsSucceed = true }; var configs = await _context.MixConfiguration.Where(c => c.Specificulture == Specificulture).ToListAsync(); configs.ForEach(c => _context.Entry(c).State = Microsoft.EntityFrameworkCore.EntityState.Deleted); var languages = await _context.MixLanguage.Where(l => l.Specificulture == Specificulture).ToListAsync(); languages.ForEach(l => _context.Entry(l).State = Microsoft.EntityFrameworkCore.EntityState.Deleted); var PageModules = await _context.MixPageModule.Where(l => l.Specificulture == Specificulture).ToListAsync(); PageModules.ForEach(l => _context.Entry(l).State = Microsoft.EntityFrameworkCore.EntityState.Deleted); var PagePosts = await _context.MixPagePost.Where(l => l.Specificulture == Specificulture).ToListAsync(); PagePosts.ForEach(l => _context.Entry(l).State = Microsoft.EntityFrameworkCore.EntityState.Deleted); var ModulePosts = await _context.MixModulePost.Where(l => l.Specificulture == Specificulture).ToListAsync(); ModulePosts.ForEach(l => _context.Entry(l).State = Microsoft.EntityFrameworkCore.EntityState.Deleted); var PostMedias = await _context.MixPostMedia.Where(l => l.Specificulture == Specificulture).ToListAsync(); PostMedias.ForEach(l => _context.Entry(l).State = Microsoft.EntityFrameworkCore.EntityState.Deleted); var ModuleDatas = await _context.MixModuleData.Where(l => l.Specificulture == Specificulture).ToListAsync(); ModuleDatas.ForEach(l => _context.Entry(l).State = Microsoft.EntityFrameworkCore.EntityState.Deleted); var PostPosts = await _context.MixRelatedPost.Where(l => l.Specificulture == Specificulture).ToListAsync(); PostPosts.ForEach(l => _context.Entry(l).State = Microsoft.EntityFrameworkCore.EntityState.Deleted); var medias = await _context.MixMedia.Where(c => c.Specificulture == Specificulture).ToListAsync(); medias.ForEach(c => _context.Entry(c).State = Microsoft.EntityFrameworkCore.EntityState.Deleted); var cates = await _context.MixPage.Where(c => c.Specificulture == Specificulture).ToListAsync(); cates.ForEach(c => _context.Entry(c).State = Microsoft.EntityFrameworkCore.EntityState.Deleted); var modules = await _context.MixModule.Where(c => c.Specificulture == Specificulture).ToListAsync(); modules.ForEach(c => _context.Entry(c).State = Microsoft.EntityFrameworkCore.EntityState.Deleted); var posts = await _context.MixPost.Where(c => c.Specificulture == Specificulture).ToListAsync(); posts.ForEach(c => _context.Entry(c).State = Microsoft.EntityFrameworkCore.EntityState.Deleted); var aliases = await _context.MixUrlAlias.Where(c => c.Specificulture == Specificulture).ToListAsync(); aliases.ForEach(c => _context.Entry(c).State = Microsoft.EntityFrameworkCore.EntityState.Deleted); var values = await _context.MixDatabaseDataValue.Where(c => c.Specificulture == Specificulture).ToListAsync(); values.ForEach(c => _context.Entry(c).State = Microsoft.EntityFrameworkCore.EntityState.Deleted); var datas = await _context.MixDatabaseData.Where(c => c.Specificulture == Specificulture).ToListAsync(); datas.ForEach(c => _context.Entry(c).State = Microsoft.EntityFrameworkCore.EntityState.Deleted); var relateddatas = await _context.MixDatabaseDataAssociation.Where(c => c.Specificulture == Specificulture).ToListAsync(); relateddatas.ForEach(c => _context.Entry(c).State = Microsoft.EntityFrameworkCore.EntityState.Deleted); result.IsSucceed = (await _context.SaveChangesAsync() > 0); return(result); }
async Task <RepositoryResponse <bool> > ImportThemeAsync(SioTheme parent, SioCmsContext _context, IDbContextTransaction _transaction) { var result = new RepositoryResponse <bool>() { IsSucceed = true }; string fileName = $"wwwroot/{TemplateAsset.FileFolder}/{TemplateAsset.Filename}{TemplateAsset.Extension}"; if (File.Exists(fileName)) { FileRepository.Instance.UnZipFile($"{TemplateAsset.Filename}{TemplateAsset.Extension}", TemplateAsset.FileFolder); //Move Unzip Asset folder FileRepository.Instance.CopyWebDirectory($"{TemplateAsset.FileFolder}/Assets", AssetFolder); //Move Unzip Templates folder FileRepository.Instance.CopyDirectory($"{SioConstants.Folder.WebRootPath}/{TemplateAsset.FileFolder}/Templates", TemplateFolder); //Move Unzip Uploads folder FileRepository.Instance.CopyDirectory($"{SioConstants.Folder.WebRootPath}/{TemplateAsset.FileFolder}/Uploads", AssetFolder); // Get SiteStructure var strSchema = FileRepository.Instance.GetWebFile("schema.json", $"{TemplateAsset.FileFolder}/Data"); var siteStructures = JObject.Parse(strSchema.Content).ToObject <SiteStructureViewModel>(); FileRepository.Instance.DeleteWebFolder(TemplateAsset.FileFolder); //Import Site Structures result = await SioPages.Helper.ImportAsync(siteStructures.Pages, Specificulture); if (result.IsSucceed) { // Save template files to db var files = FileRepository.Instance.GetFilesWithContent(TemplateFolder); //TODO: Create default asset foreach (var file in files) { string content = file.Content.Replace($"/Content/Templates/{TemplateAsset.Filename}/", $"/Content/Templates/{Name}/"); SioTemplates.UpdateViewModel template = new SioTemplates.UpdateViewModel( new SioTemplate() { FileFolder = file.FileFolder, FileName = file.Filename, Content = file.Content, Extension = file.Extension, CreatedDateTime = DateTime.UtcNow, LastModified = DateTime.UtcNow, ThemeId = parent.Id, ThemeName = parent.Name, FolderType = file.FolderName, ModifiedBy = CreatedBy }); var saveResult = await template.SaveModelAsync(true, _context, _transaction); result.IsSucceed = result.IsSucceed && saveResult.IsSucceed; if (!saveResult.IsSucceed) { result.IsSucceed = false; result.Exception = saveResult.Exception; result.Errors.AddRange(saveResult.Errors); break; } } } } return(result); }
public static async Task <RepositoryResponse <PaginationModel <TView> > > FilterByKeywordAsync <TView>(string culture, string attributeSetName , RequestPaging request, string keyword , Dictionary <string, Microsoft.Extensions.Primitives.StringValues> queryDictionary = null , MixCmsContext _context = null, IDbContextTransaction _transaction = null) where TView : ViewModelBase <MixCmsContext, MixAttributeSetData, TView> { UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot); try { Expression <Func <MixAttributeSetValue, bool> > attrPredicate = m => m.Specificulture == culture && m.AttributeSetName == attributeSetName && (!request.FromDate.HasValue || (m.CreatedDateTime >= request.FromDate.Value) ) && (!request.ToDate.HasValue || (m.CreatedDateTime <= request.ToDate.Value) ) ; Expression <Func <MixAttributeSetValue, bool> > valPredicate = null; RepositoryResponse <PaginationModel <TView> > result = new RepositoryResponse <PaginationModel <TView> >() { IsSucceed = true, Data = new PaginationModel <TView>() }; var filterType = queryDictionary.FirstOrDefault(q => q.Key == "filterType"); var tasks = new List <Task <RepositoryResponse <TView> > >(); if (queryDictionary != null) { foreach (var q in queryDictionary) { if (!string.IsNullOrEmpty(q.Key) && q.Key != "attributeSetId" && q.Key != "attributeSetName" && q.Key != "filterType" && !string.IsNullOrEmpty(q.Value)) { if (!string.IsNullOrEmpty(filterType.Value) && filterType.Value == "equal") { Expression <Func <MixAttributeSetValue, bool> > pre = m => m.AttributeFieldName == q.Key && m.StringValue == (q.Value.ToString()); if (valPredicate != null) { valPredicate = ODataHelper <MixAttributeSetValue> .CombineExpression(valPredicate, pre, Microsoft.OData.UriParser.BinaryOperatorKind.And); } else { valPredicate = pre; } } else { Expression <Func <MixAttributeSetValue, bool> > pre = m => m.AttributeFieldName == q.Key && (EF.Functions.Like(m.StringValue, $"%{q.Value.ToString()}%")); if (valPredicate != null) { valPredicate = ODataHelper <MixAttributeSetValue> .CombineExpression(valPredicate, pre, Microsoft.OData.UriParser.BinaryOperatorKind.And); } else { valPredicate = pre; } } } } if (valPredicate != null) { attrPredicate = ODataHelper <MixAttributeSetValue> .CombineExpression(valPredicate, attrPredicate, Microsoft.OData.UriParser.BinaryOperatorKind.And); } } // Loop queries string => predicate if (!string.IsNullOrEmpty(keyword)) { Expression <Func <MixAttributeSetValue, bool> > pre = m => m.AttributeSetName == attributeSetName && m.Specificulture == culture && m.StringValue.Contains(keyword); attrPredicate = ODataHelper <MixAttributeSetValue> .CombineExpression(attrPredicate, pre, Microsoft.OData.UriParser.BinaryOperatorKind.And); } var query = context.MixAttributeSetValue.Where(attrPredicate).Select(m => m.DataId).Distinct(); var dataIds = query.ToList(); if (query != null) { Expression <Func <MixAttributeSetData, bool> > predicate = m => dataIds.Any(id => m.Id == id); result = await DefaultRepository <MixCmsContext, MixAttributeSetData, TView> .Instance.GetModelListByAsync( predicate, request.OrderBy, request.Direction, request.PageSize, request.PageIndex, null, null, context, transaction); } return(result); } catch (Exception ex) { return(UnitOfWorkHelper <MixCmsContext> .HandleException <PaginationModel <TView> >(ex, isRoot, transaction)); } finally { if (isRoot) { //if current Context is Root context.Dispose(); } } }
private async Task <RepositoryResponse <bool> > ActivedThemeAsync(SioCmsContext _context = null, IDbContextTransaction _transaction = null) { var result = new RepositoryResponse <bool>() { IsSucceed = true }; SystemConfigurationViewModel config = (await SystemConfigurationViewModel.Repository.GetSingleModelAsync( c => c.Keyword == SioConstants.ConfigurationKeyword.ThemeName && c.Specificulture == Specificulture , _context, _transaction)).Data; if (config == null) { config = new SystemConfigurationViewModel() { Keyword = SioConstants.ConfigurationKeyword.ThemeName, Specificulture = Specificulture, Category = "Site", DataType = SioDataType.Text, Description = "Cms Theme", Value = Name }; } else { config.Value = Name; } var saveConfigResult = await config.SaveModelAsync(false, _context, _transaction); if (saveConfigResult.IsSucceed) { SystemConfigurationViewModel configFolder = (await SystemConfigurationViewModel.Repository.GetSingleModelAsync( c => c.Keyword == SioConstants.ConfigurationKeyword.ThemeFolder && c.Specificulture == Specificulture , _context, _transaction)).Data; configFolder.Value = Name; saveConfigResult = await configFolder.SaveModelAsync(false, _context, _transaction); } ViewModelHelper.HandleResult(saveConfigResult, ref result); if (result.IsSucceed) { SystemConfigurationViewModel configId = (await SystemConfigurationViewModel.Repository.GetSingleModelAsync( c => c.Keyword == SioConstants.ConfigurationKeyword.ThemeId && c.Specificulture == Specificulture, _context, _transaction)).Data; if (configId == null) { configId = new SystemConfigurationViewModel() { Keyword = SioConstants.ConfigurationKeyword.ThemeId, Specificulture = Specificulture, Category = "Site", DataType = SioDataType.Text, Description = "Cms Theme Id", Value = Model.Id.ToString() }; } else { configId.Value = Model.Id.ToString(); } var saveResult = await configId.SaveModelAsync(false, _context, _transaction); ViewModelHelper.HandleResult(saveResult, ref result); } return(result); }
public static async Task <RepositoryResponse <List <TView> > > FilterByKeywordAsync <TView>(string culture, string attributeSetName , string filterType, string fieldName, string keyword , MixCmsContext _context = null, IDbContextTransaction _transaction = null) where TView : ViewModelBase <MixCmsContext, MixAttributeSetData, TView> { UnitOfWorkHelper <MixCmsContext> .InitTransaction(_context, _transaction, out MixCmsContext context, out IDbContextTransaction transaction, out bool isRoot); try { Expression <Func <MixAttributeSetValue, bool> > attrPredicate = m => m.Specificulture == culture && m.AttributeSetName == attributeSetName; Expression <Func <MixAttributeSetValue, bool> > valPredicate = null; RepositoryResponse <List <TView> > result = new RepositoryResponse <List <TView> >() { IsSucceed = true, Data = new List <TView>() }; if (filterType == "equal") { Expression <Func <MixAttributeSetValue, bool> > pre = m => m.AttributeFieldName == fieldName && m.StringValue == keyword; if (valPredicate != null) { valPredicate = ODataHelper <MixAttributeSetValue> .CombineExpression(valPredicate, pre, Microsoft.OData.UriParser.BinaryOperatorKind.And); } else { valPredicate = pre; } } else { Expression <Func <MixAttributeSetValue, bool> > pre = m => m.AttributeFieldName == fieldName && m.StringValue.Contains(keyword); if (valPredicate != null) { valPredicate = ODataHelper <MixAttributeSetValue> .CombineExpression(valPredicate, pre, Microsoft.OData.UriParser.BinaryOperatorKind.And); } else { valPredicate = pre; } } if (valPredicate != null) { attrPredicate = ODataHelper <MixAttributeSetValue> .CombineExpression(valPredicate, attrPredicate, Microsoft.OData.UriParser.BinaryOperatorKind.And); } var query = context.MixAttributeSetValue.Where(attrPredicate).Select(m => m.DataId).Distinct(); var dataIds = query.ToList(); if (query != null) { Expression <Func <MixAttributeSetData, bool> > predicate = m => dataIds.Any(id => m.Id == id); result = await DefaultRepository <MixCmsContext, MixAttributeSetData, TView> .Instance.GetModelListByAsync( predicate, context, transaction); } return(result); } catch (Exception ex) { return(UnitOfWorkHelper <MixCmsContext> .HandleException <List <TView> >(ex, isRoot, transaction)); } finally { if (isRoot) { //if current Context is Root context.Dispose(); } } }
public override async Task <RepositoryResponse <bool> > RemoveRelatedModelsAsync(RemoveViewModel view, MixCmsContext _context = null, IDbContextTransaction _transaction = null) { RepositoryResponse <bool> result = new RepositoryResponse <bool>() { IsSucceed = true }; if (result.IsSucceed) { var navCate = await _context.MixPagePost.Where(n => n.PostId == Id && n.Specificulture == Specificulture).ToListAsync(); foreach (var item in navCate) { _context.Entry(item).State = Microsoft.EntityFrameworkCore.EntityState.Deleted; } } if (result.IsSucceed) { var navModule = await _context.MixModulePost.Where(n => n.PostId == Id && n.Specificulture == Specificulture).ToListAsync(); foreach (var item in navModule) { _context.Entry(item).State = Microsoft.EntityFrameworkCore.EntityState.Deleted; } } if (result.IsSucceed) { var navMedia = await _context.MixPostMedia.Where(n => n.PostId == Id && n.Specificulture == Specificulture).ToListAsync(); foreach (var item in navMedia) { _context.Entry(item).State = Microsoft.EntityFrameworkCore.EntityState.Deleted; } } if (result.IsSucceed) { var navModule = await _context.MixPostModule.Where(n => n.PostId == Id && n.Specificulture == Specificulture).ToListAsync(); foreach (var item in navModule) { _context.Entry(item).State = Microsoft.EntityFrameworkCore.EntityState.Deleted; } } if (result.IsSucceed) { var navRelated = await _context.MixPostMedia.Where(n => n.PostId == Id && n.Specificulture == Specificulture).ToListAsync(); foreach (var item in navRelated) { _context.Entry(item).State = Microsoft.EntityFrameworkCore.EntityState.Deleted; } } if (result.IsSucceed) { var navs = await _context.MixUrlAlias.Where(n => n.SourceId == Id.ToString() && n.Type == (int)MixEnums.UrlAliasType.Post && n.Specificulture == Specificulture).ToListAsync(); foreach (var item in navs) { _context.Entry(item).State = Microsoft.EntityFrameworkCore.EntityState.Deleted; } } // Remove Attributes Value if (result.IsSucceed) { var values = await _context.MixPostAttributeValue.Where(n => n.PostId == Id && n.Specificulture == Specificulture).ToListAsync(); foreach (var item in values) { _context.Entry(item).State = Microsoft.EntityFrameworkCore.EntityState.Deleted; } var data = await _context.MixPostAttributeData.Where(n => n.PostId == Id && n.Specificulture == Specificulture).ToListAsync(); foreach (var item in data) { _context.Entry(item).State = Microsoft.EntityFrameworkCore.EntityState.Deleted; } var sets = await _context.MixPostAttributeSet.Where(n => n.PostId == Id && n.Specificulture == Specificulture).ToListAsync(); foreach (var item in sets) { _context.Entry(item).State = Microsoft.EntityFrameworkCore.EntityState.Deleted; } } await _context.SaveChangesAsync(); return(result); }
public override async Task <RepositoryResponse <bool> > SaveSubModelsAsync(MixPortalPage parent, MixCmsContext _context, IDbContextTransaction _transaction) { var result = new RepositoryResponse <bool> { IsSucceed = true }; if (result.IsSucceed) { foreach (var item in ParentNavs) { item.PageId = parent.Id; var startId = Lib.ViewModels.MixPortalPagePortalPages.UpdateViewModel.Repository.Max(m => m.Id, _context, _transaction).Data + 1; if (item.IsActived) { if (item.Id == 0) { item.Id = startId; startId += 1; } var saveResult = await item.SaveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } else { var saveResult = await item.RemoveModelAsync(true, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } } } if (result.IsSucceed) { foreach (var item in ChildNavs) { item.ParentId = parent.Id; var startId = Lib.ViewModels.MixPortalPagePortalPages.UpdateViewModel.Repository.Max(m => m.Id, _context, _transaction).Data + 1; if (item.IsActived) { if (item.Id == 0) { item.Id = startId; startId += 1; } var saveResult = await item.SaveModelAsync(true, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } else { var saveResult = await item.RemoveModelAsync(true, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } } } return(result); }
public override RepositoryResponse <bool> SaveSubModels( MixPost parent , MixCmsContext _context = null, IDbContextTransaction _transaction = null) { var result = new RepositoryResponse <bool>() { IsSucceed = true }; try { if (result.IsSucceed) { var startMediaId = MixMedias.UpdateViewModel.Repository.Max(c => c.Id, _context, _transaction).Data; foreach (var navMedia in MediaNavs) { if (navMedia.Media != null) { startMediaId += 1; navMedia.Media.Specificulture = Specificulture; navMedia.Media.Id = startMediaId; var saveMedia = navMedia.Media.SaveModel(false, _context, _transaction); if (saveMedia.IsSucceed) { navMedia.PostId = parent.Id; navMedia.MediaId = saveMedia.Data.Model.Id; navMedia.Specificulture = parent.Specificulture; var saveResult = navMedia.SaveModel(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } else { result.IsSucceed = false; result.Exception = saveMedia.Exception; Errors.AddRange(saveMedia.Errors); } } } } if (result.IsSucceed) { foreach (var navModule in ModuleNavs) { navModule.PostId = parent.Id; navModule.Specificulture = parent.Specificulture; navModule.Status = MixContentStatus.Published; if (navModule.IsActived) { var saveResult = navModule.SaveModel(true, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } else { var saveResult = navModule.RemoveModel(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } } } if (result.IsSucceed) { // Save Parent Category foreach (var item in Pages) { item.PostId = parent.Id; item.Description = parent.Title; item.Image = ThumbnailUrl; item.Status = MixContentStatus.Published; if (item.IsActived) { var saveResult = item.SaveModel(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } else { var saveResult = item.RemoveModel(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } } } if (result.IsSucceed) { // Save Parent Modules foreach (var item in Modules) { item.PostId = parent.Id; item.Description = parent.Title; item.Image = ThumbnailUrl; item.Status = MixContentStatus.Published; if (item.IsActived) { var saveResult = item.SaveModel(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } else { var saveResult = item.RemoveModel(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } } } return(result); } catch (Exception ex) // TODO: Add more specific exeption types instead of Exception only { result.IsSucceed = false; result.Exception = ex; return(result); } }
public override RepositoryResponse <bool> SaveSubModels(SiocTheme parent, SiocCmsContext _context = null, IDbContextTransaction _transaction = null) { RepositoryResponse <bool> result = new RepositoryResponse <bool>() { IsSucceed = true }; if (Asset != null && Asset.Length > 0) { string filename = FileRepository.Instance.SaveWebFile(Asset, AssetFolder); if (!string.IsNullOrEmpty(filename)) { FileRepository.Instance.UnZipFile(filename, AssetFolder); } } if (Id == 0) { string defaultFolder = CommonHelper.GetFullPath(new string[] { SWCmsConstants.Parameters.TemplatesFolder, Name == "Default" ? "Default" : SWCmsConstants.Default.DefaultTemplateFolder }); bool copyResult = FileRepository.Instance.CopyDirectory(defaultFolder, TemplateFolder); var files = copyResult ? FileRepository.Instance.GetFilesWithContent(TemplateFolder) : new System.Collections.Generic.List <FileViewModel>(); //TODO: Create default asset foreach (var file in files) { BETemplateViewModel template = new BETemplateViewModel( new SiocTemplate() { FileFolder = file.FileFolder, FileName = file.Filename, Content = file.Content, Extension = file.Extension, CreatedDateTime = DateTime.UtcNow, LastModified = DateTime.UtcNow, TemplateId = Model.Id, TemplateName = Model.Name, FolderType = file.FolderName, ModifiedBy = CreatedBy }, _context, _transaction); var saveResult = template.SaveModel(true, _context, _transaction); result.IsSucceed = result.IsSucceed && saveResult.IsSucceed; if (!saveResult.IsSucceed) { result.Exception = saveResult.Exception; result.Errors.AddRange(saveResult.Errors); break; } } } // Actived Theme if (IsActived) { InfoConfigurationViewModel config = (InfoConfigurationViewModel.Repository.GetSingleModel( c => c.Keyword == SWCmsConstants.ConfigurationKeyword.Theme && c.Specificulture == Specificulture , _context, _transaction)).Data; if (config == null) { config = new InfoConfigurationViewModel(new SiocConfiguration() { Keyword = SWCmsConstants.ConfigurationKeyword.Theme, Specificulture = Specificulture, Category = SWCmsConstants.ConfigurationType.User, DataType = (int)SWCmsConstants.DataType.String, Description = "Cms Theme", Value = Name }, _context, _transaction) ; } else { config.Value = Name; } var saveConfigResult = config.SaveModel(false, _context, _transaction); if (!saveConfigResult.IsSucceed) { Errors.AddRange(saveConfigResult.Errors); } else { GlobalConfigurationService.Instance.RefreshConfigurations(_context, _transaction); } result.IsSucceed = result.IsSucceed && saveConfigResult.IsSucceed; InfoConfigurationViewModel configId = (InfoConfigurationViewModel.Repository.GetSingleModel( c => c.Keyword == SWCmsConstants.ConfigurationKeyword.ThemeId && c.Specificulture == Specificulture, _context, _transaction)).Data; if (configId == null) { configId = new InfoConfigurationViewModel(new SiocConfiguration() { Keyword = SWCmsConstants.ConfigurationKeyword.ThemeId, Specificulture = Specificulture, Category = SWCmsConstants.ConfigurationType.User, DataType = (int)SWCmsConstants.DataType.String, Description = "Cms Theme Id", Value = Model.Id.ToString() }, _context, _transaction) ; } else { configId.Value = Model.Id.ToString(); } var saveResult = configId.SaveModel(false, _context, _transaction); if (!saveResult.IsSucceed) { Errors.AddRange(saveResult.Errors); } else { GlobalConfigurationService.Instance.RefreshConfigurations(_context, _transaction); } result.IsSucceed = result.IsSucceed && saveResult.IsSucceed; } if (Asset != null && Asset.Length > 0 && Id == 0) { var files = FileRepository.Instance.GetWebFiles(AssetFolder); StringBuilder strStyles = new StringBuilder(); foreach (var css in files.Where(f => f.Extension == ".css")) { strStyles.Append($" <link href='{css.FileFolder}/{css.Filename}{css.Extension}' rel='stylesheet'/>"); } StringBuilder strScripts = new StringBuilder(); foreach (var js in files.Where(f => f.Extension == ".js")) { strScripts.Append($" <script src='{js.FileFolder}/{js.Filename}{js.Extension}'></script>"); } var layout = BETemplateViewModel.Repository.GetSingleModel( t => t.FileName == "_Layout" && t.TemplateId == Model.Id , _context, _transaction); layout.Data.Content = layout.Data.Content.Replace("<!--[STYLES]-->" , string.Format(@"{0}" , strStyles)); layout.Data.Content = layout.Data.Content.Replace("<!--[SCRIPTS]-->" , string.Format(@"{0}" , strScripts)); layout.Data.SaveModel(true, _context, _transaction); } return(result); }
private async Task <RepositoryResponse <bool> > ImportThemeAsync(MixTheme parent, MixCmsContext _context, IDbContextTransaction _transaction) { var result = new RepositoryResponse <bool>() { IsSucceed = true }; string filePath = $"{MixFolders.WebRootPath}/{TemplateAsset.FileFolder}/{TemplateAsset.Filename}{TemplateAsset.Extension}"; if (File.Exists(filePath)) { string outputFolder = $"{MixFolders.WebRootPath}/{TemplateAsset.FileFolder}/Extract"; MixFileRepository.Instance.DeleteFolder(outputFolder); MixFileRepository.Instance.CreateDirectoryIfNotExist(outputFolder); MixFileRepository.Instance.UnZipFile(filePath, outputFolder); //Move Unzip Asset folder MixFileRepository.Instance.CopyDirectory($"{outputFolder}/Assets", $"{MixFolders.WebRootPath}/{AssetFolder}"); //Move Unzip Templates folder MixFileRepository.Instance.CopyDirectory($"{outputFolder}/Templates", TemplateFolder); //Move Unzip Uploads folder MixFileRepository.Instance.CopyDirectory($"{outputFolder}/Uploads", $"{MixFolders.WebRootPath}/{UploadsFolder}"); // Get SiteStructure var strSchema = MixFileRepository.Instance.GetFile("schema.json", $"{outputFolder}/Data"); string parseContent = strSchema.Content.Replace("[ACCESS_FOLDER]", AssetFolder) .Replace("[CULTURE]", Specificulture) .Replace("[THEME_NAME]", parent.Name); var siteStructures = JObject.Parse(parseContent).ToObject <SiteStructureViewModel>(); siteStructures.CreatedBy = CreatedBy; MixFileRepository.Instance.DeleteFolder(outputFolder); //MixFileRepository.Instance.DeleteFile(filePath); //Import Site Structures result = await siteStructures.ImportAsync(Specificulture, _context, _transaction); if (result.IsSucceed) { // Save template files to db var files = MixFileRepository.Instance.GetFilesWithContent(TemplateFolder); //TODO: Create default asset foreach (var file in files) { MixTemplates.UpdateViewModel template = new MixTemplates.UpdateViewModel( new MixTemplate() { CreatedBy = CreatedBy, FileFolder = file.FileFolder, FileName = file.Filename, Content = file.Content, Extension = file.Extension, CreatedDateTime = DateTime.UtcNow, LastModified = DateTime.UtcNow, ThemeId = parent.Id, ThemeName = parent.Name, FolderType = file.FolderName, ModifiedBy = CreatedBy }, _context, _transaction); var saveResult = await template.SaveModelAsync(true, _context, _transaction); result.IsSucceed = result.IsSucceed && saveResult.IsSucceed; if (!saveResult.IsSucceed) { result.IsSucceed = false; result.Exception = saveResult.Exception; result.Errors.AddRange(saveResult.Errors); break; } } } } return(result); }
protected async System.Threading.Tasks.Task <IActionResult> Page(string seoName) { // Home Page int maxPageSize = MixService.GetConfig <int>("MaxPageSize"); string orderBy = MixService.GetConfig <string>("OrderBy"); int orderDirection = MixService.GetConfig <int>("OrderDirection"); int.TryParse(Request.Query["page"], out int page); int.TryParse(Request.Query["pageSize"], out int pageSize); RepositoryResponse <Lib.ViewModels.MixPages.ReadMvcViewModel> getPage = null; Expression <Func <MixPage, bool> > predicate; if (string.IsNullOrEmpty(seoName)) { predicate = p => p.Type == MixPageType.Home.ToString() && p.Status == MixContentStatus.Published && p.Specificulture == culture; } else { predicate = p => p.SeoName == seoName && p.Status == MixContentStatus.Published && p.Specificulture == culture; } getPage = await Lib.ViewModels.MixPages.ReadMvcViewModel.Repository.GetFirstModelAsync(predicate); if (getPage.IsSucceed) { if (getPage.Data != null) { maxPageSize = getPage.Data.PageSize.HasValue ? getPage.Data.PageSize.Value : maxPageSize; pageSize = (pageSize > 0 && pageSize < maxPageSize) ? pageSize : maxPageSize; getPage.Data.LoadData(pageSize: pageSize, pageIndex: page - 1); } GeneratePageDetailsUrls(getPage.Data); } if (getPage.IsSucceed) { ViewData["Title"] = getPage.Data.SeoTitle; ViewData["Description"] = getPage.Data.SeoDescription; ViewData["Keywords"] = getPage.Data.SeoKeywords; ViewData["Image"] = getPage.Data.ImageUrl; ViewData["PageClass"] = getPage.Data.CssClass; getPage.LastUpdateConfiguration = MixService.GetConfig <DateTime?>("LastUpdateConfiguration"); return(View(getPage.Data)); } else { if (seoName != "404") { return(await Page("404")); } else { return(NotFound()); } } }
public async Task<RepositoryResponse<Notification>> AddNotification(Notification notification) { var response = new RepositoryResponse<Notification> { }; try { var Noti = Parse.ParseObject.Create("Notification"); #region Add Dependency Relationship DependencyRepository DependencyContext = new DependencyRepository(); RepositoryResponse<ParseObject> Dependency = await DependencyContext.GetDependencyById(notification.ID_DEPENDENCY); ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Dependency"); IEnumerable<ParseObject> result = await query.FindAsync(); #endregion #region Add City Relationship CityRepository CityContext = new CityRepository(); RepositoryResponse<ParseObject> City = await CityContext.GetCityById(notification.ID_CITY); query = new ParseQuery<ParseObject>("City"); result = await query.FindAsync(); #endregion var relation = Noti.GetRelation<ParseObject>("ID_Dependency"); relation.Add(Dependency.Data); relation = Noti.GetRelation<ParseObject>("ID_City"); relation.Add(City.Data); var message = string.Format("{0} > {1}: {2}", Dependency.Data["Name"].ToString(), City.Data["Name"].ToString(), notification.NOTIFICATION_TEXT); Noti.Add("NotificationText", message); await Noti.SaveAsync(); await Noti.SaveAsync(); var push = new ParsePush(); push.Query = from installation in ParseInstallation.Query where installation.Get<string>("City").Contains(notification.ID_CITY) select installation; push.Alert = message; await push.SendAsync(); notification.ID = Noti.ObjectId; response.Data = notification; response.Success = true; } catch (Exception ex) { response.Success = false; response.Error = ex; } return response; }