====== Résolution d'une issue 3 : #208 ====== ===== Description de l'issue ===== ==== Lien ==== https://framagit.org/framasoft/framadate/issues/208 ==== Texte ==== **//Permettre la finalisation d'un sondage par l'administrateur//**\\ //Une fois la décision prise, mettre un bouton : Sondage finalisé// * //Permettre à l'admin de sélectionner le choix retenu// * //Permettre à l'admin de mettre un texte justifiant ce choix// * //Eventuellement permettre un lien vers un CALDAV ou un ICS permettant de partager le RDV // ==== Justification du choix ==== Cette fonctionnalité me paraît d'abord tout à fait pertinente pour Framadate. Ensuite, il s'agit d'un travail de développement à mon sens intéressant (car touche à de nombreux fichiers à différents niveaux du projet) et suffisamment complexe. ===== Conseil de Thomas Citharel ===== Les deux premiers points sont à traiter, le troisième est encore en réflexion.\\ Pour résoudre cette issue (les deux premiers points), il est indispensable de la scinder en plusieurs sous-problèmes.\\ La décomposition sera donc la suivante : * Implémentation d'une option admin "//Close the poll//" * Implémentation d'une option admin "//Choose an option//" (quand le sondage est terminé) * Implémentation d'une option admin "//Explain the choice//" (quand le sondage est terminé et qu'un choix a été retenu) ===== Solution apportée : itération 1 ===== **Ajout d'une fonctionnalité admin "//Close the poll//"** ==== Description ==== Une fois un sondage fermé, plus aucune modification ne peut lui être apportée, c'est à dire : * le titre, le nom de l'auteur, la description, la date d'expiration et les paramètres du sondage (mot de passe, visibilité des résultats,...) ne peuvent plus être modifiés côté admin * aucun choix supplémentaire ne peut être ajouté par l'admin * aucun choix ne peut être supprimé par l'admin * aucun vote ne peut être ajouté / modifié / supprimé ni côté admin ni côté public ==== Travail réalisé ==== * Modification de la BDD : ajout d'un attribut ''closed'' à la table ''poll'' (attribut booléen (''TINYINT''), par défault à ''FALSE'' (''0'')) * Ajout d'un fichier de migration : ''AddColumn_closed_In_poll.php'' * Appel à ce nouveau fichier dans le fichier ''migration.php'' * MAJ de la méthode ''update($poll)'' de la classe ''PollRepository'' (pour prendre en compte le nouvel attribut) * Ajout de l'affichage du nouveau paramètre ''closed'' dans ''poll_info.tpl'' (côté admin et public) * Ajout d'un bouton ''Close the poll'' dans ''poll_info.tpl'' (côté admin) * Ajout d'un script de confirmation de fermeture de sondage : ''close_poll.tpl'' (si confirmation, passage de la valeur de ''closed'' à ''TRUE'' (''1'')) * MAJ ''poll_info.tpl'', ''vote_table_classic.tpl'' et ''vote_table_date.tpl'' : prise en compte de la valeur de ''closed'' dans l'affichage ou non des fonctionnalités (cf description) * MAJ du fichier de traduction (''en.json'') ===== Solution apportée : itération 2 ===== **Ajout de deux fonctionnalités admin "//Select the choice made//" et "//Explain the choice//"** ==== Description ==== Une fois un sondage fermé, il est possible de sélectionner le choix retenu (ce choix est unique) par l'administrateur du sondage : une icône apparaît au dessus de chacune des colonnes pour la sélection. La valeur de ce choix est accessible dans les informations sur le sondage, côté admin et côté public. ==== Travail réalisé ==== **Implémentation de "//Select the choice made//"** * Modification de la BDD : ajout d'un attribut ''admin_choice'' à la table ''poll'' (attribut chaîne de caractères (''VARCHAR''), par défault à ''""'' (la chaîne vide)) * Ajout d'un fichier de migration : ''AddColumn_admin_choice_In_poll.php'' * Appel à ce nouveau fichier dans le fichier ''migration.php'' * MAJ de la méthode ''update($poll)'' de la classe ''PollRepository'' (pour prendre en compte le nouvel attribut) * Ajout de l'affichage côté admin et côté public de ''admin_choice'' dans ''poll_info.tpl'' (si le sondage est fermé) * Ajout de l'affichage côté admin de boutons //check// au dessus de chaque colonne pour sélectionner un choix dans ''vote_table_classic.tpl'' et ''vote_table_date.tpl'' (si le sondage est fermé) * Ajout du traitement du clic sur le bouton //check// pour modifier la valeur de ''admin_choice'' dans ''adminstuds.php'' * MAJ du fichier de traduction (''en.json'') **Implémentation de "//Explain the choice//"** * Modification de la BDD : ajout d'un attribut ''admin_choice_exp'' à la table ''poll'' (attribut chaîne de caractères (''VARCHAR''), par défault à ''""'' (la chaîne vide)) * Ajout d'un fichier de migration : ''AddColumn_admin_choice_exp_In_poll.php'' * Appel à ce nouveau fichier dans le fichier ''migration.php'' * MAJ de la méthode ''update($poll)'' de la classe ''PollRepository'' (pour prendre en compte le nouvel attribut) * Ajout de l'affichage côté admin et côté public de ''admin_choice_exp'' dans ''poll_info.tpl'' (si le sondage est fermé) * Ajout d'un bouton //pencil// pour modifier ''admin_choice_exp'' (si le sondage est fermé) * Ajout du traitement du clic sur le bouton //pencil// pour modifier la valeur de ''admin_choice_exp'' dynamiquement dans ''adminstuds.js'' * Ajout traitement de la modification de ''admin_choice_exp'' dans ''adminstuds.php'' * MAJ du fichier de traduction (''en.json'') ===== Visualisation de la solution ===== * Administration d'un sondage ouvert : informations et bouton {{ :txs:framadate-p18:justineissue3:pollInfo-ouvert.png?530 | Nouveau paramètre et bouton dans les infos d'un sondage}} * Confirmation de la fermeture du sondage {{ :txs:framadate-p18:justineissue3:fermeture.png?530 | Confirmation de la fermeture du sondage}} * Administration d'un sondage fermé : informations et sélection d'un choix {{ :txs:framadate-p18:justineissue3:pollInfo-fermé.png?530 | Boutons pour sélectionner un choix au dessus de chaque colonne}} * Administration d'un sondage fermé : justification du choix {{ :txs:framadate-p18:justineissue3:pollInfo-choix-justifié.png?530 | Champ de texte pour expliquer le choix retenu}} ===== Merge request ===== https://framagit.org/framasoft/framadate/merge_requests/325