Commit 4925d1dd authored by THEO GUILLON's avatar THEO GUILLON
Browse files

Merge branch '638-lenteur-lors-du-chargement-de-certaines-pages' into '2.1.3'

Resolve "Lenteur lors du chargement de certaines pages"

See merge request libriciel/pole-citoyens/web-DPO/web-DPO!672
parents c87838e6 41ca72b9
Pipeline #21930 passed with stage
in 1 minute and 50 seconds
......@@ -5,6 +5,6 @@ DB_PASSWORD=webdpo
DB_APP_NAME=webdpo
DB_TEST_NAME=webdpo_test
ADD_DATA_DEV=0
ADD_DATA_DEV=1
TZ=Europe/Paris
......@@ -7,8 +7,12 @@ Le format est basé sur le modèle [Keep a Changelog](http://keepachangelog.com/
=====
### Ajouts
- [#672](https://gitlab.libriciel.fr/libriciel/pole-citoyens/web-DPO/web-DPO/-/issues/672)
Mise en place de la pagination sur les différentes pages permettant de visualiser les différents états des traitements.
### Evolutions
- [#672](https://gitlab.libriciel.fr/libriciel/pole-citoyens/web-DPO/web-DPO/-/issues/672)
Mise en place d'un appel AJAX lors de la visualisation de l'historique d'un traitement
### Corrections
- [#636](https://gitlab.libriciel.fr/libriciel/pole-citoyens/web-DPO/web-DPO/-/issues/636)
......@@ -17,6 +21,8 @@ Le format est basé sur le modèle [Keep a Changelog](http://keepachangelog.com/
- [#634](https://gitlab.libriciel.fr/libriciel/pole-citoyens/web-DPO/web-DPO/-/issues/634)
Réinitialisation des valeurs des champs définissant si une AIPD est obligatoire lorsqu'ils sont cachés
- Correction de l'utilisation des filtres sur les référentiels lors de la visualisation de tous les traitements de l'entité
[2.1.2] - 23-11-2021
=====
......
This diff is collapsed.
......@@ -84,9 +84,9 @@ class BanettesComponent extends Component {
'Valeur' => [
'conditions' => [
'champ_name' => [
'outilnom',
'outilnom',
'finaliteprincipale',
'declarantservice'
// 'declarantservice'
]
],
'fields' => [
......@@ -101,8 +101,8 @@ class BanettesComponent extends Component {
'numero',
'libelle',
'description',
'name_fichier',
'fichier'
// 'name_fichier',
// 'fichier'
]
],
'Referentiel' => [
......
......@@ -41,6 +41,7 @@ class PannelController extends AppController {
'Norme',
'Formulaire',
'Soustraitant',
'Referentiel',
'Responsable',
'Typage',
];
......@@ -62,7 +63,7 @@ class PannelController extends AppController {
parent::beforeFilter();
$action = Inflector::underscore($this->request->params['action']);
$anyone = ['drop_notif', 'index', 'technique', 'valid_notif', 'partage_services'];
$anyone = ['drop_notif', 'index', 'technique', 'valid_notif', 'partage_services', 'ajax_get_history'];
if ($action === 'all_traitements') {
$this->Droits->assertAuthorized([ListeDroit::CONSULTER_ALL_TRAITEMENT]);
......@@ -169,7 +170,7 @@ class PannelController extends AppController {
// En cours de rédaction
$query = $this->Banettes->queryEnCoursRedaction();
$banettes['encours_redaction'] = [
'results' => $this->Fiche->find('all', $query + ['limit' => $limit]),
'results' => $this->getResultTraitement($query, $limit),
'count' => $this->Fiche->find('count', $query),
'nbUserValideur' => $nbUserValideur,
'nbUserConsultant' => $nbUserConsultant,
......@@ -188,7 +189,7 @@ class PannelController extends AppController {
if (!empty($servicesUser)) {
$query = $this->Banettes->queryPartageServices();
$banettes['service'] = [
'results' => $this->Fiche->find('all', $query + ['limit' => $limit]),
'results' => $this->getResultTraitement($query, $limit),
'count' => $this->Fiche->find('count', $query),
'nbUserValideur' => $nbUserValideur,
'nbUserConsultant' => $nbUserConsultant,
......@@ -199,7 +200,7 @@ class PannelController extends AppController {
// En attente
$query = $this->Banettes->queryAttente();
$banettes['attente'] = [
'results' => $this->Fiche->find('all', $query + ['limit' => $limit]),
'results' => $this->getResultTraitement($query, $limit),
'count' => $this->Fiche->find('count', $query),
'nbUserValideur' => $nbUserValideur,
'enumsNormes' => $enumsNormes
......@@ -208,7 +209,7 @@ class PannelController extends AppController {
// Traitement refusés
$query = $this->Banettes->queryRefuser();
$banettes['refuser'] = [
'results' => $this->Fiche->find('all', $query + ['limit' => $limit]),
'results' => $this->getResultTraitement($query, $limit),
'count' => $this->Fiche->find('count', $query),
'enumsNormes' => $enumsNormes
];
......@@ -235,7 +236,7 @@ class PannelController extends AppController {
if ($this->Droits->authorized(ListeDroit::VALIDER_TRAITEMENT)) {
$query = $this->Banettes->queryRecuValidation();
$banettes['recuValidation'] = [
'results' => $this->Fiche->find('all', $query + ['limit' => $limit]),
'results' => $this->getResultTraitement($query, $limit),
'count' => $this->Fiche->find('count', $query),
'nbUserValideur' => $nbUserValideur,
'nbUserConsultant' => $nbUserConsultant,
......@@ -247,7 +248,7 @@ class PannelController extends AppController {
if ($this->Droits->authorized(ListeDroit::VISER_TRAITEMENT)) {
$query = $this->Banettes->queryRecuConsultation();
$banettes['recuConsultation'] = [
'results' => $this->Fiche->find('all', $query + ['limit' => $limit]),
'results' => $this->getResultTraitement($query, $limit),
'count' => $this->Fiche->find('count', $query),
'enumsNormes' => $enumsNormes
];
......@@ -313,7 +314,7 @@ class PannelController extends AppController {
// En cours de rédaction
$query = $this->Banettes->queryEnCoursRedaction();
$banettes['encours_redaction'] = [
'results' => $this->Fiche->find('all', $query + ['limit' => 0]),
'results' => $this->getResultTraitement($query),
'count' => $this->Fiche->find('count', $query),
'nbUserValideur' => $nbUserValideur,
'nbUserConsultant' => $nbUserConsultant,
......@@ -340,7 +341,7 @@ class PannelController extends AppController {
// En cours de rédaction partager avec mes services
$query = $this->Banettes->queryPartageServices();
$banettes['service'] = [
'results' => $this->Fiche->find('all', $query + ['limit' => 0]),
'results' => $this->getResultTraitement($query),
'count' => $this->Fiche->find('count', $query),
'nbUserValideur' => $nbUserValideur,
'nbUserConsultant' => $nbUserConsultant,
......@@ -369,7 +370,7 @@ class PannelController extends AppController {
// En attente
$query = $this->Banettes->queryAttente();
$banettes['attente'] = [
'results' => $this->Fiche->find('all', $query + ['limit' => 0]),
'results' => $this->getResultTraitement($query),
'count' => $this->Fiche->find('count', $query),
'nbUserValideur' => $nbUserValideur,
'enumsNormes' => $this->_enumsNorme()
......@@ -393,7 +394,7 @@ class PannelController extends AppController {
// Traitement refusés
$query = $this->Banettes->queryRefuser();
$banettes['refuser'] = [
'results' => $this->Fiche->find('all', $query + ['limit' => 0]),
'results' => $this->getResultTraitement($query),
'count' => $this->Fiche->find('count', $query),
'enumsNormes' => $this->_enumsNorme()
];
......@@ -422,7 +423,7 @@ class PannelController extends AppController {
// Traitement reçu pour validation
$query = $this->Banettes->queryRecuValidation();
$banettes['recuValidation'] = [
'results' => $this->Fiche->find('all', $query + ['limit' => 0]),
'results' => $this->getResultTraitement($query),
'count' => $this->Fiche->find('count', $query),
'nbUserValideur' => $nbUserValideur,
'nbUserConsultant' => $nbUserConsultant,
......@@ -448,7 +449,7 @@ class PannelController extends AppController {
// Traitement reçu pour consultation
$query = $this->Banettes->queryRecuConsultation();
$banettes['recuConsultation'] = [
'results' => $this->Fiche->find('all', $query + ['limit' => 0]),
'results' => $this->getResultTraitement($query),
'count' => $this->Fiche->find('count', $query),
'enumsNormes' => $this->_enumsNorme()
];
......@@ -468,7 +469,7 @@ class PannelController extends AppController {
// Mes traitements validés et insérés au registre
$query = $this->Banettes->queryArchives();
$banettes['archives'] = [
'results' => $this->Fiche->find('all', $query + ['limit' => 0]),
'results' => $this->getResultTraitement($query),
'count' => $this->Fiche->find('count', $query),
'enumsNormes' => $this->_enumsNorme()
];
......@@ -476,16 +477,23 @@ class PannelController extends AppController {
}
/**
* Fonction appelée pour le composant parcours, permettant d'afficher le parcours parcouru par une fiche et les commentaires liés (uniquement ceux visibles par l'utilisateur)
* Fonction appelée pour le composant parcours, permettant d'afficher le parcours parcouru par une fiche et les
* commentaires liés (uniquement ceux visibles par l'utilisateur)
*
* @param int $id
* @return type
* @return mixed
*
* @access public
* @access private
*
* @created 02/12/2015
* @version V1.0.0
*
* @version V2.1.3
* @modified 24/01/2022
* @author Théo GUILLON <theo.guillon@libriciel.coop>
*/
public function parcours($id) {
private function parcours($id)
{
$this->Droits->assertRecordAuthorized('Fiche', $id);
$parcours = $this->EtatFiche->find('all', [
......@@ -569,7 +577,7 @@ class PannelController extends AppController {
// Etat des traitements passés en ma possession
$query = $this->Banettes->queryConsulte();
$banettes['consulte'] = [
'results' => $this->Fiche->find('all', $query + ['limit' => 0]),
'results' => $this->getResultTraitement($query),
'count' => $this->Fiche->find('count', $query),
'nbUserValideur' => $nbUserValideur,
'enumsNormes' => $this->_enumsNorme()
......@@ -583,11 +591,17 @@ class PannelController extends AppController {
* @param int $id
* @return type
*
* @access public
* @access private
*
* @created 02/12/2015
* @version V1.0.0
*
* @version V2.1.3
* @modified 24/01/2022
* @author Théo GUILLON <theo.guillon@libriciel.coop>
*/
public function getHistorique($id) {
private function getHistorique($id)
{
$this->Droits->assertRecordAuthorized('Fiche', $id);
$historique = $this->Historique->find('all', [
......@@ -630,8 +644,7 @@ class PannelController extends AppController {
* Fonction de suppression d'une notification d'un utilisateur
*
* @access public
* @created 20/01/2016
* @version V1.0.0
* @created 20/01/2016 * @version V1.0.0
*/
public function supprimerLaNotif($idFiche)
{
......@@ -868,7 +881,7 @@ class PannelController extends AppController {
// Initialisation d'un traitement
$query = $this->Banettes->queryInitialisationTraitement();
$banettes['initialisation'] = [
'results' => $this->Fiche->find('all', $query + ['limit' => 0]),
'results' => $this->getResultTraitement($query),
'count' => $this->Fiche->find('count', $query),
'nbUserValideur' => 0,
'nbUserConsultant' => 0,
......@@ -928,12 +941,16 @@ class PannelController extends AppController {
/**
* Visualisation de tous les traitements de l'entité
*
* @return type
* @return void
*
* @access public
*
* @created 12/12/2019
* @version V2.0.0
* @author Théo GUILLON <theo.guillon@libriciel.coop>
*
* @modified 21/01/2022
* @version V2.1.3
*/
public function all_traitements()
{
......@@ -989,6 +1006,11 @@ class PannelController extends AppController {
$conditions['Fiche.norme_id'] = $this->request->data['Filtre']['norme'];
}
// Filtre sur un référentiel
if (!empty($this->request->data['Filtre']['referentiel'])) {
$condition['Fiche.referentiel_id'] = $this->request->data['Filtre']['referentiel'];
}
// Filtre sur les formulaires
if (!empty($this->request->data['Filtre']['formulaire'])) {
$conditions['Fiche.form_id'] = $this->request->data['Filtre']['formulaire'];
......@@ -1149,7 +1171,7 @@ class PannelController extends AppController {
$this->_optionsNormes();
$banettes['allTraitements'] = [
'results' => $this->Fiche->find('all', $query + ['limit' => 0]),
'results' => $this->getResultTraitement($query),
'count' => $this->Fiche->find('count', $query),
'enumsNormes' => $this->_enumsNorme(),
];
......@@ -1211,7 +1233,8 @@ class PannelController extends AppController {
{
$queryNormes = [
'conditions' => ['abroger' => false],
'fields' => ['id', 'norme', 'numero', 'libelle', 'description'],
// 'fields' => ['id', 'norme', 'numero', 'libelle', 'description'],
'fields' => ['id', 'norme', 'numero', 'libelle'],
'order' => ['norme', 'numero']
];
$normes = $this->Norme->find('all', $queryNormes);
......@@ -1227,6 +1250,56 @@ class PannelController extends AppController {
]
);
$this->set(compact('options_normes'));
$options_referentiels = $this->Referentiel->find('list', [
'fields' => [
'id',
'name'
],
'order' => [
'name ASC'
]
]);
$this->set(compact('options_normes', 'options_referentiels'));
}
/**
* @access private
*
* @param $query
* @param int $limit
* @return array
*
* @version V2.1.3
* @created 24/01/2022
* @author Théo GUILLON <theo.guillon@libriciel.coop>
*/
private function getResultTraitement ($query, $limit = 10)
{
$query['limit'] = $limit;
$this->paginate = $query;
return $this->paginate($this->Fiche);
}
/**
* @return void
*
* @version V2.1.3
* @created 24/01/2022
* @author Théo GUILLON <theo.guillon@libriciel.coop>
*/
public function ajax_get_history()
{
if ($this->request->is('POST')) {
$this->layout = 'ajax';
$fiche_id = $this->request->data['fiche_id'];
$data = [
'id' => $fiche_id,
'parcours' => $this->parcours($fiche_id),
'historique' => $this->getHistorique($fiche_id)
];
$this->set($data);
}
}
}
......@@ -313,6 +313,7 @@ class RegistresController extends AppController {
'Fiche' => [
'id',
'created',
'modified',
'numero',
'coresponsable',
'soustraitance',
......@@ -335,7 +336,7 @@ class RegistresController extends AppController {
'champ_name' => [
'outilnom',
'finaliteprincipale',
'declarantservice'
// 'declarantservice'
]
]
],
......
<?php
$id = isset($id) ? $id : null;
$icon = "fa-history";
echo $this->Form->button('<i class="fas '.$icon.' fa-lg"></i>', [
'id' => 'btn_ajax_historique'.$id,
'class' => 'btn boutonList btn-outline-primary borderless',
'title' => __d('pannel', 'pannel.commentaireVoirParcours'),
'escape' => false,
'type' => 'button',
'onclick' => "getHistory('$id')"
]);
?>
<script type="text/javascript">
function getHistory(id) {
let newElement = $('#ajax_list_history_'+id);
if (newElement.is(":hidden") === true && newElement.is(':empty') === true) {
$.ajax({
url: '<?php echo Router::url(['controller' => 'Pannel', 'action' => 'ajax_get_history']);?>',
method: 'POST',
data: {fiche_id: id},
success: function (data) {
newElement.append(data);
newElement.show();
$("#btn_full_history_"+id).click(function () {
$("#full_history_"+id).toggle();
});
},
error: function () {
alert('Erreur lors de la récupération de l\'historique du traitement');
}
});
} else {
if (newElement.is(":hidden") === true) {
newElement.show();
} else {
newElement.hide();
}
}
}
</script>
\ No newline at end of file
<?php
echo $this->Form->button("<i class='fas fa-eye'>&nbsp;</i>" . __d('pannel','pannel.btnVoirHistoriqueComplet'), [
'id' => 'btn_full_history_'.$id,
'type' => 'button',
'class' => 'btn btn-outline-dark',
]);
echo '<ul class="list-group list-historique " id="full_history_'.$id.'" >';
foreach ($historique as $value) {
echo '<li class="list-group-item"><strong>' . $this->Time->format($value['Historique']['created'], FORMAT_DATE_HEURE) . ':</strong> ' . $value['Historique']['content'] . '</li>';
}
echo '</ul>';
\ No newline at end of file
<?php
echo $this->Form->button("<i class='fas fa-eye'>&nbsp;</i>" . __d('pannel','pannel.btnVoirHistoriqueComplet'), [
'type' => 'button',
'class' => 'historique-button btn btn-outline-dark',
'data-value' => $id
]);
echo '<ul class="list-group list-historique" id="historique-fiche' . $id . '" >';
foreach ($historique as $value) {
echo '<li class="list-group-item"><strong>' . $this->Time->format($value['Historique']['created'], FORMAT_DATE_HEURE) . ':</strong> ' . $value['Historique']['content'] . '</li>';
}
echo '</ul>';
......@@ -267,7 +267,7 @@ class BanettesHelper extends AppHelper {
'/EtatFiches/relaunch/#Fiche.id#' => 'fa-reply',
'/fiches/genereTraitementEnCours/#Fiche.id#' => 'fa-cog',
'/fiches/downloadFileTraitement/#Fiche.id#' => 'fa-download',
'/fiches/historique/#Fiche.id#' => 'fa-history',//action virtuelle
// '/fiches/historique/#Fiche.id#' => 'fa-history',//action virtuelle
'/fiches/reponse/#Fiche.id#' => 'fa-reply',//action virtuelle
'#refuser' => 'fa-times',//action virtuelle
'/fiches/reorienter/#Fiche.id#' => 'fa-exchange',//action virtuelle
......@@ -499,11 +499,18 @@ class BanettesHelper extends AppHelper {
$btnGroups = $this->_button('/fiches/genereTraitementEnCours/#Fiche.id#', $result);
}
// $btnGroups .= $this->_button('/fiches/show/#Fiche.id#', $result)
// . $this->_button('/fiches/edit/#Fiche.id#', $result)
// . $this->_button('/fiches/historique/#Fiche.id#', $result, [
// 'onclick' => "$('#listeValidation{$fiche_id}').toggle(); return false;"
// ]);
$btnGroups .= $this->_button('/fiches/show/#Fiche.id#', $result)
. $this->_button('/fiches/edit/#Fiche.id#', $result)
. $this->_button('/fiches/historique/#Fiche.id#', $result, [
'onclick' => "$('#listeValidation{$fiche_id}').toggle(); return false;"
]);
. $this->_View->element('Buttons/ajax_history', [
'id' => $fiche_id
])
;
if ($result['Fiche']['valide'] === true) {
$btnGroups .= $this->_button('/fiches/envoyer/#Fiche.id#', $result)
......@@ -524,9 +531,13 @@ class BanettesHelper extends AppHelper {
$btnGroups = $this->_button('/fiches/genereTraitement/#Fiche.id#', $result)
. $this->_button('/fiches/show/#Fiche.id#', $result)
. $this->_button('/fiches/edit/#Fiche.id#', $result)
. $this->_button('/fiches/historique/#Fiche.id#', $result, [
'onclick' => "$('#listeValidation{$fiche_id}').toggle(); return false;"
]);
// . $this->_button('/fiches/historique/#Fiche.id#', $result, [
// 'onclick' => "$('#listeValidation{$fiche_id}').toggle(); return false;"
// ])
. $this->_View->element('Buttons/ajax_history', [
'id' => $fiche_id
])
;
if ($result['Fiche']['valide'] === true) {
$btnGroups .= $this->_button('/fiches/envoyer/#Fiche.id#', $result)
......@@ -562,8 +573,12 @@ class BanettesHelper extends AppHelper {
}
$btnGroups .= $this->_button('/fiches/show/#Fiche.id#', $result)
. $this->_button('/fiches/historique/#Fiche.id#', $result, ['onclick' => "$('#listeValidation{$fiche_id}').toggle(); return false;"])
. $this->_buttonReorienter($result, $params);
// . $this->_button('/fiches/historique/#Fiche.id#', $result, ['onclick' => "$('#listeValidation{$fiche_id}').toggle(); return false;"])
. $this->_View->element('Buttons/ajax_history', [
'id' => $fiche_id
])
. $this->_buttonReorienter($result, $params)
;
return $btnGroups;
}
......@@ -596,8 +611,14 @@ class BanettesHelper extends AppHelper {
$btnGroups .= $this->_button('/fiches/show/#Fiche.id#', $result)
. $this->_button('/EtatFiches/relaunch/#Fiche.id#', $result)
. $this->_button('/fiches/historique/#Fiche.id#', $result, ['onclick' => "$('#listeValidation{$fiche_id}').toggle(); return false;"])
. $this->_button('/fiches/delete/#Fiche.id#', $result, ['confirm' => __d('pannel', 'pannel.confirmationSupprimerTraitement') . $traitement_name . ' " ?']);
// . $this->_button('/fiches/historique/#Fiche.id#', $result, ['onclick' => "$('#listeValidation{$fiche_id}').toggle(); return false;"])
. $this->_View->element('Buttons/ajax_history', [
'id' => $fiche_id
])
. $this->_button('/fiches/delete/#Fiche.id#', $result, [
'confirm' => __d('pannel', 'pannel.confirmationSupprimerTraitement') . $traitement_name . ' " ?'
])
;
return $btnGroups;
}
......@@ -628,8 +649,12 @@ class BanettesHelper extends AppHelper {
}
return $this->_button('/fiches/show/#Fiche.id#', $result)
.$this->_button('/fiches/'.$action.'/#Fiche.id#', $result)
.$this->_button('/fiches/historique/#Fiche.id#', $result, ['onclick' => "$('#listeValidation{$fiche_id}').toggle(); return false;"]);
. $this->_button('/fiches/'.$action.'/#Fiche.id#', $result)
// . $this->_button('/fiches/historique/#Fiche.id#', $result, ['onclick' => "$('#listeValidation{$fiche_id}').toggle(); return false;"])
. $this->_View->element('Buttons/ajax_history', [
'id' => $fiche_id
])
;
}
/**
......@@ -673,7 +698,10 @@ class BanettesHelper extends AppHelper {
}
$btnGroups .= $this->_button('/fiches/show/#Fiche.id#', $result)
. $this->_button('/fiches/historique/#Fiche.id#', $result, ['onclick' => "$('#listeValidation{$fiche_id}').toggle(); return false;"])
// . $this->_button('/fiches/historique/#Fiche.id#', $result, ['onclick' => "$('#listeValidation{$fiche_id}').toggle(); return false;"])
. $this->_View->element('Buttons/ajax_history', [
'id' => $fiche_id
])
. $reorienter
. $remiseRedaction;
......@@ -707,10 +735,16 @@ class BanettesHelper extends AppHelper {
$btnGroups .= $this->_button('/fiches/show/#Fiche.id#', $result)
. $this->_button('/fiches/edit/#Fiche.id#', $result)
. $this->_button('/fiches/historique/#Fiche.id#', $result, ['onclick' => "$('#listeValidation{$fiche_id}').toggle(); return false;"])
// . $this->_button('/fiches/historique/#Fiche.id#', $result, ['onclick' => "$('#listeValidation{$fiche_id}').toggle(); return false;"])
. $this->_View->element('Buttons/ajax_history', [
'id' => $fiche_id
])
. $this->_button('/fiches/envoyer/#Fiche.id#', $result)
. $this->_menuEnvoyerTraitement('recuValidation', $result, $params)
. $this->_button('#refuser', $result, ['onclick' => "$('#commentaireRefus{$fiche_id}').toggle(); return false;"]);
. $this->_button('#refuser', $result, [
'onclick' => "$('#commentaireRefus{$fiche_id}').toggle(); return false;"
])
;
return $btnGroups;
}
......@@ -746,8 +780,16 @@ class BanettesHelper extends AppHelper {
$btnGroups .= $this->_button('/fiches/edit/#Fiche.id#', $result);
}
$btnGroups .= $this->_button('/fiches/historique/#Fiche.id#', $result, ['onclick' => "$('#listeValidation{$fiche_id}').toggle(); return false;"])
. $this->_button('/fiches/reponse/#Fiche.id#', $result, ['onclick' => "$('#commentaireRepondre{$fiche_id}').toggle(); return false;"]);
// $btnGroups .= $this->_button('/fiches/historique/#Fiche.id#', $result, ['onclick' => "$('#listeValidation{$fiche_id}').toggle(); return false;"])
// . $this->_button('/fiches/reponse/#Fiche.id#', $result, ['onclick' => "$('#commentaireRepondre{$fiche_id}').toggle(); return false;"]);
$btnGroups .= $this->_View->element('Buttons/ajax_history', [
'id' => $fiche_id
])
. $this->_button('/fiches/reponse/#Fiche.id#', $result, [
'onclick' => "$('#commentaireRepondre{$fiche_id}').toggle(); return false;"
])
;