From e3f3b471b12ba7267b575d13cafea771fa963f8c Mon Sep 17 00:00:00 2001
From: nicod_ <nicod@lerebooteux.fr>
Date: Sun, 16 Apr 2023 21:15:37 +0200
Subject: [PATCH] =?UTF-8?q?Ajout=20et=20modification=20en=20popin,=20g?=
 =?UTF-8?q?=C3=A9rer=20aussi=20le=20cas=20o=C3=B9=20on=20n'est=20pas=20en?=
 =?UTF-8?q?=20popin=20(js=20d=C3=A9sactiv=C3=A9=20ou=20=C3=A9dition=20dire?=
 =?UTF-8?q?cte)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 formulaires/editer_bloc.html              |  4 +-
 formulaires/editer_bloc.php               | 62 +++++++++++++----------
 prive/squelettes/contenu/bloc_edit.html   |  4 +-
 prive/squelettes/inclure/blocs_objet.html |  8 +--
 4 files changed, 45 insertions(+), 33 deletions(-)

diff --git a/formulaires/editer_bloc.html b/formulaires/editer_bloc.html
index 94b498e..b48112d 100644
--- a/formulaires/editer_bloc.html
+++ b/formulaires/editer_bloc.html
@@ -16,8 +16,8 @@
 			]
 			[(#ENV{id_blocs_type}|oui)
 			<p class="boutons boutons-flex">
-				<button type="submit" class="submit btn_secondaire"  name="annuler" value="1" formnovalidate><:bouton_annuler:></button>
-				<button type="submit" class="submit" name="ajouter" value="1"><:bloc:bouton_ajouter:></button>
+				[(#ENV{popin}|oui)<a href="#" onclick="lity.current().close(); return false;" class="submit btn btn_secondaire"><:bouton_annuler:></a>]
+				<button type="submit" class="submit btn" name="ajouter" value="1">[(#ENV{popin}|?{<:bloc:bouton_ajouter:>,<:bouton_enregistrer:/>})]</button>
 			</p>
 			]
 		</p>
diff --git a/formulaires/editer_bloc.php b/formulaires/editer_bloc.php
index b6e9f94..1df9d02 100644
--- a/formulaires/editer_bloc.php
+++ b/formulaires/editer_bloc.php
@@ -20,13 +20,14 @@ include_spip('inc/editer');
 /**
  * Identifier le formulaire en faisant abstraction des paramètres qui ne représentent pas l'objet edité
  *
- * @param int|string $id_bloc  Identifiant du bloc. 'new' pour un nouveau bloc.
- * @param null       $objet    Type d'objet à associer (article, rubrique,...)
- * @param null       $id_objet Id de l'objet à associer
- * @param null       $retour   URL de redirection après le traitement
+ * @param int|string  $id_bloc  Identifiant du bloc. 'new' pour un nouveau bloc.
+ * @param string|null $objet    Type d'objet à associer (article, rubrique,...)
+ * @param int|null    $id_objet Id de l'objet à associer
+ * @param string|null $retour   URL de redirection après le traitement
+ * @param string|null $popin    Indique si le formulaire est ouvert en popin
  * @return string              Hash du formulaire
  */
-function formulaires_editer_bloc_identifier_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null) {
+function formulaires_editer_bloc_identifier_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null, $popin = null) {
 	return serialize([intval($id_bloc), $objet, $id_objet]);
 }
 
@@ -35,24 +36,29 @@ function formulaires_editer_bloc_identifier_dist($id_bloc = 'new', $objet = null
  *
  * Déclarer les champs postés et y intégrer les valeurs par défaut
  *
- * @param int|string $id_bloc  Identifiant du bloc. 'new' pour un nouveau bloc.
- * @param null       $objet    Type d'objet à associer (article, rubrique,...)
- * @param null       $id_objet Id de l'objet à associer
- * @param null       $retour   URL de redirection après le traitement
+ * @param int|string  $id_bloc  Identifiant du bloc. 'new' pour un nouveau bloc.
+ * @param string|null $objet    Type d'objet à associer (article, rubrique,...)
+ * @param int|null    $id_objet Id de l'objet à associer
+ * @param string|null $retour   URL de redirection après le traitement
+ * @param string|null $popin    Indique si le formulaire est ouvert en popin
  * @return array               Environnement du formulaire
  * @uses formulaires_editer_objet_charger()
  */
-function formulaires_editer_bloc_charger_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null) {
-	if (!$objet || !(int)$id_objet) {
-		return null;
-	}
-
+function formulaires_editer_bloc_charger_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null, $popin = null) {
 	if ((int)$id_bloc) {
 		$id_blocs_type = (int)sql_getfetsel('id_blocs_type', 'spip_blocs', 'id_bloc = ' . $id_bloc);
+		$infos = sql_fetsel('id_objet, objet', 'spip_blocs_liens', 'id_bloc = ' . $id_bloc);
+		$objet = $infos['objet'];
+		$id_objet = $infos['id_objet'];
 		$valeurs = formulaires_editer_objet_charger('bloc', $id_bloc, $id_blocs_type, 0, $retour, '');
 	} else {
 		$id_blocs_type = _request('id_blocs_type');
 	}
+	if (!$objet || !(int)$id_objet) {
+		return null;
+	}
+
+	$valeurs['popin'] = (bool)$popin;
 
 	if ($id_blocs_type) {
 		// charger les saisies du type de bloc
@@ -107,14 +113,15 @@ function formulaires_editer_bloc_charger_dist($id_bloc = 'new', $objet = null, $
  *
  * Vérifier les champs postés et signaler d'éventuelles erreurs
  *
- * @param int|string $id_bloc  Identifiant du bloc. 'new' pour un nouveau bloc.
- * @param string     $retour   URL de redirection après le traitement
- * @param null       $objet    Type d'objet à associer (article, rubrique,...)
- * @param null       $id_objet Id de l'objet à associer
+ * @param int|string  $id_bloc  Identifiant du bloc. 'new' pour un nouveau bloc.
+ * @param string|null $objet    Type d'objet à associer (article, rubrique,...)
+ * @param int|null    $id_objet Id de l'objet à associer
+ * @param string|null $retour   URL de redirection après le traitement
+ * @param string|null $popin    Indique si le formulaire est ouvert en popin
  * @return array               Tableau des erreurs
  * @uses formulaires_editer_objet_verifier()
  */
-function formulaires_editer_bloc_verifier_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null) {
+function formulaires_editer_bloc_verifier_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null, $popin = null) {
 	if ((int)$id_bloc) {
 		$id_blocs_type = (int)sql_getfetsel('id_blocs_type', 'spip_blocs', 'id_bloc = ' . $id_bloc);
 	} else {
@@ -147,17 +154,20 @@ function formulaires_editer_bloc_verifier_dist($id_bloc = 'new', $objet = null,
  *
  * Traiter les champs postés
  *
- * @param int|string $id_bloc       Identifiant du bloc. 'new' pour un nouveau bloc.
- * @param int|string $id_blocs_type Type de bloc
- * @param string     $retour        URL de redirection après le traitement
- * @param null       $objet         Type d'objet à associer (article, rubrique,...)
- * @param null       $id_objet      Id de l'objet à associer
- * @return array                    Retours des traitements
+ * @param int|string  $id_bloc  Identifiant du bloc. 'new' pour un nouveau bloc.
+ * @param string|null $objet    Type d'objet à associer (article, rubrique,...)
+ * @param int|null    $id_objet Id de l'objet à associer
+ * @param string|null $retour   URL de redirection après le traitement
+ * @param string|null $popin    Indique si le formulaire est ouvert en popin
+ * @return array                Retours des traitements
  * @uses formulaires_editer_objet_traiter()
  */
-function formulaires_editer_bloc_traiter_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null) {
+function formulaires_editer_bloc_traiter_dist($id_bloc = 'new', $objet = null, $id_objet = null, $retour = null, $popin = null) {
 	if ((int)$id_bloc) {
 		$id_blocs_type = (int)sql_getfetsel('id_blocs_type', 'spip_blocs', 'id_bloc = ' . $id_bloc);
+		$infos = sql_fetsel('id_objet, objet', 'spip_blocs_liens', 'id_bloc = ' . $id_bloc);
+		$objet = $infos['objet'];
+		$id_objet = $infos['id_objet'];
 	} else {
 		$id_blocs_type = _request('id_blocs_type');
 	}
diff --git a/prive/squelettes/contenu/bloc_edit.html b/prive/squelettes/contenu/bloc_edit.html
index 390934d..a085a40 100644
--- a/prive/squelettes/contenu/bloc_edit.html
+++ b/prive/squelettes/contenu/bloc_edit.html
@@ -30,8 +30,8 @@
 	#SET{redirect,#URL_ECRIRE{#OBJET|objet_info{url_voir},#OBJET|id_table_objet|concat{'=',#ID_OBJET}}}
 	<div class="ajax">
 ]
-[(#GET{redirect}|dd)]
-[(#FORMULAIRE_EDITER_BLOC{#ENV{id_bloc,new}, #OBJET, #ID_OBJET, #GET{redirect}})]
+
+[(#FORMULAIRE_EDITER_BLOC{#ENV{id_bloc,new}, #OBJET, #ID_OBJET, #GET{redirect}, #ENV{popin}})]
 
 [(#ENV{popin,''}|oui)
 	</div>
diff --git a/prive/squelettes/inclure/blocs_objet.html b/prive/squelettes/inclure/blocs_objet.html
index b0d4b46..056da0f 100644
--- a/prive/squelettes/inclure/blocs_objet.html
+++ b/prive/squelettes/inclure/blocs_objet.html
@@ -19,9 +19,11 @@
 			#GENERER_BLOCK
 
 			[(#AUTORISER{modifier,bloc,#ID_BLOC})
-			<div class="deplacer-modifier">
-				[(#URL_ECRIRE{#VAL{bloc}|objet_info{url_edit},id_bloc=#ID_BLOC}|parametre_url{redirect,#SELF}|concat{'#bloc',#ID_BLOC}|icone_verticale{<:bloc:icone_modifier_bloc:/>,bloc,edit,right})]
-			</div>
+				<a href="[(#URL_ECRIRE{bloc_edit,id_bloc=#ID_BLOC}|parametre_url{popin,1}|parametre_url{var_zajax,contenu}|parametre_url{id_bloc,#ID_BLOC}|parametre_url{id_objet,#ID_OBJET}|parametre_url{objet,#OBJET})]"
+				   class="btn btn_mini popin">
+					<span class="sp-icone sp-icone-bloc" aria-hidden="true">[(#CHEMIN_IMAGE{bloc-16.png}|balise_img)]</span>
+					<:bloc:icone_modifier_bloc:/>
+				</a>
 			]
 
 		</div>
-- 
GitLab