/** * getMailCampagnList - Retourne la liste des campagnes d'envoi de mail * * @category mailFunction * @param string $order Paramètre selon lequel sont classés les résultats ('id', 'nom', 'date' ou 'remplissage') * @param boolean $desc Ordre selon lequel on classe les résultats (TRUE : decroissant, FALSE : croissant) * @return array Array contenant la liste des campagne de mails enregistrés * * @Author Ali Bellamine * * Contenu de l'array retourné :<br> * [id de la campagne de mail]['id'] => (int) Identifiant du certificat<br> * [id de la campagne de mail]['nom'] => (string) Nom de la campagne de mail<br> * [id de la campagne de mail]['codecampagne'] => (string) Identifiant unique de la campagne<br> * [id de la campagne de mail]['statut'] => (int) 0 : incomplète | 1 : complète<br> * [id de la campagne de mail]['date'] => (timestamp) Date de la campagne de mail<br> * [id de la campagne de mail]['nb']['0'] => (int) Nombre de mails non envoyés<br> * [id de la campagne de mail]['nb']['1'] => (int) Nombre de mails envoyés * */ function getMailCampagnList($order = 'nom', $desc = false) { global $db; $allowedOrder = array('id', 'nom', 'date', 'remplissage'); if (in_array($order, $allowedOrder)) { $orderSql = $order; } else { $orderSql = 'nom'; } $sql = 'SELECT m.id id, m.nom nom, m.date date, m.codeCampagne codeCampagne, (SELECT count(*) FROM mail WHERE codeCampagne = m.codeCampagne AND statut = 1 LIMIT 1) nbEnvoye, (SELECT count(*) FROM mail WHERE codeCampagne = m.codeCampagne AND statut = 0 LIMIT 1) nbNonEnvoye, (SELECT count(*) FROM mail WHERE codeCampagne = m.codeCampagne AND statut = 1 LIMIT 1) / ((SELECT count(*) FROM mail WHERE codeCampagne = m.codeCampagne AND statut = 1 LIMIT 1) + (SELECT count(*) FROM mail WHERE codeCampagne = m.codeCampagne AND statut = 0 LIMIT 1)) remplissage FROM mail m GROUP BY m.codeCampagne ORDER BY ' . $orderSql . ' '; if ($desc) { $sql .= ' DESC'; } $res = $db->query($sql); $mail = array(); while ($res_f = $res->fetch()) { $mail[$res_f['id']]['id'] = $res_f['id']; $mail[$res_f['id']]['nom'] = $res_f['nom']; $mail[$res_f['id']]['codeCampagne'] = $res_f['codeCampagne']; $mail[$res_f['id']]['date'] = DatetimeToTimestamp($res_f['date']); if ($res_f['remplissage'] < 1) { $mail[$res_f['id']]['statut'] = 0; } else { $mail[$res_f['id']]['statut'] = 1; } $mail[$res_f['id']]['nb'][0] = $res_f['nbNonEnvoye']; $mail[$res_f['id']]['nb'][1] = $res_f['nbEnvoye']; } return $mail; }
/** * eval_ccpc_getSettings - Retourne les réglages de l'évaluation sélectionnée * * @category : eval_ccpc_functions * @param int $id int ID de l'évaluation dont on souhaite récupérés les réglages * @return array Array contenant les réglages de l'évaluation * * Contenu de l'array retourné :<br> * ['id'] => (int) Identifiant de l'évaluation<br> * ['dateDebut'] => (timestamp) Marge inférieure de la période à évaluer<br> * ['dateFin'] => (timestamp) Marge supérieure de la période à évaluer<br> * * @Author Ali Bellamine * */ function eval_ccpc_getSettings($id) { initTable(); // S'assure de l'existence de la table dans la BDD global $db; $settings = array(); if (count(checkEvaluation($id, array())) == 0) { $settings['id'] = $id; // On récupère les données de la base de donnée $sql = 'SELECT s.dateDebut dateDebut, s.dateFin dateFin FROM eval_ccpc_settings s WHERE s.id_evaluation = ? LIMIT 1'; $res = $db->prepare($sql); $res->execute(array($id)); $res_f = $res->fetch(); // On enregistre les dates if (isset($res_f['dateDebut']) && isset($res_f['dateFin']) && is_numeric(DatetimeToTimestamp($res_f['dateFin'])) && is_numeric(DatetimeToTimestamp($res_f['dateDebut'])) && DatetimeToTimestamp($res_f['dateDebut']) <= DatetimeToTimestamp($res_f['dateFin'])) { $settings['dateDebut'] = DatetimeToTimestamp($res_f['dateDebut']); $settings['dateFin'] = DatetimeToTimestamp($res_f['dateFin']); } else { $settings['dateDebut'] = FALSE; $settings['dateFin'] = FALSE; } } return $settings; }
/** * getAffectationData - Retourne les informations relatives à l'affectation d'un étudiant dans un service * * @category stageFunction * @param int $id Identifiant du lien d'affectation de l'étudiant dans la base de donnée * @return array Array contenant les informations relatives à l'affectation de l'étudiant dans le service * * @Author Ali Bellamine * * Contenu de l'array retourné :<br> * ['id'] => (int) Identifiant du lien d'affectation de l'étudiant dans la base de donnée<br> * ['service']['id'] => (int) Identifiant du service dans lequel l'étudiant est affecté<br> * ['user']['id'] => (int) Identifiant de l'utilisateur<br> * ['date']['debut'] => (string) Date du début de la période d'affectation de l'étudiant dans le service sous forme de Timestamp<br> * ['date']['fin'] => (string) Date du fin de la période d'affectation de l'étudiant dans le service sous forme de Timestamp * */ function getAffectationData($id) { /* Initialisation des variables */ global $db; // Permet l'accès à la BDD $erreur = array(); /* On vérifie l'existance de l'affectation */ $erreur = checkAffectation($id, $erreur); if (count($erreur) == 0) { // Récupérations des données de l'hopital $sql = 'SELECT ae.id id, ae.userId userId, ae.service serviceId, ae.dateDebut dateDebut, ae.dateFin dateFin FROM affectationexterne ae WHERE ae.id = ? LIMIT 1'; $res = $db->prepare($sql); $res->execute(array($id)); $affectation = array(); // On construit l'array contenant les données de l'hopital if ($res_f = $res->fetch()) { $affectation['id'] = $res_f['id']; $affectation['service']['id'] = $res_f['serviceId']; $affectation['user']['id'] = $res_f['userId']; $affectation['date']['debut'] = DatetimeToTimestamp($res_f['dateDebut']); $affectation['date']['fin'] = DatetimeToTimestamp($res_f['dateFin']); } return $affectation; } else { return false; } }
/** * getEvalData - Retourne les informations relative à une campagne d'évaluation * * @category : evaluationFunction * @param int $id Identifiant de la campagne d'évaluation * @return array Array contenant les données relative à la campagne d'évaluation * * @Author Ali Bellamine * * Contenu de l'array retourné :<br> * ['id'] => (int) identifiant de la campagne d'évaluation<br> * ['nom'] => (string) nom de la campagne d'évaluation<br> * ['date'][debut'] => (string) Date de début de la campagne d'évaluation sous forme de Timestamp<br> * ['date'][fin'] => (string) Date de fin de la campagne d'évaluation sous forme de Timestamp<br> * ['type'][id'] => (int) Identifiant du module de la campagne d'évaluation<br> * ['type'][nom'] => (string) Nom du module de la campagne d'évaluation<br> * ['type'][dossier'] => (string) Dossier d'installation du module de la campagne d'évaluation<br> * ['type'][data'] => (array) Contient les données relatives au type de module d'évaluation, voir {@link getEvalTypeData()}<br> * ['type'][statut'] => (int) Si 0, le module d'évaluation est actuellement inactif, si 1 il est actuellement actif<br> * ['users'][id de l'utilisateur] => (array) Contient les informations relatives à l'utilisateur : nom, prenom, promotion, nbEtudiant, voir {@link: getUserData()}<br> * ['orderedUsers'][] => (array) Même informations que ci dessus, mais celles-ci sont classé par ordre de résultats de la requête SQL et non plus par id (évaluations non remplis en premier)<br> * ['orderedUsers']['nb'] => (int) Nombre total d'utilisateurs<br> * ['nb']['remplis'] => (int) nombre d'évaluations remplis<br> * ['nb']['total'] => (int) nombre total d'utilisateurs */ function getEvalData($id) { /* Initialisation des variables */ global $db; // Permet l'accès à la BDD $erreur = array(); $evaluation = array(); /* On vérifie l'existance de l'évaluation */ $erreur = checkEvaluation($id, $erreur); if (count($erreur) == 0) { /* Récupération des informations sur l'évaluation */ $sql = 'SELECT e.id evaluationId, e.nom evaluationNom, e.dateDebut evaluationDateDebut, e.dateFin evaluationDateFin, t.id evaluationTypeId, t.nom evaluationTypeNom, t.nomDossier evaluationTypeDossier, t.actif evaluationTypeStatut FROM evaluation e INNER JOIN typeevaluation t ON t.id = e.type WHERE e.id = ? LIMIT 1'; $res = $db->prepare($sql); $res->execute(array($id)); while ($res_f = $res->fetch()) { $evaluation['id'] = $res_f['evaluationId']; $evaluation['nom'] = $res_f['evaluationNom']; $evaluation['date']['debut'] = DatetimeToTimestamp($res_f['evaluationDateDebut']); $evaluation['date']['fin'] = DatetimeToTimestamp($res_f['evaluationDateFin']); $evaluation['type']['id'] = $res_f['evaluationTypeId']; $evaluation['type']['nom'] = $res_f['evaluationTypeNom']; $evaluation['type']['dossier'] = $res_f['evaluationTypeDossier']; $evaluation['type']['data'] = getEvalTypeData($res_f['evaluationTypeId']); $evaluation['type']['statut'] = $res_f['evaluationTypeStatut']; } /* Récupèration de la liste des personne assignés à l'évaluation */ $sql = 'SELECT er.id idRegister, er.evaluationStatut statut, er.date date, er.userId userId, u.nom userNom, u.prenom userPrenom, u.mail userMail, p.id promotionId, p.nom promotionNom, u.nbEtudiant nbEtudiant FROM evaluationregister er INNER JOIN user u ON er.userId = u.id LEFT JOIN promotion p ON p.id = u.promotion WHERE er.evaluationId = ? ORDER BY er.evaluationStatut ASC, u.nom ASC, u.prenom ASC'; $res = $db->prepare($sql); if ($res->execute(array($evaluation['id']))) { $nbEval = 0; $evaluation['orderedUsers'] = array(); while ($res_f = $res->fetch()) { if ($res_f['statut'] == 1) { $nbEval++; } $evaluation['users'][$res_f['userId']]['id'] = $res_f['userId']; $evaluation['users'][$res_f['userId']]['registerId'] = $res_f['idRegister']; $evaluation['users'][$res_f['userId']]['statut'] = $res_f['statut']; $evaluation['users'][$res_f['userId']]['mail'] = array(); if (isSerialized($res_f['userMail']) && ($tempMail = unserialize($res_f['userMail']))) { $firstLoop = TRUE; foreach ($tempMail as $email) { $evaluation['users'][$res_f['userId']]['mail'][] = $email; } } $evaluation['users'][$res_f['userId']]['nom'] = $res_f['userNom']; $evaluation['users'][$res_f['userId']]['prenom'] = $res_f['userPrenom']; if (isset($res_f['promotionNom'])) { $evaluation['users'][$res_f['userId']]['promotion']['id'] = $res_f['promotionId']; $evaluation['users'][$res_f['userId']]['promotion']['nom'] = $res_f['promotionNom']; } $evaluation['users'][$res_f['userId']]['nbEtudiant'] = $res_f['nbEtudiant']; $evaluation['orderedUsers'][] = $evaluation['users'][$res_f['userId']]; // Même liste mais ordonée } if (isset($evaluation['users'])) { $evaluation['nb']['total'] = count($evaluation['users']); } else { $evaluation['nb']['total'] = 0; } $evaluation['nb']['remplis'] = $nbEval; $evaluation['orderedUsers']['nb'] = $evaluation['nb']; } return $evaluation; } else { return false; } }
$erreur = checkService($value, $erreur); } } else { if ($key == 'dateDebut' || $key == 'dateFin') { // On convertit les dates si elle sont valides $temp = explode('/', $value); if (isset($value) && count($temp) > 3 && checkdate($temp[1], $temp[0], $temp[2])) { $convertedDate = DatetimeToTimestamp(FrenchdateToDatetime($value)); // Date au format timestamp $validDate = TRUE; // Si dateDebut : on refuse le cas où la date est supérieure à la marge sup if ($key == 'dateDebut' && (isset($_POST['dateFin']) && $convertedDate >= DatetimeToTimestamp(FrenchdateToDatetime($_POST['dateFin'])) || $action2 == 'edit' && $convertedDate >= $affectationData['service']['date']['fin'])) { $erreur[13] = TRUE; $validDate = FALSE; } else { if ($key == 'dateFin' && (isset($_POST['dateDebut']) && $convertedDate <= DatetimeToTimestamp(FrenchdateToDatetime($_POST['dateDebut'])) || $action2 == 'edit' && $convertedDate <= $affectationData['service']['date']['debut'])) { $erreur[13] = TRUE; $validDate = FALSE; } } if ($validDate) { $sqlData[$key] = TimestampToDatetime($convertedDate); } } } } } } /* On enregistre les données dans la BDD */
/** * checkAffectation - Vérifie la validité des données d'affectation d'un étudiant et leurs concordance avant de les ajouter dans la base de donnée * * @category : checkFunction * @param int $etudiant Identifiant de l'étudiant * @param int $service Identifiant du service * @param timestamp $dateDebut Date du début de l'affectation * @param timestamp $dateFin Date de fin de l'affectation * @param array $erreur Array contenant la liste des erreurs rencontrées avant execution de la fonction * @return array Array contenant la liste des erreurs rencontrées après execution de la fonction * * @Author Ali Bellamine */ function checkAffectationInsertData($etudiant, $service, $dateDebut, $dateFin, $erreur) { $serviceCheck = FALSE; // On récupère les données sur l'étudiant si il existe if (count(checkUser($etudiant, array())) == 0) { $userData = getUserData($etudiant); } else { $erreur = checkUser($etudiant, $erreur); } // On récupère les infos sur le service if (count(checkService($service, array())) == 0) { $serviceCheck = TRUE; } else { $erreur = checkService($service, $erreur); } // Si le service et l'étudiant sont disponibles, on vérifie que l'étudiant n'est pas déjà inscrit dans le service if (isset($userData) && $serviceCheck) { if (isset($userData['service'][$service])) { $erreur[10] = TRUE; } } // On vérifie les dates if (isset($dateDebut) && (preg_match('#^([0-9]{2})([/-])([0-9]{2})\\2([0-9]{4})$#', $dateDebut, $m) == 1 && checkdate($m[3], $m[1], $m[4]))) { $dateDebutTimestamp = DatetimeToTimestamp($m[4] . '-' . $m[3] . '-' . $m[1]); } else { $erreur[11] = TRUE; } if (isset($dateFin) && (preg_match('#^([0-9]{2})([/-])([0-9]{2})\\2([0-9]{4})$#', $dateFin, $m) == 1 && checkdate($m[3], $m[1], $m[4]))) { $dateFinTimestamp = DatetimeToTimestamp($m[4] . '-' . $m[3] . '-' . $m[1]); } else { $erreur[12] = TRUE; } if (isset($dateDebutTimestamp) && isset($dateFinTimestamp) && $dateDebutTimestamp > $dateFinTimestamp) { $erreur[13] = TRUE; } return $erreur; }
// Fonctions propres à l'affichage des formulaires d'évaluation /* 0. Initialisation des variables */ $erreur = array(); /* 1. Récupération des données */ $evaluationSettingsData = eval_ccpc_getSettings($evaluationData['id']); /* 2. Traitement du formulaire */ if (isset($_POST) && count($_POST) > 0) { if (isset($_POST['dateDebut']) && isset($_POST['dateFin'])) { $TimeStampDateDebut = DatetimeToTimestamp(FrenchdateToDatetime($_POST['dateDebut'])); $TimeStampDateFin = DatetimeToTimestamp(FrenchdateToDatetime($_POST['dateFin'])); if ($TimeStampDateDebut <= $TimeStampDateFin) { // On convertit les dates $evaluationSettingsData['dateDebut'] = $TimeStampDateDebut; $evaluationSettingsData['dateFin'] = $TimeStampDateFin; // On essaie d'enregistrer les réglages if (eval_ccpc_setSettings($evaluationSettingsData)) { // On valide le réglage validateEvaluationSettings(); } else { $erreur['LANG_ERROR_CCPC_UNKNOWN'] = TRUE; } } else { $erreur['LANG_ERROR_CCPC_INVALIDDATE'] = TRUE; } } else {
echo LANG_ADMIN_BUG_MANAGER_TABLE_TITLE_DESCRIPTION; ?> </th> <th><?php echo LANG_ADMIN_BUG_MANAGER_TABLE_TITLE_STATUT; ?> </th> <th></th> </tr> <?php if (isset($bugList) & count($bugList) > 0) { foreach ($bugList as $bugAnnee => $bug) { ?> <tr class = "bodyTR"> <td><?php echo date('d/m/Y', DatetimeToTimestamp($bug['date'])); ?> </td> <td><?php echo $bug['description']; ?> </td> <td style = "color: <?php if ($bug['state'] == 1) { echo 'green'; } else { echo 'red'; } ?> ;"><?php echo constant('LANG_ADMIN_BUG_MANAGER_TABLE_TITLE_STATUT_VALUE_' . $bug['state']);
/** * eval_ccpc_getFilterDetails - Retourne les informations relatives à un filtre à partir de son identifiant * * @category : eval_ccpc_functions * @param int $id Identifiant du filtre * @return array Array contenant les informations relatives au filtre * * @Author Ali Bellamine * * Contenu de l'array retourné :<br> * ['id'] => (int) Identifiant du filtre<br> * ['nom'] => (string) Nom du filtre<br> * ['query'] => (string) Requête relative au filtre<br> * ['promotion'] => (int) 1 si le filtre prend en compte la promotion de l'utilisateur, 0 si il ne le prend pas en compte<br> * ['mail']['titre'] => (string) Objet des mails automatiques envoyés à partir du filtre<br> * ['mail']['objet'] => (string) Contenu des mails automatiques envoyés à partir du filtre<br> * ['icone'] (optionnel) => (string) Chemin vers l'icone du filtre * ['detected'][timestamp de la borne supérieure de l'intervalle temporel de la période détectée][timestamp de la borne inférieure de l'intervalle temporel de la période détectée][id du service][] (optionnel) => (array) informations relatives au service détecté * */ function eval_ccpc_getFilterDetails($id) { if (count(eval_ccpc_checkFiltre($id, array())) == 0) { global $db; $filtre = array(); /** Informations relative aux réglages du filtre **/ $sql = 'SELECT id filtreId,nom filtreNom, query filtreQuery, promotion promotion, mail_titre filtreMailTitre, mail_objet filtreMailObjet, icone icone FROM eval_ccpc_filtres WHERE id = ? LIMIT 1'; $res = $db->prepare($sql); $res->execute(array($id)); if ($res_f = $res->fetch()) { $filtre['id'] = $res_f['filtreId']; $filtre['nom'] = $res_f['filtreNom']; $filtre['query'] = $res_f['filtreQuery']; $filtre['promotion'] = $res_f['promotion']; $filtre['mail']['titre'] = $res_f['filtreMailTitre']; $filtre['mail']['objet'] = $res_f['filtreMailObjet']; if (isset($res_f['icone'])) { $filtre['icone'] = $res_f['icone']; } else { $filtre['icone'] = ''; } } /** Liste des stages détectés par le filtre **/ $sql = 'SELECT id, id_service serviceId, debutStage dateDebut, finStage dateFin, promotion promotion FROM eval_ccpc_filtres_detected WHERE id_filtre = ?'; $res = $db->prepare($sql); $res->execute(array($filtre['id'])); // De la forme : $filtre['detected'][timestamp supérieur de l'intervale][timestamp inférieur de l'intervale][id du service] while ($res_f = $res->fetch()) { $filtre['detected'][DatetimeToTimestamp($res_f['dateFin'])][DatetimeToTimestamp($res_f['dateDebut'])][$res_f['serviceId']]['id'] = $res_f['id']; $filtre['detected'][DatetimeToTimestamp($res_f['dateFin'])][DatetimeToTimestamp($res_f['dateDebut'])][$res_f['serviceId']]['filtre']['id'] = $filtre['id']; $filtre['detected'][DatetimeToTimestamp($res_f['dateFin'])][DatetimeToTimestamp($res_f['dateDebut'])][$res_f['serviceId']]['service']['id'] = $res_f['serviceId']; $filtre['detected'][DatetimeToTimestamp($res_f['dateFin'])][DatetimeToTimestamp($res_f['dateDebut'])][$res_f['serviceId']]['date']['debut'] = DatetimeToTimestamp($res_f['dateDebut']); $filtre['detected'][DatetimeToTimestamp($res_f['dateFin'])][DatetimeToTimestamp($res_f['dateDebut'])][$res_f['serviceId']]['date']['fin'] = DatetimeToTimestamp($res_f['dateFin']); $filtre['detected'][DatetimeToTimestamp($res_f['dateFin'])][DatetimeToTimestamp($res_f['dateDebut'])][$res_f['serviceId']]['promotion'] = $res_f['promotion']; } // On trie les services par ordre décroissant if (isset($filtre['detected'])) { krsort($filtre['detected']); foreach ($filtre['detected'] as $key => $value) { krsort($filtre['detected'][$key]); } } return $filtre; } else { return FALSE; } }
/** * getUserData - Retourne les informations relatives à un utilisateur * * @category userFunction * @param int $id Identifiant de l'utilisateur * @return array Array contenant les informations relatives à l'utilisateur * * @Author Ali Bellamine * * Contenu de l'array retourné :<br> * ['id'] => (int) Identifiant de l'utilisateur<br> * ['nom'] => (string) Nom de l'utilisateur<br> * ['prenom'] => (string) Prénom de l'utilisateur<br> * ['nbEtudiant'] => (string) Numéro d'étudiant de l'utilisateur<br> * ['mail'] => (array) Array contenant les adresses email de l'utilisateur<br> * ['rang'] => (int) Rang de l'utilisateur, de 0 (invité) à 4 (super administrateur)<br> * ['promotion']['id'] (optionnel) => (int) Identifiant de la promotion de l'utilisateur<br> * ['promotion']['nom'] (optionnel) => (string) Nom de la promotion de l'utilisateur<br> * ['service'][identifiant de l'affectation de l'utilisateur][] (optionnel) => (array) Informations relatives au service, voir {@link getServiceInfo()}<br> * ['service'][identifiant de l'affectation de l'utilisateur]['idAffectation] (optionnel) => (int) Identifiant de l'affectation de l'utilisateur<br> * ['service'][identifiant de l'affectation de l'utilisateur]['dateDebut] (optionnel) => (string) Date de début de la période d'affectation sous forme de Timestamp<br> * ['service'][identifiant de l'affectation de l'utilisateur]['dateFin] (optionnel) => (string) Date de fin de la période d'affectation sous forme de Timestamp<br> * ['service'][identifiant de l'affectation de l'utilisateur]['currentAffectation] (optionnel) => (int) 0 si l'utilisateur n'est actuellement pas affecté dans le service, 1 si il y est actuellement affecté<br> * ['chef'][identifiant du service][] (optionnel) => (array) Array contenant les informations relatives au service dont l'utilisateur est chef * */ function getUserData($id) { /* Initialisation des variables */ global $db; // Permet l'accès à la BDD $erreur = array(); $user = array(); /* On vérifie l'existance de l'utilisateur */ $erreur = checkUser($id, $erreur); if (count($erreur) == 0) { // Récupérations des données utilisateur $sql = 'SELECT u.id userId, u.nom userNom, u.prenom userPrenom, u.nbEtudiant nbEtudiant, u.rang userRang, u.mail userMail, p.id promotionId, p.nom promotionNom FROM user u LEFT JOIN promotion p ON u.promotion = p.id WHERE u.id = ? LIMIT 1'; $res = $db->prepare($sql); $res->execute(array($id)); // On construit l'array contenant les données utilisateur if ($res_f = $res->fetch()) { $user['id'] = $res_f['userId']; $user['nom'] = $res_f['userNom']; $user['prenom'] = $res_f['userPrenom']; if (isSerialized($res_f['userMail'])) { $user['mail'] = unserialize($res_f['userMail']); } else { $user['mail'] = array($res_f['userMail']); } if (isset($res_f['nbEtudiant'])) { $user['nbEtudiant'] = $res_f['nbEtudiant']; } else { $user['nbEtudiant'] = ''; } $user['rang'] = $res_f['userRang']; if (isset($res_f['promotionId'])) { $user['promotion']['nom'] = $res_f['promotionNom']; $user['promotion']['id'] = $res_f['promotionId']; } // Si il s'agit d'un étudiant // On récupère les affectations dans les services $sql = 'SELECT s.id serviceId, ae.dateDebut dateDebut, ae.dateFin dateFin, ae.id idAffectation FROM affectationexterne ae INNER JOIN service s ON ae.service = s.id WHERE ae.userId = ? ORDER BY ae.dateFin DESC'; $res = $db->prepare($sql); $res->execute(array($id)); while ($res_f = $res->fetch()) { $user['service'][$res_f['idAffectation']] = getServiceInfo($res_f['serviceId']); $user['service'][$res_f['idAffectation']]['idAffectation'] = $res_f['idAffectation']; $user['service'][$res_f['idAffectation']]['dateDebut'] = DatetimeToTimestamp($res_f['dateDebut']); $user['service'][$res_f['idAffectation']]['dateFin'] = DatetimeToTimestamp($res_f['dateFin']); if ($user['service'][$res_f['idAffectation']]['dateDebut'] < time() and $user['service'][$res_f['idAffectation']]['dateFin'] > time()) { $user['service'][$res_f['idAffectation']]['currentAffectation'] = 1; } else { $user['service'][$res_f['idAffectation']]['currentAffectation'] = 0; } } // Si il s'agit d'un chef // On récupère le service dont il est chef $sql = 'SELECT s.id serviceId FROM service s WHERE s.chef = ?'; $res = $db->prepare($sql); $res->execute(array($id)); while ($res_f = $res->fetch()) { $user['chef'][$res_f['serviceId']] = getServiceInfo($res_f['serviceId']); } } return $user; } else { return false; } }
?> <tr class = "bodyTR" style = "text-align: center;"> <td><?php echo date('d/m/Y', $campaign['evaluationData']['date']['debut']); ?> </td> <td><?php echo date('d/m/Y', $campaign['evaluationData']['date']['fin']); ?> </td> <td><?php echo $campaign['evaluationData']['promotion']['nom']; ?> </td> <td><?php echo date('d/m/Y', DatetimeToTimestamp($campaign['date'])); ?> </td> <td><?php if ($campaign['statut'] == 1) { echo 'Terminé'; } else { echo 'En cours'; } ?> <br />(<span style = "color: green;"><?php echo $campaign['nb'][1]; ?> </span> / <?php echo $campaign['nb'][0] + $campaign['nb'][1]; ?>
$erreur[17] = true; } } else { if ($key == 'dateDebut' || $key == 'dateFin') { // On convertit les dates si elle sont valides $temp = explode('/', $value); if (isset($value) && count($temp) >= 3 && checkdate($temp[1], $temp[0], $temp[2])) { $convertedDate = DatetimeToTimestamp(FrenchdateToDatetime($value)) + 86399; // Date au format timestamp $validDate = TRUE; // Si dateDebut : on refuse le cas où la date est supérieure à la marge sup if ($key == 'dateDebut' && (isset($_POST['dateFin']) && $convertedDate >= DatetimeToTimestamp(FrenchdateToDatetime($_POST['dateFin'])) || $action == 'edit' && $convertedDate >= $evaluation['date']['fin'])) { $erreur[18] = TRUE; $validDate = FALSE; } else { if ($key == 'dateFin' && (isset($_POST['dateDebut']) && $convertedDate <= DatetimeToTimestamp(FrenchdateToDatetime($_POST['dateDebut'])) || $action == 'edit' && $convertedDate <= $evaluation['date']['debut'])) { $erreur[18] = TRUE; $validDate = FALSE; } } if ($validDate) { $sqlData[$key] = TimestampToDatetime($convertedDate); } } } else { if ($key == 'type') { if (count(checkEvaluationType($value, array())) == 0) { $sqlData[$key] = $value; } else { $erreur = checkEvaluationType($value, $erreur); }
/** * getEvaluationCCPCPartialData - Récupère les données d'évaluation de stage, récupération partielles des données * * @category : eval_ccpc_functions * @param int $id Identifiant du service pour lequel on récupère les données * @param int|boolean $promotion Identifiant de la promotion pour laquelle on récupère les données, FALSE si elles sont récupérés indifférement de la promotion * @param string $dateMin Borne inférieure de la période pour laquelle on récupère les données d'évaluation, sous forme de Timestamp * @param string $dateMax Borne supérieure de la période pour laquelle on récupère les données d'évaluation, sous forme de Timestamp * @return array Array contenant les résultats d'évaluation pour un service durant une période donnée et pour une promotion donnée * * @Author Ali Bellamine * * Contenu de l'array retourné :<br> * ['service'][] => (array) Array contenant les données relatives au service (voir getServiceInfo())<br> * ['service']['nbDate'] => (int) Nombre de dates d'évaluation différentes<br> * ['service']['date']['min'] => (string) Borne inférieure de l'intervalle sur lequel on a récupéré les évaluations<br> * ['service']['date']['max'] => (string) Borne supérieure de l'intervalle sur lequel on a récupéré les évaluations<br> * ['service']['nbEvaluation'] => (int) Nombre total d'évaluations<br> * ['service']['promotion'][id de la promotion][] => (int) Promotions représentés dans les résultats d'évaluations<br> * ['service']['hide'] => (int) 1 si le service est masqué de la liste pour les utilisateurs, 0 sinon * ['donnees'] => (array) Contient les données d'évaluation individuelles<br> * ['donnees'][identifiant de l'évaluation]['infos']['date'] => (string) Date de l'évaluation<br> * ['donnees'][identifiant de l'évaluation]['infos']['dateDebut'] => (string) Date de début de la période de stage évaluée<br> * ['donnees'][identifiant de l'évaluation]['infos']['dateFin'] => (string) Date de fin de la période de stage évaluée<br> * ['donnees'][identifiant de l'évaluation]['infos']['promotion']['id'] => (int) Identifiant de la promotion de l'utilisateur ayant remplis l'évaluation<br> * ['donnees'][identifiant de l'évaluation]['infos']['promotion']['nom'] => (string) Nom de la promotion de l'utilisateur ayant remplis l'évaluation<br> * ['donnees'][identifiant de l'évaluation][categorie de la question][nom du champs dans la BDD] => (int) Valeur de la réponse à la question (n'apparaissent que les questions ayant une valeur numérique en réponse)<br> * ['donnees'][categorie de la question]['moyenne'] => (int) Moyenne des réponses aux questions de la catégorie<br> * ['donnees'][categorie de la question]['sommeCoefficients'] => (int) Somme des coefficients des questions de la catégorie<br> * ['donnees'][categorie de la question][nom du champs dans la BDD]['moyenne'] => (int) Moyenne des réponses aux questions du champs<br> * ['donnees']['nb'] => (int) Nombre total d'évaluations * */ function getEvaluationCCPCPartialData($id, $promotion, $dateMin, $dateMax) { global $db; global $bypasslimit; /** Vérification de l'id et des dates **/ if (count(checkService($id, array())) > 0 || !is_numeric($dateMin) || !is_numeric($dateMax)) { return FALSE; } /** Récupération des toutes les évaluations de type select concernant le service dans la base de donnée **/ $listEvaluationItems = array(); $listCat = array(); if (is_file(PLUGIN_PATH . 'formulaire.xml')) { if ($form = simplexml_load_file(PLUGIN_PATH . 'formulaire.xml')) { foreach ($form->categorie as $categorie) { foreach ($categorie->input as $input) { if ($input['type'] == 'select') { $listCat[(string) $categorie['nom']] = (string) $categorie['nom']; // liste des catégories disponible $listEvaluationItems[(string) $input['nomBDD']]['type'] = (string) $categorie['nom']; // Liste des items disponibles $listEvaluationItems[(string) $input['nomBDD']]['nb'] = 0; // Nombre de fois où l'item a été évalué if (isset($input['coefficient']) && $input['coefficient'] > 0) { $listEvaluationItems[(string) $input['nomBDD']]['coefficient'] = (string) $input['coefficient']; } else { $listEvaluationItems[(string) $input['nomBDD']]['coefficient'] = 0; } $max = 0; foreach ($input->option as $option) { if ((int) $option['value'] > $max) { $max = (int) $option['value']; } } $listEvaluationItems[(string) $input['nomBDD']]['max'] = $max; // On enregistre la valeur max que peux obtenir un item } } } } } /* Récupération des résultats dans la BDD */ $sqlData = array('id' => $id); $sqlNbDate = 'SELECT COUNT(DISTINCT e.date) nombreDate FROM eval_ccpc_resultats e INNER JOIN service s ON e.service = s.id WHERE e.service = :id '; // Permet de calculer le nombre de date d'évaluations différentes dispo $sqlNbStudent = 'SELECT COUNT(DISTINCT u.id) nombreEtudiant FROM affectationexterne ae INNER JOIN user u ON u.id = ae.userId WHERE ae.service = :id '; // Permet de calculer le nombre d'étudiants en stage sur la période considérée $sql = 'SELECT e.hide hide, e.id evaluationId, e.service serviceId, e.date evaluationDate, e.debutStage dateDebut, e.finStage dateFin, p.nom promotionNom, e.promotion promotionId'; foreach ($listEvaluationItems as $key => $value) { $sql .= ', e.' . $key . ' ' . $key . ' '; } $sql .= 'FROM eval_ccpc_resultats e INNER JOIN promotion p ON e.promotion = p.id INNER JOIN service s ON e.service = s.id WHERE e.service = :id '; if ($dateMin != 0 && $dateMax != 0) { $sql .= 'AND e.debutStage >= :dateMin AND e.finStage <= :dateMax '; $sqlNbDate .= 'AND e.debutStage >= :dateMin AND e.finStage <= :dateMax '; $sqlNbStudent .= 'AND ae.dateDebut >= :dateMin AND ae.dateFin <= :dateMax '; $sqlData['dateMin'] = TimestampToDatetime($dateMin); $sqlData['dateMax'] = TimestampToDatetime($dateMax); } if (isset($promotion) && is_numeric($promotion) && count(checkPromotion($promotion, array())) == 0) { $sql .= 'AND e.promotion = :promotion '; $sqlNbDate .= 'AND e.promotion = :promotion '; $sqlNbStudent .= 'AND u.promotion = :promotion '; $sqlData['promotion'] = $promotion; } // Si il s'agit d'un étudiant, on affiche que les évaluations vielles de + de 30 jours if ($_SESSION['rang'] <= 1 && $bypasslimit == FALSE) { if (defined('CONFIG_EVAL_CCPC_DELAIDISPOEVAL') && is_numeric(constant('CONFIG_EVAL_CCPC_DELAIDISPOEVAL')) && constant('CONFIG_EVAL_CCPC_DELAIDISPOEVAL') >= 0) { $nbJourAllowedDate = CONFIG_EVAL_CCPC_DELAIDISPOEVAL; } else { $nbJourAllowedDate = 30; } $allowedDate = TimestampToDatetime(time() - $nbJourAllowedDate * 24 * 3600); $sql .= ' AND e.date <= "' . $allowedDate . '" '; $sqlNbDate .= ' AND e.date <= "' . $allowedDate . '" '; } /* Ne pas afficher les évaluations des autres services aux chef de service */ if ($_SESSION['rang'] == 2 && defined('CONFIG_EVAL_CCPC_RESTRICTEVALUATIONACCESSSERVICE') && CONFIG_EVAL_CCPC_RESTRICTEVALUATIONACCESSSERVICE == TRUE && $bypasslimit == FALSE) { $sql .= ' AND s.chef = "' . $_SESSION['id'] . '"'; $sqlNbDate .= ' AND s.chef = "' . $_SESSION['id'] . '"'; } $sql .= 'ORDER BY e.date DESC'; $res = $db->prepare($sql); $res->execute($sqlData); $res_fall = $res->fetchAll(); $res2 = $db->prepare($sqlNbDate); $res2->execute($sqlData); $res2_f = $res2->fetch(); $res3 = $db->prepare($sqlNbStudent); $res3->execute($sqlData); $res3_f = $res3->fetch(); /* Array contenant les résultats */ $serviceEvaluation = array(); // Chemin du fichier temporaire $hash = md5(serialize($res_fall)); $filePath = PLUGIN_PATH . 'cache/' . $hash . '.txt'; // Si le hash existe déjà : on récupère les calculs stockés dans le cache if (is_file($filePath)) { $file = fopen($filePath, 'r'); $serviceEvaluation = unserialize(fread($file, filesize($filePath))); fclose($file); return $serviceEvaluation; } else { $serviceEvaluation['service'] = getServiceInfo($id); $serviceEvaluation['service']['nbDate'] = $res2_f['nombreDate']; $serviceEvaluation['service']['date']['min'] = $dateMin; $serviceEvaluation['service']['date']['max'] = $dateMax; // On ajoute le nombre total d'étudiants pendant la période de stage considéré $serviceEvaluation['service']['nbEvaluation'] = $res3_f['nombreEtudiant']; foreach ($res_fall as $res_f) { $serviceEvaluation['service']['hide'] = $res_f['hide']; /* On enregistre les données de l'évaluation */ $serviceEvaluation['donnees'][$res_f['evaluationId']]['infos']['date'] = DatetimeToTimestamp($res_f['evaluationDate']); $serviceEvaluation['donnees'][$res_f['evaluationId']]['infos']['dateDebut'] = DatetimeToTimestamp($res_f['dateDebut']); $serviceEvaluation['donnees'][$res_f['evaluationId']]['infos']['dateFin'] = DatetimeToTimestamp($res_f['dateFin']); $serviceEvaluation['donnees'][$res_f['evaluationId']]['infos']['promotion']['id'] = $res_f['promotionId']; $serviceEvaluation['donnees'][$res_f['evaluationId']]['infos']['promotion']['nom'] = $res_f['promotionNom']; // On stocke la liste des promotions rencontrées dans $serviceEvaluation['service']['promotion'] if (!isset($serviceEvaluation['service']['promotion'][$res_f['promotionId']])) { $serviceEvaluation['service']['promotion'][$res_f['promotionId']]['id'] = $res_f['promotionId']; $serviceEvaluation['service']['promotion'][$res_f['promotionId']]['nom'] = $res_f['promotionNom']; $serviceEvaluation['service']['promotion'][$res_f['promotionId']]['nb'] = 1; } else { $serviceEvaluation['service']['promotion'][$res_f['promotionId']]['nb']++; // On compte le nombre de fois que chaque promotion apparait } /* On récupère les données d'évaluation */ foreach ($res_f as $key => $value) { if (isset($listEvaluationItems[$key])) { // On incrémente pour le calcul de moyenne if (isset($serviceEvaluation[$listEvaluationItems[$key]['type']][$key]['moyenne'])) { $serviceEvaluation[$listEvaluationItems[$key]['type']][$key]['moyenne'] = $serviceEvaluation[$listEvaluationItems[$key]['type']][$key]['moyenne'] + $value; } else { $serviceEvaluation[$listEvaluationItems[$key]['type']][$key]['moyenne'] = $value; } // On dénombre le nombre d'évaluation pour l'item (permettant de calculer la moyenne) $listEvaluationItems[$key]['nb']++; // On enregistre la valeur $serviceEvaluation['donnees'][$res_f['evaluationId']][$listEvaluationItems[$key]['type']][$key] = $value; } } } /* On calcule les moyennes D'abord des item Puis des catégories rapporté sur 5 */ if (isset($serviceEvaluation['donnees'])) { $serviceEvaluation['nb'] = count($serviceEvaluation['donnees']); foreach ($listEvaluationItems as $key => $value) { if (isset($serviceEvaluation[$value['type']][$key]['moyenne'])) { if (!isset($serviceEvaluation[$value['type']]['sommeCoefficients'])) { $serviceEvaluation[$value['type']]['sommeCoefficients'] = 0; // Somme des coefficients permettant le calcul de la note } if ($listEvaluationItems[$key]['nb'] > 0) { $serviceEvaluation[$value['type']][$key]['moyenne'] = round(5 * $serviceEvaluation[$value['type']][$key]['moyenne'] / ($listEvaluationItems[$key]['nb'] * $listEvaluationItems[$key]['max']), 2); } else { $serviceEvaluation[$value['type']][$key]['moyenne'] = 0; } if (isset($serviceEvaluation[$listEvaluationItems[$key]['type']]['moyenne'])) { $serviceEvaluation[$listEvaluationItems[$key]['type']]['moyenne'] = $serviceEvaluation[$listEvaluationItems[$key]['type']]['moyenne'] + round($serviceEvaluation[$value['type']][$key]['moyenne'] * $listEvaluationItems[$key]['coefficient'], 1); } else { $serviceEvaluation[$listEvaluationItems[$key]['type']]['moyenne'] = round($serviceEvaluation[$value['type']][$key]['moyenne'] * $listEvaluationItems[$key]['coefficient'], 1); } $serviceEvaluation[$value['type']]['sommeCoefficients'] = $serviceEvaluation[$value['type']]['sommeCoefficients'] + $listEvaluationItems[$key]['coefficient']; } } foreach ($listCat as $value) { if (isset($serviceEvaluation[$value]['moyenne'])) { if ($serviceEvaluation[$value]['sommeCoefficients'] > 0) { $serviceEvaluation[$value]['moyenne'] = round($serviceEvaluation[$value]['moyenne'] / $serviceEvaluation[$value]['sommeCoefficients'], 2); } else { $serviceEvaluation[$value]['moyenne'] = 0; } } } // On enregistre le calcul dans le cache $file = fopen($filePath, 'w+'); fputs($file, serialize($serviceEvaluation)); fclose($file); return $serviceEvaluation; } } }
Récupération des données d'évaluations des stages sélectionnés */ $evaluationData = array(); $res = $db->prepare($sqlContent); $res->execute($preparedValue); while ($res_f = $res->fetch()) { $evaluationData[$res_f['serviceId']] = getEvaluationCCPCPartialData($res_f['serviceId'], $filtrePromotion, $filtres['dateMin'], $filtres['dateMax']); } /* Récupération de la liste des périodes de stage correspondant */ $fastSelectData = array(); $res = $db->prepare($fastSelectSql); $res->execute($preparedValue); while ($res_f = $res->fetch()) { $fastSelectData[] = array('dateDebut' => DatetimeToTimestamp($res_f['debutStage']), 'dateFin' => DatetimeToTimestamp($res_f['finStage']), 'promotion' => array('id' => $res_f['promotionId'], 'nom' => $res_f['promotionNom'])); } /* Exportation de la liste des services */ if (isset($_GET['download']) && $_GET['download'] == 'csv') { $exportList = array(); // Liste des services dont on veux exporter les données csv $sqlExport = $coreSqlExport . $whereSqlContent . $groupbySqlContent; $res = $db->prepare($sqlExport); $res->execute($preparedValue); while ($res_f = $res->fetch()) { $exportList[] = $res_f[0]; } // On crée le CSV if (isset($exportList) && count($exportList) > 0) {
} } } /* Date */ if (!isset($filtres['dateMin']) || isset($filtres['dateMin']) && DatetimeToTimestamp($res_f['dateDebut']) < $filtres['dateMin']) { if (isset($_GET['FILTER']) && count($_GET['FILTER']) > 0) { $filtres['dateMin'] = DatetimeToTimestamp($res_f['dateDebut']); } else { $filtres['dateMin'] = time() - 31536000; } } if (!isset($filtres['dateMax']) || isset($filtres['dateMax']) && DatetimeToTimestamp($res_f['dateFin']) > $filtres['dateMax']) { if (isset($_GET['FILTER']) && count($_GET['FILTER']) > 0) { $filtres['dateMax'] = DatetimeToTimestamp($res_f['dateFin']); } else { $filtres['dateMax'] = time(); } } /* Hopitaux */ if (!isset($filtres['hopital'][$res_f['hopitalId']]['nom'])) { $filtres['hopital'][$res_f['hopitalId']]['id'] = $res_f['hopitalId']; $filtres['hopital'][$res_f['hopitalId']]['nom'] = $res_f['hopitalNom']; } if (!isset($filtres['hopital'][$res_f['hopitalId']]['nb'])) { $filtres['hopital'][$res_f['hopitalId']]['nb'] = 1; } else { $filtres['hopital'][$res_f['hopitalId']]['nb']++;
foreach ($listeServices as $service) { $listePromotion = array(); $listeDate = array(); // On détermine la liste des promotions représentées dans le service $sql = 'SELECT DISTINCT promotion FROM `eval_ccpc_resultats` WHERE service = ?'; $res = $db->prepare($sql); $res->execute(array($service['id'])); while ($res_f = $res->fetch()) { $listePromotion[] = $res_f[0]; } // On détermine les couples de dates à tester $sql = 'SELECT DISTINCT debutStage, finStage FROM `eval_ccpc_resultats` WHERE service = ? AND debutStage >= ? AND finStage <= ?'; $res = $db->prepare($sql); $res->execute(array($service['id'], TimestampToDatetime($DateMin), TimestampToDatetime($DateMax))); while ($res_f = $res->fetch()) { $listeDate[] = array('DateMin' => DatetimeToTimestamp($res_f['debutStage']), 'DateMax' => DatetimeToTimestamp($res_f['finStage'])); } // On peux lancer le scan du service foreach ($listeDate as $IntervalleDates) { foreach ($listePromotion as $promotionId) { eval_ccpc_applyFilter($service['id'], $promotionId, $IntervalleDates['DateMin'], $IntervalleDates['DateMax']); } } } $tempGET = $_GET; unset($tempGET['action']); header('Location: ' . ROOT . CURRENT_FILE . '?' . http_build_query($tempGET)); } // Ajout et edition des filtres if (isset($_POST) && count($_POST) > 0) { $postData = array();