diff options
| author | Michael <[email protected]> | 2017-03-25 15:59:50 -0400 |
|---|---|---|
| committer | Michael <[email protected]> | 2017-03-25 15:59:50 -0400 |
| commit | 9f238cc47fd5b9ec546b37986371e73d6ed3c626 (patch) | |
| tree | e1d9175d58999ca99d5308c2b42749bab5806581 | |
| parent | 84285d2ffb84f470ab7b09708075427ae31541f0 (diff) | |
| download | project-unite-9f238cc47fd5b9ec546b37986371e73d6ed3c626.tar.gz project-unite-9f238cc47fd5b9ec546b37986371e73d6ed3c626.tar.bz2 project-unite-9f238cc47fd5b9ec546b37986371e73d6ed3c626.zip | |
Avatar system :smiley:
| -rw-r--r-- | Project-Unite/Controllers/ManageController.cs | 61 | ||||
| -rw-r--r-- | Project-Unite/Models/IdentityModels.cs | 18 | ||||
| -rw-r--r-- | Project-Unite/Project-Unite.csproj | 2 | ||||
| -rw-r--r-- | Project-Unite/Views/Manage/Index.cshtml | 2 | ||||
| -rw-r--r-- | Project-Unite/Views/Manage/ListAvatars.cshtml | 22 | ||||
| -rw-r--r-- | Project-Unite/Views/Manage/UploadAvatar.cshtml | 16 |
6 files changed, 120 insertions, 1 deletions
diff --git a/Project-Unite/Controllers/ManageController.cs b/Project-Unite/Controllers/ManageController.cs index 4543307..6ade427 100644 --- a/Project-Unite/Controllers/ManageController.cs +++ b/Project-Unite/Controllers/ManageController.cs @@ -20,6 +20,67 @@ namespace Project_Unite.Controllers { } + public ActionResult SetAvatar(string id) + { + var db = new ApplicationDbContext(); + var usr = db.Users.FirstOrDefault(x => x.Id == User.Identity.GetUserId()); + var avtr = db.UserAvatars.FirstOrDefault(x => x.Id == id); + usr.AvatarUrl = avtr.AvatarUrl; + db.SaveChanges(); + return RedirectToAction("Index"); + } + + public ActionResult UploadAvatar() + { + var model = new UploadImageViewModel(); + return View(model); + } + + [HttpPost] + [ValidateAntiForgeryToken] + public ActionResult UploadAvatar(UploadImageViewModel model) + { + string[] allowedTypes = new[] { ".png", ".jpg", ".bmp", ".jpeg", ".gif" }; + + bool containsAllowedType = !string.IsNullOrWhiteSpace(allowedTypes.FirstOrDefault(x => model.Image.FileName.EndsWith(x))); + if (containsAllowedType == false) + ModelState.AddModelError("UploadImageViewModel", new Exception("File type not allowed.")); + + if (ModelState.IsValid == true) + { + var db = new ApplicationDbContext(); + var usr = db.Users.FirstOrDefault(x => x.Id == User.Identity.GetUserId()); + string avatarRoot = $"~/Uploads/{usr.DisplayName}/Avatars"; + string serverPath = Server.MapPath(avatarRoot); + if (!System.IO.Directory.Exists(serverPath)) + System.IO.Directory.CreateDirectory(serverPath); + + avatarRoot += "/" + model.Image.FileName; + serverPath += "\\" + model.Image.FileName; + + model.Image.SaveAs(serverPath); + + var avatar = new Avatar(); + avatar.Id = Guid.NewGuid().ToString(); + avatar.AvatarUrl = avatarRoot.Remove(0, 1); + avatar.UserId = usr.Id; + avatar.UploadedAt = DateTime.Now; + usr.AvatarUrl = avatar.AvatarUrl; + db.UserAvatars.Add(avatar); + db.SaveChanges(); + return RedirectToAction("Index"); + } + + + return View(model); + } + + public ActionResult ListAvatars() + { + var avatars = new ApplicationDbContext().UserAvatars.Where(x => x.UserId == User.Identity.GetUserId()); + return View(avatars); + } + public ManageController(ApplicationUserManager userManager, ApplicationSignInManager signInManager) { UserManager = userManager; diff --git a/Project-Unite/Models/IdentityModels.cs b/Project-Unite/Models/IdentityModels.cs index cb4a712..c08e4c7 100644 --- a/Project-Unite/Models/IdentityModels.cs +++ b/Project-Unite/Models/IdentityModels.cs @@ -6,6 +6,7 @@ using System.Data.Entity.Infrastructure; using System.Linq; using System.Security.Claims; using System.Threading.Tasks; +using System.Web; using System.Web.Mvc; using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; @@ -19,6 +20,12 @@ namespace Project_Unite.Models public string Followed { get; set; } } + public class UploadImageViewModel + { + [Required(ErrorMessage = "Please select an image to upload.")] + public HttpPostedFileBase Image { get; set; } + } + // You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more. public class ApplicationUser : IdentityUser { @@ -189,11 +196,14 @@ namespace Project_Unite.Models ((IObjectContextAdapter)this).ObjectContext.DeleteObject(obj); } + + public static ApplicationDbContext Create() { return new ApplicationDbContext(); } + public DbSet<Avatar> UserAvatars { get; set; } public DbSet<Skin> Skins { get; set; } public DbSet<Configuration> Configs { get; set; } public DbSet<ShiftoriumUpgrade> ShiftoriumUpgrades { get; set; } @@ -259,4 +269,12 @@ namespace Project_Unite.Models public string UserId { get; set; } public string EngineStoryId { get; set; } } + + public class Avatar + { + public string Id { get; set; } + public string UserId { get; set; } + public string AvatarUrl { get; set; } + public DateTime UploadedAt { get; set; } + } }
\ No newline at end of file diff --git a/Project-Unite/Project-Unite.csproj b/Project-Unite/Project-Unite.csproj index 09c07a5..34ecf81 100644 --- a/Project-Unite/Project-Unite.csproj +++ b/Project-Unite/Project-Unite.csproj @@ -525,6 +525,8 @@ <Content Include="Views\Skins\ViewSkin.cshtml" /> <Content Include="Views\Skins\Index.cshtml" /> <Content Include="Views\Skins\PostSkin.cshtml" /> + <Content Include="Views\Manage\ListAvatars.cshtml" /> + <Content Include="Views\Manage\UploadAvatar.cshtml" /> </ItemGroup> <ItemGroup> <Folder Include="App_Data\" /> diff --git a/Project-Unite/Views/Manage/Index.cshtml b/Project-Unite/Views/Manage/Index.cshtml index 45d097a..75204eb 100644 --- a/Project-Unite/Views/Manage/Index.cshtml +++ b/Project-Unite/Views/Manage/Index.cshtml @@ -27,7 +27,7 @@ <div class="tab-pane active" id="t_profile"> <table class="table"> <tr> - <td><strong>Full name:</strong></td> + <td style="width:35%;"><strong>Full name:</strong></td> <td> @using(Html.BeginForm("ChangeFullName", "Manage")) { diff --git a/Project-Unite/Views/Manage/ListAvatars.cshtml b/Project-Unite/Views/Manage/ListAvatars.cshtml new file mode 100644 index 0000000..d03ea88 --- /dev/null +++ b/Project-Unite/Views/Manage/ListAvatars.cshtml @@ -0,0 +1,22 @@ +@model IEnumerable<Project_Unite.Models.Avatar> + +@{ + ViewBag.Title = "Change avatar"; +} + +<h2>Change avatar</h2> + +<p>You can choose a new avatar on this page - you can set an existing avatar that you've uploaded or upload a new one.</p> + +<div class="row"> + <div class="col-sm-2"> + <a href="@Url.Action("UploadAvatar")" class="btn btn-default" style="width:128px;height:128px;"><span class="glyphicon glyphicon-plus"></span></a> + </div> + + @foreach(var avatar in Model.OrderByDescending(x=>x.UploadedAt)) + { + <div class="col-sm-2"> + <a href="@Url.Action("SetAvatar", "Manage", new { id = avatar.Id })")"><img src="@avatar.AvatarUrl" width="128" height="128" /></a> + </div> + } +</div> diff --git a/Project-Unite/Views/Manage/UploadAvatar.cshtml b/Project-Unite/Views/Manage/UploadAvatar.cshtml new file mode 100644 index 0000000..81e40c4 --- /dev/null +++ b/Project-Unite/Views/Manage/UploadAvatar.cshtml @@ -0,0 +1,16 @@ +@model Project_Unite.Models.UploadImageViewModel +@{ + ViewBag.Title = "Upload avatar"; +} + +<h2>Upload an avatar</h2> + +<p>Let's put a face on your profile, shall we? Upload an image from your local computer and we'll display it as your avatar.</p> + +@using (Html.BeginForm()) +{ + @Html.AntiForgeryToken() + @Html.ValidationSummary() + <p><strong>File to upload: </strong>@Html.TextBoxFor(Model=>Model.Image, new { @class = "form-control", type = "file" })</p> + <input type="submit" class="form-control" value="Upload!" /> +}
\ No newline at end of file |
