1
0
mirror of https://github.com/hrfee/jfa-go.git synced 2024-11-09 20:00:12 +00:00

accounts: make ombi/jellyseerr appliction optional on "modify settings"

Checkboxes added when applying from a profile.
This commit is contained in:
Harvey Tindall 2024-07-30 21:36:06 +01:00
parent 785395dd20
commit 2a6937228c
Signed by: hrfee
GPG Key ID: BBC65952848FB1A2
6 changed files with 61 additions and 24 deletions

View File

@ -1374,12 +1374,12 @@ func (app *appContext) ApplySettings(gc *gin.Context) {
displayprefs = profile.Displayprefs displayprefs = profile.Displayprefs
} }
policy = profile.Policy policy = profile.Policy
if app.config.Section("ombi").Key("enabled").MustBool(false) { if req.Ombi && app.config.Section("ombi").Key("enabled").MustBool(false) {
if profile.Ombi != nil && len(profile.Ombi) != 0 { if profile.Ombi != nil && len(profile.Ombi) != 0 {
ombi = profile.Ombi ombi = profile.Ombi
} }
} }
if app.config.Section("jellyseerr").Key("enabled").MustBool(false) { if req.Jellyseerr && app.config.Section("jellyseerr").Key("enabled").MustBool(false) {
if profile.Jellyseerr.Enabled { if profile.Jellyseerr.Enabled {
jellyseerr = profile.Jellyseerr jellyseerr = profile.Jellyseerr
} }

View File

@ -84,30 +84,40 @@
<form class="card relative mx-auto my-[10%] w-11/12 sm:w-4/5 lg:w-1/3" id="form-modify-user" href=""> <form class="card relative mx-auto my-[10%] w-11/12 sm:w-4/5 lg:w-1/3" id="form-modify-user" href="">
<span class="heading"><span id="header-modify-user"></span> <span class="modal-close">&times;</span></span> <span class="heading"><span id="header-modify-user"></span> <span class="modal-close">&times;</span></span>
<p class="content my-4">{{ .strings.modifySettingsDescription }}</p> <p class="content my-4">{{ .strings.modifySettingsDescription }}</p>
<div class="flex flex-row mb-4"> <div class="flex flex-col gap-4 my-2">
<label class="grow mr-2"> <div class="flex flex-row gap-2">
<input type="radio" name="modify-user-source" class="unfocused" id="radio-use-profile" checked> <label class="grow">
<span class="button ~neutral @high supra full-width center">{{ .strings.profile }}</span> <input type="radio" name="modify-user-source" class="unfocused" id="radio-use-profile" checked>
<span class="button ~neutral @high supra full-width center">{{ .strings.profile }}</span>
</label>
<label class="grow">
<input type="radio" name="modify-user-source" class="unfocused" id="radio-use-user">
<span class="button ~neutral @low supra full-width center">{{ .strings.user }}</span>
</label>
</div>
<div class="select ~neutral @low">
<select id="modify-user-profiles"></select>
</div>
<div class="select ~neutral @low unfocused">
<select id="modify-user-users"></select>
</div>
<label class="switch">
<input type="checkbox" id="modify-user-homescreen" checked>
<span>{{ .strings.applyHomescreenLayout }}</span>
</label> </label>
<label class="grow ml-2"> <label class="switch">
<input type="radio" name="modify-user-source" class="unfocused" id="radio-use-user"> <input type="checkbox" id="modify-user-ombi" checked>
<span class="button ~neutral @low supra full-width center">{{ .strings.user }}</span> <span>{{ .strings.applyOmbi }}</span>
</label>
<label class="switch">
<input type="checkbox" id="modify-user-jellyseerr" checked>
<span>{{ .strings.applyJellyseerr }}</span>
</label>
<label>
<input type="submit" class="unfocused">
<span class="button ~urge @low full-width center supra submit">{{ .strings.apply }}</span>
</label> </label>
</div> </div>
<div class="select ~neutral @low mb-4">
<select id="modify-user-profiles"></select>
</div>
<div class="select ~neutral @low mb-4 unfocused">
<select id="modify-user-users"></select>
</div>
<label class="switch mb-4">
<input type="checkbox" id="modify-user-homescreen" checked>
<span>{{ .strings.applyHomescreenLayout }}</span>
</label>
<label>
<input type="submit" class="unfocused">
<span class="button ~urge @low full-width center supra submit">{{ .strings.apply }}</span>
</label>
</form> </form>
</div> </div>
{{ if .referralsEnabled }} {{ if .referralsEnabled }}

View File

@ -81,6 +81,8 @@
"useInviteExpiry": "Set expiry from profile/invite", "useInviteExpiry": "Set expiry from profile/invite",
"useInviteExpiryNote": "By default, invites expire after 90 days but can be renewed by the user. Enable for the referral to be disabled after the time set.", "useInviteExpiryNote": "By default, invites expire after 90 days but can be renewed by the user. Enable for the referral to be disabled after the time set.",
"applyHomescreenLayout": "Apply homescreen layout", "applyHomescreenLayout": "Apply homescreen layout",
"applyOmbi": "Apply Ombi profile (if available)",
"applyJellyseerr": "Apply Jellyseerr profile (if available)",
"sendDeleteNotificationEmail": "Send notification message", "sendDeleteNotificationEmail": "Send notification message",
"sendDeleteNotifiationExample": "Your account has been deleted.", "sendDeleteNotifiationExample": "Your account has been deleted.",
"settingsRestart": "Restart", "settingsRestart": "Restart",

View File

@ -179,6 +179,8 @@ type userSettingsDTO struct {
ApplyTo []string `json:"apply_to"` // Users to apply settings to ApplyTo []string `json:"apply_to"` // Users to apply settings to
ID string `json:"id"` // ID of user (if from = "user") ID string `json:"id"` // ID of user (if from = "user")
Homescreen bool `json:"homescreen"` // Whether to apply homescreen layout or not Homescreen bool `json:"homescreen"` // Whether to apply homescreen layout or not
Ombi bool `json:"ombi"` // Whether to apply ombi profile or not
Jellyseerr bool `json:"jellyseerr"` // Whether to apply jellyseerr profile or not
} }
type announcementDTO struct { type announcementDTO struct {

View File

@ -187,6 +187,7 @@ login.onLogin = () => {
console.log("Logged in."); console.log("Logged in.");
window.updater = new Updater(); window.updater = new Updater();
// FIXME: Decide whether to autoload activity or not // FIXME: Decide whether to autoload activity or not
window.invites.reload()
setInterval(() => { window.invites.reload(); accounts.reload(); }, 30*1000); setInterval(() => { window.invites.reload(); accounts.reload(); }, 30*1000);
const currentTab = window.tabs.current; const currentTab = window.tabs.current;
switch (currentTab) { switch (currentTab) {

View File

@ -795,6 +795,10 @@ export class accountsList {
private _searchBox = document.getElementById("accounts-search") as HTMLInputElement; private _searchBox = document.getElementById("accounts-search") as HTMLInputElement;
private _search: Search; private _search: Search;
private _applyHomesreen = document.getElementById("modify-user-homescreen") as HTMLInputElement;
private _applyOmbi = document.getElementById("modify-user-ombi") as HTMLInputElement;
private _applyJellyseerr = document.getElementById("modify-user-jellyseerr") as HTMLInputElement;
private _selectAll = document.getElementById("accounts-select-all") as HTMLInputElement; private _selectAll = document.getElementById("accounts-select-all") as HTMLInputElement;
private _users: { [id: string]: user }; private _users: { [id: string]: user };
private _ordering: string[] = []; private _ordering: string[] = [];
@ -1459,6 +1463,7 @@ export class accountsList {
const modalHeader = document.getElementById("header-modify-user"); const modalHeader = document.getElementById("header-modify-user");
modalHeader.textContent = window.lang.quantity("modifySettingsFor", this._collectUsers().length) modalHeader.textContent = window.lang.quantity("modifySettingsFor", this._collectUsers().length)
let list = this._collectUsers(); let list = this._collectUsers();
(() => { (() => {
let innerHTML = ""; let innerHTML = "";
for (const profile of window.availableProfiles) { for (const profile of window.availableProfiles) {
@ -1477,6 +1482,7 @@ export class accountsList {
const form = document.getElementById("form-modify-user") as HTMLFormElement; const form = document.getElementById("form-modify-user") as HTMLFormElement;
const button = form.querySelector("span.submit") as HTMLSpanElement; const button = form.querySelector("span.submit") as HTMLSpanElement;
this._modifySettingsProfile.checked = true; this._modifySettingsProfile.checked = true;
this._modifySettingsUser.checked = false; this._modifySettingsUser.checked = false;
form.onsubmit = (event: Event) => { form.onsubmit = (event: Event) => {
@ -1484,7 +1490,9 @@ export class accountsList {
toggleLoader(button); toggleLoader(button);
let send = { let send = {
"apply_to": list, "apply_to": list,
"homescreen": (document.getElementById("modify-user-homescreen") as HTMLInputElement).checked "homescreen": this._applyHomesreen.checked,
"ombi": this._applyOmbi.checked,
"jellyseerr": this._applyJellyseerr.checked
}; };
if (this._modifySettingsProfile.checked && !this._modifySettingsUser.checked) { if (this._modifySettingsProfile.checked && !this._modifySettingsUser.checked) {
send["from"] = "profile"; send["from"] = "profile";
@ -1821,6 +1829,16 @@ export class accountsList {
}; };
this._modifySettings.onclick = this.modifyUsers; this._modifySettings.onclick = this.modifyUsers;
this._modifySettings.classList.add("unfocused"); this._modifySettings.classList.add("unfocused");
if (window.ombiEnabled)
this._applyOmbi.parentElement.classList.remove("unfocused");
else
this._applyOmbi.parentElement.classList.add("unfocused");
if (window.jellyseerrEnabled)
this._applyJellyseerr.parentElement.classList.remove("unfocused");
else
this._applyJellyseerr.parentElement.classList.add("unfocused");
const checkSource = () => { const checkSource = () => {
const profileSpan = this._modifySettingsProfile.nextElementSibling as HTMLSpanElement; const profileSpan = this._modifySettingsProfile.nextElementSibling as HTMLSpanElement;
const userSpan = this._modifySettingsUser.nextElementSibling as HTMLSpanElement; const userSpan = this._modifySettingsUser.nextElementSibling as HTMLSpanElement;
@ -1831,6 +1849,8 @@ export class accountsList {
profileSpan.classList.remove("@low"); profileSpan.classList.remove("@low");
userSpan.classList.remove("@high"); userSpan.classList.remove("@high");
userSpan.classList.add("@low"); userSpan.classList.add("@low");
this._applyOmbi.parentElement.classList.remove("unfocused");
this._applyJellyseerr.parentElement.classList.remove("unfocused");
} else { } else {
this._userSelect.parentElement.classList.remove("unfocused"); this._userSelect.parentElement.classList.remove("unfocused");
this._profileSelect.parentElement.classList.add("unfocused"); this._profileSelect.parentElement.classList.add("unfocused");
@ -1838,6 +1858,8 @@ export class accountsList {
userSpan.classList.remove("@low"); userSpan.classList.remove("@low");
profileSpan.classList.remove("@high"); profileSpan.classList.remove("@high");
profileSpan.classList.add("@low"); profileSpan.classList.add("@low");
this._applyOmbi.parentElement.classList.add("unfocused");
this._applyJellyseerr.parentElement.classList.add("unfocused");
} }
}; };
this._modifySettingsProfile.onchange = checkSource; this._modifySettingsProfile.onchange = checkSource;