$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']++; } } /* 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();
/** * getEvaluationCCPCFullData - Récupère l'intégralité des données d'évaluation de stage * * @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 * @param boolean $modere si TRUE on affiche les commentaires modérés, si FALSE on ne les affiche pas * @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> * Contient l'intégralité des données retournés par {@link getEvaluationCCPCPartialData()}<br> * ['donnees'][identifiant de l'évaluation][categorie de la question][nom du champs dans la BDD] => (int) Valeur de la réponse à la question, toutes les données y apparaissent<br> * [Catégorie des données][Nom du champs dans la BDD]['nb'][valeur] => (int) Nombre d'occurence de chaque valeur<br> * [Catégorie des données][Nom du champs dans la BDD]['nbTotal'] => (int) Nombre total de réponses pour le champs donné<br> * [Catégorie des données][Nom du champs dans la BDD][] => (string) Pour champs texte uniquement, contient toutes les réponses données dans le champs * */ function getEvaluationCCPCFullData($id, $promotion, $dateMin, $dateMax, $modere = FALSE) { global $db; global $bypasslimit; // On récupère des données de la page d'accueil $evaluationData = getEvaluationCCPCPartialData($id, $promotion, $dateMin, $dateMax); if (!isset($evaluationData) || $evaluationData == FALSE) { return FALSE; } /** Récupération des toutes les évaluations de type différent de select concernant le service dans la base de donnée **/ $listEvaluationItems = array(); $listTextItems = array(); // Liste des champs à ne pas dénombrer $listChamp = array(); if (is_file(PLUGIN_PATH . 'formulaire.xml')) { if ($form = simplexml_load_file(PLUGIN_PATH . 'formulaire.xml')) { foreach ($form->categorie as $categorie) { $listChamp[(string) $categorie['nom']] = array(); foreach ($categorie->input as $input) { if ($input['type'] == 'select') { $listChamp[(string) $categorie['nom']][] = (string) $input['nomBDD']; } if ($input['type'] == 'radio' || $input['type'] == 'textarea') { $listChamp[(string) $categorie['nom']][] = (string) $input['nomBDD']; $listEvaluationItems[(string) $input['nomBDD']]['type'] = (string) $categorie['nom']; if ($input['type'] == 'radio') { $listEvaluationItems[(string) $input['nomBDD']]['value'] = array(); foreach ($input->radio as $radio) { $listEvaluationItems[(string) $input['nomBDD']]['value'][] = (string) $radio['value']; } } if ($input['type'] == 'textarea') { $listTextItems[(string) $input['nomBDD']] = (string) $categorie['nom']; } } else { if ($input['type'] == 'checkbox') { foreach ($input->checkbox as $checkbox) { $listChamp[(string) $categorie['nom']][] = (string) $checkbox['nomBDD']; $listEvaluationItems[(string) $checkbox['nomBDD']]['type'] = (string) $categorie['nom']; $listEvaluationItems[(string) $checkbox['nomBDD']]['value'] = array(0, 1); } } else { if ($input['type'] == 'text') { foreach ($input->text as $text) { $listChamp[(string) $categorie['nom']][] = (string) $text['nomBDD']; $listTextItems[(string) $text['nomBDD']] = (string) $categorie['nom']; $listEvaluationItems[(string) $text['nomBDD']]['type'] = (string) $categorie['nom']; } } } } } } } } /** On récupère les données non récupérés dans getEvaluationCCPCPartialData **/ $sqlData = array('id' => $id); $sql = 'SELECT e.id evaluationId, e.moderation moderation'; foreach ($listEvaluationItems as $key => $value) { $sql .= ', e.' . $key . ' ' . $key . ' '; } $sql .= 'FROM eval_ccpc_resultats e 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 '; $sqlData['dateMin'] = TimestampToDatetime($dateMin); $sqlData['dateMax'] = TimestampToDatetime($dateMax); } if (isset($promotion) && is_numeric($promotion) && count(checkPromotion($promotion, array())) == 0) { $sql .= 'AND e.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 . '" '; } /* 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'] . '"'; } $res = $db->prepare($sql); $res->execute($sqlData); while ($res_f = $res->fetch()) { // On récupére la liste des champs textes modérés if (isset($res_f['moderation']) && unserialize($res_f['moderation'])) { $moderationArray = unserialize($res_f['moderation']); } else { $moderationArray = array(); } // On remplit l'array de résultats foreach ($res_f as $key => $value) { // On enregistre l'évaluation if (isset($listEvaluationItems[$key]) && $value != '') { $evaluationData['donnees'][$res_f['evaluationId']][$listEvaluationItems[$key]['type']][$key] = $value; } // On stocke à part les évaluation de type text if (isset($listTextItems[$key])) { if ($value != '') { // On enregistre le fait que ça soit modéré if (isset($moderationArray[$key])) { $evaluationData['donnees'][$res_f['evaluationId']]['Moderation'][$key] = TRUE; } if (!isset($moderationArray[$key]) || $modere) { $evaluationData[$listTextItems[$key]][$key][$res_f['evaluationId']] = $value; } else { $evaluationData[$listTextItems[$key]][$key][$res_f['evaluationId']] = LANG_FORM_CCPC_QUESTION_TEXT_MODERATE; } } } } } /** On compte les réponses et on enregistre combien il y a de chaque réponse **/ foreach ($evaluationData['donnees'] as $id => $valeur) { foreach ($listChamp as $champType => $champValeur) { foreach ($champValeur as $champ) { if (!isset($listTextItems[$champ]) && isset($valeur[$champType][$champ])) { /* On compte l'item */ if (!isset($evaluationData[$champType][$champ]['nb'][$valeur[$champType][$champ]]) || !is_numeric($evaluationData[$champType][$champ]['nb'][$valeur[$champType][$champ]])) { $evaluationData[$champType][$champ]['nb'][$valeur[$champType][$champ]] = 1; } else { $evaluationData[$champType][$champ]['nb'][$valeur[$champType][$champ]]++; } /* On calcul le total */ if (!isset($evaluationData[$champType][$champ]['nbTotal']) || !is_numeric($evaluationData[$champType][$champ]['nbTotal'])) { $evaluationData[$champType][$champ]['nbTotal'] = 1; } else { $evaluationData[$champType][$champ]['nbTotal']++; } } } } } /** On corrige met 0 aux valeurs non cochés pour les questions où les réponses possibles sont exhaustives **/ foreach ($listEvaluationItems as $listFixQuestionName => $listFixQuestionValue) { if (isset($listFixQuestionValue['value'])) { foreach ($listFixQuestionValue['value'] as $listFixQuestionPossibilite) { if (!isset($evaluationData[$listFixQuestionValue['type']][$listFixQuestionName]['nb'][$listFixQuestionPossibilite])) { $evaluationData[$listFixQuestionValue['type']][$listFixQuestionName]['nb'][$listFixQuestionPossibilite] = 0; } } } } return $evaluationData; }
} else { $moderate = FALSE; } /** Récupération des informations concernant le service **/ if ($evaluationContentType == 'stat' || $evaluationContentType == 'data') { $evaluationData = getEvaluationCCPCFullData($_GET['service'], $promotion, $dateDebut, $dateFin, $moderate); } else { if ($evaluationContentType == 'history') { $evaluationData['evaluations'] = array(); // Array qui contiendra toutes les données $listeDate = listeMoisEntreDeuxDates($dateDebut, $dateFin); // Liste des dates d'évaluations dispo dans l'intervalle temporel choisit par l'utilisateur foreach ($listeDate as $dateKey => $date) { $tempEvaluationData = getEvaluationCCPCPartialData($_GET['service'], $promotion, $dateDebut, strtotime($date['Annee'] . '-' . $date['MoisNb'] . '-01 +1 month') - 1); // On récupère les données à la date choisie /** On stocke les informations concernant le service **/ if (!isset($evaluationData['service'])) { $evaluationData['service'] = $tempEvaluationData['service']; } unset($tempEvaluationData['service']); /** On enregistre les données lorsqu'elles sont différentes des précédentes **/ if (count($evaluationData['evaluations']) > 0 && $evaluationData['evaluations'][count($evaluationData['evaluations']) - 1]['stat'] !== $tempEvaluationData || count($evaluationData['evaluations']) == 0) { $evaluationData['evaluations'][] = array('date' => $date, 'stat' => $tempEvaluationData); } }