From e7a0ae20ffe0f73025acb0e9509fd8384599459a Mon Sep 17 00:00:00 2001 From: Gabriel Copat <copatg@cardiff.ac.uk> Date: Thu, 30 Nov 2023 23:29:46 +0000 Subject: [PATCH] Created barebones Userpage, added default images for items in page. User Class and Controller updated to work with page --- .../java/Team5/SmartTowns/users/User.java | 12 +++ .../SmartTowns/users/UserController.java | 14 +-- .../resources/static/css/templatingstyle.css | 26 +++++- src/main/resources/static/css/userProfile.css | 88 ++++++++++++++++++ src/main/resources/static/images/users/0.png | Bin 0 -> 22268 bytes .../templates/rewards/userProfile.html | 49 +++++++++- 6 files changed, 180 insertions(+), 9 deletions(-) create mode 100644 src/main/resources/static/css/userProfile.css create mode 100644 src/main/resources/static/images/users/0.png diff --git a/src/main/java/Team5/SmartTowns/users/User.java b/src/main/java/Team5/SmartTowns/users/User.java index 02611fe0..66722239 100644 --- a/src/main/java/Team5/SmartTowns/users/User.java +++ b/src/main/java/Team5/SmartTowns/users/User.java @@ -4,6 +4,7 @@ import Team5.SmartTowns.rewards.Badge; import Team5.SmartTowns.rewards.Sticker; import lombok.Data; +import java.io.File; import java.util.HashMap; import java.util.Map; @@ -13,6 +14,7 @@ public class User { int id; String email; //Validation would be done by email, since they will have that String name; + String imgPath; Map<Badge, Integer> badgeProgress = new HashMap<>(); // Demonstrates the progress towards a specific badge (0-100) Map<Sticker, Boolean> hasStickers = new HashMap<>(); // True if User has sticker (key) @@ -21,5 +23,15 @@ public class User { this.id = id; this.email = email; this.name = name; + imgPath = findImagePath(); + } + + private String findImagePath(){ + /* Finds the image in the Path folder, if image is not found assigns default image */ + String imgPath = "images/users/" + id + ".jpg"; + String notFoundPath = "../images/users/0.png"; + + File imgFile = new File("src/main/resources/static/" + imgPath); + return imgFile.exists() ? "../" + imgPath : notFoundPath; } } diff --git a/src/main/java/Team5/SmartTowns/users/UserController.java b/src/main/java/Team5/SmartTowns/users/UserController.java index 602fe65d..78c1d94d 100644 --- a/src/main/java/Team5/SmartTowns/users/UserController.java +++ b/src/main/java/Team5/SmartTowns/users/UserController.java @@ -2,6 +2,7 @@ package Team5.SmartTowns.users; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.servlet.ModelAndView; import java.util.List; @@ -10,17 +11,18 @@ import java.util.List; public class UserController { /* TEMPORARY USER LIST --- TODO REPLACE IT WITH DATABASE LIST*/ - List<User> users = List.of( - new User(1, "johndoe@gmail.com", "Chris Redfield"), - new User(2, "johndoe@gmail.com", "Claire Redfield"), + static List<User> users = List.of( + new User(1, "johndoe@gmail.com", "Claire Redfield"), + new User(2, "johndoe@gmail.com", "Albert Wesker"), new User(3, "johndoe@gmail.com", "Leon Kennedy"), new User(4, "johndoe@gmail.com", "Jill Valentine") ); - @GetMapping("/allTrails") - public ModelAndView getUserPage(){ + @GetMapping("/user/{id}") + public ModelAndView getUserPage(@PathVariable int id){ ModelAndView mav = new ModelAndView("rewards/userProfile"); - mav.addObject("trails", users); //Mock data for trails + users.stream().filter(user -> user.getId() == id).findFirst() //Convoluted way of finding the matching user to the id, probably easier to do a hashmap + .ifPresent(result -> mav.addObject("user", result)); return mav; } } diff --git a/src/main/resources/static/css/templatingstyle.css b/src/main/resources/static/css/templatingstyle.css index 1ffc84d4..e2955d7c 100644 --- a/src/main/resources/static/css/templatingstyle.css +++ b/src/main/resources/static/css/templatingstyle.css @@ -1,6 +1,28 @@ +* { + margin:0; + padding:0; + box-sizing: border-box; +} +body { + background: linear-gradient(135deg, #9f74be, #3e126b); + height: 100svh; +} + +main { + background: #1e1e1e; + border-radius: 1vw; + margin-inline: max(1vw, 2em); + margin-block: 1svh; + width: min(90%, 90vw); + padding-block: 2svh; + padding-inline: 1vw; + box-shadow: rgba(0, 0, 0, 0.7) 0 0.5svh max(1vw, 1em); +} + + /* Header */ .headerBar { - border-bottom: 2px rgb(230, 230, 230) solid; + /*border-bottom: 2px rgb(230, 230, 230) solid;*/ margin-bottom: 20px; display: flex; background-color: rgb(84, 33, 128); @@ -63,7 +85,7 @@ footer { display: flex; justify-content: center; background-color: rgb(84, 33, 128); - border-top: 2px rgb(230, 230, 230) solid; + /*border-top: 2px rgb(230, 230, 230) solid;*/ font-size: 1vw; } .footerBar{ diff --git a/src/main/resources/static/css/userProfile.css b/src/main/resources/static/css/userProfile.css new file mode 100644 index 00000000..f86825b1 --- /dev/null +++ b/src/main/resources/static/css/userProfile.css @@ -0,0 +1,88 @@ + + +.userInfo { + display: flex; + flex-direction: column; + padding: min(2vw, 4em); + text-align: center; + + & #userPicture { + width: min(20vw, 20em); + margin-inline: auto; + border-radius: 100%; + border: solid #a2a2a2 4px; + box-shadow: rgba(0, 0, 0, 0.7) 0 0.5svh max(1vw, 1em); + } + + & h1 { + margin: 1svh 25%; + color:white; + border-bottom: #36454F solid 2px; + border-radius: 5vw; + box-shadow: rgba(0, 0, 0, 0.7) 0 0.5svh 1vw -1vw; + } +} + +#badgesBar { + background-color: white; + border-radius: 1vw; + margin-inline: max(4vw, 3rem); + display: flex; + flex-direction: column; + + & h2 { + margin-inline: 5vw; + padding-inline: 2vw; + margin-block: 0.5svh; + box-shadow: rgba(0, 0, 0, 0.7) 0 0.5svh 1vw -1vw; + border-bottom: #36454F solid 2px; + } + + & .badgesContainer { + margin: 1svh 2vw; + padding: 1svh 1vw; + border-inline: solid rgba(194, 98, 188, 0.7) 5px; + border-radius: 10%; + background: linear-gradient(90deg, rgba(255, 215, 0, 0.75), rgba(184, 134, 11, 0.75)); + overflow-x: scroll; + min(18svh, 12em); + align-content: center; + display: flex; + + & .badge { + margin-inline: 3vw; + height: min(18svh, 10em); + + } + + } +} +#stickersBox { + display: flex; + flex-direction: column; + margin-block: 0.5svh; + margin-inline: 0.5vw; + border-radius: 2vw; + background: #9f74be; + & h2 { + font-size: 4em; + text-align: center; + box-shadow: rgba(0, 0, 0, 0.7) 0 2vw 2vw -2vw; + border-bottom: #36454F solid 2px; + margin-block: 1svh; + margin-inline: 25%; + } + & .stickersContainer { + margin-block: 1svh; + display: grid; + grid-template-columns: repeat(4, 1fr); + + & img { + width: 20vw; + + } + } +} +.locked { + filter: grayscale(100%); +} \ No newline at end of file diff --git a/src/main/resources/static/images/users/0.png b/src/main/resources/static/images/users/0.png new file mode 100644 index 0000000000000000000000000000000000000000..75a9de71d2fd7e9b4f8e5a0992d0edeabe50c888 GIT binary patch literal 22268 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 B2IBw# literal 0 HcmV?d00001 diff --git a/src/main/resources/templates/rewards/userProfile.html b/src/main/resources/templates/rewards/userProfile.html index c1eb176b..82c203dc 100644 --- a/src/main/resources/templates/rewards/userProfile.html +++ b/src/main/resources/templates/rewards/userProfile.html @@ -2,9 +2,56 @@ <html lang="en"> <head> <meta charset="UTF-8"> - <title th:text="${user.getName()}"></title> + <title th:text="'VZLA Profile Page of ' + ${user.getName()}"></title> + <link rel="stylesheet" th:href="@{/css/userProfile.css}"> + <link rel="stylesheet" th:href="@{/css/templatingstyle.css}"> </head> <body> +<header></header> + +<main> + <!--PICTURE - DATA - BADGES --> + <div class="userInfo"> + <img th:src="@{${user.getImgPath()}}" + th:alt="${user.getName()}" + id="userPicture" + > + <h1 th:text="${user.getName()}"></h1> + <!--TODO add some progression info here?--> + </div> + <section class="rewards"> <!--Reward lists, badges on top, stickers (larger) on the bottom--> + <article id="badgesBar"> + <h2>Your Badges: </h2> <!--Shows first earned badges, followed by greyed out badges--> + <div class="badgesContainer"> + <img src="../images/badges.png" alt="Badge" class="badge"> + <img src="../images/badges.png" alt="Badge" class="badge"> + <img src="../images/badges.png" alt="Badge" class="badge"> + <img src="../images/badges.png" alt="Badge" class="badge"> + <img src="../images/badges.png" alt="Badge" class="badge"> + <img src="../images/badges.png" alt="Badge" class="badge locked"> + <img src="../images/badges.png" alt="Badge" class="badge locked"> + </div> + </article> + <article id="stickersBox"> <!--Need a controller to show earned stickers --> + <h2> STICKERS! </h2> + <div class="stickersContainer"> + <img src="../images/badges.png" alt="Badge" class="badge"> + <img src="../images/badges.png" alt="Badge" class="badge"> + <img src="../images/badges.png" alt="Badge" class="badge locked"> + <img src="../images/badges.png" alt="Badge" class="badge"> + <img src="../images/badges.png" alt="Badge" class="badge locked"> + <img src="../images/badges.png" alt="Badge" class="badge locked"> + <img src="../images/badges.png" alt="Badge" class="badge"> + </div> + </article> + </section> + +</main> + +<footer></footer> + + + </body> </html> \ No newline at end of file -- GitLab