73 lines
1.8 KiB
PHP
73 lines
1.8 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace App\Services\BundleCreator\Creators;
|
||
|
|
||
|
use Illuminate\Filesystem\FilesystemAdapter;
|
||
|
|
||
|
use function Laravel\Prompts\select;
|
||
|
use function Laravel\Prompts\text;
|
||
|
|
||
|
class CriticBundleCreator extends BaseBundleCreator
|
||
|
{
|
||
|
public function __construct(protected ?array $data, protected FilesystemAdapter $disk)
|
||
|
{
|
||
|
//
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Return a boolean value indicating if the creator can actually make the
|
||
|
* bundle using known data.
|
||
|
*/
|
||
|
public function canCreateBundle(): bool
|
||
|
{
|
||
|
return
|
||
|
!empty($this->data['kind'])
|
||
|
&& !empty($this->data['title'])
|
||
|
&& !empty($this->data['entityId']);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Return an array describing what kind of data the creator needs in
|
||
|
* addition to the one it already has
|
||
|
*/
|
||
|
public function formSpecs(): ?array
|
||
|
{
|
||
|
$specs = [];
|
||
|
|
||
|
if (empty($this->data['kind'])) {
|
||
|
$specs['kind'] = fn () => select('Media kind', $this->listKinds());
|
||
|
}
|
||
|
|
||
|
if (empty($this->data['title'])) {
|
||
|
$specs['title'] = fn () => text('Work title', '', '', true);
|
||
|
}
|
||
|
|
||
|
if (empty($this->data['entityId'])) {
|
||
|
$specs['entityId'] = fn () => text('Entity ID', '', '', true);
|
||
|
}
|
||
|
|
||
|
return $specs;
|
||
|
}
|
||
|
|
||
|
private function listKinds()
|
||
|
{
|
||
|
$kinds = [
|
||
|
'Film' => 'films',
|
||
|
'Série TV' => 'series',
|
||
|
'Jeu vidéo' => 'jeux-video',
|
||
|
'Livre' => 'livres',
|
||
|
];
|
||
|
|
||
|
return $kinds;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Return a boolean value indicating if this creator in particular can
|
||
|
* create bundles for specified section
|
||
|
*/
|
||
|
public static function handles(string $section, ?array $data = []): bool
|
||
|
{
|
||
|
return $section === 'critiques';
|
||
|
}
|
||
|
}
|