Пример #1
0
        public virtual async ValueTask UpdateAsync(
            Material material,
            string tags,
            CategoryCached category)
        {
            IHtmlDocument doc = new HtmlParser().Parse(material.Text);

            material.Text         = sanitizerService.Sanitize(doc);
            material.SettingsJson = material.SettingsJson?.MakeJsonText();


            switch (category.MaterialsSubTitleInputType)
            {
            case MaterialsSubTitleInputType.Manual:
                material.SubTitle = SimpleHtmlToText.ClearTags(sanitizerService.Sanitize(material.SubTitle));
                break;

            case MaterialsSubTitleInputType.Auto:
                material.SubTitle = MakeSubTitle.Do(doc, materialsOptions.SubTitleLength);
                break;

            default:
                material.SubTitle = null;
                break;
            }


            await db.UpdateAsync(material);

            await tagsManager.MaterialCreateAndSetTagsAsync(material, tags);
        }
Пример #2
0
        public virtual async Task UpdateAsync(
            Material material,
            string tags,
            CategoryCached category)
        {
            IHtmlDocument doc = new HtmlParser().Parse(material.Text);

            material.Text = sanitizer.Sanitize(doc);


            var generator = categoriesCache.GetMaterialsPreviewGenerator(category.MaterialsPreviewGeneratorName);

            material.Preview = generator(doc, materialsOptions.PreviewLength);


            switch (category.MaterialsSubTitleInputType)
            {
            case MaterialsSubTitleInputType.Manual:
                material.SubTitle = SimpleHtmlToText.ClearTags(sanitizer.Sanitize(material.SubTitle));
                break;

            case MaterialsSubTitleInputType.Auto:
                material.SubTitle = MakeSubTitle.Do(doc, materialsOptions.SubTitleLength);
                break;

            default:
                material.SubTitle = null;
                break;
            }


            await db.UpdateAsync(material);

            await tagsManager.MaterialCreateAndSetTagsAsync(material, tags);
        }
Пример #3
0
        public virtual async ValueTask CreateAsync(Material material, string tags, CategoryCached category)
        {
            IHtmlDocument doc = new HtmlParser().Parse(material.Text);

            material.Text         = sanitizerService.Sanitize(doc);
            material.SettingsJson = material.SettingsJson?.MakeJsonText();

            switch (category.MaterialsSubTitleInputType)
            {
            case MaterialsSubTitleInputType.Manual:
                material.SubTitle = SimpleHtmlToText.ClearTags(sanitizerService.Sanitize(material.SubTitle));
                break;

            case MaterialsSubTitleInputType.Auto:
                material.SubTitle = MakeSubTitle.Do(doc, materialsOptions.SubTitleLength);
                break;
            }


            using (db.BeginTransaction())
            {
                material.Id = await db.InsertWithInt32IdentityAsync(material);

                await db.Materials.Where(x => x.Id == material.Id).Set(x => x.SortNumber, x => material.Id)
                .UpdateAsync();

                await tagsManager.MaterialCreateAndSetTagsAsync(material, tags);

                db.CommitTransaction();
            }
        }
Пример #4
0
        public virtual async ValueTask CreateAsync(
            Material material,
            string tags,
            CategoryCached category,
            IReadOnlyDictionary <string, RoleCached> roles)
        {
            if (!roles.ContainsKey(RoleNames.Admin) || sanitizerService.SanitizerOptions.SanitizeAdminMaterials)
            {
                material.Text = sanitizerService.Sanitize(new HtmlParser().ParseDocument(material.Text));
            }

            material.SettingsJson = material.SettingsJson?.MakeJsonText();

            if (category.IsMaterialsSubTitleEditable)
            {
                material.SubTitle = SimpleHtmlToText.ClearTags(sanitizerService.Sanitize(material.SubTitle));
            }


            using (db.BeginTransaction())
            {
                material.Id = await db.InsertWithInt32IdentityAsync(material);

                await db.Materials.Where(x => x.Id == material.Id).Set(x => x.SortNumber, x => material.Id)
                .UpdateAsync();

                await tagsManager.MaterialCreateAndSetTagsAsync(material, tags);

                db.CommitTransaction();
            }
        }
Пример #5
0
        public virtual async Task UpdateAsync(Material material, string tags, bool isDescriptionEditable = false)
        {
            material.Text =
                sanitizer.Sanitize(material
                                   .Text); // TODO сделать совместную валидацию, санитайзин и превью на основе одного DOM

            var(preview, description) = MaterialExtensions.MakePreviewAndDescription(material.Text,
                                                                                     materialsOptions.DescriptionLength,
                                                                                     materialsOptions.PreviewLength);

            material.Preview = preview;

            if (isDescriptionEditable)
            {
                material.Description = SimpleHtmlToText.ClearTags(sanitizer.Sanitize(material.Description));
            }
            else
            {
                material.Description = description;
            }

            /*material.MakePreviewAndDescription(materialsOptions.DescriptionLength,
             *  materialsOptions.PreviewLength);*/

            await db.UpdateAsync(material);

            await tagsManager.MaterialCreateAndSetTagsAsync(material, tags);
        }
Пример #6
0
        public virtual async Task CreateAsync(Material material, string tags, bool isDescriptionEditable = false)
        {
            material.Text = sanitizer.Sanitize(material.Text);

            var(preview, description) = MaterialExtensions.MakePreviewAndDescription(material.Text,
                                                                                     materialsOptions.DescriptionLength,
                                                                                     materialsOptions.PreviewLength);

            material.Preview = preview;

            if (isDescriptionEditable)
            {
                material.Description = SimpleHtmlToText.ClearTags(sanitizer.Sanitize(material.Description));
            }
            else
            {
                material.Description = description;
            }


            /*material.MakePreviewAndDescription(materialsOptions.DescriptionLength,
             *  materialsOptions.PreviewLength);*/

            material.Id = await db.InsertWithInt32IdentityAsync(material);

            await tagsManager.MaterialCreateAndSetTagsAsync(material, tags);
        }
        public virtual async Task CreateAsync(
            Material material, string tags, bool isDescriptionEditable = false)
        {
            material.Text = sanitizer.Sanitize(material.Text);

            var(preview, description) = MaterialExtensions.MakePreviewAndDescription(material.Text,
                                                                                     materialsOptions.DescriptionLength,
                                                                                     materialsOptions.PreviewLength);

            material.Preview = preview;

            if (isDescriptionEditable)
            {
                material.Description = SimpleHtmlToText.ClearTags(sanitizer.Sanitize(material.Description));
            }
            else
            {
                material.Description = description;
            }

            using (db.BeginTransaction())
            {
                material.Id = await db.InsertWithInt32IdentityAsync(material);

                await db.Materials.Where(x => x.Id == material.Id).Set(x => x.SortNumber, x => material.Id)
                .UpdateAsync();

                await tagsManager.MaterialCreateAndSetTagsAsync(material, tags);

                db.CommitTransaction();
            }
        }
Пример #8
0
        public async Task <ActivityView[]> GetActivitiesAsync(
            int[] materialsCategoriesIds,
            int[] commentsCategoriesIds,
            int number)
        {
            var materialsActivities = await db.Materials
                                      .Where(x => materialsCategoriesIds.Contains(x.CategoryId) && !x.IsHidden && x.DeletedDate == null)
                                      .OrderByDescending(x => x.PublishDate)
                                      .Take(number)
                                      .Select(x => new ActivityView
            {
                MaterialId   = x.Id,
                Title        = x.Title,
                Description  = x.SubTitle,
                CategoryName = x.Category.Name,
                PublishDate  = x.PublishDate,
                AuthorName   = x.Author.UserName,
                AuthorLink   = x.Author.Link,
                AuthorAvatar = x.Author.Avatar
            }).ToListAsync();

            int descriptionSize    = materialsOptions.CurrentValue.SubTitleLength;
            int descriptionSizeBig = descriptionSize * 2;

            var commentsActivities = await db.Comments
                                     .Where(x => commentsCategoriesIds.Contains(x.Material.CategoryId) && x.DeletedDate == null &&
                                            !x.Material.IsHidden && x.Material.DeletedDate == null)
                                     .OrderByDescending(x => x.PublishDate)
                                     .Take(number)
                                     .Select(x => new ActivityView
            {
                MaterialId   = x.MaterialId,
                CommentId    = x.Id,
                Title        = x.Material.Title,
                Description  = x.Text.Substring(0, Math.Min(x.Text.Length, descriptionSizeBig)),
                CategoryName = x.Material.Category.Name,
                PublishDate  = x.PublishDate,
                AuthorName   = x.Author.UserName,
                AuthorLink   = x.Author.Link,
                AuthorAvatar = x.Author.Avatar
            }).ToListAsync();

            foreach (var comment in commentsActivities)
            {
                comment.Description = SimpleHtmlToText.ClearTagsAndBreaks(comment.Description);
                comment.Description =
                    comment.Description?.Substring(0, Math.Min(comment.Description.Length, descriptionSize));
            }

            List <ActivityView> allActivities = new List <ActivityView>();

            allActivities.AddRange(materialsActivities);
            allActivities.AddRange(commentsActivities);

            return(allActivities.OrderByDescending(x => x.PublishDate).Take(number).ToArray());
        }
Пример #9
0
 private Task <MaterialSearchInfoView[]> searchMaterialsMySql(string searchString)
 {
     return(db.Materials.Where(x => Sql.Ext.MySql().Match(searchString, x.Title, x.Text))
            .OrderByDescending(x => x.Id)
            .Select(x => new MaterialSearchInfoView()
     {
         Id = x.Id,
         Title = x.Title,
         Text = SimpleHtmlToText.ClearTags(x.Text)
     }).ToArrayAsync());
 }
Пример #10
0
        public virtual async ValueTask UpdateAsync(
            Material material,
            string tags,
            CategoryCached category)
        {
            IHtmlDocument doc = new HtmlParser().Parse(material.Text);

            material.Text         = sanitizerService.Sanitize(doc);
            material.SettingsJson = material.SettingsJson?.MakeJsonText();

            if (category.IsMaterialsSubTitleEditable)
            {
                material.SubTitle = SimpleHtmlToText.ClearTags(sanitizerService.Sanitize(material.SubTitle));
            }


            await db.UpdateAsync(material);

            await tagsManager.MaterialCreateAndSetTagsAsync(material, tags);
        }
Пример #11
0
        public virtual async ValueTask UpdateAsync(
            Material material,
            string tags,
            CategoryCached category,
            IReadOnlyDictionary <string, RoleCached> roles)
        {
            if (!roles.ContainsKey(RoleNames.Admin) || sanitizerService.SanitizerOptions.SanitizeAdminMaterials)
            {
                material.Text = sanitizerService.Sanitize(new HtmlParser().ParseDocument(material.Text));
            }

            material.SettingsJson = material.SettingsJson?.MakeJsonText();

            if (category.IsMaterialsSubTitleEditable)
            {
                material.SubTitle = SimpleHtmlToText.ClearTags(sanitizerService.Sanitize(material.SubTitle));
            }


            await db.UpdateAsync(material);

            await tagsManager.MaterialCreateAndSetTagsAsync(material, tags);
        }