Exemplo n.º 1
0
 /**
  * Ajouter une structure (mode multi-structures)
  *
  * @param int    $base_id   Pour forcer l'id de la base de la structure ; normalement transmis à 0 (=> auto-increment), sauf dans un cadre de gestion interne à Sésamath
  * @param int    $geo_id
  * @param string $structure_uai
  * @param string $localisation
  * @param string $denomination
  * @param string $contact_nom
  * @param string $contact_prenom
  * @param string $contact_courriel
  * @param string $inscription_date   Pour forcer la date d'inscription, par exemple en cas de transfert de bases académiques (facultatif).
  * @return int
  */
 public static function ajouter_structure($base_id,$geo_id,$structure_uai,$localisation,$denomination,$contact_nom,$contact_prenom,$contact_courriel,$inscription_date=0)
 {
   // Insérer l'enregistrement d'une nouvelle structure dans la base du webmestre
   $base_id = DB_WEBMESTRE_WEBMESTRE::DB_ajouter_structure($base_id,$geo_id,$structure_uai,$localisation,$denomination,$contact_nom,$contact_prenom,$contact_courriel,$inscription_date);
   // Génération des paramètres de connexion à la base de données
   $BD_name = 'sac_base_'.$base_id; // Limité à 64 caractères (tranquille...)
   $BD_user = '******'.$base_id; // Limité à 16 caractères (attention !)
   $BD_pass = fabriquer_mdp();
   // Créer le fichier de connexion de la base de données de la structure
   FileSystem::fabriquer_fichier_connexion_base($base_id,SACOCHE_WEBMESTRE_BD_HOST,SACOCHE_WEBMESTRE_BD_PORT,$BD_name,$BD_user,$BD_pass);
   // Créer la base de données d'une structure, un utilisateur MySQL, et lui attribuer ses droits.
   DB_WEBMESTRE_WEBMESTRE::DB_ajouter_base_structure_et_user_mysql($base_id,$BD_name,$BD_user,$BD_pass);
   /* Il reste à :
     + Lancer les requêtes pour installer et remplir les tables, éventuellement personnaliser certains paramètres de la structure
     + Insérer le compte administrateur dans la base de cette structure, éventuellement lui envoyer un courriel
     + Créer un dossier pour les les vignettes images
   */
   return $base_id;
 }
 if ($box_login) {
     // Construire puis tester le login (parmi tous les utilisateurs de l'établissement)
     $login = fabriquer_login($prenom, $nom, $profil);
     if (DB_STRUCTURE_ADMINISTRATEUR::DB_tester_utilisateur_identifiant('login', $login)) {
         // Login pris : en chercher un autre en remplaçant la fin par des chiffres si besoin
         $login = DB_STRUCTURE_ADMINISTRATEUR::DB_rechercher_login_disponible($login);
     }
 } else {
     // Vérifier que le login transmis est disponible (parmi tous les utilisateurs de l'établissement)
     if (DB_STRUCTURE_ADMINISTRATEUR::DB_tester_utilisateur_identifiant('login', $login)) {
         exit('Erreur : login déjà existant !');
     }
 }
 if ($box_password) {
     // Générer un mdp aléatoire
     $password = fabriquer_mdp($profil);
 } else {
     // Vérifier que le mdp transmis est d'une longueur compatible
     if (mb_strlen($password) < $_SESSION['TAB_PROFILS_ADMIN']['MDP_LONGUEUR_MINI'][$profil]) {
         exit('Erreur : mot de passe trop court pour ce profil !');
     }
 }
 // Vérifier le domaine du serveur mail seulement en mode multi-structures car ce peut être sinon une installation sur un serveur local non ouvert sur l'extérieur.
 if ($courriel) {
     if (HEBERGEUR_INSTALLATION == 'multi-structures') {
         list($mail_domaine, $is_domaine_valide) = tester_domaine_courriel_valide($courriel);
         if (!$is_domaine_valide) {
             exit('Erreur avec le domaine "' . $mail_domaine . '" !');
         }
     }
 }
Exemplo n.º 3
0
if (HEBERGEUR_INSTALLATION == 'multi-structures') {
    $result = charger_parametres_mysql_supplementaires($BASE, FALSE);
    if (!$result) {
        exit_error($TITRE, 'Le code transmis est invalide ou périmé (base inexistante).');
    }
}
// Récupération des données de l'utilisateur
$DB_ROW = DB_STRUCTURE_PUBLIC::DB_recuperer_user_for_new_mdp('user_pass_key', $user_pass_key);
if (empty($DB_ROW)) {
    exit_error($TITRE, 'Le code transmis est invalide ou périmé (absence de correspondance).');
}
if (crypter_mdp($DB_ROW['user_id'] . $DB_ROW['user_email'] . $DB_ROW['user_password'] . $DB_ROW['user_connexion_date']) != $user_pass_key) {
    exit_error($TITRE, 'Le code transmis est périmé (incompatible avec les données actuelles).');
}
// Prendre en compte la demande de changement de mdp
$newpass = fabriquer_mdp();
// On ne transmet pas de profil car necessite sinon une variable de session non définie à ce stade.
DB_STRUCTURE_PUBLIC::DB_modifier_user_password_or_key($DB_ROW['user_id'], crypter_mdp($newpass), '');
// Affichage du résultat (confirmation + identifiants)
?>
<p><label class="valide">Nouveau mot de passe généré avec succès !</label></p>
<p>Veuillez noter vos identifiants de connexion :</p>
<form>
  <label class="tab">Nom d'utilisateur :</label><b><?php 
echo html($DB_ROW['user_login']);
?>
</b><br />
  <label class="tab">Mot de passe :</label><b><?php 
echo $newpass;
?>
</b>
 }
 $denomination     = $DB_ROW['structure_denomination'];
 $contact_nom      = $DB_ROW['structure_contact_nom'];
 $contact_prenom   = $DB_ROW['structure_contact_prenom'];
 $contact_courriel = $DB_ROW['structure_contact_courriel'];
 // Informations sur l'admin : nom / prénom / login.
 $DB_ROW = DB_STRUCTURE_WEBMESTRE::DB_recuperer_admin_identite($admin_id);
 if(empty($DB_ROW))
 {
   exit('Erreur : administrateur introuvable !');
 }
 $admin_nom    = $DB_ROW['user_nom'];
 $admin_prenom = $DB_ROW['user_prenom'];
 $admin_login  = $DB_ROW['user_login'];
 // Générer un nouveau mdp de l'admin
 $admin_password = fabriquer_mdp();
 DB_STRUCTURE_WEBMESTRE::DB_modifier_admin_mdp($admin_id,crypter_mdp($admin_password));
 // Envoyer un courriel au contact et éventuellement une copie du courriel au webmestre
 $courriel_contenu = Webmestre::contenu_courriel_nouveau_mdp( $base_id , $denomination , $contact_nom , $contact_prenom , $admin_nom , $admin_prenom , $admin_login , $admin_password , URL_DIR_SACOCHE );
 $courriel_titre   = 'Modification mdp administrateur - Inscription n°'.$base_id;
 $courriel_bilan = Sesamail::mail( $contact_courriel , $courriel_titre , $courriel_contenu );
 if(!$courriel_bilan)
 {
   exit('Erreur lors de l\'envoi du courriel !');
 }
 if($courriel_copie)
 {
   $introduction = '================================================================================'."\r\n".'Copie pour information du courriel adressé à '.$contact_courriel."\r\n".'================================================================================'."\r\n\r\n";
   $courriel_bilan = Sesamail::mail( WEBMESTRE_COURRIEL , $courriel_titre , $introduction.$courriel_contenu );
   if(!$courriel_bilan)
   {
         }
         DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_user($DB_ROW[$prefixe . 'id'], array(':login' => $login));
         $tab_login[$DB_ROW[$prefixe . 'id']] = $login;
     }
 }
 // ////////////////////////////////////////////////////////////////////////////////////////////////////
 // Initialiser plusieurs mots de passe
 // ////////////////////////////////////////////////////////////////////////////////////////////////////
 if ($action == 'generer_mdp') {
     $tab_password = array();
     // Récupérer les données des utilisateurs concernés (besoin de le faire maintenant, on a besoin des infos pour générer le mdp)
     $listing_champs = $profil != 'parents' ? 'user_id,user_sconet_id,user_sconet_elenoet,user_reference,user_profil_sigle,user_nom,user_prenom,user_login' : 'parent.user_id AS parent_id,parent.user_sconet_id AS parent_sconet_id,parent.user_sconet_elenoet AS parent_sconet_elenoet,parent.user_reference AS parent_reference,parent.user_profil_sigle AS parent_profil_sigle,parent.user_nom AS parent_nom,parent.user_prenom AS parent_prenom,parent.user_login AS parent_login';
     $DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_users_cibles(implode(',', $tab_user), $listing_champs, $avec_info);
     // Mettre à jour les mots de passe des utilisateurs concernés
     foreach ($DB_TAB as $DB_ROW) {
         $password = fabriquer_mdp($DB_ROW[$prefixe . 'profil_sigle']);
         DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_user($DB_ROW[$prefixe . 'id'], array(':password' => crypter_mdp($password)));
         $tab_password[$DB_ROW[$prefixe . 'id']] = $password;
     }
 }
 // ////////////////////////////////////////////////////////////////////////////////////////////////////
 // Forcer plusieurs mots de passe avec la date de naissance
 // ////////////////////////////////////////////////////////////////////////////////////////////////////
 if ($action == 'forcer_mdp_birth') {
     if ($profil != 'eleves') {
         exit('Fonctionnalité disponible uniquement pour les élèves !');
     }
     $tab_password = array();
     // Récupérer les données des utilisateurs concernés (besoin de le faire maintenant, on a besoin des infos pour générer le mdp)
     $listing_champs = $profil != 'parents' ? 'user_id,user_sconet_id,user_sconet_elenoet,user_reference,user_profil_sigle,user_nom,user_prenom,user_naissance_date,user_login,user_naissance_date' : 'parent.user_id AS parent_id,parent.user_sconet_id AS parent_sconet_id,parent.user_sconet_elenoet AS parent_sconet_elenoet,parent.user_reference AS parent_reference,parent.user_profil_sigle AS parent_profil_sigle,parent.user_nom AS parent_nom,parent.user_prenom AS parent_prenom,parent.user_login AS parent_login';
     $DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_users_cibles(implode(',', $tab_user), $listing_champs, $avec_info);
Exemplo n.º 6
0
  echo'<td class="nu">';
  echo  '<q class="modifier" title="Modifier ce partenaire."></q>';
  echo  '<q class="initialiser_mdp" title="Générer un nouveau mdp pour ce partenaire."></q>';
  echo  '<q class="supprimer" title="Retirer ce partenaire."></q>';
  echo'</td>';
  exit();
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Générer un nouveau mdp d'un partenaire conventionné et lui envoyer par courriel
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if( ($action=='initialiser_mdp') && $partenaire_id && $denomination && $nom && $prenom && $courriel )
{
  // Générer un nouveau mdp
  $password = fabriquer_mdp();
  // Mettre à jour l'enregistrement
  DB_WEBMESTRE_WEBMESTRE::DB_modifier_partenaire_conventionne_mdp($partenaire_id,crypter_mdp($password));
  // Envoyer un courriel
  $courriel_contenu = Webmestre::contenu_courriel_partenaire_nouveau_mdp( $denomination , $nom , $prenom , $password , URL_DIR_SACOCHE );
  $courriel_bilan = Sesamail::mail( $courriel , 'Modification mdp compte partenaire ENT' , $courriel_contenu );
  if(!$courriel_bilan)
  {
    exit('Erreur lors de l\'envoi du courriel !');
  }
  // On affiche le retour
  echo'<ok>';
  echo'Le mot de passe de<BR />'.html($prenom.' '.$nom).',<BR />partenaire conventionné<BR />"'.html($denomination).'",<BR />vient d\'être réinitialisé.<BR /><BR />';
  echo'Les nouveaux identifiants<BR />ont été envoyés<BR />à son adresse de courriel<BR />'.html($courriel).'.';
  exit();
}
         $tab_nom_classe[$DB_ROW['groupe_id']] = $DB_ROW['groupe_nom'];
     }
 }
 foreach ($tab_add as $i_fichier) {
     if (isset($tab_memo_analyse['ajouter'][$i_fichier])) {
         // Il peut théoriquement subsister un conflit de sconet_id pour des users ayant même reference, et réciproquement...
         // Construire le login
         $login = fabriquer_login($tab_memo_analyse['ajouter'][$i_fichier]['prenom'], $tab_memo_analyse['ajouter'][$i_fichier]['nom'], $tab_memo_analyse['ajouter'][$i_fichier]['profil_sigle']);
         // Puis tester le login (parmi tout le personnel de l'établissement)
         if (DB_STRUCTURE_ADMINISTRATEUR::DB_tester_utilisateur_identifiant('login', $login)) {
             // Login pris : en chercher un autre en remplaçant la fin par des chiffres si besoin
             $login = DB_STRUCTURE_ADMINISTRATEUR::DB_rechercher_login_disponible($login);
         }
         // Construire le password
         if ($import_profil != 'eleve' || !$_SESSION['TAB_PROFILS_ADMIN']['MDP_LONGUEUR_MINI']['ELV'] || empty($tab_memo_analyse['ajouter'][$i_fichier]['birth_date'])) {
             $password = fabriquer_mdp($tab_memo_analyse['ajouter'][$i_fichier]['profil_sigle']);
         } else {
             $password = str_replace('/', '', $tab_memo_analyse['ajouter'][$i_fichier]['birth_date']);
         }
         // Attention à la date de naissance, définie seulement pour les élèves
         $birth_date = empty($tab_memo_analyse['ajouter'][$i_fichier]['birth_date']) ? NULL : convert_date_french_to_mysql($tab_memo_analyse['ajouter'][$i_fichier]['birth_date']);
         // Ajouter l'utilisateur
         $user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur($tab_memo_analyse['ajouter'][$i_fichier]['sconet_id'], $tab_memo_analyse['ajouter'][$i_fichier]['sconet_num'], $tab_memo_analyse['ajouter'][$i_fichier]['reference'], $tab_memo_analyse['ajouter'][$i_fichier]['profil_sigle'], $tab_memo_analyse['ajouter'][$i_fichier]['genre'], $tab_memo_analyse['ajouter'][$i_fichier]['nom'], $tab_memo_analyse['ajouter'][$i_fichier]['prenom'], $birth_date, $tab_memo_analyse['ajouter'][$i_fichier]['courriel'], $tab_memo_analyse['ajouter'][$i_fichier]['email_origine'], $login, crypter_mdp($password), $tab_memo_analyse['ajouter'][$i_fichier]['classe']);
         if ($import_profil == 'professeur') {
             // Pour les professeurs et directeurs, abonnement obligatoire aux signalements d'un souci pour une appréciation d'un bilan officiel
             DB_STRUCTURE_NOTIFICATION::DB_ajouter_abonnement($user_id, 'bilan_officiel_appreciation', 'accueil');
         }
         $tab_i_fichier_TO_id_base[$i_fichier] = (int) $user_id;
         $nb_add++;
         $tab_password[$user_id] = $password;
         $classe_ou_profil = $import_profil == 'eleve' ? $tab_nom_classe[$tab_memo_analyse['ajouter'][$i_fichier]['classe']] : $tab_memo_analyse['ajouter'][$i_fichier]['profil_sigle'];
Exemplo n.º 8
0
// Récupération des données de l'utilisateur
$DB_ROW = DB_STRUCTURE_PUBLIC::DB_recuperer_user_for_new_mdp('user_pass_key',$user_pass_key);

if(empty($DB_ROW))
{
  exit_error( $TITRE /*titre*/ , 'Le code transmis est invalide ou périmé (absence de correspondance).' /*contenu*/ );
}

if( crypter_mdp($DB_ROW['user_id'].$DB_ROW['user_email'].$DB_ROW['user_password'].$DB_ROW['user_connexion_date']) != $user_pass_key )
{
  exit_error( $TITRE /*titre*/ , 'Le code transmis est périmé (incompatible avec les données actuelles).' /*contenu*/ );
}

// Prendre en compte la demande de changement de mdp
$newpass = fabriquer_mdp(); // On ne transmet pas de profil car necessite sinon une variable de session non définie à ce stade.

DB_STRUCTURE_PUBLIC::DB_modifier_user_password_or_key ($DB_ROW['user_id'] , crypter_mdp($newpass) /*user_password*/ , '' /*user_pass_key*/ );

// Affichage du résultat (confirmation + identifiants)
?>
<p><label class="valide">Nouveau mot de passe généré avec succès !</label></p>
<p>Veuillez noter vos identifiants de connexion :</p>
<form>
  <label class="tab">Nom d'utilisateur :</label><b><?php echo html($DB_ROW['user_login']); ?></b><br />
  <label class="tab">Mot de passe :</label><b><?php echo $newpass; ?></b>
</form>
<p><span class="astuce">Le code transmis étant à usage unique, il ne peut pas être utilisé de nouveau.</span></p>
<hr />
<p class="hc"><a href="./index.php">[ Retour en page d'accueil ]</a></p>
Exemplo n.º 9
0
/**
 * DB_WEBMESTRE_ajouter_structure
 *
 * @param int    $base_id   Pour forcer l'id de la base de la structure ; normalement transmis à 0 (=> auto-increment), sauf dans un cadre de gestion interne à Sésamath
 * @param int    $geo_id
 * @param string $structure_uai
 * @param string $localisation
 * @param string $denomination
 * @param string $contact_nom
 * @param string $contact_prenom
 * @param string $contact_courriel
 * @param string $inscription_date   Pour forcer la date d'inscription, par exemple en cas de transfert de bases académiques (facultatif).
 * @return int
 */
function DB_WEBMESTRE_ajouter_structure($base_id,$geo_id,$structure_uai,$localisation,$denomination,$contact_nom,$contact_prenom,$contact_courriel,$inscription_date=0)
{
	$chaine_date = ($inscription_date) ? ':inscription_date' : 'NOW()' ;
	// Insérer l'enregistrement dans la base du webmestre
	if($base_id==0)
	{
		$DB_SQL = 'INSERT INTO sacoche_structure(geo_id,structure_uai,structure_localisation,structure_denomination,structure_contact_nom,structure_contact_prenom,structure_contact_courriel,structure_inscription_date) ';
		$DB_SQL.= 'VALUES(:geo_id,:structure_uai,:localisation,:denomination,:contact_nom,:contact_prenom,:contact_courriel,'.$chaine_date.')';
		$DB_VAR = array(':geo_id'=>$geo_id,':structure_uai'=>$structure_uai,':localisation'=>$localisation,':denomination'=>$denomination,':contact_nom'=>$contact_nom,':contact_prenom'=>$contact_prenom,':contact_courriel'=>$contact_courriel,':inscription_date'=>$inscription_date);
		DB::query(SACOCHE_WEBMESTRE_BD_NAME , $DB_SQL , $DB_VAR);
		$base_id = DB::getLastOid(SACOCHE_WEBMESTRE_BD_NAME);
	}
	else
	{
		$DB_SQL = 'INSERT INTO sacoche_structure(sacoche_base,geo_id,structure_uai,structure_localisation,structure_denomination,structure_contact_nom,structure_contact_prenom,structure_contact_courriel,structure_inscription_date) ';
		$DB_SQL.= 'VALUES(:base_id,:geo_id,:structure_uai,:localisation,:denomination,:contact_nom,:contact_prenom,:contact_courriel,'.$chaine_date.')';
		$DB_VAR = array(':base_id'=>$base_id,':geo_id'=>$geo_id,':structure_uai'=>$structure_uai,':localisation'=>$localisation,':denomination'=>$denomination,':contact_nom'=>$contact_nom,':contact_prenom'=>$contact_prenom,':contact_courriel'=>$contact_courriel,':inscription_date'=>$inscription_date);
		DB::query(SACOCHE_WEBMESTRE_BD_NAME , $DB_SQL , $DB_VAR);
	}
	// Génération des paramètres de connexion à la base de données
	$BD_name = 'sac_base_'.$base_id; // Limité à 64 caractères (tranquille...)
	$BD_user = '******'.$base_id; // Limité à 16 caractères (attention !)
	$BD_pass = fabriquer_mdp();
	// Créer le fichier de connexion de la base de données de la structure
	fabriquer_fichier_connexion_base($base_id,SACOCHE_WEBMESTRE_BD_HOST,SACOCHE_WEBMESTRE_BD_PORT,$BD_name,$BD_user,$BD_pass);
	// Créer la base de données de la structure
	DB::query(SACOCHE_WEBMESTRE_BD_NAME , 'CREATE DATABASE sac_base_'.$base_id );
	// Créer un utilisateur pour la base de données de la structure et lui attribuer ses droits
	// On doit créer en réalité un user sur "localhost" et un autre sur "%" car on doit pouvoir se connecter suivant les configurations depuis la machine locale comme depuis n'importe quel autre serveur (http://dev.mysql.com/doc/refman/5.0/fr/adding-users.html).
	DB::query(SACOCHE_WEBMESTRE_BD_NAME , 'CREATE USER '.$BD_user.'@"localhost" IDENTIFIED BY "'.$BD_pass.'"' );
	DB::query(SACOCHE_WEBMESTRE_BD_NAME , 'CREATE USER '.$BD_user.'@"%" IDENTIFIED BY "'.$BD_pass.'"' );
	DB::query(SACOCHE_WEBMESTRE_BD_NAME , 'GRANT ALTER, CREATE, DELETE, DROP, INDEX, INSERT, SELECT, UPDATE ON '.$BD_name.'.* TO '.$BD_user.'@"localhost"' );
	DB::query(SACOCHE_WEBMESTRE_BD_NAME , 'GRANT ALTER, CREATE, DELETE, DROP, INDEX, INSERT, SELECT, UPDATE ON '.$BD_name.'.* TO '.$BD_user.'@"%"' );
	/* Il reste à :
		+ Lancer les requêtes pour installer et remplir les tables, éventuellement personnaliser certains paramètres de la structure
		+ Insérer le compte administrateur dans la base de cette structure, éventuellement lui envoyer un courriel
		+ Créer un dossier pour les les vignettes images
	*/
	return $base_id;
}