Пример #1
0
        //редактировать запись
        public async Task<NoteModelForUser> EditNoteAsync(NoteModelForUser noteModel)
        {
            if (noteModel == null)
            {
                return null;
            }
            //берём запись из БД
            Note noteEdit = await Database.Notes.GetAsync(noteModel.Id);
            //обновляем поля
            noteEdit.Title = noteModel.Title;
            noteEdit.Description = noteModel.Description;
            if (noteModel.ImagePath != null)
            {
                noteEdit.ImagePath = noteModel.ImagePath;
            }           
            noteEdit.Status = "Ожидает модерацию";
            noteEdit.Date = DateTime.Now;

            if (noteModel.Files != null)
            {
                //удаляем ненужные старые файлы
                foreach (var file in noteEdit.Files.ToList())
                {
                    //если файл был удалён, удаляем его из бд
                    if (noteModel.Files.FirstOrDefault(f => f.Id == file.Id) == null)
                    {
                        Database.Files.Delete(file);
                    }
                }
                //добавляем прикрепляемые файлы
                foreach (var file in noteModel.Files)
                {
                    //если файла не было у записи, добавляем его
                    if (noteEdit.Files.FirstOrDefault(f => f.Id == file.Id) == null)
                    {
                        File fileAdd = new File
                        {
                            FileName = file.Name,
                            Path = file.Path,
                            Size = file.Size
                        };
                        noteEdit.Files.Add(fileAdd);
                    }                    
                }
            }

            //удаляем удалённые тэги
            foreach (var tag in noteEdit.Tags.ToList())
            {
                //если тэг был удалён, удаляем его
                if (noteModel.Tags.FirstOrDefault(t => t.Id == tag.Id) == null)
                {
                    noteEdit.Tags.Remove(tag);
                    //Database.Tags.Delete(tag);
                }
            }

            //добовляем тэги
            foreach (var tag in noteModel.Tags.ToList())
            {
                //если тэг отсутствовал в БД, добовляем его
                if (tag.Id == 0)
                {
                    noteEdit.Tags.Add(new Tag { Id = tag.Id, Name = tag.Name });
                }
                //если тэг присутствовал, берём существующий
                else
                {
                    //если тэга не было у записи, добовляем его
                    if (noteEdit.Tags.FirstOrDefault(t => t.Id == tag.Id) == null)
                    {
                        noteEdit.Tags.Add(await Database.Tags.GetAsync(tag.Id));
                    }                    
                }
            }

            //редактируем характеристики
            foreach (var sp in noteModel.NoteSpecifications)
            {
                //если характеристика отсутствовала в БД, добовляем её
                if (sp.SpecificationId == 0)
                {
                    noteEdit.NoteSpecifications.Add(new NoteSpecification
                    {
                        Specification = new Specification
                        {
                            Id = sp.SpecificationId,
                            Title = sp.Title,
                            CategoryId = noteModel.Category.Id
                        },
                        SpecificationId = sp.SpecificationId,
                        Value = sp.Value,
                    });
                }
                else
                {
                    //редактируем характеристику
                    NoteSpecification specif = (await Database.NoteSpecifications.FindAsync(n => n.SpecificationId == sp.SpecificationId)).FirstOrDefault();
                    specif.Value = sp.Value;
                }
            }

            //обвновляем запись в БД
            Database.Notes.Update(noteEdit);
            //сохраняем результат
            int result = await Database.SaveAsync();

            return result > 0 ? noteModel : null;
        }
Пример #2
0
        public async Task<ActionResult> EditNote(NoteModelForUser noteModel, HttpPostedFileBase imagePath, HttpPostedFileBase[] file)
        {
            if (ModelState.IsValid)
            {
                //если загружено новое изображение
                if (noteModel.ImagePath != null)
                {
                    //удаляем старое изображение
                    string path = await UserNoteService.GetImagePathAsync(noteModel.Id);
                    System.IO.File.Delete(Server.MapPath(path));
                    //сохраняем новое изображение
                    string imageName = Path.GetFileName(imagePath.FileName);
                    int startIndex = imageName.LastIndexOf('.');
                    imageName = imageName.Insert(startIndex
                        , DateTime.Now.ToString("dd/MM/yyyy H:mm:ss").Replace(':', '_').Replace('/', '.').Replace(' ', '_'));
                    imagePath.SaveAs(Server.MapPath("~/Images/Note/" + imageName));
                    //записываем путь к файлу в объект
                    noteModel.ImagePath = "~/Images/Note/" + imageName;
                }
                //получаем файлы, которые были у записи
                var files = await UserNoteService.GetFilesAsync(noteModel.Id);
                //проверям файлы, которые были у записи
                foreach (var fl in files)
	            {
                    //если файл был удалён, удаляем его с сервера
                    if (noteModel.Files.FirstOrDefault(f => f.Id == fl.Id) == null)
                    {
                        System.IO.File.Delete(Server.MapPath(fl.Path));
                    }
	            }
                //если загружены доп файлы,
                //загуржаем их на сервер и добовляем к записи
                if (file != null && file[0] != null)
                {
                    if (noteModel.Files == null)
                    {
                        noteModel.Files = new List<FileDTO>();
                    }
                    foreach (var item in file)
                    {
                        string fileName = Path.GetFileName(item.FileName);
                        item.SaveAs(Server.MapPath("~/Files/TempFiles/" + fileName));
                        noteModel.Files.Add(new FileDTO { Path = "~/Files/TempFiles/" + fileName, Size = item.ContentLength, Name = fileName });
                    }
                }
                var result = await UserNoteService.EditNoteAsync(noteModel);
                if (result != null)
                {
                    ViewBag.Title = "Запись отредактирована";
                    ViewBag.Result = "Запись успешно отредактирована и ожидает проверки администратором.";
                    return View("Success");
                }
                else
                {
                    return HttpNotFound();
                }                    
            }
            return HttpNotFound();
        }