Skip to content

Commit

Permalink
PUSH
Browse files Browse the repository at this point in the history
-> Sidebar now works
-> Backups can be managed from the GUI
  • Loading branch information
NaysKutzu committed Sep 26, 2024
1 parent 4271f8d commit 975d92b
Show file tree
Hide file tree
Showing 6 changed files with 208 additions and 23 deletions.
105 changes: 105 additions & 0 deletions app/Web/Routes/admin/backups.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
<?php

use MythicalSystemsFramework\Backup\Backup;
use MythicalSystemsFramework\User\Announcement\Announcements;
use MythicalSystemsFramework\User\UserDataHandler;
use MythicalSystemsFramework\User\UserHelper;
use MythicalSystemsFramework\Web\Template\Engine;

global $router;

$router->add('/admin/backups', function (): void {
global $router, $event, $renderer;
$template = 'admin/backups/list.twig';
if (isset($_COOKIE['token']) === false) {
exit(header('location: /auth/login'));
}

$user = new UserHelper($_COOKIE['token'], $renderer);
UserDataHandler::requireAuthorization($renderer, $_COOKIE['token']);
$uuid = UserDataHandler::getSpecificUserData($_COOKIE['token'], 'uuid', false);


if (
!UserDataHandler::hasPermission($_COOKIE['token'], "mythicalframework.admin.backups.view") ||
!UserDataHandler::hasPermission($_COOKIE['token'], "mythicalframework.admin.backups.create") ||
!UserDataHandler::hasPermission($_COOKIE['token'], "mythicalframework.admin.backups.delete")
) {
exit(header('location: /errors/403'));
}

$backups = Backup::getBackups();
$renderer->addGlobal('backups', $backups);
$renderer->addGlobal('page_name', 'Backups');

Engine::registerAlerts($renderer, $template);
exit($renderer->render($template));
});

$router->add('/admin/backups/(.*)/restore', function ($id): void {
global $router, $event, $renderer;
if (isset($_COOKIE['token']) === false) {
exit(header('location: /auth/login'));
}

$user = new UserHelper($_COOKIE['token'], $renderer);
UserDataHandler::requireAuthorization($renderer, $_COOKIE['token']);

if (
!UserDataHandler::hasPermission($_COOKIE['token'], "mythicalframework.admin.backups.restore")
) {
exit(header('location: /errors/403'));
}

if (Backup::doesBackupExist($id) == false) {
exit(header('location: /admin/backups?s=not_found'));
} else {
Backup::restore($id);
exit(header('location: /admin/backups?s=ok'));
}
});

$router->add('/admin/backups/(.*)/delete', function ($id): void {
global $router, $event, $renderer;
if (isset($_COOKIE['token']) === false) {
exit(header('location: /auth/login'));
}

$user = new UserHelper($_COOKIE['token'], $renderer);
UserDataHandler::requireAuthorization($renderer, $_COOKIE['token']);

if (
!UserDataHandler::hasPermission($_COOKIE['token'], "mythicalframework.admin.backups.delete")
) {
exit(header('location: /errors/403'));
}
if (Backup::doesBackupExist($id) == false) {
exit(header('location: /admin/backups?s=not_found'));
} else {
Backup::remove($id);
exit(header('location: /admin/backups?s=ok'));
}


});

$router->add('/admin/backups/create', function (): void {
global $router, $event, $renderer;
if (isset($_COOKIE['token']) === false) {
exit(header('location: /auth/login'));
}

$user = new UserHelper($_COOKIE['token'], $renderer);
UserDataHandler::requireAuthorization($renderer, $_COOKIE['token']);

if (
!UserDataHandler::hasPermission($_COOKIE['token'], "mythicalframework.admin.backups.create")
) {
exit(header('location: /errors/403'));
}

$backup = Backup::take();
Backup::setBackupStatus($backup, \MythicalSystemsFramework\Backup\Status::DONE);

exit(header('location: /admin/backups?s=ok'));
});
25 changes: 24 additions & 1 deletion public/assets/MythicalFramework.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions storage/addons/Core/permissions.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

"mythicalframework.admin.backups.view",
"mythicalframework.admin.backups.create",
"mythicalframework.admin.backups.restore",
"mythicalframework.admin.backups.delete",

"mythicalframework.admin.logs.view",
Expand Down
17 changes: 16 additions & 1 deletion storage/lang/en_US.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,22 @@

Pages:
AdminArea:
Pages:
Pages:
Backups:
List:
Title: "Backups"
Description: "Here you can manage all the backups."
Table:
CreateButton: "Create new backup"
Head:
Columns:
ID: "ID"
Status: "Status"
Date: "Date"
Actions: "Actions"
Actions:
Restore: "Restore"
Delete: "Delete"
Announcements:
Create:
Title: "Create Announcement"
Expand Down
46 changes: 46 additions & 0 deletions storage/themes/v2/admin/backups/list.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
{% extends 'components/dashboard.twig' %}

{% block head %}{% endblock %}

{% block dashboard %}
<div class="card">
<div class="card-datatable table-responsive pt-0">
<div class="card-header">
<h3 class="card-title">{{ lang('Pages.AdminArea.Pages.Backups.List.Title') }}</h3>
<p class="card-subtitle text-muted">{{ lang('Pages.AdminArea.Pages.Backups.List.Description') }}</p>
<br>
<div class="card-options">
<a class="btn btn-primary" href="/admin/backups/create">
{{ lang('Pages.AdminArea.Pages.Backups.List.Table.CreateButton') }}
</a>
</div>
</div>
<table class="datatables-basic table">
<thead>
<tr>
<th>{{lang('Pages.AdminArea.Pages.Backups.List.Table.Head.Columns.ID')}}</th>
<th>{{lang('Pages.AdminArea.Pages.Backups.List.Table.Head.Columns.Status') }}</th>
<th>{{lang('Pages.AdminArea.Pages.Backups.List.Table.Head.Columns.Date')}}</th>
<th>{{lang('Pages.AdminArea.Pages.Backups.List.Table.Head.Columns.Actions')}}</th>
</tr>
</thead>
<tbody>
{% for backup in backups %}
<tr>
<td>{{ backup.id }}</td>
<td>{{ backup.backup_status }}</td>
<td>{{ backup.backup_date_end }}</td>
<td>
<button onclick="requireConfirmation('/admin/backups/{{ backup.id }}/restore')" class="btn btn-sm btn-primary">{{lang('Pages.AdminArea.Pages.Backups.List.Table.Head.Actions.Restore') }}</button>
<button onclick="requireConfirmation('/admin/backups/{{ backup.id }}/delete')" class="btn btn-sm btn-danger">{{lang('Pages.AdminArea.Pages.Backups.List.Table.Head.Actions.Delete')}}</button>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>

</div>{% endblock %}{% block footer %}
{% include 'requirements/datatables.twig' %}
<script>$(document).ready(function() {$('.datatables-basic').DataTable({responsive: true,pageLength: 10,lengthMenu: [5, 10, 25, 50, 75, 100]});});</script>{% endblock %}
37 changes: 16 additions & 21 deletions storage/themes/v2/components/sidebar.twig
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
</li>
{% if hasPermission("mythicalframework.admin.ticket.view") or hasPermission("mythicalframework.admin.ticket.create") or hasPermission("mythicalframework.admin.ticket.reply") or hasPermission("mythicalframework.admin.ticket.delete") %}
<li class="menu-item">
<a href="/dashboard/admin/support" class="menu-link">
<a href="/admin/support" class="menu-link">
<i class="menu-icon tf-icons ti ti-messages"></i>
<div>{{lang('Pages.Components.Sidebar.Admin.Items.Support.Title')}}</div>
</a>
Expand All @@ -55,9 +55,9 @@
</li>
{% endif %}

{% if hasPermission("mythicalframework.admin.backups.view") or hasPermission("mythicalframework.admin.backups.create") or hasPermission("mythicalframework.admin.backups.delete") %}
{% if hasPermission("mythicalframework.admin.backups.view") or hasPermission("mythicalframework.admin.backups.restore") or hasPermission("mythicalframework.admin.backups.create") or hasPermission("mythicalframework.admin.backups.delete") %}
<li class="menu-item">
<a href="app-calendar.html" class="menu-link">
<a href="/admin/backups" class="menu-link">
<i class="menu-icon tf-icons ti ti-device-floppy"></i>
<div>{{lang('Pages.Components.Sidebar.Admin.Items.Backups.Title')}}</div>
</a>
Expand All @@ -66,15 +66,15 @@

{% if hasPermission("mythicalframework.admin.plugins.view") or hasPermission("mythicalframework.admin.plugins.enable") or hasPermission("mythicalframework.admin.plugins.install") or hasPermission("mythicalframework.admin.plugins.uninstall") or hasPermission("mythicalframework.admin.plugins.disable") %}
<li class="menu-item">
<a href="app-calendar.html" class="menu-link">
<a href="/admin/plugins" class="menu-link">
<i class="menu-icon tf-icons ti ti-plug"></i>
<div>{{lang('Pages.Components.Sidebar.Admin.Items.Addons.Title')}}</div>
</a>
</li>
{% endif %}
{% if hasPermission("mythicalframework.admin.logs.view") %}
<li class="menu-item">
<a href="app-calendar.html" class="menu-link">
<a href="/admin/logs" class="menu-link">
<i class="menu-icon tf-icons ti ti-books"></i>
<div>{{lang('Pages.Components.Sidebar.Admin.Items.Logs.Title')}}</div>
</a>
Expand All @@ -83,7 +83,7 @@

{% if hasPermission("mythicalframework.admin.languages.view") or hasPermission("mythicalframework.admin.languages.edit") %}
<li class="menu-item">
<a href="app-calendar.html" class="menu-link">
<a href="/admin/language" class="menu-link">
<i class="menu-icon tf-icons ti ti-language"></i>
<div>{{lang("Pages.Components.Sidebar.Admin.Items.Users.Languages.Title")}}</div>
</a>
Expand All @@ -97,7 +97,7 @@
</a>
<ul class="menu-sub">
<li class="menu-item">
<a href="app-user-list.html" class="menu-link">
<a href="/admin/users" class="menu-link">
<div>{{lang('Pages.Components.Sidebar.Admin.Items.Users.Items.List.Title') }}</div>
</a>
</li>
Expand All @@ -108,17 +108,12 @@
</a>
<ul class="menu-sub">
<li class="menu-item">
<a href="app-email.html" class="menu-link">
<div>{{lang('Pages.Components.Sidebar.Admin.Items.Users.Items.Other.Items.SendMail.Title')}}</div>
</a>
</li>
<li class="menu-item">
<a href="app-user-view-security.html" class="menu-link">
<a href="/admin/user/activities" class="menu-link">
<div>{{lang('Pages.Components.Sidebar.Admin.Items.Users.Items.Other.Items.Activities.Title') }}</div>
</a>
</li>
<li class="menu-item">
<a href="app-user-view-billing.html" class="menu-link">
<a href="/admin/user/apikeys" class="menu-link">
<div>{{lang('Pages.Components.Sidebar.Admin.Items.Users.Items.Other.Items.ApiKeys.Title') }}</div>
</a>
</li>
Expand All @@ -135,12 +130,12 @@
</a>
<ul class="menu-sub">
<li class="menu-item">
<a href="app-access-roles.html" class="menu-link">
<a href="/admin/roles" class="menu-link">
<div>{{lang("Pages.Components.Sidebar.Admin.Items.Users.RolesAndPermissions.Items.Roles.Title") }}</div>
</a>
</li>
<li class="menu-item">
<a href="app-access-permission.html" class="menu-link">
<a href="/admin/permissions" class="menu-link">
<div>{{lang("Pages.Components.Sidebar.Admin.Items.Users.RolesAndPermissions.Items.Permissions.Title")}}</div>
</a>
</li>
Expand All @@ -155,27 +150,27 @@
</a>
<ul class="menu-sub">
<li class="menu-item">
<a href="app-access-roles.html" class="menu-link">
<a href="/admin/settings/general" class="menu-link">
<div>{{lang("Pages.Components.Sidebar.Admin.Items.Users.Settings.Items.General.Title")}}</div>
</a>
</li>
<li class="menu-item">
<a href="app-access-permission.html" class="menu-link">
<a href="/admin/settings/mails" class="menu-link">
<div>{{lang("Pages.Components.Sidebar.Admin.Items.Users.Settings.Items.Mail.Title")}}</div>
</a>
</li>
<li class="menu-item">
<a href="app-access-permission.html" class="menu-link">
<a href="/admin/settings/cloudflare" class="menu-link">
<div>{{lang("Pages.Components.Sidebar.Admin.Items.Users.Settings.Items.CloudFlare.Title")}}</div>
</a>
</li>
<li class="menu-item">
<a href="app-access-permission.html" class="menu-link">
<a href="/admin/settings/seo" class="menu-link">
<div>{{lang("Pages.Components.Sidebar.Admin.Items.Users.Settings.Items.SEO.Title")}}</div>
</a>
</li>
<li class="menu-item">
<a href="app-access-permission.html" class="menu-link">
<a href="/admin/settings/other" class="menu-link">
<div>{{lang("Pages.Components.Sidebar.Admin.Items.Users.Settings.Items.Custom.Title")}}</div>
</a>
</li>
Expand Down

0 comments on commit 975d92b

Please sign in to comment.