bunch of shit, load bunch of data from java instead of hardcoding it, finish create project

This commit is contained in:
MiniDigger 2020-07-14 19:53:13 +02:00
parent 9953c75e87
commit 274d565b03
16 changed files with 210 additions and 78 deletions

View File

@ -1,5 +1,7 @@
[#ftl]
[#-- @implicitly included --]
[#-- @ftlvariable name="routes" type="me.minidigger.hangar.util.RouteHelper" --]
[#-- @ftlvariable name="templateHelper" type="me.minidigger.hangar.util.TemplateHelper" --]
[#-- @ftlvariable name="modelData" type="me.minidigger.hangar.model.ModelData" --]
[#-- @ftlvariable name="rc" type="org.springframework.web.servlet.support.RequestContext" --]
[#-- @ftlvariable name="user" type="me.minidigger.hangar.model.User" --]

View File

@ -6,21 +6,32 @@ import freemarker.template.Configuration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.ModelAndView;
import me.minidigger.hangar.model.ModelData;
import me.minidigger.hangar.service.UserService;
import me.minidigger.hangar.util.RouteHelper;
import me.minidigger.hangar.util.TemplateHelper;
public abstract class HangarController {
@Autowired
private RouteHelper routeHelper;
@Autowired
private UserService userService;
@Autowired
private TemplateHelper templateHelper;
protected ModelAndView fillModel(ModelAndView mav) {
mav.addObject("modelData", new ModelData());
// helpers
mav.addObject("routes", routeHelper);
mav.addObject("templateHelper", templateHelper);
BeansWrapperBuilder builder = new BeansWrapperBuilder(Configuration.VERSION_2_3_30);
builder.setExposeFields(true);
builder.setUseModelCache(true);
mav.addObject("@helper", builder.build().getStaticModels());
// user data
mav.addObject("user", userService.getCurrentUser());
mav.addObject("modelData", userService.getModelData());
return mav;
}
}

View File

@ -8,11 +8,21 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import me.minidigger.hangar.controller.HangarController;
import me.minidigger.hangar.model.Permission;
import me.minidigger.hangar.service.OrgService;
import me.minidigger.hangar.service.UserService;
@Controller
public class ProjectsController extends HangarController {
private final UserService userService;
private final OrgService orgService;
public ProjectsController(UserService userService, OrgService orgService) {
this.userService = userService;
this.orgService = orgService;
}
@PostMapping("/")
public Object createProject() {
return null; // TODO implement createProject request controller
@ -30,7 +40,9 @@ public class ProjectsController extends HangarController {
@RequestMapping("/new")
public Object showCreator() {
return fillModel(new ModelAndView("projects/create"));
ModelAndView mav = new ModelAndView("projects/create");
mav.addObject("createProjectOrgas", orgService.getOrgsWithPerm(userService.getCurrentUser(), Permission.CreateProject));
return fillModel(mav);
}
@RequestMapping("/{author}/{slug}")

View File

@ -13,8 +13,8 @@ import me.minidigger.hangar.controller.HangarController;
public class UsersController extends HangarController {
@RequestMapping("/authors")
public Object showAuthors(@RequestParam Object sort, @RequestParam Object page) {
return null; // TODO implement showAuthors request controller
public ModelAndView showAuthors(@RequestParam(required = false) Object sort, @RequestParam(required = false) Object page) {
return fillModel(new ModelAndView("users/authors")); // TODO implement showAuthors request controller
}
@RequestMapping("/login")

View File

@ -7,48 +7,50 @@ import com.fasterxml.jackson.annotation.JsonValue;
* Gets or Sets NamedPermission
*/
public enum NamedPermission {
VIEW_PUBLIC_INFO("view_public_info", Permission.ViewPublicInfo),
EDIT_OWN_USER_SETTINGS("edit_own_user_settings", Permission.EditOwnUserSettings),
EDIT_API_KEYS("edit_api_keys", Permission.EditApiKeys),
VIEW_PUBLIC_INFO("view_public_info", Permission.ViewPublicInfo, "ViewPublicInfo"),
EDIT_OWN_USER_SETTINGS("edit_own_user_settings", Permission.EditOwnUserSettings, "EditOwnUserSettings"),
EDIT_API_KEYS("edit_api_keys", Permission.EditApiKeys, "EditApiKeys"),
EDIT_SUBJECT_SETTINGS("edit_subject_settings", Permission.EditSubjectSettings),
MANAGE_SUBJECT_MEMBERS("manage_subject_members", Permission.ManageSubjectMembers),
IS_SUBJECT_OWNER("is_subject_owner", Permission.IsSubjectOwner),
IS_SUBJECT_MEMBER("is_subject_member", Permission.IsSubjectMember),
EDIT_SUBJECT_SETTINGS("edit_subject_settings", Permission.EditSubjectSettings, "EditSubjectSettings"),
MANAGE_SUBJECT_MEMBERS("manage_subject_members", Permission.ManageSubjectMembers, "ManageSubjectMembers"),
IS_SUBJECT_OWNER("is_subject_owner", Permission.IsSubjectOwner, "IsSubjectOwner"),
IS_SUBJECT_MEMBER("is_subject_member", Permission.IsSubjectMember, "IsSubjectMember"),
CREATE_PROJECT("create_project", Permission.CreateProject),
EDIT_PAGE("edit_page", Permission.EditPage),
DELETE_PROJECT("delete_project", Permission.DeleteProject),
CREATE_PROJECT("create_project", Permission.CreateProject, "CreateProject"),
EDIT_PAGE("edit_page", Permission.EditPage, "EditPage"),
DELETE_PROJECT("delete_project", Permission.DeleteProject, "DeleteProject"),
CREATE_VERSION("create_version", Permission.CreateVersion),
EDIT_VERSION("edit_version", Permission.EditVersion),
DELETE_VERSION("delete_version", Permission.DeleteVersion),
EDIT_TAGS("edit_tags", Permission.EditTags),
CREATE_VERSION("create_version", Permission.CreateVersion, "CreateVersion"),
EDIT_VERSION("edit_version", Permission.EditVersion, "EditVersion"),
DELETE_VERSION("delete_version", Permission.DeleteVersion, "DeleteVersion"),
EDIT_TAGS("edit_tags", Permission.EditTags, "EditTags"),
CREATE_ORGANIZATION("create_organization", Permission.CreateOrganization),
POST_AS_ORGANIZATION("post_as_organization", Permission.PostAsOrganization),
CREATE_ORGANIZATION("create_organization", Permission.CreateOrganization, "CreateOrganization"),
POST_AS_ORGANIZATION("post_as_organization", Permission.PostAsOrganization, "PostAsOrganization"),
MOD_NOTES_AND_FLAGS("mod_notes_and_flags", Permission.ModNotesAndFlags),
SEE_HIDDEN("see_hidden", Permission.SeeHidden),
IS_STAFF("is_staff", Permission.IsStaff),
REVIEWER("reviewer", Permission.Reviewer),
MOD_NOTES_AND_FLAGS("mod_notes_and_flags", Permission.ModNotesAndFlags, "ModNotesAndFlags"),
SEE_HIDDEN("see_hidden", Permission.SeeHidden, "SeeHidden"),
IS_STAFF("is_staff", Permission.IsStaff, "IsStaff"),
REVIEWER("reviewer", Permission.Reviewer, "Reviewer"),
VIEW_HEALTH("view_health", Permission.ViewHealth),
VIEW_IP("view_ip", Permission.ViewIp),
VIEW_STATS("view_stats", Permission.ViewStats),
VIEW_LOGS("view_logs", Permission.ViewLogs),
VIEW_HEALTH("view_health", Permission.ViewHealth, "ViewHealth"),
VIEW_IP("view_ip", Permission.ViewIp, "ViewIp"),
VIEW_STATS("view_stats", Permission.ViewStats, "ViewStats"),
VIEW_LOGS("view_logs", Permission.ViewLogs, "ViewLogs"),
MANUAL_VALUE_CHANGES("manual_value_changes", Permission.ManualValueChanges),
HARD_DELETE_PROJECT("hard_delete_project", Permission.HardDeleteProject),
HARD_DELETE_VERSION("hard_delete_version", Permission.HardDeleteVersion),
EDIT_ALL_USER_SETTINGS("edit_all_user_settings", Permission.EditAllUserSettings);
MANUAL_VALUE_CHANGES("manual_value_changes", Permission.ManualValueChanges, "ManualValueChanges"),
HARD_DELETE_PROJECT("hard_delete_project", Permission.HardDeleteProject, "HardDeleteProject"),
HARD_DELETE_VERSION("hard_delete_version", Permission.HardDeleteVersion, "HardDeleteVersion"),
EDIT_ALL_USER_SETTINGS("edit_all_user_settings", Permission.EditAllUserSettings, "EditAllUserSettings");
private final String value;
private final Permission permission;
private final String frontendName;
NamedPermission(String value, Permission permission) {
NamedPermission(String value, Permission permission, String frontendName) {
this.value = value;
this.permission = permission;
this.frontendName = frontendName;
}
@Override
@ -60,7 +62,16 @@ public enum NamedPermission {
@JsonCreator
public static NamedPermission fromValue(String text) {
for (NamedPermission b : NamedPermission.values()) {
if (String.valueOf(b.value).equals(text)) {
if (b.value.equals(text)) {
return b;
}
}
return null;
}
public static NamedPermission fromFrontendName(String text) {
for (NamedPermission b : NamedPermission.values()) {
if (b.frontendName.equals(text)) {
return b;
}
}

View File

@ -0,0 +1,48 @@
package me.minidigger.hangar.model;
public class Organization {
private int id;
private int userId;
private String name;
private int ownerId;
public Organization(int id, int userId, String name, int ownerId) {
this.id = id;
this.userId = userId;
this.name = name;
this.ownerId = ownerId;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getOwnerId() {
return ownerId;
}
public void setOwnerId(int ownerId) {
this.ownerId = ownerId;
}
}

View File

@ -39,6 +39,25 @@ public class User {
return this;
}
private String avatarUrl;
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAvatarUrl() {
return avatarUrl;
}
public void setAvatarUrl(String avatarUrl) {
this.avatarUrl = avatarUrl;
}
/**
* Get createdAt
*
@ -56,11 +75,6 @@ public class User {
this.createdAt = createdAt;
}
public User name(String name) {
this.name = name;
return this;
}
/**
* Get name
*

View File

@ -0,0 +1,17 @@
package me.minidigger.hangar.service;
import org.springframework.stereotype.Service;
import java.util.List;
import me.minidigger.hangar.model.Organization;
import me.minidigger.hangar.model.Permission;
import me.minidigger.hangar.model.User;
@Service
public class OrgService {
public List<Organization> getOrgsWithPerm(User user, Permission permission) {
return List.of(new Organization(-1, -1, "TestOrg", -1));
}
}

View File

@ -0,0 +1,24 @@
package me.minidigger.hangar.service;
import org.springframework.stereotype.Service;
import me.minidigger.hangar.model.ModelData;
import me.minidigger.hangar.model.User;
@Service
public class UserService {
public User getCurrentUser() {
User user = new User();
user.setName("Test");
user.setAvatarUrl("https://paper.readthedocs.io/en/latest/_images/papermc_logomark_500.png");
user.setId("dummyid");
return user;
}
public ModelData getModelData() {
ModelData modelData = new ModelData();
return modelData;
}
}

View File

@ -0,0 +1,14 @@
package me.minidigger.hangar.util;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class TemplateHelper {
public Map<String, String> randomSponsor() {
// TODO implement random sponsor stuff
return Map.of("link", "https://minidigger.me", "image", "https://avatars2.githubusercontent.com/u/2185527?s=400&v=4");
}
}

View File

@ -38,8 +38,7 @@
</@form.form>
<#import "*/users/invite/form.ftlh" as userForm>
<#-- <@userForm.form owner=request.headerData.currentUser roleCategory=RoleCategory.Organization />-->
<@userForm.form owner="" roleCategory="" />
<@userForm.form owner=user roleCategory=@helper["me.minidigger.hangar.model.PermissionType"].ORGANIZATION />
<button title="Continue" type="submit" name="create" form="form-continue"
value="<@spring.message "general.continue" />"

View File

@ -1,5 +1,5 @@
<#--
The main entry point of Ore. This page displays a list of Projects that can be
The main entry point of Hangar. This page displays a list of Projects that can be
sorted according to different criteria.
-->
@ -7,15 +7,6 @@ sorted according to different criteria.
<#import "*/utils/hangar.ftlh" as hangar />
<#import "*/layout/base.ftlh" as base>
<#function randomSponsor>
val logos = config.sponge.sponsors
val index = new Random().nextInt(logos.size)
logos(index)
<#-- todo implement random sponsor stuff -->
<#return { "link": "https://minidigger.me", "image": "https://avatars2.githubusercontent.com/u/2185527?s=400&v=4"}>
</#function>
<#macro scripts>
<script src="<@hangar.url "build/home.js" />"></script>
</#macro>
@ -37,7 +28,7 @@ sorted according to different criteria.
<#assign stylesheetsVar><@stylesheets /></#assign>
<#assign metaVar><@meta /></#assign>
<@base.base title="${message}" additionalScripts=scriptsVar additionalMeta=metaVar additionalStyling=stylesheetsVar>
<!-- Header -->
<#-- Header -->
<div class="index-header">
<div class="row centered-content-row">
<div class="col-md-9 ore-banner">
@ -55,7 +46,7 @@ sorted according to different criteria.
<div class="panel sponsor-panel">
<span>Sponsored by</span>
<div class="panel-body">
<#assign sponsor=randomSponsor() />
<#assign sponsor=templateHelper.randomSponsor() />
<a href="${sponsor.link}">
<img class="logo" src="${sponsor.image}" alt="Sponsor" />
</a>

View File

@ -46,7 +46,7 @@
<#-- Right navbar -->
<#if authEnabled>
<ul class="nav navbar-nav navbar-collapse collapse navbar-right">
<#assign cu={ "name": "DumDum", "avatarUrl": "https://paper.readthedocs.io/en/latest/_images/papermc_logomark_500.png"}> <#-- todo login status -->
<#assign cu=user>
<#if cu??>
<li class="dropdown nav-icon new-controls">
<a href="#" class="drop-down-toggle" data-toggle="dropdown">

View File

@ -3,19 +3,7 @@
<#import "*/layout/base.ftlh" as base />
<#--
@*
Page used for uploading and creating new projects.
*@
@import play.twirl.api.Html
@import controllers.sugar.Requests.OreRequest
@import ore.OreConfig
@import ore.data.project.Category
@import ore.db.Model
@import ore.models.organization.Organization
@import ore.models.user.User
@import views.html.helper.{CSRF, form}
@(createProjectOrgas: Seq[Model[Organization]], user: Model[User])(implicit messages: Messages, flash: Flash, request: OreRequest[_], config: OreConfig, assetsFinder: AssetsFinder)
-->
<#assign scriptsVar>
<script type="text/javascript" src="<@hangar.url "javascripts/projectCreateValidate.js" />"></script>
@ -73,9 +61,9 @@ Page used for uploading and creating new projects.
<div class="form-group">
<label for="projectCategory"><@spring.message "project.owner" /></label>
<select id="projectCategory" name="owner" class="form-control">
<option value="${user.id.value}">${user.name}</option>
<option value="${user.id}">${user.name}</option>
<#list createProjectOrgas as orga>
<option value="${orga.id.value}">${orga.name}</option>
<option value="${orga.id}">${orga.name}</option>
</#list>
</select>
</div>

View File

@ -2,6 +2,7 @@
<#import "*/utils/hangar.ftlh" as hangar />
<#import "*/layout/base.ftlh" as base />
<#--
@import java.time.OffsetDateTime
@import controllers.sugar.Requests.OreRequest
@ -17,6 +18,7 @@
@pageSize = @{ config.ore.users.authorPageSize }
@direction = @{ if (ordering.startsWith("-")) "chevron-down" else "chevron-up" }
-->
<#function isActiveSort td>
var sort = ordering

View File

@ -14,15 +14,14 @@
<#macro form owner roleCategory loadedUsers=[]>
<!-- Template row -->
<#import "*/utils/userAvatar.ftlh" as userAvatar>
<#-- Template row -->
<table style="display: none;">
<tbody>
<tr id="result-row">
<td>
<input type="hidden"/>
<#import "*/utils/userAvatar.ftlh" as userAvatar>
<@userAvatar.userAvatar clazz = "user-avatar-xs"/>
<#-- @userAvatar(None, clazz = "user-avatar-xs")-->
<i class="fas fa-times user-cancel"></i>
<a class="username" target="_blank" rel="noopener" href=""></a>
<span>@users.invite.roleSelect(roleCategory)</span>
@ -31,7 +30,7 @@
</tbody>
</table>
<!-- User not found alert (hidden) -->
<#-- User not found alert (hidden) -->
<div class="alert alert-danger alert-dismissible" role="alert" style="display: none;">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
@ -42,10 +41,10 @@
<div class="member-table-container">
<table class="table table-members">
<tbody>
<!-- Owner (not submitted) -->
<#-- Owner (not submitted) -->
<tr>
<td>
@userAvatar(Some(owner.name), owner.avatarUrl, clazz = "user-avatar-xs")
<@userAvatar.userAvatar userName=owner.name avatarUrl=owner.avatarUrl clazz="user-avatar-xs" />
<strong>${owner.name}</strong>
<span><i class="minor"><@spring.message "project.owner" /></i></span>
</td>
@ -55,7 +54,7 @@
<tr>
<td>
<input form="form-continue" type="hidden" value="${user.id}" />
@userAvatar(Some(user.name), user.avatarUrl, clazz = "user-avatar-xs")
<@userAvatar.userAvatar userName=user.name avatarUrl=user.avatarUrl clazz="user-avatar-xs" />
<a target="_blank" rel="noopener" href="${routes.getRouteUrl("users.showProjects", user.name)}">
${user.name}
</a>
@ -64,7 +63,7 @@
</tr>
}
<!-- User search -->
<#-- User search -->
<tr>
<td>@users.invite.userSearch()</td>
</tr>