public async Task <IActionResult> EditCategoryPage(string pageName)
        {
            var model = new CreateCategoryPageViewModel();

            model.Pages = await this.service.GetAllPageNamesAsync();

            if (!string.IsNullOrEmpty(pageName) && await this.service.PageAlreadyExistsAsync(pageName))
            {
                model.PageName = pageName;

                var page = await this.service.GetPageAsync(pageName);

                model.IsDeleted = page.IsDeleted;

                var pageCategory = page.Categories.FirstOrDefault();

                model.PageCategory.AllHref = pageCategory.AllHref;

                model.PageCategory.AllName      = pageCategory.AllName;
                model.PageCategory.CategoryName = pageCategory.CategoryName;
                model.PageCategory.Pictures.Add(pageCategory.Pictures.FirstOrDefault().Url);

                var itemCategories = pageCategory.ItemsCategories;
                var index          = 0;
                foreach (var ic in itemCategories)
                {
                    var items = new List <PageCategoryItemsViewModel>();

                    foreach (var item in ic.Items)
                    {
                        items.Add(new PageCategoryItemsViewModel
                        {
                            Href = item.Href,
                            Text = item.Text
                        });
                    }

                    model.PageCategory.ItemsCategories[index] = new CategoryPageItemsCategoryViewModel
                    {
                        Category = ic.Category,
                        Items    = items
                    };

                    index++;
                }
            }

            return(this.View(model));
        }
        public async Task <IActionResult> EditCategoryPage(CreateCategoryPageViewModel form, List <IFormFile> files)
        {
            Console.WriteLine();
            if (!string.IsNullOrEmpty(form.PageName) && this.ModelState.IsValid)
            {
                bool filesIncluded = false;
                if (files.Count > 0)
                {
                    filesIncluded = true;
                    form.PageCategory.Pictures.Add(await this.cloudinary.UploadPictureAsync(files[0], files[0].FileName + "CategoryPicture"));
                }

                await this.service.EditPageAsync(form, filesIncluded);

                return(this.RedirectToAction("Success", "Blacksmith", new { message = "Successfully Edited Page" }));
            }

            return(this.View(form));
        }
        public async Task <IActionResult> CreateCategoryPage(CreateCategoryPageViewModel form, List <IFormFile> files)
        {
            if (await this.service.PageAlreadyExistsAsync(form.PageName))
            {
                this.ModelState.AddModelError("Page Name", "Page Name already exists");
            }


            if (this.ModelState.IsValid)
            {
                var picture = await this.cloudinary.UploadPictureAsync(files[0], form.PageCategory + "CategoryPicture");

                form.PageCategory.Pictures.Add(picture);

                await this.service.CreateCategoryPageAsync(form);

                return(this.RedirectToAction("Success", "Blacksmith", new { message = $"Category page with name: {form.PageName} has been created!" }));
            }

            return(View(form));
        }
        public async Task EditPageAsync(CreateCategoryPageViewModel form, bool filesIncluded)
        {
            var page = await this.context.Pages.FirstOrDefaultAsync(x => x.PageName == form.PreviousPageName);

            page.PageName         = form.PageName;
            page.IsDeleted        = form.IsDeleted;
            page.ModificationDate = DateTime.UtcNow;
            var pageCategory = page.Categories.FirstOrDefault();

            pageCategory.AllHref          = form.PageCategory.AllHref;
            pageCategory.AllName          = form.PageCategory.AllName;
            pageCategory.ModificationDate = DateTime.UtcNow;
            pageCategory.CategoryName     = form.PageCategory.CategoryName;
            if (filesIncluded)
            {
                pageCategory.Pictures.FirstOrDefault().ModificationDate = DateTime.UtcNow;
                pageCategory.Pictures.FirstOrDefault().Url = form.PageCategory.Pictures[0];
            }
            for (int i = 0; i < pageCategory.ItemsCategories.Count; i++)
            {
                var cat     = pageCategory.ItemsCategories.ToList()[i];
                var formCat = form.PageCategory.ItemsCategories[i];
                cat.Category         = formCat.Category;
                cat.ModificationDate = DateTime.UtcNow;

                for (int z = 0; z < cat.Items.Count; z++)
                {
                    var item = cat.Items.ToList()[z];

                    var formItem = formCat.Items[z];

                    item.Href             = formItem.Href;
                    item.Text             = formItem.Text;
                    item.ModificationDate = DateTime.UtcNow;
                }
            }

            await this.context.SaveChangesAsync();
        }
        public async Task CreateCategoryPageAsync(CreateCategoryPageViewModel form)
        {
            var page = new Data.Models.Page
            {
                PageName = form.PageName
            };

            var pictures = new List <Picture>();

            foreach (var pictureUrl in form.PageCategory.Pictures)
            {
                pictures.Add(new Picture {
                    Url = pictureUrl, Name = "Categories", CreatedOn = DateTime.UtcNow, ModificationDate = DateTime.UtcNow
                });
            }

            var pageCategory = new PageCategory
            {
                CategoryName = form.PageCategory.CategoryName,
                AllHref      = form.PageCategory.AllHref,
                AllName      = form.PageCategory.AllName,
                Pictures     = pictures,
            };

            var itemCategories = new List <ItemsCategory>();

            foreach (var ic in form.PageCategory.ItemsCategories)
            {
                var pageCategoryItems = new List <PageCategoryItems>();
                if (string.IsNullOrEmpty(ic.Category))
                {
                    continue;
                }
                foreach (var item in ic.Items)
                {
                    if (string.IsNullOrEmpty(item.Text) || string.IsNullOrEmpty(item.Href))
                    {
                    }
                    else
                    {
                        pageCategoryItems.Add(new PageCategoryItems
                        {
                            Href = item.Href,
                            Text = item.Text,
                        });
                    }
                }

                itemCategories.Add(new ItemsCategory
                {
                    Category = ic.Category,
                    Items    = pageCategoryItems
                });
            }

            pageCategory.ItemsCategories = itemCategories;
            page.Categories.Add(pageCategory);

            await this.context.Pages.AddAsync(page);

            await this.context.SaveChangesAsync();
        }
        public IActionResult CreateCategoryPage()
        {
            var model = new CreateCategoryPageViewModel();

            return(View(model));
        }
        public async Task TestIfCreateCategoryPageWorksAccordingly()
        {
            var context = PCHUBDbContextInMemoryInitializer.InitializeContext();

            var categoryPagesService = new Areas.Administration.Services.AdminCategoryPagesServices(context);

            var model = new CreateCategoryPageViewModel();

            var items = new List <PageCategoryItemsViewModel>
            {
                new PageCategoryItemsViewModel
                {
                    Href = "Href",
                    Text = "Text",
                },
                new PageCategoryItemsViewModel
                {
                    Href = "HrefTest",
                    Text = "TextTest",
                },
                new PageCategoryItemsViewModel
                {
                    Href = "HrefTestNext",
                    Text = "TextTestNext",
                },
            };

            var itemCategories = new List <CategoryPageItemsCategoryViewModel>
            {
                new CategoryPageItemsCategoryViewModel
                {
                    Category = "Price",
                    Items    = items,
                }
            };

            model.PageCategory = new PageCategoryViewModel
            {
                CategoryName = "Laptops",
                Pictures     = new List <string>
                {
                    "Url1", "Ur2", "Url3",
                },
                AllHref         = "AllHref",
                AllName         = "AllName",
                ItemsCategories = itemCategories,
            };

            model.PageName = "Laptops";

            await categoryPagesService.CreateCategoryPageAsync(model);

            var pageResult = await context.Pages.FirstOrDefaultAsync(x => x.PageName == "Laptops");

            Assert.NotNull(pageResult);

            Assert.Contains(pageResult.Categories, (x) => x.CategoryName == "Laptops");

            var resultItemsCategories = pageResult.Categories.SelectMany(x => x.ItemsCategories);

            Assert.NotEmpty(resultItemsCategories);

            var resultItems = resultItemsCategories.SelectMany(x => x.Items);

            Assert.Contains(resultItems, x => x.Text == "Text" && x.Href == "Href");
        }