public async Task <IActionResult> Edit(int id)
        {
            ViewData["msg"] = "";
            try
            {
                string accessToken = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
                var    res         = await _examService.GetByID(id, accessToken);

                if (res.data == null || res.msg != null)
                {
                    ViewData["msg"] = res.msg;
                }
                var exam  = res.data;
                var model = new ExamModel()
                {
                    ID         = exam.ID,
                    ExamName   = exam.ExamName,
                    ImageURL   = exam.ImageURL,
                    CategoryID = exam.CategoryID,
                    isActive   = exam.isActive,
                    isPrivate  = exam.isPrivate,
                    Time       = exam.Time
                };
                return(View(model));
            }
            catch (Exception)
            {
                ViewData["msg"] = "Lỗi hệ thống. Thử lại sau.";
                return(View());
            }
        }
        public async Task <IActionResult> Create(ExamModel model)
        {
            ViewData["msg"] = "";
            if (string.IsNullOrEmpty(model.ExamName))
            {
                return(View(model));
            }
            string accessToken = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
            var    allExam     = await _examService.Create(
                model,
                Int32.Parse(User.FindFirst("UserID").Value),
                accessToken);

            if (allExam != null && allExam.msg != null)
            {
                ViewData["msg"] = allExam.msg;
                return(View());
            }
            else if (allExam == null)
            {
                ViewData["msg"] = "Error";
                return(View());
            }
            else
            {
                ViewData["msg"] = "Thêm mới thành công";
                return(View());
            }
        }
        public async Task <IActionResult> Index(string keyword, int pageIndex = 1, int pageSize = 10)
        {
            string accessToken = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);

            try
            {
                var model = new ExamPagingRequest()
                {
                    keyword   = keyword,
                    PageIndex = pageIndex,
                    PageSize  = pageSize
                };
                var allExam = await _examService.GetAllPaging(model, accessToken);

                if (allExam.msg != null)
                {
                    ViewData["msg"] = allExam.msg;
                    return(View());
                }
                allExam.data.Items = allExam.data.Items.OrderByDescending(e => e.TimeCreated).ToList();
                return(View(allExam.data));
            }
            catch (Exception)
            {
                return(View());
            }
        }
        public async Task <IActionResult> Edit(int id, ExamModel model)
        {
            ViewData["msg"] = "";
            try
            {
                if (id != model.ID)
                {
                    ViewData["msg"] = "Không hợp lệ";
                    return(View(model));
                }
                if (string.IsNullOrEmpty(model.ExamName))
                {
                    ViewData["msg"] = "Không được bỏ trống";
                    return(View(model));
                }
                var token   = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
                var newExam = await _examService.Update(id, model, token);

                if (newExam.msg != null)
                {
                    ViewData["msg"] = newExam.msg;
                    return(View());
                }
                ViewData["msg"] = "Cập nhật thành công";
                return(View());
            }
            catch (Exception)
            {
                ViewData["msg"] = "Lỗi hệ thống. Thử lại sau.";
                return(View());
            }
        }
        public async Task <ActionResult> Edit(int id, Category model)
        {
            ViewData["msg"] = "";
            try
            {
                if (id != model.ID)
                {
                    ViewData["msg"] = "Không hợp lệ";
                    return(View(model));
                }
                if (string.IsNullOrEmpty(model.CategoryName))
                {
                    ViewData["msg"] = "Tên chủ đề không được bỏ trống";
                    return(View(model));
                }
                var token = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
                await _categoryService.Update(id, model, token);

                return(RedirectToAction("Index"));
            }
            catch (Exception)
            {
                return(RedirectToAction("Index"));
            }
        }
Example #6
0
        public async Task <ActionResult> RestoreUser(int id)
        {
            try
            {
                var token          = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
                var lockUserResult = await _userManage.RestoreUser(id, token);

                if (lockUserResult.msg == null)
                {
                    return(Json(new
                    {
                        statusChanged = true
                    }));
                }
                else
                {
                    return(Json(new
                    {
                        statusChanged = false
                    }));
                }
            }
            catch
            {
                return(Json(new
                {
                    statusChanged = false
                }));
            }
        }
        public async Task <IActionResult> GetAll()
        {
            var token  = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
            var result = await _favoriteExamService.GetExams(int.Parse(User.FindFirst("UserID").Value), token);

            return(Json(new { success = result }));
        }
        public async Task <ActionResult> Create(Category model)
        {
            ViewData["msg"] = "";
            try
            {
                if (string.IsNullOrEmpty(model.CategoryName))
                {
                    ViewData["msg"] = "Tên chủ đề không được bỏ trống";
                    return(View(model));
                }
                var token  = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
                var result = await _categoryService.Create(model, token);

                if (result.msg != null)
                {
                    ViewData["msg"] = result.msg;
                    return(View(model));
                }
                else if (result.data != null)
                {
                    ViewData["msg"] = "Tạo mới thành công";
                    return(View(model));
                }
                else
                {
                    ViewData["msg"] = "Lỗi không xác định";
                    return(View(model));
                }
            }
            catch (Exception)
            {
                ViewData["msg"] = "Something went wrong. Try again.";
                return(View(model));
            }
        }
Example #9
0
        public async Task <IActionResult> Index(string keyword, string categoryId, int pageIndex = 1, int pageSize = 20)
        {
            var token       = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
            var allcategory = await _categoryService.GetAll();  // to show categories

            var examPagingRequest = new ExamPagingRequest()
            {
                keyword   = keyword,
                PageIndex = pageIndex,
                PageSize  = pageSize
            };

            if (categoryId != null)
            {
                examPagingRequest.CategoryID = Int32.Parse(categoryId);
            }
            var allExams = await _examService.GetAllPaging(examPagingRequest, token, User.FindFirst("UserID").Value);

            // get all exams paged - about 8 exams per page
            var allExamsNotPaged = await _examService.GetAll(token, User.FindFirst("UserID").Value);

            var commonExams = allExamsNotPaged.data.OrderByDescending(e => e.NumOfAttemps).Take(8).ToList();
            var newestExams = allExamsNotPaged.data.OrderByDescending(e => e.TimeCreated).Take(8).ToList();

            // about 8 exams having most attemp
            //var allNewExams = // about 8 exams that time created newest
            ViewData["commonExams"] = commonExams;
            ViewData["newestExams"] = newestExams;
            ViewData["allExams"]    = allExams.data;
            ViewData["Title"]       = "HOME";
            ViewBag.Categories      = allcategory;
            return(View());
        }
Example #10
0
        public async Task <IActionResult> Index(string keyword, int pageIndex = 1, int pageSize = 10)
        {
            ViewData["msg"] = "";
            try
            {
                var model = new QuestionPagingRequest()
                {
                    keyword   = keyword,
                    PageIndex = pageIndex,
                    PageSize  = pageSize
                };
                var token        = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
                var allQuestions = await _questionManage.GetAllPaging(model, token);

                if (allQuestions.msg != null)
                {
                    ViewData["msg"] = allQuestions.msg;
                    return(View());
                }
                return(View(allQuestions.data));
            }
            catch (Exception)
            {
                ViewData["msg"] = "Lỗi hệ thống. Vui lòng đăng nhập lại.";
                return(View());
            }
        }
Example #11
0
        public async Task <ActionResult> Edit(int id, UserViewModel model)
        {
            try
            {
                var access_token = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
                if (model.AvatarPhoto != null)
                {
                    string folder     = "images/cover/user/";
                    var    extensions = model.AvatarPhoto.FileName.Split('.');
                    var    extension  = extensions[extensions.Length - 1];
                    folder         += model.Id.ToString() + "." + extension;
                    model.AvatarURL = "/" + folder;
                    string serverFolder    = Path.Combine(_webHostEnvironment.WebRootPath, folder);
                    var    copyImageStream = new FileStream(serverFolder, FileMode.Create);
                    model.AvatarPhoto.CopyTo(copyImageStream);
                    copyImageStream.Close();
                }
                model.AvatarPhoto = null;
                var userUpdated = await _userManage.UpdateUserInfo(id, model, access_token);

                return(RedirectToAction("Details", "Users", new { id = userUpdated.data.Id }));
            }
            catch
            {
                ViewData["msg"] = "Cập nhật thất bại";
                return(View(model));
            }
        }
        public async Task <IActionResult> Delete([FromBody] int examId)
        {
            var token  = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
            var result = await _favoriteExamService.Delete(int.Parse(User.FindFirst("UserID").Value), examId, token);

            return(Json(new { success = result }));
        }
Example #13
0
        public async Task <IActionResult> Create([FromQuery] QuestionModel model)
        {
            ViewData["msg"] = "";
            if (!ModelState.IsValid)
            {
                return(RedirectToAction("ShowQuestions", "Exams", new { id = model.ExamID }));
            }
            string accessToken = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
            var    newQuestion = await _questionManage.Create(model, accessToken);

            if (newQuestion != null && newQuestion.msg != null)
            {
                ViewData["msg"] = newQuestion.msg;
            }
            else if (newQuestion == null)
            {
                ViewData["msg"] = "Thêm mới thất bại";
            }
            else
            {
                ViewData["msg"] = "Thêm mới thành công";
            }
            //return Json(new { msg = "OK" });
            return(RedirectToAction("ShowQuestions", "Exams", new { id = model.ExamID }));
        }
Example #14
0
        public async Task <IActionResult> ChangePassword(ChangePasswordModel model)
        {
            ViewData["success"] = false;
            if (!ModelState.IsValid)
            {
                return(View());
            }
            var userID       = User.FindFirst("UserID").Value;
            var accessToken  = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
            var changeResult = await _accountService.ChangePassword(userID, model, accessToken);

            if (changeResult != null)
            {
                if (changeResult.msg != null)
                {
                    ViewData["msg"] = changeResult.msg;
                }
                ViewData["msg"]     = "Đổi mật khẩu thành công";
                ViewData["success"] = true;
                HttpContext.Response.Cookies.Delete("access_token_cookie");
                HttpContext.Response.Cookies.Delete("refresh_token_cookie");
                await HttpContext.SignOutAsync();

                return(View());
            }
            else
            {
                ViewData["msg"] = "Lỗi máy chủ. Vui lòng thử lại.";
                return(View());
            }
        }
Example #15
0
        public async Task <IActionResult> DeleteMany([FromBody] int[] s)
        {
            try
            {
                var token = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
                if (s.Length == 0)
                {
                    return(Json(new { deleteResult = false }));
                }
                DeleteManyModel <int> temp = new DeleteManyModel <int>();
                temp.ListItem = new List <int>();
                temp.ListItem.AddRange(s);
                var result = await _questionManage.DeleteMany(temp, token);

                if (result.msg != null)
                {
                    return(Json(new { deleteResult = false }));
                }
                return(Json(new { deleteResult = true }));
            }
            catch
            {
                //return RedirectToAction("Index");
                return(Json(new { deleteResult = false }));
            }
        }
Example #16
0
        public async Task <IActionResult> Update([FromQuery] QuestionModel model)
        {
            ViewData["msg"] = "";
            string accessToken  = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
            var    updateResult = await _questionManage.Update(model, accessToken);

            return(RedirectToAction("ShowQuestions", "Exams", new { id = model.ExamID }));
        }
Example #17
0
        public async Task <IActionResult> Login(LoginModel model, string ReturnUrl)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            // jwt got from authentication API
            var result = await _accountService.Authenticate(model);

            if (!result.success)
            {
                ViewData["msg"] = result.msg;
                return(View(model));
            }
            else
            {
                var userPrincipal  = _accountService.ValidateToken(result.data.Access_Token);
                var authProperties = new AuthenticationProperties
                {
                    // set false -> tạo ra cookie phiên -> thoát trình duyệt cookie bị xoá
                    // set true -> cookie có thời hạn đc set trong Startup.cs và ko bị mất khi thoát
                    IsPersistent = model.Rememberme
                };

                await HttpContext.SignInAsync(userPrincipal, authProperties);

                if (model.Rememberme)
                {
                    HttpContext.Session.SetInt32("IsPersistent", 1);
                    HttpContext.Response.Cookies.Append("access_token_cookie", CookieEncoder.EncodeToken(result.data.Access_Token), new CookieOptions {
                        Expires = DateTime.UtcNow.AddDays(3), HttpOnly = true, Secure = true
                    });
                    HttpContext.Response.Cookies.Append("refresh_token_cookie", CookieEncoder.EncodeToken(result.data.Refresh_Token), new CookieOptions {
                        Expires = DateTime.UtcNow.AddDays(7), HttpOnly = true, Secure = true
                    });
                }
                else
                {
                    HttpContext.Session.SetInt32("IsPersistent", 0);
                    HttpContext.Response.Cookies.Append("access_token_cookie", CookieEncoder.EncodeToken(result.data.Access_Token), new CookieOptions {
                        HttpOnly = true, Secure = true
                    });
                    HttpContext.Response.Cookies.Append("refresh_token_cookie", CookieEncoder.EncodeToken(result.data.Refresh_Token), new CookieOptions {
                        HttpOnly = true, Secure = true
                    });
                }

                if (!string.IsNullOrEmpty(ReturnUrl))
                {
                    return(Redirect(ReturnUrl));
                }
                return(RedirectToAction("Index", "Home"));
            }
        }
        public async Task <IActionResult> AttempQuizOptions([FromQuery] int examID)
        {
            var token = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
            var exam  = await _examService.GetByID(examID, token, User.FindFirst("UserID").Value);

            if (exam != null && exam.data != null)
            {
                return(PartialView(exam.data));
            }
            return(PartialView());
        }
Example #19
0
        public async Task <IActionResult> PreviewExam(string examID)
        {
            var token = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
            var exam  = await _examService.GetByID(Int32.Parse(examID), token, User.FindFirst("UserID").Value);

            if (exam != null && exam.msg == null && exam.data != null)
            {
                ViewData["examName"] = exam.data.ExamName;
                return(View(exam.data.Questions.Where(q => q.isActive).ToList()));
            }
            return(View());
        }
Example #20
0
        public async Task <IActionResult> ShowProfile()
        {
            var id           = User.FindFirst("UserID");
            var access_token = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
            var user         = await _accountService.GetUserInfo(Int32.Parse(id.Value), access_token);

            if (user.data != null)
            {
                return(View(user.data));
            }
            return(View());
        }
        public async Task <IActionResult> Index()
        {
            var token = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);

            var examResponse = await _examService.GetOwned(token, User.FindFirst("UserID").Value);

            if (examResponse != null && examResponse.data != null)
            {
                return(View(examResponse.data));
            }
            ViewData["msg"] = "Oh sorry!! Something went wrong";
            return(View());
        }
Example #22
0
        // GET: Users/Details/5
        public async Task <ActionResult> Details(int id)
        {
            try
            {
                var access_token = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
                var user         = await _accountService.GetUserInfo(id, access_token);

                return(View(user.data));
            }
            catch (Exception)
            {
                return(RedirectToAction("Index", "Users"));
            }
        }
        public async Task <ActionResult> Delete(int id)
        {
            try
            {
                var token  = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
                var result = await _categoryService.Delete(id, token);

                return(RedirectToAction("Index"));
                //return Json(new { deleteResult = result });
            }
            catch
            {
                return(RedirectToAction("Index"));
                //return Json(new { deleteResult = false });
            }
        }
        public async Task <IActionResult> ManageQuestions(int examID)
        {
            var lstCategory = await _categoryService.GetAll();

            ViewData["lstCategory"] = lstCategory.data;
            var token = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
            var exam  = await _examService.GetByID(examID, token, User.FindFirst("UserID").Value);

            if (exam != null && exam.msg == null && exam.data != null)
            {
                ViewData["examID"]   = exam.data.ID;
                ViewData["examName"] = exam.data.ExamName.ToUpper();
                return(View(exam.data.Questions.Where(q => q.isActive).ToList()));
            }
            ViewData["msg"] = "Sorry!! Something went wrong. Please try again.";
            return(View());
        }
        public async Task <IActionResult> DoingQuiz([FromQuery] int examID, int pageIndex = 1)
        {
            var token         = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
            var pagingRequest = new QuestionPagingRequest()
            {
                ExamID    = examID,
                PageIndex = pageIndex,
                PageSize  = 5
            };
            var res = await _questionService.GetByExamPaging(pagingRequest, token);


            if (res != null && res.data != null)
            {
                var examData = res.data;
                if (examData.Items.Count == 0 || examData.Items == null)
                {
                    return(RedirectToAction("Index", "Home"));
                }
                var time = examData.Items.FirstOrDefault().Exam.Time;
                if (time == 0)
                {
                    ViewBag.min = null;
                    ViewBag.sec = null;
                }
                else
                {
                    ViewBag.min = time / 60;
                    ViewBag.sec = time % 60;
                }
                Global.results = new List <Result>();
                var userID = Int32.Parse(User.FindFirst("UserId").Value);
                foreach (var i in examData.Items)
                {
                    Global.results.Add(new Result()
                    {
                        UserID = userID, QuestionID = i.ID, OptChoose = "N"
                    });
                }
                Global.questions = examData.Items;
                return(View(examData));
            }
            return(View());
        }
Example #26
0
        public async Task <IActionResult> UpdateProfile(int id)
        {
            var userID = Int32.Parse(User.FindFirst("UserID").Value);

            if (id != userID)
            {
                // access denied
                return(View("Views/Account/AccessDenied.cshtml"));
            }
            var access_token = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
            var user         = await _accountService.GetUserInfo(userID, access_token);

            if (user != null)
            {
                ViewData["uid"] = userID;
                return(View(user.data));
            }
            return(View(new UserViewModel()));
        }
        public async Task <IActionResult> Create(ExamModel model)
        {
            var token       = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
            var lstCategory = await _categoryService.GetAll();

            ViewData["lstCategory"] = lstCategory.data;
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            var newExam = await _examService.Create(model, Int32.Parse(User.FindFirst("UserID").Value), token);

            if (newExam != null && newExam.data != null)
            {
                ViewData["msg"] = "Successfully";
                return(View());
            }
            ViewData["msg"] = "Create failed";
            return(View());
        }
Example #28
0
        // GET: Users
        public async Task <ActionResult> Index(string keyword, int pageIndex = 1, int pageSize = 10)
        {
            try
            {
                //List<UserViewModel> lstAllUser = new List<UserViewModel>();
                var model = new UserPagingRequest()
                {
                    keyword   = keyword,
                    PageIndex = pageIndex,
                    PageSize  = pageSize
                };
                var token          = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
                var listUserResult = await _userManage.GetListUserPaged(model, token);

                return(View(listUserResult.data));
            }
            catch (Exception)
            {
                return(RedirectToAction("Index", "Home"));
            }
        }
Example #29
0
        public async Task <IActionResult> OnPostUpdateProfile(int id, UserViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(RedirectToAction(nameof(UpdateProfile), new
                {
                    id
                }));
            }
            if (model.AvatarPhoto != null)
            {
                var filePath = Path.GetTempFileName();
                using (var stream = System.IO.File.Create(filePath))
                {
                    await model.AvatarPhoto.CopyToAsync(stream);
                }
                model.AvatarURL   = UploadImageService.Instance().Upload(model.UserName, filePath);
                model.AvatarPhoto = null;
            }
            var userID = Int32.Parse(User.FindFirst("UserID").Value);

            if (id != userID)
            {
                return(Redirect("/Views/Account/AccessDenied.cshtml"));
            }
            var access_token = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
            var result       = await _accountService.UpdateProfile(model, access_token);

            // success
            if (result != null && result.data != null)
            {
                return(RedirectToAction(nameof(ShowProfile)));
            }
            // fail
            ViewData["msg"] = "Update failed";
            return(RedirectToAction(nameof(UpdateProfile), new
            {
                id = id
            }));
        }
Example #30
0
        public async Task <ActionResult> Create(UserViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            try
            {
                if (model.AvatarPhoto != null)
                {
                    string folder     = "images/cover/user/";
                    var    extensions = model.AvatarPhoto.FileName.Split('.');
                    var    extension  = extensions[extensions.Length - 1];
                    folder         += model.Id.ToString() + "." + extension;
                    model.AvatarURL = "/" + folder;
                    string serverFolder    = Path.Combine(_webHostEnvironment.WebRootPath, folder);
                    var    copyImageStream = new FileStream(serverFolder, FileMode.Create);
                    model.AvatarPhoto.CopyTo(copyImageStream);
                    copyImageStream.Close();
                }
                model.AvatarPhoto = null;
                var token            = CookieEncoder.DecodeToken(Request.Cookies["access_token_cookie"]);
                var createUserResult = await _userManage.CreateUser(model, token);

                //error
                if (createUserResult.msg != null || createUserResult.data == null)
                {
                    ViewData["Error"] = createUserResult.msg;
                    return(View(model));
                }
                //success
                return(RedirectToAction(nameof(Index)));
            }
            catch
            {
                ViewData["Error"] = "Can't connect to server. Please try later.";
                return(View());
            }
        }