46 lines
1.4 KiB
PHP
46 lines
1.4 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace App\Console\Commands;
|
||
|
|
|
||
|
|
use App\Models\Cours;
|
||
|
|
use Illuminate\Console\Command;
|
||
|
|
use Illuminate\Support\Facades\File;
|
||
|
|
use Symfony\Component\Yaml\Yaml;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Catalogue des cours.md de paillasse-contenus/ (même esprit que
|
||
|
|
* labs:synchroniser et quiz:synchroniser-banque) : lu par « Mes cours ».
|
||
|
|
* Un seul lab (08-deux-lan-routeur) a un cours.md aujourd'hui — les autres
|
||
|
|
* séquences n'apparaissent simplement pas, jamais de contenu inventé.
|
||
|
|
*/
|
||
|
|
class SynchroniserCours extends Command
|
||
|
|
{
|
||
|
|
protected $signature = 'cours:synchroniser';
|
||
|
|
|
||
|
|
protected $description = 'Crée ou met à jour le catalogue des cours depuis les cours.md de paillasse-contenus/';
|
||
|
|
|
||
|
|
public function handle(): void
|
||
|
|
{
|
||
|
|
$dossier = config('contenus.dossier');
|
||
|
|
|
||
|
|
foreach (File::directories($dossier) as $chemin) {
|
||
|
|
$identifiant = basename($chemin);
|
||
|
|
$cheminCours = "{$chemin}/cours.md";
|
||
|
|
$cheminLab = "{$chemin}/lab.yaml";
|
||
|
|
|
||
|
|
if (! File::exists($cheminCours) || ! File::exists($cheminLab)) {
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
|
||
|
|
$titre = Yaml::parseFile($cheminLab)['titre'];
|
||
|
|
|
||
|
|
$cours = Cours::updateOrCreate(
|
||
|
|
['identifiant' => $identifiant],
|
||
|
|
['titre' => $titre, 'contenu_markdown' => File::get($cheminCours)],
|
||
|
|
);
|
||
|
|
|
||
|
|
$this->line(($cours->wasRecentlyCreated ? 'créé' : 'à jour')." : {$identifiant}");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|