refonte de ce plugin jamais utiliser pour essayer de fabriquer des

formulaire et des pages gamutable pour gerer des configurations de
facons semi automatique
This commit is contained in:
Christophe 2022-03-30 15:15:01 +02:00
parent 6949141e7e
commit 36622355fb
17 changed files with 154 additions and 586 deletions

View file

@ -1,41 +0,0 @@
<?php
/**
* Utilisation de l'action supprimer pour l'objet gamuform
*
* @plugin GamuForm
* @copyright 2020
* @author tofulm
* @licence GNU/GPL
* @package SPIP\Gamuform\Action
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Action pour supprimer un·e gamuform
*
* Vérifier l'autorisation avant d'appeler l'action.
*
* @param null|int $arg
* Identifiant à supprimer.
* En absence de id utilise l'argument de l'action sécurisée.
**/
function action_supprimer_gamuform_dist($arg=null) {
if (is_null($arg)){
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
$arg = intval($arg);
// cas suppression
if ($arg) {
sql_delete('spip_gamuforms', 'id_gamuform=' . sql_quote($arg));
}
else {
spip_log("action_supprimer_gamuform_dist $arg pas compris");
}
}

View file

@ -25,7 +25,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
*/
function gamuform_declarer_tables_interfaces($interfaces) {
$interfaces['table_des_tables']['gamuforms'] = 'gamuforms';
// $interfaces['table_des_tables']['gamuforms'] = 'gamuforms';
return $interfaces;
}
@ -42,52 +42,6 @@ function gamuform_declarer_tables_interfaces($interfaces) {
*/
function gamuform_declarer_tables_objets_sql($tables) {
$tables['spip_gamuforms'] = array(
'type' => 'gamuform',
'principale' => 'oui',
'field'=> array(
'id_gamuform' => 'bigint(21) NOT NULL',
'objet' => 'VARCHAR(25) DEFAULT "" NOT NULL',
'titre' => 'varchar(255) NOT NULL DEFAULT ""',
'label' => 'varchar(255) NOT NULL DEFAULT ""',
'type' => 'varchar(255) NOT NULL DEFAULT ""',
'class_container' => 'varchar(255) NOT NULL DEFAULT ""',
'class' => 'varchar(255) NOT NULL DEFAULT ""',
'choix' => "text NOT NULL",
'defaut' => 'varchar(255) NOT NULL DEFAULT ""',
'statut' => 'varchar(20) DEFAULT "0" NOT NULL',
'date' => 'datetime NOT NULL DEFAULT "0000-00-00 00:00:00"',
'rang' => 'tinyint(4) NOT NULL',
'maj' => 'TIMESTAMP'
),
'key' => array(
'PRIMARY KEY' => 'id_gamuform',
'KEY objet' => 'objet',
'KEY statut' => 'statut',
),
'titre' => 'titre AS titre, "" AS lang',
'date' => 'date',
//'champs_editables' => array('titre'),
//'champs_versionnes' => array('titre'),
//'rechercher_champs' => array(),
'tables_jointures' => array('spip_gamuforms_valeurs'),
'statut_textes_instituer' => array(
'prepa' => 'texte_statut_en_cours_redaction',
'publie' => 'texte_statut_publie',
'poubelle' => 'texte_statut_poubelle',
),
'statut'=> array(
array(
'champ' => 'statut',
'publie' => 'publie',
'exception' => array('statut','tout')
)
),
'texte_changer_statut' => 'gamuform:texte_changer_statut_gamuform',
);
return $tables;
}
@ -103,18 +57,5 @@ function gamuform_declarer_tables_objets_sql($tables) {
*/
function gamuform_declarer_tables_auxiliaires($tables) {
$tables['spip_gamuforms_valeurs'] = array(
'field' => array(
'id_gamuform' => 'bigint(21) DEFAULT "0" NOT NULL',
'id_objet' => 'bigint(21) DEFAULT "0" NOT NULL',
'objet' => 'VARCHAR(25) DEFAULT "" NOT NULL',
'valeur' => "text NOT NULL",
),
'key' => array(
'PRIMARY KEY' => 'id_gamuform,id_objet,objet',
'KEY id_gamuform' => 'id_gamuform',
)
);
return $tables;
}

View file

@ -1,6 +0,0 @@
<div class="inner">
<h1>creer formulaire pour les clients</h1>
<INCLURE{fond=inclure/creer_gamuform,objet=app_client,env}>
</div>

View file

@ -0,0 +1 @@
<INCLURE{fond=inclure/editer_gamuform,env}>

View file

@ -1,7 +0,0 @@
diff -r -x . -x .. -x fabrique_diff.diff -x fabrique_gamuform.php ../tmp/cache/fabrique/.backup/gamuform/paquet.xml ../tmp/cache/fabrique/gamuform/paquet.xml
8a9
> schema="1.0.0"
11c12
< Paquet généré le 2020-03-30 14:52:00
---
> Paquet généré le 2020-03-30 14:54:11

File diff suppressed because one or more lines are too long

View file

@ -2,19 +2,13 @@
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
[(#ENV{editable})
<form method="post" action="#ENV{action}"><div>
#ACTION_FORMULAIRE
<input type="hidden" name="id_gamuform" value="#ENV{id_gamuform}" />
<div class="editer-groupe">
<div class="editer_groupe">
#GENERER_SAISIES{#ENV{_saisies}}
</div>
<INCLURE{fond=inclure/gamuform,env,ajax}>
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
<p class="boutons"><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
</div></form>
]
</div>

View file

@ -1,124 +1,92 @@
<?php
/**
* Gestion du formulaire de d'édition de gamuform
*
* @plugin GamuForm
* @copyright 2020
* @author tofulm
* @licence GNU/GPL
* @package SPIP\Gamuform\Formulaires
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/actions');
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_gamuform
* Identifiant du gamuform. 'new' pour un nouveau gamuform.
* @param string $retour
* URL de redirection après le traitement
* @param int $lier_trad
* Identifiant éventuel d'un gamuform source d'une traduction
* @param string $config_fonc
* Nom de la fonction ajoutant des configurations particulières au formulaire
* @param array $row
* Valeurs de la ligne SQL du gamuform, si connu
* @param string $hidden
* Contenu HTML ajouté en même temps que les champs cachés du formulaire.
* @return string
* Hash du formulaire
*/
function formulaires_editer_gamuform_identifier_dist($id_gamuform = 'new', $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
return serialize(array(intval($id_gamuform)));
function formulaires_editer_gamuform_saisies_dist($id_objet = 0, $objet = '', $redirect = '') {
$saisies = false;
if (gamuform_objet_autoriser($objet)) {
$saisies = $GLOBALS['gamuform_'.$objet];
}
return $saisies;
}
/**
* Chargement du formulaire d'édition de gamuform
*
* Déclarer les champs postés et y intégrer les valeurs par défaut
*
* @uses formulaires_editer_objet_charger()
*
* @param int|string $id_gamuform
* Identifiant du gamuform. 'new' pour un nouveau gamuform.
* @param string $retour
* URL de redirection après le traitement
* @param int $lier_trad
* Identifiant éventuel d'un gamuform source d'une traduction
* @param string $config_fonc
* Nom de la fonction ajoutant des configurations particulières au formulaire
* @param array $row
* Valeurs de la ligne SQL du gamuform, si connu
* @param string $hidden
* Contenu HTML ajouté en même temps que les champs cachés du formulaire.
* @return array
* Environnement du formulaire
*/
function formulaires_editer_gamuform_charger_dist($id_gamuform = 'new', $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
$valeurs = formulaires_editer_objet_charger('gamuform', $id_gamuform, '', $lier_trad, $retour, $config_fonc, $row, $hidden);
function formulaires_editer_gamuform_charger_dist($id_objet = 0, $objet = '', $redirect = '') {
$table = table_objet_sql($objet);
$id = id_table_objet($objet);
$s = gamuform_recup_champ($objet);
$valeurs = sql_fetsel($s, $table, "$id=".intval($id_objet));
return $valeurs;
}
/**
* Vérifications du formulaire d'édition de gamuform
*
* Vérifier les champs postés et signaler d'éventuelles erreurs
*
* @uses formulaires_editer_objet_verifier()
*
* @param int|string $id_gamuform
* Identifiant du gamuform. 'new' pour un nouveau gamuform.
* @param string $retour
* URL de redirection après le traitement
* @param int $lier_trad
* Identifiant éventuel d'un gamuform source d'une traduction
* @param string $config_fonc
* Nom de la fonction ajoutant des configurations particulières au formulaire
* @param array $row
* Valeurs de la ligne SQL du gamuform, si connu
* @param string $hidden
* Contenu HTML ajouté en même temps que les champs cachés du formulaire.
* @return array
* Tableau des erreurs
*/
function formulaires_editer_gamuform_verifier_dist($id_gamuform = 'new', $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
function formulaires_editer_gamuform_verifier_dist($id_objet = 0, $objet = '', $redirect = '') {
$erreurs = array();
$erreurs = formulaires_editer_objet_verifier('gamuform', $id_gamuform);
return $erreurs;
}
/**
* Traitement du formulaire d'édition de gamuform
*
* Traiter les champs postés
*
* @uses formulaires_editer_objet_traiter()
*
* @param int|string $id_gamuform
* Identifiant du gamuform. 'new' pour un nouveau gamuform.
* @param string $retour
* URL de redirection après le traitement
* @param int $lier_trad
* Identifiant éventuel d'un gamuform source d'une traduction
* @param string $config_fonc
* Nom de la fonction ajoutant des configurations particulières au formulaire
* @param array $row
* Valeurs de la ligne SQL du gamuform, si connu
* @param string $hidden
* Contenu HTML ajouté en même temps que les champs cachés du formulaire.
* @return array
* Retours des traitements
*/
function formulaires_editer_gamuform_traiter_dist($id_gamuform = 'new', $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
$retours = formulaires_editer_objet_traiter('gamuform', $id_gamuform, '', $lier_trad, $retour, $config_fonc, $row, $hidden);
return $retours;
function formulaires_editer_gamuform_traiter_dist($id_objet = 0, $objet = '', $redirect = '') {
$saisies = $GLOBALS['gamuform_'.$objet];
$table = table_objet_sql($objet);
$id = id_table_objet($objet);
$update = true;
if (!intval($id_objet)) {
$id_objet = sql_insertq($table, []);
$update = false;
}
$set = [];
if (!empty($saisies)) {
foreach ($saisies as $saisie) {
$champ = $saisie['options']['nom'];
if (
isset($saisies['options']['fonction'])
and $f = $saisies['options']['fonction']
) {
$f($id_objet, $objet, $champ, _request($champ));
} elseif (
isset($saisies['options']['modifier'])
and $m = $saisies['options']['modifier']
) {
$set[$champ] = $m($champ, _request($champ));
} else {
$set[$champ] = _request($champ);
}
}
if (count($set)) {
$set = pipeline(
'pre_edition',
array(
'args' => array(
'table' => $table,
'id_objet' => $id_objet,
'action' => 'gamuform',
'update' => $update
),
'data' => $set
)
);
sql_updateq('spip_auteurs', $set, "$id=".intval($id_objet));
}
}
$retour = [];
if ($redirect === 'gamutable') {
$retour['redirect'] = '';
if ($update) {
$retour['message_ok'] = gamutable_fermer_modalbox($id_objet);
} else {
$retour['message_ok'] = gamutable_fermer_modalbox();
}
} else if ($redirect) {
$retour['redirect'] = $redirect;
}
return $retour;
}

View file

@ -26,7 +26,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
function gamuform_upgrade($nom_meta_base_version, $version_cible) {
$maj = array();
$maj['create'] = array(array('maj_tables', array('spip_gamuforms', 'spip_gamuforms_valeurs')));
// $maj['create'] = array(array('maj_tables', array('spip_gamuforms', 'spip_gamuforms_valeurs')));
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
@ -41,18 +41,5 @@ function gamuform_upgrade($nom_meta_base_version, $version_cible) {
* @return void
**/
function gamuform_vider_tables($nom_meta_base_version) {
sql_drop_table('spip_gamuforms');
sql_drop_table('spip_gamuforms_valeurs');
# Nettoyer les liens courants (le génie optimiser_base_disparus se chargera de nettoyer toutes les tables de liens)
sql_delete('spip_documents_liens', sql_in('objet', array('gamuform')));
sql_delete('spip_mots_liens', sql_in('objet', array('gamuform')));
sql_delete('spip_auteurs_liens', sql_in('objet', array('gamuform')));
# Nettoyer les versionnages et forums
sql_delete('spip_versions', sql_in('objet', array('gamuform')));
sql_delete('spip_versions_fragments', sql_in('objet', array('gamuform')));
sql_delete('spip_forum', sql_in('objet', array('gamuform')));
effacer_meta($nom_meta_base_version);
}

View file

@ -20,81 +20,9 @@ if (!defined('_ECRIRE_INC_VERSION')) {
function gamuform_autoriser() {
}
// -----------------
// Objet gamuforms
/**
* Autorisation de créer (gamuform)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_gamuform_creer_dist($faire, $type, $id, $qui, $opt) {
return in_array($qui['statut'], array('0minirezo', '1comite'));
}
/**
* Autorisation de voir (gamuform)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_gamuform_voir_dist($faire, $type, $id, $qui, $opt) {
return true;
}
/**
* Autorisation de modifier (gamuform)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_gamuform_modifier_dist($faire, $type, $id, $qui, $opt) {
return in_array($qui['statut'], array('0minirezo', '1comite'));
}
/**
* Autorisation de supprimer (gamuform)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_gamuform_supprimer_dist($faire, $type, $id, $qui, $opt) {
return $qui['statut'] == '0minirezo' and !$qui['restreint'];
return in_array($qui['statut'], array('0minirezo'));
}
/**
* Autorisation de lier/délier l'élément (gamuforms)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_associergamuforms_dist($faire, $type, $id, $qui, $opt) {
return $qui['statut'] == '0minirezo' and !$qui['restreint'];
}

View file

@ -12,3 +12,28 @@
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function gamuform_objet_autoriser(string $objet):bool {
if (
!empty($GLOBALS['gamuform_objets'])
and !empty($objet)
and in_array($objet, $GLOBALS['gamuform_objets'])
) {
return true;
}
return false;
}
function gamuform_recup_champ($objet) {
$c = [];
if (gamuform_objet_autoriser($objet)) {
$T = $GLOBALS['gamuform_'.$objet];
if (!empty($T)) {
foreach ($T as $s) {
$c[] = $s['options']['nom'];
}
}
}
return $c;
}

View file

@ -12,3 +12,36 @@
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS['gamuform_objets'] = [ 'auteur'];
$GLOBALS['gamuform_auteur'] = [
[
'saisie' => 'input',
'options' => array(
'nom' => 'nom',
'label' => 'Votre Nom',
'obligatoire' => 'oui',
//'fonction' => 'ma_super_fonction'
//'modifier' => 'ma_super_fonction_pour_modifier'
)
],
[
'saisie' => 'input',
'options' => array(
'nom' => 'bio',
'label' => 'Votre BIO',
'obligatoire' => 'oui',
//'fonction' => 'ma_super_fonction'
)
],
[
'saisie' => 'input',
'options' => array(
'nom' => 'nom_site',
'label' => 'Votre site perso',
)
]
];

View file

@ -13,26 +13,3 @@ if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Optimiser la base de données
*
* Supprime les liens orphelins de l'objet vers quelqu'un et de quelqu'un vers l'objet.
* Supprime les objets à la poubelle.
*
* @pipeline optimiser_base_disparus
* @param array $flux Données du pipeline
* @return array Données du pipeline
*/
function gamuform_optimiser_base_disparus($flux) {
include_spip('action/editer_liens');
$flux['data'] += objet_optimiser_liens(array('gamuform'=>'*'), '*');
sql_delete('spip_gamuforms', "statut='poubelle' AND maj < " . $flux['args']['date']);
return $flux;
}

View file

@ -1,36 +0,0 @@
<style type="text/css" media="screen">
#INCLURE{css/icons.css}
.icone {
width: 30px;
}
</style>
objet = #ENV{objet}
<div class="creer_gamuform[ (#ENV{objet})]">
<table>
<thead>
<tr>
<th class="icone">
<a class="ajax nohistory nocache" href="[(#URL_ACTION_AUTEUR{creer_gamuform,#ENV{objet},#SELF})]">
#ICON{plus,icon-lg}
</a>
</th>
<th></th>
<th class="icone">
#ICON{move,icon-lg,Rechercher}
</th>
</tr>
</thead>
<tbody>
<BOUCLE_gamuform(GAMUFORMS){id_objet}{objet}{tout}>
</BOUCLE_gamuform>
</tbody>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</div>

View file

@ -0,0 +1,8 @@
#CACHE{0}
[(#AUTORISER{modifier,gamuform,#ENV{objet}}|sinon_interdire_acces)]
<div class="inner">
<div class="ajax">
[(#FORMULAIRE_EDITER_GAMUFORM{#ENV{id}, #ENV{objet}, #ENV{redirect}})]
</div>
</div>

View file

@ -1,2 +0,0 @@
[<pre>(#ENV**|unserialize|print_r{1})</pre>]

View file

@ -3,30 +3,26 @@
categorie="outil"
version="1.0.0"
etat="dev"
compatibilite="[3.3.0-dev;3.3.*]"
compatibilite="[4.0.0;4.0.*]"
logo="prive/themes/spip/images/gamuform-xx.svg"
documentation=""
schema="1.0.0"
>
<!--
schema="1.0.0"
Paquet généré le 2020-03-30 14:54:11
-->
<nom>GamuForm</nom>
<auteur lien='https://gamuza.fr'>tofulm</auteur>
<credit lien="https://gamuza.fr">Logo : tofulm</credit>
<credit lien="https://gamuza.fr">Logo : tofulm</credit>
<licence>GNU/GPL</licence>
<necessite nom="saisies" compatibilite="[3.23.2;]" />
<necessite nom="saisies" compatibilite="[3.23.2;]" />
<pipeline nom="autoriser" inclure="gamuform_autorisations.php" />
<pipeline nom="autoriser" inclure="gamuform_autorisations.php" />
<pipeline nom="declarer_tables_objets_sql" inclure="base/gamuform.php" />
<pipeline nom="declarer_tables_interfaces" inclure="base/gamuform.php" />
<pipeline nom="declarer_tables_auxiliaires" inclure="base/gamuform.php" />
<pipeline nom="optimiser_base_disparus" inclure="gamuform_pipelines.php" />
</paquet>