Add support for changing language in dashboard

This commit is contained in:
NovaFox161
2020-03-28 19:11:12 -05:00
parent ffccb95e69
commit e7295031b0
6 changed files with 88 additions and 13 deletions

View File

@@ -42,6 +42,8 @@ public class WebGuild {
private List<WebChannel> channels = new ArrayList<>();
private List<Announcement> announcements = new ArrayList<>();
private List<String> availableLangs = new ArrayList<>();
private WebCalendar calendar;
//Getters
@@ -93,6 +95,10 @@ public class WebGuild {
return announcements;
}
public List<String> 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;
}

View File

@@ -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<String>) ReadFile.readAllLangFiles().keySet())) {
wg.getAvailableLangs().add(l);
}
response.setContentType("application/json");
response.setStatus(200);
return wg.toJson(!authState.isFromDiscalNetwork()).toString();

View File

@@ -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<String>) ReadFile.readAllLangFiles().keySet()).contains(lang.toUpperCase()))
settings.setLang(body.getString("lang"));
}
if (body.has("prefix"))
settings.setPrefix(body.getString("prefix"));

View File

@@ -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
(<HTMLInputElement>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
(<HTMLParagraphElement>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 = <HTMLSelectElement>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) {

View File

@@ -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;

View File

@@ -301,9 +301,6 @@
</a>
</div>
<!--TODO: load and support changing the following:
- Lang
-->
<!--Start guild settings display-->
<div id="guild-settings" hidden="hidden">
<!--Start nickname form-->
@@ -395,6 +392,28 @@
</div>
</form>
<!--End discal channel form-->
<br>
<br>
<!--Start discal lang form-->
<form id="discal-lang-form" class="row form-inline pl-3">
<label for="discal-lang-select" class="sr-only">DisCal Language</label>
<div class="mb-2 mr-sm-2 input-group">
<div class="input-group-prepend">
<span class="input-group-text">DisCal Language</span>
</div>
<select class="form-control" id="discal-lang-select"></select>
<div class="input-group-append">
<button type="button" class="btn btn-discal-blue"
id="discal-lang-update-btn">
Update
</button>
</div>
</div>
</form>
<!--End discal lang form-->
</div>
<!--End guild settings display-->