From e7295031b01e1dd1d99b6e439fbb6f1c6191c91c Mon Sep 17 00:00:00 2001 From: NovaFox161 Date: Sat, 28 Mar 2020 19:11:12 -0500 Subject: [PATCH] Add support for changing language in dashboard --- .../discal/core/object/web/WebGuild.java | 9 ++++++ .../v2/guild/GetWebGuildEndpoint.java | 9 ++++++ .../settings/UpdateGuildSettingsEndpoint.java | 11 ++++++-- web/src/main/javascript/dashboard/guild.ts | 28 ++++++++++++++++++- .../main/javascript/objects/guild/WebGuild.ts | 19 ++++++++----- .../resources/templates/dashboard/guild.html | 25 +++++++++++++++-- 6 files changed, 88 insertions(+), 13 deletions(-) diff --git a/core/src/main/java/org/dreamexposure/discal/core/object/web/WebGuild.java b/core/src/main/java/org/dreamexposure/discal/core/object/web/WebGuild.java index 6ed4c722..cccbe26a 100644 --- a/core/src/main/java/org/dreamexposure/discal/core/object/web/WebGuild.java +++ b/core/src/main/java/org/dreamexposure/discal/core/object/web/WebGuild.java @@ -42,6 +42,8 @@ public class WebGuild { private List channels = new ArrayList<>(); private List announcements = new ArrayList<>(); + private List availableLangs = new ArrayList<>(); + private WebCalendar calendar; //Getters @@ -93,6 +95,10 @@ public class WebGuild { return announcements; } + public List getAvailableLangs() { + return availableLangs; + } + public WebCalendar getCalendar() { return calendar; } @@ -210,6 +216,9 @@ public class WebGuild { //Add data about shard this guild is expected to be on data.put("shard", GuildUtils.findShard(Snowflake.of(getId()))); + //Available langs to allow web editing of lang to be possible + data.put("available_langs", availableLangs); + return data; } diff --git a/server/src/main/java/org/dreamexposure/discal/server/api/endpoints/v2/guild/GetWebGuildEndpoint.java b/server/src/main/java/org/dreamexposure/discal/server/api/endpoints/v2/guild/GetWebGuildEndpoint.java index 48b4f2b6..a8561bba 100644 --- a/server/src/main/java/org/dreamexposure/discal/server/api/endpoints/v2/guild/GetWebGuildEndpoint.java +++ b/server/src/main/java/org/dreamexposure/discal/server/api/endpoints/v2/guild/GetWebGuildEndpoint.java @@ -1,5 +1,6 @@ package org.dreamexposure.discal.server.api.endpoints.v2.guild; +import org.dreamexposure.discal.core.file.ReadFile; import org.dreamexposure.discal.core.logger.Logger; import org.dreamexposure.discal.core.object.web.AuthenticationState; import org.dreamexposure.discal.core.object.web.WebGuild; @@ -14,6 +15,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.ArrayList; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -54,6 +57,12 @@ public class GetWebGuildEndpoint { wg.setDiscalRole(PermissionChecker.hasSufficientRole(g, m)); } + //Add available langs so that editing of langs can be done on the website + //noinspection unchecked + for (String l : ((ArrayList) ReadFile.readAllLangFiles().keySet())) { + wg.getAvailableLangs().add(l); + } + response.setContentType("application/json"); response.setStatus(200); return wg.toJson(!authState.isFromDiscalNetwork()).toString(); diff --git a/server/src/main/java/org/dreamexposure/discal/server/api/endpoints/v2/guild/settings/UpdateGuildSettingsEndpoint.java b/server/src/main/java/org/dreamexposure/discal/server/api/endpoints/v2/guild/settings/UpdateGuildSettingsEndpoint.java index d9919712..01bb03f4 100644 --- a/server/src/main/java/org/dreamexposure/discal/server/api/endpoints/v2/guild/settings/UpdateGuildSettingsEndpoint.java +++ b/server/src/main/java/org/dreamexposure/discal/server/api/endpoints/v2/guild/settings/UpdateGuildSettingsEndpoint.java @@ -2,6 +2,7 @@ package org.dreamexposure.discal.server.api.endpoints.v2.guild.settings; import org.dreamexposure.discal.core.database.DatabaseManager; import org.dreamexposure.discal.core.enums.network.DisCalRealm; +import org.dreamexposure.discal.core.file.ReadFile; import org.dreamexposure.discal.core.logger.Logger; import org.dreamexposure.discal.core.object.BotSettings; import org.dreamexposure.discal.core.object.GuildSettings; @@ -17,6 +18,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.ArrayList; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -60,8 +63,12 @@ public class UpdateGuildSettingsEndpoint { } if (body.has("simple_announcements")) settings.setSimpleAnnouncements(body.getBoolean("simple_announcements")); - if (body.has("lang")) - settings.setLang(body.getString("lang")); + if (body.has("lang")) { + String lang = body.getString("lang"); + //noinspection unchecked + if (((ArrayList) ReadFile.readAllLangFiles().keySet()).contains(lang.toUpperCase())) + settings.setLang(body.getString("lang")); + } if (body.has("prefix")) settings.setPrefix(body.getString("prefix")); diff --git a/web/src/main/javascript/dashboard/guild.ts b/web/src/main/javascript/dashboard/guild.ts index 524d2d6e..1c7b367f 100644 --- a/web/src/main/javascript/dashboard/guild.ts +++ b/web/src/main/javascript/dashboard/guild.ts @@ -36,7 +36,7 @@ export class DashboardGuildRunner implements TaskCallback { private handleWebGuildGet(status: NetworkCallStatus) { this.guild = new WebGuild(this.guildId).fromJson(status.body); - //TODO: load in settings data + //load in settings data (document.getElementById("nickname-input")).value = this.guild.botNick; document.getElementById("nick-update-btn")!.onclick = function () { this.updateBotNick(); @@ -80,6 +80,21 @@ export class DashboardGuildRunner implements TaskCallback { this.updateDiscalChannel(); }.bind(this); + let langSelect = document.getElementById("discal-lang-select")!; + for (let i = 0; i < this.guild.channels.length; i++) { + let lang = this.guild.availableLangs[i]; + let opt = document.createElement("option"); + + opt.innerHTML = lang.toUpperCase(); + opt.value = lang.toUpperCase(); + + opt.selected = lang.toUpperCase() == this.guild.settings.lang.toUpperCase(); + langSelect.appendChild(opt); + } + document.getElementById("discal-lang-update-btn")!.onclick = function () { + this.updateLang(); + }.bind(this); + //load data that cannot be edited (document.getElementById("shard-display")).innerHTML = "Shard: " + this.guild.shard; @@ -145,6 +160,17 @@ export class DashboardGuildRunner implements TaskCallback { request.execute(); } + private updateLang() { + let request = new GuildSettingsUpdateRequest(this.guildId, this); + request.provideApiDetails(this.apiKey, this.apiUrl); + + let select = document.getElementById("discal-lang-select"); + request.lang = select.selectedOptions[0].value; + this.guild.settings.lang = request.lang; + + request.execute(); + } + onCallback(status: NetworkCallStatus): void { if (status.isSuccess) { switch (status.type) { diff --git a/web/src/main/javascript/objects/guild/WebGuild.ts b/web/src/main/javascript/objects/guild/WebGuild.ts index dffd46e7..b677c672 100644 --- a/web/src/main/javascript/objects/guild/WebGuild.ts +++ b/web/src/main/javascript/objects/guild/WebGuild.ts @@ -15,9 +15,10 @@ export class WebGuild { private _canManageServer: boolean = false; private _hasDisCalRole: boolean = false; - private readonly _roles: WebRole[]; - private readonly _channels: WebChannel[]; - private readonly _announcements: Announcement[]; + private readonly _roles: WebRole[] = []; + private readonly _channels: WebChannel[] = []; + private readonly _announcements: Announcement[] = []; + private readonly _availableLangs: string[] = []; private _calendar: WebCalendar = new WebCalendar(); @@ -25,10 +26,6 @@ export class WebGuild { constructor(id: number) { this._id = id; - - this._roles = []; - this._channels = []; - this._announcements = []; } //Getter/Setter pairs @@ -96,6 +93,10 @@ export class WebGuild { return this._announcements; } + get availableLangs() { + return this._availableLangs; + } + get calendar() { return this._calendar; } @@ -184,6 +185,10 @@ export class WebGuild { this.roles.push(new WebRole().fromJson(json.roles[i])); } + for (let i = 0; i < json.available_langs.length; i++) { + this.availableLangs.push(json.available_langs[i]); + } + this.calendar = new WebCalendar().fromJson(json.calendar); this.shard = json.shard; diff --git a/web/src/main/resources/templates/dashboard/guild.html b/web/src/main/resources/templates/dashboard/guild.html index d986bb56..b5bcfde3 100644 --- a/web/src/main/resources/templates/dashboard/guild.html +++ b/web/src/main/resources/templates/dashboard/guild.html @@ -301,9 +301,6 @@ - + +
+
+ + +
+ + +
+
+ DisCal Language +
+ +
+ +
+
+
+