public ActionResult Create(MathTask mathTask, HttpPostedFileBase file)
        {
            initMathML();
            var curId = HttpContext.User.Identity.GetUserId();

            // получаем текущего пользователя
            ApplicationUser user = Db.Users.FirstOrDefault(m => m.Id == curId);

            if (user == null)
            {
                return RedirectToAction("LogOff", "Account");
            }

            if (ModelState.IsValid)
            {
                TryCreate(user, mathTask, file);

                return RedirectToAction("Index");
            }

            return View(mathTask);
        }
        protected void TryCreate(ApplicationUser user, MathTask mathTask, HttpPostedFileBase file)
        {
            //получаем время открытия
            DateTime current = DateTime.Now;

            Document doc = null ; ;

            string fileName = current.ToString(user.Id.GetHashCode() + "dd/MM/yyyy H:mm:ss").Replace(":", "_").Replace("/", ".").Replace(" ", "_");
            string path = Server.MapPath("~/Files/RequestFiles/" + fileName);
            string ext = "png";

            // Если приложен код латекса - грузим его как файл(создаем и грузим)
            // Иначе - сохраняем как файл
            if ( !mathTask.LatexCode.IsNullOrWhiteSpace() )
            {
                Bitmap bmp = MathMLFormulaControl.generateBitmapFromLatex(mathTask.LatexCode);

                bmp.Save(path, System.Drawing.Imaging.ImageFormat.Png);
                bmp.Dispose();

                doc = new Document();
                doc.Size = 0;
                doc.Type = "png";
                doc.Url = path + ".png";
            }
            else if (file != null)
            {

                // Получаем расширение
                ext = file.FileName.Substring(file.FileName.LastIndexOf('.'));
                path = path + ext;
                // сохраняем файл по определенному пути на сервере
                file.SaveAs(path);

                doc = new Document();
                doc.Size = file.ContentLength;
                doc.Type = ext;
                doc.Url = path;
            }
            else
            {
                mathTask.Description = DeterminantComplexity.GenerateByLevel(mathTask.MathTaskTypeId - 1, mathTask.Level, true).ToString();
            }

            mathTask.Executors = new List<ApplicationUser>();

            // Если не рассылка - добавляем всю выбранную группу
            if (mathTask.SelectedExecutorId != null)
            {
                var executor = this.Db.Users.First(x => x.Id == mathTask.SelectedExecutorId);
                mathTask.Executors.Add(executor);
            }
            else
            {
                var students = Db.Users.Where(x => x.Id == mathTask.StudentsGroupId.ToString());

                foreach (var student in students)
                {
                    mathTask.Executors.Add(student);
                }
            } // Иначе - добавляем указанного пользователя

            // указываем автора задачи
            mathTask.Author = user;
            mathTask.AuthorId = user.Id;

            // если сформирован файл
            if (doc != null)
            {
                mathTask.Document = doc;
                Db.Documents.Add(doc);
            }
            else
                mathTask.Document = null;

            mathTask.Status = (int)MathTaskStatus.Open;

            //Добавляем задачу с возможно приложенными документами
            Db.MathTasks.Add( mathTask );
            user.MathTasks.Add( mathTask );

            Db.Entry(user).State = EntityState.Modified;

            try
            {
                Db.SaveChanges();
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
예제 #3
0
        //[Authorize]
        public ActionResult Create(MathTask request, HttpPostedFileBase error)
        {
            var curId = HttpContext.User.Identity.GetUserId();
            // получаем текущего пользователя
            ApplicationUser user = db.Users.FirstOrDefault(m => m.Id == curId);
            if (user == null)
            {
                return RedirectToAction("LogOff", "Account");
            }
            if (ModelState.IsValid)
            {
                // указываем статус Открыта у задачи
                request.Status = (int)RequestStatus.Open;

                //получаем время открытия
                DateTime current = DateTime.Now;
                
                // указываем пользователя задачи
                request.Author = user;
                request.AuthorId = user.Id;


                // если получен файл
                if (error != null)
                {
                    Document doc = new Document();
                    doc.Size = error.ContentLength;
                    // Получаем расширение
                    string ext = error.FileName.Substring(error.FileName.LastIndexOf('.'));
                    doc.Type = ext;
                    // сохраняем файл по определенному пути на сервере
                    string path = current.ToString(user.Id.GetHashCode()+"dd/MM/yyyy H:mm:ss").Replace(":", "_").Replace("/", ".") + ext;
                    error.SaveAs(Server.MapPath("~/Files/RequestFiles/" + path));
                    doc.Url = path;

                    request.Document = doc;
                    db.Documents.Add(doc);
                }
                else
                    request.Document = null;
                
                request.Status = (int)RequestStatus.Open;

                //Добавляем задачу с возможно приложенными документами
                db.Requests.Add(request);
                user.Requests.Add(request);
                db.Entry(user).State = EntityState.Modified;

                try
                {
                    db.SaveChanges();
                }
                catch(Exception e)
                {
                    return Content(e.Message);
                }

                return RedirectToAction("Index");
            }
            return View(request);
        }