2022-05-04 09:16:50 +02:00
package MEPTL ;
import java.io.BufferedWriter ;
import java.io.IOException ;
import java.nio.charset.StandardCharsets ;
import java.nio.file.Files ;
import java.nio.file.Path ;
import java.nio.file.Paths ;
import java.text.DateFormat ;
import java.time.LocalDateTime ;
import java.time.format.DateTimeFormatter ;
import java.time.format.FormatStyle ;
import java.util.ArrayList ;
2022-12-16 17:50:51 +01:00
import java.util.Collections ;
2022-05-04 09:16:50 +02:00
import java.util.Date ;
2022-12-16 17:50:51 +01:00
import java.util.Enumeration ;
2022-05-04 09:16:50 +02:00
import java.util.regex.Matcher ;
import java.util.regex.Pattern ;
import cXML.node ;
public class feedbacks {
public feedbacks ( ) {
}
/ * *
* Ecriture du fichier feedback . < br >
* Si zip = true alors pour archive . < br >
* Si zip = false alors pour fichier html . < br >
* < br >
* @param nodana : node de l ' analyse de l ' étudiant .
* @param verif : node de vérification ( ensemble des vérifications des historiques )
* @parame zip : Pour créer un fichier html ou une archive zip .
* @return
* @throws IOException
* /
2022-06-09 17:49:22 +02:00
public static StringBuilder feedback ( node nodana , node verif , Boolean zip , Boolean TestFichierAnalyse ) throws IOException {
2022-05-04 09:16:50 +02:00
System . getProperty ( " file.encoding " , " UTF-8 " ) ;
Date aujourdhui = new Date ( ) ;
int number_match = 2 ;
int mini_modification = 0 ;
boolean plagiat = false ;
boolean copiercoller = false ;
boolean pasAssezDeModification = false ;
boolean baremeABC = false ;
boolean producteur = false ;
String SuiteBureautique = " " ;
String VersionLibreOffice = " " ;
String SystemeStudent = " " ;
node verifStudent = null ;
if ( ( commandes . verifHisto | | commandes . verifHisto2 ) ) { //&&commandes.ecritNoteCSV&&commandes.fourniCSV
if ( verif . getAttributs ( ) . get ( " number_match " ) ! = null ) number_match = Integer . valueOf ( verif . getAttributs ( ) . get ( " number_match " ) ) ;
if ( verif . getAttributs ( ) . get ( " mini_number_modification " ) ! = null ) mini_modification = Integer . valueOf ( verif . getAttributs ( ) . get ( " mini_number_modification " ) ) ;
//verification du plagiat
verifStudent = verif . retourneFirstNodeByNameAndAttributValue ( " fichier " , " dossier " , nodana . retourneFirstEnfantsByName ( " ouverture " ) . getAttributs ( ) . get ( " dossier " ) ) ;
if ( verifStudent ! = null ) {
if ( verifStudent . getAttributs ( ) . get ( " filename " ) . equals ( nodana . retourneFirstEnfantsByName ( " ouverture " ) . getAttributs ( ) . get ( " filename " ) ) ) {
if ( Integer . valueOf ( verifStudent . getAttributs ( ) . get ( " nombre_correspondances_consecutives " ) ) > number_match ) plagiat = true ;
if ( ! verifStudent . getAttributs ( ) . get ( " first_modification_identique " ) . equals ( " null " ) & & Integer . valueOf ( verifStudent . getAttributs ( ) . get ( " nombre_correspondances_consecutives " ) ) > = number_match ) plagiat = true ;
if ( verifStudent . getAttributs ( ) . get ( " copier_coller " ) ! = null ) copiercoller = true ;
if ( Integer . valueOf ( verifStudent . getAttributs ( ) . get ( " nombre_modification " ) ) < = mini_modification ) pasAssezDeModification = true ;
}
}
}
if ( nodana . retourneFirstEnfantsByName ( " bodyetnotation " ) . getAttributs ( ) . get ( " baremeABC " ) ! = null ) {
try {
baremeABC = Boolean . valueOf ( nodana . retourneFirstEnfantsByName ( " bodyetnotation " ) . getAttributs ( ) . get ( " baremeABC " ) ) ;
} catch ( Exception e ) {
System . out . println ( " Problème avec la valeur binaire de l'attribut baremeABC. " ) ;
}
}
StringBuilder fichier = new StringBuilder ( ) ;
//ajoute le chemin vers le feedback dans le node d'analyse
//nodana.retourneFirstEnfantsByName("ouverture").getAttributs().put("feedback", patch + "/" + cheminFeedBack);
// auteur du sujet
String auteurSujet = nodana . retourneFirstEnfantsByName ( " ouverture " ) . getAttributs ( ) . get ( " auteur " ) ;
//création du feedback
fichier . append ( " <!DOCTYPE HTML PUBLIC \" -//W3C//DTD HTML 4.0 Transitional//EN \" > \ r "
+ " <html> \ r "
+ " <head> \ r "
+ " <meta http-equiv= \" content-type \" content= \" text/html; charset=UTF-8 \" /> \ r "
2022-05-09 21:22:50 +02:00
+ " <title>Fichier généré par AnalyseWriter - Développeur : Pablo Rodriguez</title> \ r " ) ;
2022-05-04 09:16:50 +02:00
2022-05-09 21:22:50 +02:00
fichier . append ( " \ r<meta name= \" generator \" content= \" AnalyseWriter " + commandes . version + " \" /> "
+ " \ r<meta name= \" author \" content= \" " + auteurSujet + " \" /> "
+ " \ r<meta name= \" created \" content= \" " + nodana . retourneFirstEnfantsByName ( " ouverture " ) . getAttributs ( ) . get ( " date " ) + " \" /> " ) ;
2022-05-04 09:16:50 +02:00
2022-05-09 21:22:50 +02:00
fichier . append ( HTML . getStyleCSS ( ) ) ;
2022-05-04 09:16:50 +02:00
2022-05-09 21:22:50 +02:00
fichier . append ( " \ r</head> \ r " ) ;
2022-05-04 09:16:50 +02:00
fichier . append ( " <body lang= \" fr-FR \" link= \" #000080 \" vlink= \" #800000 \" dir= \" ltr \" > \ r " ) ;
fichier . append ( " <div class= \" header \" > " ) ;
if ( ! commandes . noLogo ) {
if ( ! commandes . newLogo ) {
fichier . append ( " <h1 id= \" #top \" class= \" western \" align= \" center \" style= \" margin-left: 1cm; margin-right: 1cm; border: 2.00pt solid #ffffff; padding: 0.4cm 0.1cm; background: #505050 \" > \ r \ n " +
" <font color= \" #ffffff \" size= \" 6 \" style= \" font-size: 26pt \" >Feedback - AnalyseWriter - format ODF 1.2<br> " + HTML . imgLogos ( ) + " </font></h1> \ r " ) ;
} else {
fichier . append ( " <h1 id= \" #top \" class= \" western \" align= \" center \" style= \" margin-left: 1cm; margin-right: 1cm; border: 2.00pt solid #ffffff; padding: 0.4cm 0.1cm; background: #505050 \" > \ r \ n " +
" <font color= \" #ffffff \" size= \" 6 \" style= \" font-size: 26pt \" >Feedback - AnalyseWriter - format ODF 1.2<br> " + commandes . contenuFichierSVG + " </font></h1> \ r " ) ;
}
} else {
fichier . append ( " <h1 id= \" #top \" class= \" western \" align= \" center \" style= \" margin-left: 1cm; margin-right: 1cm; border: 2.00pt solid #ffffff; padding: 0.4cm 0.1cm; background: #505050 \" > \ r \ n " +
" <font color= \" #ffffff \" size= \" 6 \" style= \" font-size: 26pt \" >Feedback - AnalyseWriter - format ODF 1.2<br></font></h1> \ r " ) ;
}
2022-11-30 18:34:33 +01:00
//**********
//** Note **
//**********
2022-05-04 09:16:50 +02:00
node ouvre = nodana . retourneFirstEnfantsByName ( " ouverture " ) ;
String noteFrom = ouvre . getAttributs ( ) . get ( " notefrom " ) ;
node notation = nodana . retourneFirstEnfantsByName ( " bodyetnotation " ) ;
if ( ! baremeABC ) {
if ( noteFrom = = null ) noteFrom = " 20 " ;
if ( ! commandes . noNote ) if ( ! plagiat & & ! copiercoller & & ! pasAssezDeModification ) fichier . append ( " <p><spanpablo> " + notation . getAttributs ( ) . get ( " note " ) + " / " + noteFrom + " <br><span style= \" color:blue; font-size:30px \" > " + ouvre . getAttributs ( ) . get ( " metaSujet " ) + " </span></spanpablo></p> \ r " ) ;
if ( plagiat | | copiercoller | | pasAssezDeModification ) {
notation . getAttributs ( ) . put ( " note " , " 0 " ) ;
String AffichageNote = " " ;
if ( plagiat ) AffichageNote = " Plagiat " ;
if ( copiercoller ) AffichageNote = AffichageNote + " Copier Coller " ;
if ( pasAssezDeModification ) AffichageNote = AffichageNote + " Pas assez de modification " ;
if ( ! commandes . noNote ) fichier . append ( " <p><spanpablo> " + AffichageNote + " / " + noteFrom + " <br><span style= \" color:blue; font-size:30px \" > " + ouvre . getAttributs ( ) . get ( " metaSujet " ) + " </span></spanpablo></p> \ r " ) ;
}
} else {
String imageNote = " " ;
switch ( notation . getAttributs ( ) . get ( " noteABC " ) ) {
case " A " :
imageNote = HTML . NoteA ( ) ;
break ;
case " B " :
imageNote = HTML . NoteB ( ) ;
break ;
case " C " :
imageNote = HTML . NoteC ( ) ;
break ;
case " D " :
imageNote = HTML . NoteD ( ) ;
break ;
case " E " :
imageNote = HTML . NoteE ( ) ;
break ;
default :
imageNote = " " ;
break ;
}
if ( ! commandes . noNote ) if ( ! plagiat & & ! copiercoller & & ! pasAssezDeModification ) fichier . append ( " <p><spanpablo> " + imageNote + " <br><span style= \" color:blue; font-size:30px \" > " + ouvre . getAttributs ( ) . get ( " metaSujet " ) + " </span></spanpablo></p> \ r " ) ;
if ( plagiat | | copiercoller | | pasAssezDeModification ) {
notation . getAttributs ( ) . put ( " note " , " 0 " ) ;
notation . getAttributs ( ) . put ( " noteABC " , " E " ) ;
String AffichageNote = " " ;
if ( plagiat ) AffichageNote = " Plagiat " ;
if ( copiercoller ) AffichageNote = AffichageNote + " Copier Coller " ;
if ( pasAssezDeModification ) AffichageNote = AffichageNote + " Pas assez de modification " ;
if ( ! commandes . noNote ) fichier . append ( " <p><spanpablo> " + AffichageNote + " / " + " <br><span style= \" color:blue; font-size:30px \" > " + ouvre . getAttributs ( ) . get ( " metaSujet " ) + " </span></spanpablo></p> \ r " ) ;
}
}
//producteur
if ( ouvre . getAttributs ( ) . get ( " producteur " ) ! = null ) {
try {
producteur = true ;
String [ ] decompose = ouvre . getAttributs ( ) . get ( " producteur " ) . split ( " / " ) ;
SuiteBureautique = decompose [ 0 ] ;
VersionLibreOffice = decompose [ 1 ] . substring ( 0 , decompose [ 1 ] . lastIndexOf ( " $ " ) ) ;
SystemeStudent = decompose [ 1 ] . substring ( decompose [ 1 ] . lastIndexOf ( " $ " ) + 1 , decompose [ 1 ] . lastIndexOf ( " " ) ) ;
} catch ( Exception e ) {
System . out . println ( " Problème avec l'attribut producteur. " ) ;
} finally {
}
}
//**********************
//** Les informations **
//**********************
// date d'analyse, dossier étudiant, auteur sujet, date de la dernière modificatio, lien, algorithme
DateFormat mediumDateFormat = DateFormat . getDateTimeInstance ( DateFormat . MEDIUM , DateFormat . MEDIUM ) ;
LocalDateTime dateTimeModif = null ;
String dateModif = " " ;
if ( ! ouvre . getAttributs ( ) . get ( " dateModification " ) . isEmpty ( ) ) {
try {
dateTimeModif = LocalDateTime . parse ( ouvre . getAttributs ( ) . get ( " dateModification " ) ) ;
dateModif = dateTimeModif . format ( DateTimeFormatter . ofLocalizedDateTime ( FormatStyle . MEDIUM ) ) ;
} catch ( Exception e ) {
System . out . println ( e . toString ( ) ) ;
}
}
fichier . append ( " <h4>Date d'analyse : " + mediumDateFormat . format ( aujourdhui ) + " <br> " ) ;
fichier . append ( " Dossier étudiant : <span style= \" color:blue \" > " + ouvre . getAttributs ( ) . get ( " dossier " ) + " </span><br> " ) ;
fichier . append ( " Nom du fichier : <span style= \" color:blue \" > " + ouvre . getAttributs ( ) . get ( " filename " ) + " </span><br> " ) ;
fichier . append ( " Date de la dernière modification du fichier analysé : <span style= \" color:purple \" > " + dateModif + " </span><br> " ) ;
fichier . append ( " Durée d'édition du fichier analysé : <span style= \" color:purple \" > " + meptl . traitementDureeEdition ( ouvre . getAttributs ( ) . get ( " dureeEdition " ) + " </span><br> " ) ) ;
if ( producteur ) {
fichier . append ( " Suite de bureautique de l'étudiant : <span style= \" color:coral; \" > " + SuiteBureautique + " </span> " ) ;
fichier . append ( " - Version : <span style= \" color:coral; \" > " + VersionLibreOffice + " </span> " ) ;
fichier . append ( " - Système : <span style= \" color:coral; \" > " + SystemeStudent + " </span><br> " ) ;
}
fichier . append ( " <br> " ) ;
if ( ! auteurSujet . isEmpty ( ) ) { fichier . append ( " Sujet créé par : <span style= \" color:indigo \" > " + auteurSujet + " </span><br> " ) ; }
fichier . append ( " Hash du fichier analyse : <span style= \" color:red \" > " + ouvre . getAttributs ( ) . get ( " hash " ) + " </span><br> " ) ;
fichier . append ( " Nom du fichier analyse : <span style= \" color:red \" > " + commandes . nameSujet + " </span><br> " ) ;
fichier . append ( " Titre de l'exercice : <span style= \" color:red \" > " + ouvre . getAttributs ( ) . get ( " titre " ) + " </span><br> " ) ;
2022-12-16 17:50:51 +01:00
fichier . append ( " Distance de Levenshtein : <span style= \" color:red \" > " + ouvre . getAttributs ( ) . get ( " tolerance_text " ) + " </span><br> " ) ;
2022-05-04 09:16:50 +02:00
if ( ! commandes . noNote ) {
if ( ! plagiat & & ! copiercoller & & ! pasAssezDeModification ) fichier . append ( " Méthode : <div class= \" tooltip \" ><font color= \" #0000ff \" >Progression " + ouvre . getAttributs ( ) . get ( " progression " ) + " </font><span class= \" tooltiptext \" >Explication<br> " + HTML . imgProgression ( ) + " </span></div> - Pourcentage correcte : " + nodana . retourneFirstEnfantsByName ( " bodyetnotation " ) . getAttributs ( ) . get ( " proportioncorrect " ) + " <br> " ) ;
if ( plagiat | | copiercoller | | pasAssezDeModification ) {
String AffichageNote = " " ;
if ( plagiat ) AffichageNote = " Plagiat " ;
if ( copiercoller ) AffichageNote = AffichageNote + " Copier Coller " ;
if ( pasAssezDeModification ) AffichageNote = AffichageNote + " Pas assez de modification " ;
fichier . append ( " Méthode : <div class= \" tooltip \" ><font color= \" #0000ff \" >Progression " + ouvre . getAttributs ( ) . get ( " progression " ) + " </font><span class= \" tooltiptext \" >Explication<br> " + HTML . imgProgression ( ) + " </span></div> - Pourcentage correcte : " + AffichageNote + " <br> " ) ;
}
if ( baremeABC ) {
fichier . append ( " Barème : <div class= \" tooltip \" ><font color= \" #0000ff \" >0% → E → " + Math . round ( Double . valueOf ( notation . getAttributs ( ) . get ( " BorneE " ) ) * 100 ) + " % → D → " + Math . round ( Double . valueOf ( notation . getAttributs ( ) . get ( " BorneD " ) ) * 100 ) + " % → C → " + Math . round ( Double . valueOf ( notation . getAttributs ( ) . get ( " BorneC " ) ) * 100 ) + " % → B → " + Math . round ( Double . valueOf ( notation . getAttributs ( ) . get ( " BorneB " ) ) * 100 ) + " % → A → 100%</font><span class= \" tooltiptext \" >Prendre en compte le coefficient de progression.</span></div> " ) ;
}
}
if ( ouvre . getAttributs ( ) . get ( " link_sujet " ) ! = null ) {
String linkSujet = ouvre . getAttributs ( ) . get ( " link_sujet " ) ;
Matcher m = Pattern . compile ( " ^https://.{1,}|^http://.{1,} " ) . matcher ( linkSujet ) ;
if ( m . find ( ) ) { fichier . append ( " <br><a href= \" " + linkSujet + " \" target= \" _blank \" >Lien vers le sujet</a><br> " ) ; }
}
if ( ouvre . getAttributs ( ) . get ( " link_help " ) ! = null ) {
String linkSujet = ouvre . getAttributs ( ) . get ( " link_help " ) ;
Matcher m = Pattern . compile ( " ^https://.{1,}|^http://.{1,} " ) . matcher ( linkSujet ) ;
if ( m . find ( ) ) { fichier . append ( " <br><a href= \" " + linkSujet + " \" target= \" _blank \" >Lien vers le support</a><br> " ) ; }
}
fichier . append ( " <br><font color= \" #808080 \" style= \" font-size: 9pt \" ><i>Analysé avec la version : " + commandes . version + " <br></h4> " ) ;
fichier . append ( HTML . SautLigne ( ) ) ;
fichier . append ( " </div> " ) ;
2022-12-01 13:04:20 +01:00
//ajoute le menu si pas de détails
if ( ! commandes . noDetail ) {
fichier . append ( HTML . getHTMLmenu ( nodana . retourneFirstEnfantsByName ( " menu " ) . getNodes ( ) ) ) ;
}
2022-05-04 09:16:50 +02:00
//Les erreurs
node errors = nodana . retourneFirstEnfantsByName ( " erreurs " ) ;
if ( Boolean . valueOf ( errors . getAttributs ( ) . get ( " oneError " ) ) ) {
fichier . append ( HTML . SautLigne ( ) ) ;
if ( Boolean . valueOf ( errors . getAttributs ( ) . get ( " manqueHistorique " ) ) ) fichier . append ( HTML . Paragraph_classp5 ( " ERREUR : Il n'y a pas d'historique des modifications dans ce fichier. Le fichier n'a pas été modifié ou il a été réïnitialisé.<br>L'analyse de l'historique n'a pas pu se faire. " ) ) ;
if ( Boolean . valueOf ( errors . getAttributs ( ) . get ( " manqueCreationDate " ) ) ) fichier . append ( HTML . Paragraph_classp5 ( " ERREUR : La date de création du fichier a été supprimée. Le fichier a été réïnitialisé ou ce n'est pas le fichier du sujet. " ) ) ;
if ( Boolean . valueOf ( errors . getAttributs ( ) . get ( " manqueValeurCreationDate " ) ) ) fichier . append ( HTML . Paragraph_classp5 ( " ERREUR : Ce n'est pas la bonne date de création du fichier. Le fichier a été réïnitialisé ou ce n'est pas le fichier du sujet. " ) ) ;
if ( Boolean . valueOf ( errors . getAttributs ( ) . get ( " manqueMetaSujet " ) ) ) fichier . append ( HTML . Paragraph_classp5 ( " ERREUR : La méta donnée \" Sujet \" dans les propriétés du fichier a été supprimée ou renommée. " ) ) ;
if ( Boolean . valueOf ( errors . getAttributs ( ) . get ( " manqueValeurMetaSujet " ) ) ) fichier . append ( HTML . Paragraph_classp5 ( " ERREUR : La valeur de la méta donnée \" Sujet \" dans les propriétés du fichier n'est pas \" " + nodana . retourneFirstEnfantsByName ( " ouverture " ) . getAttributs ( ) . get ( " metaSujet " ) ) + " . \" " ) ;
if ( Boolean . valueOf ( errors . getAttributs ( ) . get ( " manqueInitialCreator " ) ) ) fichier . append ( HTML . Paragraph_classp5 ( " ERREUR : La valeur de la méta donnée \" initial-creator \" dans les propriétés du fichier n'est pas \" " + nodana . retourneFirstEnfantsByName ( " ouverture " ) . getAttributs ( ) . get ( " Initial_Creator " ) ) + " . \" " ) ;
}
//plagiat
if ( plagiat ) if ( verifStudent ! = null ) {
fichier . append ( HTML . SautLigne ( ) ) ;
ArrayList < node > correspondance = verifStudent . retourneEnfantsByName ( " correspondance " , new ArrayList < node > ( ) ) ;
for ( int j = 0 ; j < correspondance . size ( ) ; j + + ) {
fichier . append ( HTML . Paragraph_classp5 ( " Correspondance à la date= " + correspondance . get ( j ) . getAttributs ( ) . get ( " date " ) + " avec l'étudiant " + correspondance . get ( j ) . getAttributs ( ) . get ( " Avec_etudiant " ) ) ) ;
}
}
fichier . append ( HTML . SautLigne ( ) ) ;
if ( ! plagiat & & ! copiercoller & & ! pasAssezDeModification ) {
//Ajoute de commentaire de l'exercice
fichier . append ( HTML . H3 ( nodana . getContenu ( ) . get ( 0 ) ) . replace ( " -NewLine- " , " <br> " ) ) ;
fichier . append ( HTML . SautLigne ( ) ) ;
2022-05-10 21:02:22 +02:00
//**************************************
//** Table de synthèse avec les liens **
//***************************************
2022-05-04 09:16:50 +02:00
fichier . append ( HTML . H2 ( " Synthèse " ) ) ;
fichier . append ( HTML . TableEnteteTableurSynthese ( ) ) ;
2022-05-10 21:02:22 +02:00
fichier = SyntheseTable ( nodana , fichier ) ;
2022-05-04 09:16:50 +02:00
2022-12-01 13:04:20 +01:00
if ( ! commandes . noDetail ) {
2022-12-17 17:11:22 +01:00
//Ecriture des détails de l'évaluation
Enumeration < node > EnuNod = Collections . enumeration ( nodana . retourneFirstEnfantsByName ( " evaluation " ) . getNodes ( ) ) ;
2022-12-16 17:50:51 +01:00
while ( EnuNod . hasMoreElements ( ) ) {
node nod = EnuNod . nextElement ( ) ;
if ( nod . isClose ( ) ) {
fichier . append ( HTML . Table ( nod ) ) ;
}
}
2022-12-01 13:04:20 +01:00
2022-12-16 17:50:51 +01:00
2022-05-04 09:16:50 +02:00
}
2022-12-01 13:04:20 +01:00
2022-05-04 09:16:50 +02:00
fichier . append ( " <p><br><br></p> " ) ;
}
2022-11-30 18:34:33 +01:00
//************
//** footer **
//************
2022-05-04 09:16:50 +02:00
fichier . append ( " <div class= \" footer \" > " ) ;
fichier . append ( " <font color= \" #808080 \" style= \" font-size: 10pt \" ><i>analyseWriter - P. Rodriguez (université d'Artois) - Licence GPL v3.0 - analysé avec la version : " + commandes . version + " - " ) ;
fichier . append ( " Fichier d'analyse créé avec la version : " + ouvre . getAttributs ( ) . get ( " version " ) + " </i></font> " ) ;
fichier . append ( " </div> " ) ;
fichier . append ( " <script> " ) ;
fichier . append ( " window.onscroll = function() {myFunction()}; " ) ;
fichier . append ( " var navbar = document.getElementById( \" navbar \" ); " ) ;
fichier . append ( " var sticky = navbar.offsetTop; " ) ;
fichier . append ( " function myFunction() { " ) ;
fichier . append ( " if (window.pageYOffset >= sticky) { " ) ;
fichier . append ( " navbar.classList.add( \" sticky \" ) " ) ;
fichier . append ( " } else { " ) ;
fichier . append ( " navbar.classList.remove( \" sticky \" ); " ) ;
fichier . append ( " } " ) ;
fichier . append ( " } \ r \ n " ) ;
fichier . append ( " function toggleMenu() { \ r \ n " +
" var menuBox0 = document.getElementById('menu-box0'); \ r \ n " +
" var menuBox1 = document.getElementById('menu-box1'); \ r \ n " +
" var menuBox2 = document.getElementById('menu-box2'); \ r \ n " +
" var menuBox3 = document.getElementById('menu-box3'); \ r \ n " +
" var menuBox4 = document.getElementById('menu-box4'); \ r \ n " +
" var menuBox5 = document.getElementById('menu-box5'); \ r \ n " +
" \ r \ n " +
" if(menuBox0.style.display == \" block \" ) { " +
" menuBox0.style.display = \" none \" ; \ r \ n " +
" } \ r \ n " +
" else { " +
" menuBox0.style.display = \" block \" ; \ r \ n " +
" } \ r \ n " +
" \ r \ n " +
" if(menuBox1.style.display == \" block \" ) { " +
" menuBox1.style.display = \" none \" ; \ r \ n " +
" } \ r \ n " +
" else { " +
" menuBox1.style.display = \" block \" ; \ r \ n " +
" } \ r \ n " +
" \ r \ n " +
" if(menuBox2.style.display == \" block \" ) { " +
" menuBox2.style.display = \" none \" ; \ r \ n " +
" } \ r \ n " +
" else { " +
" menuBox2.style.display = \" block \" ; \ r \ n " +
" } \ r \ n " +
" \ r \ n " +
" if(menuBox3.style.display == \" block \" ) { " +
" menuBox3.style.display = \" none \" ; \ r \ n " +
" } \ r \ n " +
" else { " +
" menuBox3.style.display = \" block \" ; \ r \ n " +
" } \ r \ n " +
" if(menuBox4.style.display == \" block \" ) { " +
" menuBox4.style.display = \" none \" ; \ r \ n " +
" } \ r \ n " +
" else { " +
" menuBox4.style.display = \" block \" ; \ r \ n " +
" } \ r \ n " +
" if(menuBox5.style.display == \" block \" ) { " +
" menuBox5.style.display = \" none \" ; \ r \ n " +
" } \ r \ n " +
" else { " +
" menuBox5.style.display = \" block \" ; \ r \ n " +
" } \ r \ n " +
" } " ) ;
fichier . append ( " </script> " ) ;
fichier . append ( " </body> \ r " ) ;
fichier . append ( " </html> " ) ;
if ( ! zip ) {
//nom du fichier feedback
String metaS = nodana . retourneFirstEnfantsByName ( " ouverture " ) . getAttributs ( ) . get ( " metaSujet " ) ;
if ( metaS . equals ( " ? " ) ) metaS = " metaSujet-inconnu " ;
if ( metaS . isEmpty ( ) ) metaS = " metaSujet-inconnu " ;
String cheminFeedBack = nodana . retourneFirstEnfantsByName ( " ouverture " ) . getAttributs ( ) . get ( " dossier " ) + " -DateLong " + aujourdhui . getTime ( ) + " - " + metaS ;
if ( ! commandes . noNote & & ! baremeABC ) {
if ( ! plagiat & & ! copiercoller ) cheminFeedBack = cheminFeedBack + " - " + nodana . retourneFirstEnfantsByName ( " bodyetnotation " ) . getAttributs ( ) . get ( " note " ) + " .html " ;
if ( plagiat ) cheminFeedBack = cheminFeedBack + " - plagiat.html " ;
if ( copiercoller ) cheminFeedBack = cheminFeedBack + " - copier-coller.html " ;
if ( pasAssezDeModification ) cheminFeedBack = cheminFeedBack + " - pas assez de modification.html " ;
}
if ( ! commandes . noNote & & baremeABC ) {
if ( ! plagiat ) cheminFeedBack = cheminFeedBack + " - " + nodana . retourneFirstEnfantsByName ( " bodyetnotation " ) . getAttributs ( ) . get ( " noteABC " ) + " .html " ;
if ( copiercoller ) cheminFeedBack = cheminFeedBack + " - copier-coller.html " ;
if ( plagiat ) cheminFeedBack = cheminFeedBack + " - plagiat.html " ;
if ( pasAssezDeModification ) cheminFeedBack = cheminFeedBack + " - pas assez de modification.html " ;
}
if ( commandes . noNote ) {
cheminFeedBack = cheminFeedBack + " .html " ;
}
// Chemin vers le dossier de destination
Path outputFilePath = Paths . get ( commandes . path + " / " + cheminFeedBack ) ;
if ( commandes . fourniDossierDestination ) outputFilePath = Paths . get ( commandes . path + " / " + commandes . pathDestination + " / " + cheminFeedBack ) ;
2022-06-09 17:49:22 +02:00
if ( ! TestFichierAnalyse ) {
BufferedWriter fichier1 = Files . newBufferedWriter ( outputFilePath , StandardCharsets . UTF_8 ) ;
//ajoute le chemin vers le feedback dans le node d'analyse
nodana . retourneFirstEnfantsByName ( " ouverture " ) . getAttributs ( ) . put ( " feedback " , commandes . path + " / " + cheminFeedBack ) ;
fichier1 . append ( fichier . toString ( ) ) ;
fichier1 . close ( ) ;
//affichage dans la console
if ( ! commandes . fourniDossierDestination ) System . out . println ( " \ n \ t The feedback file has been written. \ n \ t " + commandes . path + " \\ " + cheminFeedBack ) ;
if ( commandes . fourniDossierDestination ) System . out . println ( " \ n \ t The feedback file has been written. \ n \ t " + commandes . path + " \\ " + commandes . pathDestination + " \\ " + cheminFeedBack ) ;
}
2022-05-04 09:16:50 +02:00
}
return fichier ;
}
2022-05-10 21:02:22 +02:00
private static StringBuilder SyntheseTable ( node nodana , StringBuilder fichier ) {
// String IdError = ""; // permet de récupérer les id des menu ou la proportioncorrect est NaN. (à cause de l'attribut analyseStyle=true)
for ( int k = 0 ; k < nodana . getNodes ( ) . size ( ) ; k + + ) {
if ( nodana . getNodes ( ) . get ( k ) . getAttributs ( ) . get ( " addmenu " ) ! = null ) {
if ( nodana . getNodes ( ) . get ( k ) . getAttributs ( ) . get ( " addmenu " ) . equals ( " true " ) ) {
node N = nodana . getNodes ( ) . get ( k ) ;
if ( N . getAttributs ( ) . get ( " proportioncorrect " ) ! = null ) {
if ( ! N . getAttributs ( ) . get ( " proportioncorrect " ) . equals ( " NaN " ) ) {
if ( N . getAttributs ( ) . get ( " titre " ) ! = null ) {
fichier . append ( HTML . TablePointsSyntheseStyle ( N . getAttributs ( ) . get ( " titre " ) , Double . valueOf ( N . getAttributs ( ) . get ( " proportioncorrect " ) ) , N . getAttributs ( ) . get ( " pointtotal " ) + " pt " , N . getAttributs ( ) . get ( " pointgagner " ) + " pt " , N . getAttributs ( ) . get ( " poids " ) , N . getAttributs ( ) . get ( " id " ) ) ) ;
}
if ( N . getAttributs ( ) . get ( " titre1 " ) ! = null ) {
fichier . append ( HTML . TablePointsSyntheseStyle ( N . getAttributs ( ) . get ( " titre1 " ) , Double . valueOf ( N . getAttributs ( ) . get ( " proportioncorrect " ) ) , N . getAttributs ( ) . get ( " pointtotal " ) + " pt " , N . getAttributs ( ) . get ( " pointgagner " ) + " pt " , N . getAttributs ( ) . get ( " poids " ) , N . getAttributs ( ) . get ( " id " ) ) ) ;
}
if ( N . getAttributs ( ) . get ( " titre2 " ) ! = null ) {
fichier . append ( HTML . TablePointsSyntheseStyle ( N . getAttributs ( ) . get ( " titre2 " ) , Double . valueOf ( N . getAttributs ( ) . get ( " proportioncorrect " ) ) , N . getAttributs ( ) . get ( " pointtotal " ) + " pt " , N . getAttributs ( ) . get ( " pointgagner " ) + " pt " , N . getAttributs ( ) . get ( " poids " ) , N . getAttributs ( ) . get ( " id " ) ) ) ;
}
if ( N . getAttributs ( ) . get ( " titre3 " ) ! = null ) {
fichier . append ( HTML . TablePointsSyntheseStyle ( N . getAttributs ( ) . get ( " titre3 " ) , Double . valueOf ( N . getAttributs ( ) . get ( " proportioncorrect " ) ) , N . getAttributs ( ) . get ( " pointtotal " ) + " pt " , N . getAttributs ( ) . get ( " pointgagner " ) + " pt " , N . getAttributs ( ) . get ( " poids " ) , N . getAttributs ( ) . get ( " id " ) ) ) ;
}
} else {
// IdError = IdError + N.getAttributs().get("id");
// System.out.print("\t** Erreur menu, node : " + N.getNomElt());
}
} else {
2022-12-02 10:17:36 +01:00
if ( N . getAttributs ( ) . get ( " titre " ) ! = null ) {
fichier . append ( HTML . TablePointsSyntheseStyle ( N . getAttributs ( ) . get ( " titre " ) , - 1 . 0 , " " , " " , " " , N . getAttributs ( ) . get ( " id " ) ) ) ;
}
if ( N . getAttributs ( ) . get ( " titre1 " ) ! = null ) {
fichier . append ( HTML . TablePointsSyntheseStyle ( N . getAttributs ( ) . get ( " titre1 " ) , - 1 . 0 , " " , " " , " " , N . getAttributs ( ) . get ( " id " ) ) ) ;
}
if ( N . getAttributs ( ) . get ( " titre2 " ) ! = null ) {
fichier . append ( HTML . TablePointsSyntheseStyle ( N . getAttributs ( ) . get ( " titre2 " ) , - 1 . 0 , " " , " " , " " , N . getAttributs ( ) . get ( " id " ) ) ) ;
}
if ( N . getAttributs ( ) . get ( " titre3 " ) ! = null ) {
fichier . append ( HTML . TablePointsSyntheseStyle ( N . getAttributs ( ) . get ( " titre3 " ) , - 1 . 0 , " " , " " , " " , N . getAttributs ( ) . get ( " id " ) ) ) ;
}
2022-05-10 21:02:22 +02:00
}
}
}
}
2022-12-03 09:29:47 +01:00
ArrayList < node > LesPages = nodana . retourneFirstEnfantsByName ( " structurepage " ) . retourneEnfantsByName ( " page " , new ArrayList < node > ( ) ) ;
if ( LesPages . size ( ) > 0 ) {
fichier . append ( HTML . SautLigne ( ) ) ;
fichier . append ( HTML . H2 ( " Les points dans les pages " ) ) ;
fichier . append ( HTML . SautLigne ( ) ) ;
for ( int k = 0 ; k < LesPages . size ( ) ; k + + ) {
if ( LesPages . get ( k ) . getNomElt ( ) . equals ( " page " ) ) {
if ( LesPages . get ( k ) . getAttributs ( ) . get ( " proportioncorrect " ) ! = null ) {
if ( ! LesPages . get ( k ) . getAttributs ( ) . get ( " proportioncorrect " ) . equals ( " NaN " ) ) {
fichier . append ( HTML . TablePointsSyntheseStyle2 ( " Page " + LesPages . get ( k ) . getAttributs ( ) . get ( " numeroabsolue " ) , Double . valueOf ( LesPages . get ( k ) . getAttributs ( ) . get ( " proportioncorrect " ) ) , LesPages . get ( k ) . getAttributs ( ) . get ( " pointTotal " ) + " pt " , LesPages . get ( k ) . getAttributs ( ) . get ( " point " ) + " pt " ) ) ;
}
}
}
}
}
2022-05-10 21:02:22 +02:00
return fichier ;
}
2022-06-09 17:49:22 +02:00
2022-05-04 09:16:50 +02:00
}