summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatthewsotoudeh <matthewsot@outlook.com>2017-04-15 18:44:18 -0700
committermatthewsotoudeh <matthewsot@outlook.com>2017-04-15 18:44:18 -0700
commit620110def983e85ac4f47775189afb7b29a07d33 (patch)
treedf545b3b2dacd3b8897aa0911a0fb90e8d9f3fa8
parentdfe92cc6df0d123966fdcc66fc9713406b3b5a07 (diff)
archive working17co-archive
-rw-r--r--LHSCampaign/LHSCampaign/Controllers/AccountAPIController.cs333
-rw-r--r--LHSCampaign/LHSCampaign/Controllers/AccountController.cs635
-rw-r--r--LHSCampaign/LHSCampaign/Controllers/CandidatesController.cs2
-rw-r--r--LHSCampaign/LHSCampaign/Controllers/ManageController.cs237
-rw-r--r--LHSCampaign/LHSCampaign/LHSCampaign.csproj3
-rw-r--r--LHSCampaign/LHSCampaign/Views/Account/Login.cshtml2
-rw-r--r--LHSCampaign/LHSCampaign/Views/Account/Register.cshtml6
-rw-r--r--LHSCampaign/LHSCampaign/Views/Candidates/Class.cshtml17
8 files changed, 626 insertions, 609 deletions
diff --git a/LHSCampaign/LHSCampaign/Controllers/AccountAPIController.cs b/LHSCampaign/LHSCampaign/Controllers/AccountAPIController.cs
index f12c333..3e27cc1 100644
--- a/LHSCampaign/LHSCampaign/Controllers/AccountAPIController.cs
+++ b/LHSCampaign/LHSCampaign/Controllers/AccountAPIController.cs
@@ -12,173 +12,174 @@ namespace LHSCampaign.Controllers
{
private LCDb db = new LCDb();
- [HttpGet]
- [Route("API/Admin/SetPass")]
- [AllowAnonymous]
- public IHttpActionResult SetPassword(string userId, string admin, string newPass)
- {
- if (admin != "sdfafawt2903t2") return NotFound();
- using (var userManager = new UserManager<Candidate>(
- new Microsoft.AspNet.Identity.EntityFramework.UserStore<Candidate>(db)))
- {
- var user = db.Users.Find(userId);
- user.PasswordHash = userManager.PasswordHasher.HashPassword(newPass);
- db.SaveChanges();
- return Ok();
- }
- }
-
- [HttpPost]
- [Route("API/Account/CheckName")]
- [AllowAnonymous]
- public IHttpActionResult CheckName(UserNameModel model)
- {
- var exists = (db.Users.FirstOrDefault(u => u.UserName == model.username) != null);
- return Ok(exists ? "exists" : "new");
- }
-
- [HttpPost]
- [Route("API/Account/SetEmail")]
- public IHttpActionResult SetEmail(SetEmailModel model)
- {
- var userId = User.Identity.GetUserId();
- var user = db.Users.Find(userId);
-
- if (user == null)
- {
- return Ok("no user");
- }
-
- user.Email = model.email;
- db.SaveChanges();
- return Ok("set");
- }
-
- [HttpPost]
- [Route("API/Account/SetPosition")]
- public IHttpActionResult SetPosition(SetPositionModel model)
- {
- var user = db.Users.Find(User.Identity.GetUserId());
-
- if (user == null)
- {
- return Ok("no user");
- }
-
- user.Position = model.position;
- db.SaveChanges();
-
- return Ok("set");
- }
-
- [HttpPost]
- [Route("API/Account/SetReasons")]
- public IHttpActionResult SetReasons(SetReasonsModel model)
- {
- var candidate = db.Users.Find(User.Identity.GetUserId());
-
- if (candidate == null)
- {
- return Ok("no user");
- }
-
- candidate.Platform = model.reasons;
- db.SaveChanges();
- return Ok("set");
- }
-
- [HttpPost]
- [Route("API/Account/SetSocial")]
- public IHttpActionResult SetSocial(SetSocialModel model)
- {
- model.facebook = string.IsNullOrWhiteSpace(model.facebook) ? null : model.facebook.Trim();
- model.youtube = string.IsNullOrWhiteSpace(model.youtube) ? null : model.youtube.Trim();
-
- var candidate = db.Users.Find(User.Identity.GetUserId());
- if (candidate == null)
- {
- return Ok("no user");
- }
-
- var existingFacebook = candidate.ExternalLinks.FirstOrDefault(link => link.Label == "FB EVENT");
- if (existingFacebook != null)
- {
- candidate.ExternalLinks.Remove(existingFacebook);
- }
-
- if (model.facebook != null)
- {
- candidate.ExternalLinks.Add(new ExternalLink()
- {
- Label = "FB EVENT",
- Link = model.facebook
- });
- }
-
- var existingYoutube = candidate.ExternalLinks.FirstOrDefault(link => link.Label == "FB EVENT");
- if (existingYoutube != null)
- {
- candidate.ExternalLinks.Remove(existingYoutube);
- }
-
- if (model.youtube != null)
- {
- candidate.ExternalLinks.Add(new ExternalLink()
- {
- Label = "CAMPAIGN VIDEO",
- Link = model.youtube
- });
- }
- db.SaveChanges();
-
- return Ok("set");
- }
-
- [HttpPost]
- [Route("API/Account/Register")]
- [AllowAnonymous]
- public async Task<IHttpActionResult> Register(RegisterModel model)
- {
- using (var userManager = new UserManager<Candidate>(
- new Microsoft.AspNet.Identity.EntityFramework.UserStore<Candidate>(db)))
- {
- var errors = new List<string>();
-
- // TODO: Should be validating with ModelState
- if (model.Password.Length <= 6) errors.Add("Password");
- //if (!(model.Year <= 2020 && model.Year >= 2018)) errors.Add("Year");
- if (string.IsNullOrWhiteSpace(model.Position) || model.Position.Length > 50) errors.Add("Position");
- model.Position = model.Position.ToLower();
- if (string.IsNullOrWhiteSpace(model.FullName) || model.FullName.Length > 50) errors.Add("FullName");
- if (db.Users.Count(usr => usr.UserName == model.Username) > 0) errors.Add("Username");
-
- if (errors.Count > 0)
- {
- return Ok(string.Join(",", errors) + ",");
- }
-
- var candidate = new Candidate
- {
- UserName = model.Username,
- Email = model.Email,
- GraduationYear = model.Year,
- Position = model.Position,
- Name = model.FullName,
- IsConfirmed = false
- };
+ //[HttpGet]
+ //[Route("API/Admin/SetPass")]
+ //[AllowAnonymous]
+ //public IHttpActionResult SetPassword(string userId, string admin, string newPass)
+ //{
+ // if (admin != "sdfafawt2903t2") return NotFound();
+ // using (var userManager = new UserManager<Candidate>(
+ // new Microsoft.AspNet.Identity.EntityFramework.UserStore<Candidate>(db)))
+ // {
+ // var user = db.Users.Find(userId);
+ // user.PasswordHash = userManager.PasswordHasher.HashPassword(newPass);
+ // db.SaveChanges();
+ // return Ok();
+ // }
+ //}
+
+ //[HttpPost]
+ //[Route("API/Account/CheckName")]
+ //[AllowAnonymous]
+ //public IHttpActionResult CheckName(UserNameModel model)
+ //{
+ // var exists = (db.Users.FirstOrDefault(u => u.UserName == model.username) != null);
+ // return Ok(exists ? "exists" : "new");
+ //}
+
+ //[HttpPost]
+ //[Route("API/Account/SetEmail")]
+ //public IHttpActionResult SetEmail(SetEmailModel model)
+ //{
+ // var userId = User.Identity.GetUserId();
+ // var user = db.Users.Find(userId);
+
+ // if (user == null)
+ // {
+ // return Ok("no user");
+ // }
+
+ // user.Email = model.email;
+ // db.SaveChanges();
+ // return Ok("set");
+ //}
+
+ //[HttpPost]
+ //[Route("API/Account/SetPosition")]
+ //public IHttpActionResult SetPosition(SetPositionModel model)
+ //{
+ // var user = db.Users.Find(User.Identity.GetUserId());
+
+ // if (user == null)
+ // {
+ // return Ok("no user");
+ // }
+
+ // user.Position = model.position;
+ // db.SaveChanges();
+
+ // return Ok("set");
+ //}
+
+ //[HttpPost]
+ //[Route("API/Account/SetReasons")]
+ //public IHttpActionResult SetReasons(SetReasonsModel model)
+ //{
+ // var candidate = db.Users.Find(User.Identity.GetUserId());
+
+ // if (candidate == null)
+ // {
+ // return Ok("no user");
+ // }
+
+ // candidate.Platform = model.reasons;
+ // db.SaveChanges();
+ // return Ok("set");
+ //}
+
+ //[HttpPost]
+ //[Route("API/Account/SetSocial")]
+ //public IHttpActionResult SetSocial(SetSocialModel model)
+ //{
+ // model.facebook = string.IsNullOrWhiteSpace(model.facebook) ? null : model.facebook.Trim();
+ // model.youtube = string.IsNullOrWhiteSpace(model.youtube) ? null : model.youtube.Trim();
+
+ // var candidate = db.Users.Find(User.Identity.GetUserId());
+ // if (candidate == null)
+ // {
+ // return Ok("no user");
+ // }
+
+ // var existingFacebook = candidate.ExternalLinks.FirstOrDefault(link => link.Label == "FB EVENT");
+ // if (existingFacebook != null)
+ // {
+ // candidate.ExternalLinks.Remove(existingFacebook);
+ // }
+
+ // if (model.facebook != null)
+ // {
+ // candidate.ExternalLinks.Add(new ExternalLink()
+ // {
+ // Label = "FB EVENT",
+ // Link = model.facebook
+ // });
+ // }
+
+ // var existingYoutube = candidate.ExternalLinks.FirstOrDefault(link => link.Label == "FB EVENT");
+ // if (existingYoutube != null)
+ // {
+ // candidate.ExternalLinks.Remove(existingYoutube);
+ // }
+
+ // if (model.youtube != null)
+ // {
+ // candidate.ExternalLinks.Add(new ExternalLink()
+ // {
+ // Label = "CAMPAIGN VIDEO",
+ // Link = model.youtube
+ // });
+ // }
+ // db.SaveChanges();
+
+ // return Ok("set");
+ //}
+
+ //[HttpPost]
+ //[Route("API/Account/Register")]
+ //[AllowAnonymous]
+ //public async Task<IHttpActionResult> Register(RegisterModel model)
+ //{
+ // return null;
+ // using (var userManager = new UserManager<Candidate>(
+ // new Microsoft.AspNet.Identity.EntityFramework.UserStore<Candidate>(db)))
+ // {
+ // var errors = new List<string>();
+
+ // // TODO: Should be validating with ModelState
+ // if (model.Password.Length <= 6) errors.Add("Password");
+ // //if (!(model.Year <= 2020 && model.Year >= 2018)) errors.Add("Year");
+ // if (string.IsNullOrWhiteSpace(model.Position) || model.Position.Length > 50) errors.Add("Position");
+ // model.Position = model.Position.ToLower();
+ // if (string.IsNullOrWhiteSpace(model.FullName) || model.FullName.Length > 50) errors.Add("FullName");
+ // if (db.Users.Count(usr => usr.UserName == model.Username) > 0) errors.Add("Username");
+
+ // if (errors.Count > 0)
+ // {
+ // return Ok(string.Join(",", errors) + ",");
+ // }
+
+ // var candidate = new Candidate
+ // {
+ // UserName = model.Username,
+ // Email = model.Email,
+ // GraduationYear = model.Year,
+ // Position = model.Position,
+ // Name = model.FullName,
+ // IsConfirmed = false
+ // };
- var preConf = db.PreConfs.FirstOrDefault(conf => conf.Email.ToLower() == model.Email.ToLower());
- if (preConf != null)
- {
- candidate.IsConfirmed = true;
- db.PreConfs.Remove(preConf);
- }
-
- var result = await userManager.CreateAsync(candidate, model.Password);
- db.SaveChanges();
- return Ok(result.Succeeded ? "GOOD" : string.Join(",", errors));
- }
- }
+ // var preConf = db.PreConfs.FirstOrDefault(conf => conf.Email.ToLower() == model.Email.ToLower());
+ // if (preConf != null)
+ // {
+ // candidate.IsConfirmed = true;
+ // db.PreConfs.Remove(preConf);
+ // }
+
+ // var result = await userManager.CreateAsync(candidate, model.Password);
+ // db.SaveChanges();
+ // return Ok(result.Succeeded ? "GOOD" : string.Join(",", errors));
+ // }
+ //}
protected override void Dispose(bool disposing)
{
diff --git a/LHSCampaign/LHSCampaign/Controllers/AccountController.cs b/LHSCampaign/LHSCampaign/Controllers/AccountController.cs
index 2e9488a..ee7a406 100644
--- a/LHSCampaign/LHSCampaign/Controllers/AccountController.cs
+++ b/LHSCampaign/LHSCampaign/Controllers/AccountController.cs
@@ -67,76 +67,77 @@ namespace LHSCampaign.Controllers
//
// POST: /Account/Login
- [HttpPost]
- [AllowAnonymous]
- [ValidateAntiForgeryToken]
- public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
- {
- if (!ModelState.IsValid)
- {
- return View(model);
- }
-
- // This doesn't count login failures towards account lockout
- // To enable password failures to trigger account lockout, change to shouldLockout: true
- var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);
- switch (result)
- {
- case SignInStatus.Success:
- return RedirectToLocal(returnUrl);
- case SignInStatus.LockedOut:
- return View("Lockout");
- case SignInStatus.RequiresVerification:
- return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
- case SignInStatus.Failure:
- default:
- ModelState.AddModelError("", "Invalid login attempt.");
- return View(model);
- }
- }
-
- //
- // GET: /Account/VerifyCode
- [AllowAnonymous]
- public async Task<ActionResult> VerifyCode(string provider, string returnUrl, bool rememberMe)
- {
- // Require that the user has already logged in via username/password or external login
- if (!await SignInManager.HasBeenVerifiedAsync())
- {
- return View("Error");
- }
- return View(new VerifyCodeViewModel { Provider = provider, ReturnUrl = returnUrl, RememberMe = rememberMe });
- }
-
- //
- // POST: /Account/VerifyCode
- [HttpPost]
- [AllowAnonymous]
- [ValidateAntiForgeryToken]
- public async Task<ActionResult> VerifyCode(VerifyCodeViewModel model)
- {
- if (!ModelState.IsValid)
- {
- return View(model);
- }
-
- // The following code protects for brute force attacks against the two factor codes.
- // If a user enters incorrect codes for a specified amount of time then the user account
- // will be locked out for a specified amount of time.
- // You can configure the account lockout settings in IdentityConfig
- var result = await SignInManager.TwoFactorSignInAsync(model.Provider, model.Code, isPersistent: model.RememberMe, rememberBrowser: model.RememberBrowser);
- switch (result)
- {
- case SignInStatus.Success:
- return RedirectToLocal(model.ReturnUrl);
- case SignInStatus.LockedOut:
- return View("Lockout");
- case SignInStatus.Failure:
- default:
- ModelState.AddModelError("", "Invalid code.");
- return View(model);
- }
- }
+ //[HttpPost]
+ //[AllowAnonymous]
+ //[ValidateAntiForgeryToken]
+ //public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
+ //{
+ // return null;
+ // if (!ModelState.IsValid)
+ // {
+ // return View(model);
+ // }
+
+ // // This doesn't count login failures towards account lockout
+ // // To enable password failures to trigger account lockout, change to shouldLockout: true
+ // var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);
+ // switch (result)
+ // {
+ // case SignInStatus.Success:
+ // return RedirectToLocal(returnUrl);
+ // case SignInStatus.LockedOut:
+ // return View("Lockout");
+ // case SignInStatus.RequiresVerification:
+ // return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
+ // case SignInStatus.Failure:
+ // default:
+ // ModelState.AddModelError("", "Invalid login attempt.");
+ // return View(model);
+ // }
+ //}
+
+ ////
+ //// GET: /Account/VerifyCode
+ //[AllowAnonymous]
+ //public async Task<ActionResult> VerifyCode(string provider, string returnUrl, bool rememberMe)
+ //{
+ // // Require that the user has already logged in via username/password or external login
+ // if (!await SignInManager.HasBeenVerifiedAsync())
+ // {
+ // return View("Error");
+ // }
+ // return View(new VerifyCodeViewModel { Provider = provider, ReturnUrl = returnUrl, RememberMe = rememberMe });
+ //}
+
+ ////
+ //// POST: /Account/VerifyCode
+ //[HttpPost]
+ //[AllowAnonymous]
+ //[ValidateAntiForgeryToken]
+ //public async Task<ActionResult> VerifyCode(VerifyCodeViewModel model)
+ //{
+ // if (!ModelState.IsValid)
+ // {
+ // return View(model);
+ // }
+
+ // // The following code protects for brute force attacks against the two factor codes.
+ // // If a user enters incorrect codes for a specified amount of time then the user account
+ // // will be locked out for a specified amount of time.
+ // // You can configure the account lockout settings in IdentityConfig
+ // var result = await SignInManager.TwoFactorSignInAsync(model.Provider, model.Code, isPersistent: model.RememberMe, rememberBrowser: model.RememberBrowser);
+ // switch (result)
+ // {
+ // case SignInStatus.Success:
+ // return RedirectToLocal(model.ReturnUrl);
+ // case SignInStatus.LockedOut:
+ // return View("Lockout");
+ // case SignInStatus.Failure:
+ // default:
+ // ModelState.AddModelError("", "Invalid code.");
+ // return View(model);
+ // }
+ //}
//
// GET: /Account/Register
@@ -152,46 +153,47 @@ namespace LHSCampaign.Controllers
//
// POST: /Account/Register
- [HttpPost]
- [AllowAnonymous]
- [ValidateAntiForgeryToken]
- public async Task<ActionResult> Register(RegisterViewModel model)
- {
- if (ModelState.IsValid)
- {
- var user = new Candidate { UserName = model.UserName, Email = model.Email };
- var result = await UserManager.CreateAsync(user, model.Password);
- if (result.Succeeded)
- {
- await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
+ //[HttpPost]
+ //[AllowAnonymous]
+ //[ValidateAntiForgeryToken]
+ //public async Task<ActionResult> Register(RegisterViewModel model)
+ //{
+ // return null;
+ // if (ModelState.IsValid)
+ // {
+ // var user = new Candidate { UserName = model.UserName, Email = model.Email };
+ // var result = await UserManager.CreateAsync(user, model.Password);
+ // if (result.Succeeded)
+ // {
+ // await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
- // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
- // Send an email with this link
- // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
- // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
- // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");
-
- return RedirectToAction("Index", "Default");
- }
- AddErrors(result);
- }
-
- // If we got this far, something failed, redisplay form
- return View(model);
- }
-
- //
- // GET: /Account/ConfirmEmail
- [AllowAnonymous]
- public async Task<ActionResult> ConfirmEmail(string userId, string code)
- {
- if (userId == null || code == null)
- {
- return View("Error");
- }
- var result = await UserManager.ConfirmEmailAsync(userId, code);
- return View(result.Succeeded ? "ConfirmEmail" : "Error");
- }
+ // // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
+ // // Send an email with this link
+ // // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
+ // // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
+ // // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");
+
+ // return RedirectToAction("Index", "Default");
+ // }
+ // AddErrors(result);
+ // }
+
+ // // If we got this far, something failed, redisplay form
+ // return View(model);
+ //}
+
+ ////
+ //// GET: /Account/ConfirmEmail
+ //[AllowAnonymous]
+ //public async Task<ActionResult> ConfirmEmail(string userId, string code)
+ //{
+ // if (userId == null || code == null)
+ // {
+ // return View("Error");
+ // }
+ // var result = await UserManager.ConfirmEmailAsync(userId, code);
+ // return View(result.Succeeded ? "ConfirmEmail" : "Error");
+ //}
//
// GET: /Account/ForgotPassword
@@ -203,213 +205,216 @@ namespace LHSCampaign.Controllers
//
// POST: /Account/ForgotPassword
- [HttpPost]
- [AllowAnonymous]
- [ValidateAntiForgeryToken]
- public async Task<ActionResult> ForgotPassword(ForgotPasswordViewModel model)
- {
- if (ModelState.IsValid)
- {
- var user = await UserManager.FindByNameAsync(model.Email);
- if (user == null || !(await UserManager.IsEmailConfirmedAsync(user.Id)))
- {
- // Don't reveal that the user does not exist or is not confirmed
- return View("ForgotPasswordConfirmation");
- }
-
- // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
- // Send an email with this link
- // string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
- // var callbackUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
- // await UserManager.SendEmailAsync(user.Id, "Reset Password", "Please reset your password by clicking <a href=\"" + callbackUrl + "\">here</a>");
- // return RedirectToAction("ForgotPasswordConfirmation", "Account");
- }
-
- // If we got this far, something failed, redisplay form
- return View(model);
- }
-
- //
- // GET: /Account/ForgotPasswordConfirmation
- [AllowAnonymous]
- public ActionResult ForgotPasswordConfirmation()
- {
- return View();
- }
-
- //
- // GET: /Account/ResetPassword
- [AllowAnonymous]
- public ActionResult ResetPassword(string code)
- {
- return code == null ? View("Error") : View();
- }
-
- //
- // POST: /Account/ResetPassword
- [HttpPost]
- [AllowAnonymous]
- [ValidateAntiForgeryToken]
- public async Task<ActionResult> ResetPassword(ResetPasswordViewModel model)
- {
- if (!ModelState.IsValid)
- {
- return View(model);
- }
- var user = await UserManager.FindByNameAsync(model.Email);
- if (user == null)
- {
- // Don't reveal that the user does not exist
- return RedirectToAction("ResetPasswordConfirmation", "Account");
- }
- var result = await UserManager.ResetPasswordAsync(user.Id, model.Code, model.Password);
- if (result.Succeeded)
- {
- return RedirectToAction("ResetPasswordConfirmation", "Account");
- }
- AddErrors(result);
- return View();
- }
-
- //
- // GET: /Account/ResetPasswordConfirmation
- [AllowAnonymous]
- public ActionResult ResetPasswordConfirmation()
- {
- return View();
- }
-
- //
- // POST: /Account/ExternalLogin
- [HttpPost]
- [AllowAnonymous]
- [ValidateAntiForgeryToken]
- public ActionResult ExternalLogin(string provider, string returnUrl)
- {
- // Request a redirect to the external login provider
- return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl }));
- }
-
- //
- // GET: /Account/SendCode
- [AllowAnonymous]
- public async Task<ActionResult> SendCode(string returnUrl, bool rememberMe)
- {
- var userId = await SignInManager.GetVerifiedUserIdAsync();
- if (userId == null)
- {
- return View("Error");
- }
- var userFactors = await UserManager.GetValidTwoFactorProvidersAsync(userId);
- var factorOptions = userFactors.Select(purpose => new SelectListItem { Text = purpose, Value = purpose }).ToList();
- return View(new SendCodeViewModel { Providers = factorOptions, ReturnUrl = returnUrl, RememberMe = rememberMe });
- }
-
- //
- // POST: /Account/SendCode
- [HttpPost]
- [AllowAnonymous]
- [ValidateAntiForgeryToken]
- public async Task<ActionResult> SendCode(SendCodeViewModel model)
- {
- if (!ModelState.IsValid)
- {
- return View();
- }
-
- // Generate the token and send it
- if (!await SignInManager.SendTwoFactorCodeAsync(model.SelectedProvider))
- {
- return View("Error");
- }
- return RedirectToAction("VerifyCode", new { Provider = model.SelectedProvider, ReturnUrl = model.ReturnUrl, RememberMe = model.RememberMe });
- }
-
- //
- // GET: /Account/ExternalLoginCallback
- [AllowAnonymous]
- public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
- {
- var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
- if (loginInfo == null)
- {
- return RedirectToAction("Login");
- }
-
- // Sign in the user with this external login provider if the user already has a login
- var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false);
- switch (result)
- {
- case SignInStatus.Success:
- return RedirectToLocal(returnUrl);
- case SignInStatus.LockedOut:
- return View("Lockout");
- case SignInStatus.RequiresVerification:
- return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = false });
- case SignInStatus.Failure:
- default:
- // If the user does not have an account, then prompt the user to create an account
- ViewBag.ReturnUrl = returnUrl;
- ViewBag.LoginProvider = loginInfo.Login.LoginProvider;
- return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel { Email = loginInfo.Email });
- }
- }
-
- //
- // POST: /Account/ExternalLoginConfirmation
- [HttpPost]
- [AllowAnonymous]
- [ValidateAntiForgeryToken]
- public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)
- {
- if (User.Identity.IsAuthenticated)
- {
- return RedirectToAction("Index", "Manage");
- }
-
- if (ModelState.IsValid)
- {
- // Get the information about the user from the external login provider
- var info = await AuthenticationManager.GetExternalLoginInfoAsync();
- if (info == null)
- {
- return View("ExternalLoginFailure");
- }
- var user = new Candidate { UserName = model.Email, Email = model.Email };
- var result = await UserManager.CreateAsync(user);
- if (result.Succeeded)
- {
- result = await UserManager.AddLoginAsync(user.Id, info.Login);
- if (result.Succeeded)
- {
- await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
- return RedirectToLocal(returnUrl);
- }
- }
- AddErrors(result);
- }
-
- ViewBag.ReturnUrl = returnUrl;
- return View(model);
- }
-
- //
- // POST: /Account/LogOff
- [HttpGet]
+ //[HttpPost]
+ //[AllowAnonymous]
//[ValidateAntiForgeryToken]
- public ActionResult LogOff()
- {
- AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
- return RedirectToAction("Index", "Default");
- }
-
- //
- // GET: /Account/ExternalLoginFailure
- [AllowAnonymous]
- public ActionResult ExternalLoginFailure()
- {
- return View();
- }
+ //public async Task<ActionResult> ForgotPassword(ForgotPasswordViewModel model)
+ //{
+ // return null;
+ // if (ModelState.IsValid)
+ // {
+ // var user = await UserManager.FindByNameAsync(model.Email);
+ // if (user == null || !(await UserManager.IsEmailConfirmedAsync(user.Id)))
+ // {
+ // // Don't reveal that the user does not exist or is not confirmed
+ // return View("ForgotPasswordConfirmation");
+ // }
+
+ // // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
+ // // Send an email with this link
+ // // string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
+ // // var callbackUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
+ // // await UserManager.SendEmailAsync(user.Id, "Reset Password", "Please reset your password by clicking <a href=\"" + callbackUrl + "\">here</a>");
+ // // return RedirectToAction("ForgotPasswordConfirmation", "Account");
+ // }
+
+ // // If we got this far, something failed, redisplay form
+ // return View(model);
+ //}
+
+ ////
+ //// GET: /Account/ForgotPasswordConfirmation
+ //[AllowAnonymous]
+ //public ActionResult ForgotPasswordConfirmation()
+ //{
+ // return View();
+ //}
+
+ ////
+ //// GET: /Account/ResetPassword
+ //[AllowAnonymous]
+ //public ActionResult ResetPassword(string code)
+ //{
+ // return code == null ? View("Error") : View();
+ //}
+
+ ////
+ //// POST: /Account/ResetPassword
+ //[HttpPost]
+ //[AllowAnonymous]
+ //[ValidateAntiForgeryToken]
+ //public async Task<ActionResult> ResetPassword(ResetPasswordViewModel model)
+ //{
+ // return null;
+ // if (!ModelState.IsValid)
+ // {
+ // return View(model);
+ // }
+ // var user = await UserManager.FindByNameAsync(model.Email);
+ // if (user == null)
+ // {
+ // // Don't reveal that the user does not exist
+ // return RedirectToAction("ResetPasswordConfirmation", "Account");
+ // }
+ // var result = await UserManager.ResetPasswordAsync(user.Id, model.Code, model.Password);
+ // if (result.Succeeded)
+ // {
+ // return RedirectToAction("ResetPasswordConfirmation", "Account");
+ // }
+ // AddErrors(result);
+ // return View();
+ //}
+
+ ////
+ //// GET: /Account/ResetPasswordConfirmation
+ //[AllowAnonymous]
+ //public ActionResult ResetPasswordConfirmation()
+ //{
+ // return View();
+ //}
+
+ ////
+ //// POST: /Account/ExternalLogin
+ //[HttpPost]
+ //[AllowAnonymous]
+ //[ValidateAntiForgeryToken]
+ //public ActionResult ExternalLogin(string provider, string returnUrl)
+ //{
+ // // Request a redirect to the external login provider
+ // return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl }));
+ //}
+
+ ////
+ //// GET: /Account/SendCode
+ //[AllowAnonymous]
+ //public async Task<ActionResult> SendCode(string returnUrl, bool rememberMe)
+ //{
+ // return null;
+ // var userId = await SignInManager.GetVerifiedUserIdAsync();
+ // if (userId == null)
+ // {
+ // return View("Error");
+ // }
+ // var userFactors = await UserManager.GetValidTwoFactorProvidersAsync(userId);
+ // var factorOptions = userFactors.Select(purpose => new SelectListItem { Text = purpose, Value = purpose }).ToList();
+ // return View(new SendCodeViewModel { Providers = factorOptions, ReturnUrl = returnUrl, RememberMe = rememberMe });
+ //}
+
+ ////
+ //// POST: /Account/SendCode
+ //[HttpPost]
+ //[AllowAnonymous]
+ //[ValidateAntiForgeryToken]
+ //public async Task<ActionResult> SendCode(SendCodeViewModel model)
+ //{
+ // if (!ModelState.IsValid)
+ // {
+ // return View();
+ // }
+
+ // // Generate the token and send it
+ // if (!await SignInManager.SendTwoFactorCodeAsync(model.SelectedProvider))
+ // {
+ // return View("Error");
+ // }
+ // return RedirectToAction("VerifyCode", new { Provider = model.SelectedProvider, ReturnUrl = model.ReturnUrl, RememberMe = model.RememberMe });
+ //}
+
+ ////
+ //// GET: /Account/ExternalLoginCallback
+ //[AllowAnonymous]
+ //public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
+ //{
+ // var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
+ // if (loginInfo == null)
+ // {
+ // return RedirectToAction("Login");
+ // }
+
+ // // Sign in the user with this external login provider if the user already has a login
+ // var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false);
+ // switch (result)
+ // {
+ // case SignInStatus.Success:
+ // return RedirectToLocal(returnUrl);
+ // case SignInStatus.LockedOut:
+ // return View("Lockout");
+ // case SignInStatus.RequiresVerification:
+ // return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = false });
+ // case SignInStatus.Failure:
+ // default:
+ // // If the user does not have an account, then prompt the user to create an account
+ // ViewBag.ReturnUrl = returnUrl;
+ // ViewBag.LoginProvider = loginInfo.Login.LoginProvider;
+ // return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel { Email = loginInfo.Email });
+ // }
+ //}
+
+ ////
+ //// POST: /Account/ExternalLoginConfirmation
+ //[HttpPost]
+ //[AllowAnonymous]
+ //[ValidateAntiForgeryToken]
+ //public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)
+ //{
+ // if (User.Identity.IsAuthenticated)
+ // {
+ // return RedirectToAction("Index", "Manage");
+ // }
+
+ // if (ModelState.IsValid)
+ // {
+ // // Get the information about the user from the external login provider
+ // var info = await AuthenticationManager.GetExternalLoginInfoAsync();
+ // if (info == null)
+ // {
+ // return View("ExternalLoginFailure");
+ // }
+ // var user = new Candidate { UserName = model.Email, Email = model.Email };
+ // var result = await UserManager.CreateAsync(user);
+ // if (result.Succeeded)
+ // {
+ // result = await UserManager.AddLoginAsync(user.Id, info.Login);
+ // if (result.Succeeded)
+ // {
+ // await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
+ // return RedirectToLocal(returnUrl);
+ // }
+ // }
+ // AddErrors(result);
+ // }
+
+ // ViewBag.ReturnUrl = returnUrl;
+ // return View(model);
+ //}
+
+ ////
+ //// POST: /Account/LogOff
+ //[HttpGet]
+ ////[ValidateAntiForgeryToken]
+ //public ActionResult LogOff()
+ //{
+ // AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
+ // return RedirectToAction("Index", "Default");
+ //}
+
+ ////
+ //// GET: /Account/ExternalLoginFailure
+ //[AllowAnonymous]
+ //public ActionResult ExternalLoginFailure()
+ //{
+ // return View();
+ //}
protected override void Dispose(bool disposing)
{
diff --git a/LHSCampaign/LHSCampaign/Controllers/CandidatesController.cs b/LHSCampaign/LHSCampaign/Controllers/CandidatesController.cs
index 5318ca1..fe38236 100644
--- a/LHSCampaign/LHSCampaign/Controllers/CandidatesController.cs
+++ b/LHSCampaign/LHSCampaign/Controllers/CandidatesController.cs
@@ -21,7 +21,7 @@ namespace LHSCampaign.Controllers
(Request.Cookies.AllKeys.Contains("selected-class") ?
int.Parse(Request.Cookies["selected-class"].Value) : 0);
- if (classOf < 0 || classOf > 1)
+ if (classOf < 2018 || classOf > 2020)
{
classOf = 0;
}
diff --git a/LHSCampaign/LHSCampaign/Controllers/ManageController.cs b/LHSCampaign/LHSCampaign/Controllers/ManageController.cs
index e7bf504..8bfd518 100644
--- a/LHSCampaign/LHSCampaign/Controllers/ManageController.cs
+++ b/LHSCampaign/LHSCampaign/Controllers/ManageController.cs
@@ -12,124 +12,127 @@ namespace LHSCampaign.Controllers
{
private LCDb db = new LCDb();
- public ActionResult Candidate()
- {
- var candidate = db.Users.Find(User.Identity.GetUserId());
- if (candidate == null)
- {
- return RedirectToAction("Class", "Candidates");
- }
+ //public ActionResult Candidate()
+ //{
+ // var candidate = db.Users.Find(User.Identity.GetUserId());
+ // if (candidate == null)
+ // {
+ // return RedirectToAction("Class", "Candidates");
+ // }
- var model = new CandidateViewModel(candidate);
- var existingFacebook = candidate.ExternalLinks.FirstOrDefault(link => link.Label == "FB EVENT")?.Link;
- ViewBag.SocialLink = string.IsNullOrWhiteSpace(existingFacebook) ? "" : existingFacebook;
-
- if (TempData.ContainsKey("Uploaded"))
- {
- ViewBag.Uploaded = (bool)TempData["Uploaded"];
- }
- else
- {
- ViewBag.Uploaded = false;
- }
-
- return View(model);
- }
-
- // Thanks! http://stackoverflow.com/questions/5193842/file-upload-asp-net-mvc-3-0
- private bool UploadPicture(HttpPostedFileBase file, Candidate candidate, string folderPath, bool isProfile)
- {
- var allowedExts = new[] { ".jpg", ".png", ".gif", ".jpeg" };
-
- // Verify that the Candidate selected a file
- if (file == null || file.FileName == null || file.ContentLength <= 0)
- {
- return false;
- }
-
- var extension = Path.GetExtension(file.FileName).ToLower();
- if (!allowedExts.Contains(extension))
- {
- return false;
- }
-
- var imagesFolder = Server.MapPath(folderPath);
- var path = imagesFolder + candidate.Id + extension;
-
- Directory.CreateDirectory(imagesFolder);
-
- // Remove the existing picture and log an image change
- if (isProfile && candidate.ProfilePicture != null)
- {
- var oldPic = Server.MapPath("~" + candidate.ProfilePicture);
- System.IO.File.Delete(oldPic);
-
- var entry = candidate.ProfilePicture;
- var currLog = db.Log.FirstOrDefault(log => log.Type == "Image Changed/Removed" && log.Entry == entry);
- if (currLog == null)
- {
- db.Log.Add(new LogEntry() // So I can refresh the image in Cloudflare, if necessary
- {
- Type = "Image Changed/Removed",
- Entry = entry
- });
- }
- }
- else if (!isProfile && candidate.CoverPhoto != null)
- {
- var oldPic = Server.MapPath("~" + candidate.CoverPhoto);
- System.IO.File.Delete(oldPic);
-
- var entry = candidate.CoverPhoto;
- var currLog = db.Log.FirstOrDefault(log => log.Type == "Image Changed/Removed" && log.Entry == entry);
- if (currLog == null)
- {
- db.Log.Add(new LogEntry() // So I can refresh the image in Cloudflare, if necessary
- {
- Type = "Image Changed/Removed",
- Entry = entry
- });
- }
- }
-
- file.SaveAs(path); // Upload the new pic
- if (isProfile)
- {
- candidate.ProfilePicture = "/Content/Images/Candidates/" + candidate.Id + extension;
- }
- else
- {
- candidate.CoverPhoto = "/Content/Images/Covers/" + candidate.Id + extension;
- }
- db.SaveChanges();
- return true;
- }
-
- [HttpPost]
- public ActionResult UploadProfile(HttpPostedFileBase file)
- {
- var user = db.Users.Find(User.Identity.GetUserId());
- if (user == null)
- {
- return HttpNotFound();
- }
-
- UploadPicture(file, user, "~/Content/Images/Candidates/", true);
-
- TempData["Uploaded"] = true; // Not the best way to do this, but it'll do for now
- return RedirectToAction("Candidate", controllerName: "Manage");
- }
-
- [HttpPost]
- public ActionResult UploadCover(HttpPostedFileBase file)
- {
- var user = db.Users.Find(User.Identity.GetUserId());
-
- UploadPicture(file, user, "~/Content/Images/Covers/", false);
-
- TempData["Uploaded"] = true;
- return RedirectToAction("Candidate", controllerName: "Manage");
- }
+ // var model = new CandidateViewModel(candidate);
+ // var existingFacebook = candidate.ExternalLinks.FirstOrDefault(link => link.Label == "FB EVENT")?.Link;
+ // ViewBag.SocialLink = string.IsNullOrWhiteSpace(existingFacebook) ? "" : existingFacebook;
+
+ // if (TempData.ContainsKey("Uploaded"))
+ // {
+ // ViewBag.Uploaded = (bool)TempData["Uploaded"];
+ // }
+ // else
+ // {
+ // ViewBag.Uploaded = false;
+ // }
+
+ // return View(model);
+ //}
+
+ //// Thanks! http://stackoverflow.com/questions/5193842/file-upload-asp-net-mvc-3-0
+ //private bool UploadPicture(HttpPostedFileBase file, Candidate candidate, string folderPath, bool isProfile)
+ //{
+ // return false;
+ // var allowedExts = new[] { ".jpg", ".png", ".gif", ".jpeg" };
+
+ // // Verify that the Candidate selected a file
+ // if (file == null || file.FileName == null || file.ContentLength <= 0)
+ // {
+ // return false;
+ // }
+
+ // var extension = Path.GetExtension(file.FileName).ToLower();
+ // if (!allowedExts.Contains(extension))
+ // {
+ // return false;
+ // }
+
+ // var imagesFolder = Server.MapPath(folderPath);
+ // var path = imagesFolder + candidate.Id + extension;
+
+ // Directory.CreateDirectory(imagesFolder);
+
+ // // Remove the existing picture and log an image change
+ // if (isProfile && candidate.ProfilePicture != null)
+ // {
+ // var oldPic = Server.MapPath("~" + candidate.ProfilePicture);
+ // System.IO.File.Delete(oldPic);
+
+ // var entry = candidate.ProfilePicture;
+ // var currLog = db.Log.FirstOrDefault(log => log.Type == "Image Changed/Removed" && log.Entry == entry);
+ // if (currLog == null)
+ // {
+ // db.Log.Add(new LogEntry() // So I can refresh the image in Cloudflare, if necessary
+ // {
+ // Type = "Image Changed/Removed",
+ // Entry = entry
+ // });
+ // }
+ // }
+ // else if (!isProfile && candidate.CoverPhoto != null)
+ // {
+ // var oldPic = Server.MapPath("~" + candidate.CoverPhoto);
+ // System.IO.File.Delete(oldPic);
+
+ // var entry = candidate.CoverPhoto;
+ // var currLog = db.Log.FirstOrDefault(log => log.Type == "Image Changed/Removed" && log.Entry == entry);
+ // if (currLog == null)
+ // {
+ // db.Log.Add(new LogEntry() // So I can refresh the image in Cloudflare, if necessary
+ // {
+ // Type = "Image Changed/Removed",
+ // Entry = entry
+ // });
+ // }
+ // }
+
+ // file.SaveAs(path); // Upload the new pic
+ // if (isProfile)
+ // {
+ // candidate.ProfilePicture = "/Content/Images/Candidates/" + candidate.Id + extension;
+ // }
+ // else
+ // {
+ // candidate.CoverPhoto = "/Content/Images/Covers/" + candidate.Id + extension;
+ // }
+ // db.SaveChanges();
+ // return true;
+ //}
+
+ //[HttpPost]
+ //public ActionResult UploadProfile(HttpPostedFileBase file)
+ //{
+ // return null;
+ // var user = db.Users.Find(User.Identity.GetUserId());
+ // if (user == null)
+ // {
+ // return HttpNotFound();
+ // }
+
+ // UploadPicture(file, user, "~/Content/Images/Candidates/", true);
+
+ // TempData["Uploaded"] = true; // Not the best way to do this, but it'll do for now
+ // return RedirectToAction("Candidate", controllerName: "Manage");
+ //}
+
+ //[HttpPost]
+ //public ActionResult UploadCover(HttpPostedFileBase file)
+ //{
+ // return null;
+ // var user = db.Users.Find(User.Identity.GetUserId());
+
+ // UploadPicture(file, user, "~/Content/Images/Covers/", false);
+
+ // TempData["Uploaded"] = true;
+ // return RedirectToAction("Candidate", controllerName: "Manage");
+ //}
protected override void Dispose(bool disposing)
{
diff --git a/LHSCampaign/LHSCampaign/LHSCampaign.csproj b/LHSCampaign/LHSCampaign/LHSCampaign.csproj
index 7b79b8d..6eb3a63 100644
--- a/LHSCampaign/LHSCampaign/LHSCampaign.csproj
+++ b/LHSCampaign/LHSCampaign/LHSCampaign.csproj
@@ -260,7 +260,8 @@
<Content Include="Content\Styles\Site\Login\index.less" />
<Content Include="Content\Styles\Site\Login\login.less" />
<Content Include="Content\Scripts\jQuery\jquery-1.10.2.min.map" />
- <None Include="Properties\PublishProfiles\lhscampaign.cf - Web Deploy.pubxml" />
+ <None Include="Properties\PublishProfiles\2017co.lhscampaign.cf - Web Deploy.pubxml" />
+ <None Include="Properties\PublishProfiles\FS.pubxml" />
<None Include="Scripts\jquery-1.10.2.intellisense.js" />
<Content Include="Scripts\jquery-1.10.2.js" />
<Content Include="Scripts\jquery-1.10.2.min.js" />
diff --git a/LHSCampaign/LHSCampaign/Views/Account/Login.cshtml b/LHSCampaign/LHSCampaign/Views/Account/Login.cshtml
index 2c76607..fd668f6 100644
--- a/LHSCampaign/LHSCampaign/Views/Account/Login.cshtml
+++ b/LHSCampaign/LHSCampaign/Views/Account/Login.cshtml
@@ -42,6 +42,8 @@
<button id="register">SIGN IN</button>
}
+
+ <h2>Please note - this form does not work on the archive</h2>
</main>
</body>
</html> \ No newline at end of file
diff --git a/LHSCampaign/LHSCampaign/Views/Account/Register.cshtml b/LHSCampaign/LHSCampaign/Views/Account/Register.cshtml
index bab658d..fdc88f6 100644
--- a/LHSCampaign/LHSCampaign/Views/Account/Register.cshtml
+++ b/LHSCampaign/LHSCampaign/Views/Account/Register.cshtml
@@ -2,7 +2,7 @@
@{
ViewBag.Title = "LHSCampaign - Register";
Layout = null;
- var Freshmen = true;
+ var Freshmen = false;
}
<!DOCTYPE html>
<html>
@@ -106,6 +106,8 @@
<button id="register">SIGN UP</button>
@*<p id="afterwards">We'll send you an email within 24 hours to activate your campaign account. This is to avoid spammers.</p>*@
+
+ <h2>Please note - this form does not work on the archive</h2>
</main>
<script type="text/javascript">
@@ -121,7 +123,7 @@
var email = $("#email").val();
var year = $("#year-picker .selected");
if (year.length == 0) {
- alert("Please select a class!");
+ alert("Please select a school!");
return;
} else {
year = parseInt(year.attr("data-year"));
diff --git a/LHSCampaign/LHSCampaign/Views/Candidates/Class.cshtml b/LHSCampaign/LHSCampaign/Views/Candidates/Class.cshtml
index 7b15e7d..8cfa801 100644
--- a/LHSCampaign/LHSCampaign/Views/Candidates/Class.cshtml
+++ b/LHSCampaign/LHSCampaign/Views/Candidates/Class.cshtml
@@ -2,7 +2,7 @@
@{
Layout = null;
var ASB = false;
- var Freshmen = true;
+ var Freshmen = false;
}
<!DOCTYPE html>
@@ -30,7 +30,7 @@
@if (!ASB)
{
<ul id="class-picker" data-selected="@(ViewBag.Year)">
- @for (var i = 0; i <= 1; i++)
+ @for (var i = 2020; i >= 2018; i--)
{
var name = i == 0 ? "Miller" : "Other Schools";
if (!Freshmen)
@@ -52,7 +52,7 @@
<a href="~/Account/LogIn">click here if you're a candidate</a>
</header>
- @*<div id="position-tabs">
+ <div id="position-tabs">
@if (ASB)
{
<div class="selected" style="padding-right: 20px;">
@@ -90,14 +90,13 @@
}
</div>
<div>president</div>
- </div>*@
+ </div>
<div class="tab-content" data-tab="no-peeps">
- @*<h1>No one has signed up for this position yet.</h1>*@
- <h1>Campaigning will begin soon</h1>
+ <h1>No one has signed up for this position yet.</h1>
</div>
- @if (false)
+ @if (true)
{
foreach (var position in Model.Positions)
{
@@ -167,6 +166,10 @@
Have any questions or concerns? Reach out to us at <a href="mailto:support@lhscampaign.ml">support@lhscampaign.ml</a>.
</p>
+ <p>
+ Finally, please note this is an archive of a previous campaign season and thus many features may not work correctly.
+ </p>
+
<div id="class-options">
@if (ASB)
{
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback