mirror of
https://github.com/HangarMC/Hangar.git
synced 2025-01-30 14:30:08 +08:00
visibility chng reason shows on project pg
This commit is contained in:
parent
0f8208addf
commit
b4229370fe
@ -1,5 +1,6 @@
|
||||
[#ftl]
|
||||
[#-- @implicitly included --]
|
||||
[#-- @ftlvariable name="markdownService" type="me.minidigger.hangar.service.MarkdownService" --]
|
||||
[#-- @ftlvariable name="utils" type="me.minidigger.hangar.util.TemplateHelper" --]
|
||||
[#-- @ftlvariable name="@helper" type="freemarker.template.TemplateHashModel" --]
|
||||
[#-- @ftlvariable name="alerts" type="java.util.Map" --]
|
||||
|
@ -70,6 +70,7 @@ public class ApplicationController extends HangarController {
|
||||
return null; // TODO implement
|
||||
}
|
||||
|
||||
@GlobalPermission(NamedPermission.REVIEWER)
|
||||
@Secured("ROLE_USER")
|
||||
@RequestMapping("/admin/approval/projects")
|
||||
public Object showProjectVisibility() {
|
||||
|
@ -17,7 +17,13 @@ public class StringToEnumConverterFactory implements ConverterFactory<String, En
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public T convert(String s) {
|
||||
return (T) Enum.valueOf(this.enumType, s.trim().toUpperCase());
|
||||
int ordinal;
|
||||
try {
|
||||
ordinal = Integer.parseInt(s);
|
||||
return enumType.getEnumConstants()[ordinal];
|
||||
} catch (NumberFormatException e) {
|
||||
return (T) Enum.valueOf(this.enumType, s.trim().toUpperCase());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,7 @@ package me.minidigger.hangar.db.dao;
|
||||
|
||||
import me.minidigger.hangar.db.model.ProjectVersionVisibilityChangesTable;
|
||||
import me.minidigger.hangar.db.model.ProjectVisibilityChangesTable;
|
||||
import org.jdbi.v3.sqlobject.config.KeyColumn;
|
||||
import org.jdbi.v3.sqlobject.config.RegisterBeanMapper;
|
||||
import org.jdbi.v3.sqlobject.customizer.BindBean;
|
||||
import org.jdbi.v3.sqlobject.customizer.Timestamped;
|
||||
@ -10,6 +11,8 @@ import org.jdbi.v3.sqlobject.statement.SqlQuery;
|
||||
import org.jdbi.v3.sqlobject.statement.SqlUpdate;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@Repository
|
||||
@RegisterBeanMapper(ProjectVisibilityChangesTable.class)
|
||||
@RegisterBeanMapper(ProjectVersionVisibilityChangesTable.class)
|
||||
@ -24,8 +27,9 @@ public interface VisibilityDao {
|
||||
@SqlUpdate("UPDATE project_visibility_changes SET resolved_at = :resolvedAt, resolved_by = :resolvedBy") // I think these are the only two things that change after the fact
|
||||
void update(@BindBean ProjectVisibilityChangesTable projectVisibilityChangesTable);
|
||||
|
||||
@SqlQuery("SELECT * FROM project_visibility_changes WHERE project_id = :projectId AND resolved_at IS NULL ORDER BY created_at LIMIT 1")
|
||||
ProjectVisibilityChangesTable getLatestProjectVisibilityChange(long projectId);
|
||||
@KeyColumn("user_name")
|
||||
@SqlQuery("SELECT pvc.*, u.name user_name FROM project_visibility_changes pvc LEFT OUTER JOIN users u ON pvc.created_by = u.id WHERE project_id = :projectId ORDER BY created_at DESC LIMIT 1")
|
||||
Map.Entry<String, ProjectVisibilityChangesTable> getLatestProjectVisibilityChange(long projectId);
|
||||
|
||||
@Timestamped
|
||||
@SqlUpdate("UPDATE project_visibility_changes " +
|
||||
|
@ -1,6 +1,8 @@
|
||||
package me.minidigger.hangar.db.model;
|
||||
|
||||
|
||||
import me.minidigger.hangar.model.Visibility;
|
||||
import org.jdbi.v3.core.enums.EnumByOrdinal;
|
||||
import org.springframework.lang.Nullable;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
@ -16,9 +18,9 @@ public class ProjectVisibilityChangesTable {
|
||||
private OffsetDateTime resolvedAt;
|
||||
@Nullable
|
||||
private Long resolvedBy;
|
||||
private long visibility;
|
||||
private Visibility visibility;
|
||||
|
||||
public ProjectVisibilityChangesTable(long createdBy, long projectId, String comment, @Nullable OffsetDateTime resolvedAt, @Nullable Long resolvedBy, long visibility) {
|
||||
public ProjectVisibilityChangesTable(long createdBy, long projectId, String comment, @Nullable OffsetDateTime resolvedAt, @Nullable Long resolvedBy, Visibility visibility) {
|
||||
this.createdBy = createdBy;
|
||||
this.projectId = projectId;
|
||||
this.comment = comment;
|
||||
@ -89,16 +91,18 @@ public class ProjectVisibilityChangesTable {
|
||||
return resolvedBy;
|
||||
}
|
||||
|
||||
public void setResolvedBy(long resolvedBy) {
|
||||
public void setResolvedBy(Long resolvedBy) {
|
||||
this.resolvedBy = resolvedBy;
|
||||
}
|
||||
|
||||
|
||||
public long getVisibility() {
|
||||
@EnumByOrdinal
|
||||
public Visibility getVisibility() {
|
||||
return visibility;
|
||||
}
|
||||
|
||||
public void setVisibility(long visibility) {
|
||||
@EnumByOrdinal
|
||||
public void setVisibility(Visibility visibility) {
|
||||
this.visibility = visibility;
|
||||
}
|
||||
|
||||
|
@ -7,6 +7,7 @@ import me.minidigger.hangar.db.model.ProjectsTable;
|
||||
import me.minidigger.hangar.db.model.UsersTable;
|
||||
import me.minidigger.hangar.model.Permission;
|
||||
import me.minidigger.hangar.model.Visibility;
|
||||
import me.minidigger.hangar.service.MarkdownService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -134,8 +135,18 @@ public class ProjectData {
|
||||
|
||||
public Map<ProjectMember, UsersTable> filteredMembers(HeaderData headerData) {
|
||||
boolean hasEditMembers = headerData.globalPerm(Permission.ManageSubjectMembers);
|
||||
boolean userIsOwner = headerData.isAuthenticated() ? headerData.getCurrentUser().getId() == projectOwner.getId() : false;
|
||||
boolean userIsOwner = headerData.isAuthenticated() && headerData.getCurrentUser().getId() == projectOwner.getId();
|
||||
if (hasEditMembers || userIsOwner) return members;
|
||||
else return members.entrySet().stream().filter(member -> member.getKey().getIsAccepted()).collect(Collectors.toMap(Entry::getKey, Entry::getValue));
|
||||
}
|
||||
|
||||
public String renderVisibilityChange(MarkdownService markdownService, String fallback) {
|
||||
if (lastVisibilityChange != null) {
|
||||
System.out.println(lastVisibilityChange.getComment());
|
||||
if (!lastVisibilityChange.getComment().isBlank()) {
|
||||
return markdownService.render(lastVisibilityChange.getComment());
|
||||
}
|
||||
}
|
||||
return fallback;
|
||||
}
|
||||
}
|
||||
|
@ -77,8 +77,7 @@ public class ProjectService {
|
||||
projectMembers.forEach(ProjectMember::setUser); // I don't know why the SQL query isn't doing this automatically...
|
||||
List<ProjectFlag> flags = flagService.getProjectFlags(projectsTable.getId());
|
||||
int noteCount = 0; // TODO a whole lot
|
||||
ProjectVisibilityChangesTable lastVisibilityChange = null;
|
||||
String lastVisibilityChangeUser = null;
|
||||
Map.Entry<String, ProjectVisibilityChangesTable> latestProjectVisibilityChangeWithUser = visibilityDao.get().getLatestProjectVisibilityChange(projectsTable.getId());
|
||||
ProjectVersionsTable recommendedVersion = null;
|
||||
String iconUrl = "";
|
||||
long starCount = userDao.get().getProjectStargazers(projectsTable.getId(), 0, null).size();
|
||||
@ -99,8 +98,8 @@ public class ProjectService {
|
||||
projectMembers,
|
||||
flags,
|
||||
noteCount,
|
||||
lastVisibilityChange,
|
||||
lastVisibilityChangeUser,
|
||||
latestProjectVisibilityChangeWithUser.getValue(),
|
||||
latestProjectVisibilityChangeWithUser.getKey(),
|
||||
recommendedVersion,
|
||||
iconUrl,
|
||||
starCount,
|
||||
@ -125,7 +124,7 @@ public class ProjectService {
|
||||
|
||||
visibilityDao.get().updateLatestChange(userService.getCurrentUser().getId(), project.getId());
|
||||
|
||||
visibilityDao.get().insert(new ProjectVisibilityChangesTable(project.getOwnerId(), project.getId(), comment, null, null, newVisibility.getValue()));
|
||||
visibilityDao.get().insert(new ProjectVisibilityChangesTable(project.getOwnerId(), project.getId(), comment, null, null, newVisibility));
|
||||
|
||||
project.setVisibility(newVisibility);
|
||||
projectDao.get().update(project);
|
||||
|
@ -2,14 +2,6 @@
|
||||
<#import "*/utils/hangar.ftlh" as hangar />
|
||||
<#import "*/layout/base.ftlh" as base />
|
||||
|
||||
<#--@import java.time.OffsetDateTime-->
|
||||
|
||||
<#--@import controllers.sugar.Requests.OreRequest-->
|
||||
<#--@import models.viewhelper.ProjectData-->
|
||||
<#--@import ore.OreConfig-->
|
||||
<#--@import util.StringFormatterUtils._-->
|
||||
<#--@(p: ProjectData)(implicit messages: Messages, request: OreRequest[_], config: OreConfig, flash: Flash, assetsFinder: AssetsFinder)-->
|
||||
|
||||
<#assign message><@spring.message "project.flag.plural" /></#assign>
|
||||
<@base.base title="${message}">
|
||||
<div class="row">
|
||||
|
@ -9,6 +9,7 @@ Base template for Project overview.
|
||||
<#assign Permission=@helper["me.minidigger.hangar.model.Permission"]>
|
||||
<#assign FlagReason=@helper["me.minidigger.hangar.model.FlagReason"]>
|
||||
<#macro view p sp active noButtons=false additionalScripts="" additionalStyling="">
|
||||
<#-- @ftlvariable name="p" type="me.minidigger.hangar.model.viewhelpers.ProjectData" -->
|
||||
<#-- @ftlvariable name="sp" type="me.minidigger.hangar.model.viewhelpers.ScopedProjectData" -->
|
||||
<#assign scriptsVar>
|
||||
<script type="text/javascript" src="<@hangar.url "javascripts/projectDetail.js" />"></script>
|
||||
@ -42,15 +43,15 @@ Base template for Project overview.
|
||||
<#if sp.perms(Permission.EditPage)>
|
||||
<a class="btn btn-success pull-right" href="${p.fullSlug}/manage/sendforapproval">Send for approval</a>
|
||||
</#if>
|
||||
<strong><@spring.message "visibility.notice." + p.visibility.getName() /></strong>
|
||||
<br>
|
||||
${p.renderVisibilityChange!"Unknown"}
|
||||
<strong><@spring.message "visibility.notice." + p.visibility.getName() /></strong>
|
||||
<br>
|
||||
${p.renderVisibilityChange(markdownService, "Unknown")}
|
||||
<#else>
|
||||
<#if p.visibility == Visibility.SOFTDELETE>
|
||||
<@spring.messageArgs "visibility.notice." + p.visibility.getName(), [p.lastVisibilityChangeUser] />
|
||||
<#else>
|
||||
<@spring.message "visibility.notice." + p.visibility.getName() />
|
||||
${p.renderVisibilityChange!}
|
||||
${p.renderVisibilityChange(markdownService, "")}
|
||||
</#if>
|
||||
</#if>
|
||||
</div>
|
||||
|
@ -3,18 +3,6 @@
|
||||
<#import "*/layout/base.ftlh" as base />
|
||||
<#import "*/projects/helper/btnHide.ftlh" as hide />
|
||||
|
||||
<#--
|
||||
@import controllers.sugar.Requests.OreRequest
|
||||
@import models.querymodels.ShownFlag
|
||||
@import ore.OreConfig
|
||||
@import ore.models.user.User
|
||||
@import util.StringFormatterUtils._
|
||||
@import util.syntax._
|
||||
@import views.html.utils.userAvatar
|
||||
|
||||
@* project perms for all visibilities *@
|
||||
@(flags: Seq[ShownFlag])(implicit messages: Messages, request: OreRequest[_], config: OreConfig, flash: Flash, assetsFinder: AssetsFinder)
|
||||
-->
|
||||
<#assign scriptsVar>
|
||||
<script type="text/javascript" src="<@hangar.url "javascripts/adminFlags.js" />"></script>
|
||||
<script type="text/javascript" src="<@hangar.url "javascripts/hideProject.js" />"></script>
|
||||
@ -24,7 +12,7 @@
|
||||
<div class="row">
|
||||
<div class="col-md-12 header-flags">
|
||||
<h2>Flags</h2>
|
||||
<h3 class="minor no-flags" <#if flags?size gt 0>style="display: none;"</#if>>
|
||||
<h3 class="minor no-flags" <#if flags?has_content>style="display: none;"</#if>>
|
||||
<i class="far fa-thumbs-up"></i> <@spring.message "user.flags.none" />
|
||||
</h3>
|
||||
</div>
|
||||
@ -36,7 +24,7 @@
|
||||
<li data-flag-id="${flag.flag.id}" class="list-group-item">
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-md-1" style="width: 40px;">
|
||||
<a href="${routes.getRouteUrl("users.showProjects", flag)}">
|
||||
<a href="${routes.getRouteUrl("users.showProjects", flag.reportedBy)}">
|
||||
<#import "*/utils/userAvatar.ftlh" as userAvatar>
|
||||
<@userAvatar.userAvatar userName=flag.reportedBy avatarUrl=utils.format(config.security.api.avatarUrl, flag.reportedBy) clazz="user-avatar-xs"></@userAvatar.userAvatar>
|
||||
</a>
|
||||
|
Loading…
Reference in New Issue
Block a user