cga...@users.adullact.net
unread,May 31, 2024, 4:03:57 AMMay 31Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to openmairie-...@googlegroups.com
Author: cgarcin
Date: 2024-05-31 10:03:54 +0200 (Fri, 31 May 2024)
New Revision: 1538
Modified:
trunk/
trunk/obj/import_specific.class.php
trunk/tests/023_02_workflow_parametrage_import_candidat.robot
trunk/tests/binary_files/dyn/config.inc.php
Log:
chore(branch) : merge bugfix #10418
Index: trunk
===================================================================
--- trunk 2024-05-31 08:00:19 UTC (rev 1537)
+++ trunk 2024-05-31 08:03:54 UTC (rev 1538)
Property changes on: trunk
___________________________________________________________________
Modified: svn:mergeinfo
## -1,5 +1,6 ##
/branches/10380:1482-1510
/branches/10395:1490-1502
+/branches/10418:1525-1537
/branches/10422:1529-1533
/branches/2.0.0-develop:1098-1107
/branches/2.0.0-develop-BV:713-732
Modified: trunk/obj/import_specific.class.php
===================================================================
--- trunk/obj/import_specific.class.php 2024-05-31 08:00:19 UTC (rev 1537)
+++ trunk/obj/import_specific.class.php 2024-05-31 08:03:54 UTC (rev 1538)
@@ -459,7 +459,7 @@
$form->setSelect("fichier", array(
"constraint" => array(
"size_max" => 8,
- "extension" => ".xml;.txt"
+ "extension" => ".xml"
),
));
// Référence
@@ -771,6 +771,22 @@
// Récupération du chemin d'acès au fichier
$fichier_tmp = str_replace("tmp|", "", $_POST['fichier']);
$path = $this->f->storage->storage->temporary_storage->getPath($fichier_tmp);
+ // Vérifie l'existence du fichier
+ if (empty($path)) {
+ $this->f->displayMessage('error', "Vous n'avez pas selectionné de fichier à importer");
+ return;
+ }
+ // Récupère le XML et vérifie sa validité
+ // Désactive les logs du XML pour ne pas les afficher dans les logs PHP
+ // et gérer l'erreur à la place
+ libxml_use_internal_errors(true);
+ if(($xml = simplexml_load_file($path)) === false) {
+ $this->f->displayMessage('error', "Le fichier n'a pas pu être chargé.");
+ libxml_clear_errors();
+ return;
+ }
+ // Réactive les logs
+ libxml_use_internal_errors(false);
// Récupération de la référence et utilisation pour savoir dans quel
// élément chercher
$reference = $_POST['reference'];
@@ -804,78 +820,94 @@
'obj' => 'election_candidat',
'idx' => 0
));
- // ouverture du XML
- $xml = simplexml_load_file($path);
// Dump de l'objet
$bureau_vote = $xml->election->bureaux_vote->bureau_vote;
$found = false;
- $status = 'valid';
$nouveaux_candidats_crees = 0;
$nouveaux_partis_crees = 0;
$candidats_associes = 0;
$candidats_en_erreur = 0;
- $liste_messages = array();
- foreach($bureau_vote as $bureau) {
- if ($bureau->{$correspondance[$reference]} == $code_ref) {
- // Supprime tous les candidats de l'élection
- if(! $inst_election->supprimer_candidats_election($election)) {
- $status = 'warning';
- $liste_messages[] = __("Les candidats déjà associés à l'élection n'ont pas pu être supprimés.");
- }
- // Récupère ou crée et associe les candidats à l'élection
- foreach($bureau->candidats->cand as $candidat) {
- // Création du parti politique si il n'existe pas déjà
- $ajout_parti_infos = $inst_parti_politique->ajouter_parti_si_non_existant($candidat->cod_nuance->__toString());
- // Compte le nombre de partis ajoutés
- if ($ajout_parti_infos['nouvel_ajout']) {
- $nouveaux_partis_crees++;
- }
+ // Vérifie si il y a bien des bureaux de vote dont le paramétrage peut être
+ // importés et informe l'utilisateur si ce n'est pas le cas.
+ $status = 'error';
+ $liste_messages = array(
+ __('Le fichier ne contiens aucun bureau de vote permettant d\'importer des candidats.')
+ );
- // Création du candidat si il n'existe pas déjà
- $ajout_candidat_infos = $inst_candidat->ajouter_candidat_si_non_existant($candidat->design_can->__toString());
- // Compte le nombre de candidat ajouté
- if ($ajout_candidat_infos['nouvel_ajout']) {
- $nouveaux_candidats_crees++;
+ if (! empty($bureau_vote)) {
+ $status = 'valid';
+ $liste_messages = array();
+ foreach($bureau_vote as $bureau) {
+ if (isset($bureau->{$correspondance[$reference]})
+ && $bureau->{$correspondance[$reference]} == $code_ref) {
+ // Le bureau voulu existe
+ $found = true;
+ // Supprime tous les candidats de l'élection
+ if(! $inst_election->supprimer_candidats_election($election)) {
+ $status = 'warning';
+ $liste_messages[] = __("Les candidats déjà associés à l'élection n'ont pas pu être supprimés.");
}
+ // Vérifie que les informations des candidats sont accessibles
+ if (empty($bureau->candidats->cand)) {
+ // Prépare un message d'erreur à destination de l'utilisateur et stop la boucle
+ $status = 'error';
+ $liste_messages[] = __("Les informations des candidats ne sont pas accessibles.");
+ break;
+ }
+ // Récupère ou crée et associe les candidats à l'élection
+ foreach($bureau->candidats->cand as $candidat) {
+ // Création du parti politique si il n'existe pas déjà
+ $ajout_parti_infos = $inst_parti_politique->ajouter_parti_si_non_existant($candidat->cod_nuance->__toString());
+ // Compte le nombre de partis ajoutés
+ if ($ajout_parti_infos['nouvel_ajout']) {
+ $nouveaux_partis_crees++;
+ }
- // Ajout du candidat à l'élection
- $valF = array(
- 'election_candidat' => '',
- 'election' => $election,
- 'candidat' => $ajout_candidat_infos['id'],
- 'ordre' => $candidat->no_panneau->__toString(),
- 'prefecture' => $candidat->cod_depot->__toString(),
- 'age_moyen' => null,
- 'siege' => null,
- 'age_moyen_com' => null,
- 'siege_com' => null,
- 'couleur' => null,
- 'photo' => null,
- 'parti_politique' => $ajout_parti_infos['id'],
- 'age_moyen_mep' => null,
- 'siege_mep' => null
- );
- if($election_candidat->ajouter($valF) !== true) {
- $candidats_en_erreur++;
- $this->f->addToLog("Echec de l'import du candidat. Description : ".var_export($valF, true));
- $status = 'warning';
- } else {
- $candidats_associes++;
+ // Création du candidat si il n'existe pas déjà
+ $ajout_candidat_infos = $inst_candidat->ajouter_candidat_si_non_existant($candidat->design_can->__toString());
+ // Compte le nombre de candidat ajouté
+ if ($ajout_candidat_infos['nouvel_ajout']) {
+ $nouveaux_candidats_crees++;
+ }
+
+ // Ajout du candidat à l'élection
+ $valF = array(
+ 'election_candidat' => '',
+ 'election' => $election,
+ 'candidat' => $ajout_candidat_infos['id'],
+ 'ordre' => $candidat->no_panneau->__toString(),
+ 'prefecture' => $candidat->cod_depot->__toString(),
+ 'age_moyen' => null,
+ 'siege' => null,
+ 'age_moyen_com' => null,
+ 'siege_com' => null,
+ 'couleur' => null,
+ 'photo' => null,
+ 'parti_politique' => $ajout_parti_infos['id'],
+ 'age_moyen_mep' => null,
+ 'siege_mep' => null
+ );
+ if($election_candidat->ajouter($valF) !== true) {
+ $candidats_en_erreur++;
+ $this->f->addToLog("Echec de l'import du candidat. Description : ".var_export($valF, true));
+ $status = 'warning';
+ } else {
+ $candidats_associes++;
+ }
}
+ $liste_messages[] = __("Nouveaux partis politique ajoutés : $nouveaux_partis_crees");
+ $liste_messages[] = __("Nouveaux candidats ajoutés : $nouveaux_candidats_crees");
+ $liste_messages[] = __("Candidats associés à l'élection : $candidats_associes");
+ $liste_messages[] = __("Candidats dont l'ajout à échoué : $candidats_en_erreur");
+ break;
}
- $found = true;
- $liste_messages[] = __("Nouveaux partis politique ajoutés : $nouveaux_partis_crees");
- $liste_messages[] = __("Nouveaux candidats ajoutés : $nouveaux_candidats_crees");
- $liste_messages[] = __("Candidats associés à l'élection : $candidats_associes");
- $liste_messages[] = __("Candidats dont l'ajout à échoué : $candidats_en_erreur");
- break;
}
+ if (!$found)
+ {
+ $liste_messages[] = __("La référence n'est pas présente dans le fichier");
+ $status = 'warning';
+ }
}
- if (!$found)
- {
- $liste_messages[] = __("La référence n'est pas présente dans le fichier");
- $status = 'warning';
- }
$this->f->displayMessage($status, implode('</br>', $liste_messages));
}
Modified: trunk/tests/023_02_workflow_parametrage_import_candidat.robot
===================================================================
--- trunk/tests/023_02_workflow_parametrage_import_candidat.robot 2024-05-31 08:00:19 UTC (rev 1537)
+++ trunk/tests/023_02_workflow_parametrage_import_candidat.robot 2024-05-31 08:03:54 UTC (rev 1538)
@@ -86,3 +86,12 @@
# Vérifie que le nouveau candidat a bien été ajouté
Use Simple Search Tous ${lib_new_candidat}
Element Should Contain css=.tab-tab ${lib_new_candidat}
+
+Import des candidats via un fichier XML - Format de fichier incorrect
+
+ # Accède à l'élection
+ Depuis le contexte election ${id_election}
+ # Accède au formulaire d'import
+ Click On Form Portlet Action election import_candidats
+ # Sélectionne un fichier n'ayant pas la bonne extension et vérifie le message d'erreur
+ Add File and Expect Error Message Contain fichier candidat1.png Le fichier n'est pas conforme à la liste des extension(s) autorisée(s)
Modified: trunk/tests/binary_files/dyn/config.inc.php
===================================================================
--- trunk/tests/binary_files/dyn/config.inc.php 2024-05-31 08:00:19 UTC (rev 1537)
+++ trunk/tests/binary_files/dyn/config.inc.php 2024-05-31 08:03:54 UTC (rev 1538)
@@ -1,4 +1,4 @@
<?php
$config = array();
-$config["upload_extension"] = ".gif;.jpg;.jpeg;.png;.txt;.pdf;.csv;.xml";
+$config["upload_extension"] = ".gif;.jpg;.jpeg;.png;.txt;.pdf;.csv;.xml;";
?>