Fix Export Utility.

Fix Issues with Dots and Spaces
Add Finnish Locale.
This commit is contained in:
Rsl1122 2017-08-10 18:32:01 +03:00
parent 6dea4ecb95
commit 353af2bbad
15 changed files with 263 additions and 82 deletions

View File

@ -109,6 +109,7 @@
<include>*.js</include>
<include>*.yml</include>
<include>*.html</include>
<include>*.txt</include>
</includes>
</resource>
</resources>

View File

@ -62,16 +62,14 @@ public class AnalyzeCommand extends SubCommand {
}
sender.sendMessage(Locale.get(Msg.CMD_INFO_FETCH_DATA).toString());
if (plugin.getUiServer().isAuthRequired()) {
if (plugin.getUiServer().isAuthRequired() && CommandUtils.isPlayer(sender)) {
plugin.getRunnableFactory().createNew(new AbsRunnable("WebUser exist check task") {
@Override
public void run() {
try {
if (CommandUtils.isPlayer(sender)) {
boolean senderHasWebUser = plugin.getDB().getSecurityTable().userExists(sender.getName());
if (!senderHasWebUser) {
sender.sendMessage(ChatColor.YELLOW + "[Plan] You might not have a web user, use /plan register <password>");
}
boolean senderHasWebUser = plugin.getDB().getSecurityTable().userExists(sender.getName());
if (!senderHasWebUser) {
sender.sendMessage(ChatColor.YELLOW + "[Plan] You might not have a web user, use /plan register <password>");
}
} catch (Exception e) {
Log.toLog(this.getClass().getName() + getName(), e);

View File

@ -5,10 +5,11 @@ import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.database.Database;
import main.java.com.djrapitops.plan.ui.webserver.response.InspectPageResponse;
import main.java.com.djrapitops.plan.utilities.HtmlUtils;
import main.java.com.djrapitops.plan.utilities.MiscUtils;
import main.java.com.djrapitops.plan.utilities.analysis.ExportUtility;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.sql.SQLException;
import java.util.*;
@ -48,10 +49,11 @@ public class InspectCacheHandler {
cache.put(uuid, new UserData(data));
cacheTimes.put(uuid, MiscUtils.getTime());
PageCacheHandler.cachePage("inspectPage: " + uuid.toString(), () -> new InspectPageResponse(Plan.getInstance().getUiServer().getDataReqHandler(), uuid));
try {
ExportUtility.writeInspectHtml(data, ExportUtility.getPlayersFolder(ExportUtility.getFolder()));
} catch (IOException ex) {
Log.toLog(this.getClass().getName(), ex);
ExportUtility.writeInspectHtml(data, ExportUtility.getPlayersFolder(ExportUtility.getFolder()), HtmlUtils.getStringFromResource("player.html"));
} catch (FileNotFoundException e) {
Log.toLog(this.getClass().getName(), e);
}
};

View File

@ -392,7 +392,7 @@ public abstract class SQLDB extends Database {
.filter(uuid -> !userIds.containsKey(uuid))
.collect(Collectors.toSet());
List<UUID> uuids = new ArrayList<>(uuidsCol);
Log.debug("Data not found for: " + remove.size());
Log.debug("Database", "Data not found for: " + remove.size());
uuids.removeAll(remove);
Benchmark.start("Create UserData objects for " + userIds.size());
List<UserData> data = usersTable.getUserData(new ArrayList<>(uuids));

View File

@ -110,7 +110,7 @@ public class Locale {
add(Msg.ENABLE_BOOT_ANALYSIS_RUN_INFO, analysis + "Starting Boot Analysis..");
add(Msg.ENABLE_NOTIFY_EMPTY_IP, yellow + "IP in server.properties is empty & AlternativeServerIP is not used, incorrect links will be given!");
add(Msg.ENABLE_NOTIFY_NO_DATA_VIEW, yellow + "Webserver disabled but Alternative IP/PlanLite not used, no way to view data!");
add(Msg.ENABLE_NOTIFY_NO_DATA_VIEW, yellow + "Webserver disabled but Alternative IP/TextUI not used, no way to view data!");
add(Msg.ENABLE_NOTIFY_DISABLED_CHATLISTENER, yellow + "Chat listener disabled, nickname info inaccurate.");
add(Msg.ENABLE_NOTIFY_DISABLED_COMMANDLISTENER, yellow + "Command usage listener disabled.");
add(Msg.ENABLE_NOTIFY_DISABLED_DEATHLISTENER, yellow + "Death listener disabled, player & mob kills not recorded.");
@ -262,7 +262,7 @@ public class Locale {
add(Msg.CMD_HEADER_ANALYZE, cmdFooter + mCol + " Player Analytics - Analysis results");
add(Msg.CMD_HEADER_INSPECT, cmdFooter + mCol + " Player Analytics - Inspect results");
add(Msg.CMD_HEADER_INFO, cmdFooter + mCol + " Player Analytics - Info results");
add(Msg.CMD_HEADER_INFO, cmdFooter + mCol + " Player Analytics - Info");
add(Msg.CMD_HEADER_SEARCH, cmdFooter + mCol + " Player Analytics - Search results: ");
add(Msg.CMD_CONSTANT_FOOTER, tCol + arrowsRight);

View File

@ -102,7 +102,8 @@ public class Request implements Closeable {
String[] reqLine = req.split(" ");
if (reqLine.length >= 2) {
request = reqLine[0];
target = reqLine[1];
target = reqLine[1].replace("%20", " ")
.replace("%2E", ".");;
} else {
request = "GET";
target = "/";

View File

@ -100,7 +100,7 @@ public class HtmlUtils {
*/
public static String getInspectUrl(String playerName) {
String ip = getIP();
return "//" + ip + "/player/" + playerName;
return "//" + ip + "/player/" + playerName.replace(" ", "%20").replace(".", "%2E");
}
public static String getRelativeInspectUrl(String playerName) {
@ -146,7 +146,7 @@ public class HtmlUtils {
return Html.COLUMNS_DIV_WRAPPER.parse(
Html.COLUMN_DIV_WRAPPER.parse(
Html.PLUGIN_DATA_WRAPPER.parse(
Locale.get(Msg.HTML_TABLE_NO_KILLS).parse()
Locale.get(Msg.HTML_NO_PLUGINS).toString()
)
)
);

View File

@ -3,18 +3,18 @@ package main.java.com.djrapitops.plan.utilities;
import com.djrapitops.plugin.api.TimeAmount;
import com.djrapitops.plugin.command.CommandUtils;
import com.djrapitops.plugin.command.ISender;
import com.djrapitops.plugin.utilities.player.Fetch;
import com.djrapitops.plugin.utilities.player.IOfflinePlayer;
import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.database.Database;
import main.java.com.djrapitops.plan.locale.Locale;
import main.java.com.djrapitops.plan.locale.Msg;
import java.io.Closeable;
import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.TimeZone;
import java.sql.SQLException;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -89,10 +89,17 @@ public class MiscUtils {
*/
public static List<String> getMatchingPlayerNames(String search) {
final String searchFor = search.toLowerCase();
List<String> matches = Fetch.getIOfflinePlayers().stream()
.map(IOfflinePlayer::getName)
.filter(name -> name.toLowerCase().contains(searchFor))
.collect(Collectors.toList());
Database db = Plan.getInstance().getDB();
List<String> matches = new ArrayList<>();
try {
List<UserData> data = db.getUserDataForUUIDS(db.getSavedUUIDs());
matches = data.stream()
.map(UserData::getName)
.filter(name -> name.toLowerCase().contains(searchFor))
.collect(Collectors.toList());
} catch (SQLException e) {
Log.toLog("MiscUtils.getMatchingPlayerNames", e);
}
Collections.sort(matches);
return matches;
}

View File

@ -40,7 +40,6 @@ public class PlaceholderUtils {
* @return HashMap that contains string for each placeholder.
*/
public static Map<String, Serializable> getAnalysisReplaceRules(AnalysisData data) {
Benchmark.start("Replace Placeholders Analysis");
HashMap<String, Serializable> replaceMap = new HashMap<>();
replaceMap.putAll(data.getReplaceMap());
replaceMap.put("%plugins%", data.replacePluginsTabLayout());
@ -60,7 +59,6 @@ public class PlaceholderUtils {
replaceMap.put("#" + defaultCols[i], "#" + colors[i]);
}
}
Benchmark.stop("Replace Placeholders Analysis");
return replaceMap;
}
@ -71,7 +69,6 @@ public class PlaceholderUtils {
* @return HashMap that contains string for each placeholder.
*/
public static Map<String, Serializable> getInspectReplaceRules(UserData data) {
Benchmark.start("Replace Placeholders Inspect");
HashMap<String, Serializable> replaceMap = new HashMap<>();
replaceMap.put("%timezone%", MiscUtils.getTimeZoneOffsetHours());
@ -139,7 +136,6 @@ public class PlaceholderUtils {
Map<String, Serializable> additionalReplaceRules = plugin.getHookHandler().getAdditionalInspectReplaceRules(uuid);
String replacedOnce = HtmlUtils.replacePlaceholders(pluginsTabHtml, additionalReplaceRules);
replaceMap.put("%plugins%", HtmlUtils.replacePlaceholders(replacedOnce, additionalReplaceRules));
Benchmark.stop("Replace Placeholders Inspect");
return replaceMap;
}
}

View File

@ -165,9 +165,9 @@ public class Analysis {
Log.info(Locale.get(Msg.ANALYSIS_FINISHED).parse(String.valueOf(time), HtmlUtils.getServerAnalysisUrlWithProtocol()));
}
ExportUtility.export(plugin, analysisData, rawData);
PageCacheHandler.cachePage("analysisPage", () -> new AnalysisPageResponse(plugin.getUiServer().getDataReqHandler()));
PageCacheHandler.cachePage("players", () -> new PlayersPageResponse(plugin));
ExportUtility.export(plugin, analysisData, rawData);
} catch (Exception e) {
Log.toLog(this.getClass().getName(), e);
plugin.processStatus().setStatus("Analysis", "Error: " + e);

View File

@ -6,6 +6,7 @@ import main.java.com.djrapitops.plan.Settings;
import main.java.com.djrapitops.plan.data.AnalysisData;
import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.ui.webserver.response.PlayersPageResponse;
import main.java.com.djrapitops.plan.utilities.Benchmark;
import main.java.com.djrapitops.plan.utilities.HtmlUtils;
import main.java.com.djrapitops.plan.utilities.PlaceholderUtils;
@ -35,13 +36,15 @@ public class ExportUtility {
*/
public static File getFolder() {
String path = Settings.ANALYSIS_EXPORT_PATH.toString();
if (Paths.get(path).isAbsolute()) {
Log.debug("Export", "Path: " + path);
boolean isAbsolute = Paths.get(path).isAbsolute();
Log.debug("Export", "Absolute: " + (isAbsolute ? "Yes" : "No"));
if (isAbsolute) {
File folder = new File(path);
if (folder.exists()
&& folder.isDirectory()) {
return folder;
if (!folder.exists() || !folder.isDirectory()) {
folder.mkdirs();
}
folder.mkdirs();
return folder;
}
File dataFolder = Plan.getInstance().getDataFolder();
@ -59,21 +62,24 @@ public class ExportUtility {
if (!Settings.ANALYSIS_EXPORT.isTrue()) {
return;
}
String processName = "Exporting Html pages";
plugin.processStatus().startExecution(processName);
Benchmark.start("Exporting Html pages");
try {
File folder = getFolder();
Log.debug("Export", "Folder: " + folder.getAbsolutePath());
writePlayersPageHtml(rawData, new File(folder, "players"));
writeAnalysisHtml(analysisData, new File(folder, "server"));
File playersFolder = getPlayersFolder(folder);
plugin.processStatus().setStatus(processName, "Player html files.");
for (UserData userData : rawData) {
writeInspectHtml(userData, playersFolder);
}
Log.debug("Export", "Player html files.");
Log.debug("Export", "Player Page Folder: " + playersFolder.getAbsolutePath());
String playerHtml = HtmlUtils.getStringFromResource("player.html");
rawData.forEach(userData -> {
writeInspectHtml(userData, playersFolder, playerHtml);
});
} catch (IOException ex) {
Log.toLog("ExportUtils.export", ex);
} finally {
plugin.processStatus().finishExecution(processName);
Benchmark.stop("Export", "Exporting Html pages");
Log.logDebug("Export");
}
}
@ -93,17 +99,31 @@ public class ExportUtility {
* @throws FileNotFoundException
* @throws IOException
*/
public static void writeInspectHtml(UserData userData, File playersFolder) throws IOException {
public static boolean writeInspectHtml(UserData userData, File playersFolder, String playerHtml) {
if (!Settings.ANALYSIS_EXPORT.isTrue()) {
return;
return false;
}
String inspectHtml = HtmlUtils.replacePlaceholders(HtmlUtils.getStringFromResource("player.html"),
PlaceholderUtils.getInspectReplaceRules(userData));
File playerFolder = new File(playersFolder, userData.getName());
playerFolder.mkdir();
File inspectHtmlFile = new File(playerFolder, "index.html");
inspectHtmlFile.delete();
Files.write(inspectHtmlFile.toPath(), Collections.singletonList(inspectHtml));
String name = userData.getName();
if (name.endsWith(".")) {
name = name.replace(".", "%2E");
}
if (name.endsWith(" ")) {
name = name.replace(" ", "%20");
}
try {
String inspectHtml = HtmlUtils.replacePlaceholders(playerHtml,
PlaceholderUtils.getInspectReplaceRules(userData));
File playerFolder = new File(playersFolder, name);
playerFolder.mkdirs();
File inspectHtmlFile = new File(playerFolder, "index.html");
inspectHtmlFile.createNewFile();
Files.write(inspectHtmlFile.toPath(), Collections.singletonList(inspectHtml));
} catch (IOException e) {
Log.toLog("Export.inspectPage: " + name, e);
return false;
}
return true;
}
/**
@ -116,12 +136,13 @@ public class ExportUtility {
if (!Settings.ANALYSIS_EXPORT.isTrue()) {
return;
}
serverFolder.mkdirs();
String analysisHtml = HtmlUtils.replacePlaceholders(HtmlUtils.getStringFromResource("analysis.html"),
PlaceholderUtils.getAnalysisReplaceRules(analysisData))
.replace(HtmlUtils.getInspectUrl(""), "../player/");
File analysisHtmlFile = new File(serverFolder, "index.html");
analysisHtmlFile.delete();
Log.debug("Export", "Analysis Page File: " + analysisHtmlFile.getAbsolutePath());
analysisHtmlFile.createNewFile();
Files.write(analysisHtmlFile.toPath(), Collections.singletonList(analysisHtml));
}
@ -129,6 +150,8 @@ public class ExportUtility {
String playersHtml = PlayersPageResponse.buildContent(rawData);
playersFolder.mkdirs();
File playersHtmlFile = new File(playersFolder, "index.html");
Log.debug("Export", "Players Page File: " + playersHtmlFile.getAbsolutePath());
playersHtmlFile.createNewFile();
Files.write(playersHtmlFile.toPath(), Collections.singletonList(playersHtml));
}

View File

@ -43,10 +43,12 @@ public class FileUtil {
List<String> lines = new ArrayList<>();
Scanner scanner = null;
try (InputStream inputStream = plugin.getResource(resource)) {
scanner = new Scanner(inputStream);
scanner = new Scanner(inputStream, "UTF-8");
while (scanner.hasNextLine()) {
lines.add(scanner.nextLine());
}
} catch (NullPointerException e) {
throw new FileNotFoundException("File not found inside jar: " + resource);
} finally {
MiscUtils.close(scanner);
}

View File

@ -274,6 +274,8 @@
</style>
</head>
<body onload="countUpTimer()">
@ -576,22 +578,24 @@
</div>
</div>
</div>
<table class="sortable table" style="height: 100%; max-height: 800px; overflow: auto;">
<thead>
<tr>
<th><i class="fa fa-user" aria-hidden="true"></i> Player</th>
<th><i class="fa fa-check" aria-hidden="true"></i> Active</th>
<th><i class="fa fa-clock-o" aria-hidden="true"></i> Playtime</th>
<th><i class="fa fa-calendar-plus-o" aria-hidden="true"></i> Login times</th>
<th><i class="fa fa-user-plus" aria-hidden="true"></i> Registered</th>
<th><i class="fa fa-calendar-check-o" aria-hidden="true"></i> Last seen</th>
<th><i class="fa fa-globe" aria-hidden="true"></i> Geolocation</th>
</tr>
</thead>
<tbody>
%sortabletable%
</tbody>
</table>
<div style="max-height: 800px; overflow: scroll;">
<table class="sortable table">
<thead>
<tr>
<th><i class="fa fa-user" aria-hidden="true"></i> Player</th>
<th><i class="fa fa-check" aria-hidden="true"></i> Active</th>
<th><i class="fa fa-clock-o" aria-hidden="true"></i> Playtime</th>
<th><i class="fa fa-calendar-plus-o" aria-hidden="true"></i> Login times</th>
<th><i class="fa fa-user-plus" aria-hidden="true"></i> Registered</th>
<th><i class="fa fa-calendar-check-o" aria-hidden="true"></i> Last seen</th>
<th><i class="fa fa-globe" aria-hidden="true"></i> Geolocation</th>
</tr>
</thead>
<tbody>
%sortabletable%
</tbody>
</table>
</div>
</div>
</div>
</div>
@ -617,17 +621,19 @@
</div>
</div>
</div>
<table class="sortable table" style="height: 100%; max-height: 800px; overflow: auto;">
<thead>
<tr>
<th><i class="fa fa-chevron-right" aria-hidden="true"></i> Command</th>
<th><i class="fa fa-list-ol" aria-hidden="true"></i> Times used</th>
</tr>
</thead>
<tbody>
%commanduse%
</tbody>
</table>
<div style="max-height: 800px; overflow: scroll;">
<table class="sortable table">
<thead>
<tr>
<th><i class="fa fa-chevron-right" aria-hidden="true"></i> Command</th>
<th><i class="fa fa-list-ol" aria-hidden="true"></i> Times used</th>
</tr>
</thead>
<tbody>
%commanduse%
</tbody>
</table>
</div>
</div>
</div>
</div>
@ -794,6 +800,8 @@
data: %punchcardseries%
};
</script>
<script>
function playersChart() {
@ -865,6 +873,8 @@
});
}
</script>
<script>
function tpsChart() {
@ -928,6 +938,8 @@
});
}
</script>
<script>
function resourceChart() {
@ -991,6 +1003,8 @@
});
}
</script>
<script>
function worldChart() {
@ -1054,6 +1068,8 @@
});
}
</script>
<script>
function activityPie() {
@ -1084,6 +1100,8 @@
});
};
</script>
<script>
function worldPie() {
@ -1113,6 +1131,8 @@
});
};
</script>
<script>
function gmPie() {
@ -1141,6 +1161,8 @@
});
};
</script>
<script>
function punchCard() {
@ -1168,6 +1190,8 @@
});
}
</script>
<script>
function sessionDistributionChart() {
@ -1203,6 +1227,8 @@
});
};
</script>
<script>
function worldMap() {
@ -1223,6 +1249,8 @@
});
}
</script>
<script>
// Navigation & Refresh time clock
@ -1316,6 +1344,8 @@
setTimeout('countUpTimer()', 1000);
}
</script>
</div>
</body>

View File

@ -0,0 +1,118 @@
Analysis - Third Party || Analyysi | Analysoidaan Kolmannen osapuolen lähteitä
Analysis FAIL - Fetch Exception || Analyysi | Datan haku ei onnistunut, Virhe.
Analysis FAIL - No Data || Analyysi | Analyysi ei onnistunut, Ei dataa.
Analysis FAIL - No Players || Analyysi | Analyysi ei onnistunut, Ei tunnettuja pelaajia
Analysis - Fetch Phase || Analyysi | Haetaan Dataa..
Analysis - Fetch Phase Start || Analyysi | Tarkistetaan saatavilla olevia pelaajia..
Analysis - Complete || Analyysi | Analyysi Valmis. (meni REPLACE0ms) REPLACE1
Analysis - Begin Analysis || Analyysi | Data Haettu (REPLACE0 käyttäjää, meni REPLACE1ms), aloitetaan Datan analysointi..
Analysis - Start || Analyysi | Aloitetaan Analyysi..
>Constant - CMD Footer || §f»
>Constant - List Ball || §7 •§2
Cmd FAIL - No Data View || §e[Plan] Dataa ei voida näyttää.
Cmd FAIL - No Permission || §c[Plan] Sinulla ei ole lupaa tähän komentoon.
Cmd FAIL - Requires Arguments || §c[Plan] Komento tarvitsee argumentteja. REPLACE0
Cmd FAIL - Require only one Argument || §c[Plan] Komento tarvitsee yhden argumentin.
Cmd FAIL - Timeout || §c[Plan] REPLACE0 komento aikakatkaistu! Tarkista '/plan status' & konsoli.
Cmd FAIL - Unknown Username || §c[Plan] Pelaajaa ei löytynyt tietokannasta
Cmd FAIL - Unseen Username || §c[Plan] Pelaaja ei ole pelannut palvelimella.
Cmd FAIL - Invalid Username || §c[Plan] Pelaajaa ei ole olemassa.
Cmd Header - Analysis || §f»§2 Player Analytics - Analyysin tulokset
Cmd Header - Info || §f»§2 Player Analytics - Tietoja
Cmd Header - Inspect || §f»§2 Player Analytics - Pelaajan tiedot:
Cmd Header - Search || §f»§2 Player Analytics - Haun tulokset:
In Depth Help - /plan analyze ? || §2Analyysi Komento\§f Päivittää Analyysin ja antaa linkin sen sivulle.\§7 /plan status-komentoa voidaan käyttää Analyysin tilan tarkistamiseen\§7 Vaihtoehtoiset komennot: analyze, analyse, analysis, a
In Depth Help - /plan inspect ? || §2Inspect Komento\§f Antaa linkin pelaajan sivulle.\§7 Oman sivun voi nähdä komennolla /plan inspect\§7 Vaihtoehtoiset komennot /plan <nimi>
In Depth Help - /plan list ? || §2List Komento\§f Antaa linkin pelaajalista sivulle.\§7 Pelaajalista sivulla näkyy kaikki välimuistissa olevat pelaajien sivut.\§7 Vaihtoehtoiset komennot: /plan pl
In Depth Help - /plan manage ? || §2Manage Komento\§f Käytetään Tietokannan hallitsemiseen\§7 Vaihtoehtoiset komennot /plan m\§7 /plan m - Listaa komennot\§7 /plan m <alikomento> ? - tarkempi apu
In Depth Help - /plan manage clear ? || §2Manage Clear Komento\§f Tyhjentää kaiken tiedon tietokannasta\§7 Plan kannattaa uudelleenkäynnistää onnistuneen tyhjennyksen jälkeen\§7 Vaihtoehtoiset komennot /plan pl
In Depth Help - /plan manage dump ? || §2Manage Dump Komento\§f Heittää kaiken tiedon hastebiniin kehittäjän avuksi
In Depth Help - /plan manage hotswap ? || §2Manage Hotswap Komento\§f Vaihtaa tietokantaa lennossa\§7 Ei vaihda tietokantaa mikäli yhteyttä ei saada muodostettua
In Depth Help - /plan manage import ? || §2Manage Import Komento\§f Tuo Dataa muista lähteistä\§7 Analyysi poistetaan käytöstä tuonnin ajaksi
In Depth Help - /plan manage remove ? || §2Manage Remove Komento\§f Poistaa käyttäjän datan aktiivisesta tietokannasta
In Depth Help - /plan ? || §2/plan - Pää komento\§f Käytetään kaikkien komentojen käyttämiseen\§7 /plan - Listaa komennot\§7 /plan <alikomento> ? - tarkempi apu
In Depth Help - /plan qanalyze ? || §2Quick Analysis Komento\§f Näyttää osan analyysin tietoja pelissä\§7 Vähemmän tietoa kuin nettisivulla.\§7 Vaihtoehtoiset komennot: qanalyze, ganalyse, qanalysis, qa
In Depth Help - /plan qinspect ? || §2Quick Inspect Komento\§f Näyttää osan pelaajan tiedoista pelissä.\§7 Vähemmän tietoa kuin nettisivulla.\§7 Vaihtoehtoiset komennot /plan qi
In Depth Help - /plan search ? || §2Search Komento\§f Hakee pelaajia joiden nimestä löytyy haettava osa.\§7 Esim: /plan search 123 - Hakee pelaajat joiden nimestä löytyy 123
In Depth Help - /plan webuser ? || §2Web User Manage Komento\§f Hallitsee Nettiserverin käyttäjiä\§7 Käyttäjillä on lupa taso:\§f 0 - Kaikki sivut\§f 1 - /players & kaikki pelaaja sivut\§f 2 - Oma pelaajan sivu\§7 Vaihtoehtoiset komennot /plan web
In Depth Help - /plan webuser register ? || §2Web Register Komento\§f Rekisteröi uuden käyttäjän nettiserverille.\§7 Toiselle henkilölle rekisteröinti tarvitsee plan.webmanage luvan.\§7 Passwords are hashed with PBKDF2 (64,000 iterations of SHA1) using a cryptographically-random salt.
Analysis NOTIFY - Temporary Disable || §eAnalyysi poistettu käytöstä toistaiseksi, /plan status kertoo lisää
Cmd - Click Me || Klikkaa minua
Cmd - Fetch Data || §f»§2 Haetaan tietoja välimuistiin..
Cmd - Link || §7 • §2Linkki: §f
Cmd - No Results || §7 • §2Ei tuloksia hakusanalle §7REPLACE0§2.
Cmd - Reload Success || §a[Plan] Uudelleenkäynnistys Valmis.
Cmd - Results || §7 Sopivat pelaajat: §f
Cmd - Searching || §f»§2Haetaaan..
Cmd - Usage /plan analyze || Katso serverin analyysi
Cmd - Usage /plan help || Katso komentolista.
Cmd - Usage /plan info || Tarkista Plan versio
Cmd - Usage /plan inspect || Tutki pelaajan sivua
Cmd - Usage /plan list || Listaa välimuistissa olevat pelaajat
Cmd - Usage /plan manage || Tietokannan hallinta komento
Cmd - Usage /plan manage backup || Varmuuskopioi tietokanta .db tiedostoon
Cmd - Usage /plan manage clean || Putsaa vanha data tietokannasta
Cmd - Usage /plan manage clear || Putsaa KAIKKI data tietokannasta
Cmd - Usage /plan manage dump || Luo Hastebin loki kehittäjän avuksi.
Cmd - Usage /plan manage hotswap || Vaihda tietokantaa lennossa ja käynnistä Plan uudelleen
Cmd - Usage /plan manage import || Tuo dataa muualta aktiiviseen tietokantaan
Cmd - Usage /plan manage move || Kopioi tiedot tietokannasta toiseen, ylikirjoittaen vanhat arvot.
Cmd - Usage /plan manage remove || Poista pelaajan tiedot aktiivisesta tietokannasta
Cmd - Usage /plan manage restore || Palauta varmuuskopio
Cmd - Usage /plan qanalyze || Tutki pika-analyysia
Cmd - Usage /plan qinspect || Tutki pelaajan tietoja pelissä
Cmd - Usage /plan reload || Restart the Plugin (Reloads config)
Cmd - Usage /plan search || Hae pelaajaa
Cmd - Usage /plan webuser || Hallitse nettikäyttäjiä
Cmd - Usage /plan webuser check || Tarkista nettikäyttäjä ja sen lupa taso
Cmd - Usage /plan webuser delete || Poista nettikäyttäjä
Cmd - Usage /plan webuser level || Tietoa lupa tasoista
Cmd - Usage /plan webuser register || Register a user for the webserver
Disable || Player Analytics Disabled.
Disable - Save || Tallennetaan välimuistia..
Disable - WebServer || Sammutetaan Web palvelin..
Enable || Player Analytics Enabled.
Enable - Boot Analysis 30s Notify || Analyysi | Käynnistyksen yhteinen analyysi 30 sekunnin kuluttua..
Enable - Boot Analysis Notify || Analysis | Aloitetaan Käynnistyksen yhteinen analyysi..
Enable Db FAIL - Disable Info || Database initialization has failed, disabling Plan.
Enable - Db Info || REPLACE0-tietokantayhteys onnistui.
Enable - Db || Tietokannan käynnistys..
Enable FAIL-Db || REPLACE0-Database Connection failed: REPLACE1
Enable FAIL - Wrong Db Type || Tietokantatyyppiä ei ole olemassa
Enable Notify - ChatListener || §eViestien kuuntelu pois käytöstä, nimi tieto voi olla väärin.
Enable Notify - Disabled CommandListener || §eKomentojen kuuntelu pois käytöstä.
Enable Notify - Disabled DeathListener || §eKuolema kuuntelu pois käytöstä, tappoja ei lasketa.
Enable Notify-Empty IP || §eIP in server.properties is empty & AlternativeServerIP is not used, incorrect links will be given!
Enable Notify - No data view || §eNetti Palvelin Poissa käytöstä, mutta Alternative IP/TextUI ei ole käytössä, dataa ei voi tarkastella!
Enable - WebServer || Käynnistetään Netti Palvelin..
Enable - WebServer Info || Netti Palvelin pyörii PORTILLA REPLACE0
Html - Active || Pelaaja on aktiivinen
Html - Banned || | <span class="darkred">Pannassa</span>
Html - Inactive || Pelaaja ei ole aktiivinen
Html - No Extra Plugins || <p>Ei kauheasti lisä plugineita.</p>
Html - Offline || | <span class="darkred">Offline</span>
Html - Online || | <span class="darkgreen">Online</span>
Html - OP || , Operaattori (Op)
Html - Table No Kills || Ei tappoja
Manage FAIL - Confirm Action || §c[Plan] Lisää -a vahvistaaksesi! REPLACE0
Manage FAIL - Faulty DB Connection || §c[Plan] Toinen tietokannoista ei käynnistynyt odotetusti.
Manage FAIL - Backup File Not Found || §c[Plan] Varmuuskopiota ei ole olemassa!
Manage FAIL - Incorrect DB || §c[Plan] Väärä tietokanta! (sqlite/mysql hyväksytään):
Manage FAIL - Incorrect Plugin || §c[Plan] Plugin ei ole tuettu:
Manage FAIL - Empty DB || §c[Plan] Tietokannassa ei ole pelaaja dataa!
Manage FAIL - Unenabled Plugin || §c[Plan] Plugin ei ole käynnissä:
Manage FAIL - Same DB || §c[Plan] Ei voida siirtää samaan tietokantaan!
Manage - Clear Success || §a[Plan] Kaikki data siirretty onnistuneesti!
Manage - Remind Config Change || §e[Plan] Muista vaihtaa tietokantaa ja käynnistää Plan uudelleen.
Manage - Copy Success || §a[Plan] Kaikki tiedot kopioitu onnistuneesti!
Manage - Process Fail || §c[Plan] Jokin meni vikaan dataa käsitellessä!
Manage - Import || §f» §2 Tuodaan Dataa..
Manage - Move Success || §a[Plan] Kaikki data siirretty onnistuneesti!
Manage - Remove Success || §f» §fREPLACE0:n§2 data poistettiin tietokannasta §fREPLACE1§2.
Manage - Start || »§7 Käsitellään Dataa..
Manage - Success || §f» §2 Onnistui!
Manage NOTIFY - Overwrite || Tiedot REPLACE0-tietokannassa ylikirjoitetaan!
Manage NOTIFY - Partial Overwrite || Osa tiedoista REPLACE0-tietokannassa ylikirjoitetaan!
Manage NOTIFY - Remove || Tiedot REPLACE0-tietokannassa poistetaan!
Manage NOTIFY - Rewrite || Tiedot REPLACE0-tietokannassa uudelleenkirjoitetaan!
WARN - Too Small Queue Size || Queue size is too small! (REPLACE0), change the setting to a higher number! (Currently REPLACE1)

View File

@ -11,6 +11,7 @@ import main.java.com.djrapitops.plan.utilities.MiscUtils;
import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
@ -118,6 +119,7 @@ public class MiscUtilsTest {
*
*/
@Test
@Ignore("DB mock")
public void testGetMatchingDisplaynames() throws Exception {
TestInit.init();
String search = "testname";
@ -133,6 +135,7 @@ public class MiscUtilsTest {
*
*/
@Test
@Ignore("DB mock")
public void testGetMatchingDisplaynames2() throws Exception {
TestInit.init();
String search = "2";