Exemple #1
0
        protected async Task <RepositoryResponse <Lib.ViewModels.FileViewModel> > ExportListAsync(Expression <Func <TModel, bool> > predicate, string type)
        {
            var getData = await DefaultModelRepository <TDbContext, TModel> .Instance.GetModelListByAsync(predicate, _context);

            Lib.ViewModels.FileViewModel file = null;
            if (getData.IsSucceed)
            {
                string exportPath = $"Exports/Structures/{typeof(TModel).Name}";
                string filename   = $"{type.ToString()}_{DateTime.UtcNow.ToString("ddMMyyyy")}";
                var    objContent = new JObject(
                    new JProperty("type", type.ToString()),
                    new JProperty("data", JArray.FromObject(getData.Data))
                    );
                file = new Lib.ViewModels.FileViewModel()
                {
                    Filename   = filename,
                    Extension  = ".json",
                    FileFolder = exportPath,
                    Content    = objContent.ToString()
                };
                // Copy current templates file
                Lib.Repositories.FileRepository.Instance.SaveWebFile(file);
            }
            UnitOfWorkHelper <TDbContext> .HandleTransaction(getData.IsSucceed, true, _transaction);

            return(new RepositoryResponse <Lib.ViewModels.FileViewModel>()
            {
                IsSucceed = true,
                Data = file,
            });
        }
        //public override List<Task> GenerateRelatedData(MixCmsContext context, IDbContextTransaction transaction)
        //{
        //    var tasks = new List<Task>();
        //    //var attrDatas = context.MixAttributeSetData.Include(m => m.MixRelatedAttributeData).Where(m => m.MixRelatedAttributeData
        //    //    .Any(d => d.Specificulture == Specificulture && d.Id == Id));
        //    var relatedData = context.MixRelatedAttributeData.Include(m => m.MixAttributeSetData).Where(m => m.Specificulture == Specificulture && (m.Id == Id || m.ParentId == Id));
        //    foreach (var item in relatedData)
        //    {
        //        tasks.Add(Task.Run(() =>
        //        {
        //            ReadViewModel.Repository.RemoveCache(item.MixAttributeSetData, context, transaction);
        //            MixRelatedAttributeDatas.ReadViewModel.Repository.RemoveCache(item, context, transaction);
        //        }));
        //    }
        //    foreach (var item in Values)
        //    {
        //        tasks.Add(Task.Run(() =>
        //        {
        //            item.RemoveCache(item.Model);
        //        }));
        //    }
        //    return tasks;
        //}

        private void HandleEdm(MixCmsContext _context, IDbContextTransaction _transaction)
        {
            var getAttrSet = Lib.ViewModels.MixAttributeSets.ReadViewModel.Repository.GetSingleModel(m => m.Name == AttributeSetName || m.Id == AttributeSetId, _context, _transaction);

            if (!string.IsNullOrEmpty(getAttrSet.Data.EdmSubject))
            {
                var getEdm = Lib.ViewModels.MixTemplates.UpdateViewModel.GetTemplateByPath(getAttrSet.Data.EdmTemplate, Specificulture);
                if (getEdm.IsSucceed && !string.IsNullOrEmpty(getEdm.Data.Content))
                {
                    string body = getEdm.Data.Content;
                    foreach (var prop in Fields)
                    {
                        var val = GetValue(prop.Name);
                        body = body.Replace($"[[{prop.Name}]]", val.StringValue);
                    }
                    var edmFile = new Lib.ViewModels.FileViewModel()
                    {
                        Content    = body,
                        Extension  = ".html",
                        FileFolder = "edms",
                        Filename   = $"{getAttrSet.Data.EdmSubject}-{Id}"
                    };
                    if (FileRepository.Instance.SaveWebFile(edmFile))
                    {
                        var val = GetValue("edm");
                        if (val != null)
                        {
                            val.StringValue = edmFile.WebPath;
                        }
                    }
                }
            }
        }
        public override async Task <RepositoryResponse <bool> > SaveSubModelsAsync(MixTheme parent, MixCmsContext _context = null, IDbContextTransaction _transaction = null)
        {
            RepositoryResponse <bool> result = new RepositoryResponse <bool>()
            {
                IsSucceed = true
            };

            if (string.IsNullOrEmpty(TemplateAsset.Filename))
            {
                TemplateAsset = new Lib.ViewModels.FileViewModel()
                {
                    Filename   = "default_blank",
                    Extension  = MixFileExtensions.Zip,
                    FileFolder = MixFolders.ImportFolder
                };
            }

            result = await ImportThemeAsync(parent, _context, _transaction);

            // Actived Theme
            if (IsActived)
            {
                result = await ActivedThemeAsync(_context, _transaction);
            }

            return(result);
        }
Exemple #4
0
        public override async Task <RepositoryResponse <bool> > SaveSubModelsAsync(MixTheme parent, MixCmsContext _context = null, IDbContextTransaction _transaction = null)
        {
            RepositoryResponse <bool> result = new RepositoryResponse <bool>()
            {
                IsSucceed = true
            };

            //Import From existing Theme (zip)
            if (string.IsNullOrEmpty(TemplateAsset.Filename))
            {
                TemplateAsset = new Lib.ViewModels.FileViewModel()
                {
                    Filename   = "default_blank",
                    Extension  = ".zip",
                    FileFolder = "Imports/Themes"
                };
            }

            if (IsCloneFromCurrentTheme)
            {
                if (result.IsSucceed)
                {
                    RepositoryResponse <bool> saveTemplate = await SaveTemplatesAsync(parent, TemplateFolder, _context, _transaction);

                    ViewModelHelper.HandleResult(saveTemplate, ref result);
                }
            }

            result = await ImportThemeAsync(parent, _context, _transaction);

            // Import Assets
            if (result.IsSucceed && !string.IsNullOrEmpty(Asset.Filename))
            {
                result = ImportAssetsAsync(_context, _transaction);
            }

            //// New themes without import existing theme => create from default folder
            //if (result.IsSucceed && !Directory.Exists(TemplateFolder) && string.IsNullOrEmpty(TemplateAsset.Filename))
            //{
            //    result = await CreateDefaultThemeTemplatesAsync(_context, _transaction);
            //}

            // Actived Theme
            if (IsActived)
            {
                result = await ActivedThemeAsync(_context, _transaction);
            }
            return(result);
        }
Exemple #5
0
 public override MixTheme ParseModel(MixCmsContext _context = null, IDbContextTransaction _transaction = null)
 {
     if (Id == 0)
     {
         Id              = Repository.Max(m => m.Id, _context, _transaction).Data + 1;
         Name            = SeoHelper.GetSEOString(Title);
         CreatedDateTime = DateTime.UtcNow;
         //Import From existing Theme (zip)
         if (string.IsNullOrEmpty(TemplateAsset.Filename))
         {
             TemplateAsset = new Lib.ViewModels.FileViewModel()
             {
                 Filename   = "default_blank",
                 Extension  = MixFileExtensions.Zip,
                 FileFolder = MixFolders.ImportFolder
             };
         }
     }
     return(base.ParseModel(_context, _transaction));
 }
Exemple #6
0
        public override MixAttributeSetData ParseModel(MixCmsContext _context = null, IDbContextTransaction _transaction = null)
        {
            if (string.IsNullOrEmpty(Id))
            {
                Id = Guid.NewGuid().ToString();
                CreatedDateTime = DateTime.UtcNow;
                Priority        = Repository.Count(m => m.AttributeSetName == AttributeSetName && m.Specificulture == Specificulture, _context, _transaction).Data + 1;
            }

            if (string.IsNullOrEmpty(AttributeSetName))
            {
                AttributeSetName = _context.MixAttributeSet.First(m => m.Id == AttributeSetId)?.Name;
            }
            if (AttributeSetId == 0)
            {
                AttributeSetId = _context.MixAttributeSet.First(m => m.Name == AttributeSetName)?.Id ?? 0;
            }
            Values = Values ?? Lib.ViewModels.MixAttributeSetValues.UpdateViewModel
                     .Repository.GetModelListBy(a => a.DataId == Id && a.Specificulture == Specificulture, _context, _transaction).Data.OrderBy(a => a.Priority).ToList();
            Fields = Lib.ViewModels.MixAttributeFields.UpdateViewModel.Repository.GetModelListBy(f => f.AttributeSetId == AttributeSetId, _context, _transaction).Data;

            foreach (var field in Fields.OrderBy(f => f.Priority))
            {
                var val = Values.FirstOrDefault(v => v.AttributeFieldId == field.Id);
                if (val == null)
                {
                    val = new Lib.ViewModels.MixAttributeSetValues.UpdateViewModel(
                        new MixAttributeSetValue()
                    {
                        AttributeFieldId   = field.Id,
                        AttributeFieldName = field.Name,
                    }
                        , _context, _transaction)
                    {
                        StringValue = field.DefaultValue,
                        Priority    = field.Priority,
                        Field       = field
                    };
                    Values.Add(val);
                }
                val.Priority         = field.Priority;
                val.AttributeSetName = AttributeSetName;
                if (Data[val.AttributeFieldName] != null)
                {
                    if (val.Field.DataType == Lib.MixEnums.MixDataType.Reference)
                    {
                        var arr = Data[val.AttributeFieldName].Value <JArray>();
                        if (arr != null)
                        {
                            foreach (JObject objData in arr)
                            {
                                string id = objData["id"]?.Value <string>();
                                // if have id => update data, else add new
                                if (!string.IsNullOrEmpty(id))
                                {
                                    //var getData = Repository.GetSingleModel(m => m.Id == id && m.Specificulture == Specificulture, _context, _transaction);
                                    //if (getData.IsSucceed)
                                    //{
                                    //    getData.Data.Data = objData;
                                    //    RefData.Add(getData.Data);
                                    //}
                                }
                                else
                                {
                                    RefData.Add(new FormViewModel()
                                    {
                                        Specificulture = Specificulture,
                                        AttributeSetId = field.ReferenceId.Value,
                                        Data           = objData
                                    });
                                }
                            }
                        }
                    }
                    else
                    {
                        ParseModelValue(Data[val.AttributeFieldName], val);
                    }
                }
                else
                {
                    Data.Add(ParseValue(val));
                }
            }

            // Save Edm html
            var getAttrSet = Mix.Cms.Lib.ViewModels.MixAttributeSets.ReadViewModel.Repository.GetSingleModel(m => m.Name == AttributeSetName, _context, _transaction);
            var getEdm     = Lib.ViewModels.MixTemplates.UpdateViewModel.GetTemplateByPath(getAttrSet.Data.EdmTemplate, Specificulture);
            var edmField   = Values.FirstOrDefault(f => f.AttributeFieldName == "edm");

            if (edmField != null && getEdm.IsSucceed && !string.IsNullOrEmpty(getEdm.Data.Content))
            {
                string body = getEdm.Data.Content;
                foreach (var prop in Data.Properties())
                {
                    body = body.Replace($"[[{prop.Name}]]", Data[prop.Name].Value <string>());
                }
                var edmFile = new Lib.ViewModels.FileViewModel()
                {
                    Content    = body,
                    Extension  = ".html",
                    FileFolder = "edms",
                    Filename   = $"{getAttrSet.Data.EdmSubject}-{Id}"
                };
                if (FileRepository.Instance.SaveWebFile(edmFile))
                {
                    Data["edm"]          = edmFile.WebPath;
                    edmField.StringValue = edmFile.WebPath;
                }
            }
            //End save edm
            return(base.ParseModel(_context, _transaction));;
        }