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"));
        }
Example #13
0
        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));
                }
            }
        }
Example #14
0
        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();
                }
            }
        }
Example #15
0
        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);
        }
Example #16
0
        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);
        }
Example #17
0
        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();
                }
            }
        }
Example #18
0
        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);
                }
            }
        }
Example #19
0
        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);
        }
Example #21
0
        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);
        }
Example #22
0
        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);
        }
Example #23
0
        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);
            }
        }
Example #24
0
        /// <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();
            }
        }
Example #25
0
        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);
        }
Example #26
0
        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);
Example #27
0
        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));
                }
            }
        }
Example #29
0
        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)));
                }
            }
        }
Example #30
0
        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);
            }
        }
Example #31
0
        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);
        }
Example #32
0
        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);
        }
Example #33
0
        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();
                }
            }
        }
Example #34
0
        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);
        }
Example #35
0
        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();
                }
            }
        }
Example #36
0
        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);
        }
Example #37
0
        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);
        }
Example #38
0
        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);
        }
Example #40
0
        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);
        }
Example #41
0
        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;
        }