chore: copas lib from dinguin & rosterku
parent
9cb57fcfa1
commit
b30b7a3289
@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Helper;
|
||||||
|
|
||||||
|
class Common {
|
||||||
|
public static function convertRequestConfig(?array $requestConfig): array {
|
||||||
|
$config = [];
|
||||||
|
if (isset($requestConfig['timezone'])) $config['timezone'] = $requestConfig['timezone'];
|
||||||
|
if (isset($requestConfig['attendanceRadius'])) $config['attendance_radius'] = (double) $requestConfig['attendanceRadius'];
|
||||||
|
if (isset($requestConfig['mustInRadius'])) $config['must_in_radius'] = self::trueOrFalse($requestConfig['mustInRadius']);
|
||||||
|
if (isset($requestConfig['mustTakePicture'])) $config['must_take_picture'] = self::trueOrFalse($requestConfig['mustTakePicture']);
|
||||||
|
|
||||||
|
return $config;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function generateRandomString($length = 10) {
|
||||||
|
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||||
|
$charactersLength = strlen($characters);
|
||||||
|
$randomString = '';
|
||||||
|
for ($i = 0; $i < $length; $i++) {
|
||||||
|
$randomString .= $characters[random_int(0, $charactersLength - 1)];
|
||||||
|
}
|
||||||
|
return $randomString;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function trueOrFalse(mixed $value): bool {
|
||||||
|
return ($value === "true" || $value === "1" || $value === 1 || $value === true) ? true : false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
namespace App\Helper;
|
||||||
|
|
||||||
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
|
class DatabaseHelper {
|
||||||
|
public static function str2SearchPatern($str) {
|
||||||
|
return '%'.preg_replace('!\s+!', '%', trim($str ?? '')).'%';
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function trimNull($str) {
|
||||||
|
if(empty($str)) return null;
|
||||||
|
$str = trim($str);
|
||||||
|
return $str ? $str : null;
|
||||||
|
}
|
||||||
|
public static function trimUpperNull($str) {
|
||||||
|
$str = self::trimNull($str);
|
||||||
|
return $str ? strtoupper($str) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getOrderBysValidations($key = 'orderBys') {
|
||||||
|
return [
|
||||||
|
$key => 'nullable|array',
|
||||||
|
"$key.*" => ['nullable', 'string', Rule::in(['asc', 'desc'])],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
public static function getSearchValidation() { return 'nullable|string'; }
|
||||||
|
}
|
||||||
|
?>
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Helper\Traits\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
trait CanMultiOrderBy {
|
||||||
|
public function scopeMultiOrderBy(Builder $queryBuilder, ?Array $orderBys, string $defaultOrderBy = '') {
|
||||||
|
$orderBys = $orderBys ?? [];
|
||||||
|
if(!empty($orderBys)) {
|
||||||
|
foreach($orderBys as $column => $direction) {
|
||||||
|
$queryBuilder->orderBy($column, $direction);
|
||||||
|
}
|
||||||
|
} else if($defaultOrderBy) {
|
||||||
|
$queryBuilder->orderByRaw($defaultOrderBy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Helper\Traits\Models;
|
||||||
|
|
||||||
|
use App\Helper\DatabaseHelper;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
trait CanMultiSearch {
|
||||||
|
public function scopeMultiSearch(Builder $queryBuilder, string|null $search, Array $searchColumns) {
|
||||||
|
$search = trim($search ?? '');
|
||||||
|
if(empty($search)) return $queryBuilder;
|
||||||
|
$search = DatabaseHelper::str2SearchPatern($search);
|
||||||
|
|
||||||
|
return $queryBuilder->where(function($q) use($search, $searchColumns) {
|
||||||
|
foreach($searchColumns as $column) {
|
||||||
|
$q->orWhere($column, 'ilike', "%$search%");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue