[gepi-users] Suite Problèmes détectés sur la version Gepi-1.5.0 : affectation des élèves à une classe (classes/classes_ajout.php) et impression pdf des bulletins par le professeur principal (bulletin/index.php)
Eric ABGRALL
eric.abgrall at infonie.fr
Lun 5 Nov 20:39:16 CET 2007
Bonsoir,
Je confirme le Bug 1.
Je transmets sur la liste Devel le message.
Cordialement,
Eric ABGRALL
hugues MALHERBE a écrit :
> Bonsoir,
>
> Ne sachant pas comment reprendre le fil d'un message déjà ouvert sur
> cette liste, je crée un nouveau message. (Désolé !!).
>
> Je remercie la personne qui a répondu rapidement à mon premier message.
> Mais les réponses données ne me satisfont pas.
>
> Je pense avoir sincérement avoir trouver des problèmes à corriger dans
> le logiciel.
>
> Je reprends notamment le deuxième point :
>
> Pas d'impression possible des bulletins au format pdf à partir du compte du professeur principal de la classe.
>
> Je suis reparti d'une nouvelle installation de Gepi 1.5.0 et j'ai créé manuellement (sans import) les données suivantes :
>
> Un professeur de mathématiques, un compte scolarité, un élève, une classe
> (le professeur principal de la classe est le professeur de mathématiques)
> J'ai saisi une évaluation notée sur la première période.
> J'ai enregistré la moyenne pour l'élève.
> J'ai paramétré à partir du compte admin les droits d'accès en cochant tous les droits possibles pour le professeur principal.
> J'ai clos la première période à partir du compte scolarité.
>
> Si je me connecte avec le compte scolarite, je peux générer le fichier pdf des bulletins.
> Si je me connecte avec le compte professeur, je ne peux pas générer le fichier pdf des bulletins.
>
>
> Je suis quasiment certain que le problème vient du fichier bulletin/index.php entres les lignes 153 et 162.
>
> En effet pour un compte professeur, la requête sql exécutée est :
>
> $requete_classe = mysql_query('SELECT c.* FROM '.$prefix_base.'classes
> c, '.$prefix_base.'j_eleves_professeurs jep,
> '.$prefix_base.'j_eleves_classes jec, '.
> $prefix_base.'periodes p WHERE ( jep.professeur =
> "'.$_SESSION['login'].'" AND jep.login = jec.login AND jec.id_classe =
> c.id AND p.id_classe = c.id ) GROUP
> BY p.id_classe ORDER BY c.classe');
>
> while ($donner_classe = mysql_fetch_array($requete_classe))
> {
> $sql_cpt_nb_eleve_1 = "SELECT count(eleves.login) FROM eleves, classes,
> j_eleves_classes WHERE classes.id = ".$donner_classe['id_classe']." AND
> j_eleves_cla
> sses.id_classe=classes.id AND j_eleves_classes.login=eleves.login GROUP
> BY eleves.login";
> $requete_cpt_nb_eleve_1 = mysql_query($sql_cpt_nb_eleve_1);
> $requete_cpt_nb_eleve = mysql_num_rows($requete_cpt_nb_eleve_1);
> ?><option value="<?php echo $donner_classe['id_classe']; ?>" <?php
> if(!empty($classe) and in_array($donner_classe['id_classe'], $classe)) {
> ?>selected="sel
> ected"<?php } ?>><?php echo $donner_classe['nom_complet']."
> (".$donner_classe['classe'].") "; ?> ; Eff : <?php echo
> $requete_cpt_nb_eleve; ?></opt
> ion>
>
> Or le champ $donner_classe['id_classe'] n'existe pas car la table
> "classes" n' a pas de colonne nommée 'id_classe'. La bonne colonne étant
> 'id'.
>
> Si le niveau de debuggage de php permet d'afficher les warning, un
> warning (visible en affichant le source de la page html générée par le
> php) est effectivement affichée sur la ligne 159 :
>
> <b>Warning</b>: mysql_num_rows(): supplied argument is not a valid MySQL result resource in <b>/var/www/html/gepibis/bulletin/index.php</b> on line <b>159</b><br />
>
> Une correction est donc nécessaire.
> Et la correction que j'ai proposée dans le post précédent fonctionne, je l'ai testée.
>
>
> Concernant les droits d'accès présents dans la table "droits", je ne crois pas qu'ils sont positionnés à partir de la commande
> "droits d'accès" du compte admin.
> Les droits d'accès du compte admin mettent à jour la table "setting".
> Les accès aux différents fichiers de l'application selon le statut de l'utilisateur issus de la table "droits" sont initialisés
> uniquement lors de l'installation de la base. (à partir du fichier sql/data_gepi.sql)
> Et je pense donc que 2 modifications sont nécessaires dans ce fichier :
> lignes 467 et 468 :
>
> INSERT INTO `droits` VALUES ('/bulletin/param_bull_pdf.php', 'V', 'F', 'F', 'V', 'F', 'F', 'F', 'page de gestion des parametres du bulletin pdf', '');
> INSERT INTO `droits` VALUES ('/bulletin/bulletin_pdf_avec_modele_classe.php', 'V', 'F', 'F', 'V', 'F', 'F', 'F', 'page generant le bulletin pdf en fonction d
> u modele affecte a la classe ', '');
>
> Il faut changer la troisième colonne à la valeur 'V' si l'on souhaite que le professeur principal puisse imprimer les bulletins en pdf ainsi qu'accéder
> au paramètrage pdf.
>
> (Remarque : la confusion vient peut être du fait qu'il n'y a pas de champ spécifique pour le professeur principal dans la table droits)
>
>
> Dernier point :
> J'ai détecté également un autre problème : lors de l'impression des bulletins au format pdf avec le modèle d'impression "affiche_tout".
> Il y a un problème au niveau du paramètre "Graphique de niveau".
> Si ce paramètre est positionné (ce qui est le cas dans l'état initial du modèle "affiche tout"), et sous certaines conditions
> que je n'ai pas élucidées, on obtient des divisions par 0 dans le fichier bulletin/bulletin_pdf_avec_modele_classe.php en lignes 413 et 428, qui
> conduisent à un fichier pdf vide (sans aucun bulletin).
>
> J'ai remarqué que le problème provient d'un test manquant en ligne 2656 :
> $pdf->DiagBarre($X_note_moy_app+$largeur_utilise, $Y_note_moy_app, $largeur_niveau[$classe_id], $hauteur_entete_moyenne_general[$classe_id], $data_g
> rap_classe[$id_periode][$id_classe_selection], $place_eleve);
>
> Pour éviter la division par zéro dans la fonction DiagBarre, il faut tester au préalable que le paramètre
> rap_classe[$id_periode][$id_classe_selection] est convenable.
> C'est à dire,effectuer le test suivant :
>
> if (array_sum($data_grap[$id_periode][$id_groupe_graph]) != 0) {
> $pdf->DiagBarre($X_note_moy_app+$largeur_utilise, $Y_decal-($espace_entre_matier/2), $largeur_niveau[$classe_id], $espace_entre_matier, $data_grap[$id_peri
> ode][$id_groupe_graph], $place_eleve);
> }
>
> Un test similaire est bien effectué lors d'un précédent appel à la fonction DiagBarre dans le même fichier (en ligne 2456).
>
> En espérant que vous prendrez en compte ces différentes remarques.
>
> Je suis certain de mes tests. Ils sont facilement reproductibles.
> Et les corrections que j'ai apportées fonctionnent.
>
> Amicalement.
> Hugues MALHERBE.
>
Plus d'informations sur la liste de diffusion gepi-users