fix: 🚑️ Added more improved validation & Fixed Language Settings

This commit is contained in:
IceToast 2022-01-15 01:25:27 +01:00
parent 4621547c01
commit 7ca6438f35
8 changed files with 83 additions and 27 deletions

View file

@ -6,6 +6,8 @@ use App\Models\Settings;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Session; use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Validator;
class Language class Language
{ {
@ -17,6 +19,19 @@ class Language
public function updateSettings(Request $request) public function updateSettings(Request $request)
{ {
$validator = Validator::make($request->all(), [
'autotranslate' => 'string',
'canClientChangeLanguage' => 'boolean',
'defaultLanguage' => 'required|string',
'languages' => 'required|array',
'languages.*' => 'required|string',
'datatable-language' => 'required|string',
]);
if ($validator->fails()) {
return redirect(route('admin.settings.index') . '#language')->with('error', __('Language settings have not been updated!'))->withErrors($validator);
}
$values = [ $values = [
//SETTINGS::VALUE => REQUEST-VALUE (coming from the html-form) //SETTINGS::VALUE => REQUEST-VALUE (coming from the html-form)
@ -31,6 +46,10 @@ class Language
foreach ($values as $key => $value) { foreach ($values as $key => $value) {
$param = $request->get($value); $param = $request->get($value);
if (is_array($param)) {
$param = implode(",", $param);
}
Settings::where('key', $key)->updateOrCreate(['key' => $key], ['value' => $param]); Settings::where('key', $key)->updateOrCreate(['key' => $key], ['value' => $param]);
Cache::forget("setting" . ':' . $key); Cache::forget("setting" . ':' . $key);
Session::remove("locale"); Session::remove("locale");

View file

@ -6,7 +6,7 @@ use App\Models\Settings;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Session; use Illuminate\Support\Facades\Validator;
class Misc class Misc
{ {
@ -19,21 +19,33 @@ class Misc
public function updateSettings(Request $request) public function updateSettings(Request $request)
{ {
$request->validate([ $validator = Validator::make($request->all(), [
'icon' => 'nullable|max:10000|mimes:jpg,png,jpeg', 'icon' => 'nullable|max:10000|mimes:jpg,png,jpeg',
'favicon' => 'nullable|max:10000|mimes:ico', 'favicon' => 'nullable|max:10000|mimes:ico',
'discord-bot-token' => 'nullable|string',
'discord-client-id' => 'nullable|string',
'discord-client-secret' => 'nullable|string',
'discord-guild-id' => 'nullable|string',
'discord-invite-url' => 'nullable|string',
'discord-role-id' => 'nullable|string',
'recaptcha-site-key' => 'nullable|string',
'recaptcha-secret-key' => 'nullable|string',
'enable-recaptcha' => 'nullable|boolean',
]); ]);
if ($validator->fails()) {
return redirect(route('admin.settings.index') . '#misc')->with('error', __('Misc settings have not been updated!'))->withErrors($validator)
->withInput();
}
if ($request->hasFile('icon')) { if ($request->hasFile('icon')) {
$request->file('icon')->storeAs('public', 'icon.png'); $request->file('icon')->storeAs('public', 'icon.png');
} }
if ($request->hasFile('favicon')) { if ($request->hasFile('favicon')) {
$request->file('favicon')->storeAs('public', 'favicon.ico'); $request->file('favicon')->storeAs('public', 'favicon.ico');
} }
$values = [ $values = [
//SETTINGS::VALUE => REQUEST-VALUE (coming from the html-form)
"SETTINGS::DISCORD:BOT_TOKEN" => "discord-bot-token", "SETTINGS::DISCORD:BOT_TOKEN" => "discord-bot-token",
"SETTINGS::DISCORD:CLIENT_ID" => "discord-client-id", "SETTINGS::DISCORD:CLIENT_ID" => "discord-client-id",
"SETTINGS::DISCORD:CLIENT_SECRET" => "discord-client-secret", "SETTINGS::DISCORD:CLIENT_SECRET" => "discord-client-secret",

View file

@ -5,7 +5,8 @@ namespace App\Classes\Settings;
use App\Models\Settings; use App\Models\Settings;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Session; use Illuminate\Support\Facades\Validator;
class Payments class Payments
{ {
@ -17,6 +18,22 @@ class Payments
public function updateSettings(Request $request) public function updateSettings(Request $request)
{ {
$validator = Validator::make($request->all(), [
"paypal-client_id" => "nullable|string",
"paypal-client-secret" => "nullable|string",
"paypal-sandbox-secret" => "nullable|string",
"stripe-secret-key" => "nullable|string",
"stripe-endpoint-secret" => "nullable|string",
"stripe-test-secret-key" => "nullable|string",
"stripe-test-endpoint-secret" => "nullable|string",
"stripe-methods" => "nullable|string",
"sales-tax" => "nullable|numeric",
]);
if ($validator->fails()) {
return redirect(route('admin.settings.index') . '#payment')->with('error', __('Payment settings have not been updated!'))->withErrors($validator)
->withInput();
}
$values = [ $values = [
//SETTINGS::VALUE => REQUEST-VALUE (coming from the html-form) //SETTINGS::VALUE => REQUEST-VALUE (coming from the html-form)

View file

@ -37,7 +37,7 @@ class System
]); ]);
if ($validator->fails()) { if ($validator->fails()) {
return redirect(route('admin.settings.index') . '#system')->with('error', __('System settings not updated!'))->withErrors($validator) return redirect(route('admin.settings.index') . '#system')->with('error', __('System settings have not been updated!'))->withErrors($validator)
->withInput(); ->withInput();
} }

View file

@ -22,17 +22,16 @@ class SetLocale
public function handle($request, Closure $next) public function handle($request, Closure $next)
{ {
if (Session::has('locale')) { if (Session::has('locale')) {
$locale = Session::get('locale', Settings::getValueByKey("SETTINGS::LOCALE:DEFAULT")); $locale = Session::get('locale', config("SETTINGS::LOCALE:DEFAULT"));
} else { } else {
if (Settings::getValueByKey("SETTINGS::LOCALE:DYNAMIC")!=="true") { if (config("SETTINGS::LOCALE:DYNAMIC") !== "true") {
$locale = Settings::getValueByKey("SETTINGS::LOCALE:DEFAULT"); $locale = config("SETTINGS::LOCALE:DEFAULT");
} else { } else {
$locale = substr($request->server('HTTP_ACCEPT_LANGUAGE'), 0, 2); $locale = substr($request->server('HTTP_ACCEPT_LANGUAGE'), 0, 2);
if (!in_array($locale, json_decode(Settings::getValueByKey("SETTINGS::LOCALE:AVAILABLE")))) { if (!in_array($locale, explode(',', config("SETTINGS::LOCALE:AVAILABLE")))) {
$locale = Settings::getValueByKey("SETTINGS::LOCALE:DEFAULT"); $locale = config("SETTINGS::LOCALE:DEFAULT");
} }
} }
} }
App::setLocale($locale); App::setLocale($locale);

View file

@ -68,7 +68,7 @@
"User ID": "User-ID", "User ID": "User-ID",
"Server Creation Error": "Fehler beim erstellen des Servers", "Server Creation Error": "Fehler beim erstellen des Servers",
"Your servers have been suspended!": "Deine Server wurden pausiert", "Your servers have been suspended!": "Deine Server wurden pausiert",
"To automatically re-enable your server\/s, you need to purchase more credits.": "Um deine Server zu reaktivieren, musst du mehr Credits kaufen!", "To automatically re-enable your server/s, you need to purchase more credits.": "Um deine Server zu reaktivieren, musst du mehr Credits kaufen!",
"Purchase credits": "Credits kaufen", "Purchase credits": "Credits kaufen",
"If you have any questions please let us know.": "Solltest du weiter fragen haben, melde dich gerne beim Support!", "If you have any questions please let us know.": "Solltest du weiter fragen haben, melde dich gerne beim Support!",
"Regards": "mit freundlichen Grüßen", "Regards": "mit freundlichen Grüßen",
@ -217,7 +217,7 @@
"A voucher can only be used one time per user. Uses specifies the number of different users that can use this voucher.": "Ein Gutschein kann von einem User nur einmal eingelöst werden. \"Benutzungen\" setzt die Anzahl an Usern die diesen Gutschein einlösen können.", "A voucher can only be used one time per user. Uses specifies the number of different users that can use this voucher.": "Ein Gutschein kann von einem User nur einmal eingelöst werden. \"Benutzungen\" setzt die Anzahl an Usern die diesen Gutschein einlösen können.",
"Max": "Max", "Max": "Max",
"Expires at": "Läuft ab am", "Expires at": "Läuft ab am",
"Used \/ Uses": "Benutzungen", "Used / Uses": "Benutzungen",
"Expires": "Ablauf", "Expires": "Ablauf",
"Sign in to start your session": "Melde dich an um das Dashboard zu benutzen", "Sign in to start your session": "Melde dich an um das Dashboard zu benutzen",
"Password": "Passwort", "Password": "Passwort",
@ -287,7 +287,7 @@
"No nodes have been linked!": "Es wurde keine Nodes verknüpft", "No nodes have been linked!": "Es wurde keine Nodes verknüpft",
"No nests available!": "Keine Nests verfügbar", "No nests available!": "Keine Nests verfügbar",
"No eggs have been linked!": "Es wurde keine Eggs verknüpft", "No eggs have been linked!": "Es wurde keine Eggs verknüpft",
"Software \/ Games": "Software \/ Spiele", "Software / Games": "Software / Spiele",
"Please select software ...": "Bitte Software auswählen", "Please select software ...": "Bitte Software auswählen",
"---": "---", "---": "---",
"Specification ": "Spezifikation", "Specification ": "Spezifikation",
@ -352,5 +352,12 @@
"Please pay until": "Zahlbar bis", "Please pay until": "Zahlbar bis",
"Account already exists on Pterodactyl. Please contact the Support!": "Der Account existiert bereits bei Pterodactyl. Kontaktiere den Support!", "Account already exists on Pterodactyl. Please contact the Support!": "Der Account existiert bereits bei Pterodactyl. Kontaktiere den Support!",
"de": "Deutsch", "de": "Deutsch",
"en": "Englisch" "en": "Englisch",
"fr": "Französisch",
"cs": "Tschechisch",
"es": "Spanisch",
"hi": "Hindi",
"it": "Italienisch",
"pl": "Polnisch",
"zh": "Chinesisch"
} }

View file

@ -11,9 +11,12 @@
<div class="custom-control mb-3 p-0"> <div class="custom-control mb-3 p-0">
<label for="languages">{{ __('Available languages') }}:</label> <label for="languages">{{ __('Available languages') }}:</label>
<select id="languages" style="width:100%" class="custom-select" name="languages[]" required <select id="languages" style="width:100%" class="custom-select" name="languages[]" required
multiple="multiple" autocomplete="off"> multiple="multiple" autocomplete="off" @error('defaultLanguage') is-invalid @enderror>
@foreach (config('app.available_locales') as $lang) @foreach (config('app.available_locales') as $lang)
<option value="{{ $lang }}">{{ __($lang) }}</option> <option value="{{ $lang }}" @if (str_contains(config('SETTINGS::LOCALE:AVAILABLE'), $lang)) selected @endif>
{{ __($lang) }}
</option>
@endforeach @endforeach
</select> </select>
</div> </div>
@ -28,11 +31,10 @@
</label> </label>
<select id="defaultLanguage" style="width:100%" class="custom-select" name="defaultLanguage" <select id="defaultLanguage" style="width:100%" class="custom-select" name="defaultLanguage"
required autocomplete="off"> required autocomplete="off" @error('defaultLanguage') is-invalid @enderror>
<option value="{{ config('SETTINGS::LOCALE:DEFAULT') }}" selected>
{{ __(config('SETTINGS::LOCALE:DEFAULT')) }}</option>
@foreach (config('app.available_locales') as $lang) @foreach (config('app.available_locales') as $lang)
<option value="{{ $lang }}">{{ __($lang) }}</option> <option value="{{ $lang }}" @if (config('SETTINGS::LOCALE:DEFAULT') == $lang) selected
@endif>{{ __($lang) }}</option>
@endforeach @endforeach
</select> </select>
</div> </div>
@ -40,8 +42,8 @@
<div class="custom-control mb-3 p-0"> <div class="custom-control mb-3 p-0">
<!--DATATABLE LANGUAGE --> <!--DATATABLE LANGUAGE -->
<label for="datatable-language">{{ __('Datable language') }} <i data-toggle="popover" <label for="datatable-language">{{ __('Datable language') }} <i data-toggle="popover"
data-trigger="hover" data-trigger="hover" data-html="true"
data-content="{{ __('The Language of the Datatables. Grab the Language-Codes from here') }} https://datatables.net/plug-ins/i18n/" data-content="{{ __('The datatables lang-code. <br><strong>Example:</strong> en-gb, fr_fr, de_de<br>More Information: ') }} https://datatables.net/plug-ins/i18n/"
class="fas fa-info-circle"></i></label> class="fas fa-info-circle"></i></label>
<input x-model="datatable-language" id="datatable-language" name="datatable-language" <input x-model="datatable-language" id="datatable-language" name="datatable-language"
type="text" required value="{{ config('SETTINGS::LOCALE:DATATABLES') }}" type="text" required value="{{ config('SETTINGS::LOCALE:DATATABLES') }}"

View file

@ -125,14 +125,14 @@
<div class="form-group mb-3"> <div class="form-group mb-3">
<div class="custom-control p-0"> <div class="custom-control p-0">
<div class="col m-0 p-0 d-flex justify-content-between align-items-center"> <div class="col m-0 p-0 d-flex justify-content-between align-items-center">
<label for="sales_tax">{{ __('Tax Value in %') }}:</label> <label for="sales-tax">{{ __('Tax Value in %') }}:</label>
<i data-toggle="popover" data-trigger="hover" data-html="true" <i data-toggle="popover" data-trigger="hover" data-html="true"
data-content="Tax Value that will be added to the total price of the order. <br><br> Example: 19 results in (19%)" data-content="Tax Value that will be added to the total price of the order. <br><br> Example: 19 results in (19%)"
class="fas fa-info-circle"></i> class="fas fa-info-circle"></i>
</div> </div>
<input x-model="sales_tax" id="sales_tax" name="sales_tax" type="number" <input x-model="sales-tax" id="sales-tax" name="sales-tax" type="number"
value="{{ config('SETTINGS::PAYMENTS:SALES_TAX') }}" value="{{ config('SETTINGS::PAYMENTS:SALES_TAX') }}"
class="form-control @error('sales_tax') is-invalid @enderror"> class="form-control @error('sales-tax') is-invalid @enderror">
</div> </div>
</div> </div>
</div> </div>