Compare commits

...

2 Commits

Author SHA1 Message Date
Maïeul b297b0fbe0 WIP : pour les grilles de questions, afficher chaque ligne d'une grille dans une colonne à part. 4 months ago
Maïeul fb5b035e2f coquille phpDoc 4 months ago
  1. 79
      formidable_ts_pipelines.php
  2. 87
      javascript/formidable_ts.json_fonctions.php
  3. 3
      paquet.xml

79
formidable_ts_pipelines.php

@ -35,7 +35,7 @@ function formidable_ts_affiche_gauche($flux) {
/**
* Pipeline permettant de régler data-sort-value
* @array $flux 'args' => array(
* @param array $flux 'args' => array(
* 'type'=> 'extra'/'champ',
* 'valeur' => ,
* 'saisie' => ),
@ -49,3 +49,80 @@ function formidable_ts_affiche_gauche($flux) {
function formidable_ts_formidable_ts_sort_value($flux) {
return $flux;
}
/**
* Pipeline permettant de régler le colonnage en fonction des saisies
* @param array $flux
* 'args' => (
* 'type' => 'extra/champ'
* 'saisie' => <description de la saisie>
* ),
* 'data' => ce que l'on veut rourn dans l'attribut, sous forme de tableau
* @return $flux
**/
function formidable_ts_formidable_ts_column(array $flux): array {
$saisie = $flux['args']['saisie'];
$data = &$flux['data'];
if ($saisie['saisie'] === 'explication') {
$data = [];
} elseif (isset($saisie['options']['data_rows'])) {
include_spip('inc/saisies');
$data = [];
foreach (saisies_chaine2tableau($saisie['options']['data_rows']) as $row => $value) {
$data[] = $flux['args']['type'].'-'.$saisie['options']['nom'].'@@@'.$row;
}
} else {
$data = [$flux['args']['type'].'-'.$saisie['options']['nom']];
}
return $flux;
}
/**
* Pipeline pour déterminer la valeur qu'on affiche dans une cellule
* args :
* - 'id_formulaire'
- 'id_formulaires_reponse'
- 'nom'
- 'sous_nom'
- 'type' ('extra'/'champ')
- 'saisie' (description de la saisie)
**/
function formidable_ts_formidable_ts_cell_value($flux) {
include_spip('inc/saisies');
$data = &$flux['data'];
$data_rows = $flux['args']['saisie']['options']['data_rows'] ?? [];
$sous_nom = $flux['args']['sous_nom'] ?? '';
if ($data_rows and $sous_nom) {
$row = $data_rows[$sous_nom];
$data = str_replace('*', '', $data);
$data = str_replace('<br>', "\n", $data);
$data = saisies_chaine2tableau($data);
$data = $data[$row] ?? '';
}
return $flux;
}
/**
* Pipeline pour déterminer la valeur brute associé à une cellule (utile pour le tri)
* args :
* - 'id_formulaire'
- 'id_formulaires_reponse'
- 'nom'
- 'sous_nom'
- 'type' ('extra'/'champ')
- 'saisie' (description de la saisie)
**/
function formidable_ts_formidable_ts_cell_value_raw($flux) {
include_spip('inc/saisies');
$data = &$flux['data'];
$data_rows = $flux['args']['saisie']['options']['data_rows'] ?? [];
$sous_nom = $flux['args']['sous_nom'] ?? '';
if ($data_rows and $sous_nom) {
$data = $data[$sous_nom] ?? '';
}
return $flux;
}

87
javascript/formidable_ts.json_fonctions.php

@ -65,6 +65,7 @@ class table {
} else {
$this->champs = \unserialize($formulaire_detail['saisies']);
}
$this->champs = \saisies_mapper_option($this->champs, ['data_rows', 'data_cols'], 'saisies_chaine2tableau');
// Afficher les ip ?
if (lire_config('formidable/exporter_adresses_ip')) {
$this->ip = true;
@ -113,16 +114,30 @@ class table {
$columns[] = 'natif-ip';
}
foreach ($this->cextras_finaux as $extra) {
if ($extra['saisie'] == 'explication') {
continue;
}
$columns[] = 'extra-'.$extra['options']['nom'];
$columns = array_merge($columns,
pipeline('formidable_ts_column',
[
'data' => [],
'args' => [
'type' => 'extra',
'saisie' => $extra
]
]
)
);
}
foreach ($this->champs_finaux as $champ) {
if ($champ['saisie'] == 'explication') {
continue;
}
$columns[] = 'champ-'.$champ['options']['nom'];
$columns = array_merge($columns,
pipeline('formidable_ts_column',
[
'data' => [],
'args' => [
'type' => 'champ',
'saisie' => $champ
]
]
)
);
}
// Ajouter les nouvelles colonnes à la fin, et soustraire celles qui n'existent plus
$diff = array_diff($columns, $order);
@ -145,6 +160,11 @@ continue;
$headers = &$this->headers;
foreach ($this->columns as $column) {
list($type, $nom) = explode('-', $column);
if (strpos($nom, '@@@')) {
list($nom, $sous_nom) = explode('@@@', $nom);
} else {
$sous_nom = '';
}
if ($type === 'natif') {
if ($nom === 'statut') {
$headers[] = new header([
@ -190,6 +210,9 @@ continue;
$fieldset = '';
}
$label = $saisie['options']['label'] ?? $saisie['options']['label_case'] ?? $saisie['options']['nom'];
if (isset($saisie['options']['data_rows'])) {
$label .= ' — '. $saisie['options']['data_rows'][$sous_nom];
}
if ($fieldset) {
$label .= " <span class='fieldset_label'>($fieldset)</span>";
}
@ -224,6 +247,18 @@ continue;
$this->totalRows++;
foreach ($this->columns as $column) {
list($type, $nom) = explode('-', $column);
if (strpos($nom, '@@@')) {
list($nom, $sous_nom) = explode('@@@', $nom);
} else {
$sous_nom = '';
}
$args_pipeline = [
'id_formulaire' => $this->id_formulaire,
'id_formulaires_reponse' => $id_formulaires_reponse,
'nom' => $nom,
'sous_nom' => $sous_nom,
'type' => $type
];
if ($type === 'natif') {
if ($nom === 'statut') {
$value = \liens_absolus(\appliquer_filtre($row_reponse['statut'], 'puce_statut', 'formulaires_reponse', $row_reponse['id_formulaires_reponse'], true));
@ -277,6 +312,7 @@ continue;
} else {
if ($type === 'extra') {
$champ = $this->cextras_finaux_par_nom[$nom];
$args_pipeline['saisie'] = $champ;
$crayons = false;
$nom = $champ['options']['nom'];
if (test_plugin_actif('crayons')) {
@ -295,6 +331,13 @@ continue;
} else {
$value = implode(\calculer_balise_LISTER_VALEURS('formulaires_reponses', $nom, $row_reponse[$nom]), ', ');
}
$value = pipeline(
'formidable_ts_cell_value',
[
'data' => $value,
'args' => $args_pipeline
]
);
$row_ts[] = new cell(
[
'table' => $this,
@ -308,9 +351,27 @@ continue;
]
);
} else { // Réponse de l'internaute
$champ = $this->champs_finaux_par_nom[$nom];
$args_pipeline['saisie'] = $champ;
$value = \calculer_voir_reponse($id_formulaires_reponse, $this->id_formulaire, $nom, '', 'valeur_uniquement');
$value = pipeline(
'formidable_ts_cell_value',
[
'data' => $value,
'args' => $args_pipeline
]
);
$value_raw = \calculer_voir_reponse($id_formulaires_reponse, $this->id_formulaire, $nom, '', 'brut');
$champ = $this->champs_finaux_par_nom[$nom];
$value_raw = pipeline(
'formidable_ts_cell_value_raw',
[
'data' => $value_raw,
'args' => $args_pipeline
]
);
$row_ts[] = new cell(
[
'table' => $this,
@ -435,6 +496,7 @@ class cell implements \JsonSerializable{
private $table;
private $id_formulaires_reponse;
private $nom;
private $sous_nom;
private $value;
private $sort_value;
private $filter_value;
@ -445,6 +507,7 @@ class cell implements \JsonSerializable{
$this->table = $param['table'] ?? false;
$this->id_formulaires_reponse = $param['id_formulaires_reponse'] ?? false;
$this->nom = $param['nom'];
$this->sous_nom = $param['sous_nom'] ?? '';
$this->value = $param['value'];
$this->sort_value = $param['sort_value'] ?? \textebrut($this->value);
if (function_exists('mb_strtolower')) {
@ -492,7 +555,10 @@ class header extends cell {
* Returne la valeur string, avec le span englobant, pour les crayons
**/
public function jsonSerialize(): string {
$data_col = "$this->type-$this->nom";
$data_col = $this->nom;
if ($this->sous_nom) {
$data_col .= '@@@'.$this->sous_nom;
}
$arrows = "<div data-col='$data_col' class='move-arrows'><a class='left'>&#x2B05;</a> <a class='right'>&#x27A1;</a></div>";
return "$arrows\n\r<div class='header-title'>$this->value</div>";
}
@ -510,6 +576,7 @@ function formidable_ts_json($env) {
}
/**
* Appelle le pipeline formidable_ts_sort_value
* Pour trouver le type de tri

3
paquet.xml

@ -15,6 +15,9 @@
<licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>
<pipeline nom="affiche_gauche" inclure="formidable_ts_pipelines.php" />
<pipeline nom="formidable_ts_sort_value" action="" />
<pipeline nom="formidable_ts_column" inclure="formidable_ts_pipelines.php" />
<pipeline nom="formidable_ts_cell_value" inclure="formidable_ts_pipelines.php" />
<pipeline nom="formidable_ts_cell_value_raw" inclure="formidable_ts_pipelines.php" />
<necessite nom="PHP" compatibilite="[7.0.0;[" />
<necessite nom="formidable" compatibilite="[4.5.1;[" />
<necessite nom="spout" compatibilite="[1.2.2;[" />

Loading…
Cancel
Save