Compare commits

...
Sign in to create a new pull request.

60 commits
dev ... 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
18 changed files with 554 additions and 216 deletions

View file

@ -1,18 +1,28 @@
# Gamuform
Plugin pour générer des formulaires via saisies et des vues via gamutable semi automatiquement.
Plugin pour générer des formulaires et des vues via gamutable semi automatiquement.
Il suffit de déclarer la globals
## 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_objets'] = array_merge(
$GLOBALS['gamuform_objets'],
[ 'osdve_interventions_type' => "Types d'intervention"]
$GLOBALS['gamuform_i18n'] = array_merge(
$GLOBALS['gamuform_i18n'] ?? [],
[
'app_competition' => [
'singulier' => 'competition',
'pluriel' => 'compétitions',
'creer' => 'Créer une nouvelle compétition'
]
]
);
```
Et de creer une fonction gamuform/mon_objet.php avec une fonction qui renvoie l'array des saisies
> il y a un exemple gamuform/exemple.php
* On cree un fichier de lang mon_objet_fr.php, avec les 3 cles (singulier, pluriel, creer)
Ensuite, il suffit d'appeler cette page , en paramettre le nom de l'objet voulu:
> spip.php?page=voir_gamuform&objet=auteur
## 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,2 +1 @@
<INCLURE{fond=inclure/editer_gamuform,env}>

View file

@ -1,14 +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>]
<form method="post" action="#ENV{action}"><div>
#ACTION_FORMULAIRE
<div class="editer_groupe">
#GENERER_SAISIES{#ENV{_saisies}}
</div>
<p class="boutons"><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
</div></form>
</div>

View file

@ -4,45 +4,52 @@ if (!defined('_ECRIRE_INC_VERSION')) {
}
function formulaires_editer_gamuform_saisies_dist($id_objet = 0, $objet = '', $redirect = '') {
function formulaires_editer_gamuform_saisies_dist($id_objet = 0, $objet = '', $options = [], $id_redirect = null, $redirect = '') {
$saisies = false;
if (gamuform_objet_autoriser($objet)) {
$saisies = gamuform_recup_saisies($objet);
$saisies = gamuform_recup_tableau_objet($objet, false);
}
return $saisies;
}
function formulaires_editer_gamuform_charger_dist($id_objet = 0, $objet = '', $redirect = '') {
function formulaires_editer_gamuform_charger_dist($id_objet = 0, $objet = '', $options = [], $id_redirect = null, $redirect = '') {
$table = table_objet_sql($objet);
$id = id_table_objet($objet);
$s = gamuform_recup_champ($objet, true);
$s = gamuform_recup_champs_saisies($objet);
if (intval($id_objet)) {
$filtrer_champs_objet = charger_fonction('filtrer_champs_objet', 'inc');
$s = $filtrer_champs_objet($objet, $s);
$valeurs = sql_fetsel($s, $table, "$id=".intval($id_objet));
} else {
foreach ($s as $c) {
$valeurs[$c] = '';
$valeurs[$c] = null;
}
}
return $valeurs;
}
function formulaires_editer_gamuform_verifier_dist($id_objet = 0, $objet = '', $redirect = '') {
function formulaires_editer_gamuform_verifier_dist($id_objet = 0, $objet = '', $options = [], $id_redirect = null, $redirect = '') {
$erreurs = array();
$erreurs = [];
if (!gamuform_objet_autoriser($objet)) {
$erreurs['message_erreur'] = "Pb d'objet";
}
return $erreurs;
}
function formulaires_editer_gamuform_traiter_dist($id_objet = 0, $objet = '', $redirect = '') {
function formulaires_editer_gamuform_traiter_dist($id_objet = 0, $objet = '', $options = [], $id_redirect = null, $redirect = '') {
$id_objet = (int) $id_objet;
$id_redirect = (int) $id_redirect;
$saisies = gamuform_recup_saisies($objet);
$table = table_objet_sql($objet);
$id = id_table_objet($objet);
$saisies = gamuform_recup_tableau_objet($objet, false);
if (array_key_exists('options', $saisies)) {
unset($saisies['options']);
}
$table = table_objet_sql($objet);
$id = id_table_objet($objet);
$update = true;
if (!intval($id_objet)) {
@ -53,35 +60,65 @@ function formulaires_editer_gamuform_traiter_dist($id_objet = 0, $objet = '', $r
$set = [];
if (!empty($saisies)) {
foreach ($saisies as $saisie) {
if ($saisie['saisie'] === "explication") {
continue;
}
$champ = $saisie['options']['nom'];
if (
isset($saisies['options']['fonction'])
and $f = $saisies['options']['fonction']
isset($saisie['options']['fonction'])
and $f = $saisie['options']['fonction']
) {
$f($id_objet, $objet, $champ, _request($champ));
} elseif (
isset($saisies['options']['modifier'])
and $m = $saisies['options']['modifier']
isset($saisie['options']['modifier'])
and $m = $saisie['options']['modifier']
) {
$set[$champ] = $m($champ, _request($champ));
} else {
$set[$champ] = _request($champ);
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',
array(
'args' => array(
[
'args' => [
'table' => $table,
'id_objet' => $id_objet,
'objet' => $objet,
'action' => 'gamuform',
'update' => $update
),
'update' => $update,
'options' => $options
],
'data' => $set
)
]
);
sql_updateq($table, $set, "$id=".intval($id_objet));
$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');
@ -92,9 +129,9 @@ function formulaires_editer_gamuform_traiter_dist($id_objet = 0, $objet = '', $r
if ($redirect === 'gamutable') {
$retour['redirect'] = '';
if ($update) {
$retour['message_ok'] = gamutable_fermer_modalbox($id_objet);
$retour['message_ok'] = gamutable_fermer_modalbox($id_redirect ?: $id_objet);
} else {
$retour['message_ok'] = gamutable_fermer_modalbox();
$retour['message_ok'] = gamutable_fermer_modalbox($id_redirect ?: 0);
}
} else if ($redirect) {
$retour['redirect'] = $redirect;

View file

@ -5,37 +5,79 @@ if (!defined('_ECRIRE_INC_VERSION')) {
function gamuform_exemple_dist(){
$js = <<<EOF
<script>console.log('coucou');</script>
EOF;
return [
[
'saisie' => 'input',
'options' => array(
'nom' => 'type_intervention',
'libelle' => 'Type',
'label' => "Type d'intervention",
'obligatoire' => 'oui',
//'fonction' => 'ma_super_fonction'
//'modifier' => 'ma_super_fonction_pour_modifier'
)
// API SAISIES
'options' => [
'texte_submit' => 'Valider cest gagné',
'inserer_debut' => 'coucou le debut',
'inserer_fin' => $js,
],
[
'saisie' => 'input',
'options' => array(
'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' => 'ma_super_fonction'
)
'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' => array(
'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,45 +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) {
effacer_meta($nom_meta_base_version);
}

View file

@ -21,34 +21,42 @@ function gamuform_autoriser() {
}
function autoriser_gamuform_modifier_dist($faire, $type, $id, $qui, $opt) {
if (autoriser('webmestre')) {
return true;
}
if (!empty($opt['objet'])) {
return autoriser('modifier', $opt['objet'], $id, $qui, []);
}
return autoriser('webmestre');
return false;
}
function autoriser_gamuform_voir_dist($faire, $type, $id, $qui, $opt) {
if (autoriser('webmestre')) {
return true;
}
if (!empty($opt['objet'])) {
return autoriser('voir', $opt['objet'], $id, $qui, []);
}
return autoriser('webmestre');
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 autoriser('webmestre');
return false;
}
function autoriser_gamuform_supprimer_dist($faire, $type, $id, $qui, $opt) {
if (!empty($opt['objet'])) {
return autoriser('voir', $opt['objet'], $id, $qui, []);
if (autoriser('webmestre')) {
return true;
}
return autoriser('webmestre');
if (!empty($opt['objet'])) {
return autoriser('supprimer', $opt['objet'], $id, $qui, []);
}
return false;
}

View file

@ -13,6 +13,61 @@ if (!defined('_ECRIRE_INC_VERSION')) {
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
@ -22,7 +77,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
* @return array
*
*/
function gamuform_recup_saisies(string $objet):array {
function gamuform_recup_tableau_objet(string $objet, bool $all = true):array {
$f = charger_fonction($objet, 'gamuform', true);
if (!$f) {
return [];
@ -31,54 +86,220 @@ function gamuform_recup_saisies(string $objet):array {
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 {
if (
!empty($GLOBALS['gamuform_objets'])
and !empty($objet)
and in_array($objet, array_keys($GLOBALS['gamuform_objets']))
) {
return true;
}
return false;
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):string {
$nom = '';
function gamuform_nom_objet($objet, $quoi = 'pluriel'):string {
$trad = '';
if (gamuform_objet_autoriser($objet)) {
$nom = $GLOBALS['gamuform_objets'][$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 $nom;
return $trad;
}
/**
* recuperation des champs de l'objet que l'on veut traiter
* recuperation des champs de l'objet pour les saisies
*
* @param String $objet
* @param Bool $keys (optional) le type de sortie que l'on souhaite
*
* @return Array
*/
function gamuform_recup_champ(string $objet, bool $keys = false):array {
function gamuform_recup_champs_gamutable(string $objet):array {
$c = [];
if (gamuform_objet_autoriser($objet)) {
$T = gamuform_recup_saisies($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) {
if ($keys) {
$c[] = $s['options']['nom'];
} else {
$c[$s['options']['nom']] = $s['options']['libelle'];
$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
@ -88,22 +309,27 @@ function gamuform_recup_champ(string $objet, bool $keys = false):array {
*
* @return array
*/
function gamuform_recup_valeurs($objet, $id_objet = 0):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_champ($objet, true);
// $s = gamuform_recup_champs_gamutable($objet);
$s[] = $id;
// $s[] = $id;
if (intval($id_objet)) {
$valeurs = sql_fetsel($s, $table, "$id=".intval($id_objet));
$valeurs = sql_fetsel('*', $table, "$id=".intval($id_objet));
$valeurs['id'] = $valeurs[$id];
if (!empty($valeurs)) {
$r[0] = $valeurs;
}
} else {
$T = sql_allfetsel($s, $table, 1);
if ($where) {
$w[] = $where;
} else {
$w = 1;
}
$T = sql_allfetsel('*', $table, $w);
if (!empty($T)) {
foreach ($T as $t) {
$t['id'] = $t[$id];

View file

@ -13,5 +13,3 @@ if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
// initialisation de l'objet global
$GLOBALS['gamuform_objets'] = [];

View file

@ -1,8 +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}, #ENV{redirect}})]
[(#FORMULAIRE_EDITER_GAMUFORM{#ENV{id_objet}, #ENV{objet}, #GET{options}, #ENV{id_redirect}, #ENV{redirect}})]
</div>
</div>

View file

@ -1,20 +1,27 @@
[(#AUTORISER{voir, gamuform, #ENV{id_objet}, '', #ARRAY{objet, #ENV{objet}}}|sinon_interdire_acces)]
<div class="conf-inner">
<h2 class="text-center">Configuration des [ (#ENV{objet}|gamuform_nom_objet)]</h2>
<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--osdve" href="[(#URL_PAGE{editer_gamuform}|parametre_url{objet,#ENV{objet}}|parametre_url{redirect,#SELF})]"><i class="osdve-plus-circle"></i>&nbsp;Nouveau</a>})]
[(#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&objet=}
#SET{url,#GET{url}|concat{#ENV{objet}}}
#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>

View file

@ -1,20 +1,44 @@
#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}
#SET{header,#ENV{objet}|gamuform_recup_champ}
[{
"header":{
"id": "id",
"edit": "",
<BOUCLE_header(DATA){source table,#GET{header}}>
[(#CLE|json_encode)] : [(#VALEUR|json_encode)],
[(#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>
"sup": ""
[(#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"
@ -22,39 +46,31 @@
}
<B_gamuform>
,
<BOUCLE_gamuform(DATA){source table, #ENV{objet}|gamuform_recup_valeurs{#ENV{id}}}{','}>
<BOUCLE_gamuform(DATA){source table, #ENV{objet}|gamuform_recup_valeurs{#ENV{id},#ENV{w}}}{','}>
#SET{ligne,#VALEUR}
[(#SET{edit, <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> })]
[(#SET{sup,
<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>})]
[(#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},
"edit": [(#GET{edit}|json_encode)],
<BOUCLE_headerB(DATA){source table,#GET{header}}>
[(#CLE|json_encode)] : [(#GET{ligne/#CLE}|json_encode)],
</BOUCLE_headerB>
"sup": [(#GET{sup}|json_encode)]
[(#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_headerC(DATA){source table,#GET{header}}>
[(#CLE|json_encode)] : [(#GET{ligne/#CLE}|textebrut|json_encode)],
</BOUCLE_headerC>
<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(
// A
'ajouter_lien_gamuform' => 'Ajouter ce gamuform',
// AA
// C
'champ_titre_label' => 'Titre',
'confirmer_supprimer_gamuform' => 'Confirmez-vous la suppression de cet gamuform ?',
// CC
"configuration_des" => "configuration des",
// I
'icone_creer_gamuform' => 'Créer un gamuform',
'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',
// EE
"enregistrer" => "Enregistrer",
// R
'retirer_lien_gamuform' => 'Retirer ce gamuform',
'retirer_tous_liens_gamuforms' => 'Retirer tous les gamuforms',
// II
// S
'supprimer_gamuform' => 'Supprimer cet gamuform',
// RR
// T
'texte_ajouter_gamuform' => 'Ajouter un gamuform',
'texte_changer_statut_gamuform' => 'Ce gamuform est :',
'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',
// SS
// TT
);

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,9 +1,9 @@
<paquet
prefix="gamuform"
categorie="outil"
version="1.0.0"
version="1.3.2"
etat="dev"
compatibilite="[4.0.0;4.0.*]"
compatibilite="[4.0.0;4.*]"
logo="prive/themes/spip/images/gamuform-xx.svg"
documentation=""
>
@ -16,6 +16,8 @@
<licence>GNU/GPL</licence>
<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" />