summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael <[email protected]>2017-03-25 15:59:50 -0400
committerMichael <[email protected]>2017-03-25 15:59:50 -0400
commit9f238cc47fd5b9ec546b37986371e73d6ed3c626 (patch)
treee1d9175d58999ca99d5308c2b42749bab5806581
parent84285d2ffb84f470ab7b09708075427ae31541f0 (diff)
downloadproject-unite-9f238cc47fd5b9ec546b37986371e73d6ed3c626.tar.gz
project-unite-9f238cc47fd5b9ec546b37986371e73d6ed3c626.tar.bz2
project-unite-9f238cc47fd5b9ec546b37986371e73d6ed3c626.zip
Avatar system :smiley:
-rw-r--r--Project-Unite/Controllers/ManageController.cs61
-rw-r--r--Project-Unite/Models/IdentityModels.cs18
-rw-r--r--Project-Unite/Project-Unite.csproj2
-rw-r--r--Project-Unite/Views/Manage/Index.cshtml2
-rw-r--r--Project-Unite/Views/Manage/ListAvatars.cshtml22
-rw-r--r--Project-Unite/Views/Manage/UploadAvatar.cshtml16
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