function qcm($val = 0) { // Declaration des variables: global $idutilisateur; global $adresserepertoiresite; //En tete du QCM : ?> <div id="form_questionnaire"> <script type="text/javascript"> <!-- <?php //Calcul des identifiants des questions precedante et suivante $prec = $val - 1; if ($prec < 0) { $prec = 0; } $suiv = $val + 1; if (isset($_POST["reponse"])) { $suiv = $suiv - 1; } if ($suiv + 1 > $this->nbquestion_nonrep()) { $suiv = $suiv - 1; } if ($prec != $val) { ?> function fprec(){ if (document.getElementById("formulaire_qcm").reponse!=undefined && document.getElementById("formulaire_qcm").reponse.value==undefined) { document.getElementById('formulaire_qcm').val.value = "<?php echo $prec; ?> "; } document.getElementById('formulaire_qcm').submit(); } <?php } if ($suiv != $val || isset($_POST["reponse"])) { ?> function fsuiv(){ if (document.getElementById("formulaire_qcm").reponse!=undefined && document.getElementById("formulaire_qcm").reponse.value==undefined) { document.getElementById('formulaire_qcm').val.value = "<?php echo $suiv; ?> "; } document.getElementById('formulaire_qcm').submit(); } <?php } ?> //--> </script> <form action="<?php echo $_SERVER['PHP_SELF']; ?> " method="post" id="formulaire_qcm"> <div class="fielset"> <fieldset><legend><?php echo $this->titre; ?> </legend> <div id="intitule_questionnaire"> <?php echo $this->intitule; ?> </div><?php //Creation de variables temporaires: require_once $adresserepertoiresite . '/scripts/php/class.question.php'; require_once $adresserepertoiresite . '/scripts/php/class.reponse.php'; $vtemp = new question(); $vreponse = new reponse(); // Recherche de la nieme question pour laquelle l'utilisateur n'a pas encore repondu: $select_sql = "select T1.* \r\n\t\t\t\t\t\tFROM {$vtemp->table} AS T1 \r\n\t\t\t\t\t\tLEFT JOIN {$vreponse->table} AS T2 ON (T1.idquestion=T2.idquestion_rel AND T2.idutilisateur_rel='{$idutilisateur}' AND T2.visible='1')\r\n\t\t\t\t\t\tWHERE T2.idreponse IS NULL AND T1.visible='1' AND T1.idquestionnaire_rel='{$this->identifiant}' AND T1.validation='1'\r\n\t\t\t\t\t\tORDER BY T1.ordre LIMIT {$val}, 1;"; $select_sql = requete_sql($select_sql); if (compte_sql($select_sql) > 0) { //affichage de la question voulue non encore repondue if (!isset($_GET['num'])) { $question_sql = tableau_sql($select_sql); $num = $question_sql[$vtemp->champ_identifiant]; } $question = new question($num); $question->formulaire_question(); } else { //affichage du score de l'utilisateur pour ce questionnaire $score = $this->score_qcm(); //calcul de l'angle de l'arc de reponse(s) fausse(s) if ($score[0] > 0) { $rapport_total_sur_faux = $score[3] / $score[0]; } else { $rapport_total_sur_faux = 0; } $vanglefaux = 360 * $rapport_total_sur_faux; $vpctvrai = 1 - $rapport_total_sur_faux; $vpctvrai = $vpctvrai * 100; // French notation $nombre_format_francais = number_format($vpctvrai, 2, ',', ' '); $vtextepctvrai = $nombre_format_francais . "%"; $vtextevrai = _REPONSES_VRAI . $score[2] . "/" . $score[0]; //calcul de l'angle de l'arc du score if ($score[7] - $score[6] != 0) { $rapport_score_ecart = ($score[4] - $score[6]) / ($score[7] - $score[6]); } else { $rapport_score_ecart = 0; } $vanglescore = 360 * (1 - $rapport_score_ecart); $vpctscore = $rapport_score_ecart; $vpctscore = $vpctscore * 100; // French notation $nombre_format_francais_score = number_format($vpctscore, 2, ',', ' '); $vtextepctscore = $nombre_format_francais_score . "%"; $vtextescore = _SCORE . $score[4] . "/" . $score[7]; $vtextescoremin = _MIN . $score[6]; //texte alternatif pour l'image : $vtexte_alt = $vtextevrai . " ==> " . $vtextepctvrai . " / " . $vtextescore . " ==> " . $vtextepctscore . " (" . $vtextescoremin . ")"; ?> <img src="image.scorequestionnaire.php?i=<?php echo $this->identifiant; ?> &u=<?php echo $idutilisateur; ?> " alt="<?php echo $vtexte_alt; ?> " /> <?php } ?> <div class="bouton_cadre"><?php //Calcul du nombre de question(s) restante(s) $nombre_question = $this->nbquestion_nonrep(); //Affichage des boutons de suivi du questionnaire if ($prec != $val && !isset($_POST["reponse"]) && $nombre_question > 0) { ?> <input type="button" value="<?php echo _QUESTION_PRECEDANTE; ?> " onclick="fprec()" /> <?php } if ($suiv != $val && !isset($_POST["reponse"]) && $nombre_question > 0) { ?> <input type="button" value="<?php echo _QUESTION_SUIVANTE; ?> " onclick="fsuiv()"/> <?php } if (isset($_POST["reponse"]) && $nombre_question > 0) { ?> <input type="button" value="<?php echo _QUESTION_SUIVANTE; ?> " onclick="fsuiv()"/> <?php } if (isset($_POST["reponse"]) && $nombre_question == 0) { ?> <input type="button" value="<?php echo _RESULTAT_QUESTIONNAIRE; ?> " onclick="fsuiv()"/> <?php } ?> <input type="hidden" name="val" value="0" /><input type="hidden" name="v" value="<?php echo $this->identifiant; ?> " /> </div> </fieldset> </div> </form> </div> <?php }
//ajout du theme selectionne dans la liste des favoris : if (isset($_GET["tt"]) && isset($_GET["ajout"]) && $_GET["ajout"] == "1") { $vthemefavori->set("idtheme_rel", $_GET["tt"]); $vthemefavori->enregistrer(); } //suppression du theme selectionne de la liste des favoris : if (isset($_GET["tt"]) && isset($_GET["ajout"]) && $_GET["ajout"] == "2" && isset($idutilisateur)) { $sqlrequeteretirerthemfav = "UPDATE {$vthemefavori->table} SET visible='0' WHERE idtheme_rel='" . $_GET["tt"] . "' and idutilisateur_rel='" . $idutilisateur . "';"; $sqlrequeteretirerthemfav_result = requete_sql($sqlrequeteretirerthemfav); } if (isset($_GET["t"])) { //recherche du theme dans la liste des favoris : $sqlrecherchethemfav = "SELECT * FROM {$vthemefavori->table} WHERE visible='1' AND idtheme_rel='" . $_GET["t"] . "' and idutilisateur_rel='" . $idutilisateur . "';"; $sqlrecherchethemfav_result = requete_sql($sqlrecherchethemfav); $presencetheme = 0; if (compte_sql($sqlrecherchethemfav_result) > 0) { $presencetheme = 1; } ?> <div id="ajouter_theme_favori"> <?php if ($presencetheme == 0) { echo "<span class=\"ajouter\" title=\"" . _AJOUTER_THEME_AUX_FAVORIS . "\" onclick=\"ajout_theme_favori(" . $_GET["t"] . ")\">[+]</span>\n"; } else { echo "<span class=\"retirer\" title=\"" . _RETIRER_THEME_DES_FAVORIS . "\" onclick=\"retirer_theme_favori(" . $_GET["t"] . ")\">[-]</span>\n"; } ?> </div> <?php } }
function auteur_questionnaire() { // Definition des variables globales : global $prefixe; global $page_questionnaire; global $trad_SQL; global $adresserepertoiresite; // Definition des tables : $table_questionnaire = $prefixe . "_questionnaire"; //requete standard : $sqlauteur = "SELECT * FROM {$table_questionnaire} WHERE idutilisateur_auteur_rel=" . $this->identifiant() . " AND visible=1 ORDER BY idtheme_rel ASC, titre ASC;"; //requete admin : if ($this->admin == "1") { $sqlauteur = "SELECT * FROM {$table_questionnaire} WHERE visible=1 ORDER BY idtheme_rel ASC, titre ASC;"; } $resauteur = requete_sql($sqlauteur); echo "<h3 class=\"listing_questionnaire_utilisateur\"><span>" . _LISTING_QUESTIONNAIRE_UTILISATEUR . "</span></h3>"; if (compte_sql($resauteur) > 0) { echo "\n<script type=\"text/javascript\" src=\"./scripts/javascript/prototype.js\" charset=\"utf-8\"></script>"; echo "\n<script type=\"text/javascript\" src=\"./scripts/javascript/tablekit.js\" charset=\"utf-8\"></script>"; echo "\n<div class=\"tableau\"><table id=\"liste_questionnaire\" class=\"sortable resizable\">"; echo "<tr><th>" . _MODIFICATION . "</th><th>" . _SUPPRESSION . "</th><th>" . _VALIDATION . "</th><th>" . _VALIDATION_DATE . "</th><th>" . _TITRE . "</th><th>" . _INTITULE . "</th><th>" . _NIVEAU . "</th></tr>\n"; while ($auteur = tableau_sql($resauteur)) { if (is_array($auteur)) { echo "<tr><td><a href=\"" . $page_questionnaire . "?i=" . $auteur['idquestionnaire'] . "\">" . _MODIFIER . "</a></td><td><a href=\"" . $page_questionnaire . "?i=" . $auteur['idquestionnaire'] . "&suppression=1 \">" . _SUPPRIMER . "</a></td>"; //Gestion de l'affichage de la validation : //chargement des regles pour le format des dates : require_once $adresserepertoiresite . '/scripts/php/class.regle.php'; $format_date = new regle("0", "format_date"); if ($auteur['datevalidation'] == "0") { echo "<td>" . _NON_TRAITEE . $auteur['validation'] . "</td><td> </td>"; } else { echo "<td><a href=\"#\" title=\"" . stripslashes($auteur['textevalidation']) . "\">" . _RESULTAT . $auteur['validation'] . "</a></td><td>" . _TRAITEE_LE . date($format_date->valeur, $auteur['datevalidation']) . "</td>"; } //Affichage titre et intitule : echo "<td>"; if (strlen($auteur['titre']) > 0) { echo $auteur['titre']; } else { echo " "; } echo "</td>"; echo "<td>"; if (strlen($auteur['intitule']) > 0) { echo $auteur['intitule']; } else { echo " "; } //Affichage niveau : echo "<td>"; if (strlen($auteur['niveau']) > 0) { if (array_key_exists($auteur['niveau'], $trad_SQL)) { $valeur_label = $trad_SQL[$auteur['niveau']]; } else { $valeur_label = $auteur['niveau']; } echo $valeur_label; } else { echo " "; } echo "</td></tr>\n"; } } echo "</table></div>\n"; } else { echo "<p>" . _AUCUN_QUESTIONNAIRE_POUR_L_UTILISATEUR . "</p>"; } }
} ?> <div class="dragableBox" id="ltheme_favori_selection"> <div id="theme_favori_selection"> <div id="theme_favori_cadre"> <h3 class="theme_favori_selection"><span><?php echo _THEME_FAVORI_TITRE; ?> </span></h3> <ul> <?php $vtemptheme = $prefixe . "_theme"; $vtemp = $prefixe . "_theme_favori"; $vtheme_favori_sql = "SELECT T2.* FROM {$vtemp} AS T1, {$vtemptheme} AS T2 WHERE T1.visible='1' AND T2.visible='1' AND T1.idtheme_rel= T2.idtheme AND T1.idutilisateur_rel='{$idutilisateur}';"; $vtheme_favori_sql = requete_sql($vtheme_favori_sql); if (compte_sql($vtheme_favori_sql) > 0) { while ($vtheme_favori_temp = tableau_sql($vtheme_favori_sql)) { ?> <li> <?php echo "<a href=\"#\" onclick=\"maj_module(" . $vtheme_favori_temp["idtheme"] . ")\">" . htmlentities($vtheme_favori_temp["titre"], ENT_QUOTES, "UTF-8") . "</a> "; ?> <?php echo "<span class=\"retirer\" title=\"" . _RETIRER_THEME_DES_FAVORIS . "\" onclick=\"retirer_theme_favori(" . $vtheme_favori_temp["idtheme"] . ")\">[-]</span>\n"; ?> </li> <?php } } else { echo "<li>" . _AUCUN_THEME_FAVORI . "</li>"; }
function enregistrer() { // Definition des variables globales : global $prefixe; // Initialisation du message : $this->message = ""; // Verification de l'existance de la table : $test_table = true; $liste_des_tables = array(); $table_sql = requete_sql("SHOW tables;"); while ($table_temp = tableau_sql($table_sql)) { array_push($liste_des_tables, $table_temp[0]); } if (!in_array($this->table, $liste_des_tables)) { echo _TABLE . $this->table . _INEXISTANTE_POUR_LA_CLASSE . $this->classe; $test_table = false; } if ($test_table == true) { // Enregistrement en base : if (isset($this->identifiant) && is_numeric($this->identifiant) && intval($this->identifiant) == $this->identifiant) { // Initialisation de la requete : $sql_requete_update = "UPDATE {$this->table} SET "; foreach ($this->champs as $valeur) { // Concatenation champ = valeur : if (isset($this->{$valeur}) && !is_array($this->{$valeur}) && $valeur != "id" . $this->classe) { $sql_requete_update = $sql_requete_update . "{$valeur}='" . $this->{$valeur} . "', "; } } $sql_requete_update = substr($sql_requete_update, 0, -2); // Clause WHERE : $sql_requete_update = $sql_requete_update . " WHERE " . $this->champ_identifiant . "='" . $this->identifiant . "';"; // Lancement de la mise a jour de l objet correspondant : $sql_resultat = requete_sql($sql_requete_update); return $this->identifiant; } elseif (!isset($this->identifiant)) { // Test des champs obligatoires : $test_champs_obligatoires = true; if (isset($this->champs_obligatoires) && is_array($this->champs_obligatoires)) { foreach ($this->champs_obligatoires as $champoblig) { if (!isset($this->{$champoblig}) || $this->{$champoblig} == "") { if ($test_champs_obligatoires == true) { $this->message .= _IL_MANQUE_UN_CHAMP_OBLIGATOIRE; $this->message .= _CLASSE_CHAMPS_MANQUANT . $this->classe . _CLASSE_CHAMPS_MANQUANT_FIN; $this->message .= _LES_CHAMPS_OBLIGATOIRES_MANQUANT_SONT_LES_SUIVANTS; $this->message .= "<ul>"; } $test_champs_obligatoires = false; $this->message .= "<li>" . $champoblig . "</li>"; } if ($test_champs_obligatoires == false) { $this->message .= "</ul>"; } } } // Test des champs uniques : $test_champs_uniques = true; if (isset($this->champs_uniques) && is_array($this->champs_uniques)) { foreach ($this->champs_uniques as $champuniq) { if ((isset($this->{$champuniq}) || $this->{$champuniq} != "") && in_array($champuniq, $this->champs)) { $sql = "select * FROM {$this->table} WHERE " . $champuniq . "='" . $this->{$champuniq} . "'"; $requete = requete_sql($sql); $qte = compte_sql($requete); if ($qte != 0) { $test_champs_uniques = false; $this->message .= "<p><span>" . _LA_VALEUR . $this->{$champuniq} . _POUR_LE_CHAMP . $champuniq . _EXISTE_DEJA . "</span></p><a href=\"javascript:history.go(-1)\">" . _RETOUR . "</a>"; } } } } // Initialisation de la requete : if ($test_champs_obligatoires == true && $test_champs_uniques == true) { $sql_requete_insert1 = "INSERT INTO {$this->table} ("; foreach ($this->champs as $valeur) { // Concatenation champ1,champ2 et 'valeur1','valeur2' : if (isset($this->{$valeur}) && !is_array($this->{$valeur}) && $valeur != "id" . $this->classe) { $sql_requete_insert1 = $sql_requete_insert1 . "{$valeur},"; $sql_requete_insert2 = $sql_requete_insert2 . "'" . $this->{$valeur} . "',"; } } $sql_requete_insert1 = substr($sql_requete_insert1, 0, -1) . ") VALUES ("; $sql_requete_insert2 = substr($sql_requete_insert2, 0, -1) . ");"; $sql_requete_insert = $sql_requete_insert1 . $sql_requete_insert2; // Lancement de la creation de l objet correspondant : $sql_resultat = requete_sql($sql_requete_insert); $this->identifiant = id_insere_sql(); return $this->identifiant; } } if ($this->message != "") { echo $this->message; } } }
function liste_questionnaires($vfiltre = "1", $vordre = "titre") { //declaration des variables : global $page_affichage_questionnaire; global $adresserepertoiresite; require_once $adresserepertoiresite . '/scripts/php/class.questionnaire.php'; $vtempquestionnaire = new questionnaire(); $requete_sql = "SELECT *\r\n\t\tFROM {$vtempquestionnaire->table} AS T1 \r\n\t\tWHERE T1.idtheme_rel={$this->identifiant} AND T1.validation='1' AND T1.visible='1' AND " . $vfiltre . " \r\n\t\tORDER BY " . $vordre; $liste_questionnaires = requete_sql($requete_sql); $qte = compte_sql($liste_questionnaires); if ($qte != 0) { echo "\n<div class=\"tableau\"><table>"; echo "<tr><th>" . _TITRE . "</th><th>" . _INTITULE . "</th></tr>\n"; while ($questionnaire = tableau_sql($liste_questionnaires)) { if (is_array($questionnaire) && count($questionnaire) > 0) { echo "<tr>"; //Affichage titre et intitule : echo "<td><a href=\"" . $page_affichage_questionnaire . "?v=" . $questionnaire['idquestionnaire'] . "\">"; if (strlen($questionnaire['titre']) > 0) { echo $questionnaire['titre']; } else { echo " "; } echo "</a></td>"; echo "<td>"; if (strlen($questionnaire['intitule']) > 0) { echo $questionnaire['intitule']; } else { echo " "; } echo "</td></tr>\n"; } } echo "</table></div>\n"; } }
function mise_a_jour_theme() { //initialisation des variables globales : global $langue; global $adresserepertoiresite; //initialisation des variables : $pere_prec = 0; $taille_prec = 0; //Creation d'une variable temporaire de classe theme : require_once $adresserepertoiresite . '/scripts/php/class.theme.php'; $vtemp = new theme(); //RAZ des taille et borne gauche des themes: $update_raz = "UPDATE " . $vtemp->table . " SET taille=1, bornegauche=1 WHERE langue='{$langue}'"; $update_raz = requete_sql($update_raz); //mise a jour du niveau des themes : $update_niveaumin = "UPDATE " . $vtemp->table . " SET niveau=1 WHERE idtheme_rel=0 AND langue='{$langue}'"; $update_niveaumin = requete_sql($update_niveaumin); $dernierniveau = 1; $select_niveau = "select T1.* FROM " . $vtemp->table . " AS T1, " . $vtemp->table . " AS T2 WHERE T2.niveau={$dernierniveau} AND T1.idtheme_rel=T2.idtheme AND T1.langue='{$langue}' AND T2.langue='{$langue}';"; $select_niveau = requete_sql($select_niveau); while (compte_sql($select_niveau) > 0) { $vniveau = $dernierniveau + 1; $update_niveau = "UPDATE " . $vtemp->table . " SET niveau={$vniveau} WHERE idtheme"; $update_niveau .= " IN ("; while ($vtheme = tableau_sql($select_niveau)) { $update_niveau .= "'" . $vtheme['idtheme'] . "',"; } $update_niveau = substr($update_niveau, 0, -1) . ")"; $update_niveau = requete_sql($update_niveau); $dernierniveau = $dernierniveau + 1; $select_niveau = "select T1.* FROM " . $vtemp->table . " AS T1, " . $vtemp->table . " AS T2 WHERE T2.niveau={$dernierniveau} AND T1.idtheme_rel=T2.idtheme AND T1.langue='{$langue}' AND T2.langue='{$langue}';"; $select_niveau = requete_sql($select_niveau); } //2 boucles sur les niveaux pour mettre a jour la taille et la borne gauche: $select_niveaumax = "select MAX(niveau) FROM " . $vtemp->table . " WHERE visible='1' AND langue='{$langue}';"; $select_niveaumax = requete_sql($select_niveaumax); $niveaumax = tableau_sql($select_niveaumax); $niveaumax = $niveaumax[0]; //mise a jour de la taille des themes for ($i = $niveaumax; $i > 0; $i--) { $select_suivante = "select T2." . $vtemp->champ_identifiant . ", SUM(T1.taille+1)+1 AS vtaille \r\n\t\t\tFROM " . $vtemp->table . " AS T1 \r\n\t\t\tRIGHT JOIN " . $vtemp->table . " AS T2 ON (T1." . $vtemp->champ_identifiant . "_rel=T2." . $vtemp->champ_identifiant . " AND T1.visible=1 AND T1.langue='{$langue}') \r\n\t\t\tWHERE T2.niveau={$i} AND T2.visible=1 AND T2.langue='{$langue}' \r\n\t\t\tGROUP BY T1." . $vtemp->champ_identifiant . "_rel"; $select_suivante = requete_sql($select_suivante); while ($noeud = tableau_sql($select_suivante)) { $update_taille = "UPDATE {$vtemp->table} SET taille=" . $noeud['vtaille'] . " WHERE {$vtemp->champ_identifiant}=" . $noeud['idtheme'] . ";"; requete_sql($update_taille); } } //mise a jour de la bornegauche des themes require_once $adresserepertoiresite . '/scripts/php/class.regle.php'; $ordre_tri = new regle("0", "tri_theme"); for ($i = 0; $i < $niveaumax + 1; $i++) { //mise a jour des racines de l'arborescence if ($i == 0) { $select_borne = "select T1." . $vtemp->champ_identifiant . ", T1.taille, T2.bornegauche AS vborne, T2.idtheme AS vidtheme_pere FROM " . $vtemp->table . " AS T1 \r\n\t\t\t\tLEFT JOIN " . $vtemp->table . " AS T2 ON (T1." . $vtemp->champ_identifiant . "_rel=T2." . $vtemp->champ_identifiant . " AND T1.visible=1 AND T1.langue='{$langue}')\r\n\t\t\t\tWHERE T2.niveau IS NULL AND T1.idtheme IS NOT NULL AND T2.langue='{$langue}'\r\n\t\t\t\tORDER BY T1.idtheme_rel ASC, T1.{$ordre_tri->valeur} ASC"; } else { $select_borne = "select T1." . $vtemp->champ_identifiant . ", T1.taille, T2.bornegauche AS vborne, T2.idtheme AS vidtheme_pere\r\n\t\t\t\tFROM " . $vtemp->table . " AS T1 \r\n\t\t\t\tRIGHT JOIN " . $vtemp->table . " AS T2 ON (T1." . $vtemp->champ_identifiant . "_rel=T2." . $vtemp->champ_identifiant . " AND T1.visible=1 AND T1.langue='{$langue}')\r\n\t\t\t\tWHERE T2.niveau={$i} AND T1.idtheme IS NOT NULL AND T2.visible=1 AND T2.langue='{$langue}'\r\n\t\t\t\tORDER BY T1.idtheme_rel ASC, T1.{$ordre_tri->valeur} ASC"; } $select_borne = requete_sql($select_borne); $nombre_ligne = compte_sql($select_borne); for ($j = 1; $j <= $nombre_ligne; $j++) { $element = tableau_sql($select_borne); //si l'on change de pere la borne se calcul par rapport a la borne du pere : if ($element['vidtheme_pere'] != $pere_prec) { $borne_prec = $element['vborne'] + 1; $update_borne = "UPDATE {$vtemp->table} SET bornegauche=" . $borne_prec . " WHERE {$vtemp->champ_identifiant}=" . $element['idtheme'] . ";"; $taille_prec = $element['taille']; requete_sql($update_borne); $pere_prec = $element['vidtheme_pere']; } else { $borne_prec = $taille_prec + 1 + $borne_prec; $update_borne = "UPDATE {$vtemp->table} SET bornegauche=" . $borne_prec . " WHERE {$vtemp->champ_identifiant}=" . $element['idtheme'] . ";"; $taille_prec = $element['taille']; requete_sql($update_borne); $pere_prec = $element['vidtheme_pere']; } } } }