public object DownloadFile(string Id)
        {
            if (Id == null)
            {
                return(RedirectToAction("NotFound", "Error"));
            }

            var             context = new DatabaseContext();
            List <Document> ObjDocs = context.Documents.ToList();

            // get document data by propertyId
            var doc = (from FC in ObjDocs
                       where FC.Id.Equals(Id)
                       select new { FC.Id, FC.PropertyId, FC.FileName, FC.DocBlob }).ToList().First();

            if (doc == null)
            {
                return(RedirectToAction("NotFound", "Error"));
            }

            string testDoc = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ConfigurationManager.AppSettings.Get("testDocPath"));

            MemoryStream ms = new MemoryStream();

            using (var streamreader = new MemoryStream(doc.DocBlob))
            {
                using (ZipFile zip = ZipFile.Read(streamreader))
                {
                    if (zip.Count == 0)
                    {
                        return(RedirectToAction("NotFound", "Error"));
                    }
                    // Unzip/decrypt file using given password
                    ZipEntry entry;
                    entry = zip[testDoc];
                    entry.ExtractWithPassword(ms, UploadController.GenerateSecretKey(doc.Id, doc.PropertyId));
                }
                return(File(ms.GetBuffer(), "application/octet-stream", doc.FileName));
            }
        }
        public ActionResult Edit(Entry entry, int[] selectedCategories, string huKeywords, string enKeywords, string toDeleteFiles)
        {
            var toEditEntry = db.Entries.Where(e => e.Id == entry.Id).First();
            KeywordsProcedure(toEditEntry, huKeywords, enKeywords);

            var attachments = TempData["Attachments"] as List<string>;
            var featuredImage = TempData["FeaturedImage"] as List<string>;

            if (ModelState.IsValid)
            {
                toEditEntry.enContent = entry.enContent;
                toEditEntry.enIntroduction = entry.enIntroduction;
                toEditEntry.enTitle = entry.enTitle;
                toEditEntry.huContent = entry.huContent;
                toEditEntry.huIntroduction = entry.huIntroduction;
                toEditEntry.huTitle = entry.huTitle;
                toEditEntry.IsFeatured = entry.IsFeatured;
                toEditEntry.Published = entry.Published;
                toEditEntry.PublishedDate = entry.PublishedDate;
                toEditEntry.UserId = int.Parse((string)Session["UserId"]);
                toEditEntry.Categories.Clear();
                foreach (var id in selectedCategories.ToList())
                {
                    Category category = db.Categories.Single(e => e.Id == id);
                    toEditEntry.Categories.Add(category);
                }
                //Delete to delete
                List<string> fileNames = new List<string>();
                foreach (var idString in toDeleteFiles.Split(',').Where(e => e != ""))
                {
                    int id = int.Parse(idString);
                    var file = db.Files.Where(e => e.Id == id).First();
                    fileNames.Add(file.Name);
                    toEditEntry.Files.Remove(file);
                    db.Files.Remove(file);
                }
                var ctrl = new UploadController();
                ctrl.PathValue = "/Public/Files/";
                ctrl.Remove(fileNames.ToArray());
                //Add new ones
                if (attachments != null)
                {
                    foreach (var att in attachments)
                    {
                        WebApplication.File newAtt = new WebApplication.File { Entry = toEditEntry, Location = Guid.NewGuid().ToString(), Name = Path.GetFileName(att) };
                        db.Files.Add(newAtt);
                    }
                }
                if (featuredImage != null && featuredImage.Count > 0)
                {
                    string[] fileName = { Path.GetFileName(entry.FeaturedImage) };
                    ctrl.PathValue = "/Public/Images/";
                    ctrl.Remove(fileName);
                    toEditEntry.FeaturedImage = featuredImage[0];
                }
                else if (string.IsNullOrEmpty(entry.FeaturedImage))
                {
                    toEditEntry.FeaturedImage = "";
                }
                try
                {
                    db.SaveChanges();
                }
                catch (DbEntityValidationException e)
                {
                }

                TempData["Attachments"] = null;
                TempData["FeaturedImage"] = null;

                return RedirectToAction("Index");
            }

            ViewBag.Categories = db.Categories.Select(e => e);
            ViewBag.SelectedCategories = selectedCategories.ToList();
            ViewBag.enKeywords = db.Keywords.Where(e => e.Type == true);
            ViewBag.huKeywords = db.Keywords.Where(e => e.Type == false);
            return View(entry);
        }
        public ActionResult DeleteConfirmed(int id)
        {
            Entry entry = db.Entries.Single(e => e.Id == id);
            var fileNames = entry.Files.Select(e => e.Name).ToArray();
            var ctrl = new UploadController();
            ctrl.PathValue = "/Public/Files/";
            ctrl.Remove(fileNames.ToArray());

            foreach (var file in entry.Files.ToList())
            {
                db.Files.Remove(file);
            }
            if (!string.IsNullOrEmpty(entry.FeaturedImage))
            {
                string[] filenames = { Path.GetFileName(entry.FeaturedImage) };
                ctrl.PathValue = "/Public/Images/";
                ctrl.Remove(fileNames);

            }
            var categories = entry.Categories.ToList();
            foreach (var category in categories)
            {
                category.Entries.Remove(entry);
            }
            var keywords = entry.Keywords.ToList();
            foreach (var keyword in keywords)
            {
                keyword.Entries.Remove(entry);
                if (keyword.Entries.Count == 0)
                    db.Keywords.Remove(keyword);
            }
            db.Entries.Remove(entry);
            db.SaveChanges();
            return RedirectToAction("Index");
        }