123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357 |
- @extends('layouts.main')
- @section('content')
- <!-- CONTENT HEADER -->
- <section class="content-header">
- <div class="container-fluid">
- <div class="mb-2 row">
- <div class="col-sm-6">
- <h1>{{ __('Settings') }}</h1>
- </div>
- <div class="col-sm-6">
- <ol class="breadcrumb float-sm-right">
- <li class="breadcrumb-item"><a href="">{{ __('Dashboard') }}</a></li>
- <li class="breadcrumb-item"><a class="text-muted"
- href="{{ route('admin.settings.index') }}">{{ __('Settings') }}</a>
- </li>
- </ol>
- </div>
- </div>
- </div>
- </section>
- <!-- END CONTENT HEADER -->
- @if (!file_exists(base_path() . '/install.lock'))
- <div class="callout callout-danger">
- <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>
- <a href="/install?step=7">
- <button class="btn btn-outline-danger">{{ __('or click here') }}</button>
- </a>
- </div>
- @endif
- <!-- MAIN CONTENT -->
- <section class="content">
- <div class="container-fluid">
- <div class="card">
- <div class="card-header">
- <div class="d-flex justify-content-between">
- <h5 class="card-title"><i class="mr-2 fas fa-tools"></i>{{ __('Settings') }}</h5>
- </div>
- </div>
- <div class="card-body">
- <!-- Sidebar Menu -->
- <div class="d-flex w-100">
- <div class="p-0 col-2">
- <nav class="mt-1">
- <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="tablist"
- data-accordion="false">
- <li class="nav-item border-bottom-0">
- <a href="#icons" class="nav-link" data-toggle="pill" role="tab">
- <i class="nav-icon fas fa-image"></i>
- <p>
- {{ __('Images / Icons') }}
- </p>
- </a>
- </li>
- @foreach ($settings as $category => $options)
- @if (!str_contains($options['settings_class'], 'Extension'))
- @canany(['settings.' . strtolower($category) . '.read', 'settings.' .
- strtolower($category) . '.write'])
- <li class="nav-item border-bottom-0">
- <a href="#{{ $category }}"
- class="nav-link {{ $loop->first ? 'active' : '' }}" data-toggle="pill"
- role="tab">
- <i
- class="nav-icon fas {{ $options['category_icon'] ?? 'fas fa-cog' }}"></i>
- <p>
- {{ $category }}
- </p>
- </a>
- </li>
- @endcanany
- @endif
- @endforeach
- </ul>
- <button class="btn btn-outline-secondary" type="button" data-toggle="collapse"
- data-target="#collapseExtensions" aria-expanded="false"
- aria-controls="collapseExtensions">
- {{ __('Extension Settings') }}
- </button>
- <div class="collapse" id="collapseExtensions">
- <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="tablist"
- data-accordion="false">
- @foreach ($settings as $category => $options)
- @if (str_contains($options['settings_class'], 'Extension'))
- @canany(['settings.' . strtolower($category) . '.read', 'settings.' .
- strtolower($category) . '.write'])
- <li class="nav-item border-bottom-0">
- <a href="#{{ $category }}" class="nav-link" data-toggle="pill"
- role="tab">
- <i
- class="nav-icon fas {{ $options['category_icon'] ?? 'fas fa-cog' }}"></i>
- <p>
- {{ $category }}
- </p>
- </a>
- </li>
- @endcanany
- @endif
- @endforeach
- </div>
- </ul>
- </nav>
- </div>
- <!-- /.sidebar-menu -->
- <!-- Content in $settings -->
- <div class="p-0 col-10">
- <div class="ml-3 tab-content" style="width: 100%;">
- <div container class="container tab-pane fade" id="icons" role="tabpanel">
- <form method="POST" enctype="multipart/form-data" class="mb-3"
- action="{{ route('admin.settings.updateIcons') }}">
- @csrf
- @method('POST')
- <div class="row">
- <div class="ml-5 card" style="width: 18rem;">
- <span class="text-center h3">{{ __('FavIcon') }} </span>
- <img src="{{ Storage::disk('public')->exists('favicon.ico') ? asset('storage/favicon.ico') : asset('images/controlpanel_logo.png') }}"
- style="width:5vw;display: block; margin-left: auto;margin-right: auto"
- class="card-img-top" alt="...">
- <div class="card-body">
- </div>
- <input type="file" accept="image/x-icon" class="form-control"
- name="favicon" id="favicon">
- </div>
- <div class="ml-5 card" style="width: 18rem;">
- <span class="text-center h3">{{ __('Icon') }} </span>
- <img src="{{ Storage::disk('public')->exists('icon.png') ? asset('storage/icon.png') : asset('images/controlpanel_logo.png') }}"
- style="width:5vw;display: block; margin-left: auto;margin-right: auto"
- class="card-img-top" alt="...">
- <div class="card-body">
- </div>
- <input type="file" accept="image/png,image/jpeg,image/jpg"
- class="form-control" name="icon" id="icon">
- </div>
- <div class="ml-5 card" style="width: 18rem;">
- <span class="text-center h3">{{ __('Login-page Logo') }} </span>
- <img src="{{ Storage::disk('public')->exists('logo.png') ? asset('storage/logo.png') : asset('images/controlpanel_logo.png') }}"
- style="width:5vw;display: block; margin-left: auto;margin-right: auto"
- class="card-img-top" alt="...">
- <div class="card-body">
- </div>
- <input type="file" accept="image/png,image/jpeg,image/jpg"
- class="form-control" name="logo" id="logo">
- </div>
- </div>
- <div class="row">
- <button class="mt-3 ml-3 btn btn-primary">{{ __('Save') }}</button>
- </div>
- </form>
- </div>
- @foreach ($settings as $category => $options)
- @canany(['settings.' . strtolower($category) . '.read', 'settings.' .
- strtolower($category) . '.write'])
- <div class="tab-pane fade container {{ $loop->first ? 'active show' : '' }}"
- id="{{ $category }}" role="tabpanel">
- <form action="{{ route('admin.settings.update') }}" method="POST">
- @csrf
- @method('POST')
- <input type="hidden" name="settings_class"
- value="{{ $options['settings_class'] }}">
- <input type="hidden" name="category" value="{{ $category }}">
- @foreach ($options as $key => $value)
- @if ($key == 'category_icon' || $key == 'settings_class')
- @continue
- @endif
- <div class="row">
- <div class="col-4 d-flex align-items-center">
- <label for="{{ $key }}">{{ $value['label'] }}</label>
- </div>
- <div class="col-8">
- <div class="mb-3 custom-control d-flex align-items-center">
- @if ($value['description'])
- <i class="mr-4 fas fa-info-circle" data-toggle="popover"
- data-trigger="hover" data-placement="top"
- data-html="true"
- data-content="{{ $value['description'] }}"></i>
- @else
- <i class="invisible mr-4 fas fa-info-circle"></i>
- @endif
- <div class="w-100">
- @switch($value)
- @case($value['type'] == 'string')
- <input type="text" class="form-control"
- name="{{ $key }}"
- value="{{ $value['value'] }}">
- @break
- @case($value['type'] == 'password')
- <input type="password" class="form-control"
- name="{{ $key }}"
- value="{{ $value['value'] }}">
- @break
- @case($value['type'] == 'boolean')
- <input type="checkbox" name="{{ $key }}"
- value="{{ $value['value'] }}"
- {{ $value['value'] ? 'checked' : '' }}>
- @break
- @case($value['type'] == 'number')
- <input type="number" class="form-control"
- name="{{ $key }}"
- value="{{ $value['value'] }}">
- @break
- @case($value['type'] == 'select')
- <select id="{{ $key }}"
- class="custom-select w-100"
- name="{{ $key }}">
- @if ($value['identifier'] == 'display')
- @foreach ($value['options'] as $option => $display)
- <option value="{{ $display }}"
- {{ $value['value'] == $display ? 'selected' : '' }}>
- {{ __($display) }}
- </option>
- @endforeach
- @else
- @foreach ($value['options'] as $option => $display)
- <option value="{{ $option }}"
- {{ $value['value'] == $option ? 'selected' : '' }}>
- {{ __($display) }}
- </option>
- @endforeach
- @endif
- </select>
- @break
- @case($value['type'] == 'multiselect')
- <select id="{{ $key }}"
- class="custom-select w-100"
- name="{{ $key }}[]" multiple>
- @foreach ($value['options'] as $option)
- <option value="{{ $option }}"
- {{ strpos($value['value'], $option) !== false ? 'selected' : '' }}>
- {{ __($option) }}
- </option>
- @endforeach
- </select>
- @break
- @case($value['type'] == 'textarea')
- <textarea class="form-control" name="{{ $key }}" rows="3">{{ $value['value'] }}</textarea>
- @break
- @default
- @endswitch
- @error($key)
- <div class="text-danger ">
- {{ $message }}
- </div>
- @enderror
- </div>
- </div>
- </div>
- </div>
- @endforeach
- <!-- TODO: Display this only on the General tab
- <div class="row">
- <div class="col-4 d-flex align-items-center">
- <label for="recaptcha_preview">{{ __('ReCAPTCHA Preview') }}</label>
- </div>
- <div class="col-8">
- <div class="w-100">
- <div class="mb-3 input-group">
- {!! htmlScriptTagJsApi() !!}
- {!! htmlFormSnippet() !!}
- @error('g-recaptcha-response')
- <span class="text-danger" role="alert">
- <small><strong>{{ $message }}</strong></small>
- </span>
- @enderror
- </div>
- </div>
- </div>
- </div>
- -->
- <div class="row">
- <div class="col-12 d-flex align-items-center justify-content-end">
- <button type="submit" class="float-right btn btn-primary ">Save
- </button>
- <button type="reset"
- class="float-right ml-2 btn btn-secondary">Reset
- </button>
- </div>
- </div>
- </form>
- </div>
- @endcanany
- @endforeach
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <!-- END CUSTOM CONTENT -->
- </section>
- <!-- END CONTENT -->
- <script>
- const tabPaneHash = window.location.hash;
- if (tabPaneHash) {
- $('.nav-item a[href="' + tabPaneHash + '"]').tab('show');
- }
- $('.nav-pills a').click(function(e) {
- $(this).tab('show');
- const scrollmem = $('body').scrollTop();
- window.location.hash = this.hash;
- $('html,body').scrollTop(scrollmem);
- });
- document.addEventListener('DOMContentLoaded', (event) => {
- $('.custom-select').select2();
- })
- tinymce.init({
- selector: 'textarea',
- promotion: false,
- skin: "oxide-dark",
- content_css: "dark",
- branding: false,
- height: 500,
- width: '100%',
- plugins: ['image', 'link'],
- });
- </script>
- @endsection
|