示例#1
0
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                throw new HttpException((int)HttpStatusCode.BadRequest, "Bad request!");
            }

            var submission = submissionsRepository.GetSubmissionById(id.Value);

            if (submission == null)
            {
                throw new HttpException((int)HttpStatusCode.NotFound, "Not found!");
            }

            if (!submission.ApplicationUsers.Any(u => u.Id == User.Identity.GetUserId()) && !coursesRepository.IsAssistantTeacherInCourse(submission.ProjectTask.Project.CourseId, User.Identity.GetUserId(), User.IsInRole("Administrator")) &&
                !coursesRepository.IsTeacherInCourse(submission.ProjectTask.Project.CourseId, User.Identity.GetUserId(), User.IsInRole("Administrator")) && !User.IsInRole("Administrator"))
            {
                throw new HttpException((int)HttpStatusCode.Forbidden, "Forbidden!");
            }

            var helper = new SubmissionsHelper(db);

            ViewBag.submissionFolder = helper.GetSubmissionFolder(submission);

            return(View(submission));
        }
示例#2
0
        public ActionResult SaveUploadedFile(int Id)
        {
            var isSavedSuccessfully = true;
            var fName = "";

            try
            {
                var task = projectTasksRepository.GetProjectTaskById(Id);
                // Checking if all files are required
                foreach (string fileName in Request.Files)
                {
                    var file = Request.Files[fileName];
                    //Save file content goes here
                    fName = file.FileName;

                    if (!task.FilesRequired.Any(i => i.Name == fName))
                    {
                        Response.ClearHeaders();
                        Response.ClearContent();
                        Response.StatusCode        = 400;
                        Response.StatusDescription = "File not allowed";
                        Response.ContentType       = "application/json";
                        return(Json(new { Message = "File is not in this Task. See required files above." }));
                    }
                }

                if (Request.Files.Count == task.FilesRequired.Count)
                {
                    var newSubmission = new Submission {
                        ProjectTaskId = task.Id, Created = DateTime.Now, ApplicationUsers = new List <ApplicationUser>()
                    };

                    // Add group members to submission
                    var members = 0;
                    foreach (var k in Request.Form.Keys)
                    {
                        var key    = k.ToString();
                        var userId = Request.Form[key];
                        if (key.StartsWith("user") && !string.IsNullOrEmpty(userId) && members <= task.MaxGroupSize)
                        {
                            members++;
                            newSubmission.ApplicationUsers.Add(db.Users.FirstOrDefault(i => i.Id == userId));
                            db.Submissions.Add(newSubmission);
                        }
                    }
                    // Add current user to submission
                    var currentUserId = User.Identity.GetUserId();
                    var currentUser   = db.Users.FirstOrDefault(i => i.Id == currentUserId);
                    newSubmission.ApplicationUsers.Add(currentUser);
                    db.Submissions.Add(newSubmission);
                    db.SaveChanges();

                    // All files are valid and all files are there, so we save them
                    foreach (string fileName in Request.Files)
                    {
                        var file = Request.Files[fileName];

                        if (file != null && file.ContentLength > 0)
                        {
                            var originalDirectory = new DirectoryInfo(string.Format("{0}Uploads\\Submissions", Server.MapPath(@"\")));

                            var pathString = Path.Combine(originalDirectory.ToString(), newSubmission.Id.ToString());

                            var fileName1 = Path.GetFileName(file.FileName);

                            var isExists = Directory.Exists(pathString);

                            if (!isExists)
                            {
                                Directory.CreateDirectory(pathString);
                            }

                            var path = string.Format("{0}\\{1}", pathString, file.FileName);
                            file.SaveAs(path);
                        }
                    }
                    var subHelper = new SubmissionsHelper(db);
                    subHelper.CreateCppSubmission(task, newSubmission);
                }
                else
                {
                    Response.ClearHeaders();
                    Response.ClearContent();
                    Response.StatusCode        = 400;
                    Response.StatusDescription = "Test requires " + task.FilesRequired.Count + " but the submission only had " + Request.Files.Count;
                    Response.ContentType       = "application/json";
                    return(Json(new { Message = "Test requires " + task.FilesRequired.Count + " files, but the submission only had " + Request.Files.Count + ".", JsonRequestBehavior.AllowGet }));
                }
            }
            catch (Exception ex)
            {
                Logger.LogException(ex);
                isSavedSuccessfully = false;
            }

            if (isSavedSuccessfully)
            {
                return(Json(new { Message = fName }));
            }
            return(Json(new { Message = "Error in saving file" }));
        }