195 lines
5.7 KiB
PHP
195 lines
5.7 KiB
PHP
<?php
|
|
|
|
namespace App\Traits\Requests;
|
|
|
|
use App\Lib\Helpers\ToolboxHelper;
|
|
|
|
/**
|
|
* ! This assumes file system is using local storage
|
|
*/
|
|
trait HasPicture
|
|
{
|
|
/**
|
|
* Minimum width
|
|
*
|
|
* @var integer
|
|
*/
|
|
private $minWidth = 400;
|
|
|
|
/**
|
|
* Maximum width
|
|
*
|
|
* @var integer
|
|
*/
|
|
private $maxWidth = 1800;
|
|
|
|
/**
|
|
* Minimum height
|
|
*
|
|
* @var integer
|
|
*/
|
|
private $minHeight = 300;
|
|
|
|
/**
|
|
* Maximum height
|
|
*
|
|
* @var integer
|
|
*/
|
|
private $maxHeight = 1800;
|
|
|
|
/**
|
|
* Image rules.
|
|
*
|
|
* @param string $name
|
|
* @param integer|null $minWidth
|
|
* @param integer|null $minHeight
|
|
* @param integer|null $maxWidth
|
|
* @param integer|null $maxHeight
|
|
* @param boolean $nullable
|
|
* @param integer|null $size
|
|
* @param string|null $requiredWith
|
|
* @param string|null $requiredWithout
|
|
* @param boolean $sometimes
|
|
* @return array
|
|
*/
|
|
public function pictureRules(
|
|
string $name = 'picture',
|
|
?int $minWidth = null,
|
|
?int $minHeight = null,
|
|
?int $maxWidth = null,
|
|
?int $maxHeight = null,
|
|
bool $nullable = false,
|
|
?int $size = null,
|
|
?string $requiredWith = null,
|
|
?string $requiredWithout = null,
|
|
bool $sometimes = false,
|
|
): array {
|
|
$dimensions = (object) [
|
|
'minWidth' => $minWidth ?? $this->minWidth,
|
|
'minHeight' => $minHeight ?? $this->minHeight,
|
|
'maxWidth' => $maxWidth ?? $this->maxWidth,
|
|
'maxHeight' => $maxHeight ?? $this->maxHeight
|
|
];
|
|
return [
|
|
$name => [
|
|
$sometimes ? 'sometimes' : '',
|
|
!$nullable ? 'required' : 'nullable',
|
|
(strlen($requiredWith)) ? 'required_with:' . $requiredWith : '',
|
|
(strlen($requiredWithout)) ? 'required_without:' . $requiredWithout : '',
|
|
($size) ? 'max:' . $size : '',
|
|
function (string $attribute, $value, callable $fail) use ($dimensions) {
|
|
ToolboxHelper::validatePicture($attribute, $value, $fail, $dimensions);
|
|
}
|
|
]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Images rules.
|
|
*
|
|
* @param string $name
|
|
* @param integer|null $minWidth
|
|
* @param integer|null $minHeight
|
|
* @param integer|null $maxWidth
|
|
* @param integer|null $maxHeight
|
|
* @param integer $limitMin
|
|
* @param integer $limitMax
|
|
* @param boolean $nullable
|
|
* @return array
|
|
*/
|
|
public function picturesRules(
|
|
string $name = 'pictures',
|
|
?int $minWidth = null,
|
|
?int $minHeight = null,
|
|
?int $maxWidth = null,
|
|
?int $maxHeight = null,
|
|
int $limitMin = 1,
|
|
int $limitMax = 5,
|
|
bool $nullable = false
|
|
): array {
|
|
$sizes = (object) [
|
|
'minWidth' => $minWidth ?? $this->minWidth,
|
|
'minHeight' => $minHeight ?? $this->minHeight,
|
|
'maxWidth' => $maxWidth ?? $this->maxWidth,
|
|
'maxHeight' => $maxHeight ?? $this->maxHeight,
|
|
];
|
|
return [
|
|
$name => [!$nullable ? 'required' : 'nullable', 'array', "between:{$limitMin},{$limitMax}"],
|
|
"{$name}Validate" => "required_with:{$name}|array",
|
|
"{$name}Validate.*" => [
|
|
'required',
|
|
function (string $attribute, $value, callable $fail) use ($sizes) {
|
|
ToolboxHelper::validatePicture($attribute, $value, $fail, $sizes);
|
|
}
|
|
]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Merges products pictures fields with request data.
|
|
*
|
|
* @param string $name
|
|
* @return void
|
|
*/
|
|
protected function mergePicture(string $name = 'picture'): void
|
|
{
|
|
$picturePath = $this->{$name};
|
|
if (is_string($picturePath)) {
|
|
$this->merge(["{$name}Validate" => []]);
|
|
// ! Empty picture.
|
|
if ($picturePath === 'false') {
|
|
// * Empty picture and exit
|
|
$this->merge([$name => []]);
|
|
return;
|
|
}
|
|
$decodedPath = \urldecode($picturePath);
|
|
$this->merge([
|
|
"{$name}Validate" => array_merge(
|
|
$this->{"{$name}Validate"},
|
|
[\public_path(ltrim($decodedPath, '/'))]
|
|
)
|
|
]);
|
|
$changedPicture = ltrim($decodedPath, '/');
|
|
$this->merge([
|
|
$name => $changedPicture
|
|
]);
|
|
} elseif (is_null($picturePath)) {
|
|
$this->merge([$name => null]);
|
|
return;
|
|
}//end if
|
|
}
|
|
|
|
/**
|
|
* Merges products pictures fields with request data.
|
|
*
|
|
* @param string $name
|
|
* @return void
|
|
*/
|
|
protected function mergePictures(string $name = 'pictures'): void
|
|
{
|
|
$pictures = $this->{$name};
|
|
if (is_array($pictures)) {
|
|
$this->merge(["{$name}Validate" => []]);
|
|
foreach ($pictures as $key => $picturePath) {
|
|
// ! Empty picture.
|
|
if ($picturePath === 'false') {
|
|
// * Empty picture and exit
|
|
$this->merge([$name => []]);
|
|
return;
|
|
}
|
|
$decodedPath = \urldecode($picturePath);
|
|
$this->merge([
|
|
"{$name}Validate" => array_merge(
|
|
$this->{"{$name}Validate"},
|
|
[\public_path(ltrim($decodedPath, '/'))]
|
|
)
|
|
]);
|
|
$changedPicture = $this->{$name};
|
|
$changedPicture[$key] = ltrim($decodedPath, '/');
|
|
$this->merge([
|
|
$name => $changedPicture
|
|
]);
|
|
}
|
|
} //end if
|
|
}
|
|
}
|