Example #1
0
  /**
   * 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&hellip;");
}

//
// 2. Décompression de l'archive...
//
if($action=='verif_file_appli_etape2')
{
  if(is_dir($dossier_dezip))
  {
Example #4
0
 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);
Example #5
0
/**
 * 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&hellip;' ;
}
$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.' &rarr; '.$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);
 }
Example #8
0
      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 );
 }