127 lines
2.9 KiB
PHP
Executable File
127 lines
2.9 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\Http\Requests\Dashboard\Category;
|
|
|
|
use Illuminate\Foundation\Http\FormRequest;
|
|
use Illuminate\Http\UploadedFile;
|
|
use Illuminate\Support\Str;
|
|
use RuntimeException;
|
|
|
|
class Request extends FormRequest
|
|
{
|
|
protected function prepareForValidation()
|
|
{
|
|
if (in_array($this->get('parent_id'), [0, '0', '', 'null', 'NULL'], true)) {
|
|
$this->merge(['parent_id' => null]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the validation rules that apply to the request.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function rules()
|
|
{
|
|
if ($this->isMethod('get')) {
|
|
return [];
|
|
}
|
|
return [
|
|
'name' => 'required|array',
|
|
'name.*' => 'required|string',
|
|
'image' => 'nullable|mimes:jpg,jpeg,png',
|
|
'parent_id' => 'nullable|integer|exists:categories,id',
|
|
'brands' => 'nullable|array',
|
|
'position' => 'nullable|numeric'
|
|
];
|
|
}
|
|
|
|
public function getName(): array
|
|
{
|
|
return $this->get('name');
|
|
}
|
|
|
|
public function getSlug(): string
|
|
{
|
|
return Str::slug($this->get('name')['uz']);
|
|
}
|
|
|
|
public function getImage(): string
|
|
{
|
|
if ($this->hasFile('image')) {
|
|
return $this->storeCategoryImage($this->file('image'));
|
|
} else {
|
|
return 'null';
|
|
}
|
|
}
|
|
|
|
private function storeCategoryImage(UploadedFile $file): string
|
|
{
|
|
$relativeDirectory = 'uploads/categories';
|
|
$directory = public_path($relativeDirectory);
|
|
|
|
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
|
|
throw new RuntimeException("Category upload directory could not be created: {$directory}");
|
|
}
|
|
|
|
if (!is_writable($directory)) {
|
|
throw new RuntimeException("Category upload directory is not writable: {$directory}");
|
|
}
|
|
|
|
$fileName = $file->hashName();
|
|
$file->move($directory, $fileName);
|
|
|
|
return "{$relativeDirectory}/{$fileName}";
|
|
}
|
|
|
|
public function getPublished()
|
|
{
|
|
if ($this->get('published') == 'true') {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function getFilterPower()
|
|
{
|
|
if ($this->get('is_filter_power') == 'true') {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function getCredit()
|
|
{
|
|
if ($this->get('credit') == 'true') {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function getParentId()
|
|
{
|
|
if ((int) $this->get('parent_id') > 0) {
|
|
return (int) $this->get('parent_id');
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public function getPosition(): int
|
|
{
|
|
return (int) $this->get('position');
|
|
}
|
|
|
|
public function getPopular(): bool
|
|
{
|
|
if ($this->get('popular') == 'false') {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|