Akaunting/app/Providers/Validation.php

159 lines
4.4 KiB
PHP

<?php
namespace App\Providers;
use App\Models\Setting\Currency;
use App\Utilities\Modules;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\ServiceProvider as Provider;
use Illuminate\Support\Str;
class Validation extends Provider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
// Check currency code has 3 characters and is valid
Validator::extend('currency', function ($attribute, $value, $parameters, $validator) {
$status = false;
if (!is_string($value)) {
return $status;
}
$currencies = Currency::enabled()->pluck('code')->toArray();
if (in_array($value, $currencies)) {
$status = true;
}
if (strlen($value) != 3) {
return $status;
}
$currency_code = $value;
return $status;
});
// Custom message for currency validation
Validator::replacer('currency', function($message, $attribute, $rule, $parameters) {
return trans('validation.custom.invalid_currency', ['attribute' => $attribute]);
});
// Check currency code is valid
Validator::extend('currency_code', function ($attribute, $value, $parameters, $validator) {
$status = false;
$currency_code = $value;
$currencies = config('money.currencies');
if (array_key_exists($value, $currencies)) {
$status = true;
}
return $status;
});
// Custom message for currency code validation
Validator::replacer('currency_code', function($message, $attribute, $rule, $parameters) {
return trans('validation.custom.invalid_currency', ['attribute' => $attribute]);
});
// Check amount is valid
Validator::extend('amount', function ($attribute, $value, $parameters, $validator) {
$status = false;
if ($value > 0 || in_array($value, $parameters)) {
$status = true;
}
if (! preg_match("/^(?=.*?[0-9])[0-9.,]+$/", $value)) {
$status = false;
}
return $status;
});
// Custom message for amount validation
Validator::replacer('amount', function($message, $attribute, $rule, $parameters) {
return trans('validation.custom.invalid_amount', ['attribute' => $attribute]);
});
// Check extension is valid
Validator::extend('extension', function ($attribute, $value, $parameters, $validator) {
$extension = $value->getClientOriginalExtension();
return !empty($extension) && in_array($extension, $parameters);
},
trans('validation.custom.invalid_extension')
);
// Check colour is valid
Validator::extend('colour', function ($attribute, $value, $parameters, $validator) {
$status = false;
$colors = ['gray', 'red', 'yellow', 'green', 'blue', 'indigo', 'purple', 'pink'];
$variants = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900];
foreach ($colors as $color) {
if (! Str::contains($value, $color)) {
continue;
}
foreach ($variants as $variant) {
$name = $color . '-' . $variant;
if (Str::contains($value, $name)) {
$status = true;
break;
}
}
if ($status) {
break;
}
}
if (! $status && Str::contains($value, '#')) {
$status = true;
}
return $status;
},
trans('validation.custom.invalid_colour')
);
// Check payment method is valid
Validator::extend('payment_method', function ($attribute, $value, $parameters, $validator) {
$status = false;
$methods = Modules::getPaymentMethods('all');
if (array_key_exists($value, $methods)) {
$status = true;
}
return $status;
},
trans('validation.custom.invalid_payment_method')
);
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}