feat: Send all settings in their groups to frontend -> show tabs

This commit is contained in:
IceToast 2023-02-09 18:29:03 +01:00 committed by IceToast
parent a9619be8d0
commit e9fec445ff
2 changed files with 42 additions and 115 deletions

View file

@ -18,33 +18,24 @@ class SettingsController extends Controller
*/ */
public function index() public function index()
{ {
//Get all tabs as laravel view paths
$tabs = [];
if(file_exists(Theme::getViewPaths()[0] . '/admin/settings/tabs/')){
$tabspath = glob(Theme::getViewPaths()[0] . '/admin/settings/tabs/*.blade.php');
}else{
$tabspath = glob(Theme::path('views', 'default').'/admin/settings/tabs/*.blade.php');
}
foreach ($tabspath as $filename) { // get all other settings in app/Settings directory
$tabs[] = 'admin.settings.tabs.'.basename($filename, '.blade.php'); // group items by file name like $categories
$settings = collect();
foreach (scandir(app_path('Settings')) as $file) {
if (in_array($file, ['.', '..'])) {
continue;
}
$className = 'App\\Settings\\' . str_replace('.php', '', $file);
$settings[str_replace('Settings.php', '', $file)] = (new $className())->toCollection()->all();
} }
$settings->sort();
//Generate a html list item for each tab based on tabs file basename, set first tab as active
$tabListItems = [];
foreach ($tabs as $tab) {
$tabName = str_replace('admin.settings.tabs.', '', $tab);
$tabListItems[] = '<li class="nav-item">
<a class="nav-link '.(empty($tabListItems) ? 'active' : '').'" data-toggle="pill" href="#'.$tabName.'">
'.__(ucfirst($tabName)).'
</a></li>';
}
$themes = array_diff(scandir(base_path('themes')), array('..', '.')); $themes = array_diff(scandir(base_path('themes')), array('..', '.'));
return view('admin.settings.index', [ return view('admin.settings.index', [
'tabs' => $tabs, 'settings' => $settings->all(),
'tabListItems' => $tabListItems,
'themes' => $themes, 'themes' => $themes,
'active_theme' => Theme::active(), 'active_theme' => Theme::active(),
]); ]);

View file

@ -19,11 +19,12 @@
</div> </div>
</section> </section>
<!-- END CONTENT HEADER --> <!-- END CONTENT HEADER -->
@if(!file_exists(base_path()."/install.lock")) @if (!file_exists(base_path() . '/install.lock'))
<div class="callout callout-danger"> <div class="callout callout-danger">
<h4>{{ __('The installer is not locked!') }}</h4> <h4>{{ __('The installer is not locked!') }}</h4>
<p>{{ __('please create a file called "install.lock" in your dashboard Root directory. Otherwise no settings will be loaded!') }}</p> <p>{{ __('please create a file called "install.lock" in your dashboard Root directory. Otherwise no settings will be loaded!') }}
<a href="/install?step=7"><button class="btn btn-outline-danger">{{__('or click here')}}</button></a> </p>
<a href="/install?step=7"><button class="btn btn-outline-danger">{{ __('or click here') }}</button></a>
</div> </div>
@endif @endif
@ -37,98 +38,35 @@
</div> </div>
</div> </div>
<div class="card-body"> <div class="card-body">
<aside class="d-flex" style=""> <!-- Sidebar Menu -->
<div class="sidebar d-flex flex-column" style="height: fit-content"> <nav class="mt-2 max-w-30">
<nav class="container"> <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu"
<ul class="row nav nav-pills nav-sidebar flex-column" style="width: fit-content" data-widget="treeview" role="menu" data-accordion="false"> data-accordion="false">
<li class="nav-item col"> @foreach ($settings as $key => $setting)
<a href="#general" <li class="nav-item border-bottom-0">
class="nav-link @if (Request::routeIs('home')) active @endif"> <a href="#{{ $key }}" class="nav-link {{ $loop->first ? 'active' : '' }}"
<p>{{ __('General') }}</p> data-toggle="tab">
</a> <i class="nav-icon fas fa-cog"></i>
</li> <p>
<li class="nav-item col"> {{ $key }}
<a href="#system" </p>
class="nav-link @if (Request::routeIs('home')) active @endif"> </a>
<p>{{ __('System') }}</p> </li>
</a> @endforeach
</li> </ul>
<li class="nav-item col"> </nav>
<a href="#mail" <!-- /.sidebar-menu -->
class="nav-link @if (Request::routeIs('home')) active @endif"> <!-- Content in $settings -->
<p>{{ __('Mail') }}</p> <div class="tab-content">
</a>
</li> @foreach ($settings as $key => $value)
<li class="nav-item col"> <
<a href="#discord"
class="nav-link @if (Request::routeIs('home')) active @endif"> @endforeach
<p>{{ __('Discord') }}</p>
</a> </div>
</li>
<li class="nav-item col">
<a href="#invoices"
class="nav-link @if (Request::routeIs('home')) active @endif">
<p>{{ __('Invoices') }}</p>
</a>
</li>
<li class="nav-item col">
<a href="#locales"
class="nav-link @if (Request::routeIs('home')) active @endif">
<p>{{ __('Locales') }}</p>
</a>
</li>
<li class="nav-item col">
<a href="#pterodactyl"
class="nav-link @if (Request::routeIs('home')) active @endif">
<p>{{ __('Pterodactyl') }}</p>
</a>
</li>
<li class="nav-item col">
<a href="#referral"
class="nav-link @if (Request::routeIs('home')) active @endif">
<p>{{ __('Referral') }}</p>
</a>
</li>
<li class="nav-item col">
<a href="#servers"
class="nav-link @if (Request::routeIs('home')) active @endif">
<p>{{ __('Servers') }}</p>
</a>
</li>
<li class="nav-item col">
<a href="#tickets"
class="nav-link @if (Request::routeIs('home')) active @endif">
<p>{{ __('Tickets') }}</p>
</a>
</li>
<li class="nav-item col">
<a href="#users"
class="nav-link @if (Request::routeIs('home')) active @endif">
<p>{{ __('Users') }}</p>
</a>
</li>
<li class="nav-item col">
<a href="#website"
class="nav-link @if (Request::routeIs('home')) active @endif">
<p>{{ __('Website') }}</p>
</a>
</li>
</ul>
</nav>
</div>
<div class="d-flex justify-content-around w-100">
<div class="d-flex" style="height: fit-content;">
Ptero API
</div>
<div class="d-flex" style="height: fit-content;">
<input type="text" name="text" id="#general">
</div>
</div>
</aside>
</div> </div>
</div> </div>
</div>
</div> </div>
@ -159,6 +97,4 @@
$('html,body').scrollTop(scrollmem); $('html,body').scrollTop(scrollmem);
}); });
</script> </script>
@endsection @endsection