sauver les grilles invalides

This commit is contained in:
2026-07-30 14:35:35 +02:00
parent 1f543ba622
commit 95b46e7a69
4 changed files with 58 additions and 41 deletions
+11 -9
View File
@@ -93,8 +93,9 @@ class Grille implements ArrayAccess
$grilles = $this->gen_grilles(); $grilles = $this->gen_grilles();
$grilles->current(); $grilles->current();
$this->valide = $grilles->valid();
if ($grilles->valid()) { if ($this->valide) {
$this->definitions = [ $this->definitions = [
"horizontales" => [], "horizontales" => [],
"verticales" => [] "verticales" => []
@@ -119,11 +120,10 @@ class Grille implements ArrayAccess
$this->definitions["verticales"][$x][] = $definition; $this->definitions["verticales"][$x][] = $definition;
} }
} }
$this->save($id);
return true;
} else {
return false;
} }
$this->save($id);
return $this->valide;
} }
public function gen_grilles($i = 0, $lettres_ligne = NULL) public function gen_grilles($i = 0, $lettres_ligne = NULL)
@@ -239,6 +239,7 @@ class Grille implements ArrayAccess
$_SESSION["grille"] = $this->grille; $_SESSION["grille"] = $this->grille;
$_SESSION["definitions"] = $this->definitions; $_SESSION["definitions"] = $this->definitions;
$_SESSION["valide"] = $this->valide;
} }
public function load($id) public function load($id)
@@ -246,14 +247,15 @@ class Grille implements ArrayAccess
session_id("$this->largeur,$this->hauteur,$id"); session_id("$this->largeur,$this->hauteur,$id");
session_start(["use_cookies" => false]); session_start(["use_cookies" => false]);
if (!isset($_SESSION)) { if (isset($_SESSION) && isset($_SESSION["grille"])) {
return false;
}
$this->grille = $_SESSION["grille"]; $this->grille = $_SESSION["grille"];
$this->definitions = $_SESSION["definitions"]; $this->definitions = $_SESSION["definitions"];
$this->valide = $_SESSION["valide"];
return true; return true;
} else {
return false;
}
} }
+27 -19
View File
@@ -475,6 +475,8 @@ APPRENTI:
- Michel Laclos: Bleu de travail - Michel Laclos: Bleu de travail
APPRET: APPRET:
- Jean Teularge: Malgré son nom se met avant - Jean Teularge: Malgré son nom se met avant
APPRISE:
- Sue après avoir travaillé
APT: APT:
- Jacques Drillon: Capabl - Jacques Drillon: Capabl
ARA: ARA:
@@ -958,8 +960,9 @@ BIOS:
BIS: BIS:
- Sport Cérébral: Cris dans le poulailler - Sport Cérébral: Cris dans le poulailler
- Bernard Philippet: Demande d'assistance - Bernard Philippet: Demande d'assistance
- Mot de rappel flatteur - Rappel
- Couleur de pain gris tirant sur le beige - Couleur de pain gris tirant sur le beige
- Petite précision d'adresse
BLANC: BLANC:
- Corinne Beltz: Toujours liquide quand il est sec - Corinne Beltz: Toujours liquide quand il est sec
BLANCHE: BLANCHE:
@@ -1188,7 +1191,6 @@ CAVIAR:
CCCCC: CCCCC:
- Michel Laclos: D - Michel Laclos: D
CD: CD:
- Compact Disc
- Disque laser - Disque laser
- Lettres diplomatiques - Lettres diplomatiques
CE: CE:
@@ -1304,6 +1306,8 @@ CINTRE:
- Lucien Lacau: A moitié rond quand il est plein - Lucien Lacau: A moitié rond quand il est plein
CIRAGE: CIRAGE:
- Marc Aussitot: Etat second - Marc Aussitot: Etat second
CIRE:
- Hervé Hardouin: Tabarly le portait à l'endroit comme à l'envers
CIRCONCIS: CIRCONCIS:
- Wikipourri: Manque de peau - Wikipourri: Manque de peau
CIRCONFLEXE: CIRCONFLEXE:
@@ -2654,7 +2658,7 @@ FENAISON:
FER: FER:
- Sport Cérébral: Pour chauffer ou refroidir - Sport Cérébral: Pour chauffer ou refroidir
FERRY: FERRY:
- Georges Perec: Peut vous transporter sauf sil sappelle jules - Georges Perec: Peut vous transporter sauf sil sappelle Jules
FESSES: FESSES:
- Bernard Philippet: On donne cher de leur peau - Bernard Philippet: On donne cher de leur peau
FESSIER: FESSIER:
@@ -2732,6 +2736,8 @@ FRAC:
- Julien Soulié: Exige le fric pour le fric - Julien Soulié: Exige le fric pour le fric
FREINAGE: FREINAGE:
- Yannick Le Nagard: Use la gomme en ne la mettant plus - Yannick Le Nagard: Use la gomme en ne la mettant plus
FRERE:
- Fils à papa
FRIGIDE: FRIGIDE:
- Terme utilisé par l'homme pour décrire la femme qui a moins d'appétit sexuel que lui - Terme utilisé par l'homme pour décrire la femme qui a moins d'appétit sexuel que lui
FRITES: FRITES:
@@ -3518,6 +3524,8 @@ KABIG:
- Veste bretonne à capuchon - Veste bretonne à capuchon
KAPO: KAPO:
- Dans les camps nazis, détenu en charge des autres - Dans les camps nazis, détenu en charge des autres
KEBAB:
- Parfois chiche
KEFIR: KEFIR:
- Boisson gazeuse du Caucase - Boisson gazeuse du Caucase
KEN: KEN:
@@ -3875,7 +3883,7 @@ MAIN:
MAJOR: MAJOR:
- Thierry Larsan: Premier d'un concours ou premier ministre - Thierry Larsan: Premier d'un concours ou premier ministre
MAJUSCULE: MAJUSCULE:
- Dédale: Capitale d'etat - Dédale: Capitale d'état
MALAISE: MALAISE:
- Jean Teularge: Indonésienne ou ça ne va pas - Jean Teularge: Indonésienne ou ça ne va pas
MALFAITEUR: MALFAITEUR:
@@ -3889,7 +3897,7 @@ MANCHE:
MANCHETTE: MANCHETTE:
- Georges Perec: Concerne triplement un auteur de la série noire faisant du karaté en première page dun journal - Georges Perec: Concerne triplement un auteur de la série noire faisant du karaté en première page dun journal
MANET: MANET:
- Arcane: Artiste à lolympia - Arcane: Artiste à lOlympia
MANGER: MANGER:
- Ambrose Bierce: Accomplir successivement (et avec succès) les fonctions de mastication, humectation et déglutition - Ambrose Bierce: Accomplir successivement (et avec succès) les fonctions de mastication, humectation et déglutition
MANIFESTANTS: MANIFESTANTS:
@@ -3974,6 +3982,7 @@ MENU:
- Lionel Leteur: Ce nest pas à la cuisine quon l’épluche - Lionel Leteur: Ce nest pas à la cuisine quon l’épluche
- Sport Cérébral: Peut comporter du gros poisson mais ne convient qu'au fretin - Sport Cérébral: Peut comporter du gros poisson mais ne convient qu'au fretin
- Bernard Philippet: Fin ou donne faim - Bernard Philippet: Fin ou donne faim
- Mets sur une liste
MER: MER:
- Max Favalelli: Ses paquets ne sont pas toujours recommandés - Max Favalelli: Ses paquets ne sont pas toujours recommandés
- Lucien Lacau: On peut la prendre par une anse - Lucien Lacau: On peut la prendre par une anse
@@ -4268,6 +4277,8 @@ NEZ:
- Jean-Paul Vanden Branden: Coule quand tout est gelé - Jean-Paul Vanden Branden: Coule quand tout est gelé
- Michel Laclos: N'a pas une vue précise des choses - Michel Laclos: N'a pas une vue précise des choses
- Hervé Hardouin: Coupe la poire en deux - Hervé Hardouin: Coupe la poire en deux
NIA:
- Dédale: Parla pour ne rien dire
NIAGARA: NIAGARA:
- Marc Aussitot: Un film dont la chute est connue dès le début - Marc Aussitot: Un film dont la chute est connue dès le début
NICE: NICE:
@@ -4285,11 +4296,11 @@ NIELLE:
- Maladie des céréales - Maladie des céréales
NIET: NIET:
- Marc Aussitot: Tintin au pays des soviets - Marc Aussitot: Tintin au pays des soviets
- Didier Léonard: Sort si ça rase poutine - Didier Léonard: Sort si ça rase Poutine
NIHILISTE: NIHILISTE:
- Ambrose Bierce: Russe qui nie l'existence de tout sauf de Tolstoï. Le fondateur du mouvement est Tolstoï - Ambrose Bierce: Russe qui nie l'existence de tout sauf de Tolstoï. Le fondateur du mouvement est Tolstoï
NIL: NIL:
- Sport Cérébral: Tout pour les egyptiens, rien pour les romains - Sport Cérébral: Tout pour les Egyptiens, rien pour les Romains
- Grand fleuve d'Afrique - Grand fleuve d'Afrique
NINAS: NINAS:
- Petit cigare fait de débris de tabac - Petit cigare fait de débris de tabac
@@ -4300,7 +4311,7 @@ NL:
NN: NN:
- Nouvelle norme en abrégé - Nouvelle norme en abrégé
- Suite d'étoiles - Suite d'étoiles
'NO': NO:
- Didier Léonard: Docteur ou veto - Didier Léonard: Docteur ou veto
- Drame lyrique du Japon - Drame lyrique du Japon
NOBLES: NOBLES:
@@ -5422,7 +5433,7 @@ REVERS:
REVIENS: REVIENS:
- Marc Aussitot: Nom courant dune chose prêtée - Marc Aussitot: Nom courant dune chose prêtée
REVISER: REVISER:
- SC: Repasser pour ne pas avoir à repasser - Sport Cérébral: Repasser pour ne pas avoir à repasser
REVISION: REVISION:
- Marc Aussitot: On ne suit plus ses conseils - Marc Aussitot: On ne suit plus ses conseils
REVUES: REVUES:
@@ -5751,10 +5762,9 @@ SENS:
- Bernard Philippet: Aucun des cinq n'est le bon - Bernard Philippet: Aucun des cinq n'est le bon
SENT: SENT:
- Michel Laclos: Flaire ou fleure - Michel Laclos: Flaire ou fleure
SENTIMENTS:
- PARTAGES Quand votre belle-mère est en train de reculer dans un ravin avec votre voiture neuve
SEP: SEP:
- Pièce de charrue qui porte le soc Avance avec l’âge - Pièce de charrue qui porte le soc
- Avance avec lage
SEPS: SEPS:
- Lézard à pattes très courtes - Lézard à pattes très courtes
SEPTENNAT: SEPTENNAT:
@@ -5785,7 +5795,6 @@ SESAME:
- Jacques Drillon: Il entre dans une galette ou il permet d'y accéder - Jacques Drillon: Il entre dans une galette ou il permet d'y accéder
SET: SET:
- Dédale: Manche avec revers - Dédale: Manche avec revers
- Manche au tennis
SETON: SETON:
- Drain sortant de l'orifice d'une plaie - Drain sortant de l'orifice d'une plaie
SEUL: SEUL:
@@ -5800,7 +5809,7 @@ SEVICES:
- Jacques Flament: Marquent à tous les coups - Jacques Flament: Marquent à tous les coups
SEXE: SEXE:
- Lionel Leteur: Un simple numéro pour la sécu - Lionel Leteur: Un simple numéro pour la sécu
- Frédéric Dard: 'MASCULIN Ce qu''il y a de plus léger au monde : une simple pensée le soulève !' - Frédéric Dard: 'Ce qu''il y a de plus léger au monde : une simple pensée le soulève !'
SEXES: SEXES:
- André Counson: Leur différence ne doit pas empêcher leur égalité - André Counson: Leur différence ne doit pas empêcher leur égalité
SFTP: SFTP:
@@ -5815,7 +5824,6 @@ SHERPA:
- Michel Vanobost: Monte des blancs en neige - Michel Vanobost: Monte des blancs en neige
SI: SI:
- Yves Cunow: La seule note de musique - Yves Cunow: La seule note de musique
- Note de musique élevée
- Avec lui, on met Paris en bouteille - Avec lui, on met Paris en bouteille
- Début de rêve - Début de rêve
- Permet les châteaux en Espagne - Permet les châteaux en Espagne
@@ -5963,7 +5971,7 @@ SQL:
SS: SS:
- Sa Sainteté devant le pape - Sa Sainteté devant le pape
- Forces Nazies - Forces Nazies
- Sécurité sociale - Sécu
SSD: SSD:
- Support de stockage plus rapide que le HDD, sans pièces mécaniques - Support de stockage plus rapide que le HDD, sans pièces mécaniques
SSH: SSH:
@@ -6220,7 +6228,7 @@ TEMPS:
- Michel Laclos: Pas toujours recherché par celui qui l'a perdu - Michel Laclos: Pas toujours recherché par celui qui l'a perdu
- Ce qui empêche tout d'arriver en même temps - Ce qui empêche tout d'arriver en même temps
TENEBRES: TENEBRES:
- Jacques Drillon: Elles ont fourni une affaire à balzac - Jacques Drillon: Elles ont fourni une affaire à Balzac
TENIA: TENIA:
- Animal d'interieur - Animal d'interieur
TENTACULE: TENTACULE:
@@ -6476,7 +6484,7 @@ TUE:
- Julien Soulié: Impose le silence ou déjà silencieuse - Julien Soulié: Impose le silence ou déjà silencieuse
TUER: TUER:
- Ambrose Bierce: Créer une vacance sans nommer un successeur - Ambrose Bierce: Créer une vacance sans nommer un successeur
TUETETE: TUE-TETE:
- Marc Aussitot: Casse au moins les oreilles - Marc Aussitot: Casse au moins les oreilles
TUMULUS: TUMULUS:
- Michel Laclos: Bosse dans les pompes funèbres - Michel Laclos: Bosse dans les pompes funèbres
@@ -6550,7 +6558,7 @@ URE:
UREE: UREE:
- Déchet organique du corps humain - Déchet organique du corps humain
URI: URI:
- Philippe Harang: Dans zurich ou pas très loin - Philippe Harang: Dans Zurich ou pas très loin
- Canton suisse - Canton suisse
URINE: URINE:
- Charge un pistolet au besoin - Charge un pistolet au besoin
+8 -11
View File
@@ -1,7 +1,4 @@
<?php <?php
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);
include_once "Grille.php"; include_once "Grille.php";
@@ -35,17 +32,17 @@ $basedir = $_SERVER["REQUEST_SCHEME"] . "://" . $_SERVER["HTTP_HOST"] . dirname(
if (!isset($_GET["grille"]) || $_GET["grille"] == "") { if (!isset($_GET["grille"]) || $_GET["grille"] == "") {
do { do {
$id = uniqid(); $id = uniqid();
$grille_valide = $grille->genere($id); $grille->genere($id);
} while (!$grille_valide); } while (!$grille->valide);
$_GET["grille"] = $id; $_GET["grille"] = $id;
header("Location: $basedir/?" . http_build_query($_GET)); header("Location: $basedir/?" . http_build_query($_GET));
} else { } else {
$id = htmlspecialchars($_GET["grille"]); $id = htmlspecialchars($_GET["grille"]);
$grille_valide = $grille->load($id) || $grille->genere($id); $grille->load($id) || $grille->genere($id);
} }
function formatter_definition($definition) { function formatter_definition(Array $definition) {
if (isset($definition["nb_mots"]) && $definition["nb_mots"] > 1) { if (isset($definition["nb_mots"]) && $definition["nb_mots"] > 1) {
$nb_mots = $definition["nb_mots"]; $nb_mots = $definition["nb_mots"];
$nb_mots = " <small>($nb_mots mots)</small>"; $nb_mots = " <small>($nb_mots mots)</small>";
@@ -61,7 +58,7 @@ function formatter_definition($definition) {
return ucfirst($definition["definition"]) . $nb_mots . $auteur; return ucfirst($definition["definition"]) . $nb_mots . $auteur;
} }
function definition_courante($definitions, $position) { function definition_courante(Array $definitions, int $position) {
foreach ($definitions as $id => $definition) { foreach ($definitions as $id => $definition) {
if ($position <= $definition["fin"]) if ($position <= $definition["fin"])
return [$id, $definition]; return [$id, $definition];
@@ -129,7 +126,7 @@ function definition_courante($definitions, $position) {
</h1> </h1>
<h1 class="small width"><a href=".">Mots■croisés</a></h1> <h1 class="small width"><a href=".">Mots■croisés</a></h1>
<div class="grille-et-definitions"> <div class="grille-et-definitions">
<?php if ($grille_valide): ?> <?php if ($grille->valide): ?>
<div class="grille"> <div class="grille">
<table> <table>
<tr> <tr>
@@ -154,10 +151,10 @@ function definition_courante($definitions, $position) {
$title = []; $title = [];
[$iddh, $definition_horizontale] = definition_courante($grille->definitions["horizontales"][$y], $x); [$iddh, $definition_horizontale] = definition_courante($grille->definitions["horizontales"][$y], $x);
[$iddv, $definition_verticale] = definition_courante($grille->definitions["verticales"][$x], $y); [$iddv, $definition_verticale] = definition_courante($grille->definitions["verticales"][$x], $y);
if (isset($definition_horizontale["definition"])) $title[0] = "→ " . $definition_horizontale["definition"]; if (isset($definition_horizontale["definition"])) $title[0] = "→ " . strip_tags($definition_horizontale["definition"]);
if (isset($definition_horizontale["nb_mots"])) $title[0] .= " [" . $definition_horizontale["nb_mots"] . " mots]"; if (isset($definition_horizontale["nb_mots"])) $title[0] .= " [" . $definition_horizontale["nb_mots"] . " mots]";
if (isset($definition_horizontale["auteur"])) $title[0] .= " (" . $definition_horizontale["auteur"] . ")"; if (isset($definition_horizontale["auteur"])) $title[0] .= " (" . $definition_horizontale["auteur"] . ")";
if (isset($definition_verticale["definition"])) $title[1] = "↓ " . $definition_verticale["definition"]; if (isset($definition_verticale["definition"])) $title[1] = "↓ " . strip_tags($definition_verticale["definition"]);
if (isset($definition_verticale["nb_mots"])) $title[1] .= " [" . $definition_verticale["nb_mots"] . " mots]"; if (isset($definition_verticale["nb_mots"])) $title[1] .= " [" . $definition_verticale["nb_mots"] . " mots]";
if (isset($definition_verticale["auteur"])) $title[1] .= " (" . $definition_verticale["auteur"] . ")"; if (isset($definition_verticale["auteur"])) $title[1] .= " (" . $definition_verticale["auteur"] . ")";
$title = htmlspecialchars(implode("\n", $title)); $title = htmlspecialchars(implode("\n", $title));
+10
View File
@@ -194,9 +194,11 @@ h2 {
margin: 1em auto 0 auto; margin: 1em auto 0 auto;
display: flex; display: flex;
align-items: baseline; align-items: baseline;
position: relative;
} }
.nouvelle-grille::before { .nouvelle-grille::before {
position: absolute;
content: ""; content: "";
height: 16px; height: 16px;
width: 16px; width: 16px;
@@ -220,6 +222,14 @@ h2 {
cursor: pointer; cursor: pointer;
} }
#lignes {
cursor: row-resize;
}
#colonnes {
cursor: col-resize;
}
.nouvelle-grille button { .nouvelle-grille button {
text-decoration: underline; text-decoration: underline;
} }