Fixing Recursive SQL Select
Dieser Commit ist enthalten in:
Ursprung
6607b736ee
Commit
4dd593243e
@ -19,6 +19,8 @@
|
||||
|
||||
package de.steamwar.bungeecore.sql;
|
||||
|
||||
import de.steamwar.bungeecore.BungeeCore;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Timestamp;
|
||||
@ -27,7 +29,7 @@ import java.util.*;
|
||||
public class Punishment {
|
||||
|
||||
public static Punishment getPunishmentOfPlayer(int user, PunishmentType type) {
|
||||
ResultSet set = SQL.select("SELECT * FROM `Punishments` WHERE EndTime < NOW() AND UserId = ? AND Type = ? ORDER BY PunishmentId DESC LIMIT 1", user, type.name());
|
||||
ResultSet set = SQL.select("SELECT * FROM Punishments WHERE UserId = ? AND Type = ? ORDER BY PunishmentId DESC LIMIT 1", user, type.name());
|
||||
try {
|
||||
if(!set.next())
|
||||
return null;
|
||||
@ -38,17 +40,14 @@ public class Punishment {
|
||||
}
|
||||
|
||||
public static Map<PunishmentType, Punishment> getPunishmentsOfPlayer(int user) {
|
||||
ResultSet set = SQL.select("SELECT * FROM Punishments WHERE PunishmentId IN (SELECT MAX(PunishmentId) FROM Punishments WHERE UserId = ? GROUP BY Type)", user);
|
||||
try {
|
||||
Map<PunishmentType, Punishment> punishmentMap = new HashMap<>();
|
||||
while (set.next()) {
|
||||
Punishment punishment = new Punishment(set);
|
||||
punishmentMap.put(punishment.getType(), punishment);
|
||||
for (PunishmentType type : PunishmentType.values()) {
|
||||
Punishment punishment = getPunishmentOfPlayer(user, type);
|
||||
if(punishment == null)
|
||||
continue;
|
||||
punishmentMap.put(type, punishment);
|
||||
}
|
||||
return punishmentMap;
|
||||
} catch (SQLException e) {
|
||||
throw new SecurityException("Could not Load Punishments", e);
|
||||
}
|
||||
}
|
||||
|
||||
public static List<Punishment> getAllPunishmentsOfPlayer(int user) {
|
||||
@ -71,12 +70,13 @@ public class Punishment {
|
||||
}
|
||||
|
||||
private final Timestamp startTime;
|
||||
private final Timestamp endTime;
|
||||
private Timestamp endTime;
|
||||
private final PunishmentType type;
|
||||
private final int user;
|
||||
private final String reason;
|
||||
private final int id;
|
||||
private String reason;
|
||||
private final int punisher;
|
||||
private final boolean perma;
|
||||
private boolean perma;
|
||||
|
||||
private Punishment(ResultSet set) throws SQLException {
|
||||
user = set.getInt("UserId");
|
||||
@ -86,6 +86,7 @@ public class Punishment {
|
||||
endTime = set.getTimestamp("EndTime");
|
||||
punisher = set.getInt("Punisher");
|
||||
perma = set.getBoolean("Perma");
|
||||
id = set.getInt("PunishmentId");
|
||||
}
|
||||
|
||||
public Timestamp getStartTime() {
|
||||
@ -116,6 +117,36 @@ public class Punishment {
|
||||
return perma;
|
||||
}
|
||||
|
||||
public void updateEndTime(int from, String reason, Timestamp newUpdate, boolean perma) {
|
||||
StringBuilder newReason = new StringBuilder(reason);
|
||||
if(newUpdate.before(endTime))
|
||||
newReason.append(" verkürtz vom ")
|
||||
.append(getBantime())
|
||||
.append(" von ")
|
||||
.append(SteamwarUser.get(from).getUserName())
|
||||
.append(" Grund: ")
|
||||
.append(reason);
|
||||
else
|
||||
newReason.append(" verlängert vom ")
|
||||
.append(getBantime())
|
||||
.append(" von ")
|
||||
.append(SteamwarUser.get(from).getUserName())
|
||||
.append(" Grund: ")
|
||||
.append(reason);
|
||||
|
||||
SQL.update("UPDATE Punishments SET EndTime = ?, Reason = ?, Perma = ? WHERE PunishmentId = ?", newUpdate, newReason.toString(), perma, id);
|
||||
this.reason = newReason.toString();
|
||||
this.perma = perma;
|
||||
this.endTime = newUpdate;
|
||||
}
|
||||
|
||||
public String getBantime() {
|
||||
if(perma)
|
||||
return "Permanent";
|
||||
else
|
||||
return endTime.toLocalDateTime().format(BungeeCore.DATE_FORMAT);
|
||||
}
|
||||
|
||||
public enum PunishmentType {
|
||||
Ban,
|
||||
Mute;
|
||||
|
@ -189,6 +189,10 @@ public class SteamwarUser {
|
||||
}
|
||||
|
||||
public void ban(Timestamp time, String banReason, int from, boolean perma){
|
||||
if(isBanned()) {
|
||||
punishments.get(Punishment.PunishmentType.Ban).updateEndTime(from, banReason, time, perma);
|
||||
return;
|
||||
}
|
||||
punishments.remove(Punishment.PunishmentType.Ban);
|
||||
punishments.put(Punishment.PunishmentType.Ban, Punishment.createPunishment(id, from, Punishment.PunishmentType.Ban, banReason, time, perma));
|
||||
|
||||
@ -201,6 +205,10 @@ public class SteamwarUser {
|
||||
}
|
||||
|
||||
public void mute(Timestamp time, String muteReason, int from, boolean perma){
|
||||
if(isMuted()) {
|
||||
punishments.get(Punishment.PunishmentType.Ban).updateEndTime(from, muteReason, time, perma);
|
||||
return;
|
||||
}
|
||||
punishments.remove(Punishment.PunishmentType.Mute);
|
||||
punishments.put(Punishment.PunishmentType.Mute, Punishment.createPunishment(id, from, Punishment.PunishmentType.Mute, muteReason, time, perma));
|
||||
}
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren