/** * Méthode pour envoyer une requête à l'annuaire * Retourne un tableau avec les infos ou une chaine d'erreur ou stoppe (exit). * * Pour [api] valeurs [ profs | eleves | parents ] prévues mais pas présentes. * Pour [api] valeurs [ classes | groupes ] n'apportent aucune informations intéressante supplémentaire. * * @param string $uai * @param string $api '' | matieres | users * @param bool $exit_if_error * @param bool $with_details Retourne la même chose sauf pour [api=''] qui ne renvoie que les infos sur l'établissement si [with_details=FALSE] * @return array */ public static function get_info_from_annuaire($uai,$api,$exit_if_error,$with_details) { $annuaire_adresse = ($api) ? Laclasse::ANNUAIRE_API_ETAB.$uai.'/'.$api : Laclasse::ANNUAIRE_API_ETAB.$uai ; $annuaire_tab_param = ($with_details) ? array('expand' => 'true') : array() ; $json_reponse = cURL::get_contents( Laclasse::generer_url_appel( $annuaire_adresse , $annuaire_tab_param ) ); if(substr($json_reponse,0,6)=='Erreur') { // On récupère par exemple // "Erreur : The requested URL returned error: 401 Unauthorized" si UAI étranger // "Erreur : The requested URL returned error: 404 Not Found" si UAI inconnu if($exit_if_error) { exit( json_encode( array( 'error' => $uai.' '.$api.' - '.$json_reponse ) ) ); } else { return $uai.' '.$api.' - '.$json_reponse; } } $tab_reponse = json_decode($json_reponse,TRUE); if($tab_reponse===NULL) { if($exit_if_error) { exit( json_encode( array( 'error' => $uai.' '.$api.' - Chaîne JSON incorrecte : '.$json_reponse ) ) ); } else { return $uai.' '.$api.' - Chaîne JSON incorrecte : '.$json_reponse; } } elseif(isset($tab_reponse['error'])) { // On récupère par exemple {"error":"Non authentifié"} si API non reconnue ou clef d'API incorrecte if($exit_if_error) { exit($json_reponse); } else { return $uai.' '.$api.' - Erreur réponse annuaire : '.$json_reponse; } } return $tab_reponse; }
/** * Appel au serveur communautaire pour tester une authentification comme développeur. * * @param string $password_crypte * @return string 'ok' ou 'Mot de passe incorrect ! Patientez 10s avant une nouvelle tentative.' */ public static function tester_auth_devel($password_crypte) { $tab_post = array(); $tab_post['fichier'] = 'auth_devel_test'; $tab_post['password_crypte'] = $password_crypte; $tab_post['version_prog'] = VERSION_PROG; // Le service web doit être compatible return cURL::get_contents(SERVEUR_COMMUNAUTAIRE,$tab_post); }
// Vérification des fichiers de l'application en place // //////////////////////////////////////////////////////////////////////////////////////////////////// $fichier_import = CHEMIN_DOSSIER_IMPORT.'verification.zip'; $dossier_dezip = CHEMIN_DOSSIER_IMPORT.'SACoche'.DS; $dossier_install = '.'.DS; // // 1. Récupération de l'archive <em>ZIP</em>... // if($action=='verif_file_appli_etape1') { $tab_post = array(); $tab_post['verification'] = 1; $tab_post['version'] = VERSION_PROG; $contenu_zip = cURL::get_contents( SERVEUR_TELECHARGEMENT , $tab_post , 60 /*timeout*/ ); if(substr($contenu_zip,0,6)=='Erreur') { exit(']¤['.'pb'.']¤['.$contenu_zip); } FileSystem::ecrire_fichier($fichier_import,$contenu_zip); exit(']¤['.'ok'.']¤['."Décompression de l'archive…"); } // // 2. Décompression de l'archive... // if($action=='verif_file_appli_etape2') { if(is_dir($dossier_dezip)) {
foreach ($DB_TAB as $DB_ROW) { $tab_radio[$DB_ROW['item_id']] = str_replace('value="' . $DB_ROW['saisie_note'] . '"', 'value="' . $DB_ROW['saisie_note'] . '" checked', $radio_boutons); } // récupérer les commentaires texte ou audio $msg_texte_url = ''; $msg_texte_data = ''; $msg_audio_autre = 'non'; $DB_ROW = DB_STRUCTURE_COMMENTAIRE::DB_recuperer_devoir_commentaires($devoir_id, $eleve_id); if (!empty($DB_ROW)) { if ($DB_ROW['jointure_texte']) { $msg_texte_url = $DB_ROW['jointure_texte']; if (strpos($msg_texte_url, URL_DIR_SACOCHE) === 0) { $fichier_chemin = url_to_chemin($msg_texte_url); $msg_texte_data = is_file($fichier_chemin) ? file_get_contents($fichier_chemin) : 'Erreur : fichier avec le contenu du commentaire non trouvé.'; } else { $msg_texte_data = cURL::get_contents($msg_texte_url); } } if ($DB_ROW['jointure_audio']) { $msg_audio_autre = 'oui'; } } // lignes du tableau à retourner $lignes = ''; foreach ($tab_liste_item as $item_id) { $DB_ROW = $DB_TAB_COMP[$item_id][0]; $item_ref = $DB_ROW['item_ref']; $texte_socle = $DB_ROW['entree_id'] ? '[S] ' : '[–] '; $texte_lien_avant = $DB_ROW['item_lien'] ? '<a target="_blank" href="' . html($DB_ROW['item_lien']) . '">' : ''; $texte_lien_apres = $DB_ROW['item_lien'] ? '</a>' : ''; $boutons = isset($tab_radio[$item_id]) ? $tab_radio[$item_id] : str_replace('value="X"', 'value="X" checked', $radio_boutons);
/** * Récupérer le numéro de la dernière version de SACoche disponible auprès du serveur communautaire. * * @param void * @return string 'AAAA-MM-JJi' ou message d'erreur */ function recuperer_numero_derniere_version() { $requete_reponse = cURL::get_contents(SERVEUR_VERSION); return (preg_match('#^[0-9]{4}\-[0-9]{2}\-[0-9]{2}[a-z]?$#',$requete_reponse)) ? $requete_reponse : 'Dernière version non détectée…' ; }
$proxy_used = (isset($_POST['f_proxy_used'])) ? 'oui' : ''; $proxy_name = (isset($_POST['f_proxy_name'])) ? Clean::texte($_POST['f_proxy_name']) : ''; $proxy_port = (isset($_POST['f_proxy_port'])) ? Clean::entier($_POST['f_proxy_port']) : 0; $proxy_type = (isset($_POST['f_proxy_type'])) ? Clean::texte($_POST['f_proxy_type']) : ''; $proxy_auth_used = (isset($_POST['f_proxy_auth_used'])) ? 'oui' : ''; $proxy_auth_method = (isset($_POST['f_proxy_auth_method'])) ? Clean::texte($_POST['f_proxy_auth_method']) : ''; $proxy_auth_user = (isset($_POST['f_proxy_auth_user'])) ? Clean::texte($_POST['f_proxy_auth_user']) : ''; $proxy_auth_pass = (isset($_POST['f_proxy_auth_pass'])) ? Clean::texte($_POST['f_proxy_auth_pass']) : ''; // //////////////////////////////////////////////////////////////////////////////////////////////////// // Tester les réglages actuellement enregistrés // //////////////////////////////////////////////////////////////////////////////////////////////////// if($action=='tester') { $requete_reponse = cURL::get_contents(SERVEUR_VERSION); $affichage = (preg_match('#^[0-9]{4}\-[0-9]{2}\-[0-9]{2}[a-z]?$#',$requete_reponse)) ? '<label class="valide">Échange réussi avec le serveur '.SERVEUR_PROJET.'</label>' : '<label class="erreur">Échec de l\'échange avec le serveur '.SERVEUR_PROJET.' → '.$requete_reponse.'</label>' ; exit('<h2>Résultat du test</h2>'.$affichage); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Enregistrer des nouveaux réglages // //////////////////////////////////////////////////////////////////////////////////////////////////// FileSystem::fabriquer_fichier_hebergeur_info( array( 'SERVEUR_PROXY_USED' => $proxy_used, 'SERVEUR_PROXY_NAME' => $proxy_name, 'SERVEUR_PROXY_PORT' => $proxy_port, 'SERVEUR_PROXY_TYPE' => $proxy_type, 'SERVEUR_PROXY_AUTH_USED' => $proxy_auth_used, 'SERVEUR_PROXY_AUTH_METHOD' => $proxy_auth_method,
$_SESSION['CAS_SERVEUR']['URL_VALIDATE'] = $cas_serveur_url_validate; exit_json(TRUE); } if ($f_connexion_mode == 'gepi') { // Vérifier les paramètres GEPI-SAML // Le RNE n'étant pas obligatoire, et pas forcément un vrai RNE dans Gepi (pour les établ sans UAI, c'est un identifiant choisi...), on ne vérifie rien. // Pas de vérif particulière de l'empreinte du certificat non plus, ne sachant pas s'il peut y avoir plusieurs formats. // Donc on va se contenter de vraiment vérifier l'URL de Gepi via une requête cURL if (strlen($gepi_saml_url) < 8) { exit_json(FALSE, 'Adresse de GEPI manquante !'); } if (empty($gepi_saml_certif)) { exit_json(FALSE, 'Signature (empreinte du certificat) manquante !'); } $gepi_saml_url = substr($gepi_saml_url, -1) == '/' ? substr($gepi_saml_url, 0, -1) : $gepi_saml_url; $fichier_distant = cURL::get_contents($gepi_saml_url . '/bandeau.css'); // Le mieux serait d'appeler le fichier du web-services... si un jour il y en a un... if (substr($fichier_distant, 0, 6) == 'Erreur') { exit_json(FALSE, 'Adresse de Gepi incorrecte [ ' . $fichier_distant . ' ] !'); } // C'est ok DB_STRUCTURE_COMMUN::DB_modifier_parametres(array('connexion_mode' => $f_connexion_mode, 'connexion_nom' => $f_connexion_nom, 'connexion_departement' => $f_connexion_departement, 'gepi_url' => $gepi_saml_url, 'gepi_rne' => $gepi_saml_rne, 'gepi_certificat_empreinte' => $gepi_saml_certif)); // ne pas oublier de mettre aussi à jour la session (normalement faudrait pas car connecté avec l'ancien mode, mais sinon pb d'initalisation du formulaire) $_SESSION['CONNEXION_MODE'] = $f_connexion_mode; $_SESSION['CONNEXION_NOM'] = $f_connexion_nom; $_SESSION['CONNEXION_DEPARTEMENT'] = $f_connexion_departement; $_SESSION['GEPI_URL'] = $gepi_saml_url; $_SESSION['GEPI_RNE'] = $gepi_saml_rne; $_SESSION['GEPI_CERTIFICAT_EMPREINTE'] = $gepi_saml_certif; exit_json(TRUE); }
FileSystem::ecrire_fichier( CHEMIN_DOSSIER_IMPORT.$fichier_nom , $msg_data ); $msg_url = URL_DIR_IMPORT.$fichier_nom; } $msg_data = $msg_url; } // [texte] => On récupère le contenu du fichier ; pas de html() sinon ce n'est pas décodé dans le textarea... if($msg_objet=='texte') { if(strpos($msg_url,URL_DIR_SACOCHE)===0) { $fichier_chemin = url_to_chemin($msg_url); $msg_data = is_file($fichier_chemin) ? file_get_contents($fichier_chemin) : 'Erreur : fichier avec le contenu du commentaire non trouvé.' ; } else { $msg_data = cURL::get_contents($msg_url); } } // Retour exit('ok'.']¤['.$msg_url.']¤['.$msg_data); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Enregistrer un commentaire texte ou audio // //////////////////////////////////////////////////////////////////////////////////////////////////// if( ( ($action=='enregistrer_texte') || ($action=='enregistrer_audio') ) && $devoir_id && $eleve_id && in_array($msg_autre,array('oui','non')) && $date_visible && $description ) { $msg_objet = substr($action,-5); $date_visible_mysql = convert_date_french_to_mysql($date_visible); // Tester les droits
if($f_connexion_mode=='gepi') { // Vérifier les paramètres GEPI-SAML // Le RNE n'étant pas obligatoire, et pas forcément un vrai RNE dans Gepi (pour les établ sans UAI, c'est un identifiant choisi...), on ne vérifie rien. // Pas de vérif particulière de l'empreinte du certificat non plus, ne sachant pas s'il peut y avoir plusieurs formats. // Donc on va se contenter de vraiment vérifier l'URL de Gepi via une requête cURL if(strlen($gepi_saml_url)<8) { exit_json( FALSE , 'Adresse de GEPI manquante !' ); } if(empty($gepi_saml_certif)) { exit_json( FALSE , 'Signature (empreinte du certificat) manquante !' ); } $gepi_saml_url = (substr($gepi_saml_url,-1)=='/') ? substr($gepi_saml_url,0,-1) : $gepi_saml_url ; $fichier_distant = cURL::get_contents($gepi_saml_url.'/bandeau.css'); // Le mieux serait d'appeler le fichier du web-services... si un jour il y en a un... if(substr($fichier_distant,0,6)=='Erreur') { exit_json( FALSE , 'Adresse de Gepi incorrecte [ '.$fichier_distant.' ] !' ); } // C'est ok DB_STRUCTURE_COMMUN::DB_modifier_parametres( array('connexion_mode'=>$f_connexion_mode,'connexion_nom'=>$f_connexion_nom,'connexion_departement'=>$f_connexion_departement,'gepi_url'=>$gepi_saml_url,'gepi_rne'=>$gepi_saml_rne,'gepi_certificat_empreinte'=>$gepi_saml_certif) ); // ne pas oublier de mettre aussi à jour la session (normalement faudrait pas car connecté avec l'ancien mode, mais sinon pb d'initalisation du formulaire) $_SESSION['CONNEXION_MODE'] = $f_connexion_mode; $_SESSION['CONNEXION_NOM'] = $f_connexion_nom; $_SESSION['CONNEXION_DEPARTEMENT'] = $f_connexion_departement; $_SESSION['GEPI_URL'] = $gepi_saml_url; $_SESSION['GEPI_RNE'] = $gepi_saml_rne; $_SESSION['GEPI_CERTIFICAT_EMPREINTE'] = $gepi_saml_certif; exit_json( TRUE ); }