コード例 #1
0
        public string AddPost(string blogid, string username, string password, Post post, bool publish)
        {
            EnsureUser(username, password).Wait();

            if (post.categories == null)
            {
                throw new MetaWeblogException("Failed to specify categories");
            }

            var newStory = new BlogStory();

            try
            {
                newStory.Title         = post.title;
                newStory.Body          = post.description;
                newStory.DatePublished = post.dateCreated == DateTime.MinValue ? DateTime.UtcNow : post.dateCreated;
                if (post.categories != null)
                {
                    newStory.Categories = string.Join(",", post.categories);
                }
                newStory.IsPublished = publish;
                newStory.Slug        = newStory.GetStoryUrl();
                newStory.UniqueId    = newStory.Slug;

                _repo.AddStory(newStory);
                _repo.SaveAll();
            }
            catch (Exception)
            {
                throw new MetaWeblogException("Failed to save the post.");
            }
            return(newStory.Id.ToString());
        }
コード例 #2
0
    public async Task<string> AddPostAsync(string blogid, string username, string password, Post post, bool publish)
    {
      await EnsureUser(username, password);

      if (post.categories == null) throw new MetaWeblogException("Failed to specify categories");

      var newStory = new BlogStory();
      try
      {
        newStory.Title = post.title;
        newStory.Body = post.description;
        newStory.DatePublished = post.dateCreated == DateTime.MinValue ? DateTime.UtcNow : post.dateCreated;
        if (post.categories != null) newStory.Categories = string.Join(",", post.categories);
        newStory.IsPublished = publish;
        newStory.Slug = newStory.GetStoryUrl();
        newStory.UniqueId = newStory.Slug;

        _repo.AddStory(newStory);
        if (await _repo.SaveAllAsync())
        {
          return newStory.Id.ToString();

        }
      }
      catch (Exception)
      {
        _logger.LogError("Failed to add new Post");
      }

      throw new MetaWeblogException("Failed to save the post.");
    }
コード例 #3
0
        public async Task <BlogStory> CreateOrUpdateAsync(BlogStory blogStory,
                                                          CancellationToken cancel = default)
        {
            if (blogStory == null)
            {
                throw new ArgumentNullException(nameof(blogStory));
            }

            if (blogStory.Id == Guid.Empty)
            {
                blogStory.InitializeOnCreate();
                await _blogStoryRepository.AddAsync(blogStory, cancel);

                return(blogStory);
            }

            var originalBlogStory = await _blogStoryRepository.GetAsync(blogStory.Id, cancel);

            if (originalBlogStory == null)
            {
                throw new EntityNotFoundException($"Can't edit story : {blogStory.Id}");
            }

            originalBlogStory.Update(blogStory);
            await _blogStoryRepository.UpdateAsync(originalBlogStory, cancel);

            await _tagManager.UpdateBlogStoryTagsAsync(blogStory, cancel);

            return(originalBlogStory);
        }
コード例 #4
0
ファイル: CacheHelper.cs プロジェクト: BionStt/blog
        public static void SetSlidingStory(this IMemoryCache cache, String alias, BlogStory story, Int32 minutesCount)
        {
            var key = $"{CacheKeys.StoryPrefix}{alias}";

            cache.SetSliding(key, story, minutesCount);
            cache.RemovePages();
        }
コード例 #5
0
        public void Update(BlogStory entity)
        {
            this._storys.Remove(entity);
            this._storys.Add(entity);

            this._modifiedStorys.Add(entity);
        }
コード例 #6
0
 private void FixStory(BlogStory s)
 {
     if (s != null)
     {
         s.Body = s.Body.Replace("http://", "//");
     }
 }
コード例 #7
0
        public EditBlogStoryViewModel(BlogStory blogStory)
        {
            if (blogStory != null)
            {
                Id             = blogStory.Id;
                Title          = blogStory.Title;
                Alias          = blogStory.Alias;
                Description    = blogStory.Description;
                SeoDescription = blogStory.SeoDescription;
                Keywords       = blogStory.SeoKeywords;
                Content        = blogStory.Content;
                StoryImageUrl  = blogStory.StoryImageUrl;
                StoryThumbUrl  = blogStory.StoryThumbUrl;
                CreateDate     = blogStory.CreateDate.ToString("dd.MM.yyyy HH:mm");
                ModifiedDate   = blogStory.ModifiedDate.ToString("dd.MM.yyyy HH:mm");
                IsPublished    = blogStory.PublishedDate.HasValue;
                AccessToken    = blogStory.AccessToken;
                Tags           = "[]";

                if (blogStory.BlogStoryTags != null)
                {
                    TagsSelected = blogStory.BlogStoryTags.Select(x => x.TagId).JoinToString(",");
                }
            }
        }
コード例 #8
0
ファイル: FullStoryViewModel.cs プロジェクト: BionStt/blog
        public FullStoryViewModel(BlogStory story)
        {
            Id             = story.Id;
            Title          = story.Title;
            Keywords       = story.SeoKeywords;
            Description    = story.Description;
            SeoDescription = story.SeoDescription;
            StoryThumbUrl  = story.StoryThumbUrl;
            CreateDate     = story.CreateDate;
            if (story.PublishedDate.HasValue)
            {
                CreateDayDate       = story.PublishedDate.Value.Day.ToString();
                CreateMonthYearDate = $"{story.PublishedDate.Value.GetShorMonthName()} {story.PublishedDate.Value.Year}";
            }
            else
            {
                CreateDayDate       = story.CreateDate.Day.ToString();
                CreateMonthYearDate = $"{story.CreateDate.GetShorMonthName()} {story.CreateDate.Year}";
            }

            Slug          = story.Alias;
            Content       = story.Content;
            StoryImageUrl = story.StoryImageUrl;
            ModifiedDate  = story.ModifiedDate;
            IsPublished   = story.PublishedDate.HasValue;

            StoryTags = story.BlogStoryTags.IsNotEmpty()
                ? story.BlogStoryTags.Select(x => new TagViewModel(x.Tag)).ToList()
                : new List <TagViewModel>(0);
        }
コード例 #9
0
        public void Add(BlogStory entity)
        {
            lock (this._storys)
            {
                this._storys.Add(entity);

                this._newStorys.Add(entity);
            }
        }
コード例 #10
0
ファイル: BlogStoryExtensions.cs プロジェクト: BionStt/blog
 public static SitemapItem ToSitemapItem(this BlogStory story, String baseUrl)
 {
     return(new SitemapItem
     {
         Url = $"{baseUrl}/{story.Alias}",
         Modified = story.ModifiedDate,
         ChangeFrequency = ChangeFrequency.Weekly,
     });
 }
コード例 #11
0
        public EditBlogStoryViewModel(BlogStory blogStory,
                                      IEnumerable <Blog.Core.Entities.Tag> tags,
                                      IUrlHelper url) : this(blogStory)
        {
            Tags = tags == null
                ? "[]"
                : JsonConvert.SerializeObject(tags.Select(x => new TagShort(x)).ToList());

            ShareLink = GetShareLink(url);
        }
コード例 #12
0
        public BlogStory GetByKey(Guid id)
        {
            BlogStory story = null;

            try
            {
                story = this._storys.Single(s => s.Id == id);
            }
            catch (InvalidOperationException) { }

            return(story);
        }
コード例 #13
0
        public BlogStory Find(FBS.Domain.Specifications.ISpecification <BlogStory> specification)
        {
            BlogStory story = null;

            try
            {
                this._storys.SingleOrDefault(specification.GetExpression().Compile());
            }
            catch (InvalidOperationException) {}

            return(story);
        }
コード例 #14
0
        public AuthorShortBlogStoryViewModel(BlogStory story)
        {
            Id          = story.Id;
            Title       = story.Title;
            Alias       = story.Alias;
            CreatedDate = story.CreateDate.ToString("dd.MM.yyyy HH:mm");
            if (story.PublishedDate.HasValue)
            {
                PublisheddDate = story.PublishedDate.Value.ToString("dd.MM.yyyy HH:mm");
            }

            Status = story.PublishedDate.HasValue ? BlosStoryStatus.Published : BlosStoryStatus.Draft;
        }
コード例 #15
0
        //public static Uri GetStoryFullUri(this BlogStory story, HttpRequest request)
        //{
        //  return new Uri(new Uri(request.GetDisplayUrl()), story.GetStoryUrl());
        //}

        public static string GetUrlSafeTitle(this BlogStory story)
        {
            // Characters to replace with underscore
            char[] replacements = @" ""'?*.,+&:;\/#".ToCharArray();

            string[]      splits = story.Title.Split(replacements, StringSplitOptions.RemoveEmptyEntries);
            StringBuilder bldr   = new StringBuilder();

            foreach (string s in splits)
            {
                bldr.Append(s);
                bldr.Append("-");
            }
            return(bldr.ToString(0, bldr.Length - 1));
        }
コード例 #16
0
ファイル: BlogStoryPersist.cs プロジェクト: mike442144/FBS
        public static HashSet <BlogStory> GetAll()
        {
            HashSet <BlogStory> list = new HashSet <BlogStory>();
            string sql = "select * from fbs_Story";

            using (DbDataReader dr = DataHelper.ExecuteReader(CommandType.Text, sql))
            {
                while (dr.Read())
                {
                    list.Add(BlogStory.CreateFromReader(dr));
                }
            }

            return(list);
        }
コード例 #17
0
        public BlogStory ToDomain()
        {
            String slug = null;

            if (String.IsNullOrWhiteSpace(Alias))
            {
                slug = StringToUrlStandard.Convert(Title.Trim());
            }
            else
            {
                Alias = Alias.ToLowerInvariant();
            }

            var story = new BlogStory
            {
                Id             = Id,
                Title          = Title.Trim(),
                Alias          = slug ?? Alias,
                Description    = Description.Trim(),
                SeoDescription = SeoDescription?.Trim(),
                SeoKeywords    = Keywords,
                Content        = Content ?? String.Empty,
                StoryImageUrl  = StoryImageUrl?.Trim(),
                StoryThumbUrl  = StoryThumbUrl?.Trim(),
                CreateDate     = String.IsNullOrWhiteSpace(CreateDate)
                    ? DateTime.Now
                    : DateTime.Parse(CreateDate),
                ModifiedDate = DateTime.Now,
                AccessToken  = AccessToken
            };


            if (!String.IsNullOrEmpty(TagsSelected))
            {
                var tagIds = TagsSelected.GetGuids(',');
                story.BlogStoryTags = tagIds.Select(x => new BlogStoryTag
                {
                    BlogStoryId = story.Id,
                    TagId       = x
                })
                                      .ToList();
            }

            return(story);
        }
コード例 #18
0
        public async Task UpdateBlogStoryTagsAsync(BlogStory story,
                                                   CancellationToken cancel = default)
        {
            if (story == null)
            {
                throw new ArgumentNullException(nameof(story));
            }

            var existTagIds = await _blogStoryTagRepository.GetIdsByStoryIdAsync(story.Id, cancel);

            var isAddingNewSet = existTagIds.IsEmpty() &&
                                 story.BlogStoryTags.IsNotEmpty();

            if (isAddingNewSet)
            {
                await _blogStoryTagRepository.AddRangeAsync(story.BlogStoryTags, cancel);

                return;
            }


            if (story.BlogStoryTags.IsEmpty())
            {
                if (existTagIds.IsNotEmpty())
                {
                    await _blogStoryTagRepository.DeleteRangeAsync(existTagIds, story.Id, cancel);
                }

                return;
            }

            var targetTagIds  = story.BlogStoryTags.Select(x => x.TagId).ToList();
            var tagsForRemove = existTagIds.Except(targetTagIds).ToList();
            var tagsForAdding = targetTagIds.Except(existTagIds).ToList();

            if (tagsForAdding.IsNotEmpty())
            {
                await _blogStoryTagRepository.AddRangeAsync(story.BlogStoryTags.Where(x => tagsForAdding.Contains(x.TagId)).ToList(), cancel);
            }

            if (tagsForRemove.IsNotEmpty())
            {
                await _blogStoryTagRepository.DeleteRangeAsync(tagsForRemove, story.Id, cancel);
            }
        }
コード例 #19
0
        public async Task <BlogStory> AssignTagToBlogStory(Guid tagId,
                                                           BlogStory blogStory,
                                                           CancellationToken cancel = default)
        {
            if (blogStory == null)
            {
                throw new ArgumentNullException(nameof(blogStory));
            }

            if (blogStory.BlogStoryTags.Count >= 3)
            {
                throw new EntityRelationshipException("Blog story already have reach relationship limit (3 entities)");
            }

            await _blogStoryTagRepository.AddAsync(new BlogStoryTag(blogStory.Id, tagId), cancel);

            return(blogStory);
        }
コード例 #20
0
        public static string GetSummary(this BlogStory me)
        {
            var           maxparagraphs = 2;
            var           regex         = new Regex("(<p[^>]*>.*?</p>)", RegexOptions.IgnoreCase | RegexOptions.Singleline);
            var           result        = regex.Matches(me.Body);
            StringBuilder bldr          = new StringBuilder();
            var           x             = 0;

            foreach (Match m in result)
            {
                x++;
                bldr.Append(m.Value);
                if (x == maxparagraphs)
                {
                    break;
                }
            }
            return(bldr.ToString());
        }
コード例 #21
0
        public ShortBlogStoryViewModel(BlogStory blogStory)
        {
            Id            = blogStory.Id;
            Title         = blogStory.Title;
            ShortContent  = blogStory.Description;
            StoryThumbUrl = blogStory.StoryThumbUrl;
            Alias         = blogStory.Alias;
            if (blogStory.PublishedDate.HasValue)
            {
                CreateDayDate       = blogStory.PublishedDate.Value.Day.ToString();
                CreateMonthYearDate = $"{blogStory.PublishedDate.Value.GetShorMonthName()} {blogStory.PublishedDate.Value.Year.ToString()}";
            }
            else
            {
                CreateDayDate       = blogStory.CreateDate.Day.ToString();
                CreateMonthYearDate = $"{blogStory.CreateDate.GetShorMonthName()} {blogStory.CreateDate.Year.ToString()}";
            }

            Tags = new List <TagViewModel>(0);
        }
コード例 #22
0
ファイル: SiteMigration.cs プロジェクト: kdoaman/WilderBlog
        private void MigrateStory(Stories story)
        {
            story.Body = FixBody(story.Body);

            var newStory = new BlogStory()
            {
                Title         = story.Title,
                Body          = story.Body,
                DatePublished = story.DatePosted,
                IsPublished   = story.IsPublished,
                UniqueId      = story.GetStoryUrl(),
                Slug          = story.GetStoryUrl()
            };

            var cats = string.Join(",", _ctx.StoryCategories.Include(c => c.Category).Where(s => s.Story_Id == story.Id).Select(s => s.Category.Name).ToArray());

            newStory.Categories = cats;

            _repo.AddStory(newStory);
        }
コード例 #23
0
        private void FixSyntaxes(BlogStory story)
        {
            var html = story.Body;

            if (Regex.IsMatch(html, "<pre(.*)>(.*)<code>(.*)", RegexOptions.IgnoreCase))
            {
                var doc = new HtmlDocument();
                doc.LoadHtml(html);
                var pres = doc.DocumentNode.SelectNodes("//pre");
                foreach (var pre in pres)
                {
                    var code = pre.FirstChild;
                    if (code != null && !code.Attributes.Contains("class"))
                    {
                        code.Attributes.Add("class", "lang-none");
                    }
                }
                story.Body = doc.DocumentNode.OuterHtml;
            }
            ;
        }
コード例 #24
0
        /// <summary>
        /// 以键值删除
        /// </summary>
        /// <param name="id">键值</param>
        public void RemoveByKey(Guid id)
        {
            BlogStory storyToRemove = null;

            foreach (BlogStory story in this._storys)
            {
                if (story.Id == id)
                {
                    storyToRemove = story;
                    break;
                }
            }


            //从内存中加载到对象
            if (storyToRemove != null)
            {
                this._storys.Remove(storyToRemove);

                this._removedStorys.Add(storyToRemove);
            }
        }
コード例 #25
0
 public ShortBlogStoryViewModel(BlogStory blogStory, List <TagViewModel> tags) : this(blogStory)
 {
     Tags = tags;
 }
コード例 #26
0
 public void AddStory(BlogStory story)
 {
     story.Id = _stories.Max(s => s.Id) + 1;
     _stories.Add(story);
 }
コード例 #27
0
 public void AddStory(BlogStory story)
 {
     _ctx.Stories.Add(story);
 }
コード例 #28
0
 public void Remove(BlogStory entity)
 {
     this._storys.Remove(entity);
     this._removedStorys.Add(entity);
 }
コード例 #29
0
 public static string GetStoryUrl(this BlogStory story)
 {
     return(string.Format("{0:0000}/{1:00}/{2:00}/{3}", story.DatePublished.Year, story.DatePublished.Month, story.DatePublished.Day, GetUrlSafeTitle(story)));
 }
コード例 #30
0
ファイル: FullStoryViewModel.cs プロジェクト: BionStt/blog
 public FullStoryViewModel(BlogStory story, List <Tag> tags) : this(story)
 {
     MenuTags = tags.IsEmpty()
         ? new List <TagViewModel>(0)
         : tags.Select(x => new TagViewModel(x)).ToList();
 }