Compare commits

..

72 commits
ini ... master

Author SHA1 Message Date
cy_altern
e2212854d1 Chore : compat 4.* 2024-11-15 20:00:33 +01:00
77683e27a5 feat: on essaye encode en json en tenant compte du typage 2024-06-04 22:29:39 +02:00
6aa97ce5d2 fix: lors du commit PSR, oublie ';' 2024-02-07 14:52:14 +01:00
a55cd7cb40 feat: ajout pipeline post_edition 2023-09-25 08:06:37 +02:00
392c535fe4 PSR 2023-09-25 08:02:24 +02:00
8c45ecef4c feat: trad esp 2023-09-22 13:08:41 +02:00
cy_altern
192c1ff715 Feat: passage en 4.2 2023-08-19 18:17:31 +02:00
950d598406 fix: compatible chaine de langue 2023-05-03 00:34:25 +02:00
7f7b1adcb0 feat: on peut maintenant surcharger le selecteur d'affichage du nombre de ligne par page 2023-04-14 07:39:45 +02:00
ddc665e4fd up de z 2023-04-13 09:20:48 +02:00
ac54e34b75 feat: ajout ordreCol pour le json 2023-04-13 09:20:32 +02:00
af390eac54 fix: si on a une saisie de type explication => on la passe 2023-04-12 23:27:55 +02:00
47ec657823 up de z 2023-04-12 11:32:17 +02:00
26947a4943 fix: il faut utiliser la bonne variable 2023-04-12 11:32:06 +02:00
f616c5e333 compat spip 41 2022-12-21 14:38:21 +01:00
95be841491 on filtre le select pour na pas avoir de fatal error sql 2022-09-26 14:34:22 +02:00
f5e974640f Derniers gros changement qui ne cassent pas la compatibilité :
* la declaration des objets n'existe plus
* la declaration des chaines de langue évolue :
- soit un array global `$GLOBALS['gamuform_i18n']['mon_objet']`
- soit une chaine de langue dans lang/mon_objet_fr.php
2022-06-30 21:53:59 +02:00
2b42ca2ee7 up de z 2022-06-30 16:06:06 +02:00
7f58033e7f dans voir_gamuform :
on peut passer dans l'url un arg &w=id_mon_objet=25 via parametre_url
ex : `|parametre_url{w,id_app_competition=#ID_APP_COMPETITION}`
cet arg sera ajouté dans le where de la recup des valeurs a afficher
cela permet de faire un premier filtrage
2022-06-30 15:59:48 +02:00
8b34be2d87 amélioration du chargement du json 2022-05-16 23:13:18 +02:00
7a3af751af ajout nom du fichier csv 2022-05-16 23:05:55 +02:00
13c93f7794 permet de gerer le cas des entiers plus precisement 2022-05-12 21:38:47 +02:00
49e7f583c7 suite page cle options 2022-05-12 10:09:45 +02:00
aac117e14d up de z 2022-05-12 10:07:22 +02:00
064789956c on prend en compte si la cle options est presente 2022-05-12 10:07:09 +02:00
de77a13cb2 Maj de l'exemple 2022-05-12 10:06:10 +02:00
056026027b On vide le fichier html du form pour utiliser toute la puissance de saisie 2022-05-12 09:29:02 +02:00
94ff9e77c4 double coquilles 2022-05-11 10:46:06 +02:00
a75ef7ff94 up de z 2022-05-11 10:38:51 +02:00
5d4b012aaf on passe l'env aux modeles 2022-05-11 10:35:44 +02:00
7d5626a966 lien editer / supprimer, on passe par des modeles pour pouvoir etre surcharge 2022-05-11 10:34:33 +02:00
d5152ac551 correction test 2022-05-11 10:23:06 +02:00
90a265d71c up de z 2022-05-10 18:06:45 +02:00
09edd30c7b on charge le formulaire avec id_redirect qui permet de de recharger la bonne ligne du gamutable 2022-05-10 18:06:27 +02:00
19e5e0403a ajout la possibilite de passer des options au chargemnet 2022-05-10 17:45:36 +02:00
f2049c4740 maintenant que l'on a ajouté l'autorisation générale pour voir le json, on les ajoutes pour l'edition / suppression 2022-05-10 11:35:23 +02:00
79ff2d5dea Merge branch 'master' of https://git.gamuza.fr/SPIP/gamuform 2022-05-10 10:24:01 +02:00
b0c56355e5 ajout autorisation sur le json 2022-05-10 10:23:57 +02:00
cy_altern
919bd4a323 utilisation de mb_ucfirst pour ne pas exploser le json si un intitulé de champ commence par un caractèrte accentué 2022-05-09 19:51:03 +02:00
b626a4cd59 premiere lettre de la chaine de langue en majuscule 2022-05-04 09:12:03 +02:00
57b4d95157 dans la declaration du header, on accepte les chaines de langue :
<:prefix:ma_chaine_de_langue:>
2022-05-04 09:03:29 +02:00
643f5aee98 amelioration ordre autorisations 2022-05-03 16:08:44 +02:00
6a5b838289 on est plus souple sur le nom de la fonction,
- si notre fonction commence par _array_maSuperFonction,
on teste en premier si la fonction maSuperFonction() exist sinon on
teste si _array_maSuperFonction() existe sinon return vide
comme cela, on ne casse plus la compat
2022-04-29 17:18:06 +02:00
8c895ece29 up de y, on casse la compat via le nom de la fonction 2022-04-29 16:53:54 +02:00
9d7b1b1abe Si la fonction pour le filtre commence par _array_ ex:
_array_maSuperFonction() alors en param elle aura un array (la ligne)
sinon la fonction aura la valeur comme param
2022-04-29 16:52:30 +02:00
486e197c7f on chargement du form lors de la creation, on initialise les valeurs par null et non vide, sinon pb avec les saisies 2022-04-29 16:52:27 +02:00
0111fc1aba filtrage pour eviter une erreur si une autorisation ne permet pas d'utiliser un champ 2022-04-21 17:31:54 +02:00
bb8283f026 Lors de la declaration d'un objet, on peut le declarer via un objet qui
précise les types de chaine de langue. c'est facultatif
2022-04-16 15:30:31 +02:00
f41d6a6e8b amelioration du systeme de filtre, pour gerer au mieux les inconnues 2022-04-15 18:12:02 +02:00
8fe52051d3 On continue la refonte, on utilise la cle gamutable pour avoir les
champs et pouvoir separer les saisies de l'affichage
2022-04-15 15:53:40 +02:00
eb0b20b959 Grosse amélioration de la partie affichage dans le gamutable :
* Dans l'array des saisies, on ajoute une entrée : gamutable qui reprend
  le nom des clé de gamutable : header / classes / filtreCol / crayons
* et on ajoute la clé : fonction => pour le filtrage de la valeur à
  afficher via un filtre
Perte de compatibilite, mais c'est maintenant qu'il faut le faire
2022-04-15 09:51:14 +02:00
9532ff2547 on ajoute la possibilité de filtrer les valeurs dans le gamutable. Pour
cela il faut declarer dans l'array Saisies le nom de la fonction dans
l'a clé : "filtrer"
2022-04-11 14:41:16 +02:00
4f138ad342 Merge branch 'master' of https://git.gamuza.fr/SPIP/gamuform 2022-04-05 23:04:43 +02:00
10d1cfd5cb plus besoin du fichier administration 2022-04-05 23:04:36 +02:00
841db7c8b1 on filtre l'array pour ne garder que si on a la cle saisie 2022-04-04 16:06:03 +02:00
f2a2c7c5f4 on protege le cas général 2022-04-04 11:20:43 +02:00
fd92aa4deb on traite le cas de l'input date 2022-04-04 11:19:56 +02:00
3a239c8e1b ne plus le declarer ici, sinon, ca le vide 2022-04-04 11:01:30 +02:00
415d96eb23 plus generique 2022-04-04 10:39:09 +02:00
882aca5708 maj de la doc 2022-04-04 10:37:17 +02:00
c94f8d2816 les tableaux des saisies sont maintenant le return d'une fonction dans
gamuform/mon_objet.php.
maj de la doc
2022-03-31 11:45:04 +02:00
08ed7119e0 ajout de la suppression d'une ligne d'un objet 2022-03-31 10:36:15 +02:00
ff03183fd6 correction X bugs 2022-03-31 10:19:47 +02:00
1af56cd55e modification des autorisations, on utilise les autorisations avec le
type gamuform
Ces autorisations appellent les autorisations du type.
Comme cela, il est tres facile de surcharger ces 3 autorisations pour
unifier toutes
2022-03-31 09:43:18 +02:00
c32ede5325 on passe par un inclure 2022-03-30 21:42:17 +02:00
1aba64de6b simplification paquet 2022-03-30 17:50:31 +02:00
7ffbbdfc81 un peu de doc 2022-03-30 17:49:51 +02:00
fd3a608ca0 un peu de doc 2022-03-30 17:49:45 +02:00
5f14275fb3 amélioration ergo 2022-03-30 17:45:20 +02:00
62f02552f8 on renomme, adapte les autorisations 2022-03-30 17:32:09 +02:00
d173900903 ajout du gamutable générique 2022-03-30 16:15:45 +02:00
36622355fb refonte de ce plugin jamais utiliser pour essayer de fabriquer des
formulaire et des pages gamutable pour gerer des configurations de
facons semi automatique
2022-03-30 15:15:01 +02:00
27 changed files with 827 additions and 664 deletions

28
README.md Normal file
View file

@ -0,0 +1,28 @@
# Gamuform
Plugin pour générer des formulaires via saisies et des vues via gamutable semi automatiquement.
## Configuration de l'interface pour chaque objet
### Chaines de langues de l'interface (2 possibilités)
* On déclare la `$GLOBALS['gamuform_i18n']['nom_objet']`
```php
$GLOBALS['gamuform_i18n'] = array_merge(
$GLOBALS['gamuform_i18n'] ?? [],
[
'app_competition' => [
'singulier' => 'competition',
'pluriel' => 'compétitions',
'creer' => 'Créer une nouvelle compétition'
]
]
);
```
* On cree un fichier de lang mon_objet_fr.php, avec les 3 cles (singulier, pluriel, creer)
## Configuration des objets pour les saisies et pour l'affichage avec gamutable
Il faut creer une fonction gamuform/mon_objet.php avec une fonction qui renvoie l'array des saisies, qui peut etre enrichi par des entrées gamutables
> il y a un exemple commenté dans gamuform/exemple.php avec toutes les possibilités offertes
## Page
Il suffit d'appeler cette page `spip.php?page=voir_gamuform`, en paramettre le nom de l'objet voulu `&objet=auteur` :
`spip.php?page=voir_gamuform&objet=auteur`

View file

@ -1,41 +1,32 @@
<?php <?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')) { if (!defined('_ECRIRE_INC_VERSION')) {
return; return;
} }
function action_supprimer_gamuform_dist() {
/**
* 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'); $securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action(); $arg = $securiser_action();
} list($id_objet,$objet) = explode('/', $arg);
$arg = intval($arg); include_spip('gamuform_fonctions');
// cas suppression if (
if ($arg) { intval($id_objet)
sql_delete('spip_gamuforms', 'id_gamuform=' . sql_quote($arg)); and gamuform_objet_autoriser($objet)
) {
$id_objet = (int) $id_objet;
include_spip('inc/autoriser');
if (! autoriser('supprimer', 'gamuform', $id_objet, '', ['objet' => $objet])) {
return false;
} }
else {
spip_log("action_supprimer_gamuform_dist $arg pas compris"); $table = table_objet_sql($objet);
$id = id_table_objet($objet);
sql_delete($table, "$id=" . $id_objet);
include_spip('inc/invalideur');
suivre_invalideur("id='"."$id_objet"."/1");
} }
} }

View file

@ -25,7 +25,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
*/ */
function gamuform_declarer_tables_interfaces($interfaces) { function gamuform_declarer_tables_interfaces($interfaces) {
$interfaces['table_des_tables']['gamuforms'] = 'gamuforms'; // $interfaces['table_des_tables']['gamuforms'] = 'gamuforms';
return $interfaces; return $interfaces;
} }
@ -42,52 +42,6 @@ function gamuform_declarer_tables_interfaces($interfaces) {
*/ */
function gamuform_declarer_tables_objets_sql($tables) { 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; return $tables;
} }
@ -103,18 +57,5 @@ function gamuform_declarer_tables_objets_sql($tables) {
*/ */
function gamuform_declarer_tables_auxiliaires($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; 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

@ -0,0 +1,4 @@
#CACHE{0}
<INCLURE{fond=inclure/voir_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

@ -1,20 +0,0 @@
<div class='formulaire_spip formulaire_editer formulaire_#FORM formulaire_#FORM-#ENV{id_gamuform,nouveau}'>
[<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>
<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,141 @@
<?php <?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')) { if (!defined('_ECRIRE_INC_VERSION')) {
return; return;
} }
include_spip('inc/actions');
include_spip('inc/editer');
function formulaires_editer_gamuform_saisies_dist($id_objet = 0, $objet = '', $options = [], $id_redirect = null, $redirect = '') {
/** $saisies = false;
* Identifier le formulaire en faisant abstraction des paramètres qui ne représentent pas l'objet edité if (gamuform_objet_autoriser($objet)) {
* $saisies = gamuform_recup_tableau_objet($objet, false);
* @param int|string $id_gamuform }
* Identifiant du gamuform. 'new' pour un nouveau gamuform. return $saisies;
* @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_charger_dist($id_objet = 0, $objet = '', $options = [], $id_redirect = null, $redirect = '') {
* Chargement du formulaire d'édition de gamuform
* $table = table_objet_sql($objet);
* Déclarer les champs postés et y intégrer les valeurs par défaut $id = id_table_objet($objet);
* $s = gamuform_recup_champs_saisies($objet);
* @uses formulaires_editer_objet_charger()
* if (intval($id_objet)) {
* @param int|string $id_gamuform $filtrer_champs_objet = charger_fonction('filtrer_champs_objet', 'inc');
* Identifiant du gamuform. 'new' pour un nouveau gamuform. $s = $filtrer_champs_objet($objet, $s);
* @param string $retour $valeurs = sql_fetsel($s, $table, "$id=".intval($id_objet));
* URL de redirection après le traitement } else {
* @param int $lier_trad foreach ($s as $c) {
* Identifiant éventuel d'un gamuform source d'une traduction $valeurs[$c] = null;
* @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);
return $valeurs; return $valeurs;
} }
/** function formulaires_editer_gamuform_verifier_dist($id_objet = 0, $objet = '', $options = [], $id_redirect = null, $redirect = '') {
* 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 = '') {
$erreurs = array();
$erreurs = formulaires_editer_objet_verifier('gamuform', $id_gamuform);
$erreurs = [];
if (!gamuform_objet_autoriser($objet)) {
$erreurs['message_erreur'] = "Pb d'objet";
}
return $erreurs; return $erreurs;
} }
/** function formulaires_editer_gamuform_traiter_dist($id_objet = 0, $objet = '', $options = [], $id_redirect = null, $redirect = '') {
* Traitement du formulaire d'édition de gamuform $id_objet = (int) $id_objet;
* $id_redirect = (int) $id_redirect;
* Traiter les champs postés
* $saisies = gamuform_recup_tableau_objet($objet, false);
* @uses formulaires_editer_objet_traiter() if (array_key_exists('options', $saisies)) {
* unset($saisies['options']);
* @param int|string $id_gamuform }
* Identifiant du gamuform. 'new' pour un nouveau gamuform.
* @param string $retour $table = table_objet_sql($objet);
* URL de redirection après le traitement $id = id_table_objet($objet);
* @param int $lier_trad
* Identifiant éventuel d'un gamuform source d'une traduction $update = true;
* @param string $config_fonc if (!intval($id_objet)) {
* Nom de la fonction ajoutant des configurations particulières au formulaire $id_objet = sql_insertq($table, []);
* @param array $row $update = false;
* 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. $set = [];
* @return array if (!empty($saisies)) {
* Retours des traitements foreach ($saisies as $saisie) {
*/ if ($saisie['saisie'] === "explication") {
function formulaires_editer_gamuform_traiter_dist($id_gamuform = 'new', $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') { continue;
$retours = formulaires_editer_objet_traiter('gamuform', $id_gamuform, '', $lier_trad, $retour, $config_fonc, $row, $hidden); }
return $retours;
$champ = $saisie['options']['nom'];
if (
isset($saisie['options']['fonction'])
and $f = $saisie['options']['fonction']
) {
$f($id_objet, $objet, $champ, _request($champ));
} elseif (
isset($saisie['options']['modifier'])
and $m = $saisie['options']['modifier']
) {
$set[$champ] = $m($champ, _request($champ));
} else {
if ($saisie['saisie'] === 'date') {
$date = _request($champ);
$verifier = charger_fonction('verifier', 'inc/');
$verifier($date, 'date', ['normaliser' => 'datetime'], $date);
$set[$champ] = $date;
} else {
$set[$champ] = _requests($champ);
}
}
}
if (count($set)) {
$set = pipeline(
'pre_edition',
[
'args' => [
'table' => $table,
'id_objet' => $id_objet,
'objet' => $objet,
'action' => 'gamuform',
'update' => $update,
'options' => $options
],
'data' => $set
]
);
$r = sql_updateq($table, $set, "$id=".intval($id_objet));
if ($r) {
pipeline(
'post_edition',
[
'args' => [
'table' => $table,
'id_objet' => $id_objet,
'objet' => $objet,
'action' => 'gamuform',
'update' => $update,
'options' => $options
],
'data' => $set
]
);
}
}
}
include_spip('inc/invalideur');
suivre_invalideur("id='"."$id_objet"."/1");
$retour = [];
if ($redirect === 'gamutable') {
$retour['redirect'] = '';
if ($update) {
$retour['message_ok'] = gamutable_fermer_modalbox($id_redirect ?: $id_objet);
} else {
$retour['message_ok'] = gamutable_fermer_modalbox($id_redirect ?: 0);
}
} else if ($redirect) {
$retour['redirect'] = $redirect;
}
return $retour;
} }

83
gamuform/exemple.php Normal file
View file

@ -0,0 +1,83 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function gamuform_exemple_dist(){
$js = <<<EOF
<script>console.log('coucou');</script>
EOF;
return [
// API SAISIES
'options' => [
'texte_submit' => 'Valider cest gagné',
'inserer_debut' => 'coucou le debut',
'inserer_fin' => $js,
],
[
'saisie' => 'input',
'options' => [
'nom' => 'type_intervention',
'label' => "Type d'intervention",
'obligatoire' => 'oui',
//'fonction' => 'ma_super_fonction' // Nom de la fonction appelée pour enregistrer ce champ de facon autonome
//'modifier' => 'ma_super_fonction_pour_modifier' // Nom de la fonction appelée pour faire un traitement sur un champ avant l'insertion en bdd
],
// la cle gamutable n'est pas obligatoire, si absente, gamutable utilisera des valeurs par defaut et des infos de la clé options de saisie
'gamutable' => [ // pour le champ type_intervention, comme on définit la clé gamutable, c'est elle qui sera utilisé pour la vue, avec les memes clés que gamutable
'champ' => 'type_intervention',
'header' => 'Type',
'classes' => 'w200p',
'filtreCol' => 'select',
'ordreCol' => 'asc',
'crayons' => 'nom_objet_SPIP', // nom de l'objet du crayons
'fonction' => 'Majuscules', // fonction php pour filtre le contenu du champ, elle recoit en argument la valeur du champ
]
],
[
'saisie' => 'input',
'options' => [
'nom' => 'desc_type_intervention',
'libelle' => 'Description',
'label' => 'Description',
'obligatoire' => 'oui',
'fonction' => '_array_maSuperFonction' // on peut prefixer le nom de la fonction par _array_ et dans ce cas, on cherche une fonction qui
// s'appelle _array_maSuperFonction ou simplement maSuperFonction, elle recoit en arg, l'array de la ligne (fetsel) et non simplement la valeur du champ
],
'gamutable' => [
'champ' => 'desc_type_intervention',
'header' => 'Compétition',
'ordreCol' => 'desc',
'classes' => 'w200p',
]
],
[
'saisie' => 'radio',
'options' => [
'nom' => 'controle_ok',
'libelle' => 'Contrôle OK',
'label' => 'Contrôle OK',
'data' => ['oui' => 'Oui', '' => 'Non']
//'fonction' => 'ma_super_fonction'
],
// la cle gamutable est "normalement" pas obligatoire
// 'gamutable' => [
// 'champ' => 'desc_type_intervention',
// 'header' => 'Compétition',
// 'classes' => 'w200p',
// ]
],
// possible un array avec simplement la cle gamutable, que pour l'affichage
// cela permet d'avoir une colonne qui s'intercale entre 2 colonnes de champs venant de SAISIES
[
'gamutable' => [
'champ' => 'maj',
'header' => '<:prefix:toto:>',
'classes' => 'w200p text-center',
'filtreCol' => 'input',
]
],
];
}

View file

@ -1,58 +0,0 @@
<?php
/**
* Fichier gérant l'installation et désinstallation du plugin GamuForm
*
* @plugin GamuForm
* @copyright 2020
* @author tofulm
* @licence GNU/GPL
* @package SPIP\Gamuform\Installation
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Fonction d'installation et de mise à jour du plugin GamuForm.
*
* @param string $nom_meta_base_version
* Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
* @param string $version_cible
* Version du schéma de données dans ce plugin (déclaré dans paquet.xml)
* @return void
**/
function gamuform_upgrade($nom_meta_base_version, $version_cible) {
$maj = array();
$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);
}
/**
* Fonction de désinstallation du plugin GamuForm.
*
* @param string $nom_meta_base_version
* Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
* @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,43 @@ if (!defined('_ECRIRE_INC_VERSION')) {
function gamuform_autoriser() { function gamuform_autoriser() {
} }
function autoriser_gamuform_modifier_dist($faire, $type, $id, $qui, $opt) {
// ----------------- if (autoriser('webmestre')) {
// 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; return true;
} }
if (!empty($opt['objet'])) {
/** return autoriser('modifier', $opt['objet'], $id, $qui, []);
* Autorisation de modifier (gamuform) }
* return false;
* @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 function autoriser_gamuform_voir_dist($faire, $type, $id, $qui, $opt) {
* @param array $opt Options de cette autorisation if (autoriser('webmestre')) {
* @return bool true s'il a le droit, false sinon return true;
**/ }
function autoriser_gamuform_modifier_dist($faire, $type, $id, $qui, $opt) { if (!empty($opt['objet'])) {
return in_array($qui['statut'], array('0minirezo', '1comite')); return autoriser('voir', $opt['objet'], $id, $qui, []);
}
return false;
}
function autoriser_gamuform_creer_dist($faire, $type, $id, $qui, $opt) {
if (autoriser('webmestre')) {
return true;
}
if (!empty($opt['objet'])) {
return autoriser('creer', $opt['objet'], $id, $qui, []);
}
return false;
} }
/**
* 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) { function autoriser_gamuform_supprimer_dist($faire, $type, $id, $qui, $opt) {
return $qui['statut'] == '0minirezo' and !$qui['restreint']; if (autoriser('webmestre')) {
return true;
} }
if (!empty($opt['objet'])) {
return autoriser('supprimer', $opt['objet'], $id, $qui, []);
}
/** return false;
* 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,331 @@
if (!defined('_ECRIRE_INC_VERSION')) { if (!defined('_ECRIRE_INC_VERSION')) {
return; return;
} }
function gamuform_lang(?string $chaine):string {
if (strpos($chaine, ':>') !== false) {
$chaine = substr($chaine, 2, -2);
$chaine = _T($chaine);
}
return $chaine ?? '';
}
/**
* filtre generale qui appelle un filtre spécifique, déclaré dans l'array saisies avec la cle : gamutable/filtre
* si cette fonction commence par _array_ ex: _array_maSuperFonction => elle aura en parametre l'array de la ligne
* sinon la valeur
* cf gamuform/exemple.php
*
* @param String $objet
* @param String $champ
* @param String $valeur
*
* @return String valeur modifiée ou pas par le filtre
*/
function gamufiltre($objet, $champ, $ligne, $integer = false) {
$valeur = $ligne[$champ] ?? '';
if (gamuform_objet_autoriser($objet)) {
$T = gamuform_recup_tableau_objet($objet);
if (!empty($T)) {
foreach ($T as $s) {
if (
(!empty($s['gamutable']) or !empty($s['options']))
and $champ_tab = $s['gamutable']['champ'] ?? $s['options']['nom']
and $champ_tab === $champ
and !empty($s['gamutable']['fonction'])
) {
$filtre = $s['gamutable']['fonction'];
if (strpos($filtre, '_array_') !== false) {
$f = substr($filtre, 7);
if (function_exists($f)) {
return $f($ligne, $integer) ?? '';
} else if(function_exists($filtre)) {
return $filtre($ligne, $integer) ?? '';
} else {
return '';
}
} else {
return $filtre($valeur, $integer) ?? '';
}
}
}
}
}
return $valeur;
}
/**
* recuperation du tableau des saisies d'un objet
* dans : gamuform/mon_objet.php
*
* @param string $objet
*
* @return array
*
*/
function gamuform_recup_tableau_objet(string $objet, bool $all = true):array {
$f = charger_fonction($objet, 'gamuform', true);
if (!$f) {
return [];
}
$T = $f();
if (empty($T)) {
$T = [];
}
// on filtre les entrées vides, qui peuvent arriver si on on des autorisations
$T = array_filter($T, function($d){
return !empty($d);
});
$options = [];
if (!empty($T['options'])) {
$options = $T['options'];
unset($T['options']);
}
if (!$all) {
$T = array_filter($T, function($d){
return !empty($d['saisie']);
});
$T = array_merge(['options' => $options], $T);
}
return $T;
}
function gamuform_objet_autoriser(string $objet):bool {
return true;
// if (
// !empty($GLOBALS['gamuform_objets'])
// and !empty($objet)
// and in_array($objet, array_keys($GLOBALS['gamuform_objets']))
// ) {
// return true;
// }
// return false;
}
function gamuform_nom_objet($objet, $quoi = 'pluriel'):string {
$trad = '';
if (gamuform_objet_autoriser($objet)) {
if (!empty($GLOBALS['gamuform_objets'][$objet][$quoi])) {
$trad = $GLOBALS['gamuform_objets'][$objet][$quoi];
} else if ( !empty($GLOBALS['gamuform_i18n'][$objet][$quoi])){
$trad = $GLOBALS['gamuform_i18n'][$objet][$quoi];
} else {
$trad = _T($objet . ':' . $quoi);
}
}
return $trad;
}
/**
* recuperation des champs de l'objet pour les saisies
*
* @param String $objet
*
* @return Array
*/
function gamuform_recup_champs_gamutable(string $objet):array {
$c = [];
if (gamuform_objet_autoriser($objet)) {
$T = gamuform_recup_tableau_objet($objet);
if (!empty($T)) {
foreach ($T as $s) {
$c[] = $s['gamutable']['champ'] ?? $s['options']['nom'];
}
}
}
return $c;
}
/**
* recuperation des champs de l'objet pour les saisies
*
* @param String $objet
*
* @return Array
*/
function gamuform_recup_champs_saisies(string $objet):array {
$c = [];
if (gamuform_objet_autoriser($objet)) {
$T = gamuform_recup_tableau_objet($objet, false);
if (array_key_exists('options', $T)) {
unset($T['options']);
}
if (!empty($T)) {
foreach ($T as $s) {
$c[] = $s['options']['nom'];
}
}
}
return $c;
}
/**
* recuperation du header de l'objet que l'on veut afficher dans gamutable
*
* @param String $objet
*
* @return Array
*/
function gamuform_recup_header(string $objet):array {
$c = [];
if (gamuform_objet_autoriser($objet)) {
$T = gamuform_recup_tableau_objet($objet);
if (!empty($T)) {
foreach ($T as $s) {
$champ = $s['gamutable']['champ'] ?? $s['options']['nom'];
$c[$champ] = $s['gamutable']['header'] ?? $s['options']['nom'];
}
}
}
return $c;
}
/**
* recuperation des filtreCol de l'objet que l'on veut afficher dans gamutable
*
* @param String $objet
*
* @return Array
*/
function gamuform_recup_crayons(string $objet):array {
$c = [];
if (gamuform_objet_autoriser($objet)) {
$T = gamuform_recup_tableau_objet($objet);
if (!empty($T)) {
foreach ($T as $s) {
if (
!empty($s['gamutable']['crayons'])
and $champ = $s['gamutable']['champ'] ?? $s['options']['nom']
) {
$c[$champ] = $s['gamutable']['crayons'];
}
}
}
}
return $c;
}
/**
* recuperation des ordreCol de l'objet que l'on veut afficher dans gamutable
*
* @param String $objet
*
* @return Array
*/
function gamuform_recup_ordreCol(string $objet):array {
$c = [];
if (gamuform_objet_autoriser($objet)) {
$T = gamuform_recup_tableau_objet($objet);
if (!empty($T)) {
foreach ($T as $s) {
if (
!empty($s['gamutable']['ordreCol'])
and $champ = $s['gamutable']['champ'] ?? $s['options']['nom']
) {
$c[$champ] = $s['gamutable']['ordreCol'];
}
}
}
}
return $c;
}
/**
* recuperation des filtreCol de l'objet que l'on veut afficher dans gamutable
*
* @param String $objet
*
* @return Array
*/
function gamuform_recup_filtreCol(string $objet):array {
$c = [];
if (gamuform_objet_autoriser($objet)) {
$T = gamuform_recup_tableau_objet($objet);
if (!empty($T)) {
foreach ($T as $s) {
if (
!empty($s['gamutable']['filtreCol'])
and in_array($s['gamutable']['filtreCol'], ['input', 'select'])
and $champ = $s['gamutable']['champ'] ?? $s['options']['nom']
) {
$c[$champ] = $s['gamutable']['filtreCol'];
}
}
}
}
return $c;
}
/**
* recuperation des classes de l'objet que l'on veut afficher dans gamutable
*
* @param String $objet
*
* @return Array
*/
function gamuform_recup_classes(string $objet):array {
$c = [];
if (gamuform_objet_autoriser($objet)) {
$T = gamuform_recup_tableau_objet($objet);
if (!empty($T)) {
foreach ($T as $s) {
$champ = $s['gamutable']['champ'] ?? $s['options']['nom'];
$c[$champ] = $s['gamutable']['classes'] ?? '';
}
}
}
return $c;
}
/**
* recuperation de(s) ligne(s) de l'objet
*
* @param String $objet
* @param String $id_objet (optional)
*
* @return array
*/
function gamuform_recup_valeurs($objet, $id_objet = 0, $where = null):array {
$r = [];
if (gamuform_objet_autoriser($objet)) {
$table = table_objet_sql($objet);
$id = id_table_objet($objet);
// $s = gamuform_recup_champs_gamutable($objet);
// $s[] = $id;
if (intval($id_objet)) {
$valeurs = sql_fetsel('*', $table, "$id=".intval($id_objet));
$valeurs['id'] = $valeurs[$id];
if (!empty($valeurs)) {
$r[0] = $valeurs;
}
} else {
if ($where) {
$w[] = $where;
} else {
$w = 1;
}
$T = sql_allfetsel('*', $table, $w);
if (!empty($T)) {
foreach ($T as $t) {
$t['id'] = $t[$id];
$r[] = $t;
}
}
}
}
return $r;
}

View file

@ -12,3 +12,4 @@
if (!defined('_ECRIRE_INC_VERSION')) { if (!defined('_ECRIRE_INC_VERSION')) {
return; return;
} }

View file

@ -13,26 +13,3 @@ if (!defined('_ECRIRE_INC_VERSION')) {
return; 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,11 @@
#CACHE{0}
[(#AUTORISER{modifier, gamuform, #ENV{id_objet}, '', #ARRAY{objet, #ENV{objet}}}|sinon_interdire_acces)]
#SET{options,#ARRAY}
[(#ENV{options}|oui) #SET{options,#ENV{options}} ]
<div class="inner">
<div class="ajax">
[(#FORMULAIRE_EDITER_GAMUFORM{#ENV{id_objet}, #ENV{objet}, #GET{options}, #ENV{id_redirect}, #ENV{redirect}})]
</div>
</div>

View file

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

View file

@ -0,0 +1,27 @@
[(#AUTORISER{voir, gamuform, #ENV{id_objet}, '', #ARRAY{objet, #ENV{objet}}}|sinon_interdire_acces)]
<div class="conf-inner">
<h2 class="text-center"><:gamuform:configuration_des|ucfirst:> [ (#ENV{objet}|gamuform_nom_objet)]</h2>
<div class="tableau">
[(#AUTORISER{creer, gamuform, 0, '', #ARRAY{objet, #ENV{objet}}}|oui)
[(#SET{lien,<a class="modalbox btn btn-gamuform"
href="[(#URL_PAGE{editer_gamuform}|parametre_url{objet,#ENV{objet}}|parametre_url{redirect,#SELF})]">
<i class="osdve-plus-circle"></i>&nbsp;
[(#ENV{objet}|gamuform_nom_objet{creer})]
</a>})]
]
#SET{url,spip.php?page=json_gamuform.json}
#SET{url,#GET{url}|parametre_url{lang,#ENV{lang}}}
#SET{url,#GET{url}|parametre_url{objet,#ENV{objet}}}
#SET{url,#GET{url}|parametre_url{w,#ENV{w}}}
#SET{namecsv,#ENV{objet}.csv}
#SET{tparpage,#ENV{tparpage, [15,25,50,'Tous']}}
<INCLURE{fond=inclure/gamutable,
apiuri=#GET{url},
tparpage=#GET{tparpage},
includespip=#GET{lien},
namecsv=#GET{namecsv},
champcsv=#ENV{champcsv,search},
env
}>
</div>
</div>

76
json_gamuform.json.html Normal file
View file

@ -0,0 +1,76 @@
#HTTP_HEADER{Content-Type: application/json; charset=#CHARSET}
[(#AUTORISER{voir, gamuform, #ENV{id_objet}, '', #ARRAY{objet, #ENV{objet}}}|sinon_interdire_acces)]
#SET{header,#ENV{objet}|gamuform_recup_header}
#SET{champs,#ENV{objet}|gamuform_recup_champs_gamutable}
#SET{classes,#ENV{objet}|gamuform_recup_classes}
#SET{filtreCol,#ENV{objet}|gamuform_recup_filtreCol}
#SET{ordreCol,#ENV{objet}|gamuform_recup_ordreCol}
#SET{crayons,#ENV{objet}|gamuform_recup_crayons}
[{
"header":{
"id": "id",
[(#AUTORISER{modifier, gamuform, #ENV{id_objet}, '', #ARRAY{objet, #ENV{objet}}}|oui)
"edit": "",]
<BOUCLE_header(DATA){source table,#GET{header}}{','}>
[(#CLE|json_encode)] : [(#VALEUR*|gamuform_lang|mb_ucfirst|json_encode)]
</BOUCLE_header>
[(#AUTORISER{supprimer, gamuform, #ENV{id_objet}, '', #ARRAY{objet, #ENV{objet}}}|oui)
,"sup": ""
]
},
"crayons":{
<BOUCLE_crayons(DATA){source table,#GET{crayons}}{','}>
[(#CLE|json_encode)] : [(#VALEUR|json_encode)]
</BOUCLE_crayons>
},
"ordreCol" : {
<BOUCLE_ordreCol(DATA){source table,#GET{ordreCol}}{','}>
[(#CLE|json_encode)] : [(#VALEUR|json_encode)]
</BOUCLE_ordreCol>
},
"filtreCol" : {
<BOUCLE_filtreCol(DATA){source table,#GET{filtreCol}}{','}>
[(#CLE|json_encode)] : [(#VALEUR|json_encode)]
</BOUCLE_filtreCol>
},
"classes" : {
<BOUCLE_classes(DATA){source table,#GET{classes}}>
[(#CLE|json_encode)] : [(#VALEUR|json_encode)],
</BOUCLE_classes>
"id": "w80p",
"edit": "w50p",
"sup": "w50p"
}
}
<B_gamuform>
,
<BOUCLE_gamuform(DATA){source table, #ENV{objet}|gamuform_recup_valeurs{#ENV{id},#ENV{w}}}{','}>
#SET{ligne,#VALEUR}
[(#SET{edit, #MODELE{lien_editer_gamuform,ligne=#GET{ligne},env} })]
[(#SET{sup, #MODELE{lien_supprimer_gamuform,ligne=#GET{ligne},env} })]
{
"html": {
"id": #GET{ligne/id},
[(#AUTORISER{modifier, gamuform, #ENV{id_objet}, '', #ARRAY{objet, #ENV{objet}}}|oui)
"edit": [(#GET{edit}|json_encode)],
]
<BOUCLE_champsA(DATA){source table,#GET{champs}}{','}>
[(#VALEUR|json_encode)] : [(#ENV{objet}|gamufiltre{#VALEUR,#GET{ligne}}|json_encode)]
</BOUCLE_champsA>
[(#AUTORISER{supprimer, gamuform, #ENV{id_objet}, '', #ARRAY{objet, #ENV{objet}}}|oui)
,"sup": [(#GET{sup}|json_encode)]
]
},
"search": {
"id": #GET{ligne/id},
"edit": "",
<BOUCLE_champsB(DATA){source table,#GET{champs}}>
[(#VALEUR|json_encode)] : [(#ENV{objet}|gamufiltre{#VALEUR,#GET{ligne},integer}|json_encode{32})],
</BOUCLE_champsB>
"sup":""
}
}
</BOUCLE_gamuform>
]

26
lang/gamuform_de.php Normal file
View file

@ -0,0 +1,26 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// AA
// CC
"configuration_des" => "Konfiguration von",
// EE
"enregistrer" => "registrieren",
// II
// RR
// SS
// TT
);

26
lang/gamuform_es.php Normal file
View file

@ -0,0 +1,26 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// AA
// CC
"configuration_des" => "configuración de",
// EE
"enregistrer" => "Regístrese en",
// II
// RR
// SS
// TT
);

View file

@ -8,37 +8,19 @@ if (!defined('_ECRIRE_INC_VERSION')) {
$GLOBALS[$GLOBALS['idx_lang']] = array( $GLOBALS[$GLOBALS['idx_lang']] = array(
// A // AA
'ajouter_lien_gamuform' => 'Ajouter ce gamuform',
// C // CC
'champ_titre_label' => 'Titre', "configuration_des" => "configuration des",
'confirmer_supprimer_gamuform' => 'Confirmez-vous la suppression de cet gamuform ?',
// I // EE
'icone_creer_gamuform' => 'Créer un gamuform', "enregistrer" => "Enregistrer",
'icone_modifier_gamuform' => 'Modifier ce gamuform',
'info_1_gamuform' => 'Un gamuform',
'info_aucun_gamuform' => 'Aucun gamuform',
'info_gamuforms_auteur' => 'Les gamuforms de cet auteur',
'info_nb_gamuforms' => '@nb@ gamuforms',
// R // II
'retirer_lien_gamuform' => 'Retirer ce gamuform',
'retirer_tous_liens_gamuforms' => 'Retirer tous les gamuforms',
// S // RR
'supprimer_gamuform' => 'Supprimer cet gamuform',
// T // SS
'texte_ajouter_gamuform' => 'Ajouter un gamuform',
'texte_changer_statut_gamuform' => 'Ce gamuform est :', // TT
'texte_creer_associer_gamuform' => 'Créer et associer un gamuform',
'texte_definir_comme_traduction_gamuform' => 'Ce gamuform est une traduction du gamuform numéro :',
'titre_gamuform' => 'Gamuform',
'titre_gamuforms' => 'Gamuforms',
'titre_gamuforms_rubrique' => 'Gamuforms de la rubrique',
'titre_langue_gamuform' => 'Langue de ce gamuform',
'titre_logo_gamuform' => 'Logo de ce gamuform',
'titre_objets_lies_gamuform' => 'Liés à ce gamuform',
); );

View file

@ -0,0 +1,8 @@
#SET{ligne,#ENV{ligne}}
<a class="modalbox"
href="[(#URL_PAGE{editer_gamuform}
|parametre_url{id_objet,#GET{ligne/id}}
|parametre_url{objet,#ENV{objet}}
|parametre_url{redirect,gamutable})]">
<i class="fas fa-edit"></i>
</a>

View file

@ -0,0 +1,7 @@
#SET{ligne,#ENV{ligne}}
<a class="url_action" href="[(#URL_ACTION_AUTEUR{supprimer_gamuform,#GET{ligne/id}/#ENV{objet},#SELF})]"
data-confirm="Confirmez vous la suppression de cette ligne ?"
>
<i class="fas fa-trash"></i>
</a>

View file

@ -1,32 +1,26 @@
<paquet <paquet
prefix="gamuform" prefix="gamuform"
categorie="outil" categorie="outil"
version="1.0.0" version="1.3.2"
etat="dev" etat="dev"
compatibilite="[3.3.0-dev;3.3.*]" compatibilite="[4.0.0;4.*]"
logo="prive/themes/spip/images/gamuform-xx.svg" logo="prive/themes/spip/images/gamuform-xx.svg"
documentation="" documentation=""
schema="1.0.0"
> >
<!--
Paquet généré le 2020-03-30 14:54:11
-->
<nom>GamuForm</nom> <nom>GamuForm</nom>
<auteur lien='https://gamuza.fr'>tofulm</auteur> <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> <licence>GNU/GPL</licence>
<necessite nom="saisies" compatibilite="[3.23.2;]" /> <necessite nom="saisies" compatibilite="[3.23.2;]" />
<necessite nom="gamutable" compatibilite="[3.2.1;]" />
<necessite nom="verifier" compatibilite="[2.0.0;]" />
<necessite nom="gamufonctions" compatibilite="[1.0.0;]" />
<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> </paquet>