Compare commits
21 Commits
Author | SHA1 | Date | |
---|---|---|---|
f944661111 | |||
20836970e5 | |||
e4bca43489 | |||
cdab64428d | |||
6c7202658e | |||
e66bd64a07 | |||
6cd54f7005 | |||
6e2a468b22 | |||
d0cb590e04 | |||
f7eb4f9ca8 | |||
59420922a5 | |||
25e9ac4982 | |||
916597dff6 | |||
0b4083e611 | |||
b89c5bc17d | |||
3c8a74f203 | |||
747b169374 | |||
7f0d1f2ea1 | |||
ac64aa2539 | |||
4fabf3f945 | |||
4aa9229a09 |
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -7,3 +7,4 @@ output/
|
||||||
Konfi-Castle-Kasino
|
Konfi-Castle-Kasino
|
||||||
bind_linux_amd64.go
|
bind_linux_amd64.go
|
||||||
dist/
|
dist/
|
||||||
|
config.ini
|
||||||
|
|
BIN
assets/bg_frontend.jpg
Normal file
BIN
assets/bg_frontend.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 677 KiB |
4
assets/css/admin.css
Normal file
4
assets/css/admin.css
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
body{
|
||||||
|
background:#121212;
|
||||||
|
color: #fff;
|
||||||
|
}
|
4
assets/css/frontend.css
Normal file
4
assets/css/frontend.css
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
body {
|
||||||
|
background: url('/assets/bg_frontend.jpg') fixed no-repeat center;
|
||||||
|
background-size: cover;
|
||||||
|
}
|
|
@ -1,23 +0,0 @@
|
||||||
body{
|
|
||||||
background:#fff;
|
|
||||||
font-family:sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
th,td{
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
border-bottom: none;
|
|
||||||
border-right: none;
|
|
||||||
padding: 2px 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
tr.top th{
|
|
||||||
border: none;
|
|
||||||
text-align: left;
|
|
||||||
padding-left: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table{
|
|
||||||
border:1px solid #ccc;
|
|
||||||
border-left: none;
|
|
||||||
border-top: none;
|
|
||||||
}
|
|
|
@ -1,117 +1,164 @@
|
||||||
function getList() {
|
const app = new Vue({
|
||||||
$.getJSON('/list?asc=asc', function (data) {
|
el: '#adminedit',
|
||||||
$("#list").html('');
|
template: `
|
||||||
$.each(data, function (i, item) {
|
<div>
|
||||||
// Modus nach Gemeindeb
|
<div id="msg" v-if="error !== ''"> {{ error }}</div>
|
||||||
if(item.gemeinde !== undefined) {
|
<table class="ui celled striped inverted table">
|
||||||
$("#list").append('<tr id="kcoins_row_' + item.id + '">' +
|
<thead>
|
||||||
'<td>' + item.name + '</td> ' +
|
<tr>
|
||||||
'<td>' + item.gemeinde + '</td> ' +
|
<th>Name</th>
|
||||||
'<td id="kcoins_display_' + item.id + '">' + item.kcoins + '</td>' +
|
<td v-if="mode === 0">Gemeinde</td>
|
||||||
'<td><span class="ui action input" id="kcoins_container_' + item.id + '"><input type="number" value="0" id="kcoins_' + item.id + '" name="kcoins" autocomplete="off" /><button class="ui right labeled icon button green" onclick="updateCoins(\'' + item.id + '\');"><i class="right dollar icon"></i>KonfiCoins Hinzufügen</button></span> <button class="ui button red" onclick="deleteKonfi(\'' + item.id + '\');" id="kcoins_container_' + item.id + '">Konfi Löschen</button></td></tr>');
|
<th>KonfiCoins</th>
|
||||||
} else {
|
<th v-if="mode === 1">Konfis</th>
|
||||||
$("#list").append('<tr id="kcoins_row_' + item.id + '"> ' +
|
<th v-if="mode === 1">Konficoins pro Person</th>
|
||||||
'<td>' + item.name + '</td> ' +
|
<th>Bearbeiten</th>
|
||||||
'<td id="kcoins_display_' + item.id + '">' + item.kcoins + '</td>' +
|
</tr>
|
||||||
'<td>' + item.konfi_count + '</td> ' +
|
</thead>
|
||||||
'<td id="kcoins_quota_' + item.id + '">' + (item.coins_quota).toFixed(2) + '</td> ' +
|
<tbody id="list">
|
||||||
'<td><span class="ui action input" id="kcoins_container_' + item.id + '"><input type="number" value="0" id="kcoins_' + item.id + '" name="kcoins" autocomplete="off" /><button class="ui right labeled icon button green" onclick="updateCoins(\'' + item.id + '\');"><i class="right dollar icon"></i>KonfiCoins Hinzufügen</button></span> <button class="ui button red" onclick="deleteGemeinde(\'' + item.id + '\');" id="kcoins_container_' + item.id + '">Gemeinde Löschen</button></td></tr>');
|
<tr v-if="data.length === 0">
|
||||||
|
<td colspan="5">Laden...</td>
|
||||||
|
</tr>
|
||||||
|
<tr v-for="(item, i) in data" :class="{ active: currentRow === item.id }">
|
||||||
|
<td>{{ item.name }}</td>
|
||||||
|
<td v-if="mode === 0">{{ item.gemeinde }}</td>
|
||||||
|
<td>{{ item.kcoins.toLocaleString('de-DE') }}</td>
|
||||||
|
<td v-if="mode === 1">{{ item.konfi_count }}</td>
|
||||||
|
<td v-if="mode === 1">{{ parseFloat((item.coins_quota).toFixed(2)).toLocaleString('de-DE') }}</td>
|
||||||
|
<td>
|
||||||
|
<span class="ui action input">
|
||||||
|
<input type="number" :tabindex="(i +1)" @focus="currentRow = item.id" @keyup.enter="updateCoins(item.id)" autocomplete="off" v-model="formStuff[item.id].addCoins"/>
|
||||||
|
<a class="ui right labeled icon button green" @click="updateCoins(item.id)">
|
||||||
|
<i class="right dollar icon"></i>
|
||||||
|
KonfiCoins Hinzufügen
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<a v-if="!formStuff[item.id].showDelete" class="ui button red" @click="formStuff[item.id].showDelete = true">
|
||||||
|
Löschen
|
||||||
|
</a>
|
||||||
|
<span v-if="formStuff[item.id].showDelete">
|
||||||
|
Sicher?
|
||||||
|
<a class="ui button red" @click="deleteStuff(item.id)">
|
||||||
|
Löschen
|
||||||
|
</a>
|
||||||
|
<a class="ui button" @click="formStuff[item.id].showDelete = false">
|
||||||
|
Abbrechen
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>`,
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
mode: 1,
|
||||||
|
data: [],
|
||||||
|
error: '',
|
||||||
|
addCoins: 0,
|
||||||
|
loading: false,
|
||||||
|
formStuff: {},
|
||||||
|
currentRow: 0,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
beforeMount() {
|
||||||
|
this.mode = mode
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
if (typeof (EventSource) === "undefined") {
|
||||||
|
this.error = 'Diese Browser wird nicht unterstützt.'
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let source = new EventSource('/events');
|
||||||
|
source.onmessage = e => {
|
||||||
|
console.debug('unsupported event!', e)
|
||||||
|
};
|
||||||
|
source.addEventListener('init', e => {
|
||||||
|
this.data = JSON.parse(e.data)
|
||||||
|
for (const i in this.data) {
|
||||||
|
this.$set(this.formStuff, this.data[i].id, {addCoins: 0, showDelete: false})
|
||||||
}
|
}
|
||||||
});
|
this.sortData()
|
||||||
});
|
})
|
||||||
}
|
source.addEventListener('update', e => {
|
||||||
|
this.update(JSON.parse(e.data))
|
||||||
getList();
|
})
|
||||||
|
source.addEventListener('create', e => {
|
||||||
function updateCoins(id) {
|
this.create(JSON.parse(e.data))
|
||||||
let addcoins = $('#kcoins_' + id).val();
|
})
|
||||||
|
source.addEventListener('delete', e => {
|
||||||
if(addcoins !== 0) {
|
this.delete(JSON.parse(e.data))
|
||||||
$('#coins_container_' + id).addClass('disabled');
|
})
|
||||||
|
},
|
||||||
$.ajax({
|
methods: {
|
||||||
url: '/admin/update',
|
sortData() {
|
||||||
method: 'POST',
|
this.data.sort((a, b) => {
|
||||||
data: 'id=' + id + '&addcoins=' + addcoins,
|
return a.name < b.name ? -1 : 1
|
||||||
success: function (msg) {
|
})
|
||||||
$('#coins_container_' + id).removeClass('disabled');
|
},
|
||||||
|
update(updatedData) {
|
||||||
if (msg.message === 'success') {
|
for (const i in this.data) {
|
||||||
$('#kcoins_' + id).val("0");
|
if (this.data[i].id === updatedData.id) {
|
||||||
$('#kcoins_display_' + id).html(msg.data.kcoins);
|
this.$set(this.data, i, updatedData)
|
||||||
if(msg.data.coins_quota !== undefined) {
|
|
||||||
$('#kcoins_quota_' + id).html(msg.data.coins_quota.toFixed(2));
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
$('#msg').html('<div class="ui error message" style="display: block;">Ein Fehler trat auf.</div>');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
this.sortData()
|
||||||
}
|
},
|
||||||
}
|
create(createdData) {
|
||||||
|
this.data.push(createdData)
|
||||||
function deleteKonfi(id) {
|
this.$set(this.formStuff, createdData.id, {addCoins: 0, showDelete: false})
|
||||||
$('#kcoins_container_' + id).addClass('disabled');
|
this.sortData()
|
||||||
|
},
|
||||||
$('.ui.basic.kofidel.modal')
|
delete(deletedData) {
|
||||||
.modal({
|
for (const i in this.data) {
|
||||||
closable : false,
|
if (this.data[i].id === deletedData.id) {
|
||||||
duration: 200,
|
this.data.splice(i, 1)
|
||||||
onDeny : function(){
|
}
|
||||||
$('#kcoins_container_' + id).removeClass('disabled');
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
onApprove : function() {
|
|
||||||
$.ajax({
|
|
||||||
url: '/admin/delete',
|
|
||||||
method: 'POST',
|
|
||||||
data: 'id=' + id,
|
|
||||||
success: function (msg) {
|
|
||||||
if (msg === 'success') {
|
|
||||||
getList();
|
|
||||||
$('#msg').html('<div class="ui success message" style="display: block;">Der Konfi wurde erfolgreich gelöscht.</div>');
|
|
||||||
} else {
|
|
||||||
$('#msg').html('<div class="ui error message" style="display: block;">Ein Fehler trat auf.</div>');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
})
|
this.sortData()
|
||||||
.modal('show')
|
},
|
||||||
;
|
updateCoins(id) {
|
||||||
}
|
this.loading = true
|
||||||
|
|
||||||
function deleteGemeinde(id) {
|
if (this.formStuff[id].addCoins == 0) {
|
||||||
$('#kcoins_container_' + id).addClass('disabled');
|
return
|
||||||
|
|
||||||
$('.ui.basic.gemeindedel.modal')
|
|
||||||
.modal({
|
|
||||||
closable : false,
|
|
||||||
duration: 200,
|
|
||||||
onDeny : function(){
|
|
||||||
$('#kcoins_container_' + id).removeClass('disabled');
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
onApprove : function() {
|
|
||||||
$.ajax({
|
|
||||||
url: '/admin/delete',
|
|
||||||
method: 'POST',
|
|
||||||
data: 'id=' + id,
|
|
||||||
success: function (msg) {
|
|
||||||
if (msg === 'success') {
|
|
||||||
getList();
|
|
||||||
$('#msg').html('<div class="ui success message" style="display: block;">Die Gemeinde wurde erfolgreich gelöscht.</div>');
|
|
||||||
} else {
|
|
||||||
$('#msg').html('<div class="ui error message" style="display: block;">Ein Fehler trat auf.</div>');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
})
|
|
||||||
.modal('show')
|
let formData = new FormData();
|
||||||
;
|
formData.append('id', id);
|
||||||
}
|
formData.append('addcoins', this.formStuff[id].addCoins);
|
||||||
|
|
||||||
|
fetch('/admin/update', {
|
||||||
|
method: 'POST',
|
||||||
|
body: formData
|
||||||
|
})
|
||||||
|
.catch(e => {
|
||||||
|
this.error = e
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
this.loading = false
|
||||||
|
this.$set(this.formStuff, id, {addCoins: 0, showDelete: false})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
deleteStuff(id) {
|
||||||
|
this.loading = true
|
||||||
|
let formData = new FormData();
|
||||||
|
formData.append('id', id);
|
||||||
|
|
||||||
|
fetch('/admin/delete', {
|
||||||
|
method: 'POST',
|
||||||
|
body: formData
|
||||||
|
})
|
||||||
|
.catch(e => {
|
||||||
|
this.error = e
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
this.loading = false
|
||||||
|
})
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
// Konfi hinzufügen
|
// Konfi hinzufügen
|
||||||
$('.ui.kofiadd.modal')
|
$('.ui.kofiadd.modal')
|
||||||
|
@ -155,8 +202,6 @@ $('.ui.gemeindeadd.modal')
|
||||||
$('.loader').removeClass('active');
|
$('.loader').removeClass('active');
|
||||||
if (msg === 'success') {
|
if (msg === 'success') {
|
||||||
$('#name').val('');
|
$('#name').val('');
|
||||||
|
|
||||||
getList();
|
|
||||||
$('#msg').html('<div class="ui success message" style="display: block;">Die Gemeinde wurde erfolgreich hinzugefügt.</div>');
|
$('#msg').html('<div class="ui success message" style="display: block;">Die Gemeinde wurde erfolgreich hinzugefügt.</div>');
|
||||||
} else {
|
} else {
|
||||||
$('#msg').html('<div class="ui error message" style="display: block;">Ein Fehler trat auf.</div>');
|
$('#msg').html('<div class="ui error message" style="display: block;">Ein Fehler trat auf.</div>');
|
||||||
|
|
|
@ -3,25 +3,27 @@ const app = new Vue({
|
||||||
template: `
|
template: `
|
||||||
<div style="width: 99%; margin: 0 auto;padding-top: 10px;">
|
<div style="width: 99%; margin: 0 auto;padding-top: 10px;">
|
||||||
<div class="ui error message" style="display: block;" v-if="error !== ''">{{ error }}</div>
|
<div class="ui error message" style="display: block;" v-if="error !== ''">{{ error }}</div>
|
||||||
<table class="ui celled table" v-if="error === ''">
|
<table class="ui celled striped inverted table" v-if="error === ''">
|
||||||
<thead>
|
<thead>
|
||||||
<tr class="top">
|
<tr class="top">
|
||||||
|
<th scope="col">Platz</th>
|
||||||
<th scope="col" v-if="mode === 0">Name</th>
|
<th scope="col" v-if="mode === 0">Name</th>
|
||||||
<th scope="col" v-if="mode === 1">Gemeinde</th>
|
<th scope="col" v-if="mode === 1">Gemeinde</th>
|
||||||
<th scope="col" v-if="mode === 0">Gemeinde</th>
|
<th scope="col" v-if="mode === 0">Gemeinde</th>
|
||||||
|
<th scope="col" v-if="mode === 1">KonfiCoins pro Person</th>
|
||||||
<th scope="col">Eingezahlte KonfiCoins Gesamt</th>
|
<th scope="col">Eingezahlte KonfiCoins Gesamt</th>
|
||||||
<th scope="col" v-if="mode === 1">KonfiCoins p.P.</th>
|
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr v-if="data.length === 0">
|
<tr v-if="data.length === 0">
|
||||||
<td colspan="4">Laden...</td>
|
<td colspan="4">Laden...</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr v-for="item in data">
|
<tr v-for="(item, i) in data">
|
||||||
|
<td>{{ (i + 1) }}.</td>
|
||||||
<td>{{ item.name }}</td>
|
<td>{{ item.name }}</td>
|
||||||
<td v-if="mode === 0">{{ item.gemeinde }}</td>
|
<td v-if="mode === 0">{{ item.gemeinde }}</td>
|
||||||
<td>{{ item.kcoins }}</td>
|
<td v-if="mode === 1">{{ parseFloat((item.coins_quota).toFixed(2)).toLocaleString('de-DE') }}</td>
|
||||||
<td v-if="mode === 1">{{ (item.coins_quota).toFixed(2) }}</td>
|
<td>{{ item.kcoins.toLocaleString('de-DE') }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
BIN
assets/semantic/themes/default/assets/fonts/icons.eot
Normal file
BIN
assets/semantic/themes/default/assets/fonts/icons.eot
Normal file
Binary file not shown.
BIN
assets/semantic/themes/default/assets/fonts/icons.otf
Normal file
BIN
assets/semantic/themes/default/assets/fonts/icons.otf
Normal file
Binary file not shown.
2671
assets/semantic/themes/default/assets/fonts/icons.svg
Normal file
2671
assets/semantic/themes/default/assets/fonts/icons.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 434 KiB |
BIN
assets/semantic/themes/default/assets/fonts/icons.ttf
Normal file
BIN
assets/semantic/themes/default/assets/fonts/icons.ttf
Normal file
Binary file not shown.
BIN
assets/semantic/themes/default/assets/fonts/icons.woff
Normal file
BIN
assets/semantic/themes/default/assets/fonts/icons.woff
Normal file
Binary file not shown.
BIN
assets/semantic/themes/default/assets/fonts/icons.woff2
Normal file
BIN
assets/semantic/themes/default/assets/fonts/icons.woff2
Normal file
Binary file not shown.
BIN
assets/semantic/themes/default/assets/images/flags.png
Normal file
BIN
assets/semantic/themes/default/assets/images/flags.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 28 KiB |
|
@ -11,5 +11,8 @@ Interface = :8080
|
||||||
; Hier wird die Datenbank gespeichert
|
; Hier wird die Datenbank gespeichert
|
||||||
DBFile = ./data.db
|
DBFile = ./data.db
|
||||||
; Ob Fenster geöffnet werden sollen, oder nicht.
|
; Ob Fenster geöffnet werden sollen, oder nicht.
|
||||||
OpenWindows = true
|
OpenWindows = false
|
||||||
OpenBrowser = false
|
OpenBrowser = false
|
||||||
|
|
||||||
|
; Metrics
|
||||||
|
SaveMetrics = true
|
|
@ -12,4 +12,7 @@ Interface = 127.0.0.1:8080
|
||||||
DBFile = ./data.db
|
DBFile = ./data.db
|
||||||
; Ob Fenster geöffnet werden sollen, oder nicht.
|
; Ob Fenster geöffnet werden sollen, oder nicht.
|
||||||
OpenWindows = true
|
OpenWindows = true
|
||||||
OpenBrowser = false
|
OpenBrowser = false
|
||||||
|
|
||||||
|
; Metrics
|
||||||
|
SaveMetrics = false
|
10
main.go
10
main.go
|
@ -53,6 +53,16 @@ func main() {
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
if config.GetSaveMetrics() {
|
||||||
|
log.Info("Saving Metrics.")
|
||||||
|
go func() {
|
||||||
|
for {
|
||||||
|
models.AddMetric()
|
||||||
|
time.Sleep(60 * time.Second)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
// Windows
|
// Windows
|
||||||
if config.GetOpenWindows() {
|
if config.GetOpenWindows() {
|
||||||
go windows.OpenWindows()
|
go windows.OpenWindows()
|
||||||
|
|
|
@ -13,6 +13,7 @@ type Configuration struct {
|
||||||
Mode int
|
Mode int
|
||||||
OpenWindows bool
|
OpenWindows bool
|
||||||
OpenBrowser bool
|
OpenBrowser bool
|
||||||
|
SaveMetrics bool
|
||||||
}
|
}
|
||||||
|
|
||||||
var siteConf = &Configuration{}
|
var siteConf = &Configuration{}
|
||||||
|
@ -59,3 +60,8 @@ func GetOpenWindows() bool {
|
||||||
func GetOpenBrowser() bool {
|
func GetOpenBrowser() bool {
|
||||||
return siteConf.OpenBrowser
|
return siteConf.OpenBrowser
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetSaveMetrics returns whether to use metrics or not
|
||||||
|
func GetSaveMetrics() bool {
|
||||||
|
return siteConf.SaveMetrics
|
||||||
|
}
|
||||||
|
|
|
@ -62,7 +62,10 @@ func (c *Community) Update(moreCoins int64) (err error) {
|
||||||
c.KCoins += moreCoins
|
c.KCoins += moreCoins
|
||||||
|
|
||||||
// Update
|
// Update
|
||||||
_, err = x.Where("id = ?", c.ID).Update(c)
|
_, err = x.
|
||||||
|
Cols("k_coins").
|
||||||
|
Where("id = ?", c.ID).
|
||||||
|
Update(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ func DBinit() {
|
||||||
x.ShowSQL(false)
|
x.ShowSQL(false)
|
||||||
x.Logger().SetLevel(core.LOG_DEBUG)
|
x.Logger().SetLevel(core.LOG_DEBUG)
|
||||||
|
|
||||||
x.Sync(&Kofi{}, &Community{})
|
x.Sync(&Kofi{}, &Community{}, &Metric{})
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,10 @@ func (k *Kofi) Update(moreCoins int64) (err error) {
|
||||||
k.KCoins += moreCoins
|
k.KCoins += moreCoins
|
||||||
|
|
||||||
// Update
|
// Update
|
||||||
_, err = x.Where("id = ?", k.ID).Update(k)
|
_, err = x.
|
||||||
|
Cols("k_coins").
|
||||||
|
Where("id = ?", k.ID).
|
||||||
|
Update(k)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
31
pkg/models/metric.go
Normal file
31
pkg/models/metric.go
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
package models
|
||||||
|
|
||||||
|
import "github.com/labstack/gommon/log"
|
||||||
|
|
||||||
|
// Metric is the structure for metrics
|
||||||
|
type Metric struct {
|
||||||
|
ID int64 `xorm:"pk autoincr" json:"id" form:"id"`
|
||||||
|
Kcoins int64 `xorm:"bigint(11)"`
|
||||||
|
CommunityID int64 `xorm:"bigint(11)"`
|
||||||
|
CreatedUnix int64 `xorm:"created"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddMetric saves a new metric point
|
||||||
|
func AddMetric() {
|
||||||
|
allCommunites := []Community{}
|
||||||
|
err := x.Find(&allCommunites)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("Error getting metric data", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, community := range allCommunites {
|
||||||
|
m := Metric{
|
||||||
|
Kcoins: community.KCoins,
|
||||||
|
CommunityID: community.ID,
|
||||||
|
}
|
||||||
|
_, err := x.Insert(m)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("Error saving metrics", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -24,7 +24,11 @@ func isLoggedIn(c echo.Context) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
func adminHandler(c echo.Context) error {
|
func adminHandler(c echo.Context) error {
|
||||||
adminInfos := AdminInfos{true, config.GetMode(), models.Version}
|
adminInfos := AdminInfos{
|
||||||
|
Loggedin: true,
|
||||||
|
Mode: config.GetMode(),
|
||||||
|
Version: models.Version,
|
||||||
|
}
|
||||||
if isLoggedIn(c) {
|
if isLoggedIn(c) {
|
||||||
return c.Render(http.StatusOK, "admin_mode_"+strconv.Itoa(config.GetMode()), adminInfos)
|
return c.Render(http.StatusOK, "admin_mode_"+strconv.Itoa(config.GetMode()), adminInfos)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
{{define "admin_footer"}}
|
{{define "admin_footer"}}
|
||||||
|
|
||||||
|
<script>
|
||||||
|
const mode = {{.Mode}}
|
||||||
|
</script>
|
||||||
|
<script src="/assets/js/vue.min.js"></script>
|
||||||
<script src="/assets/js/admin.js"></script>
|
<script src="/assets/js/admin.js"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>Kasino Admin</title>
|
<title>Kasino Admin</title>
|
||||||
<link rel="stylesheet" type="text/css" href="/assets/semantic/semantic.min.css">
|
<link rel="stylesheet" type="text/css" href="/assets/semantic/semantic.min.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="/assets/css/admin.css">
|
||||||
|
|
||||||
<script>if (typeof module === 'object') {
|
<script>if (typeof module === 'object') {
|
||||||
window.module = module;
|
window.module = module;
|
||||||
|
|
|
@ -10,23 +10,10 @@
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div id="msg"></div>
|
<div id="adminedit">
|
||||||
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="ui celled table">
|
</div>
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Name</th>
|
|
||||||
<th>KonfiCoins</th>
|
|
||||||
<th>Konfis</th>
|
|
||||||
<th>KonfiCoins p.P.</th>
|
|
||||||
<th>Bearbeiten</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody id="list">
|
|
||||||
<tr>
|
|
||||||
<td colspan="5">Laden...</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p style="color: #ccc;">© 2017-2019 <a href="http://konradlangenberg.de" target="_blank" style="color:#ccc;">Konrad
|
<p style="color: #ccc;">© 2017-2019 <a href="http://konradlangenberg.de" target="_blank" style="color:#ccc;">Konrad
|
||||||
Langenberg</a> | Version: {{.Version}}</p>
|
Langenberg</a> | Version: {{.Version}}</p>
|
||||||
</div>
|
</div>
|
||||||
|
@ -79,6 +66,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{template "admin_footer"}}
|
{{template "admin_footer" .}}
|
||||||
{{end}}
|
{{end}}
|
||||||
{{end}}
|
{{end}}
|
|
@ -4,7 +4,8 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>Kasino</title>
|
<title>Kasino</title>
|
||||||
<link rel="stylesheet" type="text/css" href="/assets/semantic/semantic.min.css">
|
<link rel="stylesheet" type="text/css" href="/assets/semantic/semantic.min.css"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="/assets/css/frontend.css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="table"></div>
|
<div id="table"></div>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user