mirror of
https://github.com/DreamExposure/DisCal-Discord-Bot.git
synced 2026-02-10 21:48:28 -06:00
Add support for changing language in dashboard
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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"));
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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-->
|
||||
|
||||
|
||||
Reference in New Issue
Block a user