104 lines
3.5 KiB
PHP
104 lines
3.5 KiB
PHP
<?php
|
|
|
|
namespace App\Lib\Helpers;
|
|
|
|
use Carbon\Carbon;
|
|
use Illuminate\Contracts\Database\Eloquent\Builder;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Str;
|
|
use Illuminate\Support\Arr;
|
|
use Illuminate\Support\Facades\File;
|
|
use Illuminate\Support\Facades\Http;
|
|
use Illuminate\Support\Facades\Route;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Illuminate\Support\Facades\Validator;
|
|
use Illuminate\Validation\Rule;
|
|
use Illuminate\Validation\Rules\Enum;
|
|
use Illuminate\Validation\ValidationException;
|
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
|
use Symfony\Component\Finder\SplFileInfo;
|
|
|
|
class ToolboxHelper
|
|
{
|
|
/**
|
|
* Mutltibyte string replace.
|
|
*
|
|
* @param array|string $search
|
|
* @param array|string $replace
|
|
* @param array|string $subject
|
|
* @param integer $count
|
|
* @return array|string|false
|
|
*/
|
|
public static function mbReplace(
|
|
$search,
|
|
$replace,
|
|
$subject,
|
|
int &$count = 0
|
|
) {
|
|
if (!is_array($search) && is_array($replace)) {
|
|
return false;
|
|
}
|
|
if (is_array($subject)) {
|
|
// Call mb_replace for each single string in $subject .
|
|
foreach ($subject as &$string) {
|
|
$string = &self::mbReplace($search, $replace, $string, $count);
|
|
}
|
|
} elseif (is_array($search)) {
|
|
if (!is_array($replace)) {
|
|
foreach ($search as &$string) {
|
|
$subject = self::mbReplace($string, $replace, $subject, $count);
|
|
}
|
|
} else {
|
|
$n = max(count($search), count($replace));
|
|
while ($n--) {
|
|
$subject = self::mbReplace(current($search), current($replace), $subject, $count);
|
|
next($search);
|
|
next($replace);
|
|
}
|
|
}
|
|
} else {
|
|
$parts = mb_split(preg_quote($search), $subject);
|
|
$count = count($parts) - 1;
|
|
$subject = implode($replace, $parts);
|
|
} //end if
|
|
return $subject;
|
|
}
|
|
|
|
/**
|
|
* Asserts that the field is unique.
|
|
*
|
|
* @param string $table
|
|
* @param string $field
|
|
* @param string|integer|float|boolean|null|array $value
|
|
* @param integer|null $id
|
|
* @param callable|null $query
|
|
* @return void
|
|
* @throws \Illuminate\Validation\ValidationException If the field is not unique.
|
|
*/
|
|
public static function assertFieldIsUnique(
|
|
string $table,
|
|
string $field,
|
|
$value,
|
|
?int $id = null,
|
|
?callable $query = null
|
|
): void {
|
|
if (!$query) {
|
|
Validator::make([$field => $value], [
|
|
self::mbReplace('.', '\.', $field) => Rule::unique($table, $field)->ignore($id),
|
|
], [
|
|
self::mbReplace('.', '\.', "{$field}.unique")
|
|
=> trans('crud.libs.toolbox.assertFieldIsUnique', ['attribute' => $field, 'value' => $value])
|
|
])->validate();
|
|
return;
|
|
}
|
|
Validator::make([$field => $value], [
|
|
$field => Rule::unique($table)->where($query)->ignore($id),
|
|
], [
|
|
$field . '.unique' => trans(
|
|
'crud.libs.toolbox.assertFieldIsUnique',
|
|
['attribute' => $field, 'value' => $value]
|
|
)
|
|
])->validate();
|
|
}
|
|
}
|