/// <summary>
        /// Загружает на сервер документ об образовании и
        /// создаёт соответствующую запись в таблице UserDocuments
        /// </summary>
        /// <param name="userName"></param>
        /// <param name="uploadedFile"></param>
        /// <param name="typeOfEducationDocument">Тип документа об образовании</param>
        /// <returns></returns>
        public async Task <UserDocument> CreateEducationDocumentAsync(string userName,
                                                                      IFormFile uploadedFile,
                                                                      FileDataTypeEnum typeOfEducationDocument)
        {
            var userId    = _userProfileRepository.GetAppUserId(userName);
            var fileModel = await _fileModelRepository.UploadEducationDocumentAsync(uploadedFile, typeOfEducationDocument);

            if (fileModel == null)
            {
                return(null);
            }

            var userDocument = new UserDocument
            {
                AppUserId      = userId,
                FileModelId    = fileModel.Id,
                FileDataTypeId = (int)typeOfEducationDocument
            };

            await _context.AddAsync(userDocument);

            await _context.SaveChangesAsync();

            return(userDocument);
        }
        public async Task <IActionResult> Create([Bind("UchPosobieId,UchPosobieVidId,GodIzdaniya,UchPosobieName,BiblOpisanie,UchPosobieFormaIzdaniyaId,FileModelId")] UchPosobie uchPosobie, IFormFile uploadedFile)
        {
            if (ModelState.IsValid && uploadedFile != null)
            {
                FileDataTypeEnum fileDataTypeEnum = FileDataTypeEnum.UchebnoePosobie;

                string uchPosobieVidName = (await _context.UchPosobieVid.SingleOrDefaultAsync(v => v.UchPosobieVidId == uchPosobie.UchPosobieVidId)).UchPosobieVidName;
                var    fileDataType      = await _context.FileDataTypes.SingleOrDefaultAsync(fdt => fdt.FileDataTypeName == uchPosobieVidName);

                if (fileDataType != null)
                {
                    fileDataTypeEnum = (FileDataTypeEnum)fileDataType.FileDataTypeId;
                }

                FileModel fileModel = await KisVuzDotNetCore2.Models.Files.Files.LoadFile(_context, _appEnvironment, uploadedFile, uchPosobie.UchPosobieName, fileDataTypeEnum);

                uchPosobie.FileModelId = fileModel.Id;
                _context.Add(uchPosobie);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["FileModelId"] = new SelectList(_context.Files, "Id", "Id", uchPosobie.FileModelId);
            ViewData["UchPosobieFormaIzdaniyaId"] = new SelectList(_context.UchPosobieFormaIzdaniya, "UchPosobieFormaIzdaniyaId", "UchPosobieFormaIzdaniyaId", uchPosobie.UchPosobieFormaIzdaniyaId);
            ViewData["UchPosobieVidId"]           = new SelectList(_context.UchPosobieVid, "UchPosobieVidId", "UchPosobieVidId", uchPosobie.UchPosobieVidId);
            return(View(uchPosobie));
        }
        /// <summary>
        /// Проверяет наличие у пользователя документов указанного типа
        /// </summary>
        /// <param name="appUser"></param>
        /// <param name="fileDataType"></param>
        /// <returns></returns>
        public bool IsLoadedUserDocument(AppUser appUser, FileDataTypeEnum fileDataType)
        {
            bool isLoadedFile = appUser.UserDocuments.Any(u =>
                                                          u.FileDataTypeId == (int)fileDataType);

            return(isLoadedFile);
        }
        public async Task <IActionResult> Edit(int id, [Bind("UchPosobieId,UchPosobieVidId,GodIzdaniya,UchPosobieName,BiblOpisanie,UchPosobieFormaIzdaniyaId,FileModelId")] UchPosobie uchPosobie, IFormFile uploadedFile)
        {
            if (id != uchPosobie.UchPosobieId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                FileDataTypeEnum fileDataTypeEnum  = FileDataTypeEnum.UchebnoePosobie;
                string           uchPosobieVidName = (await _context.UchPosobieVid.SingleOrDefaultAsync(v => v.UchPosobieVidId == uchPosobie.UchPosobieVidId)).UchPosobieVidName;
                var fileDataType = await _context.FileDataTypes.SingleOrDefaultAsync(fdt => fdt.FileDataTypeName == uchPosobieVidName);

                if (fileDataType != null)
                {
                    fileDataTypeEnum = (FileDataTypeEnum)fileDataType.FileDataTypeId;
                }

                if (uploadedFile != null)
                {
                    FileModel fileModel = await KisVuzDotNetCore2.Models.Files.Files.LoadFile(_context, _appEnvironment, uploadedFile, uchPosobie.UchPosobieName, fileDataTypeEnum);

                    await _context.SaveChangesAsync();

                    int?fileToRemoveId = uchPosobie.FileModelId;
                    uchPosobie.FileModelId = fileModel.Id;
                    await _context.SaveChangesAsync();

                    KisVuzDotNetCore2.Models.Files.Files.RemoveFile(_context, _appEnvironment, fileToRemoveId);
                }

                try
                {
                    _context.Update(uchPosobie);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!UchPosobieExists(uchPosobie.UchPosobieId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["FileModelId"] = new SelectList(_context.Files, "Id", "Id", uchPosobie.FileModelId);
            ViewData["UchPosobieFormaIzdaniyaId"] = new SelectList(_context.UchPosobieFormaIzdaniya, "UchPosobieFormaIzdaniyaId", "UchPosobieFormaIzdaniyaId", uchPosobie.UchPosobieFormaIzdaniyaId);
            ViewData["UchPosobieVidId"]           = new SelectList(_context.UchPosobieVid, "UchPosobieVidId", "UchPosobieVidId", uchPosobie.UchPosobieVidId);
            return(View(uchPosobie));
        }
        /// <summary>
        /// Проверяет наличие у пользователя наличия документов указанного типа
        /// </summary>
        /// <param name="userName"></param>
        /// <param name="fileDataType"></param>
        /// <returns></returns>
        public bool IsLoadedUserDocument(string userName, FileDataTypeEnum fileDataType)
        {
            var appUser = GetAppUser(userName);

            if (appUser == null)
            {
                throw new Exception($"Пользователь {userName} не найден!");
            }

            bool isLoadedFile = IsLoadedUserDocument(appUser, fileDataType);

            return(isLoadedFile);
        }
Beispiel #6
0
        /// <summary>
        /// Создаёт объект FileModel и загружает его в папку www/files
        /// </summary>
        /// <param name="_context"></param>
        /// <param name="_appEnvironment"></param>
        /// <param name="uploadedFile"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public static async Task <FileModel> LoadFile(AppIdentityDBContext _context, IHostingEnvironment _appEnvironment, IFormFile uploadedFile, string name, FileDataTypeEnum fileDataTypeEnum)
        {
            FileModel fileModel = new FileModel();

            fileModel.ContentType = uploadedFile.ContentType;

            fileModel.Name = name;

            string fileName = /*DateTime.Now.ToString("yyyy-MM-dd-") +*/
                              Guid.NewGuid().ToString() +
                              Path.GetExtension(uploadedFile.FileName);

            // путь к папке files
            string[] paths = { _appEnvironment.WebRootPath, "files", fileName };
            string   path  = Path.Combine(paths);

            // сохраняем файл в папку files в каталоге wwwroot
            using (var fileStream = new FileStream(path, FileMode.Create))
            {
                await uploadedFile.CopyToAsync(fileStream);
            }

            fileModel.FileName = Path.GetFileName(uploadedFile.FileName);
            fileModel.Path     = Path.Combine("files", fileName);;

            if (Path.GetExtension(uploadedFile.FileName) == ".pdf")
            {
                fileModel.ContentType = "application/pdf";
            }

            _context.Files.Add(fileModel);
            await _context.SaveChangesAsync();


            FileToFileType ftf = new FileToFileType
            {
                FileDataTypeId = (int)fileDataTypeEnum,
                FileModelId    = fileModel.Id
            };

            _context.FileToFileTypes.Add(ftf);
            await _context.SaveChangesAsync();


            return(fileModel);
        }
        /// <summary>
        /// Обновляет учебное пособие
        /// </summary>
        /// <param name="uchPosobieEditViewModel"></param>
        /// <returns></returns>
        public async Task UpdateUchPosobie(UchPosobieEditViewModel uchPosobieEditViewModel)
        {
            if (uchPosobieEditViewModel == null)
            {
                return;
            }

            if (uchPosobieEditViewModel.FormFile != null)
            {
                FileDataTypeEnum fileDataTypeEnum = await GetFileDataTypeEnumByUchPosobieVidId(uchPosobieEditViewModel.UchPosobie.UchPosobieVidId);

                var fileModel = await _fileModelRepository.UploadUchPosobieAsync(uchPosobieEditViewModel.FormFile, fileDataTypeEnum);

                if (fileModel != null)                                                                              //Если новый файл успешно загружен
                {
                    if (uchPosobieEditViewModel.UchPosobie.FileModelId != 0)                                        // и при этом ранее уже был загружен другой файл
                    {
                        await _fileModelRepository.RemoveFileAsync(uchPosobieEditViewModel.UchPosobie.FileModelId); // Удаляем старый файл
                    }
                }

                uchPosobieEditViewModel.UchPosobie.FileModelId = fileModel.Id;
            }

            _context.UchPosobie.Update(uchPosobieEditViewModel.UchPosobie);
            try
            {
                // Attempt to save changes to the database
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException ex)
            {
                foreach (var entry in ex.Entries)
                {
                    if (entry.Entity is UchPosobie)
                    {
                        var proposedValues = entry.CurrentValues;
                        var databaseValues = entry.GetDatabaseValues();

                        foreach (var property in proposedValues.Properties)
                        {
                            var proposedValue = proposedValues[property];
                            var databaseValue = databaseValues[property];

                            // TODO: decide which value should be written to database
                            proposedValues[property] = proposedValue;
                        }

                        // Refresh original values to bypass next concurrency check
                        entry.OriginalValues.SetValues(databaseValues);
                        await _context.SaveChangesAsync();
                    }
                    else
                    {
                        throw new NotSupportedException(
                                  "Don't know how to handle concurrency conflicts for "
                                  + entry.Metadata.Name);
                    }
                }
            }
        }
Beispiel #8
0
        /// <summary>
        /// Возвращает тип файлов
        /// </summary>
        /// <param name="fileDataType"></param>
        /// <returns></returns>
        private FileDataType GetFileDataType(FileDataTypeEnum fileDataType)
        {
            var fileDataTypeEntry = _context.FileDataTypes.FirstOrDefault(f => f.FileDataTypeId == (int)fileDataType);

            return(fileDataTypeEntry);
        }
Beispiel #9
0
        /// <summary>
        /// Загружает файл документа об образовании
        /// </summary>
        /// <param name="uploadedFile"></param>
        /// <param name="typeOfEducationDocument"></param>
        /// <returns></returns>
        public async Task <FileModel> UploadEducationDocumentAsync(IFormFile uploadedFile, FileDataTypeEnum typeOfEducationDocument)
        {
            FileDataType eduDocType = GetFileDataType(typeOfEducationDocument);
            var          fileModel  = await UploadFileAsync(uploadedFile,
                                                            eduDocType.FileDataTypeName,
                                                            typeOfEducationDocument);

            return(fileModel);
        }
Beispiel #10
0
 /// <summary>
 /// Загружает учебное пособие
 /// </summary>
 /// <param name="uploadedFile"></param>
 /// <returns></returns>
 public async Task <FileModel> UploadUchPosobieAsync(IFormFile uploadedFile,
                                                     FileDataTypeEnum fileDataTypeEnum = FileDataTypeEnum.UchebnoePosobie)
 {
     return(await UploadFileAsync(uploadedFile, "Учебное пособие", fileDataTypeEnum));
 }
Beispiel #11
0
        /// <summary>
        /// Создаёт объект FileModel и загружает его в папку www/files
        /// </summary>
        /// <param name="_context"></param>
        /// <param name="_appEnvironment"></param>
        /// <param name="uploadedFile"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public async Task <FileModel> UploadFileAsync(IFormFile uploadedFile, string name, FileDataTypeEnum fileDataTypeEnum)
        {
            FileModel fileModel = new FileModel();

            fileModel.ContentType = uploadedFile.ContentType;
            fileModel.UploadDate  = DateTime.Now;

            fileModel.Name = name;
            string fileName = await UploadFileToDisk(uploadedFile);

            fileModel.FileName = Path.GetFileName(uploadedFile.FileName);
            fileModel.Path     = Path.Combine("files", fileName);;

            if (Path.GetExtension(uploadedFile.FileName) == ".pdf")
            {
                fileModel.ContentType = "application/pdf";
            }

            _context.Files.Add(fileModel);
            await _context.SaveChangesAsync();


            FileToFileType ftf = new FileToFileType
            {
                FileDataTypeId = (int)fileDataTypeEnum,
                FileModelId    = fileModel.Id
            };

            _context.FileToFileTypes.Add(ftf);
            await _context.SaveChangesAsync();

            return(fileModel);
        }
Beispiel #12
0
        /// <summary>
        /// Загружает на сервер файл указанного типа
        /// </summary>
        /// <param name="uploadedFile"></param>
        /// <param name="fileDataType"></param>
        /// <returns></returns>
        public async Task <FileModel> UploadFileAsync(IFormFile uploadedFile, FileDataTypeEnum fileDataType)
        {
            var fileModel = await UploadFileAsync(uploadedFile, fileDataType.ToString(), fileDataType);

            return(fileModel);
        }
        /// <summary>
        /// Возвращает документы пользователя указанного типа
        /// </summary>
        /// <param name="educationDocuments"></param>
        /// <returns></returns>
        private IQueryable <UserDocument> GetUserDocuments(FileDataTypeEnum fileDataType)
        {
            var userDocuments = UserDocuments.Where(ud => ud.FileDataTypeId == (int)fileDataType);

            return(userDocuments);
        }