mirror of
https://github.com/kiranhart/Auction-House.git
synced 2025-02-12 18:41:19 +01:00
admin log menu
This commit is contained in:
parent
c3198e8b4e
commit
08e0e0ead0
@ -3,6 +3,7 @@ package ca.tweetzy.auctionhouse.auction;
|
||||
import ca.tweetzy.auctionhouse.auction.enums.AdminAction;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
@ -16,12 +17,11 @@ import java.util.UUID;
|
||||
@Getter
|
||||
public final class AuctionAdminLog {
|
||||
|
||||
private final int id;
|
||||
private final UUID admin;
|
||||
private final String adminName;
|
||||
private final UUID target;
|
||||
private final String targetName;
|
||||
private final String itemName;
|
||||
private final ItemStack item;
|
||||
private final UUID itemId;
|
||||
private final AdminAction adminAction;
|
||||
private final long time;
|
||||
|
@ -3,6 +3,7 @@ package ca.tweetzy.auctionhouse.commands;
|
||||
import ca.tweetzy.auctionhouse.AuctionHouse;
|
||||
import ca.tweetzy.auctionhouse.api.AuctionAPI;
|
||||
import ca.tweetzy.auctionhouse.guis.GUISellItem;
|
||||
import ca.tweetzy.auctionhouse.guis.admin.GUIAdminLogs;
|
||||
import ca.tweetzy.auctionhouse.helpers.PlayerHelper;
|
||||
import ca.tweetzy.auctionhouse.settings.Settings;
|
||||
import ca.tweetzy.core.commands.AbstractCommand;
|
||||
@ -36,6 +37,17 @@ public class CommandAdmin extends AbstractCommand {
|
||||
if (AuctionAPI.tellMigrationStatus(sender)) return ReturnType.FAILURE;
|
||||
|
||||
switch (args[0].toLowerCase()) {
|
||||
case "logs":
|
||||
if (!(sender instanceof Player)) break;
|
||||
Player player = (Player) sender;
|
||||
|
||||
AuctionHouse.getInstance().getDataManager().getAdminLogs((error, logs) -> {
|
||||
if (error == null)
|
||||
AuctionHouse.newChain().sync(() -> AuctionHouse.getInstance().getGuiManager().showGUI(player, new GUIAdminLogs(logs))).execute();
|
||||
else
|
||||
error.printStackTrace();
|
||||
});
|
||||
break;
|
||||
case "endall":
|
||||
for (UUID id : AuctionHouse.getInstance().getAuctionItemManager().getItems().keySet()) {
|
||||
AuctionHouse.getInstance().getAuctionItemManager().getItems().get(id).setExpired(true);
|
||||
@ -64,7 +76,7 @@ public class CommandAdmin extends AbstractCommand {
|
||||
break;
|
||||
case "opensell":
|
||||
if (args.length < 2) return ReturnType.FAILURE;
|
||||
Player player = PlayerUtils.findPlayer(args[1]);
|
||||
player = PlayerUtils.findPlayer(args[1]);
|
||||
if (player == null) return ReturnType.FAILURE;
|
||||
|
||||
ItemStack itemToSell = PlayerHelper.getHeldItem(player).clone();
|
||||
@ -85,7 +97,7 @@ public class CommandAdmin extends AbstractCommand {
|
||||
|
||||
@Override
|
||||
protected List<String> onTab(CommandSender sender, String... args) {
|
||||
if (args.length == 1) return Arrays.asList("endall", "relistall");
|
||||
if (args.length == 1) return Arrays.asList("endall", "relistall", "logs");
|
||||
if (args.length == 2 && args[0].equalsIgnoreCase("relistAll")) return Arrays.asList("1", "2", "3", "4", "5");
|
||||
return null;
|
||||
}
|
||||
|
@ -3,15 +3,13 @@ package ca.tweetzy.auctionhouse.database;
|
||||
import ca.tweetzy.auctionhouse.AuctionHouse;
|
||||
import ca.tweetzy.auctionhouse.api.AuctionAPI;
|
||||
import ca.tweetzy.auctionhouse.auction.*;
|
||||
import ca.tweetzy.auctionhouse.auction.enums.AdminAction;
|
||||
import ca.tweetzy.auctionhouse.auction.enums.AuctionItemCategory;
|
||||
import ca.tweetzy.auctionhouse.auction.enums.AuctionSaleType;
|
||||
import ca.tweetzy.auctionhouse.settings.Settings;
|
||||
import ca.tweetzy.auctionhouse.transaction.Transaction;
|
||||
import ca.tweetzy.core.database.DataManagerAbstract;
|
||||
import ca.tweetzy.core.database.DatabaseConnector;
|
||||
import ca.tweetzy.core.database.MySQLConnector;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@ -22,7 +20,6 @@ import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* The current file has been created by Kiran Hart
|
||||
@ -193,6 +190,22 @@ public class DataManager extends DataManagerAbstract {
|
||||
}));
|
||||
}
|
||||
|
||||
public void getAdminLogs(Callback<ArrayList<AuctionAdminLog>> callback) {
|
||||
ArrayList<AuctionAdminLog> logs = new ArrayList<>();
|
||||
this.async(() -> this.databaseConnector.connect(connection -> {
|
||||
try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM " + this.getTablePrefix() + "admin_logs")) {
|
||||
ResultSet resultSet = statement.executeQuery();
|
||||
while (resultSet.next()) {
|
||||
logs.add(extractAdminLog(resultSet));
|
||||
}
|
||||
|
||||
callback.accept(null, logs);
|
||||
} catch (Exception e) {
|
||||
resolveCallback(callback, e);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
public void getTransactions(Callback<ArrayList<Transaction>> callback) {
|
||||
ArrayList<Transaction> transactions = new ArrayList<>();
|
||||
this.async(() -> this.databaseConnector.connect(connection -> {
|
||||
@ -239,6 +252,29 @@ public class DataManager extends DataManagerAbstract {
|
||||
});
|
||||
}
|
||||
|
||||
public void insertLog(AuctionAdminLog adminLog) {
|
||||
this.databaseConnector.connect(connection -> {
|
||||
try (PreparedStatement statement = connection.prepareStatement("INSERT INTO " + this.getTablePrefix() + "admin_logs(admin, admin_name, target, target_name, item, item_id, action, time) VALUES(?, ?, ?, ?, ?, ?, ?, ?)")) {
|
||||
|
||||
statement.setString(1, adminLog.getAdmin().toString());
|
||||
statement.setString(2, adminLog.getAdminName());
|
||||
statement.setString(3, adminLog.getTarget().toString());
|
||||
statement.setString(4, adminLog.getTargetName());
|
||||
statement.setString(5, AuctionAPI.encodeItem(adminLog.getItem()));
|
||||
statement.setString(6, adminLog.getItemId().toString());
|
||||
statement.setString(7, adminLog.getAdminAction().name());
|
||||
statement.setLong(8, adminLog.getTime());
|
||||
statement.executeUpdate();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void insertLogAsync(AuctionAdminLog adminLog) {
|
||||
this.thread.execute(() -> insertLog(adminLog));
|
||||
}
|
||||
|
||||
public void insertTransactionAsync(Transaction transaction, Callback<Transaction> callback) {
|
||||
this.thread.execute(() -> insertTransaction(transaction, callback));
|
||||
}
|
||||
@ -432,6 +468,19 @@ public class DataManager extends DataManagerAbstract {
|
||||
);
|
||||
}
|
||||
|
||||
private AuctionAdminLog extractAdminLog(ResultSet resultSet) throws SQLException {
|
||||
return new AuctionAdminLog(
|
||||
UUID.fromString(resultSet.getString("admin")),
|
||||
resultSet.getString("admin_name"),
|
||||
UUID.fromString(resultSet.getString("target")),
|
||||
resultSet.getString("target_name"),
|
||||
AuctionAPI.decodeItem(resultSet.getString("item")),
|
||||
UUID.fromString(resultSet.getString("item_id")),
|
||||
AdminAction.valueOf(resultSet.getString("action").toUpperCase()),
|
||||
resultSet.getLong("time")
|
||||
);
|
||||
}
|
||||
|
||||
private void resolveUpdateCallback(@Nullable UpdateCallback callback, @Nullable Exception ex) {
|
||||
if (callback != null) {
|
||||
callback.accept(ex);
|
||||
|
@ -26,13 +26,13 @@ public final class _11_AdminLogMigration extends DataMigration {
|
||||
String autoIncrement = AuctionHouse.getInstance().getDatabaseConnector() instanceof MySQLConnector ? " AUTO_INCREMENT" : "";
|
||||
|
||||
|
||||
statement.execute("CREATE TABLE " + tablePrefix + "admin_logs (" +
|
||||
statement.execute("CREATE TABLE IF NOT EXISTS " + tablePrefix + "admin_logs (" +
|
||||
"id INTEGER PRIMARY KEY" + autoIncrement + ", " +
|
||||
"admin VARCHAR(36) NOT NULL, " +
|
||||
"admin_name VARCHAR(16) NOT NULL, " +
|
||||
"target VARCHAR(36) NOT NULL, " +
|
||||
"target_name VARCHAR(16) NOT NULL, " +
|
||||
"item_name TEXT NOT NULL, " +
|
||||
"item TEXT NOT NULL, " +
|
||||
"item_id VARCHAR(36) NOT NULL, " +
|
||||
"action VARCHAR(36) NOT NULL, " +
|
||||
"time BigInt NOT NULL" +
|
||||
|
@ -23,7 +23,7 @@ public class _12_SerializeFormatDropMigration extends DataMigration {
|
||||
@Override
|
||||
public void migrate(Connection connection, String tablePrefix) throws SQLException {
|
||||
try (Statement statement = connection.createStatement()) {
|
||||
statement.execute("DROP TABLE " + tablePrefix + "items");
|
||||
statement.execute("DROP TABLE IF EXISTS " + tablePrefix + "items");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ import ca.tweetzy.auctionhouse.auction.enums.AuctionItemCategory;
|
||||
import ca.tweetzy.auctionhouse.auction.enums.AuctionSaleType;
|
||||
import ca.tweetzy.auctionhouse.auction.enums.AuctionSortType;
|
||||
import ca.tweetzy.auctionhouse.auction.enums.AuctionStackType;
|
||||
import ca.tweetzy.auctionhouse.guis.admin.GUIAdminItem;
|
||||
import ca.tweetzy.auctionhouse.guis.confirmation.GUIConfirmBid;
|
||||
import ca.tweetzy.auctionhouse.guis.confirmation.GUIConfirmPurchase;
|
||||
import ca.tweetzy.auctionhouse.guis.filter.GUIFilterSelection;
|
||||
|
@ -1,14 +1,21 @@
|
||||
package ca.tweetzy.auctionhouse.guis;
|
||||
package ca.tweetzy.auctionhouse.guis.admin;
|
||||
|
||||
import ca.tweetzy.auctionhouse.AuctionHouse;
|
||||
import ca.tweetzy.auctionhouse.api.AuctionAPI;
|
||||
import ca.tweetzy.auctionhouse.api.events.AuctionAdminEvent;
|
||||
import ca.tweetzy.auctionhouse.auction.AuctionAdminLog;
|
||||
import ca.tweetzy.auctionhouse.auction.AuctionPlayer;
|
||||
import ca.tweetzy.auctionhouse.auction.AuctionedItem;
|
||||
import ca.tweetzy.auctionhouse.auction.enums.AdminAction;
|
||||
import ca.tweetzy.auctionhouse.guis.GUIAuctionHouse;
|
||||
import ca.tweetzy.auctionhouse.helpers.ConfigurationItemHelper;
|
||||
import ca.tweetzy.auctionhouse.settings.Settings;
|
||||
import ca.tweetzy.core.gui.Gui;
|
||||
import ca.tweetzy.core.utils.PlayerUtils;
|
||||
import ca.tweetzy.core.utils.TextUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
* The current file has been created by Kiran Hart
|
||||
@ -36,18 +43,30 @@ public class GUIAdminItem extends Gui {
|
||||
|
||||
private void draw() {
|
||||
setButton(1, 1, ConfigurationItemHelper.createConfigurationItem(Settings.GUI_ITEM_ADMIN_ITEMS_RETURN_ITEM.getString(), Settings.GUI_ITEM_ADMIN_ITEMS_RETURN_NAME.getString(), Settings.GUI_ITEM_ADMIN_ITEMS_RETURN_LORE.getStringList(), null), e -> {
|
||||
AuctionAdminEvent event = new AuctionAdminEvent(createLog(e.player, AdminAction.RETURN_ITEM));
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) return;
|
||||
|
||||
this.auctionItem.setExpiresAt(System.currentTimeMillis());
|
||||
this.auctionItem.setExpired(true);
|
||||
e.gui.close();
|
||||
});
|
||||
|
||||
setButton(1, 3, ConfigurationItemHelper.createConfigurationItem(Settings.GUI_ITEM_ADMIN_ITEMS_CLAIM_ITEM.getString(), Settings.GUI_ITEM_ADMIN_ITEMS_CLAIM_NAME.getString(), Settings.GUI_ITEM_ADMIN_ITEMS_CLAIM_LORE.getStringList(), null), e -> {
|
||||
AuctionAdminEvent event = new AuctionAdminEvent(createLog(e.player, AdminAction.CLAIM_ITEM));
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) return;
|
||||
|
||||
PlayerUtils.giveItem(e.player, this.auctionItem.getItem());
|
||||
AuctionHouse.getInstance().getAuctionItemManager().sendToGarbage(this.auctionItem);
|
||||
e.gui.close();
|
||||
});
|
||||
|
||||
setButton(1, 5, ConfigurationItemHelper.createConfigurationItem(Settings.GUI_ITEM_ADMIN_ITEMS_DELETE_ITEM.getString(), Settings.GUI_ITEM_ADMIN_ITEMS_DELETE_NAME.getString(), Settings.GUI_ITEM_ADMIN_ITEMS_DELETE_LORE.getStringList(), null), e -> {
|
||||
AuctionAdminEvent event = new AuctionAdminEvent(createLog(e.player, AdminAction.DELETE_ITEM));
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) return;
|
||||
|
||||
AuctionHouse.getInstance().getAuctionItemManager().sendToGarbage(this.auctionItem);
|
||||
e.gui.close();
|
||||
});
|
||||
@ -58,8 +77,25 @@ public class GUIAdminItem extends Gui {
|
||||
return;
|
||||
}
|
||||
|
||||
AuctionAdminEvent event = new AuctionAdminEvent(createLog(e.player, AdminAction.COPY_ITEM));
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) return;
|
||||
|
||||
PlayerUtils.giveItem(e.player, this.auctionItem.getItem());
|
||||
e.gui.close();
|
||||
});
|
||||
}
|
||||
|
||||
private AuctionAdminLog createLog(final Player player, AdminAction adminAction) {
|
||||
return new AuctionAdminLog(
|
||||
player.getUniqueId(),
|
||||
player.getName(),
|
||||
auctionItem.getOwner(),
|
||||
auctionItem.getOwnerName(),
|
||||
auctionItem.getItem(),
|
||||
auctionItem.getId(),
|
||||
adminAction,
|
||||
System.currentTimeMillis()
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
package ca.tweetzy.auctionhouse.guis.admin;
|
||||
|
||||
import ca.tweetzy.auctionhouse.api.AuctionAPI;
|
||||
import ca.tweetzy.auctionhouse.auction.AuctionAdminLog;
|
||||
import ca.tweetzy.auctionhouse.helpers.ConfigurationItemHelper;
|
||||
import ca.tweetzy.auctionhouse.settings.Settings;
|
||||
import ca.tweetzy.core.gui.Gui;
|
||||
import ca.tweetzy.core.utils.TextUtils;
|
||||
import ca.tweetzy.core.utils.items.TItemBuilder;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* The current file has been created by Kiran Hart
|
||||
* Date Created: January 17 2022
|
||||
* Time Created: 2:11 p.m.
|
||||
* Usage of any code found within this class is prohibited unless given explicit permission otherwise
|
||||
*/
|
||||
public final class GUIAdminLogs extends Gui {
|
||||
|
||||
final List<AuctionAdminLog> logs;
|
||||
|
||||
public GUIAdminLogs(List<AuctionAdminLog> logs) {
|
||||
this.logs = logs;
|
||||
|
||||
setTitle(TextUtils.formatText(Settings.GUI_LOGS_TITLE.getString()));
|
||||
setRows(6);
|
||||
setAcceptsItems(false);
|
||||
draw();
|
||||
}
|
||||
|
||||
private void draw() {
|
||||
reset();
|
||||
|
||||
pages = (int) Math.max(1, Math.ceil(this.logs.size() / (double) 45));
|
||||
setPrevPage(5, 3, new TItemBuilder(Objects.requireNonNull(Settings.GUI_BACK_BTN_ITEM.getMaterial().parseMaterial())).setName(Settings.GUI_BACK_BTN_NAME.getString()).setLore(Settings.GUI_BACK_BTN_LORE.getStringList()).toItemStack());
|
||||
setNextPage(5, 5, new TItemBuilder(Objects.requireNonNull(Settings.GUI_NEXT_BTN_ITEM.getMaterial().parseMaterial())).setName(Settings.GUI_NEXT_BTN_NAME.getString()).setLore(Settings.GUI_NEXT_BTN_LORE.getStringList()).toItemStack());
|
||||
setOnPage(e -> draw());
|
||||
|
||||
int slot = 0;
|
||||
List<AuctionAdminLog> data = this.logs.stream().sorted(Comparator.comparingLong(AuctionAdminLog::getTime).reversed()).skip((page - 1) * 45L).limit(45).collect(Collectors.toList());
|
||||
|
||||
for (AuctionAdminLog log : data) {
|
||||
setItem(slot++, ConfigurationItemHelper.createConfigurationItem(log.getItem(), AuctionAPI.getInstance().getItemName(log.getItem()), Settings.GUI_LOGS_LORE.getStringList(), new HashMap<String, Object>() {{
|
||||
put("%admin%", log.getAdminName());
|
||||
put("%target%", log.getTargetName());
|
||||
put("%admin_uuid%", log.getAdmin());
|
||||
put("%target_uuid%", log.getTarget());
|
||||
put("%item_id%", log.getItemId());
|
||||
put("%admin_action%", log.getAdminAction().getTranslation());
|
||||
put("%admin_log_date%", AuctionAPI.getInstance().convertMillisToDate(log.getTime()));
|
||||
}}));
|
||||
}
|
||||
}
|
||||
}
|
@ -2,6 +2,7 @@ package ca.tweetzy.auctionhouse.listeners;
|
||||
|
||||
import ca.tweetzy.auctionhouse.AuctionHouse;
|
||||
import ca.tweetzy.auctionhouse.api.AuctionAPI;
|
||||
import ca.tweetzy.auctionhouse.api.events.AuctionAdminEvent;
|
||||
import ca.tweetzy.auctionhouse.api.events.AuctionBidEvent;
|
||||
import ca.tweetzy.auctionhouse.api.events.AuctionEndEvent;
|
||||
import ca.tweetzy.auctionhouse.api.events.AuctionStartEvent;
|
||||
@ -11,6 +12,7 @@ import ca.tweetzy.auctionhouse.settings.Settings;
|
||||
import ca.tweetzy.auctionhouse.transaction.Transaction;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
import java.util.UUID;
|
||||
@ -98,4 +100,10 @@ public class AuctionListeners implements Listener {
|
||||
AuctionAPI.getInstance().sendDiscordBidMessage(hook, e.getAuctionedItem(), e.getNewBidAmount());
|
||||
}), 1L);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onAdminAction(AuctionAdminEvent event) {
|
||||
if (!Settings.LOG_ADMIN_ACTIONS.getBoolean()) return;
|
||||
AuctionHouse.getInstance().getDataManager().insertLogAsync(event.getAuctionAdminLog());
|
||||
}
|
||||
}
|
||||
|
@ -559,6 +559,18 @@ public class Settings {
|
||||
public static final ConfigSetting GUI_TRANSACTIONS_TYPE_ITEMS_SELF_TRANSACTIONS_LORE = new ConfigSetting(config, "gui.transactions type.items.self transactions.lore", Collections.singletonList("&7Click to view all your transactions"));
|
||||
|
||||
|
||||
/* ===============================
|
||||
* LOGS LIST GUI
|
||||
* ===============================*/
|
||||
public static final ConfigSetting GUI_LOGS_TITLE = new ConfigSetting(config, "gui.admin logs.title", "&7&LAdmin Logs");
|
||||
public static final ConfigSetting GUI_LOGS_LORE = new ConfigSetting(config, "gui.admin logs.lore", Arrays.asList(
|
||||
"&7Admin&F: &e%admin%",
|
||||
"&7Target&F: &e%target%",
|
||||
"&7Item ID&F: %item_id%",
|
||||
"&7Action&F: &e%admin_action%",
|
||||
"&7Date&F: &e%admin_log_date%"
|
||||
));
|
||||
|
||||
/* ===============================
|
||||
* TRANSACTIONS LIST GUI
|
||||
* ===============================*/
|
||||
|
Loading…
Reference in New Issue
Block a user