Exemplo n.º 1
0
        public async Task <ActionResult> GetUngradedSubmissions(int courseId)
        {
            GetUngradedSubmissionFilesDto dto = new GetUngradedSubmissionFilesDto {
                CourseId = courseId
            };
            ServiceResponse <IEnumerable <string> > response = await _submissionService.DownloadNotGradedSubmissions(dto);

            if (!response.Success)
            {
                return(BadRequest(response));
            }
            List <string> files = response.Data.ToList();

            var webRoot    = _hostingEnvironment.ContentRootPath;
            var fileName   = "Submissions.zip";
            var tempOutput = webRoot + "/StaticFiles/Submissions/" + fileName;

            using (ZipOutputStream zipOutputStream = new ZipOutputStream(System.IO.File.Create(tempOutput)))
            {
                zipOutputStream.SetLevel(9);
                byte[] buffer = new byte[4096];
                for (int i = 0; i < files.Count; i++)
                {
                    ZipEntry zipEntry = new ZipEntry(Path.GetFileName(files[i]));
                    zipEntry.DateTime      = DateTime.Now;
                    zipEntry.IsUnicodeText = true;
                    zipOutputStream.PutNextEntry(zipEntry);
                    using (FileStream fileStream = System.IO.File.OpenRead(files[i]))
                    {
                        int sourceBytes;
                        do
                        {
                            sourceBytes = fileStream.Read(buffer, 0, buffer.Length);
                            zipOutputStream.Write(buffer, 0, sourceBytes);
                        } while (sourceBytes > 0);
                    }
                }

                zipOutputStream.Finish();
                zipOutputStream.Flush();
                zipOutputStream.Close();

                byte[] finalResult = System.IO.File.ReadAllBytes(tempOutput);
                if (System.IO.File.Exists(tempOutput))
                {
                    System.IO.File.Delete(tempOutput);
                }
                if (finalResult == null || !finalResult.Any())
                {
                    return(BadRequest(response));
                }
                return(File(finalResult, "application/zip", fileName));
            }
        }
Exemplo n.º 2
0
        public async Task <ServiceResponse <IEnumerable <string> > > DownloadNotGradedSubmissions(GetUngradedSubmissionFilesDto dto)
        {
            ServiceResponse <IEnumerable <string> > response = new ServiceResponse <IEnumerable <string> >();
            User user = await _context.Users.Include(u => u.ProjectGroups).FirstOrDefaultAsync(u => u.Id == GetUserId());

            Course course = await _context.Courses.Include(u => u.Instructors).FirstOrDefaultAsync(c => c.Id == dto.CourseId);

            if (course == null)
            {
                response.Data    = null;
                response.Message = "There is no course under this Id";
                response.Success = false;
                return(response);
            }
            if (course.Instructors.FirstOrDefault(i => i.UserId == user.Id) == null && user.UserType == UserTypeClass.Student)
            {
                response.Data    = null;
                response.Message = "You are not authorized for this endpoint";
                response.Success = false;
                return(response);
            }
            response.Data = _context.Submissions.Include(s => s.AffiliatedAssignment)
                            .Where(s => !s.IsGraded && s.AffiliatedAssignment.IsItGraded).Select(s => s.FilePath);
            return(response);
        }