mirror of
https://gitlab.com/crafty-controller/crafty-4.git
synced 2024-08-30 18:23:09 +00:00
Merge branch 'dev' into bug/unloaded-servers
This commit is contained in:
commit
c5d049830e
@ -1,14 +1,15 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## --- [4.0.9] - 2022/TBD
|
## --- [4.0.9] - 2022/08/06
|
||||||
### New features
|
### New features
|
||||||
TBD
|
TBD
|
||||||
### Bug fixes
|
### Bug fixes
|
||||||
TBD
|
- Fix Schedules Traceback Bug ([Merge Request |](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/419) [Commit |](https://gitlab.com/crafty-controller/crafty-4/-/commit/f69d79b7023d6c26fccb5caeae9e47b40ebe5af2) [Commit](https://gitlab.com/crafty-controller/crafty-4/-/commit/ad318296dc93beb5533fcd13066440df9f9e799a))
|
||||||
### Tweaks
|
### Tweaks
|
||||||
TBD
|
- credits-v2| Translator status ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/421))
|
||||||
|
- Use Names in Schedules ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/419))
|
||||||
### Lang
|
### Lang
|
||||||
TBD
|
- Make Schedules panel translatable ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/419))
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
## --- [4.0.8] - 2022/08/05
|
## --- [4.0.8] - 2022/08/05
|
||||||
|
@ -76,7 +76,7 @@ class ManagementController:
|
|||||||
interval_type,
|
interval_type,
|
||||||
start_time,
|
start_time,
|
||||||
command,
|
command,
|
||||||
comment=None,
|
name,
|
||||||
enabled=True,
|
enabled=True,
|
||||||
):
|
):
|
||||||
return HelpersManagement.create_scheduled_task(
|
return HelpersManagement.create_scheduled_task(
|
||||||
@ -86,7 +86,7 @@ class ManagementController:
|
|||||||
interval_type,
|
interval_type,
|
||||||
start_time,
|
start_time,
|
||||||
command,
|
command,
|
||||||
comment,
|
name,
|
||||||
enabled,
|
enabled,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ class Schedules(BaseModel):
|
|||||||
interval_type = CharField()
|
interval_type = CharField()
|
||||||
start_time = CharField(null=True)
|
start_time = CharField(null=True)
|
||||||
command = CharField(null=True)
|
command = CharField(null=True)
|
||||||
comment = CharField()
|
name = CharField()
|
||||||
one_time = BooleanField(default=False)
|
one_time = BooleanField(default=False)
|
||||||
cron_string = CharField(default="")
|
cron_string = CharField(default="")
|
||||||
parent = IntegerField(null=True)
|
parent = IntegerField(null=True)
|
||||||
@ -265,7 +265,7 @@ class HelpersManagement:
|
|||||||
interval_type,
|
interval_type,
|
||||||
start_time,
|
start_time,
|
||||||
command,
|
command,
|
||||||
comment=None,
|
name,
|
||||||
enabled=True,
|
enabled=True,
|
||||||
one_time=False,
|
one_time=False,
|
||||||
cron_string="* * * * *",
|
cron_string="* * * * *",
|
||||||
@ -281,7 +281,7 @@ class HelpersManagement:
|
|||||||
Schedules.interval_type: interval_type,
|
Schedules.interval_type: interval_type,
|
||||||
Schedules.start_time: start_time,
|
Schedules.start_time: start_time,
|
||||||
Schedules.command: command,
|
Schedules.command: command,
|
||||||
Schedules.comment: comment,
|
Schedules.name: name,
|
||||||
Schedules.one_time: one_time,
|
Schedules.one_time: one_time,
|
||||||
Schedules.cron_string: cron_string,
|
Schedules.cron_string: cron_string,
|
||||||
Schedules.parent: parent,
|
Schedules.parent: parent,
|
||||||
|
@ -303,7 +303,7 @@ class TasksManager:
|
|||||||
job_data["interval_type"],
|
job_data["interval_type"],
|
||||||
job_data["start_time"],
|
job_data["start_time"],
|
||||||
job_data["command"],
|
job_data["command"],
|
||||||
"None",
|
job_data["name"],
|
||||||
job_data["enabled"],
|
job_data["enabled"],
|
||||||
job_data["one_time"],
|
job_data["one_time"],
|
||||||
job_data["cron_string"],
|
job_data["cron_string"],
|
||||||
@ -318,6 +318,7 @@ class TasksManager:
|
|||||||
|
|
||||||
# Check to see if it's enabled and is not a chain reaction.
|
# Check to see if it's enabled and is not a chain reaction.
|
||||||
if job_data["enabled"] and job_data["interval_type"] != "reaction":
|
if job_data["enabled"] and job_data["interval_type"] != "reaction":
|
||||||
|
new_job = "error"
|
||||||
if job_data["cron_string"] != "":
|
if job_data["cron_string"] != "":
|
||||||
try:
|
try:
|
||||||
new_job = self.scheduler.add_job(
|
new_job = self.scheduler.add_job(
|
||||||
@ -447,6 +448,7 @@ class TasksManager:
|
|||||||
)
|
)
|
||||||
|
|
||||||
if job_data["enabled"] and job_data["interval"] != "reaction":
|
if job_data["enabled"] and job_data["interval"] != "reaction":
|
||||||
|
new_job = "error"
|
||||||
if job_data["cron_string"] != "":
|
if job_data["cron_string"] != "":
|
||||||
try:
|
try:
|
||||||
new_job = self.scheduler.add_job(
|
new_job = self.scheduler.add_job(
|
||||||
|
@ -374,7 +374,7 @@ class PanelHandler(BaseHandler):
|
|||||||
) as credits_default_local:
|
) as credits_default_local:
|
||||||
try:
|
try:
|
||||||
remote = requests.get(
|
remote = requests.get(
|
||||||
"https://craftycontrol.com/credits", allow_redirects=True
|
"https://craftycontrol.com/credits-v2", allow_redirects=True
|
||||||
)
|
)
|
||||||
credits_dict: dict = remote.json()
|
credits_dict: dict = remote.json()
|
||||||
if not credits_dict["staff"]:
|
if not credits_dict["staff"]:
|
||||||
@ -954,6 +954,7 @@ class PanelHandler(BaseHandler):
|
|||||||
page_data["new_schedule"] = True
|
page_data["new_schedule"] = True
|
||||||
page_data["schedule"] = {}
|
page_data["schedule"] = {}
|
||||||
page_data["schedule"]["children"] = []
|
page_data["schedule"]["children"] = []
|
||||||
|
page_data["schedule"]["name"] = ""
|
||||||
page_data["schedule"]["server_id"] = server_id
|
page_data["schedule"]["server_id"] = server_id
|
||||||
page_data["schedule"]["schedule_id"] = ""
|
page_data["schedule"]["schedule_id"] = ""
|
||||||
page_data["schedule"]["action"] = ""
|
page_data["schedule"]["action"] = ""
|
||||||
@ -1021,6 +1022,10 @@ class PanelHandler(BaseHandler):
|
|||||||
page_data["schedule"]["server_id"] = server_id
|
page_data["schedule"]["server_id"] = server_id
|
||||||
page_data["schedule"]["schedule_id"] = schedule.schedule_id
|
page_data["schedule"]["schedule_id"] = schedule.schedule_id
|
||||||
page_data["schedule"]["action"] = schedule.action
|
page_data["schedule"]["action"] = schedule.action
|
||||||
|
if schedule.name:
|
||||||
|
page_data["schedule"]["name"] = schedule.name
|
||||||
|
else:
|
||||||
|
page_data["schedule"]["name"] = ""
|
||||||
page_data["schedule"][
|
page_data["schedule"][
|
||||||
"children"
|
"children"
|
||||||
] = self.controller.management.get_child_schedules(sch_id)
|
] = self.controller.management.get_child_schedules(sch_id)
|
||||||
@ -1618,6 +1623,7 @@ class PanelHandler(BaseHandler):
|
|||||||
difficulty = bleach.clean(self.get_argument("difficulty", None))
|
difficulty = bleach.clean(self.get_argument("difficulty", None))
|
||||||
server_obj = self.controller.servers.get_server_obj(server_id)
|
server_obj = self.controller.servers.get_server_obj(server_id)
|
||||||
enabled = bleach.clean(self.get_argument("enabled", "0"))
|
enabled = bleach.clean(self.get_argument("enabled", "0"))
|
||||||
|
name = bleach.clean(self.get_argument("name", ""))
|
||||||
if difficulty == "basic":
|
if difficulty == "basic":
|
||||||
action = bleach.clean(self.get_argument("action", None))
|
action = bleach.clean(self.get_argument("action", None))
|
||||||
interval = bleach.clean(self.get_argument("interval", None))
|
interval = bleach.clean(self.get_argument("interval", None))
|
||||||
@ -1682,6 +1688,7 @@ class PanelHandler(BaseHandler):
|
|||||||
|
|
||||||
if interval_type == "days":
|
if interval_type == "days":
|
||||||
job_data = {
|
job_data = {
|
||||||
|
"name": name,
|
||||||
"server_id": server_id,
|
"server_id": server_id,
|
||||||
"action": action,
|
"action": action,
|
||||||
"interval_type": interval_type,
|
"interval_type": interval_type,
|
||||||
@ -1696,6 +1703,7 @@ class PanelHandler(BaseHandler):
|
|||||||
}
|
}
|
||||||
elif difficulty == "reaction":
|
elif difficulty == "reaction":
|
||||||
job_data = {
|
job_data = {
|
||||||
|
"name": name,
|
||||||
"server_id": server_id,
|
"server_id": server_id,
|
||||||
"action": action,
|
"action": action,
|
||||||
"interval_type": interval_type,
|
"interval_type": interval_type,
|
||||||
@ -1711,6 +1719,7 @@ class PanelHandler(BaseHandler):
|
|||||||
}
|
}
|
||||||
elif difficulty == "advanced":
|
elif difficulty == "advanced":
|
||||||
job_data = {
|
job_data = {
|
||||||
|
"name": name,
|
||||||
"server_id": server_id,
|
"server_id": server_id,
|
||||||
"action": action,
|
"action": action,
|
||||||
"interval_type": "",
|
"interval_type": "",
|
||||||
@ -1726,6 +1735,7 @@ class PanelHandler(BaseHandler):
|
|||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
job_data = {
|
job_data = {
|
||||||
|
"name": name,
|
||||||
"server_id": server_id,
|
"server_id": server_id,
|
||||||
"action": action,
|
"action": action,
|
||||||
"interval_type": interval_type,
|
"interval_type": interval_type,
|
||||||
@ -1775,6 +1785,7 @@ class PanelHandler(BaseHandler):
|
|||||||
difficulty = bleach.clean(self.get_argument("difficulty", None))
|
difficulty = bleach.clean(self.get_argument("difficulty", None))
|
||||||
server_obj = self.controller.servers.get_server_obj(server_id)
|
server_obj = self.controller.servers.get_server_obj(server_id)
|
||||||
enabled = bleach.clean(self.get_argument("enabled", "0"))
|
enabled = bleach.clean(self.get_argument("enabled", "0"))
|
||||||
|
name = bleach.clean(self.get_argument("name", ""))
|
||||||
if difficulty == "basic":
|
if difficulty == "basic":
|
||||||
action = bleach.clean(self.get_argument("action", None))
|
action = bleach.clean(self.get_argument("action", None))
|
||||||
interval = bleach.clean(self.get_argument("interval", None))
|
interval = bleach.clean(self.get_argument("interval", None))
|
||||||
@ -1838,6 +1849,7 @@ class PanelHandler(BaseHandler):
|
|||||||
|
|
||||||
if interval_type == "days":
|
if interval_type == "days":
|
||||||
job_data = {
|
job_data = {
|
||||||
|
"name": name,
|
||||||
"server_id": server_id,
|
"server_id": server_id,
|
||||||
"action": action,
|
"action": action,
|
||||||
"interval_type": interval_type,
|
"interval_type": interval_type,
|
||||||
@ -1852,6 +1864,7 @@ class PanelHandler(BaseHandler):
|
|||||||
}
|
}
|
||||||
elif difficulty == "advanced":
|
elif difficulty == "advanced":
|
||||||
job_data = {
|
job_data = {
|
||||||
|
"name": name,
|
||||||
"server_id": server_id,
|
"server_id": server_id,
|
||||||
"action": action,
|
"action": action,
|
||||||
"interval_type": "",
|
"interval_type": "",
|
||||||
@ -1867,6 +1880,7 @@ class PanelHandler(BaseHandler):
|
|||||||
}
|
}
|
||||||
elif difficulty == "reaction":
|
elif difficulty == "reaction":
|
||||||
job_data = {
|
job_data = {
|
||||||
|
"name": name,
|
||||||
"server_id": server_id,
|
"server_id": server_id,
|
||||||
"action": action,
|
"action": action,
|
||||||
"interval_type": interval_type,
|
"interval_type": interval_type,
|
||||||
@ -1882,6 +1896,7 @@ class PanelHandler(BaseHandler):
|
|||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
job_data = {
|
job_data = {
|
||||||
|
"name": name,
|
||||||
"server_id": server_id,
|
"server_id": server_id,
|
||||||
"action": action,
|
"action": action,
|
||||||
"interval_type": interval_type,
|
"interval_type": interval_type,
|
||||||
|
@ -1,134 +1,232 @@
|
|||||||
{
|
{
|
||||||
"staff": {
|
"staff": {
|
||||||
"development": [
|
"development": [
|
||||||
{
|
{
|
||||||
"name": "Pita Bread",
|
"name": "Pita Bread",
|
||||||
"title": "CEO",
|
"title": "CEO",
|
||||||
"loc": "Midwest, USA",
|
"loc": "Midwest, USA",
|
||||||
"tags": [ "Staff", [ "Developer", "https://gitlab.com/craftbreadth" ], "Crafty Leadership" ],
|
"tags": [
|
||||||
"blurb": "Baked goods enthusiast who dabbles in Linux and sets up networks for fun. Can be found writing long-winded emails, debugging strange wifi issues, or taking care of his extensive houseplant collection.",
|
"Staff",
|
||||||
"pic": "/static/assets/images/credits/pita.png"
|
[
|
||||||
},
|
"Developer",
|
||||||
{
|
"https://gitlab.com/craftbreadth"
|
||||||
"name": "Xithical",
|
],
|
||||||
"title": "CFO/COO",
|
"Crafty Leadership"
|
||||||
"loc": "Midwest, USA",
|
],
|
||||||
"tags": [ "Staff", [ "Developer", "https://gitlab.com/xithical" ], "Crafty Leadership" ],
|
"blurb": "Baked goods enthusiast who dabbles in Linux and sets up networks for fun. Can be found writing long-winded emails, debugging strange wifi issues, or taking care of his extensive houseplant collection.",
|
||||||
"blurb": "Having sold his soul to the IT administration gods many eons ago, you can usually find him working, going home to do work, or continuing to work in the support Discord.",
|
"pic": "/static/assets/images/credits/pita.png"
|
||||||
"pic": "/static/assets/images/credits/xithical.png"
|
},
|
||||||
},
|
{
|
||||||
{
|
"name": "Xithical",
|
||||||
"name": "Phil Tarrant",
|
"title": "CFO/COO",
|
||||||
"title": "Creator",
|
"loc": "Midwest, USA",
|
||||||
"loc": "Southeast, USA",
|
"tags": [
|
||||||
"tags": [ "Staff", [ "Developer", "https://gitlab.com/Ptarrant1" ], "Crafty Advisor" ],
|
"Staff",
|
||||||
"blurb": "For best results, apply a thin layer of Phillip to code, cyber security, and parenthood for maximum effectiveness. Phillip often spends too much time with his chickens.",
|
[
|
||||||
"pic": "/static/assets/images/credits/ptarrant.png"
|
"Developer",
|
||||||
},
|
"https://gitlab.com/xithical"
|
||||||
{
|
],
|
||||||
"name": "macgeek",
|
"Crafty Leadership"
|
||||||
"title": "Lead Software Engineer",
|
],
|
||||||
"loc": "Midwest, USA",
|
"blurb": "Having sold his soul to the IT administration gods many eons ago, you can usually find him working, going home to do work, or continuing to work in the support Discord.",
|
||||||
"tags": [ "Staff", [ "Developer", "https://gitlab.com/computergeek125" ], "Crafty Advisor" ],
|
"pic": "/static/assets/images/credits/xithical.png"
|
||||||
"blurb": "Sysadmin for work and sysadmin for fun (avid homelabber). He enjoys a good tech tangent and gaming.",
|
},
|
||||||
"pic": "/static/assets/images/credits/macgeek.png"
|
{
|
||||||
},
|
"name": "Phil Tarrant",
|
||||||
{
|
"title": "Creator",
|
||||||
"name": "parzivaldewey",
|
"loc": "Southeast, USA",
|
||||||
"title": "Support Manager",
|
"tags": [
|
||||||
"loc": "East Coast, USA",
|
"Staff",
|
||||||
"tags": [ "Staff", [ "Developer", "https://gitlab.com/amcmanu3" ], "Support Manager" ],
|
[
|
||||||
"blurb": "His interests include Linux, gaming, and helping others. When he's able to unplug he enjoys biking, hiking, and playing soccer.",
|
"Developer",
|
||||||
"pic": "/static/assets/images/credits/parzivaldewey.png"
|
"https://gitlab.com/Ptarrant1"
|
||||||
},
|
],
|
||||||
{
|
"Crafty Advisor"
|
||||||
"name": "Silversthorn",
|
],
|
||||||
"title": "Software Engineer",
|
"blurb": "For best results, apply a thin layer of Phillip to code, cyber security, and parenthood for maximum effectiveness. Phillip often spends too much time with his chickens.",
|
||||||
"loc": "Provence, FR",
|
"pic": "/static/assets/images/credits/ptarrant.png"
|
||||||
"tags": [ "Staff", [ "Developer", "https://gitlab.com/Silversthorn" ], null ],
|
},
|
||||||
"blurb": "Developer at work and at home, testing his own code is a pain, so his coding precept is \"Testing is Doubting\"",
|
{
|
||||||
"pic": "/static/assets/images/credits/silversthorn.png"
|
"name": "macgeek",
|
||||||
},
|
"title": "Lead Software Engineer",
|
||||||
{
|
"loc": "Midwest, USA",
|
||||||
"name": "ThatOneLukas",
|
"tags": [
|
||||||
"title": "Software Engineer",
|
"Staff",
|
||||||
"loc": "Helsinki, FI",
|
[
|
||||||
"tags": [ "Staff", [ "Developer", "https://gitlab.com/LukasDoesDev" ], null ],
|
"Developer",
|
||||||
"blurb": "Arch Linux enthusiast who likes 80s/90s music, Rust (The programming language) and light distros like Arch Linux btw. Dislikes C, C++, Go, and Microsoft. Also doesn't like Finnish weather that freezes molten snow to (deadly) ice.",
|
"https://gitlab.com/computergeek125"
|
||||||
"pic": "/static/assets/images/credits/lukas.png"
|
],
|
||||||
},
|
"Crafty Advisor"
|
||||||
{
|
],
|
||||||
"name": "Zedifus",
|
"blurb": "Sysadmin for work and sysadmin for fun (avid homelabber). He enjoys a good tech tangent and gaming.",
|
||||||
"title": "DevOps Engineer",
|
"pic": "/static/assets/images/credits/macgeek.png"
|
||||||
"loc": "Scotland, UK",
|
},
|
||||||
"tags": [ "Staff", [ "Developer", "https://gitlab.com/Zedifus" ], "DevOps" ],
|
{
|
||||||
"blurb": "A Streamer, who is currently working in the insurance industry, self-teaching software development & DevOps, with the hopes of a career change! Enjoys playing games and has a sassy cat called Eve.",
|
"name": "pretzeldewey 🥨",
|
||||||
"pic": "/static/assets/images/credits/zedifus.jpg"
|
"title": "Support Manager & Software Engineer",
|
||||||
}
|
"loc": "East Coast, USA",
|
||||||
],
|
"tags": [
|
||||||
"support": [
|
"Staff",
|
||||||
{
|
[
|
||||||
"name": "iSilverfyre",
|
"Developer",
|
||||||
"title": "Community Manager",
|
"https://gitlab.com/amcmanu3"
|
||||||
"loc": "South Central, US",
|
],
|
||||||
"tags": [ "Staff", null, "Wiki" ],
|
"Crafty Advisor"
|
||||||
"blurb": "Silver enjoys helping others with their computer needs, writing documentation, and loving her cat.",
|
],
|
||||||
"pic": "/static/assets/images/credits/isilverfyre.png"
|
"blurb": "His interests include Linux, gaming, and helping others. When he's able to unplug he enjoys biking, hiking, and playing soccer.",
|
||||||
},
|
"pic": "/static/assets/images/credits/parzivaldewey.png"
|
||||||
{
|
},
|
||||||
"name": "Quentin",
|
{
|
||||||
"title": "Document Curator",
|
"name": "Zedifus",
|
||||||
"loc": null,
|
"title": "DevOps Manager",
|
||||||
"tags": [ "Staff", [ "Developer", "https://gitlab.com/qub3d" ], "Wiki" ],
|
"loc": "Scotland, UK",
|
||||||
"blurb": "Hosts Minecraft servers for his weird friends, works for an IoT company as his dayjob. The 's' in IoT stands for 'secure'.",
|
"tags": [
|
||||||
"pic": "/static/assets/images/credits/qub3d.png"
|
"Staff",
|
||||||
},
|
[
|
||||||
{
|
"Developer",
|
||||||
"name": "DarthLeo",
|
"https://gitlab.com/Zedifus"
|
||||||
"title": "Support Engineer",
|
],
|
||||||
"loc": "East Coast, US",
|
"Crafty Advisor"
|
||||||
"tags": [ "Staff", null, "Discord" ],
|
],
|
||||||
"blurb": "Just a simple gamer.",
|
"blurb": "A Streamer, who is currently working in the insurance industry, self-teaching software development & DevOps, with the hopes of a career change! Enjoys playing games and has a sassy cat called Eve.",
|
||||||
"pic": "/static/assets/images/credits/darthLeo.png"
|
"pic": "/static/assets/images/credits/zedifus.jpg"
|
||||||
}
|
},
|
||||||
],
|
{
|
||||||
"retired": [
|
"name": "Silversthorn",
|
||||||
{
|
"title": "Software Engineer",
|
||||||
"name": "Kev Dagoat",
|
"loc": "Provence, FR",
|
||||||
"title": "Head of Development",
|
"tags": [
|
||||||
"loc": "East Coast, AU",
|
"Staff",
|
||||||
"tags": [ "Staff", [ "Developer", "https://gitlab.com/kevdagoat" ], "HOD" ],
|
[
|
||||||
"blurb": "His interests include Linux, programming, and goats of course. He enjoys building APIs, K8s, and geeking over video cards.",
|
"Developer",
|
||||||
"pic": "/static/assets/images/credits/kevdagoat.jpeg"
|
"https://gitlab.com/Silversthorn"
|
||||||
},
|
],
|
||||||
{
|
null
|
||||||
"name": "Manu",
|
],
|
||||||
"title": null,
|
"blurb": "Developer at work and at home, testing his own code is a pain, so his coding precept is \"Testing is Doubting\"",
|
||||||
"loc": "Eastern, CA",
|
"pic": "/static/assets/images/credits/silversthorn.png"
|
||||||
"tags": [ "Staff", "Developer", "Project Manager" ],
|
},
|
||||||
"blurb": "His interests include learning, Linux, and programming. He enjoys speaking French, doing 6 things at once, and testing software.",
|
{
|
||||||
"pic": "/static/assets/images/credits/manu.png"
|
"name": "ThatOneLukas",
|
||||||
},
|
"title": "Software Engineer",
|
||||||
{
|
"loc": "Helsinki, FI",
|
||||||
"name": "UltraBlack",
|
"tags": [
|
||||||
"title": null,
|
"Staff",
|
||||||
"loc": "Bavaria, DE",
|
[
|
||||||
"tags": [ "Staff", null, "Idea Manager" ],
|
"Developer",
|
||||||
"blurb": "Hi, my name is Tim, and I'm a huge fan of linux. I'm often gaming and occasionally coding.",
|
"https://gitlab.com/LukasDoesDev"
|
||||||
"pic": "/static/assets/images/credits/ultrablack.png"
|
],
|
||||||
},
|
null
|
||||||
{
|
],
|
||||||
"name": "MC Gaming",
|
"blurb": "Arch Linux enthusiast who likes 80s/90s music, Rust (The programming language) and light distros like Arch Linux btw. Dislikes C, C++, Go, and Microsoft. Also doesn't like Finnish weather that freezes molten snow to (deadly) ice.",
|
||||||
"title": null,
|
"pic": "/static/assets/images/credits/lukas.png"
|
||||||
"loc": "Central, UK",
|
}
|
||||||
"tags": [ "Staff", [ "Developer", "https://gitlab.com/MCgamin1738" ], null ],
|
],
|
||||||
"blurb": "His interests include learning, Linux, and programming. He loves pentesting apps and gaming.",
|
"support": [
|
||||||
"pic": "/static/assets/images/credits/mcgaming.png"
|
{
|
||||||
}
|
"name": "iSilverfyre",
|
||||||
]
|
"title": "Community Manager",
|
||||||
|
"loc": "South Central, US",
|
||||||
|
"tags": [
|
||||||
|
"Staff",
|
||||||
|
null,
|
||||||
|
"Wiki"
|
||||||
|
],
|
||||||
|
"blurb": "Silver enjoys helping others with their computer needs, writing documentation, and loving her cat.",
|
||||||
|
"pic": "/static/assets/images/credits/isilverfyre.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Quentin",
|
||||||
|
"title": "Document Curator",
|
||||||
|
"loc": null,
|
||||||
|
"tags": [
|
||||||
|
"Staff",
|
||||||
|
[
|
||||||
|
"Developer",
|
||||||
|
"https://gitlab.com/qub3d"
|
||||||
|
],
|
||||||
|
"Wiki"
|
||||||
|
],
|
||||||
|
"blurb": "Hosts Minecraft servers for his weird friends, works for an IoT company as his dayjob. The 's' in IoT stands for 'secure'.",
|
||||||
|
"pic": "/static/assets/images/credits/qub3d.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Kornster",
|
||||||
|
"title": null,
|
||||||
|
"loc": "Victoria, Australia",
|
||||||
|
"tags": [
|
||||||
|
"Discord Mod",
|
||||||
|
null,
|
||||||
|
null
|
||||||
|
],
|
||||||
|
"blurb": "Day to day I am a Network Administrator, dealing with a range of vendors and products. Outside of work my hobbies are handyman things, such as carpentry and motor mechanics having grown up around them. My home-lab consists of Linux distros ranging from Debian, Ubuntu & Centos having self taught myself Linux for the last 12+ years.",
|
||||||
|
"pic": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"retired": [
|
||||||
|
{
|
||||||
|
"name": "Kev Dagoat",
|
||||||
|
"title": "Head of Development",
|
||||||
|
"loc": "East Coast, AU",
|
||||||
|
"tags": [
|
||||||
|
"Staff",
|
||||||
|
[
|
||||||
|
"Developer",
|
||||||
|
"https://gitlab.com/kevdagoat"
|
||||||
|
],
|
||||||
|
"HOD"
|
||||||
|
],
|
||||||
|
"blurb": "His interests include Linux, programming, and goats of course. He enjoys building APIs, K8s, and geeking over video cards.",
|
||||||
|
"pic": "/static/assets/images/credits/kevdagoat.jpeg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Manu",
|
||||||
|
"title": null,
|
||||||
|
"loc": "Eastern, CA",
|
||||||
|
"tags": [
|
||||||
|
"Staff",
|
||||||
|
"Developer",
|
||||||
|
"Project Manager"
|
||||||
|
],
|
||||||
|
"blurb": "His interests include learning, Linux, and programming. He enjoys speaking French, doing 6 things at once, and testing software.",
|
||||||
|
"pic": "/static/assets/images/credits/manu.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "UltraBlack",
|
||||||
|
"title": null,
|
||||||
|
"loc": "Bavaria, DE",
|
||||||
|
"tags": [
|
||||||
|
"Staff",
|
||||||
|
null,
|
||||||
|
"Idea Manager"
|
||||||
|
],
|
||||||
|
"blurb": "Hi, my name is Tim, and I'm a huge fan of linux. I'm often gaming and occasionally coding.",
|
||||||
|
"pic": "/static/assets/images/credits/ultrablack.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MC Gaming",
|
||||||
|
"title": null,
|
||||||
|
"loc": "Central, UK",
|
||||||
|
"tags": [
|
||||||
|
"Staff",
|
||||||
|
[
|
||||||
|
"Developer",
|
||||||
|
"https://gitlab.com/MCgamin1738"
|
||||||
|
],
|
||||||
|
null
|
||||||
|
],
|
||||||
|
"blurb": "His interests include learning, Linux, and programming. He loves pentesting apps and gaming.",
|
||||||
|
"pic": "/static/assets/images/credits/mcgaming.png"
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"translations": {
|
"translations": {
|
||||||
"Data Unavailable": ["🌎🪣🔗👎😭"]
|
"Data Unavailable": [
|
||||||
|
{
|
||||||
|
"name": "🌎🪣🔗👎😭",
|
||||||
|
"status": false
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"patrons": [
|
"patrons": [
|
||||||
{
|
{
|
||||||
|
@ -342,7 +342,11 @@
|
|||||||
<td class="pb-0">
|
<td class="pb-0">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
{% for language in data['translations'][person] %}
|
{% for language in data['translations'][person] %}
|
||||||
<span class="btn btn-sm btn-inverse-success mr-2" style="margin-bottom: 12px;">{{ language }}</span>
|
{% if language['status'] %}
|
||||||
|
<span class="btn btn-sm btn-inverse-success mr-2" style="margin-bottom: 12px;">{{ language['name'] }}</span>
|
||||||
|
{% else %}
|
||||||
|
<span class="btn btn-sm btn-inverse-secondary mr-2" style="margin-bottom: 12px;">{{ language['name'] }}</span>
|
||||||
|
{% end %}
|
||||||
{% end %}
|
{% end %}
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
|
@ -9,14 +9,15 @@
|
|||||||
|
|
||||||
<div class="content-wrapper">
|
<div class="content-wrapper">
|
||||||
|
|
||||||
<!-- Page Title Header Starts-->
|
<!-- Page Title Header Starts-->
|
||||||
<div class="row page-title-header">
|
<div class="row page-title-header">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<div class="page-header">
|
<div class="page-header">
|
||||||
<h4 class="page-title">
|
<h4 class="page-title">
|
||||||
{{ translate('serverDetails', 'serverDetails', data['lang']) }} - {{ data['server_stats']['server_id']['server_name'] }}
|
{{ translate('serverDetails', 'serverDetails', data['lang']) }} - {{
|
||||||
<br />
|
data['server_stats']['server_id']['server_name'] }}
|
||||||
<small>UUID: {{ data['server_stats']['server_id']['server_uuid'] }}</small>
|
<br />
|
||||||
|
<small>UUID: {{ data['server_stats']['server_id']['server_uuid'] }}</small>
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -24,159 +25,212 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- Page Title Header Ends-->
|
<!-- Page Title Header Ends-->
|
||||||
|
|
||||||
{% include "parts/details_stats.html" %}
|
{% include "parts/details_stats.html" %}
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
||||||
<div class="col-sm-12 grid-margin">
|
<div class="col-sm-12 grid-margin">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-body pt-0">
|
<div class="card-body pt-0">
|
||||||
{% include "parts/server_controls_list.html" %}
|
{% include "parts/server_controls_list.html" %}
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-8 col-sm-8">
|
<div class="col-md-8 col-sm-8">
|
||||||
{% if data['new_schedule'] == True %}
|
{% if data['new_schedule'] == True %}
|
||||||
<form class="forms-sample" method="post" action="/panel/new_schedule?id={{ data['server_stats']['server_id']['server_id'] }}">
|
<form class="forms-sample" method="post"
|
||||||
{% else %}
|
action="/panel/new_schedule?id={{ data['server_stats']['server_id']['server_id'] }}">
|
||||||
<form class="forms-sample" method="post" action="/panel/edit_schedule?id={{ data['server_stats']['server_id']['server_id'] }}&sch_id={{ data['schedule']['schedule_id'] }}">
|
{% else %}
|
||||||
|
<form class="forms-sample" method="post"
|
||||||
|
action="/panel/edit_schedule?id={{ data['server_stats']['server_id']['server_id'] }}&sch_id={{ data['schedule']['schedule_id'] }}">
|
||||||
{% end %}
|
{% end %}
|
||||||
{% raw xsrf_form_html() %}
|
{% raw xsrf_form_html() %}
|
||||||
<input type="hidden" name="id" value="{{ data['server_stats']['server_id']['server_id'] }}">
|
<input type="hidden" name="id" value="{{ data['server_stats']['server_id']['server_id'] }}">
|
||||||
<input type="hidden" name="subpage" value="config">
|
<input type="hidden" name="subpage" value="config">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="difficulty">Basic / Cron / Chain-Reaction Select<small class="text-muted ml-1"></small> </label><br>
|
<label for="name">{{ translate('serverSchedules', 'name' , data['lang']) }}</label>
|
||||||
<select id="difficulty" name="difficulty" onchange="basicAdvanced(this);" class="form-control form-control-lg select-css" value="{{ data['schedule']['difficulty'] }}">
|
<input type="input" class="form-control" name="name" id="name_input"
|
||||||
<option id="basic" value="basic">{{ translate('serverScheduleConfig', 'basic' , data['lang']) }}</option>
|
value="{{ data['schedule']['name']}}" maxlength="30" placeholder="Name" required>
|
||||||
<option id="advanced" value="advanced">{{ translate('serverScheduleConfig', 'cron' , data['lang']) }}</option>
|
|
||||||
<option id="reaction" value="reaction">{{ translate('serverScheduleConfig', 'reaction' , data['lang']) }}</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="server_name">Action<small class="text-muted ml-1"></small> </label><br>
|
|
||||||
<select id="action" name="action" onchange="yesnoCheck(this);" class="form-control form-control-lg select-css" value="{{ data['schedule']['action'] }}">
|
|
||||||
<option id="start" value="start">{{ translate('serverScheduleConfig', 'start' , data['lang']) }}</option>
|
|
||||||
<option id="restart" value="restart">{{ translate('serverScheduleConfig', 'restart' , data['lang']) }}</option>
|
|
||||||
<option id="stop" value="stop">{{ translate('serverScheduleConfig', 'stop' , data['lang']) }}</option>
|
|
||||||
<option id="backup" value="backup">{{ translate('serverScheduleConfig', 'backup' , data['lang']) }}</option>
|
|
||||||
<option id="command" value="command">{{ translate('serverScheduleConfig', 'custom' , data['lang']) }}</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div id="ifBasic">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="server_path">{{ translate('serverScheduleConfig', 'interval' , data['lang']) }} <small class="text-muted ml-1"> - {{ translate('serverScheduleConfig', 'interval-explain' , data['lang']) }}</small> </label>
|
|
||||||
<input type="number" class="form-control" name="interval" id="interval" value="{{ data['schedule']['interval'] }}" placeholder="Interval" required>
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
<select id="interval_type" onchange="ifDays(this);" name="interval_type" class="form-control form-control-lg select-css" value="{{ data['schedule']['interval_type'] }}">
|
|
||||||
<option id = "days" value="days">{{ translate('serverScheduleConfig', 'days' , data['lang']) }}</option>
|
|
||||||
<option id = "hours" value="hours">{{ translate('serverScheduleConfig', 'hours' , data['lang']) }}</option>
|
|
||||||
<option id = "minutes" value="minutes">{{ translate('serverScheduleConfig', 'minutes' , data['lang']) }}</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div id="ifDays" style="display: block;">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="time">{{ translate('serverScheduleConfig', 'time' , data['lang']) }} <small class="text-muted ml-1"> - {{ translate('serverScheduleConfig', 'time-explain' , data['lang']) }}</small> </label>
|
|
||||||
<input type="time" class="form-control" name="time" id="time" value="{{ data['schedule']['time'] }}" placeholder="Time" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="ifYes" style="display: none;">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="command">{{ translate('serverScheduleConfig', 'command' , data['lang']) }} <small class="text-muted ml-1"> - {{ translate('serverScheduleConfig', 'command-explain' , data['lang']) }}</small> </label>
|
|
||||||
<input type="input" class="form-control" name="command" id="command_input" value="{{ data['schedule']['command'] }}" placeholder="Command" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div id="ifAdvanced" style="display: none;">
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="difficulty">{{ translate('serverScheduleConfig', 'select' , data['lang']) }}<small
|
||||||
|
class="text-muted ml-1"></small> </label><br>
|
||||||
|
<select id="difficulty" name="difficulty" onchange="basicAdvanced(this);"
|
||||||
|
class="form-control form-control-lg select-css" value="{{ data['schedule']['difficulty'] }}">
|
||||||
|
<option id="basic" value="basic">{{ translate('serverScheduleConfig', 'basic' , data['lang']) }}
|
||||||
|
</option>
|
||||||
|
<option id="advanced" value="advanced">{{ translate('serverScheduleConfig', 'cron' , data['lang'])
|
||||||
|
}}</option>
|
||||||
|
<option id="reaction" value="reaction">{{ translate('serverScheduleConfig', 'reaction' ,
|
||||||
|
data['lang']) }}</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="server_name">{{ translate('serverSchedules', 'action' , data['lang']) }}<small
|
||||||
|
class="text-muted ml-1"></small> </label><br>
|
||||||
|
<select id="action" name="action" onchange="yesnoCheck(this);"
|
||||||
|
class="form-control form-control-lg select-css" value="{{ data['schedule']['action'] }}">
|
||||||
|
<option id="start" value="start">{{ translate('serverScheduleConfig', 'start' , data['lang']) }}
|
||||||
|
</option>
|
||||||
|
<option id="restart" value="restart">{{ translate('serverScheduleConfig', 'restart' ,
|
||||||
|
data['lang']) }}</option>
|
||||||
|
<option id="stop" value="stop">{{ translate('serverScheduleConfig', 'stop' , data['lang']) }}
|
||||||
|
</option>
|
||||||
|
<option id="backup" value="backup">{{ translate('serverScheduleConfig', 'backup' , data['lang'])
|
||||||
|
}}</option>
|
||||||
|
<option id="command" value="command">{{ translate('serverScheduleConfig', 'custom' , data['lang'])
|
||||||
|
}}</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div id="ifBasic">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="server_path">{{ translate('serverScheduleConfig', 'interval' , data['lang']) }} <small
|
||||||
|
class="text-muted ml-1"> - {{ translate('serverScheduleConfig', 'interval-explain' ,
|
||||||
|
data['lang']) }}</small> </label>
|
||||||
|
<input type="number" class="form-control" name="interval" id="interval"
|
||||||
|
value="{{ data['schedule']['interval'] }}" placeholder="Interval" required>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<select id="interval_type" onchange="ifDays(this);" name="interval_type"
|
||||||
|
class="form-control form-control-lg select-css"
|
||||||
|
value="{{ data['schedule']['interval_type'] }}">
|
||||||
|
<option id="days" value="days">{{ translate('serverScheduleConfig', 'days' , data['lang']) }}
|
||||||
|
</option>
|
||||||
|
<option id="hours" value="hours">{{ translate('serverScheduleConfig', 'hours' , data['lang']) }}
|
||||||
|
</option>
|
||||||
|
<option id="minutes" value="minutes">{{ translate('serverScheduleConfig', 'minutes' ,
|
||||||
|
data['lang']) }}</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div id="ifDays" style="display: block;">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="cron">{{ translate('serverScheduleConfig', 'cron' , data['lang']) }} <small class="text-muted ml-1"> - {{ translate('serverScheduleConfig', 'cron-explain' , data['lang']) }}</small> </label>
|
<label for="time">{{ translate('serverScheduleConfig', 'time' , data['lang']) }} <small
|
||||||
<input type="input" class="form-control" name="cron" id="cron" value="{{ data['schedule']['cron_string'] }}" placeholder="* * * * *">
|
class="text-muted ml-1"> - {{ translate('serverScheduleConfig', 'time-explain' ,
|
||||||
|
data['lang']) }}</small> </label>
|
||||||
|
<input type="time" class="form-control" name="time" id="time"
|
||||||
|
value="{{ data['schedule']['time'] }}" placeholder="Time" required>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="ifReaction" style="display: none;">
|
</div>
|
||||||
<div class="form-group">
|
<div id="ifYes" style="display: none;">
|
||||||
<label for="delay">{{ translate('serverScheduleConfig', 'offset' , data['lang']) }} <small class="text-muted ml-1"> - {{ translate('serverScheduleConfig', 'offset-explain' , data['lang']) }}</small> </label>
|
<div class="form-group">
|
||||||
<input type="number" class="form-control" name="delay" id="delay" value="0">
|
<label for="command">{{ translate('serverScheduleConfig', 'command' , data['lang']) }} <small
|
||||||
<br>
|
class="text-muted ml-1"> - {{ translate('serverScheduleConfig', 'command-explain' ,
|
||||||
<br>
|
data['lang']) }}</small> </label>
|
||||||
<label for="parent">{{ translate('serverScheduleConfig', 'parent' , data['lang']) }} <small class="text-muted ml-1"> - {{ translate('serverScheduleConfig', 'parent-explain' , data['lang']) }}</small> </label>
|
<input type="input" class="form-control" name="command" id="command_input"
|
||||||
<select id="parent" name="parent" class="form-control form-control-lg select-css" value="{{ data['schedule']['action'] }}">
|
value="{{ data['schedule']['command'] }}" placeholder="Command" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="ifAdvanced" style="display: none;">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="cron">{{ translate('serverScheduleConfig', 'cron' , data['lang']) }} <small
|
||||||
|
class="text-muted ml-1"> - {{ translate('serverScheduleConfig', 'cron-explain' , data['lang'])
|
||||||
|
}}</small> </label>
|
||||||
|
<input type="input" class="form-control" name="cron" id="cron"
|
||||||
|
value="{{ data['schedule']['cron_string'] }}" placeholder="* * * * *">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="ifReaction" style="display: none;">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="delay">{{ translate('serverScheduleConfig', 'offset' , data['lang']) }} <small
|
||||||
|
class="text-muted ml-1"> - {{ translate('serverScheduleConfig', 'offset-explain' ,
|
||||||
|
data['lang']) }}</small> </label>
|
||||||
|
<input type="number" class="form-control" name="delay" id="delay" value="0">
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<label for="parent">{{ translate('serverScheduleConfig', 'parent' , data['lang']) }} <small
|
||||||
|
class="text-muted ml-1"> - {{ translate('serverScheduleConfig', 'parent-explain' ,
|
||||||
|
data['lang']) }}</small> </label>
|
||||||
|
<select id="parent" name="parent" class="form-control form-control-lg select-css"
|
||||||
|
value="{{ data['schedule']['action'] }}">
|
||||||
{% for schedule in data['schedules'] %}
|
{% for schedule in data['schedules'] %}
|
||||||
{% if schedule.schedule_id != data['schedule']['schedule_id'] %}
|
{% if schedule.schedule_id != data['schedule']['schedule_id'] %}
|
||||||
{% if schedule.interval != '' %}
|
{% if schedule.interval != '' %}
|
||||||
<option id="{{schedule.schedule_id}}" value="{{schedule.schedule_id}}">ID: {{schedule.schedule_id}} | {{schedule.command}} | {{schedule.interval}} {{ schedule.interval_type}}</option>
|
<option id="{{schedule.schedule_id}}" value="{{schedule.schedule_id}}">
|
||||||
|
{{schedule.name}} | {{schedule.command}} | {{schedule.interval}} {{
|
||||||
|
schedule.interval_type}}</option>
|
||||||
{% else %}
|
{% else %}
|
||||||
<option id="{{schedule.schedule_id}}" value="{{schedule.schedule_id}}">ID: {{schedule.schedule_id}} {{schedule.command}} {{schedule.cron_string}}</option>
|
<option id="{{schedule.schedule_id}}" value="{{schedule.schedule_id}}">
|
||||||
|
{{schedule.name}} | {{schedule.command}} | {{schedule.cron_string}}</option>
|
||||||
{% end %}
|
{% end %}
|
||||||
{% end %}
|
{% end %}
|
||||||
{% end %}
|
{% end %}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="form-check-flat">
|
<div class="form-check-flat">
|
||||||
<label for="enabled" class="form-check-label ml-4 mb-4">
|
<label for="enabled" class="form-check-label ml-4 mb-4">
|
||||||
<input type="checkbox" class="form-check-input" id="enabled" name="enabled" checked="" value="1">{{ translate('serverScheduleConfig', 'enabled' , data['lang']) }}
|
<input type="checkbox" class="form-check-input" id="enabled" name="enabled" checked=""
|
||||||
</label>
|
value="1">{{ translate('serverScheduleConfig', 'enabled' , data['lang']) }}
|
||||||
|
</label>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="form-check-flat">
|
<div class="form-check-flat">
|
||||||
<label for="one_time" class="form-check-label ml-4 mb-4">
|
<label for="one_time" class="form-check-label ml-4 mb-4">
|
||||||
<input type="checkbox" class="form-check-input" id="one_time" name="one_time" value="1">{{ translate('serverScheduleConfig', 'one-time' , data['lang']) }}
|
<input type="checkbox" class="form-check-input" id="one_time" name="one_time" value="1">{{
|
||||||
</label>
|
translate('serverScheduleConfig', 'one-time' , data['lang']) }}
|
||||||
|
</label>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<button type="submit" class="btn btn-success mr-2"><i class="fas fa-save"></i> {{ translate('serverConfig', 'save', data['lang']) }}</button>
|
<button type="submit" class="btn btn-success mr-2"><i class="fas fa-save"></i> {{
|
||||||
<button type="reset" onclick="location.href=`/panel/server_detail?id={{ data['server_stats']['server_id']['server_id'] }}&subpage=schedules`" class="btn btn-light"><i class="fas fa-times"></i> {{ translate('serverConfig', 'cancel', data['lang']) }}</button>
|
translate('serverConfig', 'save', data['lang']) }}</button>
|
||||||
</form>
|
<button type="reset"
|
||||||
</div>
|
onclick="location.href=`/panel/server_detail?id={{ data['server_stats']['server_id']['server_id'] }}&subpage=schedules`"
|
||||||
<div class="col-sm-4 grid-margin">
|
class="btn btn-light"><i class="fas fa-times"></i> {{ translate('serverConfig', 'cancel',
|
||||||
<h4>{{ translate('serverScheduleConfig', 'children' , data['lang']) }}</h4>
|
data['lang']) }}</button>
|
||||||
<ul>
|
</form>
|
||||||
{% for schedule in data['schedule']['children'] %}
|
</div>
|
||||||
<li style="overflow: auto;"><a href="/panel/edit_schedule?id={{schedule.server_id}}&sch_id={{schedule.schedule_id}}">{{schedule.schedule_id}} | {{schedule.command}}</a></li>
|
<div class="col-sm-4 grid-margin">
|
||||||
{% end %}
|
<h4>{{ translate('serverScheduleConfig', 'children' , data['lang']) }}</h4>
|
||||||
</ul>
|
<ul>
|
||||||
</div>
|
{% for schedule in data['schedule']['children'] %}
|
||||||
|
<li style="overflow: auto;"><a
|
||||||
|
href="/panel/edit_schedule?id={{schedule.server_id}}&sch_id={{schedule.schedule_id}}">{{schedule.name}}
|
||||||
|
| {{schedule.schedule_id}}</a></li>
|
||||||
|
{% end %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
<!-- content-wrapper ends -->
|
||||||
|
|
||||||
|
{% end %}
|
||||||
|
|
||||||
|
{% block js %}
|
||||||
</div>
|
<script>
|
||||||
<!-- content-wrapper ends -->
|
|
||||||
|
|
||||||
{% end %}
|
|
||||||
|
|
||||||
{% block js %}
|
|
||||||
<script>
|
|
||||||
|
|
||||||
|
|
||||||
//used to get cookies from browser - this is part of tornados xsrf protection - it's for extra security
|
//used to get cookies from browser - this is part of tornados xsrf protection - it's for extra security
|
||||||
function getCookie(name) {
|
function getCookie(name) {
|
||||||
var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");
|
var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");
|
||||||
return r ? r[1] : undefined;
|
return r ? r[1] : undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
$( document ).ready(function() {
|
$(document).ready(function () {
|
||||||
console.log( "ready!" );
|
console.log("ready!");
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
function yesnoCheck() {
|
function yesnoCheck() {
|
||||||
if (document.getElementById('action').value == "command") {
|
if (document.getElementById('action').value == "command") {
|
||||||
document.getElementById("ifYes").style.display = "block";
|
document.getElementById("ifYes").style.display = "block";
|
||||||
document.getElementById("command_input").required = true;
|
document.getElementById("command_input").required = true;
|
||||||
} else {
|
} else {
|
||||||
document.getElementById("ifYes").style.display = "none";
|
document.getElementById("ifYes").style.display = "none";
|
||||||
document.getElementById("command_input").required = false;
|
document.getElementById("command_input").required = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function basicAdvanced() {
|
function basicAdvanced() {
|
||||||
if (document.getElementById('difficulty').value == "advanced") {
|
if (document.getElementById('difficulty').value == "advanced") {
|
||||||
document.getElementById("ifAdvanced").style.display = "block";
|
document.getElementById("ifAdvanced").style.display = "block";
|
||||||
document.getElementById("ifReaction").style.display = "none";
|
document.getElementById("ifReaction").style.display = "none";
|
||||||
document.getElementById("ifBasic").style.display = "none";
|
document.getElementById("ifBasic").style.display = "none";
|
||||||
@ -184,16 +238,16 @@
|
|||||||
document.getElementById("parent").required = false;
|
document.getElementById("parent").required = false;
|
||||||
document.getElementById("interval").required = false;
|
document.getElementById("interval").required = false;
|
||||||
document.getElementById("time").required = false;
|
document.getElementById("time").required = false;
|
||||||
} else if(document.getElementById('difficulty').value == "reaction"){
|
} else if (document.getElementById('difficulty').value == "reaction") {
|
||||||
document.getElementById("ifReaction").style.display = "block";
|
document.getElementById("ifReaction").style.display = "block";
|
||||||
document.getElementById("ifBasic").style.display = "none";
|
document.getElementById("ifBasic").style.display = "none";
|
||||||
document.getElementById("ifAdvanced").style.display = "none";
|
document.getElementById("ifAdvanced").style.display = "none";
|
||||||
document.getElementById("delay").required = true;
|
document.getElementById("delay").required = true;
|
||||||
document.getElementById("parent").required = true;
|
document.getElementById("parent").required = true;
|
||||||
document.getElementById("interval").required = false;
|
document.getElementById("interval").required = false;
|
||||||
document.getElementById("time").required = false;
|
document.getElementById("time").required = false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
document.getElementById("ifAdvanced").style.display = "none";
|
document.getElementById("ifAdvanced").style.display = "none";
|
||||||
document.getElementById("ifReaction").style.display = "none";
|
document.getElementById("ifReaction").style.display = "none";
|
||||||
document.getElementById("ifBasic").style.display = "block";
|
document.getElementById("ifBasic").style.display = "block";
|
||||||
@ -201,67 +255,67 @@
|
|||||||
document.getElementById("parent").required = false;
|
document.getElementById("parent").required = false;
|
||||||
document.getElementById("interval").required = true;
|
document.getElementById("interval").required = true;
|
||||||
document.getElementById("time").required = true;
|
document.getElementById("time").required = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function ifDays() {
|
||||||
|
if (document.getElementById('interval_type').value == "days") {
|
||||||
|
document.getElementById("ifDays").style.display = "block";
|
||||||
|
document.getElementById("time").required = true;
|
||||||
|
} else {
|
||||||
|
document.getElementById("ifDays").style.display = "none";
|
||||||
|
document.getElementById("time").required = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
function ifDays() {
|
|
||||||
if (document.getElementById('interval_type').value == "days") {
|
|
||||||
document.getElementById("ifDays").style.display = "block";
|
|
||||||
document.getElementById("time").required = true;
|
|
||||||
} else {
|
|
||||||
document.getElementById("ifDays").style.display = "none";
|
|
||||||
document.getElementById("time").required = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function del_task(sch_id, id){
|
function del_task(sch_id, id) {
|
||||||
var token = getCookie("_xsrf")
|
var token = getCookie("_xsrf")
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: "DELETE",
|
type: "DELETE",
|
||||||
headers: {'X-XSRFToken': token},
|
headers: { 'X-XSRFToken': token },
|
||||||
url: '/ajax/del_task?server_id='+id+'&schedule_id='+sch_id,
|
url: '/ajax/del_task?server_id=' + id + '&schedule_id=' + sch_id,
|
||||||
data: {
|
data: {
|
||||||
schedule_id: sch_id,
|
schedule_id: sch_id,
|
||||||
id: id
|
id: id
|
||||||
},
|
},
|
||||||
success: function(data) {
|
success: function (data) {
|
||||||
location.reload();
|
location.reload();
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
function startup(){
|
function startup() {
|
||||||
try{
|
try {
|
||||||
document.getElementById("{{ data['schedule']['interval_type'] }}").setAttribute('selected', true);
|
document.getElementById("{{ data['schedule']['interval_type'] }}").setAttribute('selected', true);
|
||||||
}catch{
|
} catch {
|
||||||
console.log("no element named")
|
console.log("no element named")
|
||||||
}
|
}
|
||||||
try{
|
try {
|
||||||
document.getElementById("{{ data['schedule']['difficulty'] }}").setAttribute('selected', true);
|
document.getElementById("{{ data['schedule']['difficulty'] }}").setAttribute('selected', true);
|
||||||
}catch{
|
} catch {
|
||||||
console.log("no element named")
|
console.log("no element named")
|
||||||
}
|
}
|
||||||
try{
|
try {
|
||||||
document.getElementById("{{ data['schedule']['action'] }}").setAttribute('selected', true);
|
document.getElementById("{{ data['schedule']['action'] }}").setAttribute('selected', true);
|
||||||
|
|
||||||
}catch{
|
} catch {
|
||||||
console.log("no element named")
|
console.log("no element named")
|
||||||
}
|
}
|
||||||
ifDays();
|
ifDays();
|
||||||
yesnoCheck();
|
yesnoCheck();
|
||||||
basicAdvanced();
|
basicAdvanced();
|
||||||
if("{{ data['schedule']['enabled'] }}" == 'True'){
|
if ("{{ data['schedule']['enabled'] }}" == 'True') {
|
||||||
document.getElementById('enabled').checked = true;
|
document.getElementById('enabled').checked = true;
|
||||||
}else{
|
} else {
|
||||||
document.getElementById('enabled').checked = false;
|
document.getElementById('enabled').checked = false;
|
||||||
}
|
}
|
||||||
if("{{ data['schedule']['one_time'] }}" == 'True'){
|
if ("{{ data['schedule']['one_time'] }}" == 'True') {
|
||||||
document.getElementById('one_time').checked = true;
|
document.getElementById('one_time').checked = true;
|
||||||
}else{
|
} else {
|
||||||
document.getElementById('one_time').checked = false;
|
document.getElementById('one_time').checked = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
window.onload(startup())
|
window.onload(startup())
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{% end %}
|
{% end %}
|
@ -44,7 +44,8 @@
|
|||||||
<div class="col-md-12 col-sm-12" style="overflow-x:auto;">
|
<div class="col-md-12 col-sm-12" style="overflow-x:auto;">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header header-sm d-flex justify-content-between align-items-center">
|
<div class="card-header header-sm d-flex justify-content-between align-items-center">
|
||||||
<h4 class="card-title"><i class="fas fa-calendar"></i> Scheduled Tasks</h4>
|
<h4 class="card-title"><i class="fas fa-calendar"></i> {{ translate('serverSchedules',
|
||||||
|
'scheduledTasks', data['lang']) }} </h4>
|
||||||
{% if data['user_data']['hints'] %}
|
{% if data['user_data']['hints'] %}
|
||||||
<span class="too_small" title="{{ translate('serverSchedules', 'cannotSee', data['lang']) }}" ,
|
<span class="too_small" title="{{ translate('serverSchedules', 'cannotSee', data['lang']) }}" ,
|
||||||
data-content="{{ translate('serverSchedules', 'cannotSeeOnMobile', data['lang']) }}" ,
|
data-content="{{ translate('serverSchedules', 'cannotSeeOnMobile', data['lang']) }}" ,
|
||||||
@ -52,27 +53,35 @@
|
|||||||
{% end %}
|
{% end %}
|
||||||
<div><button
|
<div><button
|
||||||
onclick="location.href=`/panel/add_schedule?id={{ data['server_stats']['server_id']['server_id'] }}`"
|
onclick="location.href=`/panel/add_schedule?id={{ data['server_stats']['server_id']['server_id'] }}`"
|
||||||
class="btn btn-info">Create New Schedule <i class="fas fa-pencil-alt"></i></button></div>
|
class="btn btn-info">{{ translate('serverSchedules', 'create', data['lang']) }}<i
|
||||||
|
class="fas fa-pencil-alt"></i></button></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<table class="table table-hover d-none d-lg-block responsive-table" id="schedule_table" width="100%"
|
<table class="table table-hover d-none d-lg-block responsive-table" id="schedule_table" width="100%"
|
||||||
style="table-layout:fixed;">
|
style="table-layout:fixed;">
|
||||||
<thead>
|
<thead>
|
||||||
<tr class="rounded">
|
<tr class="rounded">
|
||||||
<th style="width: 2%; min-width: 10px;">ID</th>
|
<th style="width: 2%; min-width: 10px;">{{ translate('serverSchedules', 'name', data['lang']) }}
|
||||||
<th style="width: 23%; min-width: 50px;">Action</th>
|
</th>
|
||||||
<th style="width: 40%; min-width: 50px;">Command</th>
|
<th style="width: 23%; min-width: 50px;">{{ translate('serverSchedules', 'action', data['lang'])
|
||||||
<th style="width: 10%; min-width: 50px;">Interval</th>
|
}}</th>
|
||||||
<th style="width: 10%; min-width: 50px;">Next Run</th>
|
<th style="width: 40%; min-width: 50px;">{{ translate('serverSchedules', 'command',
|
||||||
<th style="width: 10%; min-width: 50px;">Enabled</th>
|
data['lang']) }}</th>
|
||||||
<th style="width: 10%; min-width: 50px;">Edit</th>
|
<th style="width: 10%; min-width: 50px;">{{ translate('serverSchedules', 'interval',
|
||||||
|
data['lang']) }}</th>
|
||||||
|
<th style="width: 10%; min-width: 50px;">{{ translate('serverSchedules', 'nextRun',
|
||||||
|
data['lang']) }}</th>
|
||||||
|
<th style="width: 10%; min-width: 50px;">{{ translate('serverSchedules', 'enabled',
|
||||||
|
data['lang']) }}</th>
|
||||||
|
<th style="width: 10%; min-width: 50px;">{{ translate('serverSchedules', 'edit', data['lang'])
|
||||||
|
}}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for schedule in data['schedules'] %}
|
{% for schedule in data['schedules'] %}
|
||||||
<tr>
|
<tr>
|
||||||
<td id="{{schedule.schedule_id}}" class="id">
|
<td id="{{schedule.schedule_id}}" class="id">
|
||||||
<p>{{schedule.schedule_id}}</p>
|
<p>{{schedule.name}}</p>
|
||||||
</td>
|
</td>
|
||||||
<td id="{{schedule.action}}" class="action">
|
<td id="{{schedule.action}}" class="action">
|
||||||
<p>{{schedule.action}}</p>
|
<p>{{schedule.action}}</p>
|
||||||
@ -82,10 +91,11 @@
|
|||||||
</td>
|
</td>
|
||||||
<td id="{{schedule.interval}}" class="action">
|
<td id="{{schedule.interval}}" class="action">
|
||||||
{% if schedule.interval != '' %}
|
{% if schedule.interval != '' %}
|
||||||
<p>Every</p>
|
<p>{{ translate('serverSchedules', 'every', data['lang']) }}</p>
|
||||||
<p>{{schedule.interval}} {{schedule.interval_type}}</p>
|
<p>{{schedule.interval}} {{schedule.interval_type}}</p>
|
||||||
{% elif schedule.interval_type == 'reaction' %}
|
{% elif schedule.interval_type == 'reaction' %}
|
||||||
<p>{{schedule.interval_type}}<br><br>child of ID: {{ schedule.parent }}</p>
|
<p>{{schedule.interval_type}}<br><br>{{ translate('serverSchedules', 'child', data['lang'])}}:
|
||||||
|
{{ schedule.parent }}</p>
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>Cron String:</p>
|
<p>Cron String:</p>
|
||||||
<p>{{schedule.cron_string}}</p>
|
<p>{{schedule.cron_string}}</p>
|
||||||
@ -120,9 +130,12 @@
|
|||||||
style="table-layout:fixed;">
|
style="table-layout:fixed;">
|
||||||
<thead>
|
<thead>
|
||||||
<tr class="rounded">
|
<tr class="rounded">
|
||||||
<th style="width: 25%; min-width: 50px;">Action</th>
|
<th style="width: 25%; min-width: 50px;">{{ translate('serverSchedules', 'action', data['lang'])
|
||||||
<th style="max-width: 40%; min-width: 50px;">Command</th>
|
}}</th>
|
||||||
<th style="width: 10%; min-width: 50px;">Enabled</th>
|
<th style="max-width: 40%; min-width: 50px;">{{ translate('serverSchedules', 'command',
|
||||||
|
data['lang']) }}</th>
|
||||||
|
<th style="width: 10%; min-width: 50px;">{{ translate('serverSchedules', 'enabled',
|
||||||
|
data['lang']) }}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@ -137,11 +150,11 @@
|
|||||||
<td id="{{schedule.enabled}}" class="action">
|
<td id="{{schedule.enabled}}" class="action">
|
||||||
{% if schedule.enabled %}
|
{% if schedule.enabled %}
|
||||||
<span class="text-success">
|
<span class="text-success">
|
||||||
<i class="fas fa-check-square"></i> Yes
|
<i class="fas fa-check-square"></i> {{ translate('serverSchedules', 'yes', data['lang']) }}
|
||||||
</span>
|
</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<span class="text-danger">
|
<span class="text-danger">
|
||||||
<i class="far fa-times-square"></i> No
|
<i class="far fa-times-square"></i> {{ translate('serverSchedules', 'no', data['lang']) }}
|
||||||
</span>
|
</span>
|
||||||
{% end %}
|
{% end %}
|
||||||
</td>
|
</td>
|
||||||
@ -152,7 +165,8 @@
|
|||||||
<div class="modal-dialog" role="document">
|
<div class="modal-dialog" role="document">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title" id="exampleModalLabel">Task Details</h5>
|
<h5 class="modal-title" id="exampleModalLabel">{{ translate('serverSchedules', 'details',
|
||||||
|
data['lang']) }}</h5>
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
@ -160,36 +174,43 @@
|
|||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<ul style="list-style: none;">
|
<ul style="list-style: none;">
|
||||||
<li id="{{schedule.schedule_id}}" class="id" style="border-top: .1em solid gray;">
|
<li id="{{schedule.schedule_id}}" class="id" style="border-top: .1em solid gray;">
|
||||||
<h4>ID</h4>
|
<h4>{{ translate('serverSchedules', 'name', data['lang']) }}</h4>
|
||||||
<p>{{schedule.schedule_id}}</p>
|
<p>{{schedule.schedule_id}}</p>
|
||||||
</li>
|
</li>
|
||||||
<li id="{{schedule.action}}" class="action" style="border-top: .1em solid gray;">
|
<li id="{{schedule.action}}" class="action" style="border-top: .1em solid gray;">
|
||||||
<h4>Action</h4>
|
<h4>{{ translate('serverSchedules', 'action', data['lang']) }}</h4>
|
||||||
<p>{{schedule.action}}</p>
|
<p>{{schedule.action}}</p>
|
||||||
</li>
|
</li>
|
||||||
<li id="{{schedule.command}}" class="action" style="border-top: .1em solid gray;">
|
<li id="{{schedule.command}}" class="action" style="border-top: .1em solid gray;">
|
||||||
<h4>Command</h4>
|
<h4>{{ translate('serverSchedules', 'command', data['lang']) }}</h4>
|
||||||
<p>{{schedule.command}}</p>
|
<p>{{schedule.command}}</p>
|
||||||
</li>
|
</li>
|
||||||
<li id="{{schedule.interval}}" class="action" style="border-top: .1em solid gray;">
|
<li id="{{schedule.interval}}" class="action" style="border-top: .1em solid gray;">
|
||||||
{% if schedule.interval != '' %}
|
{% if schedule.interval != '' %}
|
||||||
<h4>Interval</h4>
|
<h4>{{ translate('serverSchedules', 'interval', data['lang']) }}</h4>
|
||||||
<p>Every {{schedule.interval}} {{schedule.interval_type}}</p>
|
<p>{{ translate('serverSchedules', 'every', data['lang']) }} {{schedule.interval}}
|
||||||
|
{{schedule.interval_type}}</p>
|
||||||
{% elif schedule.interval_type == 'reaction' %}
|
{% elif schedule.interval_type == 'reaction' %}
|
||||||
<h4>Interval</h4>
|
<h4>{{ translate('serverSchedules', 'interval', data['lang']) }}</h4>
|
||||||
<p>{{schedule.interval_type}}<br><br>child of ID: {{ schedule.parent }}</p>
|
<p>{{schedule.interval_type}}<br><br>{{ translate('serverSchedules', 'child',
|
||||||
|
data['lang']) }}: {{ schedule.parent }}</p>
|
||||||
{% else %}
|
{% else %}
|
||||||
<h4>Interval</h4>
|
<h4>{{ translate('serverSchedules', 'interval', data['lang']) }}</h4>
|
||||||
<p>Cron String: {{schedule.cron_string}}</p>
|
<p>{{ translate('serverSchedules', 'cron', data['lang']) }}: {{schedule.cron_string}}
|
||||||
|
</p>
|
||||||
{% end %}
|
{% end %}
|
||||||
</li>
|
</li>
|
||||||
<li id="{{schedule.start_time}}" class="action" style="border-top: .1em solid gray;">
|
<li id="{{schedule.start_time}}" class="action" style="border-top: .1em solid gray;">
|
||||||
<h4>Next Run</h4>
|
<h4>{{ translate('serverSchedules', 'nextRun', data['lang']) }}</h4>
|
||||||
|
{% if schedule.next_run %}
|
||||||
<p>{{schedule.next_run}}</p>
|
<p>{{schedule.next_run}}</p>
|
||||||
|
{% else %}
|
||||||
|
<p>zzzzzzz</p>
|
||||||
|
{% end %}
|
||||||
</li>
|
</li>
|
||||||
<li id="{{schedule.enabled}}" class="action"
|
<li id="{{schedule.enabled}}" class="action"
|
||||||
style="border-top: .1em solid gray; border-bottom: .1em solid gray">
|
style="border-top: .1em solid gray; border-bottom: .1em solid gray">
|
||||||
<h4>Enabled</h4>
|
<h4>{{ translate('serverSchedules', 'enabled', data['lang']) }}</h4>
|
||||||
<input type="checkbox" class="schedule-enabled-toggle"
|
<input type="checkbox" class="schedule-enabled-toggle"
|
||||||
data-schedule-id="{{schedule.schedule_id}}"
|
data-schedule-id="{{schedule.schedule_id}}"
|
||||||
data-schedule-enabled="{{ 'true' if schedule.enabled else 'false' }}">
|
data-schedule-enabled="{{ 'true' if schedule.enabled else 'false' }}">
|
||||||
@ -200,12 +221,15 @@
|
|||||||
<button
|
<button
|
||||||
onclick="window.location.href='/panel/edit_schedule?id={{ data['server_stats']['server_id']['server_id'] }}&sch_id={{schedule.schedule_id}}'"
|
onclick="window.location.href='/panel/edit_schedule?id={{ data['server_stats']['server_id']['server_id'] }}&sch_id={{schedule.schedule_id}}'"
|
||||||
class="btn btn-info">
|
class="btn btn-info">
|
||||||
<i class="fas fa-pencil-alt"></i> Edit
|
<i class="fas fa-pencil-alt"></i> {{ translate('serverSchedules', 'edit', data['lang'])
|
||||||
|
}}
|
||||||
</button>
|
</button>
|
||||||
<button data-sch={{ schedule.schedule_id }} class="btn btn-danger del_button">
|
<button data-sch={{ schedule.schedule_id }} class="btn btn-danger del_button">
|
||||||
<i class="fas fa-trash" aria-hidden="true"></i> Delete
|
<i class="fas fa-trash" aria-hidden="true"></i> {{ translate('serverSchedules',
|
||||||
|
'delete', data['lang']) }}
|
||||||
</button>
|
</button>
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">{{
|
||||||
|
translate('serverSchedules', 'close', data['lang']) }}</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -303,7 +327,7 @@
|
|||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
console.log('ready for JS!')
|
console.log('ready for JS!')
|
||||||
$('#schedule_table').DataTable({
|
$('#schedule_table').DataTable({
|
||||||
'order': [4, 'desc']
|
'order': [4, 'asc'],
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -311,7 +335,7 @@
|
|||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
console.log('ready for JS!')
|
console.log('ready for JS!')
|
||||||
$('#mini_schedule_table').DataTable({
|
$('#mini_schedule_table').DataTable({
|
||||||
'order': [2, 'desc']
|
'order': [2, 'asc']
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
document.getElementById('mini_schedule_table_wrapper').hidden = true;
|
document.getElementById('mini_schedule_table_wrapper').hidden = true;
|
||||||
|
17
app/migrations/20220805_schedule_rename_comment.py
Normal file
17
app/migrations/20220805_schedule_rename_comment.py
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# Generated by database migrator
|
||||||
|
import peewee
|
||||||
|
|
||||||
|
|
||||||
|
def migrate(migrator, database, **kwargs):
|
||||||
|
migrator.rename_column("schedules", "comment", "name")
|
||||||
|
|
||||||
|
"""
|
||||||
|
Write your migrations here.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def rollback(migrator, database, **kwargs):
|
||||||
|
migrator.rename_column("schedules", "name", "comment")
|
||||||
|
"""
|
||||||
|
Write your rollback migrations here.
|
||||||
|
"""
|
@ -48,7 +48,7 @@
|
|||||||
"subscriptionLevel": "Level",
|
"subscriptionLevel": "Level",
|
||||||
"supportTeam": "Support and Documentation Team",
|
"supportTeam": "Support and Documentation Team",
|
||||||
"thankYou": "THANK YOU",
|
"thankYou": "THANK YOU",
|
||||||
"translationDesc": "to our community who translate!",
|
"translationDesc": "to our community who translate! [ Active = 🟢 Inactive/Retired = ⚪ ]",
|
||||||
"translationName": "Name",
|
"translationName": "Name",
|
||||||
"translationTitle": "Language Translation",
|
"translationTitle": "Language Translation",
|
||||||
"translator": "Translators"
|
"translator": "Translators"
|
||||||
@ -392,6 +392,7 @@
|
|||||||
},
|
},
|
||||||
"serverScheduleConfig": {
|
"serverScheduleConfig": {
|
||||||
"backup": "Backup Server",
|
"backup": "Backup Server",
|
||||||
|
"select": "Basic / Cron / Chain Reaction Select",
|
||||||
"basic": "Basic",
|
"basic": "Basic",
|
||||||
"children": "Linked Child Tasks: ",
|
"children": "Linked Child Tasks: ",
|
||||||
"command": "Command",
|
"command": "Command",
|
||||||
@ -418,7 +419,24 @@
|
|||||||
"time-explain": "What time do you want your schedule to execute?"
|
"time-explain": "What time do you want your schedule to execute?"
|
||||||
},
|
},
|
||||||
"serverSchedules": {
|
"serverSchedules": {
|
||||||
|
"scheduledTasks": "Scheduled Tasks",
|
||||||
|
"create": "Create New Schedule",
|
||||||
|
"name": "Name",
|
||||||
|
"action": "Action",
|
||||||
|
"command": "Command",
|
||||||
|
"interval": "Interval",
|
||||||
|
"nextRun": "Next Run",
|
||||||
|
"enabled": "Enabled",
|
||||||
|
"edit": "Edit",
|
||||||
|
"every": "Every",
|
||||||
|
"yes": "Yes",
|
||||||
|
"no": "No",
|
||||||
|
"cron": "Crong String",
|
||||||
|
"details": "Schedule Details",
|
||||||
|
"child": "Child of schedule with ID ",
|
||||||
"areYouSure": "Delete Scheduled Task?",
|
"areYouSure": "Delete Scheduled Task?",
|
||||||
|
"close": "Close",
|
||||||
|
"delete": "Delete",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"cannotSee": "Not seeing everything?",
|
"cannotSee": "Not seeing everything?",
|
||||||
"cannotSeeOnMobile": "Try clicking on a scheduled task for full details.",
|
"cannotSeeOnMobile": "Try clicking on a scheduled task for full details.",
|
||||||
@ -540,4 +558,4 @@
|
|||||||
"userSettings": "User Settings",
|
"userSettings": "User Settings",
|
||||||
"uses": "Number of uses allowed (-1==No Limit)"
|
"uses": "Number of uses allowed (-1==No Limit)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user