New options
This commit is contained in:
parent
35423e03d9
commit
e26400da78
@ -3,6 +3,7 @@ package api
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"github.com/TicketsBot/GoPanel/botcontext"
|
"github.com/TicketsBot/GoPanel/botcontext"
|
||||||
dbclient "github.com/TicketsBot/GoPanel/database"
|
dbclient "github.com/TicketsBot/GoPanel/database"
|
||||||
"github.com/TicketsBot/GoPanel/rpc/cache"
|
"github.com/TicketsBot/GoPanel/rpc/cache"
|
||||||
@ -54,6 +55,10 @@ func UpdateSettingsHandler(ctx *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Settings) updateSettings(guildId uint64) error {
|
func (s *Settings) updateSettings(guildId uint64) error {
|
||||||
|
if err := s.Validate(guildId); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
group, _ := errgroup.WithContext(context.Background())
|
group, _ := errgroup.WithContext(context.Background())
|
||||||
|
|
||||||
group.Go(func() error {
|
group.Go(func() error {
|
||||||
@ -67,6 +72,30 @@ func (s *Settings) updateSettings(guildId uint64) error {
|
|||||||
return group.Wait()
|
return group.Wait()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Settings) Validate(guildId uint64) error {
|
||||||
|
group, _ := errgroup.WithContext(context.Background())
|
||||||
|
|
||||||
|
// Validate panel from same guild
|
||||||
|
group.Go(func() error {
|
||||||
|
if s.ContextMenuPanel != nil {
|
||||||
|
panelId := *s.ContextMenuPanel
|
||||||
|
|
||||||
|
panel, err := dbclient.Client.Panel.GetById(panelId)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if guildId != panel.GuildId {
|
||||||
|
return fmt.Errorf("guild ID doesn't match")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
return group.Wait()
|
||||||
|
}
|
||||||
|
|
||||||
func setOpenCommandPermissions(guildId uint64, disabled bool) error {
|
func setOpenCommandPermissions(guildId uint64, disabled bool) error {
|
||||||
ctx, err := botcontext.ContextForGuild(guildId)
|
ctx, err := botcontext.ContextForGuild(guildId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
export let selected;
|
export let selected;
|
||||||
export let isMulti = true;
|
export let isMulti = true;
|
||||||
|
|
||||||
let selectedRaw;
|
let selectedRaw = isMulti ? panels.filter((p) => selected.includes(p.panel_id)) : selected;
|
||||||
|
|
||||||
function labelMapper(panel) {
|
function labelMapper(panel) {
|
||||||
return panel.title || "";
|
return panel.title || "";
|
||||||
@ -53,6 +53,10 @@
|
|||||||
selectedRaw = selectedRaw.panel_id;
|
selectedRaw = selectedRaw.panel_id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
console.log(selectedRaw)
|
||||||
|
console.log(selected)
|
||||||
}
|
}
|
||||||
|
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
|
20
frontend/src/components/SimplePanelDropdown.svelte
Normal file
20
frontend/src/components/SimplePanelDropdown.svelte
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<Dropdown {col1} {col2} {col3} {col4} bind:value label={label}>
|
||||||
|
{#each panels as panel}
|
||||||
|
<option value="{panel.panel_id}">
|
||||||
|
{panel.title}
|
||||||
|
</option>
|
||||||
|
{/each}
|
||||||
|
</Dropdown>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Dropdown from "./form/Dropdown.svelte"
|
||||||
|
|
||||||
|
export let value;
|
||||||
|
export let label;
|
||||||
|
export let panels = [];
|
||||||
|
|
||||||
|
export let col1 = false;
|
||||||
|
export let col2 = false;
|
||||||
|
export let col3 = false;
|
||||||
|
export let col4 = false;
|
||||||
|
</script>
|
@ -25,12 +25,18 @@
|
|||||||
<Checkbox label="Hide Claim Button" col4=true bind:value={data.hide_claim_button}/>
|
<Checkbox label="Hide Claim Button" col4=true bind:value={data.hide_claim_button}/>
|
||||||
<Checkbox label="Disable /open Command" col4=true bind:value={data.disable_open_command}/>
|
<Checkbox label="Disable /open Command" col4=true bind:value={data.disable_open_command}/>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="from-message-settings">
|
||||||
<Dropdown col3={true} label="Context Menu Permission Level" bind:value={data.context_menu_permission_level}>
|
<h3>Start Ticket From Message Settings</h3>
|
||||||
<option value="0">Everyone</option>
|
<div class="row">
|
||||||
<option value="1">Support Representative</option>
|
<Dropdown col3={true} label="Required Permission Level" bind:value={data.context_menu_permission_level}>
|
||||||
<option value="2">Administrator</option>
|
<option value="0">Everyone</option>
|
||||||
</Dropdown>
|
<option value="1">Support Representative</option>
|
||||||
|
<option value="2">Administrator</option>
|
||||||
|
</Dropdown>
|
||||||
|
|
||||||
|
<Checkbox label="Add Message Sender To Ticket" col3={true} bind:value={data.context_menu_add_sender} />
|
||||||
|
<SimplePanelDropdown label="Use Settings From Panel" col3={true} bind:panels bind:value={data.context_menu_panel} />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
@ -57,12 +63,25 @@
|
|||||||
import Button from "../Button.svelte";
|
import Button from "../Button.svelte";
|
||||||
import NamingScheme from "../NamingScheme.svelte";
|
import NamingScheme from "../NamingScheme.svelte";
|
||||||
import Dropdown from "../form/Dropdown.svelte";
|
import Dropdown from "../form/Dropdown.svelte";
|
||||||
|
import PanelDropdown from "../PanelDropdown.svelte";
|
||||||
|
import SimplePanelDropdown from "../SimplePanelDropdown.svelte";
|
||||||
|
|
||||||
export let guildId;
|
export let guildId;
|
||||||
|
|
||||||
setDefaultHeaders();
|
setDefaultHeaders();
|
||||||
|
|
||||||
let channels = [];
|
let channels = [];
|
||||||
|
let panels = [];
|
||||||
|
|
||||||
|
async function loadPanels() {
|
||||||
|
const res = await axios.get(`${API_URL}/api/${guildId}/panels`);
|
||||||
|
if (res.status !== 200) {
|
||||||
|
notifyError(res.data.error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
panels = res.data;
|
||||||
|
}
|
||||||
|
|
||||||
async function loadChannels() {
|
async function loadChannels() {
|
||||||
const res = await axios.get(`${API_URL}/api/${guildId}/channels`);
|
const res = await axios.get(`${API_URL}/api/${guildId}/channels`);
|
||||||
@ -156,6 +175,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
withLoadingScreen(async () => {
|
withLoadingScreen(async () => {
|
||||||
|
await loadPanels();
|
||||||
await loadChannels();
|
await loadChannels();
|
||||||
await loadData();
|
await loadData();
|
||||||
});
|
});
|
||||||
@ -183,6 +203,10 @@
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.from-message-settings {
|
||||||
|
border-top: 1px solid rgba(0, 0, 0, .25);
|
||||||
|
}
|
||||||
|
|
||||||
@media only screen and (max-width: 950px) {
|
@media only screen and (max-width: 950px) {
|
||||||
.row {
|
.row {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
2
go.mod
2
go.mod
@ -6,7 +6,7 @@ require (
|
|||||||
github.com/BurntSushi/toml v0.3.1
|
github.com/BurntSushi/toml v0.3.1
|
||||||
github.com/TicketsBot/archiverclient v0.0.0-20210220155137-a562b2f1bbbb
|
github.com/TicketsBot/archiverclient v0.0.0-20210220155137-a562b2f1bbbb
|
||||||
github.com/TicketsBot/common v0.0.0-20210903095620-eb02b87cb4ca
|
github.com/TicketsBot/common v0.0.0-20210903095620-eb02b87cb4ca
|
||||||
github.com/TicketsBot/database v0.0.0-20210902205640-76b8973364e8
|
github.com/TicketsBot/database v0.0.0-20210903140813-152a2383314c
|
||||||
github.com/TicketsBot/worker v0.0.0-20210903100019-6e6eab3a3196
|
github.com/TicketsBot/worker v0.0.0-20210903100019-6e6eab3a3196
|
||||||
github.com/apex/log v1.1.2
|
github.com/apex/log v1.1.2
|
||||||
github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff // indirect
|
github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff // indirect
|
||||||
|
Loading…
x
Reference in New Issue
Block a user