Ejemplo n.º 1
0
        public void SeedData()
        {
            // Seeding Data to db
            // Add Tags
            var tags = new Dictionary <string, Tag>
            {
                { "c#", new Tag {
                      Name = "c#"
                  } },
                { "angularjs", new Tag {
                      Name = "angularjs"
                  } },
                { "javascript", new Tag {
                      Name = "javascript"
                  } },
                { "nodejs", new Tag {
                      Name = "nodejs"
                  } },
                { "oop", new Tag {
                      Name = "oop"
                  } },
                { "linq", new Tag {
                      Name = "linq"
                  } },
            };

            foreach (var tag in tags.Values)
            {
                _context.Tags.Add(tag);
            }

            _context.SaveChanges();

            // Add Users

            var users = new List <User>
            {
                new User
                {
                    Name = "Artem Labetskiy"
                },
                new User
                {
                    Name = "Johnnie Trombetta"
                },
                new User
                {
                    Name = "Clair Wenz"
                },
                new User
                {
                    Name = "Vladimir Hilgefort"
                },
                new User
                {
                    Name = "Bob Greenway"
                }
            };

            foreach (var user in users)
            {
                _context.Users.Add(user);
            }

            _context.SaveChanges();

            // Adding post with multiple tags. Many-to-Many Relationship.

            var post1 = new Post();

            post1.Name        = "All about OOP";
            post1.UserId      = 21;
            post1.Description = "Digging inside OOP";
            post1.Level       = 2;

            var tag1 = new Tag();

            tag1.Name = "Test-Tag-OOP1";

            var tag2 = new Tag();

            tag2.Name = "Test-Tag-OOP2";

            var junktion1 = new PostTag();
            var junktion2 = new PostTag();

            junktion1.Post = post1;
            junktion1.Tag  = tag1;

            junktion2.Post = post1;
            junktion2.Tag  = tag2;

            post1.Tags.Add(junktion1);
            post1.Tags.Add(junktion2);

            _context.Posts.Add(post1);
            _context.Tags.Add(tag1);
            _context.Tags.Add(tag1);

            _context.SaveChanges();


            //var post2 = new Post();
            //post2.Name = "Explaining SignalR";
            //post2.UserId = 1;
            //post2.Description = "Digging inside SignalR";
            //post2.Level = 2;


            //var post3 = new Post();
            //post3.Name = "The power of JavaScipt";
            //post3.UserId = 2;
            //post3.Description = "Exploring JavaScipt";
            //post3.Level = 1;

            //var tag1 = new Tag();
            //tag1.Name = "c#";

            //var tag2 = new Tag();
            //tag1.Name = "javascript";


            //var junktion1 = new PostTag();
            //var junktion2 = new PostTag();

            //junktion1.Post = post1;
            //junktion1.Tag = tag1;

            //junktion2.Post = post2;
            //junktion2.Tag = tag1;

            //tag1.Posts.Add(junktion1);
            //tag1.Posts.Add(junktion2);

            //_context.Tags.Add(tag1);

            //_context.Posts.Add(post1);
            //_context.Posts.Add(post2);

            //_context.SaveChanges();
            #region Posts
            //var posts = new List<Post>
            //{
            //    new Post
            //    {
            //        Id = 1,
            //        Name = "C# Basics",
            //        UserId = 1,
            //        Description = "Description for C# Basics",
            //        Level = 1,
            //        Tags = new Collection<Tag>()
            //        {
            //            tags["c#"]
            //        }
            //    },
            //    new Post
            //    {
            //        Id = 2,
            //        Name = "C# Intermediate",
            //        UserId = 1,
            //        Description = "Description for C# Intermediate",
            //        Level = 2,
            //        Tags = new Collection<Tag>()
            //        {
            //            tags["c#"],
            //            tags["oop"]
            //        }
            //    },
            //    new Post
            //    {
            //        Id = 3,
            //        Name = "C# Advanced",
            //        UserId = 1,
            //        Description = "Description for C# Advanced",
            //        Level = 3,
            //        Tags = new Collection<Tag>()
            //        {
            //            tags["c#"]
            //        }
            //    },
            //    new Post
            //    {
            //        Id = 4,
            //        Name = "Javascript: Understanding the Weird Parts",
            //        UserId = 2,
            //        Description = "Description for Javascript",
            //        Level = 2,
            //        Tags = new Collection<Tag>()
            //        {
            //            tags["javascript"]
            //        }
            //    },
            //    new Post
            //    {
            //        Id = 5,
            //        Name = "Learn and Understand Angular 73",
            //        UserId = 2,
            //        Description = "Description for Angular 73",
            //        Level = 2,
            //        Tags = new Collection<Tag>()
            //        {
            //            tags["angularjs"]
            //        }
            //    },
            //    new Post
            //    {
            //        Id = 6,
            //        Name = "Learn and Understand NodeJS",
            //        UserId = 2,
            //        Description = "Description for NodeJS",
            //        Level = 2,
            //        Tags = new Collection<Tag>()
            //        {
            //            tags["nodejs"]
            //        }
            //    },
            //    new Post
            //    {
            //        Id = 7,
            //        Name = "Programming for Complete Beginners",
            //        UserId = 3,
            //        Description = "Description for Programming for Beginners",
            //        Level = 1,
            //        Tags = new Collection<Tag>()
            //        {
            //            tags["c#"]
            //        }
            //    },
            //    new Post
            //    {
            //        Id = 8,
            //        Name = "Power of JavaScript. Callback.",
            //        UserId = 4,
            //        Description = "All about callbacks in JavaScipt",
            //        Level = 1,
            //        Tags = new Collection<Tag>()
            //        {
            //            tags["c#"]
            //        }
            //    },
            //    new Post
            //    {
            //        Id = 9,
            //        Name = "Learn MS SQL Server",
            //        UserId = 4,
            //        Description = "Be the best SQL Server Administrator",
            //        Level = 1,
            //        Tags = new Collection<Tag>()
            //        {
            //            tags["javascript"]
            //        }
            //    }
            //};
            #endregion
        }
 public void Delete(PostTag postTag)
 {
     _postTagDal.Delete(postTag);
 }
Ejemplo n.º 3
0
 public void AddPostTags(PostTag postTag)
 {
     _context.PostTags.Add(postTag);
 }
Ejemplo n.º 4
0
 public async Task <Post> GetOrNullWithTagsBy(PostTag postTag)
 => await _blogContext.Posts
 .Include(pt => pt.PostTags)
 .ThenInclude(t => t.Tag)
 .FirstOrDefaultAsync(p => p.Id == postTag.PostId);
Ejemplo n.º 5
0
 public void Add(PostTag postTag)
 {
     _db.PostTags.Add(postTag);
 }
Ejemplo n.º 6
0
 public HashSet <string> UpdateValidation(PostTag entity)
 {
     return(ValidationMessages);
 }
Ejemplo n.º 7
0
 public ActionResult Create(PostTag posttag)
 {
     posttagRepo.Create(posttag);
     return(RedirectToAction("Details", "Post", new { id = posttag.PostId }));
 }
Ejemplo n.º 8
0
        public void FetchManyNonRootTrackingEnabledLast()
        {
            var config      = new CustomConfig();
            var selectQuery =
                new SelectQuery <PostTag>(new Mock <ISelectQueryExecutor>().Object).FetchMany(p => p.Post.Comments).ThenFetch(c => c.User) as
                SelectQuery <PostTag>;
            var writer  = new SelectWriter(new SqlServer2012Dialect(), config);
            var result  = writer.GenerateSql(selectQuery);
            var mapper  = new SingleCollectionMapperGenerator(config);
            var funcFac = mapper.GenerateCollectionMapper <PostTag>(result.FetchTree).Item1;

            // setup the scenario
            var tag1 = new PostTag {
                PostTagId = 1
            };
            var tag2 = new PostTag {
                PostTagId = 2
            };
            var tag3 = new PostTag {
                PostTagId = 3
            };
            var post1 = new Post {
                PostId = 1, Title = "Foo"
            };
            var anotherPost1 = new Post {
                PostId = 1, Title = "Foo"
            };
            var post2 = new Post {
                PostId = 2, Title = "Foo"
            };
            var post3 = new Post {
                PostId = 3, Title = "Foo"
            };
            var post4 = new Post {
                PostId = 4, Title = "Foo"
            };
            var comment1 = new Comment {
                CommentId = 1
            };
            var comment2 = new Comment {
                CommentId = 2
            };
            var comment3 = new Comment {
                CommentId = 3
            };
            var comment4 = new Comment {
                CommentId = 4
            };
            var comment5 = new Comment {
                CommentId = 5
            };
            var comment6 = new Comment {
                CommentId = 6
            };
            var user1 = new User {
                UserId = 1
            };
            var user2 = new User {
                UserId = 2
            };
            var user3 = new User {
                UserId = 3
            };
            var user4 = new User {
                UserId = 4
            };
            var user5 = new User {
                UserId = 5
            };

            PostTag         currentRoot = null;
            IList <PostTag> results     = new List <PostTag>();
            var             func        = (Func <object[], PostTag>)funcFac.DynamicInvoke(currentRoot, results);

            func(new object[] { tag1, post1, comment1, user1 });
            func(new object[] { tag1, post1, comment2, user1 });
            func(new object[] { tag1, post1, comment3, user2 });
            func(new object[] { tag2, anotherPost1, comment1, user1 });
            func(new object[] { tag2, anotherPost1, comment2, user1 });
            func(new object[] { tag2, anotherPost1, comment3, user2 });
            func(new object[] { tag3, post2, comment4, user3 });
            func(new object[] { tag3, post2, comment5, user4 });
            func(new object[] { tag3, post2, comment6, user5 });

            Assert.False(((ITrackedEntity)results[0]).GetDirtyProperties().Any());
            Assert.False(((ITrackedEntity)results[0].Post).GetDirtyProperties().Any());
            Assert.False(((ITrackedEntity)results[0].Post.Comments[0]).GetDirtyProperties().Any());
            Assert.False(((ITrackedEntity)results[0].Post.Comments[0].User).GetDirtyProperties().Any());
        }
Ejemplo n.º 9
0
        public void NestedMultipleOneToManyFetchingWorksTrackingEnabled()
        {
            // setup the factory
            var config      = new CustomConfig();
            var selectQuery =
                new SelectQuery <Blog>(new Mock <ISelectQueryExecutor>().Object).FetchMany(b => b.Posts)
                .ThenFetchMany(p => p.Tags)
                .ThenFetch(t => t.ElTag)
                .FetchMany(b => b.Posts)
                .ThenFetchMany(p => p.DeletedTags)
                .ThenFetch(t => t.ElTag)
                .FetchMany(p => p.Posts)
                .ThenFetch(p => p.Author) as SelectQuery <Blog>;
            var writer  = new SelectWriter(new SqlServer2012Dialect(), config);
            var result  = writer.GenerateSql(selectQuery);
            var mapper  = new MultiCollectionMapperGenerator(config);
            var funcFac = mapper.GenerateMultiCollectionMapper <Blog>(result.FetchTree).Item1;

            // setup the scenario
            var blog1 = new Blog {
                BlogId = 1
            };
            var blog2 = new Blog {
                BlogId = 2
            };
            var post1 = new Post {
                PostId = 1
            };
            var post2 = new Post {
                PostId = 2
            };
            var post3 = new Post {
                PostId = 3
            };
            var posttag1 = new PostTag {
                PostTagId = 1
            };
            var posttag2 = new PostTag {
                PostTagId = 2
            };
            var posttag3 = new PostTag {
                PostTagId = 3
            };
            var tag1 = new Tag {
                TagId = 1
            };
            var tag2 = new Tag {
                TagId = 2
            };
            var tag3 = new Tag {
                TagId = 3
            };
            var tag4 = new Tag {
                TagId = 4
            };
            var delPostTag1 = new PostTag {
                PostTagId = 3
            };
            var delPostTag2 = new PostTag {
                PostTagId = 4
            };
            var delPostTag3 = new PostTag {
                PostTagId = 5
            };
            var author1 = new User {
                UserId = 1
            };
            var author2 = new User {
                UserId = 2
            };

            // act
            Blog         currentRoot  = null;
            IList <Blog> results      = new List <Blog>();
            var          dict0        = new Dictionary <int, Post>();
            var          hashsetPair0 = new HashSet <Tuple <int, int> >();
            var          dict1        = new Dictionary <int, PostTag>();
            var          hashsetPair1 = new HashSet <Tuple <int, int> >();
            var          dict2        = new Dictionary <int, PostTag>();
            var          hashsetPair2 = new HashSet <Tuple <int, int> >();

            var func =
                (Func <object[], Blog>)funcFac.DynamicInvoke(currentRoot, results, dict0, hashsetPair0, dict1, hashsetPair1, dict2, hashsetPair2);

            func(new object[] { blog1, post1, author1, null, null, posttag1, tag1 });
            func(new object[] { blog1, post1, author1, null, null, posttag2, tag2 });
            func(new object[] { blog1, post2, author2, delPostTag1, tag3, null, null });
            func(new object[] { blog1, post2, author2, delPostTag2, tag4, null, null });
            func(new object[] { blog2, post3, author1, delPostTag1, tag3, posttag1, tag1 });
            func(new object[] { blog2, post3, author1, delPostTag2, tag4, posttag1, tag1 });
            func(new object[] { blog2, post3, author1, delPostTag3, tag4, posttag1, tag1 });
            func(new object[] { blog2, post3, author1, delPostTag1, tag3, posttag2, tag2 });
            func(new object[] { blog2, post3, author1, delPostTag2, tag4, posttag2, tag2 });
            func(new object[] { blog2, post3, author1, delPostTag3, tag4, posttag2, tag2 });
            func(new object[] { blog2, post3, author1, delPostTag1, tag3, posttag3, tag3 });
            func(new object[] { blog2, post3, author1, delPostTag2, tag4, posttag3, tag3 });
            func(new object[] { blog2, post3, author1, delPostTag3, tag4, posttag3, tag3 });

            Assert.True(((ITrackedEntity)results[0]).IsTrackingEnabled());
            Assert.True(((ITrackedEntity)results[0].Posts[0]).IsTrackingEnabled());
            Assert.True(((ITrackedEntity)results[0].Posts[0].Author).IsTrackingEnabled());
            Assert.True(((ITrackedEntity)results[0].Posts[0].Tags[0]).IsTrackingEnabled());
            Assert.True(((ITrackedEntity)results[0].Posts[0].Tags[0].ElTag).IsTrackingEnabled());
        }
Ejemplo n.º 10
0
 public void AddPostTags(PostTag postTag)
 {
     _context.PostTags.Add(postTag);
 }
Ejemplo n.º 11
0
        public void FetchManyNonRootWorks()
        {
            var config      = new CustomConfig();
            var selectQuery =
                new SelectQuery <PostTag>(new Mock <ISelectQueryExecutor>().Object).FetchMany(p => p.Post.Comments).ThenFetch(c => c.User) as
                SelectQuery <PostTag>;
            var writer  = new SelectWriter(new SqlServer2012Dialect(), config);
            var result  = writer.GenerateSql(selectQuery);
            var mapper  = new SingleCollectionMapperGenerator(config);
            var funcFac = mapper.GenerateCollectionMapper <PostTag>(result.FetchTree).Item1;

            // setup the scenario
            var tag1 = new PostTag {
                PostTagId = 1
            };
            var tag2 = new PostTag {
                PostTagId = 2
            };
            var tag3 = new PostTag {
                PostTagId = 3
            };
            var post1 = new Post {
                PostId = 1, Title = "Foo"
            };
            var anotherPost1 = new Post {
                PostId = 1, Title = "Foo"
            };
            var post2 = new Post {
                PostId = 2, Title = "Foo"
            };
            var post3 = new Post {
                PostId = 3, Title = "Foo"
            };
            var post4 = new Post {
                PostId = 4, Title = "Foo"
            };
            var comment1 = new Comment {
                CommentId = 1
            };
            var comment2 = new Comment {
                CommentId = 2
            };
            var comment3 = new Comment {
                CommentId = 3
            };
            var comment4 = new Comment {
                CommentId = 4
            };
            var comment5 = new Comment {
                CommentId = 5
            };
            var comment6 = new Comment {
                CommentId = 6
            };
            var user1 = new User {
                UserId = 1
            };
            var user2 = new User {
                UserId = 2
            };
            var user3 = new User {
                UserId = 3
            };
            var user4 = new User {
                UserId = 4
            };
            var user5 = new User {
                UserId = 5
            };

            PostTag         currentRoot = null;
            IList <PostTag> results     = new List <PostTag>();
            var             func        = (Func <object[], PostTag>)funcFac.DynamicInvoke(currentRoot, results);

            func(new object[] { tag1, post1, comment1, user1 });
            func(new object[] { tag1, post1, comment2, user1 });
            func(new object[] { tag1, post1, comment3, user2 });
            func(new object[] { tag2, anotherPost1, comment1, user1 });
            func(new object[] { tag2, anotherPost1, comment2, user1 });
            func(new object[] { tag2, anotherPost1, comment3, user2 });
            func(new object[] { tag3, post2, comment4, user3 });
            func(new object[] { tag3, post2, comment5, user4 });
            func(new object[] { tag3, post2, comment6, user5 });

            Assert.Equal(3, results.Count);
            Assert.Equal(3, results.First().Post.Comments.Count);
            Assert.Equal(1, results.First().Post.PostId);
            Assert.Equal(1, results.First().Post.Comments.First().User.UserId);
            Assert.Equal(1, results.First().Post.Comments.ElementAt(1).User.UserId);
            Assert.Equal(2, results.First().Post.Comments.ElementAt(2).User.UserId);
            Assert.Equal(3, results.ElementAt(1).Post.Comments.Count);
            Assert.Equal(1, results.ElementAt(1).Post.PostId);
            Assert.Equal(1, results.ElementAt(1).Post.Comments.First().User.UserId);
            Assert.Equal(1, results.ElementAt(1).Post.Comments.ElementAt(1).User.UserId);
            Assert.Equal(2, results.ElementAt(1).Post.Comments.ElementAt(2).User.UserId);
            Assert.Equal(3, results.ElementAt(2).Post.Comments.Count);
            Assert.Equal(2, results.ElementAt(2).Post.PostId);
            Assert.Equal(4, results.ElementAt(2).Post.Comments.First().CommentId);
            Assert.Equal(5, results.ElementAt(2).Post.Comments.ElementAt(1).CommentId);
            Assert.Equal(6, results.ElementAt(2).Post.Comments.ElementAt(2).CommentId);
        }
Ejemplo n.º 12
0
        public void CreateTagAndPostTag(Post post, PostViewModel postVm)
        {
            var createdDdate = post.DateCreated;

            Mapper.Map(postVm, post);
            if (string.IsNullOrWhiteSpace(postVm.Url))
            {
                post.Url = TextHelper.ToUnsignString(postVm.Name);
            }
            else
            {
                post.Url = postVm.Url.ToLower();
            }
            var query = _postRepository.FirstOrDefault(x => x.Url == post.Url);

            if (query != null)
            {
                post.Url = $"{query.Url}-{post.Code.ToLower()}";
            }
            post.DateCreated = createdDdate;

            if (!string.IsNullOrWhiteSpace(post.Tags))
            {
                string[] tags            = post.Tags.Split(',');
                var      filteredTagList = new List <string>();
                foreach (string t in tags)
                {
                    if (!string.IsNullOrWhiteSpace(t))
                    {
                        var tagId = TextHelper.ToUnsignString(t);

                        var listStr  = new List <string>();
                        var listDuoi = new List <int>();
                        for (int i = 0; i < 15; i++)
                        {
                            var check = i == 0 ? _tagRepository.FirstOrDefault(x => x.Id == tagId) : _tagRepository.FirstOrDefault(x => x.Id == tagId + "-" + (i + 1) + "");
                            if (check != null)
                            {
                                listStr.Add(check.Id);
                            }
                        }
                        if (listStr.Count() == 0)
                        {
                            listStr.Add(tagId);
                        }

                        if (listStr.Count() > 0)
                        {
                            CreateTagId(ref tagId, ref listStr, ref listDuoi);
                        }

                        //if (!_tagRepository.GetAll().Where(x => x.Id == tagId).Any())
                        //{
                        var tagOrder = SetNewTagOrder(out var lstOrder, CommonConstants.PostTag);
                        Tag tag      = new Tag
                        {
                            Id   = tagId,
                            Name = t.Trim(),
                            //Type = Data.Enums.TagType.Product
                            Type            = CommonConstants.PostTag,
                            MetaTitle       = t.Trim(),
                            MetaDescription = t.Trim(),
                            MetaKeywords    = t.Trim(),
                            SortOrder       = tagOrder,
                            DateCreated     = DateTime.Now,
                            DateModified    = DateTime.Now
                        };
                        _tagRepository.Insert(tag);
                        //}

                        PostTag postTag = new PostTag
                        {
                            Id     = Guid.NewGuid(),
                            PostId = post.Id,
                            TagId  = tagId
                        };
                        _postTagRepository.Insert(postTag);
                        filteredTagList.Add(t.Trim());
                    }
                }
                var filteredTagsArray = filteredTagList.ToArray();
                var filteredTagStr    = string.Join(",", filteredTagsArray);
                post.Tags = filteredTagStr;
            }
            _postRepository.Update(post);
        }
Ejemplo n.º 13
0
 public HashSet <string> DeleteValidation(PostTag parameters)
 {
     return(ValidationMessages);
 }
Ejemplo n.º 14
0
        public async Task UpdateAsync(PostTag entity)
        {
            await Uow.RegisterDirtyAsync(entity);

            await Uow.CommitAsync();
        }
        internal static void SeedTags(EntertainmentSystemDbContext context)
        {
            if (context.PostTags.Any())
            {
                return;
            }

            var tag = new PostTag
            {
                Name = "Unknown",
                Posts = context.Posts.ToList()
            };

            context.PostTags.Add(tag);
            context.SaveChanges();
        }
Ejemplo n.º 16
0
        private void InsertData(ISession session)
        {
            var users = new List <User>();

            for (var i = 0; i < 10; i++)
            {
                var user = new User {
                    Username = "******" + i
                };
                users.Add(user);
                session.Insert(user);
            }

            var blogs = new List <Blog>();

            for (var i = 0; i < 10; i++)
            {
                var blog = new Blog {
                    Title = "Blog_" + i
                };
                blogs.Add(blog);
                session.Insert(blog);
            }

            var posts = new List <Post>();

            for (var i = 0; i < 20; i++)
            {
                var userId = i / 2;
                var blogId = i / 2;
                var post   = new Post {
                    Author = users[userId], Blog = blogs[blogId], Title = "Post_" + i
                };
                session.Insert(post);
                posts.Add(post);
            }

            for (var i = 0; i < 30; i++)
            {
                var comment = new Comment {
                    Post = posts[i / 2], User = users[i / 3], Content = "Comment_" + i
                };
                session.Insert(comment);
            }

            var tags = new List <Tag>();

            for (var i = 0; i < 20; i++)
            {
                var tag = new Tag {
                    Content = "Tag_" + i
                };
                tags.Add(tag);
                session.Insert(tag);
            }

            for (var i = 0; i < 30; i++)
            {
                var postTag = new PostTag {
                    Post = posts[i / 2], Tag = tags[i / 2]
                };
                session.Insert(postTag);
            }

            // insert single comment with null User to check that nulls are returned properly
            var nullUserComment = new Comment {
                Post = posts[0], User = null, Content = "Nullable User Content"
            };

            session.Insert(nullUserComment);

            var nullTag = new Tag {
                Content = "Null Post Tag"
            };

            session.Insert(nullTag);
            var nullPostTag = new PostTag {
                Tag = nullTag
            };

            session.Insert(nullPostTag);

            // add user for bulk update
            session.Insert(new User {
                Username = "******", Password = "******"
            });

            // add users for bulk delete
            session.Insert(new User {
                Username = "******", Password = "******"
            }, new User {
                Username = "******", Password = "******"
            });

            // test delete user
            session.Insert(new User {
                Username = "******", Password = "******"
            });

            // test empty collection
            session.Insert(new Blog {
                Title = "EmptyBlog"
            });

            // multiple fetch many stuff
            session.Insert(new Questionnaire {
                Name = "Foo"
            });
            session.Insert(new Question {
                Questionnaire = new Questionnaire {
                    QuestionnaireId = 1
                }, Name = "Bar"
            });
            session.Insert(new Booking());
            session.Insert(new Room {
                Name = "Room 1"
            });
            session.Insert(new RoomSlot {
                Room = new Room {
                    RoomId = 1
                }
            });
            session.Insert(new Bed {
                RoomSlot = new RoomSlot {
                    RoomSlotId = 1
                }, Booking = new Booking {
                    BookingId = 1
                }
            });
            session.Insert(
                new QuestionnaireResponse {
                Booking = new Booking {
                    BookingId = 1
                }, Questionnaire = new Questionnaire {
                    QuestionnaireId = 1
                }
            });
            session.Insert(
                new QuestionResponse {
                Question = new Question {
                    QuestionId = 1
                },
                QuestionnaireResponse = new QuestionnaireResponse {
                    QuestionnaireResponseId = 1
                }
            });
        }
 public void Update(PostTag entity)
 {
     this.tags.Update(entity);
     this.tags.Save();
 }
Ejemplo n.º 18
0
        public IActionResult Create([FromBody] PostTag postTag)
        {
            var newPostTage = _postTagService.Add(postTag);

            return(CreatedAtRoute("GetPost", new { url = newPostTage.PostTagId }, newPostTage));
        }
Ejemplo n.º 19
0
        public async Task <IActionResult> Put(string slug, PostToDb update)
        {
            var post = await _context.Posts.Where(w => w.Slug == slug).FirstOrDefaultAsync();

            if (post == null)
            {
                return(NotFound());
            }


            if (!string.IsNullOrEmpty(update.blogPost.Title))
            {
                var          updateSlug = update.blogPost.Title;
                RegexOptions options    = RegexOptions.None;
                Regex        regex      = new Regex("[ ]{2,}", options);
                updateSlug = regex.Replace(updateSlug, " ");
                updateSlug = updateSlug.Replace(" ", "_").ToLower();

                //post.Slug = updateSlug; -- important rule of EF said that we can't change ID, so I will go in another way

                Post p = new Post // create new post with new slug and title
                {
                    Slug        = updateSlug,
                    Body        = post.Body, //  update.blogPost.Body = maybe is empty so I will update body in next if statement
                    CreatedAt   = post.CreatedAt,
                    Title       = update.blogPost.Title,
                    Description = post.Description
                };
                await _context.Posts.AddAsync(p);


                var postsTags = _context.PostTags.Include(x => x.Tag).Where(w => w.PostId == slug).ToList(); // all tags related to choosen post

                foreach (var postTags in postsTags)                                                          // After I created new post, adding tags with new post slug
                {
                    PostTag pT = new PostTag
                    {
                        PostId = p.Slug,
                        TagId  = postTags.TagId
                    };

                    await _context.PostTags.AddAsync(pT);
                }


                //then delete post and related tags
                var deletePostTags = _context.PostTags.Where(w => w.PostId == slug).ToList(); // find all rows in table PostTags

                _context.PostTags.RemoveRange(deletePostTags);                                // delete all rows with wanted slug
                _context.Posts.Remove(post);                                                  // last but not least, removing post


                post = p; //  post is global variable so I can use it further
                await _context.SaveChangesAsync();
            }
            if (!string.IsNullOrEmpty(update.blogPost.Description))
            {
                post.Description = update.blogPost.Description;
            }
            if (!string.IsNullOrEmpty(update.blogPost.Body))
            {
                post.Body = update.blogPost.Body;
            }

            post.UpdatedAt = DateTime.Now;
            _context.Attach(post);             //new post is already in database
            _context.Update(post);
            await _context.SaveChangesAsync(); // update Description and Body if its changed

            PostOut postOut = new PostOut
            {
                BlogPost = new PostOut.Post
                {
                    Slug                            = post.Slug,
                    Title                           = post.Title,
                    Description                     = post.Description,
                    Body                            = post.Body,
                    CreatedAt                       = post.CreatedAt.ToString("yyyy-MM-ddThh:mm:ss.mmmZ"),
                    UpdatedAt                       = post.UpdatedAt != null?post.UpdatedAt.Value.ToString("yyyy-MM-ddThh:mm:ss.mmmZ") : "n/a",
                                               Tags = await _context.PostTags.Where(w => w.PostId == post.Slug).Select(x => x.Tag.Name).ToListAsync()
                }
            };

            return(Ok(postOut));
        }
Ejemplo n.º 20
0
 public IActionResult DeletePostTag([FromBody] PostTag postTag)
 {
     _postTagService.Delete(postTag);
     return(new NoContentResult());
 }
Ejemplo n.º 21
0
 public ActionResult AddTagToPost(PostViewModel model)
 {
     var post = _blogRepository.GetPostById(model.ID);
     var postTags = _blogRepository.GetPostTags(post);
     List<string> pTagIds = new List<string>();
     foreach (var pTag in postTags)
     {
         pTagIds.Add(pTag.Id);
     }
     var newTags = model.Tags.Where(x => x.Checked == true).ToList();
     List<string> nTagIds = new List<string>();
     foreach (var pTag in newTags)
     {
         nTagIds.Add(pTag.Id);
     }
     if (!pTagIds.SequenceEqual(nTagIds))
     {
         foreach (var pTag in postTags)
         {
             _blogRepository.RemovePostTags(model.ID, pTag.Id);
         }
         foreach (var tag in model.Tags)
         {
             PostTag postTag = new PostTag();
             //if (tag.Checked == true)
             //{
                 postTag.PostId = model.ID;
                 postTag.TagId = tag.Id;
                 postTag.Checked = true;
                 _blogRepository.AddPostTags(postTag);
             //}
         }
         _blogRepository.Save();
     }
     return RedirectToAction("EditPost", new { slug = post.UrlSeo });
 }
Ejemplo n.º 22
0
Archivo: wpPost.cs Proyecto: wdq/Blog
        public static bool ImportPost(wpPost post)
        {
            Console.WriteLine("Importing post: " + post.Title);
            BlogDataDataContext database = new BlogDataDataContext();
            string slug         = post.Link.Substring(post.Link.IndexOf("http://theprime.co/") + "http://theprime.co/".Length + 2).TrimEnd('/');
            Post   databasePost = database.Posts.FirstOrDefault(x => x.Slug == slug);

            if (databasePost == null)
            {
                Post newPost = new Post();
                newPost.Id        = System.Guid.NewGuid();
                newPost.Title     = post.Title;
                newPost.Body      = post.Content;
                newPost.Author    = post.Creator;
                newPost.Timestamp = post.PostDate;
                if (post.CommentStatus.ToLower() == "enabled")
                {
                    newPost.CommentsEnabled = true;
                }
                else
                {
                    newPost.CommentsEnabled = false;
                }

                newPost.Status     = post.Status;
                newPost.Visibility = "Public";
                newPost.Slug       = slug;

                database.Posts.InsertOnSubmit(newPost);
                database.SubmitChanges();

                foreach (var category in post.Categories)
                {
                    PostCategoryMap map = new PostCategoryMap();
                    map.Id = System.Guid.NewGuid();

                    PostCategory databaseCategory = database.PostCategories.FirstOrDefault(x => x.Slug == category.Slug);
                    if (databaseCategory == null)
                    {
                        PostCategory newCategory = new PostCategory();
                        newCategory.Id   = System.Guid.NewGuid();
                        newCategory.Slug = category.Slug;
                        newCategory.Name = category.Name;
                        database.PostCategories.InsertOnSubmit(newCategory);
                        map.CategoryId = newCategory.Id;

                        database.SubmitChanges();
                    }
                    else
                    {
                        map.CategoryId = databaseCategory.Id;
                    }

                    map.PostId = newPost.Id;
                    database.PostCategoryMaps.InsertOnSubmit(map);
                    database.SubmitChanges();
                }

                foreach (var tag in post.Tags)
                {
                    PostTagMap map = new PostTagMap();
                    map.Id = System.Guid.NewGuid();

                    PostTag databaseTag = database.PostTags.FirstOrDefault(x => x.Slug == tag.Slug);
                    if (databaseTag == null)
                    {
                        PostTag newTag = new PostTag();
                        newTag.Id   = System.Guid.NewGuid();
                        newTag.Slug = tag.Slug;
                        newTag.Name = tag.Name;
                        database.PostTags.InsertOnSubmit(newTag);
                        map.TagId = newTag.Id;

                        database.SubmitChanges();
                    }
                    else
                    {
                        map.TagId = databaseTag.Id;
                    }

                    map.PostId = newPost.Id;
                    database.PostTagMaps.InsertOnSubmit(map);
                    database.SubmitChanges();
                }

                foreach (var comment in post.Comments)
                {
                    PostCommentMap map = new PostCommentMap();
                    map.Id = System.Guid.NewGuid();

                    PostComment databaseComment = database.PostComments.FirstOrDefault(x => x.Id == comment.Id);
                    if (databaseComment == null)
                    {
                        PostComment newComment = new PostComment();
                        newComment.Id = comment.Id;
                        if (comment.Approved.ToLower() == "true" || comment.Approved.ToLower() == "yes" ||
                            comment.Approved.ToLower() == "1")
                        {
                            newComment.Approved = true;
                        }
                        else
                        {
                            newComment.Approved = false;
                        }
                        newComment.Author      = comment.Author;
                        newComment.AuthorEmail = comment.AuthorEmail;
                        newComment.AuthorIp    = comment.AuthorIp;
                        newComment.AuthorUrl   = comment.AuthorUrl;
                        newComment.Content     = comment.Content;
                        newComment.Parent      = comment.Parent;
                        newComment.Timestamp   = comment.Date;
                        newComment.Type        = comment.Type;
                        database.PostComments.InsertOnSubmit(newComment);
                        map.CommentId = newComment.Id;

                        database.SubmitChanges();
                    }
                    else
                    {
                        map.CommentId = databaseComment.Id;
                    }

                    map.PostId = newPost.Id;
                    database.PostCommentMaps.InsertOnSubmit(map);
                    database.SubmitChanges();
                }
            }

            return(true);
        }
Ejemplo n.º 23
0
        public ActionResult Dodaj()//tagi, walidacja
        {
            PostTag nowy_post = new PostTag();

            return(View(nowy_post));
        }
Ejemplo n.º 24
0
        public async Task <IActionResult> CreatePost([FromForm] PostForCreationDto postForCreationDto)
        {
            var userId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value);

            var userFromRepo = await _repo.GetUser(userId);

            var postToCreate = new Post();

            postToCreate.Title       = postForCreationDto.Title;
            postToCreate.Description = postForCreationDto.Description;
            postToCreate.Category    = postForCreationDto.Category;
            postToCreate.Links       = postForCreationDto.Links;
            postToCreate.Created     = postForCreationDto.Created;
            postToCreate.Updated     = postForCreationDto.Updated;
            // var postToCreate = _mapper.Map<Post>(postForCreationDto);

            userFromRepo.Posts.Add(postToCreate);
            // _repo.Add<Post>(postToCreate);
            await _repo.SaveAll();

            var postFromRepo = await _repo.GetPost(postToCreate.Id);

            var tags = postForCreationDto.Tags.Split(",");

            for (int i = 0; i < tags.Length; i++)
            {
                var tag = await _repo.GetTag(tags[i]);

                if (tag == null)
                {
                    tag = new Tag {
                        Value = tags[i]
                    };

                    _repo.Add(tag);
                    await _repo.SaveAll();

                    // tag = await _repo.GetTag(tags[i]);
                }

                var postTag = new PostTag {
                    PostId = postFromRepo.Id,
                    TagId  = tag.Id
                };

                postFromRepo.Tags.Add(postTag);
            }

            var files = new IFormFile[] {
                postForCreationDto.Image1,
                postForCreationDto.Image2,
                postForCreationDto.Image3,
                postForCreationDto.Image4,
                postForCreationDto.Image5
            };

            for (int i = 0; i < files.Length; i++)
            {
                var file = files[i];
                if (file == null || file.Length <= 0)
                {
                    continue;
                }
                var uploadResult = new ImageUploadResult();

                using (var stream = file.OpenReadStream())
                {
                    var uploadParams = new ImageUploadParams()
                    {
                        File           = new FileDescription(file.Name, stream),
                        Transformation = new Transformation().Width(500).Height(500).Crop("fill").Gravity("face")
                    };

                    uploadResult = _cloudinary.Upload(uploadParams);
                }

                var postImage = new PostImage();
                postImage.DateAdded = DateTime.Now;
                postImage.Url       = uploadResult.Uri.ToString();
                postImage.PublicId  = uploadResult.PublicId;

                // _repo.Add<PostImage>(postImageToCreate);
                if (i == postForCreationDto.MainImage)
                {
                    postImage.IsMain = true;
                }
                postFromRepo.PostImages.Add(postImage);
            }


            // if(userId != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
            //     return Unauthorized();

            // var userFromRepo = await _repo.GetUser(userId);

            // var file = postForCreationDto.Image1;

            // var uploadResult = new ImageUploadResult();

            // if(file.Length > 0){
            //     using (var stream = file.OpenReadStream())
            //     {
            //         var uploadParams = new ImageUploadParams()
            //         {
            //             File = new FileDescription(file.Name, stream),
            //             Transformation = new Transformation().Width(500).Height(500).Crop("fill").Gravity("face")
            //         };

            //         uploadResult = _cloudinary.Upload(uploadParams);
            //     }
            // }

            // postForCreationDto.Url = uploadResult.Uri.ToString();
            // postForCreationDto.PublicId = uploadResult.PublicId;

            // var postImage = _mapper.Map<PostImage>(postImageForCreationDto);

            // if (!userFromRepo.Photos.Any(u=>u.IsMain))
            //     photo.IsMain = true;
            // postImage.PostId = 0;

            // userFromRepo.Photos.Add(photo);
            // _repo.Add<PostImage>(postImage);

            if (await _repo.SaveAll())
            {
                var postToReturn = _mapper.Map <PostForDetailsDto>(postToCreate);
                return(CreatedAtRoute("GetPost", new { controller = "Posts", id = postToCreate.Id }, postToReturn));
            }

            return(BadRequest("Failed to create post."));
        }
 public PostTag Add(PostTag postTag)
 {
     _postTagDal.Add(postTag);
     return(postTag);
 }
Ejemplo n.º 26
0
        public async Task <IActionResult> UpdatePost(int id, [FromForm] PostForUpdateDto postForUpdateDto)
        {
            var userId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value);

            var user = await _repo.GetUser(userId);

            if (!user.Posts.Any(p => p.Id == id))
            {
                return(Unauthorized());
            }

            var postFromRepo = await _repo.GetPost(id);

            // var postToCreate = new Post();

            postFromRepo.Title       = postForUpdateDto.Title;
            postFromRepo.Description = postForUpdateDto.Description;
            postFromRepo.Category    = postForUpdateDto.Category;
            // postFromRepo.Tags = postForUpdateDto.Tags;
            postFromRepo.Links   = postForUpdateDto.Links;
            postFromRepo.Updated = postForUpdateDto.Updated;

            var newTags = postForUpdateDto.Tags.Split(",").ToList();

            foreach (var oldTag in postFromRepo.Tags)
            {
                var index = newTags.IndexOf(oldTag.Tag.Value);
                if (index == -1)
                {
                    _repo.Delete(oldTag);
                }
                else
                {
                    newTags.RemoveAt(index);
                }
            }

            foreach (var newTag in newTags)
            {
                var tag = await _repo.GetTag(newTag);

                if (tag == null)
                {
                    tag = new Tag {
                        Value = newTag
                    };

                    _repo.Add(tag);
                    await _repo.SaveAll();
                }

                var postTag = new PostTag {
                    PostId = postFromRepo.Id,
                    TagId  = tag.Id
                };

                postFromRepo.Tags.Add(postTag);
            }

            var postOldMainImage = await _repo.GetPostMainImage(id);

            if (postOldMainImage != null && postOldMainImage.Id != -postForUpdateDto.MainImage)
            {
                postOldMainImage.IsMain = false;

                if (postForUpdateDto.MainImage < 0)
                {
                    var postImageFromRepo = await _repo.GetPostImage(-postForUpdateDto.MainImage);

                    postImageFromRepo.IsMain = true;
                }
            }

            if (postForUpdateDto.DeletedImages != null)
            {
                var deletedImageIds = postForUpdateDto.DeletedImages.Split(",");

                for (int i = 0; i < deletedImageIds.Length; i++)
                {
                    int postImageId = Int32.Parse(deletedImageIds[i]);

                    if (!postFromRepo.PostImages.Any(p => p.Id == postImageId))
                    {
                        return(BadRequest("Failed to update post."));
                    }

                    var postImageFromRepo = await _repo.GetPostImage(postImageId);

                    if (postImageFromRepo.PublicId != null)
                    {
                        var deleteParams = new DeletionParams(postImageFromRepo.PublicId);

                        var result = _cloudinary.Destroy(deleteParams);

                        if (result.Result == "ok")
                        {
                            _repo.Delete(postImageFromRepo);
                        }
                    }
                    else
                    {
                        _repo.Delete(postImageFromRepo);
                    }
                }
            }

            var files = new IFormFile[] {
                postForUpdateDto.AddedImage1,
                postForUpdateDto.AddedImage2,
                postForUpdateDto.AddedImage3,
                postForUpdateDto.AddedImage4
            };

            for (int i = 0; i < files.Length; i++)
            {
                var file = files[i];
                if (file == null || file.Length <= 0)
                {
                    continue;
                }
                var uploadResult = new ImageUploadResult();

                using (var stream = file.OpenReadStream())
                {
                    var uploadParams = new ImageUploadParams()
                    {
                        File           = new FileDescription(file.Name, stream),
                        Transformation = new Transformation().Width(500).Height(500).Crop("fill").Gravity("face")
                    };

                    uploadResult = _cloudinary.Upload(uploadParams);
                }

                var postImage = new PostImage();
                postImage.DateAdded = DateTime.Now;
                postImage.Url       = uploadResult.Uri.ToString();
                postImage.PublicId  = uploadResult.PublicId;

                // _repo.Add<PostImage>(postImageToCreate);
                if (i == postForUpdateDto.MainImage)
                {
                    postImage.IsMain = true;
                }
                postFromRepo.PostImages.Add(postImage);
            }

            // await _repo.SaveAll();
            // if(userId != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
            //     return Unauthorized();

            // var userFromRepo = await _repo.GetUser(userId);

            // var file = postForCreationDto.Image1;

            // var uploadResult = new ImageUploadResult();

            // if(file.Length > 0){
            //     using (var stream = file.OpenReadStream())
            //     {
            //         var uploadParams = new ImageUploadParams()
            //         {
            //             File = new FileDescription(file.Name, stream),
            //             Transformation = new Transformation().Width(500).Height(500).Crop("fill").Gravity("face")
            //         };

            //         uploadResult = _cloudinary.Upload(uploadParams);
            //     }
            // }

            // postForCreationDto.Url = uploadResult.Uri.ToString();
            // postForCreationDto.PublicId = uploadResult.PublicId;

            // var postImage = _mapper.Map<PostImage>(postImageForCreationDto);

            // if (!userFromRepo.Photos.Any(u=>u.IsMain))
            //     photo.IsMain = true;
            // postImage.PostId = 0;

            // userFromRepo.Photos.Add(photo);
            // _repo.Add<PostImage>(postImage);

            if (await _repo.SaveAll())
            {
                var postToReturn = _mapper.Map <PostForDetailsDto>(postFromRepo);
                return(CreatedAtRoute("GetPost", new { controller = "Posts", id = postFromRepo.Id }, postToReturn));
            }

            return(BadRequest("Failed to create post."));
        }
 public PostTag Update(PostTag postTag)
 {
     _postTagDal.Update(postTag);
     return(postTag);
 }
Ejemplo n.º 28
0
 public void AddPostTag(PostTag postTag)
 {
     _context.Add(postTag);
     _context.SaveChanges();
 }
        /// <summary>
        /// Saves the given post model
        /// </summary>
        /// <param name="model">The post model</param>
        /// <param name="isDraft">If the model should be saved as a draft</param>
        private async Task Save <T>(T model, bool isDraft) where T : Models.PostBase
        {
            var type         = App.PostTypes.GetById(model.TypeId);
            var lastModified = DateTime.MinValue;

            if (type != null)
            {
                // Ensure category
                var category = await _db.Categories
                               .FirstOrDefaultAsync(c => c.Id == model.Category.Id)
                               .ConfigureAwait(false);

                if (category == null)
                {
                    if (!string.IsNullOrWhiteSpace(model.Category.Slug))
                    {
                        category = await _db.Categories
                                   .FirstOrDefaultAsync(c => c.BlogId == model.BlogId && c.Slug == model.Category.Slug)
                                   .ConfigureAwait(false);
                    }
                    if (category == null && !string.IsNullOrWhiteSpace(model.Category.Title))
                    {
                        category = await _db.Categories
                                   .FirstOrDefaultAsync(c => c.BlogId == model.BlogId && c.Title == model.Category.Title)
                                   .ConfigureAwait(false);
                    }

                    if (category == null)
                    {
                        category = new Category
                        {
                            Id           = model.Category.Id != Guid.Empty ? model.Category.Id : Guid.NewGuid(),
                            BlogId       = model.BlogId,
                            Title        = model.Category.Title,
                            Slug         = Utils.GenerateSlug(model.Category.Title),
                            Created      = DateTime.Now,
                            LastModified = DateTime.Now
                        };
                        await _db.Categories.AddAsync(category).ConfigureAwait(false);
                    }
                    model.Category.Id    = category.Id;
                    model.Category.Title = category.Title;
                    model.Category.Slug  = category.Slug;
                }

                // Ensure tags
                foreach (var t in model.Tags)
                {
                    var tag = await _db.Tags
                              .FirstOrDefaultAsync(tg => tg.Id == t.Id)
                              .ConfigureAwait(false);

                    if (tag == null)
                    {
                        if (!string.IsNullOrWhiteSpace(t.Slug))
                        {
                            tag = await _db.Tags
                                  .FirstOrDefaultAsync(tg => tg.BlogId == model.BlogId && tg.Slug == t.Slug)
                                  .ConfigureAwait(false);
                        }
                        if (tag == null && !string.IsNullOrWhiteSpace(t.Title))
                        {
                            tag = await _db.Tags
                                  .FirstOrDefaultAsync(tg => tg.BlogId == model.BlogId && tg.Title == t.Title)
                                  .ConfigureAwait(false);
                        }

                        if (tag == null)
                        {
                            tag = new Tag
                            {
                                Id           = t.Id != Guid.Empty ? t.Id : Guid.NewGuid(),
                                BlogId       = model.BlogId,
                                Title        = t.Title,
                                Slug         = Utils.GenerateSlug(t.Title),
                                Created      = DateTime.Now,
                                LastModified = DateTime.Now
                            };
                            await _db.Tags.AddAsync(tag).ConfigureAwait(false);
                        }
                        t.Id = tag.Id;
                    }
                    t.Title = tag.Title;
                    t.Slug  = tag.Slug;
                }

                // Ensure that we have a slug
                if (string.IsNullOrWhiteSpace(model.Slug))
                {
                    model.Slug = Utils.GenerateSlug(model.Title, false);
                }
                else
                {
                    model.Slug = Utils.GenerateSlug(model.Slug, false);
                }

                IQueryable <Post> postQuery = _db.Posts;
                if (isDraft)
                {
                    postQuery = postQuery.AsNoTracking();
                }

                var post = await postQuery
                           .Include(p => p.Permissions)
                           .Include(p => p.Blocks).ThenInclude(b => b.Block).ThenInclude(b => b.Fields)
                           .Include(p => p.Fields)
                           .Include(p => p.Tags).ThenInclude(t => t.Tag)
                           .FirstOrDefaultAsync(p => p.Id == model.Id)
                           .ConfigureAwait(false);

                // If not, create a new post
                if (post == null)
                {
                    post = new Post
                    {
                        Id           = model.Id != Guid.Empty ? model.Id : Guid.NewGuid(),
                        Created      = DateTime.Now,
                        LastModified = DateTime.Now
                    };
                    model.Id = post.Id;

                    if (!isDraft)
                    {
                        await _db.Posts.AddAsync(post).ConfigureAwait(false);
                    }
                }
                else
                {
                    post.LastModified = DateTime.Now;
                }
                post = _contentService.Transform <T>(model, type, post);

                // Set if comments should be enabled
                post.EnableComments         = model.EnableComments;
                post.CloseCommentsAfterDays = model.CloseCommentsAfterDays;

                // Update permissions
                post.Permissions.Clear();
                foreach (var permission in model.Permissions)
                {
                    post.Permissions.Add(new PostPermission
                    {
                        PostId     = post.Id,
                        Permission = permission
                    });
                }

                // Make sure foreign key is set for fields
                if (!isDraft)
                {
                    foreach (var field in post.Fields)
                    {
                        if (field.PostId == Guid.Empty)
                        {
                            field.PostId = post.Id;
                            await _db.PostFields.AddAsync(field).ConfigureAwait(false);
                        }
                    }
                }

                if (isDraft)
                {
                    post.Category = new Category
                    {
                        Id     = model.Category.Id,
                        BlogId = model.BlogId,
                        Title  = model.Category.Title,
                        Slug   = model.Category.Slug
                    };
                }

                // Transform blocks
                var blockModels = model.Blocks;

                if (blockModels != null)
                {
                    var blocks  = _contentService.TransformBlocks(blockModels);
                    var current = blocks.Select(b => b.Id).ToArray();

                    // Delete removed blocks
                    var removed = post.Blocks
                                  .Where(b => !current.Contains(b.BlockId) && !b.Block.IsReusable && b.Block.ParentId == null)
                                  .Select(b => b.Block);
                    var removedItems = post.Blocks
                                       .Where(b => !current.Contains(b.BlockId) && b.Block.ParentId != null && removed.Select(p => p.Id).ToList().Contains(b.Block.ParentId.Value))
                                       .Select(b => b.Block);

                    if (!isDraft)
                    {
                        _db.Blocks.RemoveRange(removed);
                        _db.Blocks.RemoveRange(removedItems);
                    }

                    // Delete the old page blocks
                    post.Blocks.Clear();

                    // Now map the new block
                    for (var n = 0; n < blocks.Count; n++)
                    {
                        IQueryable <Block> blockQuery = _db.Blocks;
                        if (isDraft)
                        {
                            blockQuery = blockQuery.AsNoTracking();
                        }

                        var block = blockQuery
                                    .Include(b => b.Fields)
                                    .FirstOrDefault(b => b.Id == blocks[n].Id);

                        if (block == null)
                        {
                            block = new Block
                            {
                                Id      = blocks[n].Id != Guid.Empty ? blocks[n].Id : Guid.NewGuid(),
                                Created = DateTime.Now
                            };
                            if (!isDraft)
                            {
                                await _db.Blocks.AddAsync(block).ConfigureAwait(false);
                            }
                        }
                        block.ParentId     = blocks[n].ParentId;
                        block.CLRType      = blocks[n].CLRType;
                        block.IsReusable   = blocks[n].IsReusable;
                        block.Title        = blocks[n].Title;
                        block.LastModified = DateTime.Now;

                        var currentFields = blocks[n].Fields.Select(f => f.FieldId).Distinct();
                        var removedFields = block.Fields.Where(f => !currentFields.Contains(f.FieldId));

                        if (!isDraft)
                        {
                            _db.BlockFields.RemoveRange(removedFields);
                        }

                        foreach (var newField in blocks[n].Fields)
                        {
                            var field = block.Fields.FirstOrDefault(f => f.FieldId == newField.FieldId);
                            if (field == null)
                            {
                                field = new BlockField
                                {
                                    Id      = newField.Id != Guid.Empty ? newField.Id : Guid.NewGuid(),
                                    BlockId = block.Id,
                                    FieldId = newField.FieldId
                                };
                                if (!isDraft)
                                {
                                    await _db.BlockFields.AddAsync(field).ConfigureAwait(false);
                                }
                                block.Fields.Add(field);
                            }
                            field.SortOrder = newField.SortOrder;
                            field.CLRType   = newField.CLRType;
                            field.Value     = newField.Value;
                        }

                        // Create the post block
                        var postBlock = new PostBlock
                        {
                            Id        = Guid.NewGuid(),
                            BlockId   = block.Id,
                            Block     = block,
                            PostId    = post.Id,
                            SortOrder = n
                        };
                        if (!isDraft)
                        {
                            await _db.PostBlocks.AddAsync(postBlock).ConfigureAwait(false);
                        }
                        post.Blocks.Add(postBlock);
                    }
                }

                // Remove tags
                var removedTags = new List <PostTag>();
                foreach (var tag in post.Tags)
                {
                    if (!model.Tags.Any(t => t.Id == tag.TagId))
                    {
                        removedTags.Add(tag);
                    }
                }
                foreach (var removed in removedTags)
                {
                    post.Tags.Remove(removed);
                }

                // Add tags
                foreach (var tag in model.Tags)
                {
                    if (!post.Tags.Any(t => t.PostId == post.Id && t.TagId == tag.Id))
                    {
                        var postTag = new PostTag
                        {
                            PostId = post.Id,
                            TagId  = tag.Id
                        };

                        if (isDraft)
                        {
                            postTag.Tag = new Tag
                            {
                                Id     = tag.Id,
                                BlogId = post.BlogId,
                                Title  = tag.Title,
                                Slug   = tag.Slug
                            };
                        }
                        post.Tags.Add(postTag);
                    }
                }

                if (!isDraft)
                {
                    await _db.SaveChangesAsync().ConfigureAwait(false);
                    await DeleteUnusedCategories(model.BlogId).ConfigureAwait(false);
                    await DeleteUnusedTags(model.BlogId).ConfigureAwait(false);
                }
                else
                {
                    var draft = await _db.PostRevisions
                                .FirstOrDefaultAsync(r => r.PostId == post.Id && r.Created > lastModified)
                                .ConfigureAwait(false);

                    if (draft == null)
                    {
                        draft = new PostRevision
                        {
                            Id     = Guid.NewGuid(),
                            PostId = post.Id
                        };
                        await _db.PostRevisions
                        .AddAsync(draft)
                        .ConfigureAwait(false);
                    }

                    draft.Data    = JsonConvert.SerializeObject(post);
                    draft.Created = post.LastModified;

                    await _db.SaveChangesAsync().ConfigureAwait(false);
                }
            }
        }
Ejemplo n.º 30
0
 /// <summary>
 /// Delete a PostTag by compound key
 /// </summary>
 /// <param name="postTag">Compound Key</param>
 public void Delete(PostTag postTag)
 {
     _postTagRepository.RemoveByCompound(Mapper.Map <PostTag, PostTagEntity>(postTag));
 }
Ejemplo n.º 31
0
        public async Task <IActionResult> Create(PostViewModel model) //создание поста
        {
            if (ModelState.IsValid)
            {
                Post post = new Post(); //создаём модель
                post.PostName   = model.Name;
                post.CategoryId = model.Cat;
                post.content    = model.Text;              //кладём данные из входной модели
                post.PostDescr  = TruncBody(post.content); //обрезаем текст лоя создания првеью

                ClaimsPrincipal currentUser   = this.User;
                var             currentUserID = currentUser.FindFirst(ClaimTypes.NameIdentifier).Value;
                post.UserId   = currentUserID;                            //автором ставим текущего пользователя
                post.PostDate = DateTime.Now;                             //дата тоже текущая
                string postslug = Slugifier.Transliterate(post.PostName); //создаётся slug-ссылка
                postslug      = Slugifier.Slugify(postslug);
                post.PostSlug = postslug;
                String[] rawtags = model.Tags.Split(','); //входная строка тегов разбивается запятыми на отдельные теги
                _context.Add(post);                       //пост добавлне, работаем с тегами
                await _context.SaveChangesAsync();

                var addedpost = await _context.Posts.SingleOrDefaultAsync(m => m.PostSlug == postslug); //находим id нового поста

                addedpost.PostSlug += "-" + addedpost.PostID.ToString();                                //уникальность слагов
                _context.Update(addedpost);
                int redir = addedpost.PostID;
                foreach (string separtag in rawtags) //добавление, если необходимо, тегов
                {
                    string tagname;
                    if (separtag.Substring(0, 1) == " ") //Обрезает первый пробел
                    {
                        tagname = separtag.Substring(1, separtag.Length - 1);
                    }
                    else
                    {
                        tagname = separtag;  //сохраняем имя тега
                    }
                    string tagtoadd = Slugifier.Transliterate(tagname);
                    tagtoadd = Slugifier.Slugify(tagtoadd); //подготовка слага
                    var tag = await _context.Tags.SingleOrDefaultAsync(m => m.TagSlug == tagtoadd);

                    int tagid;
                    if (tag == null) //добавление тега
                    {
                        Tag added = new Tag();
                        added.TagName = tagname;
                        added.TagSlug = tagtoadd;
                        _context.Tags.Add(added);
                        await _context.SaveChangesAsync();

                        var addedtag = await _context.Tags.SingleOrDefaultAsync(m => m.TagSlug == tagtoadd);

                        tagid = addedtag.TagId;
                    }
                    else
                    {
                        tagid = tag.TagId;
                    }
                    PostTag link = new PostTag(); //добавление связи "тег-пост"
                    link.PostId = addedpost.PostID;
                    link.TagId  = tagid;
                    _context.PostTags.Add(link);
                    await _context.SaveChangesAsync();

                    //addedpost.PostTags.Add(link);
                    //_context.Posts.Update(addedpost);
                    //await _context.SaveChangesAsync();
                }
                var Cat = _context.Categories.SingleOrDefault(p => p.CategoryId == model.Cat);
                Cat.postcount++; //увеличиваем количество постов в категории, к которой принадлежит данный пост
                _context.Update(Cat);
                await _context.SaveChangesAsync();

                return(Redirect("/Comments/viewpost/" + redir));
            }
            ViewData["CategoryId"] = new SelectList(_context.Categories, "CategoryId", "CatName", model.Cat);

            return(View(model));
        }
Ejemplo n.º 32
0
        public async Task <IActionResult> EditPost(int id, PostDTO data)
        {
            var postUser = await model.Users.FindAsync(data.AuthorId);

            if (postUser == null)
            {
                return(NotFound("le postUser n'existe pas"));
            }

            var currentUser = await model.Users.SingleOrDefaultAsync(u => u.Pseudo == User.Identity.Name);

            if (currentUser == null)
            {
                return(NotFound("L'utilisateur connecté n'existe pas"));
            }

            var post = await model.Posts.FindAsync(id);

            if (post == null)
            {
                return(NotFound("Le post n'existe pas"));
            }

            if (currentUser.Id == postUser.Id || currentUser.Role == Role.Admin)
            {
                post.Title = data.Title;
                post.Body  = data.Body;

                if (data.Tags != null)
                {
                    while (model.PostTags.Where(pt => pt.PostId == id).Count() != 0)
                    {
                        var postTag = await model.PostTags.FirstOrDefaultAsync(p => p.PostId == id);

                        model.PostTags.Remove(postTag);
                        await model.SaveChangesAsyncWithValidation();
                    }

                    foreach (var t in data.Tags)
                    {
                        var tag = await model.Tags.SingleOrDefaultAsync(p => p.Name == t);

                        var newPostTag = new PostTag()
                        {
                            PostId = id,
                            TagId  = tag.Id
                        };

                        post.PostTags.Add(newPostTag);
                        model.Entry(post).State = EntityState.Modified;
                    }
                }

                await model.SaveChangesAsyncWithValidation();
            }
            else
            {
                return(NotFound("You are not the owner of this post !"));
            }

            return(NoContent());
        }
 public void Create(PostTag entity)
 {
     this.tags.Create(entity);
     this.tags.Save();
 }
Ejemplo n.º 34
0
            public async Task <CreatePostCommandVm> Handle(CreatePostCommand request, CancellationToken cancellationToken)
            {
                Guid.TryParse(request.DocumentGuid, out Guid DocumentGuid);

                if (DocumentGuid == Guid.Empty)
                {
                    return new CreatePostCommandVm
                           {
                               Message = "تصویر آپلود شده شناسایی نشد",
                               State   = (int)CreatePostState.DocumentGuidProblem
                           }
                }
                ;

                var currentUser = await _context.User
                                  .Where(x => x.UserGuid == Guid.Parse(_currentUser.NameIdentifier))
                                  .SingleOrDefaultAsync(cancellationToken);

                if (currentUser == null)
                {
                    return(new CreatePostCommandVm()
                    {
                        Message = "کاربر مورد نظر یافت نشد",
                        State = (int)CreatePostState.UserNotFound
                    });
                }

                var document = await _context.Document
                               .SingleOrDefaultAsync(x => x.DocumentGuid == DocumentGuid, cancellationToken);

                if (document == null)
                {
                    return(new CreatePostCommandVm()
                    {
                        Message = "تصویر مورد نظر یافت نشد",
                        State = (int)CreatePostState.DocumentNotFound
                    });
                }

                var post = new Post
                {
                    UserId      = currentUser.UserId,
                    Title       = request.Title,
                    Abstract    = request.Abstract,
                    Description = request.Description,
                    IsShow      = request.IsShow,
                    IsInSlider  = request.IsInSlider,
                    IsSuggested = request.IsSuggested,
                    DocumentId  = document.DocumentId
                };

                if (request.Categories != null)
                {
                    foreach (var categoryGuid in request.Categories)
                    {
                        var category = await _context.Category
                                       .Where(x => x.CategoryGuid == categoryGuid)
                                       .SingleOrDefaultAsync(cancellationToken);

                        if (category == null)
                        {
                            continue;
                        }

                        var postCategory = new PostCategory()
                        {
                            Post       = post,
                            CategoryId = category.CategoryId
                        };

                        _context.PostCategory.Add(postCategory);
                    }
                }

                if (request.Tags != null)
                {
                    PostTag postTag;

                    foreach (var tag in request.Tags)
                    {
                        Guid.TryParse(tag, out Guid guid);

                        if (guid == Guid.Empty)
                        {
                            var newTag = new Tag()
                            {
                                Name = tag
                            };

                            _context.Tag.Add(newTag);

                            postTag = new PostTag()
                            {
                                Post = post
                            };

                            postTag.Tag = newTag;
                        }
                        else
                        {
                            var t = await _context.Tag
                                    .Where(x => x.TagGuid == Guid.Parse(tag))
                                    .SingleOrDefaultAsync(cancellationToken);

                            if (t == null)
                            {
                                continue;
                            }

                            postTag = new PostTag()
                            {
                                Post  = post,
                                TagId = t.TagId
                            };
                        }

                        _context.PostTag.Add(postTag);
                    }
                }

                _context.Post.Add(post);

                await _context.SaveChangesAsync(cancellationToken);

                return(new CreatePostCommandVm()
                {
                    Message = "عملیات موفق آمیز",
                    State = (int)CreatePostState.Success
                });
            }
        }
 public void Delete(PostTag entity)
 {
     this.tags.Delete(entity);
     this.tags.Save();
 }
Ejemplo n.º 36
0
        public async Task AddAsync(PostTag entity)
        {
            await Uow.RegisterNewAsync(entity);

            await Uow.CommitAsync();
        }