public ActionResult SaveCourse(Post post, FormCollection postedForm)
        {
            if (NotAllowedHere()) return RedirectAway();

            if (ModelState.IsValid)
            {
                var theOldPost = _postRepo.FindByID(post.ID);
                if (theOldPost == null)
                    theOldPost = post;
                if (theOldPost.Images == null)
                    theOldPost.Images = new List<Image>();
                var oldImages = theOldPost.Images.ToList();
                var listOfImagesPaths = postedForm["image"];
                string[] arrayOfImagesPaths = null;
                if (listOfImagesPaths != null)
                    arrayOfImagesPaths = listOfImagesPaths.Split(',');

                oldImages = theOldPost.Images.ToList();
                if (arrayOfImagesPaths != null && arrayOfImagesPaths.Count() > 0)
                {
                    foreach (var addedimg in _imgRepo.FindAll(c =>
                arrayOfImagesPaths.Any(cat => cat == c.ImagePath.ToString()) &&
                !c.Posts.Any(p => p.ID == theOldPost.ID)).ToList())
                        theOldPost.Images.Add(addedimg);
                }
                foreach (var removedimg in oldImages.Where(c => arrayOfImagesPaths
                == null || !arrayOfImagesPaths.Any(cat2 => cat2 == c.ImagePath.ToString())))
                    theOldPost.Images.Remove(removedimg);

                if (theOldPost.Category == null)
                    theOldPost.Category = new List<Category>();
                var oldCategories = theOldPost.Category.ToList();
                var listOfCategoryIDs = postedForm["name"];
                string[] arrayOfCategoryIDs = null;
                if (listOfCategoryIDs != null)
                    arrayOfCategoryIDs = listOfCategoryIDs.Split(',');

                oldCategories = theOldPost.Category.ToList();
                if (arrayOfCategoryIDs != null && arrayOfCategoryIDs.Count() > 0)
                {
                    foreach (var addedCat in _categoryRepo.FindAll(c =>
                arrayOfCategoryIDs.Any(cat => cat == c.ID.ToString()) &&
                !c.Posts.Any(p => p.ID == theOldPost.ID)).ToList())
                        theOldPost.Category.Add(addedCat);
                }
                foreach (var removedCat in oldCategories.Where(c => arrayOfCategoryIDs
                == null || !arrayOfCategoryIDs.Any(cat2 => cat2 == c.ID.ToString())))
                    theOldPost.Category.Remove(removedCat);

                if (theOldPost.Badges == null)
                    theOldPost.Badges = new List<Image>();
                var oldBadges = theOldPost.Badges.ToList();
                var listOfBadges = postedForm["badge"];
                string[] arrayOfBadges = null;
                if (listOfBadges != null)
                    arrayOfBadges = listOfBadges.Split(',');

                oldBadges = theOldPost.Badges.ToList();
                if (arrayOfBadges != null && arrayOfBadges.Count() > 0)
                {
                    foreach (var addedbadge in _imgRepo.FindAll(c =>
                 arrayOfBadges.Any(cat => cat == c.ImagePath.ToString()) &&
                 !c.Posts.Any(p => p.ID == theOldPost.ID)).ToList())
                        theOldPost.Badges.Add(addedbadge);
                }
                foreach (var removedimg in oldBadges.Where(c => arrayOfBadges
                == null || !arrayOfBadges.Any(cat2 => cat2 == c.ImagePath.ToString())))
                    theOldPost.Badges.Remove(removedimg);

                _postRepo.Save(post);
                // add a message to the viewbag
                TempData["message"] = string.Format("{0} has been saved", post.Title);
                // return the user to the list
                return RedirectToAction("Index");
            }
            else
            {
                AddCourseViewModel vmCategory = new AddCourseViewModel();
                vmCategory.Post = post;
                if (post.Category != null) {
                    vmCategory.Categories = post.Category.ToList();
                }
                ViewData["events"] = new SelectList(_categoryRepo.FindAll().ToList(), "ID", "Name");
                // there is something wrong with the data values
                return View("AddCourse", vmCategory);
            }
        }
        public ActionResult EditCourse(int id = 0)
        {
            if (NotAllowedHere()) return RedirectAway();

            if (id != 0)
            {
                AddCourseViewModel vmCategory = new AddCourseViewModel();
                vmCategory.Post = _postRepo.FindByID(id);
                vmCategory.Categories = vmCategory.Post.Category.ToList();
                ViewData["events"] = new SelectList(_categoryRepo.FindAll().ToList(), "ID", "Name");
                return View("AddCourse", vmCategory);
            }
            else
            {
                AddCourseViewModel vmCategory = new AddCourseViewModel();

                vmCategory.Post = new Post();
                vmCategory.Post.Created = DateTime.Now;
                vmCategory.Post.postType = (int)Post.PostType.Course;
                ViewData["events"] = new SelectList(_categoryRepo.FindAll().ToList(), "ID", "Name");
                return View("AddCourse", vmCategory);
            }
        }
        public ActionResult Index()
        {
            if (NotAllowedHere()) return RedirectAway();

            AddCourseViewModel vm = new AddCourseViewModel();
            vm.Posts = _postRepo.FindAll().Where(p => p.postType == (int)Post.PostType.Course).ToList();
            vm.Categories = _categoryRepo.FindAll().ToList();
            return View(vm);
        }
        public ActionResult SaveCourse(Post post, FormCollection postedForm)
        {
            if (ModelState.IsValid)
            {
                var listOfCategoryIDs = postedForm["name"];

                var arrayOfCategoryIDs = listOfCategoryIDs.Split(',');
                 if (arrayOfCategoryIDs.Count() > 0){
                     post.Category = new List<Category>();
                     foreach (var array in arrayOfCategoryIDs) {
                         int x = Convert.ToInt32(array);
                         var cat = _categoryRepo.FindByID(x);
                         cat.Posts.Add(post);
                         _categoryRepo.Save(cat);
                     }
                 }
                _postRepo.Save(post);
                // add a message to the viewbag
                TempData["message"] = string.Format("{0} has been saved", post.Title);
                // return the user to the list
                return RedirectToAction("Index");
            }
            else
            {
                AddCourseViewModel vmCategory = new AddCourseViewModel();
                vmCategory.Post = post;
                if (post.Category != null) {
                    vmCategory.Categories = post.Category.ToList();
                }
                ViewData["events"] = new SelectList(_categoryRepo.FindAll().ToList(), "ID", "Name");
                // there is something wrong with the data values
                return View("AddCourse", vmCategory);
            }
        }