Feat : gamutable des messages : ajout du changement de statut en masse en utilisant un checkbox sur la colonne statut

This commit is contained in:
cy_altern 2025-07-02 18:08:31 +02:00
parent dddf1b8352
commit ff0da8c5b7
5 changed files with 130 additions and 17 deletions

View file

@ -0,0 +1,7 @@
#CACHE{0}
[(#AUTORISER{modifier,message}|sinon_interdire_acces)]
<h2><:gamucontact:changer_statut_messages:></h2>
<div class="ajax">
[(#FORMULAIRE_CHANGER_STATUT_MESSAGES{#ENV*{data}})]
</div>

View file

@ -0,0 +1,30 @@
<style type="text/css" media="screen">
.editer_dateInter{
text-align: center;
}
#champ_dateInter{
width: 120px;
}
</style>
<div class="formulaire_spip formulaire_#FORM">
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{error_data})</p>]
<form name="formulaire_#FORM" action="#ENV{action}" method="post">
<div class="flex justify-between align-items-center">
#ACTION_FORMULAIRE{#ENV{action}}
[(#REM) SAISIE{radio, statut, label=Statut, data=#ARRAY{}} ]
<div class="mt-3">
<button name="statut" type="submit" class="btn" value="publie"><i class="fa fa-check verte"></i> <:gamucontact:publier:></button>
</div>
<div class="mt-3">
<button name="statut" type="submit" class="btn" value="poubelle"><i class="fa fa-trash rouge"></i> <:gamucontact:poubelle:></button>
</div>
</div>
</form>
</div>

View file

@ -0,0 +1,50 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function formulaires_changer_statut_messages_charger_dist($data, $redirect = '') {
$valeurs = [];
$data = json_decode($data,true);
if (empty($data)) {
$valeurs['error_data'] = 'Il faut avoir sélectionné au moins 1 message';
}
return $valeurs;
}
function formulaires_changer_statut_messages_verifier_dist($data, $redirect = '') {
$erreurs = [];
$data = json_decode($data, true);
if (empty($data)) {
$erreurs['message_erreur'] = "Il faut avoir sélectionné au moins 1 message";
}
$statut = _request('statut');
if (!in_array($statut, ['prepa', 'prop', 'publie', 'poubelle'])) {
$erreurs['message_erreur'] = "Le statut envoyé n'est pas valide";
}
return $erreurs;
}
function formulaires_changer_statut_messages_traiter_dist($data, $redirect = '') {
$statut = _request('statut');
$data = json_decode($data,true);
$sql_in = sql_in('id_message', $data);
sql_updateq('spip_messages', ['statut' => $statut], $sql_in);
// Cache
include_spip('inc/invalideur');
suivre_invalideur("id='messages/$data[0]");
$retour = [];
$retour['redirect'] = "";
$retour['message_ok'] = gamutable_fermer_modalbox();
return $retour;
}

View file

@ -15,3 +15,21 @@
env
}>
</div>
<style type="text/css">
.gamutable table .filtreColonne .statut,
.gamutable table .filtreColonne .nom,
.gamutable table .filtreColonne .objet {
border-left: 1px solid rgb(184, 184, 184);
}
.gamutable table .filtreColonne button {
padding: .2rem;
display: inline-flex;
background-color: #f5f5f5;
border: 1px solid #cecece;
border-radius: 5px;
margin-left: .5rem;
}
.gamutable table .filtreColonne button::after {
content: "Valider";
}
</style>

View file

@ -3,28 +3,33 @@
[(#ENV{id}|setenv{id_message})]
[{
"header_top":{
"Infos": {"class":"header_infos", "colspan": 4},
"Statut": {"class":"header_statut", "colspan" :3},
"Expéditeur": {"class":"header_exp", "colspan": 3},
"Message": {"class":"message", "colspan": 2}
},
"header":{
"id": "_",
"date": "Date",
"origine": "Page origine",
"origine": "Origine",
"formulaire": "Formulaire",
[(#CONFIG{gamucontact/gamutable_afficher_type}|oui)
"type": "Type",
]
"objet": "Objet",
"statut": "Statut",
"actions": "Actions",
"statut": " ",
"actions_masse": " ",
"actions": " ",
"nom": "Expéditeur",
"email_contact": "Email",
"telephone": "Tel",
"objet": "Objet",
"message": "Message"
},
"crayons": {
[(#REM)
"statut": "message",
"nom": "message"
]
"checkbox": {
"actions_masse": [(#URL_PAGE{changer_statut_messages}|json_encode)]
},
"crayons": {},
"ordreCol" : {
"date": "desc"
},
@ -40,19 +45,19 @@
"filtreColValeurs" : {},
"classes": {
"id": "w80p",
"objet": "minw250p",
"statut": "minw100p",
"formulaire": "w150p"
"objet": "minw250p span_g",
"statut": "minw140p span_g",
"formulaire": "w150p",
"nom": "span_g"
}
}
<B_messages>
,
<BOUCLE_messages(MESSAGES){','}{!par date_heure}>
[(#SET{message, <a class="modalbox" href="[(#URL_PAGE{message, id_message=#ID_MESSAGE}|parametre_url{message_seul, oui})]" title="Afficher le texte complet du message"><i class="gt-lien"></i> [(#TEXTE*|couper{100})]</a>})]
[(#SET{message, <a class="modalbox" href="[(#URL_PAGE{message, id_message=#ID_MESSAGE}|parametre_url{message_seul, oui})]" title="Afficher le texte complet du message"><i class="gt-eye"></i> [(#TEXTE*|couper{100})]</a>})]
#SET{statut, #LISTE{prepa,prop,publie,poubelle}|str_replace{#LISTE{Brouillon,Proposé,Publié,Poubelle}, #STATUT}}
#SET{formulaire, #TITRE|replace{Formulaire de, ''}}
[(#SET{origine_, <a class="small nowrap" href="#ORIGINE" title="Accéder à la page d'origine du message">[(#ORIGINE|couper{35})...]</a>})]
[(#SET{origine, article origine})]
[(#SET{origine, [<a class="nowrap" href="(#ORIGINE)" title="Accéder à la page d'origine du message"><i class="gt-lien gt-2x"></i> <:gamucontact:acces_page:></a>]})]
#SET{args,#ID_MESSAGE}
[(#STATUT|!={publie}|oui)
@ -70,6 +75,7 @@
</a>
})]
]
[(#SET{actions_masse, dataid-#ID_MESSAGE})]
{
"html": {
@ -80,12 +86,13 @@
[(#CONFIG{gamucontact/gamutable_afficher_type}|oui)
"type": [(#TYPE|json_encode)],
]
"objet": [(#OBJET|json_encode)],
"statut": [(#GET{statut}|json_encode)],
"actions_masse": [(#GET{actions_masse}|json_encode)],
"actions": [(#GET{actions}|json_encode)],
"nom": [(#NOM|json_encode)],
"email_contact": [(#EMAIL_CONTACT|json_encode)],
"telephone": [(#TELEPHONE|json_encode)],
"objet": [(#OBJET|json_encode)],
"message": [(#GET{message}|json_encode)]
},
"search": {
@ -96,12 +103,13 @@
[(#CONFIG{gamucontact/gamutable_afficher_type}|oui)
"type": [(#TYPE|json_encode)],
]
"objet": [(#OBJET|json_encode)],
"statut": [(#STATUT|json_encode)],
"actions_masse": "",
"actions": "",
"nom": [(#NOM|json_encode)],
"email_contact": [(#EMAIL_CONTACT|json_encode)],
"telephone": [(#TELEPHONE|json_encode)],
"objet": [(#OBJET|json_encode)],
"message": [(#GET{message}|json_encode)]
}
}