public ActionResult EditNew(ArticleViewModel article, HttpPostedFileBase file)
        {
            if (ModelState.IsValid)
            {
                using (new UnitOfWork(_currentContext))
                {
                    var existingArticle = articlesRepository.GetById(article.Id);

                    if (file != null)
                    {
                        //upload file first
                        var ticks = DateTime.Now.Ticks;
                        var fileName = String.Format("slideshow-{0}", ticks) + Path.GetExtension(file.FileName);
                        var absoluteTempPath = Server.MapPath("~/Content/images/uploads/temp/");
                        var absolutePath = Server.MapPath("~/Content/images/uploads/news/");
                        var fullVirtualPath = "~/Content/images/uploads/news/" + fileName;
                        //create a temp file first, then compress it
                        FileUploader.UploadFile(file, fileName,
                                                absoluteTempPath);
                        var encoder = new ImageEncoder();
                        encoder.Compress(absoluteTempPath + fileName, absolutePath + fileName, 620, 465);
                        //after compressing deleting original file
                        FileUploader.DeleteFile(absoluteTempPath + fileName);

                        var articleImage = new File()
                        {
                            FileName = fullVirtualPath,
                            FilePurposeId = (int)FilePurposes.Slideshow
                        };

                        //delete the old file
                        FileUploader.DeleteFile(Server.MapPath(existingArticle.File.FileName));
                        filesRepository.Remove(existingArticle.FileId);

                        existingArticle.File = articleImage;
                    }

                    existingArticle.Text = article.Text;
                    existingArticle.Title = article.Title;
                    existingArticle.PostedAt = DateTime.Now;
                    existingArticle.Account = accountRepository.GetByUsername(CurrentUserName);
                }
                TempData[Const.ActionResultInfo] = "Новость успешно отредактирована";

                return RedirectToAction("News");
            }

            TempData[Const.ActionErrorInfo] = "Невозможно отредактировать новость, проверьте правильность заполнения полей";

            return View();
        }
        public ActionResult EditSlide(SlideshowViewModel slideshow, HttpPostedFileBase file)
        {
            if(ModelState.IsValid)
            {
                using(new UnitOfWork(_currentContext))
                {
                    var exising = slideshowRepository.GetById(slideshow.Id.Value);

                    if (file != null)
                    {
                        //upload file first
                        var ticks = DateTime.Now.Ticks;
                        var fileName = String.Format("slideshow-{0}", ticks) + Path.GetExtension(file.FileName);
                        var absoluteTempPath = Server.MapPath("~/Content/images/uploads/temp/");
                        var absolutePath = Server.MapPath("~/Content/images/uploads/slideshow/");
                        var fullVirtualPath = "~/Content/images/uploads/slideshow/" + fileName;
                        //create a temp file first, then compress it
                        FileUploader.UploadFile(file, fileName,
                                                absoluteTempPath);

                        var encoder = new ImageEncoder();
                        encoder.Compress(absoluteTempPath + fileName, absolutePath + fileName, 620, 465);
                        //after compressing deleting original file
                        FileUploader.DeleteFile(absoluteTempPath + fileName);

                        var slideshowImage = new File()
                            {
                                FileName = fullVirtualPath,
                                FilePurposeId = (int) FilePurposes.Slideshow
                            };

                        //delete the old file
                        FileUploader.DeleteFile(Server.MapPath(exising.File.FileName));
                        filesRepository.Remove(exising.FileId);

                        exising.File = slideshowImage;
                    }

                    exising.Title = slideshow.Title;
                    exising.Text = slideshow.Text;
                    exising.Date = DateTime.Now;
                }

                TempData[Const.ActionResultInfo] = "Слайд успешно отредактирован";
                return RedirectToAction("Slideshow");
            }

            TempData[Const.ActionErrorInfo] = "Ошибка редактирования слайда. Проверьте правильность введенных данных";
            return View(slideshow);
        }
        public ActionResult EditLecturer(LecturerViewModel lecturer, HttpPostedFileBase file)
        {
            if (ModelState.IsValid)
            {
                using (new UnitOfWork(_currentContext))
                {
                    var existing = lecturersRepository.GetById(lecturer.Id);

                    File photo = null;
                    //save photo
                    if (file != null)
                    {
                        //delete original file first (if exists)
                        if (existing.Photo != null)
                        {
                            FileUploader.DeleteFile(Server.MapPath("~/" + existing.Photo.FileName));
                            filesRepository.Remove(existing.Photo.Id);
                        }

                        var ticks = DateTime.Now.Ticks;
                        var fileName = String.Format("profile-{0}", ticks) + Path.GetExtension(file.FileName);
                        var absoluteTempPath = Server.MapPath("~/Content/images/uploads/temp/");
                        var absolutePath = Server.MapPath("~/Content/images/uploads/lecturers/");
                        var fullVirtualPath = "~/Content/images/uploads/lecturers/" + fileName;
                        //create a temp file first, then compress it
                        FileUploader.UploadFile(file, fileName,
                                                              absoluteTempPath);

                        var encoder = new ImageEncoder();
                        encoder.Compress(absoluteTempPath + fileName, absolutePath + fileName, 220, 220);
                        //after compressing deleting original file
                        FileUploader.DeleteFile(absoluteTempPath + fileName);

                        photo = new File()
                        {
                            FileName = fullVirtualPath,
                            FilePurposeId = (int)FilePurposes.Profile
                        };
                    }
                    //additional info
                    DateTime? birthDate;
                    try
                    {
                        birthDate = DateTime.Parse(lecturer.BirthDate);
                    }
                    catch
                    {
                        birthDate = null;
                    }

                    existing.Name = lecturer.Name;
                    existing.Description = lecturer.Description;
                    existing.Account = accountRepository.GetByUsername(CurrentUserName);
                    existing.CommitteeId = lecturer.CommitteeId;
                    existing.Profile.BirthDate = birthDate;
                    existing.Profile.Degree = lecturer.Degree;
                    existing.Profile.Email = lecturer.Email;
                    existing.Profile.Post = lecturer.Post;
                    existing.Profile.Room = lecturer.Room;
                    existing.Profile.LecturerCategoryId = lecturer.LecturerCategoryId;
                    existing.Profile.RecordOfService = lecturer.RecordOfService;
                    existing.Photo = photo;
                }
                TempData[Const.ActionResultInfo] = "Профиль преподавателя успешно изменен";
                return RedirectToAction("Lecturers");
            }

            TempData[Const.ActionErrorInfo] = "Невозможно отредактировать профиль преподавателя. Проверьте правильность введенных данных.";
            return View();
        }
        public ActionResult EditImage(GalleryItemViewModel gvm, HttpPostedFileBase file)
        {
            if(ModelState.IsValid)
            {
                using (new UnitOfWork(_currentContext))
                {
                    var galleryItem = galleryRepository.GetById(gvm.Id.Value);
                    //upload file first
                    if (file != null)
                    {
                        var ticks = DateTime.Now.Ticks;
                        var fileName = String.Format("gallery-{0}", ticks) + Path.GetExtension(file.FileName);
                        var absoluteTempPath = Server.MapPath("~/Content/images/uploads/temp/");
                        var absolutePath = Server.MapPath("~/Content/images/uploads/gallery/");
                        var fullVirtualPath = "~/Content/images/uploads/gallery/" + fileName;
                        var absoluteThumbnailPath = Server.MapPath("~/Content/images/uploads/gallery/thumbnails/");
                        var fullVirtualThumbnailPath = "~/Content/images/uploads/gallery/thumbnails/" + fileName;
                        //create a temp file first, then compress it
                        FileUploader.UploadFile(file, fileName,
                                                absoluteTempPath);

                        var encoder = new ImageEncoder();
                        encoder.Compress(absoluteTempPath + fileName, absolutePath + fileName, 800, 600);
                        encoder.Compress(absoluteTempPath + fileName, absoluteThumbnailPath + fileName, 290, 217);
                        //after compressing deleting original file
                        FileUploader.DeleteFile(absoluteTempPath + fileName);

                        var fullImage = new File()
                            {
                                FileName = fullVirtualPath,
                                FilePurposeId = (int) FilePurposes.Gallery
                            };

                        var thumbnailImage = new File()
                            {
                                FileName = fullVirtualThumbnailPath,
                                FilePurposeId = (int) FilePurposes.Gallery
                            };
                        //delete old files
                        FileUploader.DeleteFile(Server.MapPath(galleryItem.File.FileName));
                        FileUploader.DeleteFile(Server.MapPath(galleryItem.Thumbnail.FileName));
                        filesRepository.Remove(galleryItem.FileId);
                        filesRepository.Remove(galleryItem.ThumbnailFileId);

                        galleryItem.File = fullImage;
                        galleryItem.Thumbnail = thumbnailImage;
                    }

                    galleryItem.Title = gvm.Title;
                    galleryItem.Text = gvm.Text;
                    galleryItem.PostedAt = DateTime.Now;
                    galleryItem.Account = accountRepository.GetByUsername(CurrentUserName);
                }
                TempData[Const.ActionResultInfo] = "Изображение отредактировано";
                return RedirectToAction("Album", new { id = gvm.AlbumId});
            }

            TempData[Const.ActionErrorInfo] = "Ошибка редактирования изображения. Проверьте корректность введенных данных";
            return View(gvm);
        }
        public ActionResult AddSlide(SlideshowViewModel slideshow, HttpPostedFileBase file)
        {
            if(ModelState.IsValid)
            {
                using (new UnitOfWork(_currentContext))
                {
                    //upload file first
                    var ticks = DateTime.Now.Ticks;
                    var fileName = String.Format("slideshow-{0}", ticks) + Path.GetExtension(file.FileName);
                    var absoluteTempPath = Server.MapPath("~/Content/images/uploads/temp/");
                    var absolutePath = Server.MapPath("~/Content/images/uploads/slideshow/");
                    var fullVirtualPath = "~/Content/images/uploads/slideshow/" + fileName;
                    //create a temp file first, then compress it
                    FileUploader.UploadFile(file, fileName,
                                            absoluteTempPath);

                    var encoder = new ImageEncoder();
                    encoder.Compress(absoluteTempPath + fileName, absolutePath + fileName, 620, 465);
                    //after compressing deleting original file
                    FileUploader.DeleteFile(absoluteTempPath + fileName);

                    var slideshowImage = new File()
                        {
                            FileName = fullVirtualPath,
                            FilePurposeId = (int) FilePurposes.Slideshow
                        };

                    var slideshowItem = new SlideshowItem
                        {
                            Title = slideshow.Title,
                            Text = slideshow.Text,
                            Date = DateTime.Now,
                            File = slideshowImage
                        };

                    slideshowRepository.Add(slideshowItem);
                }
                TempData[Const.ActionResultInfo] = "Слайд успешно добавлен";
                return RedirectToAction("Slideshow");
            }

            TempData[Const.ActionErrorInfo] = "Невозможно добавить слайд. Проверьте правильность введенных данных";
            return View(slideshow);
        }
        public ActionResult AddNew(AddArticleViewModel avm, HttpPostedFileBase file)
        {
            if (ModelState.IsValid)
            {
                using (new UnitOfWork(_currentContext))
                {
                    //upload file first
                    var ticks = DateTime.Now.Ticks;
                    var fileName = String.Format("article-{0}", ticks) + Path.GetExtension(file.FileName);
                    var absoluteTempPath = Server.MapPath("~/Content/images/uploads/temp/");
                    var absolutePath = Server.MapPath("~/Content/images/uploads/news/");
                    var fullVirtualPath = "~/Content/images/uploads/news/" + fileName;
                    //create a temp file first, then compress it
                    FileUploader.UploadFile(file, fileName,
                                            absoluteTempPath);

                    var encoder = new ImageEncoder();
                    encoder.Compress(absoluteTempPath + fileName, absolutePath + fileName, 620, 465);
                    //after compressing deleting original file
                    FileUploader.DeleteFile(absoluteTempPath + fileName);

                    var articleImage = new File()
                    {
                        FileName = fullVirtualPath,
                        FilePurposeId = (int)FilePurposes.Slideshow
                    };

                    var article = new Article()
                                      {
                                          Account = accountRepository.GetByUsername(CurrentUserName),
                                          Title = avm.Title,
                                          Text = avm.Text,
                                          PostedAt = DateTime.Now,
                                          File = articleImage
                                      };

                    articlesRepository.Add(article);
                }

                TempData[Const.ActionResultInfo] = "Статья успешно добавлена";
                return RedirectToAction("News");
            }

            TempData[Const.ActionErrorInfo] = "Невозможно добавить статью, проверьте корректность введенных данных";
            return View();
        }
        public ActionResult AddLecturer(LecturerViewModel lecturer, HttpPostedFileBase file)
        {
            if (ModelState.IsValid)
            {
                using (new UnitOfWork(_currentContext))
                {
                    File photo = null;

                    //save photo
                    if (file != null)
                    {
                        var ticks = DateTime.Now.Ticks;
                        var fileName = String.Format("profile-{0}", ticks) + Path.GetExtension(file.FileName);
                        var absoluteTempPath = Server.MapPath("~/Content/images/uploads/temp/");
                        var absolutePath = Server.MapPath("~/Content/images/uploads/lecturers/");
                        var fullVirtualPath = "~/Content/images/uploads/lecturers/" + fileName;
                        //create a temp file first, then compress it
                        FileUploader.UploadFile(file, fileName,
                                                              absoluteTempPath);

                        var encoder = new ImageEncoder();
                        encoder.Compress(absoluteTempPath + fileName, absolutePath + fileName, 220, 220);
                        //after compressing deleting original file
                        FileUploader.DeleteFile(absoluteTempPath + fileName);

                        photo = new File()
                        {
                            FileName = fullVirtualPath,
                            FilePurposeId = (int)FilePurposes.Profile
                        };
                    }
                    //additional info
                    DateTime? birthDate;
                    try
                    {
                        birthDate = DateTime.Parse(lecturer.BirthDate);
                    }
                    catch
                    {
                        birthDate = null;
                    }

                    var lecturerEntry = new Lecturer
                                            {
                                                Name = lecturer.Name,
                                                Description = lecturer.Description,
                                                Account = accountRepository.GetByUsername(CurrentUserName),
                                                CommitteeId = lecturer.CommitteeId,
                                                Profile = new LecturerProfile()
                                                              {
                                                                  BirthDate = birthDate,
                                                                  Degree = lecturer.Degree,
                                                                  Email = lecturer.Email,
                                                                  Post = lecturer.Post,
                                                                  Room = lecturer.Room,
                                                                  LecturerCategoryId = lecturer.LecturerCategoryId,
                                                                  RecordOfService = lecturer.RecordOfService
                                                              },
                                                Photo = photo
                                            };

                    lecturersRepository.Add(lecturerEntry);
                }
                TempData[Const.ActionResultInfo] = "Профиль преподавателя создан успешно";

                return RedirectToAction("Lecturers");
            }

            TempData[Const.ActionErrorInfo] = "Невозможно сохранить профиль преподавателя. Проверьте правильность введенных данных.";
            return View();
        }